@tuongaz/seeflow 0.1.39 → 0.1.40
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.
- package/README.md +4 -4
- package/dist/web/assets/{index-B5Aku4dw.js → index-DTNk6GGk.js} +1 -1
- package/dist/web/assets/{index.es-PUp1NFtk.js → index.es-D_iCCj4R.js} +1 -1
- package/dist/web/assets/{jspdf.es.min-zaUNYWJ0.js → jspdf.es.min-C9FG4HQT.js} +3 -3
- package/dist/web/index.html +1 -1
- package/package.json +1 -1
- package/src/cli.ts +9 -9
|
@@ -7835,4 +7835,4 @@ For more information, see https://radix-ui.com/primitives/docs/components/${t.do
|
|
|
7835
7835
|
`))}function l(p,k,v,w){const g=v.enter("tableCell"),M=v.enter("phrasing"),x=v.containerPhrasing(p,{...w,before:i,after:i});return M(),g(),x}function c(p,k){return Pxe(p,{align:k,alignDelimiters:r,padding:n,stringLength:o})}function h(p,k,v){const w=p.children;let g=-1;const M=[],x=k.enter("table");for(;++g<w.length;)M[g]=d(w[g],k,v);return x(),M}function d(p,k,v){const w=p.children;let g=-1;const M=[],x=k.enter("tableRow");for(;++g<w.length;)M[g]=l(w[g],p,k,v);return x(),M}function f(p,k,v){let w=FQ.inlineCode(p,k,v);return v.stack.includes("tableCell")&&(w=w.replace(/\|/g,"\\$&")),w}}function kve(){return{exit:{taskListCheckValueChecked:ZV,taskListCheckValueUnchecked:ZV,paragraph:xve}}}function gve(){return{unsafe:[{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{listItem:vve}}}function ZV(e){const t=this.stack[this.stack.length-2];t.type,t.checked=e.type==="taskListCheckValueChecked"}function xve(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 i=-1,a;for(;++i<o.length;){const s=o[i];if(s.type==="paragraph"){a=s;break}}a===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 vve(e,t,n,r){const o=e.children[0],i=typeof e.checked=="boolean"&&o&&o.type==="paragraph",a="["+(e.checked?"x":" ")+"] ",s=n.createTracker(r);i&&s.move(a);let l=FQ.listItem(e,t,n,{...r,...s.current()});return i&&(l=l.replace(/^(?:[*+-]|\d+\.)([\r\n]| {1,3})/,c)),l;function c(h){return h+a}}function wve(){return[J5e(),vxe(),Cxe(),uve(),kve()]}function Mve(e){return{extensions:[exe(),wxe(e),Sxe(),mve(e),gve()]}}const bve={tokenize:Ave,partial:!0},OQ={tokenize:Pve,partial:!0},qQ={tokenize:Rve,partial:!0},VQ={tokenize:zve,partial:!0},Cve={tokenize:jve,partial:!0},BQ={name:"wwwAutolink",tokenize:Ive,previous:UQ},$Q={name:"protocolAutolink",tokenize:Eve,previous:WQ},Yo={name:"emailAutolink",tokenize:Lve,previous:GQ},wo={};function Sve(){return{text:wo}}let sa=48;for(;sa<123;)wo[sa]=Yo,sa++,sa===58?sa=65:sa===91&&(sa=97);wo[43]=Yo;wo[45]=Yo;wo[46]=Yo;wo[95]=Yo;wo[72]=[Yo,$Q];wo[104]=[Yo,$Q];wo[87]=[Yo,BQ];wo[119]=[Yo,BQ];function Lve(e,t,n){const r=this;let o,i;return a;function a(d){return!tD(d)||!GQ.call(r,r.previous)||MH(r.events)?n(d):(e.enter("literalAutolink"),e.enter("literalAutolinkEmail"),s(d))}function s(d){return tD(d)?(e.consume(d),s):d===64?(e.consume(d),l):n(d)}function l(d){return d===46?e.check(Cve,h,c)(d):d===45||d===95||tn(d)?(i=!0,e.consume(d),l):h(d)}function c(d){return e.consume(d),o=!0,l}function h(d){return i&&o&&cn(r.previous)?(e.exit("literalAutolinkEmail"),e.exit("literalAutolink"),t(d)):n(d)}}function Ive(e,t,n){const r=this;return o;function o(a){return a!==87&&a!==119||!UQ.call(r,r.previous)||MH(r.events)?n(a):(e.enter("literalAutolink"),e.enter("literalAutolinkWww"),e.check(bve,e.attempt(OQ,e.attempt(qQ,i),n),n)(a))}function i(a){return e.exit("literalAutolinkWww"),e.exit("literalAutolink"),t(a)}}function Eve(e,t,n){const r=this;let o="",i=!1;return a;function a(d){return(d===72||d===104)&&WQ.call(r,r.previous)&&!MH(r.events)?(e.enter("literalAutolink"),e.enter("literalAutolinkHttp"),o+=String.fromCodePoint(d),e.consume(d),s):n(d)}function s(d){if(cn(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),l}return n(d)}function l(d){return d===47?(e.consume(d),i?c:(i=!0,l)):n(d)}function c(d){return d===null||vR(d)||ut(d)||o1(d)||Pz(d)?n(d):e.attempt(OQ,e.attempt(qQ,h),n)(d)}function h(d){return e.exit("literalAutolinkHttp"),e.exit("literalAutolink"),t(d)}}function Ave(e,t,n){let r=0;return o;function o(a){return(a===87||a===119)&&r<3?(r++,e.consume(a),o):a===46&&r===3?(e.consume(a),i):n(a)}function i(a){return a===null?n(a):t(a)}}function Pve(e,t,n){let r,o,i;return a;function a(c){return c===46||c===95?e.check(VQ,l,s)(c):c===null||ut(c)||o1(c)||c!==45&&Pz(c)?l(c):(i=!0,e.consume(c),a)}function s(c){return c===95?r=!0:(o=r,r=void 0),e.consume(c),a}function l(c){return o||r||!i?n(c):t(c)}}function Rve(e,t){let n=0,r=0;return o;function o(a){return a===40?(n++,e.consume(a),o):a===41&&r<n?i(a):a===33||a===34||a===38||a===39||a===41||a===42||a===44||a===46||a===58||a===59||a===60||a===63||a===93||a===95||a===126?e.check(VQ,t,i)(a):a===null||ut(a)||o1(a)?t(a):(e.consume(a),o)}function i(a){return a===41&&r++,e.consume(a),o}}function zve(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),i):s===93?(e.consume(s),o):s===60||s===null||ut(s)||o1(s)?t(s):n(s)}function o(s){return s===null||s===40||s===91||ut(s)||o1(s)?t(s):r(s)}function i(s){return cn(s)?a(s):n(s)}function a(s){return s===59?(e.consume(s),r):cn(s)?(e.consume(s),a):n(s)}}function jve(e,t,n){return r;function r(i){return e.consume(i),o}function o(i){return tn(i)?n(i):t(i)}}function UQ(e){return e===null||e===40||e===42||e===95||e===91||e===93||e===126||ut(e)}function WQ(e){return!cn(e)}function GQ(e){return!(e===47||tD(e))}function tD(e){return e===43||e===45||e===46||e===95||tn(e)}function MH(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 Tve={tokenize:Vve,partial:!0};function Nve(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:Fve,continuation:{tokenize:Ove},exit:qve}},text:{91:{name:"gfmFootnoteCall",tokenize:Hve},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:Dve,resolveTo:_ve}}}}function Dve(e,t,n){const r=this;let o=r.events.length;const i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let a;for(;o--;){const l=r.events[o][1];if(l.type==="labelImage"){a=l;break}if(l.type==="gfmFootnoteCall"||l.type==="labelLink"||l.type==="label"||l.type==="image"||l.type==="link")break}return s;function s(l){if(!a||!a._balanced)return n(l);const c=Pr(r.sliceSerialize({start:a.end,end:r.now()}));return c.codePointAt(0)!==94||!i.includes(c.slice(1))?n(l):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(l),e.exit("gfmFootnoteCallLabelMarker"),t(l))}}function _ve(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 i={type:"gfmFootnoteCallString",start:Object.assign({},o.end),end:Object.assign({},e[e.length-1][1].start)},a={type:"chunkString",contentType:"string",start:Object.assign({},i.start),end:Object.assign({},i.end)},s=[e[n+1],e[n+2],["enter",r,t],e[n+3],e[n+4],["enter",o,t],["exit",o,t],["enter",i,t],["enter",a,t],["exit",a,t],["exit",i,t],e[e.length-2],e[e.length-1],["exit",r,t]];return e.splice(n,e.length-n+1,...s),e}function Hve(e,t,n){const r=this,o=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let i=0,a;return s;function s(d){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(d),e.exit("gfmFootnoteCallLabelMarker"),l}function l(d){return d!==94?n(d):(e.enter("gfmFootnoteCallMarker"),e.consume(d),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",c)}function c(d){if(i>999||d===93&&!a||d===null||d===91||ut(d))return n(d);if(d===93){e.exit("chunkString");const f=e.exit("gfmFootnoteCallString");return o.includes(Pr(r.sliceSerialize(f)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(d),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),t):n(d)}return ut(d)||(a=!0),i++,e.consume(d),d===92?h:c}function h(d){return d===91||d===92||d===93?(e.consume(d),i++,c):c(d)}}function Fve(e,t,n){const r=this,o=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let i,a=0,s;return l;function l(k){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(k),e.exit("gfmFootnoteDefinitionLabelMarker"),c}function c(k){return k===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(k),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",h):n(k)}function h(k){if(a>999||k===93&&!s||k===null||k===91||ut(k))return n(k);if(k===93){e.exit("chunkString");const v=e.exit("gfmFootnoteDefinitionLabelString");return i=Pr(r.sliceSerialize(v)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(k),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),f}return ut(k)||(s=!0),a++,e.consume(k),k===92?d:h}function d(k){return k===91||k===92||k===93?(e.consume(k),a++,h):h(k)}function f(k){return k===58?(e.enter("definitionMarker"),e.consume(k),e.exit("definitionMarker"),o.includes(i)||o.push(i),Xe(e,p,"gfmFootnoteDefinitionWhitespace")):n(k)}function p(k){return t(k)}}function Ove(e,t,n){return e.check(Gh,t,e.attempt(Tve,t,n))}function qve(e){e.exit("gfmFootnoteDefinition")}function Vve(e,t,n){const r=this;return Xe(e,o,"gfmFootnoteDefinitionIndent",5);function o(i){const a=r.events[r.events.length-1];return a&&a[1].type==="gfmFootnoteDefinitionIndent"&&a[2].sliceSerialize(a[1],!0).length===4?t(i):n(i)}}function Bve(e){let n=(e||{}).singleTilde;const r={name:"strikethrough",tokenize:i,resolveAll:o};return n==null&&(n=!0),{text:{126:r},insideSpan:{null:[r]},attentionMarkers:{null:[126]}};function o(a,s){let l=-1;for(;++l<a.length;)if(a[l][0]==="enter"&&a[l][1].type==="strikethroughSequenceTemporary"&&a[l][1]._close){let c=l;for(;c--;)if(a[c][0]==="exit"&&a[c][1].type==="strikethroughSequenceTemporary"&&a[c][1]._open&&a[l][1].end.offset-a[l][1].start.offset===a[c][1].end.offset-a[c][1].start.offset){a[l][1].type="strikethroughSequence",a[c][1].type="strikethroughSequence";const h={type:"strikethrough",start:Object.assign({},a[c][1].start),end:Object.assign({},a[l][1].end)},d={type:"strikethroughText",start:Object.assign({},a[c][1].end),end:Object.assign({},a[l][1].start)},f=[["enter",h,s],["enter",a[c][1],s],["exit",a[c][1],s],["enter",d,s]],p=s.parser.constructs.insideSpan.null;p&&Gn(f,f.length,0,Rz(p,a.slice(c+1,l),s)),Gn(f,f.length,0,[["exit",d,s],["enter",a[l][1],s],["exit",a[l][1],s],["exit",h,s]]),Gn(a,c-1,l-c+3,f),l=c+f.length-2;break}}for(l=-1;++l<a.length;)a[l][1].type==="strikethroughSequenceTemporary"&&(a[l][1].type="data");return a}function i(a,s,l){const c=this.previous,h=this.events;let d=0;return f;function f(k){return c===126&&h[h.length-1][1].type!=="characterEscape"?l(k):(a.enter("strikethroughSequenceTemporary"),p(k))}function p(k){const v=Ou(c);if(k===126)return d>1?l(k):(a.consume(k),d++,p);if(d<2&&!n)return l(k);const w=a.exit("strikethroughSequenceTemporary"),g=Ou(k);return w._open=!g||g===2&&!!v,w._close=!v||v===2&&!!g,s(k)}}}class $ve{constructor(){this.map=[]}add(t,n,r){Uve(this,t,n,r)}consume(t){if(this.map.sort(function(i,a){return i[0]-a[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 i of o)t.push(i);o=r.pop()}this.map.length=0}}function Uve(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 Wve(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 i=r.length-1;r[i]=r[i]==="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 Gve(){return{flow:{null:{name:"table",tokenize:Zve,resolveAll:Kve}}}}function Zve(e,t,n){const r=this;let o=0,i=0,a;return s;function s(E){let z=r.events.length-1;for(;z>-1;){const R=r.events[z][1].type;if(R==="lineEnding"||R==="linePrefix")z--;else break}const A=z>-1?r.events[z][1].type:null,U=A==="tableHead"||A==="tableRow"?C:l;return U===C&&r.parser.lazy[r.now().line]?n(E):U(E)}function l(E){return e.enter("tableHead"),e.enter("tableRow"),c(E)}function c(E){return E===124||(a=!0,i+=1),h(E)}function h(E){return E===null?n(E):ze(E)?i>1?(i=0,r.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(E),e.exit("lineEnding"),p):n(E):Ge(E)?Xe(e,h,"whitespace")(E):(i+=1,a&&(a=!1,o+=1),E===124?(e.enter("tableCellDivider"),e.consume(E),e.exit("tableCellDivider"),a=!0,h):(e.enter("data"),d(E)))}function d(E){return E===null||E===124||ut(E)?(e.exit("data"),h(E)):(e.consume(E),E===92?f:d)}function f(E){return E===92||E===124?(e.consume(E),d):d(E)}function p(E){return r.interrupt=!1,r.parser.lazy[r.now().line]?n(E):(e.enter("tableDelimiterRow"),a=!1,Ge(E)?Xe(e,k,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(E):k(E))}function k(E){return E===45||E===58?w(E):E===124?(a=!0,e.enter("tableCellDivider"),e.consume(E),e.exit("tableCellDivider"),v):S(E)}function v(E){return Ge(E)?Xe(e,w,"whitespace")(E):w(E)}function w(E){return E===58?(i+=1,a=!0,e.enter("tableDelimiterMarker"),e.consume(E),e.exit("tableDelimiterMarker"),g):E===45?(i+=1,g(E)):E===null||ze(E)?b(E):S(E)}function g(E){return E===45?(e.enter("tableDelimiterFiller"),M(E)):S(E)}function M(E){return E===45?(e.consume(E),M):E===58?(a=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(E),e.exit("tableDelimiterMarker"),x):(e.exit("tableDelimiterFiller"),x(E))}function x(E){return Ge(E)?Xe(e,b,"whitespace")(E):b(E)}function b(E){return E===124?k(E):E===null||ze(E)?!a||o!==i?S(E):(e.exit("tableDelimiterRow"),e.exit("tableHead"),t(E)):S(E)}function S(E){return n(E)}function C(E){return e.enter("tableRow"),L(E)}function L(E){return E===124?(e.enter("tableCellDivider"),e.consume(E),e.exit("tableCellDivider"),L):E===null||ze(E)?(e.exit("tableRow"),t(E)):Ge(E)?Xe(e,L,"whitespace")(E):(e.enter("data"),P(E))}function P(E){return E===null||E===124||ut(E)?(e.exit("data"),L(E)):(e.consume(E),E===92?T:P)}function T(E){return E===92||E===124?(e.consume(E),P):P(E)}}function Kve(e,t){let n=-1,r=!0,o=0,i=[0,0,0,0],a=[0,0,0,0],s=!1,l=0,c,h,d;const f=new $ve;for(;++n<e.length;){const p=e[n],k=p[1];p[0]==="enter"?k.type==="tableHead"?(s=!1,l!==0&&(KV(f,t,l,c,h),h=void 0,l=0),c={type:"table",start:Object.assign({},k.start),end:Object.assign({},k.end)},f.add(n,0,[["enter",c,t]])):k.type==="tableRow"||k.type==="tableDelimiterRow"?(r=!0,d=void 0,i=[0,0,0,0],a=[0,n+1,0,0],s&&(s=!1,h={type:"tableBody",start:Object.assign({},k.start),end:Object.assign({},k.end)},f.add(n,0,[["enter",h,t]])),o=k.type==="tableDelimiterRow"?2:h?3:1):o&&(k.type==="data"||k.type==="tableDelimiterMarker"||k.type==="tableDelimiterFiller")?(r=!1,a[2]===0&&(i[1]!==0&&(a[0]=a[1],d=G0(f,t,i,o,void 0,d),i=[0,0,0,0]),a[2]=n)):k.type==="tableCellDivider"&&(r?r=!1:(i[1]!==0&&(a[0]=a[1],d=G0(f,t,i,o,void 0,d)),i=a,a=[i[1],n,0,0])):k.type==="tableHead"?(s=!0,l=n):k.type==="tableRow"||k.type==="tableDelimiterRow"?(l=n,i[1]!==0?(a[0]=a[1],d=G0(f,t,i,o,n,d)):a[1]!==0&&(d=G0(f,t,a,o,n,d)),o=0):o&&(k.type==="data"||k.type==="tableDelimiterMarker"||k.type==="tableDelimiterFiller")&&(a[3]=n)}for(l!==0&&KV(f,t,l,c,h),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=Wve(t.events,n))}return e}function G0(e,t,n,r,o,i){const a=r===1?"tableHeader":r===2?"tableDelimiter":"tableData",s="tableContent";n[0]!==0&&(i.end=Object.assign({},N1(t.events,n[0])),e.add(n[0],0,[["exit",i,t]]));const l=N1(t.events,n[1]);if(i={type:a,start:Object.assign({},l),end:Object.assign({},l)},e.add(n[1],0,[["enter",i,t]]),n[2]!==0){const c=N1(t.events,n[2]),h=N1(t.events,n[3]),d={type:s,start:Object.assign({},c),end:Object.assign({},h)};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 k=n[2]+1,v=n[3]-n[2]-1;e.add(k,v,[])}}e.add(n[3]+1,0,[["exit",d,t]])}return o!==void 0&&(i.end=Object.assign({},N1(t.events,o)),e.add(o,0,[["exit",i,t]]),i=void 0),i}function KV(e,t,n,r,o){const i=[],a=N1(t.events,n);o&&(o.end=Object.assign({},a),i.push(["exit",o,t])),r.end=Object.assign({},a),i.push(["exit",r,t]),e.add(n+1,0,i)}function N1(e,t){const n=e[t],r=n[0]==="enter"?"start":"end";return n[1][r]}const Xve={name:"tasklistCheck",tokenize:Qve};function Yve(){return{text:{91:Xve}}}function Qve(e,t,n){const r=this;return o;function o(l){return r.previous!==null||!r._gfmTasklistFirstContentOfListItem?n(l):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(l),e.exit("taskListCheckMarker"),i)}function i(l){return ut(l)?(e.enter("taskListCheckValueUnchecked"),e.consume(l),e.exit("taskListCheckValueUnchecked"),a):l===88||l===120?(e.enter("taskListCheckValueChecked"),e.consume(l),e.exit("taskListCheckValueChecked"),a):n(l)}function a(l){return l===93?(e.enter("taskListCheckMarker"),e.consume(l),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),s):n(l)}function s(l){return ze(l)?t(l):Ge(l)?e.check({tokenize:Jve},t,n)(l):n(l)}}function Jve(e,t,n){return Xe(e,r,"whitespace");function r(o){return o===null?n(o):t(o)}}function e3e(e){return rQ([Sve(),Nve(),Bve(e),Gve(),Yve()])}const t3e={};function n3e(e){const t=this,n=e||t3e,r=t.data(),o=r.micromarkExtensions||(r.micromarkExtensions=[]),i=r.fromMarkdownExtensions||(r.fromMarkdownExtensions=[]),a=r.toMarkdownExtensions||(r.toMarkdownExtensions=[]);o.push(e3e(n)),i.push(wve()),a.push(Mve(n))}function r3e({flowId:e,node:t,connector:n,adapter:r,onNameChange:o,onDescriptionChange:i,onDetailChange:a,onIconChange:s,statusReport:l,onClose:c}){const h=(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=h?null:t,k=p!==null||n!==null,v=p&&"name"in p.data?p.data.name??"":"",w=(p==null?void 0:p.data.description)??"",g=(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]=m.useState(()=>nue()),P=E=>{E.preventDefault(),oue(C,E.clientX,{onWidth:L,onCommit:rue})},T={"--detail-panel-w":`${C}px`};return y.jsx(Nye,{open:k,modal:!1,onOpenChange:E=>{E||c()},children:y.jsxs(dY,{side:"right",className:"sf:w-full! sf:max-w-full! sf:overflow-y-auto sf:bg-card/94 sf:backdrop-blur-[14px] sf:border-border sf:shadow-[-12px_0_40px_-12px_rgba(0,0,0,0.6)] sf:sm:w-(--detail-panel-w)! sf:sm:max-w-(--detail-panel-w)!",style:T,"data-testid":"detail-panel",onEscapeKeyDown:E=>{var A;const z=document.activeElement;(A=z==null?void 0:z.getAttribute("data-testid"))!=null&&A.endsWith("-editor")&&E.preventDefault()},onInteractOutside:E=>{var U;const z=document.activeElement;(U=z==null?void 0:z.getAttribute("data-testid"))!=null&&U.endsWith("-editor")&&z.blur();const A=E.target;A!=null&&A.closest(".react-flow__resize-control")&&E.preventDefault(),A!=null&&A.closest("[data-radix-popper-content-wrapper]")&&E.preventDefault(),A!=null&&A.closest('[data-testid="canvas-style-strip"]')&&E.preventDefault(),A!=null&&A.closest(".react-flow__node")&&E.preventDefault(),A!=null&&A.closest(".react-flow__edge")&&E.preventDefault()},children:[y.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?y.jsxs("div",{className:"sf:flex sf:flex-col sf:gap-4",children:[y.jsxs("div",{className:"sf:-mx-6 sf:-mt-6 sf:flex sf:flex-col sf:border-b sf:border-border/60 sf:bg-card/60 sf:px-6 sf:pb-2.5 sf:pt-3 sf:pr-12",children:[M?y.jsx(CP,{"data-testid":"detail-panel-title",children:y.jsxs("div",{className:"sf:flex sf:items-center sf:gap-2",children:[b&&s?y.jsx(o3e,{nodeId:p.id,icon:S,onChange:s}):x&&S?y.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/90",children:y.jsx(e1,{name:S,size:16})}):null,y.jsx("div",{className:"sf:min-w-0 sf:flex-1",children:y.jsx(iT,{nodeId:p.id,value:v,placeholder:"Name",multiline:!1,ariaLabel:"Name",testIdBase:"detail-panel-name",onSave:o,textClassName:"sf:text-lg sf:font-semibold sf:tracking-tight sf:text-foreground/95"})})]})}):y.jsx(CP,{"data-testid":"detail-panel-title",className:"sf:sr-only",children:p.id}),y.jsxs(FN,{className:"sf:sr-only",children:[p.id," · ",p.type]})]}),y.jsxs("div",{className:"sf:mt-0 sf:flex sf:flex-col sf:gap-3",children:[l?y.jsx(l3e,{report:l}):null,y.jsx(iT,{nodeId:p.id,value:w,placeholder:"Short description shown on the node body",multiline:!0,ariaLabel:"Description",testIdBase:"detail-panel-description",onSave:i,textClassName:"sf:text-[13px] sf:leading-relaxed sf:text-muted-foreground"}),y.jsx(iT,{nodeId:p.id,value:g,placeholder:"Long-form notes, context, anything…",multiline:!0,ariaLabel:"Detail",testIdBase:"detail-panel-detail",onSave:a,markdown:!0,textClassName:"sf:text-sm sf:leading-relaxed sf:text-foreground/90"}),p.type==="htmlNode"&&e?y.jsx(i3e,{adapter:r,htmlPath:p.data.htmlPath}):null]})]}):n?y.jsxs("div",{className:"sf:flex sf:flex-col sf:gap-4",children:[y.jsxs("div",{className:"sf:-mx-6 sf:-mt-6 sf:flex sf:flex-col sf:border-b sf:border-border/60 sf:bg-card/60 sf:px-6 sf:pb-2.5 sf:pt-3 sf:pr-12",children:[y.jsx(CP,{"data-testid":"detail-panel-title",className:"sf:text-lg sf:font-semibold sf:tracking-tight sf:text-foreground/95",children:n.label??"Connector"}),y.jsxs(FN,{className:"sf:sr-only",children:[n.id," · ",n.kind]})]}),y.jsx("div",{className:"sf:mt-0 sf:flex sf:flex-col sf:gap-3",children:y.jsx(c3e,{connector:n})})]}):null]})})}function iT({nodeId:e,value:t,placeholder:n,multiline:r,ariaLabel:o,testIdBase:i,onSave:a,textClassName:s,markdown:l=!1}){const[c,h]=m.useState(!1),d=m.useRef(null),f=m.useRef(!1);m.useEffect(()=>{if(!c)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)}},[c,t]);const p=t==="";if(!a)return y.jsx("div",{"data-testid":i,"aria-label":o,className:ie("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",!l&&"sf:whitespace-pre-wrap sf:wrap-break-word",s),children:p?n:l?y.jsx(XV,{value:t}):t});const k=()=>{var C;const S=((C=d.current)==null?void 0:C.textContent)??t;a(e,S),h(!1)},v=()=>{h(!1)},w=S=>{if(S.stopPropagation(),S.nativeEvent.stopPropagation(),S.key==="Escape"){S.preventDefault(),f.current=!0,v();return}if(S.key==="Enter"){if(S.preventDefault(),S.shiftKey||!r){k();return}document.execCommand("insertText",!1,`
|
|
7836
7836
|
`)}},g=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}k()},b=()=>{c||h(!0)};return y.jsx("div",{className:"relative","data-testid":i,"data-editing":c?"true":"false",children:c?y.jsx("div",{ref:d,contentEditable:"plaintext-only",suppressContentEditableWarning:!0,spellCheck:!1,tabIndex:0,onKeyDown:w,onPaste:g,onInput:M,onBlur:x,"data-testid":`${i}-editor`,className:ie("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}):y.jsx("button",{type:"button",onClick:b,"aria-label":`Edit ${o.toLowerCase()}`,className:ie("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",!l&&"sf:whitespace-pre-wrap sf:wrap-break-word",s),children:p?n:l?y.jsx(XV,{value:t}):t})})}function o3e({nodeId:e,icon:t,onChange:n}){const[r,o]=m.useState(!1);return y.jsx(dz,{open:r,onOpenChange:o,onPick:i=>{n(e,i),o(!1)},anchor:y.jsx("button",{type:"button","data-testid":"detail-panel-icon-trigger","aria-label":t?"Change icon":"Add icon","aria-pressed":r,className:ie("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?y.jsx(e1,{name:t,size:16,"aria-hidden":!0}):y.jsx(i2,{className:"sf:h-4 sf:w-4","aria-hidden":!0})})})}function i3e({adapter:e,htmlPath:t}){const[n,r]=m.useState({kind:"idle"}),o=typeof(e==null?void 0:e.openFile)=="function",i=typeof(e==null?void 0:e.revealFile)=="function",a=async s=>{var l,c;r({kind:"pending"});try{s==="open"?await((l=e==null?void 0:e.openFile)==null?void 0:l.call(e,t)):await((c=e==null?void 0:e.revealFile)==null?void 0:c.call(e,t)),r({kind:"idle"})}catch(h){r({kind:"error",message:h instanceof Error?h.message:String(h)})}};return y.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:[y.jsxs("div",{className:"sf:flex sf:flex-col sf:gap-1",children:[y.jsx("span",{className:"sf:font-mono sf:text-[11px] sf:text-muted-foreground sf:uppercase sf:tracking-widest",children:"Path"}),y.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||i?y.jsxs("div",{className:"sf:flex sf:flex-wrap sf:items-center sf:gap-2",children:[o?y.jsxs(Nt,{type:"button",size:"sm",variant:"outline",className:"sf:h-7 sf:gap-1.5 sf:px-2",onClick:()=>{a("open")},disabled:n.kind==="pending","data-testid":"detail-panel-html-open","aria-label":"Open in editor",children:[y.jsx(u2,{className:"sf:h-3.5 sf:w-3.5"}),"Open in editor"]}):null,i?y.jsxs(Nt,{type:"button",size:"sm",variant:"outline",className:"sf:h-7 sf:gap-1.5 sf:px-2",onClick:()=>{a("reveal")},disabled:n.kind==="pending","data-testid":"detail-panel-html-reveal","aria-label":"Reveal in Finder/Explorer",children:[y.jsx(o2,{className:"sf:h-3.5 sf:w-3.5"}),"Reveal"]}):null]}):null,n.kind==="error"?y.jsx("div",{"data-testid":"detail-panel-html-status","data-status":n.kind,className:ie("sf:text-[11px] sf:text-destructive"),children:n.message??""}):null]})}function a3e(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 i=Math.floor(o/60);return i<24?`${i}h ago`:`${Math.floor(i/24)}d ago`}function s3e(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 l3e({report:e,now:t=Date.now()}){const n=e.data?Object.entries(e.data):[];return y.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:[y.jsxs("div",{className:"sf:flex sf:items-center sf:justify-between sf:gap-2",children:[y.jsx(tK,{state:e.state,summary:e.summary,"data-testid":"detail-panel-status-badge"}),y.jsx("span",{className:"sf:shrink-0 sf:text-[10px] sf:text-muted-foreground","data-testid":"detail-panel-status-relative-time",children:`Last updated: ${a3e(e.ts,t)}`})]}),e.detail?y.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?y.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])=>y.jsxs("div",{className:"contents","data-testid":"detail-panel-status-data-row",children:[y.jsx("dt",{className:"sf:truncate sf:font-medium sf:text-muted-foreground",children:r}),y.jsx("dd",{className:"sf:break-all sf:font-mono sf:text-foreground",children:s3e(o)})]},r))}):null]})}function XV({value:e}){return y.jsx(B5e,{remarkPlugins:[n3e],components:{h1:({children:t})=>y.jsx("h1",{className:"sf:mb-1 sf:text-base sf:font-bold sf:leading-snug",children:t}),h2:({children:t})=>y.jsx("h2",{className:"sf:mb-1 sf:text-sm sf:font-semibold sf:leading-snug",children:t}),h3:({children:t})=>y.jsx("h3",{className:"sf:mb-0.5 sf:text-sm sf:font-medium sf:leading-snug",children:t}),p:({children:t})=>y.jsx("p",{className:"sf:mb-2 sf:last:mb-0 sf:leading-relaxed",children:t}),ul:({children:t})=>y.jsx("ul",{className:"sf:mb-2 sf:list-disc sf:pl-4 sf:last:mb-0",children:t}),ol:({children:t})=>y.jsx("ol",{className:"sf:mb-2 sf:list-decimal sf:pl-4 sf:last:mb-0",children:t}),li:({children:t})=>y.jsx("li",{className:"mb-0.5",children:t}),code:({children:t,className:n})=>(n==null?void 0:n.includes("language-"))?y.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}):y.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})=>y.jsx("pre",{className:"sf:mb-2 sf:last:mb-0",children:t}),blockquote:({children:t})=>y.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})=>y.jsx("a",{href:t,target:"_blank",rel:"noreferrer",className:"sf:text-primary sf:underline sf:underline-offset-2",children:n}),strong:({children:t})=>y.jsx("strong",{className:"font-semibold",children:t}),em:({children:t})=>y.jsx("em",{className:"italic",children:t}),hr:()=>y.jsx("hr",{className:"sf:my-2 sf:border-border"}),table:({children:t})=>y.jsx("div",{className:"sf:mb-2 sf:overflow-x-auto sf:last:mb-0",children:y.jsx("table",{className:"sf:w-full sf:border-collapse sf:text-xs",children:t})}),th:({children:t})=>y.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})=>y.jsx("td",{className:"sf:border sf:border-border sf:px-2 sf:py-1",children:t})},children:e})}function c3e({connector:e}){return y.jsx("div",{className:"sf:rounded-md sf:border sf:bg-card sf:px-3 sf:py-2 sf:text-xs",children:y.jsxs("dl",{className:"divide-y",children:[y.jsx(Qr,{label:"Source",value:e.source}),y.jsx(Qr,{label:"Target",value:e.target}),y.jsx(Qr,{label:"Kind",value:e.kind}),e.label?y.jsx(Qr,{label:"Label",value:e.label}):null,e.style?y.jsx(Qr,{label:"Style",value:e.style}):null,e.color?y.jsx(Qr,{label:"Color",value:e.color}):null,e.direction?y.jsx(Qr,{label:"Direction",value:e.direction}):null,e.kind==="http"&&e.url?y.jsx(Qr,{label:"URL",value:`${e.method??"GET"} ${e.url}`}):null,e.kind==="event"?y.jsx(Qr,{label:"Event",value:e.eventName}):null,e.kind==="queue"?y.jsx(Qr,{label:"Queue",value:e.queueName}):null]})})}function Qr({label:e,value:t}){return y.jsxs("div",{className:"sf:flex sf:items-start sf:gap-3 sf:py-2 sf:first:pt-0 sf:last:pb-0",children:[y.jsx("dt",{className:"sf:w-20 sf:shrink-0 sf:font-medium sf:text-muted-foreground",children:e}),y.jsx("dd",{className:"sf:flex-1 sf:break-all sf:font-mono",children:t})]})}const u3e="https://seeflow.dev/embed",d3e=e=>`${u3e}/${encodeURIComponent(e)}`,h3e=e=>e.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<"),f3e=e=>[`<iframe src="${h3e(e)}"`,' width="100%"',' height="600"',' style="border:0"',' allow="fullscreen"',' loading="lazy"></iframe>'].join(`
|
|
7837
7837
|
`),p3e="Embed this canvas",y3e="Paste this iframe into any page to embed the canvas.",m3e="Copy snippet",k3e="Copied!",g3e="Press ⌘C to copy",x3e="Close",v3e=1500;function w3e({open:e,onOpenChange:t,projectId:n}){const r=f3e(d3e(n)),[o,i]=m.useState("idle"),a=m.useRef(null),s=m.useCallback(async()=>{try{await navigator.clipboard.writeText(r),i("copied"),setTimeout(()=>i("idle"),v3e)}catch{i("fallback");const l=a.current;l&&(l.focus(),l.select())}},[r]);return y.jsx(gz,{open:e,onOpenChange:t,children:y.jsxs(Nh,{"data-testid":"embed-dialog-content",children:[y.jsxs(Dh,{children:[y.jsx(_h,{children:p3e}),y.jsx(Hh,{children:y3e})]}),y.jsx("textarea",{ref:a,"data-testid":"embed-dialog-snippet",readOnly:!0,rows:7,value:r,spellCheck:!1,onFocus:l=>l.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"?y.jsx("p",{"data-testid":"embed-dialog-fallback-hint",className:"sf:text-xs sf:text-muted-foreground",children:g3e}):null,y.jsxs(Hu,{children:[y.jsx(Nt,{variant:"outline","data-testid":"embed-dialog-close",onClick:()=>t(!1),children:x3e}),y.jsx(Nt,{"data-testid":"embed-dialog-copy",onClick:s,children:o==="copied"?k3e:m3e})]})]})})}const YV="Share / download",M3e="Download PDF",b3e="Download PNG",C3e="Embed",S3e="Export to seeflow.dev";function L3e({mode:e,projectId:t,enableEmbed:n,onDownloadPdf:r,onDownloadPng:o,onExportToCloud:i,embedOpen:a,onEmbedOpenChange:s}){const[l,c]=m.useState(!1),[h,d]=m.useState(!1),[f,p]=m.useState(!1),k=a!==void 0,v=k?a:f,w=m.useCallback(L=>{k||p(L),s==null||s(L)},[k,s]),g=m.useCallback(()=>{!r||l||(c(!0),Promise.resolve(r()).finally(()=>c(!1)))},[r,l]),M=m.useCallback(()=>{!o||h||(d(!0),Promise.resolve(o()).finally(()=>d(!1)))},[o,h]),x=!!r,b=!!o,S=n&&typeof t=="string"&&t.length>0,C=e==="edit"&&!!i;return!x&&!b&&!S&&!C?null:y.jsxs(y.Fragment,{children:[y.jsxs(lye,{children:[y.jsx(cye,{asChild:!0,children:y.jsx("button",{type:"button","data-testid":"share-menu-trigger","aria-label":YV,title:YV,className:ie("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:y.jsx(k2,{className:"sf:h-4 sf:w-4","aria-hidden":"true"})})}),y.jsxs(XX,{align:"end","data-testid":"share-menu-content",onCloseAutoFocus:L=>{L.preventDefault()},children:[x?y.jsxs(Fd,{"data-testid":"share-menu-pdf",disabled:l,onSelect:L=>{L.preventDefault(),g()},children:[l?y.jsx(Cr,{className:"sf:h-4 sf:w-4 sf:animate-spin","aria-hidden":"true"}):y.jsx(r2,{className:"sf:h-4 sf:w-4","aria-hidden":"true"}),y.jsx("span",{children:M3e})]}):null,b?y.jsxs(Fd,{"data-testid":"share-menu-png",disabled:h,onSelect:L=>{L.preventDefault(),M()},children:[h?y.jsx(Cr,{className:"sf:h-4 sf:w-4 sf:animate-spin","aria-hidden":"true"}):y.jsx(a2,{className:"sf:h-4 sf:w-4","aria-hidden":"true"}),y.jsx("span",{children:b3e})]}):null,S?y.jsxs(Fd,{"data-testid":"share-menu-embed",onSelect:L=>{L.preventDefault(),w(!0)},children:[y.jsx(au,{className:"sf:h-4 sf:w-4","aria-hidden":"true"}),y.jsx("span",{children:C3e})]}):null,C?y.jsxs(Fd,{"data-testid":"share-menu-export-cloud",onSelect:()=>{i==null||i()},children:[y.jsx(w2,{className:"sf:h-4 sf:w-4","aria-hidden":"true"}),y.jsx("span",{children:S3e})]}):null]})]}),S&&t?y.jsx(w3e,{open:v,onOpenChange:w,projectId:t}):null]})}function I3e({onRestartDemo:e}){const[t,n]=m.useState(!1),r=m.useCallback(()=>{t||(n(!0),Promise.resolve(e()).finally(()=>{n(!1)}))},[e,t]);return y.jsxs(Bh,{children:[y.jsx($h,{asChild:!0,children:y.jsx(Nt,{"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?y.jsx(Cr,{className:"sf:h-4 sf:w-4 sf:animate-spin","aria-hidden":"true"}):y.jsx(f2,{className:"sf:h-4 sf:w-4","aria-hidden":"true"})})}),y.jsx(td,{side:"bottom",children:"Restart demo"})]})}const E3e=8;function A3e(e){let t=Number.POSITIVE_INFINITY,n=Number.POSITIVE_INFINITY,r=Number.NEGATIVE_INFINITY,o=Number.NEGATIVE_INFINITY,i=!1;for(const a of e){const s=a.data.width,l=a.data.height;s===void 0||l===void 0||(i=!0,a.position.x<t&&(t=a.position.x),a.position.y<n&&(n=a.position.y),a.position.x+s>r&&(r=a.position.x+s),a.position.y+l>o&&(o=a.position.y+l))}return i?{x:t,y:n,width:r-t,height:o-n}:null}function P3e(e){return e.length>=2}function R3e({selectedNodes:e,onMultiResize:t,paddingPx:n=E3e}){ez();const[r,o]=m.useState(null),[i,a]=m.useState(null);if(m.useRef(!1),m.useRef(null),!P3e(e))return null;const s=A3e(e);if(!s)return null;const l=i??s;return l.x-n,l.y-n,l.width+n*2,l.height+n*2,null}const QV=22,JV=11,eB=3,tB=2,aT=8,z3e={http:"solid",event:"dashed",queue:"dotted",default:"solid"},ZQ=["default","slate","blue","green","amber","red","purple","pink"],Z0=[{value:"solid",icon:xR,label:"Solid",testId:"style-tab-border-style-solid"},{value:"dashed",icon:sY,label:"Dashed",testId:"style-tab-border-style-dashed"},{value:"dotted",icon:lY,label:"Dotted",testId:"style-tab-border-style-dotted"}],nB=[{value:"solid",icon:xR,label:"Solid",testId:"style-tab-edge-style-solid"},{value:"dashed",icon:sY,label:"Dashed",testId:"style-tab-edge-style-dashed"},{value:"dotted",icon:lY,label:"Dotted",testId:"style-tab-edge-style-dotted"}],rB=[{value:"curve",icon:cY,label:"Curve",testId:"style-tab-edge-path-curve"},{value:"step",icon:Tye,label:"Zigzag",testId:"style-tab-edge-path-step"}],oB=[{value:"none",icon:l2,label:"None",testId:"style-tab-direction-none"},{value:"backward",icon:c2,label:"Backward",testId:"style-tab-direction-backward"},{value:"forward",icon:ru,label:"Forward",testId:"style-tab-direction-forward"},{value:"both",icon:Xd,label:"Both",testId:"style-tab-direction-both"}];function j3e({nodes:e,connectors:t,onStyleNode:n,onStyleNodePreview:r,onStyleNodes:o,onStyleNodesPreview:i,onStyleConnector:a,onStyleConnectorPreview:s,onRequestIconReplace:l}){const c=e.length>0,h=t.length>0;if(!c&&!h)return null;const d=c&&!h,f=!c&&h,p=e[0],k=t[0],v=e.filter(he=>he.type!=="iconNode"),w=v[0],g=d&&e.every(he=>he.type==="iconNode"),M=g?e.find(he=>he.type==="iconNode"):void 0,x=d&&e.every(he=>he.type==="imageNode"),b=d&&(p==null?void 0:p.type)==="shapeNode"&&p.data.shape==="text",S=(f?k==null?void 0:k.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=k?k.style??z3e[k.kind]:"solid",T=(k==null?void 0:k.direction)??"forward",E=(k==null?void 0:k.path)??"curve",z=he=>{for(const we of e)n(we.id,{borderColor:he});for(const we of t)a(we.id,{color:he})},A=he=>{for(const we of e)n(we.id,{backgroundColor:he})},U=he=>{for(const we of e)n(we.id,{borderStyle:he});for(const we of t)a(we.id,{style:he})},R=he=>{for(const we of e)n(we.id,{borderSize:he});for(const we of t)a(we.id,{borderSize:he})},V=he=>{for(const we of e)r==null||r(we.id,{borderSize:he});for(const we of t)s==null||s(we.id,{borderSize:he})},O=he=>{if(e.length>1&&o)o(e.map(we=>we.id),{fontSize:he});else for(const we of e)n(we.id,{fontSize:he})},B=he=>{if(e.length>1&&i)i(e.map(we=>we.id),{fontSize:he});else for(const we of e)r==null||r(we.id,{fontSize:he})},D=v.length>1&&new Set(v.map(he=>he.data.fontSize??QV)).size>1,N=he=>{if(e.length>1&&o)o(e.map(we=>we.id),{textColor:he});else for(const we of e)n(we.id,{textColor:he})},I=(w==null?void 0:w.data.textColor)??(b?(w==null?void 0:w.data.borderColor)??"default":"default"),W=he=>{for(const we of t)a(we.id,{fontSize:he})},H=he=>{for(const we of t)s==null||s(we.id,{fontSize:he})},j=t.length>1&&new Set(t.map(he=>he.fontSize??JV)).size>1,G=he=>{for(const we of e)n(we.id,{cornerRadius:he})},X=he=>{for(const we of e)r==null||r(we.id,{cornerRadius:he})},Y=v.length>1&&new Set(v.map(he=>he.data.cornerRadius??aT)).size>1,re=he=>{for(const we of t)a(we.id,{path:he})},ne=he=>{for(const we of t)a(we.id,{direction:he})},ae=he=>{for(const we of e)n(we.id,{color:he})},ve=(M==null?void 0:M.data.color)??"default",ke=f?(k==null?void 0:k.borderSize)??tB:(w==null?void 0:w.data.borderSize)??eB,ge=f?tB:eB,xe=f?"edge":"border",ee=f?"Connector color":b?"Color":"Border color",me=f?"connector color":b?"color":"border color",Fe=f?"style-tab-edge-color-trigger":b?"style-tab-color-trigger":"style-tab-border-color-trigger",rt=f||b?"style-tab-color":"style-tab-border-color";if(g){const he=!!l&&e.length===1&&!!M,we=()=>{M&&l&&l(M.id)};return y.jsx(L2,{delayDuration:300,children:y.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:[y.jsx(iB,{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}),he?y.jsxs(Bh,{children:[y.jsx($h,{asChild:!0,children:y.jsx("button",{type:"button","data-testid":"style-strip-change-icon","aria-label":"change icon",title:"Change icon",onClick:we,className:ie("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:y.jsx(lu,{className:"sf:h-4 sf:w-4"})})}),y.jsx(td,{side:"right",className:"sf:px-2 sf:py-1 sf:text-xs",children:"Change icon"})]}):null]})})}if(x){const he=e[0],we=(he==null?void 0:he.data.borderColor)??"default",Se=(he==null?void 0:he.data.borderStyle)??"solid",Oe=(he==null?void 0:he.data.borderWidth)??1,te=st=>{for(const Ne of e)n(Ne.id,{borderColor:st})},ue=st=>{for(const Ne of e)n(Ne.id,{borderStyle:st})},Pe=st=>{for(const Ne of e)n(Ne.id,{borderWidth:st})},qe=st=>{for(const Ne of e)r==null||r(Ne.id,{borderWidth:st})},We=st=>{for(const Ne of e)n(Ne.id,{cornerRadius:st})},Rt=st=>{for(const Ne of e)r==null||r(Ne.id,{cornerRadius:st})};return y.jsx(L2,{delayDuration:300,children:y.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:[y.jsx(iB,{testId:"style-strip-image-border-color",tooltip:"Border color",ariaLabel:"image border color",activeToken:we,previewKind:"border",tokenTestIdPrefix:"style-tab-image-border-color",innerTestId:"style-tab-image-border-color-trigger",onSelect:te}),y.jsx(jo,{testId:"style-strip-image-border-style",tooltip:"Border style",ariaLabel:"image border style",renderIcon:()=>{var Ne;const st=((Ne=Z0.find(ot=>ot.value===Se))==null?void 0:Ne.icon)??xR;return y.jsx(st,{className:"sf:h-4 sf:w-4"})},children:y.jsx(Sd,{ariaLabel:"Border style",value:Se,onChange:ue,options:Z0})}),y.jsx(jo,{testId:"style-strip-image-border-width",tooltip:"Border width",ariaLabel:"image border width",renderIcon:()=>y.jsx("span",{className:"sf:font-mono sf:text-[10px] sf:tabular-nums",children:Oe}),children:y.jsx(Ed,{value:he==null?void 0:he.data.borderWidth,defaultValue:1,min:1,max:8,suffix:"px",onPreview:qe,onCommit:Pe,testId:"style-tab-image-border-width-slider"})}),y.jsx(jo,{testId:"style-strip-image-corner-radius",tooltip:"Corners",ariaLabel:"image corner radius",renderIcon:()=>y.jsx(su,{className:"sf:h-4 sf:w-4"}),children:y.jsx(Ed,{value:he==null?void 0:he.data.cornerRadius,defaultValue:aT,min:0,max:32,suffix:"px",onPreview:Rt,onCommit:We,testId:"style-tab-image-corner-radius-slider"})})]})})}const mt=d&&!b,ht=!b,le=!f,Q=()=>{if(f){const Se=Kd[S].edge;return y.jsx("span",{className:"sf:inline-block sf:h-5 sf:w-5 sf:rounded-full sf:ring-1 sf:ring-border",style:{backgroundColor:Se}})}const he=Kd[S].border,we=Kd[C].background;return y.jsx("span",{className:"sf:inline-block sf:h-5 sf:w-5 sf:rounded-md sf:ring-1 sf:ring-border",style:{backgroundColor:we,border:`2px solid ${he}`}})};return y.jsx(L2,{delayDuration:300,children:y.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:y.jsx(jo,{testId:"style-strip-colors",tooltip:"Colors",ariaLabel:"colors",renderIcon:Q,children:y.jsxs("div",{className:"sf:flex sf:w-56 sf:flex-col sf:gap-3",children:[y.jsx(A1,{label:ee,children:y.jsx(sT,{testId:"style-strip-border-color",activeToken:S,previewKind:xe,tokenTestIdPrefix:rt,innerTestId:Fe,ariaLabel:me,onSelect:z})}),mt?y.jsx(A1,{label:"Fill",children:y.jsx(sT,{testId:"style-strip-fill",activeToken:C,previewKind:"background",tokenTestIdPrefix:"style-tab-background-color",innerTestId:"style-tab-background-color-trigger",ariaLabel:"fill",onSelect:A})}):null]})}),ht?y.jsx(jo,{testId:"style-strip-border",tooltip:f?"Connector":"Border",ariaLabel:f?"connector":"border",renderIcon:()=>{var we,Se;const he=(f?(we=nB.find(Oe=>Oe.value===P))==null?void 0:we.icon:(Se=Z0.find(Oe=>Oe.value===L))==null?void 0:Se.icon)??xR;return y.jsx(he,{className:"sf:h-4 sf:w-4"})},children:y.jsxs("div",{className:"sf:flex sf:w-56 sf:flex-col sf:gap-3",children:[y.jsx(A1,{label:"Style",testId:"style-strip-border-style",children:f?y.jsx(Sd,{ariaLabel:"Connector style",value:P,onChange:he=>U(he),options:nB}):y.jsx(Sd,{ariaLabel:"Border style",value:L,onChange:he=>U(he),options:Z0})}),y.jsx(A1,{label:"Width",testId:"style-strip-border-size",children:y.jsx(Ed,{value:ke,defaultValue:ge,min:1,max:8,suffix:"px",onPreview:V,onCommit:R,testId:f?"style-tab-stroke-width-slider":"style-tab-border-size-slider"})})]})}):null,c||f?y.jsx(jo,{testId:"style-strip-text",tooltip:"Text",ariaLabel:"text",renderIcon:()=>y.jsx(cu,{className:"sf:h-4 sf:w-4"}),children:y.jsxs("div",{className:"sf:flex sf:w-56 sf:flex-col sf:gap-3",children:[y.jsx(A1,{label:"Size",testId:f?"style-strip-connector-font-size":"style-strip-font-size",children:y.jsx(Ed,{value:f?k==null?void 0:k.fontSize:w==null?void 0:w.data.fontSize,defaultValue:f?JV:QV,min:f?8:10,max:32,suffix:"px",indeterminate:f?j:D,onPreview:f?H:B,onCommit:f?W:O,testId:f?"style-tab-connector-font-size-slider":"style-tab-font-size-slider"})}),le?y.jsx(A1,{label:"Color",children:y.jsx(sT,{testId:"style-strip-text-color",activeToken:I,previewKind:"edge",tokenTestIdPrefix:"style-tab-text-color",innerTestId:"style-tab-text-color-trigger",ariaLabel:"text color",onSelect:N})}):null]})}):null,c&&!b?y.jsx(jo,{testId:"style-strip-corner-radius",tooltip:"Corners",ariaLabel:"corner radius",renderIcon:()=>y.jsx(su,{className:"sf:h-4 sf:w-4"}),children:y.jsx(Ed,{value:w==null?void 0:w.data.cornerRadius,defaultValue:aT,min:0,max:32,suffix:"px",indeterminate:Y,onPreview:X,onCommit:G,testId:"style-tab-corner-radius-slider"})}):null,f?y.jsx(jo,{testId:"style-strip-path",tooltip:"Connector path",ariaLabel:"connector path",renderIcon:()=>{var we;const he=((we=rB.find(Se=>Se.value===E))==null?void 0:we.icon)??cY;return y.jsx(he,{className:"sf:h-4 sf:w-4"})},children:y.jsx(Sd,{ariaLabel:"Connector path",value:E,onChange:re,options:rB})}):null,f?y.jsx(jo,{testId:"style-strip-direction",tooltip:"Direction",ariaLabel:"direction",renderIcon:()=>{var we;const he=((we=oB.find(Se=>Se.value===T))==null?void 0:we.icon)??ru;return y.jsx(he,{className:"sf:h-4 sf:w-4"})},children:y.jsx(Sd,{ariaLabel:"Connector direction",value:T,onChange:ne,options:oB})}):null]})})}function KQ(e,t){const n=Kd[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 T3e(e,t){const n=Kd[e];return t==="background"?{backgroundColor:n.background}:t==="edge"?{backgroundColor:n.edge}:{backgroundColor:n.border}}function iB({testId:e,tooltip:t,ariaLabel:n,activeToken:r,previewKind:o,tokenTestIdPrefix:i,innerTestId:a,onSelect:s}){const[l,c]=m.useState(!1),h=r==="default";return y.jsxs(Ju,{open:l,onOpenChange:c,children:[y.jsxs(Bh,{children:[y.jsx($h,{asChild:!0,children:y.jsx(Eh,{asChild:!0,children:y.jsx("button",{type:"button","data-testid":e,"data-active-token":r,"aria-label":`${n}: ${r}`,title:t,className:ie("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:y.jsx("span",{"data-testid":a,className:"sf:relative sf:h-5 sf:w-5 sf:rounded-full sf:ring-1 sf:ring-border",style:T3e(r,o),children:h?y.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})})})}),y.jsx(td,{side:"right",className:"sf:px-2 sf:py-1 sf:text-xs",children:t})]}),y.jsx(c1,{side:"right",align:"start",className:"sf:w-auto sf:p-2","data-testid":`${a}-popover`,children:y.jsx("div",{className:"sf:grid sf:grid-cols-4 sf:gap-1.5",children:ZQ.map(d=>{const f=r===d;return y.jsx("button",{type:"button",onClick:()=>{s(d),c(!1)},"data-testid":`${i}-${d}`,"data-active":f,"aria-label":`${n} ${d}`,"aria-pressed":f,title:d,className:ie("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:KQ(d,o),children:f?y.jsx(fo,{className:"sf:h-3 sf:w-3 sf:drop-shadow-sm",style:{color:"hsl(var(--foreground))"}}):null},d)})})})]})}function sT({testId:e,activeToken:t,previewKind:n,tokenTestIdPrefix:r,innerTestId:o,ariaLabel:i,onSelect:a}){return y.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:ZQ.map(s=>{const l=t===s;return y.jsx("button",{type:"button",onClick:()=>a(s),"data-testid":`${r}-${s}`,"data-active":l,"aria-label":`${i} ${s}`,"aria-pressed":l,title:s,className:ie("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",l?"sf:ring-2 sf:ring-ring sf:ring-offset-2 sf:ring-offset-popover":"sf:hover:scale-110"),style:KQ(s,n),children:l?y.jsx(fo,{className:"sf:h-3 sf:w-3 sf:drop-shadow-sm",style:{color:"hsl(var(--foreground))"}}):null},s)})})}function A1({label:e,testId:t,children:n}){return y.jsxs("div",{className:"sf:flex sf:flex-col sf:gap-1.5","data-testid":t,children:[y.jsx("div",{className:"sf:text-[11px] sf:font-medium sf:uppercase sf:tracking-wide sf:text-muted-foreground",children:e}),n]})}function jo({testId:e,tooltip:t,ariaLabel:n,renderIcon:r,children:o}){const[i,a]=m.useState(!1);return y.jsxs(Ju,{open:i,onOpenChange:a,children:[y.jsxs(Bh,{children:[y.jsx($h,{asChild:!0,children:y.jsx(Eh,{asChild:!0,children:y.jsx("button",{type:"button","data-testid":e,"aria-label":n,title:t,className:ie("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()})})}),y.jsx(td,{side:"right",className:"sf:px-2 sf:py-1 sf:text-xs",children:t})]}),y.jsx(c1,{side:"right",align:"start",className:"sf:w-auto sf:p-3",children:o})]})}function Ed({value:e,defaultValue:t,min:n,max:r,suffix:o,indeterminate:i,onPreview:a,onCommit:s,testId:l}){const c=e??t,[h,d]=m.useState(c),[f,p]=m.useState(!1);m.useEffect(()=>{d(c),p(!1)},[c]);const k=i&&!f;return y.jsxs("div",{className:"sf:flex sf:w-48 sf:items-center sf:gap-3",children:[y.jsx(EY,{min:n,max:r,step:1,value:[h],onValueChange:([v])=>{const w=v??n;d(w),p(!0),a==null||a(w)},onValueCommit:([v])=>s(v??n),"data-testid":l,"data-indeterminate":k?"true":void 0,className:ie("sf:flex-1",k&&"sf:opacity-60")}),y.jsx("span",{"data-testid":`${l}-value`,className:"sf:w-12 sf:shrink-0 sf:text-right sf:text-xs sf:tabular-nums sf:text-muted-foreground",children:k?"Mixed":y.jsxs(y.Fragment,{children:[h,o]})})]})}const N3e="modulepreload",D3e=function(e){return"/"+e},aB={},_3e=function(t,n,r){let o=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const a=document.querySelector("meta[property=csp-nonce]"),s=(a==null?void 0:a.nonce)||(a==null?void 0:a.getAttribute("nonce"));o=Promise.allSettled(n.map(l=>{if(l=D3e(l),l in aB)return;aB[l]=!0;const c=l.endsWith(".css"),h=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${h}`))return;const d=document.createElement("link");if(d.rel=c?"stylesheet":N3e,c||(d.as="script"),d.crossOrigin="",d.href=l,s&&d.setAttribute("nonce",s),document.head.appendChild(d),c)return new Promise((f,p)=>{d.addEventListener("load",f),d.addEventListener("error",()=>p(new Error(`Unable to preload CSS for ${l}`)))})}))}function i(a){const s=new Event("vite:preloadError",{cancelable:!0});if(s.payload=a,window.dispatchEvent(s),!s.defaultPrevented)throw a}return o.then(a=>{for(const s of a||[])s.status==="rejected"&&i(s.reason);return t().catch(i)})};function H3e(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 F3e=(()=>{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 P1=null;function XQ(e={}){return P1||(e.includeStyleProperties?(P1=e.includeStyleProperties,P1):(P1=Ni(window.getComputedStyle(document.documentElement)),P1))}function CR(e,t){const r=(e.ownerDocument.defaultView||window).getComputedStyle(e).getPropertyValue(t);return r?parseFloat(r.replace("px","")):0}function O3e(e){const t=CR(e,"border-left-width"),n=CR(e,"border-right-width");return e.clientWidth+t+n}function q3e(e){const t=CR(e,"border-top-width"),n=CR(e,"border-bottom-width");return e.clientHeight+t+n}function YQ(e,t={}){const n=t.width||O3e(e),r=t.height||q3e(e);return{width:n,height:r}}function V3e(){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 B3e(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 SR(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 $3e(e){return Promise.resolve().then(()=>new XMLSerializer().serializeToString(e)).then(encodeURIComponent).then(t=>`data:image/svg+xml;charset=utf-8,${t}`)}async function U3e(e,t,n){const r="http://www.w3.org/2000/svg",o=document.createElementNS(r,"svg"),i=document.createElementNS(r,"foreignObject");return o.setAttribute("width",`${t}`),o.setAttribute("height",`${n}`),o.setAttribute("viewBox",`0 0 ${t} ${n}`),i.setAttribute("width","100%"),i.setAttribute("height","100%"),i.setAttribute("x","0"),i.setAttribute("y","0"),i.setAttribute("externalResourcesRequired","true"),o.appendChild(i),i.appendChild(e),$3e(o)}const An=(e,t)=>{if(e instanceof t)return!0;const n=Object.getPrototypeOf(e);return n===null?!1:n.constructor.name===t.name||An(n,t)};function W3e(e){const t=e.getPropertyValue("content");return`${e.cssText} content: '${t.replace(/'|"/g,"")}';`}function G3e(e,t){return XQ(t).map(n=>{const r=e.getPropertyValue(n),o=e.getPropertyPriority(n);return`${n}: ${r}${o?" !important":""};`}).join(" ")}function Z3e(e,t,n,r){const o=`.${e}:${t}`,i=n.cssText?W3e(n):G3e(n,r);return document.createTextNode(`${o}{${i}}`)}function sB(e,t,n,r){const o=window.getComputedStyle(e,n),i=o.getPropertyValue("content");if(i===""||i==="none")return;const a=F3e();try{t.className=`${t.className} ${a}`}catch{return}const s=document.createElement("style");s.appendChild(Z3e(a,n,o,r)),t.appendChild(s)}function K3e(e,t,n){sB(e,t,":before",n),sB(e,t,":after",n)}const lB="application/font-woff",cB="image/jpeg",X3e={woff:lB,woff2:lB,ttf:"application/font-truetype",eot:"application/vnd.ms-fontobject",png:"image/png",jpg:cB,jpeg:cB,gif:"image/gif",tiff:"image/tiff",svg:"image/svg+xml",webp:"image/webp"};function Y3e(e){const t=/\.([^./]*?)$/g.exec(e);return t?t[1]:""}function bH(e){const t=Y3e(e).toLowerCase();return X3e[t]||""}function Q3e(e){return e.split(/,/)[1]}function nD(e){return e.search(/^(data:)/)!==-1}function J3e(e,t){return`data:${t};base64,${e}`}async function QQ(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((i,a)=>{const s=new FileReader;s.onerror=a,s.onloadend=()=>{try{i(n({res:r,result:s.result}))}catch(l){a(l)}},s.readAsDataURL(o)})}const lT={};function ewe(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 CH(e,t,n){const r=ewe(e,t,n.includeQueryParams);if(lT[r]!=null)return lT[r];n.cacheBust&&(e+=(/\?/.test(e)?"&":"?")+new Date().getTime());let o;try{const i=await QQ(e,n.fetchRequestInit,({res:a,result:s})=>(t||(t=a.headers.get("Content-Type")||""),Q3e(s)));o=J3e(i,t)}catch(i){o=n.imagePlaceholder||"";let a=`Failed to fetch resource: ${e}`;i&&(a=typeof i=="string"?i:i.message),a&&console.warn(a)}return lT[r]=o,o}async function twe(e){const t=e.toDataURL();return t==="data:,"?e.cloneNode(!1):SR(t)}async function nwe(e,t){if(e.currentSrc){const i=document.createElement("canvas"),a=i.getContext("2d");i.width=e.clientWidth,i.height=e.clientHeight,a==null||a.drawImage(e,0,0,i.width,i.height);const s=i.toDataURL();return SR(s)}const n=e.poster,r=bH(n),o=await CH(n,r,t);return SR(o)}async function rwe(e,t){var n;try{if(!((n=e==null?void 0:e.contentDocument)===null||n===void 0)&&n.body)return await Nz(e.contentDocument.body,t,!0)}catch{}return e.cloneNode(!1)}async function owe(e,t){return An(e,HTMLCanvasElement)?twe(e):An(e,HTMLVideoElement)?nwe(e,t):An(e,HTMLIFrameElement)?rwe(e,t):e.cloneNode(JQ(e))}const iwe=e=>e.tagName!=null&&e.tagName.toUpperCase()==="SLOT",JQ=e=>e.tagName!=null&&e.tagName.toUpperCase()==="SVG";async function awe(e,t,n){var r,o;if(JQ(t))return t;let i=[];return iwe(e)&&e.assignedNodes?i=Ni(e.assignedNodes()):An(e,HTMLIFrameElement)&&(!((r=e.contentDocument)===null||r===void 0)&&r.body)?i=Ni(e.contentDocument.body.childNodes):i=Ni(((o=e.shadowRoot)!==null&&o!==void 0?o:e).childNodes),i.length===0||An(e,HTMLVideoElement)||await i.reduce((a,s)=>a.then(()=>Nz(s,n)).then(l=>{l&&t.appendChild(l)}),Promise.resolve()),t}function swe(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):XQ(n).forEach(i=>{let a=o.getPropertyValue(i);i==="font-size"&&a.endsWith("px")&&(a=`${Math.floor(parseFloat(a.substring(0,a.length-2)))-.1}px`),An(e,HTMLIFrameElement)&&i==="display"&&a==="inline"&&(a="block"),i==="d"&&t.getAttribute("d")&&(a=`path(${t.getAttribute("d")})`),r.setProperty(i,a,o.getPropertyPriority(i))})}function lwe(e,t){An(e,HTMLTextAreaElement)&&(t.innerHTML=e.value),An(e,HTMLInputElement)&&t.setAttribute("value",e.value)}function cwe(e,t){if(An(e,HTMLSelectElement)){const n=t,r=Array.from(n.children).find(o=>e.value===o.getAttribute("value"));r&&r.setAttribute("selected","")}}function uwe(e,t,n){return An(t,Element)&&(swe(e,t,n),K3e(e,t,n),lwe(e,t),cwe(e,t)),t}async function dwe(e,t){const n=e.querySelectorAll?e.querySelectorAll("use"):[];if(n.length===0)return e;const r={};for(let i=0;i<n.length;i++){const s=n[i].getAttribute("xlink:href");if(s){const l=e.querySelector(s),c=document.querySelector(s);!l&&c&&!r[s]&&(r[s]=await Nz(c,t,!0))}}const o=Object.values(r);if(o.length){const i="http://www.w3.org/1999/xhtml",a=document.createElementNS(i,"svg");a.setAttribute("xmlns",i),a.style.position="absolute",a.style.width="0",a.style.height="0",a.style.overflow="hidden",a.style.display="none";const s=document.createElementNS(i,"defs");a.appendChild(s);for(let l=0;l<o.length;l++)s.appendChild(o[l]);e.appendChild(a)}return e}async function Nz(e,t,n){return!n&&t.filter&&!t.filter(e)?null:Promise.resolve(e).then(r=>owe(r,t)).then(r=>awe(e,r,t)).then(r=>uwe(e,r,t)).then(r=>dwe(r,t))}const eJ=/url\((['"]?)([^'"]+?)\1\)/g,hwe=/url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g,fwe=/src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;function pwe(e){const t=e.replace(/([.*+?^${}()|\[\]\/\\])/g,"\\$1");return new RegExp(`(url\\(['"]?)(${t})(['"]?\\))`,"g")}function ywe(e){const t=[];return e.replace(eJ,(n,r,o)=>(t.push(o),n)),t.filter(n=>!nD(n))}async function mwe(e,t,n,r,o){try{const i=n?H3e(t,n):t,a=bH(t);let s;return o||(s=await CH(i,a,r)),e.replace(pwe(t),`$1${s}$3`)}catch{}return e}function kwe(e,{preferredFontFormat:t}){return t?e.replace(fwe,n=>{for(;;){const[r,,o]=hwe.exec(n)||[];if(!o)return"";if(o===t)return`src: ${r};`}}):e}function tJ(e){return e.search(eJ)!==-1}async function nJ(e,t,n){if(!tJ(e))return e;const r=kwe(e,n);return ywe(r).reduce((i,a)=>i.then(s=>mwe(s,a,t,n)),Promise.resolve(r))}async function R1(e,t,n){var r;const o=(r=t.style)===null||r===void 0?void 0:r.getPropertyValue(e);if(o){const i=await nJ(o,null,n);return t.style.setProperty(e,i,t.style.getPropertyPriority(e)),!0}return!1}async function gwe(e,t){await R1("background",e,t)||await R1("background-image",e,t),await R1("mask",e,t)||await R1("-webkit-mask",e,t)||await R1("mask-image",e,t)||await R1("-webkit-mask-image",e,t)}async function xwe(e,t){const n=An(e,HTMLImageElement);if(!(n&&!nD(e.src))&&!(An(e,SVGImageElement)&&!nD(e.href.baseVal)))return;const r=n?e.src:e.href.baseVal,o=await CH(r,bH(r),t);await new Promise((i,a)=>{e.onload=i,e.onerror=t.onImageErrorHandler?(...l)=>{try{i(t.onImageErrorHandler(...l))}catch(c){a(c)}}:a;const s=e;s.decode&&(s.decode=i),s.loading==="lazy"&&(s.loading="eager"),n?(e.srcset="",e.src=o):e.href.baseVal=o})}async function vwe(e,t){const r=Ni(e.childNodes).map(o=>rJ(o,t));await Promise.all(r).then(()=>e)}async function rJ(e,t){An(e,Element)&&(await gwe(e,t),await xwe(e,t),await vwe(e,t))}function wwe(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 uB={};async function dB(e){let t=uB[e];if(t!=null)return t;const r=await(await fetch(e)).text();return t={url:e,cssText:r},uB[e]=t,t}async function hB(e,t){let n=e.cssText;const r=/url\(["']?([^"')]+)["']?\)/g,i=(n.match(/url\([^)]+\)/g)||[]).map(async a=>{let s=a.replace(r,"$1");return s.startsWith("https://")||(s=new URL(s,e.url).href),QQ(s,t.fetchRequestInit,({result:l})=>(n=n.replace(a,`url(${l})`),[a,l]))});return Promise.all(i).then(()=>n)}function fB(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 l=o.exec(r);if(l===null)break;t.push(l[0])}r=r.replace(o,"");const i=/@import[\s\S]*?url\([^)]*\)[\s\S]*?;/gi,a="((\\s*?(?:\\/\\*[\\s\\S]*?\\*\\/)?\\s*?@media[\\s\\S]*?){([\\s\\S]*?)}\\s*?})|(([\\s\\S]*?){([\\s\\S]*?)})",s=new RegExp(a,"gi");for(;;){let l=i.exec(r);if(l===null){if(l=s.exec(r),l===null)break;i.lastIndex=s.lastIndex}else s.lastIndex=i.lastIndex;t.push(l[0])}return t}async function Mwe(e,t){const n=[],r=[];return e.forEach(o=>{if("cssRules"in o)try{Ni(o.cssRules||[]).forEach((i,a)=>{if(i.type===CSSRule.IMPORT_RULE){let s=a+1;const l=i.href,c=dB(l).then(h=>hB(h,t)).then(h=>fB(h).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(h=>{console.error("Error loading remote css",h.toString())});r.push(c)}})}catch(i){const a=e.find(s=>s.href==null)||document.styleSheets[0];o.href!=null&&r.push(dB(o.href).then(s=>hB(s,t)).then(s=>fB(s).forEach(l=>{a.insertRule(l,a.cssRules.length)})).catch(s=>{console.error("Error loading remote stylesheet",s)})),console.error("Error inlining remote css file",i)}}),Promise.all(r).then(()=>(e.forEach(o=>{if("cssRules"in o)try{Ni(o.cssRules||[]).forEach(i=>{n.push(i)})}catch(i){console.error(`Error while reading CSS rules from ${o.href}`,i)}}),n))}function bwe(e){return e.filter(t=>t.type===CSSRule.FONT_FACE_RULE).filter(t=>tJ(t.style.getPropertyValue("src")))}async function Cwe(e,t){if(e.ownerDocument==null)throw new Error("Provided element is not within a Document");const n=Ni(e.ownerDocument.styleSheets),r=await Mwe(n,t);return bwe(r)}function oJ(e){return e.trim().replace(/["']/g,"")}function Swe(e){const t=new Set;function n(r){(r.style.fontFamily||getComputedStyle(r).fontFamily).split(",").forEach(i=>{t.add(oJ(i))}),Array.from(r.children).forEach(i=>{i instanceof HTMLElement&&n(i)})}return n(e),t}async function Lwe(e,t){const n=await Cwe(e,t),r=Swe(e);return(await Promise.all(n.filter(i=>r.has(oJ(i.style.fontFamily))).map(i=>{const a=i.parentStyleSheet?i.parentStyleSheet.href:null;return nJ(i.cssText,a,t)}))).join(`
|
|
7838
|
-
`)}async function Iwe(e,t){const n=t.fontEmbedCSS!=null?t.fontEmbedCSS:t.skipFonts?null:await Lwe(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 Ewe(e,t={}){const{width:n,height:r}=YQ(e,t),o=await Nz(e,t,!0);return await Iwe(o,t),await rJ(o,t),wwe(o,t),await U3e(o,n,r)}async function Awe(e,t={}){const{width:n,height:r}=YQ(e,t),o=await Ewe(e,t),i=await SR(o),a=document.createElement("canvas"),s=a.getContext("2d"),l=t.pixelRatio||V3e(),c=t.canvasWidth||n,h=t.canvasHeight||r;return a.width=c*l,a.height=h*l,t.skipAutoScale||B3e(a),a.style.width=`${c}`,a.style.height=`${h}`,t.backgroundColor&&(s.fillStyle=t.backgroundColor,s.fillRect(0,0,a.width,a.height)),s.drawImage(i,0,0,a.width,a.height),a}async function Pwe(e,t={}){return(await Awe(e,t)).toDataURL()}const Rwe=e=>e instanceof Element?!(e.classList.contains("react-flow__minimap")||e.classList.contains("react-flow__controls")||e.classList.contains("react-flow__panel")):!0,zwe=async e=>{const t=await Pwe(e,{cacheBust:!0,filter:Rwe}),n=await new Promise((r,o)=>{const i=new Image;i.onload=()=>r({width:i.naturalWidth,height:i.naturalHeight}),i.onerror=()=>o(new Error("Failed to decode captured image")),i.src=t});return{dataUrl:t,...n}},jwe=(e,t)=>{const n=document.createElement("a");n.href=e,n.download=t,n.rel="noopener",document.body.appendChild(n),n.click(),n.remove()},Twe=e=>{const t=e.replace(/[^A-Za-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"");return t.length>0?t.slice(0,80):"canvas"},pB=(e,t)=>`${Twe(e??"canvas")}.${t}`,Nwe=({projectId:e,getReactFlow:t})=>{const[n,r]=m.useState(null),o=m.useCallback(()=>r(null),[]),i=m.useCallback(async()=>{const c=t();if(!c)return null;const h=document.querySelector(".react-flow__viewport");if(!h)return null;const d=c.getViewport();try{return await c.fitView({duration:0,padding:.1}),await new Promise(f=>requestAnimationFrame(()=>f())),await zwe(h)}finally{c.setViewport(d,{duration:0})}},[t]),a=m.useCallback(async()=>{r(null);try{const c=await i();if(!c)return;jwe(c.dataUrl,pB(e,"png"))}catch(c){r(c instanceof Error?c.message:String(c))}},[i,e]),s=m.useCallback(async()=>{r(null);try{const c=await i();if(!c)return;const{jsPDF:h}=await _3e(async()=>{const{jsPDF:p}=await import("./jspdf.es.min-zaUNYWJ0.js").then(k=>k.j);return{jsPDF:p}},[]),d=c.width>c.height?"landscape":"portrait",f=new h({orientation:d,unit:"px",format:[c.width,c.height],hotfixes:["px_scaling"]});f.addImage(c.dataUrl,"PNG",0,0,c.width,c.height),f.save(pB(e,"pdf"))}catch(c){r(c instanceof Error?c.message:String(c))}},[i,e]),l=m.useCallback(async()=>{const c=await i();return c==null?void 0:c.dataUrl},[i]);return{exportPdf:s,exportPng:a,capturePreview:l,lastError:n,clearError:o}},Dwe={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},_we={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},Hwe={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 Fwe(e){const t=e.mode==="edit"?Dwe:e.mode==="mini"?Hwe:_we;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 yB=40,Ad={padding:.15,duration:300,includeHiddenNodes:!1};function Owe(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 mB=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},qwe=(e,t)=>{var r;const n=document.elementsFromPoint(e,t);for(const o of n){const i=(r=o.closest)==null?void 0:r.call(o,".react-flow__node");if(i)return i}return null},iJ=15,cT=(e,t,n)=>{const r=qwe(t,n);if(r)return r;if(!e)return null;let o=null,i=iJ;const a=e.querySelectorAll(".react-flow__node");for(const s of a){const l=s.getBoundingClientRect();if(l.width===0||l.height===0)continue;const c=Math.max(l.left-t,0,t-l.right),h=Math.max(l.top-n,0,n-l.bottom),d=Math.hypot(c,h);d<=i&&(o=s,i=d)}return o};function kB(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 a=e==="source"?n:t,s=e==="source"?t:n,l=o(a),c=o(s);if(!l||!c)return;const h=l.measured.width??l.width??0,d=l.measured.height??l.height??0,f=c.measured.width??c.width??0,p=c.measured.height??c.height??0;if(h===0||d===0||f===0||p===0)return;const k={x:l.internals.positionAbsolute.x,y:l.internals.positionAbsolute.y,w:h,h:d},v={x:c.internals.positionAbsolute.x+f/2,y:c.internals.positionAbsolute.y+p/2};return iue(k,lR(k,v))}function Vwe(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 Bwe=(e,t)=>{if(!t)return e;const n=t.data?{...e.data,...t.data}:e.data;return{...e,...t,data:n}},$we=(e,t)=>t?{...e,...t}:e,Uwe={playNode:k0e,stateNode:H0e,shapeNode:P0e,imageNode:ade,iconNode:mue,htmlNode:tde},Wwe={editableEdge:q0e},Gwe={zIndex:0},Zwe=8,gB=(e,t)=>e?typeof e=="string"?`url('#${e}')`:`url('#${`${t?`${t}__`:""}${Object.keys(e).sort().map(o=>`${o}=${e[o]}`).join("&")}`}')`:void 0,Kwe=e=>function({fromX:n,fromY:r,toX:o,toY:i,fromPosition:a,toPosition:s,connectionLineStyle:l}){const c=He(W=>e.current?W.edges.find(H=>H.reconnectable===!0)??null:null),h=c==null?void 0:c.data,d=He(W=>{var j;const H=W.connection;return((j=H==null?void 0:H.fromHandle)==null?void 0:j.nodeId)??null}),f=He(W=>c!=null&&c.source?W.nodeLookup.get(c.source)??null:null),p=He(W=>c!=null&&c.target?W.nodeLookup.get(c.target)??null:null),k=He(W=>d?W.nodeLookup.get(d)??null:null),v=(c==null?void 0:c.source)===d,w=c?v?f:p:k,g=v?p:f,M=v?h==null?void 0:h.sourcePin:h==null?void 0:h.targetPin,x=v?h==null?void 0:h.sourceHandleAutoPicked:h==null?void 0:h.targetHandleAutoPicked;let b=n,S=r,C=a;if(w){const W=w.measured.width??w.width??0,H=w.measured.height??w.height??0;if(W>0&&H>0){const j={x:w.internals.positionAbsolute.x,y:w.internals.positionAbsolute.y,w:W,h:H};let G=null;if(M)G=cR(j,M);else if(x!==!1&&g){const X=g.measured.width??g.width??0,Y=g.measured.height??g.height??0;if(X>0&&Y>0){const re={x:g.internals.positionAbsolute.x+X/2,y:g.internals.positionAbsolute.y+Y/2};G=lR(j,re)}}G&&(b=G.x,S=G.y,C=xB[G.side])}}const L=He(W=>W.transform[2]),P=He(W=>W.nodeLookup),T=He(W=>{var H;return((H=W.connection.toHandle)==null?void 0:H.nodeId)??null});let E=o,z=i,A=s;if(L>0){const W=iJ/L,H=c?v?c.target:c.source:null;let j=null;if(T&&T!==H){const G=P.get(T)??null;G&&(j=G)}if(!j){let G=W;for(const X of P.values()){if(H&&X.id===H||w&&X.id===w.id)continue;const Y=X.measured.width??X.width??0,re=X.measured.height??X.height??0;if(Y===0||re===0)continue;const ne=X.internals.positionAbsolute.x,ae=X.internals.positionAbsolute.y,ve=Math.max(ne-o,0,o-(ne+Y)),ke=Math.max(ae-i,0,i-(ae+re)),ge=Math.hypot(ve,ke);ge<=G&&(G=ge,j=X)}}if(!j&&c&&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,re=w.internals.positionAbsolute.y,ne=Math.max(Y-o,0,o-(Y+G)),ae=Math.max(re-i,0,i-(re+X));Math.hypot(ne,ae)<=W&&(j=w)}}if(j){const G=j.measured.width??j.width??0,X=j.measured.height??j.height??0;if(G>0&&X>0){const Y=bN({x:j.internals.positionAbsolute.x,y:j.internals.positionAbsolute.y,w:G,h:X},{x:o,y:i}),re=cR({x:j.internals.positionAbsolute.x,y:j.internals.positionAbsolute.y,w:G,h:X},Y);E=re.x,z=re.y,A=xB[re.side]}}}const U=(h==null?void 0:h.path)==="step",[R]=U?nh({sourceX:b,sourceY:S,sourcePosition:C,targetX:E,targetY:z,targetPosition:A,borderRadius:Zwe}):XR({sourceX:b,sourceY:S,sourcePosition:C,targetX:E,targetY:z,targetPosition:A}),V=(c==null?void 0:c.style)??l??void 0,O=He(W=>W.rfId),B=v?c==null?void 0:c.markerStart:c==null?void 0:c.markerEnd,D=v?c==null?void 0:c.markerEnd:c==null?void 0:c.markerStart,N=gB(B,O),I=gB(D,O);return y.jsx("path",{d:R,fill:"none",className:"react-flow__connection-path",style:V,markerStart:N,markerEnd:I})},xB={top:pe.Top,right:pe.Right,bottom:pe.Bottom,left:pe.Left};function Xwe({storeApiRef:e}){const t=yt();return m.useEffect(()=>(e.current=t,()=>{e.current===t&&(e.current=null)}),[t,e]),null}function Ywe({wrapperRef:e}){const t=He(r=>r.transform[2]),n=e.current;return n&&n.style.setProperty("--rf-zoom",String(t)),null}const Qwe=new Set(["INPUT","TEXTAREA","SELECT"]),aJ=e=>e?Qwe.has(e.tagName)?!0:e instanceof HTMLElement&&e.isContentEditable:!1;function Jwe(e){const{event:t,selectedNodeIds:n,hasClipboard:r,activeElement:o,onCopySelection:i,onPasteSelection:a}=e;if(!(t.metaKey||t.ctrlKey)||t.shiftKey||t.altKey)return!1;const s=t.key.toLowerCase();return s!=="c"&&s!=="v"||aJ(o)?!1:s==="c"?n.length===0||!i?!1:(t.preventDefault(),i([...n]),!0):!r||!a?!1:(t.preventDefault(),a(),!0)}const vB=(e,t)=>{var n;return((n=e==null?void 0:e[t])==null?void 0:n.status)??"idle"},e6e=(e,t)=>{var n;return(n=e==null?void 0:e[t])==null?void 0:n.status},t6e=(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 n6e(e,t){var _H,HH;const{mode:n,adapter:r,projectId:o,fileBaseUrl:i,nodes:a,connectors:s,selectedNodeIds:l,selectedConnectorIds:c,onSelectionChange:h,runtime:d,onPlayNode:f,onNodePositionChange:p,onNodePositionsChange:k,onNodeResize:v,onNodeResizeEnd:w,onHtmlNodeFitToContent:g,onMultiResize:M,onNodeNameChange:x,onNodeDescriptionChange:b,onConnectorLabelChange:S,onCreateShapeNode:C,onCreateImageFromFile:L,onRetryImageUpload:P,onCreateHtmlNode:T,onCreateConnector:E,onReconnectConnector:z,onReorderNode:A,onDeleteNode:U,onCopyNode:R,onPasteAt:V,hasClipboard:O,onCopySelection:B,onPasteSelection:D,selectedNodes:N,selectedConnectors:I,onStyleNode:W,onStyleNodePreview:H,onStyleNodes:j,onStyleNodesPreview:G,onStyleConnector:X,onStyleConnectorPreview:Y,onRfInit:re,onTidy:ne,onNodeClick:ae,onConnectorClick:ve,onPaneClick:ke,onCreateAndConnectFromPane:ge,pendingEditNodeId:xe,iconPickerOpen:ee,onOpenIconPicker:me,onCloseIconPicker:Fe,onPickIcon:rt,onRequestIconReplace:mt,onPinEndpoint:ht,onUnpinEndpoint:le,activeShape:Q,onSelectShape:he,disableSidebar:we,statusReport:Se,onNameChange:Oe,onDescriptionChange:te,onDetailChange:ue,onIconChange:Pe,autoFitView:qe,autoFitViewSignal:We,customIcons:Rt,onExportToCloud:st,onRestartDemo:Ne,showToolbar:ot,showStyleStrip:Jn,showDetailPanel:zt,showStatusBadges:zn,showResizeHandles:Kt,showControls:f1,showShareMenu:p1,showRestart:Qo,enableKeyboard:Jo,enableContextMenu:_r,enableDragDrop:Zi,enableImageDrop:ei,enableZoom:fr,enablePan:Hr,enableSelection:pr,enableNodeMove:y1,enableEmbed:m1}=e,_e=m.useMemo(()=>Fwe({mode:n,showToolbar:ot,showStyleStrip:Jn,showDetailPanel:zt,showStatusBadges:zn,showResizeHandles:Kt,showControls:f1,showShareMenu:p1,showRestart:Qo,enableKeyboard:Jo,enableContextMenu:_r,enableDragDrop:Zi,enableImageDrop:ei,enableZoom:fr,enablePan:Hr,enableSelection:pr,enableNodeMove:y1,enableEmbed:m1}),[n,ot,Jn,zt,zn,Kt,f1,p1,Qo,Jo,_r,Zi,ei,fr,Hr,pr,y1,m1]),Mt=n==="edit",Fr=m.useRef(_e);m.useEffect(()=>{Fr.current=_e},[_e]);const Or=qe??(n==="mini"?!0:void 0),jn=m.useMemo(()=>Owe(Or),[Or]),yr=d==null?void 0:d.runs,Mo=d==null?void 0:d.statuses,er=(_H=d==null?void 0:d.pendingOverrides)==null?void 0:_H.nodes,qr=(HH=d==null?void 0:d.pendingOverrides)==null?void 0:HH.connectors,an=m.useRef(null),jt=m.useRef(null),bo=m.useRef(!1),mr=m.useRef(!1),Ki=m.useRef(!1),Xi=m.useRef(jn);Xi.current=jn,m.useEffect(()=>{if(bo.current||!jn.onMount||a.length===0)return;const K=jt.current;K&&(K.fitView(Ad),bo.current=!0)},[a,jn.onMount]);const Co=m.useRef(null),Ct=Q,Yi=he,Tn=m.useRef(new Map),ti=m.useCallback((K,J)=>(Tn.current.set(K,J),()=>{Tn.current.get(K)===J&&Tn.current.delete(K)}),[]),[tr,kr]=m.useState(!1),k1=m.useRef(!1);m.useEffect(()=>{k1.current=tr},[tr]);const Qi=m.useRef(!1),Ji=m.useRef(!1),ni=m.useRef(!1),[mn,Vr]=m.useState(null),Br=m.useRef(null);m.useEffect(()=>{Br.current=mn},[mn]),m.useCallback(()=>{Vr(null)},[]);const g1=m.useMemo(()=>Kwe(ni),[]),So=m.useRef(null),nr=m.useRef(null),kn=m.useCallback(K=>{const J=an.current;if(!J){So.current=K;return}const se=So.current;if(se&&se!==K){const ce=J.querySelector(`.react-flow__node[data-id="${CSS.escape(se)}"]`);ce==null||ce.removeAttribute("data-connect-source")}if(K){const ce=J.querySelector(`.react-flow__node[data-id="${CSS.escape(K)}"]`);ce==null||ce.setAttribute("data-connect-source","true")}So.current=K},[]),sn=m.useCallback(K=>{const J=an.current,se=nr.current;if(se!==K){if(J&&se){const ce=J.querySelector(`.react-flow__node[data-id="${CSS.escape(se)}"]`);ce==null||ce.removeAttribute("data-connect-target")}if(J&&K){const ce=J.querySelector(`.react-flow__node[data-id="${CSS.escape(K)}"]`);ce==null||ce.setAttribute("data-connect-target","true")}nr.current=K}},[]),ri=m.useCallback(()=>{kn(null),sn(null)},[kn,sn]);m.useEffect(()=>{if(!tr){sn(null);return}const K=J=>{const se=cT(an.current,J.clientX,J.clientY),ce=(se==null?void 0:se.getAttribute("data-id"))??null;if(ce&&ce===So.current){sn(null);return}sn(ce)};return document.addEventListener("pointermove",K),()=>{document.removeEventListener("pointermove",K)}},[tr,sn]);const[rr,$r]=m.useState(null),[Ur,Lo]=m.useState(null),Je=m.useRef(null),Wr=m.useRef(null),Nn=m.useRef(null),Xt=m.useRef(!1);m.useEffect(()=>{Je.current=Ct},[Ct]);const Gr=m.useCallback(()=>{Yi(null),$r(null),Lo(null),Je.current=null,Wr.current=null,Nn.current=null,Xt.current=!1},[Yi]);m.useEffect(()=>{if(!_e.enableKeyboard)return;const K=J=>{var ye,je;if(J.key!=="Escape"||aJ(document.activeElement))return;if(Je.current){J.preventDefault(),Gr();return}if(k1.current){J.preventDefault(),Qi.current=!0,Ji.current=!0;try{(ye=Co.current)==null||ye.getState().cancelConnection()}catch{}document.dispatchEvent(new MouseEvent("mouseup",{bubbles:!0,cancelable:!0,button:0})),kr(!1);return}if(Br.current){J.preventDefault(),Vr(null);return}const se=vn.current.size>0,ce=Po.current.size>0;(se||ce)&&(J.preventDefault(),(je=Zr.current)==null||je.call(Zr,[],[]))};return window.addEventListener("keydown",K),()=>window.removeEventListener("keydown",K)},[Gr,_e.enableKeyboard]),m.useEffect(()=>{if(!_e.enableKeyboard)return;const K=J=>{Jwe({event:J,selectedNodeIds:l,hasClipboard:!!O,activeElement:document.activeElement,onCopySelection:B,onPasteSelection:D})};return window.addEventListener("keydown",K),()=>window.removeEventListener("keydown",K)},[l,O,B,D,_e.enableKeyboard]);const x1=m.useCallback(K=>{var ce,ye;if(!Je.current)return;const J=K.target;if(!(J!=null&&J.classList.contains("react-flow__pane")))return;const se={x:K.clientX,y:K.clientY};Xt.current=!0,Wr.current=se,Nn.current=se,$r(se),Lo(se);try{(ye=(ce=K.currentTarget).setPointerCapture)==null||ye.call(ce,K.pointerId)}catch{}K.preventDefault(),K.stopPropagation()},[]),_z=m.useCallback(K=>{if(!Xt.current)return;const J={x:K.clientX,y:K.clientY};Nn.current=J,Lo(J)},[]),Kh=m.useCallback(K=>{var Xr,dd;if(!Xt.current)return;Xt.current=!1;try{(dd=(Xr=K.currentTarget).releasePointerCapture)==null||dd.call(Xr,K.pointerId)}catch{}const J=Wr.current,se=Nn.current,ce=Je.current,ye=jt.current;if(Gr(),!J||!se||!ce||!ye)return;const je=Math.min(J.x,se.x),Me=Math.min(J.y,se.y),Ee=Math.max(J.x,se.x),Ke=Math.max(J.y,se.y),et=Ee-je,lt=Ke-Me,Te=ye.screenToFlowPosition({x:je,y:Me}),wn=ye.screenToFlowPosition({x:Ee,y:Ke}),Kr=wn.x-Te.x,ct=wn.y-Te.y,Le=et<yB||lt<yB,Ft=Le?yR[ce].width:Kr,v1=Le?yR[ce].height:ct;C==null||C(ce,Te,{width:Ft,height:v1})},[Gr,C]),Io=m.useRef(!1),ea=m.useRef(!1),id=m.useRef(new Map),oi=m.useCallback(()=>{var K;mr.current&&(ea.current||Io.current||(mr.current=!1,(K=jt.current)==null||K.fitView(Ad)))},[]),ad=m.useCallback(K=>{ea.current=K,K||oi()},[oi]);m.useEffect(()=>{var K;if(!Ki.current){Ki.current=!0;return}if(Xi.current.onExternalNodeChange){if(ea.current||Io.current){mr.current=!0;return}(K=jt.current)==null||K.fitView(Ad)}},[We]);const sd=!!A||!!U||!!R||!!V||!!le,[F,q]=m.useState(null),[Z,$]=m.useState(!1),[_,oe]=m.useState(null),[Ae,be]=m.useState(null),Ue=m.useRef(null),Ut=m.useRef(null);m.useEffect(()=>{if(!F)return;const K=Ut.current;if(!K)return;const J=new MouseEvent("contextmenu",{clientX:F.x,clientY:F.y,bubbles:!0,cancelable:!0,button:2,buttons:2});K.dispatchEvent(J)},[F]);const Eo=m.useCallback(K=>{const J=Ue.current;!J||!A||A(J,K)},[A]),Dn=m.useCallback(()=>{const K=Ue.current;!K||!U||U(K)},[U]),Re=m.useCallback(()=>{const K=Ue.current;!K||!R||R(K)},[R]),it=m.useCallback(()=>{const K=Ue.current;!K||!mt||mt(K)},[mt]);m.useCallback((K,J,se,ce,ye)=>{Fr.current.enableContextMenu&&(Ue.current=null,$(!1),oe(null),be({connectorId:K,kind:J,pinned:se}),q({x:ce,y:ye}))},[]);const Yt=m.useCallback(()=>{const K=Ae;!K||!le||le(K.connectorId,K.kind)},[Ae,le]),gn=m.useCallback(()=>{if(!V)return;const K=F,J=jt.current;if(!K||!J)return;const se=J.screenToFlowPosition({x:K.x,y:K.y});V(se)},[F,V]),ta=typeof navigator<"u"&&/Mac|iPhone|iPad|iPod/.test(navigator.platform||navigator.userAgent||""),Hz=ta?"⌘C":"Ctrl+C",ii=ta?"⌘V":"Ctrl+V",De=m.useMemo(()=>new Set(l),[l]),Qe=m.useMemo(()=>new Set(c),[c]),Ht=m.useMemo(()=>{if(l.length<2)return[];const K=er,J=[];for(const se of l){const ce=a.find(Ee=>Ee.id===se);if(!ce)continue;const ye=K==null?void 0:K[se],je=(ye==null?void 0:ye.data)??{},Me=ce.data;J.push({id:se,position:(ye==null?void 0:ye.position)??ce.position,data:{width:je.width??Me.width,height:je.height??Me.height}})}return J},[a,er,l]),xn=N??[],Ao=m.useMemo(()=>{const K=ye=>{const je=Mt?void 0:id.current.get(ye.id),Me={id:ye.id,type:ye.type,position:je??ye.position,data:{...ye.data,projectId:o,fileBaseUrl:i,onRetryUpload:P,status:e6e(yr,ye.id),errorMessage:t6e(yr,ye.id),statusReport:Mo==null?void 0:Mo[ye.id],onPlay:f,onResize:v,onResizeEnd:w,setResizing:ad,onFitToContent:ye.type==="htmlNode"?g:void 0,onNameChange:(()=>{if(Mt&&!(ye.type==="shapeNode"&&ye.data.shape==="ellipse"))return x})(),onDescriptionChange:(()=>{if(Mt){if(ye.type==="shapeNode"){const Ee=ye.data.shape;return Ee==="rectangle"||Ee==="ellipse"||Ee==="sticky"?b:void 0}if(!(ye.type==="imageNode"||ye.type==="iconNode"))return b}})(),onIconChange:(()=>{if(Mt&&!(ye.type!=="playNode"&&ye.type!=="stateNode"))return Pe})(),autoEditOnMount:xe===ye.id?!0:void 0},selected:De.has(ye.id)};return ye.data.width!==void 0&&(Me.width=ye.data.width),ye.data.height!==void 0&&(Me.height=ye.data.height),De.has(ye.id)||(Me.connectable=!1),Me},J=a.map(ye=>K(Bwe(ye,er==null?void 0:er[ye.id]))),se=new Set(a.map(ye=>ye.id)),ce=[];if(er)for(const[ye,je]of Object.entries(er)){if(se.has(ye))continue;const Me=je;typeof Me.type!="string"||!Me.position||!Me.data||ce.push(K({...Me,id:ye}))}return[...J,...ce]},[o,i,a,De,yr,Mo,f,v,w,g,ad,er,x,b,Pe,P,xe,Mt]),[na,ld]=m.useState(Ao);m.useEffect(()=>{Io.current||ea.current||ld(Ao)},[Ao]),m.useEffect(()=>{cd.current=na},[na]);const vn=m.useRef(De);m.useEffect(()=>{vn.current=De},[De]);const Zr=m.useRef(h);m.useEffect(()=>{Zr.current=h},[h]);const Po=m.useRef(Qe);m.useEffect(()=>{Po.current=Qe},[Qe]);const cd=m.useRef(Ao),ra=m.useRef(!1),Xh=m.useRef(new Set),Yh=m.useRef(new Set),Fz=m.useRef(new Set),Oz=m.useRef(new Set),ai=m.useRef(null),bJ=m.useCallback(K=>{var ct;const J=ra.current?Fz.current:(ct=ai.current)!=null&&ct.shift?ai.current.nodeIds:null,se=J&&J.size>0?K.filter(Le=>Le.type!=="select"?!0:!(Le.selected===!1&&J.has(Le.id))):K,ce=new Set;for(const Le of se)Le.type==="select"&&ce.add(Le.id);const ye=MG(se,cd.current),je=new Set;if(ea.current)for(const Le of se)Le.type==="dimensions"&&je.add(Le.id);const Me=je.size===0?ye:ye.map(Le=>!je.has(Le.id)||Le.width===void 0&&Le.height===void 0?Le:{...Le,data:{...Le.data,...Le.width!==void 0?{width:Le.width}:{},...Le.height!==void 0?{height:Le.height}:{}}}),Ee=vn.current,Ke=ra.current||Ee.size===0?Me:Me.map(Le=>Ee.has(Le.id)&&!ce.has(Le.id)&&!Le.selected?{...Le,selected:!0}:Le);if(cd.current=Ke,ld(Ke),ce.size===0)return;if(ra.current){for(const Le of se)Le.type==="select"&&(Le.selected?Xh.current.add(Le.id):Xh.current.delete(Le.id));return}const et=Zr.current;if(!et)return;const lt=Ke.filter(Le=>Le.selected).map(Le=>Le.id),Te=vn.current;Te.size===lt.length&<.every(Le=>Te.has(Le))||(vn.current=new Set(lt),et(lt,[...Po.current]))},[]),Qh=m.useRef([]),CJ=m.useCallback(K=>{var lt;const J=ra.current?Oz.current:(lt=ai.current)!=null&<.shift?ai.current.edgeIds:null,se=J&&J.size>0?K.filter(Te=>Te.type!=="select"?!0:!(Te.selected===!1&&J.has(Te.id))):K,ce=new Set;for(const Te of se)Te.type==="select"&&ce.add(Te.id);if(ce.size===0)return;if(ra.current){for(const Te of se)Te.type==="select"&&(Te.selected?Yh.current.add(Te.id):Yh.current.delete(Te.id));return}const ye=Zr.current;if(!ye)return;const Me=bG(se,Qh.current).filter(Te=>Te.selected).map(Te=>Te.id),Ee=Po.current;Ee.size===Me.length&&Me.every(Te=>Ee.has(Te))||(Po.current=new Set(Me),ye([...vn.current],Me))},[]),SJ=m.useCallback(K=>{ra.current=!0;const J=ai.current,se=(J==null?void 0:J.shift)??(K.shiftKey||K.metaKey||K.ctrlKey);Fz.current=se?new Set((J==null?void 0:J.nodeIds)??vn.current):new Set,Oz.current=se?new Set((J==null?void 0:J.edgeIds)??Po.current):new Set,Xh.current=new Set(Fz.current),Yh.current=new Set(Oz.current)},[]),LJ=m.useCallback(()=>{ra.current=!1,ai.current=null;const K=Zr.current;if(!K)return;const J=[...Xh.current],se=new Set(J),ce=new Set(Yh.current);for(const Ke of Qh.current)se.has(Ke.source)&&se.has(Ke.target)&&ce.add(Ke.id);const ye=vn.current,je=Po.current,Me=ye.size===se.size&&J.every(Ke=>ye.has(Ke)),Ee=je.size===ce.size&&[...ce].every(Ke=>je.has(Ke));Me&&Ee||(vn.current=new Set(J),Po.current=new Set(ce),K(J,[...ce]))},[]),IJ=m.useCallback(K=>{if(ai.current=null,Je.current||K.button!==0)return;const J=K.target;J!=null&&J.classList.contains("react-flow__pane")&&(ai.current={shift:K.shiftKey||K.metaKey||K.ctrlKey,nodeIds:new Set(vn.current),edgeIds:new Set(Po.current)})},[]),EJ=m.useCallback(K=>{if(!Fr.current.enableContextMenu||vn.current.size<2)return;const se=K.target;se!==Ut.current&&(se!=null&&se.closest(".seeflow-connector-endpoint-dot")||(K.preventDefault(),K.stopPropagation(),Ue.current=null,$(!0),oe(null),be(null),q({x:K.clientX,y:K.clientY})))},[]),AJ=m.useCallback(K=>{const J=K.dataTransfer;if(!J)return;const se=J.types?Array.from(J.types):[],ce=se.includes("Files"),ye=se.includes(Qq),je=ce&&!!L&&_e.enableImageDrop,Me=ye&&!!T&&_e.enableDragDrop;if(!(!je&&!Me)){K.preventDefault();try{J.dropEffect="copy"}catch{}}},[L,T,_e.enableImageDrop,_e.enableDragDrop]),PJ=m.useCallback(K=>{const J=K.dataTransfer;if((J!=null&&J.types?Array.from(J.types):[]).includes(Qq)&&T&&_e.enableDragDrop){K.preventDefault();const je=jt.current;if(!je)return;const Me=je.screenToFlowPosition({x:K.clientX,y:K.clientY});T({position:Me});return}if(!L||!_e.enableImageDrop)return;const ye={x:K.clientX,y:K.clientY};K.preventDefault(),Gne({dataTransfer:J,clientPos:ye,rfInstance:jt.current,computeDims:Zne,dispatch:L})},[L,T,_e.enableImageDrop,_e.enableDragDrop]),EH=!!z,AH=Qe.size===1?[...Qe][0]:null,qz=m.useMemo(()=>{const K=Ee=>{const Ke=vB(yr,Ee.source)==="running"||vB(yr,Ee.target)==="running",et=Qe.has(Ee.id),lt=eue(Ee,Ke,et);et&&(lt.selected=!0);const Te=EH&&Ee.id===AH,wn=Te?{...lt,reconnectable:!0}:lt;return{...wn,data:{...wn.data,onLabelChange:Mt?S:void 0,reconnectable:Te,registerEditHandle:ti}}},J=new Set(s.map(Ee=>Ee.id)),se=s.map(Ee=>K($we(Ee,qr==null?void 0:qr[Ee.id]))),ce=[];if(qr)for(const[Ee,Ke]of Object.entries(qr)){if(J.has(Ee))continue;const et=Ke;typeof et.source!="string"||typeof et.target!="string"||typeof et.kind!="string"||ce.push(K({...et,id:Ee}))}const ye=[...se,...ce],je=[],Me=[];for(const Ee of ye)Qe.has(Ee.id)?Me.push(Ee):je.push(Ee);return[...je,...Me]},[s,yr,Qe,AH,qr,S,EH,ti,Mt]);m.useEffect(()=>{Qh.current=qz},[qz]);const ud=e.adapter??null,RJ=m.useMemo(()=>{if(ud!=null&&ud.computeLayout)return async()=>{const K=jt.current,J=cd.current;if(J.length<2)return;const se=J.map(ct=>{var dd;const Le=(dd=K==null?void 0:K.getInternalNode(ct.id))==null?void 0:dd.measured,Ft=ct.data,v1=(Le==null?void 0:Le.width)??Ft.width??200,Xr=(Le==null?void 0:Le.height)??Ft.height??120;return{id:ct.id,type:ct.type,width:v1,height:Xr}}),ce=new Map;for(const ct of J)ce.set(ct.id,ct.position);const ye=Qh.current.map(ct=>({id:ct.id,source:ct.source,target:ct.target})),je=ud.computeLayout;if(!je)return;const Me=await je(se,ye),Ee=new Map;for(const[ct,Le]of Object.entries(Me.nodes))Ee.set(ct,Le.position);let Ke=Number.POSITIVE_INFINITY,et=Number.POSITIVE_INFINITY,lt=Number.POSITIVE_INFINITY,Te=Number.POSITIVE_INFINITY;for(const ct of se){const Le=ce.get(ct.id);if(!Le)continue;Le.x<Ke&&(Ke=Le.x),Le.y<et&&(et=Le.y);const Ft=Ee.get(ct.id);Ft&&(Ft.x<lt&&(lt=Ft.x),Ft.y<Te&&(Te=Ft.y))}const wn=Number.isFinite(Ke)&&Number.isFinite(lt)?Ke-lt:0,Kr=Number.isFinite(et)&&Number.isFinite(Te)?et-Te:0;ld(ct=>ct.map(Le=>{const Ft=Ee.get(Le.id);return Ft?{...Le,position:{x:Ft.x+wn,y:Ft.y+Kr}}:Le}))}},[ud]),Jh=ne??(Mt?void 0:RJ),e0=m.useRef(!1),PH=m.useRef(null),zJ=m.useCallback(K=>{var Ee;if(!Mt||!E)return;const{source:J,target:se}=K;if(!J||!se||J===se)return;e0.current=!0;const ce=((Ee=PH.current)==null?void 0:Ee.nodeId)??null,ye=ce!==null&&ce===se&&ce!==J;E(ye?se:J,ye?J:se)},[E,Mt]),Vz=m.useCallback(K=>{const J=se=>{if(!se)return!1;const ce=cd.current.find(ye=>ye.id===se);return ce?ce.type==="shapeNode"&&ce.data.shape==="text":!1};return!J(K.source)&&!J(K.target)},[]),jJ=m.useCallback((K,J)=>{var lt;kr(!1),ri();const se=e0.current;if(e0.current=!1,se||ni.current)return;if(Qi.current){Qi.current=!1;return}if(!E)return;const ce=(lt=J.fromNode)==null?void 0:lt.id,ye=J.fromHandle;if(!ce||!ye)return;const je=mB(K);if(!je)return;const Me=cT(an.current,je.clientX,je.clientY);if(!Me)return;const Ee=Me.getAttribute("data-id");if(!Ee||Ee===ce||!Vz({source:ce,target:Ee,sourceHandle:null,targetHandle:null}))return;let Ke;const et=jt.current;if(et){const Te=et.getInternalNode(Ee);if(Te){const wn=Te.measured.width??Te.width??0,Kr=Te.measured.height??Te.height??0;if(wn>0&&Kr>0){const ct=et.screenToFlowPosition({x:je.clientX,y:je.clientY});Ke=bN({x:Te.internals.positionAbsolute.x,y:Te.internals.positionAbsolute.y,w:wn,h:Kr},ct)}}}E(ce,Ee,Ke?{targetPin:Ke}:void 0)},[E,ri,Vz]),t0=m.useRef(!1),TJ=m.useCallback((K,J)=>{if(!z)return;const{source:se,target:ce,sourceHandle:ye,targetHandle:je}=J;if(!se||!ce||se===ce)return;const Me={};if(se!==K.source&&(Me.source=se),ce!==K.target&&(Me.target=ce),typeof ye=="string"&&ye!==K.sourceHandle&&(Me.sourceHandle=ye),typeof je=="string"&&je!==K.targetHandle&&(Me.targetHandle=je),Me.source===void 0&&Me.target===void 0&&Me.sourceHandle===void 0&&Me.targetHandle===void 0)return;(Me.source!==void 0||Me.sourceHandle!==void 0)&&(Me.sourceHandleAutoPicked=!1),(Me.target!==void 0||Me.targetHandle!==void 0)&&(Me.targetHandleAutoPicked=!1);const Ee=jt.current;if(!(Me.source===void 0&&Me.target===void 0)&&Ee){const et=Me.source!==void 0?"source":"target",lt=kB(et,K.source,K.target,K.data,Te=>Ee.getInternalNode(Te)??null);lt&&(et==="source"?Me.targetPin=lt:Me.sourcePin=lt)}t0.current=!0,z(K.id,Me)},[z]),NJ=m.useCallback((K,J,se,ce)=>{var v1;kr(!1),ri(),ni.current=!1;const ye=t0.current;if(t0.current=!1,ye)return;if(Ji.current){Ji.current=!1;return}if(!z)return;const je=mB(K);let Me=((v1=ce.toNode)==null?void 0:v1.id)??null;if(!Me&&je){const Xr=cT(an.current,je.clientX,je.clientY);Me=(Xr==null?void 0:Xr.getAttribute("data-id"))??null}const Ee=se==="source"?"target":"source",Ke=Vwe(Ee,J.source,J.target,Me);if(Ke==="no-op"||Ke==="self-loop"||!je)return;const et=jt.current;if(!et)return;const lt=Ke==="pin-own"?Ee==="source"?J.source:J.target:Me,Te=et.getInternalNode(lt);if(!Te)return;const wn=Te.measured.width??Te.width??0,Kr=Te.measured.height??Te.height??0;if(wn===0||Kr===0)return;const ct=et.screenToFlowPosition({x:je.clientX,y:je.clientY}),Le=bN({x:Te.internals.positionAbsolute.x,y:Te.internals.positionAbsolute.y,w:wn,h:Kr},ct);if(Ke==="pin-own"){if(!ht)return;ht(J.id,Ee,Le);return}const Ft=kB(Ee,J.source,J.target,J.data,Xr=>et.getInternalNode(Xr)??null);Ee==="source"?z(J.id,{source:Me,sourceHandle:null,sourceHandleAutoPicked:!1,sourcePin:Le,...Ft?{targetPin:Ft}:{}}):z(J.id,{target:Me,targetHandle:null,targetHandleAutoPicked:!1,targetPin:Le,...Ft?{sourcePin:Ft}:{}})},[z,ri,ht]),oa=m.useMemo(()=>{var Ee;if(!rr||!Ur)return null;const K=(Ee=an.current)==null?void 0:Ee.getBoundingClientRect(),J=(K==null?void 0:K.left)??0,se=(K==null?void 0:K.top)??0,ce=Math.min(rr.x,Ur.x),ye=Math.min(rr.y,Ur.y),je=Math.abs(Ur.x-rr.x),Me=Math.abs(Ur.y-rr.y);return{left:ce-J,top:ye-se,width:je,height:Me}},[rr,Ur]),DJ=Ct?nK(Ct):"",_J=Ct?rK(Ct):void 0,HJ=Ct==="text",[RH,zH]=m.useState(!1),[FJ,n0]=m.useState(!1),[OJ,jH]=m.useState(!1),si=Nwe({projectId:o,getReactFlow:()=>jt.current});m.useImperativeHandle(t,()=>({exportPdf:si.exportPdf,exportPng:si.exportPng,openEmbedDialog:()=>jH(!0),capturePreview:si.capturePreview}),[si.exportPdf,si.exportPng,si.capturePreview]),m.useEffect(()=>{if(!_e.enableKeyboard)return;const K=ce=>{if(!ce)return!1;const ye=ce.tagName;return ye==="INPUT"||ye==="TEXTAREA"||ye==="SELECT"?!0:ce instanceof HTMLElement&&ce.isContentEditable},J=ce=>{ce.code==="Space"&&(K(document.activeElement)||(ce.preventDefault(),zH(!0)))},se=ce=>{ce.code==="Space"&&(zH(!1),n0(!1))};return window.addEventListener("keydown",J),window.addEventListener("keyup",se),()=>{window.removeEventListener("keydown",J),window.removeEventListener("keyup",se)}},[_e.enableKeyboard]);const r0=m.useCallback(K=>{if(K.length!==0){if(!Mt){const J=id.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&&p&&p(J.id,{x:J.position.x,y:J.position.y});return}if(k){k(K.map(J=>({id:J.id,position:{x:J.position.x,y:J.position.y}})));return}if(p)for(const J of K)p(J.id,{x:J.position.x,y:J.position.y})}},[p,k,Mt]),qJ=m.useCallback((K,J,se)=>{Io.current=!1,r0(se),oi()},[r0,oi]),VJ=m.useCallback(()=>{Io.current=!0},[]),BJ=m.useCallback((K,J)=>{Io.current=!1,r0(J),oi()},[r0,oi]),$J=m.useCallback((K,J)=>{ae==null||ae(J.id)},[ae]),UJ=m.useCallback(K=>{ke==null||ke()},[ke]),WJ=m.useCallback((K,J)=>{ve==null||ve(J.id)},[ve]),TH=Ct?"crosshair":RH?FJ?"grabbing":"grab":void 0,NH=l[0],DH=c[0],GJ=NH?a.find(K=>K.id===NH)??null:null,ZJ=DH?s.find(K=>K.id===DH)??null:null,KJ=o??null,XJ=_e.showDetailPanel&&!we,YJ=m.useMemo(()=>({custom:Rt??{}}),[Rt]);return y.jsx(Zue,{value:YJ,children:y.jsx("div",{"data-testid":"seeflow-canvas","data-mode":n,ref:an,className:"seeflow-canvas-root sf:relative sf:h-full sf:w-full",style:TH?{cursor:TH}:void 0,onPointerDownCapture:IJ,onPointerDown:K=>{RH&&n0(!0),x1(K)},onPointerMove:_z,onPointerUp:K=>{n0(!1),Kh(K)},onPointerCancel:()=>{Xt.current=!1,Wr.current=null,Nn.current=null,$r(null),Lo(null),n0(!1)},onContextMenuCapture:EJ,onDragOver:AJ,onDrop:PJ,children:y.jsxs(Khe,{containerRef:an,children:[y.jsxs(m1e,{nodes:na,edges:qz,onNodesChange:bJ,nodeTypes:Uwe,edgeTypes:Wwe,proOptions:{hideAttribution:!0},fitView:!0,minZoom:n==="mini"?.05:.5,nodesDraggable:(Mt?!!p:!0)&&!Ct&&_e.enableNodeMove,nodesConnectable:Mt&&!!E&&!Ct,deleteKeyCode:Mt?["Backspace","Delete"]:null,zoomOnScroll:_e.enableZoom,zoomOnPinch:_e.enableZoom,className:tr?"seeflow-connecting":void 0,onConnect:Mt?zJ:void 0,isValidConnection:Vz,onConnectStart:(K,J)=>{kr(!0),e0.current=!1,PH.current={nodeId:J.nodeId??null,handleType:J.handleType??null},kn(J.nodeId??null)},onConnectEnd:jJ,onReconnect:Mt&&z?TJ:void 0,onReconnectStart:(K,J,se)=>{kr(!0),t0.current=!1,ni.current=!0;const ce=se==="source"?J.source:J.target;kn(ce)},onReconnectEnd:NJ,connectionLineComponent:g1,connectionLineStyle:{strokeWidth:2},connectionRadius:32,reconnectRadius:10,edgesReconnectable:!1,elevateNodesOnSelect:!1,elementsSelectable:!Ct&&_e.enableSelection,selectNodesOnDrag:!1,nodeClickDistance:5,selectionOnDrag:!Ct&&_e.enableSelection,panOnDrag:Ct?!1:_e.enablePan?[1,2]:!1,selectionMode:Eu.Partial,selectionKeyCode:null,multiSelectionKeyCode:Ct?null:["Meta","Shift"],panActivationKeyCode:Ct?null:"Space",onSelectionStart:SJ,onSelectionEnd:LJ,defaultEdgeOptions:Gwe,zoomOnDoubleClick:!1,onInit:K=>{jt.current=K;const J=an.current;J&&J.style.setProperty("--rf-zoom",String(K.getZoom())),!bo.current&&jn.onMount&&a.length>0&&(K.fitView(Ad),bo.current=!0),re==null||re(K)},onMove:(K,J)=>{Br.current&&Vr(null);const se=an.current;se&&se.style.setProperty("--rf-zoom",String(J.zoom))},onEdgesChange:CJ,onNodeDragStart:()=>{Io.current=!0},onNodeDragStop:qJ,onSelectionDragStart:VJ,onSelectionDragStop:BJ,onNodeClick:$J,onEdgeClick:WJ,onEdgeDoubleClick:(K,J)=>{var se;(se=Tn.current.get(J.id))==null||se()},onPaneClick:UJ,onNodeContextMenu:_e.enableContextMenu&&sd?(K,J)=>{K.preventDefault(),Ue.current=J.id,$(!0),oe(J.type??null),be(null),q({x:K.clientX,y:K.clientY})}:void 0,onPaneContextMenu:_e.enableContextMenu&&V?K=>{K.preventDefault(),Ue.current=null,$(!1),oe(null),be(null),q({x:K.clientX,y:K.clientY})}:void 0,children:[y.jsx(Xwe,{storeApiRef:Co}),y.jsx(Ywe,{wrapperRef:an}),y.jsx(L1e,{gap:12,size:.6}),_e.showControls?y.jsxs(j1e,{showInteractive:!1,showFitView:!1,children:[y.jsx(X1,{"data-testid":"controls-fit-view","aria-label":"Fit view",title:"Fit view",disabled:a.length===0,onClick:()=>{var K;(K=jt.current)==null||K.fitView(Ad)},children:y.jsx(iu,{className:"sf:h-3 sf:w-3","aria-hidden":"true"})}),y.jsx(X1,{"data-testid":"controls-tidy","aria-label":"Tidy layout (⌘⇧L)",title:"Tidy layout (⌘⇧L)",disabled:!Jh,onClick:()=>Jh==null?void 0:Jh(),children:y.jsx(s2,{className:"sf:h-3 sf:w-3","aria-hidden":"true"})})]}):null,_e.showResizeHandles?y.jsx(R3e,{selectedNodes:Ht,onMultiResize:M}):null,_e.showToolbar&&C||_e.showStyleStrip&&W&&X?y.jsx(ju,{position:"top-left",children:y.jsxs("div",{className:"sf:flex sf:flex-col sf:gap-2",children:[_e.showToolbar&&C?y.jsx(ume,{activeShape:Ct,onSelectShape:Yi,iconPickerOpen:ee??!1,onOpenIconPicker:me,onCloseIconPicker:Fe,onPickIcon:rt}):null,_e.showStyleStrip&&W&&X?y.jsx(j3e,{nodes:xn,connectors:I??[],onStyleNode:W,onStyleNodePreview:H,onStyleNodes:j,onStyleNodesPreview:G,onStyleConnector:X,onStyleConnectorPreview:Y,onRequestIconReplace:mt}):null]})}):null,_e.showShareMenu||_e.showRestart&&Ne?y.jsx(ju,{position:"top-right",children:y.jsxs("div",{className:"sf:flex sf:items-center sf:gap-1",children:[_e.showRestart&&Ne?y.jsx(I3e,{onRestartDemo:Ne}):null,_e.showShareMenu?y.jsx(L3e,{mode:n==="mini"?"view":n,projectId:o,enableEmbed:_e.enableEmbed,onDownloadPdf:si.exportPdf,onDownloadPng:si.exportPng,onExportToCloud:st,embedOpen:OJ,onEmbedOpenChange:jH}):null]})}):null]}),oa?y.jsx("div",{"data-testid":"canvas-draw-ghost","data-ghost-shape":Ct??void 0,"aria-hidden":!0,className:ie("sf:pointer-events-none sf:absolute sf:z-10",DJ,HJ?"sf:rounded-sm sf:border sf:border-dashed sf:border-muted-foreground/40":""),style:{..._J,left:oa.left,top:oa.top,width:oa.width,height:oa.height},children:(()=>{const K=Ct?O_[Ct]:void 0;return K?y.jsx(K,{width:oa.width,height:oa.height,borderColor:tt(void 0,"node").borderColor,backgroundColor:mh,borderSize:C_}):null})()}):null,_e.enableContextMenu&&sd?y.jsxs(Tpe,{onOpenChange:K=>{K||(q(null),Ue.current=null,oe(null),be(null))},children:[y.jsx(Npe,{asChild:!0,children:y.jsx("div",{ref:Ut,"data-testid":"node-context-menu-trigger","aria-hidden":!0,className:"sf:pointer-events-none sf:fixed",style:{left:(F==null?void 0:F.x)??0,top:(F==null?void 0:F.y)??0,width:0,height:0}})}),y.jsxs(_X,{"data-testid":"node-context-menu",children:[Ae!=null&&Ae.pinned&&le?y.jsx(to,{"data-testid":"connector-endpoint-context-menu-unpin",onSelect:Yt,children:"Unpin"}):null,Z&&R?y.jsxs(to,{"data-testid":"node-context-menu-copy",onSelect:Re,children:["Copy",y.jsx(DN,{children:Hz})]}):null,V?y.jsxs(to,{"data-testid":"node-context-menu-paste",disabled:!O,onSelect:gn,children:["Paste",y.jsx(DN,{children:ii})]}):null,Z&&(R||V)&&(_==="iconNode"&&mt||A||U)?y.jsx(bP,{}):null,Z&&_==="iconNode"&&mt?y.jsx(to,{"data-testid":"node-context-menu-change-icon",onSelect:it,children:"Change icon"}):null,Z&&_==="iconNode"&&mt&&(A||U)?y.jsx(bP,{}):null,Z&&A?y.jsxs(y.Fragment,{children:[y.jsx(to,{"data-testid":"node-context-menu-to-front",onSelect:()=>Eo({op:"toFront"}),children:"Bring to front"}),y.jsx(to,{"data-testid":"node-context-menu-forward",onSelect:()=>Eo({op:"forward"}),children:"Bring forward"}),y.jsx(to,{"data-testid":"node-context-menu-backward",onSelect:()=>Eo({op:"backward"}),children:"Send backward"}),y.jsx(to,{"data-testid":"node-context-menu-to-back",onSelect:()=>Eo({op:"toBack"}),children:"Send to back"})]}):null,Z&&A&&U?y.jsx(bP,{}):null,Z&&U?y.jsx(to,{"data-testid":"node-context-menu-delete",onSelect:Dn,children:"Delete"}):null]})]}):null,ge?y.jsxs(Ju,{open:!!mn,onOpenChange:K=>{K||Vr(null)},children:[y.jsx(Xhe,{asChild:!0,children:y.jsx("div",{"data-testid":"drop-popover-anchor","aria-hidden":!0,className:"sf:pointer-events-none sf:fixed",style:{left:(mn==null?void 0:mn.clientX)??0,top:(mn==null?void 0:mn.clientY)??0,width:0,height:0}})}),y.jsx(c1,{"data-testid":"drop-popover",align:"start",side:"bottom",sideOffset:4,className:"sf:w-auto sf:p-1",onOpenAutoFocus:K=>{K.preventDefault()},children:y.jsx("div",{role:"menu","aria-label":"Create connected node",className:"sf:flex sf:flex-col sf:gap-0.5",children:cme.map(({shape:K,label:J,Icon:se})=>y.jsxs("button",{type:"button",role:"menuitem","data-testid":`drop-popover-shape-${K}`,onClick:()=>{const ce=mn;ce&&(ge({sourceNodeId:ce.sourceNodeId,position:{x:ce.flowX,y:ce.flowY},shape:K}),Vr(null))},className:ie("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:[y.jsx(se,{className:"sf:h-4 sf:w-4 sf:text-muted-foreground","aria-hidden":"true"}),y.jsx("span",{children:J})]},K))})})]}):null,XJ?y.jsx(r3e,{flowId:KJ,node:GJ,connector:ZJ,adapter:r??null,statusReport:Se,onNameChange:Oe,onDescriptionChange:te,onDetailChange:ue,onIconChange:Pe,onClose:()=>{var K;(K=Zr.current)==null||K.call(Zr,[],[])}}):null]})})})}const r6e=m.forwardRef(n6e);function o6e({open:e,onOpenChange:t,onCreated:n}){const[r,o]=m.useState(""),[i,a]=m.useState(null),[s,l]=m.useState(!1);m.useEffect(()=>{e&&(o(""),a(null),l(!1))},[e]);const c=r.trim(),h=c.length>0&&!s,d=async f=>{if(f.preventDefault(),!!h){l(!0),a(null);try{const p=await Ine({name:c});n(p),t(!1)}catch(p){a(p instanceof Error?p.message:String(p)),l(!1)}}};return y.jsx(gz,{open:e,onOpenChange:t,children:y.jsxs(Nh,{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:[y.jsxs(Dh,{children:[y.jsx(_h,{children:"Create new project"}),y.jsxs(Hh,{children:["The project will be created at ",y.jsx("code",{children:"~/.seeflow/<slug>"}),"."]})]}),y.jsxs("form",{onSubmit:d,className:"flex flex-col gap-4",children:[y.jsxs("label",{className:"flex flex-col gap-1.5 text-sm",children:[y.jsx("span",{className:"font-medium",children:"Project name"}),y.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"})]}),i?y.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:i}):null,y.jsxs(Hu,{children:[y.jsx(Nt,{type:"button",variant:"ghost",onClick:()=>t(!1),disabled:s,children:"Cancel"}),y.jsx(Nt,{type:"submit",disabled:!h,"data-testid":"create-project-submit",children:s?"Creating…":"Create project"})]})]})]})})}const rD="seeflow:navigate",i6e=e=>(window.addEventListener("popstate",e),window.addEventListener(rD,e),()=>{window.removeEventListener("popstate",e),window.removeEventListener(rD,e)}),wB=()=>window.location.pathname,a6e=()=>m.useSyncExternalStore(i6e,wB,wB),qu=e=>{e!==window.location.pathname&&(window.history.pushState({},"",e),window.dispatchEvent(new Event(rD)))};function s6e({demos:e,currentSlug:t,onProjectCreated:n,onProjectUnregistered:r}){const[o,i]=m.useState(!1),[a,s]=m.useState(!1),[l,c]=m.useState(null),[h,d]=m.useState(!1),[f,p]=m.useState(null);m.useEffect(()=>{const x=b=>{b.key==="k"&&(b.metaKey||b.ctrlKey)&&(b.preventDefault(),i(S=>!S))};return document.addEventListener("keydown",x),()=>document.removeEventListener("keydown",x)},[]);const k=e.find(x=>x.slug===t),v=x=>{n==null||n(x),qu(`/d/${x.slug}`)},w=x=>{c(x),p(null)},g=()=>{h||(c(null),p(null))},M=async()=>{if(l){d(!0),p(null);try{await Lne(l.id);const x=l.id;c(null),r==null||r(x)}catch(x){p(x instanceof Error?x.message:String(x))}finally{d(!1)}}};return y.jsxs(y.Fragment,{children:[y.jsxs(Ju,{open:o,onOpenChange:i,children:[y.jsx(Eh,{asChild:!0,children:y.jsxs(Nt,{type:"button",variant:"outline",size:"sm","aria-label":"Switch demo","aria-expanded":o,className:"gap-2","data-testid":"project-switcher-trigger",children:[y.jsx("span",{className:"max-w-[180px] truncate text-sm",children:(k==null?void 0:k.name)??"Select demo"}),y.jsx(TK,{children:"⌘K"}),y.jsx(Qd,{className:"h-3.5 w-3.5 opacity-60"})]})}),y.jsx(c1,{align:"end",sideOffset:6,className:"w-[320px] p-0","data-testid":"project-switcher-popover",children:y.jsxs(AK,{children:[y.jsx(PK,{placeholder:"Search demos..."}),y.jsxs(RK,{children:[y.jsx(zK,{children:"No demos."}),e.length>0?y.jsx(zN,{heading:"Demos",children:e.map(x=>y.jsxs(jN,{value:`${x.name} ${x.slug}`,onSelect:()=>{i(!1),qu(`/d/${x.slug}`)},className:"group flex items-center justify-between gap-2",children:[y.jsxs("div",{className:"flex min-w-0 flex-col items-start gap-0.5",children:[y.jsx("span",{className:"font-medium",children:x.name}),y.jsx("span",{className:"w-full truncate text-xs text-muted-foreground",children:x.repoPath})]}),y.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(),i(!1),w(x)},children:y.jsx(v2,{className:"h-3.5 w-3.5"})})]},x.id))}):null,e.length>0?y.jsx(jK,{}):null,y.jsx(zN,{children:y.jsxs(jN,{value:"+ create new project",onSelect:()=>{i(!1),s(!0)},"data-testid":"project-switcher-create",className:"flex items-center gap-2 text-sm",children:[y.jsx(d2,{className:"h-4 w-4 opacity-70"}),y.jsx("span",{className:"font-medium",children:"Create new project"})]})})]})]})})]}),y.jsx(o6e,{open:a,onOpenChange:s,onCreated:v}),y.jsx(gz,{open:l!==null,onOpenChange:x=>{x||g()},children:y.jsxs(Nh,{className:"sm:max-w-md","data-testid":"unregister-project-dialog",children:[y.jsxs(Dh,{children:[y.jsx(_h,{children:"Unregister project?"}),y.jsxs(Hh,{children:["This removes ",y.jsx("strong",{children:l==null?void 0:l.name})," from SeeFlow. Your files at"," ",y.jsx("code",{className:"text-xs",children:l==null?void 0:l.repoPath})," will not be deleted."]})]}),f?y.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,y.jsxs(Hu,{children:[y.jsx(Nt,{type:"button",variant:"ghost",onClick:g,disabled:h,children:"Cancel"}),y.jsx(Nt,{type:"button",variant:"destructive",onClick:M,disabled:h,"data-testid":"unregister-project-confirm",children:h?"Unregistering…":"Unregister"})]})]})})]})}function l6e({demos:e,currentSlug:t,onProjectCreated:n,onProjectUnregistered:r}){return y.jsxs("header",{className:"relative flex h-14 shrink-0 items-center justify-between border-b border-border/60 bg-background/85 px-5 backdrop-blur-md shadow-[0_4px_12px_-6px_rgba(0,0,0,0.6)]",children:[y.jsxs("button",{type:"button",onClick:()=>qu("/"),className:"-ml-1.5 flex items-center gap-2 rounded-md px-1.5 py-1 text-base font-bold tracking-tight transition-colors hover:bg-muted/60",children:[y.jsx(b2,{size:18,strokeWidth:2.25,className:"text-emerald-400"}),"SeeFlow",y.jsxs("span",{className:"ml-1 text-[10px] font-normal tracking-normal text-muted-foreground/70",children:["v","0.1.39"]})]}),y.jsx("div",{className:"flex items-center gap-3",children:y.jsx(s6e,{demos:e,currentSlug:t,onProjectCreated:n,onProjectUnregistered:r})})]})}const c6e=e=>{const[t,n]=m.useState(null),[r,o]=m.useState(e!==null),[i,a]=m.useState(null),s=m.useCallback(()=>{e&&(o(!0),YU(e).then(c=>{n(c),a(null)}).catch(c=>{console.error("[useDemoData] failed",c),a(String(c))}).finally(()=>o(!1)))},[e]),l=m.useCallback(c=>{n(c),a(null)},[]);return m.useEffect(()=>{if(!e){n(null),o(!1);return}s()},[e,s]),{detail:t,loading:r,error:i,refresh:s,applyDetail:l}},u6e=()=>{const[e,t]=m.useState(null),[n,r]=m.useState(null),o=m.useCallback(()=>Sne().then(i=>{t(i),r(null)}).catch(i=>{console.error("[useDemos] failed",i),t([]),r(String(i))}),[]);return m.useEffect(()=>{o()},[o]),{demos:e,error:n,refresh:o}},d6e=5,h6e={"node:running":"running","node:done":"done","node:error":"error"},f6e=(e,t)=>{if(t.type==="reset")return{};const n=e[t.nodeId]??[],r=[t.entry,...n].slice(0,d6e);return{...e,[t.nodeId]:r}},p6e=e=>{const[t,n]=m.useReducer(f6e,{}),r=m.useRef(n);r.current=n,m.useEffect(()=>{r.current({type:"reset"})},[e]);const o=m.useCallback(a=>{const s=h6e[a.type];if(!s)return;const l=typeof a.nodeId=="string"?a.nodeId:null;if(!l)return;const c=typeof a.runId=="string"?a.runId:void 0,h=typeof a.ts=="number"?a.ts:Date.now();r.current({type:"append",nodeId:l,entry:{status:s,ts:h,runId:c}})},[]),i=m.useCallback(()=>{r.current({type:"reset"})},[]);return{events:t,apply:o,reset:i}},y6e=(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()}}}},m6e=e=>{const[t,n]=m.useReducer(y6e,{}),r=m.useRef(n);r.current=n,m.useEffect(()=>{r.current({type:"reset"})},[e]);const o=m.useCallback(a=>{const s=typeof a.nodeId=="string"?a.nodeId:null;if(!s)return;const l=typeof a.runId=="string"?a.runId:void 0;if(a.type==="node:running"){r.current({type:"running",nodeId:s,runId:l,ts:a.ts});return}if(a.type==="node:done"){const c=typeof a.status=="number"?a.status:void 0;r.current({type:"done",nodeId:s,runId:l,responseStatus:c,body:a.body,ts:a.ts});return}if(a.type==="node:error"){const c=typeof a.message=="string"?a.message:void 0;r.current({type:"error",nodeId:s,runId:l,message:c,ts:a.ts})}},[]),i=m.useCallback(()=>{r.current({type:"reset"})},[]);return{runs:t,apply:o,reset:i}},k6e=new Set(["ok","warn","error","pending"]),g6e=(e,t)=>{if(t.type!=="node:status")return e;const n=typeof t.nodeId=="string"?t.nodeId:null;if(!n||typeof t.state!="string"||!k6e.has(t.state))return e;const r=typeof t.summary=="string"?t.summary:void 0,o=typeof t.detail=="string"?t.detail:void 0,i=t.data&&typeof t.data=="object"&&!Array.isArray(t.data)?t.data:void 0,a=typeof t.ts=="number"?t.ts:Date.now();return{...e,[n]:{state:t.state,summary:r,detail:o,data:i,ts:a}}},x6e=(e,t)=>{switch(t.type){case"reset":return{};case"event":return g6e(e,t.event)}},v6e=e=>{const[t,n]=m.useReducer(x6e,{}),r=m.useRef(n);r.current=n,m.useEffect(()=>{r.current({type:"reset"})},[e]);const o=m.useCallback(a=>{r.current({type:"event",event:a})},[]),i=m.useCallback(()=>{r.current({type:"reset"})},[]);return{statusByNode:t,apply:o,reset:i}},w6e=(e,t={})=>{const[n,r]=m.useState(!1),{onHello:o,onFlowReload:i,onEvent:a}=t,s=m.useRef(o),l=m.useRef(i),c=m.useRef(a);return m.useEffect(()=>{s.current=o,l.current=i,c.current=a},[o,i,a]),m.useEffect(()=>{if(!e){r(!1);return}const h=`/api/events?flowId=${encodeURIComponent(e)}`,d=new EventSource(h);d.addEventListener("open",()=>r(!0)),d.addEventListener("error",()=>r(!1)),d.addEventListener("hello",()=>{var f;(f=s.current)==null||f.call(s)}),d.addEventListener("flow:reload",f=>{var v,w;const p=MB(f,"flow:reload");(v=c.current)==null||v.call(c,p);const k=M6e(p);k&&((w=l.current)==null||w.call(l,k))});for(const f of["node:running","node:done","node:error","node:status"])d.addEventListener(f,p=>{var k;(k=c.current)==null||k.call(c,MB(p,f))});return()=>{d.close()}},[e]),{connected:n}},MB=(e,t)=>{try{const n=JSON.parse(e.data);return{type:t,ts:Date.now(),...n}}catch{return{type:t,ts:Date.now()}}},M6e=e=>e.valid===!0&&e.flow&&typeof e.flow=="object"?{valid:!0,flow:e.flow}:e.valid===!1&&typeof e.error=="string"?{valid:!1,error:e.error}:null,sJ="seeflow:last-project",b6e=()=>{if(typeof window>"u")return null;try{return window.localStorage.getItem(sJ)}catch{return null}},bB=e=>{if(!(typeof window>"u"))try{window.localStorage.setItem(sJ,e)}catch{}},C6e=(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},CB=["File","Edit","View","Tools","Layout","Selection","Help"],lJ="seeflow:command-palette:recent",cJ=5,uJ=new Map(M_.map(e=>[e.id,e])),S6e=e=>typeof e=="string"&&uJ.has(e),SB=()=>{if(typeof window>"u")return[];try{const e=window.localStorage.getItem(lJ);if(!e)return[];const t=JSON.parse(e);return Array.isArray(t)?t.filter(S6e).slice(0,cJ):[]}catch{return[]}},L6e=e=>{if(!(typeof window>"u"))try{window.localStorage.setItem(lJ,JSON.stringify(e))}catch{}},LB=(e,t)=>e.enabled?e.enabled(t):!0,I6e=(e,t)=>t.length===0?!0:`${e.label} ${e.description??""}`.toLowerCase().includes(t);function E6e({open:e,onOpenChange:t,runCommand:n,ctx:r}){const[o,i]=m.useState(""),[a,s]=m.useState(0),[l,c]=m.useState(()=>SB()),h=m.useRef(null),d=m.useRef(null);m.useEffect(()=>{e&&(i(""),s(0),c(SB()))},[e]);const{groups:f,flat:p}=m.useMemo(()=>{const b=o.trim().toLowerCase();if(b.length===0){if(l.length===0)return{groups:[],flat:[]};const T=[];for(const z of l){const A=uJ.get(z);A&&T.push({cmd:A,enabled:LB(A,r)})}return{groups:[{category:"Recent",rows:T}],flat:T}}const S=new Map;for(const T of M_){if(!I6e(T,b))continue;const E={cmd:T,enabled:LB(T,r)},z=S.get(T.category);z?z.push(E):S.set(T.category,[E])}const L=[...CB.filter(T=>S.has(T)),...Array.from(S.keys()).filter(T=>!CB.includes(T))].map(T=>({category:T,rows:S.get(T)??[]})),P=L.flatMap(T=>T.rows);return{groups:L,flat:P}},[o,r,l]);m.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 k=m.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]),v=m.useCallback(b=>{c(S=>{const C=[b,...S.filter(L=>L!==b)].slice(0,cJ);return L6e(C),C})},[]),w=m.useCallback(b=>{const S=p[b];!S||!S.enabled||(v(S.cmd.id),n(S.cmd.id),t(!1))},[p,t,v,n]),g=m.useCallback(b=>{if(b.key==="ArrowDown"){b.preventDefault(),k(1);return}if(b.key==="ArrowUp"){b.preventDefault(),k(-1);return}b.key==="Enter"&&(b.preventDefault(),w(a))},[w,a,k]);m.useEffect(()=>{if(!e)return;const b=d.current;if(!b)return;const S=b.querySelector(`[data-command-row-index="${a}"]`);S&&typeof S.scrollIntoView=="function"&&S.scrollIntoView({block:"nearest"})},[a,e]);const x=o.trim().length>0;return y.jsx(fz,{open:e,onOpenChange:t,children:y.jsx(pz,{children:y.jsxs(ed,{className:ie("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=h.current)==null||S.focus()},children:[y.jsx("div",{className:ie("border-b",p.length===0&&!x&&"border-b-0"),children:y.jsx("input",{ref:h,type:"text",value:o,onChange:b=>i(b.target.value),onKeyDown:g,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"})}),y.jsx("div",{ref:d,"data-testid":"command-palette-list","data-empty":p.length===0?"true":"false",className:ie("max-h-[50vh] overflow-y-auto",p.length>0?"py-1":"","seeflow-no-scrollbar"),children:p.length===0?x?y.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=>y.jsxs("div",{className:"py-1",children:[y.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===a;return y.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:ie("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:[y.jsxs("div",{className:"flex min-w-0 flex-col",children:[y.jsx("span",{className:"truncate font-medium",children:C.cmd.label}),C.cmd.description?y.jsx("span",{className:"truncate text-xs text-muted-foreground",children:C.cmd.description}):null]}),C.cmd.shortcut?y.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 rn=Uint8Array,$n=Uint16Array,SH=Int32Array,LH=new rn([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]),IH=new rn([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]),IB=new rn([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),dJ=function(e,t){for(var n=new $n(31),r=0;r<31;++r)n[r]=t+=1<<e[r-1];for(var o=new SH(n[30]),r=1;r<30;++r)for(var i=n[r];i<n[r+1];++i)o[i]=i-n[r]<<5|r;return{b:n,r:o}},hJ=dJ(LH,2),A6e=hJ.b,oD=hJ.r;A6e[28]=258,oD[258]=28;var P6e=dJ(IH,0),EB=P6e.r,iD=new $n(32768);for(var xt=0;xt<32768;++xt){var pi=(xt&43690)>>1|(xt&21845)<<1;pi=(pi&52428)>>2|(pi&13107)<<2,pi=(pi&61680)>>4|(pi&3855)<<4,iD[xt]=((pi&65280)>>8|(pi&255)<<8)>>1}var P2=function(e,t,n){for(var r=e.length,o=0,i=new $n(t);o<r;++o)e[o]&&++i[e[o]-1];var a=new $n(t);for(o=1;o<t;++o)a[o]=a[o-1]+i[o-1]<<1;var s;if(n){s=new $n(1<<t);var l=15-t;for(o=0;o<r;++o)if(e[o])for(var c=o<<4|e[o],h=t-e[o],d=a[e[o]-1]++<<h,f=d|(1<<h)-1;d<=f;++d)s[iD[d]>>l]=c}else for(s=new $n(r),o=0;o<r;++o)e[o]&&(s[o]=iD[a[e[o]-1]++]>>15-e[o]);return s},i1=new rn(288);for(var xt=0;xt<144;++xt)i1[xt]=8;for(var xt=144;xt<256;++xt)i1[xt]=9;for(var xt=256;xt<280;++xt)i1[xt]=7;for(var xt=280;xt<288;++xt)i1[xt]=8;var LR=new rn(32);for(var xt=0;xt<32;++xt)LR[xt]=5;var R6e=P2(i1,9,0),z6e=P2(LR,5,0),fJ=function(e){return(e+7)/8|0},pJ=function(e,t,n){return(n==null||n>e.length)&&(n=e.length),new rn(e.subarray(t,n))},j6e=["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"],Dz=function(e,t,n){var r=new Error(t||j6e[e]);if(r.code=e,Error.captureStackTrace&&Error.captureStackTrace(r,Dz),!n)throw r;return r},To=function(e,t,n){n<<=t&7;var r=t/8|0;e[r]|=n,e[r+1]|=n>>8},Pd=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},uT=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,i=n.slice();if(!o)return{t:mJ,l:0};if(o==1){var a=new rn(n[0].s+1);return a[n[0].s]=1,{t:a,l:1}}n.sort(function(S,C){return S.f-C.f}),n.push({s:-1,f:25001});var s=n[0],l=n[1],c=0,h=1,d=2;for(n[0]={s:-1,f:s.f+l.f,l:s,r:l};h!=o-1;)s=n[n[c].f<n[d].f?c++:d++],l=n[c!=h&&n[c].f<n[d].f?c++:d++],n[h++]={s:-1,f:s.f+l.f,l:s,r:l};for(var f=i[0].s,r=1;r<o;++r)i[r].s>f&&(f=i[r].s);var p=new $n(f+1),k=aD(n[h-1],p,0);if(k>t){var r=0,v=0,w=k-t,g=1<<w;for(i.sort(function(C,L){return p[L.s]-p[C.s]||C.f-L.f});r<o;++r){var M=i[r].s;if(p[M]>t)v+=g-(1<<k-p[M]),p[M]=t;else break}for(v>>=w;v>0;){var x=i[r].s;p[x]<t?v-=1<<t-p[x]++-1:++r}for(;r>=0&&v;--r){var b=i[r].s;p[b]==t&&(--p[b],++v)}k=t}return{t:new rn(p),l:k}},aD=function(e,t,n){return e.s==-1?Math.max(aD(e.l,t,n+1),aD(e.r,t,n+1)):t[e.s]=n},AB=function(e){for(var t=e.length;t&&!e[--t];);for(var n=new $n(++t),r=0,o=e[0],i=1,a=function(l){n[r++]=l},s=1;s<=t;++s)if(e[s]==o&&s!=t)++i;else{if(!o&&i>2){for(;i>138;i-=138)a(32754);i>2&&(a(i>10?i-11<<5|28690:i-3<<5|12305),i=0)}else if(i>3){for(a(o),--i;i>6;i-=6)a(8304);i>2&&(a(i-3<<5|8208),i=0)}for(;i--;)a(o);i=1,o=e[s]}return{c:n.subarray(0,r),n:t}},Rd=function(e,t){for(var n=0,r=0;r<t.length;++r)n+=e[r]*t[r];return n},yJ=function(e,t,n){var r=n.length,o=fJ(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 i=0;i<r;++i)e[o+i+4]=n[i];return(o+4+r)*8},PB=function(e,t,n,r,o,i,a,s,l,c,h){To(t,h++,n),++o[256];for(var d=uT(o,15),f=d.t,p=d.l,k=uT(i,15),v=k.t,w=k.l,g=AB(f),M=g.c,x=g.n,b=AB(v),S=b.c,C=b.n,L=new $n(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=uT(L,7),E=T.t,z=T.l,A=19;A>4&&!E[IB[A-1]];--A);var U=c+5<<3,R=Rd(o,i1)+Rd(i,LR)+a,V=Rd(o,f)+Rd(i,v)+a+14+3*A+Rd(L,E)+2*L[16]+3*L[17]+7*L[18];if(l>=0&&U<=R&&U<=V)return yJ(t,h,e.subarray(l,l+c));var O,B,D,N;if(To(t,h,1+(V<R)),h+=2,V<R){O=P2(f,p,0),B=f,D=P2(v,w,0),N=v;var I=P2(E,z,0);To(t,h,x-257),To(t,h+5,C-1),To(t,h+10,A-4),h+=14;for(var P=0;P<A;++P)To(t,h+3*P,E[IB[P]]);h+=3*A;for(var W=[M,S],H=0;H<2;++H)for(var j=W[H],P=0;P<j.length;++P){var G=j[P]&31;To(t,h,I[G]),h+=E[G],G>15&&(To(t,h,j[P]>>5&127),h+=j[P]>>12)}}else O=R6e,B=i1,D=z6e,N=LR;for(var P=0;P<s;++P){var X=r[P];if(X>255){var G=X>>18&31;Pd(t,h,O[G+257]),h+=B[G+257],G>7&&(To(t,h,X>>23&31),h+=LH[G]);var Y=X&31;Pd(t,h,D[Y]),h+=N[Y],Y>3&&(Pd(t,h,X>>5&8191),h+=IH[Y])}else Pd(t,h,O[X]),h+=B[X]}return Pd(t,h,O[256]),h+B[256]},T6e=new SH([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),mJ=new rn(0),N6e=function(e,t,n,r,o,i){var a=i.z||e.length,s=new rn(r+a+5*(1+Math.ceil(a/7e3))+o),l=s.subarray(r,s.length-o),c=i.l,h=(i.r||0)&7;if(t){h&&(l[0]=i.r>>3);for(var d=T6e[t-1],f=d>>13,p=d&8191,k=(1<<n)-1,v=i.p||new $n(32768),w=i.h||new $n(k+1),g=Math.ceil(n/3),M=2*g,x=function(ee){return(e[ee]^e[ee+1]<<g^e[ee+2]<<M)&k},b=new SH(25e3),S=new $n(288),C=new $n(32),L=0,P=0,T=i.i||0,E=0,z=i.w||0,A=0;T+2<a;++T){var U=x(T),R=T&32767,V=w[U];if(v[R]=V,w[U]=R,z<=T){var O=a-T;if((L>7e3||E>24576)&&(O>423||!c)){h=PB(e,l,0,b,S,C,P,E,A,T-A,h),E=L=P=0,A=T;for(var B=0;B<286;++B)S[B]=0;for(var B=0;B<30;++B)C[B]=0}var D=2,N=0,I=p,W=R-V&32767;if(O>2&&U==x(T-W))for(var H=Math.min(f,O)-1,j=Math.min(32767,T),G=Math.min(258,O);W<=j&&--I&&R!=V;){if(e[T+D]==e[T+D-W]){for(var X=0;X<G&&e[T+X]==e[T+X-W];++X);if(X>D){if(D=X,N=W,X>H)break;for(var Y=Math.min(W,X-2),re=0,B=0;B<Y;++B){var ne=T-W+B&32767,ae=v[ne],ve=ne-ae&32767;ve>re&&(re=ve,V=ne)}}}R=V,V=v[R],W+=R-V&32767}if(N){b[E++]=268435456|oD[D]<<18|EB[N];var ke=oD[D]&31,ge=EB[N]&31;P+=LH[ke]+IH[ge],++S[257+ke],++C[ge],z=T+D,++L}else b[E++]=e[T],++S[e[T]]}}for(T=Math.max(T,z);T<a;++T)b[E++]=e[T],++S[e[T]];h=PB(e,l,c,b,S,C,P,E,A,T-A,h),c||(i.r=h&7|l[h/8|0]<<3,h-=7,i.h=w,i.p=v,i.i=T,i.w=z)}else{for(var T=i.w||0;T<a+c;T+=65535){var xe=T+65535;xe>=a&&(l[h/8|0]=c,xe=a),h=yJ(l,h+1,e.subarray(T,xe))}i.i=a}return pJ(s,0,r+fJ(h)+o)},D6e=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}(),_6e=function(){var e=-1;return{p:function(t){for(var n=e,r=0;r<t.length;++r)n=D6e[n&255^t[r]]^n>>>8;e=n},d:function(){return~e}}},kJ=function(){var e=1,t=0;return{p:function(n){for(var r=e,o=t,i=n.length|0,a=0;a!=i;){for(var s=Math.min(a+2655,i);a<s;++a)o+=r+=n[a];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}}},gJ=function(e,t,n,r,o){if(!o&&(o={l:1},t.dictionary)){var i=t.dictionary.subarray(-32768),a=new rn(i.length+e.length);a.set(i),a.set(e,i.length),e=a,o.w=i.length}return N6e(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)},xJ=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},Ot=function(e,t,n){for(;n;++t)e[t]=n,n>>>=8},H6e=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=kJ();o.p(t.dictionary),Ot(e,2,o.d())}};function F6e(e,t){return gJ(e,t||{},0,0)}function I8e(e,t){t||(t={});var n=kJ();n.p(e);var r=gJ(e,t,t.dictionary?6:2,4);return H6e(r,t),Ot(r,r.length-4,n.d()),r}var vJ=function(e,t,n,r){for(var o in e){var i=e[o],a=t+o,s=r;Array.isArray(i)&&(s=xJ(r,i[1]),i=i[0]),i instanceof rn?n[a]=[i,s]:(n[a+="/"]=[new rn(0),s],vJ(i,a,n,r))}},RB=typeof TextEncoder<"u"&&new TextEncoder,O6e=typeof TextDecoder<"u"&&new TextDecoder,q6e=0;try{O6e.decode(mJ,{stream:!0}),q6e=1}catch{}function sD(e,t){var n;if(RB)return RB.encode(e);for(var r=e.length,o=new rn(e.length+(e.length>>1)),i=0,a=function(c){o[i++]=c},n=0;n<r;++n){if(i+5>o.length){var s=new rn(i+8+(r-n<<1));s.set(o),o=s}var l=e.charCodeAt(n);l<128||t?a(l):l<2048?(a(192|l>>6),a(128|l&63)):l>55295&&l<57344?(l=65536+(l&1047552)|e.charCodeAt(++n)&1023,a(240|l>>18),a(128|l>>12&63),a(128|l>>6&63),a(128|l&63)):(a(224|l>>12),a(128|l>>6&63),a(128|l&63))}return pJ(o,0,i)}var lD=function(e){var t=0;if(e)for(var n in e){var r=e[n].length;r>65535&&Dz(9),t+=r+4}return t},zB=function(e,t,n,r,o,i,a,s){var l=r.length,c=n.extra,h=s&&s.length,d=lD(c);Ot(e,t,a!=null?33639248:67324752),t+=4,a!=null&&(e[t++]=20,e[t++]=n.os),e[t]=20,t+=2,e[t++]=n.flag<<1|(i<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)&&Dz(10),Ot(e,t,p<<25|f.getMonth()+1<<21|f.getDate()<<16|f.getHours()<<11|f.getMinutes()<<5|f.getSeconds()>>1),t+=4,i!=-1&&(Ot(e,t,n.crc),Ot(e,t+4,i<0?-i-2:i),Ot(e,t+8,n.size)),Ot(e,t+12,l),Ot(e,t+14,d),t+=16,a!=null&&(Ot(e,t,h),Ot(e,t+6,n.attrs),Ot(e,t+10,a),t+=14),e.set(r,t),t+=l,d)for(var k in c){var v=c[k],w=v.length;Ot(e,t,+k),Ot(e,t+2,w),e.set(v,t+4),t+=4+w}return h&&(e.set(s,t),t+=h),t},V6e=function(e,t,n,r,o){Ot(e,t,101010256),Ot(e,t+8,n),Ot(e,t+10,n),Ot(e,t+12,r),Ot(e,t+16,o)};function B6e(e,t){t||(t={});var n={},r=[];vJ(e,"",n,t);var o=0,i=0;for(var a in n){var s=n[a],l=s[0],c=s[1],h=c.level==0?0:8,d=sD(a),f=d.length,p=c.comment,k=p&&sD(p),v=k&&k.length,w=lD(c.extra);f>65535&&Dz(11);var g=h?F6e(l,c):l,M=g.length,x=_6e();x.p(l),r.push(xJ(c,{size:l.length,crc:x.d(),c:g,f:d,m:k,u:f!=a.length||k&&p.length!=v,o,compression:h})),o+=30+f+w+M,i+=76+2*(f+w)+(v||0)+M}for(var b=new rn(i+22),S=o,C=i-o,L=0;L<r.length;++L){var d=r[L];zB(b,d.o,d,d.f,d.u,d.c.length);var P=30+d.f.length+lD(d.extra);b.set(d.c,d.o+P),zB(b,o,d,d.f,d.u,d.c.length,d.o,d.m),o+=16+P+(d.m?d.m.length:0)}return V6e(b,o,r.length,C,S),b}const $6e="https://seeflow.dev/api";async function U6e(e,t,n,r,o){const i=await YU(e);if(!i.flow)throw new Error("Flow has no data");const a=i.flow,s=new Set,l=[];for(const k of a.nodes)k.type==="imageNode"&&k.data.path&&!s.has(k.data.path)?(s.add(k.data.path),l.push(k.data.path)):k.type==="htmlNode"&&k.data.htmlPath&&!s.has(k.data.htmlPath)&&(s.add(k.data.htmlPath),l.push(k.data.htmlPath));const h={[r==="link"?"flow.private.json":"flow.json"]:sD(JSON.stringify(a))};if(o){const k=o.split(",")[1];k&&(h["preview.png"]=Uint8Array.from(atob(k),v=>v.charCodeAt(0)))}for(const k of l){const v=await fetch(`/api/projects/${encodeURIComponent(e)}/files/${k}`);v.ok&&(h[`files/${k}`]=new Uint8Array(await v.arrayBuffer()))}const d=B6e(h),f=await fetch(`${$6e}/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 W6e(e){return m.useCallback((t,n,r,o)=>U6e(e,t,n,r,o),[e])}const jB="seeflow.export.email",TB="seeflow.export.name",NB="seeflow.export.visibility";function G6e({open:e,onOpenChange:t,projectId:n,onCapturePreview:r}){const[o,i]=m.useState(""),[a,s]=m.useState(""),[l,c]=m.useState("public"),[h,d]=m.useState({kind:"idle"}),[f,p]=m.useState(!1),k=W6e(n);m.useEffect(()=>{e&&(i(localStorage.getItem(jB)??""),s(localStorage.getItem(TB)??""),c(localStorage.getItem(NB)??"public"),d({kind:"idle"}),p(!1))},[e]);const v=m.useCallback(async()=>{d({kind:"loading"});try{const x=await(r==null?void 0:r()),{shareUrl:b}=await k(o.trim(),a.trim(),l,x);localStorage.setItem(jB,o.trim()),localStorage.setItem(TB,a.trim()),localStorage.setItem(NB,l),d({kind:"done",shareUrl:b})}catch(x){d({kind:"error",message:x instanceof Error?x.message:String(x)})}},[k,o,a,l,r]),w=m.useCallback(async()=>{if(h.kind==="done")try{await navigator.clipboard.writeText(h.shareUrl),p(!0),setTimeout(()=>p(!1),2e3)}catch(x){console.error("Failed to copy to clipboard:",x)}},[h]),g=h.kind==="loading",M=o.trim().length>0&&a.trim().length>0;return y.jsx(gz,{open:e,onOpenChange:t,children:y.jsxs(Nh,{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:[y.jsxs(Dh,{children:[y.jsx(_h,{children:"Export to seeflow.dev"}),y.jsx(Hh,{children:"Upload this diagram to the cloud and get a shareable link."})]}),h.kind!=="done"?y.jsxs(y.Fragment,{children:[y.jsxs("div",{className:"flex flex-col gap-4",children:[y.jsxs("label",{className:"flex flex-col gap-1.5 text-sm",children:[y.jsx("span",{className:"font-medium",children:"Email"}),y.jsx("input",{type:"email",required:!0,autoComplete:"email",value:o,onChange:x=>i(x.target.value),disabled:g,"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"}),y.jsx("span",{className:"text-xs text-muted-foreground",children:"We'll use this to let you manage your flows in the future."})]}),y.jsxs("label",{className:"flex flex-col gap-1.5 text-sm",children:[y.jsx("span",{className:"font-medium",children:"Flow Name"}),y.jsx("input",{type:"text",required:!0,value:a,onChange:x=>s(x.target.value),disabled:g,"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"})]}),y.jsxs("label",{className:"flex flex-col gap-1.5 text-sm",children:[y.jsx("span",{className:"font-medium",children:"Visibility"}),y.jsxs("select",{value:l,onChange:x=>c(x.target.value),disabled:g,"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:[y.jsx("option",{value:"public",children:"Public — anyone can discover it"}),y.jsx("option",{value:"link",children:"Anyone with the link"})]})]}),h.kind==="error"?y.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:h.message}):null]}),y.jsx(Hu,{children:h.kind==="error"?y.jsxs(y.Fragment,{children:[y.jsx(Nt,{type:"button",variant:"ghost",onClick:()=>t(!1),"data-testid":"export-cancel",children:"Cancel"}),y.jsx(Nt,{type:"button",onClick:()=>d({kind:"idle"}),"data-testid":"export-retry",children:"Try again"})]}):y.jsxs(y.Fragment,{children:[y.jsx(Nt,{type:"button",variant:"ghost",onClick:()=>t(!1),disabled:g,"data-testid":"export-cancel",children:"Cancel"}),y.jsx(Nt,{type:"button",onClick:v,disabled:g||!M,"data-testid":"export-submit",children:g?y.jsxs(y.Fragment,{children:[y.jsx(Cr,{className:"h-4 w-4 animate-spin","aria-hidden":"true"}),y.jsx("span",{children:"Uploading…"})]}):"Export"})]})})]}):y.jsxs(y.Fragment,{children:[y.jsxs("div",{className:"flex flex-col gap-3",children:[y.jsx("p",{className:"text-sm text-muted-foreground",children:"Your diagram is live. Share this link:"}),y.jsxs("div",{className:"flex gap-2",children:[y.jsx("input",{type:"text",readOnly:!0,value:h.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"}),y.jsx(Nt,{type:"button",variant:"outline",size:"icon",onClick:w,"aria-label":"Copy link","data-testid":"export-copy",children:f?y.jsx(fo,{className:"h-4 w-4","aria-hidden":"true"}):y.jsx(ou,{className:"h-4 w-4","aria-hidden":"true"})}),y.jsx(Nt,{type:"button",variant:"outline",size:"icon",onClick:()=>window.open(h.shareUrl,"_blank"),"aria-label":"View in new tab","data-testid":"export-view",children:y.jsx(n2,{className:"h-4 w-4","aria-hidden":"true"})})]})]}),y.jsx(Hu,{children:y.jsx(Nt,{type:"button",onClick:()=>t(!1),"data-testid":"export-done",children:"Done"})})]})]})})}const Z6e=(e,t)=>{if(e.has(t))return e;const n=new Set(e);return n.add(t),n},K6e=(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},X6e=(e,t)=>{if(!e.has(t))return e;const n=new Set(e);return n.delete(t),n},Y6e=(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},Q6e=(e,t)=>{if(e.size===0)return e;const n=new Set(t.map(i=>i.id));let r=!1;const o=new Set(e);for(const i of o)n.has(i)||(o.delete(i),r=!0);return r?o:e},DB=()=>{const[e,t]=m.useState(()=>new Set),n=m.useCallback(l=>{t(c=>Z6e(c,l))},[]),r=m.useCallback(l=>{t(c=>K6e(c,l))},[]),o=m.useCallback(l=>{t(c=>X6e(c,l))},[]),i=m.useCallback(l=>{t(c=>Y6e(c,l))},[]),a=m.useCallback(l=>{t(c=>Q6e(c,l))},[]),s=m.useCallback(()=>t(new Set),[]);return{ids:e,mark:n,markMany:r,unmark:o,unmarkMany:i,pruneAgainst:a,reset:s}},J6e=(e,t)=>e===t?!0:e==null||t==null||typeof e!=typeof t||typeof e!="object"?!1:JSON.stringify(e)===JSON.stringify(t),e8e=(e,t,n)=>({...e,[t]:{...e[t],...n}}),t8e=(e,t)=>{if(!(t in e))return e;const n={...e};return delete n[t],n},n8e=(e,t)=>{const n=Object.entries(e);if(n.length===0)return e;const r=new Map(t.map(a=>[a.id,a]));let o=!1;const i={...e};for(const[a,s]of n){const l=r.get(a);if(!l)continue;const c={};let h=!1;for(const d of Object.keys(s))J6e(s[d],l[d])?o=!0:(c[d]=s[d],h=!0);h?i[a]=c:(o=!0,delete i[a])}return o?i:e},_B=()=>{const[e,t]=m.useState({}),n=m.useCallback((a,s)=>{t(l=>e8e(l,a,s))},[]),r=m.useCallback(a=>{t(s=>t8e(s,a))},[]),o=m.useCallback(a=>{t(s=>n8e(s,a))},[]),i=m.useCallback(()=>t({}),[]);return{overrides:e,setOverride:n,dropOverride:r,pruneAgainst:o,reset:i}},r8e=500,o8e=500,i8e={stack:[],cursor:0},a8e=(e,t,n)=>{const r=Date.now(),o=r8e,i=o8e,{stack:a,cursor:s}=e;if(t.coalesceKey&&s>0){const h=a[s-1];if(h&&h.coalesceKey===t.coalesceKey&&r-h.capturedAt<=i){const d=a.slice(0,s);return d[s-1]={...h,do:t.do,capturedAt:r},{stack:d,cursor:s}}}const l=a.slice(0,s);l.push({...t,capturedAt:r});let c=s+1;for(;l.length>o;)l.shift(),c-=1;return c<0&&(c=0),{stack:l,cursor:c}},s8e=e=>e.cursor===0?{state:e,entry:void 0}:{state:{...e,cursor:e.cursor-1},entry:e.stack[e.cursor-1]},l8e=e=>e.cursor===e.stack.length?{state:e,entry:void 0}:{state:{...e,cursor:e.cursor+1},entry:e.stack[e.cursor]},c8e=()=>({stack:[],cursor:0}),u8e=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}},d8e=(e,t)=>t.state,h8e=()=>{const[e,t]=m.useReducer(d8e,i8e),n=m.useRef(e);n.current=e;const r=m.useRef(Promise.resolve()),o=m.useRef(0),i=m.useCallback(p=>{p!==n.current&&(n.current=p,t({type:"replace",state:p}))},[]),a=m.useCallback(p=>{const k={do:p.do,undo:p.undo,coalesceKey:p.coalesceKey,capturedAt:p.capturedAt??Date.now()};i(a8e(n.current,k))},[i]),s=m.useCallback(()=>{o.current=Date.now();const p=r.current.then(()=>{const k=s8e(n.current);if(k.entry)return i(k.state),{entry:k.entry}});return r.current=p.then(()=>{},()=>{}),p},[i]),l=m.useCallback(()=>{o.current=Date.now();const p=r.current.then(()=>{const k=l8e(n.current);if(k.entry)return i(k.state),{entry:k.entry}});return r.current=p.then(()=>{},()=>{}),p},[i]),c=m.useCallback(()=>{i(c8e())},[i]),h=m.useCallback(()=>{i(u8e(n.current))},[i]),d=m.useCallback(()=>{o.current=Date.now()},[]),f=m.useCallback(()=>o.current,[]);return{push:a,undo:s,redo:l,clear:c,dropTop:h,canUndo:e.cursor>0,canRedo:e.cursor<e.stack.length,markMutation:d,lastMutationAt:f}};function f8e({nodes:e,connectors:t,flowPos:n,nodeIdGen:r,connectorIdGen:o,defaultOffset:i={x:24,y:24}}){const a=new Map;for(const p of e)a.set(p.id,r(p.id));let s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;for(const p of e)p.position.x<s&&(s=p.position.x),p.position.y<l&&(l=p.position.y);Number.isFinite(s)||(s=0),Number.isFinite(l)||(l=0);const c=n?n.x-s:i.x,h=n?n.y-l:i.y,d=e.map(p=>{const k=a.get(p.id);if(k===void 0)throw new Error(`paste id missing for ${p.id}`);return{...p,id:k,position:{x:p.position.x+c,y:p.position.y+h}}}),f=t.map(p=>{const k=o(p.id);return{...p,id:k,source:a.get(p.source)??p.source,target:a.get(p.target)??p.target}});return{newNodes:d,newConnectors:f,idMap:a}}const p8e=e=>({type:"imageNode",position:e.position,data:{path:"",alt:e.originalFilename,width:e.dims.width,height:e.dims.height,_uploading:!0}}),y8e=e=>({type:"imageNode",data:wJ(e)}),m8e=e=>({type:"imageNode",position:e.position,data:{path:"",alt:e.originalFilename,width:e.dims.width,height:e.dims.height,_uploadError:e.message}}),wJ=e=>({...Tue(e.path,e.dims,e.lastUsed),alt:e.originalFilename}),k8e=async(e,t)=>{const{nodeId:n,flowId:r,file:o,originalFilename:i,position:a,dims:s,lastUsed:l}=e;t.rememberRetry(n,{file:o,originalFilename:i,position:a,dims:s}),t.setOverride(n,p8e({position:a,dims:s,originalFilename:i}));let c;try{c=(await t.upload(r,o,i)).path}catch(p){const k=p instanceof Error?p.message:String(p);throw t.setOverride(n,m8e({position:a,dims:s,originalFilename:i,message:k})),p}t.setOverride(n,y8e({path:c,dims:s,originalFilename:i,lastUsed:l}));const h=wJ({path:c,dims:s,originalFilename:i,lastUsed:l}),d={id:n,type:"imageNode",position:a,data:h},{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)}})},g8e=new Set(["INPUT","TEXTAREA","SELECT"]),xr=e=>e?g8e.has(e.tagName)?!0:e instanceof HTMLElement&&e.isContentEditable:!1,x8e=(e,t,n)=>{const r=e.indexOf(t);if(r<0)return null;const o=e.length,i=[...e];switch(n.op){case"forward":{if(r>=o-1)return null;const a=i[r],s=i[r+1];return a===void 0||s===void 0?null:(i[r]=s,i[r+1]=a,i)}case"backward":{if(r<=0)return null;const a=i[r],s=i[r-1];return a===void 0||s===void 0?null:(i[r]=s,i[r-1]=a,i)}case"toFront":{if(r===o-1)return null;const[a]=i.splice(r,1);return a===void 0?null:(i.push(a),i)}case"toBack":{if(r===0)return null;const[a]=i.splice(r,1);return a===void 0?null:(i.unshift(a),i)}case"toIndex":{const a=Math.min(Math.max(n.index,0),o-1);if(a===r)return null;const[s]=i.splice(r,1);return s===void 0?null:(i.splice(a,0,s),i)}}};function v8e({slug:e,demos:t,detail:n,loading:r,runs:o,nodeEvents:i,statusByNode:a,onPlayNode:s,onRestartDemo:l}){var ad,sd;const c=t.find(F=>F.slug===e),[h,d]=m.useState([]),[f,p]=m.useState([]),[k,v]=m.useState(null),w=m.useRef(h),g=m.useRef(f);m.useEffect(()=>{w.current=h},[h]),m.useEffect(()=>{g.current=f},[f]);const M=m.useRef(null),x=m.useRef(null),b=m.useRef(null),S=_B(),C=_B(),L=DB(),P=DB(),[T,E]=m.useState(null),[z,A]=m.useState(null),[U,R]=m.useState(null),V=m.useRef(null);m.useEffect(()=>{V.current=U},[U]);const[O,B]=m.useState(!1),[D,N]=m.useState(0),I=m.useRef(null),W=m.useRef(null),H=m.useCallback(F=>{W.current=F},[]),j=h8e(),{push:G,dropTop:X,markMutation:Y,clear:re,lastMutationAt:ne}=j,{reset:ae}=S,{reset:ve}=C,{reset:ke}=L,{reset:ge}=P;m.useEffect(()=>{d([]),p([]),v(null),ae(),ve(),ke(),ge(),E(null),A(null),Br.current=null,So(!1),mr.current.clear(),j.clear()},[n==null?void 0:n.id]);const xe=m.useCallback((F,q)=>{d(F),p(q)},[]),ee=(ad=n==null?void 0:n.flow)==null?void 0:ad.nodes,me=(sd=n==null?void 0:n.flow)==null?void 0:sd.connectors,{pruneAgainst:Fe}=S,{pruneAgainst:rt}=C,{pruneAgainst:mt}=L,{pruneAgainst:ht}=P;m.useEffect(()=>{ee&&(Fe(ee),mt(ee)),Date.now()-ne()>2e3&&re()},[ee,Fe,mt,ne,re]),m.useEffect(()=>{if(!ee)return;const F=I.current,q=new Set(ee.map(oe=>oe.id));if(I.current=q,F===null)return;const Z=S.overrides,$=L.ids;let _=!1;for(const oe of q)if(!F.has(oe)&&!(oe in Z)){_=!0;break}if(!_){for(const oe of F)if(!q.has(oe)&&!$.has(oe)){_=!0;break}}_&&N(oe=>oe+1)},[ee]),m.useEffect(()=>{me&&(rt(me),ht(me)),Date.now()-ne()>2e3&&re()},[me,rt,ht,ne,re]),m.useEffect(()=>{if(!(!ee||!T)&&ee.length===T.length){for(let F=0;F<ee.length;F++){const q=ee[F],Z=T[F];if(!q||q.id!==Z)return}E(null)}},[ee,T]);const le=(n==null?void 0:n.id)??null,Q=m.useMemo(()=>le?Nue({baseUrl:"",flowId:le}):null,[le]),[he,we]=m.useState(!1),{setOverride:Se,dropOverride:Oe}=S,te=m.useRef(S.overrides);m.useEffect(()=>{te.current=S.overrides},[S.overrides]);const ue=m.useCallback((F,q)=>{var $;if(!le||!Q)return;const Z=($=ee==null?void 0:ee.find(_=>_.id===F))==null?void 0:$.position;Se(F,{position:q}),A(null),Y(),Z&&G({do:async()=>{await Q.updateNodePosition(F,q)},undo:async()=>{await Q.updateNodePosition(F,Z)},coalesceKey:`node:${F}:position`}),Q.updateNodePosition(F,q).catch(_=>{Oe(F),Z&&X(),A(_ instanceof Error?_.message:String(_)),console.error("updateNodePosition failed",_)})},[le,Q,ee,Se,Oe,G,X,Y]),Pe=m.useCallback(F=>{if(!le||!Q||F.length===0)return;const q=te.current,Z=F.map($=>{var Ae;const _=ee==null?void 0:ee.find(be=>be.id===$.id);if(!_)return null;const oe=((Ae=q[$.id])==null?void 0:Ae.position)??_.position;return{id:$.id,prev:oe,next:$.position}}).filter($=>$!==null);if(Z.length!==0){for(const $ of Z)Se($.id,{position:$.next});A(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(_){return Oe($.id),_ instanceof Error?_.message:String(_)}})).then($=>{const _=$.find(oe=>oe!==null);_&&A(_)})}},[le,Q,ee,Se,Oe,G,Y]),qe=m.useCallback((F,q)=>{Se(F,{position:{x:q.x,y:q.y},data:{width:q.width,height:q.height}})},[Se]),We=m.useCallback((F,q)=>{if(!le||!Q)return;const Z=ee==null?void 0:ee.find(oe=>oe.id===F),$=Z?{width:Z.data.width,height:Z.data.height,position:{x:Z.position.x,y:Z.position.y}}:void 0,_={width:q.width,height:q.height,position:{x:q.x,y:q.y}};Se(F,{position:_.position,data:{width:_.width,height:_.height}}),A(null),Y(),$&&G({do:async()=>{await Q.updateNode(F,_)},undo:async()=>{await Q.updateNode(F,$)},coalesceKey:`node:${F}:resize`}),Q.updateNode(F,_).catch(oe=>{Oe(F),$&&X(),A(oe instanceof Error?oe.message:String(oe)),console.error("updateNode resize failed",oe)})},[le,Q,ee,Se,Oe,G,X,Y]),Rt=m.useCallback(F=>{if(!le||!Q)return;const q=ee==null?void 0:ee.find(_=>_.id===F);if(!q)return;const Z={autoSize:q.data.autoSize,width:q.data.width,height:q.data.height},$={autoSize:!0};Se(F,{data:{autoSize:!0,width:void 0,height:void 0}}),A(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(_=>{Oe(F),X(),A(_ instanceof Error?_.message:String(_)),console.error("updateNode (fit-to-content) failed",_)})},[le,Q,ee,Se,Oe,G,X,Y]),st=m.useCallback(F=>{if(!le||!Q||F.length===0)return;const q=[];for(const $ of F){const _=ee==null?void 0:ee.find(Ue=>Ue.id===$.id);if(!_)continue;const oe=_.data,Ae={position:{x:_.position.x,y:_.position.y}};oe.width!==void 0&&(Ae.width=oe.width),oe.height!==void 0&&(Ae.height=oe.height);const be={position:$.position};$.width!==void 0&&(be.width=$.width),$.height!==void 0&&(be.height=$.height),q.push({id:$.id,prev:Ae,next:be})}if(q.length===0)return;for(const $ of q){const _={};$.next.width!==void 0&&(_.width=$.next.width),$.next.height!==void 0&&(_.height=$.next.height),Se($.id,{position:$.next.position,...Object.keys(_).length>0?{data:_}:{}})}A(null),Y();const Z=q.map($=>$.id).sort();G({do:async()=>{await Promise.allSettled(q.map($=>Q.updateNode($.id,$.next)))},undo:async()=>{await Promise.allSettled(q.map($=>Q.updateNode($.id,$.prev)))},coalesceKey:`multi:resize:${Z.join(",")}`}),Promise.all(q.map(async $=>{try{return await Q.updateNode($.id,$.next),null}catch(_){return Oe($.id),_ instanceof Error?_.message:String(_)}})).then($=>{const _=$.find(oe=>oe!==null);_&&A(_)})},[le,Q,ee,Se,Oe,G,Y]),{setOverride:Ne,dropOverride:ot}=C,Jn=m.useCallback((F,q)=>{Se(F,{data:q})},[Se]),zt=m.useCallback((F,q)=>{for(const Z of F)Se(Z,{data:q})},[Se]),zn=m.useCallback((F,q)=>{Ne(F,q)},[Ne]),Kt=m.useCallback((F,q)=>{if(!le||!Q)return;lq(ia,q);const Z=ee==null?void 0:ee.find(_=>_.id===F);let $=null;if(Z){$={};const _=Z.data;for(const oe of Object.keys(q))$[oe]=_[oe]}if(Se(F,{data:q}),A(null),Y(),$){const _=$;G({do:async()=>{await Q.updateNode(F,q)},undo:async()=>{await Q.updateNode(F,_)},coalesceKey:`node:${F}:style`})}Q.updateNode(F,q).catch(_=>{Oe(F),$&&X(),A(_ instanceof Error?_.message:String(_)),console.error("updateNode style failed",_)})},[le,Q,ee,Se,Oe,G,X,Y]),f1=m.useCallback((F,q)=>{if(!le||!Q||F.length===0)return;lq(ia,q);const Z=F.map($=>{const _=ee==null?void 0:ee.find(be=>be.id===$);if(!_)return null;const oe=_.data,Ae={};for(const be of Object.keys(q))Ae[be]=oe[be];return{id:$,prev:Ae}}).filter($=>$!==null);if(Z.length!==0){for(const $ of Z)Se($.id,{data:q});A(null),Y(),G({do:async()=>{await Promise.allSettled(Z.map($=>Q.updateNode($.id,q)))},undo:async()=>{await Promise.allSettled(Z.map($=>Q.updateNode($.id,$.prev)))}}),Promise.all(Z.map(async $=>{try{return await Q.updateNode($.id,q),null}catch(_){return Oe($.id),_ instanceof Error?_.message:String(_)}})).then($=>{const _=$.find(oe=>oe!==null);_&&A(_)})}},[le,Q,ee,Se,Oe,G,Y]),p1=m.useCallback((F,q)=>{if(!le||!Q)return;Aue(ia,q);const Z=me==null?void 0:me.find(_=>_.id===F);let $=null;if(Z){$={};const _=Z;for(const oe of Object.keys(q))$[oe]=_[oe]}if(Ne(F,q),A(null),Y(),$){const _=$;G({do:async()=>{await Q.updateConnector(F,q)},undo:async()=>{await Q.updateConnector(F,_)},coalesceKey:`connector:${F}:style`})}Q.updateConnector(F,q).catch(_=>{ot(F),$&&X(),A(_ instanceof Error?_.message:String(_)),console.error("updateConnector failed",_)})},[le,Q,me,Ne,ot,G,X,Y]),{mark:Qo,markMany:Jo,unmark:_r,unmarkMany:Zi}=L,{mark:ei,markMany:fr,unmark:Hr,unmarkMany:pr}=P,y1=m.useCallback(F=>{if(!le||!Q)return;const q=ee==null?void 0:ee.find(be=>be.id===F);if(!q)return;const Z=(me??[]).filter(be=>be.source===F||be.target===F),$=Z.map(be=>be.id),_=new Set($);A(null),Qo(F),$.length>0&&fr($),d(be=>be.filter(Ue=>Ue!==F)),p(be=>be.filter(Ue=>!_.has(Ue))),Y();const oe=q,Ae=Z;G({do:async()=>{Qo(F),$.length>0&&fr($),await Q.deleteNode(F)},undo:async()=>{_r(F),$.length>0&&pr($),await Q.createNode({id:oe.id,type:oe.type,position:oe.position,data:oe.data});for(const be of Ae)await Q.createConnector({...be,id:be.id})}}),Q.deleteNode(F).catch(be=>{_r(F),$.length>0&&pr($),X(),A(be instanceof Error?be.message:String(be)),console.error("deleteNode failed",be)})},[le,Q,ee,me,Qo,fr,_r,pr,G,X,Y]),m1=m.useCallback((F,q)=>{if(!le||!Q||!ee)return;const Z=T??ee.map(oe=>oe.id),$=x8e(Z,F,q);if(!$)return;const _=Z.indexOf(F);E($),A(null),Y(),G({do:async()=>{await Q.reorderNode(F,q)},undo:async()=>{await Q.reorderNode(F,{op:"toIndex",index:_})}}),Q.reorderNode(F,q).catch(oe=>{E(null),X(),A(oe instanceof Error?oe.message:String(oe)),console.error("reorderNode failed",oe)})},[le,Q,ee,T,G,X,Y]);m.useCallback(F=>{if(!le||!Q)return;const q=me==null?void 0:me.find($=>$.id===F);if(!q)return;A(null),ei(F),p($=>$.filter(_=>_!==F)),Y();const Z=q;G({do:async()=>{ei(F),await Q.deleteConnector(F)},undo:async()=>{Hr(F),await Q.createConnector({...Z,id:Z.id})}}),Q.deleteConnector(F).catch($=>{Hr(F),X(),A($ instanceof Error?$.message:String($)),console.error("deleteConnector failed",$)})},[le,Q,me,ei,Hr,G,X,Y]);const _e=m.useCallback((F,q)=>{if(!le||!Q||F.length===0&&q.length===0)return;const Z=new Set(F),$=F.map(Re=>ee==null?void 0:ee.find(it=>it.id===Re)).filter(Re=>!!Re),_=(me??[]).filter(Re=>Z.has(Re.source)||Z.has(Re.target)),oe=new Set(_.map(Re=>Re.id)),Ae=q.map(Re=>me==null?void 0:me.find(it=>it.id===Re)).filter(Re=>!!Re).filter(Re=>!oe.has(Re.id));if($.length===0&&_.length===0&&Ae.length===0)return;A(null);const be=$.map(Re=>Re.id),Ue=[..._.map(Re=>Re.id),...Ae.map(Re=>Re.id)];be.length>0&&Jo(be),Ue.length>0&&fr(Ue);const Ut=$;d(Re=>Re.filter(it=>!Z.has(it)));const Eo=new Set(Ae.map(Re=>Re.id));p(Re=>Re.filter(it=>!Eo.has(it)&&!oe.has(it))),Y(),G({do:async()=>{be.length>0&&Jo(be),Ue.length>0&&fr(Ue);for(const Re of Ut)await Q.deleteNode(Re.id).catch(()=>{});await Promise.allSettled(Ae.map(Re=>Q.deleteConnector(Re.id)))},undo:async()=>{be.length>0&&Zi(be),Ue.length>0&&pr(Ue);for(let Re=Ut.length-1;Re>=0;Re--){const it=Ut[Re];it&&await Q.createNode({id:it.id,type:it.type,position:it.position,data:it.data})}for(const Re of[..._,...Ae])await Q.createConnector({...Re,id:Re.id})}});const Dn=new Map;for(const Re of $)Dn.set(Re.id,_.filter(it=>it.source===Re.id||it.target===Re.id).map(it=>it.id));(async()=>{const Re=[];for(const Yt of Ut)try{await Q.deleteNode(Yt.id)}catch(gn){_r(Yt.id);const ta=Dn.get(Yt.id)??[];ta.length>0&&pr(ta),Re.push(gn instanceof Error?gn.message:String(gn))}const it=await Promise.all(Ae.map(async Yt=>{try{return await Q.deleteConnector(Yt.id),null}catch(gn){return Hr(Yt.id),gn instanceof Error?gn.message:String(gn)}}));for(const Yt of it)Yt!==null&&Re.push(Yt);Re.length>0&&Re[0]!==void 0&&A(Re[0])})()},[le,Q,ee,me,Jo,fr,_r,Zi,Hr,pr,G,Y]);m.useEffect(()=>{M.current=_e},[_e]),m.useEffect(()=>{const F=q=>{if(q.key!=="Delete"&&q.key!=="Backspace"||xr(document.activeElement)||document.querySelector('[data-testid="inline-edit-input"]'))return;const Z=w.current,$=g.current;Z.length===0&&$.length===0||(q.preventDefault(),_e(Z,$))};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[_e]);const{undo:Mt,redo:Fr,canUndo:Or,canRedo:jn}=j;m.useEffect(()=>{const F=async q=>{if((q.metaKey||q.ctrlKey)&&q.key.toLowerCase()==="z"&&!xr(document.activeElement)){if(q.preventDefault(),q.shiftKey){if(!jn)return;try{const Z=await Fr();Z!=null&&Z.entry&&await Z.entry.do()}catch(Z){A(Z instanceof Error?Z.message:String(Z)),console.error("redo failed",Z)}return}if(Or)try{const Z=await Mt();Z!=null&&Z.entry&&await Z.entry.undo()}catch(Z){A(Z instanceof Error?Z.message:String(Z)),console.error("undo failed",Z)}}};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[Mt,Fr,Or,jn]);const yr=m.useCallback((F,q)=>{if(!le||!Q)return;const Z=ee==null?void 0:ee.find(oe=>oe.id===F),_=(Z&&"name"in Z.data?Z.data.name:void 0)??"";Se(F,{data:{name:q}}),A(null),Y(),Z&&G({do:async()=>{await Q.updateNode(F,{name:q})},undo:async()=>{await Q.updateNode(F,{name:_})},coalesceKey:`node:${F}:name`}),Q.updateNode(F,{name:q}).catch(oe=>{Z&&X(),A(oe instanceof Error?oe.message:String(oe)),console.error("updateNode name failed",oe)})},[le,Q,ee,Se,G,X,Y]),Mo=m.useCallback((F,q)=>{if(!le||!Q)return;const Z=ee==null?void 0:ee.find(_=>_.id===F);if(!Z)return;const $=Z.data.description??"";Se(F,{data:{description:q}}),A(null),Y(),G({do:async()=>{await Q.updateNode(F,{description:q})},undo:async()=>{await Q.updateNode(F,{description:$})},coalesceKey:`node:${F}:description`}),Q.updateNode(F,{description:q}).catch(_=>{X(),A(_ instanceof Error?_.message:String(_)),console.error("updateNode description failed",_)})},[le,Q,ee,Se,G,X,Y]),er=m.useCallback((F,q)=>{if(!le||!Q)return;const Z=ee==null?void 0:ee.find(_=>_.id===F);if(!Z)return;const $=Z.data.detail??"";Se(F,{data:{detail:q}}),A(null),Y(),G({do:async()=>{await Q.updateNode(F,{detail:q})},undo:async()=>{await Q.updateNode(F,{detail:$})},coalesceKey:`node:${F}:detail`}),Q.updateNode(F,{detail:q}).catch(_=>{X(),A(_ instanceof Error?_.message:String(_)),console.error("updateNode detail failed",_)})},[le,Q,ee,Se,G,X,Y]),qr=m.useCallback((F,q)=>{if(!le||!Q)return;const Z=ee==null?void 0:ee.find(_=>_.id===F);if(!Z)return;const $="icon"in Z.data?Z.data.icon??null:null;Se(F,{data:{icon:q??void 0}}),A(null),Y(),G({do:async()=>{await Q.updateNode(F,{icon:q})},undo:async()=>{await Q.updateNode(F,{icon:$})},coalesceKey:`node:${F}:icon`}),Q.updateNode(F,{icon:q}).catch(_=>{X(),A(_ instanceof Error?_.message:String(_)),console.error("updateNode icon failed",_)})},[le,Q,ee,Se,G,X,Y]),an=m.useCallback((F,q,Z)=>{if(!le||!Q)return;A(null);const $=`node-${crypto.randomUUID()}`,_=uq(F,Z,P0(ia).node),oe={id:$,type:"shapeNode",position:q,data:_};Se($,{id:$,type:"shapeNode",position:q,data:_}),Y(),Q.createNode(oe).then(({id:be})=>{G({do:async()=>{await Q.createNode({...oe,id:be})},undo:async()=>{await Q.deleteNode(be)}})}).catch(be=>{Oe($),A(be instanceof Error?be.message:String(be)),console.error("createNode failed",be)})},[le,Q,Se,Oe,G,Y]),jt=m.useCallback((F,q)=>{if(!le||!Q)return;A(null);const Z=`node-${crypto.randomUUID()}`,$={icon:F,width:Tu.width,height:Tu.height},_={id:Z,type:"iconNode",position:q,data:$};Se(Z,{id:Z,type:"iconNode",position:q,data:$}),d([Z]),Y(),Q.createNode(_).then(({id:Ae})=>{G({do:async()=>{await Q.createNode({..._,id:Ae})},undo:async()=>{await Q.deleteNode(Ae)}})}).catch(Ae=>{Oe(Z),A(Ae instanceof Error?Ae.message:String(Ae)),console.error("createNode (icon) failed",Ae)})},[le,Q,Se,Oe,G,Y]),bo=m.useCallback(F=>{if(!le||!Q)return;A(null);const q=`node-${crypto.randomUUID()}`,Z=`blocks/${q}.html`,$={id:q,type:"htmlNode",position:F.position,data:{}},_={id:q,type:"htmlNode",position:F.position,data:{htmlPath:Z}};Se(q,_),d([q]),Y(),Q.createNode($).then(({id:oe})=>{G({do:async()=>{await Q.createNode({...$,id:oe})},undo:async()=>{await Q.deleteNode(oe)}})}).catch(oe=>{Oe(q),A(oe instanceof Error?oe.message:String(oe)),console.error("createNode (htmlNode) failed",oe)})},[le,Q,Se,Oe,G,Y]),mr=m.useRef(new Map),Ki=m.useCallback((F,q)=>{mr.current.set(F,q)},[]),Xi=m.useCallback(F=>{mr.current.delete(F)},[]),Co=m.useCallback(F=>{!le||!Q||(A(null),Y(),k8e({...F,flowId:le,lastUsed:P0(ia).node},{upload:(q,Z,$)=>Q.uploadImage(Z,$),createNode:async(q,Z)=>{const{id:$}=await Q.createNode(Z);return{id:$}},deleteNode:async(q,Z)=>(await Q.deleteNode(Z),{ok:!0}),setOverride:Se,pushUndo:G,rememberRetry:Ki,forgetRetry:Xi}).catch(q=>{console.error("image-upload-flow failed",q)}))},[le,Q,Se,G,Y,Ki,Xi]),Ct=m.useCallback(F=>{if(!le||!Q)return;const q=`node-${crypto.randomUUID()}`;Co({nodeId:q,...F})},[le,Q,Co]),Yi=m.useCallback(F=>{const q=mr.current.get(F);q&&Co({nodeId:F,...q})},[Co]),[Tn,ti]=m.useState({open:!1,mode:"insert"}),tr=m.useCallback((F,q)=>{ti({open:!0,mode:F,nodeId:q})},[]),kr=m.useCallback(()=>{ti(F=>({...F,open:!1}))},[]),k1=m.useCallback(()=>{tr("insert")},[tr]),Qi=m.useCallback(F=>tr("replace",F),[tr]),Ji=m.useCallback(F=>{if(xue(F),Tn.mode==="replace"&&Tn.nodeId){if(le&&Q){const q=Tn.nodeId,Z=ee==null?void 0:ee.find(_=>_.id===q),$=(Z==null?void 0:Z.type)==="iconNode"?Z.data.icon:void 0;if(Se(q,{data:{icon:F}}),A(null),Y(),$!==void 0){const _=$;G({do:async()=>{await Q.updateNode(q,{icon:F})},undo:async()=>{await Q.updateNode(q,{icon:_})},coalesceKey:`node:${q}:icon`})}Q.updateNode(q,{icon:F}).catch(_=>{Oe(q),$!==void 0&&X(),A(_ instanceof Error?_.message:String(_)),console.error("updateNode (icon replace) failed",_)})}}else{const q=W.current;if(q&&le){const Z=kue(q,{width:window.innerWidth,height:window.innerHeight});jt(F,Z)}}kr()},[Tn.mode,Tn.nodeId,le,Q,ee,Se,Oe,G,X,Y,jt,kr]),ni=m.useCallback((F,q)=>{if(!le||!Q)return;const Z=me==null?void 0:me.find(_=>_.id===F),$=Z==null?void 0:Z.label;Ne(F,{label:q}),A(null),Y(),Z&&G({do:async()=>{await Q.updateConnector(F,{label:q})},undo:async()=>{await Q.updateConnector(F,{label:$})},coalesceKey:`connector:${F}:label`}),Q.updateConnector(F,{label:q}).catch(_=>{Z&&X(),A(_ instanceof Error?_.message:String(_)),console.error("updateConnector label failed",_)})},[le,Q,me,Ne,G,X,Y]),mn=m.useCallback((F,q,Z)=>{if(!le||!Q)return;const $=`conn-${crypto.randomUUID()}`,_=Z==null?void 0:Z.targetPin,oe=P0(ia).connector,Ae={id:$,source:F,target:q,sourceHandleAutoPicked:!0,targetHandleAutoPicked:!0,..._?{targetPin:_}:{},...oe,kind:"default"},be={id:$,source:F,target:q,sourceHandleAutoPicked:!0,targetHandleAutoPicked:!0,..._?{targetPin:_}:{},...oe,kind:"default"};Ne($,Ae),A(null),Y(),Q.createConnector(be).then(({id:Ue})=>{G({do:async()=>{await Q.createConnector({...be,id:Ue})},undo:async()=>{await Q.deleteConnector(Ue)}})}).catch(Ue=>{ot($),A(Ue instanceof Error?Ue.message:String(Ue)),console.error("createConnector failed",Ue)})},[le,Q,Ne,ot,G,Y]),Vr=m.useCallback(({sourceNodeId:F,position:q,shape:Z})=>{if(!le||!Q)return;A(null);const $=`node-${crypto.randomUUID()}`,_=`conn-${crypto.randomUUID()}`,oe=yR[Z],Ae=P0(ia),be=uq(Z,oe,Ae.node),Ue={id:$,type:"shapeNode",position:q,data:be},Ut={id:_,source:F,target:$,sourceHandleAutoPicked:!0,targetHandleAutoPicked:!0,...Ae.connector,kind:"default"};Se($,{id:$,type:"shapeNode",position:q,data:be}),Ne(_,Ut),v($),Y(),(async()=>{try{await Q.createNode(Ue),await Q.createConnector(Ut),G({do:async()=>{await Q.createNode(Ue),await Q.createConnector(Ut)},undo:async()=>{ot(_),Oe($),await Q.deleteConnector(_).catch(()=>{}),await Q.deleteNode($).catch(()=>{})}})}catch(Dn){Oe($),ot(_),A(Dn instanceof Error?Dn.message:String(Dn)),console.error("createAndConnectFromPane failed",Dn)}})()},[le,Q,Se,Oe,Ne,ot,G,Y]),Br=m.useRef(null),[g1,So]=m.useState(!1),nr=m.useCallback(F=>{if(!ee)return;const q=new Set(F),Z=ee.filter(_=>q.has(_.id));if(Z.length===0)return;const $=(me??[]).filter(_=>q.has(_.source)&&q.has(_.target));Br.current=JSON.parse(JSON.stringify({nodes:Z,connectors:$})),So(!0)},[ee,me]),kn=m.useCallback(F=>{if(!le||!Q)return;const q=Br.current;if(!q||q.nodes.length===0)return;const{newNodes:Z,newConnectors:$}=f8e({nodes:q.nodes,connectors:q.connectors,flowPos:F,nodeIdGen:()=>`node-${crypto.randomUUID()}`,connectorIdGen:()=>`conn-${crypto.randomUUID()}`});for(const _ of Z)Se(_.id,_);for(const _ of $)Ne(_.id,_);d(Z.map(_=>_.id)),p($.map(_=>_.id)),A(null),Y(),(async()=>{try{for(const _ of Z)await Q.createNode({id:_.id,type:_.type,position:_.position,data:_.data});for(const _ of $)await Q.createConnector(_);G({do:async()=>{for(const _ of Z)await Q.createNode({id:_.id,type:_.type,position:_.position,data:_.data});for(const _ of $)await Q.createConnector(_)},undo:async()=>{await Promise.allSettled($.map(_=>Q.deleteConnector(_.id))),await Promise.allSettled(Z.map(_=>Q.deleteNode(_.id)))}})}catch(_){for(const oe of Z)Oe(oe.id);for(const oe of $)ot(oe.id);A(_ instanceof Error?_.message:String(_)),console.error("paste failed",_)}})()},[le,Q,Se,Oe,Ne,ot,Y,G]);m.useEffect(()=>{const F=q=>{const Z=Iue({event:q,isEditableActive:xr(document.activeElement),hasNodes:!!ee&&ee.length>0,hasConnectors:!!me&&me.length>0,selectedIds:w.current,hasClipboard:!!Br.current});if(Z.type!=="noop"&&!(Z.type==="copy"||Z.type==="paste")){if(q.preventDefault(),Z.type==="selectAll"){d((ee??[]).map($=>$.id)),p((me??[]).map($=>$.id));return}nr([...Z.ids]),kn(null)}};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[ee,me,nr,kn]),m.useEffect(()=>{const F=q=>{const Z=Cue(q);if(!Z||xr(document.activeElement))return;const $=w.current;if($.length===0)return;const _=S.overrides,oe=(ee??[]).map(be=>{var Ut;const Ue=((Ut=_[be.id])==null?void 0:Ut.position)??be.position;return{id:be.id,position:Ue}}),Ae=Lue(Z,$,oe);if(Ae.length!==0)if(q.preventDefault(),Ae.length===1){const be=Ae[0];be&&ue(be.id,be.position)}else Pe(Ae)};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[ee,S.overrides,ue,Pe]),m.useEffect(()=>{const F=q=>{const Z=Sue(q);if(!Z||xr(document.activeElement))return;q.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 sn=m.useCallback(async F=>{if(!le||!Q||!ee||!Q.computeLayout)return;const q=S.overrides,Z=W.current,$=F==="selection"?new Set(w.current):null,_=$?ee.filter(De=>$.has(De.id)):ee;if(_.length<2)return;const oe=new Set(_.map(De=>De.id)),Ae=(me??[]).filter(De=>oe.has(De.source)&&oe.has(De.target)),be=new Map,Ue=_.map(De=>{var vn;const Qe=((vn=q[De.id])==null?void 0:vn.position)??De.position;be.set(De.id,Qe);const Ht=Z==null?void 0:Z.getInternalNode(De.id),xn=Ht==null?void 0:Ht.measured,Ao=De.data,na=(xn==null?void 0:xn.width)??Ao.width??200,ld=(xn==null?void 0:xn.height)??Ao.height??120;return{id:De.id,type:De.type,width:na,height:ld}}),Ut=Ae.map(De=>({id:De.id,source:De.source,target:De.target})),Eo=await Q.computeLayout(Ue,Ut),Dn=new Map;for(const[De,Qe]of Object.entries(Eo.nodes))Dn.set(De,Qe.position);let Re=Number.POSITIVE_INFINITY,it=Number.POSITIVE_INFINITY,Yt=Number.POSITIVE_INFINITY,gn=Number.POSITIVE_INFINITY;for(const De of Ue){const Qe=be.get(De.id);if(!Qe)continue;Qe.x<Re&&(Re=Qe.x),Qe.y<it&&(it=Qe.y);const Ht=Dn.get(De.id);Ht&&(Ht.x<Yt&&(Yt=Ht.x),Ht.y<gn&&(gn=Ht.y))}const ta=Number.isFinite(Re)&&Number.isFinite(Yt)?Re-Yt:0,Hz=Number.isFinite(it)&&Number.isFinite(gn)?it-gn:0,ii=[];for(const De of Ue){const Qe=be.get(De.id),Ht=Dn.get(De.id);if(!Qe||!Ht)continue;const xn={x:Ht.x+ta,y:Ht.y+Hz},Ao=xn.x-Qe.x,na=xn.y-Qe.y;Math.abs(Ao)<1&&Math.abs(na)<1||ii.push({id:De.id,prev:Qe,next:xn})}if(ii.length!==0){A(null);for(const De of ii)Se(De.id,{position:De.next});Y(),G({do:async()=>{await Promise.allSettled(ii.map(De=>Q.updateNodePosition(De.id,De.next)))},undo:async()=>{await Promise.allSettled(ii.map(De=>Q.updateNodePosition(De.id,De.prev)))}}),Promise.all(ii.map(async De=>{try{return await Q.updateNodePosition(De.id,De.next),null}catch(Qe){return Oe(De.id),Qe instanceof Error?Qe.message:String(Qe)}})).then(De=>{const Qe=De.filter(xn=>xn!==null),Ht=Qe[0];Ht&&(A(Qe.length===1?Ht:`${Qe.length} node updates failed (first: ${Ht})`),console.error("Tidy: some updateNodePosition calls failed",Qe))})}},[le,Q,ee,me,S.overrides,Se,Oe,G,Y]);m.useEffect(()=>{const F=q=>{if(!(q.metaKey||q.ctrlKey)||!q.shiftKey||q.altKey||q.key.toLowerCase()!=="l"||xr(document.activeElement))return;q.preventDefault();const Z=w.current.length>0?"selection":"all";sn(Z)};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[sn]);const ri=m.useCallback(()=>{const F=w.current.length>0?"selection":"all";sn(F)},[sn]);m.useEffect(()=>{const F=q=>{if(xr(document.activeElement)||document.querySelector('[data-testid="inline-edit-input"]'))return;const Z=Eue(q);if(Z===null)return;const $=Z==="select"?null:Z;if(V.current===$){R(null);return}R($)};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[]),m.useEffect(()=>{const F=q=>{q.key==="Escape"&&(xr(document.activeElement)||document.querySelector('[data-testid="inline-edit-input"]')||(w.current.length>0&&d([]),g.current.length>0&&p([]),V.current!==null&&R(null)))};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[]),m.useEffect(()=>{const F=q=>{if(q.key.toLowerCase()!=="f"||q.metaKey||q.ctrlKey||q.shiftKey||q.altKey||xr(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(_=>({id:_})),padding:.2,duration:200})};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[]),m.useEffect(()=>{const F=q=>{if(q.key!=="1"||q.metaKey||q.ctrlKey||q.shiftKey||q.altKey||xr(document.activeElement)||document.querySelector('[data-testid="inline-edit-input"]'))return;const Z=W.current;if(!Z)return;const{x:$,y:_}=Z.getViewport();Z.setViewport({x:$,y:_,zoom:1},{duration:150})};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[]);const rr=m.useCallback(F=>{var q,Z,$;switch(F){case"tool.select":R(null);return;case"tool.rectangle":R("rectangle");return;case"tool.ellipse":R("ellipse");return;case"tool.text":R("text");return;case"tool.sticky":R("sticky");return;case"tool.database":R("database");return;case"edit.undo":{if(!Or)return;(async()=>{try{const _=await Mt();_!=null&&_.entry&&await _.entry.undo()}catch(_){A(_ instanceof Error?_.message:String(_)),console.error("undo failed",_)}})();return}case"edit.redo":{if(!jn)return;(async()=>{try{const _=await Fr();_!=null&&_.entry&&await _.entry.do()}catch(_){A(_ instanceof Error?_.message:String(_)),console.error("redo failed",_)}})();return}case"edit.copy":{const _=w.current;if(_.length===0)return;nr([..._]);return}case"edit.paste":kn(null);return;case"edit.duplicate":{const _=w.current;if(_.length===0)return;nr([..._]),kn(null);return}case"edit.delete":{const _=w.current,oe=g.current;if(_.length===0&&oe.length===0)return;_e([..._],[...oe]);return}case"edit.selectAll":d((ee??[]).map(_=>_.id)),p((me??[]).map(_=>_.id));return;case"view.fit":{const _=W.current;if(!_)return;_.fitView({padding:.2,duration:200});return}case"view.zoomIn":{const _=W.current;if(!_)return;_.zoomIn({duration:150});return}case"view.zoomOut":{const _=W.current;if(!_)return;_.zoomOut({duration:150});return}case"view.zoom100":{const _=W.current;if(!_)return;const{x:oe,y:Ae}=_.getViewport();_.setViewport({x:oe,y:Ae,zoom:1},{duration:150});return}case"view.zoomToSelection":{const _=w.current;if(_.length===0)return;const oe=W.current;if(!oe)return;oe.fitView({nodes:_.map(Ae=>({id:Ae})),padding:.2,duration:200});return}case"layout.tidy":{const _=w.current.length>0?"selection":"all";sn(_);return}case"selection.deselect":w.current.length>0&&d([]),g.current.length>0&&p([]),V.current!==null&&R(null);return;case"help.commandPalette":B(!0);return;case"export.pdf":{(q=b.current)==null||q.exportPdf();return}case"export.png":{(Z=b.current)==null||Z.exportPng();return}case"session.reset":{($=x.current)==null||$.call(x);return}}},[Or,jn,Mt,Fr,nr,kn,_e,ee,me,sn]);m.useEffect(()=>{const F=q=>{(q.metaKey||q.ctrlKey)&&(q.shiftKey||q.altKey||q.key.toLowerCase()==="p"&&(q.preventDefault(),!xr(document.activeElement)&&rr("help.commandPalette")))};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[rr]),m.useEffect(()=>{x.current=l??null},[l]);const $r=m.useCallback((F,q)=>{if(!le||!Q)return;const Z=me==null?void 0:me.find(oe=>oe.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,_={...q.source!==void 0?{source:q.source}:{},...q.target!==void 0?{target:q.target}:{},...q.sourceHandle!==void 0?{sourceHandle:q.sourceHandle===null?void 0:q.sourceHandle}:{},...q.targetHandle!==void 0?{targetHandle:q.targetHandle===null?void 0:q.targetHandle}:{},...q.sourceHandleAutoPicked!==void 0?{sourceHandleAutoPicked:q.sourceHandleAutoPicked}:{},...q.targetHandleAutoPicked!==void 0?{targetHandleAutoPicked:q.targetHandleAutoPicked}:{},...q.sourcePin!==void 0?{sourcePin:q.sourcePin===null?void 0:q.sourcePin}:{},...q.targetPin!==void 0?{targetPin:q.targetPin===null?void 0:q.targetPin}:{}};if(Ne(F,_),A(null),Y(),$){const oe=$;G({do:async()=>{await Q.updateConnector(F,q)},undo:async()=>{await Q.updateConnector(F,oe)},coalesceKey:`connector:${F}:reconnect`})}Q.updateConnector(F,q).catch(oe=>{ot(F),$&&X(),A(oe instanceof Error?oe.message:String(oe)),console.error("updateConnector reconnect failed",oe)})},[le,Q,me,Ne,ot,G,X,Y]),Ur=m.useCallback((F,q,Z)=>{if(!le||!Q)return;const $=me==null?void 0:me.find(Ae=>Ae.id===F),_=$?q==="source"?$.sourcePin:$.targetPin:void 0,oe=q==="source"?"sourcePin":"targetPin";if(Ne(F,{[oe]:Z}),A(null),Y(),$){const Ae={[oe]:_??null};G({do:async()=>{await Q.updateConnector(F,{[oe]:Z})},undo:async()=>{await Q.updateConnector(F,Ae)},coalesceKey:`connector:${F}:${oe}`})}Q.updateConnector(F,{[oe]:Z}).catch(Ae=>{ot(F),$&&X(),A(Ae instanceof Error?Ae.message:String(Ae)),console.error("updateConnector pin failed",Ae)})},[le,Q,me,Ne,ot,G,X,Y]),Lo=m.useCallback((F,q)=>{if(!le||!Q)return;const Z=me==null?void 0:me.find(oe=>oe.id===F),$=Z?q==="source"?Z.sourcePin:Z.targetPin:void 0;if(!$)return;const _=q==="source"?"sourcePin":"targetPin";Ne(F,{[_]:void 0}),A(null),Y(),G({do:async()=>{await Q.updateConnector(F,{[_]:null})},undo:async()=>{await Q.updateConnector(F,{[_]:$})}}),Q.updateConnector(F,{[_]:null}).catch(oe=>{ot(F),X(),A(oe instanceof Error?oe.message:String(oe)),console.error("updateConnector unpin failed",oe)})},[le,Q,me,Ne,ot,G,X,Y]),Je=n==null?void 0:n.flow,Wr=S.overrides,Nn=C.overrides,Xt=L.ids,Gr=P.ids,x1=m.useMemo(()=>{if(!Je||h.length===0)return[];const F=new Map(Je.nodes.map(Z=>[Z.id,Z])),q=[];for(const Z of h){const $=F.get(Z);if(!$)continue;const _=Wr[Z];if(!_){q.push($);continue}const oe=_.data?{...$.data,..._.data}:$.data;q.push({...$,..._,data:oe})}return q},[Je,h,Wr]),_z=m.useMemo(()=>{if(!Je||f.length===0)return[];const F=new Map(Je.connectors.map(Z=>[Z.id,Z])),q=[];for(const Z of f){const $=F.get(Z);if(!$)continue;const _=Nn[Z];q.push(_?{...$,..._}:$)}return q},[Je,f,Nn]),Kh=m.useMemo(()=>{if(!Je)return null;if(!T)return Je.nodes;const F=new Map(Je.nodes.map($=>[$.id,$])),q=[],Z=new Set;for(const $ of T){const _=F.get($);_&&(q.push(_),Z.add($))}for(const $ of Je.nodes)Z.has($.id)||q.push($);return q},[Je,T]),Io=m.useMemo(()=>{const F=Kh??(Je==null?void 0:Je.nodes)??null;return F?Xt.size===0?F:F.filter(q=>!Xt.has(q.id)):null},[Kh,Je,Xt]),ea=m.useMemo(()=>{const F=(Je==null?void 0:Je.connectors)??null;return F?Gr.size===0&&Xt.size===0?F:F.filter(q=>!Gr.has(q.id)&&!Xt.has(q.source)&&!Xt.has(q.target)):null},[Je,Gr,Xt]);if(!c)return y.jsxs("div",{className:"flex h-full w-full flex-col items-center justify-center gap-2 bg-background p-6 text-center",children:[y.jsxs("p",{className:"text-sm font-medium",children:["Unknown demo: ",e]}),y.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 y.jsx("div",{className:"flex h-full w-full items-center justify-center text-sm text-muted-foreground",children:"Loading demo…"});const id=h[0],oi=id?a[id]:void 0;return y.jsxs("div",{className:"relative h-full w-full",children:[n&&!n.valid?y.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:[y.jsx("span",{className:"font-medium uppercase tracking-wide",children:"Invalid demo: "}),y.jsx("span",{className:"font-mono",children:n.error})]}):null,Je&&Q?y.jsx(r6e,{ref:b,mode:"edit",adapter:Q,projectId:le??void 0,enableEmbed:!1,onExportToCloud:le?()=>we(!0):void 0,onRestartDemo:l,nodes:Io??Je.nodes,connectors:ea??Je.connectors,selectedNodeIds:h,selectedConnectorIds:f,onSelectionChange:xe,runtime:{runs:o,statuses:a,pendingOverrides:{nodes:Wr,connectors:Nn}},onPlayNode:s,onNodePositionChange:ue,onNodePositionsChange:Pe,onNodeResize:qe,onNodeResizeEnd:We,onHtmlNodeFitToContent:Rt,onMultiResize:st,onNodeNameChange:yr,onNodeDescriptionChange:Mo,onConnectorLabelChange:ni,onCreateShapeNode:an,onCreateImageFromFile:le?Ct:void 0,onRetryImageUpload:le?Yi:void 0,onCreateHtmlNode:le?bo:void 0,iconPickerOpen:Tn.open,onOpenIconPicker:le?k1:void 0,onCloseIconPicker:le?kr:void 0,onPickIcon:le?Ji:void 0,onRequestIconReplace:le?Qi:void 0,onCreateConnector:mn,onReconnectConnector:$r,onPinEndpoint:le?Ur:void 0,onUnpinEndpoint:le?Lo:void 0,onReorderNode:m1,onDeleteNode:y1,onCopyNode:F=>nr([F]),onPasteAt:kn,onCopySelection:le?nr:void 0,onPasteSelection:le?()=>kn(null):void 0,hasClipboard:g1,selectedNodes:x1,selectedConnectors:_z,onStyleNode:Kt,onStyleNodePreview:Jn,onStyleNodes:f1,onStyleNodesPreview:zt,onStyleConnector:p1,onStyleConnectorPreview:zn,onRfInit:H,onTidy:ee?ri:void 0,onCreateAndConnectFromPane:Vr,pendingEditNodeId:k,activeShape:U,onSelectShape:R,statusReport:oi,onNameChange:yr,onDescriptionChange:Mo,onDetailChange:er,onIconChange:qr,autoFitView:!0,autoFitViewSignal:D}):y.jsx("div",{className:"flex h-full w-full items-center justify-center text-sm text-muted-foreground",children:"No demo data yet."}),z?y.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:[y.jsx("span",{className:"font-medium",children:"Couldn't save change: "}),y.jsx("span",{className:"font-mono",children:z}),y.jsx("button",{type:"button",className:"ml-3 underline underline-offset-2",onClick:()=>A(null),children:"Dismiss"})]}):null,y.jsx(E6e,{open:O,onOpenChange:B,runCommand:rr,ctx:{hasSelection:h.length>0||f.length>0,canUndo:Or,canRedo:jn,hasClipboard:g1,canExportDemo:!!le,canResetSession:!!l}}),le?y.jsx(G6e,{open:he,onOpenChange:we,projectId:le,onCapturePreview:()=>{var F;return((F=b.current)==null?void 0:F.capturePreview())??Promise.resolve(void 0)}}):null]})}const HB="npx seeflow register --path .";function w8e(){const[e,t]=m.useState(!1),n=async()=>{try{await navigator.clipboard.writeText(HB),t(!0),setTimeout(()=>t(!1),1200)}catch(r){console.error("[empty-state] copy failed",r)}};return y.jsx("div",{"data-testid":"seeflow-empty-state",className:"flex h-full w-full items-center justify-center bg-background p-6",children:y.jsxs("div",{className:"flex max-w-lg flex-col items-center gap-6 text-center",children:[y.jsx("div",{className:"flex h-12 w-12 items-center justify-center rounded-full bg-muted",children:y.jsx(x2,{className:"h-6 w-6 text-muted-foreground"})}),y.jsxs("div",{className:"space-y-2",children:[y.jsx("h1",{className:"text-2xl font-semibold tracking-tight text-foreground",children:"No demos registered yet"}),y.jsxs("p",{className:"text-sm text-muted-foreground",children:["Point SeeFlow at any folder containing a"," ",y.jsx("code",{className:"rounded bg-muted px-1.5 py-0.5 text-xs",children:".seeflow/flow.json"})," file and it'll appear here."]})]}),y.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:[y.jsx("span",{className:"text-muted-foreground select-none",children:"$"}),y.jsx("code",{className:"flex-1 truncate text-left",children:HB}),y.jsx(Nt,{type:"button",variant:"ghost",size:"sm",onClick:n,"aria-label":"Copy register command",children:e?y.jsx(fo,{className:"h-4 w-4"}):y.jsx(ou,{className:"h-4 w-4"})})]})]})})}function M8e({demos:e}){return e.length===0?y.jsx(w8e,{}):y.jsx("div",{className:"flex h-full w-full items-start justify-center overflow-y-auto bg-background p-8",children:y.jsxs("div",{"data-testid":"studio-home-picker",className:"flex w-full max-w-2xl flex-col gap-6 pt-8",children:[y.jsxs("div",{className:"space-y-1",children:[y.jsx("h1",{className:"text-2xl font-semibold tracking-tight",children:"Open a demo"}),y.jsxs("p",{className:"text-sm text-muted-foreground",children:[e.length," demos registered — pick one to load its canvas."]})]}),y.jsx("ul",{className:"flex flex-col gap-2",children:e.map(t=>y.jsx("li",{children:y.jsxs("button",{type:"button",onClick:()=>qu(`/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:[y.jsx("span",{className:"text-sm font-medium",children:t.name}),y.jsx("span",{className:"truncate text-xs text-muted-foreground",children:t.repoPath})]})},t.id))})]})})}const b8e=e=>{if(!e.startsWith("/d/"))return null;const t=e.slice(3);return t.length>0?decodeURIComponent(t):null};function C8e(){const e=a6e(),{demos:t,refresh:n}=u6e(),r=b8e(e),o=r?(t??[]).find(P=>P.slug===r):void 0,i=(o==null?void 0:o.id)??null,{detail:a,loading:s,refresh:l,applyDetail:c}=c6e(i),{runs:h,apply:d}=m6e(i),{events:f,apply:p}=p6e(i),{statusByNode:k,apply:v,reset:w}=v6e(i),g=m.useCallback(()=>{w(),l(),n()},[l,n,w]),M=m.useCallback(P=>{if(!i||!o)return;const T={id:i,slug:o.slug,filePath:""},E=P.valid?{...T,name:P.flow.name??o.name,flow:P.flow,valid:!0,error:null}:{...T,name:o.name,flow:null,valid:!1,error:P.error};c(E)},[i,o,c]),x=m.useCallback(P=>{d(P),p(P),v(P)},[d,p,v]);w6e(i,{onHello:g,onFlowReload:M,onEvent:x});const b=m.useCallback(async()=>{if(i)try{await Ene(i)}catch(P){console.error("Failed to restart demo:",P)}},[i]),S=m.useCallback(P=>{bB(P.id),n()},[n]),C=m.useCallback(async P=>{await n(),i===P&&qu("/")},[n,i]);m.useEffect(()=>{if(e!=="/"||t===null)return;const P=C6e(t,b6e());P&&qu(`/d/${P.slug}`)},[e,t]),m.useEffect(()=>{o&&bB(o.id)},[o]);const L=m.useCallback(P=>{i&&Ane(i,P).catch(T=>{d({type:"node:error",nodeId:P,message:T instanceof Error?T.message:String(T),ts:Date.now()})})},[i,d]);return t===null?y.jsx("div",{className:"flex h-full w-full items-center justify-center bg-background text-sm text-muted-foreground",children:"Loading…"}):y.jsx(L2,{delayDuration:150,children:y.jsxs("div",{className:"flex h-full w-full flex-col bg-background text-foreground",children:[y.jsx(l6e,{demos:t,currentSlug:r??void 0,onProjectCreated:S,onProjectUnregistered:C}),y.jsx("main",{className:"min-h-0 flex-1",children:r?y.jsx(v8e,{slug:r,demos:t,detail:a,loading:s,runs:h,nodeEvents:f,statusByNode:k,onPlayNode:L,onRestartDemo:i?b:void 0}):y.jsx(M8e,{demos:t})})]})})}const MJ=document.getElementById("root");if(!MJ)throw new Error("Root element #root not found");dT.createRoot(MJ).render(y.jsx(oo.StrictMode,{children:y.jsx(C8e,{})}));export{_3e as _,IP as c,uh as g,I8e as z};
|
|
7838
|
+
`)}async function Iwe(e,t){const n=t.fontEmbedCSS!=null?t.fontEmbedCSS:t.skipFonts?null:await Lwe(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 Ewe(e,t={}){const{width:n,height:r}=YQ(e,t),o=await Nz(e,t,!0);return await Iwe(o,t),await rJ(o,t),wwe(o,t),await U3e(o,n,r)}async function Awe(e,t={}){const{width:n,height:r}=YQ(e,t),o=await Ewe(e,t),i=await SR(o),a=document.createElement("canvas"),s=a.getContext("2d"),l=t.pixelRatio||V3e(),c=t.canvasWidth||n,h=t.canvasHeight||r;return a.width=c*l,a.height=h*l,t.skipAutoScale||B3e(a),a.style.width=`${c}`,a.style.height=`${h}`,t.backgroundColor&&(s.fillStyle=t.backgroundColor,s.fillRect(0,0,a.width,a.height)),s.drawImage(i,0,0,a.width,a.height),a}async function Pwe(e,t={}){return(await Awe(e,t)).toDataURL()}const Rwe=e=>e instanceof Element?!(e.classList.contains("react-flow__minimap")||e.classList.contains("react-flow__controls")||e.classList.contains("react-flow__panel")):!0,zwe=async e=>{const t=await Pwe(e,{cacheBust:!0,filter:Rwe}),n=await new Promise((r,o)=>{const i=new Image;i.onload=()=>r({width:i.naturalWidth,height:i.naturalHeight}),i.onerror=()=>o(new Error("Failed to decode captured image")),i.src=t});return{dataUrl:t,...n}},jwe=(e,t)=>{const n=document.createElement("a");n.href=e,n.download=t,n.rel="noopener",document.body.appendChild(n),n.click(),n.remove()},Twe=e=>{const t=e.replace(/[^A-Za-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"");return t.length>0?t.slice(0,80):"canvas"},pB=(e,t)=>`${Twe(e??"canvas")}.${t}`,Nwe=({projectId:e,getReactFlow:t})=>{const[n,r]=m.useState(null),o=m.useCallback(()=>r(null),[]),i=m.useCallback(async()=>{const c=t();if(!c)return null;const h=document.querySelector(".react-flow__viewport");if(!h)return null;const d=c.getViewport();try{return await c.fitView({duration:0,padding:.1}),await new Promise(f=>requestAnimationFrame(()=>f())),await zwe(h)}finally{c.setViewport(d,{duration:0})}},[t]),a=m.useCallback(async()=>{r(null);try{const c=await i();if(!c)return;jwe(c.dataUrl,pB(e,"png"))}catch(c){r(c instanceof Error?c.message:String(c))}},[i,e]),s=m.useCallback(async()=>{r(null);try{const c=await i();if(!c)return;const{jsPDF:h}=await _3e(async()=>{const{jsPDF:p}=await import("./jspdf.es.min-C9FG4HQT.js").then(k=>k.j);return{jsPDF:p}},[]),d=c.width>c.height?"landscape":"portrait",f=new h({orientation:d,unit:"px",format:[c.width,c.height],hotfixes:["px_scaling"]});f.addImage(c.dataUrl,"PNG",0,0,c.width,c.height),f.save(pB(e,"pdf"))}catch(c){r(c instanceof Error?c.message:String(c))}},[i,e]),l=m.useCallback(async()=>{const c=await i();return c==null?void 0:c.dataUrl},[i]);return{exportPdf:s,exportPng:a,capturePreview:l,lastError:n,clearError:o}},Dwe={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},_we={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},Hwe={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 Fwe(e){const t=e.mode==="edit"?Dwe:e.mode==="mini"?Hwe:_we;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 yB=40,Ad={padding:.15,duration:300,includeHiddenNodes:!1};function Owe(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 mB=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},qwe=(e,t)=>{var r;const n=document.elementsFromPoint(e,t);for(const o of n){const i=(r=o.closest)==null?void 0:r.call(o,".react-flow__node");if(i)return i}return null},iJ=15,cT=(e,t,n)=>{const r=qwe(t,n);if(r)return r;if(!e)return null;let o=null,i=iJ;const a=e.querySelectorAll(".react-flow__node");for(const s of a){const l=s.getBoundingClientRect();if(l.width===0||l.height===0)continue;const c=Math.max(l.left-t,0,t-l.right),h=Math.max(l.top-n,0,n-l.bottom),d=Math.hypot(c,h);d<=i&&(o=s,i=d)}return o};function kB(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 a=e==="source"?n:t,s=e==="source"?t:n,l=o(a),c=o(s);if(!l||!c)return;const h=l.measured.width??l.width??0,d=l.measured.height??l.height??0,f=c.measured.width??c.width??0,p=c.measured.height??c.height??0;if(h===0||d===0||f===0||p===0)return;const k={x:l.internals.positionAbsolute.x,y:l.internals.positionAbsolute.y,w:h,h:d},v={x:c.internals.positionAbsolute.x+f/2,y:c.internals.positionAbsolute.y+p/2};return iue(k,lR(k,v))}function Vwe(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 Bwe=(e,t)=>{if(!t)return e;const n=t.data?{...e.data,...t.data}:e.data;return{...e,...t,data:n}},$we=(e,t)=>t?{...e,...t}:e,Uwe={playNode:k0e,stateNode:H0e,shapeNode:P0e,imageNode:ade,iconNode:mue,htmlNode:tde},Wwe={editableEdge:q0e},Gwe={zIndex:0},Zwe=8,gB=(e,t)=>e?typeof e=="string"?`url('#${e}')`:`url('#${`${t?`${t}__`:""}${Object.keys(e).sort().map(o=>`${o}=${e[o]}`).join("&")}`}')`:void 0,Kwe=e=>function({fromX:n,fromY:r,toX:o,toY:i,fromPosition:a,toPosition:s,connectionLineStyle:l}){const c=He(W=>e.current?W.edges.find(H=>H.reconnectable===!0)??null:null),h=c==null?void 0:c.data,d=He(W=>{var j;const H=W.connection;return((j=H==null?void 0:H.fromHandle)==null?void 0:j.nodeId)??null}),f=He(W=>c!=null&&c.source?W.nodeLookup.get(c.source)??null:null),p=He(W=>c!=null&&c.target?W.nodeLookup.get(c.target)??null:null),k=He(W=>d?W.nodeLookup.get(d)??null:null),v=(c==null?void 0:c.source)===d,w=c?v?f:p:k,g=v?p:f,M=v?h==null?void 0:h.sourcePin:h==null?void 0:h.targetPin,x=v?h==null?void 0:h.sourceHandleAutoPicked:h==null?void 0:h.targetHandleAutoPicked;let b=n,S=r,C=a;if(w){const W=w.measured.width??w.width??0,H=w.measured.height??w.height??0;if(W>0&&H>0){const j={x:w.internals.positionAbsolute.x,y:w.internals.positionAbsolute.y,w:W,h:H};let G=null;if(M)G=cR(j,M);else if(x!==!1&&g){const X=g.measured.width??g.width??0,Y=g.measured.height??g.height??0;if(X>0&&Y>0){const re={x:g.internals.positionAbsolute.x+X/2,y:g.internals.positionAbsolute.y+Y/2};G=lR(j,re)}}G&&(b=G.x,S=G.y,C=xB[G.side])}}const L=He(W=>W.transform[2]),P=He(W=>W.nodeLookup),T=He(W=>{var H;return((H=W.connection.toHandle)==null?void 0:H.nodeId)??null});let E=o,z=i,A=s;if(L>0){const W=iJ/L,H=c?v?c.target:c.source:null;let j=null;if(T&&T!==H){const G=P.get(T)??null;G&&(j=G)}if(!j){let G=W;for(const X of P.values()){if(H&&X.id===H||w&&X.id===w.id)continue;const Y=X.measured.width??X.width??0,re=X.measured.height??X.height??0;if(Y===0||re===0)continue;const ne=X.internals.positionAbsolute.x,ae=X.internals.positionAbsolute.y,ve=Math.max(ne-o,0,o-(ne+Y)),ke=Math.max(ae-i,0,i-(ae+re)),ge=Math.hypot(ve,ke);ge<=G&&(G=ge,j=X)}}if(!j&&c&&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,re=w.internals.positionAbsolute.y,ne=Math.max(Y-o,0,o-(Y+G)),ae=Math.max(re-i,0,i-(re+X));Math.hypot(ne,ae)<=W&&(j=w)}}if(j){const G=j.measured.width??j.width??0,X=j.measured.height??j.height??0;if(G>0&&X>0){const Y=bN({x:j.internals.positionAbsolute.x,y:j.internals.positionAbsolute.y,w:G,h:X},{x:o,y:i}),re=cR({x:j.internals.positionAbsolute.x,y:j.internals.positionAbsolute.y,w:G,h:X},Y);E=re.x,z=re.y,A=xB[re.side]}}}const U=(h==null?void 0:h.path)==="step",[R]=U?nh({sourceX:b,sourceY:S,sourcePosition:C,targetX:E,targetY:z,targetPosition:A,borderRadius:Zwe}):XR({sourceX:b,sourceY:S,sourcePosition:C,targetX:E,targetY:z,targetPosition:A}),V=(c==null?void 0:c.style)??l??void 0,O=He(W=>W.rfId),B=v?c==null?void 0:c.markerStart:c==null?void 0:c.markerEnd,D=v?c==null?void 0:c.markerEnd:c==null?void 0:c.markerStart,N=gB(B,O),I=gB(D,O);return y.jsx("path",{d:R,fill:"none",className:"react-flow__connection-path",style:V,markerStart:N,markerEnd:I})},xB={top:pe.Top,right:pe.Right,bottom:pe.Bottom,left:pe.Left};function Xwe({storeApiRef:e}){const t=yt();return m.useEffect(()=>(e.current=t,()=>{e.current===t&&(e.current=null)}),[t,e]),null}function Ywe({wrapperRef:e}){const t=He(r=>r.transform[2]),n=e.current;return n&&n.style.setProperty("--rf-zoom",String(t)),null}const Qwe=new Set(["INPUT","TEXTAREA","SELECT"]),aJ=e=>e?Qwe.has(e.tagName)?!0:e instanceof HTMLElement&&e.isContentEditable:!1;function Jwe(e){const{event:t,selectedNodeIds:n,hasClipboard:r,activeElement:o,onCopySelection:i,onPasteSelection:a}=e;if(!(t.metaKey||t.ctrlKey)||t.shiftKey||t.altKey)return!1;const s=t.key.toLowerCase();return s!=="c"&&s!=="v"||aJ(o)?!1:s==="c"?n.length===0||!i?!1:(t.preventDefault(),i([...n]),!0):!r||!a?!1:(t.preventDefault(),a(),!0)}const vB=(e,t)=>{var n;return((n=e==null?void 0:e[t])==null?void 0:n.status)??"idle"},e6e=(e,t)=>{var n;return(n=e==null?void 0:e[t])==null?void 0:n.status},t6e=(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 n6e(e,t){var _H,HH;const{mode:n,adapter:r,projectId:o,fileBaseUrl:i,nodes:a,connectors:s,selectedNodeIds:l,selectedConnectorIds:c,onSelectionChange:h,runtime:d,onPlayNode:f,onNodePositionChange:p,onNodePositionsChange:k,onNodeResize:v,onNodeResizeEnd:w,onHtmlNodeFitToContent:g,onMultiResize:M,onNodeNameChange:x,onNodeDescriptionChange:b,onConnectorLabelChange:S,onCreateShapeNode:C,onCreateImageFromFile:L,onRetryImageUpload:P,onCreateHtmlNode:T,onCreateConnector:E,onReconnectConnector:z,onReorderNode:A,onDeleteNode:U,onCopyNode:R,onPasteAt:V,hasClipboard:O,onCopySelection:B,onPasteSelection:D,selectedNodes:N,selectedConnectors:I,onStyleNode:W,onStyleNodePreview:H,onStyleNodes:j,onStyleNodesPreview:G,onStyleConnector:X,onStyleConnectorPreview:Y,onRfInit:re,onTidy:ne,onNodeClick:ae,onConnectorClick:ve,onPaneClick:ke,onCreateAndConnectFromPane:ge,pendingEditNodeId:xe,iconPickerOpen:ee,onOpenIconPicker:me,onCloseIconPicker:Fe,onPickIcon:rt,onRequestIconReplace:mt,onPinEndpoint:ht,onUnpinEndpoint:le,activeShape:Q,onSelectShape:he,disableSidebar:we,statusReport:Se,onNameChange:Oe,onDescriptionChange:te,onDetailChange:ue,onIconChange:Pe,autoFitView:qe,autoFitViewSignal:We,customIcons:Rt,onExportToCloud:st,onRestartDemo:Ne,showToolbar:ot,showStyleStrip:Jn,showDetailPanel:zt,showStatusBadges:zn,showResizeHandles:Kt,showControls:f1,showShareMenu:p1,showRestart:Qo,enableKeyboard:Jo,enableContextMenu:_r,enableDragDrop:Zi,enableImageDrop:ei,enableZoom:fr,enablePan:Hr,enableSelection:pr,enableNodeMove:y1,enableEmbed:m1}=e,_e=m.useMemo(()=>Fwe({mode:n,showToolbar:ot,showStyleStrip:Jn,showDetailPanel:zt,showStatusBadges:zn,showResizeHandles:Kt,showControls:f1,showShareMenu:p1,showRestart:Qo,enableKeyboard:Jo,enableContextMenu:_r,enableDragDrop:Zi,enableImageDrop:ei,enableZoom:fr,enablePan:Hr,enableSelection:pr,enableNodeMove:y1,enableEmbed:m1}),[n,ot,Jn,zt,zn,Kt,f1,p1,Qo,Jo,_r,Zi,ei,fr,Hr,pr,y1,m1]),Mt=n==="edit",Fr=m.useRef(_e);m.useEffect(()=>{Fr.current=_e},[_e]);const Or=qe??(n==="mini"?!0:void 0),jn=m.useMemo(()=>Owe(Or),[Or]),yr=d==null?void 0:d.runs,Mo=d==null?void 0:d.statuses,er=(_H=d==null?void 0:d.pendingOverrides)==null?void 0:_H.nodes,qr=(HH=d==null?void 0:d.pendingOverrides)==null?void 0:HH.connectors,an=m.useRef(null),jt=m.useRef(null),bo=m.useRef(!1),mr=m.useRef(!1),Ki=m.useRef(!1),Xi=m.useRef(jn);Xi.current=jn,m.useEffect(()=>{if(bo.current||!jn.onMount||a.length===0)return;const K=jt.current;K&&(K.fitView(Ad),bo.current=!0)},[a,jn.onMount]);const Co=m.useRef(null),Ct=Q,Yi=he,Tn=m.useRef(new Map),ti=m.useCallback((K,J)=>(Tn.current.set(K,J),()=>{Tn.current.get(K)===J&&Tn.current.delete(K)}),[]),[tr,kr]=m.useState(!1),k1=m.useRef(!1);m.useEffect(()=>{k1.current=tr},[tr]);const Qi=m.useRef(!1),Ji=m.useRef(!1),ni=m.useRef(!1),[mn,Vr]=m.useState(null),Br=m.useRef(null);m.useEffect(()=>{Br.current=mn},[mn]),m.useCallback(()=>{Vr(null)},[]);const g1=m.useMemo(()=>Kwe(ni),[]),So=m.useRef(null),nr=m.useRef(null),kn=m.useCallback(K=>{const J=an.current;if(!J){So.current=K;return}const se=So.current;if(se&&se!==K){const ce=J.querySelector(`.react-flow__node[data-id="${CSS.escape(se)}"]`);ce==null||ce.removeAttribute("data-connect-source")}if(K){const ce=J.querySelector(`.react-flow__node[data-id="${CSS.escape(K)}"]`);ce==null||ce.setAttribute("data-connect-source","true")}So.current=K},[]),sn=m.useCallback(K=>{const J=an.current,se=nr.current;if(se!==K){if(J&&se){const ce=J.querySelector(`.react-flow__node[data-id="${CSS.escape(se)}"]`);ce==null||ce.removeAttribute("data-connect-target")}if(J&&K){const ce=J.querySelector(`.react-flow__node[data-id="${CSS.escape(K)}"]`);ce==null||ce.setAttribute("data-connect-target","true")}nr.current=K}},[]),ri=m.useCallback(()=>{kn(null),sn(null)},[kn,sn]);m.useEffect(()=>{if(!tr){sn(null);return}const K=J=>{const se=cT(an.current,J.clientX,J.clientY),ce=(se==null?void 0:se.getAttribute("data-id"))??null;if(ce&&ce===So.current){sn(null);return}sn(ce)};return document.addEventListener("pointermove",K),()=>{document.removeEventListener("pointermove",K)}},[tr,sn]);const[rr,$r]=m.useState(null),[Ur,Lo]=m.useState(null),Je=m.useRef(null),Wr=m.useRef(null),Nn=m.useRef(null),Xt=m.useRef(!1);m.useEffect(()=>{Je.current=Ct},[Ct]);const Gr=m.useCallback(()=>{Yi(null),$r(null),Lo(null),Je.current=null,Wr.current=null,Nn.current=null,Xt.current=!1},[Yi]);m.useEffect(()=>{if(!_e.enableKeyboard)return;const K=J=>{var ye,je;if(J.key!=="Escape"||aJ(document.activeElement))return;if(Je.current){J.preventDefault(),Gr();return}if(k1.current){J.preventDefault(),Qi.current=!0,Ji.current=!0;try{(ye=Co.current)==null||ye.getState().cancelConnection()}catch{}document.dispatchEvent(new MouseEvent("mouseup",{bubbles:!0,cancelable:!0,button:0})),kr(!1);return}if(Br.current){J.preventDefault(),Vr(null);return}const se=vn.current.size>0,ce=Po.current.size>0;(se||ce)&&(J.preventDefault(),(je=Zr.current)==null||je.call(Zr,[],[]))};return window.addEventListener("keydown",K),()=>window.removeEventListener("keydown",K)},[Gr,_e.enableKeyboard]),m.useEffect(()=>{if(!_e.enableKeyboard)return;const K=J=>{Jwe({event:J,selectedNodeIds:l,hasClipboard:!!O,activeElement:document.activeElement,onCopySelection:B,onPasteSelection:D})};return window.addEventListener("keydown",K),()=>window.removeEventListener("keydown",K)},[l,O,B,D,_e.enableKeyboard]);const x1=m.useCallback(K=>{var ce,ye;if(!Je.current)return;const J=K.target;if(!(J!=null&&J.classList.contains("react-flow__pane")))return;const se={x:K.clientX,y:K.clientY};Xt.current=!0,Wr.current=se,Nn.current=se,$r(se),Lo(se);try{(ye=(ce=K.currentTarget).setPointerCapture)==null||ye.call(ce,K.pointerId)}catch{}K.preventDefault(),K.stopPropagation()},[]),_z=m.useCallback(K=>{if(!Xt.current)return;const J={x:K.clientX,y:K.clientY};Nn.current=J,Lo(J)},[]),Kh=m.useCallback(K=>{var Xr,dd;if(!Xt.current)return;Xt.current=!1;try{(dd=(Xr=K.currentTarget).releasePointerCapture)==null||dd.call(Xr,K.pointerId)}catch{}const J=Wr.current,se=Nn.current,ce=Je.current,ye=jt.current;if(Gr(),!J||!se||!ce||!ye)return;const je=Math.min(J.x,se.x),Me=Math.min(J.y,se.y),Ee=Math.max(J.x,se.x),Ke=Math.max(J.y,se.y),et=Ee-je,lt=Ke-Me,Te=ye.screenToFlowPosition({x:je,y:Me}),wn=ye.screenToFlowPosition({x:Ee,y:Ke}),Kr=wn.x-Te.x,ct=wn.y-Te.y,Le=et<yB||lt<yB,Ft=Le?yR[ce].width:Kr,v1=Le?yR[ce].height:ct;C==null||C(ce,Te,{width:Ft,height:v1})},[Gr,C]),Io=m.useRef(!1),ea=m.useRef(!1),id=m.useRef(new Map),oi=m.useCallback(()=>{var K;mr.current&&(ea.current||Io.current||(mr.current=!1,(K=jt.current)==null||K.fitView(Ad)))},[]),ad=m.useCallback(K=>{ea.current=K,K||oi()},[oi]);m.useEffect(()=>{var K;if(!Ki.current){Ki.current=!0;return}if(Xi.current.onExternalNodeChange){if(ea.current||Io.current){mr.current=!0;return}(K=jt.current)==null||K.fitView(Ad)}},[We]);const sd=!!A||!!U||!!R||!!V||!!le,[F,q]=m.useState(null),[Z,$]=m.useState(!1),[_,oe]=m.useState(null),[Ae,be]=m.useState(null),Ue=m.useRef(null),Ut=m.useRef(null);m.useEffect(()=>{if(!F)return;const K=Ut.current;if(!K)return;const J=new MouseEvent("contextmenu",{clientX:F.x,clientY:F.y,bubbles:!0,cancelable:!0,button:2,buttons:2});K.dispatchEvent(J)},[F]);const Eo=m.useCallback(K=>{const J=Ue.current;!J||!A||A(J,K)},[A]),Dn=m.useCallback(()=>{const K=Ue.current;!K||!U||U(K)},[U]),Re=m.useCallback(()=>{const K=Ue.current;!K||!R||R(K)},[R]),it=m.useCallback(()=>{const K=Ue.current;!K||!mt||mt(K)},[mt]);m.useCallback((K,J,se,ce,ye)=>{Fr.current.enableContextMenu&&(Ue.current=null,$(!1),oe(null),be({connectorId:K,kind:J,pinned:se}),q({x:ce,y:ye}))},[]);const Yt=m.useCallback(()=>{const K=Ae;!K||!le||le(K.connectorId,K.kind)},[Ae,le]),gn=m.useCallback(()=>{if(!V)return;const K=F,J=jt.current;if(!K||!J)return;const se=J.screenToFlowPosition({x:K.x,y:K.y});V(se)},[F,V]),ta=typeof navigator<"u"&&/Mac|iPhone|iPad|iPod/.test(navigator.platform||navigator.userAgent||""),Hz=ta?"⌘C":"Ctrl+C",ii=ta?"⌘V":"Ctrl+V",De=m.useMemo(()=>new Set(l),[l]),Qe=m.useMemo(()=>new Set(c),[c]),Ht=m.useMemo(()=>{if(l.length<2)return[];const K=er,J=[];for(const se of l){const ce=a.find(Ee=>Ee.id===se);if(!ce)continue;const ye=K==null?void 0:K[se],je=(ye==null?void 0:ye.data)??{},Me=ce.data;J.push({id:se,position:(ye==null?void 0:ye.position)??ce.position,data:{width:je.width??Me.width,height:je.height??Me.height}})}return J},[a,er,l]),xn=N??[],Ao=m.useMemo(()=>{const K=ye=>{const je=Mt?void 0:id.current.get(ye.id),Me={id:ye.id,type:ye.type,position:je??ye.position,data:{...ye.data,projectId:o,fileBaseUrl:i,onRetryUpload:P,status:e6e(yr,ye.id),errorMessage:t6e(yr,ye.id),statusReport:Mo==null?void 0:Mo[ye.id],onPlay:f,onResize:v,onResizeEnd:w,setResizing:ad,onFitToContent:ye.type==="htmlNode"?g:void 0,onNameChange:(()=>{if(Mt&&!(ye.type==="shapeNode"&&ye.data.shape==="ellipse"))return x})(),onDescriptionChange:(()=>{if(Mt){if(ye.type==="shapeNode"){const Ee=ye.data.shape;return Ee==="rectangle"||Ee==="ellipse"||Ee==="sticky"?b:void 0}if(!(ye.type==="imageNode"||ye.type==="iconNode"))return b}})(),onIconChange:(()=>{if(Mt&&!(ye.type!=="playNode"&&ye.type!=="stateNode"))return Pe})(),autoEditOnMount:xe===ye.id?!0:void 0},selected:De.has(ye.id)};return ye.data.width!==void 0&&(Me.width=ye.data.width),ye.data.height!==void 0&&(Me.height=ye.data.height),De.has(ye.id)||(Me.connectable=!1),Me},J=a.map(ye=>K(Bwe(ye,er==null?void 0:er[ye.id]))),se=new Set(a.map(ye=>ye.id)),ce=[];if(er)for(const[ye,je]of Object.entries(er)){if(se.has(ye))continue;const Me=je;typeof Me.type!="string"||!Me.position||!Me.data||ce.push(K({...Me,id:ye}))}return[...J,...ce]},[o,i,a,De,yr,Mo,f,v,w,g,ad,er,x,b,Pe,P,xe,Mt]),[na,ld]=m.useState(Ao);m.useEffect(()=>{Io.current||ea.current||ld(Ao)},[Ao]),m.useEffect(()=>{cd.current=na},[na]);const vn=m.useRef(De);m.useEffect(()=>{vn.current=De},[De]);const Zr=m.useRef(h);m.useEffect(()=>{Zr.current=h},[h]);const Po=m.useRef(Qe);m.useEffect(()=>{Po.current=Qe},[Qe]);const cd=m.useRef(Ao),ra=m.useRef(!1),Xh=m.useRef(new Set),Yh=m.useRef(new Set),Fz=m.useRef(new Set),Oz=m.useRef(new Set),ai=m.useRef(null),bJ=m.useCallback(K=>{var ct;const J=ra.current?Fz.current:(ct=ai.current)!=null&&ct.shift?ai.current.nodeIds:null,se=J&&J.size>0?K.filter(Le=>Le.type!=="select"?!0:!(Le.selected===!1&&J.has(Le.id))):K,ce=new Set;for(const Le of se)Le.type==="select"&&ce.add(Le.id);const ye=MG(se,cd.current),je=new Set;if(ea.current)for(const Le of se)Le.type==="dimensions"&&je.add(Le.id);const Me=je.size===0?ye:ye.map(Le=>!je.has(Le.id)||Le.width===void 0&&Le.height===void 0?Le:{...Le,data:{...Le.data,...Le.width!==void 0?{width:Le.width}:{},...Le.height!==void 0?{height:Le.height}:{}}}),Ee=vn.current,Ke=ra.current||Ee.size===0?Me:Me.map(Le=>Ee.has(Le.id)&&!ce.has(Le.id)&&!Le.selected?{...Le,selected:!0}:Le);if(cd.current=Ke,ld(Ke),ce.size===0)return;if(ra.current){for(const Le of se)Le.type==="select"&&(Le.selected?Xh.current.add(Le.id):Xh.current.delete(Le.id));return}const et=Zr.current;if(!et)return;const lt=Ke.filter(Le=>Le.selected).map(Le=>Le.id),Te=vn.current;Te.size===lt.length&<.every(Le=>Te.has(Le))||(vn.current=new Set(lt),et(lt,[...Po.current]))},[]),Qh=m.useRef([]),CJ=m.useCallback(K=>{var lt;const J=ra.current?Oz.current:(lt=ai.current)!=null&<.shift?ai.current.edgeIds:null,se=J&&J.size>0?K.filter(Te=>Te.type!=="select"?!0:!(Te.selected===!1&&J.has(Te.id))):K,ce=new Set;for(const Te of se)Te.type==="select"&&ce.add(Te.id);if(ce.size===0)return;if(ra.current){for(const Te of se)Te.type==="select"&&(Te.selected?Yh.current.add(Te.id):Yh.current.delete(Te.id));return}const ye=Zr.current;if(!ye)return;const Me=bG(se,Qh.current).filter(Te=>Te.selected).map(Te=>Te.id),Ee=Po.current;Ee.size===Me.length&&Me.every(Te=>Ee.has(Te))||(Po.current=new Set(Me),ye([...vn.current],Me))},[]),SJ=m.useCallback(K=>{ra.current=!0;const J=ai.current,se=(J==null?void 0:J.shift)??(K.shiftKey||K.metaKey||K.ctrlKey);Fz.current=se?new Set((J==null?void 0:J.nodeIds)??vn.current):new Set,Oz.current=se?new Set((J==null?void 0:J.edgeIds)??Po.current):new Set,Xh.current=new Set(Fz.current),Yh.current=new Set(Oz.current)},[]),LJ=m.useCallback(()=>{ra.current=!1,ai.current=null;const K=Zr.current;if(!K)return;const J=[...Xh.current],se=new Set(J),ce=new Set(Yh.current);for(const Ke of Qh.current)se.has(Ke.source)&&se.has(Ke.target)&&ce.add(Ke.id);const ye=vn.current,je=Po.current,Me=ye.size===se.size&&J.every(Ke=>ye.has(Ke)),Ee=je.size===ce.size&&[...ce].every(Ke=>je.has(Ke));Me&&Ee||(vn.current=new Set(J),Po.current=new Set(ce),K(J,[...ce]))},[]),IJ=m.useCallback(K=>{if(ai.current=null,Je.current||K.button!==0)return;const J=K.target;J!=null&&J.classList.contains("react-flow__pane")&&(ai.current={shift:K.shiftKey||K.metaKey||K.ctrlKey,nodeIds:new Set(vn.current),edgeIds:new Set(Po.current)})},[]),EJ=m.useCallback(K=>{if(!Fr.current.enableContextMenu||vn.current.size<2)return;const se=K.target;se!==Ut.current&&(se!=null&&se.closest(".seeflow-connector-endpoint-dot")||(K.preventDefault(),K.stopPropagation(),Ue.current=null,$(!0),oe(null),be(null),q({x:K.clientX,y:K.clientY})))},[]),AJ=m.useCallback(K=>{const J=K.dataTransfer;if(!J)return;const se=J.types?Array.from(J.types):[],ce=se.includes("Files"),ye=se.includes(Qq),je=ce&&!!L&&_e.enableImageDrop,Me=ye&&!!T&&_e.enableDragDrop;if(!(!je&&!Me)){K.preventDefault();try{J.dropEffect="copy"}catch{}}},[L,T,_e.enableImageDrop,_e.enableDragDrop]),PJ=m.useCallback(K=>{const J=K.dataTransfer;if((J!=null&&J.types?Array.from(J.types):[]).includes(Qq)&&T&&_e.enableDragDrop){K.preventDefault();const je=jt.current;if(!je)return;const Me=je.screenToFlowPosition({x:K.clientX,y:K.clientY});T({position:Me});return}if(!L||!_e.enableImageDrop)return;const ye={x:K.clientX,y:K.clientY};K.preventDefault(),Gne({dataTransfer:J,clientPos:ye,rfInstance:jt.current,computeDims:Zne,dispatch:L})},[L,T,_e.enableImageDrop,_e.enableDragDrop]),EH=!!z,AH=Qe.size===1?[...Qe][0]:null,qz=m.useMemo(()=>{const K=Ee=>{const Ke=vB(yr,Ee.source)==="running"||vB(yr,Ee.target)==="running",et=Qe.has(Ee.id),lt=eue(Ee,Ke,et);et&&(lt.selected=!0);const Te=EH&&Ee.id===AH,wn=Te?{...lt,reconnectable:!0}:lt;return{...wn,data:{...wn.data,onLabelChange:Mt?S:void 0,reconnectable:Te,registerEditHandle:ti}}},J=new Set(s.map(Ee=>Ee.id)),se=s.map(Ee=>K($we(Ee,qr==null?void 0:qr[Ee.id]))),ce=[];if(qr)for(const[Ee,Ke]of Object.entries(qr)){if(J.has(Ee))continue;const et=Ke;typeof et.source!="string"||typeof et.target!="string"||typeof et.kind!="string"||ce.push(K({...et,id:Ee}))}const ye=[...se,...ce],je=[],Me=[];for(const Ee of ye)Qe.has(Ee.id)?Me.push(Ee):je.push(Ee);return[...je,...Me]},[s,yr,Qe,AH,qr,S,EH,ti,Mt]);m.useEffect(()=>{Qh.current=qz},[qz]);const ud=e.adapter??null,RJ=m.useMemo(()=>{if(ud!=null&&ud.computeLayout)return async()=>{const K=jt.current,J=cd.current;if(J.length<2)return;const se=J.map(ct=>{var dd;const Le=(dd=K==null?void 0:K.getInternalNode(ct.id))==null?void 0:dd.measured,Ft=ct.data,v1=(Le==null?void 0:Le.width)??Ft.width??200,Xr=(Le==null?void 0:Le.height)??Ft.height??120;return{id:ct.id,type:ct.type,width:v1,height:Xr}}),ce=new Map;for(const ct of J)ce.set(ct.id,ct.position);const ye=Qh.current.map(ct=>({id:ct.id,source:ct.source,target:ct.target})),je=ud.computeLayout;if(!je)return;const Me=await je(se,ye),Ee=new Map;for(const[ct,Le]of Object.entries(Me.nodes))Ee.set(ct,Le.position);let Ke=Number.POSITIVE_INFINITY,et=Number.POSITIVE_INFINITY,lt=Number.POSITIVE_INFINITY,Te=Number.POSITIVE_INFINITY;for(const ct of se){const Le=ce.get(ct.id);if(!Le)continue;Le.x<Ke&&(Ke=Le.x),Le.y<et&&(et=Le.y);const Ft=Ee.get(ct.id);Ft&&(Ft.x<lt&&(lt=Ft.x),Ft.y<Te&&(Te=Ft.y))}const wn=Number.isFinite(Ke)&&Number.isFinite(lt)?Ke-lt:0,Kr=Number.isFinite(et)&&Number.isFinite(Te)?et-Te:0;ld(ct=>ct.map(Le=>{const Ft=Ee.get(Le.id);return Ft?{...Le,position:{x:Ft.x+wn,y:Ft.y+Kr}}:Le}))}},[ud]),Jh=ne??(Mt?void 0:RJ),e0=m.useRef(!1),PH=m.useRef(null),zJ=m.useCallback(K=>{var Ee;if(!Mt||!E)return;const{source:J,target:se}=K;if(!J||!se||J===se)return;e0.current=!0;const ce=((Ee=PH.current)==null?void 0:Ee.nodeId)??null,ye=ce!==null&&ce===se&&ce!==J;E(ye?se:J,ye?J:se)},[E,Mt]),Vz=m.useCallback(K=>{const J=se=>{if(!se)return!1;const ce=cd.current.find(ye=>ye.id===se);return ce?ce.type==="shapeNode"&&ce.data.shape==="text":!1};return!J(K.source)&&!J(K.target)},[]),jJ=m.useCallback((K,J)=>{var lt;kr(!1),ri();const se=e0.current;if(e0.current=!1,se||ni.current)return;if(Qi.current){Qi.current=!1;return}if(!E)return;const ce=(lt=J.fromNode)==null?void 0:lt.id,ye=J.fromHandle;if(!ce||!ye)return;const je=mB(K);if(!je)return;const Me=cT(an.current,je.clientX,je.clientY);if(!Me)return;const Ee=Me.getAttribute("data-id");if(!Ee||Ee===ce||!Vz({source:ce,target:Ee,sourceHandle:null,targetHandle:null}))return;let Ke;const et=jt.current;if(et){const Te=et.getInternalNode(Ee);if(Te){const wn=Te.measured.width??Te.width??0,Kr=Te.measured.height??Te.height??0;if(wn>0&&Kr>0){const ct=et.screenToFlowPosition({x:je.clientX,y:je.clientY});Ke=bN({x:Te.internals.positionAbsolute.x,y:Te.internals.positionAbsolute.y,w:wn,h:Kr},ct)}}}E(ce,Ee,Ke?{targetPin:Ke}:void 0)},[E,ri,Vz]),t0=m.useRef(!1),TJ=m.useCallback((K,J)=>{if(!z)return;const{source:se,target:ce,sourceHandle:ye,targetHandle:je}=J;if(!se||!ce||se===ce)return;const Me={};if(se!==K.source&&(Me.source=se),ce!==K.target&&(Me.target=ce),typeof ye=="string"&&ye!==K.sourceHandle&&(Me.sourceHandle=ye),typeof je=="string"&&je!==K.targetHandle&&(Me.targetHandle=je),Me.source===void 0&&Me.target===void 0&&Me.sourceHandle===void 0&&Me.targetHandle===void 0)return;(Me.source!==void 0||Me.sourceHandle!==void 0)&&(Me.sourceHandleAutoPicked=!1),(Me.target!==void 0||Me.targetHandle!==void 0)&&(Me.targetHandleAutoPicked=!1);const Ee=jt.current;if(!(Me.source===void 0&&Me.target===void 0)&&Ee){const et=Me.source!==void 0?"source":"target",lt=kB(et,K.source,K.target,K.data,Te=>Ee.getInternalNode(Te)??null);lt&&(et==="source"?Me.targetPin=lt:Me.sourcePin=lt)}t0.current=!0,z(K.id,Me)},[z]),NJ=m.useCallback((K,J,se,ce)=>{var v1;kr(!1),ri(),ni.current=!1;const ye=t0.current;if(t0.current=!1,ye)return;if(Ji.current){Ji.current=!1;return}if(!z)return;const je=mB(K);let Me=((v1=ce.toNode)==null?void 0:v1.id)??null;if(!Me&&je){const Xr=cT(an.current,je.clientX,je.clientY);Me=(Xr==null?void 0:Xr.getAttribute("data-id"))??null}const Ee=se==="source"?"target":"source",Ke=Vwe(Ee,J.source,J.target,Me);if(Ke==="no-op"||Ke==="self-loop"||!je)return;const et=jt.current;if(!et)return;const lt=Ke==="pin-own"?Ee==="source"?J.source:J.target:Me,Te=et.getInternalNode(lt);if(!Te)return;const wn=Te.measured.width??Te.width??0,Kr=Te.measured.height??Te.height??0;if(wn===0||Kr===0)return;const ct=et.screenToFlowPosition({x:je.clientX,y:je.clientY}),Le=bN({x:Te.internals.positionAbsolute.x,y:Te.internals.positionAbsolute.y,w:wn,h:Kr},ct);if(Ke==="pin-own"){if(!ht)return;ht(J.id,Ee,Le);return}const Ft=kB(Ee,J.source,J.target,J.data,Xr=>et.getInternalNode(Xr)??null);Ee==="source"?z(J.id,{source:Me,sourceHandle:null,sourceHandleAutoPicked:!1,sourcePin:Le,...Ft?{targetPin:Ft}:{}}):z(J.id,{target:Me,targetHandle:null,targetHandleAutoPicked:!1,targetPin:Le,...Ft?{sourcePin:Ft}:{}})},[z,ri,ht]),oa=m.useMemo(()=>{var Ee;if(!rr||!Ur)return null;const K=(Ee=an.current)==null?void 0:Ee.getBoundingClientRect(),J=(K==null?void 0:K.left)??0,se=(K==null?void 0:K.top)??0,ce=Math.min(rr.x,Ur.x),ye=Math.min(rr.y,Ur.y),je=Math.abs(Ur.x-rr.x),Me=Math.abs(Ur.y-rr.y);return{left:ce-J,top:ye-se,width:je,height:Me}},[rr,Ur]),DJ=Ct?nK(Ct):"",_J=Ct?rK(Ct):void 0,HJ=Ct==="text",[RH,zH]=m.useState(!1),[FJ,n0]=m.useState(!1),[OJ,jH]=m.useState(!1),si=Nwe({projectId:o,getReactFlow:()=>jt.current});m.useImperativeHandle(t,()=>({exportPdf:si.exportPdf,exportPng:si.exportPng,openEmbedDialog:()=>jH(!0),capturePreview:si.capturePreview}),[si.exportPdf,si.exportPng,si.capturePreview]),m.useEffect(()=>{if(!_e.enableKeyboard)return;const K=ce=>{if(!ce)return!1;const ye=ce.tagName;return ye==="INPUT"||ye==="TEXTAREA"||ye==="SELECT"?!0:ce instanceof HTMLElement&&ce.isContentEditable},J=ce=>{ce.code==="Space"&&(K(document.activeElement)||(ce.preventDefault(),zH(!0)))},se=ce=>{ce.code==="Space"&&(zH(!1),n0(!1))};return window.addEventListener("keydown",J),window.addEventListener("keyup",se),()=>{window.removeEventListener("keydown",J),window.removeEventListener("keyup",se)}},[_e.enableKeyboard]);const r0=m.useCallback(K=>{if(K.length!==0){if(!Mt){const J=id.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&&p&&p(J.id,{x:J.position.x,y:J.position.y});return}if(k){k(K.map(J=>({id:J.id,position:{x:J.position.x,y:J.position.y}})));return}if(p)for(const J of K)p(J.id,{x:J.position.x,y:J.position.y})}},[p,k,Mt]),qJ=m.useCallback((K,J,se)=>{Io.current=!1,r0(se),oi()},[r0,oi]),VJ=m.useCallback(()=>{Io.current=!0},[]),BJ=m.useCallback((K,J)=>{Io.current=!1,r0(J),oi()},[r0,oi]),$J=m.useCallback((K,J)=>{ae==null||ae(J.id)},[ae]),UJ=m.useCallback(K=>{ke==null||ke()},[ke]),WJ=m.useCallback((K,J)=>{ve==null||ve(J.id)},[ve]),TH=Ct?"crosshair":RH?FJ?"grabbing":"grab":void 0,NH=l[0],DH=c[0],GJ=NH?a.find(K=>K.id===NH)??null:null,ZJ=DH?s.find(K=>K.id===DH)??null:null,KJ=o??null,XJ=_e.showDetailPanel&&!we,YJ=m.useMemo(()=>({custom:Rt??{}}),[Rt]);return y.jsx(Zue,{value:YJ,children:y.jsx("div",{"data-testid":"seeflow-canvas","data-mode":n,ref:an,className:"seeflow-canvas-root sf:relative sf:h-full sf:w-full",style:TH?{cursor:TH}:void 0,onPointerDownCapture:IJ,onPointerDown:K=>{RH&&n0(!0),x1(K)},onPointerMove:_z,onPointerUp:K=>{n0(!1),Kh(K)},onPointerCancel:()=>{Xt.current=!1,Wr.current=null,Nn.current=null,$r(null),Lo(null),n0(!1)},onContextMenuCapture:EJ,onDragOver:AJ,onDrop:PJ,children:y.jsxs(Khe,{containerRef:an,children:[y.jsxs(m1e,{nodes:na,edges:qz,onNodesChange:bJ,nodeTypes:Uwe,edgeTypes:Wwe,proOptions:{hideAttribution:!0},fitView:!0,minZoom:n==="mini"?.05:.5,nodesDraggable:(Mt?!!p:!0)&&!Ct&&_e.enableNodeMove,nodesConnectable:Mt&&!!E&&!Ct,deleteKeyCode:Mt?["Backspace","Delete"]:null,zoomOnScroll:_e.enableZoom,zoomOnPinch:_e.enableZoom,className:tr?"seeflow-connecting":void 0,onConnect:Mt?zJ:void 0,isValidConnection:Vz,onConnectStart:(K,J)=>{kr(!0),e0.current=!1,PH.current={nodeId:J.nodeId??null,handleType:J.handleType??null},kn(J.nodeId??null)},onConnectEnd:jJ,onReconnect:Mt&&z?TJ:void 0,onReconnectStart:(K,J,se)=>{kr(!0),t0.current=!1,ni.current=!0;const ce=se==="source"?J.source:J.target;kn(ce)},onReconnectEnd:NJ,connectionLineComponent:g1,connectionLineStyle:{strokeWidth:2},connectionRadius:32,reconnectRadius:10,edgesReconnectable:!1,elevateNodesOnSelect:!1,elementsSelectable:!Ct&&_e.enableSelection,selectNodesOnDrag:!1,nodeClickDistance:5,selectionOnDrag:!Ct&&_e.enableSelection,panOnDrag:Ct?!1:_e.enablePan?[1,2]:!1,selectionMode:Eu.Partial,selectionKeyCode:null,multiSelectionKeyCode:Ct?null:["Meta","Shift"],panActivationKeyCode:Ct?null:"Space",onSelectionStart:SJ,onSelectionEnd:LJ,defaultEdgeOptions:Gwe,zoomOnDoubleClick:!1,onInit:K=>{jt.current=K;const J=an.current;J&&J.style.setProperty("--rf-zoom",String(K.getZoom())),!bo.current&&jn.onMount&&a.length>0&&(K.fitView(Ad),bo.current=!0),re==null||re(K)},onMove:(K,J)=>{Br.current&&Vr(null);const se=an.current;se&&se.style.setProperty("--rf-zoom",String(J.zoom))},onEdgesChange:CJ,onNodeDragStart:()=>{Io.current=!0},onNodeDragStop:qJ,onSelectionDragStart:VJ,onSelectionDragStop:BJ,onNodeClick:$J,onEdgeClick:WJ,onEdgeDoubleClick:(K,J)=>{var se;(se=Tn.current.get(J.id))==null||se()},onPaneClick:UJ,onNodeContextMenu:_e.enableContextMenu&&sd?(K,J)=>{K.preventDefault(),Ue.current=J.id,$(!0),oe(J.type??null),be(null),q({x:K.clientX,y:K.clientY})}:void 0,onPaneContextMenu:_e.enableContextMenu&&V?K=>{K.preventDefault(),Ue.current=null,$(!1),oe(null),be(null),q({x:K.clientX,y:K.clientY})}:void 0,children:[y.jsx(Xwe,{storeApiRef:Co}),y.jsx(Ywe,{wrapperRef:an}),y.jsx(L1e,{gap:12,size:.6}),_e.showControls?y.jsxs(j1e,{showInteractive:!1,showFitView:!1,children:[y.jsx(X1,{"data-testid":"controls-fit-view","aria-label":"Fit view",title:"Fit view",disabled:a.length===0,onClick:()=>{var K;(K=jt.current)==null||K.fitView(Ad)},children:y.jsx(iu,{className:"sf:h-3 sf:w-3","aria-hidden":"true"})}),y.jsx(X1,{"data-testid":"controls-tidy","aria-label":"Tidy layout (⌘⇧L)",title:"Tidy layout (⌘⇧L)",disabled:!Jh,onClick:()=>Jh==null?void 0:Jh(),children:y.jsx(s2,{className:"sf:h-3 sf:w-3","aria-hidden":"true"})})]}):null,_e.showResizeHandles?y.jsx(R3e,{selectedNodes:Ht,onMultiResize:M}):null,_e.showToolbar&&C||_e.showStyleStrip&&W&&X?y.jsx(ju,{position:"top-left",children:y.jsxs("div",{className:"sf:flex sf:flex-col sf:gap-2",children:[_e.showToolbar&&C?y.jsx(ume,{activeShape:Ct,onSelectShape:Yi,iconPickerOpen:ee??!1,onOpenIconPicker:me,onCloseIconPicker:Fe,onPickIcon:rt}):null,_e.showStyleStrip&&W&&X?y.jsx(j3e,{nodes:xn,connectors:I??[],onStyleNode:W,onStyleNodePreview:H,onStyleNodes:j,onStyleNodesPreview:G,onStyleConnector:X,onStyleConnectorPreview:Y,onRequestIconReplace:mt}):null]})}):null,_e.showShareMenu||_e.showRestart&&Ne?y.jsx(ju,{position:"top-right",children:y.jsxs("div",{className:"sf:flex sf:items-center sf:gap-1",children:[_e.showRestart&&Ne?y.jsx(I3e,{onRestartDemo:Ne}):null,_e.showShareMenu?y.jsx(L3e,{mode:n==="mini"?"view":n,projectId:o,enableEmbed:_e.enableEmbed,onDownloadPdf:si.exportPdf,onDownloadPng:si.exportPng,onExportToCloud:st,embedOpen:OJ,onEmbedOpenChange:jH}):null]})}):null]}),oa?y.jsx("div",{"data-testid":"canvas-draw-ghost","data-ghost-shape":Ct??void 0,"aria-hidden":!0,className:ie("sf:pointer-events-none sf:absolute sf:z-10",DJ,HJ?"sf:rounded-sm sf:border sf:border-dashed sf:border-muted-foreground/40":""),style:{..._J,left:oa.left,top:oa.top,width:oa.width,height:oa.height},children:(()=>{const K=Ct?O_[Ct]:void 0;return K?y.jsx(K,{width:oa.width,height:oa.height,borderColor:tt(void 0,"node").borderColor,backgroundColor:mh,borderSize:C_}):null})()}):null,_e.enableContextMenu&&sd?y.jsxs(Tpe,{onOpenChange:K=>{K||(q(null),Ue.current=null,oe(null),be(null))},children:[y.jsx(Npe,{asChild:!0,children:y.jsx("div",{ref:Ut,"data-testid":"node-context-menu-trigger","aria-hidden":!0,className:"sf:pointer-events-none sf:fixed",style:{left:(F==null?void 0:F.x)??0,top:(F==null?void 0:F.y)??0,width:0,height:0}})}),y.jsxs(_X,{"data-testid":"node-context-menu",children:[Ae!=null&&Ae.pinned&&le?y.jsx(to,{"data-testid":"connector-endpoint-context-menu-unpin",onSelect:Yt,children:"Unpin"}):null,Z&&R?y.jsxs(to,{"data-testid":"node-context-menu-copy",onSelect:Re,children:["Copy",y.jsx(DN,{children:Hz})]}):null,V?y.jsxs(to,{"data-testid":"node-context-menu-paste",disabled:!O,onSelect:gn,children:["Paste",y.jsx(DN,{children:ii})]}):null,Z&&(R||V)&&(_==="iconNode"&&mt||A||U)?y.jsx(bP,{}):null,Z&&_==="iconNode"&&mt?y.jsx(to,{"data-testid":"node-context-menu-change-icon",onSelect:it,children:"Change icon"}):null,Z&&_==="iconNode"&&mt&&(A||U)?y.jsx(bP,{}):null,Z&&A?y.jsxs(y.Fragment,{children:[y.jsx(to,{"data-testid":"node-context-menu-to-front",onSelect:()=>Eo({op:"toFront"}),children:"Bring to front"}),y.jsx(to,{"data-testid":"node-context-menu-forward",onSelect:()=>Eo({op:"forward"}),children:"Bring forward"}),y.jsx(to,{"data-testid":"node-context-menu-backward",onSelect:()=>Eo({op:"backward"}),children:"Send backward"}),y.jsx(to,{"data-testid":"node-context-menu-to-back",onSelect:()=>Eo({op:"toBack"}),children:"Send to back"})]}):null,Z&&A&&U?y.jsx(bP,{}):null,Z&&U?y.jsx(to,{"data-testid":"node-context-menu-delete",onSelect:Dn,children:"Delete"}):null]})]}):null,ge?y.jsxs(Ju,{open:!!mn,onOpenChange:K=>{K||Vr(null)},children:[y.jsx(Xhe,{asChild:!0,children:y.jsx("div",{"data-testid":"drop-popover-anchor","aria-hidden":!0,className:"sf:pointer-events-none sf:fixed",style:{left:(mn==null?void 0:mn.clientX)??0,top:(mn==null?void 0:mn.clientY)??0,width:0,height:0}})}),y.jsx(c1,{"data-testid":"drop-popover",align:"start",side:"bottom",sideOffset:4,className:"sf:w-auto sf:p-1",onOpenAutoFocus:K=>{K.preventDefault()},children:y.jsx("div",{role:"menu","aria-label":"Create connected node",className:"sf:flex sf:flex-col sf:gap-0.5",children:cme.map(({shape:K,label:J,Icon:se})=>y.jsxs("button",{type:"button",role:"menuitem","data-testid":`drop-popover-shape-${K}`,onClick:()=>{const ce=mn;ce&&(ge({sourceNodeId:ce.sourceNodeId,position:{x:ce.flowX,y:ce.flowY},shape:K}),Vr(null))},className:ie("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:[y.jsx(se,{className:"sf:h-4 sf:w-4 sf:text-muted-foreground","aria-hidden":"true"}),y.jsx("span",{children:J})]},K))})})]}):null,XJ?y.jsx(r3e,{flowId:KJ,node:GJ,connector:ZJ,adapter:r??null,statusReport:Se,onNameChange:Oe,onDescriptionChange:te,onDetailChange:ue,onIconChange:Pe,onClose:()=>{var K;(K=Zr.current)==null||K.call(Zr,[],[])}}):null]})})})}const r6e=m.forwardRef(n6e);function o6e({open:e,onOpenChange:t,onCreated:n}){const[r,o]=m.useState(""),[i,a]=m.useState(null),[s,l]=m.useState(!1);m.useEffect(()=>{e&&(o(""),a(null),l(!1))},[e]);const c=r.trim(),h=c.length>0&&!s,d=async f=>{if(f.preventDefault(),!!h){l(!0),a(null);try{const p=await Ine({name:c});n(p),t(!1)}catch(p){a(p instanceof Error?p.message:String(p)),l(!1)}}};return y.jsx(gz,{open:e,onOpenChange:t,children:y.jsxs(Nh,{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:[y.jsxs(Dh,{children:[y.jsx(_h,{children:"Create new project"}),y.jsxs(Hh,{children:["The project will be created at ",y.jsx("code",{children:"~/.seeflow/<slug>"}),"."]})]}),y.jsxs("form",{onSubmit:d,className:"flex flex-col gap-4",children:[y.jsxs("label",{className:"flex flex-col gap-1.5 text-sm",children:[y.jsx("span",{className:"font-medium",children:"Project name"}),y.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"})]}),i?y.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:i}):null,y.jsxs(Hu,{children:[y.jsx(Nt,{type:"button",variant:"ghost",onClick:()=>t(!1),disabled:s,children:"Cancel"}),y.jsx(Nt,{type:"submit",disabled:!h,"data-testid":"create-project-submit",children:s?"Creating…":"Create project"})]})]})]})})}const rD="seeflow:navigate",i6e=e=>(window.addEventListener("popstate",e),window.addEventListener(rD,e),()=>{window.removeEventListener("popstate",e),window.removeEventListener(rD,e)}),wB=()=>window.location.pathname,a6e=()=>m.useSyncExternalStore(i6e,wB,wB),qu=e=>{e!==window.location.pathname&&(window.history.pushState({},"",e),window.dispatchEvent(new Event(rD)))};function s6e({demos:e,currentSlug:t,onProjectCreated:n,onProjectUnregistered:r}){const[o,i]=m.useState(!1),[a,s]=m.useState(!1),[l,c]=m.useState(null),[h,d]=m.useState(!1),[f,p]=m.useState(null);m.useEffect(()=>{const x=b=>{b.key==="k"&&(b.metaKey||b.ctrlKey)&&(b.preventDefault(),i(S=>!S))};return document.addEventListener("keydown",x),()=>document.removeEventListener("keydown",x)},[]);const k=e.find(x=>x.slug===t),v=x=>{n==null||n(x),qu(`/d/${x.slug}`)},w=x=>{c(x),p(null)},g=()=>{h||(c(null),p(null))},M=async()=>{if(l){d(!0),p(null);try{await Lne(l.id);const x=l.id;c(null),r==null||r(x)}catch(x){p(x instanceof Error?x.message:String(x))}finally{d(!1)}}};return y.jsxs(y.Fragment,{children:[y.jsxs(Ju,{open:o,onOpenChange:i,children:[y.jsx(Eh,{asChild:!0,children:y.jsxs(Nt,{type:"button",variant:"outline",size:"sm","aria-label":"Switch demo","aria-expanded":o,className:"gap-2","data-testid":"project-switcher-trigger",children:[y.jsx("span",{className:"max-w-[180px] truncate text-sm",children:(k==null?void 0:k.name)??"Select demo"}),y.jsx(TK,{children:"⌘K"}),y.jsx(Qd,{className:"h-3.5 w-3.5 opacity-60"})]})}),y.jsx(c1,{align:"end",sideOffset:6,className:"w-[320px] p-0","data-testid":"project-switcher-popover",children:y.jsxs(AK,{children:[y.jsx(PK,{placeholder:"Search demos..."}),y.jsxs(RK,{children:[y.jsx(zK,{children:"No demos."}),e.length>0?y.jsx(zN,{heading:"Demos",children:e.map(x=>y.jsxs(jN,{value:`${x.name} ${x.slug}`,onSelect:()=>{i(!1),qu(`/d/${x.slug}`)},className:"group flex items-center justify-between gap-2",children:[y.jsxs("div",{className:"flex min-w-0 flex-col items-start gap-0.5",children:[y.jsx("span",{className:"font-medium",children:x.name}),y.jsx("span",{className:"w-full truncate text-xs text-muted-foreground",children:x.repoPath})]}),y.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(),i(!1),w(x)},children:y.jsx(v2,{className:"h-3.5 w-3.5"})})]},x.id))}):null,e.length>0?y.jsx(jK,{}):null,y.jsx(zN,{children:y.jsxs(jN,{value:"+ create new project",onSelect:()=>{i(!1),s(!0)},"data-testid":"project-switcher-create",className:"flex items-center gap-2 text-sm",children:[y.jsx(d2,{className:"h-4 w-4 opacity-70"}),y.jsx("span",{className:"font-medium",children:"Create new project"})]})})]})]})})]}),y.jsx(o6e,{open:a,onOpenChange:s,onCreated:v}),y.jsx(gz,{open:l!==null,onOpenChange:x=>{x||g()},children:y.jsxs(Nh,{className:"sm:max-w-md","data-testid":"unregister-project-dialog",children:[y.jsxs(Dh,{children:[y.jsx(_h,{children:"Unregister project?"}),y.jsxs(Hh,{children:["This removes ",y.jsx("strong",{children:l==null?void 0:l.name})," from SeeFlow. Your files at"," ",y.jsx("code",{className:"text-xs",children:l==null?void 0:l.repoPath})," will not be deleted."]})]}),f?y.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,y.jsxs(Hu,{children:[y.jsx(Nt,{type:"button",variant:"ghost",onClick:g,disabled:h,children:"Cancel"}),y.jsx(Nt,{type:"button",variant:"destructive",onClick:M,disabled:h,"data-testid":"unregister-project-confirm",children:h?"Unregistering…":"Unregister"})]})]})})]})}function l6e({demos:e,currentSlug:t,onProjectCreated:n,onProjectUnregistered:r}){return y.jsxs("header",{className:"relative flex h-14 shrink-0 items-center justify-between border-b border-border/60 bg-background/85 px-5 backdrop-blur-md shadow-[0_4px_12px_-6px_rgba(0,0,0,0.6)]",children:[y.jsxs("button",{type:"button",onClick:()=>qu("/"),className:"-ml-1.5 flex items-center gap-2 rounded-md px-1.5 py-1 text-base font-bold tracking-tight transition-colors hover:bg-muted/60",children:[y.jsx(b2,{size:18,strokeWidth:2.25,className:"text-emerald-400"}),"SeeFlow",y.jsxs("span",{className:"ml-1 text-[10px] font-normal tracking-normal text-muted-foreground/70",children:["v","0.1.40"]})]}),y.jsx("div",{className:"flex items-center gap-3",children:y.jsx(s6e,{demos:e,currentSlug:t,onProjectCreated:n,onProjectUnregistered:r})})]})}const c6e=e=>{const[t,n]=m.useState(null),[r,o]=m.useState(e!==null),[i,a]=m.useState(null),s=m.useCallback(()=>{e&&(o(!0),YU(e).then(c=>{n(c),a(null)}).catch(c=>{console.error("[useDemoData] failed",c),a(String(c))}).finally(()=>o(!1)))},[e]),l=m.useCallback(c=>{n(c),a(null)},[]);return m.useEffect(()=>{if(!e){n(null),o(!1);return}s()},[e,s]),{detail:t,loading:r,error:i,refresh:s,applyDetail:l}},u6e=()=>{const[e,t]=m.useState(null),[n,r]=m.useState(null),o=m.useCallback(()=>Sne().then(i=>{t(i),r(null)}).catch(i=>{console.error("[useDemos] failed",i),t([]),r(String(i))}),[]);return m.useEffect(()=>{o()},[o]),{demos:e,error:n,refresh:o}},d6e=5,h6e={"node:running":"running","node:done":"done","node:error":"error"},f6e=(e,t)=>{if(t.type==="reset")return{};const n=e[t.nodeId]??[],r=[t.entry,...n].slice(0,d6e);return{...e,[t.nodeId]:r}},p6e=e=>{const[t,n]=m.useReducer(f6e,{}),r=m.useRef(n);r.current=n,m.useEffect(()=>{r.current({type:"reset"})},[e]);const o=m.useCallback(a=>{const s=h6e[a.type];if(!s)return;const l=typeof a.nodeId=="string"?a.nodeId:null;if(!l)return;const c=typeof a.runId=="string"?a.runId:void 0,h=typeof a.ts=="number"?a.ts:Date.now();r.current({type:"append",nodeId:l,entry:{status:s,ts:h,runId:c}})},[]),i=m.useCallback(()=>{r.current({type:"reset"})},[]);return{events:t,apply:o,reset:i}},y6e=(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()}}}},m6e=e=>{const[t,n]=m.useReducer(y6e,{}),r=m.useRef(n);r.current=n,m.useEffect(()=>{r.current({type:"reset"})},[e]);const o=m.useCallback(a=>{const s=typeof a.nodeId=="string"?a.nodeId:null;if(!s)return;const l=typeof a.runId=="string"?a.runId:void 0;if(a.type==="node:running"){r.current({type:"running",nodeId:s,runId:l,ts:a.ts});return}if(a.type==="node:done"){const c=typeof a.status=="number"?a.status:void 0;r.current({type:"done",nodeId:s,runId:l,responseStatus:c,body:a.body,ts:a.ts});return}if(a.type==="node:error"){const c=typeof a.message=="string"?a.message:void 0;r.current({type:"error",nodeId:s,runId:l,message:c,ts:a.ts})}},[]),i=m.useCallback(()=>{r.current({type:"reset"})},[]);return{runs:t,apply:o,reset:i}},k6e=new Set(["ok","warn","error","pending"]),g6e=(e,t)=>{if(t.type!=="node:status")return e;const n=typeof t.nodeId=="string"?t.nodeId:null;if(!n||typeof t.state!="string"||!k6e.has(t.state))return e;const r=typeof t.summary=="string"?t.summary:void 0,o=typeof t.detail=="string"?t.detail:void 0,i=t.data&&typeof t.data=="object"&&!Array.isArray(t.data)?t.data:void 0,a=typeof t.ts=="number"?t.ts:Date.now();return{...e,[n]:{state:t.state,summary:r,detail:o,data:i,ts:a}}},x6e=(e,t)=>{switch(t.type){case"reset":return{};case"event":return g6e(e,t.event)}},v6e=e=>{const[t,n]=m.useReducer(x6e,{}),r=m.useRef(n);r.current=n,m.useEffect(()=>{r.current({type:"reset"})},[e]);const o=m.useCallback(a=>{r.current({type:"event",event:a})},[]),i=m.useCallback(()=>{r.current({type:"reset"})},[]);return{statusByNode:t,apply:o,reset:i}},w6e=(e,t={})=>{const[n,r]=m.useState(!1),{onHello:o,onFlowReload:i,onEvent:a}=t,s=m.useRef(o),l=m.useRef(i),c=m.useRef(a);return m.useEffect(()=>{s.current=o,l.current=i,c.current=a},[o,i,a]),m.useEffect(()=>{if(!e){r(!1);return}const h=`/api/events?flowId=${encodeURIComponent(e)}`,d=new EventSource(h);d.addEventListener("open",()=>r(!0)),d.addEventListener("error",()=>r(!1)),d.addEventListener("hello",()=>{var f;(f=s.current)==null||f.call(s)}),d.addEventListener("flow:reload",f=>{var v,w;const p=MB(f,"flow:reload");(v=c.current)==null||v.call(c,p);const k=M6e(p);k&&((w=l.current)==null||w.call(l,k))});for(const f of["node:running","node:done","node:error","node:status"])d.addEventListener(f,p=>{var k;(k=c.current)==null||k.call(c,MB(p,f))});return()=>{d.close()}},[e]),{connected:n}},MB=(e,t)=>{try{const n=JSON.parse(e.data);return{type:t,ts:Date.now(),...n}}catch{return{type:t,ts:Date.now()}}},M6e=e=>e.valid===!0&&e.flow&&typeof e.flow=="object"?{valid:!0,flow:e.flow}:e.valid===!1&&typeof e.error=="string"?{valid:!1,error:e.error}:null,sJ="seeflow:last-project",b6e=()=>{if(typeof window>"u")return null;try{return window.localStorage.getItem(sJ)}catch{return null}},bB=e=>{if(!(typeof window>"u"))try{window.localStorage.setItem(sJ,e)}catch{}},C6e=(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},CB=["File","Edit","View","Tools","Layout","Selection","Help"],lJ="seeflow:command-palette:recent",cJ=5,uJ=new Map(M_.map(e=>[e.id,e])),S6e=e=>typeof e=="string"&&uJ.has(e),SB=()=>{if(typeof window>"u")return[];try{const e=window.localStorage.getItem(lJ);if(!e)return[];const t=JSON.parse(e);return Array.isArray(t)?t.filter(S6e).slice(0,cJ):[]}catch{return[]}},L6e=e=>{if(!(typeof window>"u"))try{window.localStorage.setItem(lJ,JSON.stringify(e))}catch{}},LB=(e,t)=>e.enabled?e.enabled(t):!0,I6e=(e,t)=>t.length===0?!0:`${e.label} ${e.description??""}`.toLowerCase().includes(t);function E6e({open:e,onOpenChange:t,runCommand:n,ctx:r}){const[o,i]=m.useState(""),[a,s]=m.useState(0),[l,c]=m.useState(()=>SB()),h=m.useRef(null),d=m.useRef(null);m.useEffect(()=>{e&&(i(""),s(0),c(SB()))},[e]);const{groups:f,flat:p}=m.useMemo(()=>{const b=o.trim().toLowerCase();if(b.length===0){if(l.length===0)return{groups:[],flat:[]};const T=[];for(const z of l){const A=uJ.get(z);A&&T.push({cmd:A,enabled:LB(A,r)})}return{groups:[{category:"Recent",rows:T}],flat:T}}const S=new Map;for(const T of M_){if(!I6e(T,b))continue;const E={cmd:T,enabled:LB(T,r)},z=S.get(T.category);z?z.push(E):S.set(T.category,[E])}const L=[...CB.filter(T=>S.has(T)),...Array.from(S.keys()).filter(T=>!CB.includes(T))].map(T=>({category:T,rows:S.get(T)??[]})),P=L.flatMap(T=>T.rows);return{groups:L,flat:P}},[o,r,l]);m.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 k=m.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]),v=m.useCallback(b=>{c(S=>{const C=[b,...S.filter(L=>L!==b)].slice(0,cJ);return L6e(C),C})},[]),w=m.useCallback(b=>{const S=p[b];!S||!S.enabled||(v(S.cmd.id),n(S.cmd.id),t(!1))},[p,t,v,n]),g=m.useCallback(b=>{if(b.key==="ArrowDown"){b.preventDefault(),k(1);return}if(b.key==="ArrowUp"){b.preventDefault(),k(-1);return}b.key==="Enter"&&(b.preventDefault(),w(a))},[w,a,k]);m.useEffect(()=>{if(!e)return;const b=d.current;if(!b)return;const S=b.querySelector(`[data-command-row-index="${a}"]`);S&&typeof S.scrollIntoView=="function"&&S.scrollIntoView({block:"nearest"})},[a,e]);const x=o.trim().length>0;return y.jsx(fz,{open:e,onOpenChange:t,children:y.jsx(pz,{children:y.jsxs(ed,{className:ie("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=h.current)==null||S.focus()},children:[y.jsx("div",{className:ie("border-b",p.length===0&&!x&&"border-b-0"),children:y.jsx("input",{ref:h,type:"text",value:o,onChange:b=>i(b.target.value),onKeyDown:g,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"})}),y.jsx("div",{ref:d,"data-testid":"command-palette-list","data-empty":p.length===0?"true":"false",className:ie("max-h-[50vh] overflow-y-auto",p.length>0?"py-1":"","seeflow-no-scrollbar"),children:p.length===0?x?y.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=>y.jsxs("div",{className:"py-1",children:[y.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===a;return y.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:ie("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:[y.jsxs("div",{className:"flex min-w-0 flex-col",children:[y.jsx("span",{className:"truncate font-medium",children:C.cmd.label}),C.cmd.description?y.jsx("span",{className:"truncate text-xs text-muted-foreground",children:C.cmd.description}):null]}),C.cmd.shortcut?y.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 rn=Uint8Array,$n=Uint16Array,SH=Int32Array,LH=new rn([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]),IH=new rn([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]),IB=new rn([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),dJ=function(e,t){for(var n=new $n(31),r=0;r<31;++r)n[r]=t+=1<<e[r-1];for(var o=new SH(n[30]),r=1;r<30;++r)for(var i=n[r];i<n[r+1];++i)o[i]=i-n[r]<<5|r;return{b:n,r:o}},hJ=dJ(LH,2),A6e=hJ.b,oD=hJ.r;A6e[28]=258,oD[258]=28;var P6e=dJ(IH,0),EB=P6e.r,iD=new $n(32768);for(var xt=0;xt<32768;++xt){var pi=(xt&43690)>>1|(xt&21845)<<1;pi=(pi&52428)>>2|(pi&13107)<<2,pi=(pi&61680)>>4|(pi&3855)<<4,iD[xt]=((pi&65280)>>8|(pi&255)<<8)>>1}var P2=function(e,t,n){for(var r=e.length,o=0,i=new $n(t);o<r;++o)e[o]&&++i[e[o]-1];var a=new $n(t);for(o=1;o<t;++o)a[o]=a[o-1]+i[o-1]<<1;var s;if(n){s=new $n(1<<t);var l=15-t;for(o=0;o<r;++o)if(e[o])for(var c=o<<4|e[o],h=t-e[o],d=a[e[o]-1]++<<h,f=d|(1<<h)-1;d<=f;++d)s[iD[d]>>l]=c}else for(s=new $n(r),o=0;o<r;++o)e[o]&&(s[o]=iD[a[e[o]-1]++]>>15-e[o]);return s},i1=new rn(288);for(var xt=0;xt<144;++xt)i1[xt]=8;for(var xt=144;xt<256;++xt)i1[xt]=9;for(var xt=256;xt<280;++xt)i1[xt]=7;for(var xt=280;xt<288;++xt)i1[xt]=8;var LR=new rn(32);for(var xt=0;xt<32;++xt)LR[xt]=5;var R6e=P2(i1,9,0),z6e=P2(LR,5,0),fJ=function(e){return(e+7)/8|0},pJ=function(e,t,n){return(n==null||n>e.length)&&(n=e.length),new rn(e.subarray(t,n))},j6e=["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"],Dz=function(e,t,n){var r=new Error(t||j6e[e]);if(r.code=e,Error.captureStackTrace&&Error.captureStackTrace(r,Dz),!n)throw r;return r},To=function(e,t,n){n<<=t&7;var r=t/8|0;e[r]|=n,e[r+1]|=n>>8},Pd=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},uT=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,i=n.slice();if(!o)return{t:mJ,l:0};if(o==1){var a=new rn(n[0].s+1);return a[n[0].s]=1,{t:a,l:1}}n.sort(function(S,C){return S.f-C.f}),n.push({s:-1,f:25001});var s=n[0],l=n[1],c=0,h=1,d=2;for(n[0]={s:-1,f:s.f+l.f,l:s,r:l};h!=o-1;)s=n[n[c].f<n[d].f?c++:d++],l=n[c!=h&&n[c].f<n[d].f?c++:d++],n[h++]={s:-1,f:s.f+l.f,l:s,r:l};for(var f=i[0].s,r=1;r<o;++r)i[r].s>f&&(f=i[r].s);var p=new $n(f+1),k=aD(n[h-1],p,0);if(k>t){var r=0,v=0,w=k-t,g=1<<w;for(i.sort(function(C,L){return p[L.s]-p[C.s]||C.f-L.f});r<o;++r){var M=i[r].s;if(p[M]>t)v+=g-(1<<k-p[M]),p[M]=t;else break}for(v>>=w;v>0;){var x=i[r].s;p[x]<t?v-=1<<t-p[x]++-1:++r}for(;r>=0&&v;--r){var b=i[r].s;p[b]==t&&(--p[b],++v)}k=t}return{t:new rn(p),l:k}},aD=function(e,t,n){return e.s==-1?Math.max(aD(e.l,t,n+1),aD(e.r,t,n+1)):t[e.s]=n},AB=function(e){for(var t=e.length;t&&!e[--t];);for(var n=new $n(++t),r=0,o=e[0],i=1,a=function(l){n[r++]=l},s=1;s<=t;++s)if(e[s]==o&&s!=t)++i;else{if(!o&&i>2){for(;i>138;i-=138)a(32754);i>2&&(a(i>10?i-11<<5|28690:i-3<<5|12305),i=0)}else if(i>3){for(a(o),--i;i>6;i-=6)a(8304);i>2&&(a(i-3<<5|8208),i=0)}for(;i--;)a(o);i=1,o=e[s]}return{c:n.subarray(0,r),n:t}},Rd=function(e,t){for(var n=0,r=0;r<t.length;++r)n+=e[r]*t[r];return n},yJ=function(e,t,n){var r=n.length,o=fJ(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 i=0;i<r;++i)e[o+i+4]=n[i];return(o+4+r)*8},PB=function(e,t,n,r,o,i,a,s,l,c,h){To(t,h++,n),++o[256];for(var d=uT(o,15),f=d.t,p=d.l,k=uT(i,15),v=k.t,w=k.l,g=AB(f),M=g.c,x=g.n,b=AB(v),S=b.c,C=b.n,L=new $n(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=uT(L,7),E=T.t,z=T.l,A=19;A>4&&!E[IB[A-1]];--A);var U=c+5<<3,R=Rd(o,i1)+Rd(i,LR)+a,V=Rd(o,f)+Rd(i,v)+a+14+3*A+Rd(L,E)+2*L[16]+3*L[17]+7*L[18];if(l>=0&&U<=R&&U<=V)return yJ(t,h,e.subarray(l,l+c));var O,B,D,N;if(To(t,h,1+(V<R)),h+=2,V<R){O=P2(f,p,0),B=f,D=P2(v,w,0),N=v;var I=P2(E,z,0);To(t,h,x-257),To(t,h+5,C-1),To(t,h+10,A-4),h+=14;for(var P=0;P<A;++P)To(t,h+3*P,E[IB[P]]);h+=3*A;for(var W=[M,S],H=0;H<2;++H)for(var j=W[H],P=0;P<j.length;++P){var G=j[P]&31;To(t,h,I[G]),h+=E[G],G>15&&(To(t,h,j[P]>>5&127),h+=j[P]>>12)}}else O=R6e,B=i1,D=z6e,N=LR;for(var P=0;P<s;++P){var X=r[P];if(X>255){var G=X>>18&31;Pd(t,h,O[G+257]),h+=B[G+257],G>7&&(To(t,h,X>>23&31),h+=LH[G]);var Y=X&31;Pd(t,h,D[Y]),h+=N[Y],Y>3&&(Pd(t,h,X>>5&8191),h+=IH[Y])}else Pd(t,h,O[X]),h+=B[X]}return Pd(t,h,O[256]),h+B[256]},T6e=new SH([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),mJ=new rn(0),N6e=function(e,t,n,r,o,i){var a=i.z||e.length,s=new rn(r+a+5*(1+Math.ceil(a/7e3))+o),l=s.subarray(r,s.length-o),c=i.l,h=(i.r||0)&7;if(t){h&&(l[0]=i.r>>3);for(var d=T6e[t-1],f=d>>13,p=d&8191,k=(1<<n)-1,v=i.p||new $n(32768),w=i.h||new $n(k+1),g=Math.ceil(n/3),M=2*g,x=function(ee){return(e[ee]^e[ee+1]<<g^e[ee+2]<<M)&k},b=new SH(25e3),S=new $n(288),C=new $n(32),L=0,P=0,T=i.i||0,E=0,z=i.w||0,A=0;T+2<a;++T){var U=x(T),R=T&32767,V=w[U];if(v[R]=V,w[U]=R,z<=T){var O=a-T;if((L>7e3||E>24576)&&(O>423||!c)){h=PB(e,l,0,b,S,C,P,E,A,T-A,h),E=L=P=0,A=T;for(var B=0;B<286;++B)S[B]=0;for(var B=0;B<30;++B)C[B]=0}var D=2,N=0,I=p,W=R-V&32767;if(O>2&&U==x(T-W))for(var H=Math.min(f,O)-1,j=Math.min(32767,T),G=Math.min(258,O);W<=j&&--I&&R!=V;){if(e[T+D]==e[T+D-W]){for(var X=0;X<G&&e[T+X]==e[T+X-W];++X);if(X>D){if(D=X,N=W,X>H)break;for(var Y=Math.min(W,X-2),re=0,B=0;B<Y;++B){var ne=T-W+B&32767,ae=v[ne],ve=ne-ae&32767;ve>re&&(re=ve,V=ne)}}}R=V,V=v[R],W+=R-V&32767}if(N){b[E++]=268435456|oD[D]<<18|EB[N];var ke=oD[D]&31,ge=EB[N]&31;P+=LH[ke]+IH[ge],++S[257+ke],++C[ge],z=T+D,++L}else b[E++]=e[T],++S[e[T]]}}for(T=Math.max(T,z);T<a;++T)b[E++]=e[T],++S[e[T]];h=PB(e,l,c,b,S,C,P,E,A,T-A,h),c||(i.r=h&7|l[h/8|0]<<3,h-=7,i.h=w,i.p=v,i.i=T,i.w=z)}else{for(var T=i.w||0;T<a+c;T+=65535){var xe=T+65535;xe>=a&&(l[h/8|0]=c,xe=a),h=yJ(l,h+1,e.subarray(T,xe))}i.i=a}return pJ(s,0,r+fJ(h)+o)},D6e=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}(),_6e=function(){var e=-1;return{p:function(t){for(var n=e,r=0;r<t.length;++r)n=D6e[n&255^t[r]]^n>>>8;e=n},d:function(){return~e}}},kJ=function(){var e=1,t=0;return{p:function(n){for(var r=e,o=t,i=n.length|0,a=0;a!=i;){for(var s=Math.min(a+2655,i);a<s;++a)o+=r+=n[a];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}}},gJ=function(e,t,n,r,o){if(!o&&(o={l:1},t.dictionary)){var i=t.dictionary.subarray(-32768),a=new rn(i.length+e.length);a.set(i),a.set(e,i.length),e=a,o.w=i.length}return N6e(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)},xJ=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},Ot=function(e,t,n){for(;n;++t)e[t]=n,n>>>=8},H6e=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=kJ();o.p(t.dictionary),Ot(e,2,o.d())}};function F6e(e,t){return gJ(e,t||{},0,0)}function I8e(e,t){t||(t={});var n=kJ();n.p(e);var r=gJ(e,t,t.dictionary?6:2,4);return H6e(r,t),Ot(r,r.length-4,n.d()),r}var vJ=function(e,t,n,r){for(var o in e){var i=e[o],a=t+o,s=r;Array.isArray(i)&&(s=xJ(r,i[1]),i=i[0]),i instanceof rn?n[a]=[i,s]:(n[a+="/"]=[new rn(0),s],vJ(i,a,n,r))}},RB=typeof TextEncoder<"u"&&new TextEncoder,O6e=typeof TextDecoder<"u"&&new TextDecoder,q6e=0;try{O6e.decode(mJ,{stream:!0}),q6e=1}catch{}function sD(e,t){var n;if(RB)return RB.encode(e);for(var r=e.length,o=new rn(e.length+(e.length>>1)),i=0,a=function(c){o[i++]=c},n=0;n<r;++n){if(i+5>o.length){var s=new rn(i+8+(r-n<<1));s.set(o),o=s}var l=e.charCodeAt(n);l<128||t?a(l):l<2048?(a(192|l>>6),a(128|l&63)):l>55295&&l<57344?(l=65536+(l&1047552)|e.charCodeAt(++n)&1023,a(240|l>>18),a(128|l>>12&63),a(128|l>>6&63),a(128|l&63)):(a(224|l>>12),a(128|l>>6&63),a(128|l&63))}return pJ(o,0,i)}var lD=function(e){var t=0;if(e)for(var n in e){var r=e[n].length;r>65535&&Dz(9),t+=r+4}return t},zB=function(e,t,n,r,o,i,a,s){var l=r.length,c=n.extra,h=s&&s.length,d=lD(c);Ot(e,t,a!=null?33639248:67324752),t+=4,a!=null&&(e[t++]=20,e[t++]=n.os),e[t]=20,t+=2,e[t++]=n.flag<<1|(i<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)&&Dz(10),Ot(e,t,p<<25|f.getMonth()+1<<21|f.getDate()<<16|f.getHours()<<11|f.getMinutes()<<5|f.getSeconds()>>1),t+=4,i!=-1&&(Ot(e,t,n.crc),Ot(e,t+4,i<0?-i-2:i),Ot(e,t+8,n.size)),Ot(e,t+12,l),Ot(e,t+14,d),t+=16,a!=null&&(Ot(e,t,h),Ot(e,t+6,n.attrs),Ot(e,t+10,a),t+=14),e.set(r,t),t+=l,d)for(var k in c){var v=c[k],w=v.length;Ot(e,t,+k),Ot(e,t+2,w),e.set(v,t+4),t+=4+w}return h&&(e.set(s,t),t+=h),t},V6e=function(e,t,n,r,o){Ot(e,t,101010256),Ot(e,t+8,n),Ot(e,t+10,n),Ot(e,t+12,r),Ot(e,t+16,o)};function B6e(e,t){t||(t={});var n={},r=[];vJ(e,"",n,t);var o=0,i=0;for(var a in n){var s=n[a],l=s[0],c=s[1],h=c.level==0?0:8,d=sD(a),f=d.length,p=c.comment,k=p&&sD(p),v=k&&k.length,w=lD(c.extra);f>65535&&Dz(11);var g=h?F6e(l,c):l,M=g.length,x=_6e();x.p(l),r.push(xJ(c,{size:l.length,crc:x.d(),c:g,f:d,m:k,u:f!=a.length||k&&p.length!=v,o,compression:h})),o+=30+f+w+M,i+=76+2*(f+w)+(v||0)+M}for(var b=new rn(i+22),S=o,C=i-o,L=0;L<r.length;++L){var d=r[L];zB(b,d.o,d,d.f,d.u,d.c.length);var P=30+d.f.length+lD(d.extra);b.set(d.c,d.o+P),zB(b,o,d,d.f,d.u,d.c.length,d.o,d.m),o+=16+P+(d.m?d.m.length:0)}return V6e(b,o,r.length,C,S),b}const $6e="https://seeflow.dev/api";async function U6e(e,t,n,r,o){const i=await YU(e);if(!i.flow)throw new Error("Flow has no data");const a=i.flow,s=new Set,l=[];for(const k of a.nodes)k.type==="imageNode"&&k.data.path&&!s.has(k.data.path)?(s.add(k.data.path),l.push(k.data.path)):k.type==="htmlNode"&&k.data.htmlPath&&!s.has(k.data.htmlPath)&&(s.add(k.data.htmlPath),l.push(k.data.htmlPath));const h={[r==="link"?"flow.private.json":"flow.json"]:sD(JSON.stringify(a))};if(o){const k=o.split(",")[1];k&&(h["preview.png"]=Uint8Array.from(atob(k),v=>v.charCodeAt(0)))}for(const k of l){const v=await fetch(`/api/projects/${encodeURIComponent(e)}/files/${k}`);v.ok&&(h[`files/${k}`]=new Uint8Array(await v.arrayBuffer()))}const d=B6e(h),f=await fetch(`${$6e}/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 W6e(e){return m.useCallback((t,n,r,o)=>U6e(e,t,n,r,o),[e])}const jB="seeflow.export.email",TB="seeflow.export.name",NB="seeflow.export.visibility";function G6e({open:e,onOpenChange:t,projectId:n,onCapturePreview:r}){const[o,i]=m.useState(""),[a,s]=m.useState(""),[l,c]=m.useState("public"),[h,d]=m.useState({kind:"idle"}),[f,p]=m.useState(!1),k=W6e(n);m.useEffect(()=>{e&&(i(localStorage.getItem(jB)??""),s(localStorage.getItem(TB)??""),c(localStorage.getItem(NB)??"public"),d({kind:"idle"}),p(!1))},[e]);const v=m.useCallback(async()=>{d({kind:"loading"});try{const x=await(r==null?void 0:r()),{shareUrl:b}=await k(o.trim(),a.trim(),l,x);localStorage.setItem(jB,o.trim()),localStorage.setItem(TB,a.trim()),localStorage.setItem(NB,l),d({kind:"done",shareUrl:b})}catch(x){d({kind:"error",message:x instanceof Error?x.message:String(x)})}},[k,o,a,l,r]),w=m.useCallback(async()=>{if(h.kind==="done")try{await navigator.clipboard.writeText(h.shareUrl),p(!0),setTimeout(()=>p(!1),2e3)}catch(x){console.error("Failed to copy to clipboard:",x)}},[h]),g=h.kind==="loading",M=o.trim().length>0&&a.trim().length>0;return y.jsx(gz,{open:e,onOpenChange:t,children:y.jsxs(Nh,{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:[y.jsxs(Dh,{children:[y.jsx(_h,{children:"Export to seeflow.dev"}),y.jsx(Hh,{children:"Upload this diagram to the cloud and get a shareable link."})]}),h.kind!=="done"?y.jsxs(y.Fragment,{children:[y.jsxs("div",{className:"flex flex-col gap-4",children:[y.jsxs("label",{className:"flex flex-col gap-1.5 text-sm",children:[y.jsx("span",{className:"font-medium",children:"Email"}),y.jsx("input",{type:"email",required:!0,autoComplete:"email",value:o,onChange:x=>i(x.target.value),disabled:g,"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"}),y.jsx("span",{className:"text-xs text-muted-foreground",children:"We'll use this to let you manage your flows in the future."})]}),y.jsxs("label",{className:"flex flex-col gap-1.5 text-sm",children:[y.jsx("span",{className:"font-medium",children:"Flow Name"}),y.jsx("input",{type:"text",required:!0,value:a,onChange:x=>s(x.target.value),disabled:g,"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"})]}),y.jsxs("label",{className:"flex flex-col gap-1.5 text-sm",children:[y.jsx("span",{className:"font-medium",children:"Visibility"}),y.jsxs("select",{value:l,onChange:x=>c(x.target.value),disabled:g,"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:[y.jsx("option",{value:"public",children:"Public — anyone can discover it"}),y.jsx("option",{value:"link",children:"Anyone with the link"})]})]}),h.kind==="error"?y.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:h.message}):null]}),y.jsx(Hu,{children:h.kind==="error"?y.jsxs(y.Fragment,{children:[y.jsx(Nt,{type:"button",variant:"ghost",onClick:()=>t(!1),"data-testid":"export-cancel",children:"Cancel"}),y.jsx(Nt,{type:"button",onClick:()=>d({kind:"idle"}),"data-testid":"export-retry",children:"Try again"})]}):y.jsxs(y.Fragment,{children:[y.jsx(Nt,{type:"button",variant:"ghost",onClick:()=>t(!1),disabled:g,"data-testid":"export-cancel",children:"Cancel"}),y.jsx(Nt,{type:"button",onClick:v,disabled:g||!M,"data-testid":"export-submit",children:g?y.jsxs(y.Fragment,{children:[y.jsx(Cr,{className:"h-4 w-4 animate-spin","aria-hidden":"true"}),y.jsx("span",{children:"Uploading…"})]}):"Export"})]})})]}):y.jsxs(y.Fragment,{children:[y.jsxs("div",{className:"flex flex-col gap-3",children:[y.jsx("p",{className:"text-sm text-muted-foreground",children:"Your diagram is live. Share this link:"}),y.jsxs("div",{className:"flex gap-2",children:[y.jsx("input",{type:"text",readOnly:!0,value:h.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"}),y.jsx(Nt,{type:"button",variant:"outline",size:"icon",onClick:w,"aria-label":"Copy link","data-testid":"export-copy",children:f?y.jsx(fo,{className:"h-4 w-4","aria-hidden":"true"}):y.jsx(ou,{className:"h-4 w-4","aria-hidden":"true"})}),y.jsx(Nt,{type:"button",variant:"outline",size:"icon",onClick:()=>window.open(h.shareUrl,"_blank"),"aria-label":"View in new tab","data-testid":"export-view",children:y.jsx(n2,{className:"h-4 w-4","aria-hidden":"true"})})]})]}),y.jsx(Hu,{children:y.jsx(Nt,{type:"button",onClick:()=>t(!1),"data-testid":"export-done",children:"Done"})})]})]})})}const Z6e=(e,t)=>{if(e.has(t))return e;const n=new Set(e);return n.add(t),n},K6e=(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},X6e=(e,t)=>{if(!e.has(t))return e;const n=new Set(e);return n.delete(t),n},Y6e=(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},Q6e=(e,t)=>{if(e.size===0)return e;const n=new Set(t.map(i=>i.id));let r=!1;const o=new Set(e);for(const i of o)n.has(i)||(o.delete(i),r=!0);return r?o:e},DB=()=>{const[e,t]=m.useState(()=>new Set),n=m.useCallback(l=>{t(c=>Z6e(c,l))},[]),r=m.useCallback(l=>{t(c=>K6e(c,l))},[]),o=m.useCallback(l=>{t(c=>X6e(c,l))},[]),i=m.useCallback(l=>{t(c=>Y6e(c,l))},[]),a=m.useCallback(l=>{t(c=>Q6e(c,l))},[]),s=m.useCallback(()=>t(new Set),[]);return{ids:e,mark:n,markMany:r,unmark:o,unmarkMany:i,pruneAgainst:a,reset:s}},J6e=(e,t)=>e===t?!0:e==null||t==null||typeof e!=typeof t||typeof e!="object"?!1:JSON.stringify(e)===JSON.stringify(t),e8e=(e,t,n)=>({...e,[t]:{...e[t],...n}}),t8e=(e,t)=>{if(!(t in e))return e;const n={...e};return delete n[t],n},n8e=(e,t)=>{const n=Object.entries(e);if(n.length===0)return e;const r=new Map(t.map(a=>[a.id,a]));let o=!1;const i={...e};for(const[a,s]of n){const l=r.get(a);if(!l)continue;const c={};let h=!1;for(const d of Object.keys(s))J6e(s[d],l[d])?o=!0:(c[d]=s[d],h=!0);h?i[a]=c:(o=!0,delete i[a])}return o?i:e},_B=()=>{const[e,t]=m.useState({}),n=m.useCallback((a,s)=>{t(l=>e8e(l,a,s))},[]),r=m.useCallback(a=>{t(s=>t8e(s,a))},[]),o=m.useCallback(a=>{t(s=>n8e(s,a))},[]),i=m.useCallback(()=>t({}),[]);return{overrides:e,setOverride:n,dropOverride:r,pruneAgainst:o,reset:i}},r8e=500,o8e=500,i8e={stack:[],cursor:0},a8e=(e,t,n)=>{const r=Date.now(),o=r8e,i=o8e,{stack:a,cursor:s}=e;if(t.coalesceKey&&s>0){const h=a[s-1];if(h&&h.coalesceKey===t.coalesceKey&&r-h.capturedAt<=i){const d=a.slice(0,s);return d[s-1]={...h,do:t.do,capturedAt:r},{stack:d,cursor:s}}}const l=a.slice(0,s);l.push({...t,capturedAt:r});let c=s+1;for(;l.length>o;)l.shift(),c-=1;return c<0&&(c=0),{stack:l,cursor:c}},s8e=e=>e.cursor===0?{state:e,entry:void 0}:{state:{...e,cursor:e.cursor-1},entry:e.stack[e.cursor-1]},l8e=e=>e.cursor===e.stack.length?{state:e,entry:void 0}:{state:{...e,cursor:e.cursor+1},entry:e.stack[e.cursor]},c8e=()=>({stack:[],cursor:0}),u8e=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}},d8e=(e,t)=>t.state,h8e=()=>{const[e,t]=m.useReducer(d8e,i8e),n=m.useRef(e);n.current=e;const r=m.useRef(Promise.resolve()),o=m.useRef(0),i=m.useCallback(p=>{p!==n.current&&(n.current=p,t({type:"replace",state:p}))},[]),a=m.useCallback(p=>{const k={do:p.do,undo:p.undo,coalesceKey:p.coalesceKey,capturedAt:p.capturedAt??Date.now()};i(a8e(n.current,k))},[i]),s=m.useCallback(()=>{o.current=Date.now();const p=r.current.then(()=>{const k=s8e(n.current);if(k.entry)return i(k.state),{entry:k.entry}});return r.current=p.then(()=>{},()=>{}),p},[i]),l=m.useCallback(()=>{o.current=Date.now();const p=r.current.then(()=>{const k=l8e(n.current);if(k.entry)return i(k.state),{entry:k.entry}});return r.current=p.then(()=>{},()=>{}),p},[i]),c=m.useCallback(()=>{i(c8e())},[i]),h=m.useCallback(()=>{i(u8e(n.current))},[i]),d=m.useCallback(()=>{o.current=Date.now()},[]),f=m.useCallback(()=>o.current,[]);return{push:a,undo:s,redo:l,clear:c,dropTop:h,canUndo:e.cursor>0,canRedo:e.cursor<e.stack.length,markMutation:d,lastMutationAt:f}};function f8e({nodes:e,connectors:t,flowPos:n,nodeIdGen:r,connectorIdGen:o,defaultOffset:i={x:24,y:24}}){const a=new Map;for(const p of e)a.set(p.id,r(p.id));let s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;for(const p of e)p.position.x<s&&(s=p.position.x),p.position.y<l&&(l=p.position.y);Number.isFinite(s)||(s=0),Number.isFinite(l)||(l=0);const c=n?n.x-s:i.x,h=n?n.y-l:i.y,d=e.map(p=>{const k=a.get(p.id);if(k===void 0)throw new Error(`paste id missing for ${p.id}`);return{...p,id:k,position:{x:p.position.x+c,y:p.position.y+h}}}),f=t.map(p=>{const k=o(p.id);return{...p,id:k,source:a.get(p.source)??p.source,target:a.get(p.target)??p.target}});return{newNodes:d,newConnectors:f,idMap:a}}const p8e=e=>({type:"imageNode",position:e.position,data:{path:"",alt:e.originalFilename,width:e.dims.width,height:e.dims.height,_uploading:!0}}),y8e=e=>({type:"imageNode",data:wJ(e)}),m8e=e=>({type:"imageNode",position:e.position,data:{path:"",alt:e.originalFilename,width:e.dims.width,height:e.dims.height,_uploadError:e.message}}),wJ=e=>({...Tue(e.path,e.dims,e.lastUsed),alt:e.originalFilename}),k8e=async(e,t)=>{const{nodeId:n,flowId:r,file:o,originalFilename:i,position:a,dims:s,lastUsed:l}=e;t.rememberRetry(n,{file:o,originalFilename:i,position:a,dims:s}),t.setOverride(n,p8e({position:a,dims:s,originalFilename:i}));let c;try{c=(await t.upload(r,o,i)).path}catch(p){const k=p instanceof Error?p.message:String(p);throw t.setOverride(n,m8e({position:a,dims:s,originalFilename:i,message:k})),p}t.setOverride(n,y8e({path:c,dims:s,originalFilename:i,lastUsed:l}));const h=wJ({path:c,dims:s,originalFilename:i,lastUsed:l}),d={id:n,type:"imageNode",position:a,data:h},{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)}})},g8e=new Set(["INPUT","TEXTAREA","SELECT"]),xr=e=>e?g8e.has(e.tagName)?!0:e instanceof HTMLElement&&e.isContentEditable:!1,x8e=(e,t,n)=>{const r=e.indexOf(t);if(r<0)return null;const o=e.length,i=[...e];switch(n.op){case"forward":{if(r>=o-1)return null;const a=i[r],s=i[r+1];return a===void 0||s===void 0?null:(i[r]=s,i[r+1]=a,i)}case"backward":{if(r<=0)return null;const a=i[r],s=i[r-1];return a===void 0||s===void 0?null:(i[r]=s,i[r-1]=a,i)}case"toFront":{if(r===o-1)return null;const[a]=i.splice(r,1);return a===void 0?null:(i.push(a),i)}case"toBack":{if(r===0)return null;const[a]=i.splice(r,1);return a===void 0?null:(i.unshift(a),i)}case"toIndex":{const a=Math.min(Math.max(n.index,0),o-1);if(a===r)return null;const[s]=i.splice(r,1);return s===void 0?null:(i.splice(a,0,s),i)}}};function v8e({slug:e,demos:t,detail:n,loading:r,runs:o,nodeEvents:i,statusByNode:a,onPlayNode:s,onRestartDemo:l}){var ad,sd;const c=t.find(F=>F.slug===e),[h,d]=m.useState([]),[f,p]=m.useState([]),[k,v]=m.useState(null),w=m.useRef(h),g=m.useRef(f);m.useEffect(()=>{w.current=h},[h]),m.useEffect(()=>{g.current=f},[f]);const M=m.useRef(null),x=m.useRef(null),b=m.useRef(null),S=_B(),C=_B(),L=DB(),P=DB(),[T,E]=m.useState(null),[z,A]=m.useState(null),[U,R]=m.useState(null),V=m.useRef(null);m.useEffect(()=>{V.current=U},[U]);const[O,B]=m.useState(!1),[D,N]=m.useState(0),I=m.useRef(null),W=m.useRef(null),H=m.useCallback(F=>{W.current=F},[]),j=h8e(),{push:G,dropTop:X,markMutation:Y,clear:re,lastMutationAt:ne}=j,{reset:ae}=S,{reset:ve}=C,{reset:ke}=L,{reset:ge}=P;m.useEffect(()=>{d([]),p([]),v(null),ae(),ve(),ke(),ge(),E(null),A(null),Br.current=null,So(!1),mr.current.clear(),j.clear()},[n==null?void 0:n.id]);const xe=m.useCallback((F,q)=>{d(F),p(q)},[]),ee=(ad=n==null?void 0:n.flow)==null?void 0:ad.nodes,me=(sd=n==null?void 0:n.flow)==null?void 0:sd.connectors,{pruneAgainst:Fe}=S,{pruneAgainst:rt}=C,{pruneAgainst:mt}=L,{pruneAgainst:ht}=P;m.useEffect(()=>{ee&&(Fe(ee),mt(ee)),Date.now()-ne()>2e3&&re()},[ee,Fe,mt,ne,re]),m.useEffect(()=>{if(!ee)return;const F=I.current,q=new Set(ee.map(oe=>oe.id));if(I.current=q,F===null)return;const Z=S.overrides,$=L.ids;let _=!1;for(const oe of q)if(!F.has(oe)&&!(oe in Z)){_=!0;break}if(!_){for(const oe of F)if(!q.has(oe)&&!$.has(oe)){_=!0;break}}_&&N(oe=>oe+1)},[ee]),m.useEffect(()=>{me&&(rt(me),ht(me)),Date.now()-ne()>2e3&&re()},[me,rt,ht,ne,re]),m.useEffect(()=>{if(!(!ee||!T)&&ee.length===T.length){for(let F=0;F<ee.length;F++){const q=ee[F],Z=T[F];if(!q||q.id!==Z)return}E(null)}},[ee,T]);const le=(n==null?void 0:n.id)??null,Q=m.useMemo(()=>le?Nue({baseUrl:"",flowId:le}):null,[le]),[he,we]=m.useState(!1),{setOverride:Se,dropOverride:Oe}=S,te=m.useRef(S.overrides);m.useEffect(()=>{te.current=S.overrides},[S.overrides]);const ue=m.useCallback((F,q)=>{var $;if(!le||!Q)return;const Z=($=ee==null?void 0:ee.find(_=>_.id===F))==null?void 0:$.position;Se(F,{position:q}),A(null),Y(),Z&&G({do:async()=>{await Q.updateNodePosition(F,q)},undo:async()=>{await Q.updateNodePosition(F,Z)},coalesceKey:`node:${F}:position`}),Q.updateNodePosition(F,q).catch(_=>{Oe(F),Z&&X(),A(_ instanceof Error?_.message:String(_)),console.error("updateNodePosition failed",_)})},[le,Q,ee,Se,Oe,G,X,Y]),Pe=m.useCallback(F=>{if(!le||!Q||F.length===0)return;const q=te.current,Z=F.map($=>{var Ae;const _=ee==null?void 0:ee.find(be=>be.id===$.id);if(!_)return null;const oe=((Ae=q[$.id])==null?void 0:Ae.position)??_.position;return{id:$.id,prev:oe,next:$.position}}).filter($=>$!==null);if(Z.length!==0){for(const $ of Z)Se($.id,{position:$.next});A(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(_){return Oe($.id),_ instanceof Error?_.message:String(_)}})).then($=>{const _=$.find(oe=>oe!==null);_&&A(_)})}},[le,Q,ee,Se,Oe,G,Y]),qe=m.useCallback((F,q)=>{Se(F,{position:{x:q.x,y:q.y},data:{width:q.width,height:q.height}})},[Se]),We=m.useCallback((F,q)=>{if(!le||!Q)return;const Z=ee==null?void 0:ee.find(oe=>oe.id===F),$=Z?{width:Z.data.width,height:Z.data.height,position:{x:Z.position.x,y:Z.position.y}}:void 0,_={width:q.width,height:q.height,position:{x:q.x,y:q.y}};Se(F,{position:_.position,data:{width:_.width,height:_.height}}),A(null),Y(),$&&G({do:async()=>{await Q.updateNode(F,_)},undo:async()=>{await Q.updateNode(F,$)},coalesceKey:`node:${F}:resize`}),Q.updateNode(F,_).catch(oe=>{Oe(F),$&&X(),A(oe instanceof Error?oe.message:String(oe)),console.error("updateNode resize failed",oe)})},[le,Q,ee,Se,Oe,G,X,Y]),Rt=m.useCallback(F=>{if(!le||!Q)return;const q=ee==null?void 0:ee.find(_=>_.id===F);if(!q)return;const Z={autoSize:q.data.autoSize,width:q.data.width,height:q.data.height},$={autoSize:!0};Se(F,{data:{autoSize:!0,width:void 0,height:void 0}}),A(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(_=>{Oe(F),X(),A(_ instanceof Error?_.message:String(_)),console.error("updateNode (fit-to-content) failed",_)})},[le,Q,ee,Se,Oe,G,X,Y]),st=m.useCallback(F=>{if(!le||!Q||F.length===0)return;const q=[];for(const $ of F){const _=ee==null?void 0:ee.find(Ue=>Ue.id===$.id);if(!_)continue;const oe=_.data,Ae={position:{x:_.position.x,y:_.position.y}};oe.width!==void 0&&(Ae.width=oe.width),oe.height!==void 0&&(Ae.height=oe.height);const be={position:$.position};$.width!==void 0&&(be.width=$.width),$.height!==void 0&&(be.height=$.height),q.push({id:$.id,prev:Ae,next:be})}if(q.length===0)return;for(const $ of q){const _={};$.next.width!==void 0&&(_.width=$.next.width),$.next.height!==void 0&&(_.height=$.next.height),Se($.id,{position:$.next.position,...Object.keys(_).length>0?{data:_}:{}})}A(null),Y();const Z=q.map($=>$.id).sort();G({do:async()=>{await Promise.allSettled(q.map($=>Q.updateNode($.id,$.next)))},undo:async()=>{await Promise.allSettled(q.map($=>Q.updateNode($.id,$.prev)))},coalesceKey:`multi:resize:${Z.join(",")}`}),Promise.all(q.map(async $=>{try{return await Q.updateNode($.id,$.next),null}catch(_){return Oe($.id),_ instanceof Error?_.message:String(_)}})).then($=>{const _=$.find(oe=>oe!==null);_&&A(_)})},[le,Q,ee,Se,Oe,G,Y]),{setOverride:Ne,dropOverride:ot}=C,Jn=m.useCallback((F,q)=>{Se(F,{data:q})},[Se]),zt=m.useCallback((F,q)=>{for(const Z of F)Se(Z,{data:q})},[Se]),zn=m.useCallback((F,q)=>{Ne(F,q)},[Ne]),Kt=m.useCallback((F,q)=>{if(!le||!Q)return;lq(ia,q);const Z=ee==null?void 0:ee.find(_=>_.id===F);let $=null;if(Z){$={};const _=Z.data;for(const oe of Object.keys(q))$[oe]=_[oe]}if(Se(F,{data:q}),A(null),Y(),$){const _=$;G({do:async()=>{await Q.updateNode(F,q)},undo:async()=>{await Q.updateNode(F,_)},coalesceKey:`node:${F}:style`})}Q.updateNode(F,q).catch(_=>{Oe(F),$&&X(),A(_ instanceof Error?_.message:String(_)),console.error("updateNode style failed",_)})},[le,Q,ee,Se,Oe,G,X,Y]),f1=m.useCallback((F,q)=>{if(!le||!Q||F.length===0)return;lq(ia,q);const Z=F.map($=>{const _=ee==null?void 0:ee.find(be=>be.id===$);if(!_)return null;const oe=_.data,Ae={};for(const be of Object.keys(q))Ae[be]=oe[be];return{id:$,prev:Ae}}).filter($=>$!==null);if(Z.length!==0){for(const $ of Z)Se($.id,{data:q});A(null),Y(),G({do:async()=>{await Promise.allSettled(Z.map($=>Q.updateNode($.id,q)))},undo:async()=>{await Promise.allSettled(Z.map($=>Q.updateNode($.id,$.prev)))}}),Promise.all(Z.map(async $=>{try{return await Q.updateNode($.id,q),null}catch(_){return Oe($.id),_ instanceof Error?_.message:String(_)}})).then($=>{const _=$.find(oe=>oe!==null);_&&A(_)})}},[le,Q,ee,Se,Oe,G,Y]),p1=m.useCallback((F,q)=>{if(!le||!Q)return;Aue(ia,q);const Z=me==null?void 0:me.find(_=>_.id===F);let $=null;if(Z){$={};const _=Z;for(const oe of Object.keys(q))$[oe]=_[oe]}if(Ne(F,q),A(null),Y(),$){const _=$;G({do:async()=>{await Q.updateConnector(F,q)},undo:async()=>{await Q.updateConnector(F,_)},coalesceKey:`connector:${F}:style`})}Q.updateConnector(F,q).catch(_=>{ot(F),$&&X(),A(_ instanceof Error?_.message:String(_)),console.error("updateConnector failed",_)})},[le,Q,me,Ne,ot,G,X,Y]),{mark:Qo,markMany:Jo,unmark:_r,unmarkMany:Zi}=L,{mark:ei,markMany:fr,unmark:Hr,unmarkMany:pr}=P,y1=m.useCallback(F=>{if(!le||!Q)return;const q=ee==null?void 0:ee.find(be=>be.id===F);if(!q)return;const Z=(me??[]).filter(be=>be.source===F||be.target===F),$=Z.map(be=>be.id),_=new Set($);A(null),Qo(F),$.length>0&&fr($),d(be=>be.filter(Ue=>Ue!==F)),p(be=>be.filter(Ue=>!_.has(Ue))),Y();const oe=q,Ae=Z;G({do:async()=>{Qo(F),$.length>0&&fr($),await Q.deleteNode(F)},undo:async()=>{_r(F),$.length>0&&pr($),await Q.createNode({id:oe.id,type:oe.type,position:oe.position,data:oe.data});for(const be of Ae)await Q.createConnector({...be,id:be.id})}}),Q.deleteNode(F).catch(be=>{_r(F),$.length>0&&pr($),X(),A(be instanceof Error?be.message:String(be)),console.error("deleteNode failed",be)})},[le,Q,ee,me,Qo,fr,_r,pr,G,X,Y]),m1=m.useCallback((F,q)=>{if(!le||!Q||!ee)return;const Z=T??ee.map(oe=>oe.id),$=x8e(Z,F,q);if(!$)return;const _=Z.indexOf(F);E($),A(null),Y(),G({do:async()=>{await Q.reorderNode(F,q)},undo:async()=>{await Q.reorderNode(F,{op:"toIndex",index:_})}}),Q.reorderNode(F,q).catch(oe=>{E(null),X(),A(oe instanceof Error?oe.message:String(oe)),console.error("reorderNode failed",oe)})},[le,Q,ee,T,G,X,Y]);m.useCallback(F=>{if(!le||!Q)return;const q=me==null?void 0:me.find($=>$.id===F);if(!q)return;A(null),ei(F),p($=>$.filter(_=>_!==F)),Y();const Z=q;G({do:async()=>{ei(F),await Q.deleteConnector(F)},undo:async()=>{Hr(F),await Q.createConnector({...Z,id:Z.id})}}),Q.deleteConnector(F).catch($=>{Hr(F),X(),A($ instanceof Error?$.message:String($)),console.error("deleteConnector failed",$)})},[le,Q,me,ei,Hr,G,X,Y]);const _e=m.useCallback((F,q)=>{if(!le||!Q||F.length===0&&q.length===0)return;const Z=new Set(F),$=F.map(Re=>ee==null?void 0:ee.find(it=>it.id===Re)).filter(Re=>!!Re),_=(me??[]).filter(Re=>Z.has(Re.source)||Z.has(Re.target)),oe=new Set(_.map(Re=>Re.id)),Ae=q.map(Re=>me==null?void 0:me.find(it=>it.id===Re)).filter(Re=>!!Re).filter(Re=>!oe.has(Re.id));if($.length===0&&_.length===0&&Ae.length===0)return;A(null);const be=$.map(Re=>Re.id),Ue=[..._.map(Re=>Re.id),...Ae.map(Re=>Re.id)];be.length>0&&Jo(be),Ue.length>0&&fr(Ue);const Ut=$;d(Re=>Re.filter(it=>!Z.has(it)));const Eo=new Set(Ae.map(Re=>Re.id));p(Re=>Re.filter(it=>!Eo.has(it)&&!oe.has(it))),Y(),G({do:async()=>{be.length>0&&Jo(be),Ue.length>0&&fr(Ue);for(const Re of Ut)await Q.deleteNode(Re.id).catch(()=>{});await Promise.allSettled(Ae.map(Re=>Q.deleteConnector(Re.id)))},undo:async()=>{be.length>0&&Zi(be),Ue.length>0&&pr(Ue);for(let Re=Ut.length-1;Re>=0;Re--){const it=Ut[Re];it&&await Q.createNode({id:it.id,type:it.type,position:it.position,data:it.data})}for(const Re of[..._,...Ae])await Q.createConnector({...Re,id:Re.id})}});const Dn=new Map;for(const Re of $)Dn.set(Re.id,_.filter(it=>it.source===Re.id||it.target===Re.id).map(it=>it.id));(async()=>{const Re=[];for(const Yt of Ut)try{await Q.deleteNode(Yt.id)}catch(gn){_r(Yt.id);const ta=Dn.get(Yt.id)??[];ta.length>0&&pr(ta),Re.push(gn instanceof Error?gn.message:String(gn))}const it=await Promise.all(Ae.map(async Yt=>{try{return await Q.deleteConnector(Yt.id),null}catch(gn){return Hr(Yt.id),gn instanceof Error?gn.message:String(gn)}}));for(const Yt of it)Yt!==null&&Re.push(Yt);Re.length>0&&Re[0]!==void 0&&A(Re[0])})()},[le,Q,ee,me,Jo,fr,_r,Zi,Hr,pr,G,Y]);m.useEffect(()=>{M.current=_e},[_e]),m.useEffect(()=>{const F=q=>{if(q.key!=="Delete"&&q.key!=="Backspace"||xr(document.activeElement)||document.querySelector('[data-testid="inline-edit-input"]'))return;const Z=w.current,$=g.current;Z.length===0&&$.length===0||(q.preventDefault(),_e(Z,$))};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[_e]);const{undo:Mt,redo:Fr,canUndo:Or,canRedo:jn}=j;m.useEffect(()=>{const F=async q=>{if((q.metaKey||q.ctrlKey)&&q.key.toLowerCase()==="z"&&!xr(document.activeElement)){if(q.preventDefault(),q.shiftKey){if(!jn)return;try{const Z=await Fr();Z!=null&&Z.entry&&await Z.entry.do()}catch(Z){A(Z instanceof Error?Z.message:String(Z)),console.error("redo failed",Z)}return}if(Or)try{const Z=await Mt();Z!=null&&Z.entry&&await Z.entry.undo()}catch(Z){A(Z instanceof Error?Z.message:String(Z)),console.error("undo failed",Z)}}};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[Mt,Fr,Or,jn]);const yr=m.useCallback((F,q)=>{if(!le||!Q)return;const Z=ee==null?void 0:ee.find(oe=>oe.id===F),_=(Z&&"name"in Z.data?Z.data.name:void 0)??"";Se(F,{data:{name:q}}),A(null),Y(),Z&&G({do:async()=>{await Q.updateNode(F,{name:q})},undo:async()=>{await Q.updateNode(F,{name:_})},coalesceKey:`node:${F}:name`}),Q.updateNode(F,{name:q}).catch(oe=>{Z&&X(),A(oe instanceof Error?oe.message:String(oe)),console.error("updateNode name failed",oe)})},[le,Q,ee,Se,G,X,Y]),Mo=m.useCallback((F,q)=>{if(!le||!Q)return;const Z=ee==null?void 0:ee.find(_=>_.id===F);if(!Z)return;const $=Z.data.description??"";Se(F,{data:{description:q}}),A(null),Y(),G({do:async()=>{await Q.updateNode(F,{description:q})},undo:async()=>{await Q.updateNode(F,{description:$})},coalesceKey:`node:${F}:description`}),Q.updateNode(F,{description:q}).catch(_=>{X(),A(_ instanceof Error?_.message:String(_)),console.error("updateNode description failed",_)})},[le,Q,ee,Se,G,X,Y]),er=m.useCallback((F,q)=>{if(!le||!Q)return;const Z=ee==null?void 0:ee.find(_=>_.id===F);if(!Z)return;const $=Z.data.detail??"";Se(F,{data:{detail:q}}),A(null),Y(),G({do:async()=>{await Q.updateNode(F,{detail:q})},undo:async()=>{await Q.updateNode(F,{detail:$})},coalesceKey:`node:${F}:detail`}),Q.updateNode(F,{detail:q}).catch(_=>{X(),A(_ instanceof Error?_.message:String(_)),console.error("updateNode detail failed",_)})},[le,Q,ee,Se,G,X,Y]),qr=m.useCallback((F,q)=>{if(!le||!Q)return;const Z=ee==null?void 0:ee.find(_=>_.id===F);if(!Z)return;const $="icon"in Z.data?Z.data.icon??null:null;Se(F,{data:{icon:q??void 0}}),A(null),Y(),G({do:async()=>{await Q.updateNode(F,{icon:q})},undo:async()=>{await Q.updateNode(F,{icon:$})},coalesceKey:`node:${F}:icon`}),Q.updateNode(F,{icon:q}).catch(_=>{X(),A(_ instanceof Error?_.message:String(_)),console.error("updateNode icon failed",_)})},[le,Q,ee,Se,G,X,Y]),an=m.useCallback((F,q,Z)=>{if(!le||!Q)return;A(null);const $=`node-${crypto.randomUUID()}`,_=uq(F,Z,P0(ia).node),oe={id:$,type:"shapeNode",position:q,data:_};Se($,{id:$,type:"shapeNode",position:q,data:_}),Y(),Q.createNode(oe).then(({id:be})=>{G({do:async()=>{await Q.createNode({...oe,id:be})},undo:async()=>{await Q.deleteNode(be)}})}).catch(be=>{Oe($),A(be instanceof Error?be.message:String(be)),console.error("createNode failed",be)})},[le,Q,Se,Oe,G,Y]),jt=m.useCallback((F,q)=>{if(!le||!Q)return;A(null);const Z=`node-${crypto.randomUUID()}`,$={icon:F,width:Tu.width,height:Tu.height},_={id:Z,type:"iconNode",position:q,data:$};Se(Z,{id:Z,type:"iconNode",position:q,data:$}),d([Z]),Y(),Q.createNode(_).then(({id:Ae})=>{G({do:async()=>{await Q.createNode({..._,id:Ae})},undo:async()=>{await Q.deleteNode(Ae)}})}).catch(Ae=>{Oe(Z),A(Ae instanceof Error?Ae.message:String(Ae)),console.error("createNode (icon) failed",Ae)})},[le,Q,Se,Oe,G,Y]),bo=m.useCallback(F=>{if(!le||!Q)return;A(null);const q=`node-${crypto.randomUUID()}`,Z=`blocks/${q}.html`,$={id:q,type:"htmlNode",position:F.position,data:{}},_={id:q,type:"htmlNode",position:F.position,data:{htmlPath:Z}};Se(q,_),d([q]),Y(),Q.createNode($).then(({id:oe})=>{G({do:async()=>{await Q.createNode({...$,id:oe})},undo:async()=>{await Q.deleteNode(oe)}})}).catch(oe=>{Oe(q),A(oe instanceof Error?oe.message:String(oe)),console.error("createNode (htmlNode) failed",oe)})},[le,Q,Se,Oe,G,Y]),mr=m.useRef(new Map),Ki=m.useCallback((F,q)=>{mr.current.set(F,q)},[]),Xi=m.useCallback(F=>{mr.current.delete(F)},[]),Co=m.useCallback(F=>{!le||!Q||(A(null),Y(),k8e({...F,flowId:le,lastUsed:P0(ia).node},{upload:(q,Z,$)=>Q.uploadImage(Z,$),createNode:async(q,Z)=>{const{id:$}=await Q.createNode(Z);return{id:$}},deleteNode:async(q,Z)=>(await Q.deleteNode(Z),{ok:!0}),setOverride:Se,pushUndo:G,rememberRetry:Ki,forgetRetry:Xi}).catch(q=>{console.error("image-upload-flow failed",q)}))},[le,Q,Se,G,Y,Ki,Xi]),Ct=m.useCallback(F=>{if(!le||!Q)return;const q=`node-${crypto.randomUUID()}`;Co({nodeId:q,...F})},[le,Q,Co]),Yi=m.useCallback(F=>{const q=mr.current.get(F);q&&Co({nodeId:F,...q})},[Co]),[Tn,ti]=m.useState({open:!1,mode:"insert"}),tr=m.useCallback((F,q)=>{ti({open:!0,mode:F,nodeId:q})},[]),kr=m.useCallback(()=>{ti(F=>({...F,open:!1}))},[]),k1=m.useCallback(()=>{tr("insert")},[tr]),Qi=m.useCallback(F=>tr("replace",F),[tr]),Ji=m.useCallback(F=>{if(xue(F),Tn.mode==="replace"&&Tn.nodeId){if(le&&Q){const q=Tn.nodeId,Z=ee==null?void 0:ee.find(_=>_.id===q),$=(Z==null?void 0:Z.type)==="iconNode"?Z.data.icon:void 0;if(Se(q,{data:{icon:F}}),A(null),Y(),$!==void 0){const _=$;G({do:async()=>{await Q.updateNode(q,{icon:F})},undo:async()=>{await Q.updateNode(q,{icon:_})},coalesceKey:`node:${q}:icon`})}Q.updateNode(q,{icon:F}).catch(_=>{Oe(q),$!==void 0&&X(),A(_ instanceof Error?_.message:String(_)),console.error("updateNode (icon replace) failed",_)})}}else{const q=W.current;if(q&&le){const Z=kue(q,{width:window.innerWidth,height:window.innerHeight});jt(F,Z)}}kr()},[Tn.mode,Tn.nodeId,le,Q,ee,Se,Oe,G,X,Y,jt,kr]),ni=m.useCallback((F,q)=>{if(!le||!Q)return;const Z=me==null?void 0:me.find(_=>_.id===F),$=Z==null?void 0:Z.label;Ne(F,{label:q}),A(null),Y(),Z&&G({do:async()=>{await Q.updateConnector(F,{label:q})},undo:async()=>{await Q.updateConnector(F,{label:$})},coalesceKey:`connector:${F}:label`}),Q.updateConnector(F,{label:q}).catch(_=>{Z&&X(),A(_ instanceof Error?_.message:String(_)),console.error("updateConnector label failed",_)})},[le,Q,me,Ne,G,X,Y]),mn=m.useCallback((F,q,Z)=>{if(!le||!Q)return;const $=`conn-${crypto.randomUUID()}`,_=Z==null?void 0:Z.targetPin,oe=P0(ia).connector,Ae={id:$,source:F,target:q,sourceHandleAutoPicked:!0,targetHandleAutoPicked:!0,..._?{targetPin:_}:{},...oe,kind:"default"},be={id:$,source:F,target:q,sourceHandleAutoPicked:!0,targetHandleAutoPicked:!0,..._?{targetPin:_}:{},...oe,kind:"default"};Ne($,Ae),A(null),Y(),Q.createConnector(be).then(({id:Ue})=>{G({do:async()=>{await Q.createConnector({...be,id:Ue})},undo:async()=>{await Q.deleteConnector(Ue)}})}).catch(Ue=>{ot($),A(Ue instanceof Error?Ue.message:String(Ue)),console.error("createConnector failed",Ue)})},[le,Q,Ne,ot,G,Y]),Vr=m.useCallback(({sourceNodeId:F,position:q,shape:Z})=>{if(!le||!Q)return;A(null);const $=`node-${crypto.randomUUID()}`,_=`conn-${crypto.randomUUID()}`,oe=yR[Z],Ae=P0(ia),be=uq(Z,oe,Ae.node),Ue={id:$,type:"shapeNode",position:q,data:be},Ut={id:_,source:F,target:$,sourceHandleAutoPicked:!0,targetHandleAutoPicked:!0,...Ae.connector,kind:"default"};Se($,{id:$,type:"shapeNode",position:q,data:be}),Ne(_,Ut),v($),Y(),(async()=>{try{await Q.createNode(Ue),await Q.createConnector(Ut),G({do:async()=>{await Q.createNode(Ue),await Q.createConnector(Ut)},undo:async()=>{ot(_),Oe($),await Q.deleteConnector(_).catch(()=>{}),await Q.deleteNode($).catch(()=>{})}})}catch(Dn){Oe($),ot(_),A(Dn instanceof Error?Dn.message:String(Dn)),console.error("createAndConnectFromPane failed",Dn)}})()},[le,Q,Se,Oe,Ne,ot,G,Y]),Br=m.useRef(null),[g1,So]=m.useState(!1),nr=m.useCallback(F=>{if(!ee)return;const q=new Set(F),Z=ee.filter(_=>q.has(_.id));if(Z.length===0)return;const $=(me??[]).filter(_=>q.has(_.source)&&q.has(_.target));Br.current=JSON.parse(JSON.stringify({nodes:Z,connectors:$})),So(!0)},[ee,me]),kn=m.useCallback(F=>{if(!le||!Q)return;const q=Br.current;if(!q||q.nodes.length===0)return;const{newNodes:Z,newConnectors:$}=f8e({nodes:q.nodes,connectors:q.connectors,flowPos:F,nodeIdGen:()=>`node-${crypto.randomUUID()}`,connectorIdGen:()=>`conn-${crypto.randomUUID()}`});for(const _ of Z)Se(_.id,_);for(const _ of $)Ne(_.id,_);d(Z.map(_=>_.id)),p($.map(_=>_.id)),A(null),Y(),(async()=>{try{for(const _ of Z)await Q.createNode({id:_.id,type:_.type,position:_.position,data:_.data});for(const _ of $)await Q.createConnector(_);G({do:async()=>{for(const _ of Z)await Q.createNode({id:_.id,type:_.type,position:_.position,data:_.data});for(const _ of $)await Q.createConnector(_)},undo:async()=>{await Promise.allSettled($.map(_=>Q.deleteConnector(_.id))),await Promise.allSettled(Z.map(_=>Q.deleteNode(_.id)))}})}catch(_){for(const oe of Z)Oe(oe.id);for(const oe of $)ot(oe.id);A(_ instanceof Error?_.message:String(_)),console.error("paste failed",_)}})()},[le,Q,Se,Oe,Ne,ot,Y,G]);m.useEffect(()=>{const F=q=>{const Z=Iue({event:q,isEditableActive:xr(document.activeElement),hasNodes:!!ee&&ee.length>0,hasConnectors:!!me&&me.length>0,selectedIds:w.current,hasClipboard:!!Br.current});if(Z.type!=="noop"&&!(Z.type==="copy"||Z.type==="paste")){if(q.preventDefault(),Z.type==="selectAll"){d((ee??[]).map($=>$.id)),p((me??[]).map($=>$.id));return}nr([...Z.ids]),kn(null)}};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[ee,me,nr,kn]),m.useEffect(()=>{const F=q=>{const Z=Cue(q);if(!Z||xr(document.activeElement))return;const $=w.current;if($.length===0)return;const _=S.overrides,oe=(ee??[]).map(be=>{var Ut;const Ue=((Ut=_[be.id])==null?void 0:Ut.position)??be.position;return{id:be.id,position:Ue}}),Ae=Lue(Z,$,oe);if(Ae.length!==0)if(q.preventDefault(),Ae.length===1){const be=Ae[0];be&&ue(be.id,be.position)}else Pe(Ae)};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[ee,S.overrides,ue,Pe]),m.useEffect(()=>{const F=q=>{const Z=Sue(q);if(!Z||xr(document.activeElement))return;q.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 sn=m.useCallback(async F=>{if(!le||!Q||!ee||!Q.computeLayout)return;const q=S.overrides,Z=W.current,$=F==="selection"?new Set(w.current):null,_=$?ee.filter(De=>$.has(De.id)):ee;if(_.length<2)return;const oe=new Set(_.map(De=>De.id)),Ae=(me??[]).filter(De=>oe.has(De.source)&&oe.has(De.target)),be=new Map,Ue=_.map(De=>{var vn;const Qe=((vn=q[De.id])==null?void 0:vn.position)??De.position;be.set(De.id,Qe);const Ht=Z==null?void 0:Z.getInternalNode(De.id),xn=Ht==null?void 0:Ht.measured,Ao=De.data,na=(xn==null?void 0:xn.width)??Ao.width??200,ld=(xn==null?void 0:xn.height)??Ao.height??120;return{id:De.id,type:De.type,width:na,height:ld}}),Ut=Ae.map(De=>({id:De.id,source:De.source,target:De.target})),Eo=await Q.computeLayout(Ue,Ut),Dn=new Map;for(const[De,Qe]of Object.entries(Eo.nodes))Dn.set(De,Qe.position);let Re=Number.POSITIVE_INFINITY,it=Number.POSITIVE_INFINITY,Yt=Number.POSITIVE_INFINITY,gn=Number.POSITIVE_INFINITY;for(const De of Ue){const Qe=be.get(De.id);if(!Qe)continue;Qe.x<Re&&(Re=Qe.x),Qe.y<it&&(it=Qe.y);const Ht=Dn.get(De.id);Ht&&(Ht.x<Yt&&(Yt=Ht.x),Ht.y<gn&&(gn=Ht.y))}const ta=Number.isFinite(Re)&&Number.isFinite(Yt)?Re-Yt:0,Hz=Number.isFinite(it)&&Number.isFinite(gn)?it-gn:0,ii=[];for(const De of Ue){const Qe=be.get(De.id),Ht=Dn.get(De.id);if(!Qe||!Ht)continue;const xn={x:Ht.x+ta,y:Ht.y+Hz},Ao=xn.x-Qe.x,na=xn.y-Qe.y;Math.abs(Ao)<1&&Math.abs(na)<1||ii.push({id:De.id,prev:Qe,next:xn})}if(ii.length!==0){A(null);for(const De of ii)Se(De.id,{position:De.next});Y(),G({do:async()=>{await Promise.allSettled(ii.map(De=>Q.updateNodePosition(De.id,De.next)))},undo:async()=>{await Promise.allSettled(ii.map(De=>Q.updateNodePosition(De.id,De.prev)))}}),Promise.all(ii.map(async De=>{try{return await Q.updateNodePosition(De.id,De.next),null}catch(Qe){return Oe(De.id),Qe instanceof Error?Qe.message:String(Qe)}})).then(De=>{const Qe=De.filter(xn=>xn!==null),Ht=Qe[0];Ht&&(A(Qe.length===1?Ht:`${Qe.length} node updates failed (first: ${Ht})`),console.error("Tidy: some updateNodePosition calls failed",Qe))})}},[le,Q,ee,me,S.overrides,Se,Oe,G,Y]);m.useEffect(()=>{const F=q=>{if(!(q.metaKey||q.ctrlKey)||!q.shiftKey||q.altKey||q.key.toLowerCase()!=="l"||xr(document.activeElement))return;q.preventDefault();const Z=w.current.length>0?"selection":"all";sn(Z)};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[sn]);const ri=m.useCallback(()=>{const F=w.current.length>0?"selection":"all";sn(F)},[sn]);m.useEffect(()=>{const F=q=>{if(xr(document.activeElement)||document.querySelector('[data-testid="inline-edit-input"]'))return;const Z=Eue(q);if(Z===null)return;const $=Z==="select"?null:Z;if(V.current===$){R(null);return}R($)};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[]),m.useEffect(()=>{const F=q=>{q.key==="Escape"&&(xr(document.activeElement)||document.querySelector('[data-testid="inline-edit-input"]')||(w.current.length>0&&d([]),g.current.length>0&&p([]),V.current!==null&&R(null)))};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[]),m.useEffect(()=>{const F=q=>{if(q.key.toLowerCase()!=="f"||q.metaKey||q.ctrlKey||q.shiftKey||q.altKey||xr(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(_=>({id:_})),padding:.2,duration:200})};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[]),m.useEffect(()=>{const F=q=>{if(q.key!=="1"||q.metaKey||q.ctrlKey||q.shiftKey||q.altKey||xr(document.activeElement)||document.querySelector('[data-testid="inline-edit-input"]'))return;const Z=W.current;if(!Z)return;const{x:$,y:_}=Z.getViewport();Z.setViewport({x:$,y:_,zoom:1},{duration:150})};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[]);const rr=m.useCallback(F=>{var q,Z,$;switch(F){case"tool.select":R(null);return;case"tool.rectangle":R("rectangle");return;case"tool.ellipse":R("ellipse");return;case"tool.text":R("text");return;case"tool.sticky":R("sticky");return;case"tool.database":R("database");return;case"edit.undo":{if(!Or)return;(async()=>{try{const _=await Mt();_!=null&&_.entry&&await _.entry.undo()}catch(_){A(_ instanceof Error?_.message:String(_)),console.error("undo failed",_)}})();return}case"edit.redo":{if(!jn)return;(async()=>{try{const _=await Fr();_!=null&&_.entry&&await _.entry.do()}catch(_){A(_ instanceof Error?_.message:String(_)),console.error("redo failed",_)}})();return}case"edit.copy":{const _=w.current;if(_.length===0)return;nr([..._]);return}case"edit.paste":kn(null);return;case"edit.duplicate":{const _=w.current;if(_.length===0)return;nr([..._]),kn(null);return}case"edit.delete":{const _=w.current,oe=g.current;if(_.length===0&&oe.length===0)return;_e([..._],[...oe]);return}case"edit.selectAll":d((ee??[]).map(_=>_.id)),p((me??[]).map(_=>_.id));return;case"view.fit":{const _=W.current;if(!_)return;_.fitView({padding:.2,duration:200});return}case"view.zoomIn":{const _=W.current;if(!_)return;_.zoomIn({duration:150});return}case"view.zoomOut":{const _=W.current;if(!_)return;_.zoomOut({duration:150});return}case"view.zoom100":{const _=W.current;if(!_)return;const{x:oe,y:Ae}=_.getViewport();_.setViewport({x:oe,y:Ae,zoom:1},{duration:150});return}case"view.zoomToSelection":{const _=w.current;if(_.length===0)return;const oe=W.current;if(!oe)return;oe.fitView({nodes:_.map(Ae=>({id:Ae})),padding:.2,duration:200});return}case"layout.tidy":{const _=w.current.length>0?"selection":"all";sn(_);return}case"selection.deselect":w.current.length>0&&d([]),g.current.length>0&&p([]),V.current!==null&&R(null);return;case"help.commandPalette":B(!0);return;case"export.pdf":{(q=b.current)==null||q.exportPdf();return}case"export.png":{(Z=b.current)==null||Z.exportPng();return}case"session.reset":{($=x.current)==null||$.call(x);return}}},[Or,jn,Mt,Fr,nr,kn,_e,ee,me,sn]);m.useEffect(()=>{const F=q=>{(q.metaKey||q.ctrlKey)&&(q.shiftKey||q.altKey||q.key.toLowerCase()==="p"&&(q.preventDefault(),!xr(document.activeElement)&&rr("help.commandPalette")))};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[rr]),m.useEffect(()=>{x.current=l??null},[l]);const $r=m.useCallback((F,q)=>{if(!le||!Q)return;const Z=me==null?void 0:me.find(oe=>oe.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,_={...q.source!==void 0?{source:q.source}:{},...q.target!==void 0?{target:q.target}:{},...q.sourceHandle!==void 0?{sourceHandle:q.sourceHandle===null?void 0:q.sourceHandle}:{},...q.targetHandle!==void 0?{targetHandle:q.targetHandle===null?void 0:q.targetHandle}:{},...q.sourceHandleAutoPicked!==void 0?{sourceHandleAutoPicked:q.sourceHandleAutoPicked}:{},...q.targetHandleAutoPicked!==void 0?{targetHandleAutoPicked:q.targetHandleAutoPicked}:{},...q.sourcePin!==void 0?{sourcePin:q.sourcePin===null?void 0:q.sourcePin}:{},...q.targetPin!==void 0?{targetPin:q.targetPin===null?void 0:q.targetPin}:{}};if(Ne(F,_),A(null),Y(),$){const oe=$;G({do:async()=>{await Q.updateConnector(F,q)},undo:async()=>{await Q.updateConnector(F,oe)},coalesceKey:`connector:${F}:reconnect`})}Q.updateConnector(F,q).catch(oe=>{ot(F),$&&X(),A(oe instanceof Error?oe.message:String(oe)),console.error("updateConnector reconnect failed",oe)})},[le,Q,me,Ne,ot,G,X,Y]),Ur=m.useCallback((F,q,Z)=>{if(!le||!Q)return;const $=me==null?void 0:me.find(Ae=>Ae.id===F),_=$?q==="source"?$.sourcePin:$.targetPin:void 0,oe=q==="source"?"sourcePin":"targetPin";if(Ne(F,{[oe]:Z}),A(null),Y(),$){const Ae={[oe]:_??null};G({do:async()=>{await Q.updateConnector(F,{[oe]:Z})},undo:async()=>{await Q.updateConnector(F,Ae)},coalesceKey:`connector:${F}:${oe}`})}Q.updateConnector(F,{[oe]:Z}).catch(Ae=>{ot(F),$&&X(),A(Ae instanceof Error?Ae.message:String(Ae)),console.error("updateConnector pin failed",Ae)})},[le,Q,me,Ne,ot,G,X,Y]),Lo=m.useCallback((F,q)=>{if(!le||!Q)return;const Z=me==null?void 0:me.find(oe=>oe.id===F),$=Z?q==="source"?Z.sourcePin:Z.targetPin:void 0;if(!$)return;const _=q==="source"?"sourcePin":"targetPin";Ne(F,{[_]:void 0}),A(null),Y(),G({do:async()=>{await Q.updateConnector(F,{[_]:null})},undo:async()=>{await Q.updateConnector(F,{[_]:$})}}),Q.updateConnector(F,{[_]:null}).catch(oe=>{ot(F),X(),A(oe instanceof Error?oe.message:String(oe)),console.error("updateConnector unpin failed",oe)})},[le,Q,me,Ne,ot,G,X,Y]),Je=n==null?void 0:n.flow,Wr=S.overrides,Nn=C.overrides,Xt=L.ids,Gr=P.ids,x1=m.useMemo(()=>{if(!Je||h.length===0)return[];const F=new Map(Je.nodes.map(Z=>[Z.id,Z])),q=[];for(const Z of h){const $=F.get(Z);if(!$)continue;const _=Wr[Z];if(!_){q.push($);continue}const oe=_.data?{...$.data,..._.data}:$.data;q.push({...$,..._,data:oe})}return q},[Je,h,Wr]),_z=m.useMemo(()=>{if(!Je||f.length===0)return[];const F=new Map(Je.connectors.map(Z=>[Z.id,Z])),q=[];for(const Z of f){const $=F.get(Z);if(!$)continue;const _=Nn[Z];q.push(_?{...$,..._}:$)}return q},[Je,f,Nn]),Kh=m.useMemo(()=>{if(!Je)return null;if(!T)return Je.nodes;const F=new Map(Je.nodes.map($=>[$.id,$])),q=[],Z=new Set;for(const $ of T){const _=F.get($);_&&(q.push(_),Z.add($))}for(const $ of Je.nodes)Z.has($.id)||q.push($);return q},[Je,T]),Io=m.useMemo(()=>{const F=Kh??(Je==null?void 0:Je.nodes)??null;return F?Xt.size===0?F:F.filter(q=>!Xt.has(q.id)):null},[Kh,Je,Xt]),ea=m.useMemo(()=>{const F=(Je==null?void 0:Je.connectors)??null;return F?Gr.size===0&&Xt.size===0?F:F.filter(q=>!Gr.has(q.id)&&!Xt.has(q.source)&&!Xt.has(q.target)):null},[Je,Gr,Xt]);if(!c)return y.jsxs("div",{className:"flex h-full w-full flex-col items-center justify-center gap-2 bg-background p-6 text-center",children:[y.jsxs("p",{className:"text-sm font-medium",children:["Unknown demo: ",e]}),y.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 y.jsx("div",{className:"flex h-full w-full items-center justify-center text-sm text-muted-foreground",children:"Loading demo…"});const id=h[0],oi=id?a[id]:void 0;return y.jsxs("div",{className:"relative h-full w-full",children:[n&&!n.valid?y.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:[y.jsx("span",{className:"font-medium uppercase tracking-wide",children:"Invalid demo: "}),y.jsx("span",{className:"font-mono",children:n.error})]}):null,Je&&Q?y.jsx(r6e,{ref:b,mode:"edit",adapter:Q,projectId:le??void 0,enableEmbed:!1,onExportToCloud:le?()=>we(!0):void 0,onRestartDemo:l,nodes:Io??Je.nodes,connectors:ea??Je.connectors,selectedNodeIds:h,selectedConnectorIds:f,onSelectionChange:xe,runtime:{runs:o,statuses:a,pendingOverrides:{nodes:Wr,connectors:Nn}},onPlayNode:s,onNodePositionChange:ue,onNodePositionsChange:Pe,onNodeResize:qe,onNodeResizeEnd:We,onHtmlNodeFitToContent:Rt,onMultiResize:st,onNodeNameChange:yr,onNodeDescriptionChange:Mo,onConnectorLabelChange:ni,onCreateShapeNode:an,onCreateImageFromFile:le?Ct:void 0,onRetryImageUpload:le?Yi:void 0,onCreateHtmlNode:le?bo:void 0,iconPickerOpen:Tn.open,onOpenIconPicker:le?k1:void 0,onCloseIconPicker:le?kr:void 0,onPickIcon:le?Ji:void 0,onRequestIconReplace:le?Qi:void 0,onCreateConnector:mn,onReconnectConnector:$r,onPinEndpoint:le?Ur:void 0,onUnpinEndpoint:le?Lo:void 0,onReorderNode:m1,onDeleteNode:y1,onCopyNode:F=>nr([F]),onPasteAt:kn,onCopySelection:le?nr:void 0,onPasteSelection:le?()=>kn(null):void 0,hasClipboard:g1,selectedNodes:x1,selectedConnectors:_z,onStyleNode:Kt,onStyleNodePreview:Jn,onStyleNodes:f1,onStyleNodesPreview:zt,onStyleConnector:p1,onStyleConnectorPreview:zn,onRfInit:H,onTidy:ee?ri:void 0,onCreateAndConnectFromPane:Vr,pendingEditNodeId:k,activeShape:U,onSelectShape:R,statusReport:oi,onNameChange:yr,onDescriptionChange:Mo,onDetailChange:er,onIconChange:qr,autoFitView:!0,autoFitViewSignal:D}):y.jsx("div",{className:"flex h-full w-full items-center justify-center text-sm text-muted-foreground",children:"No demo data yet."}),z?y.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:[y.jsx("span",{className:"font-medium",children:"Couldn't save change: "}),y.jsx("span",{className:"font-mono",children:z}),y.jsx("button",{type:"button",className:"ml-3 underline underline-offset-2",onClick:()=>A(null),children:"Dismiss"})]}):null,y.jsx(E6e,{open:O,onOpenChange:B,runCommand:rr,ctx:{hasSelection:h.length>0||f.length>0,canUndo:Or,canRedo:jn,hasClipboard:g1,canExportDemo:!!le,canResetSession:!!l}}),le?y.jsx(G6e,{open:he,onOpenChange:we,projectId:le,onCapturePreview:()=>{var F;return((F=b.current)==null?void 0:F.capturePreview())??Promise.resolve(void 0)}}):null]})}const HB="npx seeflow register --path .";function w8e(){const[e,t]=m.useState(!1),n=async()=>{try{await navigator.clipboard.writeText(HB),t(!0),setTimeout(()=>t(!1),1200)}catch(r){console.error("[empty-state] copy failed",r)}};return y.jsx("div",{"data-testid":"seeflow-empty-state",className:"flex h-full w-full items-center justify-center bg-background p-6",children:y.jsxs("div",{className:"flex max-w-lg flex-col items-center gap-6 text-center",children:[y.jsx("div",{className:"flex h-12 w-12 items-center justify-center rounded-full bg-muted",children:y.jsx(x2,{className:"h-6 w-6 text-muted-foreground"})}),y.jsxs("div",{className:"space-y-2",children:[y.jsx("h1",{className:"text-2xl font-semibold tracking-tight text-foreground",children:"No demos registered yet"}),y.jsxs("p",{className:"text-sm text-muted-foreground",children:["Point SeeFlow at any folder containing a"," ",y.jsx("code",{className:"rounded bg-muted px-1.5 py-0.5 text-xs",children:".seeflow/flow.json"})," file and it'll appear here."]})]}),y.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:[y.jsx("span",{className:"text-muted-foreground select-none",children:"$"}),y.jsx("code",{className:"flex-1 truncate text-left",children:HB}),y.jsx(Nt,{type:"button",variant:"ghost",size:"sm",onClick:n,"aria-label":"Copy register command",children:e?y.jsx(fo,{className:"h-4 w-4"}):y.jsx(ou,{className:"h-4 w-4"})})]})]})})}function M8e({demos:e}){return e.length===0?y.jsx(w8e,{}):y.jsx("div",{className:"flex h-full w-full items-start justify-center overflow-y-auto bg-background p-8",children:y.jsxs("div",{"data-testid":"studio-home-picker",className:"flex w-full max-w-2xl flex-col gap-6 pt-8",children:[y.jsxs("div",{className:"space-y-1",children:[y.jsx("h1",{className:"text-2xl font-semibold tracking-tight",children:"Open a demo"}),y.jsxs("p",{className:"text-sm text-muted-foreground",children:[e.length," demos registered — pick one to load its canvas."]})]}),y.jsx("ul",{className:"flex flex-col gap-2",children:e.map(t=>y.jsx("li",{children:y.jsxs("button",{type:"button",onClick:()=>qu(`/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:[y.jsx("span",{className:"text-sm font-medium",children:t.name}),y.jsx("span",{className:"truncate text-xs text-muted-foreground",children:t.repoPath})]})},t.id))})]})})}const b8e=e=>{if(!e.startsWith("/d/"))return null;const t=e.slice(3);return t.length>0?decodeURIComponent(t):null};function C8e(){const e=a6e(),{demos:t,refresh:n}=u6e(),r=b8e(e),o=r?(t??[]).find(P=>P.slug===r):void 0,i=(o==null?void 0:o.id)??null,{detail:a,loading:s,refresh:l,applyDetail:c}=c6e(i),{runs:h,apply:d}=m6e(i),{events:f,apply:p}=p6e(i),{statusByNode:k,apply:v,reset:w}=v6e(i),g=m.useCallback(()=>{w(),l(),n()},[l,n,w]),M=m.useCallback(P=>{if(!i||!o)return;const T={id:i,slug:o.slug,filePath:""},E=P.valid?{...T,name:P.flow.name??o.name,flow:P.flow,valid:!0,error:null}:{...T,name:o.name,flow:null,valid:!1,error:P.error};c(E)},[i,o,c]),x=m.useCallback(P=>{d(P),p(P),v(P)},[d,p,v]);w6e(i,{onHello:g,onFlowReload:M,onEvent:x});const b=m.useCallback(async()=>{if(i)try{await Ene(i)}catch(P){console.error("Failed to restart demo:",P)}},[i]),S=m.useCallback(P=>{bB(P.id),n()},[n]),C=m.useCallback(async P=>{await n(),i===P&&qu("/")},[n,i]);m.useEffect(()=>{if(e!=="/"||t===null)return;const P=C6e(t,b6e());P&&qu(`/d/${P.slug}`)},[e,t]),m.useEffect(()=>{o&&bB(o.id)},[o]);const L=m.useCallback(P=>{i&&Ane(i,P).catch(T=>{d({type:"node:error",nodeId:P,message:T instanceof Error?T.message:String(T),ts:Date.now()})})},[i,d]);return t===null?y.jsx("div",{className:"flex h-full w-full items-center justify-center bg-background text-sm text-muted-foreground",children:"Loading…"}):y.jsx(L2,{delayDuration:150,children:y.jsxs("div",{className:"flex h-full w-full flex-col bg-background text-foreground",children:[y.jsx(l6e,{demos:t,currentSlug:r??void 0,onProjectCreated:S,onProjectUnregistered:C}),y.jsx("main",{className:"min-h-0 flex-1",children:r?y.jsx(v8e,{slug:r,demos:t,detail:a,loading:s,runs:h,nodeEvents:f,statusByNode:k,onPlayNode:L,onRestartDemo:i?b:void 0}):y.jsx(M8e,{demos:t})})]})})}const MJ=document.getElementById("root");if(!MJ)throw new Error("Root element #root not found");dT.createRoot(MJ).render(y.jsx(oo.StrictMode,{children:y.jsx(C8e,{})}));export{_3e as _,IP as c,uh as g,I8e as z};
|