@miadi/stateloom-web 0.1.8 → 0.1.9
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 +8 -0
- package/package.json +1 -1
- package/server/.next/BUILD_ID +1 -1
- package/server/.next/build-manifest.json +2 -2
- package/server/.next/server/app/_global-error.html +2 -2
- package/server/.next/server/app/_global-error.rsc +1 -1
- package/server/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/server/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/server/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/server/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/server/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/server/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/server/.next/server/app/_not-found.html +1 -1
- package/server/.next/server/app/_not-found.rsc +2 -2
- package/server/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/server/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/server/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/server/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/server/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/server/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/server/.next/server/app/api/docs/route.js.nft.json +1 -1
- package/server/.next/server/app/api/file/route.js.nft.json +1 -1
- package/server/.next/server/app/api/rispec/route.js.nft.json +1 -1
- package/server/.next/server/app/api/watch/route.js.nft.json +1 -1
- package/server/.next/server/app/index.html +1 -1
- package/server/.next/server/app/index.rsc +3 -3
- package/server/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/server/.next/server/app/index.segments/_full.segment.rsc +3 -3
- package/server/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/server/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/server/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/server/.next/server/app/page.js.nft.json +1 -1
- package/server/.next/server/app/page_client-reference-manifest.js +1 -1
- package/server/.next/server/chunks/ssr/{[root-of-the-server]__46d45ef8._.js → [root-of-the-server]__d5879c0c._.js} +1 -1
- package/server/.next/server/chunks/ssr/[root-of-the-server]__edbb995c._.js +3 -3
- package/server/.next/server/pages/404.html +1 -1
- package/server/.next/server/pages/500.html +2 -2
- package/server/.next/static/chunks/636e7eb4aeda72e0.css +2 -0
- package/server/.next/static/chunks/92628504da59dcc8.js +10 -0
- package/server/package-lock.json +2 -2
- package/server/package.json +1 -1
- package/server/src/app/page.tsx +17 -10
- package/server/src/components/IssueIcon.tsx +28 -0
- package/server/src/components/LockIcon.tsx +24 -0
- package/server/src/components/PropertiesPanel.tsx +10 -0
- package/server/src/components/SettingsPanel.tsx +11 -0
- package/server/src/components/erd/ErdWorkspace.tsx +167 -19
- package/server/src/lib/useSheetDrag.ts +95 -0
- package/server/src/types/definition.ts +4 -0
- package/server/stateloom-web.json +2 -2
- package/server/tsconfig.tsbuildinfo +1 -1
- package/server/.next/static/chunks/8f6bd51bbcce6314.css +0 -2
- package/server/.next/static/chunks/a9e7748193d11ed7.js +0 -10
- /package/server/.next/static/{XCT3lnw_1F5LD0GG4F94- → 6dAVJYqnbe6oEAABQ1yMG}/_buildManifest.js +0 -0
- /package/server/.next/static/{XCT3lnw_1F5LD0GG4F94- → 6dAVJYqnbe6oEAABQ1yMG}/_clientMiddlewareManifest.json +0 -0
- /package/server/.next/static/{XCT3lnw_1F5LD0GG4F94- → 6dAVJYqnbe6oEAABQ1yMG}/_ssgManifest.js +0 -0
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
module.exports=[92509,(a,b,c)=>{b.exports=a.x("url",()=>require("url"))},21517,(a,b,c)=>{b.exports=a.x("http",()=>require("http"))},24836,(a,b,c)=>{b.exports=a.x("https",()=>require("https"))},53681,(a,b,c)=>{var d=a.r(22734),e=a.r(92509),f=a.r(33405).spawn;function g(b){"use strict";b=b||{};var c,g,h=this,i=a.r(21517),j=a.r(24836),k={},l=!1,m={"User-Agent":"node-XMLHttpRequest",Accept:"*/*"},n=Object.assign({},m),o=["accept-charset","accept-encoding","access-control-request-headers","access-control-request-method","connection","content-length","content-transfer-encoding","cookie","cookie2","date","expect","host","keep-alive","origin","referer","te","trailer","transfer-encoding","upgrade","via"],p=["TRACE","TRACK","CONNECT"],q=!1,r=!1,s=!1,t={};this.UNSENT=0,this.OPENED=1,this.HEADERS_RECEIVED=2,this.LOADING=3,this.DONE=4,this.readyState=this.UNSENT,this.onreadystatechange=null,this.responseText="",this.responseXML="",this.response=Buffer.alloc(0),this.status=null,this.statusText=null,this.open=function(a,b,c,d,e){if(this.abort(),r=!1,s=!1,!(a&&-1===p.indexOf(a)))throw Error("SecurityError: Request method not allowed");k={method:a,url:b.toString(),async:"boolean"!=typeof c||c,user:d||null,password:e||null},u(this.OPENED)},this.setDisableHeaderCheck=function(a){l=a},this.setRequestHeader=function(a,b){if(this.readyState!=this.OPENED)throw Error("INVALID_STATE_ERR: setRequestHeader can only be called when state is OPEN");if(!l&&(!a||-1!==o.indexOf(a.toLowerCase())))return console.warn('Refused to set unsafe header "'+a+'"'),!1;if(q)throw Error("INVALID_STATE_ERR: send flag is true");return n[a]=b,!0},this.getResponseHeader=function(a){return"string"==typeof a&&this.readyState>this.OPENED&&g.headers[a.toLowerCase()]&&!r?g.headers[a.toLowerCase()]:null},this.getAllResponseHeaders=function(){if(this.readyState<this.HEADERS_RECEIVED||r)return"";var a="";for(var b in g.headers)"set-cookie"!==b&&"set-cookie2"!==b&&(a+=b+": "+g.headers[b]+"\r\n");return a.substr(0,a.length-2)},this.getRequestHeader=function(a){return"string"==typeof a&&n[a]?n[a]:""},this.send=function(a){if(this.readyState!=this.OPENED)throw Error("INVALID_STATE_ERR: connection must be opened before send() is called");if(q)throw Error("INVALID_STATE_ERR: send has already been called");var l,m=!1,o=!1,p=e.parse(k.url);switch(p.protocol){case"https:":m=!0;case"http:":l=p.hostname;break;case"file:":o=!0;break;case void 0:case"":l="localhost";break;default:throw Error("Protocol not supported.")}if(o){if("GET"!==k.method)throw Error("XMLHttpRequest: Only GET method is supported");if(k.async)d.readFile(unescape(p.pathname),function(a,b){a?h.handleError(a,a.errno||-1):(h.status=200,h.responseText=b.toString("utf8"),h.response=b,u(h.DONE))});else try{this.response=d.readFileSync(unescape(p.pathname)),this.responseText=this.response.toString("utf8"),this.status=200,u(h.DONE)}catch(a){this.handleError(a,a.errno||-1)}return}var s=p.port||(m?443:80),t=p.pathname+(p.search?p.search:"");if(n.Host=l,m&&443===s||80===s||(n.Host+=":"+p.port),k.user){void 0===k.password&&(k.password="");var v=new Buffer(k.user+":"+k.password);n.Authorization="Basic "+v.toString("base64")}"GET"===k.method||"HEAD"===k.method?a=null:a?(n["Content-Length"]=Buffer.isBuffer(a)?a.length:Buffer.byteLength(a),Object.keys(n).some(function(a){return"content-type"===a.toLowerCase()})||(n["Content-Type"]="text/plain;charset=UTF-8")):"POST"===k.method&&(n["Content-Length"]=0);var w=b.agent||!1,x={host:l,port:s,path:t,method:k.method,headers:n,agent:w};if(m&&(x.pfx=b.pfx,x.key=b.key,x.passphrase=b.passphrase,x.cert=b.cert,x.ca=b.ca,x.ciphers=b.ciphers,x.rejectUnauthorized=!1!==b.rejectUnauthorized),r=!1,k.async){var y=m?j.request:i.request;q=!0,h.dispatchEvent("readystatechange");var z=function(a){if(302===(g=a).statusCode||303===g.statusCode||307===g.statusCode){k.url=g.headers.location;var d=e.parse(k.url);l=d.hostname;var f={hostname:d.hostname,port:d.port,path:d.path,method:303===g.statusCode?"GET":k.method,headers:n};m&&(f.pfx=b.pfx,f.key=b.key,f.passphrase=b.passphrase,f.cert=b.cert,f.ca=b.ca,f.ciphers=b.ciphers,f.rejectUnauthorized=!1!==b.rejectUnauthorized),(c=y(f,z).on("error",A)).end();return}u(h.HEADERS_RECEIVED),h.status=g.statusCode,g.on("data",function(a){if(a){var b=Buffer.from(a);h.response=Buffer.concat([h.response,b])}q&&u(h.LOADING)}),g.on("end",function(){q&&(q=!1,u(h.DONE),h.responseText=h.response.toString("utf8"))}),g.on("error",function(a){h.handleError(a)})},A=function(a){if(c.reusedSocket&&"ECONNRESET"===a.code)return y(x,z).on("error",A);h.handleError(a)};c=y(x,z).on("error",A),b.autoUnref&&c.on("socket",a=>{a.unref()}),a&&c.write(a),c.end(),h.dispatchEvent("loadstart")}else{var B=".node-xmlhttprequest-content-"+process.pid,C=".node-xmlhttprequest-sync-"+process.pid;d.writeFileSync(C,"","utf8");for(var D="var http = require('http'), https = require('https'), fs = require('fs');var doRequest = http"+(m?"s":"")+".request;var options = "+JSON.stringify(x)+";var responseText = '';var responseData = Buffer.alloc(0);var req = doRequest(options, function(response) {response.on('data', function(chunk) { var data = Buffer.from(chunk); responseText += data.toString('utf8'); responseData = Buffer.concat([responseData, data]);});response.on('end', function() {fs.writeFileSync('"+B+"', JSON.stringify({err: null, data: {statusCode: response.statusCode, headers: response.headers, text: responseText, data: responseData.toString('base64')}}), 'utf8');fs.unlinkSync('"+C+"');});response.on('error', function(error) {fs.writeFileSync('"+B+"', 'NODE-XMLHTTPREQUEST-ERROR:' + JSON.stringify(error), 'utf8');fs.unlinkSync('"+C+"');});}).on('error', function(error) {fs.writeFileSync('"+B+"', 'NODE-XMLHTTPREQUEST-ERROR:' + JSON.stringify(error), 'utf8');fs.unlinkSync('"+C+"');});"+(a?"req.write('"+JSON.stringify(a).slice(1,-1).replace(/'/g,"\\'")+"');":"")+"req.end();",E=f(process.argv[0],["-e",D]);d.existsSync(C););if(h.responseText=d.readFileSync(B,"utf8"),E.stdin.end(),d.unlinkSync(B),h.responseText.match(/^NODE-XMLHTTPREQUEST-ERROR:/)){var F=JSON.parse(h.responseText.replace(/^NODE-XMLHTTPREQUEST-ERROR:/,""));h.handleError(F,503)}else{h.status=h.responseText.replace(/^NODE-XMLHTTPREQUEST-STATUS:([0-9]*),.*/,"$1");var G=JSON.parse(h.responseText.replace(/^NODE-XMLHTTPREQUEST-STATUS:[0-9]*,(.*)/,"$1"));g={statusCode:h.status,headers:G.data.headers},h.responseText=G.data.text,h.response=Buffer.from(G.data.data,"base64"),u(h.DONE,!0)}}},this.handleError=function(a,b){this.status=b||0,this.statusText=a,this.responseText=a.stack,r=!0,u(this.DONE)},this.abort=function(){c&&(c.abort(),c=null),n=Object.assign({},m),this.responseText="",this.responseXML="",this.response=Buffer.alloc(0),r=s=!0,this.readyState!==this.UNSENT&&(this.readyState!==this.OPENED||q)&&this.readyState!==this.DONE&&(q=!1,u(this.DONE)),this.readyState=this.UNSENT},this.addEventListener=function(a,b){a in t||(t[a]=[]),t[a].push(b)},this.removeEventListener=function(a,b){a in t&&(t[a]=t[a].filter(function(a){return a!==b}))},this.dispatchEvent=function(a){if("function"==typeof h["on"+a]&&(this.readyState===this.DONE&&k.async?setTimeout(function(){h["on"+a]()},0):h["on"+a]()),a in t)for(let b=0,c=t[a].length;b<c;b++)this.readyState===this.DONE?setTimeout(function(){t[a][b].call(h)},0):t[a][b].call(h)};var u=function(a){if(h.readyState!==a&&(h.readyState!==h.UNSENT||!s)&&(h.readyState=a,(k.async||h.readyState<h.OPENED||h.readyState===h.DONE)&&h.dispatchEvent("readystatechange"),h.readyState===h.DONE)){let a;a=s?"abort":r?"error":"load",h.dispatchEvent(a),h.dispatchEvent("loadend")}}}b.exports=g,g.XMLHttpRequest=g},90538,(a,b,c)=>{function d(a,b,c,d){return Math.round(a/c)+" "+d+(b>=1.5*c?"s":"")}b.exports=function(a,b){b=b||{};var c,e,f,g,h=typeof a;if("string"===h&&a.length>0){var i=a;if(!((i=String(i)).length>100)){var j=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(i);if(j){var k=parseFloat(j[1]);switch((j[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*k;case"weeks":case"week":case"w":return 6048e5*k;case"days":case"day":case"d":return 864e5*k;case"hours":case"hour":case"hrs":case"hr":case"h":return 36e5*k;case"minutes":case"minute":case"mins":case"min":case"m":return 6e4*k;case"seconds":case"second":case"secs":case"sec":case"s":return 1e3*k;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return k;default:break}}}return}if("number"===h&&isFinite(a)){return b.long?(e=Math.abs(c=a))>=864e5?d(c,e,864e5,"day"):e>=36e5?d(c,e,36e5,"hour"):e>=6e4?d(c,e,6e4,"minute"):e>=1e3?d(c,e,1e3,"second"):c+" ms":(g=Math.abs(f=a))>=864e5?Math.round(f/864e5)+"d":g>=36e5?Math.round(f/36e5)+"h":g>=6e4?Math.round(f/6e4)+"m":g>=1e3?Math.round(f/1e3)+"s":f+"ms"}throw Error("val is not a non-empty string or a valid number. val="+JSON.stringify(a))}},58449,(a,b,c)=>{b.exports=function(b){function c(a){let b,e,f,g=null;function h(...a){if(!h.enabled)return;let d=Number(new Date);h.diff=d-(b||d),h.prev=b,h.curr=d,b=d,a[0]=c.coerce(a[0]),"string"!=typeof a[0]&&a.unshift("%O");let e=0;a[0]=a[0].replace(/%([a-zA-Z%])/g,(b,d)=>{if("%%"===b)return"%";e++;let f=c.formatters[d];if("function"==typeof f){let c=a[e];b=f.call(h,c),a.splice(e,1),e--}return b}),c.formatArgs.call(h,a),(h.log||c.log).apply(h,a)}return h.namespace=a,h.useColors=c.useColors(),h.color=c.selectColor(a),h.extend=d,h.destroy=c.destroy,Object.defineProperty(h,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==g?g:(e!==c.namespaces&&(e=c.namespaces,f=c.enabled(a)),f),set:a=>{g=a}}),"function"==typeof c.init&&c.init(h),h}function d(a,b){let d=c(this.namespace+(void 0===b?":":b)+a);return d.log=this.log,d}function e(a,b){let c=0,d=0,e=-1,f=0;for(;c<a.length;)if(d<b.length&&(b[d]===a[c]||"*"===b[d]))"*"===b[d]?(e=d,f=c):c++,d++;else{if(-1===e)return!1;d=e+1,c=++f}for(;d<b.length&&"*"===b[d];)d++;return d===b.length}return c.debug=c,c.default=c,c.coerce=function(a){return a instanceof Error?a.stack||a.message:a},c.disable=function(){let a=[...c.names,...c.skips.map(a=>"-"+a)].join(",");return c.enable(""),a},c.enable=function(a){for(let b of(c.save(a),c.namespaces=a,c.names=[],c.skips=[],("string"==typeof a?a:"").trim().replace(/\s+/g,",").split(",").filter(Boolean)))"-"===b[0]?c.skips.push(b.slice(1)):c.names.push(b)},c.enabled=function(a){for(let b of c.skips)if(e(a,b))return!1;for(let b of c.names)if(e(a,b))return!0;return!1},c.humanize=a.r(90538),c.destroy=function(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")},Object.keys(b).forEach(a=>{c[a]=b[a]}),c.names=[],c.skips=[],c.formatters={},c.selectColor=function(a){let b=0;for(let c=0;c<a.length;c++)b=(b<<5)-b+a.charCodeAt(c)|0;return c.colors[Math.abs(b)%c.colors.length]},c.enable(c.load()),c}},70722,(a,b,c)=>{b.exports=a.x("tty",()=>require("tty"))},9031,(a,b,c)=>{let d=a.r(70722),e=a.r(24361);c.init=function(a){a.inspectOpts={};let b=Object.keys(c.inspectOpts);for(let d=0;d<b.length;d++)a.inspectOpts[b[d]]=c.inspectOpts[b[d]]},c.log=function(...a){return process.stderr.write(e.formatWithOptions(c.inspectOpts,...a)+"\n")},c.formatArgs=function(a){let{namespace:d,useColors:e}=this;if(e){let c=this.color,e="\x1b[3"+(c<8?c:"8;5;"+c),f=` ${e};1m${d} \u001B[0m`;a[0]=f+a[0].split("\n").join("\n"+f),a.push(e+"m+"+b.exports.humanize(this.diff)+"\x1b[0m")}else a[0]=(c.inspectOpts.hideDate?"":new Date().toISOString()+" ")+d+" "+a[0]},c.save=function(a){a?process.env.DEBUG=a:delete process.env.DEBUG},c.load=function(){return process.env.DEBUG},c.useColors=function(){return"colors"in c.inspectOpts?!!c.inspectOpts.colors:d.isatty(process.stderr.fd)},c.destroy=e.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."),c.colors=[6,2,3,4,5,1];try{let a=(()=>{let a=Error("Cannot find module 'supports-color'");throw a.code="MODULE_NOT_FOUND",a})();a&&(a.stderr||a).level>=2&&(c.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch(a){}c.inspectOpts=Object.keys(process.env).filter(a=>/^debug_/i.test(a)).reduce((a,b)=>{let c=b.substring(6).toLowerCase().replace(/_([a-z])/g,(a,b)=>b.toUpperCase()),d=process.env[b];return d=!!/^(yes|on|true|enabled)$/i.test(d)||!/^(no|off|false|disabled)$/i.test(d)&&("null"===d?null:Number(d)),a[c]=d,a},{}),b.exports=a.r(58449)(c);let{formatters:f}=b.exports;f.o=function(a){return this.inspectOpts.colors=this.useColors,e.inspect(a,this.inspectOpts).split("\n").map(a=>a.trim()).join(" ")},f.O=function(a){return this.inspectOpts.colors=this.useColors,e.inspect(a,this.inspectOpts)}},83021,(a,b,c)=>{let d;c.formatArgs=function(a){if(a[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+a[0]+(this.useColors?"%c ":" ")+"+"+b.exports.humanize(this.diff),!this.useColors)return;let c="color: "+this.color;a.splice(1,0,c,"color: inherit");let d=0,e=0;a[0].replace(/%[a-zA-Z%]/g,a=>{"%%"!==a&&(d++,"%c"===a&&(e=d))}),a.splice(e,0,c)},c.save=function(a){try{a?c.storage.setItem("debug",a):c.storage.removeItem("debug")}catch(a){}},c.load=function(){let a;try{a=c.storage.getItem("debug")||c.storage.getItem("DEBUG")}catch(a){}return!a&&"u">typeof process&&"env"in process&&(a=process.env.DEBUG),a},c.useColors=function(){let a;return!("u">typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&("u">typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"u">typeof navigator&&navigator.userAgent&&(a=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(a[1],10)>=31||"u">typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},c.storage=function(){try{return localStorage}catch(a){}}(),d=!1,c.destroy=()=>{d||(d=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))},c.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],c.log=console.debug||console.log||(()=>{}),b.exports=a.r(58449)(c);let{formatters:e}=b.exports;e.j=function(a){try{return JSON.stringify(a)}catch(a){return"[UnexpectedJSONParseError]: "+a.message}}},72724,(a,b,c)=>{"u"<typeof process||"renderer"===process.type||process.__nwjs?b.exports=a.r(83021):b.exports=a.r(9031)},27699,(a,b,c)=>{b.exports=a.x("events",()=>require("events"))},4446,(a,b,c)=>{b.exports=a.x("net",()=>require("net"))},55004,(a,b,c)=>{b.exports=a.x("tls",()=>require("tls"))},54799,(a,b,c)=>{b.exports=a.x("crypto",()=>require("crypto"))},88947,(a,b,c)=>{b.exports=a.x("stream",()=>require("stream"))},6461,(a,b,c)=>{b.exports=a.x("zlib",()=>require("zlib"))},63046,(a,b,c)=>{"use strict";let d=["nodebuffer","arraybuffer","fragments"],e="u">typeof Blob;e&&d.push("blob"),b.exports={BINARY_TYPES:d,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:e,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}},40338,(a,b,c)=>{"use strict";let{EMPTY_BUFFER:d}=a.r(63046),e=Buffer[Symbol.species];function f(a,b,c,d,e){for(let f=0;f<e;f++)c[d+f]=a[f]^b[3&f]}function g(a,b){for(let c=0;c<a.length;c++)a[c]^=b[3&c]}function h(a){let b;return(h.readOnly=!0,Buffer.isBuffer(a))?a:(a instanceof ArrayBuffer?b=new e(a):ArrayBuffer.isView(a)?b=new e(a.buffer,a.byteOffset,a.byteLength):(b=Buffer.from(a),h.readOnly=!1),b)}if(b.exports={concat:function(a,b){if(0===a.length)return d;if(1===a.length)return a[0];let c=Buffer.allocUnsafe(b),f=0;for(let b=0;b<a.length;b++){let d=a[b];c.set(d,f),f+=d.length}return f<b?new e(c.buffer,c.byteOffset,f):c},mask:f,toArrayBuffer:function(a){return a.length===a.buffer.byteLength?a.buffer:a.buffer.slice(a.byteOffset,a.byteOffset+a.length)},toBuffer:h,unmask:g},!process.env.WS_NO_BUFFER_UTIL)try{let a=(()=>{let a=Error("Cannot find module 'bufferutil'");throw a.code="MODULE_NOT_FOUND",a})();b.exports.mask=function(b,c,d,e,g){g<48?f(b,c,d,e,g):a.mask(b,c,d,e,g)},b.exports.unmask=function(b,c){b.length<32?g(b,c):a.unmask(b,c)}}catch(a){}},14025,(a,b,c)=>{"use strict";let d=Symbol("kDone"),e=Symbol("kRun");b.exports=class{constructor(a){this[d]=()=>{this.pending--,this[e]()},this.concurrency=a||1/0,this.jobs=[],this.pending=0}add(a){this.jobs.push(a),this[e]()}[e](){if(this.pending!==this.concurrency&&this.jobs.length){let a=this.jobs.shift();this.pending++,a(this[d])}}}},31276,(a,b,c)=>{"use strict";let d,e=a.r(6461),f=a.r(40338),g=a.r(14025),{kStatusCode:h}=a.r(63046),i=Buffer[Symbol.species],j=Buffer.from([0,0,255,255]),k=Symbol("permessage-deflate"),l=Symbol("total-length"),m=Symbol("callback"),n=Symbol("buffers"),o=Symbol("error");function p(a){this[n].push(a),this[l]+=a.length}function q(a){(this[l]+=a.length,this[k]._maxPayload<1||this[l]<=this[k]._maxPayload)?this[n].push(a):(this[o]=RangeError("Max payload size exceeded"),this[o].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[o][h]=1009,this.removeListener("data",q),this.reset())}function r(a){(this[k]._inflate=null,this[o])?this[m](this[o]):(a[h]=1007,this[m](a))}b.exports=class{constructor(a){this._options=a||{},this._threshold=void 0!==this._options.threshold?this._options.threshold:1024,this._maxPayload=0|this._options.maxPayload,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,d||(d=new g(void 0!==this._options.concurrencyLimit?this._options.concurrencyLimit:10))}static get extensionName(){return"permessage-deflate"}offer(){let a={};return this._options.serverNoContextTakeover&&(a.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(a.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(a.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?a.client_max_window_bits=this._options.clientMaxWindowBits:null==this._options.clientMaxWindowBits&&(a.client_max_window_bits=!0),a}accept(a){return a=this.normalizeParams(a),this.params=this._isServer?this.acceptAsServer(a):this.acceptAsClient(a),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let a=this._deflate[m];this._deflate.close(),this._deflate=null,a&&a(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(a){let b=this._options,c=a.find(a=>(!1!==b.serverNoContextTakeover||!a.server_no_context_takeover)&&(!a.server_max_window_bits||!1!==b.serverMaxWindowBits&&("number"!=typeof b.serverMaxWindowBits||!(b.serverMaxWindowBits>a.server_max_window_bits)))&&("number"!=typeof b.clientMaxWindowBits||!!a.client_max_window_bits));if(!c)throw Error("None of the extension offers can be accepted");return b.serverNoContextTakeover&&(c.server_no_context_takeover=!0),b.clientNoContextTakeover&&(c.client_no_context_takeover=!0),"number"==typeof b.serverMaxWindowBits&&(c.server_max_window_bits=b.serverMaxWindowBits),"number"==typeof b.clientMaxWindowBits?c.client_max_window_bits=b.clientMaxWindowBits:(!0===c.client_max_window_bits||!1===b.clientMaxWindowBits)&&delete c.client_max_window_bits,c}acceptAsClient(a){let b=a[0];if(!1===this._options.clientNoContextTakeover&&b.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(b.client_max_window_bits){if(!1===this._options.clientMaxWindowBits||"number"==typeof this._options.clientMaxWindowBits&&b.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"')}else"number"==typeof this._options.clientMaxWindowBits&&(b.client_max_window_bits=this._options.clientMaxWindowBits);return b}normalizeParams(a){return a.forEach(a=>{Object.keys(a).forEach(b=>{let c=a[b];if(c.length>1)throw Error(`Parameter "${b}" must have only a single value`);if(c=c[0],"client_max_window_bits"===b){if(!0!==c){let a=+c;if(!Number.isInteger(a)||a<8||a>15)throw TypeError(`Invalid value for parameter "${b}": ${c}`);c=a}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${b}": ${c}`)}else if("server_max_window_bits"===b){let a=+c;if(!Number.isInteger(a)||a<8||a>15)throw TypeError(`Invalid value for parameter "${b}": ${c}`);c=a}else if("client_no_context_takeover"===b||"server_no_context_takeover"===b){if(!0!==c)throw TypeError(`Invalid value for parameter "${b}": ${c}`)}else throw Error(`Unknown parameter "${b}"`);a[b]=c})}),a}decompress(a,b,c){d.add(d=>{this._decompress(a,b,(a,b)=>{d(),c(a,b)})})}compress(a,b,c){d.add(d=>{this._compress(a,b,(a,b)=>{d(),c(a,b)})})}_decompress(a,b,c){let d=this._isServer?"client":"server";if(!this._inflate){let a=`${d}_max_window_bits`,b="number"!=typeof this.params[a]?e.Z_DEFAULT_WINDOWBITS:this.params[a];this._inflate=e.createInflateRaw({...this._options.zlibInflateOptions,windowBits:b}),this._inflate[k]=this,this._inflate[l]=0,this._inflate[n]=[],this._inflate.on("error",r),this._inflate.on("data",q)}this._inflate[m]=c,this._inflate.write(a),b&&this._inflate.write(j),this._inflate.flush(()=>{let a=this._inflate[o];if(a){this._inflate.close(),this._inflate=null,c(a);return}let e=f.concat(this._inflate[n],this._inflate[l]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[l]=0,this._inflate[n]=[],b&&this.params[`${d}_no_context_takeover`]&&this._inflate.reset()),c(null,e)})}_compress(a,b,c){let d=this._isServer?"server":"client";if(!this._deflate){let a=`${d}_max_window_bits`,b="number"!=typeof this.params[a]?e.Z_DEFAULT_WINDOWBITS:this.params[a];this._deflate=e.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:b}),this._deflate[l]=0,this._deflate[n]=[],this._deflate.on("data",p)}this._deflate[m]=c,this._deflate.write(a),this._deflate.flush(e.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let a=f.concat(this._deflate[n],this._deflate[l]);b&&(a=new i(a.buffer,a.byteOffset,a.length-4)),this._deflate[m]=null,this._deflate[l]=0,this._deflate[n]=[],b&&this.params[`${d}_no_context_takeover`]&&this._deflate.reset(),c(null,a)})}}},874,(a,b,c)=>{b.exports=a.x("buffer",()=>require("buffer"))},42673,(a,b,c)=>{"use strict";let{isUtf8:d}=a.r(874),{hasBlob:e}=a.r(63046);function f(a){let b=a.length,c=0;for(;c<b;)if((128&a[c])==0)c++;else if((224&a[c])==192){if(c+1===b||(192&a[c+1])!=128||(254&a[c])==192)return!1;c+=2}else if((240&a[c])==224){if(c+2>=b||(192&a[c+1])!=128||(192&a[c+2])!=128||224===a[c]&&(224&a[c+1])==128||237===a[c]&&(224&a[c+1])==160)return!1;c+=3}else{if((248&a[c])!=240||c+3>=b||(192&a[c+1])!=128||(192&a[c+2])!=128||(192&a[c+3])!=128||240===a[c]&&(240&a[c+1])==128||244===a[c]&&a[c+1]>143||a[c]>244)return!1;c+=4}return!0}if(b.exports={isBlob:function(a){return e&&"object"==typeof a&&"function"==typeof a.arrayBuffer&&"string"==typeof a.type&&"function"==typeof a.stream&&("Blob"===a[Symbol.toStringTag]||"File"===a[Symbol.toStringTag])},isValidStatusCode:function(a){return a>=1e3&&a<=1014&&1004!==a&&1005!==a&&1006!==a||a>=3e3&&a<=4999},isValidUTF8:f,tokenChars:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0]},d)b.exports.isValidUTF8=function(a){return a.length<24?f(a):d(a)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let a=(()=>{let a=Error("Cannot find module 'utf-8-validate'");throw a.code="MODULE_NOT_FOUND",a})();b.exports.isValidUTF8=function(b){return b.length<32?f(b):a(b)}}catch(a){}},28719,(a,b,c)=>{"use strict";let{Writable:d}=a.r(88947),e=a.r(31276),{BINARY_TYPES:f,EMPTY_BUFFER:g,kStatusCode:h,kWebSocket:i}=a.r(63046),{concat:j,toArrayBuffer:k,unmask:l}=a.r(40338),{isValidStatusCode:m,isValidUTF8:n}=a.r(42673),o=Buffer[Symbol.species];b.exports=class extends d{constructor(a={}){super(),this._allowSynchronousEvents=void 0===a.allowSynchronousEvents||a.allowSynchronousEvents,this._binaryType=a.binaryType||f[0],this._extensions=a.extensions||{},this._isServer=!!a.isServer,this._maxBufferedChunks=0|a.maxBufferedChunks,this._maxFragments=0|a.maxFragments,this._maxPayload=0|a.maxPayload,this._skipUTF8Validation=!!a.skipUTF8Validation,this[i]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._numFragments=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=0}_write(a,b,c){return 8===this._opcode&&0==this._state?c():this._maxBufferedChunks>0&&this._buffers.length>=this._maxBufferedChunks?void c(this.createError(RangeError,"Too many buffered chunks",!1,1008,"WS_ERR_TOO_MANY_BUFFERED_PARTS")):void(this._bufferedBytes+=a.length,this._buffers.push(a),this.startLoop(c))}consume(a){if(this._bufferedBytes-=a,a===this._buffers[0].length)return this._buffers.shift();if(a<this._buffers[0].length){let b=this._buffers[0];return this._buffers[0]=new o(b.buffer,b.byteOffset+a,b.length-a),new o(b.buffer,b.byteOffset,a)}let b=Buffer.allocUnsafe(a);do{let c=this._buffers[0],d=b.length-a;a>=c.length?b.set(this._buffers.shift(),d):(b.set(new Uint8Array(c.buffer,c.byteOffset,a),d),this._buffers[0]=new o(c.buffer,c.byteOffset+a,c.length-a)),a-=c.length}while(a>0)return b}startLoop(a){this._loop=!0;do switch(this._state){case 0:this.getInfo(a);break;case 1:this.getPayloadLength16(a);break;case 2:this.getPayloadLength64(a);break;case 3:this.getMask();break;case 4:this.getData(a);break;case 5:case 6:this._loop=!1;return}while(this._loop)this._errored||a()}getInfo(a){if(this._bufferedBytes<2){this._loop=!1;return}let b=this.consume(2);if((48&b[0])!=0)return void a(this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3"));let c=(64&b[0])==64;if(c&&!this._extensions[e.extensionName])return void a(this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1"));if(this._fin=(128&b[0])==128,this._opcode=15&b[0],this._payloadLength=127&b[1],0===this._opcode){if(c)return void a(this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1"));if(!this._fragmented)return void a(this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE"));this._opcode=this._fragmented}else if(1===this._opcode||2===this._opcode){if(this._fragmented)return void a(this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE"));this._compressed=c}else{if(!(this._opcode>7)||!(this._opcode<11))return void a(this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE"));if(!this._fin)return void a(this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN"));if(c)return void a(this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1"));if(this._payloadLength>125||8===this._opcode&&1===this._payloadLength)return void a(this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH"))}if(this._fin||this._fragmented||(this._fragmented=this._opcode),this._masked=(128&b[1])==128,this._isServer){if(!this._masked)return void a(this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK"))}else if(this._masked)return void a(this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK"));126===this._payloadLength?this._state=1:127===this._payloadLength?this._state=2:this.haveLength(a)}getPayloadLength16(a){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(a)}getPayloadLength64(a){if(this._bufferedBytes<8){this._loop=!1;return}let b=this.consume(8),c=b.readUInt32BE(0);c>2097151?a(this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH")):(this._payloadLength=0x100000000*c+b.readUInt32BE(4),this.haveLength(a))}haveLength(a){this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)?a(this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH")):this._masked?this._state=3:this._state=4}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=4}getData(a){let b=g;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}b=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!=0&&l(b,this._mask)}if(this._opcode>7)return void this.controlMessage(b,a);if(this._maxFragments>0&&++this._numFragments>this._maxFragments)return void a(this.createError(RangeError,"Too many message fragments",!1,1008,"WS_ERR_TOO_MANY_BUFFERED_PARTS"));if(this._compressed){this._state=5,this.decompress(b,a);return}b.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(b)),this.dataMessage(a)}decompress(a,b){this._extensions[e.extensionName].decompress(a,this._fin,(a,c)=>{if(a)return b(a);if(c.length){if(this._messageLength+=c.length,this._messageLength>this._maxPayload&&this._maxPayload>0)return void b(this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH"));this._fragments.push(c)}this.dataMessage(b),0===this._state&&this.startLoop(b)})}dataMessage(a){if(!this._fin){this._state=0;return}let b=this._messageLength,c=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._numFragments=0,this._fragments=[],2===this._opcode){let d;d="nodebuffer"===this._binaryType?j(c,b):"arraybuffer"===this._binaryType?k(j(c,b)):"blob"===this._binaryType?new Blob(c):c,this._allowSynchronousEvents?(this.emit("message",d,!0),this._state=0):(this._state=6,setImmediate(()=>{this.emit("message",d,!0),this._state=0,this.startLoop(a)}))}else{let d=j(c,b);if(!this._skipUTF8Validation&&!n(d))return void a(this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8"));5===this._state||this._allowSynchronousEvents?(this.emit("message",d,!1),this._state=0):(this._state=6,setImmediate(()=>{this.emit("message",d,!1),this._state=0,this.startLoop(a)}))}}controlMessage(a,b){if(8===this._opcode){if(0===a.length)this._loop=!1,this.emit("conclude",1005,g),this.end();else{let c=a.readUInt16BE(0);if(!m(c))return void b(this.createError(RangeError,`invalid status code ${c}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE"));let d=new o(a.buffer,a.byteOffset+2,a.length-2);if(!this._skipUTF8Validation&&!n(d))return void b(this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8"));this._loop=!1,this.emit("conclude",c,d),this.end()}this._state=0;return}this._allowSynchronousEvents?(this.emit(9===this._opcode?"ping":"pong",a),this._state=0):(this._state=6,setImmediate(()=>{this.emit(9===this._opcode?"ping":"pong",a),this._state=0,this.startLoop(b)}))}createError(a,b,c,d,e){this._loop=!1,this._errored=!0;let f=new a(c?`Invalid WebSocket frame: ${b}`:b);return Error.captureStackTrace(f,this.createError),f.code=e,f[h]=d,f}}},63349,(a,b,c)=>{"use strict";let d,{Duplex:e}=a.r(88947),{randomFillSync:f}=a.r(54799),{types:{isUint8Array:g}}=a.r(24361),h=a.r(31276),{EMPTY_BUFFER:i,kWebSocket:j,NOOP:k}=a.r(63046),{isBlob:l,isValidStatusCode:m}=a.r(42673),{mask:n,toBuffer:o}=a.r(40338),p=Symbol("kByteLength"),q=Buffer.alloc(4),r=8192;class s{constructor(a,b,c){this._extensions=b||{},c&&(this._generateMask=c,this._maskBuffer=Buffer.alloc(4)),this._socket=a,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=0,this.onerror=k,this[j]=void 0}static frame(a,b){let c,e,g=!1,h=2,i=!1;b.mask&&(c=b.maskBuffer||q,b.generateMask?b.generateMask(c):(8192===r&&(void 0===d&&(d=Buffer.alloc(8192)),f(d,0,8192),r=0),c[0]=d[r++],c[1]=d[r++],c[2]=d[r++],c[3]=d[r++]),i=(c[0]|c[1]|c[2]|c[3])==0,h=6),"string"==typeof a?e=(!b.mask||i)&&void 0!==b[p]?b[p]:(a=Buffer.from(a)).length:(e=a.length,g=b.mask&&b.readOnly&&!i);let j=e;e>=65536?(h+=8,j=127):e>125&&(h+=2,j=126);let k=Buffer.allocUnsafe(g?e+h:h);return(k[0]=b.fin?128|b.opcode:b.opcode,b.rsv1&&(k[0]|=64),k[1]=j,126===j?k.writeUInt16BE(e,2):127===j&&(k[2]=k[3]=0,k.writeUIntBE(e,4,6)),b.mask)?(k[1]|=128,k[h-4]=c[0],k[h-3]=c[1],k[h-2]=c[2],k[h-1]=c[3],i)?[k,a]:g?(n(a,c,k,h,e),[k]):(n(a,c,a,0,e),[k,a]):[k,a]}close(a,b,c,d){let e;if(void 0===a)e=i;else if("number"==typeof a&&m(a))if(void 0!==b&&b.length){let c=Buffer.byteLength(b);if(c>123)throw RangeError("The message must not be greater than 123 bytes");if((e=Buffer.allocUnsafe(2+c)).writeUInt16BE(a,0),"string"==typeof b)e.write(b,2);else if(g(b))e.set(b,2);else throw TypeError("Second argument must be a string or a Uint8Array")}else(e=Buffer.allocUnsafe(2)).writeUInt16BE(a,0);else throw TypeError("First argument must be a valid error code number");let f={[p]:e.length,fin:!0,generateMask:this._generateMask,mask:c,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};0!==this._state?this.enqueue([this.dispatch,e,!1,f,d]):this.sendFrame(s.frame(e,f),d)}ping(a,b,c){let d,e;if("string"==typeof a?(d=Buffer.byteLength(a),e=!1):l(a)?(d=a.size,e=!1):(d=(a=o(a)).length,e=o.readOnly),d>125)throw RangeError("The data size must not be greater than 125 bytes");let f={[p]:d,fin:!0,generateMask:this._generateMask,mask:b,maskBuffer:this._maskBuffer,opcode:9,readOnly:e,rsv1:!1};l(a)?0!==this._state?this.enqueue([this.getBlobData,a,!1,f,c]):this.getBlobData(a,!1,f,c):0!==this._state?this.enqueue([this.dispatch,a,!1,f,c]):this.sendFrame(s.frame(a,f),c)}pong(a,b,c){let d,e;if("string"==typeof a?(d=Buffer.byteLength(a),e=!1):l(a)?(d=a.size,e=!1):(d=(a=o(a)).length,e=o.readOnly),d>125)throw RangeError("The data size must not be greater than 125 bytes");let f={[p]:d,fin:!0,generateMask:this._generateMask,mask:b,maskBuffer:this._maskBuffer,opcode:10,readOnly:e,rsv1:!1};l(a)?0!==this._state?this.enqueue([this.getBlobData,a,!1,f,c]):this.getBlobData(a,!1,f,c):0!==this._state?this.enqueue([this.dispatch,a,!1,f,c]):this.sendFrame(s.frame(a,f),c)}send(a,b,c){let d,e,f=this._extensions[h.extensionName],g=b.binary?2:1,i=b.compress;"string"==typeof a?(d=Buffer.byteLength(a),e=!1):l(a)?(d=a.size,e=!1):(d=(a=o(a)).length,e=o.readOnly),this._firstFragment?(this._firstFragment=!1,i&&f&&f.params[f._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(i=d>=f._threshold),this._compress=i):(i=!1,g=0),b.fin&&(this._firstFragment=!0);let j={[p]:d,fin:b.fin,generateMask:this._generateMask,mask:b.mask,maskBuffer:this._maskBuffer,opcode:g,readOnly:e,rsv1:i};l(a)?0!==this._state?this.enqueue([this.getBlobData,a,this._compress,j,c]):this.getBlobData(a,this._compress,j,c):0!==this._state?this.enqueue([this.dispatch,a,this._compress,j,c]):this.dispatch(a,this._compress,j,c)}getBlobData(a,b,c,d){this._bufferedBytes+=c[p],this._state=2,a.arrayBuffer().then(a=>{if(this._socket.destroyed){let a=Error("The socket was closed while the blob was being read");process.nextTick(t,this,a,d);return}this._bufferedBytes-=c[p];let e=o(a);b?this.dispatch(e,b,c,d):(this._state=0,this.sendFrame(s.frame(e,c),d),this.dequeue())}).catch(a=>{process.nextTick(u,this,a,d)})}dispatch(a,b,c,d){if(!b)return void this.sendFrame(s.frame(a,c),d);let e=this._extensions[h.extensionName];this._bufferedBytes+=c[p],this._state=1,e.compress(a,c.fin,(a,b)=>{this._socket.destroyed?t(this,Error("The socket was closed while data was being compressed"),d):(this._bufferedBytes-=c[p],this._state=0,c.readOnly=!1,this.sendFrame(s.frame(b,c),d),this.dequeue())})}dequeue(){for(;0===this._state&&this._queue.length;){let a=this._queue.shift();this._bufferedBytes-=a[3][p],Reflect.apply(a[0],this,a.slice(1))}}enqueue(a){this._bufferedBytes+=a[3][p],this._queue.push(a)}sendFrame(a,b){2===a.length?(this._socket.cork(),this._socket.write(a[0]),this._socket.write(a[1],b),this._socket.uncork()):this._socket.write(a[0],b)}}function t(a,b,c){"function"==typeof c&&c(b);for(let c=0;c<a._queue.length;c++){let d=a._queue[c],e=d[d.length-1];"function"==typeof e&&e(b)}}function u(a,b,c){t(a,b,c),a.onerror(b)}b.exports=s},25841,(a,b,c)=>{"use strict";let{kForOnEventAttribute:d,kListener:e}=a.r(63046),f=Symbol("kCode"),g=Symbol("kData"),h=Symbol("kError"),i=Symbol("kMessage"),j=Symbol("kReason"),k=Symbol("kTarget"),l=Symbol("kType"),m=Symbol("kWasClean");class n{constructor(a){this[k]=null,this[l]=a}get target(){return this[k]}get type(){return this[l]}}Object.defineProperty(n.prototype,"target",{enumerable:!0}),Object.defineProperty(n.prototype,"type",{enumerable:!0});class o extends n{constructor(a,b={}){super(a),this[f]=void 0===b.code?0:b.code,this[j]=void 0===b.reason?"":b.reason,this[m]=void 0!==b.wasClean&&b.wasClean}get code(){return this[f]}get reason(){return this[j]}get wasClean(){return this[m]}}Object.defineProperty(o.prototype,"code",{enumerable:!0}),Object.defineProperty(o.prototype,"reason",{enumerable:!0}),Object.defineProperty(o.prototype,"wasClean",{enumerable:!0});class p extends n{constructor(a,b={}){super(a),this[h]=void 0===b.error?null:b.error,this[i]=void 0===b.message?"":b.message}get error(){return this[h]}get message(){return this[i]}}Object.defineProperty(p.prototype,"error",{enumerable:!0}),Object.defineProperty(p.prototype,"message",{enumerable:!0});class q extends n{constructor(a,b={}){super(a),this[g]=void 0===b.data?null:b.data}get data(){return this[g]}}function r(a,b,c){"object"==typeof a&&a.handleEvent?a.handleEvent.call(a,c):a.call(b,c)}Object.defineProperty(q.prototype,"data",{enumerable:!0}),b.exports={CloseEvent:o,ErrorEvent:p,Event:n,EventTarget:{addEventListener(a,b,c={}){let f;for(let f of this.listeners(a))if(!c[d]&&f[e]===b&&!f[d])return;if("message"===a)f=function(a,c){let d=new q("message",{data:c?a:a.toString()});d[k]=this,r(b,this,d)};else if("close"===a)f=function(a,c){let d=new o("close",{code:a,reason:c.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});d[k]=this,r(b,this,d)};else if("error"===a)f=function(a){let c=new p("error",{error:a,message:a.message});c[k]=this,r(b,this,c)};else{if("open"!==a)return;f=function(){let a=new n("open");a[k]=this,r(b,this,a)}}f[d]=!!c[d],f[e]=b,c.once?this.once(a,f):this.on(a,f)},removeEventListener(a,b){for(let c of this.listeners(a))if(c[e]===b&&!c[d]){this.removeListener(a,c);break}}},MessageEvent:q}},15251,(a,b,c)=>{"use strict";let{tokenChars:d}=a.r(42673);function e(a,b,c){void 0===a[b]?a[b]=[c]:a[b].push(c)}b.exports={format:function(a){return Object.keys(a).map(b=>{let c=a[b];return Array.isArray(c)||(c=[c]),c.map(a=>[b].concat(Object.keys(a).map(b=>{let c=a[b];return Array.isArray(c)||(c=[c]),c.map(a=>!0===a?b:`${b}=${a}`).join("; ")})).join("; ")).join(", ")}).join(", ")},parse:function(a){let b,c,f=Object.create(null),g=Object.create(null),h=!1,i=!1,j=!1,k=-1,l=-1,m=-1,n=0;for(;n<a.length;n++)if(l=a.charCodeAt(n),void 0===b)if(-1===m&&1===d[l])-1===k&&(k=n);else if(0!==n&&(32===l||9===l))-1===m&&-1!==k&&(m=n);else if(59===l||44===l){if(-1===k)throw SyntaxError(`Unexpected character at index ${n}`);-1===m&&(m=n);let c=a.slice(k,m);44===l?(e(f,c,g),g=Object.create(null)):b=c,k=m=-1}else throw SyntaxError(`Unexpected character at index ${n}`);else if(void 0===c)if(-1===m&&1===d[l])-1===k&&(k=n);else if(32===l||9===l)-1===m&&-1!==k&&(m=n);else if(59===l||44===l){if(-1===k)throw SyntaxError(`Unexpected character at index ${n}`);-1===m&&(m=n),e(g,a.slice(k,m),!0),44===l&&(e(f,b,g),g=Object.create(null),b=void 0),k=m=-1}else if(61===l&&-1!==k&&-1===m)c=a.slice(k,n),k=m=-1;else throw SyntaxError(`Unexpected character at index ${n}`);else if(i){if(1!==d[l])throw SyntaxError(`Unexpected character at index ${n}`);-1===k?k=n:h||(h=!0),i=!1}else if(j)if(1===d[l])-1===k&&(k=n);else if(34===l&&-1!==k)j=!1,m=n;else if(92===l)i=!0;else throw SyntaxError(`Unexpected character at index ${n}`);else if(34===l&&61===a.charCodeAt(n-1))j=!0;else if(-1===m&&1===d[l])-1===k&&(k=n);else if(-1!==k&&(32===l||9===l))-1===m&&(m=n);else if(59===l||44===l){if(-1===k)throw SyntaxError(`Unexpected character at index ${n}`);-1===m&&(m=n);let d=a.slice(k,m);h&&(d=d.replace(/\\/g,""),h=!1),e(g,c,d),44===l&&(e(f,b,g),g=Object.create(null),b=void 0),c=void 0,k=m=-1}else throw SyntaxError(`Unexpected character at index ${n}`);if(-1===k||j||32===l||9===l)throw SyntaxError("Unexpected end of input");-1===m&&(m=n);let o=a.slice(k,m);return void 0===b?e(f,o,g):(void 0===c?e(g,o,!0):h?e(g,c,o.replace(/\\/g,"")):e(g,c,o),e(f,b,g)),f}}},50842,(a,b,c)=>{"use strict";let d=a.r(27699),e=a.r(24836),f=a.r(21517),g=a.r(4446),h=a.r(55004),{randomBytes:i,createHash:j}=a.r(54799),{Duplex:k,Readable:l}=a.r(88947),{URL:m}=a.r(92509),n=a.r(31276),o=a.r(28719),p=a.r(63349),{isBlob:q}=a.r(42673),{BINARY_TYPES:r,CLOSE_TIMEOUT:s,EMPTY_BUFFER:t,GUID:u,kForOnEventAttribute:v,kListener:w,kStatusCode:x,kWebSocket:y,NOOP:z}=a.r(63046),{EventTarget:{addEventListener:A,removeEventListener:B}}=a.r(25841),{format:C,parse:D}=a.r(15251),{toBuffer:E}=a.r(40338),F=Symbol("kAborted"),G=[8,13],H=["CONNECTING","OPEN","CLOSING","CLOSED"],I=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class J extends d{constructor(a,b,c){super(),this._binaryType=r[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=t,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=J.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,null!==a?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,void 0===b?b=[]:Array.isArray(b)||("object"==typeof b&&null!==b?(c=b,b=[]):b=[b]),function a(b,c,d,g){let h,k,l,o,p={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:s,protocolVersion:G[1],maxBufferedChunks:262144,maxFragments:16384,maxPayload:0x6400000,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...g,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(b._autoPong=p.autoPong,b._closeTimeout=p.closeTimeout,!G.includes(p.protocolVersion))throw RangeError(`Unsupported protocol version: ${p.protocolVersion} (supported versions: ${G.join(", ")})`);if(c instanceof m)h=c;else try{h=new m(c)}catch{throw SyntaxError(`Invalid URL: ${c}`)}"http:"===h.protocol?h.protocol="ws:":"https:"===h.protocol&&(h.protocol="wss:"),b._url=h.href;let q="wss:"===h.protocol,r="ws+unix:"===h.protocol;if("ws:"===h.protocol||q||r?r&&!h.pathname?k="The URL's pathname is empty":h.hash&&(k="The URL contains a fragment identifier"):k='The URL\'s protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"',k){let a=SyntaxError(k);if(0!==b._redirects)return void K(b,a);throw a}let t=q?443:80,v=i(16).toString("base64"),w=q?e.request:f.request,x=new Set;if(p.createConnection=p.createConnection||(q?M:L),p.defaultPort=p.defaultPort||t,p.port=h.port||t,p.host=h.hostname.startsWith("[")?h.hostname.slice(1,-1):h.hostname,p.headers={...p.headers,"Sec-WebSocket-Version":p.protocolVersion,"Sec-WebSocket-Key":v,Connection:"Upgrade",Upgrade:"websocket"},p.path=h.pathname+h.search,p.timeout=p.handshakeTimeout,p.perMessageDeflate&&(l=new n({...p.perMessageDeflate,isServer:!1,maxPayload:p.maxPayload}),p.headers["Sec-WebSocket-Extensions"]=C({[n.extensionName]:l.offer()})),d.length){for(let a of d){if("string"!=typeof a||!I.test(a)||x.has(a))throw SyntaxError("An invalid or duplicated subprotocol was specified");x.add(a)}p.headers["Sec-WebSocket-Protocol"]=d.join(",")}if(p.origin&&(p.protocolVersion<13?p.headers["Sec-WebSocket-Origin"]=p.origin:p.headers.Origin=p.origin),(h.username||h.password)&&(p.auth=`${h.username}:${h.password}`),r){let a=p.path.split(":");p.socketPath=a[0],p.path=a[1]}if(p.followRedirects){if(0===b._redirects){b._originalIpc=r,b._originalSecure=q,b._originalHostOrSocketPath=r?p.socketPath:h.host;let a=g&&g.headers;if(g={...g,headers:{}},a)for(let[b,c]of Object.entries(a))g.headers[b.toLowerCase()]=c}else if(0===b.listenerCount("redirect")){let a=r?!!b._originalIpc&&p.socketPath===b._originalHostOrSocketPath:!b._originalIpc&&h.host===b._originalHostOrSocketPath;a&&(!b._originalSecure||q)||(delete p.headers.authorization,delete p.headers.cookie,a||delete p.headers.host,p.auth=void 0)}p.auth&&!g.headers.authorization&&(g.headers.authorization="Basic "+Buffer.from(p.auth).toString("base64")),o=b._req=w(p),b._redirects&&b.emit("redirect",b.url,o)}else o=b._req=w(p);p.timeout&&o.on("timeout",()=>{N(b,o,"Opening handshake has timed out")}),o.on("error",a=>{null===o||o[F]||(o=b._req=null,K(b,a))}),o.on("response",e=>{let f=e.headers.location,h=e.statusCode;if(f&&p.followRedirects&&h>=300&&h<400){let e;if(++b._redirects>p.maxRedirects)return void N(b,o,"Maximum redirects exceeded");o.abort();try{e=new m(f,c)}catch(a){K(b,SyntaxError(`Invalid URL: ${f}`));return}a(b,e,d,g)}else b.emit("unexpected-response",o,e)||N(b,o,`Unexpected server response: ${e.statusCode}`)}),o.on("upgrade",(a,c,d)=>{let e;if(b.emit("upgrade",a),b.readyState!==J.CONNECTING)return;o=b._req=null;let f=a.headers.upgrade;if(void 0===f||"websocket"!==f.toLowerCase())return void N(b,c,"Invalid Upgrade header");let g=j("sha1").update(v+u).digest("base64");if(a.headers["sec-websocket-accept"]!==g)return void N(b,c,"Invalid Sec-WebSocket-Accept header");let h=a.headers["sec-websocket-protocol"];if(void 0!==h?x.size?x.has(h)||(e="Server sent an invalid subprotocol"):e="Server sent a subprotocol but none was requested":x.size&&(e="Server sent no subprotocol"),e)return void N(b,c,e);h&&(b._protocol=h);let i=a.headers["sec-websocket-extensions"];if(void 0!==i){let a;if(!l)return void N(b,c,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");try{a=D(i)}catch(a){N(b,c,"Invalid Sec-WebSocket-Extensions header");return}let d=Object.keys(a);if(1!==d.length||d[0]!==n.extensionName)return void N(b,c,"Server indicated an extension that was not requested");try{l.accept(a[n.extensionName])}catch(a){N(b,c,"Invalid Sec-WebSocket-Extensions header");return}b._extensions[n.extensionName]=l}b.setSocket(c,d,{allowSynchronousEvents:p.allowSynchronousEvents,generateMask:p.generateMask,maxBufferedChunks:p.maxBufferedChunks,maxFragments:p.maxFragments,maxPayload:p.maxPayload,skipUTF8Validation:p.skipUTF8Validation})}),p.finishRequest?p.finishRequest(o,b):o.end()}(this,a,b,c)):(this._autoPong=c.autoPong,this._closeTimeout=c.closeTimeout,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(a){r.includes(a)&&(this._binaryType=a,this._receiver&&(this._receiver._binaryType=a))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(a,b,c){let d=new o({allowSynchronousEvents:c.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxBufferedChunks:c.maxBufferedChunks,maxFragments:c.maxFragments,maxPayload:c.maxPayload,skipUTF8Validation:c.skipUTF8Validation}),e=new p(a,this._extensions,c.generateMask);this._receiver=d,this._sender=e,this._socket=a,d[y]=this,e[y]=this,a[y]=this,d.on("conclude",P),d.on("drain",Q),d.on("error",R),d.on("message",T),d.on("ping",U),d.on("pong",V),e.onerror=X,a.setTimeout&&a.setTimeout(0),a.setNoDelay&&a.setNoDelay(),b.length>0&&a.unshift(b),a.on("close",Z),a.on("data",$),a.on("end",_),a.on("error",aa),this._readyState=J.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=J.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[n.extensionName]&&this._extensions[n.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=J.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(a,b){if(this.readyState!==J.CLOSED){if(this.readyState===J.CONNECTING)return void N(this,this._req,"WebSocket was closed before the connection was established");if(this.readyState===J.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=J.CLOSING,this._sender.close(a,b,!this._isServer,a=>{!a&&(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),Y(this)}}pause(){this.readyState!==J.CONNECTING&&this.readyState!==J.CLOSED&&(this._paused=!0,this._socket.pause())}ping(a,b,c){if(this.readyState===J.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");("function"==typeof a?(c=a,a=b=void 0):"function"==typeof b&&(c=b,b=void 0),"number"==typeof a&&(a=a.toString()),this.readyState!==J.OPEN)?O(this,a,c):(void 0===b&&(b=!this._isServer),this._sender.ping(a||t,b,c))}pong(a,b,c){if(this.readyState===J.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");("function"==typeof a?(c=a,a=b=void 0):"function"==typeof b&&(c=b,b=void 0),"number"==typeof a&&(a=a.toString()),this.readyState!==J.OPEN)?O(this,a,c):(void 0===b&&(b=!this._isServer),this._sender.pong(a||t,b,c))}resume(){this.readyState!==J.CONNECTING&&this.readyState!==J.CLOSED&&(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(a,b,c){if(this.readyState===J.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if("function"==typeof b&&(c=b,b={}),"number"==typeof a&&(a=a.toString()),this.readyState!==J.OPEN)return void O(this,a,c);let d={binary:"string"!=typeof a,mask:!this._isServer,compress:!0,fin:!0,...b};this._extensions[n.extensionName]||(d.compress=!1),this._sender.send(a||t,d,c)}terminate(){if(this.readyState!==J.CLOSED){if(this.readyState===J.CONNECTING)return void N(this,this._req,"WebSocket was closed before the connection was established");this._socket&&(this._readyState=J.CLOSING,this._socket.destroy())}}}function K(a,b){a._readyState=J.CLOSING,a._errorEmitted=!0,a.emit("error",b),a.emitClose()}function L(a){return a.path=a.socketPath,g.connect(a)}function M(a){return a.path=void 0,a.servername||""===a.servername||(a.servername=g.isIP(a.host)?"":a.host),h.connect(a)}function N(a,b,c){a._readyState=J.CLOSING;let d=Error(c);Error.captureStackTrace(d,N),b.setHeader?(b[F]=!0,b.abort(),b.socket&&!b.socket.destroyed&&b.socket.destroy(),process.nextTick(K,a,d)):(b.destroy(d),b.once("error",a.emit.bind(a,"error")),b.once("close",a.emitClose.bind(a)))}function O(a,b,c){if(b){let c=q(b)?b.size:E(b).length;a._socket?a._sender._bufferedBytes+=c:a._bufferedAmount+=c}if(c){let b=Error(`WebSocket is not open: readyState ${a.readyState} (${H[a.readyState]})`);process.nextTick(c,b)}}function P(a,b){let c=this[y];c._closeFrameReceived=!0,c._closeMessage=b,c._closeCode=a,void 0!==c._socket[y]&&(c._socket.removeListener("data",$),process.nextTick(W,c._socket),1005===a?c.close():c.close(a,b))}function Q(){let a=this[y];a.isPaused||a._socket.resume()}function R(a){let b=this[y];void 0!==b._socket[y]&&(b._socket.removeListener("data",$),process.nextTick(W,b._socket),b.close(a[x])),b._errorEmitted||(b._errorEmitted=!0,b.emit("error",a))}function S(){this[y].emitClose()}function T(a,b){this[y].emit("message",a,b)}function U(a){let b=this[y];b._autoPong&&b.pong(a,!this._isServer,z),b.emit("ping",a)}function V(a){this[y].emit("pong",a)}function W(a){a.resume()}function X(a){let b=this[y];b.readyState!==J.CLOSED&&(b.readyState===J.OPEN&&(b._readyState=J.CLOSING,Y(b)),this._socket.end(),b._errorEmitted||(b._errorEmitted=!0,b.emit("error",a)))}function Y(a){a._closeTimer=setTimeout(a._socket.destroy.bind(a._socket),a._closeTimeout)}function Z(){let a=this[y];if(this.removeListener("close",Z),this.removeListener("data",$),this.removeListener("end",_),a._readyState=J.CLOSING,!this._readableState.endEmitted&&!a._closeFrameReceived&&!a._receiver._writableState.errorEmitted&&0!==this._readableState.length){let b=this.read(this._readableState.length);a._receiver.write(b)}a._receiver.end(),this[y]=void 0,clearTimeout(a._closeTimer),a._receiver._writableState.finished||a._receiver._writableState.errorEmitted?a.emitClose():(a._receiver.on("error",S),a._receiver.on("finish",S))}function $(a){this[y]._receiver.write(a)||this.pause()}function _(){let a=this[y];a._readyState=J.CLOSING,a._receiver.end(),this.end()}function aa(){let a=this[y];this.removeListener("error",aa),this.on("error",z),a&&(a._readyState=J.CLOSING,this.destroy())}Object.defineProperty(J,"CONNECTING",{enumerable:!0,value:H.indexOf("CONNECTING")}),Object.defineProperty(J.prototype,"CONNECTING",{enumerable:!0,value:H.indexOf("CONNECTING")}),Object.defineProperty(J,"OPEN",{enumerable:!0,value:H.indexOf("OPEN")}),Object.defineProperty(J.prototype,"OPEN",{enumerable:!0,value:H.indexOf("OPEN")}),Object.defineProperty(J,"CLOSING",{enumerable:!0,value:H.indexOf("CLOSING")}),Object.defineProperty(J.prototype,"CLOSING",{enumerable:!0,value:H.indexOf("CLOSING")}),Object.defineProperty(J,"CLOSED",{enumerable:!0,value:H.indexOf("CLOSED")}),Object.defineProperty(J.prototype,"CLOSED",{enumerable:!0,value:H.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(a=>{Object.defineProperty(J.prototype,a,{enumerable:!0})}),["open","error","close","message"].forEach(a=>{Object.defineProperty(J.prototype,`on${a}`,{enumerable:!0,get(){for(let b of this.listeners(a))if(b[v])return b[w];return null},set(b){for(let b of this.listeners(a))if(b[v]){this.removeListener(a,b);break}"function"==typeof b&&this.addEventListener(a,b,{[v]:!0})}})}),J.prototype.addEventListener=A,J.prototype.removeEventListener=B,b.exports=J},31594,(a,b,c)=>{"use strict";a.r(50842);let{Duplex:d}=a.r(88947);function e(a){a.emit("close")}function f(){!this.destroyed&&this._writableState.finished&&this.destroy()}function g(a){this.removeListener("error",g),this.destroy(),0===this.listenerCount("error")&&this.emit("error",a)}b.exports=function(a,b){let c=!0,h=new d({...b,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return a.on("message",function(b,c){let d=!c&&h._readableState.objectMode?b.toString():b;h.push(d)||a.pause()}),a.once("error",function(a){h.destroyed||(c=!1,h.destroy(a))}),a.once("close",function(){h.destroyed||h.push(null)}),h._destroy=function(b,d){if(a.readyState===a.CLOSED){d(b),process.nextTick(e,h);return}let f=!1;a.once("error",function(a){f=!0,d(a)}),a.once("close",function(){f||d(b),process.nextTick(e,h)}),c&&a.terminate()},h._final=function(b){a.readyState===a.CONNECTING?a.once("open",function(){h._final(b)}):null!==a._socket&&(a._socket._writableState.finished?(b(),h._readableState.endEmitted&&h.destroy()):(a._socket.once("finish",function(){b()}),a.close()))},h._read=function(){a.isPaused&&a.resume()},h._write=function(b,c,d){a.readyState===a.CONNECTING?a.once("open",function(){h._write(b,c,d)}):a.send(b,d)},h.on("end",f),h.on("error",g),h}},54129,(a,b,c)=>{"use strict";let{tokenChars:d}=a.r(42673);b.exports={parse:function(a){let b=new Set,c=-1,e=-1,f=0;for(;f<a.length;f++){let g=a.charCodeAt(f);if(-1===e&&1===d[g])-1===c&&(c=f);else if(0!==f&&(32===g||9===g))-1===e&&-1!==c&&(e=f);else if(44===g){if(-1===c)throw SyntaxError(`Unexpected character at index ${f}`);-1===e&&(e=f);let d=a.slice(c,e);if(b.has(d))throw SyntaxError(`The "${d}" subprotocol is duplicated`);b.add(d),c=e=-1}else throw SyntaxError(`Unexpected character at index ${f}`)}if(-1===c||-1!==e)throw SyntaxError("Unexpected end of input");let g=a.slice(c,f);if(b.has(g))throw SyntaxError(`The "${g}" subprotocol is duplicated`);return b.add(g),b}}},36972,(a,b,c)=>{"use strict";let d=a.r(27699),e=a.r(21517),{Duplex:f}=a.r(88947),{createHash:g}=a.r(54799),h=a.r(15251),i=a.r(31276),j=a.r(54129),k=a.r(50842),{CLOSE_TIMEOUT:l,GUID:m,kWebSocket:n}=a.r(63046),o=/^[+/0-9A-Za-z]{22}==$/;function p(a){a._state=2,a.emit("close")}function q(){this.destroy()}function r(a,b,c,d){c=c||e.STATUS_CODES[b],d={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(c),...d},a.once("finish",a.destroy),a.end(`HTTP/1.1 ${b} ${e.STATUS_CODES[b]}\r
|
|
2
|
-
`+Object.keys(d).map(a=>`${a}: ${d[a]}`).join("\r\n")+"\r\n\r\n"+c)}function s(a,b,c,d,e,f){if(a.listenerCount("wsClientError")){let d=Error(e);Error.captureStackTrace(d,s),a.emit("wsClientError",d,c,b)}else r(c,d,e,f)}b.exports=class extends d{constructor(a,b){if(super(),null==(a={allowSynchronousEvents:!0,autoPong:!0,maxBufferedChunks:262144,maxFragments:16384,maxPayload:0x6400000,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:l,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:k,...a}).port&&!a.server&&!a.noServer||null!=a.port&&(a.server||a.noServer)||a.server&&a.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(null!=a.port?(this._server=e.createServer((a,b)=>{let c=e.STATUS_CODES[426];b.writeHead(426,{"Content-Length":c.length,"Content-Type":"text/plain"}),b.end(c)}),this._server.listen(a.port,a.host,a.backlog,b)):a.server&&(this._server=a.server),this._server){const a=this.emit.bind(this,"connection");this._removeListeners=function(a,b){for(let c of Object.keys(b))a.on(c,b[c]);return function(){for(let c of Object.keys(b))a.removeListener(c,b[c])}}(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(b,c,d)=>{this.handleUpgrade(b,c,d,a)}})}!0===a.perMessageDeflate&&(a.perMessageDeflate={}),a.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=a,this._state=0}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(a){if(2===this._state){a&&this.once("close",()=>{a(Error("The server is not running"))}),process.nextTick(p,this);return}if(a&&this.once("close",a),1!==this._state)if(this._state=1,this.options.noServer||this.options.server)this._server&&(this._removeListeners(),this._removeListeners=this._server=null),this.clients&&this.clients.size?this._shouldEmitClose=!0:process.nextTick(p,this);else{let a=this._server;this._removeListeners(),this._removeListeners=this._server=null,a.close(()=>{p(this)})}}shouldHandle(a){if(this.options.path){let b=a.url.indexOf("?");if((-1!==b?a.url.slice(0,b):a.url)!==this.options.path)return!1}return!0}handleUpgrade(a,b,c,d){b.on("error",q);let e=a.headers["sec-websocket-key"],f=a.headers.upgrade,g=+a.headers["sec-websocket-version"];if("GET"!==a.method)return void s(this,a,b,405,"Invalid HTTP method");if(void 0===f||"websocket"!==f.toLowerCase())return void s(this,a,b,400,"Invalid Upgrade header");if(void 0===e||!o.test(e))return void s(this,a,b,400,"Missing or invalid Sec-WebSocket-Key header");if(13!==g&&8!==g)return void s(this,a,b,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});if(!this.shouldHandle(a))return void r(b,400);let k=a.headers["sec-websocket-protocol"],l=new Set;if(void 0!==k)try{l=j.parse(k)}catch(c){s(this,a,b,400,"Invalid Sec-WebSocket-Protocol header");return}let m=a.headers["sec-websocket-extensions"],n={};if(this.options.perMessageDeflate&&void 0!==m){let c=new i({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let a=h.parse(m);a[i.extensionName]&&(c.accept(a[i.extensionName]),n[i.extensionName]=c)}catch(c){s(this,a,b,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let f={origin:a.headers[`${8===g?"sec-websocket-origin":"origin"}`],secure:!!(a.socket.authorized||a.socket.encrypted),req:a};if(2===this.options.verifyClient.length)return void this.options.verifyClient(f,(f,g,h,i)=>{if(!f)return r(b,g||401,h,i);this.completeUpgrade(n,e,l,a,b,c,d)});if(!this.options.verifyClient(f))return r(b,401)}this.completeUpgrade(n,e,l,a,b,c,d)}completeUpgrade(a,b,c,d,e,f,j){if(!e.readable||!e.writable)return e.destroy();if(e[n])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>0)return r(e,503);let k=g("sha1").update(b+m).digest("base64"),l=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${k}`],o=new this.options.WebSocket(null,void 0,this.options);if(c.size){let a=this.options.handleProtocols?this.options.handleProtocols(c,d):c.values().next().value;a&&(l.push(`Sec-WebSocket-Protocol: ${a}`),o._protocol=a)}if(a[i.extensionName]){let b=a[i.extensionName].params,c=h.format({[i.extensionName]:[b]});l.push(`Sec-WebSocket-Extensions: ${c}`),o._extensions=a}this.emit("headers",l,d),e.write(l.concat("\r\n").join("\r\n")),e.removeListener("error",q),o.setSocket(e,f,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxBufferedChunks:this.options.maxBufferedChunks,maxFragments:this.options.maxFragments,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients&&(this.clients.add(o),o.on("close",()=>{this.clients.delete(o),this._shouldEmitClose&&!this.clients.size&&process.nextTick(p,this)})),j(o,d)}}},95421,a=>{"use strict";let b,c,d,e;var f,g,h=a.i(56856),i=a.i(55132);function j(a){return JSON.parse(JSON.stringify(a))}function k(a,b){for(let c of a.states??[]){if(c.name===b)return a;let d=k(c,b);if(d)return d}return null}function l(a,b,c){let d=function a(b,c){if(b.name===c)return b;for(let d of b.states??[]){let b=a(d,c);if(b)return b}return null}(a,b);if(!d)throw Error(`applyPatchOps: ${c} references missing state "${b}"`);return d}function m(a,b,c){let d=function(a,b){for(let c of a.events){let a=c.events??[];for(let d=0;d<a.length;d++)if(a[d].id===b)return{source:c,event:a[d],index:d}}return null}(a,b);if(!d)throw Error(`applyPatchOps: ${c} references missing event "${b}"`);return d}function n(a,b){let c=j(a);for(let a of b)switch(a.op){case"settings.update":c.settings={...c.settings,...a.patch};break;case"state.add":{let b=null===a.parent?c.state:l(c.state,a.parent,"state.add");b.states||(b.states=[]);let d=a.index??b.states.length;b.states.splice(d,0,j(a.state));break}case"state.update":Object.assign(l(c.state,a.name,"state.update"),a.patch);break;case"state.remove":{if(c.state.name===a.name)throw Error(`applyPatchOps: cannot remove root state "${a.name}"`);let b=k(c.state,a.name);if(!b||!b.states)throw Error(`applyPatchOps: state.remove references missing state "${a.name}"`);let d=b.states.findIndex(b=>b.name===a.name);if(d<0)throw Error(`applyPatchOps: state.remove references missing state "${a.name}"`);b.states.splice(d,1),0===b.states.length&&delete b.states;break}case"state.nest":{let b=l(c.state,a.child,"state.nest"),d=l(c.state,a.newParent,"state.nest"),e=k(c.state,a.child);if(!e||!e.states)throw Error(`applyPatchOps: state.nest cannot detach root or missing state "${a.child}"`);let f=e.states.findIndex(b=>b.name===a.child),[g]=e.states.splice(f,1);0===e.states.length&&delete e.states,d.states||(d.states=[]),d.states.push(g??j(b));break}case"eventSource.add":{let b=a.index??c.events.length;c.events.splice(b,0,j(a.source));break}case"eventSource.update":{let b=c.events[a.index];if(!b)throw Error(`applyPatchOps: eventSource.update index ${a.index} out of range`);c.events[a.index]={...b,...a.patch};break}case"eventSource.remove":if(!c.events[a.index])throw Error(`applyPatchOps: eventSource.remove index ${a.index} out of range`);c.events.splice(a.index,1);break;case"event.add":{let b=c.events[a.sourceIndex];if(!b)throw Error(`applyPatchOps: event.add sourceIndex ${a.sourceIndex} out of range`);b.events||(b.events=[]);let d=a.index??b.events.length;b.events.splice(d,0,j(a.event));break}case"event.update":Object.assign(m(c,a.id,"event.update").event,a.patch);break;case"event.remove":{let b=m(c,a.id,"event.remove");b.source.events.splice(b.index,1),0===b.source.events.length&&delete b.source.events;break}case"parameter.add":{let b=m(c,a.eventId,"parameter.add");b.event.parameters||(b.event.parameters=[]);let d=a.index??b.event.parameters.length;b.event.parameters.splice(d,0,j(a.parameter));break}case"parameter.update":{let b=m(c,a.eventId,"parameter.update").event.parameters??[];if(!b[a.index])throw Error(`applyPatchOps: parameter.update index ${a.index} out of range for event "${a.eventId}"`);b[a.index]={...b[a.index],...a.patch};break}case"parameter.remove":{let b=m(c,a.eventId,"parameter.remove"),d=b.event.parameters;if(!d||!d[a.index])throw Error(`applyPatchOps: parameter.remove index ${a.index} out of range for event "${a.eventId}"`);d.splice(a.index,1),0===d.length&&delete b.event.parameters;break}case"transition.add":{let b=l(c.state,a.state,"transition.add");b.transitions||(b.transitions=[]);let d=a.index??b.transitions.length;b.transitions.splice(d,0,j(a.transition));break}case"transition.update":{let b=l(c.state,a.state,"transition.update").transitions??[];if(!b[a.index])throw Error(`applyPatchOps: transition.update index ${a.index} out of range for state "${a.state}"`);b[a.index]={...b[a.index],...a.patch};break}case"transition.remove":{let b=l(c.state,a.state,"transition.remove"),d=b.transitions;if(!d||!d[a.index])throw Error(`applyPatchOps: transition.remove index ${a.index} out of range for state "${a.state}"`);d.splice(a.index,1),0===d.length&&delete b.transitions;break}case"action.add":{let b=l(c.state,a.state,"action.add"),d=b[a.hook]??(b[a.hook]={actions:[]}),e=a.index??d.actions.length;d.actions.splice(e,0,j(a.action));break}case"action.update":{let b=l(c.state,a.state,"action.update")[a.hook];if(!b||!b.actions[a.index])throw Error(`applyPatchOps: action.update index ${a.index} out of range for state "${a.state}" ${a.hook}`);b.actions[a.index]=j(a.action);break}case"action.remove":{let b=l(c.state,a.state,"action.remove"),d=b[a.hook];if(!d||!d.actions[a.index])throw Error(`applyPatchOps: action.remove index ${a.index} out of range for state "${a.state}" ${a.hook}`);d.actions.splice(a.index,1),0===d.actions.length&&delete b[a.hook];break}case"runtime.enter":case"runtime.exit":break;default:throw Error(`applyPatchOps: unknown op ${JSON.stringify(a)}`)}return c}function o(a){let b=[a];for(let c of a.states??[])b.push(...o(c));return b}function p(a){let b=new Map;b.set(a.name,null);let c=a=>{for(let d of a.states??[])b.set(d.name,a.name),c(d)};return c(a),b}function q(a,b){return JSON.stringify(a)===JSON.stringify(b)}function r(a,b,c,d,e){let f=Math.min(c.length,d.length);for(let g=0;g<f;g++)q(c[g],d[g])||e.push({op:"action.update",state:a,hook:b,index:g,action:d[g]});for(let c=f;c<d.length;c++)e.push({op:"action.add",state:a,hook:b,action:d[c],index:c});for(let f=c.length-1;f>=d.length;f--)e.push({op:"action.remove",state:a,hook:b,index:f})}function s(a){let b=0;for(let c=0;c<a.length;c++)b=Math.imul(b,31)+a.charCodeAt(c)|0;let c=(b%360+360)%360;return`hsl(${c}, 65%, 55%)`}let t={hSpacing:220,vSpacing:140,nodeWidth:160,nodeHeight:60,compositeWidth:300,compositeHeight:200,originX:100,originY:120,sweeps:2,includeRoot:!0},u=(a,b)=>`${a}\u0000${b}`;function v(a){let b=new Set,c=[];for(let d of a.states??[])b.has(d.name)||(b.add(d.name),c.push(d));return c}function w(a,b){let c=new Map(a.map(a=>[a,[]]));for(let a of b)c.get(a.from).push(a.to);return c}function x(a,b={}){let c={...t,...b},d="state"in a?a.state:a,e={};if(!d)return e;if(!function a(b,c,d,e,f){let g=v(b);if(0===g.length)return;let h=g.map(a=>a.name),i=new Map(g.map(a=>[a.name,a])),j=function(a){let b=new Set(a.map(a=>a.name)),c=new Set,d=[];for(let e of a)for(let a of e.transitions??[]){let f=a.nextState;if(!f||f===e.name||!b.has(f))continue;let g=u(e.name,f);c.has(g)||(c.add(g),d.push({from:e.name,to:f}))}return d}(g),k=function(a,b){let c=w(a,b),d=new Map(a.map(a=>[a,0])),e=new Set;for(let b of a){if(0!==d.get(b))continue;d.set(b,1);let a=[{node:b,i:0}];for(;a.length>0;){let b=a[a.length-1],f=c.get(b.node);if(b.i<f.length){let c=f[b.i++],g=d.get(c);1===g?e.add(u(b.node,c)):0===g&&(d.set(c,1),a.push({node:c,i:0}))}else d.set(b.node,2),a.pop()}}return e}(h,j),l=j.filter(a=>!k.has(u(a.from,a.to))),m=function(a,b){let c=w(a,b),d=new Map(a.map(a=>[a,0]));for(let a of b)d.set(a.to,(d.get(a.to)??0)+1);let e=new Map(a.map(a=>[a,0])),f=a.filter(a=>0===d.get(a));for(let a=0;a<f.length;a++){let b=f[a];for(let a of c.get(b)){e.set(a,Math.max(e.get(a),e.get(b)+1));let c=d.get(a)-1;d.set(a,c),0===c&&f.push(a)}}return e}(h,l),n=function(a,b,c){let d=new Map(a.map(a=>[a,[]]));for(let a of b)d.get(a.from).push(a.to),d.get(a.to).push(a.from);let e=new Set([c]),f=[c];for(;f.length>0;){let a=f.pop();for(let b of d.get(a)??[])e.has(b)||(e.add(b),f.push(b))}return e}(h,j,h[0]),o=0;for(let a of h)n.has(a)&&(o=Math.max(o,m.get(a)));for(let a of h)n.has(a)||m.set(a,m.get(a)+o+1);let p=Array.from({length:Math.max(...h.map(a=>m.get(a)))+1},()=>[]);for(let a of h)p[m.get(a)].push(a);!function(a,b,c){let d=new Map,e=new Map,f=(a,b,c)=>{let d=a.get(b);d?d.push(c):a.set(b,[c])};for(let a of b)f(d,a.to,a.from),f(e,a.from,a.to);let g=new Map,h=()=>{a.forEach(a=>a.forEach((a,b)=>g.set(a,b)))};h();let i=(a,b)=>{let c=a.map((a,c)=>{let d=(b.get(a)??[]).filter(a=>g.has(a));return{name:a,key:d.length?d.reduce((a,b)=>a+g.get(b),0)/d.length:c,i:c}});c.sort((a,b)=>a.key===b.key?a.i-b.i:a.key-b.key);for(let b=0;b<c.length;b++)a[b]=c[b].name};for(let b=0;b<c;b++){for(let b=1;b<a.length;b++)i(a[b],d),h();for(let b=a.length-2;b>=0;b--)i(a[b],e),h()}}(p,l,e.sweeps);let q=e.hSpacing-e.nodeWidth,r=e.vSpacing-e.nodeHeight,s=a=>Math.max(e.hSpacing,a+q),t=new Map(h.map(a=>{var b;return[a,(b=i.get(a),(b.states?.length??0)>0?{width:e.compositeWidth,height:e.compositeHeight}:{width:e.nodeWidth,height:e.nodeHeight})]})),x=p.map(a=>a.reduce((a,b)=>a+s(t.get(b).width),0)),y=c+Math.max(...x,0)/2,z=d;for(let b of(p.forEach((a,b)=>{let c=y-x[b]/2,d=e.nodeHeight;for(let b of a){let a=t.get(b),e=s(a.width);f[b]={x:Math.round(c+(e-a.width)/2),y:Math.round(z),width:a.width,height:a.height},c+=e,d=Math.max(d,a.height)}z+=d+r}),g)){if((b.states?.length??0)===0)continue;let c=f[b.name];a(b,c.x+20,c.y+40,e,f)}}(d,c.originX,c.originY,c,e),c.includeRoot){let a=v(d).map(a=>e[a.name]).filter(Boolean);if(0===a.length)e[d.name]={x:20,y:20,width:400,height:350};else{let b=Math.min(...a.map(a=>a.x)),c=Math.min(...a.map(a=>a.y)),f=Math.max(...a.map(a=>a.x+a.width)),g=Math.max(...a.map(a=>a.y+a.height));e[d.name]={x:Math.round(b-40),y:Math.round(c-40),width:Math.round(f-b+80),height:Math.round(g-c+80)}}}return e}let y=(a,b)=>a.length*b*.55,z=a=>`[${a.length>32?`${a.slice(0,31).trimEnd()}…`:a}]`,A=a=>({width:Math.max(56,Math.max(y(a.event,11),a.condition?y(z(a.condition),9):0)+16)+16*!!a.glyph,height:a.condition?28:18}),B=a=>({x:a.x+5,y:a.cy-12-3}),C=(a,b)=>a.x<b.x+b.width&&b.x<a.x+a.width&&a.y<b.y+b.height&&b.y<a.y+a.height,D={along:[.5,.36,.64,.24,.76,.14,.86],aside:[0,.6,-.6],across:[0,-1.3,1.3,-2.6,2.6]};function E(a,b,c={}){let{along:d,aside:e,across:f}={...D,...c},g=a.map((a,b)=>({label:a,i:b,width:A(a).width})).sort((a,b)=>a.width===b.width?a.i-b.i:b.width-a.width),h=[];for(let{label:a}of g){let{width:c,height:g}=A(a),i=8*!!a.glyph,j=null,k=1/0;a:for(let l of f)for(let f of e)for(let e of d){let d=a.at(e),m=d.x+f*c,n=d.y+l*g,o={x:m-c/2,y:n-18,width:c,height:g},p=[...h,...b].filter(a=>C(o,a)).length,q={...o,cx:m+i,cy:n,label:a};if(0===p){j=q;break a}p<k&&(k=p,j=q)}j&&h.push(j)}return h}let F=(a,b,c=2.2,d)=>({id:a,paths:b,strokeWidth:c,circles:d}),G=F("signal",["M3 12h10","m13 6 6 6-6 6Z"]),H=[{glyph:F("confirm",["m4 13 5.5 5.5L20 6"],2.4),words:["confirm","approve","accept","commit"]},{glyph:F("complete",["m8 12 3 3 5-6"],2.2,[{cx:12,cy:12,r:8.5}]),words:["complete","finish","done","close"]},{glyph:F("skip",["M4 17c0-6 4.5-9 9-9h6","m15 4 4.5 4-4.5 4"]),words:["skip","ignore","bypass"]},{glyph:F("flag",["M6 21V4","M6 4h12l-3 4.5 3 4.5H6Z"]),words:["flag","mark","revisit","review"]},{glyph:F("advance",["M4 6l8 6-8 6Z","M13 6l7 6-7 6Z"]),words:["advance","next","forward","step"]},{glyph:F("pause",["M9 5v14M15 5v14"],2.6),words:["pause","hold","suspend","stop"]},{glyph:F("play",["M7 4.5 19 12 7 19.5Z"]),words:["resume","start","begin","play","run"]},{glyph:F("clock",["M12 7.5V12l3.5 2.5"],2.2,[{cx:12,cy:12,r:8.5}]),words:["timeout","expire","tick","delay","after","elapse"]},{glyph:F("change",["M3 14c3-6 6-6 9 0s6 6 9 0"]),words:["change","update","edit","modify","set"]}];[...H.map(a=>a.glyph)];let I=a=>Math.round(100*a)/100;function J(a,b,c,d){return{p0:a,p1:b,p2:c,p3:d,path:`M ${I(a.x)} ${I(a.y)} C ${I(b.x)} ${I(b.y)}, ${I(c.x)} ${I(c.y)}, ${I(d.x)} ${I(d.y)}`,at:e=>{let f=1-e,g=f*f*f,h=3*f*f*e,i=3*f*e*e,j=e*e*e;return{x:g*a.x+h*b.x+i*c.x+j*d.x,y:g*a.y+h*b.y+i*c.y+j*d.y}}}}function K(a,b){let c=a.map(({from:a,to:c})=>{var d,e;return a===c?null:(d=b(a),(e=b(c)).y>=d.y+d.height?["bottom","top"]:e.y+e.height<=d.y?["top","bottom"]:e.x>=d.x+d.width?["right","left"]:e.x+e.width<=d.x?["left","right"]:["bottom","top"])}),d=new Map,e=(a,b,c)=>{let e=`${a}\0${b}`,f=d.get(e);f?f.push(c):d.set(e,[c])},f=(a,b)=>"top"===b||"bottom"===b?a.x+a.width/2:a.y+a.height/2;a.forEach((a,d)=>{let g=c[d];if(!g)return;let[h,i]=g;e(a.from,h,{edge:d,toward:f(b(a.to),h),role:"out"}),e(a.to,i,{edge:d,toward:f(b(a.from),i),role:"in"})});let g=new Map;for(let[a,c]of d){let[d,e]=a.split("\0"),f=b(d),h=[...c].sort((a,b)=>a.toward===b.toward?a.edge-b.edge:a.toward-b.toward);h.forEach((a,b)=>{g.set(`${a.edge}\0${a.role}`,function(a,b,c,d){let e="top"===b||"bottom"===b,f=e?a.width:a.height,g=e?a.x+a.width/2:a.y+a.height/2,h=d>1?Math.min(.72*f,40*(d-1)):0,i=d>1?g-h/2+h*c/(d-1):g;return"top"===b?{x:i,y:a.y}:"bottom"===b?{x:i,y:a.y+a.height}:"left"===b?{x:a.x,y:i}:{x:a.x+a.width,y:i}}(f,e,b,h.length))})}return a.map((a,d)=>{let e=c[d];if(!e){var f;let c,d,e;return c=(f=b(a.from)).x+f.width,d=f.y+.35*f.height,J({x:c,y:d},{x:c+44,y:d-12},{x:c+44,y:(e=f.y+.65*f.height)+12},{x:c,y:e})}let h=g.get(`${d}\0out`),i=g.get(`${d}\0in`);var j=e[0];if("top"===j||"bottom"===j){let a=(h.y+i.y)/2;return J(h,{x:h.x,y:a},{x:i.x,y:a},i)}let k=(h.x+i.x)/2;return J(h,{x:k,y:h.y},{x:k,y:i.y},i)})}let L={min:.2,max:2.5},M={x:0,y:0,scale:1};function N(a,b=L){return Number.isFinite(a)?Math.min(b.max,Math.max(b.min,a)):1}function O(a,b,c){return{x:a.x+b,y:a.y+c,scale:a.scale}}function P(a,b,c,d=L){return Q(a,a.scale*b,c,d)}function Q(a,b,c,d=L){let e=N(b,d);if(e===a.scale)return a;let f={x:(c.x-a.x)/a.scale,y:(c.y-a.y)/a.scale};return{x:c.x-f.x*e,y:c.y-f.y*e,scale:e}}function R(a,b,c,d={}){let e=d.padding??48,f=d.maxScale??1,g=d.limits??L;if(0===a.length||b<=0||c<=0)return{...M};let h=1/0,i=1/0,j=-1/0,k=-1/0;for(let b of a)h=Math.min(h,b.x),i=Math.min(i,b.y),j=Math.max(j,b.x+b.width),k=Math.max(k,b.y+b.height);let l=Math.max(1,j-h),m=Math.max(1,k-i),n=N(Math.min(f,Math.min(Math.max(1,b-2*e)/l,Math.max(1,c-2*e)/m)),g);return{x:(b-l*n)/2-h*n,y:(c-m*n)/2-i*n,scale:n}}function S(a){return`translate(${a.x} ${a.y}) scale(${a.scale})`}function T(a){let b=new Set,c=[];for(let d of a.states??[])b.has(d.name)||(b.add(d.name),c.push(d));return c}function U(a){return a.stateOf?Array.isArray(a.stateOf)?a.stateOf:[a.stateOf]:[]}let V=["1:1","1:N","N:1","N:M"];function W(a){return a.toLowerCase().endsWith(".erdf.json")}function X(a){return!!a&&"object"==typeof a&&Array.isArray(a.entities)&&!("state"in a)}function Y(a,b){let c=RegExp(`(?<![\\w.])${b.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}\\.([A-Za-z_]\\w*)\\b(?!\\s*\\()`,"g"),d=[];for(let b of a.matchAll(c))d.includes(b[1])||d.push(b[1]);return d}let Z=a=>({settings:{...a.settings},entities:(a.entities??[]).map(a=>({...a,attributes:(a.attributes??[]).map(a=>({...a}))})),relationships:(a.relationships??[]).map(a=>({...a}))});function $(a,b){let c=a.entities.find(a=>a.name===b);if(!c){let c=a.entities.map(a=>a.name).join(", ")||"none";throw Error(`Entity '${b}' not found. Entities: ${c}.`)}return c}function _(a){return Object.fromEntries(Object.entries(a).filter(([,a])=>void 0!==a))}let aa=a=>(a.attributes??[]).filter(a=>a?.name);function ab(a){return Math.max(110,Math.ceil(8.4*(a.name??"").length+36))}function ac(a){return Math.max(38,Math.ceil(3.5*Math.max(0,...a.map(a=>a.name.length))+14))}let ad=a=>Math.ceil(a/2);function ae(a){let b=aa(a),c=ab(a);return 0===b.length?{width:c,height:40}:{width:c+2*(34+2*ac(b)),height:Math.max(40,32*ad(b.length))}}let af={"1:1":"||--||","1:N":"||--o{","N:1":"}o--||","N:M":"}o--o{"},ag=/^[A-Za-z_][A-Za-z0-9_-]*$/,ah=a=>ag.test(a)?a:`"${a.replace(/"/g,"'")}"`,ai=(a,b)=>{let c=a.trim().replace(/[^A-Za-z0-9_()[\]-]+/g,"_").replace(/^_+|_+$/g,"");return/^[A-Za-z_]/.test(c)?c:c?`_${c}`:b},aj=a=>`"${a.replace(/"/g,"'")}"`;function ak(a){return`${a.name} : ${a.type}`}function al(a){let b=(a.attributes??[]).filter(a=>a?.name);return{width:Math.min(340,Math.max(170,Math.ceil(6.6*Math.max(1.15*(a.name??"").length,...b.map(a=>ak(a).length+6.96969696969697))+28))),height:30+20*Math.max(1,b.length)+8}}function am(a){return a.trim().replace(/[\s_]+/g,"-").replace(/[^A-Za-z0-9.-]/g,"").replace(/-{2,}/g,"-").replace(/^[-.]+|[-.]+$/g,"").slice(0,60)}function an(a){return a.parallel?a.parallel.states:a.states??[]}function ao(a,b){return an(a).find(a=>a.name===b)??null}let ap={surface:"--slc-surface",nodeFill:"--slc-node-fill",nodeStroke:"--slc-node-stroke",compositeFill:"--slc-composite-fill",finalFill:"--slc-final-fill",accent:"--slc-accent",accentFill:"--slc-accent-fill",accentInk:"--slc-accent-ink",danger:"--slc-danger",drawSource:"--slc-draw-source",edge:"--slc-edge",chipFill:"--slc-chip-fill",chipStroke:"--slc-chip-stroke",label:"--slc-label",muted:"--slc-muted",faint:"--slc-faint",entry:"--slc-entry",exit:"--slc-exit",composite:"--slc-composite",active:"--slc-active",panelBg:"--slc-panel-bg",panelBorder:"--slc-panel-border",panelHover:"--slc-panel-hover"};function aq(a){let b={};if(!a)return b;for(let[c,d]of Object.entries(a)){let a=ap[c];a&&"string"==typeof d&&(b[a]=d)}return b}let ar={x:100,y:100,width:160,height:60};function as(a,b){return 1===b?16*a:2===b?400*a:a}function at(a){return!!a&&"string"==typeof a.tagName&&(!!a.isContentEditable||["INPUT","TEXTAREA","SELECT","BUTTON","OPTION"].includes(a.tagName))}function au(a){return(a.states?.length??0)>0||(a.parallel?.states.length??0)>0}function av({mark:a,x:b,y:c,selected:d}){return(0,h.jsxs)("g",{transform:`translate(${b} ${c}) scale(0.5)`,strokeWidth:a.strokeWidth,className:`slc-glyph${d?" slc-glyph--selected":""}`,children:[(a.circles??[]).map((a,b)=>(0,h.jsx)("circle",{cx:a.cx,cy:a.cy,r:a.r,className:a.filled?"slc-glyph-dot":void 0},`c${b}`)),a.paths.map((a,b)=>(0,h.jsx)("path",{d:a},`p${b}`))]})}let aw={kind:null,id:null},ax=(0,i.forwardRef)(function(a,b){let{definition:c,positions:d,path:e=[],rootLabel:f,viewport:g,onViewportChange:j,selection:k=aw,activeStates:l,errorElements:m,drawMode:n="select",drawSource:o=null,readOnly:p=!1,showBreadcrumb:q=!0,showHud:r=!0,fitKey:s,onSelect:t,onClearSelection:u,onStateMove:v,onNavigateInto:w,onNavigateTo:x,onContextMenu:y,onCreateTransition:A,onCancelDraw:C,onDeleteState:D,onUndo:F,onRedo:I,hudExtras:J,emptyHint:N,theme:T,className:U,style:V,svgId:W,pinchOwner:X="canvas"}=a,Y=(0,i.useRef)(null),Z=(0,i.useId)().replace(/:/g,""),$=(0,i.useRef)(g);$.current=g;let[_,aa]=(0,i.useState)(null),ab=(0,i.useRef)(null),ac=(0,i.useCallback)(a=>{ab.current=a,aa(a)},[]),[ad,ae]=(0,i.useState)(null),af=(0,i.useRef)(!1),[ag,ah]=(0,i.useState)(!1),ai=(0,i.useRef)(null),[aj,ak]=(0,i.useState)(!1),al=(0,i.useRef)(!1),am=(0,i.useRef)(new Map),ap=(0,i.useRef)(new Map),ax=(0,i.useRef)(null),[ay,az]=(0,i.useState)(!1),aA=(0,i.useRef)(null),aB=(0,i.useRef)(!1),[aC,aD]=(0,i.useState)(!1),aE=c.state,aF=(0,i.useMemo)(()=>{let a=function(a,b){let c=[],d=a;for(let a of b){let b=ao(d,a);if(!b)break;c.push(a),d=b}return c}(aE,e);return[f??aE?.name??"Root",...a]},[aE,e,f]),aG=(0,i.useMemo)(()=>aE?an(function(a,b){let c=a;for(let a of b){let b=ao(c,a);if(!b)break;c=b}return c}(aE,e)):[],[aE,e]),aH=aF[aF.length-1],aI=(0,i.useMemo)(()=>(function(a){let b=new Set,c=[];for(let d of a.events??[])for(let a of d.events??[])b.has(a.id)||(b.add(a.id),c.push(a.id));return c})(c),[c]),aJ=(0,i.useMemo)(()=>new Set(l??[]),[l]),aK=(0,i.useMemo)(()=>new Set(m??[]),[m]),aL=(0,i.useCallback)((a,b)=>{let c=Y.current?.getBoundingClientRect();return{x:a-(c?.left??0),y:b-(c?.top??0)}},[]),aM=(0,i.useCallback)(a=>{let b=am.current.get(a);am.current.delete(a),b?.hasPointerCapture?.(a)&&b.releasePointerCapture?.(a)},[]),aN=(0,i.useCallback)(a=>{let b=aA.current;b&&(void 0===a||b.pointerId===a)&&(clearTimeout(b.timer),aA.current=null)},[]),aO=(0,i.useCallback)((a,b)=>{if("touch"!==a.pointerType||!y)return;aN();let{pointerId:c,clientX:d,clientY:e}=a,f=setTimeout(()=>{aA.current=null,ac(null),ai.current=null,ak(!1),aB.current=!0,navigator.vibrate?.(10),y(d,e,b)},500);aA.current={pointerId:c,x:d,y:e,target:b,timer:f}},[aN,y,ac]);(0,i.useEffect)(()=>{},[]),(0,i.useEffect)(()=>{let a=a=>{ap.current.delete(a.pointerId)};return window.addEventListener("pointerup",a),window.addEventListener("pointercancel",a),()=>{window.removeEventListener("pointerup",a),window.removeEventListener("pointercancel",a)}},[]),(0,i.useEffect)(()=>()=>aN(),[aN]);let aP=(0,i.useRef)(new Set),aQ=(0,i.useRef)(new Map),aR=(0,i.useRef)(aH),aS=(0,i.useRef)(new Set),[aT,aU]=(0,i.useState)(new Set),[aV,aW]=(0,i.useState)(new Set),[aX,aY]=(0,i.useState)(new Map),aZ=aC?10/g.scale:0,a$=aC?28/g.scale:0,a_=(0,i.useCallback)(a=>d[a]??ar,[d]);(0,i.useEffect)(()=>{let a=a=>{(a.ctrlKey||a.metaKey)&&"z"===a.key&&F&&(a.preventDefault(),F()),(a.ctrlKey||a.metaKey)&&("y"===a.key||a.shiftKey&&"z"===a.key)&&I&&(a.preventDefault(),I()),"Escape"===a.key&&(ae(null),C?.()),"Delete"===a.key&&"state"===k.kind&&k.id&&D&&D(k.id)};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[F,I,C,D,k]);let a0=(0,i.useCallback)(a=>{let b=$.current;ai.current={pointerId:a.pointerId,startX:a.clientX,startY:a.clientY,origX:b.x,origY:b.y},al.current=!1,ak(!0);let c=Y.current;c&&(am.current.set(a.pointerId,c),c.setPointerCapture(a.pointerId))},[]),a1=(0,i.useCallback)(()=>{let a=[...ap.current.entries()];if(a.length<2)return;let[[b,c],[d,e]]=a;aN(),ac(null),ai.current=null;let f=Math.max(1,Math.hypot(e.x-c.x,e.y-c.y)),g=aL((c.x+e.x)/2,(c.y+e.y)/2);ax.current={a:b,b:d,startDist:f,startMidX:g.x,startMidY:g.y,start:$.current},al.current=!0,az(!0);let h=Y.current;if(h){for(let a of[b,d])if(!am.current.has(a))try{h.setPointerCapture(a),am.current.set(a,h)}catch{}}},[aN,aL,ac]),a2=(0,i.useCallback)(a=>{if(aB.current=!1,"touch"!==a.pointerType)return;aD(!0),ap.current.set(a.pointerId,{x:a.clientX,y:a.clientY});let b=ap.current.size;b<2||(a.stopPropagation(),2===b&&a1())},[a1]),a3=(0,i.useCallback)((a,b)=>{if(0!==a.button||af.current)return;if(a.stopPropagation(),aO(a,{kind:"state",id:b}),!p&&"transition"===n)return void(o?o!==b&&ae({stateName:o,targetName:b,x:a.clientX,y:a.clientY}):t?.("state",b));if(t?.("state",b),p||!v)return;let c=a_(b);ac({name:b,pointerId:a.pointerId,startX:a.clientX,startY:a.clientY,origX:c.x,origY:c.y});let d=a.currentTarget;am.current.set(a.pointerId,d),d.setPointerCapture?.(a.pointerId)},[t,a_,n,o,aO,ac,p,v]),a4=(0,i.useCallback)(a=>{if("touch"===a.pointerType){aO(a,{kind:"canvas"}),a0(a);return}(1===a.button||0===a.button&&af.current)&&(a.preventDefault(),a0(a))},[aO,a0]),a5=(0,i.useCallback)(a=>{ap.current.has(a.pointerId)&&ap.current.set(a.pointerId,{x:a.clientX,y:a.clientY});let b=aA.current;b&&b.pointerId===a.pointerId&&Math.hypot(a.clientX-b.x,a.clientY-b.y)>8&&aN(a.pointerId);let c=ax.current;if(c){if(a.pointerId!==c.a&&a.pointerId!==c.b)return;let b=ap.current.get(c.a),d=ap.current.get(c.b);if(!b||!d)return;let e=Math.hypot(d.x-b.x,d.y-b.y),f=aL((b.x+d.x)/2,(b.y+d.y)/2);j(O(Q(c.start,c.start.scale*(e/c.startDist),{x:c.startMidX,y:c.startMidY}),f.x-c.startMidX,f.y-c.startMidY));return}let d=ai.current;if(d){if(d.pointerId!==a.pointerId)return;let b=a.clientX-d.startX,c=a.clientY-d.startY,e=8*("touch"===a.pointerType);(Math.abs(b)>e||Math.abs(c)>e)&&(al.current=!0),j({x:d.origX+b,y:d.origY+c,scale:$.current.scale});return}if(!_||_.pointerId!==a.pointerId||!v)return;let e=$.current.scale,f=(a.clientX-_.startX)/e,g=(a.clientY-_.startY)/e,h=a_(_.name);v(_.name,{...h,x:Math.max(0,_.origX+f),y:Math.max(0,_.origY+g)})},[_,a_,v,j,aN,aL]),a6=(0,i.useCallback)(a=>{ap.current.delete(a.pointerId),aN(a.pointerId),aM(a.pointerId);let b=ax.current;if(b&&(b.a===a.pointerId||b.b===a.pointerId)){ax.current=null,az(!1);let c=b.a===a.pointerId?b.b:b.a,d=ap.current.get(c);if(d){let a=$.current;ai.current={pointerId:c,startX:d.x,startY:d.y,origX:a.x,origY:a.y},al.current=!0,ak(!0)}}ai.current?.pointerId===a.pointerId&&(ai.current=null),ab.current?.pointerId===a.pointerId&&ac(null),ai.current||ak(!1),ax.current||az(!1)},[aN,aM,ac]);(0,i.useEffect)(()=>{let a=Y.current;if(!a)return;let b=a=>{a.preventDefault();let b=$.current,c=as(a.deltaX,a.deltaMode),d=as(a.deltaY,a.deltaMode);if(a.ctrlKey||a.metaKey){let c=P(b,Math.exp(-(.0025*d)),aL(a.clientX,a.clientY));c!==b&&j(c);return}let e=a.shiftKey?-(c||d):-c,f=a.shiftKey?0:-d;(0!==e||0!==f)&&j(O(b,e,f))};return a.addEventListener("wheel",b,{passive:!1}),()=>a.removeEventListener("wheel",b)},[j,aL]),(0,i.useEffect)(()=>{let a=a=>{"Space"!==a.code||a.repeat||at(a.target)||at(document.activeElement)||(a.preventDefault(),af.current=!0,ah(!0))},b=a=>{"Space"===a.code&&(af.current=!1,ah(!1))},c=()=>{af.current=!1,ah(!1)};return window.addEventListener("keydown",a),window.addEventListener("keyup",b),window.addEventListener("blur",c),()=>{window.removeEventListener("keydown",a),window.removeEventListener("keyup",b),window.removeEventListener("blur",c)}},[]);let a7=(0,i.useCallback)(a=>{let b=Y.current?.getBoundingClientRect(),c={x:(b?.width??0)/2,y:(b?.height??0)/2},d=$.current,e=P(d,a,c);e!==d&&j(e)},[j]),a8=(0,i.useCallback)(()=>{let a=Y.current?.getBoundingClientRect(),b={x:(a?.width??0)/2,y:(a?.height??0)/2};j(Q($.current,1,b))},[j]),a9=(0,i.useCallback)(()=>{let a=Y.current?.getBoundingClientRect();if(!a)return;let b=aG.map(a=>a_(a.name));j(b.length?R(b,a.width,a.height):{...M})},[aG,a_,j]);(0,i.useImperativeHandle)(b,()=>({fit:a9,zoomIn:()=>a7(1.25),zoomOut:()=>a7(.8),resetZoom:a8,element:()=>Y.current}),[a9,a7,a8]);let ba=(0,i.useRef)(a9);ba.current=a9,(0,i.useEffect)(()=>{if(void 0===s)return;let a=requestAnimationFrame(()=>ba.current());return()=>cancelAnimationFrame(a)},[s]);let bb=(0,i.useCallback)((a,b)=>{y&&(a.preventDefault(),a.stopPropagation(),y(a.clientX,a.clientY,b?{kind:"state",id:b}:{kind:"canvas"}))},[y]),bc=(0,i.useMemo)(()=>{let a=new Set(aG.map(a=>a.name)),b=[];for(let c of aG)for(let[d,e]of(c.transitions??[]).entries())e.nextState&&a.has(e.nextState)&&b.push({from:c.name,to:e.nextState,event:e.event,stateName:c.name,index:d,condition:e.condition});return b},[aG]),bd=(0,i.useMemo)(()=>{let a=K(bc,a_),b=new Map(E(bc.map((b,c)=>{let d=a_(b.from);return{id:`${b.stateName}:${b.index}`,event:b.event,condition:b.condition,glyph:!0,at:b.from===b.to?()=>({x:d.x+d.width+44+30,y:d.y+d.height/2+4}):a[c].at}}),aG.map(a=>a_(a.name))).map(a=>[a.label.id,a]));return bc.flatMap((c,d)=>{let e=`${c.stateName}:${c.index}`,f=b.get(e);return f?[{arrow:c,id:e,curve:a[d],spot:f}]:[]})},[bc,aG,a_]);(0,i.useEffect)(()=>{let a=new Set(aG.map(a=>a.name)),b=new Set(bc.map(a=>`${a.stateName}:${a.index}`)),c=aR.current===aH,d=[...a].filter(a=>!aP.current.has(a));d.length&&aU(a=>{let b=new Set(a);return d.forEach(a=>b.add(a)),b});let e=[...b].filter(a=>!aS.current.has(a));e.length&&aW(a=>{let b=new Set(a);return e.forEach(a=>b.add(a)),b}),aU(b=>{let c=!1,d=new Set(b);return b.forEach(b=>{a.has(b)||(d.delete(b),c=!0)}),c?d:b}),aW(a=>{let c=!1,d=new Set(a);return a.forEach(a=>{b.has(a)||(d.delete(a),c=!0)}),c?d:a}),c?aY(b=>{let c=new Map(b),d=!1;return aQ.current.forEach((b,e)=>{a.has(e)||c.has(e)||(c.set(e,b),d=!0)}),a.forEach(a=>{c.delete(a)&&(d=!0)}),d?c:b}):aY(a=>a.size?new Map:a),aP.current=a,aQ.current=new Map(aG.map(a=>[a.name,{state:a,pos:a_(a.name)}])),aS.current=b,aR.current=aH},[aG,aH,bc,a_]);let be={...aq(T),...V},bf=aC?" slc-hud--coarse":"";return(0,h.jsxs)("div",{className:`slc-pane${U?` ${U}`:""}`,style:be,"data-pinch-owner":X,children:[q&&aF.length>1&&(0,h.jsx)("div",{className:"slc-crumbs",children:aF.map((a,b)=>(0,h.jsxs)("span",{className:"slc-crumb-item",children:[b>0&&(0,h.jsx)("span",{className:"slc-crumb-sep",children:"›"}),(0,h.jsx)("button",{type:"button",className:`slc-crumb${b===aF.length-1?" slc-crumb--current":""}`,onClick:()=>x?.(b),children:a})]},`${a}-${b}`))}),(0,h.jsxs)("svg",{ref:Y,id:W,className:"slc-surface",style:{cursor:aj?"grabbing":ag?"grab":void 0,touchAction:"none",...aC?{WebkitUserSelect:"none",userSelect:"none",WebkitTouchCallout:"none"}:{}},onPointerDownCapture:a2,onPointerDown:a4,onPointerMove:a5,onPointerUp:a6,onPointerCancel:a6,onAuxClick:a=>a.preventDefault(),onClick:a=>{if(aB.current){aB.current=!1,a.stopPropagation();return}if(al.current){al.current=!1;return}a.target?.tagName==="svg"&&(u?.(),ae(null))},onContextMenu:a=>bb(a),children:[(0,h.jsxs)("defs",{children:[(0,h.jsx)("marker",{id:`slc-arrow-${Z}`,markerWidth:"10",markerHeight:"7",refX:"10",refY:"3.5",orient:"auto",children:(0,h.jsx)("polygon",{points:"0 0, 10 3.5, 0 7",className:"slc-arrowhead"})}),(0,h.jsx)("marker",{id:`slc-arrow-sel-${Z}`,markerWidth:"10",markerHeight:"7",refX:"10",refY:"3.5",orient:"auto",children:(0,h.jsx)("polygon",{points:"0 0, 10 3.5, 0 7",className:"slc-arrowhead slc-arrowhead--selected"})})]}),"transition"===n&&o&&(0,h.jsxs)("text",{x:"50%",y:"30",textAnchor:"middle",className:"slc-draw-hint",children:['Click target state to create transition from "',o,'"']}),(0,h.jsxs)("g",{transform:S(g),style:aj||ay?{pointerEvents:"none"}:void 0,children:[bd.map(({arrow:a,id:b,curve:c,spot:d})=>{let e="transition"===k.kind&&k.id===b,f=aV.has(b),g=c.at(.5),i=Math.hypot(g.x-d.cx,g.y-d.cy)>4;return(0,h.jsxs)("g",{children:[aC&&(0,h.jsx)("path",{d:c.path,fill:"none",stroke:"transparent",strokeWidth:a$,strokeLinecap:"round",pointerEvents:"stroke",onClick:a=>{a.stopPropagation(),t?.("transition",b)}}),(0,h.jsx)("path",{d:c.path,pathLength:1,markerEnd:`url(#slc-arrow${e?"-sel":""}-${Z})`,className:`slc-edge${e?" slc-edge--selected":""}${f?" slc-edge-enter":""}`,onClick:a=>{a.stopPropagation(),t?.("transition",b)}}),(0,h.jsxs)("g",{className:"slc-chip",onClick:a=>{a.stopPropagation(),t?.("transition",b)},children:[i&&(0,h.jsx)("line",{x1:g.x,y1:g.y,x2:d.cx,y2:d.cy-5,className:`slc-chip-leader${e?" slc-chip-leader--selected":""}`}),aC&&(0,h.jsx)("rect",{x:d.x-aZ,y:d.y-aZ,width:d.width+2*aZ,height:d.height+2*aZ,fill:"transparent",pointerEvents:"all"}),(0,h.jsx)("rect",{x:d.x,y:d.y,width:d.width,height:d.height,rx:4,className:`slc-chip-plate${e?" slc-chip-plate--selected":""}`}),(0,h.jsx)(av,{mark:function(a){let b=a.toLowerCase();for(let{glyph:a,words:c}of H)if(c.some(a=>b.includes(a)))return a;return G}(a.event),x:B(d).x,y:B(d).y,selected:e}),(0,h.jsx)("text",{x:d.cx,y:d.cy-5,textAnchor:"middle",className:`slc-chip-text${e?" slc-chip-text--selected":""}`,children:a.event}),a.condition&&(0,h.jsxs)("text",{x:d.cx,y:d.cy+7,textAnchor:"middle",className:"slc-chip-guard",children:[(0,h.jsx)("title",{children:a.condition}),z(a.condition)]})]})]},`arrow-${b}`)}),aG.map(a=>{let b=a_(a.name),c="state"===k.kind&&k.id===a.name,d="final"===a.kind,e="history"===a.kind,f=au(a),g=o===a.name,i=aK.has(a.name),j=(a.onEntry?.actions?.length??0)>0,l=(a.onExit?.actions?.length??0)>0,m=aJ.has(a.name),q=aT.has(a.name),r=ag?void 0:"transition"!==n||p?f?"slc-node--drillable":p||!v?"slc-node--static":"slc-node--draggable":"slc-node--drawing";return(0,h.jsxs)("g",{className:r,onPointerDown:b=>a3(b,a.name),onDoubleClick:b=>{b.stopPropagation(),f&&w?.(a.name)},onContextMenu:b=>bb(b,a.name),children:[aC&&(0,h.jsx)("rect",{x:b.x-aZ,y:b.y-aZ,width:b.width+2*aZ,height:b.height+2*aZ,rx:12,fill:"transparent",pointerEvents:"all"}),(0,h.jsxs)("g",{className:q?"slc-node-enter":void 0,children:[(0,h.jsx)("rect",{x:b.x,y:b.y,width:b.width,height:b.height,rx:e?30:d?4:8,strokeDasharray:d?"6 3":f?"4 2":void 0,className:["slc-node",d?"slc-node--final":f?"slc-node--composite":"",g?"slc-node--source":"",i?"slc-node--error":"",c?"slc-node--selected":"",m?"slc-node--active":""].filter(Boolean).join(" ")}),(0,h.jsx)("text",{x:b.x+b.width/2,y:b.y+(j||l?b.height/2:b.height/2+5),textAnchor:"middle",className:"slc-node-name",children:a.name}),a.kind&&"normal"!==a.kind&&(0,h.jsx)("text",{x:b.x+b.width-8,y:b.y+14,textAnchor:"end",className:"slc-node-kind",children:a.kind}),j&&(0,h.jsx)("text",{x:b.x+6,y:b.y+b.height-6,className:"slc-node-entry",children:"▸entry"}),l&&(0,h.jsx)("text",{x:b.x+b.width-6,y:b.y+b.height-6,textAnchor:"end",className:"slc-node-exit",children:"exit◂"}),i&&(0,h.jsx)("text",{x:b.x+6,y:b.y+14,className:"slc-node-warn",children:"⚠"}),f&&(0,h.jsxs)("text",{x:b.x+b.width/2,y:b.y+b.height-6,textAnchor:"middle",className:"slc-node-drill",children:["▼ ",(a.states?.length??0)+(a.parallel?.states.length??0)," children — ",aC?"double-tap":"double-click"," to enter"]})]})]},a.name)}),Array.from(aX.entries()).map(([a,{state:b,pos:c}])=>{let d="final"===b.kind,e=au(b);return(0,h.jsxs)("g",{className:"slc-node-exit-group",onAnimationEnd:b=>{"slc-node-out"===b.animationName&&aY(b=>{if(!b.has(a))return b;let c=new Map(b);return c.delete(a),c})},children:[(0,h.jsx)("rect",{x:c.x,y:c.y,width:c.width,height:c.height,rx:"history"===b.kind?30:d?4:8,strokeDasharray:d?"6 3":e?"4 2":void 0,className:`slc-node${d?" slc-node--final":e?" slc-node--composite":""}`}),(0,h.jsx)("text",{x:c.x+c.width/2,y:c.y+c.height/2+5,textAnchor:"middle",className:"slc-node-name",children:a})]},`exit-${a}`)})]}),0===aG.length&&(0,h.jsx)("text",{x:"50%",y:"50%",textAnchor:"middle",className:"slc-empty",children:N??"This level has no states."})]}),r&&(0,h.jsxs)("div",{className:`slc-hud${bf}`,children:[(0,h.jsx)("button",{type:"button",className:"slc-hud-btn",title:"Zoom out (Ctrl + wheel down, or pinch in)",disabled:g.scale<=L.min,onClick:()=>a7(.8),children:"−"}),(0,h.jsxs)("button",{type:"button",className:"slc-hud-btn slc-hud-btn--scale",title:"Reset zoom to 100%",onClick:a8,children:[Math.round(100*g.scale),"%"]}),(0,h.jsx)("button",{type:"button",className:"slc-hud-btn",title:"Zoom in (Ctrl + wheel up, or pinch out)",disabled:g.scale>=L.max,onClick:()=>a7(1.25),children:"+"}),(0,h.jsx)("span",{className:"slc-hud-sep",children:"|"}),(0,h.jsx)("button",{type:"button",className:"slc-hud-btn",title:"Fit the whole machine in view",onClick:a9,children:"⤢ Fit"}),J&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)("span",{className:"slc-hud-sep",children:"|"}),J]}),(0,h.jsx)("span",{className:"slc-hud-sep",children:"|"}),(0,h.jsx)("span",{className:"slc-hud-hint",title:aC?"Drag to pan · pinch with two fingers to zoom · press and hold for the menu · double-tap a composite to enter it":"Wheel scrolls · Shift+wheel scrolls sideways · Ctrl+wheel zooms at the cursor · middle-drag or Space+drag pans",children:ay?"pinching":aj?"panning":aC?"drag · pinch · hold":ag?"space to pan":"wheel · ⌃wheel · space"})]}),ad&&(0,h.jsxs)("div",{className:"slc-picker",style:{left:ad.x,top:ad.y-80},onClick:a=>a.stopPropagation(),children:[(0,h.jsxs)("div",{className:"slc-picker-title",children:[ad.stateName," → ",ad.targetName]}),(0,h.jsx)("div",{className:"slc-picker-sub",children:"Select event:"}),0===aI.length?(0,h.jsx)("div",{className:"slc-picker-empty",children:"No events defined. Add events first."}):aI.map(a=>(0,h.jsx)("button",{type:"button",className:"slc-picker-item",onClick:()=>{ad&&(A?.(ad.stateName,ad.targetName,a),ae(null),C?.())},children:a},a)),(0,h.jsx)("button",{type:"button",className:"slc-picker-cancel",onClick:()=>{ae(null),C?.()},children:"Cancel"})]})]})});function ay(a,b){return 1===b?16*a:2===b?400*a:a}let az={"1:1":["one","one"],"1:N":["one","many"],"N:1":["many","one"],"N:M":["many","many"]};function aA(a,b,c){let d=b.x-a.x,e=b.y-a.y,f=Math.hypot(d,e)||1,g=d/f,h=e/f,i=-h,j=(b,c)=>`${(a.x+g*b+i*c).toFixed(1)} ${(a.y+h*b+g*c).toFixed(1)}`;return"one"===c?`M ${j(9,6)} L ${j(9,-6)}`:`M ${j(13,0)} L ${j(0,7)} M ${j(13,0)} L ${j(0,-7)} M ${j(13,0)} L ${j(0,0)}`}function aB(a,b){if(!a)return"";let c=Math.min(a.x+a.width,Math.max(a.x,b.x)),d=Math.min(a.y+a.height,Math.max(a.y,b.y));return c===b.x&&d===b.y?"":`M ${b.x} ${b.y} L ${c} ${d}`}function aC({definition:a,notation:b="crowsfoot",positions:c,viewport:d,onViewportChange:e,selection:f=null,errorElements:g,readOnly:j=!1,fitKey:k,onSelect:l,onClearSelection:m,onEntityMove:n,onOpenMachine:o,onContextMenu:p,emptyHint:q,theme:r,className:s,style:t,svgId:u}){let v=(0,i.useRef)(null),w=(0,i.useRef)(d);w.current=d;let x=(0,i.useRef)(null),y=(0,i.useRef)(new Map),z=(0,i.useRef)(null),A=(0,i.useMemo)(()=>{let b=new Set;return(a.entities??[]).filter(a=>!(!a?.name||b.has(a.name))&&!!c[a.name]&&(b.add(a.name),!0))},[a.entities,c]),B="chen"===b,C=(0,i.useMemo)(()=>new Map(B?A.map(a=>{var b;let d,e,f,g,h,i,j;return[a.name,(b=c[a.name],d=aa(a),e=ab(a),f={x:b.x+(b.width-e)/2,y:b.y+(b.height-40)/2,width:e,height:40},g=ac(d),h=f.y+f.height/2,i=ad(d.length),j=d.map((a,b)=>{let c=b<i,e=c?i:d.length-i,j=h+((c?b:b-i)-(e-1)/2)*32,k=c?f.x-34-g:f.x+f.width+34+g;return{attribute:a,cx:k,cy:j,rx:g,ry:13,from:{x:c?f.x:f.x+f.width,y:h},to:{x:c?k+g:k-g,y:j}}}),{rect:f,ovals:j,routingBox:{x:f.x,y:b.y,width:f.width,height:b.height}})]}):[]),[B,A,c]),D=(0,i.useMemo)(()=>{let b=new Map(A.map((a,b)=>[a.name,`e${b}`])),d=(a.relationships??[]).filter(a=>a&&b.has(a.from)&&b.has(a.to)),e=K(d.map(a=>({from:b.get(a.from),to:b.get(a.to)})),a=>{let b=A[Number(a.slice(1))].name;return C.get(b)?.routingBox??c[b]});return d.map((a,b)=>({rel:a,curve:e[b]}))},[a.relationships,A,c,C]),F=(0,i.useMemo)(()=>E(D.filter(({rel:a})=>B||a.label).map(({rel:a,curve:b})=>({event:a.label||" ",at:b.at,rel:a})),A.map(a=>c[a.name])),[B,D,A,c]),G=(0,i.useCallback)((a,b)=>{let c=v.current?.getBoundingClientRect();return{x:a-(c?.left??0),y:b-(c?.top??0)}},[]);(0,i.useEffect)(()=>{if(void 0===k)return;let a=v.current?.getBoundingClientRect(),b=Object.values(c);a&&0!==b.length&&e(R(b,a.width,a.height))},[k]),(0,i.useEffect)(()=>{let a=v.current;if(!a)return;let b=a=>{a.preventDefault();let b=w.current,c=ay(a.deltaX,a.deltaMode),d=ay(a.deltaY,a.deltaMode);if(a.ctrlKey||a.metaKey)return void e(P(b,Math.exp(-(.0025*d)),G(a.clientX,a.clientY)));let f=a.shiftKey?-(c||d):-c,g=a.shiftKey?0:-d;(0!==f||0!==g)&&e(O(b,f,g))};return a.addEventListener("wheel",b,{passive:!1}),()=>a.removeEventListener("wheel",b)},[e,G]);let H=()=>{let a=[...y.current.values()];if(a.length<2)return null;let[b,c]=a;return{distance:Math.hypot(c.x-b.x,c.y-b.y)||1,mid:{x:(b.x+c.x)/2,y:(b.y+c.y)/2}}},I=(a,b)=>{if(0!==a.button&&"mouse"===a.pointerType)return;if(a.stopPropagation(),v.current?.setPointerCapture(a.pointerId),y.current.set(a.pointerId,G(a.clientX,a.clientY)),y.current.size>=2){x.current=null,z.current=H();return}let d=void 0!==b&&!j;x.current={kind:d?"move":"pan",pointerId:a.pointerId,startX:a.clientX,startY:a.clientY,lastX:a.clientX,lastY:a.clientY,name:b,origin:d?c[b]:void 0,moved:!1}},J=a=>{if(y.current.delete(a.pointerId),z.current){y.current.size<2&&(z.current=null);return}let b=x.current;!b||b.pointerId!==a.pointerId||(x.current=null,b.moved||(b.name?l?.(b.name):m?.()))},L=new Set(g??[]);return(0,h.jsxs)("div",{className:`slc-pane${s?` ${s}`:""}`,style:{...aq(r),...t},children:[(0,h.jsx)("svg",{ref:v,id:u,className:"slc-surface",onPointerDown:a=>I(a),onPointerMove:a=>{if(y.current.has(a.pointerId)&&y.current.set(a.pointerId,G(a.clientX,a.clientY)),z.current){let a=H();if(!a)return;let b=z.current;e(P(O(w.current,a.mid.x-b.mid.x,a.mid.y-b.mid.y),a.distance/b.distance,a.mid)),z.current=a;return}let b=x.current;if(b&&b.pointerId===a.pointerId&&!(!b.moved&&4>Math.hypot(a.clientX-b.startX,a.clientY-b.startY))){if(b.moved=!0,"pan"===b.kind)e(O(w.current,a.clientX-b.lastX,a.clientY-b.lastY));else if(b.name&&b.origin){var c,d,f;let e=(c=w.current,d=a.clientX-b.startX,f=a.clientY-b.startY,{x:d/c.scale,y:f/c.scale});n?.(b.name,{...b.origin,x:b.origin.x+e.x,y:b.origin.y+e.y})}b.lastX=a.clientX,b.lastY=a.clientY}},onPointerUp:J,onPointerCancel:J,onContextMenu:a=>{p&&(a.preventDefault(),p(a.clientX,a.clientY,{kind:"canvas"}))},children:(0,h.jsxs)("g",{transform:S(d),children:[D.map(({rel:a,curve:b},c)=>{if(B){let[d,e]=function(a){switch(a){case"1:1":return["1","1"];case"N:1":return["N","1"];case"N:M":return["M","N"];default:return["1","N"]}}(a.cardinality),f=b.at(.12),g=b.at(.88);return(0,h.jsxs)("g",{className:"slc-erd-rel",children:[(0,h.jsx)("path",{d:aB(C.get(a.from)?.rect,b.p0),className:"slc-erd-line"}),(0,h.jsx)("path",{d:aB(C.get(a.to)?.rect,b.p3),className:"slc-erd-line"}),(0,h.jsx)("path",{d:b.path,className:"slc-erd-line"}),(0,h.jsx)("text",{x:f.x+9,y:f.y+4,className:"slc-erd-card",children:d}),(0,h.jsx)("text",{x:g.x+9,y:g.y+4,className:"slc-erd-card",children:e})]},`r${c}`)}let[d,e]=az[a.cardinality]??az["1:N"];return(0,h.jsxs)("g",{className:"slc-erd-rel",children:[(0,h.jsx)("path",{d:b.path,className:"slc-erd-line"}),(0,h.jsx)("path",{d:aA(b.p0,b.p1,d),className:"slc-erd-mark"}),(0,h.jsx)("path",{d:aA(b.p3,b.p2,e),className:"slc-erd-mark"})]},`r${c}`)}),A.map(a=>{let b=c[a.name],d=(a.attributes??[]).filter(a=>a?.name),e=["slc-node",f===a.name?"slc-node--selected":"",L.has(a.name)?"slc-node--error":""].filter(Boolean).join(" "),g=C.get(a.name);if(g){let{rect:b,ovals:c}=g;return(0,h.jsxs)("g",{className:j?"slc-node--static":"slc-node--draggable",onPointerDown:b=>I(b,a.name),onContextMenu:b=>{p&&(b.preventDefault(),b.stopPropagation(),p(b.clientX,b.clientY,{kind:"entity",id:a.name}))},children:[c.map(a=>(0,h.jsx)("path",{d:`M ${a.from.x} ${a.from.y} L ${a.to.x} ${a.to.y}`,className:"slc-erd-attr-line"},`l-${a.attribute.name}`)),c.map(a=>{var b;let c,d=U(a.attribute),e=d.length>0&&!!o;return(0,h.jsxs)("g",{className:e?"slc-erd-state":void 0,onPointerDown:e?a=>a.stopPropagation():void 0,onClick:e?()=>o(d[0]):void 0,children:[(0,h.jsx)("title",{children:(c=U(b=a.attribute),[`${ak(b)}${b.nullable?" ?":""}`,"pk"===b.key?"primary key":"uk"===b.key?"unique":"",b.references?`references ${b.references}`:"",c.length?`stores the state of ${c.join(", ")}`:"",b.description??""].filter(Boolean).join(" — "))}),(0,h.jsx)("ellipse",{cx:a.cx,cy:a.cy,rx:a.rx,ry:a.ry,className:"slc-erd-oval"}),(0,h.jsxs)("text",{x:a.cx,y:a.cy+4,textAnchor:"middle",className:`slc-erd-oval-text${"pk"===a.attribute.key?" slc-erd-oval-text--pk":""}${d.length?" slc-erd-row--state":""}`,children:[d.length?"◉ ":"",a.attribute.name]})]},a.attribute.name)}),a.description&&(0,h.jsx)("title",{children:a.description}),(0,h.jsx)("rect",{x:b.x,y:b.y,width:b.width,height:b.height,rx:2,className:e}),a.weak&&(0,h.jsx)("rect",{x:b.x+4,y:b.y+4,width:b.width-8,height:b.height-8,rx:1,className:"slc-erd-weak"}),(0,h.jsx)("text",{x:b.x+b.width/2,y:b.y+b.height/2+5,textAnchor:"middle",className:"slc-node-name",children:a.name})]},a.name)}return(0,h.jsxs)("g",{className:j?"slc-node--static":"slc-node--draggable",onPointerDown:b=>I(b,a.name),onContextMenu:b=>{p&&(b.preventDefault(),b.stopPropagation(),p(b.clientX,b.clientY,{kind:"entity",id:a.name}))},children:[a.description&&(0,h.jsx)("title",{children:a.description}),(0,h.jsx)("rect",{x:b.x,y:b.y,width:b.width,height:b.height,rx:6,className:e}),(0,h.jsx)("path",{d:`M ${b.x} ${b.y+30} h ${b.width}`,className:"slc-erd-rule"}),(0,h.jsx)("text",{x:b.x+b.width/2,y:b.y+15+5,textAnchor:"middle",className:"slc-node-name",children:a.name}),0===d.length&&(0,h.jsx)("text",{x:b.x+14,y:b.y+30+15,className:"slc-erd-row slc-erd-row--empty",children:"no attributes"}),d.map((a,c)=>{let d=b.y+30+20*c+15,e=U(a),f=["pk"===a.key?"PK":"uk"===a.key?"UK":"",a.references?"FK":""].filter(Boolean).join(" ");return(0,h.jsxs)("g",{className:e.length&&o?"slc-erd-state":void 0,onPointerDown:e.length&&o?a=>a.stopPropagation():void 0,onClick:e.length&&o?()=>o(e[0]):void 0,children:[(e.length>0||a.description)&&(0,h.jsx)("title",{children:[e.length?`stores the state of ${e.join(", ")}`:"",a.description??""].filter(Boolean).join(" — ")}),(0,h.jsxs)("text",{x:b.x+14,y:d,className:`slc-erd-row${e.length?" slc-erd-row--state":""}${"pk"===a.key?" slc-erd-row--pk":""}`,children:[e.length?"◉ ":"",ak(a),a.nullable?" ?":""]}),f&&(0,h.jsx)("text",{x:b.x+b.width-14,y:d,textAnchor:"end",className:"slc-erd-badge",children:f})]},a.name)})]},a.name)}),F.map((a,b)=>{if(!B)return null;let c=a.x+a.width/2,d=a.y+a.height/2,e=Math.max(34,Math.ceil(3.7*(a.label.rel.label??"").length+18));return(0,h.jsxs)("g",{pointerEvents:"none",children:[(0,h.jsx)("path",{d:`M ${c-e} ${d} L ${c} ${d-18} L ${c+e} ${d} L ${c} ${d+18} Z`,className:"slc-erd-diamond"}),(0,h.jsx)("text",{x:c,y:d+4,textAnchor:"middle",className:"slc-erd-rel-label",children:a.label.rel.label??""})]},`d${b}`)}),!B&&F.map((a,b)=>(0,h.jsxs)("g",{pointerEvents:"none",children:[(0,h.jsx)("rect",{x:a.x,y:a.y,width:a.width,height:a.height,rx:4,className:"slc-chip-plate"}),(0,h.jsx)("text",{x:a.cx,y:a.cy-5,textAnchor:"middle",className:"slc-erd-rel-label",children:a.label.event})]},`l${b}`))]})}),0===A.length&&q&&(0,h.jsx)("div",{className:"slc-erd-empty",children:q})]})}let aD=a=>{let b,c=new Set,d=(a,d)=>{let e="function"==typeof a?a(b):a;if(!Object.is(e,b)){let a=b;b=(null!=d?d:"object"!=typeof e||null===e)?e:Object.assign({},b,e),c.forEach(c=>c(b,a))}},e=()=>b,f={setState:d,getState:e,getInitialState:()=>g,subscribe:a=>(c.add(a),()=>c.delete(a))},g=b=a(d,e,f);return f},aE=a=>{let b=a?aD(a):aD,c=a=>(function(a,b=a=>a){let c=i.default.useSyncExternalStore(a.subscribe,i.default.useCallback(()=>b(a.getState()),[a,b]),i.default.useCallback(()=>b(a.getInitialState()),[a,b]));return i.default.useDebugValue(c),c})(b,a);return Object.assign(c,b),c};var aF=a.i(53681);let aG=Object.create(null);aG.open="0",aG.close="1",aG.ping="2",aG.pong="3",aG.message="4",aG.upgrade="5",aG.noop="6";let aH=Object.create(null);Object.keys(aG).forEach(a=>{aH[aG[a]]=a});let aI={type:"error",data:"parser error"},aJ=({type:a,data:b},c,d)=>d(b instanceof ArrayBuffer||ArrayBuffer.isView(b)?c?b:"b"+aK(b,!0).toString("base64"):aG[a]+(b||"")),aK=(a,b)=>Buffer.isBuffer(a)||a instanceof Uint8Array&&!b?a:a instanceof ArrayBuffer?Buffer.from(a):Buffer.from(a.buffer,a.byteOffset,a.byteLength),aL=(a,b)=>{if("string"!=typeof a)return{type:"message",data:aM(a,b)};let c=a.charAt(0);return"b"===c?{type:"message",data:aM(Buffer.from(a.substring(1),"base64"),b)}:aH[c]?a.length>1?{type:aH[c],data:a.substring(1)}:{type:aH[c]}:aI},aM=(a,b)=>"arraybuffer"===b?a instanceof ArrayBuffer?a:Buffer.isBuffer(a)?a.buffer.slice(a.byteOffset,a.byteOffset+a.byteLength):a.buffer:Buffer.isBuffer(a)?a:Buffer.from(a);function aN(a){return a.reduce((a,b)=>a+b.length,0)}function aO(a,b){if(a[0].length===b)return a.shift();let c=new Uint8Array(b),d=0;for(let e=0;e<b;e++)c[e]=a[0][d++],d===a[0].length&&(a.shift(),d=0);return a.length&&d<a[0].length&&(a[0]=a[0].slice(d)),c}function aP(a){if(a){var b=a;for(var c in aP.prototype)b[c]=aP.prototype[c];return b}}aP.prototype.on=aP.prototype.addEventListener=function(a,b){return this._callbacks=this._callbacks||{},(this._callbacks["$"+a]=this._callbacks["$"+a]||[]).push(b),this},aP.prototype.once=function(a,b){function c(){this.off(a,c),b.apply(this,arguments)}return c.fn=b,this.on(a,c),this},aP.prototype.off=aP.prototype.removeListener=aP.prototype.removeAllListeners=aP.prototype.removeEventListener=function(a,b){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var c,d=this._callbacks["$"+a];if(!d)return this;if(1==arguments.length)return delete this._callbacks["$"+a],this;for(var e=0;e<d.length;e++)if((c=d[e])===b||c.fn===b){d.splice(e,1);break}return 0===d.length&&delete this._callbacks["$"+a],this},aP.prototype.emit=function(a){this._callbacks=this._callbacks||{};for(var b=Array(arguments.length-1),c=this._callbacks["$"+a],d=1;d<arguments.length;d++)b[d-1]=arguments[d];if(c){c=c.slice(0);for(var d=0,e=c.length;d<e;++d)c[d].apply(this,b)}return this},aP.prototype.emitReserved=aP.prototype.emit,aP.prototype.listeners=function(a){return this._callbacks=this._callbacks||{},this._callbacks["$"+a]||[]},aP.prototype.hasListeners=function(a){return!!this.listeners(a).length};let aQ=process.nextTick,aR=a.g;class aS{constructor(){this._cookies=new Map}parseCookies(a){a&&a.forEach(a=>{let b=function(a){let b=a.split("; "),c=b[0].indexOf("=");if(-1===c)return;let d=b[0].substring(0,c).trim();if(!d.length)return;let e=b[0].substring(c+1).trim();34===e.charCodeAt(0)&&(e=e.slice(1,-1));let f={name:d,value:e};for(let a=1;a<b.length;a++){let c=b[a].split("=");if(2!==c.length)continue;let d=c[0].trim(),e=c[1].trim();switch(d){case"Expires":f.expires=new Date(e);break;case"Max-Age":let g=new Date;g.setUTCSeconds(g.getUTCSeconds()+parseInt(e,10)),f.expires=g}}return f}(a);b&&this._cookies.set(b.name,b)})}get cookies(){let a=Date.now();return this._cookies.forEach((b,c)=>{var d;(null==(d=b.expires)?void 0:d.getTime())<a&&this._cookies.delete(c)}),this._cookies.entries()}addCookies(a){let b=[];for(let[a,c]of this.cookies)b.push(`${a}=${c.value}`);b.length&&(a.setDisableHeaderCheck(!0),a.setRequestHeader("cookie",b.join("; ")))}appendCookies(a){for(let[b,c]of this.cookies)a.append("cookie",`${b}=${c.value}`)}}function aT(a,...b){return b.reduce((b,c)=>(a.hasOwnProperty(c)&&(b[c]=a[c]),b),{})}let aU=aR.setTimeout,aV=aR.clearTimeout;function aW(a,b){b.useNativeTimers?(a.setTimeoutFn=aU.bind(aR),a.clearTimeoutFn=aV.bind(aR)):(a.setTimeoutFn=aR.setTimeout.bind(aR),a.clearTimeoutFn=aR.clearTimeout.bind(aR))}function aX(){return Date.now().toString(36).substring(3)+Math.random().toString(36).substring(2,5)}var aY=a.i(72724);let aZ=(0,aY.default)("engine.io-client:transport");class a$ extends Error{constructor(a,b,c){super(a),this.description=b,this.context=c,this.type="TransportError"}}class a_ extends aP{constructor(a){super(),this.writable=!1,aW(this,a),this.opts=a,this.query=a.query,this.socket=a.socket,this.supportsBinary=!a.forceBase64}onError(a,b,c){return super.emitReserved("error",new a$(a,b,c)),this}open(){return this.readyState="opening",this.doOpen(),this}close(){return("opening"===this.readyState||"open"===this.readyState)&&(this.doClose(),this.onClose()),this}send(a){"open"===this.readyState?this.write(a):aZ("transport is not open, discarding packets")}onOpen(){this.readyState="open",this.writable=!0,super.emitReserved("open")}onData(a){let b=aL(a,this.socket.binaryType);this.onPacket(b)}onPacket(a){super.emitReserved("packet",a)}onClose(a){this.readyState="closed",super.emitReserved("close",a)}pause(a){}createUri(a,b={}){return a+"://"+this._hostname()+this._port()+this.opts.path+this._query(b)}_hostname(){let a=this.opts.hostname;return -1===a.indexOf(":")?a:"["+a+"]"}_port(){return this.opts.port&&(this.opts.secure&&443!==Number(this.opts.port)||!this.opts.secure&&80!==Number(this.opts.port))?":"+this.opts.port:""}_query(a){let b=function(a){let b="";for(let c in a)a.hasOwnProperty(c)&&(b.length&&(b+="&"),b+=encodeURIComponent(c)+"="+encodeURIComponent(a[c]));return b}(a);return b.length?"?"+b:""}}let a0=(0,aY.default)("engine.io-client:polling");class a1 extends a_{constructor(){super(...arguments),this._polling=!1}get name(){return"polling"}doOpen(){this._poll()}pause(a){this.readyState="pausing";let b=()=>{a0("paused"),this.readyState="paused",a()};if(this._polling||!this.writable){let a=0;this._polling&&(a0("we are currently polling - waiting to pause"),a++,this.once("pollComplete",function(){a0("pre-pause polling complete"),--a||b()})),this.writable||(a0("we are currently writing - waiting to pause"),a++,this.once("drain",function(){a0("pre-pause writing complete"),--a||b()}))}else b()}_poll(){a0("polling"),this._polling=!0,this.doPoll(),this.emitReserved("poll")}onData(a){a0("polling got data %s",a);let b=a=>{if("opening"===this.readyState&&"open"===a.type&&this.onOpen(),"close"===a.type)return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(a)};((a,b)=>{let c=a.split("\x1e"),d=[];for(let a=0;a<c.length;a++){let e=aL(c[a],b);if(d.push(e),"error"===e.type)break}return d})(a,this.socket.binaryType).forEach(b),"closed"!==this.readyState&&(this._polling=!1,this.emitReserved("pollComplete"),"open"===this.readyState?this._poll():a0('ignoring poll - transport state "%s"',this.readyState))}doClose(){let a=()=>{a0("writing close packet"),this.write([{type:"close"}])};"open"===this.readyState?(a0("transport open - closing"),a()):(a0("transport not open - deferring close"),this.once("open",a))}write(a){var b;let c,d,e;this.writable=!1,b=a=>{this.doWrite(a,()=>{this.writable=!0,this.emitReserved("drain")})},d=Array(c=a.length),e=0,a.forEach((a,f)=>{aJ(a,!1,a=>{d[f]=a,++e===c&&b(d.join("\x1e"))})})}uri(){let a=this.opts.secure?"https":"http",b=this.query||{};return!1!==this.opts.timestampRequests&&(b[this.opts.timestampParam]=aX()),this.supportsBinary||b.sid||(b.b64=1),this.createUri(a,b)}}let a2=!1;try{a2="u">typeof XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}catch(a){}let a3=a2,a4=(0,aY.default)("engine.io-client:polling");function a5(){}class a6 extends a1{constructor(a){if(super(a),"u">typeof location){const b="https:"===location.protocol;let c=location.port;c||(c=b?"443":"80"),this.xd="u">typeof location&&a.hostname!==location.hostname||c!==a.port}}doWrite(a,b){let c=this.request({method:"POST",data:a});c.on("success",b),c.on("error",(a,b)=>{this.onError("xhr post error",a,b)})}doPoll(){a4("xhr poll");let a=this.request();a.on("data",this.onData.bind(this)),a.on("error",(a,b)=>{this.onError("xhr poll error",a,b)}),this.pollXhr=a}}class a7 extends aP{constructor(a,b,c){super(),this.createRequest=a,aW(this,c),this._opts=c,this._method=c.method||"GET",this._uri=b,this._data=void 0!==c.data?c.data:null,this._create()}_create(){var a;let b=aT(this._opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");b.xdomain=!!this._opts.xd;let c=this._xhr=this.createRequest(b);try{a4("xhr open %s: %s",this._method,this._uri),c.open(this._method,this._uri,!0);try{if(this._opts.extraHeaders)for(let a in c.setDisableHeaderCheck&&c.setDisableHeaderCheck(!0),this._opts.extraHeaders)this._opts.extraHeaders.hasOwnProperty(a)&&c.setRequestHeader(a,this._opts.extraHeaders[a])}catch(a){}if("POST"===this._method)try{c.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(a){}try{c.setRequestHeader("Accept","*/*")}catch(a){}null==(a=this._opts.cookieJar)||a.addCookies(c),"withCredentials"in c&&(c.withCredentials=this._opts.withCredentials),this._opts.requestTimeout&&(c.timeout=this._opts.requestTimeout),c.onreadystatechange=()=>{var a;3===c.readyState&&(null==(a=this._opts.cookieJar)||a.parseCookies(c.getResponseHeader("set-cookie"))),4===c.readyState&&(200===c.status||1223===c.status?this._onLoad():this.setTimeoutFn(()=>{this._onError("number"==typeof c.status?c.status:0)},0))},a4("xhr data %s",this._data),c.send(this._data)}catch(a){this.setTimeoutFn(()=>{this._onError(a)},0);return}"u">typeof document&&(this._index=a7.requestsCount++,a7.requests[this._index]=this)}_onError(a){this.emitReserved("error",a,this._xhr),this._cleanup(!0)}_cleanup(a){if(void 0!==this._xhr&&null!==this._xhr){if(this._xhr.onreadystatechange=a5,a)try{this._xhr.abort()}catch(a){}"u">typeof document&&delete a7.requests[this._index],this._xhr=null}}_onLoad(){let a=this._xhr.responseText;null!==a&&(this.emitReserved("data",a),this.emitReserved("success"),this._cleanup())}abort(){this._cleanup()}}function a8(){for(let a in a7.requests)a7.requests.hasOwnProperty(a)&&a7.requests[a].abort()}a7.requestsCount=0,a7.requests={},"u">typeof document&&("function"==typeof attachEvent?attachEvent("onunload",a8):"function"==typeof addEventListener&&addEventListener("onpagehide"in aR?"pagehide":"unload",a8,!1)),(d=function(a){let b=a.xdomain;try{if("u">typeof XMLHttpRequest&&(!b||a3))return new XMLHttpRequest}catch(a){}if(!b)try{return new aR[["Active"].concat("Object").join("X")]("Microsoft.XMLHTTP")}catch(a){}}({xdomain:!1}))&&d.responseType;let a9=aF.default||aF;a.i(31594),a.i(15251),a.i(31276),a.i(28719),a.i(63349),a.i(54129);var ba=a.i(50842);a.i(36972),ba.default;let bb=(0,aY.default)("engine.io-client:websocket"),bc="u">typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase();class bd extends a_{get name(){return"websocket"}doOpen(){let a=this.uri(),b=this.opts.protocols,c=bc?{}:aT(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(c.headers=this.opts.extraHeaders);try{this.ws=this.createSocket(a,b,c)}catch(a){return this.emitReserved("error",a)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=a=>this.onClose({description:"websocket connection closed",context:a}),this.ws.onmessage=a=>this.onData(a.data),this.ws.onerror=a=>this.onError("websocket error",a)}write(a){this.writable=!1;for(let b=0;b<a.length;b++){let c=a[b],d=b===a.length-1;aJ(c,this.supportsBinary,a=>{try{this.doWrite(c,a)}catch(a){bb("websocket closed before onclose event")}d&&aQ(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){void 0!==this.ws&&(this.ws.onerror=()=>{},this.ws.close(),this.ws=null)}uri(){let a=this.opts.secure?"wss":"ws",b=this.query||{};return this.opts.timestampRequests&&(b[this.opts.timestampParam]=aX()),this.supportsBinary||(b.b64=1),this.createUri(a,b)}}aR.WebSocket||aR.MozWebSocket;let be=(0,aY.default)("engine.io-client:webtransport"),bf={websocket:class extends bd{createSocket(a,b,c){var d;if(null==(d=this.socket)?void 0:d._cookieJar)for(let[a,b]of(c.headers=c.headers||{},c.headers.cookie="string"==typeof c.headers.cookie?[c.headers.cookie]:c.headers.cookie||[],this.socket._cookieJar.cookies))c.headers.cookie.push(`${a}=${b.value}`);return new ba.default(a,b,c)}doWrite(a,b){let c={};a.options&&(c.compress=a.options.compress),this.opts.perMessageDeflate&&("string"==typeof b?Buffer.byteLength(b):b.length)<this.opts.perMessageDeflate.threshold&&(c.compress=!1),this.ws.send(b,c)}},webtransport:class extends a_{get name(){return"webtransport"}doOpen(){try{this._transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name])}catch(a){return this.emitReserved("error",a)}this._transport.closed.then(()=>{be("transport closed gracefully"),this.onClose()}).catch(a=>{be("transport closed due to %s",a),this.onError("webtransport error",a)}),this._transport.ready.then(()=>{this._transport.createBidirectionalStream().then(a=>{var d,e;let f,g,h,i,j=(d=Number.MAX_SAFE_INTEGER,e=this.socket.binaryType,c||(c=new TextDecoder),f=[],g=0,h=-1,i=!1,new TransformStream({transform(a,b){for(f.push(a);;){if(0===g){if(1>aN(f))break;let a=aO(f,1);i=(128&a[0])==128,g=(h=127&a[0])<126?3:126===h?1:2}else if(1===g){if(2>aN(f))break;let a=aO(f,2);h=new DataView(a.buffer,a.byteOffset,a.length).getUint16(0),g=3}else if(2===g){if(8>aN(f))break;let a=aO(f,8),c=new DataView(a.buffer,a.byteOffset,a.length),d=c.getUint32(0);if(d>2097151){b.enqueue(aI);break}h=0x100000000*d+c.getUint32(4),g=3}else{if(aN(f)<h)break;let a=aO(f,h);b.enqueue(aL(i?a:c.decode(a),e)),g=0}if(0===h||h>d){b.enqueue(aI);break}}}})),k=a.readable.pipeThrough(j).getReader(),l=new TransformStream({transform(a,c){!function(a,c){if(a.data instanceof ArrayBuffer||ArrayBuffer.isView(a.data))return c(aK(a.data,!1));aJ(a,!0,a=>{b||(b=new TextEncoder),c(b.encode(a))})}(a,b=>{let d,e=b.length;if(e<126)new DataView((d=new Uint8Array(1)).buffer).setUint8(0,e);else if(e<65536){let a=new DataView((d=new Uint8Array(3)).buffer);a.setUint8(0,126),a.setUint16(1,e)}else{let a=new DataView((d=new Uint8Array(9)).buffer);a.setUint8(0,127),a.setBigUint64(1,BigInt(e))}a.data&&"string"!=typeof a.data&&(d[0]|=128),c.enqueue(d),c.enqueue(b)})}});l.readable.pipeTo(a.writable),this._writer=l.writable.getWriter();let m=()=>{k.read().then(({done:a,value:b})=>{a?be("session is closed"):(be("received chunk: %o",b),this.onPacket(b),m())}).catch(a=>{be("an error occurred while reading: %s",a)})};m();let n={type:"open"};this.query.sid&&(n.data=`{"sid":"${this.query.sid}"}`),this._writer.write(n).then(()=>this.onOpen())})})}write(a){this.writable=!1;for(let b=0;b<a.length;b++){let c=a[b],d=b===a.length-1;this._writer.write(c).then(()=>{d&&aQ(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){var a;null==(a=this._transport)||a.close()}},polling:class extends a6{request(a={}){var b;return Object.assign(a,{xd:this.xd,cookieJar:null==(b=this.socket)?void 0:b._cookieJar},this.opts),new a7(a=>new a9(a),this.uri(),a)}}},bg=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,bh=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function bi(a){var b,c;let d,e;if(a.length>8e3)throw"URI too long";let f=a,g=a.indexOf("["),h=a.indexOf("]");-1!=g&&-1!=h&&(a=a.substring(0,g)+a.substring(g,h).replace(/:/g,";")+a.substring(h,a.length));let i=bg.exec(a||""),j={},k=14;for(;k--;)j[bh[k]]=i[k]||"";return -1!=g&&-1!=h&&(j.source=f,j.host=j.host.substring(1,j.host.length-1).replace(/;/g,":"),j.authority=j.authority.replace("[","").replace("]","").replace(/;/g,":"),j.ipv6uri=!0),d=(b=j.path).replace(/\/{2,9}/g,"/").split("/"),("/"==b.slice(0,1)||0===b.length)&&d.splice(0,1),"/"==b.slice(-1)&&d.splice(d.length-1,1),j.pathNames=d,c=j.query,e={},c.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(a,b,c){b&&(e[b]=c)}),j.queryKey=e,j}let bj=(0,aY.default)("engine.io-client:socket"),bk="function"==typeof addEventListener&&"function"==typeof removeEventListener,bl=[];bk&&addEventListener("offline",()=>{bj("closing %d connection(s) because the network was lost",bl.length),bl.forEach(a=>a())},!1);class bm extends aP{constructor(a,b){if(super(),this.binaryType="nodebuffer",this.writeBuffer=[],this._prevBufferLen=0,this._pingInterval=-1,this._pingTimeout=-1,this._maxPayload=-1,this._pingTimeoutTime=1/0,a&&"object"==typeof a&&(b=a,a=null),a){const c=bi(a);b.hostname=c.host,b.secure="https"===c.protocol||"wss"===c.protocol,b.port=c.port,c.query&&(b.query=c.query)}else b.host&&(b.hostname=bi(b.host).host);aW(this,b),this.secure=null!=b.secure?b.secure:"u">typeof location&&"https:"===location.protocol,b.hostname&&!b.port&&(b.port=this.secure?"443":"80"),this.hostname=b.hostname||("u">typeof location?location.hostname:"localhost"),this.port=b.port||("u">typeof location&&location.port?location.port:this.secure?"443":"80"),this.transports=[],this._transportsByName={},b.transports.forEach(a=>{let b=a.prototype.name;this.transports.push(b),this._transportsByName[b]=a}),this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},b),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),"string"==typeof this.opts.query&&(this.opts.query=function(a){let b={},c=a.split("&");for(let a=0,d=c.length;a<d;a++){let d=c[a].split("=");b[decodeURIComponent(d[0])]=decodeURIComponent(d[1])}return b}(this.opts.query)),bk&&(this.opts.closeOnBeforeunload&&(this._beforeunloadEventListener=()=>{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this._beforeunloadEventListener,!1)),"localhost"!==this.hostname&&(bj("adding listener for the 'offline' event"),this._offlineEventListener=()=>{this._onClose("transport close",{description:"network connection lost"})},bl.push(this._offlineEventListener))),this.opts.withCredentials&&(this._cookieJar=new aS),this._open()}createTransport(a){bj('creating transport "%s"',a);let b=Object.assign({},this.opts.query);b.EIO=4,b.transport=a,this.id&&(b.sid=this.id);let c=Object.assign({},this.opts,{query:b,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[a]);return bj("options: %j",c),new this._transportsByName[a](c)}_open(){if(0===this.transports.length)return void this.setTimeoutFn(()=>{this.emitReserved("error","No transports available")},0);let a=this.opts.rememberUpgrade&&bm.priorWebsocketSuccess&&-1!==this.transports.indexOf("websocket")?"websocket":this.transports[0];this.readyState="opening";let b=this.createTransport(a);b.open(),this.setTransport(b)}setTransport(a){bj("setting transport %s",a.name),this.transport&&(bj("clearing existing transport %s",this.transport.name),this.transport.removeAllListeners()),this.transport=a,a.on("drain",this._onDrain.bind(this)).on("packet",this._onPacket.bind(this)).on("error",this._onError.bind(this)).on("close",a=>this._onClose("transport close",a))}onOpen(){bj("socket open"),this.readyState="open",bm.priorWebsocketSuccess="websocket"===this.transport.name,this.emitReserved("open"),this.flush()}_onPacket(a){if("opening"===this.readyState||"open"===this.readyState||"closing"===this.readyState)switch(bj('socket receive: type "%s", data "%s"',a.type,a.data),this.emitReserved("packet",a),this.emitReserved("heartbeat"),a.type){case"open":this.onHandshake(JSON.parse(a.data));break;case"ping":this._sendPacket("pong"),this.emitReserved("ping"),this.emitReserved("pong"),this._resetPingTimeout();break;case"error":let b=Error("server error");b.code=a.data,this._onError(b);break;case"message":this.emitReserved("data",a.data),this.emitReserved("message",a.data)}else bj('packet received with socket readyState "%s"',this.readyState)}onHandshake(a){this.emitReserved("handshake",a),this.id=a.sid,this.transport.query.sid=a.sid,this._pingInterval=a.pingInterval,this._pingTimeout=a.pingTimeout,this._maxPayload=a.maxPayload,this.onOpen(),"closed"!==this.readyState&&this._resetPingTimeout()}_resetPingTimeout(){this.clearTimeoutFn(this._pingTimeoutTimer);let a=this._pingInterval+this._pingTimeout;this._pingTimeoutTime=Date.now()+a,this._pingTimeoutTimer=this.setTimeoutFn(()=>{this._onClose("ping timeout")},a),this.opts.autoUnref&&this._pingTimeoutTimer.unref()}_onDrain(){this.writeBuffer.splice(0,this._prevBufferLen),this._prevBufferLen=0,0===this.writeBuffer.length?this.emitReserved("drain"):this.flush()}flush(){if("closed"!==this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){let a=this._getWritablePackets();bj("flushing %d packets in socket",a.length),this.transport.send(a),this._prevBufferLen=a.length,this.emitReserved("flush")}}_getWritablePackets(){if(!(this._maxPayload&&"polling"===this.transport.name&&this.writeBuffer.length>1))return this.writeBuffer;let a=1;for(let b=0;b<this.writeBuffer.length;b++){let c=this.writeBuffer[b].data;if(c&&(a+="string"==typeof c?function(a){let b=0,c=0;for(let d=0,e=a.length;d<e;d++)(b=a.charCodeAt(d))<128?c+=1:b<2048?c+=2:b<55296||b>=57344?c+=3:(d++,c+=4);return c}(c):Math.ceil(1.33*(c.byteLength||c.size))),b>0&&a>this._maxPayload)return bj("only send %d out of %d packets",b,this.writeBuffer.length),this.writeBuffer.slice(0,b);a+=2}return bj("payload size is %d (max: %d)",a,this._maxPayload),this.writeBuffer}_hasPingExpired(){if(!this._pingTimeoutTime)return!0;let a=Date.now()>this._pingTimeoutTime;return a&&(bj("throttled timer detected, scheduling connection close"),this._pingTimeoutTime=0,aQ(()=>{this._onClose("ping timeout")},this.setTimeoutFn)),a}write(a,b,c){return this._sendPacket("message",a,b,c),this}send(a,b,c){return this._sendPacket("message",a,b,c),this}_sendPacket(a,b,c,d){if("function"==typeof b&&(d=b,b=void 0),"function"==typeof c&&(d=c,c=null),"closing"===this.readyState||"closed"===this.readyState)return;(c=c||{}).compress=!1!==c.compress;let e={type:a,data:b,options:c};this.emitReserved("packetCreate",e),this.writeBuffer.push(e),d&&this.once("flush",d),this.flush()}close(){let a=()=>{this._onClose("forced close"),bj("socket closing - telling transport to close"),this.transport.close()},b=()=>{this.off("upgrade",b),this.off("upgradeError",b),a()},c=()=>{this.once("upgrade",b),this.once("upgradeError",b)};return("opening"===this.readyState||"open"===this.readyState)&&(this.readyState="closing",this.writeBuffer.length?this.once("drain",()=>{this.upgrading?c():a()}):this.upgrading?c():a()),this}_onError(a){if(bj("socket error %j",a),bm.priorWebsocketSuccess=!1,this.opts.tryAllTransports&&this.transports.length>1&&"opening"===this.readyState)return bj("trying next transport"),this.transports.shift(),this._open();this.emitReserved("error",a),this._onClose("transport error",a)}_onClose(a,b){if("opening"===this.readyState||"open"===this.readyState||"closing"===this.readyState){if(bj('socket close with reason: "%s"',a),this.clearTimeoutFn(this._pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),bk&&(this._beforeunloadEventListener&&removeEventListener("beforeunload",this._beforeunloadEventListener,!1),this._offlineEventListener)){let a=bl.indexOf(this._offlineEventListener);-1!==a&&(bj("removing listener for the 'offline' event"),bl.splice(a,1))}this.readyState="closed",this.id=null,this.emitReserved("close",a,b),this.writeBuffer=[],this._prevBufferLen=0}}}bm.protocol=4;class bn extends bm{constructor(){super(...arguments),this._upgrades=[]}onOpen(){if(super.onOpen(),"open"===this.readyState&&this.opts.upgrade){bj("starting upgrade probes");for(let a=0;a<this._upgrades.length;a++)this._probe(this._upgrades[a])}}_probe(a){bj('probing transport "%s"',a);let b=this.createTransport(a),c=!1;bm.priorWebsocketSuccess=!1;let d=()=>{c||(bj('probe transport "%s" opened',a),b.send([{type:"ping",data:"probe"}]),b.once("packet",d=>{if(!c)if("pong"===d.type&&"probe"===d.data){if(bj('probe transport "%s" pong',a),this.upgrading=!0,this.emitReserved("upgrading",b),!b)return;bm.priorWebsocketSuccess="websocket"===b.name,bj('pausing current transport "%s"',this.transport.name),this.transport.pause(()=>{c||"closed"!==this.readyState&&(bj("changing transport and sending upgrade packet"),j(),this.setTransport(b),b.send([{type:"upgrade"}]),this.emitReserved("upgrade",b),b=null,this.upgrading=!1,this.flush())})}else{bj('probe transport "%s" failed',a);let c=Error("probe error");c.transport=b.name,this.emitReserved("upgradeError",c)}}))};function e(){c||(c=!0,j(),b.close(),b=null)}let f=c=>{let d=Error("probe error: "+c);d.transport=b.name,e(),bj('probe transport "%s" failed because of error: %s',a,c),this.emitReserved("upgradeError",d)};function g(){f("transport closed")}function h(){f("socket closed")}function i(a){b&&a.name!==b.name&&(bj('"%s" works - aborting "%s"',a.name,b.name),e())}let j=()=>{b.removeListener("open",d),b.removeListener("error",f),b.removeListener("close",g),this.off("close",h),this.off("upgrading",i)};b.once("open",d),b.once("error",f),b.once("close",g),this.once("close",h),this.once("upgrading",i),-1!==this._upgrades.indexOf("webtransport")&&"webtransport"!==a?this.setTimeoutFn(()=>{c||b.open()},200):b.open()}onHandshake(a){this._upgrades=this._filterUpgrades(a.upgrades),super.onHandshake(a)}_filterUpgrades(a){let b=[];for(let c=0;c<a.length;c++)~this.transports.indexOf(a[c])&&b.push(a[c]);return b}}class bo extends bn{constructor(a,b={}){const c="object"==typeof a,d=c?{...a}:{...b};(!d.transports||d.transports&&"string"==typeof d.transports[0])&&(d.transports=(d.transports||["polling","websocket","webtransport"]).map(a=>bf[a]).filter(a=>!!a)),super(c?d:a,d)}}bo.protocol;let bp=(0,aY.default)("socket.io-client:url"),bq="function"==typeof ArrayBuffer,br=Object.prototype.toString,bs="function"==typeof Blob||"u">typeof Blob&&"[object BlobConstructor]"===br.call(Blob),bt="function"==typeof File||"u">typeof File&&"[object FileConstructor]"===br.call(File);function bu(a){return bq&&(a instanceof ArrayBuffer||("function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(a):a.buffer instanceof ArrayBuffer))||bs&&a instanceof Blob||bt&&a instanceof File}let bv=(0,aY.default)("socket.io-parser"),bw=["connect","connect_error","disconnect","disconnecting","newListener","removeListener"];(f=g||(g={}))[f.CONNECT=0]="CONNECT",f[f.DISCONNECT=1]="DISCONNECT",f[f.EVENT=2]="EVENT",f[f.ACK=3]="ACK",f[f.CONNECT_ERROR=4]="CONNECT_ERROR",f[f.BINARY_EVENT=5]="BINARY_EVENT",f[f.BINARY_ACK=6]="BINARY_ACK";class bx{constructor(a){this.replacer=a}encode(a){return(bv("encoding packet %j",a),(a.type===g.EVENT||a.type===g.ACK)&&function a(b,c){if(!b||"object"!=typeof b)return!1;if(Array.isArray(b)){for(let c=0,d=b.length;c<d;c++)if(a(b[c]))return!0;return!1}if(bu(b))return!0;if(b.toJSON&&"function"==typeof b.toJSON&&1==arguments.length)return a(b.toJSON(),!0);for(let c in b)if(Object.prototype.hasOwnProperty.call(b,c)&&a(b[c]))return!0;return!1}(a))?this.encodeAsBinary({type:a.type===g.EVENT?g.BINARY_EVENT:g.BINARY_ACK,nsp:a.nsp,data:a.data,id:a.id}):[this.encodeAsString(a)]}encodeAsString(a){let b=""+a.type;return(a.type===g.BINARY_EVENT||a.type===g.BINARY_ACK)&&(b+=a.attachments+"-"),a.nsp&&"/"!==a.nsp&&(b+=a.nsp+","),null!=a.id&&(b+=a.id),null!=a.data&&(b+=JSON.stringify(a.data,this.replacer)),bv("encoded %j as %s",a,b),b}encodeAsBinary(a){let b,c,d=(b=[],c=a.data,a.data=function a(b,c,d){if(!b)return b;if(bu(b)){let a={_placeholder:!0,num:c.length};return c.push(b),a}if(Array.isArray(b)){let d=Array(b.length);for(let e=0;e<b.length;e++)d[e]=a(b[e],c);return d}if("object"==typeof b&&!(b instanceof Date)){if(b.toJSON&&"function"==typeof b.toJSON&&!d)return a(b.toJSON(),c,!0);let e={};for(let d in b)Object.prototype.hasOwnProperty.call(b,d)&&(e[d]=a(b[d],c));return e}return b}(c,b),a.attachments=b.length,{packet:a,buffers:b}),e=this.encodeAsString(d.packet),f=d.buffers;return f.unshift(e),f}}class by extends aP{constructor(a){super(),this.opts=Object.assign({reviver:void 0,maxAttachments:10},"function"==typeof a?{reviver:a}:a)}add(a){let b;if("string"==typeof a){if(this.reconstructor)throw Error("got plaintext data when reconstructing a packet");let c=(b=this.decodeString(a)).type===g.BINARY_EVENT;c||b.type===g.BINARY_ACK?(b.type=c?g.EVENT:g.ACK,this.reconstructor=new bz(b)):super.emitReserved("decoded",b)}else if(bu(a)||a.base64)if(this.reconstructor)(b=this.reconstructor.takeBinaryData(a))&&(this.reconstructor=null,super.emitReserved("decoded",b));else throw Error("got binary data when not reconstructing a packet");else throw Error("Unknown type: "+a)}decodeString(a){let b=0,c={type:Number(a.charAt(0))};if(void 0===g[c.type])throw Error("unknown packet type "+c.type);if(c.type===g.BINARY_EVENT||c.type===g.BINARY_ACK){let d=b+1;for(;"-"!==a.charAt(++b)&&b!=a.length;);let e=a.substring(d,b);if(e!=Number(e)||"-"!==a.charAt(b))throw Error("Illegal attachments");let f=Number(e);if(!bA(f)||f<1)throw Error("Illegal attachments");if(f>this.opts.maxAttachments)throw Error("too many attachments");c.attachments=f}if("/"===a.charAt(b+1)){let d=b+1;for(;++b&&","!==a.charAt(b)&&b!==a.length;);c.nsp=a.substring(d,b)}else c.nsp="/";let d=a.charAt(b+1);if(""!==d&&Number(d)==d){let d=b+1;for(;++b;){let c=a.charAt(b);if(null==c||Number(c)!=c){--b;break}if(b===a.length)break}c.id=Number(a.substring(d,b+1))}if(a.charAt(++b)){let d=this.tryParse(a.substr(b));if(by.isPayloadValid(c.type,d))c.data=d;else throw Error("invalid payload")}return bv("decoded %s as %j",a,c),c}tryParse(a){try{return JSON.parse(a,this.opts.reviver)}catch(a){return!1}}static isPayloadValid(a,b){switch(a){case g.CONNECT:return bB(b);case g.DISCONNECT:return void 0===b;case g.CONNECT_ERROR:return"string"==typeof b||bB(b);case g.EVENT:case g.BINARY_EVENT:return Array.isArray(b)&&("number"==typeof b[0]||"string"==typeof b[0]&&-1===bw.indexOf(b[0]));case g.ACK:case g.BINARY_ACK:return Array.isArray(b)}}destroy(){this.reconstructor&&(this.reconstructor.finishedReconstruction(),this.reconstructor=null)}}class bz{constructor(a){this.packet=a,this.buffers=[],this.reconPack=a}takeBinaryData(a){if(this.buffers.push(a),this.buffers.length===this.reconPack.attachments){var b,c;let a=(b=this.reconPack,c=this.buffers,b.data=function a(b,c){if(!b)return b;if(b&&!0===b._placeholder){if("number"==typeof b.num&&b.num>=0&&b.num<c.length)return c[b.num];throw Error("illegal attachments")}if(Array.isArray(b))for(let d=0;d<b.length;d++)b[d]=a(b[d],c);else if("object"==typeof b)for(let d in b)Object.prototype.hasOwnProperty.call(b,d)&&(b[d]=a(b[d],c));return b}(b.data,c),delete b.attachments,b);return this.finishedReconstruction(),a}return null}finishedReconstruction(){this.reconPack=null,this.buffers=[]}}let bA=Number.isInteger||function(a){return"number"==typeof a&&isFinite(a)&&Math.floor(a)===a};function bB(a){return"[object Object]"===Object.prototype.toString.call(a)}function bC(a){var b;return"string"==typeof a.nsp&&(void 0===(b=a.id)||bA(b))&&function(a,b){switch(a){case g.CONNECT:return void 0===b||bB(b);case g.DISCONNECT:return void 0===b;case g.EVENT:return Array.isArray(b)&&("number"==typeof b[0]||"string"==typeof b[0]&&-1===bw.indexOf(b[0]));case g.ACK:return Array.isArray(b);case g.CONNECT_ERROR:return"string"==typeof b||bB(b);default:return!1}}(a.type,a.data)}function bD(a,b,c){return a.on(b,c),function(){a.off(b,c)}}a.s(["Decoder",()=>by,"Encoder",()=>bx,"PacketType",()=>g,"isPacketValid",()=>bC,"protocol",0,5],10419);let bE=(0,aY.default)("socket.io-client:socket"),bF=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1});class bG extends aP{constructor(a,b,c){super(),this.connected=!1,this.recovered=!1,this.receiveBuffer=[],this.sendBuffer=[],this._queue=[],this._queueSeq=0,this.ids=0,this.acks={},this.flags={},this.io=a,this.nsp=b,c&&c.auth&&(this.auth=c.auth),this._opts=Object.assign({},c),this.io._autoConnect&&this.open()}get disconnected(){return!this.connected}subEvents(){if(this.subs)return;let a=this.io;this.subs=[bD(a,"open",this.onopen.bind(this)),bD(a,"packet",this.onpacket.bind(this)),bD(a,"error",this.onerror.bind(this)),bD(a,"close",this.onclose.bind(this))]}get active(){return!!this.subs}connect(){return this.connected||(this.subEvents(),this.io._reconnecting||this.io.open(),"open"===this.io._readyState&&this.onopen()),this}open(){return this.connect()}send(...a){return a.unshift("message"),this.emit.apply(this,a),this}emit(a,...b){var c,d,e;if(bF.hasOwnProperty(a))throw Error('"'+a.toString()+'" is a reserved event name');if(b.unshift(a),this._opts.retries&&!this.flags.fromQueue&&!this.flags.volatile)return this._addToQueue(b),this;let f={type:g.EVENT,data:b};if(f.options={},f.options.compress=!1!==this.flags.compress,"function"==typeof b[b.length-1]){let a=this.ids++;bE("emitting packet with ack id %d",a);let c=b.pop();this._registerAckCallback(a,c),f.id=a}let h=null==(d=null==(c=this.io.engine)?void 0:c.transport)?void 0:d.writable,i=this.connected&&!(null==(e=this.io.engine)?void 0:e._hasPingExpired());return this.flags.volatile&&!h?bE("discard packet as the transport is not currently writable"):i?(this.notifyOutgoingListeners(f),this.packet(f)):this.sendBuffer.push(f),this.flags={},this}_registerAckCallback(a,b){var c;let d=null!=(c=this.flags.timeout)?c:this._opts.ackTimeout;if(void 0===d){this.acks[a]=b;return}let e=this.io.setTimeoutFn(()=>{delete this.acks[a];for(let b=0;b<this.sendBuffer.length;b++)this.sendBuffer[b].id===a&&(bE("removing packet with ack id %d from the buffer",a),this.sendBuffer.splice(b,1));bE("event with ack id %d has timed out after %d ms",a,d),b.call(this,Error("operation has timed out"))},d),f=(...a)=>{this.io.clearTimeoutFn(e),b.apply(this,a)};f.withError=!0,this.acks[a]=f}emitWithAck(a,...b){return new Promise((c,d)=>{let e=(a,b)=>a?d(a):c(b);e.withError=!0,b.push(e),this.emit(a,...b)})}_addToQueue(a){let b;"function"==typeof a[a.length-1]&&(b=a.pop());let c={id:this._queueSeq++,tryCount:0,pending:!1,args:a,flags:Object.assign({fromQueue:!0},this.flags)};a.push((a,...d)=>c!==this._queue[0]?bE("packet [%d] already acknowledged",c.id):(null!==a?c.tryCount>this._opts.retries&&(bE("packet [%d] is discarded after %d tries",c.id,c.tryCount),this._queue.shift(),b&&b(a)):(bE("packet [%d] was successfully sent",c.id),this._queue.shift(),b&&b(null,...d)),c.pending=!1,this._drainQueue())),this._queue.push(c),this._drainQueue()}_drainQueue(a=!1){if(bE("draining queue"),!this.connected||0===this._queue.length)return;let b=this._queue[0];b.pending&&!a?bE("packet [%d] has already been sent and is waiting for an ack",b.id):(b.pending=!0,b.tryCount++,bE("sending packet [%d] (try n°%d)",b.id,b.tryCount),this.flags=b.flags,this.emit.apply(this,b.args))}packet(a){a.nsp=this.nsp,this.io._packet(a)}onopen(){bE("transport is open - connecting"),"function"==typeof this.auth?this.auth(a=>{this._sendConnectPacket(a)}):this._sendConnectPacket(this.auth)}_sendConnectPacket(a){this.packet({type:g.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},a):a})}onerror(a){this.connected||this.emitReserved("connect_error",a)}onclose(a,b){bE("close (%s)",a),this.connected=!1,delete this.id,this.emitReserved("disconnect",a,b),this._clearAcks()}_clearAcks(){Object.keys(this.acks).forEach(a=>{if(!this.sendBuffer.some(b=>String(b.id)===a)){let b=this.acks[a];delete this.acks[a],b.withError&&b.call(this,Error("socket has been disconnected"))}})}onpacket(a){if(a.nsp===this.nsp)switch(a.type){case g.CONNECT:a.data&&a.data.sid?this.onconnect(a.data.sid,a.data.pid):this.emitReserved("connect_error",Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case g.EVENT:case g.BINARY_EVENT:this.onevent(a);break;case g.ACK:case g.BINARY_ACK:this.onack(a);break;case g.DISCONNECT:this.ondisconnect();break;case g.CONNECT_ERROR:this.destroy();let b=Error(a.data.message);b.data=a.data.data,this.emitReserved("connect_error",b)}}onevent(a){let b=a.data||[];bE("emitting event %j",b),null!=a.id&&(bE("attaching ack callback to event"),b.push(this.ack(a.id))),this.connected?this.emitEvent(b):this.receiveBuffer.push(Object.freeze(b))}emitEvent(a){if(this._anyListeners&&this._anyListeners.length)for(let b of this._anyListeners.slice())b.apply(this,a);super.emit.apply(this,a),this._pid&&a.length&&"string"==typeof a[a.length-1]&&(this._lastOffset=a[a.length-1])}ack(a){let b=this,c=!1;return function(...d){c||(c=!0,bE("sending ack %j",d),b.packet({type:g.ACK,id:a,data:d}))}}onack(a){let b=this.acks[a.id];"function"!=typeof b?bE("bad ack %s",a.id):(delete this.acks[a.id],bE("calling ack %s with %j",a.id,a.data),b.withError&&a.data.unshift(null),b.apply(this,a.data))}onconnect(a,b){bE("socket connected with id %s",a),this.id=a,this.recovered=b&&this._pid===b,this._pid=b,this.connected=!0,this.emitBuffered(),this._drainQueue(!0),this.emitReserved("connect")}emitBuffered(){this.receiveBuffer.forEach(a=>this.emitEvent(a)),this.receiveBuffer=[],this.sendBuffer.forEach(a=>{this.notifyOutgoingListeners(a),this.packet(a)}),this.sendBuffer=[]}ondisconnect(){bE("server disconnect (%s)",this.nsp),this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach(a=>a()),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&(bE("performing disconnect (%s)",this.nsp),this.packet({type:g.DISCONNECT})),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(a){return this.flags.compress=a,this}get volatile(){return this.flags.volatile=!0,this}timeout(a){return this.flags.timeout=a,this}onAny(a){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(a),this}prependAny(a){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(a),this}offAny(a){if(!this._anyListeners)return this;if(a){let b=this._anyListeners;for(let c=0;c<b.length;c++)if(a===b[c]){b.splice(c,1);break}}else this._anyListeners=[];return this}listenersAny(){return this._anyListeners||[]}onAnyOutgoing(a){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.push(a),this}prependAnyOutgoing(a){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.unshift(a),this}offAnyOutgoing(a){if(!this._anyOutgoingListeners)return this;if(a){let b=this._anyOutgoingListeners;for(let c=0;c<b.length;c++)if(a===b[c]){b.splice(c,1);break}}else this._anyOutgoingListeners=[];return this}listenersAnyOutgoing(){return this._anyOutgoingListeners||[]}notifyOutgoingListeners(a){if(this._anyOutgoingListeners&&this._anyOutgoingListeners.length)for(let b of this._anyOutgoingListeners.slice())b.apply(this,a.data)}}var bH=a.i(10419);function bI(a){a=a||{},this.ms=a.min||100,this.max=a.max||1e4,this.factor=a.factor||2,this.jitter=a.jitter>0&&a.jitter<=1?a.jitter:0,this.attempts=0}bI.prototype.duration=function(){var a=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var b=Math.random(),c=Math.floor(b*this.jitter*a);a=(1&Math.floor(10*b))==0?a-c:a+c}return 0|Math.min(a,this.max)},bI.prototype.reset=function(){this.attempts=0},bI.prototype.setMin=function(a){this.ms=a},bI.prototype.setMax=function(a){this.max=a},bI.prototype.setJitter=function(a){this.jitter=a};let bJ=(0,aY.default)("socket.io-client:manager");class bK extends aP{constructor(a,b){var c;super(),this.nsps={},this.subs=[],a&&"object"==typeof a&&(b=a,a=void 0),(b=b||{}).path=b.path||"/socket.io",this.opts=b,aW(this,b),this.reconnection(!1!==b.reconnection),this.reconnectionAttempts(b.reconnectionAttempts||1/0),this.reconnectionDelay(b.reconnectionDelay||1e3),this.reconnectionDelayMax(b.reconnectionDelayMax||5e3),this.randomizationFactor(null!=(c=b.randomizationFactor)?c:.5),this.backoff=new bI({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(null==b.timeout?2e4:b.timeout),this._readyState="closed",this.uri=a;const d=b.parser||bH;this.encoder=new d.Encoder,this.decoder=new d.Decoder,this._autoConnect=!1!==b.autoConnect,this._autoConnect&&this.open()}reconnection(a){return arguments.length?(this._reconnection=!!a,a||(this.skipReconnect=!0),this):this._reconnection}reconnectionAttempts(a){return void 0===a?this._reconnectionAttempts:(this._reconnectionAttempts=a,this)}reconnectionDelay(a){var b;return void 0===a?this._reconnectionDelay:(this._reconnectionDelay=a,null==(b=this.backoff)||b.setMin(a),this)}randomizationFactor(a){var b;return void 0===a?this._randomizationFactor:(this._randomizationFactor=a,null==(b=this.backoff)||b.setJitter(a),this)}reconnectionDelayMax(a){var b;return void 0===a?this._reconnectionDelayMax:(this._reconnectionDelayMax=a,null==(b=this.backoff)||b.setMax(a),this)}timeout(a){return arguments.length?(this._timeout=a,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&0===this.backoff.attempts&&this.reconnect()}open(a){if(bJ("readyState %s",this._readyState),~this._readyState.indexOf("open"))return this;bJ("opening %s",this.uri),this.engine=new bo(this.uri,this.opts);let b=this.engine,c=this;this._readyState="opening",this.skipReconnect=!1;let d=bD(b,"open",function(){c.onopen(),a&&a()}),e=b=>{bJ("error"),this.cleanup(),this._readyState="closed",this.emitReserved("error",b),a?a(b):this.maybeReconnectOnOpen()},f=bD(b,"error",e);if(!1!==this._timeout){let a=this._timeout;bJ("connect attempt will timeout after %d",a);let c=this.setTimeoutFn(()=>{bJ("connect attempt timed out after %d",a),d(),e(Error("timeout")),b.close()},a);this.opts.autoUnref&&c.unref(),this.subs.push(()=>{this.clearTimeoutFn(c)})}return this.subs.push(d),this.subs.push(f),this}connect(a){return this.open(a)}onopen(){bJ("open"),this.cleanup(),this._readyState="open",this.emitReserved("open");let a=this.engine;this.subs.push(bD(a,"ping",this.onping.bind(this)),bD(a,"data",this.ondata.bind(this)),bD(a,"error",this.onerror.bind(this)),bD(a,"close",this.onclose.bind(this)),bD(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(a){try{this.decoder.add(a)}catch(a){this.onclose("parse error",a)}}ondecoded(a){aQ(()=>{this.emitReserved("packet",a)},this.setTimeoutFn)}onerror(a){bJ("error",a),this.emitReserved("error",a)}socket(a,b){let c=this.nsps[a];return c?this._autoConnect&&!c.active&&c.connect():(c=new bG(this,a,b),this.nsps[a]=c),c}_destroy(a){for(let a of Object.keys(this.nsps))if(this.nsps[a].active)return void bJ("socket %s is still active, skipping close",a);this._close()}_packet(a){bJ("writing packet %j",a);let b=this.encoder.encode(a);for(let c=0;c<b.length;c++)this.engine.write(b[c],a.options)}cleanup(){bJ("cleanup"),this.subs.forEach(a=>a()),this.subs.length=0,this.decoder.destroy()}_close(){bJ("disconnect"),this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close")}disconnect(){return this._close()}onclose(a,b){var c;bJ("closed due to %s",a),this.cleanup(),null==(c=this.engine)||c.close(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",a,b),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;let a=this;if(this.backoff.attempts>=this._reconnectionAttempts)bJ("reconnect failed"),this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{let b=this.backoff.duration();bJ("will wait %dms before reconnect attempt",b),this._reconnecting=!0;let c=this.setTimeoutFn(()=>{a.skipReconnect||(bJ("attempting reconnect"),this.emitReserved("reconnect_attempt",a.backoff.attempts),a.skipReconnect||a.open(b=>{b?(bJ("reconnect attempt error"),a._reconnecting=!1,a.reconnect(),this.emitReserved("reconnect_error",b)):(bJ("reconnect success"),a.onreconnect())}))},b);this.opts.autoUnref&&c.unref(),this.subs.push(()=>{this.clearTimeoutFn(c)})}}onreconnect(){let a=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",a)}}let bL=(0,aY.default)("socket.io-client"),bM={};function bN(a,b){let c;"object"==typeof a&&(b=a,a=void 0);let d=function(a,b="",c){let d=a;c=c||"u">typeof location&&location,null==a&&(a=c.protocol+"//"+c.host),"string"==typeof a&&("/"===a.charAt(0)&&(a="/"===a.charAt(1)?c.protocol+a:c.host+a),/^(https?|wss?):\/\//.test(a)||(bp("protocol-less url %s",a),a=void 0!==c?c.protocol+"//"+a:"https://"+a),bp("parse %s",a),d=bi(a)),!d.port&&(/^(http|ws)$/.test(d.protocol)?d.port="80":/^(http|ws)s$/.test(d.protocol)&&(d.port="443")),d.path=d.path||"/";let e=-1!==d.host.indexOf(":")?"["+d.host+"]":d.host;return d.id=d.protocol+"://"+e+":"+d.port+b,d.href=d.protocol+"://"+e+(c&&c.port===d.port?"":":"+d.port),d}(a,(b=b||{}).path||"/socket.io"),e=d.source,f=d.id,g=d.path,h=bM[f]&&g in bM[f].nsps;return b.forceNew||b["force new connection"]||!1===b.multiplex||h?(bL("ignoring socket cache for %s",e),c=new bK(e,b)):(bM[f]||(bL("new io instance for %s",e),bM[f]=new bK(e,b)),c=bM[f]),d.query&&!b.query&&(b.query=d.queryKey),c.socket(d.path,b)}function bO(a){if(a&&"object"==typeof a&&"clientId"in a){let b=a.clientId;if("string"==typeof b)return b}}function bP(a){return"runtime.enter"===a.op||"runtime.exit"===a.op}function bQ(a){let{onFull:b,onPatch:c,onPresence:d,...e}=a,f=function(a){let{url:b,role:c,docId:d,name:e,token:f}=a,g=!1!==a.autoResync,h=bN(b,{auth:{token:f},autoConnect:!1}),i="disconnected",j=0,k="",l=[],m={patch:new Set,full:new Set,ack:new Set,presence:new Set,error:new Set,status:new Set};function n(a,b){for(let c of[...m[a]])c(b)}function o(a){i!==a&&(i=a,n("status",a))}function p(a){h.emit("def:request",{docId:d,sinceSeq:a})}function q(a){"number"==typeof a&&(g&&a>j+1&&p(j),j=Math.max(j,a))}function r(){n("presence",[...l])}function s(){return h.connected?Promise.resolve():new Promise((a,b)=>{o("connecting");let c=()=>{e(),a()},d=a=>{e(),b(a)},e=()=>{h.off("connect",c),h.off("connect_error",d)};h.once("connect",c),h.once("connect_error",d),h.connect()})}async function t(){return await s(),new Promise((a,b)=>{h.emit("bridge:join",{docId:d,role:c,name:e},c=>{if(!c||c.error){let a=c?.error??{code:"join_failed",message:"no join ack"};n("error",a),b(Error(`${a.code}: ${a.message}`));return}k=c.selfId,l=c.presence?[...c.presence]:[],j=c.snapshot?.seq??0,r(),a({selfId:k,snapshot:c.snapshot,presence:[...l]})})})}return h.on("connect",()=>o("connected")),h.on("disconnect",()=>o("disconnected")),h.on("connect_error",a=>{o("error"),n("error",{code:"connect_error",message:a?.message??String(a)})}),h.on("def:patch",a=>{q(a?.seq),a?.origin&&a.origin===k||n("patch",a)}),h.on("def:full",a=>{q(a?.seq),a?.origin&&a.origin===k||n("full",a)}),h.on("def:ack",a=>{n("ack",a)}),h.on("bridge:error",a=>{n("error",{code:a?.code??"error",message:a?.message??""})}),h.on("presence:list",a=>{l=Array.isArray(a)?[...a]:[],r()}),h.on("presence:join",a=>{let b=bO(a);b&&(l=[...l.filter(a=>a.clientId!==b),a],r())}),h.on("presence:leave",a=>{let b=bO(a);b&&(l=l.filter(a=>a.clientId!==b),r())}),h.on("presence:update",a=>{let b=bO(a);if(!b)return;let c=l.findIndex(a=>a.clientId===b);if(-1===c)l=[...l,a];else{let b={...l[c],...a};l=l.map((a,d)=>d===c?b:a)}r()}),{connect:s,join:t,emitPatch:function(a,b,c){h.emit("def:patch",{docId:d,ops:a,origin:k,baseSeq:c,mtime:b})},emitFull:function(a,b){h.emit("def:full",{docId:d,def:a,origin:k,mtime:b})},request:p,updatePresence:function(a){h.emit("presence:update",{docId:d,clientId:k,cursor:a.cursor,selection:a.selection})},on:function(a,b){let c=m[a];return c.add(b),()=>c.delete(b)},disconnect:function(){h.connected&&k&&h.emit("bridge:leave",{docId:d,clientId:k}),h.disconnect(),o("disconnected")},get status(){return i},get lastSeq(){return j},get presence(){return[...l]}}}(e),g=null,h=0,i=[],j=[],k={status:f.status,def:null,seq:0,presence:[],activeStates:[]},l=new Set;function m(){for(let a of(k={status:f.status,def:g,seq:h,presence:i,activeStates:j},[...l]))a()}return f.on("status",()=>m()),f.on("full",a=>{g=a.def,"number"==typeof a.seq&&(h=a.seq),b?.(a),m()}),f.on("patch",a=>{"number"==typeof a.seq&&(h=a.seq);let b=a.ops??[],d=b.filter(bP),e=b.filter(a=>!bP(a));e.length>0&&g&&(g=n(g,e));for(let a of d)"runtime.enter"===a.op?j.includes(a.state)||(j=[...j,a.state]):"runtime.exit"===a.op&&j.includes(a.state)&&(j=j.filter(b=>b!==a.state));c?.(a),m()}),f.on("presence",a=>{i=a,d?.(a),m()}),{getSnapshot:function(){return k},subscribe:function(a){return l.add(a),()=>{l.delete(a)}},emitPatch:function(a){f.emitPatch(a)},emitFull:function(a){f.emitFull(a)},enter:function(a,b,c){let d={op:"runtime.enter",state:a,...void 0!==b?{from:b}:{},...void 0!==c?{eventId:c}:{}};f.emitPatch([d])},exit:function(a){f.emitPatch([{op:"runtime.exit",state:a}])},connect:function(){f.join().then(a=>{g=a.snapshot.def,h=a.snapshot.seq,i=a.presence,null!==g&&b?.({docId:a.snapshot.docId,def:g,seq:h,mtime:a.snapshot.mtime,origin:"join"}),m()}).catch(()=>{m()})},disconnect:function(){f.disconnect()}}}function bR(){return{settings:{namespace:"MyApp",name:"MyStateMachine",asynchronous:!1},events:[{name:"Internal",events:[]}],state:{name:"Root",states:[{name:"Idle",kind:"normal"},{name:"End",kind:"final"}]}}}function bS(){return{positions:{}}}function bT(a,b){if(a.name===b)return a;for(let c of a.states??[]){let a=bT(c,b);if(a)return a}return null}function bU(a,b,c){return a.name===b?c(a)??a:{...a,states:a.states?.map(a=>bU(a,b,c))}}function bV(a,b){return{...a,states:a.states?.filter(a=>a.name!==b).map(a=>bV(a,b))}}function bW(a){let b=[a.name];for(let c of a.states??[])b.push(...bW(c));return b}function bX(a){return a.events.flatMap(a=>(a.events??[]).map(a=>a.id))}function bY(a){let b=[],c=bW(a.state),d=bX(a);0===d.length&&b.push({ruleId:"V001",message:"No events defined"});let e=new Set;for(let a of c)e.has(a)&&b.push({ruleId:"V002",message:`Duplicate state name: ${a}`,element:a}),e.add(a);!function a(e){for(let a of e.transitions??[])d.includes(a.event)||b.push({ruleId:"V003",message:`Transition in '${e.name}' references unknown event '${a.event}'`,element:e.name}),a.nextState&&!c.includes(a.nextState)&&b.push({ruleId:"V004",message:`Transition in '${e.name}' targets unknown state '${a.nextState}'`,element:e.name});for(let c of("final"===e.kind&&(e.transitions?.length??0)>0&&b.push({ruleId:"V007",message:`Final state '${e.name}' must not have outgoing transitions`,element:e.name}),"final"===e.kind&&(e.states?.length??0)>0&&b.push({ruleId:"V008",message:`Final state '${e.name}' must not have child states`,element:e.name}),e.states??[]))a(c)}(a.state),a.state.states&&0!==a.state.states.length||b.push({ruleId:"V005",message:"Root state must have at least one child state",element:a.state.name});let f=new Set;for(let a of d)f.has(a)&&b.push({ruleId:"V003",message:`Duplicate event ID: ${a}`,element:a}),f.add(a);return b}function bZ(a,b){return{positions:{...x(a),...b.positions}}}Object.assign(bN,{Manager:bK,Socket:bG,io:bN,connect:bN});let b$=(e=(a,b)=>({definition:bR(),layout:bZ(bR(),bS()),viewport:{...M},fileName:null,docPath:null,dirty:!1,remoteMtime:null,remoteStatus:"idle",remoteMessage:null,activeStates:[],presence:[],_applyingRemote:!1,selection:{kind:null,id:null},drawMode:"select",drawSource:null,contextMenu:{visible:!1,x:0,y:0,target:null},undoStack:[],redoStack:[],activeTab:"properties",errors:[],showCodePreview:!1,generatedCode:null,navigationPath:["Root"],currentParent:"Root",_pushHistory:()=>{let{definition:c,layout:d,undoStack:e}=b(),f={definition:JSON.parse(JSON.stringify(c)),layout:JSON.parse(JSON.stringify(d))};a({undoStack:[...e.slice(-50),f],redoStack:[]})},setDefinition:c=>{b()._pushHistory();let d=bZ(c,b().layout);a({definition:c,layout:d,dirty:!0,errors:bY(c)})},updateSettings:c=>{b()._pushHistory(),a({definition:{...b().definition,settings:{...b().definition.settings,...c}},dirty:!0})},addState:(c,d)=>{b()._pushHistory();let e={...b().definition},f=c??e.state.name;e.state=bU(e.state,f,a=>({...a,states:[...a.states??[],d]}));let g=bZ(e,b().layout);a({definition:e,layout:g,dirty:!0,errors:bY(e)})},updateState:(c,d)=>{b()._pushHistory();let e={...b().definition};e.state=bU(e.state,c,a=>({...a,...d})),a({definition:e,dirty:!0,errors:bY(e)})},removeState:c=>{b()._pushHistory();let d={...b().definition};d.state=bV(d.state,c);let e={positions:{...b().layout.positions}};delete e.positions[c],a({definition:d,layout:e,dirty:!0,errors:bY(d)})},nestState:(c,d)=>{b()._pushHistory();let e={...b().definition},f=bT(e.state,c);if(!f||c===d)return;let g=JSON.parse(JSON.stringify(f));e.state=bV(e.state,c),e.state=bU(e.state,d,a=>({...a,states:[...a.states??[],g]})),a({definition:e,dirty:!0,errors:bY(e)})},addEventSource:c=>{b()._pushHistory(),a({definition:{...b().definition,events:[...b().definition.events,c]},dirty:!0})},updateEventSource:(c,d)=>{b()._pushHistory();let e={...b().definition};e.events=e.events.map((a,b)=>b===c?{...a,...d}:a),a({definition:e,dirty:!0})},removeEventSource:c=>{b()._pushHistory();let d={...b().definition};d.events=d.events.filter((a,b)=>b!==c),a({definition:d,dirty:!0,errors:bY(d)})},addEvent:(c,d=0)=>{b()._pushHistory();let e={...b().definition},f=e.events[d]??{name:"Internal",events:[]};f.events=[...f.events??[],c],e.events=e.events.map((a,b)=>b===d?f:a),a({definition:e,dirty:!0,errors:bY(e)})},updateEvent:(c,d)=>{b()._pushHistory();let e={...b().definition};e.events=e.events.map(a=>({...a,events:a.events?.map(a=>a.id===c?{...a,...d}:a)})),a({definition:e,dirty:!0})},removeEvent:c=>{b()._pushHistory();let d={...b().definition};d.events=d.events.map(a=>({...a,events:a.events?.filter(a=>a.id!==c)})),a({definition:d,dirty:!0,errors:bY(d)})},addParameter:(c,d)=>{b()._pushHistory();let e={...b().definition};e.events=e.events.map(a=>({...a,events:a.events?.map(a=>a.id===c?{...a,parameters:[...a.parameters??[],d]}:a)})),a({definition:e,dirty:!0})},removeParameter:(c,d)=>{b()._pushHistory();let e={...b().definition};e.events=e.events.map(a=>({...a,events:a.events?.map(a=>a.id===c?{...a,parameters:a.parameters?.filter((a,b)=>b!==d)}:a)})),a({definition:e,dirty:!0})},updateParameter:(c,d,e)=>{b()._pushHistory();let f={...b().definition};f.events=f.events.map(a=>({...a,events:a.events?.map(a=>a.id===c?{...a,parameters:a.parameters?.map((a,b)=>b===d?{...a,...e}:a)}:a)})),a({definition:f,dirty:!0})},addAction:(c,d,e)=>{b()._pushHistory();let f={...b().definition};f.state=bU(f.state,c,a=>{let b=a[d]??{actions:[]};return{...a,[d]:{actions:[...b.actions,e]}}}),a({definition:f,dirty:!0})},removeAction:(c,d,e)=>{b()._pushHistory();let f={...b().definition};f.state=bU(f.state,c,a=>{let b=a[d];return b?{...a,[d]:{actions:b.actions.filter((a,b)=>b!==e)}}:a}),a({definition:f,dirty:!0})},updateAction:(c,d,e,f)=>{b()._pushHistory();let g={...b().definition};g.state=bU(g.state,c,a=>{let b=a[d];return b?{...a,[d]:{actions:b.actions.map((a,b)=>b===e?f:a)}}:a}),a({definition:g,dirty:!0})},addTransition:(c,d)=>{b()._pushHistory();let e={...b().definition};e.state=bU(e.state,c,a=>({...a,transitions:[...a.transitions??[],d]})),a({definition:e,dirty:!0,errors:bY(e)})},updateTransition:(c,d,e)=>{b()._pushHistory();let f={...b().definition};f.state=bU(f.state,c,a=>({...a,transitions:a.transitions?.map((a,b)=>b===d?{...a,...e}:a)})),a({definition:f,dirty:!0})},removeTransition:(c,d)=>{b()._pushHistory();let e={...b().definition};e.state=bU(e.state,c,a=>({...a,transitions:a.transitions?.filter((a,b)=>b!==d)})),a({definition:e,dirty:!0,errors:bY(e)})},setStatePosition:(c,d)=>{a({layout:{positions:{...b().layout.positions,[c]:d}}})},arrangeLayout:()=>{b()._pushHistory(),a({layout:{positions:x(b().definition)}})},hydrateLayout:(c,d)=>{a({layout:{positions:{...b().layout.positions,...c}},...d?{viewport:d}:{}})},setViewport:b=>a({viewport:b}),select:(b,c)=>a({selection:{kind:b,id:c}}),clearSelection:()=>a({selection:{kind:null,id:null}}),setDrawMode:b=>a({drawMode:b,drawSource:null}),setDrawSource:b=>a({drawSource:b}),showContextMenu:(b,c,d)=>a({contextMenu:{visible:!0,x:b,y:c,target:d}}),hideContextMenu:()=>a({contextMenu:{visible:!1,x:0,y:0,target:null}}),undo:()=>{let{undoStack:c,definition:d,layout:e}=b();if(0===c.length)return;let f=c[c.length-1],g={definition:JSON.parse(JSON.stringify(d)),layout:JSON.parse(JSON.stringify(e))};a({definition:f.definition,layout:f.layout,undoStack:c.slice(0,-1),redoStack:[...b().redoStack,g],dirty:!0,errors:bY(f.definition)})},redo:()=>{let{redoStack:c,definition:d,layout:e}=b();if(0===c.length)return;let f=c[c.length-1],g={definition:JSON.parse(JSON.stringify(d)),layout:JSON.parse(JSON.stringify(e))};a({definition:f.definition,layout:f.layout,undoStack:[...b().undoStack,g],redoStack:c.slice(0,-1),dirty:!0,errors:bY(f.definition)})},canUndo:()=>b().undoStack.length>0,canRedo:()=>b().redoStack.length>0,setActiveTab:b=>a({activeTab:b}),loadFromJson:(b,c)=>{try{let d=JSON.parse(b),e=d.stateMachine??d.StateMachine??d,f=bZ(e,bS()),g=e.state?.name??"Root";a({definition:e,layout:f,fileName:c??null,dirty:!1,errors:bY(e),selection:{kind:null,id:null},undoStack:[],redoStack:[],navigationPath:[g],currentParent:g})}catch(a){console.error("Failed to parse definition:",a)}},exportJson:()=>{let{definition:a}=b();return JSON.stringify({stateMachine:a},null,2)},applyRemote:(c,d,e)=>{try{let f=JSON.parse(c),g=f.stateMachine??f.StateMachine??f,h=bZ(g,b().layout),i=g.state?.name??"Root",j=b(),k=new Set(bW(g.state)),l=j.navigationPath.filter(a=>k.has(a)),m=l.length?l:[i],n=m[m.length-1],o=j.selection,p=("state"===o.kind?!!o.id&&k.has(o.id):"transition"===o.kind?!!o.id&&k.has(o.id.split(":")[0]):"event"===o.kind&&!!o.id&&bX(g).includes(o.id))?o:{kind:null,id:null};a({definition:g,layout:h,fileName:e??b().fileName,dirty:!1,remoteMtime:d,remoteStatus:"synced",remoteMessage:null,errors:bY(g),selection:p,navigationPath:m,currentParent:n})}catch(b){a({remoteStatus:"error",remoteMessage:String(b)})}},setRemoteStatus:(b,c=null)=>a({remoteStatus:b,remoteMessage:c}),setRemoteMtime:b=>a({remoteMtime:b}),setDocPath:b=>a({docPath:b||null}),enterState:c=>{let d=b().activeStates;d.includes(c)||a({activeStates:[...d,c]})},exitState:c=>{let d=b().activeStates;d.includes(c)&&a({activeStates:d.filter(a=>a!==c)})},setPresence:b=>a({presence:b}),applyRemoteOps:(c,d,e)=>{a({_applyingRemote:!0});try{let e=b(),f=c.filter(a=>"runtime.enter"!==a.op&&"runtime.exit"!==a.op),g=f.length?n(e.definition,f):e.definition,h=e.activeStates;for(let a of c)"runtime.enter"===a.op?h.includes(a.state)||(h=[...h,a.state]):"runtime.exit"===a.op&&h.includes(a.state)&&(h=h.filter(b=>b!==a.state));let i=bZ(g,e.layout),j=g.state?.name??"Root",k=new Set(bW(g.state)),l=e.navigationPath.filter(a=>k.has(a)),m=l.length?l:[j],o=m[m.length-1],p=e.selection,q=("state"===p.kind?!!p.id&&k.has(p.id):"transition"===p.kind?!!p.id&&k.has(p.id.split(":")[0]):"event"===p.kind&&!!p.id&&bX(g).includes(p.id))?p:{kind:null,id:null};a({definition:g,layout:i,activeStates:h,dirty:!1,remoteMtime:d,remoteStatus:"synced",remoteMessage:null,errors:bY(g),selection:q,navigationPath:m,currentParent:o})}catch(b){a({remoteStatus:"error",remoteMessage:String(b)})}finally{a({_applyingRemote:!1})}},validate:()=>{let c=bY(b().definition);return a({errors:c}),c},setGeneratedCode:b=>a({generatedCode:b}),setShowCodePreview:b=>a({showCodePreview:b}),navigateInto:c=>{let{definition:d,navigationPath:e}=b(),f=bT(d.state,c);f&&(f.states?.length??0)>0&&a({navigationPath:[...e,c],currentParent:c,selection:{kind:null,id:null}})},navigateUp:c=>{let{navigationPath:d}=b();if(d.length<=1)return;let e=c??d.length-2,f=d.slice(0,e+1);a({navigationPath:f,currentParent:f[f.length-1],selection:{kind:null,id:null}})},getCurrentChildren:()=>{let{definition:a,currentParent:c}=b(),d=bT(a.state,c);return d?.states??[]}}))?aE(e):aE,b_="canvas",b0=`[data-pinch-owner="${b_}"]`;function b1(a){return!!a&&"function"==typeof a.closest&&null!==a.closest(b0)}let b2="stateloom-canvas",b3="#030712",b4=["png","jpeg","svg","mermaid","markdown"],b5={png:"PNG",jpeg:"JPEG",svg:"SVG",mermaid:"Mermaid",markdown:"Markdown"},b6={png:"image/png",jpeg:"image/jpeg",svg:"image/svg+xml",mermaid:"text/vnd.mermaid",markdown:"text/markdown"},b7={png:"png",jpeg:"jpg",svg:"svg",mermaid:"mmd",markdown:"md"};async function b8(a,b,c={}){var d,e,f;let g;if("mermaid"===a||"markdown"===a){let c,f;g=new Blob([(d=b.definition,e="markdown"===a,c=["stateDiagram-v2"],d.state&&function a(b,c,d){let e=T(b);if(0===e.length)return;let f=" ".repeat(c+1),g=new Set;for(let a of e)for(let b of a.transitions??[]){if(!b.nextState)continue;let c=b.condition?`${b.event} [${b.condition}]`:b.event;d.push(`${f}${a.name} --> ${b.nextState} : ${c}`),g.add(a.name),g.add(b.nextState)}for(let a of e)g.has(a.name)||d.push(`${f}${a.name}`);for(let b of e)0!==T(b).length&&(d.push(`${f}state ${b.name} {`),a(b,c+1,d),d.push(`${f}}`))}(d.state,0,c),f=c.join("\n"),e?`\`\`\`mermaid
|
|
2
|
+
`+Object.keys(d).map(a=>`${a}: ${d[a]}`).join("\r\n")+"\r\n\r\n"+c)}function s(a,b,c,d,e,f){if(a.listenerCount("wsClientError")){let d=Error(e);Error.captureStackTrace(d,s),a.emit("wsClientError",d,c,b)}else r(c,d,e,f)}b.exports=class extends d{constructor(a,b){if(super(),null==(a={allowSynchronousEvents:!0,autoPong:!0,maxBufferedChunks:262144,maxFragments:16384,maxPayload:0x6400000,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:l,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:k,...a}).port&&!a.server&&!a.noServer||null!=a.port&&(a.server||a.noServer)||a.server&&a.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(null!=a.port?(this._server=e.createServer((a,b)=>{let c=e.STATUS_CODES[426];b.writeHead(426,{"Content-Length":c.length,"Content-Type":"text/plain"}),b.end(c)}),this._server.listen(a.port,a.host,a.backlog,b)):a.server&&(this._server=a.server),this._server){const a=this.emit.bind(this,"connection");this._removeListeners=function(a,b){for(let c of Object.keys(b))a.on(c,b[c]);return function(){for(let c of Object.keys(b))a.removeListener(c,b[c])}}(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(b,c,d)=>{this.handleUpgrade(b,c,d,a)}})}!0===a.perMessageDeflate&&(a.perMessageDeflate={}),a.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=a,this._state=0}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(a){if(2===this._state){a&&this.once("close",()=>{a(Error("The server is not running"))}),process.nextTick(p,this);return}if(a&&this.once("close",a),1!==this._state)if(this._state=1,this.options.noServer||this.options.server)this._server&&(this._removeListeners(),this._removeListeners=this._server=null),this.clients&&this.clients.size?this._shouldEmitClose=!0:process.nextTick(p,this);else{let a=this._server;this._removeListeners(),this._removeListeners=this._server=null,a.close(()=>{p(this)})}}shouldHandle(a){if(this.options.path){let b=a.url.indexOf("?");if((-1!==b?a.url.slice(0,b):a.url)!==this.options.path)return!1}return!0}handleUpgrade(a,b,c,d){b.on("error",q);let e=a.headers["sec-websocket-key"],f=a.headers.upgrade,g=+a.headers["sec-websocket-version"];if("GET"!==a.method)return void s(this,a,b,405,"Invalid HTTP method");if(void 0===f||"websocket"!==f.toLowerCase())return void s(this,a,b,400,"Invalid Upgrade header");if(void 0===e||!o.test(e))return void s(this,a,b,400,"Missing or invalid Sec-WebSocket-Key header");if(13!==g&&8!==g)return void s(this,a,b,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});if(!this.shouldHandle(a))return void r(b,400);let k=a.headers["sec-websocket-protocol"],l=new Set;if(void 0!==k)try{l=j.parse(k)}catch(c){s(this,a,b,400,"Invalid Sec-WebSocket-Protocol header");return}let m=a.headers["sec-websocket-extensions"],n={};if(this.options.perMessageDeflate&&void 0!==m){let c=new i({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let a=h.parse(m);a[i.extensionName]&&(c.accept(a[i.extensionName]),n[i.extensionName]=c)}catch(c){s(this,a,b,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let f={origin:a.headers[`${8===g?"sec-websocket-origin":"origin"}`],secure:!!(a.socket.authorized||a.socket.encrypted),req:a};if(2===this.options.verifyClient.length)return void this.options.verifyClient(f,(f,g,h,i)=>{if(!f)return r(b,g||401,h,i);this.completeUpgrade(n,e,l,a,b,c,d)});if(!this.options.verifyClient(f))return r(b,401)}this.completeUpgrade(n,e,l,a,b,c,d)}completeUpgrade(a,b,c,d,e,f,j){if(!e.readable||!e.writable)return e.destroy();if(e[n])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>0)return r(e,503);let k=g("sha1").update(b+m).digest("base64"),l=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${k}`],o=new this.options.WebSocket(null,void 0,this.options);if(c.size){let a=this.options.handleProtocols?this.options.handleProtocols(c,d):c.values().next().value;a&&(l.push(`Sec-WebSocket-Protocol: ${a}`),o._protocol=a)}if(a[i.extensionName]){let b=a[i.extensionName].params,c=h.format({[i.extensionName]:[b]});l.push(`Sec-WebSocket-Extensions: ${c}`),o._extensions=a}this.emit("headers",l,d),e.write(l.concat("\r\n").join("\r\n")),e.removeListener("error",q),o.setSocket(e,f,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxBufferedChunks:this.options.maxBufferedChunks,maxFragments:this.options.maxFragments,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients&&(this.clients.add(o),o.on("close",()=>{this.clients.delete(o),this._shouldEmitClose&&!this.clients.size&&process.nextTick(p,this)})),j(o,d)}}},95421,a=>{"use strict";let b,c,d,e;var f,g,h=a.i(56856),i=a.i(55132);function j(a){return JSON.parse(JSON.stringify(a))}function k(a,b){for(let c of a.states??[]){if(c.name===b)return a;let d=k(c,b);if(d)return d}return null}function l(a,b,c){let d=function a(b,c){if(b.name===c)return b;for(let d of b.states??[]){let b=a(d,c);if(b)return b}return null}(a,b);if(!d)throw Error(`applyPatchOps: ${c} references missing state "${b}"`);return d}function m(a,b,c){let d=function(a,b){for(let c of a.events){let a=c.events??[];for(let d=0;d<a.length;d++)if(a[d].id===b)return{source:c,event:a[d],index:d}}return null}(a,b);if(!d)throw Error(`applyPatchOps: ${c} references missing event "${b}"`);return d}function n(a,b){let c=j(a);for(let a of b)switch(a.op){case"settings.update":c.settings={...c.settings,...a.patch},""===c.settings.notes&&delete c.settings.notes;break;case"state.add":{let b=null===a.parent?c.state:l(c.state,a.parent,"state.add");b.states||(b.states=[]);let d=a.index??b.states.length;b.states.splice(d,0,j(a.state));break}case"state.update":{let b=l(c.state,a.name,"state.update");Object.assign(b,a.patch),""===b.notes&&delete b.notes;break}case"state.remove":{if(c.state.name===a.name)throw Error(`applyPatchOps: cannot remove root state "${a.name}"`);let b=k(c.state,a.name);if(!b||!b.states)throw Error(`applyPatchOps: state.remove references missing state "${a.name}"`);let d=b.states.findIndex(b=>b.name===a.name);if(d<0)throw Error(`applyPatchOps: state.remove references missing state "${a.name}"`);b.states.splice(d,1),0===b.states.length&&delete b.states;break}case"state.nest":{let b=l(c.state,a.child,"state.nest"),d=l(c.state,a.newParent,"state.nest"),e=k(c.state,a.child);if(!e||!e.states)throw Error(`applyPatchOps: state.nest cannot detach root or missing state "${a.child}"`);let f=e.states.findIndex(b=>b.name===a.child),[g]=e.states.splice(f,1);0===e.states.length&&delete e.states,d.states||(d.states=[]),d.states.push(g??j(b));break}case"eventSource.add":{let b=a.index??c.events.length;c.events.splice(b,0,j(a.source));break}case"eventSource.update":{let b=c.events[a.index];if(!b)throw Error(`applyPatchOps: eventSource.update index ${a.index} out of range`);c.events[a.index]={...b,...a.patch};break}case"eventSource.remove":if(!c.events[a.index])throw Error(`applyPatchOps: eventSource.remove index ${a.index} out of range`);c.events.splice(a.index,1);break;case"event.add":{let b=c.events[a.sourceIndex];if(!b)throw Error(`applyPatchOps: event.add sourceIndex ${a.sourceIndex} out of range`);b.events||(b.events=[]);let d=a.index??b.events.length;b.events.splice(d,0,j(a.event));break}case"event.update":Object.assign(m(c,a.id,"event.update").event,a.patch);break;case"event.remove":{let b=m(c,a.id,"event.remove");b.source.events.splice(b.index,1),0===b.source.events.length&&delete b.source.events;break}case"parameter.add":{let b=m(c,a.eventId,"parameter.add");b.event.parameters||(b.event.parameters=[]);let d=a.index??b.event.parameters.length;b.event.parameters.splice(d,0,j(a.parameter));break}case"parameter.update":{let b=m(c,a.eventId,"parameter.update").event.parameters??[];if(!b[a.index])throw Error(`applyPatchOps: parameter.update index ${a.index} out of range for event "${a.eventId}"`);b[a.index]={...b[a.index],...a.patch};break}case"parameter.remove":{let b=m(c,a.eventId,"parameter.remove"),d=b.event.parameters;if(!d||!d[a.index])throw Error(`applyPatchOps: parameter.remove index ${a.index} out of range for event "${a.eventId}"`);d.splice(a.index,1),0===d.length&&delete b.event.parameters;break}case"transition.add":{let b=l(c.state,a.state,"transition.add");b.transitions||(b.transitions=[]);let d=a.index??b.transitions.length;b.transitions.splice(d,0,j(a.transition));break}case"transition.update":{let b=l(c.state,a.state,"transition.update").transitions??[];if(!b[a.index])throw Error(`applyPatchOps: transition.update index ${a.index} out of range for state "${a.state}"`);b[a.index]={...b[a.index],...a.patch};break}case"transition.remove":{let b=l(c.state,a.state,"transition.remove"),d=b.transitions;if(!d||!d[a.index])throw Error(`applyPatchOps: transition.remove index ${a.index} out of range for state "${a.state}"`);d.splice(a.index,1),0===d.length&&delete b.transitions;break}case"action.add":{let b=l(c.state,a.state,"action.add"),d=b[a.hook]??(b[a.hook]={actions:[]}),e=a.index??d.actions.length;d.actions.splice(e,0,j(a.action));break}case"action.update":{let b=l(c.state,a.state,"action.update")[a.hook];if(!b||!b.actions[a.index])throw Error(`applyPatchOps: action.update index ${a.index} out of range for state "${a.state}" ${a.hook}`);b.actions[a.index]=j(a.action);break}case"action.remove":{let b=l(c.state,a.state,"action.remove"),d=b[a.hook];if(!d||!d.actions[a.index])throw Error(`applyPatchOps: action.remove index ${a.index} out of range for state "${a.state}" ${a.hook}`);d.actions.splice(a.index,1),0===d.actions.length&&delete b[a.hook];break}case"runtime.enter":case"runtime.exit":break;default:throw Error(`applyPatchOps: unknown op ${JSON.stringify(a)}`)}return c}function o(a){let b=[a];for(let c of a.states??[])b.push(...o(c));return b}function p(a){let b=new Map;b.set(a.name,null);let c=a=>{for(let d of a.states??[])b.set(d.name,a.name),c(d)};return c(a),b}function q(a,b){return JSON.stringify(a)===JSON.stringify(b)}function r(a,b,c,d,e){let f=Math.min(c.length,d.length);for(let g=0;g<f;g++)q(c[g],d[g])||e.push({op:"action.update",state:a,hook:b,index:g,action:d[g]});for(let c=f;c<d.length;c++)e.push({op:"action.add",state:a,hook:b,action:d[c],index:c});for(let f=c.length-1;f>=d.length;f--)e.push({op:"action.remove",state:a,hook:b,index:f})}function s(a){let b=0;for(let c=0;c<a.length;c++)b=Math.imul(b,31)+a.charCodeAt(c)|0;let c=(b%360+360)%360;return`hsl(${c}, 65%, 55%)`}let t={hSpacing:220,vSpacing:140,nodeWidth:160,nodeHeight:60,compositeWidth:300,compositeHeight:200,originX:100,originY:120,sweeps:2,includeRoot:!0},u=(a,b)=>`${a}\u0000${b}`;function v(a){let b=new Set,c=[];for(let d of a.states??[])b.has(d.name)||(b.add(d.name),c.push(d));return c}function w(a,b){let c=new Map(a.map(a=>[a,[]]));for(let a of b)c.get(a.from).push(a.to);return c}function x(a,b={}){let c={...t,...b},d="state"in a?a.state:a,e={};if(!d)return e;if(!function a(b,c,d,e,f){let g=v(b);if(0===g.length)return;let h=g.map(a=>a.name),i=new Map(g.map(a=>[a.name,a])),j=function(a){let b=new Set(a.map(a=>a.name)),c=new Set,d=[];for(let e of a)for(let a of e.transitions??[]){let f=a.nextState;if(!f||f===e.name||!b.has(f))continue;let g=u(e.name,f);c.has(g)||(c.add(g),d.push({from:e.name,to:f}))}return d}(g),k=function(a,b){let c=w(a,b),d=new Map(a.map(a=>[a,0])),e=new Set;for(let b of a){if(0!==d.get(b))continue;d.set(b,1);let a=[{node:b,i:0}];for(;a.length>0;){let b=a[a.length-1],f=c.get(b.node);if(b.i<f.length){let c=f[b.i++],g=d.get(c);1===g?e.add(u(b.node,c)):0===g&&(d.set(c,1),a.push({node:c,i:0}))}else d.set(b.node,2),a.pop()}}return e}(h,j),l=j.filter(a=>!k.has(u(a.from,a.to))),m=function(a,b){let c=w(a,b),d=new Map(a.map(a=>[a,0]));for(let a of b)d.set(a.to,(d.get(a.to)??0)+1);let e=new Map(a.map(a=>[a,0])),f=a.filter(a=>0===d.get(a));for(let a=0;a<f.length;a++){let b=f[a];for(let a of c.get(b)){e.set(a,Math.max(e.get(a),e.get(b)+1));let c=d.get(a)-1;d.set(a,c),0===c&&f.push(a)}}return e}(h,l),n=function(a,b,c){let d=new Map(a.map(a=>[a,[]]));for(let a of b)d.get(a.from).push(a.to),d.get(a.to).push(a.from);let e=new Set([c]),f=[c];for(;f.length>0;){let a=f.pop();for(let b of d.get(a)??[])e.has(b)||(e.add(b),f.push(b))}return e}(h,j,h[0]),o=0;for(let a of h)n.has(a)&&(o=Math.max(o,m.get(a)));for(let a of h)n.has(a)||m.set(a,m.get(a)+o+1);let p=Array.from({length:Math.max(...h.map(a=>m.get(a)))+1},()=>[]);for(let a of h)p[m.get(a)].push(a);!function(a,b,c){let d=new Map,e=new Map,f=(a,b,c)=>{let d=a.get(b);d?d.push(c):a.set(b,[c])};for(let a of b)f(d,a.to,a.from),f(e,a.from,a.to);let g=new Map,h=()=>{a.forEach(a=>a.forEach((a,b)=>g.set(a,b)))};h();let i=(a,b)=>{let c=a.map((a,c)=>{let d=(b.get(a)??[]).filter(a=>g.has(a));return{name:a,key:d.length?d.reduce((a,b)=>a+g.get(b),0)/d.length:c,i:c}});c.sort((a,b)=>a.key===b.key?a.i-b.i:a.key-b.key);for(let b=0;b<c.length;b++)a[b]=c[b].name};for(let b=0;b<c;b++){for(let b=1;b<a.length;b++)i(a[b],d),h();for(let b=a.length-2;b>=0;b--)i(a[b],e),h()}}(p,l,e.sweeps);let q=e.hSpacing-e.nodeWidth,r=e.vSpacing-e.nodeHeight,s=a=>Math.max(e.hSpacing,a+q),t=new Map(h.map(a=>{var b;return[a,(b=i.get(a),(b.states?.length??0)>0?{width:e.compositeWidth,height:e.compositeHeight}:{width:e.nodeWidth,height:e.nodeHeight})]})),x=p.map(a=>a.reduce((a,b)=>a+s(t.get(b).width),0)),y=c+Math.max(...x,0)/2,z=d;for(let b of(p.forEach((a,b)=>{let c=y-x[b]/2,d=e.nodeHeight;for(let b of a){let a=t.get(b),e=s(a.width);f[b]={x:Math.round(c+(e-a.width)/2),y:Math.round(z),width:a.width,height:a.height},c+=e,d=Math.max(d,a.height)}z+=d+r}),g)){if((b.states?.length??0)===0)continue;let c=f[b.name];a(b,c.x+20,c.y+40,e,f)}}(d,c.originX,c.originY,c,e),c.includeRoot){let a=v(d).map(a=>e[a.name]).filter(Boolean);if(0===a.length)e[d.name]={x:20,y:20,width:400,height:350};else{let b=Math.min(...a.map(a=>a.x)),c=Math.min(...a.map(a=>a.y)),f=Math.max(...a.map(a=>a.x+a.width)),g=Math.max(...a.map(a=>a.y+a.height));e[d.name]={x:Math.round(b-40),y:Math.round(c-40),width:Math.round(f-b+80),height:Math.round(g-c+80)}}}return e}let y=(a,b)=>a.length*b*.55,z=a=>`[${a.length>32?`${a.slice(0,31).trimEnd()}…`:a}]`,A=a=>({width:Math.max(56,Math.max(y(a.event,11),a.condition?y(z(a.condition),9):0)+16)+16*!!a.glyph,height:a.condition?28:18}),B=a=>({x:a.x+5,y:a.cy-12-3}),C=(a,b)=>a.x<b.x+b.width&&b.x<a.x+a.width&&a.y<b.y+b.height&&b.y<a.y+a.height,D={along:[.5,.36,.64,.24,.76,.14,.86],aside:[0,.6,-.6],across:[0,-1.3,1.3,-2.6,2.6]};function E(a,b,c={}){let{along:d,aside:e,across:f}={...D,...c},g=a.map((a,b)=>({label:a,i:b,width:A(a).width})).sort((a,b)=>a.width===b.width?a.i-b.i:b.width-a.width),h=[];for(let{label:a}of g){let{width:c,height:g}=A(a),i=8*!!a.glyph,j=null,k=1/0;a:for(let l of f)for(let f of e)for(let e of d){let d=a.at(e),m=d.x+f*c,n=d.y+l*g,o={x:m-c/2,y:n-18,width:c,height:g},p=[...h,...b].filter(a=>C(o,a)).length,q={...o,cx:m+i,cy:n,label:a};if(0===p){j=q;break a}p<k&&(k=p,j=q)}j&&h.push(j)}return h}let F=(a,b,c=2.2,d)=>({id:a,paths:b,strokeWidth:c,circles:d}),G=F("signal",["M3 12h10","m13 6 6 6-6 6Z"]),H=[{glyph:F("confirm",["m4 13 5.5 5.5L20 6"],2.4),words:["confirm","approve","accept","commit"]},{glyph:F("complete",["m8 12 3 3 5-6"],2.2,[{cx:12,cy:12,r:8.5}]),words:["complete","finish","done","close"]},{glyph:F("skip",["M4 17c0-6 4.5-9 9-9h6","m15 4 4.5 4-4.5 4"]),words:["skip","ignore","bypass"]},{glyph:F("flag",["M6 21V4","M6 4h12l-3 4.5 3 4.5H6Z"]),words:["flag","mark","revisit","review"]},{glyph:F("advance",["M4 6l8 6-8 6Z","M13 6l7 6-7 6Z"]),words:["advance","next","forward","step"]},{glyph:F("pause",["M9 5v14M15 5v14"],2.6),words:["pause","hold","suspend","stop"]},{glyph:F("play",["M7 4.5 19 12 7 19.5Z"]),words:["resume","start","begin","play","run"]},{glyph:F("clock",["M12 7.5V12l3.5 2.5"],2.2,[{cx:12,cy:12,r:8.5}]),words:["timeout","expire","tick","delay","after","elapse"]},{glyph:F("change",["M3 14c3-6 6-6 9 0s6 6 9 0"]),words:["change","update","edit","modify","set"]}];[...H.map(a=>a.glyph)];let I=a=>Math.round(100*a)/100;function J(a,b,c,d){return{p0:a,p1:b,p2:c,p3:d,path:`M ${I(a.x)} ${I(a.y)} C ${I(b.x)} ${I(b.y)}, ${I(c.x)} ${I(c.y)}, ${I(d.x)} ${I(d.y)}`,at:e=>{let f=1-e,g=f*f*f,h=3*f*f*e,i=3*f*e*e,j=e*e*e;return{x:g*a.x+h*b.x+i*c.x+j*d.x,y:g*a.y+h*b.y+i*c.y+j*d.y}}}}function K(a,b){let c=a.map(({from:a,to:c})=>{var d,e;return a===c?null:(d=b(a),(e=b(c)).y>=d.y+d.height?["bottom","top"]:e.y+e.height<=d.y?["top","bottom"]:e.x>=d.x+d.width?["right","left"]:e.x+e.width<=d.x?["left","right"]:["bottom","top"])}),d=new Map,e=(a,b,c)=>{let e=`${a}\0${b}`,f=d.get(e);f?f.push(c):d.set(e,[c])},f=(a,b)=>"top"===b||"bottom"===b?a.x+a.width/2:a.y+a.height/2;a.forEach((a,d)=>{let g=c[d];if(!g)return;let[h,i]=g;e(a.from,h,{edge:d,toward:f(b(a.to),h),role:"out"}),e(a.to,i,{edge:d,toward:f(b(a.from),i),role:"in"})});let g=new Map;for(let[a,c]of d){let[d,e]=a.split("\0"),f=b(d),h=[...c].sort((a,b)=>a.toward===b.toward?a.edge-b.edge:a.toward-b.toward);h.forEach((a,b)=>{g.set(`${a.edge}\0${a.role}`,function(a,b,c,d){let e="top"===b||"bottom"===b,f=e?a.width:a.height,g=e?a.x+a.width/2:a.y+a.height/2,h=d>1?Math.min(.72*f,40*(d-1)):0,i=d>1?g-h/2+h*c/(d-1):g;return"top"===b?{x:i,y:a.y}:"bottom"===b?{x:i,y:a.y+a.height}:"left"===b?{x:a.x,y:i}:{x:a.x+a.width,y:i}}(f,e,b,h.length))})}return a.map((a,d)=>{let e=c[d];if(!e){var f;let c,d,e;return c=(f=b(a.from)).x+f.width,d=f.y+.35*f.height,J({x:c,y:d},{x:c+44,y:d-12},{x:c+44,y:(e=f.y+.65*f.height)+12},{x:c,y:e})}let h=g.get(`${d}\0out`),i=g.get(`${d}\0in`);var j=e[0];if("top"===j||"bottom"===j){let a=(h.y+i.y)/2;return J(h,{x:h.x,y:a},{x:i.x,y:a},i)}let k=(h.x+i.x)/2;return J(h,{x:k,y:h.y},{x:k,y:i.y},i)})}let L={min:.2,max:2.5},M={x:0,y:0,scale:1};function N(a,b=L){return Number.isFinite(a)?Math.min(b.max,Math.max(b.min,a)):1}function O(a,b,c){return{x:a.x+b,y:a.y+c,scale:a.scale}}function P(a,b,c,d=L){return Q(a,a.scale*b,c,d)}function Q(a,b,c,d=L){let e=N(b,d);if(e===a.scale)return a;let f={x:(c.x-a.x)/a.scale,y:(c.y-a.y)/a.scale};return{x:c.x-f.x*e,y:c.y-f.y*e,scale:e}}function R(a,b,c,d={}){let e=d.padding??48,f=d.maxScale??1,g=d.limits??L;if(0===a.length||b<=0||c<=0)return{...M};let h=1/0,i=1/0,j=-1/0,k=-1/0;for(let b of a)h=Math.min(h,b.x),i=Math.min(i,b.y),j=Math.max(j,b.x+b.width),k=Math.max(k,b.y+b.height);let l=Math.max(1,j-h),m=Math.max(1,k-i),n=N(Math.min(f,Math.min(Math.max(1,b-2*e)/l,Math.max(1,c-2*e)/m)),g);return{x:(b-l*n)/2-h*n,y:(c-m*n)/2-i*n,scale:n}}function S(a){return`translate(${a.x} ${a.y}) scale(${a.scale})`}function T(a){let b=new Set,c=[];for(let d of a.states??[])b.has(d.name)||(b.add(d.name),c.push(d));return c}function U(a){return a.stateOf?Array.isArray(a.stateOf)?a.stateOf:[a.stateOf]:[]}let V=["1:1","1:N","N:1","N:M"];function W(a){return a.toLowerCase().endsWith(".erdf.json")}function X(a){return!!a&&"object"==typeof a&&Array.isArray(a.entities)&&!("state"in a)}function Y(a,b){let c=RegExp(`(?<![\\w.])${b.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}\\.([A-Za-z_]\\w*)\\b(?!\\s*\\()`,"g"),d=[];for(let b of a.matchAll(c))d.includes(b[1])||d.push(b[1]);return d}let Z=a=>({settings:{...a.settings},entities:(a.entities??[]).map(a=>({...a,attributes:(a.attributes??[]).map(a=>({...a}))})),relationships:(a.relationships??[]).map(a=>({...a}))});function $(a,b){let c=a.entities.find(a=>a.name===b);if(!c){let c=a.entities.map(a=>a.name).join(", ")||"none";throw Error(`Entity '${b}' not found. Entities: ${c}.`)}return c}function _(a){return Object.fromEntries(Object.entries(a).filter(([,a])=>void 0!==a))}function aa(a,b,c){let d=Z(a),e=$(d,b);return void 0!==c.notes&&(c.notes.trim()?e.notes=c.notes:delete e.notes),void 0!==c.description&&(c.description?e.description=c.description:delete e.description),void 0!==c.weak&&(c.weak?e.weak=!0:delete e.weak),d}let ab=a=>(a.attributes??[]).filter(a=>a?.name);function ac(a){return Math.max(110,Math.ceil(8.4*(a.name??"").length+36))}function ad(a){return Math.max(38,Math.ceil(3.5*Math.max(0,...a.map(a=>a.name.length))+14))}let ae=a=>Math.ceil(a/2);function af(a){let b=ab(a),c=ac(a);return 0===b.length?{width:c,height:40}:{width:c+2*(34+2*ad(b)),height:Math.max(40,32*ae(b.length))}}let ag={"1:1":"||--||","1:N":"||--o{","N:1":"}o--||","N:M":"}o--o{"},ah=/^[A-Za-z_][A-Za-z0-9_-]*$/,ai=a=>ah.test(a)?a:`"${a.replace(/"/g,"'")}"`,aj=(a,b)=>{let c=a.trim().replace(/[^A-Za-z0-9_()[\]-]+/g,"_").replace(/^_+|_+$/g,"");return/^[A-Za-z_]/.test(c)?c:c?`_${c}`:b},ak=a=>`"${a.replace(/"/g,"'")}"`;function al(a){return`${a.name} : ${a.type}`}function am(a){let b=(a.attributes??[]).filter(a=>a?.name);return{width:Math.min(340,Math.max(170,Math.ceil(6.6*Math.max(1.15*(a.name??"").length,...b.map(a=>al(a).length+6.96969696969697))+28))),height:30+20*Math.max(1,b.length)+8}}function an(a){return a.trim().replace(/[\s_]+/g,"-").replace(/[^A-Za-z0-9.-]/g,"").replace(/-{2,}/g,"-").replace(/^[-.]+|[-.]+$/g,"").slice(0,60)}function ao(a){return a.parallel?a.parallel.states:a.states??[]}function ap(a,b){return ao(a).find(a=>a.name===b)??null}let aq={surface:"--slc-surface",nodeFill:"--slc-node-fill",nodeStroke:"--slc-node-stroke",compositeFill:"--slc-composite-fill",finalFill:"--slc-final-fill",accent:"--slc-accent",accentFill:"--slc-accent-fill",accentInk:"--slc-accent-ink",danger:"--slc-danger",drawSource:"--slc-draw-source",edge:"--slc-edge",chipFill:"--slc-chip-fill",chipStroke:"--slc-chip-stroke",label:"--slc-label",muted:"--slc-muted",faint:"--slc-faint",entry:"--slc-entry",exit:"--slc-exit",composite:"--slc-composite",active:"--slc-active",panelBg:"--slc-panel-bg",panelBorder:"--slc-panel-border",panelHover:"--slc-panel-hover"};function ar(a){let b={};if(!a)return b;for(let[c,d]of Object.entries(a)){let a=aq[c];a&&"string"==typeof d&&(b[a]=d)}return b}let as={x:100,y:100,width:160,height:60};function at(a,b){return 1===b?16*a:2===b?400*a:a}function au(a){return!!a&&"string"==typeof a.tagName&&(!!a.isContentEditable||["INPUT","TEXTAREA","SELECT","BUTTON","OPTION"].includes(a.tagName))}function av(a){return(a.states?.length??0)>0||(a.parallel?.states.length??0)>0}function aw({mark:a,x:b,y:c,selected:d}){return(0,h.jsxs)("g",{transform:`translate(${b} ${c}) scale(0.5)`,strokeWidth:a.strokeWidth,className:`slc-glyph${d?" slc-glyph--selected":""}`,children:[(a.circles??[]).map((a,b)=>(0,h.jsx)("circle",{cx:a.cx,cy:a.cy,r:a.r,className:a.filled?"slc-glyph-dot":void 0},`c${b}`)),a.paths.map((a,b)=>(0,h.jsx)("path",{d:a},`p${b}`))]})}let ax={kind:null,id:null},ay=(0,i.forwardRef)(function(a,b){let{definition:c,positions:d,path:e=[],rootLabel:f,viewport:g,onViewportChange:j,selection:k=ax,activeStates:l,errorElements:m,drawMode:n="select",drawSource:o=null,readOnly:p=!1,showBreadcrumb:q=!0,showHud:r=!0,fitKey:s,onSelect:t,onClearSelection:u,onStateMove:v,onNavigateInto:w,onNavigateTo:x,onContextMenu:y,onCreateTransition:A,onCancelDraw:C,onDeleteState:D,onUndo:F,onRedo:I,hudExtras:J,emptyHint:N,theme:T,className:U,style:V,svgId:W,pinchOwner:X="canvas"}=a,Y=(0,i.useRef)(null),Z=(0,i.useId)().replace(/:/g,""),$=(0,i.useRef)(g);$.current=g;let[_,aa]=(0,i.useState)(null),ab=(0,i.useRef)(null),ac=(0,i.useCallback)(a=>{ab.current=a,aa(a)},[]),[ad,ae]=(0,i.useState)(null),af=(0,i.useRef)(!1),[ag,ah]=(0,i.useState)(!1),ai=(0,i.useRef)(null),[aj,ak]=(0,i.useState)(!1),al=(0,i.useRef)(!1),am=(0,i.useRef)(new Map),an=(0,i.useRef)(new Map),aq=(0,i.useRef)(null),[ay,az]=(0,i.useState)(!1),aA=(0,i.useRef)(null),aB=(0,i.useRef)(!1),[aC,aD]=(0,i.useState)(!1),aE=c.state,aF=(0,i.useMemo)(()=>{let a=function(a,b){let c=[],d=a;for(let a of b){let b=ap(d,a);if(!b)break;c.push(a),d=b}return c}(aE,e);return[f??aE?.name??"Root",...a]},[aE,e,f]),aG=(0,i.useMemo)(()=>aE?ao(function(a,b){let c=a;for(let a of b){let b=ap(c,a);if(!b)break;c=b}return c}(aE,e)):[],[aE,e]),aH=aF[aF.length-1],aI=(0,i.useMemo)(()=>(function(a){let b=new Set,c=[];for(let d of a.events??[])for(let a of d.events??[])b.has(a.id)||(b.add(a.id),c.push(a.id));return c})(c),[c]),aJ=(0,i.useMemo)(()=>new Set(l??[]),[l]),aK=(0,i.useMemo)(()=>new Set(m??[]),[m]),aL=(0,i.useCallback)((a,b)=>{let c=Y.current?.getBoundingClientRect();return{x:a-(c?.left??0),y:b-(c?.top??0)}},[]),aM=(0,i.useCallback)(a=>{let b=am.current.get(a);am.current.delete(a),b?.hasPointerCapture?.(a)&&b.releasePointerCapture?.(a)},[]),aN=(0,i.useCallback)(a=>{let b=aA.current;b&&(void 0===a||b.pointerId===a)&&(clearTimeout(b.timer),aA.current=null)},[]),aO=(0,i.useCallback)((a,b)=>{if("touch"!==a.pointerType||!y)return;aN();let{pointerId:c,clientX:d,clientY:e}=a,f=setTimeout(()=>{aA.current=null,ac(null),ai.current=null,ak(!1),aB.current=!0,navigator.vibrate?.(10),y(d,e,b)},500);aA.current={pointerId:c,x:d,y:e,target:b,timer:f}},[aN,y,ac]);(0,i.useEffect)(()=>{},[]),(0,i.useEffect)(()=>{let a=a=>{an.current.delete(a.pointerId)};return window.addEventListener("pointerup",a),window.addEventListener("pointercancel",a),()=>{window.removeEventListener("pointerup",a),window.removeEventListener("pointercancel",a)}},[]),(0,i.useEffect)(()=>()=>aN(),[aN]);let aP=(0,i.useRef)(new Set),aQ=(0,i.useRef)(new Map),aR=(0,i.useRef)(aH),aS=(0,i.useRef)(new Set),[aT,aU]=(0,i.useState)(new Set),[aV,aW]=(0,i.useState)(new Set),[aX,aY]=(0,i.useState)(new Map),aZ=aC?10/g.scale:0,a$=aC?28/g.scale:0,a_=(0,i.useCallback)(a=>d[a]??as,[d]);(0,i.useEffect)(()=>{let a=a=>{(a.ctrlKey||a.metaKey)&&"z"===a.key&&F&&(a.preventDefault(),F()),(a.ctrlKey||a.metaKey)&&("y"===a.key||a.shiftKey&&"z"===a.key)&&I&&(a.preventDefault(),I()),"Escape"===a.key&&(ae(null),C?.()),"Delete"===a.key&&"state"===k.kind&&k.id&&D&&D(k.id)};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[F,I,C,D,k]);let a0=(0,i.useCallback)(a=>{let b=$.current;ai.current={pointerId:a.pointerId,startX:a.clientX,startY:a.clientY,origX:b.x,origY:b.y},al.current=!1,ak(!0);let c=Y.current;c&&(am.current.set(a.pointerId,c),c.setPointerCapture(a.pointerId))},[]),a1=(0,i.useCallback)(()=>{let a=[...an.current.entries()];if(a.length<2)return;let[[b,c],[d,e]]=a;aN(),ac(null),ai.current=null;let f=Math.max(1,Math.hypot(e.x-c.x,e.y-c.y)),g=aL((c.x+e.x)/2,(c.y+e.y)/2);aq.current={a:b,b:d,startDist:f,startMidX:g.x,startMidY:g.y,start:$.current},al.current=!0,az(!0);let h=Y.current;if(h){for(let a of[b,d])if(!am.current.has(a))try{h.setPointerCapture(a),am.current.set(a,h)}catch{}}},[aN,aL,ac]),a2=(0,i.useCallback)(a=>{if(aB.current=!1,"touch"!==a.pointerType)return;aD(!0),an.current.set(a.pointerId,{x:a.clientX,y:a.clientY});let b=an.current.size;b<2||(a.stopPropagation(),2===b&&a1())},[a1]),a3=(0,i.useCallback)((a,b)=>{if(0!==a.button||af.current)return;if(a.stopPropagation(),aO(a,{kind:"state",id:b}),!p&&"transition"===n)return void(o?o!==b&&ae({stateName:o,targetName:b,x:a.clientX,y:a.clientY}):t?.("state",b));if(t?.("state",b),p||!v)return;let c=a_(b);ac({name:b,pointerId:a.pointerId,startX:a.clientX,startY:a.clientY,origX:c.x,origY:c.y});let d=a.currentTarget;am.current.set(a.pointerId,d),d.setPointerCapture?.(a.pointerId)},[t,a_,n,o,aO,ac,p,v]),a4=(0,i.useCallback)(a=>{if("touch"===a.pointerType){aO(a,{kind:"canvas"}),a0(a);return}(1===a.button||0===a.button&&af.current)&&(a.preventDefault(),a0(a))},[aO,a0]),a5=(0,i.useCallback)(a=>{an.current.has(a.pointerId)&&an.current.set(a.pointerId,{x:a.clientX,y:a.clientY});let b=aA.current;b&&b.pointerId===a.pointerId&&Math.hypot(a.clientX-b.x,a.clientY-b.y)>8&&aN(a.pointerId);let c=aq.current;if(c){if(a.pointerId!==c.a&&a.pointerId!==c.b)return;let b=an.current.get(c.a),d=an.current.get(c.b);if(!b||!d)return;let e=Math.hypot(d.x-b.x,d.y-b.y),f=aL((b.x+d.x)/2,(b.y+d.y)/2);j(O(Q(c.start,c.start.scale*(e/c.startDist),{x:c.startMidX,y:c.startMidY}),f.x-c.startMidX,f.y-c.startMidY));return}let d=ai.current;if(d){if(d.pointerId!==a.pointerId)return;let b=a.clientX-d.startX,c=a.clientY-d.startY,e=8*("touch"===a.pointerType);(Math.abs(b)>e||Math.abs(c)>e)&&(al.current=!0),j({x:d.origX+b,y:d.origY+c,scale:$.current.scale});return}if(!_||_.pointerId!==a.pointerId||!v)return;let e=$.current.scale,f=(a.clientX-_.startX)/e,g=(a.clientY-_.startY)/e,h=a_(_.name);v(_.name,{...h,x:Math.max(0,_.origX+f),y:Math.max(0,_.origY+g)})},[_,a_,v,j,aN,aL]),a6=(0,i.useCallback)(a=>{an.current.delete(a.pointerId),aN(a.pointerId),aM(a.pointerId);let b=aq.current;if(b&&(b.a===a.pointerId||b.b===a.pointerId)){aq.current=null,az(!1);let c=b.a===a.pointerId?b.b:b.a,d=an.current.get(c);if(d){let a=$.current;ai.current={pointerId:c,startX:d.x,startY:d.y,origX:a.x,origY:a.y},al.current=!0,ak(!0)}}ai.current?.pointerId===a.pointerId&&(ai.current=null),ab.current?.pointerId===a.pointerId&&ac(null),ai.current||ak(!1),aq.current||az(!1)},[aN,aM,ac]);(0,i.useEffect)(()=>{let a=Y.current;if(!a)return;let b=a=>{a.preventDefault();let b=$.current,c=at(a.deltaX,a.deltaMode),d=at(a.deltaY,a.deltaMode);if(a.ctrlKey||a.metaKey){let c=P(b,Math.exp(-(.0025*d)),aL(a.clientX,a.clientY));c!==b&&j(c);return}let e=a.shiftKey?-(c||d):-c,f=a.shiftKey?0:-d;(0!==e||0!==f)&&j(O(b,e,f))};return a.addEventListener("wheel",b,{passive:!1}),()=>a.removeEventListener("wheel",b)},[j,aL]),(0,i.useEffect)(()=>{let a=a=>{"Space"!==a.code||a.repeat||au(a.target)||au(document.activeElement)||(a.preventDefault(),af.current=!0,ah(!0))},b=a=>{"Space"===a.code&&(af.current=!1,ah(!1))},c=()=>{af.current=!1,ah(!1)};return window.addEventListener("keydown",a),window.addEventListener("keyup",b),window.addEventListener("blur",c),()=>{window.removeEventListener("keydown",a),window.removeEventListener("keyup",b),window.removeEventListener("blur",c)}},[]);let a7=(0,i.useCallback)(a=>{let b=Y.current?.getBoundingClientRect(),c={x:(b?.width??0)/2,y:(b?.height??0)/2},d=$.current,e=P(d,a,c);e!==d&&j(e)},[j]),a8=(0,i.useCallback)(()=>{let a=Y.current?.getBoundingClientRect(),b={x:(a?.width??0)/2,y:(a?.height??0)/2};j(Q($.current,1,b))},[j]),a9=(0,i.useCallback)(()=>{let a=Y.current?.getBoundingClientRect();if(!a)return;let b=aG.map(a=>a_(a.name));j(b.length?R(b,a.width,a.height):{...M})},[aG,a_,j]);(0,i.useImperativeHandle)(b,()=>({fit:a9,zoomIn:()=>a7(1.25),zoomOut:()=>a7(.8),resetZoom:a8,element:()=>Y.current}),[a9,a7,a8]);let ba=(0,i.useRef)(a9);ba.current=a9,(0,i.useEffect)(()=>{if(void 0===s)return;let a=requestAnimationFrame(()=>ba.current());return()=>cancelAnimationFrame(a)},[s]);let bb=(0,i.useCallback)((a,b)=>{y&&(a.preventDefault(),a.stopPropagation(),y(a.clientX,a.clientY,b?{kind:"state",id:b}:{kind:"canvas"}))},[y]),bc=(0,i.useMemo)(()=>{let a=new Set(aG.map(a=>a.name)),b=[];for(let c of aG)for(let[d,e]of(c.transitions??[]).entries())e.nextState&&a.has(e.nextState)&&b.push({from:c.name,to:e.nextState,event:e.event,stateName:c.name,index:d,condition:e.condition});return b},[aG]),bd=(0,i.useMemo)(()=>{let a=K(bc,a_),b=new Map(E(bc.map((b,c)=>{let d=a_(b.from);return{id:`${b.stateName}:${b.index}`,event:b.event,condition:b.condition,glyph:!0,at:b.from===b.to?()=>({x:d.x+d.width+44+30,y:d.y+d.height/2+4}):a[c].at}}),aG.map(a=>a_(a.name))).map(a=>[a.label.id,a]));return bc.flatMap((c,d)=>{let e=`${c.stateName}:${c.index}`,f=b.get(e);return f?[{arrow:c,id:e,curve:a[d],spot:f}]:[]})},[bc,aG,a_]);(0,i.useEffect)(()=>{let a=new Set(aG.map(a=>a.name)),b=new Set(bc.map(a=>`${a.stateName}:${a.index}`)),c=aR.current===aH,d=[...a].filter(a=>!aP.current.has(a));d.length&&aU(a=>{let b=new Set(a);return d.forEach(a=>b.add(a)),b});let e=[...b].filter(a=>!aS.current.has(a));e.length&&aW(a=>{let b=new Set(a);return e.forEach(a=>b.add(a)),b}),aU(b=>{let c=!1,d=new Set(b);return b.forEach(b=>{a.has(b)||(d.delete(b),c=!0)}),c?d:b}),aW(a=>{let c=!1,d=new Set(a);return a.forEach(a=>{b.has(a)||(d.delete(a),c=!0)}),c?d:a}),c?aY(b=>{let c=new Map(b),d=!1;return aQ.current.forEach((b,e)=>{a.has(e)||c.has(e)||(c.set(e,b),d=!0)}),a.forEach(a=>{c.delete(a)&&(d=!0)}),d?c:b}):aY(a=>a.size?new Map:a),aP.current=a,aQ.current=new Map(aG.map(a=>[a.name,{state:a,pos:a_(a.name)}])),aS.current=b,aR.current=aH},[aG,aH,bc,a_]);let be={...ar(T),...V},bf=aC?" slc-hud--coarse":"";return(0,h.jsxs)("div",{className:`slc-pane${U?` ${U}`:""}`,style:be,"data-pinch-owner":X,children:[q&&aF.length>1&&(0,h.jsx)("div",{className:"slc-crumbs",children:aF.map((a,b)=>(0,h.jsxs)("span",{className:"slc-crumb-item",children:[b>0&&(0,h.jsx)("span",{className:"slc-crumb-sep",children:"›"}),(0,h.jsx)("button",{type:"button",className:`slc-crumb${b===aF.length-1?" slc-crumb--current":""}`,onClick:()=>x?.(b),children:a})]},`${a}-${b}`))}),(0,h.jsxs)("svg",{ref:Y,id:W,className:"slc-surface",style:{cursor:aj?"grabbing":ag?"grab":void 0,touchAction:"none",...aC?{WebkitUserSelect:"none",userSelect:"none",WebkitTouchCallout:"none"}:{}},onPointerDownCapture:a2,onPointerDown:a4,onPointerMove:a5,onPointerUp:a6,onPointerCancel:a6,onAuxClick:a=>a.preventDefault(),onClick:a=>{if(aB.current){aB.current=!1,a.stopPropagation();return}if(al.current){al.current=!1;return}a.target?.tagName==="svg"&&(u?.(),ae(null))},onContextMenu:a=>bb(a),children:[(0,h.jsxs)("defs",{children:[(0,h.jsx)("marker",{id:`slc-arrow-${Z}`,markerWidth:"10",markerHeight:"7",refX:"10",refY:"3.5",orient:"auto",children:(0,h.jsx)("polygon",{points:"0 0, 10 3.5, 0 7",className:"slc-arrowhead"})}),(0,h.jsx)("marker",{id:`slc-arrow-sel-${Z}`,markerWidth:"10",markerHeight:"7",refX:"10",refY:"3.5",orient:"auto",children:(0,h.jsx)("polygon",{points:"0 0, 10 3.5, 0 7",className:"slc-arrowhead slc-arrowhead--selected"})})]}),"transition"===n&&o&&(0,h.jsxs)("text",{x:"50%",y:"30",textAnchor:"middle",className:"slc-draw-hint",children:['Click target state to create transition from "',o,'"']}),(0,h.jsxs)("g",{transform:S(g),style:aj||ay?{pointerEvents:"none"}:void 0,children:[bd.map(({arrow:a,id:b,curve:c,spot:d})=>{let e="transition"===k.kind&&k.id===b,f=aV.has(b),g=c.at(.5),i=Math.hypot(g.x-d.cx,g.y-d.cy)>4;return(0,h.jsxs)("g",{children:[aC&&(0,h.jsx)("path",{d:c.path,fill:"none",stroke:"transparent",strokeWidth:a$,strokeLinecap:"round",pointerEvents:"stroke",onClick:a=>{a.stopPropagation(),t?.("transition",b)}}),(0,h.jsx)("path",{d:c.path,pathLength:1,markerEnd:`url(#slc-arrow${e?"-sel":""}-${Z})`,className:`slc-edge${e?" slc-edge--selected":""}${f?" slc-edge-enter":""}`,onClick:a=>{a.stopPropagation(),t?.("transition",b)}}),(0,h.jsxs)("g",{className:"slc-chip",onClick:a=>{a.stopPropagation(),t?.("transition",b)},children:[i&&(0,h.jsx)("line",{x1:g.x,y1:g.y,x2:d.cx,y2:d.cy-5,className:`slc-chip-leader${e?" slc-chip-leader--selected":""}`}),aC&&(0,h.jsx)("rect",{x:d.x-aZ,y:d.y-aZ,width:d.width+2*aZ,height:d.height+2*aZ,fill:"transparent",pointerEvents:"all"}),(0,h.jsx)("rect",{x:d.x,y:d.y,width:d.width,height:d.height,rx:4,className:`slc-chip-plate${e?" slc-chip-plate--selected":""}`}),(0,h.jsx)(aw,{mark:function(a){let b=a.toLowerCase();for(let{glyph:a,words:c}of H)if(c.some(a=>b.includes(a)))return a;return G}(a.event),x:B(d).x,y:B(d).y,selected:e}),(0,h.jsx)("text",{x:d.cx,y:d.cy-5,textAnchor:"middle",className:`slc-chip-text${e?" slc-chip-text--selected":""}`,children:a.event}),a.condition&&(0,h.jsxs)("text",{x:d.cx,y:d.cy+7,textAnchor:"middle",className:"slc-chip-guard",children:[(0,h.jsx)("title",{children:a.condition}),z(a.condition)]})]})]},`arrow-${b}`)}),aG.map(a=>{let b=a_(a.name),c="state"===k.kind&&k.id===a.name,d="final"===a.kind,e="history"===a.kind,f=av(a),g=o===a.name,i=aK.has(a.name),j=(a.onEntry?.actions?.length??0)>0,l=(a.onExit?.actions?.length??0)>0,m=aJ.has(a.name),q=aT.has(a.name),r=ag?void 0:"transition"!==n||p?f?"slc-node--drillable":p||!v?"slc-node--static":"slc-node--draggable":"slc-node--drawing";return(0,h.jsxs)("g",{className:r,onPointerDown:b=>a3(b,a.name),onDoubleClick:b=>{b.stopPropagation(),f&&w?.(a.name)},onContextMenu:b=>bb(b,a.name),children:[aC&&(0,h.jsx)("rect",{x:b.x-aZ,y:b.y-aZ,width:b.width+2*aZ,height:b.height+2*aZ,rx:12,fill:"transparent",pointerEvents:"all"}),(0,h.jsxs)("g",{className:q?"slc-node-enter":void 0,children:[(0,h.jsx)("rect",{x:b.x,y:b.y,width:b.width,height:b.height,rx:e?30:d?4:8,strokeDasharray:d?"6 3":f?"4 2":void 0,className:["slc-node",d?"slc-node--final":f?"slc-node--composite":"",g?"slc-node--source":"",i?"slc-node--error":"",c?"slc-node--selected":"",m?"slc-node--active":""].filter(Boolean).join(" ")}),(0,h.jsx)("text",{x:b.x+b.width/2,y:b.y+(j||l?b.height/2:b.height/2+5),textAnchor:"middle",className:"slc-node-name",children:a.name}),a.kind&&"normal"!==a.kind&&(0,h.jsx)("text",{x:b.x+b.width-8,y:b.y+14,textAnchor:"end",className:"slc-node-kind",children:a.kind}),j&&(0,h.jsx)("text",{x:b.x+6,y:b.y+b.height-6,className:"slc-node-entry",children:"▸entry"}),l&&(0,h.jsx)("text",{x:b.x+b.width-6,y:b.y+b.height-6,textAnchor:"end",className:"slc-node-exit",children:"exit◂"}),i&&(0,h.jsx)("path",{d:`M ${b.x+6} ${b.y+15} l 5.5 -9.5 l 5.5 9.5 Z M ${b.x+11.5} ${b.y+9.5} v 2.6`,className:"slc-node-warn-mark"}),a.notes?.trim()&&(0,h.jsxs)("g",{children:[(0,h.jsx)("title",{children:`Notes: ${a.notes}`}),(0,h.jsx)("rect",{x:b.x+b.width-24,y:b.y-5,width:13,height:5,rx:1.5,className:"slc-note-mark"})]}),f&&(0,h.jsxs)("text",{x:b.x+b.width/2,y:b.y+b.height-6,textAnchor:"middle",className:"slc-node-drill",children:["▼ ",(a.states?.length??0)+(a.parallel?.states.length??0)," children — ",aC?"double-tap":"double-click"," to enter"]})]})]},a.name)}),Array.from(aX.entries()).map(([a,{state:b,pos:c}])=>{let d="final"===b.kind,e=av(b);return(0,h.jsxs)("g",{className:"slc-node-exit-group",onAnimationEnd:b=>{"slc-node-out"===b.animationName&&aY(b=>{if(!b.has(a))return b;let c=new Map(b);return c.delete(a),c})},children:[(0,h.jsx)("rect",{x:c.x,y:c.y,width:c.width,height:c.height,rx:"history"===b.kind?30:d?4:8,strokeDasharray:d?"6 3":e?"4 2":void 0,className:`slc-node${d?" slc-node--final":e?" slc-node--composite":""}`}),(0,h.jsx)("text",{x:c.x+c.width/2,y:c.y+c.height/2+5,textAnchor:"middle",className:"slc-node-name",children:a})]},`exit-${a}`)})]}),0===aG.length&&(0,h.jsx)("text",{x:"50%",y:"50%",textAnchor:"middle",className:"slc-empty",children:N??"This level has no states."})]}),r&&(0,h.jsxs)("div",{className:`slc-hud${bf}`,children:[(0,h.jsx)("button",{type:"button",className:"slc-hud-btn",title:"Zoom out (Ctrl + wheel down, or pinch in)",disabled:g.scale<=L.min,onClick:()=>a7(.8),children:"−"}),(0,h.jsxs)("button",{type:"button",className:"slc-hud-btn slc-hud-btn--scale",title:"Reset zoom to 100%",onClick:a8,children:[Math.round(100*g.scale),"%"]}),(0,h.jsx)("button",{type:"button",className:"slc-hud-btn",title:"Zoom in (Ctrl + wheel up, or pinch out)",disabled:g.scale>=L.max,onClick:()=>a7(1.25),children:"+"}),(0,h.jsx)("span",{className:"slc-hud-sep",children:"|"}),(0,h.jsx)("button",{type:"button",className:"slc-hud-btn",title:"Fit the whole machine in view",onClick:a9,children:"⤢ Fit"}),J&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)("span",{className:"slc-hud-sep",children:"|"}),J]}),(0,h.jsx)("span",{className:"slc-hud-sep",children:"|"}),(0,h.jsx)("span",{className:"slc-hud-hint",title:aC?"Drag to pan · pinch with two fingers to zoom · press and hold for the menu · double-tap a composite to enter it":"Wheel scrolls · Shift+wheel scrolls sideways · Ctrl+wheel zooms at the cursor · middle-drag or Space+drag pans",children:ay?"pinching":aj?"panning":aC?"drag · pinch · hold":ag?"space to pan":"wheel · ⌃wheel · space"})]}),ad&&(0,h.jsxs)("div",{className:"slc-picker",style:{left:ad.x,top:ad.y-80},onClick:a=>a.stopPropagation(),children:[(0,h.jsxs)("div",{className:"slc-picker-title",children:[ad.stateName," → ",ad.targetName]}),(0,h.jsx)("div",{className:"slc-picker-sub",children:"Select event:"}),0===aI.length?(0,h.jsx)("div",{className:"slc-picker-empty",children:"No events defined. Add events first."}):aI.map(a=>(0,h.jsx)("button",{type:"button",className:"slc-picker-item",onClick:()=>{ad&&(A?.(ad.stateName,ad.targetName,a),ae(null),C?.())},children:a},a)),(0,h.jsx)("button",{type:"button",className:"slc-picker-cancel",onClick:()=>{ae(null),C?.()},children:"Cancel"})]})]})});function az(a,b){return 1===b?16*a:2===b?400*a:a}let aA={"1:1":["one","one"],"1:N":["one","many"],"N:1":["many","one"],"N:M":["many","many"]};function aB(a,b,c){let d=b.x-a.x,e=b.y-a.y,f=Math.hypot(d,e)||1,g=d/f,h=e/f,i=-h,j=(b,c)=>`${(a.x+g*b+i*c).toFixed(1)} ${(a.y+h*b+g*c).toFixed(1)}`;return"one"===c?`M ${j(9,6)} L ${j(9,-6)}`:`M ${j(13,0)} L ${j(0,7)} M ${j(13,0)} L ${j(0,-7)} M ${j(13,0)} L ${j(0,0)}`}function aC(a){return[a.description??"",a.notes?.trim()?`Notes: ${a.notes}`:""].filter(Boolean).join("\n\n")}function aD(a,b){if(!a)return"";let c=Math.min(a.x+a.width,Math.max(a.x,b.x)),d=Math.min(a.y+a.height,Math.max(a.y,b.y));return c===b.x&&d===b.y?"":`M ${b.x} ${b.y} L ${c} ${d}`}function aE({definition:a,notation:b="crowsfoot",positions:c,viewport:d,onViewportChange:e,selection:f=null,errorElements:g,readOnly:j=!1,fitKey:k,onSelect:l,onClearSelection:m,onEntityMove:n,onOpenMachine:o,onContextMenu:p,emptyHint:q,theme:r,className:s,style:t,svgId:u}){let v=(0,i.useRef)(null),w=(0,i.useRef)(d);w.current=d;let x=(0,i.useRef)(null),y=(0,i.useRef)(new Map),z=(0,i.useRef)(null),A=(0,i.useMemo)(()=>{let b=new Set;return(a.entities??[]).filter(a=>!(!a?.name||b.has(a.name))&&!!c[a.name]&&(b.add(a.name),!0))},[a.entities,c]),B="chen"===b,C=(0,i.useMemo)(()=>new Map(B?A.map(a=>{var b;let d,e,f,g,h,i,j;return[a.name,(b=c[a.name],d=ab(a),e=ac(a),f={x:b.x+(b.width-e)/2,y:b.y+(b.height-40)/2,width:e,height:40},g=ad(d),h=f.y+f.height/2,i=ae(d.length),j=d.map((a,b)=>{let c=b<i,e=c?i:d.length-i,j=h+((c?b:b-i)-(e-1)/2)*32,k=c?f.x-34-g:f.x+f.width+34+g;return{attribute:a,cx:k,cy:j,rx:g,ry:13,from:{x:c?f.x:f.x+f.width,y:h},to:{x:c?k+g:k-g,y:j}}}),{rect:f,ovals:j,routingBox:{x:f.x,y:b.y,width:f.width,height:b.height}})]}):[]),[B,A,c]),D=(0,i.useMemo)(()=>{let b=new Map(A.map((a,b)=>[a.name,`e${b}`])),d=(a.relationships??[]).filter(a=>a&&b.has(a.from)&&b.has(a.to)),e=K(d.map(a=>({from:b.get(a.from),to:b.get(a.to)})),a=>{let b=A[Number(a.slice(1))].name;return C.get(b)?.routingBox??c[b]});return d.map((a,b)=>({rel:a,curve:e[b]}))},[a.relationships,A,c,C]),F=(0,i.useMemo)(()=>E(D.filter(({rel:a})=>B||a.label).map(({rel:a,curve:b})=>({event:a.label||" ",at:b.at,rel:a})),A.map(a=>c[a.name])),[B,D,A,c]),G=(0,i.useCallback)((a,b)=>{let c=v.current?.getBoundingClientRect();return{x:a-(c?.left??0),y:b-(c?.top??0)}},[]);(0,i.useEffect)(()=>{if(void 0===k)return;let a=v.current?.getBoundingClientRect(),b=Object.values(c);a&&0!==b.length&&e(R(b,a.width,a.height))},[k]),(0,i.useEffect)(()=>{let a=v.current;if(!a)return;let b=a=>{a.preventDefault();let b=w.current,c=az(a.deltaX,a.deltaMode),d=az(a.deltaY,a.deltaMode);if(a.ctrlKey||a.metaKey)return void e(P(b,Math.exp(-(.0025*d)),G(a.clientX,a.clientY)));let f=a.shiftKey?-(c||d):-c,g=a.shiftKey?0:-d;(0!==f||0!==g)&&e(O(b,f,g))};return a.addEventListener("wheel",b,{passive:!1}),()=>a.removeEventListener("wheel",b)},[e,G]);let H=()=>{let a=[...y.current.values()];if(a.length<2)return null;let[b,c]=a;return{distance:Math.hypot(c.x-b.x,c.y-b.y)||1,mid:{x:(b.x+c.x)/2,y:(b.y+c.y)/2}}},I=(a,b)=>{if(0!==a.button&&"mouse"===a.pointerType)return;if(a.stopPropagation(),v.current?.setPointerCapture(a.pointerId),y.current.set(a.pointerId,G(a.clientX,a.clientY)),y.current.size>=2){x.current=null,z.current=H();return}let d=void 0!==b&&!j;x.current={kind:d?"move":"pan",pointerId:a.pointerId,startX:a.clientX,startY:a.clientY,lastX:a.clientX,lastY:a.clientY,name:b,origin:d?c[b]:void 0,moved:!1}},J=a=>{if(y.current.delete(a.pointerId),z.current){y.current.size<2&&(z.current=null);return}let b=x.current;!b||b.pointerId!==a.pointerId||(x.current=null,b.moved||(b.name?l?.(b.name):m?.()))},L=new Set(g??[]);return(0,h.jsxs)("div",{className:`slc-pane${s?` ${s}`:""}`,style:{...ar(r),...t},children:[(0,h.jsx)("svg",{ref:v,id:u,className:"slc-surface",onPointerDown:a=>I(a),onPointerMove:a=>{if(y.current.has(a.pointerId)&&y.current.set(a.pointerId,G(a.clientX,a.clientY)),z.current){let a=H();if(!a)return;let b=z.current;e(P(O(w.current,a.mid.x-b.mid.x,a.mid.y-b.mid.y),a.distance/b.distance,a.mid)),z.current=a;return}let b=x.current;if(b&&b.pointerId===a.pointerId&&!(!b.moved&&4>Math.hypot(a.clientX-b.startX,a.clientY-b.startY))){if(b.moved=!0,"pan"===b.kind)e(O(w.current,a.clientX-b.lastX,a.clientY-b.lastY));else if(b.name&&b.origin){var c,d,f;let e=(c=w.current,d=a.clientX-b.startX,f=a.clientY-b.startY,{x:d/c.scale,y:f/c.scale});n?.(b.name,{...b.origin,x:b.origin.x+e.x,y:b.origin.y+e.y})}b.lastX=a.clientX,b.lastY=a.clientY}},onPointerUp:J,onPointerCancel:J,onContextMenu:a=>{p&&(a.preventDefault(),p(a.clientX,a.clientY,{kind:"canvas"}))},children:(0,h.jsxs)("g",{transform:S(d),children:[D.map(({rel:a,curve:b},c)=>{if(B){let[d,e]=function(a){switch(a){case"1:1":return["1","1"];case"N:1":return["N","1"];case"N:M":return["M","N"];default:return["1","N"]}}(a.cardinality),f=b.at(.12),g=b.at(.88);return(0,h.jsxs)("g",{className:"slc-erd-rel",children:[(0,h.jsx)("path",{d:aD(C.get(a.from)?.rect,b.p0),className:"slc-erd-line"}),(0,h.jsx)("path",{d:aD(C.get(a.to)?.rect,b.p3),className:"slc-erd-line"}),(0,h.jsx)("path",{d:b.path,className:"slc-erd-line"}),(0,h.jsx)("text",{x:f.x+9,y:f.y+4,className:"slc-erd-card",children:d}),(0,h.jsx)("text",{x:g.x+9,y:g.y+4,className:"slc-erd-card",children:e})]},`r${c}`)}let[d,e]=aA[a.cardinality]??aA["1:N"];return(0,h.jsxs)("g",{className:"slc-erd-rel",children:[(0,h.jsx)("path",{d:b.path,className:"slc-erd-line"}),(0,h.jsx)("path",{d:aB(b.p0,b.p1,d),className:"slc-erd-mark"}),(0,h.jsx)("path",{d:aB(b.p3,b.p2,e),className:"slc-erd-mark"})]},`r${c}`)}),A.map(a=>{let b=c[a.name],d=(a.attributes??[]).filter(a=>a?.name),e=["slc-node",f===a.name?"slc-node--selected":"",L.has(a.name)?"slc-node--error":""].filter(Boolean).join(" "),g=C.get(a.name);if(g){let{rect:b,ovals:c}=g;return(0,h.jsxs)("g",{className:j?"slc-node--static":"slc-node--draggable",onPointerDown:b=>I(b,a.name),onContextMenu:b=>{p&&(b.preventDefault(),b.stopPropagation(),p(b.clientX,b.clientY,{kind:"entity",id:a.name}))},children:[c.map(a=>(0,h.jsx)("path",{d:`M ${a.from.x} ${a.from.y} L ${a.to.x} ${a.to.y}`,className:"slc-erd-attr-line"},`l-${a.attribute.name}`)),c.map(a=>{var b;let c,d=U(a.attribute),e=d.length>0&&!!o;return(0,h.jsxs)("g",{className:e?"slc-erd-state":void 0,onPointerDown:e?a=>a.stopPropagation():void 0,onClick:e?()=>o(d[0]):void 0,children:[(0,h.jsx)("title",{children:(c=U(b=a.attribute),[`${al(b)}${b.nullable?" ?":""}`,"pk"===b.key?"primary key":"uk"===b.key?"unique":"",b.references?`references ${b.references}`:"",c.length?`stores the state of ${c.join(", ")}`:"",b.description??""].filter(Boolean).join(" — "))}),(0,h.jsx)("ellipse",{cx:a.cx,cy:a.cy,rx:a.rx,ry:a.ry,className:"slc-erd-oval"}),(0,h.jsxs)("text",{x:a.cx,y:a.cy+4,textAnchor:"middle",className:`slc-erd-oval-text${"pk"===a.attribute.key?" slc-erd-oval-text--pk":""}${d.length?" slc-erd-row--state":""}`,children:[d.length?"◉ ":"",a.attribute.name]})]},a.attribute.name)}),aC(a)&&(0,h.jsx)("title",{children:aC(a)}),(0,h.jsx)("rect",{x:b.x,y:b.y,width:b.width,height:b.height,rx:2,className:e}),a.notes?.trim()&&(0,h.jsx)("rect",{x:b.x+b.width-24,y:b.y-5,width:13,height:5,rx:1.5,className:"slc-note-mark"}),a.weak&&(0,h.jsx)("rect",{x:b.x+4,y:b.y+4,width:b.width-8,height:b.height-8,rx:1,className:"slc-erd-weak"}),(0,h.jsx)("text",{x:b.x+b.width/2,y:b.y+b.height/2+5,textAnchor:"middle",className:"slc-node-name",children:a.name})]},a.name)}return(0,h.jsxs)("g",{className:j?"slc-node--static":"slc-node--draggable",onPointerDown:b=>I(b,a.name),onContextMenu:b=>{p&&(b.preventDefault(),b.stopPropagation(),p(b.clientX,b.clientY,{kind:"entity",id:a.name}))},children:[aC(a)&&(0,h.jsx)("title",{children:aC(a)}),(0,h.jsx)("rect",{x:b.x,y:b.y,width:b.width,height:b.height,rx:6,className:e}),a.notes?.trim()&&(0,h.jsx)("rect",{x:b.x+b.width-24,y:b.y-5,width:13,height:5,rx:1.5,className:"slc-note-mark"}),(0,h.jsx)("path",{d:`M ${b.x} ${b.y+30} h ${b.width}`,className:"slc-erd-rule"}),(0,h.jsx)("text",{x:b.x+b.width/2,y:b.y+15+5,textAnchor:"middle",className:"slc-node-name",children:a.name}),0===d.length&&(0,h.jsx)("text",{x:b.x+14,y:b.y+30+15,className:"slc-erd-row slc-erd-row--empty",children:"no attributes"}),d.map((a,c)=>{let d=b.y+30+20*c+15,e=U(a),f=["pk"===a.key?"PK":"uk"===a.key?"UK":"",a.references?"FK":""].filter(Boolean).join(" ");return(0,h.jsxs)("g",{className:e.length&&o?"slc-erd-state":void 0,onPointerDown:e.length&&o?a=>a.stopPropagation():void 0,onClick:e.length&&o?()=>o(e[0]):void 0,children:[(e.length>0||a.description)&&(0,h.jsx)("title",{children:[e.length?`stores the state of ${e.join(", ")}`:"",a.description??""].filter(Boolean).join(" — ")}),(0,h.jsxs)("text",{x:b.x+14,y:d,className:`slc-erd-row${e.length?" slc-erd-row--state":""}${"pk"===a.key?" slc-erd-row--pk":""}`,children:[e.length?"◉ ":"",al(a),a.nullable?" ?":""]}),f&&(0,h.jsx)("text",{x:b.x+b.width-14,y:d,textAnchor:"end",className:"slc-erd-badge",children:f})]},a.name)})]},a.name)}),F.map((a,b)=>{if(!B)return null;let c=a.x+a.width/2,d=a.y+a.height/2,e=Math.max(34,Math.ceil(3.7*(a.label.rel.label??"").length+18));return(0,h.jsxs)("g",{pointerEvents:"none",children:[(0,h.jsx)("path",{d:`M ${c-e} ${d} L ${c} ${d-18} L ${c+e} ${d} L ${c} ${d+18} Z`,className:"slc-erd-diamond"}),(0,h.jsx)("text",{x:c,y:d+4,textAnchor:"middle",className:"slc-erd-rel-label",children:a.label.rel.label??""})]},`d${b}`)}),!B&&F.map((a,b)=>(0,h.jsxs)("g",{pointerEvents:"none",children:[(0,h.jsx)("rect",{x:a.x,y:a.y,width:a.width,height:a.height,rx:4,className:"slc-chip-plate"}),(0,h.jsx)("text",{x:a.cx,y:a.cy-5,textAnchor:"middle",className:"slc-erd-rel-label",children:a.label.event})]},`l${b}`))]})}),0===A.length&&q&&(0,h.jsx)("div",{className:"slc-erd-empty",children:q})]})}let aF=a=>{let b,c=new Set,d=(a,d)=>{let e="function"==typeof a?a(b):a;if(!Object.is(e,b)){let a=b;b=(null!=d?d:"object"!=typeof e||null===e)?e:Object.assign({},b,e),c.forEach(c=>c(b,a))}},e=()=>b,f={setState:d,getState:e,getInitialState:()=>g,subscribe:a=>(c.add(a),()=>c.delete(a))},g=b=a(d,e,f);return f},aG=a=>{let b=a?aF(a):aF,c=a=>(function(a,b=a=>a){let c=i.default.useSyncExternalStore(a.subscribe,i.default.useCallback(()=>b(a.getState()),[a,b]),i.default.useCallback(()=>b(a.getInitialState()),[a,b]));return i.default.useDebugValue(c),c})(b,a);return Object.assign(c,b),c};var aH=a.i(53681);let aI=Object.create(null);aI.open="0",aI.close="1",aI.ping="2",aI.pong="3",aI.message="4",aI.upgrade="5",aI.noop="6";let aJ=Object.create(null);Object.keys(aI).forEach(a=>{aJ[aI[a]]=a});let aK={type:"error",data:"parser error"},aL=({type:a,data:b},c,d)=>d(b instanceof ArrayBuffer||ArrayBuffer.isView(b)?c?b:"b"+aM(b,!0).toString("base64"):aI[a]+(b||"")),aM=(a,b)=>Buffer.isBuffer(a)||a instanceof Uint8Array&&!b?a:a instanceof ArrayBuffer?Buffer.from(a):Buffer.from(a.buffer,a.byteOffset,a.byteLength),aN=(a,b)=>{if("string"!=typeof a)return{type:"message",data:aO(a,b)};let c=a.charAt(0);return"b"===c?{type:"message",data:aO(Buffer.from(a.substring(1),"base64"),b)}:aJ[c]?a.length>1?{type:aJ[c],data:a.substring(1)}:{type:aJ[c]}:aK},aO=(a,b)=>"arraybuffer"===b?a instanceof ArrayBuffer?a:Buffer.isBuffer(a)?a.buffer.slice(a.byteOffset,a.byteOffset+a.byteLength):a.buffer:Buffer.isBuffer(a)?a:Buffer.from(a);function aP(a){return a.reduce((a,b)=>a+b.length,0)}function aQ(a,b){if(a[0].length===b)return a.shift();let c=new Uint8Array(b),d=0;for(let e=0;e<b;e++)c[e]=a[0][d++],d===a[0].length&&(a.shift(),d=0);return a.length&&d<a[0].length&&(a[0]=a[0].slice(d)),c}function aR(a){if(a){var b=a;for(var c in aR.prototype)b[c]=aR.prototype[c];return b}}aR.prototype.on=aR.prototype.addEventListener=function(a,b){return this._callbacks=this._callbacks||{},(this._callbacks["$"+a]=this._callbacks["$"+a]||[]).push(b),this},aR.prototype.once=function(a,b){function c(){this.off(a,c),b.apply(this,arguments)}return c.fn=b,this.on(a,c),this},aR.prototype.off=aR.prototype.removeListener=aR.prototype.removeAllListeners=aR.prototype.removeEventListener=function(a,b){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var c,d=this._callbacks["$"+a];if(!d)return this;if(1==arguments.length)return delete this._callbacks["$"+a],this;for(var e=0;e<d.length;e++)if((c=d[e])===b||c.fn===b){d.splice(e,1);break}return 0===d.length&&delete this._callbacks["$"+a],this},aR.prototype.emit=function(a){this._callbacks=this._callbacks||{};for(var b=Array(arguments.length-1),c=this._callbacks["$"+a],d=1;d<arguments.length;d++)b[d-1]=arguments[d];if(c){c=c.slice(0);for(var d=0,e=c.length;d<e;++d)c[d].apply(this,b)}return this},aR.prototype.emitReserved=aR.prototype.emit,aR.prototype.listeners=function(a){return this._callbacks=this._callbacks||{},this._callbacks["$"+a]||[]},aR.prototype.hasListeners=function(a){return!!this.listeners(a).length};let aS=process.nextTick,aT=a.g;class aU{constructor(){this._cookies=new Map}parseCookies(a){a&&a.forEach(a=>{let b=function(a){let b=a.split("; "),c=b[0].indexOf("=");if(-1===c)return;let d=b[0].substring(0,c).trim();if(!d.length)return;let e=b[0].substring(c+1).trim();34===e.charCodeAt(0)&&(e=e.slice(1,-1));let f={name:d,value:e};for(let a=1;a<b.length;a++){let c=b[a].split("=");if(2!==c.length)continue;let d=c[0].trim(),e=c[1].trim();switch(d){case"Expires":f.expires=new Date(e);break;case"Max-Age":let g=new Date;g.setUTCSeconds(g.getUTCSeconds()+parseInt(e,10)),f.expires=g}}return f}(a);b&&this._cookies.set(b.name,b)})}get cookies(){let a=Date.now();return this._cookies.forEach((b,c)=>{var d;(null==(d=b.expires)?void 0:d.getTime())<a&&this._cookies.delete(c)}),this._cookies.entries()}addCookies(a){let b=[];for(let[a,c]of this.cookies)b.push(`${a}=${c.value}`);b.length&&(a.setDisableHeaderCheck(!0),a.setRequestHeader("cookie",b.join("; ")))}appendCookies(a){for(let[b,c]of this.cookies)a.append("cookie",`${b}=${c.value}`)}}function aV(a,...b){return b.reduce((b,c)=>(a.hasOwnProperty(c)&&(b[c]=a[c]),b),{})}let aW=aT.setTimeout,aX=aT.clearTimeout;function aY(a,b){b.useNativeTimers?(a.setTimeoutFn=aW.bind(aT),a.clearTimeoutFn=aX.bind(aT)):(a.setTimeoutFn=aT.setTimeout.bind(aT),a.clearTimeoutFn=aT.clearTimeout.bind(aT))}function aZ(){return Date.now().toString(36).substring(3)+Math.random().toString(36).substring(2,5)}var a$=a.i(72724);let a_=(0,a$.default)("engine.io-client:transport");class a0 extends Error{constructor(a,b,c){super(a),this.description=b,this.context=c,this.type="TransportError"}}class a1 extends aR{constructor(a){super(),this.writable=!1,aY(this,a),this.opts=a,this.query=a.query,this.socket=a.socket,this.supportsBinary=!a.forceBase64}onError(a,b,c){return super.emitReserved("error",new a0(a,b,c)),this}open(){return this.readyState="opening",this.doOpen(),this}close(){return("opening"===this.readyState||"open"===this.readyState)&&(this.doClose(),this.onClose()),this}send(a){"open"===this.readyState?this.write(a):a_("transport is not open, discarding packets")}onOpen(){this.readyState="open",this.writable=!0,super.emitReserved("open")}onData(a){let b=aN(a,this.socket.binaryType);this.onPacket(b)}onPacket(a){super.emitReserved("packet",a)}onClose(a){this.readyState="closed",super.emitReserved("close",a)}pause(a){}createUri(a,b={}){return a+"://"+this._hostname()+this._port()+this.opts.path+this._query(b)}_hostname(){let a=this.opts.hostname;return -1===a.indexOf(":")?a:"["+a+"]"}_port(){return this.opts.port&&(this.opts.secure&&443!==Number(this.opts.port)||!this.opts.secure&&80!==Number(this.opts.port))?":"+this.opts.port:""}_query(a){let b=function(a){let b="";for(let c in a)a.hasOwnProperty(c)&&(b.length&&(b+="&"),b+=encodeURIComponent(c)+"="+encodeURIComponent(a[c]));return b}(a);return b.length?"?"+b:""}}let a2=(0,a$.default)("engine.io-client:polling");class a3 extends a1{constructor(){super(...arguments),this._polling=!1}get name(){return"polling"}doOpen(){this._poll()}pause(a){this.readyState="pausing";let b=()=>{a2("paused"),this.readyState="paused",a()};if(this._polling||!this.writable){let a=0;this._polling&&(a2("we are currently polling - waiting to pause"),a++,this.once("pollComplete",function(){a2("pre-pause polling complete"),--a||b()})),this.writable||(a2("we are currently writing - waiting to pause"),a++,this.once("drain",function(){a2("pre-pause writing complete"),--a||b()}))}else b()}_poll(){a2("polling"),this._polling=!0,this.doPoll(),this.emitReserved("poll")}onData(a){a2("polling got data %s",a);let b=a=>{if("opening"===this.readyState&&"open"===a.type&&this.onOpen(),"close"===a.type)return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(a)};((a,b)=>{let c=a.split("\x1e"),d=[];for(let a=0;a<c.length;a++){let e=aN(c[a],b);if(d.push(e),"error"===e.type)break}return d})(a,this.socket.binaryType).forEach(b),"closed"!==this.readyState&&(this._polling=!1,this.emitReserved("pollComplete"),"open"===this.readyState?this._poll():a2('ignoring poll - transport state "%s"',this.readyState))}doClose(){let a=()=>{a2("writing close packet"),this.write([{type:"close"}])};"open"===this.readyState?(a2("transport open - closing"),a()):(a2("transport not open - deferring close"),this.once("open",a))}write(a){var b;let c,d,e;this.writable=!1,b=a=>{this.doWrite(a,()=>{this.writable=!0,this.emitReserved("drain")})},d=Array(c=a.length),e=0,a.forEach((a,f)=>{aL(a,!1,a=>{d[f]=a,++e===c&&b(d.join("\x1e"))})})}uri(){let a=this.opts.secure?"https":"http",b=this.query||{};return!1!==this.opts.timestampRequests&&(b[this.opts.timestampParam]=aZ()),this.supportsBinary||b.sid||(b.b64=1),this.createUri(a,b)}}let a4=!1;try{a4="u">typeof XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}catch(a){}let a5=a4,a6=(0,a$.default)("engine.io-client:polling");function a7(){}class a8 extends a3{constructor(a){if(super(a),"u">typeof location){const b="https:"===location.protocol;let c=location.port;c||(c=b?"443":"80"),this.xd="u">typeof location&&a.hostname!==location.hostname||c!==a.port}}doWrite(a,b){let c=this.request({method:"POST",data:a});c.on("success",b),c.on("error",(a,b)=>{this.onError("xhr post error",a,b)})}doPoll(){a6("xhr poll");let a=this.request();a.on("data",this.onData.bind(this)),a.on("error",(a,b)=>{this.onError("xhr poll error",a,b)}),this.pollXhr=a}}class a9 extends aR{constructor(a,b,c){super(),this.createRequest=a,aY(this,c),this._opts=c,this._method=c.method||"GET",this._uri=b,this._data=void 0!==c.data?c.data:null,this._create()}_create(){var a;let b=aV(this._opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");b.xdomain=!!this._opts.xd;let c=this._xhr=this.createRequest(b);try{a6("xhr open %s: %s",this._method,this._uri),c.open(this._method,this._uri,!0);try{if(this._opts.extraHeaders)for(let a in c.setDisableHeaderCheck&&c.setDisableHeaderCheck(!0),this._opts.extraHeaders)this._opts.extraHeaders.hasOwnProperty(a)&&c.setRequestHeader(a,this._opts.extraHeaders[a])}catch(a){}if("POST"===this._method)try{c.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(a){}try{c.setRequestHeader("Accept","*/*")}catch(a){}null==(a=this._opts.cookieJar)||a.addCookies(c),"withCredentials"in c&&(c.withCredentials=this._opts.withCredentials),this._opts.requestTimeout&&(c.timeout=this._opts.requestTimeout),c.onreadystatechange=()=>{var a;3===c.readyState&&(null==(a=this._opts.cookieJar)||a.parseCookies(c.getResponseHeader("set-cookie"))),4===c.readyState&&(200===c.status||1223===c.status?this._onLoad():this.setTimeoutFn(()=>{this._onError("number"==typeof c.status?c.status:0)},0))},a6("xhr data %s",this._data),c.send(this._data)}catch(a){this.setTimeoutFn(()=>{this._onError(a)},0);return}"u">typeof document&&(this._index=a9.requestsCount++,a9.requests[this._index]=this)}_onError(a){this.emitReserved("error",a,this._xhr),this._cleanup(!0)}_cleanup(a){if(void 0!==this._xhr&&null!==this._xhr){if(this._xhr.onreadystatechange=a7,a)try{this._xhr.abort()}catch(a){}"u">typeof document&&delete a9.requests[this._index],this._xhr=null}}_onLoad(){let a=this._xhr.responseText;null!==a&&(this.emitReserved("data",a),this.emitReserved("success"),this._cleanup())}abort(){this._cleanup()}}function ba(){for(let a in a9.requests)a9.requests.hasOwnProperty(a)&&a9.requests[a].abort()}a9.requestsCount=0,a9.requests={},"u">typeof document&&("function"==typeof attachEvent?attachEvent("onunload",ba):"function"==typeof addEventListener&&addEventListener("onpagehide"in aT?"pagehide":"unload",ba,!1)),(d=function(a){let b=a.xdomain;try{if("u">typeof XMLHttpRequest&&(!b||a5))return new XMLHttpRequest}catch(a){}if(!b)try{return new aT[["Active"].concat("Object").join("X")]("Microsoft.XMLHTTP")}catch(a){}}({xdomain:!1}))&&d.responseType;let bb=aH.default||aH;a.i(31594),a.i(15251),a.i(31276),a.i(28719),a.i(63349),a.i(54129);var bc=a.i(50842);a.i(36972),bc.default;let bd=(0,a$.default)("engine.io-client:websocket"),be="u">typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase();class bf extends a1{get name(){return"websocket"}doOpen(){let a=this.uri(),b=this.opts.protocols,c=be?{}:aV(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(c.headers=this.opts.extraHeaders);try{this.ws=this.createSocket(a,b,c)}catch(a){return this.emitReserved("error",a)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=a=>this.onClose({description:"websocket connection closed",context:a}),this.ws.onmessage=a=>this.onData(a.data),this.ws.onerror=a=>this.onError("websocket error",a)}write(a){this.writable=!1;for(let b=0;b<a.length;b++){let c=a[b],d=b===a.length-1;aL(c,this.supportsBinary,a=>{try{this.doWrite(c,a)}catch(a){bd("websocket closed before onclose event")}d&&aS(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){void 0!==this.ws&&(this.ws.onerror=()=>{},this.ws.close(),this.ws=null)}uri(){let a=this.opts.secure?"wss":"ws",b=this.query||{};return this.opts.timestampRequests&&(b[this.opts.timestampParam]=aZ()),this.supportsBinary||(b.b64=1),this.createUri(a,b)}}aT.WebSocket||aT.MozWebSocket;let bg=(0,a$.default)("engine.io-client:webtransport"),bh={websocket:class extends bf{createSocket(a,b,c){var d;if(null==(d=this.socket)?void 0:d._cookieJar)for(let[a,b]of(c.headers=c.headers||{},c.headers.cookie="string"==typeof c.headers.cookie?[c.headers.cookie]:c.headers.cookie||[],this.socket._cookieJar.cookies))c.headers.cookie.push(`${a}=${b.value}`);return new bc.default(a,b,c)}doWrite(a,b){let c={};a.options&&(c.compress=a.options.compress),this.opts.perMessageDeflate&&("string"==typeof b?Buffer.byteLength(b):b.length)<this.opts.perMessageDeflate.threshold&&(c.compress=!1),this.ws.send(b,c)}},webtransport:class extends a1{get name(){return"webtransport"}doOpen(){try{this._transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name])}catch(a){return this.emitReserved("error",a)}this._transport.closed.then(()=>{bg("transport closed gracefully"),this.onClose()}).catch(a=>{bg("transport closed due to %s",a),this.onError("webtransport error",a)}),this._transport.ready.then(()=>{this._transport.createBidirectionalStream().then(a=>{var d,e;let f,g,h,i,j=(d=Number.MAX_SAFE_INTEGER,e=this.socket.binaryType,c||(c=new TextDecoder),f=[],g=0,h=-1,i=!1,new TransformStream({transform(a,b){for(f.push(a);;){if(0===g){if(1>aP(f))break;let a=aQ(f,1);i=(128&a[0])==128,g=(h=127&a[0])<126?3:126===h?1:2}else if(1===g){if(2>aP(f))break;let a=aQ(f,2);h=new DataView(a.buffer,a.byteOffset,a.length).getUint16(0),g=3}else if(2===g){if(8>aP(f))break;let a=aQ(f,8),c=new DataView(a.buffer,a.byteOffset,a.length),d=c.getUint32(0);if(d>2097151){b.enqueue(aK);break}h=0x100000000*d+c.getUint32(4),g=3}else{if(aP(f)<h)break;let a=aQ(f,h);b.enqueue(aN(i?a:c.decode(a),e)),g=0}if(0===h||h>d){b.enqueue(aK);break}}}})),k=a.readable.pipeThrough(j).getReader(),l=new TransformStream({transform(a,c){!function(a,c){if(a.data instanceof ArrayBuffer||ArrayBuffer.isView(a.data))return c(aM(a.data,!1));aL(a,!0,a=>{b||(b=new TextEncoder),c(b.encode(a))})}(a,b=>{let d,e=b.length;if(e<126)new DataView((d=new Uint8Array(1)).buffer).setUint8(0,e);else if(e<65536){let a=new DataView((d=new Uint8Array(3)).buffer);a.setUint8(0,126),a.setUint16(1,e)}else{let a=new DataView((d=new Uint8Array(9)).buffer);a.setUint8(0,127),a.setBigUint64(1,BigInt(e))}a.data&&"string"!=typeof a.data&&(d[0]|=128),c.enqueue(d),c.enqueue(b)})}});l.readable.pipeTo(a.writable),this._writer=l.writable.getWriter();let m=()=>{k.read().then(({done:a,value:b})=>{a?bg("session is closed"):(bg("received chunk: %o",b),this.onPacket(b),m())}).catch(a=>{bg("an error occurred while reading: %s",a)})};m();let n={type:"open"};this.query.sid&&(n.data=`{"sid":"${this.query.sid}"}`),this._writer.write(n).then(()=>this.onOpen())})})}write(a){this.writable=!1;for(let b=0;b<a.length;b++){let c=a[b],d=b===a.length-1;this._writer.write(c).then(()=>{d&&aS(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){var a;null==(a=this._transport)||a.close()}},polling:class extends a8{request(a={}){var b;return Object.assign(a,{xd:this.xd,cookieJar:null==(b=this.socket)?void 0:b._cookieJar},this.opts),new a9(a=>new bb(a),this.uri(),a)}}},bi=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,bj=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function bk(a){var b,c;let d,e;if(a.length>8e3)throw"URI too long";let f=a,g=a.indexOf("["),h=a.indexOf("]");-1!=g&&-1!=h&&(a=a.substring(0,g)+a.substring(g,h).replace(/:/g,";")+a.substring(h,a.length));let i=bi.exec(a||""),j={},k=14;for(;k--;)j[bj[k]]=i[k]||"";return -1!=g&&-1!=h&&(j.source=f,j.host=j.host.substring(1,j.host.length-1).replace(/;/g,":"),j.authority=j.authority.replace("[","").replace("]","").replace(/;/g,":"),j.ipv6uri=!0),d=(b=j.path).replace(/\/{2,9}/g,"/").split("/"),("/"==b.slice(0,1)||0===b.length)&&d.splice(0,1),"/"==b.slice(-1)&&d.splice(d.length-1,1),j.pathNames=d,c=j.query,e={},c.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(a,b,c){b&&(e[b]=c)}),j.queryKey=e,j}let bl=(0,a$.default)("engine.io-client:socket"),bm="function"==typeof addEventListener&&"function"==typeof removeEventListener,bn=[];bm&&addEventListener("offline",()=>{bl("closing %d connection(s) because the network was lost",bn.length),bn.forEach(a=>a())},!1);class bo extends aR{constructor(a,b){if(super(),this.binaryType="nodebuffer",this.writeBuffer=[],this._prevBufferLen=0,this._pingInterval=-1,this._pingTimeout=-1,this._maxPayload=-1,this._pingTimeoutTime=1/0,a&&"object"==typeof a&&(b=a,a=null),a){const c=bk(a);b.hostname=c.host,b.secure="https"===c.protocol||"wss"===c.protocol,b.port=c.port,c.query&&(b.query=c.query)}else b.host&&(b.hostname=bk(b.host).host);aY(this,b),this.secure=null!=b.secure?b.secure:"u">typeof location&&"https:"===location.protocol,b.hostname&&!b.port&&(b.port=this.secure?"443":"80"),this.hostname=b.hostname||("u">typeof location?location.hostname:"localhost"),this.port=b.port||("u">typeof location&&location.port?location.port:this.secure?"443":"80"),this.transports=[],this._transportsByName={},b.transports.forEach(a=>{let b=a.prototype.name;this.transports.push(b),this._transportsByName[b]=a}),this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},b),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),"string"==typeof this.opts.query&&(this.opts.query=function(a){let b={},c=a.split("&");for(let a=0,d=c.length;a<d;a++){let d=c[a].split("=");b[decodeURIComponent(d[0])]=decodeURIComponent(d[1])}return b}(this.opts.query)),bm&&(this.opts.closeOnBeforeunload&&(this._beforeunloadEventListener=()=>{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this._beforeunloadEventListener,!1)),"localhost"!==this.hostname&&(bl("adding listener for the 'offline' event"),this._offlineEventListener=()=>{this._onClose("transport close",{description:"network connection lost"})},bn.push(this._offlineEventListener))),this.opts.withCredentials&&(this._cookieJar=new aU),this._open()}createTransport(a){bl('creating transport "%s"',a);let b=Object.assign({},this.opts.query);b.EIO=4,b.transport=a,this.id&&(b.sid=this.id);let c=Object.assign({},this.opts,{query:b,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[a]);return bl("options: %j",c),new this._transportsByName[a](c)}_open(){if(0===this.transports.length)return void this.setTimeoutFn(()=>{this.emitReserved("error","No transports available")},0);let a=this.opts.rememberUpgrade&&bo.priorWebsocketSuccess&&-1!==this.transports.indexOf("websocket")?"websocket":this.transports[0];this.readyState="opening";let b=this.createTransport(a);b.open(),this.setTransport(b)}setTransport(a){bl("setting transport %s",a.name),this.transport&&(bl("clearing existing transport %s",this.transport.name),this.transport.removeAllListeners()),this.transport=a,a.on("drain",this._onDrain.bind(this)).on("packet",this._onPacket.bind(this)).on("error",this._onError.bind(this)).on("close",a=>this._onClose("transport close",a))}onOpen(){bl("socket open"),this.readyState="open",bo.priorWebsocketSuccess="websocket"===this.transport.name,this.emitReserved("open"),this.flush()}_onPacket(a){if("opening"===this.readyState||"open"===this.readyState||"closing"===this.readyState)switch(bl('socket receive: type "%s", data "%s"',a.type,a.data),this.emitReserved("packet",a),this.emitReserved("heartbeat"),a.type){case"open":this.onHandshake(JSON.parse(a.data));break;case"ping":this._sendPacket("pong"),this.emitReserved("ping"),this.emitReserved("pong"),this._resetPingTimeout();break;case"error":let b=Error("server error");b.code=a.data,this._onError(b);break;case"message":this.emitReserved("data",a.data),this.emitReserved("message",a.data)}else bl('packet received with socket readyState "%s"',this.readyState)}onHandshake(a){this.emitReserved("handshake",a),this.id=a.sid,this.transport.query.sid=a.sid,this._pingInterval=a.pingInterval,this._pingTimeout=a.pingTimeout,this._maxPayload=a.maxPayload,this.onOpen(),"closed"!==this.readyState&&this._resetPingTimeout()}_resetPingTimeout(){this.clearTimeoutFn(this._pingTimeoutTimer);let a=this._pingInterval+this._pingTimeout;this._pingTimeoutTime=Date.now()+a,this._pingTimeoutTimer=this.setTimeoutFn(()=>{this._onClose("ping timeout")},a),this.opts.autoUnref&&this._pingTimeoutTimer.unref()}_onDrain(){this.writeBuffer.splice(0,this._prevBufferLen),this._prevBufferLen=0,0===this.writeBuffer.length?this.emitReserved("drain"):this.flush()}flush(){if("closed"!==this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){let a=this._getWritablePackets();bl("flushing %d packets in socket",a.length),this.transport.send(a),this._prevBufferLen=a.length,this.emitReserved("flush")}}_getWritablePackets(){if(!(this._maxPayload&&"polling"===this.transport.name&&this.writeBuffer.length>1))return this.writeBuffer;let a=1;for(let b=0;b<this.writeBuffer.length;b++){let c=this.writeBuffer[b].data;if(c&&(a+="string"==typeof c?function(a){let b=0,c=0;for(let d=0,e=a.length;d<e;d++)(b=a.charCodeAt(d))<128?c+=1:b<2048?c+=2:b<55296||b>=57344?c+=3:(d++,c+=4);return c}(c):Math.ceil(1.33*(c.byteLength||c.size))),b>0&&a>this._maxPayload)return bl("only send %d out of %d packets",b,this.writeBuffer.length),this.writeBuffer.slice(0,b);a+=2}return bl("payload size is %d (max: %d)",a,this._maxPayload),this.writeBuffer}_hasPingExpired(){if(!this._pingTimeoutTime)return!0;let a=Date.now()>this._pingTimeoutTime;return a&&(bl("throttled timer detected, scheduling connection close"),this._pingTimeoutTime=0,aS(()=>{this._onClose("ping timeout")},this.setTimeoutFn)),a}write(a,b,c){return this._sendPacket("message",a,b,c),this}send(a,b,c){return this._sendPacket("message",a,b,c),this}_sendPacket(a,b,c,d){if("function"==typeof b&&(d=b,b=void 0),"function"==typeof c&&(d=c,c=null),"closing"===this.readyState||"closed"===this.readyState)return;(c=c||{}).compress=!1!==c.compress;let e={type:a,data:b,options:c};this.emitReserved("packetCreate",e),this.writeBuffer.push(e),d&&this.once("flush",d),this.flush()}close(){let a=()=>{this._onClose("forced close"),bl("socket closing - telling transport to close"),this.transport.close()},b=()=>{this.off("upgrade",b),this.off("upgradeError",b),a()},c=()=>{this.once("upgrade",b),this.once("upgradeError",b)};return("opening"===this.readyState||"open"===this.readyState)&&(this.readyState="closing",this.writeBuffer.length?this.once("drain",()=>{this.upgrading?c():a()}):this.upgrading?c():a()),this}_onError(a){if(bl("socket error %j",a),bo.priorWebsocketSuccess=!1,this.opts.tryAllTransports&&this.transports.length>1&&"opening"===this.readyState)return bl("trying next transport"),this.transports.shift(),this._open();this.emitReserved("error",a),this._onClose("transport error",a)}_onClose(a,b){if("opening"===this.readyState||"open"===this.readyState||"closing"===this.readyState){if(bl('socket close with reason: "%s"',a),this.clearTimeoutFn(this._pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),bm&&(this._beforeunloadEventListener&&removeEventListener("beforeunload",this._beforeunloadEventListener,!1),this._offlineEventListener)){let a=bn.indexOf(this._offlineEventListener);-1!==a&&(bl("removing listener for the 'offline' event"),bn.splice(a,1))}this.readyState="closed",this.id=null,this.emitReserved("close",a,b),this.writeBuffer=[],this._prevBufferLen=0}}}bo.protocol=4;class bp extends bo{constructor(){super(...arguments),this._upgrades=[]}onOpen(){if(super.onOpen(),"open"===this.readyState&&this.opts.upgrade){bl("starting upgrade probes");for(let a=0;a<this._upgrades.length;a++)this._probe(this._upgrades[a])}}_probe(a){bl('probing transport "%s"',a);let b=this.createTransport(a),c=!1;bo.priorWebsocketSuccess=!1;let d=()=>{c||(bl('probe transport "%s" opened',a),b.send([{type:"ping",data:"probe"}]),b.once("packet",d=>{if(!c)if("pong"===d.type&&"probe"===d.data){if(bl('probe transport "%s" pong',a),this.upgrading=!0,this.emitReserved("upgrading",b),!b)return;bo.priorWebsocketSuccess="websocket"===b.name,bl('pausing current transport "%s"',this.transport.name),this.transport.pause(()=>{c||"closed"!==this.readyState&&(bl("changing transport and sending upgrade packet"),j(),this.setTransport(b),b.send([{type:"upgrade"}]),this.emitReserved("upgrade",b),b=null,this.upgrading=!1,this.flush())})}else{bl('probe transport "%s" failed',a);let c=Error("probe error");c.transport=b.name,this.emitReserved("upgradeError",c)}}))};function e(){c||(c=!0,j(),b.close(),b=null)}let f=c=>{let d=Error("probe error: "+c);d.transport=b.name,e(),bl('probe transport "%s" failed because of error: %s',a,c),this.emitReserved("upgradeError",d)};function g(){f("transport closed")}function h(){f("socket closed")}function i(a){b&&a.name!==b.name&&(bl('"%s" works - aborting "%s"',a.name,b.name),e())}let j=()=>{b.removeListener("open",d),b.removeListener("error",f),b.removeListener("close",g),this.off("close",h),this.off("upgrading",i)};b.once("open",d),b.once("error",f),b.once("close",g),this.once("close",h),this.once("upgrading",i),-1!==this._upgrades.indexOf("webtransport")&&"webtransport"!==a?this.setTimeoutFn(()=>{c||b.open()},200):b.open()}onHandshake(a){this._upgrades=this._filterUpgrades(a.upgrades),super.onHandshake(a)}_filterUpgrades(a){let b=[];for(let c=0;c<a.length;c++)~this.transports.indexOf(a[c])&&b.push(a[c]);return b}}class bq extends bp{constructor(a,b={}){const c="object"==typeof a,d=c?{...a}:{...b};(!d.transports||d.transports&&"string"==typeof d.transports[0])&&(d.transports=(d.transports||["polling","websocket","webtransport"]).map(a=>bh[a]).filter(a=>!!a)),super(c?d:a,d)}}bq.protocol;let br=(0,a$.default)("socket.io-client:url"),bs="function"==typeof ArrayBuffer,bt=Object.prototype.toString,bu="function"==typeof Blob||"u">typeof Blob&&"[object BlobConstructor]"===bt.call(Blob),bv="function"==typeof File||"u">typeof File&&"[object FileConstructor]"===bt.call(File);function bw(a){return bs&&(a instanceof ArrayBuffer||("function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(a):a.buffer instanceof ArrayBuffer))||bu&&a instanceof Blob||bv&&a instanceof File}let bx=(0,a$.default)("socket.io-parser"),by=["connect","connect_error","disconnect","disconnecting","newListener","removeListener"];(f=g||(g={}))[f.CONNECT=0]="CONNECT",f[f.DISCONNECT=1]="DISCONNECT",f[f.EVENT=2]="EVENT",f[f.ACK=3]="ACK",f[f.CONNECT_ERROR=4]="CONNECT_ERROR",f[f.BINARY_EVENT=5]="BINARY_EVENT",f[f.BINARY_ACK=6]="BINARY_ACK";class bz{constructor(a){this.replacer=a}encode(a){return(bx("encoding packet %j",a),(a.type===g.EVENT||a.type===g.ACK)&&function a(b,c){if(!b||"object"!=typeof b)return!1;if(Array.isArray(b)){for(let c=0,d=b.length;c<d;c++)if(a(b[c]))return!0;return!1}if(bw(b))return!0;if(b.toJSON&&"function"==typeof b.toJSON&&1==arguments.length)return a(b.toJSON(),!0);for(let c in b)if(Object.prototype.hasOwnProperty.call(b,c)&&a(b[c]))return!0;return!1}(a))?this.encodeAsBinary({type:a.type===g.EVENT?g.BINARY_EVENT:g.BINARY_ACK,nsp:a.nsp,data:a.data,id:a.id}):[this.encodeAsString(a)]}encodeAsString(a){let b=""+a.type;return(a.type===g.BINARY_EVENT||a.type===g.BINARY_ACK)&&(b+=a.attachments+"-"),a.nsp&&"/"!==a.nsp&&(b+=a.nsp+","),null!=a.id&&(b+=a.id),null!=a.data&&(b+=JSON.stringify(a.data,this.replacer)),bx("encoded %j as %s",a,b),b}encodeAsBinary(a){let b,c,d=(b=[],c=a.data,a.data=function a(b,c,d){if(!b)return b;if(bw(b)){let a={_placeholder:!0,num:c.length};return c.push(b),a}if(Array.isArray(b)){let d=Array(b.length);for(let e=0;e<b.length;e++)d[e]=a(b[e],c);return d}if("object"==typeof b&&!(b instanceof Date)){if(b.toJSON&&"function"==typeof b.toJSON&&!d)return a(b.toJSON(),c,!0);let e={};for(let d in b)Object.prototype.hasOwnProperty.call(b,d)&&(e[d]=a(b[d],c));return e}return b}(c,b),a.attachments=b.length,{packet:a,buffers:b}),e=this.encodeAsString(d.packet),f=d.buffers;return f.unshift(e),f}}class bA extends aR{constructor(a){super(),this.opts=Object.assign({reviver:void 0,maxAttachments:10},"function"==typeof a?{reviver:a}:a)}add(a){let b;if("string"==typeof a){if(this.reconstructor)throw Error("got plaintext data when reconstructing a packet");let c=(b=this.decodeString(a)).type===g.BINARY_EVENT;c||b.type===g.BINARY_ACK?(b.type=c?g.EVENT:g.ACK,this.reconstructor=new bB(b)):super.emitReserved("decoded",b)}else if(bw(a)||a.base64)if(this.reconstructor)(b=this.reconstructor.takeBinaryData(a))&&(this.reconstructor=null,super.emitReserved("decoded",b));else throw Error("got binary data when not reconstructing a packet");else throw Error("Unknown type: "+a)}decodeString(a){let b=0,c={type:Number(a.charAt(0))};if(void 0===g[c.type])throw Error("unknown packet type "+c.type);if(c.type===g.BINARY_EVENT||c.type===g.BINARY_ACK){let d=b+1;for(;"-"!==a.charAt(++b)&&b!=a.length;);let e=a.substring(d,b);if(e!=Number(e)||"-"!==a.charAt(b))throw Error("Illegal attachments");let f=Number(e);if(!bC(f)||f<1)throw Error("Illegal attachments");if(f>this.opts.maxAttachments)throw Error("too many attachments");c.attachments=f}if("/"===a.charAt(b+1)){let d=b+1;for(;++b&&","!==a.charAt(b)&&b!==a.length;);c.nsp=a.substring(d,b)}else c.nsp="/";let d=a.charAt(b+1);if(""!==d&&Number(d)==d){let d=b+1;for(;++b;){let c=a.charAt(b);if(null==c||Number(c)!=c){--b;break}if(b===a.length)break}c.id=Number(a.substring(d,b+1))}if(a.charAt(++b)){let d=this.tryParse(a.substr(b));if(bA.isPayloadValid(c.type,d))c.data=d;else throw Error("invalid payload")}return bx("decoded %s as %j",a,c),c}tryParse(a){try{return JSON.parse(a,this.opts.reviver)}catch(a){return!1}}static isPayloadValid(a,b){switch(a){case g.CONNECT:return bD(b);case g.DISCONNECT:return void 0===b;case g.CONNECT_ERROR:return"string"==typeof b||bD(b);case g.EVENT:case g.BINARY_EVENT:return Array.isArray(b)&&("number"==typeof b[0]||"string"==typeof b[0]&&-1===by.indexOf(b[0]));case g.ACK:case g.BINARY_ACK:return Array.isArray(b)}}destroy(){this.reconstructor&&(this.reconstructor.finishedReconstruction(),this.reconstructor=null)}}class bB{constructor(a){this.packet=a,this.buffers=[],this.reconPack=a}takeBinaryData(a){if(this.buffers.push(a),this.buffers.length===this.reconPack.attachments){var b,c;let a=(b=this.reconPack,c=this.buffers,b.data=function a(b,c){if(!b)return b;if(b&&!0===b._placeholder){if("number"==typeof b.num&&b.num>=0&&b.num<c.length)return c[b.num];throw Error("illegal attachments")}if(Array.isArray(b))for(let d=0;d<b.length;d++)b[d]=a(b[d],c);else if("object"==typeof b)for(let d in b)Object.prototype.hasOwnProperty.call(b,d)&&(b[d]=a(b[d],c));return b}(b.data,c),delete b.attachments,b);return this.finishedReconstruction(),a}return null}finishedReconstruction(){this.reconPack=null,this.buffers=[]}}let bC=Number.isInteger||function(a){return"number"==typeof a&&isFinite(a)&&Math.floor(a)===a};function bD(a){return"[object Object]"===Object.prototype.toString.call(a)}function bE(a){var b;return"string"==typeof a.nsp&&(void 0===(b=a.id)||bC(b))&&function(a,b){switch(a){case g.CONNECT:return void 0===b||bD(b);case g.DISCONNECT:return void 0===b;case g.EVENT:return Array.isArray(b)&&("number"==typeof b[0]||"string"==typeof b[0]&&-1===by.indexOf(b[0]));case g.ACK:return Array.isArray(b);case g.CONNECT_ERROR:return"string"==typeof b||bD(b);default:return!1}}(a.type,a.data)}function bF(a,b,c){return a.on(b,c),function(){a.off(b,c)}}a.s(["Decoder",()=>bA,"Encoder",()=>bz,"PacketType",()=>g,"isPacketValid",()=>bE,"protocol",0,5],10419);let bG=(0,a$.default)("socket.io-client:socket"),bH=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1});class bI extends aR{constructor(a,b,c){super(),this.connected=!1,this.recovered=!1,this.receiveBuffer=[],this.sendBuffer=[],this._queue=[],this._queueSeq=0,this.ids=0,this.acks={},this.flags={},this.io=a,this.nsp=b,c&&c.auth&&(this.auth=c.auth),this._opts=Object.assign({},c),this.io._autoConnect&&this.open()}get disconnected(){return!this.connected}subEvents(){if(this.subs)return;let a=this.io;this.subs=[bF(a,"open",this.onopen.bind(this)),bF(a,"packet",this.onpacket.bind(this)),bF(a,"error",this.onerror.bind(this)),bF(a,"close",this.onclose.bind(this))]}get active(){return!!this.subs}connect(){return this.connected||(this.subEvents(),this.io._reconnecting||this.io.open(),"open"===this.io._readyState&&this.onopen()),this}open(){return this.connect()}send(...a){return a.unshift("message"),this.emit.apply(this,a),this}emit(a,...b){var c,d,e;if(bH.hasOwnProperty(a))throw Error('"'+a.toString()+'" is a reserved event name');if(b.unshift(a),this._opts.retries&&!this.flags.fromQueue&&!this.flags.volatile)return this._addToQueue(b),this;let f={type:g.EVENT,data:b};if(f.options={},f.options.compress=!1!==this.flags.compress,"function"==typeof b[b.length-1]){let a=this.ids++;bG("emitting packet with ack id %d",a);let c=b.pop();this._registerAckCallback(a,c),f.id=a}let h=null==(d=null==(c=this.io.engine)?void 0:c.transport)?void 0:d.writable,i=this.connected&&!(null==(e=this.io.engine)?void 0:e._hasPingExpired());return this.flags.volatile&&!h?bG("discard packet as the transport is not currently writable"):i?(this.notifyOutgoingListeners(f),this.packet(f)):this.sendBuffer.push(f),this.flags={},this}_registerAckCallback(a,b){var c;let d=null!=(c=this.flags.timeout)?c:this._opts.ackTimeout;if(void 0===d){this.acks[a]=b;return}let e=this.io.setTimeoutFn(()=>{delete this.acks[a];for(let b=0;b<this.sendBuffer.length;b++)this.sendBuffer[b].id===a&&(bG("removing packet with ack id %d from the buffer",a),this.sendBuffer.splice(b,1));bG("event with ack id %d has timed out after %d ms",a,d),b.call(this,Error("operation has timed out"))},d),f=(...a)=>{this.io.clearTimeoutFn(e),b.apply(this,a)};f.withError=!0,this.acks[a]=f}emitWithAck(a,...b){return new Promise((c,d)=>{let e=(a,b)=>a?d(a):c(b);e.withError=!0,b.push(e),this.emit(a,...b)})}_addToQueue(a){let b;"function"==typeof a[a.length-1]&&(b=a.pop());let c={id:this._queueSeq++,tryCount:0,pending:!1,args:a,flags:Object.assign({fromQueue:!0},this.flags)};a.push((a,...d)=>c!==this._queue[0]?bG("packet [%d] already acknowledged",c.id):(null!==a?c.tryCount>this._opts.retries&&(bG("packet [%d] is discarded after %d tries",c.id,c.tryCount),this._queue.shift(),b&&b(a)):(bG("packet [%d] was successfully sent",c.id),this._queue.shift(),b&&b(null,...d)),c.pending=!1,this._drainQueue())),this._queue.push(c),this._drainQueue()}_drainQueue(a=!1){if(bG("draining queue"),!this.connected||0===this._queue.length)return;let b=this._queue[0];b.pending&&!a?bG("packet [%d] has already been sent and is waiting for an ack",b.id):(b.pending=!0,b.tryCount++,bG("sending packet [%d] (try n°%d)",b.id,b.tryCount),this.flags=b.flags,this.emit.apply(this,b.args))}packet(a){a.nsp=this.nsp,this.io._packet(a)}onopen(){bG("transport is open - connecting"),"function"==typeof this.auth?this.auth(a=>{this._sendConnectPacket(a)}):this._sendConnectPacket(this.auth)}_sendConnectPacket(a){this.packet({type:g.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},a):a})}onerror(a){this.connected||this.emitReserved("connect_error",a)}onclose(a,b){bG("close (%s)",a),this.connected=!1,delete this.id,this.emitReserved("disconnect",a,b),this._clearAcks()}_clearAcks(){Object.keys(this.acks).forEach(a=>{if(!this.sendBuffer.some(b=>String(b.id)===a)){let b=this.acks[a];delete this.acks[a],b.withError&&b.call(this,Error("socket has been disconnected"))}})}onpacket(a){if(a.nsp===this.nsp)switch(a.type){case g.CONNECT:a.data&&a.data.sid?this.onconnect(a.data.sid,a.data.pid):this.emitReserved("connect_error",Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case g.EVENT:case g.BINARY_EVENT:this.onevent(a);break;case g.ACK:case g.BINARY_ACK:this.onack(a);break;case g.DISCONNECT:this.ondisconnect();break;case g.CONNECT_ERROR:this.destroy();let b=Error(a.data.message);b.data=a.data.data,this.emitReserved("connect_error",b)}}onevent(a){let b=a.data||[];bG("emitting event %j",b),null!=a.id&&(bG("attaching ack callback to event"),b.push(this.ack(a.id))),this.connected?this.emitEvent(b):this.receiveBuffer.push(Object.freeze(b))}emitEvent(a){if(this._anyListeners&&this._anyListeners.length)for(let b of this._anyListeners.slice())b.apply(this,a);super.emit.apply(this,a),this._pid&&a.length&&"string"==typeof a[a.length-1]&&(this._lastOffset=a[a.length-1])}ack(a){let b=this,c=!1;return function(...d){c||(c=!0,bG("sending ack %j",d),b.packet({type:g.ACK,id:a,data:d}))}}onack(a){let b=this.acks[a.id];"function"!=typeof b?bG("bad ack %s",a.id):(delete this.acks[a.id],bG("calling ack %s with %j",a.id,a.data),b.withError&&a.data.unshift(null),b.apply(this,a.data))}onconnect(a,b){bG("socket connected with id %s",a),this.id=a,this.recovered=b&&this._pid===b,this._pid=b,this.connected=!0,this.emitBuffered(),this._drainQueue(!0),this.emitReserved("connect")}emitBuffered(){this.receiveBuffer.forEach(a=>this.emitEvent(a)),this.receiveBuffer=[],this.sendBuffer.forEach(a=>{this.notifyOutgoingListeners(a),this.packet(a)}),this.sendBuffer=[]}ondisconnect(){bG("server disconnect (%s)",this.nsp),this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach(a=>a()),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&(bG("performing disconnect (%s)",this.nsp),this.packet({type:g.DISCONNECT})),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(a){return this.flags.compress=a,this}get volatile(){return this.flags.volatile=!0,this}timeout(a){return this.flags.timeout=a,this}onAny(a){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(a),this}prependAny(a){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(a),this}offAny(a){if(!this._anyListeners)return this;if(a){let b=this._anyListeners;for(let c=0;c<b.length;c++)if(a===b[c]){b.splice(c,1);break}}else this._anyListeners=[];return this}listenersAny(){return this._anyListeners||[]}onAnyOutgoing(a){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.push(a),this}prependAnyOutgoing(a){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.unshift(a),this}offAnyOutgoing(a){if(!this._anyOutgoingListeners)return this;if(a){let b=this._anyOutgoingListeners;for(let c=0;c<b.length;c++)if(a===b[c]){b.splice(c,1);break}}else this._anyOutgoingListeners=[];return this}listenersAnyOutgoing(){return this._anyOutgoingListeners||[]}notifyOutgoingListeners(a){if(this._anyOutgoingListeners&&this._anyOutgoingListeners.length)for(let b of this._anyOutgoingListeners.slice())b.apply(this,a.data)}}var bJ=a.i(10419);function bK(a){a=a||{},this.ms=a.min||100,this.max=a.max||1e4,this.factor=a.factor||2,this.jitter=a.jitter>0&&a.jitter<=1?a.jitter:0,this.attempts=0}bK.prototype.duration=function(){var a=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var b=Math.random(),c=Math.floor(b*this.jitter*a);a=(1&Math.floor(10*b))==0?a-c:a+c}return 0|Math.min(a,this.max)},bK.prototype.reset=function(){this.attempts=0},bK.prototype.setMin=function(a){this.ms=a},bK.prototype.setMax=function(a){this.max=a},bK.prototype.setJitter=function(a){this.jitter=a};let bL=(0,a$.default)("socket.io-client:manager");class bM extends aR{constructor(a,b){var c;super(),this.nsps={},this.subs=[],a&&"object"==typeof a&&(b=a,a=void 0),(b=b||{}).path=b.path||"/socket.io",this.opts=b,aY(this,b),this.reconnection(!1!==b.reconnection),this.reconnectionAttempts(b.reconnectionAttempts||1/0),this.reconnectionDelay(b.reconnectionDelay||1e3),this.reconnectionDelayMax(b.reconnectionDelayMax||5e3),this.randomizationFactor(null!=(c=b.randomizationFactor)?c:.5),this.backoff=new bK({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(null==b.timeout?2e4:b.timeout),this._readyState="closed",this.uri=a;const d=b.parser||bJ;this.encoder=new d.Encoder,this.decoder=new d.Decoder,this._autoConnect=!1!==b.autoConnect,this._autoConnect&&this.open()}reconnection(a){return arguments.length?(this._reconnection=!!a,a||(this.skipReconnect=!0),this):this._reconnection}reconnectionAttempts(a){return void 0===a?this._reconnectionAttempts:(this._reconnectionAttempts=a,this)}reconnectionDelay(a){var b;return void 0===a?this._reconnectionDelay:(this._reconnectionDelay=a,null==(b=this.backoff)||b.setMin(a),this)}randomizationFactor(a){var b;return void 0===a?this._randomizationFactor:(this._randomizationFactor=a,null==(b=this.backoff)||b.setJitter(a),this)}reconnectionDelayMax(a){var b;return void 0===a?this._reconnectionDelayMax:(this._reconnectionDelayMax=a,null==(b=this.backoff)||b.setMax(a),this)}timeout(a){return arguments.length?(this._timeout=a,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&0===this.backoff.attempts&&this.reconnect()}open(a){if(bL("readyState %s",this._readyState),~this._readyState.indexOf("open"))return this;bL("opening %s",this.uri),this.engine=new bq(this.uri,this.opts);let b=this.engine,c=this;this._readyState="opening",this.skipReconnect=!1;let d=bF(b,"open",function(){c.onopen(),a&&a()}),e=b=>{bL("error"),this.cleanup(),this._readyState="closed",this.emitReserved("error",b),a?a(b):this.maybeReconnectOnOpen()},f=bF(b,"error",e);if(!1!==this._timeout){let a=this._timeout;bL("connect attempt will timeout after %d",a);let c=this.setTimeoutFn(()=>{bL("connect attempt timed out after %d",a),d(),e(Error("timeout")),b.close()},a);this.opts.autoUnref&&c.unref(),this.subs.push(()=>{this.clearTimeoutFn(c)})}return this.subs.push(d),this.subs.push(f),this}connect(a){return this.open(a)}onopen(){bL("open"),this.cleanup(),this._readyState="open",this.emitReserved("open");let a=this.engine;this.subs.push(bF(a,"ping",this.onping.bind(this)),bF(a,"data",this.ondata.bind(this)),bF(a,"error",this.onerror.bind(this)),bF(a,"close",this.onclose.bind(this)),bF(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(a){try{this.decoder.add(a)}catch(a){this.onclose("parse error",a)}}ondecoded(a){aS(()=>{this.emitReserved("packet",a)},this.setTimeoutFn)}onerror(a){bL("error",a),this.emitReserved("error",a)}socket(a,b){let c=this.nsps[a];return c?this._autoConnect&&!c.active&&c.connect():(c=new bI(this,a,b),this.nsps[a]=c),c}_destroy(a){for(let a of Object.keys(this.nsps))if(this.nsps[a].active)return void bL("socket %s is still active, skipping close",a);this._close()}_packet(a){bL("writing packet %j",a);let b=this.encoder.encode(a);for(let c=0;c<b.length;c++)this.engine.write(b[c],a.options)}cleanup(){bL("cleanup"),this.subs.forEach(a=>a()),this.subs.length=0,this.decoder.destroy()}_close(){bL("disconnect"),this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close")}disconnect(){return this._close()}onclose(a,b){var c;bL("closed due to %s",a),this.cleanup(),null==(c=this.engine)||c.close(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",a,b),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;let a=this;if(this.backoff.attempts>=this._reconnectionAttempts)bL("reconnect failed"),this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{let b=this.backoff.duration();bL("will wait %dms before reconnect attempt",b),this._reconnecting=!0;let c=this.setTimeoutFn(()=>{a.skipReconnect||(bL("attempting reconnect"),this.emitReserved("reconnect_attempt",a.backoff.attempts),a.skipReconnect||a.open(b=>{b?(bL("reconnect attempt error"),a._reconnecting=!1,a.reconnect(),this.emitReserved("reconnect_error",b)):(bL("reconnect success"),a.onreconnect())}))},b);this.opts.autoUnref&&c.unref(),this.subs.push(()=>{this.clearTimeoutFn(c)})}}onreconnect(){let a=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",a)}}let bN=(0,a$.default)("socket.io-client"),bO={};function bP(a,b){let c;"object"==typeof a&&(b=a,a=void 0);let d=function(a,b="",c){let d=a;c=c||"u">typeof location&&location,null==a&&(a=c.protocol+"//"+c.host),"string"==typeof a&&("/"===a.charAt(0)&&(a="/"===a.charAt(1)?c.protocol+a:c.host+a),/^(https?|wss?):\/\//.test(a)||(br("protocol-less url %s",a),a=void 0!==c?c.protocol+"//"+a:"https://"+a),br("parse %s",a),d=bk(a)),!d.port&&(/^(http|ws)$/.test(d.protocol)?d.port="80":/^(http|ws)s$/.test(d.protocol)&&(d.port="443")),d.path=d.path||"/";let e=-1!==d.host.indexOf(":")?"["+d.host+"]":d.host;return d.id=d.protocol+"://"+e+":"+d.port+b,d.href=d.protocol+"://"+e+(c&&c.port===d.port?"":":"+d.port),d}(a,(b=b||{}).path||"/socket.io"),e=d.source,f=d.id,g=d.path,h=bO[f]&&g in bO[f].nsps;return b.forceNew||b["force new connection"]||!1===b.multiplex||h?(bN("ignoring socket cache for %s",e),c=new bM(e,b)):(bO[f]||(bN("new io instance for %s",e),bO[f]=new bM(e,b)),c=bO[f]),d.query&&!b.query&&(b.query=d.queryKey),c.socket(d.path,b)}function bQ(a){if(a&&"object"==typeof a&&"clientId"in a){let b=a.clientId;if("string"==typeof b)return b}}function bR(a){return"runtime.enter"===a.op||"runtime.exit"===a.op}function bS(a){let{onFull:b,onPatch:c,onPresence:d,...e}=a,f=function(a){let{url:b,role:c,docId:d,name:e,token:f}=a,g=!1!==a.autoResync,h=bP(b,{auth:{token:f},autoConnect:!1}),i="disconnected",j=0,k="",l=[],m={patch:new Set,full:new Set,ack:new Set,presence:new Set,error:new Set,status:new Set};function n(a,b){for(let c of[...m[a]])c(b)}function o(a){i!==a&&(i=a,n("status",a))}function p(a){h.emit("def:request",{docId:d,sinceSeq:a})}function q(a){"number"==typeof a&&(g&&a>j+1&&p(j),j=Math.max(j,a))}function r(){n("presence",[...l])}function s(){return h.connected?Promise.resolve():new Promise((a,b)=>{o("connecting");let c=()=>{e(),a()},d=a=>{e(),b(a)},e=()=>{h.off("connect",c),h.off("connect_error",d)};h.once("connect",c),h.once("connect_error",d),h.connect()})}async function t(){return await s(),new Promise((a,b)=>{h.emit("bridge:join",{docId:d,role:c,name:e},c=>{if(!c||c.error){let a=c?.error??{code:"join_failed",message:"no join ack"};n("error",a),b(Error(`${a.code}: ${a.message}`));return}k=c.selfId,l=c.presence?[...c.presence]:[],j=c.snapshot?.seq??0,r(),a({selfId:k,snapshot:c.snapshot,presence:[...l]})})})}return h.on("connect",()=>o("connected")),h.on("disconnect",()=>o("disconnected")),h.on("connect_error",a=>{o("error"),n("error",{code:"connect_error",message:a?.message??String(a)})}),h.on("def:patch",a=>{q(a?.seq),a?.origin&&a.origin===k||n("patch",a)}),h.on("def:full",a=>{q(a?.seq),a?.origin&&a.origin===k||n("full",a)}),h.on("def:ack",a=>{n("ack",a)}),h.on("bridge:error",a=>{n("error",{code:a?.code??"error",message:a?.message??""})}),h.on("presence:list",a=>{l=Array.isArray(a)?[...a]:[],r()}),h.on("presence:join",a=>{let b=bQ(a);b&&(l=[...l.filter(a=>a.clientId!==b),a],r())}),h.on("presence:leave",a=>{let b=bQ(a);b&&(l=l.filter(a=>a.clientId!==b),r())}),h.on("presence:update",a=>{let b=bQ(a);if(!b)return;let c=l.findIndex(a=>a.clientId===b);if(-1===c)l=[...l,a];else{let b={...l[c],...a};l=l.map((a,d)=>d===c?b:a)}r()}),{connect:s,join:t,emitPatch:function(a,b,c){h.emit("def:patch",{docId:d,ops:a,origin:k,baseSeq:c,mtime:b})},emitFull:function(a,b){h.emit("def:full",{docId:d,def:a,origin:k,mtime:b})},request:p,updatePresence:function(a){h.emit("presence:update",{docId:d,clientId:k,cursor:a.cursor,selection:a.selection})},on:function(a,b){let c=m[a];return c.add(b),()=>c.delete(b)},disconnect:function(){h.connected&&k&&h.emit("bridge:leave",{docId:d,clientId:k}),h.disconnect(),o("disconnected")},get status(){return i},get lastSeq(){return j},get presence(){return[...l]}}}(e),g=null,h=0,i=[],j=[],k={status:f.status,def:null,seq:0,presence:[],activeStates:[]},l=new Set;function m(){for(let a of(k={status:f.status,def:g,seq:h,presence:i,activeStates:j},[...l]))a()}return f.on("status",()=>m()),f.on("full",a=>{g=a.def,"number"==typeof a.seq&&(h=a.seq),b?.(a),m()}),f.on("patch",a=>{"number"==typeof a.seq&&(h=a.seq);let b=a.ops??[],d=b.filter(bR),e=b.filter(a=>!bR(a));e.length>0&&g&&(g=n(g,e));for(let a of d)"runtime.enter"===a.op?j.includes(a.state)||(j=[...j,a.state]):"runtime.exit"===a.op&&j.includes(a.state)&&(j=j.filter(b=>b!==a.state));c?.(a),m()}),f.on("presence",a=>{i=a,d?.(a),m()}),{getSnapshot:function(){return k},subscribe:function(a){return l.add(a),()=>{l.delete(a)}},emitPatch:function(a){f.emitPatch(a)},emitFull:function(a){f.emitFull(a)},enter:function(a,b,c){let d={op:"runtime.enter",state:a,...void 0!==b?{from:b}:{},...void 0!==c?{eventId:c}:{}};f.emitPatch([d])},exit:function(a){f.emitPatch([{op:"runtime.exit",state:a}])},connect:function(){f.join().then(a=>{g=a.snapshot.def,h=a.snapshot.seq,i=a.presence,null!==g&&b?.({docId:a.snapshot.docId,def:g,seq:h,mtime:a.snapshot.mtime,origin:"join"}),m()}).catch(()=>{m()})},disconnect:function(){f.disconnect()}}}function bT(){return{settings:{namespace:"MyApp",name:"MyStateMachine",asynchronous:!1},events:[{name:"Internal",events:[]}],state:{name:"Root",states:[{name:"Idle",kind:"normal"},{name:"End",kind:"final"}]}}}function bU(){return{positions:{}}}function bV(a,b){if(a.name===b)return a;for(let c of a.states??[]){let a=bV(c,b);if(a)return a}return null}function bW(a,b,c){return a.name===b?c(a)??a:{...a,states:a.states?.map(a=>bW(a,b,c))}}function bX(a,b){return{...a,states:a.states?.filter(a=>a.name!==b).map(a=>bX(a,b))}}function bY(a){let b=[a.name];for(let c of a.states??[])b.push(...bY(c));return b}function bZ(a){return a.events.flatMap(a=>(a.events??[]).map(a=>a.id))}function b$(a){let b=[],c=bY(a.state),d=bZ(a);0===d.length&&b.push({ruleId:"V001",message:"No events defined"});let e=new Set;for(let a of c)e.has(a)&&b.push({ruleId:"V002",message:`Duplicate state name: ${a}`,element:a}),e.add(a);!function a(e){for(let a of e.transitions??[])d.includes(a.event)||b.push({ruleId:"V003",message:`Transition in '${e.name}' references unknown event '${a.event}'`,element:e.name}),a.nextState&&!c.includes(a.nextState)&&b.push({ruleId:"V004",message:`Transition in '${e.name}' targets unknown state '${a.nextState}'`,element:e.name});for(let c of("final"===e.kind&&(e.transitions?.length??0)>0&&b.push({ruleId:"V007",message:`Final state '${e.name}' must not have outgoing transitions`,element:e.name}),"final"===e.kind&&(e.states?.length??0)>0&&b.push({ruleId:"V008",message:`Final state '${e.name}' must not have child states`,element:e.name}),e.states??[]))a(c)}(a.state),a.state.states&&0!==a.state.states.length||b.push({ruleId:"V005",message:"Root state must have at least one child state",element:a.state.name});let f=new Set;for(let a of d)f.has(a)&&b.push({ruleId:"V003",message:`Duplicate event ID: ${a}`,element:a}),f.add(a);return b}function b_(a,b){return{positions:{...x(a),...b.positions}}}Object.assign(bP,{Manager:bM,Socket:bI,io:bP,connect:bP});let b0=(e=(a,b)=>({definition:bT(),layout:b_(bT(),bU()),viewport:{...M},fileName:null,docPath:null,dirty:!1,remoteMtime:null,remoteStatus:"idle",remoteMessage:null,activeStates:[],presence:[],_applyingRemote:!1,selection:{kind:null,id:null},drawMode:"select",drawSource:null,contextMenu:{visible:!1,x:0,y:0,target:null},undoStack:[],redoStack:[],activeTab:"properties",errors:[],showCodePreview:!1,generatedCode:null,navigationPath:["Root"],currentParent:"Root",_pushHistory:()=>{let{definition:c,layout:d,undoStack:e}=b(),f={definition:JSON.parse(JSON.stringify(c)),layout:JSON.parse(JSON.stringify(d))};a({undoStack:[...e.slice(-50),f],redoStack:[]})},setDefinition:c=>{b()._pushHistory();let d=b_(c,b().layout);a({definition:c,layout:d,dirty:!0,errors:b$(c)})},updateSettings:c=>{b()._pushHistory(),a({definition:{...b().definition,settings:{...b().definition.settings,...c}},dirty:!0})},addState:(c,d)=>{b()._pushHistory();let e={...b().definition},f=c??e.state.name;e.state=bW(e.state,f,a=>({...a,states:[...a.states??[],d]}));let g=b_(e,b().layout);a({definition:e,layout:g,dirty:!0,errors:b$(e)})},updateState:(c,d)=>{b()._pushHistory();let e={...b().definition};e.state=bW(e.state,c,a=>({...a,...d})),a({definition:e,dirty:!0,errors:b$(e)})},removeState:c=>{b()._pushHistory();let d={...b().definition};d.state=bX(d.state,c);let e={positions:{...b().layout.positions}};delete e.positions[c],a({definition:d,layout:e,dirty:!0,errors:b$(d)})},nestState:(c,d)=>{b()._pushHistory();let e={...b().definition},f=bV(e.state,c);if(!f||c===d)return;let g=JSON.parse(JSON.stringify(f));e.state=bX(e.state,c),e.state=bW(e.state,d,a=>({...a,states:[...a.states??[],g]})),a({definition:e,dirty:!0,errors:b$(e)})},addEventSource:c=>{b()._pushHistory(),a({definition:{...b().definition,events:[...b().definition.events,c]},dirty:!0})},updateEventSource:(c,d)=>{b()._pushHistory();let e={...b().definition};e.events=e.events.map((a,b)=>b===c?{...a,...d}:a),a({definition:e,dirty:!0})},removeEventSource:c=>{b()._pushHistory();let d={...b().definition};d.events=d.events.filter((a,b)=>b!==c),a({definition:d,dirty:!0,errors:b$(d)})},addEvent:(c,d=0)=>{b()._pushHistory();let e={...b().definition},f=e.events[d]??{name:"Internal",events:[]};f.events=[...f.events??[],c],e.events=e.events.map((a,b)=>b===d?f:a),a({definition:e,dirty:!0,errors:b$(e)})},updateEvent:(c,d)=>{b()._pushHistory();let e={...b().definition};e.events=e.events.map(a=>({...a,events:a.events?.map(a=>a.id===c?{...a,...d}:a)})),a({definition:e,dirty:!0})},removeEvent:c=>{b()._pushHistory();let d={...b().definition};d.events=d.events.map(a=>({...a,events:a.events?.filter(a=>a.id!==c)})),a({definition:d,dirty:!0,errors:b$(d)})},addParameter:(c,d)=>{b()._pushHistory();let e={...b().definition};e.events=e.events.map(a=>({...a,events:a.events?.map(a=>a.id===c?{...a,parameters:[...a.parameters??[],d]}:a)})),a({definition:e,dirty:!0})},removeParameter:(c,d)=>{b()._pushHistory();let e={...b().definition};e.events=e.events.map(a=>({...a,events:a.events?.map(a=>a.id===c?{...a,parameters:a.parameters?.filter((a,b)=>b!==d)}:a)})),a({definition:e,dirty:!0})},updateParameter:(c,d,e)=>{b()._pushHistory();let f={...b().definition};f.events=f.events.map(a=>({...a,events:a.events?.map(a=>a.id===c?{...a,parameters:a.parameters?.map((a,b)=>b===d?{...a,...e}:a)}:a)})),a({definition:f,dirty:!0})},addAction:(c,d,e)=>{b()._pushHistory();let f={...b().definition};f.state=bW(f.state,c,a=>{let b=a[d]??{actions:[]};return{...a,[d]:{actions:[...b.actions,e]}}}),a({definition:f,dirty:!0})},removeAction:(c,d,e)=>{b()._pushHistory();let f={...b().definition};f.state=bW(f.state,c,a=>{let b=a[d];return b?{...a,[d]:{actions:b.actions.filter((a,b)=>b!==e)}}:a}),a({definition:f,dirty:!0})},updateAction:(c,d,e,f)=>{b()._pushHistory();let g={...b().definition};g.state=bW(g.state,c,a=>{let b=a[d];return b?{...a,[d]:{actions:b.actions.map((a,b)=>b===e?f:a)}}:a}),a({definition:g,dirty:!0})},addTransition:(c,d)=>{b()._pushHistory();let e={...b().definition};e.state=bW(e.state,c,a=>({...a,transitions:[...a.transitions??[],d]})),a({definition:e,dirty:!0,errors:b$(e)})},updateTransition:(c,d,e)=>{b()._pushHistory();let f={...b().definition};f.state=bW(f.state,c,a=>({...a,transitions:a.transitions?.map((a,b)=>b===d?{...a,...e}:a)})),a({definition:f,dirty:!0})},removeTransition:(c,d)=>{b()._pushHistory();let e={...b().definition};e.state=bW(e.state,c,a=>({...a,transitions:a.transitions?.filter((a,b)=>b!==d)})),a({definition:e,dirty:!0,errors:b$(e)})},setStatePosition:(c,d)=>{a({layout:{positions:{...b().layout.positions,[c]:d}}})},arrangeLayout:()=>{b()._pushHistory(),a({layout:{positions:x(b().definition)}})},hydrateLayout:(c,d)=>{a({layout:{positions:{...b().layout.positions,...c}},...d?{viewport:d}:{}})},setViewport:b=>a({viewport:b}),select:(b,c)=>a({selection:{kind:b,id:c}}),clearSelection:()=>a({selection:{kind:null,id:null}}),setDrawMode:b=>a({drawMode:b,drawSource:null}),setDrawSource:b=>a({drawSource:b}),showContextMenu:(b,c,d)=>a({contextMenu:{visible:!0,x:b,y:c,target:d}}),hideContextMenu:()=>a({contextMenu:{visible:!1,x:0,y:0,target:null}}),undo:()=>{let{undoStack:c,definition:d,layout:e}=b();if(0===c.length)return;let f=c[c.length-1],g={definition:JSON.parse(JSON.stringify(d)),layout:JSON.parse(JSON.stringify(e))};a({definition:f.definition,layout:f.layout,undoStack:c.slice(0,-1),redoStack:[...b().redoStack,g],dirty:!0,errors:b$(f.definition)})},redo:()=>{let{redoStack:c,definition:d,layout:e}=b();if(0===c.length)return;let f=c[c.length-1],g={definition:JSON.parse(JSON.stringify(d)),layout:JSON.parse(JSON.stringify(e))};a({definition:f.definition,layout:f.layout,undoStack:[...b().undoStack,g],redoStack:c.slice(0,-1),dirty:!0,errors:b$(f.definition)})},canUndo:()=>b().undoStack.length>0,canRedo:()=>b().redoStack.length>0,setActiveTab:b=>a({activeTab:b}),loadFromJson:(b,c)=>{try{let d=JSON.parse(b),e=d.stateMachine??d.StateMachine??d,f=b_(e,bU()),g=e.state?.name??"Root";a({definition:e,layout:f,fileName:c??null,dirty:!1,errors:b$(e),selection:{kind:null,id:null},undoStack:[],redoStack:[],navigationPath:[g],currentParent:g})}catch(a){console.error("Failed to parse definition:",a)}},exportJson:()=>{let{definition:a}=b();return JSON.stringify({stateMachine:a},null,2)},applyRemote:(c,d,e)=>{try{let f=JSON.parse(c),g=f.stateMachine??f.StateMachine??f,h=b_(g,b().layout),i=g.state?.name??"Root",j=b(),k=new Set(bY(g.state)),l=j.navigationPath.filter(a=>k.has(a)),m=l.length?l:[i],n=m[m.length-1],o=j.selection,p=("state"===o.kind?!!o.id&&k.has(o.id):"transition"===o.kind?!!o.id&&k.has(o.id.split(":")[0]):"event"===o.kind&&!!o.id&&bZ(g).includes(o.id))?o:{kind:null,id:null};a({definition:g,layout:h,fileName:e??b().fileName,dirty:!1,remoteMtime:d,remoteStatus:"synced",remoteMessage:null,errors:b$(g),selection:p,navigationPath:m,currentParent:n})}catch(b){a({remoteStatus:"error",remoteMessage:String(b)})}},setRemoteStatus:(b,c=null)=>a({remoteStatus:b,remoteMessage:c}),setRemoteMtime:b=>a({remoteMtime:b}),setDocPath:b=>a({docPath:b||null}),enterState:c=>{let d=b().activeStates;d.includes(c)||a({activeStates:[...d,c]})},exitState:c=>{let d=b().activeStates;d.includes(c)&&a({activeStates:d.filter(a=>a!==c)})},setPresence:b=>a({presence:b}),applyRemoteOps:(c,d,e)=>{a({_applyingRemote:!0});try{let e=b(),f=c.filter(a=>"runtime.enter"!==a.op&&"runtime.exit"!==a.op),g=f.length?n(e.definition,f):e.definition,h=e.activeStates;for(let a of c)"runtime.enter"===a.op?h.includes(a.state)||(h=[...h,a.state]):"runtime.exit"===a.op&&h.includes(a.state)&&(h=h.filter(b=>b!==a.state));let i=b_(g,e.layout),j=g.state?.name??"Root",k=new Set(bY(g.state)),l=e.navigationPath.filter(a=>k.has(a)),m=l.length?l:[j],o=m[m.length-1],p=e.selection,q=("state"===p.kind?!!p.id&&k.has(p.id):"transition"===p.kind?!!p.id&&k.has(p.id.split(":")[0]):"event"===p.kind&&!!p.id&&bZ(g).includes(p.id))?p:{kind:null,id:null};a({definition:g,layout:i,activeStates:h,dirty:!1,remoteMtime:d,remoteStatus:"synced",remoteMessage:null,errors:b$(g),selection:q,navigationPath:m,currentParent:o})}catch(b){a({remoteStatus:"error",remoteMessage:String(b)})}finally{a({_applyingRemote:!1})}},validate:()=>{let c=b$(b().definition);return a({errors:c}),c},setGeneratedCode:b=>a({generatedCode:b}),setShowCodePreview:b=>a({showCodePreview:b}),navigateInto:c=>{let{definition:d,navigationPath:e}=b(),f=bV(d.state,c);f&&(f.states?.length??0)>0&&a({navigationPath:[...e,c],currentParent:c,selection:{kind:null,id:null}})},navigateUp:c=>{let{navigationPath:d}=b();if(d.length<=1)return;let e=c??d.length-2,f=d.slice(0,e+1);a({navigationPath:f,currentParent:f[f.length-1],selection:{kind:null,id:null}})},getCurrentChildren:()=>{let{definition:a,currentParent:c}=b(),d=bV(a.state,c);return d?.states??[]}}))?aG(e):aG,b1="canvas",b2=`[data-pinch-owner="${b1}"]`;function b3(a){return!!a&&"function"==typeof a.closest&&null!==a.closest(b2)}let b4="stateloom-canvas",b5="#030712",b6=["png","jpeg","svg","mermaid","markdown"],b7={png:"PNG",jpeg:"JPEG",svg:"SVG",mermaid:"Mermaid",markdown:"Markdown"},b8={png:"image/png",jpeg:"image/jpeg",svg:"image/svg+xml",mermaid:"text/vnd.mermaid",markdown:"text/markdown"},b9={png:"png",jpeg:"jpg",svg:"svg",mermaid:"mmd",markdown:"md"};async function ca(a,b,c={}){var d,e,f;let g;if("mermaid"===a||"markdown"===a){let c,f;g=new Blob([(d=b.definition,e="markdown"===a,c=["stateDiagram-v2"],d.state&&function a(b,c,d){let e=T(b);if(0===e.length)return;let f=" ".repeat(c+1),g=new Set;for(let a of e)for(let b of a.transitions??[]){if(!b.nextState)continue;let c=b.condition?`${b.event} [${b.condition}]`:b.event;d.push(`${f}${a.name} --> ${b.nextState} : ${c}`),g.add(a.name),g.add(b.nextState)}for(let a of e)g.has(a.name)||d.push(`${f}${a.name}`);for(let b of e)0!==T(b).length&&(d.push(`${f}state ${b.name} {`),a(b,c+1,d),d.push(`${f}}`))}(d.state,0,c),f=c.join("\n"),e?`\`\`\`mermaid
|
|
3
3
|
${f}
|
|
4
4
|
\`\`\`
|
|
5
5
|
`:`${f}
|
|
6
|
-
`)],{type:`${b6[a]};charset=utf-8`})}else{let b=function(a={}){let b="u"<typeof document?null:document.getElementById(b2);if(!b)return null;let c=function(a){let b=a.querySelector(":scope > g");if(!b)return null;try{let a=b.getBBox();return a.width>0&&a.height>0?a:null}catch{return null}}(b);if(!c)return null;let d=a.padding??48,e=a.background??b3,f=Math.round(c.x-d),g=Math.round(c.y-d),h=Math.round(c.width+2*d),i=Math.round(c.height+2*d),j=b.cloneNode(!0);j.removeAttribute("id"),j.removeAttribute("class"),j.removeAttribute("style"),j.setAttribute("xmlns","http://www.w3.org/2000/svg"),j.setAttribute("width",String(h)),j.setAttribute("height",String(i)),j.setAttribute("viewBox",`${f} ${g} ${h} ${i}`),j.setAttribute("font-family","ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif"),function a(b){for(let c of Array.from(b.children)){if("transparent"===c.getAttribute("fill")||"transparent"===c.getAttribute("stroke")){c.remove();continue}c.removeAttribute("class"),c.removeAttribute("style"),a(c)}}(j);let k=j.querySelector(":scope > g");k?.removeAttribute("transform");let l=document.createElementNS("http://www.w3.org/2000/svg","rect");return l.setAttribute("x",String(f)),l.setAttribute("y",String(g)),l.setAttribute("width",String(h)),l.setAttribute("height",String(i)),l.setAttribute("fill",e),j.insertBefore(l,j.firstChild),new XMLSerializer().serializeToString(j)}(c);if(!b)throw Error("nothing on the board to export yet");g="svg"===a?new Blob([b],{type:`${b6.svg};charset=utf-8`}):await (f=c.scale??2,new Promise((c,d)=>{let e=b.match(/width="(\d+)"\s+height="(\d+)"/),g=e?Number(e[1]):1200,h=e?Number(e[2]):800,i=URL.createObjectURL(new Blob([b],{type:"image/svg+xml;charset=utf-8"})),j=new Image;j.onload=()=>{URL.revokeObjectURL(i);let b=document.createElement("canvas");b.width=Math.max(1,Math.round(g*f)),b.height=Math.max(1,Math.round(h*f));let e=b.getContext("2d");e?(e.fillStyle=b3,e.fillRect(0,0,b.width,b.height),e.drawImage(j,0,0,b.width,b.height),b.toBlob(a=>a?c(a):d(Error("the canvas produced no image")),b6[a],"jpeg"===a?.92:void 0)):d(Error("this browser gave no 2d context to draw into"))},j.onerror=()=>{URL.revokeObjectURL(i),d(Error("the browser could not read the serialized board"))},j.src=i}))}let h=function({doc:a,machine:b,format:c,at:d}){let e,f,g=am(b??"")||am(a?(a.split(/[/\\]/).pop()??a).replace(/\.smdf\.json$/i,"").replace(/\.json$/i,""):"")||"statemachine",h=a&&(e=a.match(/(?:^|[/\\-])ep(?:isode)?-?(\d{2,4})(?:[/\\-]|$)/i))?`ep${e[1]}`:null,i=h?`${h}--`:"";return`${i}${g}--${(f=a=>String(a).padStart(2,"0"))(d.getFullYear()%100)+f(d.getMonth()+1)+f(d.getDate())+f(d.getHours())+f(d.getMinutes())+f(d.getSeconds())}.${c}`}({doc:b.docPath??b.fileName??null,machine:b.definition?.settings?.name??null,format:b7[a]??String(a),at:(void 0)??new Date}),i=URL.createObjectURL(g),j=document.createElement("a");return j.href=i,j.download=h,j.click(),URL.revokeObjectURL(i),h}let b9="stateloom.layout.v1:";async function ca(){try{let{requestedDoc:b,docQuery:c}=await a.A(65614),d=await fetch(`/api/file${c(b())}`,{cache:"no-store"});if(d.ok){let a=(await d.json())?.path;if("string"==typeof a&&a.length>0)return a}}catch{}return b$.getState().fileName??"untitled"}function cb(){let a,b,c=b$(a=>a.definition),d=b$(a=>a.layout),e=b$(a=>a.selection),f=b$(a=>a.select),g=b$(a=>a.clearSelection),j=b$(a=>a.setStatePosition),k=b$(a=>a.drawMode),l=b$(a=>a.drawSource),m=b$(a=>a.setDrawSource),n=b$(a=>a.setDrawMode),o=b$(a=>a.addTransition),p=b$(a=>a.showContextMenu),q=b$(a=>a.removeState),r=b$(a=>a.undo),s=b$(a=>a.redo),t=b$(a=>a.errors),u=b$(a=>a.navigationPath),v=b$(a=>a.navigateInto),w=b$(a=>a.navigateUp),y=b$(a=>a.activeStates),z=b$(a=>a.viewport),A=b$(a=>a.setViewport);a=(0,i.useRef)(!1),b=(0,i.useRef)(null),(0,i.useEffect)(()=>{let c=!1,d=null;(async()=>{let d=await ca();if(c)return;b.current=d;let e=null;e&&b$.getState().hydrateLayout(e.positions,e.viewport),a.current=!0})();let e=b$.subscribe((c,e)=>{a.current&&b.current&&(c.layout!==e.layout||c.viewport!==e.viewport)&&(d&&clearTimeout(d),d=setTimeout(()=>{let a=b$.getState();b.current,function(a,b){let c={};for(let[d,e]of Object.entries(a)){let a=b[d];a&&(e.x!==a.x||e.y!==a.y||e.width!==a.width||e.height!==a.height)&&(c[d]=e)};}(a.layout.positions,x(a.definition)),a.viewport},300))});return()=>{c=!0,d&&clearTimeout(d),e()}},[]);let B=u.slice(1);return(0,h.jsx)(ax,{definition:c,positions:d.positions,path:B,rootLabel:u[0],viewport:z,onViewportChange:A,selection:{kind:"state"===e.kind||"transition"===e.kind?e.kind:null,id:e.id},activeStates:y,errorElements:t.flatMap(a=>a.element?[a.element]:[]),drawMode:"transition"===k?"transition":"select",drawSource:l,svgId:b2,pinchOwner:b_,emptyHint:"Right-click to add a state, or load a .smdf.json file",onSelect:(a,b)=>{"state"!==a||"transition"!==k||l?f(a,b):m(b)},onClearSelection:g,onStateMove:j,onNavigateInto:v,onNavigateTo:a=>w(a),onContextMenu:(a,b,c)=>p(a,b,"state"===c.kind?{kind:"state",id:c.id}:{kind:"canvas"}),onCreateTransition:(a,b,c)=>{o(a,{event:c,nextState:b}),m(null),n("select")},onCancelDraw:()=>{n("select"),m(null)},onDeleteState:a=>{q(a),g()},onUndo:r,onRedo:s})}function cc({label:a,actions:b,onChange:c}){let d=(a,d)=>c(b.map((b,c)=>c===a?{...b,...d}:b));return(0,h.jsxs)("div",{children:[(0,h.jsxs)("div",{className:"flex items-center justify-between",children:[(0,h.jsx)("span",{className:"text-xs font-medium text-gray-500",children:a}),(0,h.jsx)("button",{onClick:()=>c([...b,{action:"code",code:""}]),className:"text-xs text-blue-500 hover:text-blue-400",children:"+ action"})]}),b.map((a,e)=>(0,h.jsxs)("div",{className:"flex items-start gap-1 mt-1",children:[(0,h.jsxs)("select",{className:"bg-gray-800 border border-gray-700 rounded px-1 py-0.5 text-xs text-gray-200",value:a.action,onChange:a=>d(e,{action:a.target.value}),children:[(0,h.jsx)("option",{value:"code",children:"Code"}),(0,h.jsx)("option",{value:"timerStart",children:"Timer Start"}),(0,h.jsx)("option",{value:"timerStop",children:"Timer Stop"})]}),"code"===a.action?(0,h.jsx)("textarea",{className:"flex-1 bg-gray-800 border border-gray-700 rounded px-1 py-0.5 text-xs text-gray-200 h-10 font-mono",value:a.code??"",placeholder:"// action code...",onChange:a=>d(e,{code:a.target.value})}):(0,h.jsx)("input",{className:"flex-1 bg-gray-800 border border-gray-700 rounded px-1 py-0.5 text-xs text-gray-200",value:a.name??"",placeholder:"Timer name",onChange:a=>d(e,{name:a.target.value})}),(0,h.jsx)("button",{onClick:()=>c(b.filter((a,b)=>b!==e)),className:"text-red-600 hover:text-red-400 text-xs mt-0.5",children:"✕"})]},e)),0===b.length&&(0,h.jsx)("span",{className:"text-xs text-gray-700 italic",children:"none"})]})}function cd(){let a=b$(a=>a.definition),b=b$(a=>a.selection),c=b$(a=>a.updateState),d=b$(a=>a.removeState);b$(a=>a.addAction),b$(a=>a.removeAction);let e=b$(a=>a.updateTransition),f=b$(a=>a.removeTransition);if(!b.kind||!b.id)return(0,h.jsx)("div",{className:"p-3 text-xs text-gray-500",children:"Select a state or transition to edit its properties."});let g=(a,b)=>{if(a.name===b)return a;for(let c of a.states??[]){let a=g(c,b);if(a)return a}return null};if("state"===b.kind){let e=g(a.state,b.id);if(!e)return(0,h.jsx)("div",{className:"p-3 text-gray-500 text-xs",children:"State not found"});let i=e.onEntry?.actions??[],j=e.onExit?.actions??[];return(0,h.jsxs)("div",{className:"p-3 space-y-3 text-sm md:overflow-y-auto md:max-h-[calc(100vh-160px)]",children:[(0,h.jsxs)("h3",{className:"text-xs font-semibold text-gray-400",children:["State: ",e.name]}),(0,h.jsxs)("label",{className:"block",children:[(0,h.jsx)("span",{className:"text-xs text-gray-500",children:"Name"}),(0,h.jsx)("input",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-sm text-gray-200",value:e.name,onChange:a=>c(b.id,{name:a.target.value})})]}),(0,h.jsxs)("label",{className:"block",children:[(0,h.jsx)("span",{className:"text-xs text-gray-500",children:"Kind"}),(0,h.jsxs)("select",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-sm text-gray-200",value:e.kind??"normal",onChange:a=>c(b.id,{kind:a.target.value}),children:[(0,h.jsx)("option",{value:"normal",children:"Normal"}),(0,h.jsx)("option",{value:"final",children:"Final"}),(0,h.jsx)("option",{value:"history",children:"History"})]})]}),(0,h.jsxs)("label",{className:"block",children:[(0,h.jsx)("span",{className:"text-xs text-gray-500",children:"Description"}),(0,h.jsx)("textarea",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-xs text-gray-200 h-12",value:e.description??"",onChange:a=>c(b.id,{description:a.target.value||void 0})})]}),(0,h.jsx)(cc,{label:"▸ onEntry Actions",actions:i,onChange:a=>c(b.id,{onEntry:{actions:a}})}),(0,h.jsx)(cc,{label:"◂ onExit Actions",actions:j,onChange:a=>c(b.id,{onExit:{actions:a}})}),(0,h.jsxs)("div",{children:[(0,h.jsx)("span",{className:"text-xs font-medium text-gray-500",children:"Transitions"}),(e.transitions??[]).map((a,c)=>(0,h.jsxs)("div",{className:"flex items-center gap-1 text-xs text-gray-400 py-1 border-b border-gray-800/50",children:[(0,h.jsxs)("span",{className:"flex-1",children:[a.event," → ",a.nextState??"(internal)"]}),a.condition&&(0,h.jsxs)("span",{className:"text-gray-600",children:["[",a.condition,"]"]}),(0,h.jsx)("button",{onClick:()=>f(b.id,c),className:"text-red-600 hover:text-red-400",children:"✕"})]},c)),(e.transitions?.length??0)===0&&(0,h.jsx)("span",{className:"text-xs text-gray-700 italic",children:"none"})]}),(0,h.jsx)("button",{onClick:()=>d(b.id),className:"text-red-500 hover:text-red-400 text-xs mt-2",children:"🗑 Delete State"})]})}if("transition"===b.kind){let[c,d]=b.id.split(":"),i=parseInt(d,10),j=g(a.state,c),k=j?.transitions?.[i];if(!k)return(0,h.jsx)("div",{className:"p-3 text-gray-500 text-xs",children:"Transition not found"});let l=bX(a),m=(function a(b){let c=[b];for(let d of b.states??[])c.push(...a(d));return c})(a.state).map(a=>a.name).filter(a=>"Root"!==a);return(0,h.jsxs)("div",{className:"p-3 space-y-3 text-sm",children:[(0,h.jsx)("h3",{className:"text-xs font-semibold text-gray-400",children:"Transition"}),(0,h.jsxs)("label",{className:"block",children:[(0,h.jsx)("span",{className:"text-xs text-gray-500",children:"Event"}),(0,h.jsx)("select",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-sm text-gray-200",value:k.event,onChange:a=>e(c,i,{event:a.target.value}),children:l.map(a=>(0,h.jsx)("option",{value:a,children:a},a))})]}),(0,h.jsxs)("label",{className:"block",children:[(0,h.jsx)("span",{className:"text-xs text-gray-500",children:"Target State"}),(0,h.jsxs)("select",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-sm text-gray-200",value:k.nextState??"",onChange:a=>e(c,i,{nextState:a.target.value||void 0}),children:[(0,h.jsx)("option",{value:"",children:"(internal transition)"}),m.map(a=>(0,h.jsx)("option",{value:a,children:a},a))]})]}),(0,h.jsxs)("label",{className:"block",children:[(0,h.jsx)("span",{className:"text-xs text-gray-500",children:"Condition (guard)"}),(0,h.jsx)("textarea",{rows:3,className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-sm text-gray-200 resize-y leading-snug",value:k.condition??"",onChange:a=>e(c,i,{condition:a.target.value||void 0})})]}),(0,h.jsx)("button",{onClick:()=>f(c,i),className:"text-red-500 hover:text-red-400 text-xs",children:"🗑 Delete Transition"})]})}return null}let ce=["string","int","float","bool","object"];function cf(){let a=b$(a=>a.definition),b=b$(a=>a.addEvent),c=b$(a=>a.updateEvent),d=b$(a=>a.removeEvent),e=b$(a=>a.addParameter),f=b$(a=>a.removeParameter),g=b$(a=>a.updateParameter),j=b$(a=>a.updateEventSource),k=b$(a=>a.select),l=b$(a=>a.selection),[m,n]=(0,i.useState)(""),[o,p]=(0,i.useState)(null),[q,r]=(0,i.useState)(null);return(0,h.jsxs)("div",{className:"p-3 text-sm",children:[a.events.map((a,b)=>(0,h.jsxs)("div",{className:"mb-3",children:[(0,h.jsxs)("div",{className:"flex items-center gap-2 mb-1",children:[(0,h.jsx)("span",{className:"text-xs font-semibold text-gray-500",children:"Source:"}),(0,h.jsx)("input",{className:"flex-1 bg-transparent border-b border-gray-700 text-xs text-gray-300 px-1 py-0.5 focus:border-blue-500 outline-none",value:a.name,onChange:a=>j(b,{name:a.target.value})}),void 0!==a.feeder&&(0,h.jsx)("input",{className:"w-24 bg-transparent border-b border-gray-700 text-xs text-gray-400 px-1 py-0.5 focus:border-blue-500 outline-none",value:a.feeder??"",placeholder:"Feeder...",onChange:a=>j(b,{feeder:a.target.value||void 0})}),void 0===a.feeder&&(0,h.jsx)("button",{className:"text-xs text-gray-600 hover:text-gray-400",title:"Add feeder class",onClick:()=>j(b,{feeder:`${a.name}Feeder`}),children:"+feeder"})]}),(0,h.jsx)("div",{className:"-mx-1 overflow-x-auto px-1",children:(0,h.jsxs)("table",{className:"w-full text-xs",children:[(0,h.jsx)("thead",{children:(0,h.jsxs)("tr",{className:"text-gray-600 border-b border-gray-800",children:[(0,h.jsx)("th",{className:"text-left py-1 font-medium",children:"ID"}),(0,h.jsx)("th",{className:"text-left py-1 font-medium",children:"Description"}),(0,h.jsx)("th",{className:"text-left py-1 font-medium",children:"Params"}),(0,h.jsx)("th",{className:"w-6"})]})}),(0,h.jsx)("tbody",{children:(a.events??[]).map(a=>(0,h.jsxs)(i.Fragment,{children:[(0,h.jsxs)("tr",{className:`border-b border-gray-800/50 hover:bg-gray-800/30 cursor-pointer ${"event"===l.kind&&l.id===a.id?"bg-blue-900/30":""}`,onClick:()=>{k("event",a.id),p(o===a.id?null:a.id)},children:[(0,h.jsx)("td",{className:"py-1 pr-1",children:q===a.id?(0,h.jsx)("input",{autoFocus:!0,className:"w-full bg-gray-800 border border-gray-700 rounded px-1 text-gray-200",value:a.id,onChange:b=>c(a.id,{id:b.target.value}),onBlur:()=>r(null),onKeyDown:a=>"Enter"===a.key&&r(null),onClick:a=>a.stopPropagation()}):(0,h.jsx)("span",{className:"text-gray-300",onDoubleClick:b=>{b.stopPropagation(),r(a.id)},children:a.id})}),(0,h.jsx)("td",{className:"py-1 pr-1 text-gray-500 truncate max-w-[80px]",children:a.description??"—"}),(0,h.jsx)("td",{className:"py-1 text-gray-500",children:(a.parameters?.length??0)>0?a.parameters.map(a=>`${a.name}:${a.type}`).join(", "):"—"}),(0,h.jsx)("td",{className:"py-1",children:(0,h.jsx)("button",{onClick:b=>{b.stopPropagation(),d(a.id)},className:"text-red-600 hover:text-red-400",children:"✕"})})]}),o===a.id&&(0,h.jsx)("tr",{children:(0,h.jsx)("td",{colSpan:4,className:"py-2 px-1 bg-gray-900/50",children:(0,h.jsxs)("div",{className:"space-y-2",children:[(0,h.jsxs)("label",{className:"block",children:[(0,h.jsx)("span",{className:"text-gray-600",children:"Description"}),(0,h.jsx)("input",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-0.5 text-gray-200 mt-0.5",value:a.description??"",onChange:b=>c(a.id,{description:b.target.value||void 0})})]}),(0,h.jsxs)("div",{children:[(0,h.jsx)("span",{className:"text-gray-600",children:"Parameters"}),(a.parameters??[]).map((b,c)=>(0,h.jsxs)("div",{className:"flex items-center gap-1 mt-1",children:[(0,h.jsx)("input",{className:"flex-1 bg-gray-800 border border-gray-700 rounded px-1 py-0.5 text-gray-200",value:b.name,placeholder:"name",onChange:b=>g(a.id,c,{name:b.target.value})}),(0,h.jsx)("select",{className:"bg-gray-800 border border-gray-700 rounded px-1 py-0.5 text-gray-200",value:b.type,onChange:b=>g(a.id,c,{type:b.target.value}),children:ce.map(a=>(0,h.jsx)("option",{value:a,children:a},a))}),(0,h.jsx)("button",{onClick:()=>f(a.id,c),className:"text-red-600 hover:text-red-400",children:"✕"})]},c)),(0,h.jsx)("button",{className:"text-blue-500 hover:text-blue-400 mt-1",onClick:()=>e(a.id,{name:"param",type:"string"}),children:"+ parameter"})]}),(0,h.jsxs)("div",{className:"mt-1",children:[(0,h.jsx)("span",{className:"text-gray-600",children:"Generated method:"}),(0,h.jsxs)("code",{className:"block bg-gray-800 rounded px-2 py-1 text-green-400 mt-0.5 font-mono",children:["on_",a.id.toLowerCase(),"(context",(a.parameters??[]).map(a=>`, ${a.name}: ${a.type}`).join(""),")"]})]})]})})})]},a.id))})]})})]},b)),(0,h.jsxs)("div",{className:"flex gap-1 mt-2",children:[(0,h.jsx)("input",{className:"flex-1 bg-gray-800 border border-gray-700 rounded px-2 py-1 text-gray-200",placeholder:"New event ID...",value:m,onChange:a=>n(a.target.value),onKeyDown:a=>{"Enter"===a.key&&m.trim()&&(b({id:m.trim()}),n(""))}}),(0,h.jsx)("button",{onClick:()=>{m.trim()&&(b({id:m.trim()}),n(""))},className:"bg-blue-600 hover:bg-blue-500 text-white px-2 py-1 rounded",children:"+"})]})]})}function cg(){let a=b$(a=>a.definition.settings),b=b$(a=>a.definition.settings.context),c=b$(a=>a.updateSettings);return(0,h.jsxs)("div",{className:"p-3 space-y-3 text-sm",children:[(0,h.jsx)("h3",{className:"text-xs font-semibold text-gray-400",children:"Machine Settings"}),(0,h.jsxs)("label",{className:"block",children:[(0,h.jsx)("span",{className:"text-xs text-gray-500",children:"Namespace"}),(0,h.jsx)("input",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-sm text-gray-200",value:a.namespace,onChange:a=>c({namespace:a.target.value})})]}),(0,h.jsxs)("label",{className:"block",children:[(0,h.jsx)("span",{className:"text-xs text-gray-500",children:"Name"}),(0,h.jsx)("input",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-sm text-gray-200",value:a.name??"",onChange:a=>c({name:a.target.value||void 0})})]}),(0,h.jsxs)("label",{className:"block",children:[(0,h.jsx)("span",{className:"text-xs text-gray-500",children:"Description"}),(0,h.jsx)("textarea",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-xs text-gray-200 h-12",value:a.description??"",onChange:a=>c({description:a.target.value||void 0})})]}),(0,h.jsxs)("label",{className:"flex items-center gap-2 text-sm text-gray-300",children:[(0,h.jsx)("input",{type:"checkbox",checked:a.asynchronous,onChange:a=>c({asynchronous:a.target.checked}),className:"rounded bg-gray-800 border-gray-600"}),"Asynchronous"]}),(0,h.jsx)("hr",{className:"border-gray-800"}),(0,h.jsx)("h4",{className:"text-xs font-semibold text-gray-500",children:"Context"}),(0,h.jsxs)("label",{className:"block",children:[(0,h.jsx)("span",{className:"text-xs text-gray-500",children:"Context Class"}),(0,h.jsx)("input",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-xs text-gray-200",value:b?.class??"",placeholder:"e.g. MyStateMachineContext",onChange:a=>c({context:{...b,class:a.target.value||void 0}})})]}),(0,h.jsxs)("label",{className:"block",children:[(0,h.jsx)("span",{className:"text-xs text-gray-500",children:"Base Class"}),(0,h.jsx)("input",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-xs text-gray-200",value:b?.baseClass??"",placeholder:"e.g. Context",onChange:a=>c({context:{...b,baseClass:a.target.value||void 0}})})]}),(0,h.jsx)("hr",{className:"border-gray-800"}),(0,h.jsx)("h4",{className:"text-xs font-semibold text-gray-500",children:"Imports"}),(0,h.jsx)("textarea",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-xs text-gray-200 h-16 font-mono",value:(a.imports??[]).join("\n"),placeholder:"One import per line",onChange:a=>c({imports:a.target.value?a.target.value.split("\n"):[]})}),(0,h.jsx)("hr",{className:"border-gray-800"}),(0,h.jsx)("h4",{className:"text-xs font-semibold text-gray-500",children:"Object References"}),(0,h.jsx)("textarea",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-xs text-gray-200 h-12 font-mono",value:(a.objects??[]).map(a=>`${a.instance}: ${a.class}`).join("\n"),placeholder:"instance: Class (one per line)",onChange:a=>{c({objects:a.target.value.split("\n").filter(a=>a.includes(":")).map(a=>{let[b,c]=a.split(":").map(a=>a.trim());return{instance:b,class:c}})})}}),(0,h.jsx)("hr",{className:"border-gray-800"}),(0,h.jsx)("h4",{className:"text-xs font-semibold text-gray-500",children:"Code Generation"}),(0,h.jsxs)("label",{className:"block",children:[(0,h.jsx)("span",{className:"text-xs text-gray-500",children:"Target Language"}),(0,h.jsxs)("select",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-xs text-gray-200",value:a.targetLanguage??"python",onChange:a=>c({targetLanguage:a.target.value}),children:[(0,h.jsx)("option",{value:"python",children:"Python"}),(0,h.jsx)("option",{value:"typescript",children:"TypeScript"}),(0,h.jsx)("option",{value:"csharp",children:"C#"})]})]})]})}function ch(){let a=b$(a=>a.errors),b=b$(a=>a.validate),c=b$(a=>a.select);return(0,h.jsxs)("div",{className:"p-3",children:[(0,h.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,h.jsxs)("h3",{className:"text-xs font-semibold text-gray-400",children:["Validation ",a.length>0&&(0,h.jsxs)("span",{className:"text-red-500",children:["(",a.length,")"]})]}),(0,h.jsx)("button",{onClick:()=>b(),className:"text-xs bg-gray-700 hover:bg-gray-600 text-gray-300 px-2 py-0.5 rounded",children:"Re-check"})]}),0===a.length?(0,h.jsxs)("div",{className:"flex items-center gap-2 text-green-500 text-xs",children:[(0,h.jsx)("span",{children:"✓"}),(0,h.jsx)("span",{children:"Definition is valid"})]}):(0,h.jsx)("div",{className:"space-y-0.5",children:a.map((a,b)=>(0,h.jsxs)("div",{className:`flex items-start gap-1.5 text-[13px] py-2.5 border-b border-gray-800/50 md:text-xs md:py-1 ${a.element?"cursor-pointer hover:bg-gray-800/30":""}`,onClick:()=>{a.element&&c("state",a.element)},title:a.element?`Click to select "${a.element}"`:void 0,children:[(0,h.jsx)("span",{className:`font-mono text-[10px] mt-0.5 ${"error"===a.severity?"text-red-600":"text-yellow-600"}`,children:a.ruleId}),(0,h.jsx)("span",{className:`flex-1 ${"error"===a.severity?"text-red-400":"text-yellow-400"}`,children:a.message}),a.element&&(0,h.jsxs)("span",{className:"text-gray-600 text-[10px]",children:["→ ",a.element]})]},b))})]})}var ci=a.i(41455);function cj(){let a=(0,ci.useRequestedDoc)(),[b,c]=(0,i.useState)(!1),[d,e]=(0,i.useState)(""),[f,g]=(0,i.useState)(null),[j,k]=(0,i.useState)([]),[l,m]=(0,i.useState)(null),[n,o]=(0,i.useState)(null);(0,i.useEffect)(()=>{if(!b)return;let a=!0;return o(null),fetch("/api/docs",{cache:"no-store"}).then(a=>a.ok?a.json():Promise.reject(Error(`HTTP ${a.status}`))).then(b=>{a&&(g(b.docs??[]),k(b.roots??[]),m(b.current??null))}).catch(b=>{a&&(g([]),o(b.message))}),()=>{a=!1}},[b]);let p=a=>{c(!1),e(""),(0,ci.navigateToDoc)(a)},q=new Set((f??[]).map(a=>a.path)),r=b?(function(){try{let a=[];for(let b=0;b<window.localStorage.length;b++){let c=window.localStorage.key(b);c?.startsWith(b9)&&a.push(c.slice(b9.length))}return a.sort()}catch{return[]}})().filter(b=>b.startsWith("/")&&b!==a&&!q.has(b)):[],s=a??l,t=(f??[]).filter(a=>a.path!==s),u=d.trim().toLowerCase(),v=u?t.filter(a=>a.path.toLowerCase().includes(u)):t,w="block w-full truncate rounded px-1.5 py-1 text-left text-xs text-gray-300 hover:bg-gray-800";return(0,h.jsxs)("span",{className:"relative inline-flex",children:[(0,h.jsx)("button",{onClick:()=>c(a=>!a),className:"toolbar-btn",title:a?`Document: ${a}`:"Switch document",children:"⇄"}),b&&(0,h.jsxs)("div",{className:"absolute left-0 top-full z-50 mt-1 w-80 rounded border border-gray-700 bg-gray-900 p-2 shadow-lg",children:[(0,h.jsx)("div",{className:"mb-1 text-[10px] uppercase tracking-wide text-gray-500",children:"switch document"}),(0,h.jsxs)("form",{onSubmit:a=>{a.preventDefault();let b=d.trim();if(b){if(1===v.length)return p(v[0].path);if(b.startsWith("/"))return p(b)}},className:"mb-1 flex gap-1",children:[(0,h.jsx)("input",{value:d,onChange:a=>e(a.target.value),placeholder:null===f?"loading…":"filter, or /absolute/path.json",className:"min-w-0 flex-1 rounded border border-gray-700 bg-gray-950 px-1.5 py-1 text-xs text-gray-200 placeholder:text-gray-600"}),(0,h.jsx)("button",{type:"submit",className:"toolbar-btn",title:"Open",children:"→"})]}),(0,h.jsxs)("div",{className:"max-h-64 overflow-y-auto",children:[a&&(0,h.jsx)("button",{onClick:()=>p(null),className:w,title:"Return to the default project file",children:"⌂ default document"}),v.map(a=>(0,h.jsxs)("button",{onClick:()=>p(a.path),className:w,title:a.path,children:[a.name,(0,h.jsx)("span",{className:"ml-1 text-[10px] text-gray-600",children:a.dir})]},a.path)),r.length>0&&(0,h.jsxs)("div",{className:"mt-1 border-t border-gray-800 pt-1",children:[(0,h.jsx)("div",{className:"px-1.5 pb-0.5 text-[10px] uppercase tracking-wide text-gray-600",children:"recent"}),r.map(a=>(0,h.jsxs)("button",{onClick:()=>p(a),className:w,title:a,children:[a.split("/").pop(),(0,h.jsx)("span",{className:"ml-1 text-[10px] text-gray-600",children:a})]},a))]}),null!==f&&0===v.length&&0===r.length&&(0,h.jsx)("div",{className:"px-1.5 py-1 text-[11px] text-gray-500",children:u?"nothing matches":"no other documents here"})]}),j.length>0&&(0,h.jsxs)("div",{className:"mt-1 truncate border-t border-gray-800 pt-1 text-[10px] text-gray-600",children:["paths are as the server sees them: ",j.join(", ")]}),n&&(0,h.jsxs)("div",{className:"mt-1 text-[10px] text-gray-600",children:["this server does not list documents (",n,") — type a path"]})]})]})}function ck(){let a=b$(a=>a.presence),[b,c]=(0,i.useState)(!1);if(0===a.length)return null;let d=new Map;for(let b of a)d.set(b.role,(d.get(b.role)??0)+1);let e=[...d].map(([a,b])=>b>1?`${a} \xd7${b}`:a).join(" · ");return(0,h.jsxs)("span",{className:"relative inline-flex",children:[(0,h.jsxs)("button",{onClick:()=>c(a=>!a),className:"toolbar-btn inline-flex items-center gap-1.5",title:`Connected: ${e}`,"aria-expanded":b,"aria-label":`${a.length} connected: ${e}`,children:[(0,h.jsx)("span",{className:"flex -space-x-1",children:a.slice(0,4).map(a=>(0,h.jsx)("span",{className:"inline-block h-2 w-2 rounded-full ring-1 ring-gray-900",style:{backgroundColor:a.color??s(a.clientId)}},a.clientId))}),(0,h.jsx)("span",{className:"tabular-nums",children:a.length})]}),b&&(0,h.jsxs)("div",{className:"absolute left-0 top-full z-50 mt-1 max-h-64 w-56 overflow-y-auto rounded border border-gray-700 bg-gray-900 p-2 shadow-lg",children:[(0,h.jsxs)("div",{className:"mb-1 text-[10px] uppercase tracking-wide text-gray-500",children:["connected · ",e]}),a.map(a=>(0,h.jsxs)("div",{className:"flex items-center gap-1.5 rounded px-1 py-1 text-xs text-gray-300",title:a.clientId,children:[(0,h.jsx)("span",{className:"inline-block h-2 w-2 shrink-0 rounded-full",style:{backgroundColor:a.color??s(a.clientId)}}),(0,h.jsx)("span",{className:"shrink-0",children:a.role}),a.name&&(0,h.jsx)("span",{className:"truncate text-gray-500",children:a.name})]},a.clientId))]})]})}function cl(){let a=b$(a=>a.definition),b=b$(a=>a.fileName),c=b$(a=>a.docPath),d=b$(a=>a.dirty),e=b$(a=>a.loadFromJson),f=b$(a=>a.exportJson),g=b$(a=>a.addState),j=b$(a=>a.validate),k=b$(a=>a.showCodePreview),l=b$(a=>a.setShowCodePreview),m=b$(a=>a.setGeneratedCode),n=b$(a=>a.drawMode),o=b$(a=>a.setDrawMode),p=b$(a=>a.arrangeLayout),q=b$(a=>a.undo),r=b$(a=>a.redo),s=b$(a=>a.undoStack),t=b$(a=>a.redoStack),u=b$(a=>a.remoteStatus),v=b$(a=>a.remoteMessage),w=b$(a=>a.setRemoteStatus),x=b$(a=>a.setRemoteMtime),y=b$(a=>a.applyRemote),z=(0,ci.useRequestedDoc)(),A=(0,i.useRef)(null),[B,C]=(0,i.useState)(!1),[D,E]=(0,i.useState)(""),[F,G]=(0,i.useState)(!1),[H,I]=(0,i.useState)("png"),[J,K]=(0,i.useState)(!1),[L,M]=(0,i.useState)(null),[N,O]=(0,i.useState)(null),P=async()=>{let a=f();G(!0);try{let b=await fetch(`/api/file${(0,ci.docQuery)(z)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:a})});if(b.ok){let a=await b.json();x(a.mtime),b$.setState({dirty:!1}),w("synced",null)}else{let a=await b.json().catch(()=>({error:"unknown"}));w("error",`Save failed: ${a.error??b.statusText}`)}}catch(a){w("error",`Save failed: ${a}`)}finally{G(!1)}},Q=async()=>{K(!0),M(null);try{let d=await b8(H,{definition:a,docPath:c,fileName:b});O(d)}catch(a){M(a instanceof Error?a.message:String(a))}finally{K(!1)}},R=async()=>{try{let a=await fetch(`/api/file${(0,ci.docQuery)(z)}`,{cache:"no-store"});if(!a.ok)return void w("error","Reload failed");let b=await a.json();b.exists&&b.content?y(b.content,b.mtime,b.path.split("/").pop()):w("idle",`No file at ${b.path}`)}catch(a){w("error",`Reload failed: ${a}`)}},S=()=>{D.trim()&&(g(null,{name:D.trim(),kind:"normal"}),E(""),C(!1))},[T,U]=(0,i.useState)("python"),V=async()=>{try{let a=await fetch("/api/rispec",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})});if(a.ok){let b=await a.json();m(b.rispec)}else{let b=await a.json().catch(()=>({error:"Unknown"}));m(`# RISE rispec generation failed
|
|
6
|
+
`)],{type:`${b8[a]};charset=utf-8`})}else{let b=function(a={}){let b="u"<typeof document?null:document.getElementById(b4);if(!b)return null;let c=function(a){let b=a.querySelector(":scope > g");if(!b)return null;try{let a=b.getBBox();return a.width>0&&a.height>0?a:null}catch{return null}}(b);if(!c)return null;let d=a.padding??48,e=a.background??b5,f=Math.round(c.x-d),g=Math.round(c.y-d),h=Math.round(c.width+2*d),i=Math.round(c.height+2*d),j=b.cloneNode(!0);j.removeAttribute("id"),j.removeAttribute("class"),j.removeAttribute("style"),j.setAttribute("xmlns","http://www.w3.org/2000/svg"),j.setAttribute("width",String(h)),j.setAttribute("height",String(i)),j.setAttribute("viewBox",`${f} ${g} ${h} ${i}`),j.setAttribute("font-family","ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif"),function a(b){for(let c of Array.from(b.children)){if("transparent"===c.getAttribute("fill")||"transparent"===c.getAttribute("stroke")){c.remove();continue}c.removeAttribute("class"),c.removeAttribute("style"),a(c)}}(j);let k=j.querySelector(":scope > g");k?.removeAttribute("transform");let l=document.createElementNS("http://www.w3.org/2000/svg","rect");return l.setAttribute("x",String(f)),l.setAttribute("y",String(g)),l.setAttribute("width",String(h)),l.setAttribute("height",String(i)),l.setAttribute("fill",e),j.insertBefore(l,j.firstChild),new XMLSerializer().serializeToString(j)}(c);if(!b)throw Error("nothing on the board to export yet");g="svg"===a?new Blob([b],{type:`${b8.svg};charset=utf-8`}):await (f=c.scale??2,new Promise((c,d)=>{let e=b.match(/width="(\d+)"\s+height="(\d+)"/),g=e?Number(e[1]):1200,h=e?Number(e[2]):800,i=URL.createObjectURL(new Blob([b],{type:"image/svg+xml;charset=utf-8"})),j=new Image;j.onload=()=>{URL.revokeObjectURL(i);let b=document.createElement("canvas");b.width=Math.max(1,Math.round(g*f)),b.height=Math.max(1,Math.round(h*f));let e=b.getContext("2d");e?(e.fillStyle=b5,e.fillRect(0,0,b.width,b.height),e.drawImage(j,0,0,b.width,b.height),b.toBlob(a=>a?c(a):d(Error("the canvas produced no image")),b8[a],"jpeg"===a?.92:void 0)):d(Error("this browser gave no 2d context to draw into"))},j.onerror=()=>{URL.revokeObjectURL(i),d(Error("the browser could not read the serialized board"))},j.src=i}))}let h=function({doc:a,machine:b,format:c,at:d}){let e,f,g=an(b??"")||an(a?(a.split(/[/\\]/).pop()??a).replace(/\.smdf\.json$/i,"").replace(/\.json$/i,""):"")||"statemachine",h=a&&(e=a.match(/(?:^|[/\\-])ep(?:isode)?-?(\d{2,4})(?:[/\\-]|$)/i))?`ep${e[1]}`:null,i=h?`${h}--`:"";return`${i}${g}--${(f=a=>String(a).padStart(2,"0"))(d.getFullYear()%100)+f(d.getMonth()+1)+f(d.getDate())+f(d.getHours())+f(d.getMinutes())+f(d.getSeconds())}.${c}`}({doc:b.docPath??b.fileName??null,machine:b.definition?.settings?.name??null,format:b9[a]??String(a),at:(void 0)??new Date}),i=URL.createObjectURL(g),j=document.createElement("a");return j.href=i,j.download=h,j.click(),URL.revokeObjectURL(i),h}let cb="stateloom.layout.v1:";async function cc(){try{let{requestedDoc:b,docQuery:c}=await a.A(65614),d=await fetch(`/api/file${c(b())}`,{cache:"no-store"});if(d.ok){let a=(await d.json())?.path;if("string"==typeof a&&a.length>0)return a}}catch{}return b0.getState().fileName??"untitled"}function cd(){let a,b,c=b0(a=>a.definition),d=b0(a=>a.layout),e=b0(a=>a.selection),f=b0(a=>a.select),g=b0(a=>a.clearSelection),j=b0(a=>a.setStatePosition),k=b0(a=>a.drawMode),l=b0(a=>a.drawSource),m=b0(a=>a.setDrawSource),n=b0(a=>a.setDrawMode),o=b0(a=>a.addTransition),p=b0(a=>a.showContextMenu),q=b0(a=>a.removeState),r=b0(a=>a.undo),s=b0(a=>a.redo),t=b0(a=>a.errors),u=b0(a=>a.navigationPath),v=b0(a=>a.navigateInto),w=b0(a=>a.navigateUp),y=b0(a=>a.activeStates),z=b0(a=>a.viewport),A=b0(a=>a.setViewport);a=(0,i.useRef)(!1),b=(0,i.useRef)(null),(0,i.useEffect)(()=>{let c=!1,d=null;(async()=>{let d=await cc();if(c)return;b.current=d;let e=null;e&&b0.getState().hydrateLayout(e.positions,e.viewport),a.current=!0})();let e=b0.subscribe((c,e)=>{a.current&&b.current&&(c.layout!==e.layout||c.viewport!==e.viewport)&&(d&&clearTimeout(d),d=setTimeout(()=>{let a=b0.getState();b.current,function(a,b){let c={};for(let[d,e]of Object.entries(a)){let a=b[d];a&&(e.x!==a.x||e.y!==a.y||e.width!==a.width||e.height!==a.height)&&(c[d]=e)};}(a.layout.positions,x(a.definition)),a.viewport},300))});return()=>{c=!0,d&&clearTimeout(d),e()}},[]);let B=u.slice(1);return(0,h.jsx)(ay,{definition:c,positions:d.positions,path:B,rootLabel:u[0],viewport:z,onViewportChange:A,selection:{kind:"state"===e.kind||"transition"===e.kind?e.kind:null,id:e.id},activeStates:y,errorElements:t.flatMap(a=>a.element?[a.element]:[]),drawMode:"transition"===k?"transition":"select",drawSource:l,svgId:b4,pinchOwner:b1,emptyHint:"Right-click to add a state, or load a .smdf.json file",onSelect:(a,b)=>{"state"!==a||"transition"!==k||l?f(a,b):m(b)},onClearSelection:g,onStateMove:j,onNavigateInto:v,onNavigateTo:a=>w(a),onContextMenu:(a,b,c)=>p(a,b,"state"===c.kind?{kind:"state",id:c.id}:{kind:"canvas"}),onCreateTransition:(a,b,c)=>{o(a,{event:c,nextState:b}),m(null),n("select")},onCancelDraw:()=>{n("select"),m(null)},onDeleteState:a=>{q(a),g()},onUndo:r,onRedo:s})}function ce({label:a,actions:b,onChange:c}){let d=(a,d)=>c(b.map((b,c)=>c===a?{...b,...d}:b));return(0,h.jsxs)("div",{children:[(0,h.jsxs)("div",{className:"flex items-center justify-between",children:[(0,h.jsx)("span",{className:"text-xs font-medium text-gray-500",children:a}),(0,h.jsx)("button",{onClick:()=>c([...b,{action:"code",code:""}]),className:"text-xs text-blue-500 hover:text-blue-400",children:"+ action"})]}),b.map((a,e)=>(0,h.jsxs)("div",{className:"flex items-start gap-1 mt-1",children:[(0,h.jsxs)("select",{className:"bg-gray-800 border border-gray-700 rounded px-1 py-0.5 text-xs text-gray-200",value:a.action,onChange:a=>d(e,{action:a.target.value}),children:[(0,h.jsx)("option",{value:"code",children:"Code"}),(0,h.jsx)("option",{value:"timerStart",children:"Timer Start"}),(0,h.jsx)("option",{value:"timerStop",children:"Timer Stop"})]}),"code"===a.action?(0,h.jsx)("textarea",{className:"flex-1 bg-gray-800 border border-gray-700 rounded px-1 py-0.5 text-xs text-gray-200 h-10 font-mono",value:a.code??"",placeholder:"// action code...",onChange:a=>d(e,{code:a.target.value})}):(0,h.jsx)("input",{className:"flex-1 bg-gray-800 border border-gray-700 rounded px-1 py-0.5 text-xs text-gray-200",value:a.name??"",placeholder:"Timer name",onChange:a=>d(e,{name:a.target.value})}),(0,h.jsx)("button",{onClick:()=>c(b.filter((a,b)=>b!==e)),className:"text-red-600 hover:text-red-400 text-xs mt-0.5",children:"✕"})]},e)),0===b.length&&(0,h.jsx)("span",{className:"text-xs text-gray-700 italic",children:"none"})]})}function cf(){let a=b0(a=>a.definition),b=b0(a=>a.selection),c=b0(a=>a.updateState),d=b0(a=>a.removeState);b0(a=>a.addAction),b0(a=>a.removeAction);let e=b0(a=>a.updateTransition),f=b0(a=>a.removeTransition);if(!b.kind||!b.id)return(0,h.jsx)("div",{className:"p-3 text-xs text-gray-500",children:"Select a state or transition to edit its properties."});let g=(a,b)=>{if(a.name===b)return a;for(let c of a.states??[]){let a=g(c,b);if(a)return a}return null};if("state"===b.kind){let e=g(a.state,b.id);if(!e)return(0,h.jsx)("div",{className:"p-3 text-gray-500 text-xs",children:"State not found"});let i=e.onEntry?.actions??[],j=e.onExit?.actions??[];return(0,h.jsxs)("div",{className:"p-3 space-y-3 text-sm md:overflow-y-auto md:max-h-[calc(100vh-160px)]",children:[(0,h.jsxs)("h3",{className:"text-xs font-semibold text-gray-400",children:["State: ",e.name]}),(0,h.jsxs)("label",{className:"block",children:[(0,h.jsx)("span",{className:"text-xs text-gray-500",children:"Name"}),(0,h.jsx)("input",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-sm text-gray-200",value:e.name,onChange:a=>c(b.id,{name:a.target.value})})]}),(0,h.jsxs)("label",{className:"block",children:[(0,h.jsx)("span",{className:"text-xs text-gray-500",children:"Kind"}),(0,h.jsxs)("select",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-sm text-gray-200",value:e.kind??"normal",onChange:a=>c(b.id,{kind:a.target.value}),children:[(0,h.jsx)("option",{value:"normal",children:"Normal"}),(0,h.jsx)("option",{value:"final",children:"Final"}),(0,h.jsx)("option",{value:"history",children:"History"})]})]}),(0,h.jsxs)("label",{className:"block",children:[(0,h.jsx)("span",{className:"text-xs text-gray-500",children:"Description"}),(0,h.jsx)("textarea",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-xs text-gray-200 h-12",value:e.description??"",onChange:a=>c(b.id,{description:a.target.value||void 0})})]}),(0,h.jsxs)("label",{className:"block",children:[(0,h.jsx)("span",{className:"text-xs text-gray-500",children:"Notes"}),(0,h.jsx)("textarea",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-xs text-gray-200 h-20",placeholder:"An open question, a decision, something to tell the agent…",value:e.notes??"",onChange:a=>c(b.id,{notes:a.target.value||void 0})})]}),(0,h.jsx)(ce,{label:"▸ onEntry Actions",actions:i,onChange:a=>c(b.id,{onEntry:{actions:a}})}),(0,h.jsx)(ce,{label:"◂ onExit Actions",actions:j,onChange:a=>c(b.id,{onExit:{actions:a}})}),(0,h.jsxs)("div",{children:[(0,h.jsx)("span",{className:"text-xs font-medium text-gray-500",children:"Transitions"}),(e.transitions??[]).map((a,c)=>(0,h.jsxs)("div",{className:"flex items-center gap-1 text-xs text-gray-400 py-1 border-b border-gray-800/50",children:[(0,h.jsxs)("span",{className:"flex-1",children:[a.event," → ",a.nextState??"(internal)"]}),a.condition&&(0,h.jsxs)("span",{className:"text-gray-600",children:["[",a.condition,"]"]}),(0,h.jsx)("button",{onClick:()=>f(b.id,c),className:"text-red-600 hover:text-red-400",children:"✕"})]},c)),(e.transitions?.length??0)===0&&(0,h.jsx)("span",{className:"text-xs text-gray-700 italic",children:"none"})]}),(0,h.jsx)("button",{onClick:()=>d(b.id),className:"text-red-500 hover:text-red-400 text-xs mt-2",children:"🗑 Delete State"})]})}if("transition"===b.kind){let[c,d]=b.id.split(":"),i=parseInt(d,10),j=g(a.state,c),k=j?.transitions?.[i];if(!k)return(0,h.jsx)("div",{className:"p-3 text-gray-500 text-xs",children:"Transition not found"});let l=bZ(a),m=(function a(b){let c=[b];for(let d of b.states??[])c.push(...a(d));return c})(a.state).map(a=>a.name).filter(a=>"Root"!==a);return(0,h.jsxs)("div",{className:"p-3 space-y-3 text-sm",children:[(0,h.jsx)("h3",{className:"text-xs font-semibold text-gray-400",children:"Transition"}),(0,h.jsxs)("label",{className:"block",children:[(0,h.jsx)("span",{className:"text-xs text-gray-500",children:"Event"}),(0,h.jsx)("select",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-sm text-gray-200",value:k.event,onChange:a=>e(c,i,{event:a.target.value}),children:l.map(a=>(0,h.jsx)("option",{value:a,children:a},a))})]}),(0,h.jsxs)("label",{className:"block",children:[(0,h.jsx)("span",{className:"text-xs text-gray-500",children:"Target State"}),(0,h.jsxs)("select",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-sm text-gray-200",value:k.nextState??"",onChange:a=>e(c,i,{nextState:a.target.value||void 0}),children:[(0,h.jsx)("option",{value:"",children:"(internal transition)"}),m.map(a=>(0,h.jsx)("option",{value:a,children:a},a))]})]}),(0,h.jsxs)("label",{className:"block",children:[(0,h.jsx)("span",{className:"text-xs text-gray-500",children:"Condition (guard)"}),(0,h.jsx)("textarea",{rows:3,className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-sm text-gray-200 resize-y leading-snug",value:k.condition??"",onChange:a=>e(c,i,{condition:a.target.value||void 0})})]}),(0,h.jsx)("button",{onClick:()=>f(c,i),className:"text-red-500 hover:text-red-400 text-xs",children:"🗑 Delete Transition"})]})}return null}let cg=["string","int","float","bool","object"];function ch(){let a=b0(a=>a.definition),b=b0(a=>a.addEvent),c=b0(a=>a.updateEvent),d=b0(a=>a.removeEvent),e=b0(a=>a.addParameter),f=b0(a=>a.removeParameter),g=b0(a=>a.updateParameter),j=b0(a=>a.updateEventSource),k=b0(a=>a.select),l=b0(a=>a.selection),[m,n]=(0,i.useState)(""),[o,p]=(0,i.useState)(null),[q,r]=(0,i.useState)(null);return(0,h.jsxs)("div",{className:"p-3 text-sm",children:[a.events.map((a,b)=>(0,h.jsxs)("div",{className:"mb-3",children:[(0,h.jsxs)("div",{className:"flex items-center gap-2 mb-1",children:[(0,h.jsx)("span",{className:"text-xs font-semibold text-gray-500",children:"Source:"}),(0,h.jsx)("input",{className:"flex-1 bg-transparent border-b border-gray-700 text-xs text-gray-300 px-1 py-0.5 focus:border-blue-500 outline-none",value:a.name,onChange:a=>j(b,{name:a.target.value})}),void 0!==a.feeder&&(0,h.jsx)("input",{className:"w-24 bg-transparent border-b border-gray-700 text-xs text-gray-400 px-1 py-0.5 focus:border-blue-500 outline-none",value:a.feeder??"",placeholder:"Feeder...",onChange:a=>j(b,{feeder:a.target.value||void 0})}),void 0===a.feeder&&(0,h.jsx)("button",{className:"text-xs text-gray-600 hover:text-gray-400",title:"Add feeder class",onClick:()=>j(b,{feeder:`${a.name}Feeder`}),children:"+feeder"})]}),(0,h.jsx)("div",{className:"-mx-1 overflow-x-auto px-1",children:(0,h.jsxs)("table",{className:"w-full text-xs",children:[(0,h.jsx)("thead",{children:(0,h.jsxs)("tr",{className:"text-gray-600 border-b border-gray-800",children:[(0,h.jsx)("th",{className:"text-left py-1 font-medium",children:"ID"}),(0,h.jsx)("th",{className:"text-left py-1 font-medium",children:"Description"}),(0,h.jsx)("th",{className:"text-left py-1 font-medium",children:"Params"}),(0,h.jsx)("th",{className:"w-6"})]})}),(0,h.jsx)("tbody",{children:(a.events??[]).map(a=>(0,h.jsxs)(i.Fragment,{children:[(0,h.jsxs)("tr",{className:`border-b border-gray-800/50 hover:bg-gray-800/30 cursor-pointer ${"event"===l.kind&&l.id===a.id?"bg-blue-900/30":""}`,onClick:()=>{k("event",a.id),p(o===a.id?null:a.id)},children:[(0,h.jsx)("td",{className:"py-1 pr-1",children:q===a.id?(0,h.jsx)("input",{autoFocus:!0,className:"w-full bg-gray-800 border border-gray-700 rounded px-1 text-gray-200",value:a.id,onChange:b=>c(a.id,{id:b.target.value}),onBlur:()=>r(null),onKeyDown:a=>"Enter"===a.key&&r(null),onClick:a=>a.stopPropagation()}):(0,h.jsx)("span",{className:"text-gray-300",onDoubleClick:b=>{b.stopPropagation(),r(a.id)},children:a.id})}),(0,h.jsx)("td",{className:"py-1 pr-1 text-gray-500 truncate max-w-[80px]",children:a.description??"—"}),(0,h.jsx)("td",{className:"py-1 text-gray-500",children:(a.parameters?.length??0)>0?a.parameters.map(a=>`${a.name}:${a.type}`).join(", "):"—"}),(0,h.jsx)("td",{className:"py-1",children:(0,h.jsx)("button",{onClick:b=>{b.stopPropagation(),d(a.id)},className:"text-red-600 hover:text-red-400",children:"✕"})})]}),o===a.id&&(0,h.jsx)("tr",{children:(0,h.jsx)("td",{colSpan:4,className:"py-2 px-1 bg-gray-900/50",children:(0,h.jsxs)("div",{className:"space-y-2",children:[(0,h.jsxs)("label",{className:"block",children:[(0,h.jsx)("span",{className:"text-gray-600",children:"Description"}),(0,h.jsx)("input",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-0.5 text-gray-200 mt-0.5",value:a.description??"",onChange:b=>c(a.id,{description:b.target.value||void 0})})]}),(0,h.jsxs)("div",{children:[(0,h.jsx)("span",{className:"text-gray-600",children:"Parameters"}),(a.parameters??[]).map((b,c)=>(0,h.jsxs)("div",{className:"flex items-center gap-1 mt-1",children:[(0,h.jsx)("input",{className:"flex-1 bg-gray-800 border border-gray-700 rounded px-1 py-0.5 text-gray-200",value:b.name,placeholder:"name",onChange:b=>g(a.id,c,{name:b.target.value})}),(0,h.jsx)("select",{className:"bg-gray-800 border border-gray-700 rounded px-1 py-0.5 text-gray-200",value:b.type,onChange:b=>g(a.id,c,{type:b.target.value}),children:cg.map(a=>(0,h.jsx)("option",{value:a,children:a},a))}),(0,h.jsx)("button",{onClick:()=>f(a.id,c),className:"text-red-600 hover:text-red-400",children:"✕"})]},c)),(0,h.jsx)("button",{className:"text-blue-500 hover:text-blue-400 mt-1",onClick:()=>e(a.id,{name:"param",type:"string"}),children:"+ parameter"})]}),(0,h.jsxs)("div",{className:"mt-1",children:[(0,h.jsx)("span",{className:"text-gray-600",children:"Generated method:"}),(0,h.jsxs)("code",{className:"block bg-gray-800 rounded px-2 py-1 text-green-400 mt-0.5 font-mono",children:["on_",a.id.toLowerCase(),"(context",(a.parameters??[]).map(a=>`, ${a.name}: ${a.type}`).join(""),")"]})]})]})})})]},a.id))})]})})]},b)),(0,h.jsxs)("div",{className:"flex gap-1 mt-2",children:[(0,h.jsx)("input",{className:"flex-1 bg-gray-800 border border-gray-700 rounded px-2 py-1 text-gray-200",placeholder:"New event ID...",value:m,onChange:a=>n(a.target.value),onKeyDown:a=>{"Enter"===a.key&&m.trim()&&(b({id:m.trim()}),n(""))}}),(0,h.jsx)("button",{onClick:()=>{m.trim()&&(b({id:m.trim()}),n(""))},className:"bg-blue-600 hover:bg-blue-500 text-white px-2 py-1 rounded",children:"+"})]})]})}function ci(){let a=b0(a=>a.definition.settings),b=b0(a=>a.definition.settings.context),c=b0(a=>a.updateSettings);return(0,h.jsxs)("div",{className:"p-3 space-y-3 text-sm",children:[(0,h.jsx)("h3",{className:"text-xs font-semibold text-gray-400",children:"Machine Settings"}),(0,h.jsxs)("label",{className:"block",children:[(0,h.jsx)("span",{className:"text-xs text-gray-500",children:"Namespace"}),(0,h.jsx)("input",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-sm text-gray-200",value:a.namespace,onChange:a=>c({namespace:a.target.value})})]}),(0,h.jsxs)("label",{className:"block",children:[(0,h.jsx)("span",{className:"text-xs text-gray-500",children:"Name"}),(0,h.jsx)("input",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-sm text-gray-200",value:a.name??"",onChange:a=>c({name:a.target.value||void 0})})]}),(0,h.jsxs)("label",{className:"block",children:[(0,h.jsx)("span",{className:"text-xs text-gray-500",children:"Description"}),(0,h.jsx)("textarea",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-xs text-gray-200 h-12",value:a.description??"",onChange:a=>c({description:a.target.value||void 0})})]}),(0,h.jsxs)("label",{className:"block",children:[(0,h.jsx)("span",{className:"text-xs text-gray-500",children:"Notes on this diagram"}),(0,h.jsx)("textarea",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-xs text-gray-200 h-24",placeholder:"What was discussed, what is still open, what to tell the agent…",value:a.notes??"",onChange:a=>c({notes:a.target.value||void 0})})]}),(0,h.jsxs)("label",{className:"flex items-center gap-2 text-sm text-gray-300",children:[(0,h.jsx)("input",{type:"checkbox",checked:a.asynchronous,onChange:a=>c({asynchronous:a.target.checked}),className:"rounded bg-gray-800 border-gray-600"}),"Asynchronous"]}),(0,h.jsx)("hr",{className:"border-gray-800"}),(0,h.jsx)("h4",{className:"text-xs font-semibold text-gray-500",children:"Context"}),(0,h.jsxs)("label",{className:"block",children:[(0,h.jsx)("span",{className:"text-xs text-gray-500",children:"Context Class"}),(0,h.jsx)("input",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-xs text-gray-200",value:b?.class??"",placeholder:"e.g. MyStateMachineContext",onChange:a=>c({context:{...b,class:a.target.value||void 0}})})]}),(0,h.jsxs)("label",{className:"block",children:[(0,h.jsx)("span",{className:"text-xs text-gray-500",children:"Base Class"}),(0,h.jsx)("input",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-xs text-gray-200",value:b?.baseClass??"",placeholder:"e.g. Context",onChange:a=>c({context:{...b,baseClass:a.target.value||void 0}})})]}),(0,h.jsx)("hr",{className:"border-gray-800"}),(0,h.jsx)("h4",{className:"text-xs font-semibold text-gray-500",children:"Imports"}),(0,h.jsx)("textarea",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-xs text-gray-200 h-16 font-mono",value:(a.imports??[]).join("\n"),placeholder:"One import per line",onChange:a=>c({imports:a.target.value?a.target.value.split("\n"):[]})}),(0,h.jsx)("hr",{className:"border-gray-800"}),(0,h.jsx)("h4",{className:"text-xs font-semibold text-gray-500",children:"Object References"}),(0,h.jsx)("textarea",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-xs text-gray-200 h-12 font-mono",value:(a.objects??[]).map(a=>`${a.instance}: ${a.class}`).join("\n"),placeholder:"instance: Class (one per line)",onChange:a=>{c({objects:a.target.value.split("\n").filter(a=>a.includes(":")).map(a=>{let[b,c]=a.split(":").map(a=>a.trim());return{instance:b,class:c}})})}}),(0,h.jsx)("hr",{className:"border-gray-800"}),(0,h.jsx)("h4",{className:"text-xs font-semibold text-gray-500",children:"Code Generation"}),(0,h.jsxs)("label",{className:"block",children:[(0,h.jsx)("span",{className:"text-xs text-gray-500",children:"Target Language"}),(0,h.jsxs)("select",{className:"w-full bg-gray-800 border border-gray-700 rounded px-2 py-1 text-xs text-gray-200",value:a.targetLanguage??"python",onChange:a=>c({targetLanguage:a.target.value}),children:[(0,h.jsx)("option",{value:"python",children:"Python"}),(0,h.jsx)("option",{value:"typescript",children:"TypeScript"}),(0,h.jsx)("option",{value:"csharp",children:"C#"})]})]})]})}function cj(){let a=b0(a=>a.errors),b=b0(a=>a.validate),c=b0(a=>a.select);return(0,h.jsxs)("div",{className:"p-3",children:[(0,h.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,h.jsxs)("h3",{className:"text-xs font-semibold text-gray-400",children:["Validation ",a.length>0&&(0,h.jsxs)("span",{className:"text-red-500",children:["(",a.length,")"]})]}),(0,h.jsx)("button",{onClick:()=>b(),className:"text-xs bg-gray-700 hover:bg-gray-600 text-gray-300 px-2 py-0.5 rounded",children:"Re-check"})]}),0===a.length?(0,h.jsxs)("div",{className:"flex items-center gap-2 text-green-500 text-xs",children:[(0,h.jsx)("span",{children:"✓"}),(0,h.jsx)("span",{children:"Definition is valid"})]}):(0,h.jsx)("div",{className:"space-y-0.5",children:a.map((a,b)=>(0,h.jsxs)("div",{className:`flex items-start gap-1.5 text-[13px] py-2.5 border-b border-gray-800/50 md:text-xs md:py-1 ${a.element?"cursor-pointer hover:bg-gray-800/30":""}`,onClick:()=>{a.element&&c("state",a.element)},title:a.element?`Click to select "${a.element}"`:void 0,children:[(0,h.jsx)("span",{className:`font-mono text-[10px] mt-0.5 ${"error"===a.severity?"text-red-600":"text-yellow-600"}`,children:a.ruleId}),(0,h.jsx)("span",{className:`flex-1 ${"error"===a.severity?"text-red-400":"text-yellow-400"}`,children:a.message}),a.element&&(0,h.jsxs)("span",{className:"text-gray-600 text-[10px]",children:["→ ",a.element]})]},b))})]})}var ck=a.i(41455);function cl(){let a=(0,ck.useRequestedDoc)(),[b,c]=(0,i.useState)(!1),[d,e]=(0,i.useState)(""),[f,g]=(0,i.useState)(null),[j,k]=(0,i.useState)([]),[l,m]=(0,i.useState)(null),[n,o]=(0,i.useState)(null);(0,i.useEffect)(()=>{if(!b)return;let a=!0;return o(null),fetch("/api/docs",{cache:"no-store"}).then(a=>a.ok?a.json():Promise.reject(Error(`HTTP ${a.status}`))).then(b=>{a&&(g(b.docs??[]),k(b.roots??[]),m(b.current??null))}).catch(b=>{a&&(g([]),o(b.message))}),()=>{a=!1}},[b]);let p=a=>{c(!1),e(""),(0,ck.navigateToDoc)(a)},q=new Set((f??[]).map(a=>a.path)),r=b?(function(){try{let a=[];for(let b=0;b<window.localStorage.length;b++){let c=window.localStorage.key(b);c?.startsWith(cb)&&a.push(c.slice(cb.length))}return a.sort()}catch{return[]}})().filter(b=>b.startsWith("/")&&b!==a&&!q.has(b)):[],s=a??l,t=(f??[]).filter(a=>a.path!==s),u=d.trim().toLowerCase(),v=u?t.filter(a=>a.path.toLowerCase().includes(u)):t,w="block w-full truncate rounded px-1.5 py-1 text-left text-xs text-gray-300 hover:bg-gray-800";return(0,h.jsxs)("span",{className:"relative inline-flex",children:[(0,h.jsx)("button",{onClick:()=>c(a=>!a),className:"toolbar-btn",title:a?`Document: ${a}`:"Switch document",children:"⇄"}),b&&(0,h.jsxs)("div",{className:"absolute left-0 top-full z-50 mt-1 w-80 rounded border border-gray-700 bg-gray-900 p-2 shadow-lg",children:[(0,h.jsx)("div",{className:"mb-1 text-[10px] uppercase tracking-wide text-gray-500",children:"switch document"}),(0,h.jsxs)("form",{onSubmit:a=>{a.preventDefault();let b=d.trim();if(b){if(1===v.length)return p(v[0].path);if(b.startsWith("/"))return p(b)}},className:"mb-1 flex gap-1",children:[(0,h.jsx)("input",{value:d,onChange:a=>e(a.target.value),placeholder:null===f?"loading…":"filter, or /absolute/path.json",className:"min-w-0 flex-1 rounded border border-gray-700 bg-gray-950 px-1.5 py-1 text-xs text-gray-200 placeholder:text-gray-600"}),(0,h.jsx)("button",{type:"submit",className:"toolbar-btn",title:"Open",children:"→"})]}),(0,h.jsxs)("div",{className:"max-h-64 overflow-y-auto",children:[a&&(0,h.jsx)("button",{onClick:()=>p(null),className:w,title:"Return to the default project file",children:"⌂ default document"}),v.map(a=>(0,h.jsxs)("button",{onClick:()=>p(a.path),className:w,title:a.path,children:[a.name,(0,h.jsx)("span",{className:"ml-1 text-[10px] text-gray-600",children:a.dir})]},a.path)),r.length>0&&(0,h.jsxs)("div",{className:"mt-1 border-t border-gray-800 pt-1",children:[(0,h.jsx)("div",{className:"px-1.5 pb-0.5 text-[10px] uppercase tracking-wide text-gray-600",children:"recent"}),r.map(a=>(0,h.jsxs)("button",{onClick:()=>p(a),className:w,title:a,children:[a.split("/").pop(),(0,h.jsx)("span",{className:"ml-1 text-[10px] text-gray-600",children:a})]},a))]}),null!==f&&0===v.length&&0===r.length&&(0,h.jsx)("div",{className:"px-1.5 py-1 text-[11px] text-gray-500",children:u?"nothing matches":"no other documents here"})]}),j.length>0&&(0,h.jsxs)("div",{className:"mt-1 truncate border-t border-gray-800 pt-1 text-[10px] text-gray-600",children:["paths are as the server sees them: ",j.join(", ")]}),n&&(0,h.jsxs)("div",{className:"mt-1 text-[10px] text-gray-600",children:["this server does not list documents (",n,") — type a path"]})]})]})}function cm(){let a=b0(a=>a.presence),[b,c]=(0,i.useState)(!1);if(0===a.length)return null;let d=new Map;for(let b of a)d.set(b.role,(d.get(b.role)??0)+1);let e=[...d].map(([a,b])=>b>1?`${a} \xd7${b}`:a).join(" · ");return(0,h.jsxs)("span",{className:"relative inline-flex",children:[(0,h.jsxs)("button",{onClick:()=>c(a=>!a),className:"toolbar-btn inline-flex items-center gap-1.5",title:`Connected: ${e}`,"aria-expanded":b,"aria-label":`${a.length} connected: ${e}`,children:[(0,h.jsx)("span",{className:"flex -space-x-1",children:a.slice(0,4).map(a=>(0,h.jsx)("span",{className:"inline-block h-2 w-2 rounded-full ring-1 ring-gray-900",style:{backgroundColor:a.color??s(a.clientId)}},a.clientId))}),(0,h.jsx)("span",{className:"tabular-nums",children:a.length})]}),b&&(0,h.jsxs)("div",{className:"absolute left-0 top-full z-50 mt-1 max-h-64 w-56 overflow-y-auto rounded border border-gray-700 bg-gray-900 p-2 shadow-lg",children:[(0,h.jsxs)("div",{className:"mb-1 text-[10px] uppercase tracking-wide text-gray-500",children:["connected · ",e]}),a.map(a=>(0,h.jsxs)("div",{className:"flex items-center gap-1.5 rounded px-1 py-1 text-xs text-gray-300",title:a.clientId,children:[(0,h.jsx)("span",{className:"inline-block h-2 w-2 shrink-0 rounded-full",style:{backgroundColor:a.color??s(a.clientId)}}),(0,h.jsx)("span",{className:"shrink-0",children:a.role}),a.name&&(0,h.jsx)("span",{className:"truncate text-gray-500",children:a.name})]},a.clientId))]})]})}function cn(){let a=b0(a=>a.definition),b=b0(a=>a.fileName),c=b0(a=>a.docPath),d=b0(a=>a.dirty),e=b0(a=>a.loadFromJson),f=b0(a=>a.exportJson),g=b0(a=>a.addState),j=b0(a=>a.validate),k=b0(a=>a.showCodePreview),l=b0(a=>a.setShowCodePreview),m=b0(a=>a.setGeneratedCode),n=b0(a=>a.drawMode),o=b0(a=>a.setDrawMode),p=b0(a=>a.arrangeLayout),q=b0(a=>a.undo),r=b0(a=>a.redo),s=b0(a=>a.undoStack),t=b0(a=>a.redoStack),u=b0(a=>a.remoteStatus),v=b0(a=>a.remoteMessage),w=b0(a=>a.setRemoteStatus),x=b0(a=>a.setRemoteMtime),y=b0(a=>a.applyRemote),z=(0,ck.useRequestedDoc)(),A=(0,i.useRef)(null),[B,C]=(0,i.useState)(!1),[D,E]=(0,i.useState)(""),[F,G]=(0,i.useState)(!1),[H,I]=(0,i.useState)("png"),[J,K]=(0,i.useState)(!1),[L,M]=(0,i.useState)(null),[N,O]=(0,i.useState)(null),P=async()=>{let a=f();G(!0);try{let b=await fetch(`/api/file${(0,ck.docQuery)(z)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:a})});if(b.ok){let a=await b.json();x(a.mtime),b0.setState({dirty:!1}),w("synced",null)}else{let a=await b.json().catch(()=>({error:"unknown"}));w("error",`Save failed: ${a.error??b.statusText}`)}}catch(a){w("error",`Save failed: ${a}`)}finally{G(!1)}},Q=async()=>{K(!0),M(null);try{let d=await ca(H,{definition:a,docPath:c,fileName:b});O(d)}catch(a){M(a instanceof Error?a.message:String(a))}finally{K(!1)}},R=async()=>{try{let a=await fetch(`/api/file${(0,ck.docQuery)(z)}`,{cache:"no-store"});if(!a.ok)return void w("error","Reload failed");let b=await a.json();b.exists&&b.content?y(b.content,b.mtime,b.path.split("/").pop()):w("idle",`No file at ${b.path}`)}catch(a){w("error",`Reload failed: ${a}`)}},S=()=>{D.trim()&&(g(null,{name:D.trim(),kind:"normal"}),E(""),C(!1))},[T,U]=(0,i.useState)("python"),V=async()=>{try{let a=await fetch("/api/rispec",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})});if(a.ok){let b=await a.json();m(b.rispec)}else{let b=await a.json().catch(()=>({error:"Unknown"}));m(`# RISE rispec generation failed
|
|
7
7
|
${b.error}`)}}catch(a){m(`# RISE rispec generation failed
|
|
8
8
|
${a}`)}l(!0)},W=async()=>{let a=f();try{let b=await fetch("/api/generate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({definition:a,language:T})});if(b.ok){let a=await b.json();m(a.code)}else{let c=await b.json().catch(()=>({error:"Unknown error"}));m(`// Code generation failed: ${c.error}
|
|
9
9
|
// Showing definition JSON as fallback:
|
|
10
10
|
${a}`)}}catch{m(`// Backend unavailable — showing definition JSON
|
|
11
|
-
${a}`)}l(!0)};return(0,h.jsxs)("div",{className:"flex flex-col gap-1.5 px-2 py-1.5 bg-gray-900 border-b border-gray-800 md:flex-row md:flex-wrap md:items-center md:px-3",children:[(0,h.jsxs)("div",{className:"toolbar-ident",children:[(0,h.jsx)("input",{ref:A,type:"file",accept:".json,.smdf.json",onChange:a=>{let b=a.target.files?.[0];if(!b)return;let c=new FileReader;c.onload=a=>{e(a.target?.result,b.name)},c.readAsText(b),a.target.value=""},className:"hidden"}),(0,h.jsxs)("span",{className:"text-xs text-gray-400 mr-1 truncate max-w-[50vw] md:max-w-none",children:[b??"untitled.smdf.json",d&&(0,h.jsx)("span",{className:"text-yellow-500 ml-0.5",children:"●"})]}),(0,h.jsx)(cj,{}),"synced"===u&&(0,h.jsx)("span",{className:"text-[10px] text-emerald-500",title:"In sync with disk",children:"⌁ synced"}),"remote-changed"===u&&(0,h.jsx)("span",{className:"text-[10px] text-amber-400",title:v??"",children:"↻ remote changed"}),"error"===u&&(0,h.jsx)("span",{className:"text-[10px] text-red-400",title:v??"",children:"⚠ disk error"}),"idle"===u&&(0,h.jsx)("span",{className:"text-[10px] text-gray-600",title:v??"No file bound",children:"○ no disk"}),(0,h.jsx)(ck,{}),(0,h.jsx)("div",{className:"flex-1"})]}),(0,h.jsxs)("div",{className:"toolbar-strip",children:[(0,h.jsx)("button",{onClick:q,disabled:0===s.length,className:"toolbar-btn disabled:opacity-30",title:"Undo (Ctrl+Z)",children:"↩"}),(0,h.jsx)("button",{onClick:r,disabled:0===t.length,className:"toolbar-btn disabled:opacity-30",title:"Redo (Ctrl+Y)",children:"↪"}),(0,h.jsx)("div",{className:"w-px h-4 bg-gray-700"}),(0,h.jsx)("button",{onClick:p,className:"toolbar-btn",title:"Arrange states into layers (auto-layout)",children:"⤢ Arrange"}),(0,h.jsx)("div",{className:"w-px h-4 bg-gray-700"}),(0,h.jsx)("button",{onClick:()=>o("select"===n?"transition":"select"),className:`toolbar-btn ${"transition"===n?"!bg-amber-700 !text-white":""}`,title:"transition"===n?"Exit draw mode (Esc)":"Draw transition mode",children:"transition"===n?"✏️ Drawing":"↗ Draw"}),(0,h.jsx)("div",{className:"w-px h-4 bg-gray-700"}),(0,h.jsx)("button",{onClick:()=>A.current?.click(),className:"toolbar-btn",title:"Open local .smdf.json (browser)",children:"📂"}),(0,h.jsx)("button",{onClick:P,disabled:F,className:"toolbar-btn disabled:opacity-40",title:"Save to disk (STATELOOM_PROJECT_FILE)",children:"💾 Disk"}),(0,h.jsx)("button",{onClick:R,className:"toolbar-btn",title:"Reload from disk",children:"🔄"}),(0,h.jsx)("button",{onClick:()=>{let a=new Blob([f()],{type:"application/json"}),c=URL.createObjectURL(a),d=document.createElement("a");d.href=c,d.download=b??"statemachine.smdf.json",d.click(),URL.revokeObjectURL(c)},className:"toolbar-btn",title:"Download as file",children:"📥"}),(0,h.jsx)("select",{value:H,onChange:a=>{I(a.target.value),O(null),M(null)},className:"bg-gray-800 border border-gray-700 rounded text-xs text-gray-300 px-1 py-0.5",title:"Export format",children:b4.map(a=>(0,h.jsx)("option",{value:a,children:b5[a]},a))}),(0,h.jsx)("button",{onClick:Q,disabled:J,className:`toolbar-btn disabled:opacity-40 ${L?"!text-red-400":""}`,title:L??`Export the board as ${b5[H]}`,children:J?"…":"🖼 Export"}),N&&!L&&(0,h.jsxs)("span",{className:"text-[10px] text-emerald-500 truncate max-w-[40vw] md:max-w-[16rem]",title:N,children:["⤓ ",N]}),(0,h.jsx)("div",{className:"w-px h-4 bg-gray-700"}),B?(0,h.jsxs)("div",{className:"flex items-center gap-1",children:[(0,h.jsx)("input",{autoFocus:!0,className:"bg-gray-800 border border-gray-700 rounded px-2 py-0.5 text-xs text-gray-200 w-32 md:w-24",placeholder:"State name...",value:D,onChange:a=>E(a.target.value),onKeyDown:a=>{"Enter"===a.key&&S(),"Escape"===a.key&&C(!1)}}),(0,h.jsx)("button",{onClick:S,className:"toolbar-btn-sm",children:"✓"}),(0,h.jsx)("button",{onClick:()=>C(!1),className:"toolbar-btn-sm",children:"✕"})]}):(0,h.jsx)("button",{onClick:()=>C(!0),className:"toolbar-btn",children:"+State"}),(0,h.jsx)("div",{className:"w-px h-4 bg-gray-700"}),(0,h.jsx)("button",{onClick:()=>j(),className:"toolbar-btn",children:"✓ Validate"}),(0,h.jsxs)("select",{value:T,onChange:a=>U(a.target.value),className:"bg-gray-800 border border-gray-700 rounded text-xs text-gray-300 px-1 py-0.5",children:[(0,h.jsx)("option",{value:"python",children:"Python"}),(0,h.jsx)("option",{value:"typescript",children:"TypeScript"})]}),(0,h.jsx)("button",{onClick:W,className:"toolbar-btn",children:"⚡ Generate"}),(0,h.jsx)("button",{onClick:V,className:"toolbar-btn",title:"Generate RISE rispec markdown",children:"📜 RISE"}),(0,h.jsxs)("button",{onClick:()=>l(!k),className:`toolbar-btn ${k?"text-blue-400":""}`,children:["</>"," Code"]})]})]})}function cm(){let a=b$(a=>a.generatedCode),b=b$(a=>a.showCodePreview),c=b$(a=>a.setShowCodePreview);return b?(0,h.jsx)("div",{className:"absolute inset-0 z-50 flex items-center justify-center bg-black/60 p-2 md:p-0",children:(0,h.jsxs)("div",{className:"bg-gray-900 border border-gray-700 rounded-lg shadow-xl w-full max-h-[85dvh] md:w-[80%] md:max-w-3xl md:max-h-[80dvh] flex flex-col",children:[(0,h.jsxs)("div",{className:"flex items-center justify-between px-4 py-2 border-b border-gray-800",children:[(0,h.jsx)("h3",{className:"text-sm font-semibold text-gray-300",children:"Generated Definition (JSON)"}),(0,h.jsx)("button",{onClick:()=>c(!1),className:"text-gray-500 hover:text-gray-300 text-lg min-h-11 min-w-11 md:min-h-0 md:min-w-0","aria-label":"Close preview",children:"✕"})]}),(0,h.jsx)("pre",{className:"flex-1 overflow-auto overscroll-contain p-4 text-[11px] leading-relaxed text-green-400 font-mono md:text-sm",children:a??"No code generated yet"}),(0,h.jsx)("div",{className:"flex justify-end px-4 py-2 border-t border-gray-800",children:(0,h.jsx)("button",{onClick:()=>{a&&navigator.clipboard.writeText(a)},className:"text-xs bg-gray-700 hover:bg-gray-600 text-gray-300 px-4 py-3 rounded md:px-3 md:py-1",children:"Copy to Clipboard"})})]})}):null}function cn(){let a=b$(a=>a.applyRemote),b=b$(a=>a.setRemoteStatus),c=b$(a=>a.setRemoteMtime),d=(0,ci.useRequestedDoc)();return(0,i.useEffect)(()=>{let e=!1,f=(0,ci.docQuery)(d);async function g(){try{let a=await fetch(`/api/file${f}`,{cache:"no-store"});if(!a.ok)return null;return await a.json()}catch{return null}}(async()=>{let c=await g();e||(c?.path&&b$.getState().setDocPath(c.path),c?.exists&&c.content?a(c.content,c.mtime,c.path.split("/").pop()):b("idle",c?`No file at ${c.path}`:null))})();let h=new EventSource(`/api/watch${f}`);return h.addEventListener("hello",a=>{try{let b=JSON.parse(a.data);"number"==typeof b?.mtime&&c(b.mtime)}catch{}}),h.addEventListener("change",async d=>{let e=0;try{e=JSON.parse(d.data)?.mtime??0}catch{}if(e<=(b$.getState().remoteMtime??0))return;let f=await g();f?.exists&&f.content&&(b$.getState().dirty?(b("remote-changed",`Disk changed at ${new Date(f.mtime).toLocaleTimeString()} — local has unsaved edits`),c(f.mtime)):a(f.content,f.mtime,f.path.split("/").pop()))}),h.addEventListener("error",()=>{b("error","Watch stream disconnected")}),()=>{e=!0,h.close()}},[a,b,c,d]),null}function co({url:a}){let b=(0,ci.useRequestedDoc)();return(0,i.useEffect)(()=>{if(!a)return;let c=!1,d=null,e=null,f=null,g=null;return(async()=>{let h="";try{let a=await fetch(`/api/file${(0,ci.docQuery)(b)}`,{cache:"no-store"});a.ok&&(h=(await a.json())?.path??"")}catch{}c||(h&&b$.getState().setDocPath(h),(d=bQ({url:a,role:"web",docId:h,name:"web-designer",onFull:a=>{b$.getState().applyRemote(JSON.stringify({stateMachine:a.def}),a.mtime??Date.now(),h&&h.split("/").pop()||void 0),g=a.def},onPatch:a=>{b$.getState().applyRemoteOps(a.ops,a.mtime??Date.now(),a.seq),g=b$.getState().definition},onPresence:a=>{b$.getState().setPresence(a)}})).connect(),e=b$.subscribe((a,b)=>{a.definition===b.definition||a._applyingRemote||(f&&clearTimeout(f),f=setTimeout(()=>{var a,b;let c,e;if(!d||"connected"!==d.getSnapshot().status)return;let f=b$.getState().definition;if(null===g){d.emitFull(f),g=f;return}let h=(a=g,b=f,c=a??{settings:{namespace:"",asynchronous:!1},events:[],state:{name:b.state.name,states:[]}},function(a,b,c){let d={},e=!1,f=new Set([...Object.keys(a.settings),...Object.keys(b.settings)]),g=a.settings,h=b.settings;for(let a of f)q(g[a],h[a])||void 0===h[a]||(d[a]=h[a],e=!0);e&&c.push({op:"settings.update",patch:d})}(c,b,e=[]),function(a,b,c){let d=a.events,e=b.events,f=Math.min(d.length,e.length);for(let a=0;a<f;a++)!function(a,b,c,d){let e={},f=!1;for(let a of["name","file","feeder","description","timers"])q(b[a],c[a])||void 0===c[a]||(e[a]=c[a],f=!0);f&&d.push({op:"eventSource.update",index:a,patch:e});let g=b.events??[],h=c.events??[],i=new Set(h.map(a=>a.id));for(let a of g)i.has(a.id)||d.push({op:"event.remove",id:a.id});let j=g.filter(a=>i.has(a.id)),k=0;for(;k<h.length;){let b=h[k];k<j.length&&j[k].id===b.id?(function(a,b,c){let d={},e=!1;for(let c of["name","description","preAction","postAction"])q(a[c],b[c])||void 0===b[c]||(d[c]=b[c],e=!0);e&&c.push({op:"event.update",id:b.id,patch:d})}(j[k],b,d),function(a,b,c,d){let e=Math.min(b.length,c.length);for(let f=0;f<e;f++)if(!q(b[f],c[f])){let e={};b[f].name!==c[f].name&&(e.name=c[f].name),b[f].type!==c[f].type&&(e.type=c[f].type),d.push({op:"parameter.update",eventId:a,index:f,patch:e})}for(let b=e;b<c.length;b++)d.push({op:"parameter.add",eventId:a,parameter:c[b],index:b});for(let e=b.length-1;e>=c.length;e--)d.push({op:"parameter.remove",eventId:a,index:e})}(b.id,j[k].parameters??[],b.parameters??[],d)):(d.push({op:"event.add",sourceIndex:a,event:b,index:k}),j.splice(k,0,b)),k++}}(a,d[a],e[a],c);for(let a=d.length;a<e.length;a++)c.push({op:"eventSource.add",source:e[a]});for(let a=d.length-1;a>=e.length;a--)c.push({op:"eventSource.remove",index:a})}(c,b,e),function(a,b,c){let d=o(a.state),e=o(b.state),f=new Map(d.map(a=>[a.name,a])),g=new Map(e.map(a=>[a.name,a])),h=p(a.state),i=p(b.state),j=[];for(let a of e){if(f.has(a.name))continue;let b=i.get(a.name)??null,{states:d,transitions:e,...g}=a;c.push({op:"state.add",parent:b,state:{...g}}),e&&e.length>0&&j.push({state:a.name,transitions:e})}for(let a of e){if(!f.has(a.name))continue;let b=h.get(a.name)??null,d=i.get(a.name)??null;b!==d&&null!==d&&c.push({op:"state.nest",child:a.name,newParent:d})}for(let a of e){let b=f.get(a.name);if(!b)continue;let d={},e=!1;q(b.kind,a.kind)||void 0===a.kind||(d.kind=a.kind,e=!0),q(b.description,a.description)||void 0===a.description||(d.description=a.description,e=!0),e&&c.push({op:"state.update",name:a.name,patch:d}),r(a.name,"onEntry",b.onEntry?.actions??[],a.onEntry?.actions??[],c),r(a.name,"onExit",b.onExit?.actions??[],a.onExit?.actions??[],c)}for(let a of j)a.transitions.forEach((b,d)=>{c.push({op:"transition.add",state:a.state,transition:b,index:d})});for(let a of e){let b=f.get(a.name);b&&function(a,b,c,d){let e=Math.min(b.length,c.length);for(let f=0;f<e;f++){if(q(b[f],c[f]))continue;let e={};for(let a of["event","nextState","condition","description","actions"])q(b[f][a],c[f][a])||void 0===c[f][a]||(e[a]=c[f][a]);Object.keys(e).length>0&&d.push({op:"transition.update",state:a,index:f,patch:e})}for(let b=e;b<c.length;b++)d.push({op:"transition.add",state:a,transition:c[b],index:b});for(let e=b.length-1;e>=c.length;e--)d.push({op:"transition.remove",state:a,index:e})}(a.name,b.transitions??[],a.transitions??[],c)}for(let a=d.length-1;a>=0;a--){let b=d[a];if(g.has(b.name))continue;let e=b.transitions??[];for(let a=e.length-1;a>=0;a--)c.push({op:"transition.remove",state:b.name,index:a});c.push({op:"state.remove",name:b.name})}}(c,b,e),e);0!==h.length&&(d.emitPatch(h),g=f)},60))}))})(),()=>{c=!0,f&&clearTimeout(f),e&&e(),d&&d.disconnect()}},[a,b]),null}function cp(){let a=process.env.NEXT_PUBLIC_STATELOOM_BRIDGE_URL??process.env.NEXT_PUBLIC_SMCRAFT_BRIDGE_URL;return"string"==typeof a&&a.length>0?a:void 0}let cq=null;function cr(){return cq||(cq=(async()=>{let a=cp()??null;try{let b=await fetch("/api/config",{cache:"no-store"});if(b.ok){let c=await b.json();return{bridgeUrl:c.bridgeUrl||a,projectFile:c.projectFile??null}}}catch{}return{bridgeUrl:a,projectFile:null}})())}function cs(){let a=cp(),[b,c]=(0,i.useState)(a);return((0,i.useEffect)(()=>{let a=!0;return cr().then(b=>{a&&b.bridgeUrl&&c(b.bridgeUrl)}),()=>{a=!1}},[]),"string"==typeof b&&b.length>0)?(0,h.jsx)(co,{url:b}):(0,h.jsx)(cn,{})}function ct(a){return Number.isFinite(a)?Math.min(1.75,Math.max(.75,a)):1}function cu(a){"u">typeof document&&(document.documentElement.style.fontSize=`${16*ct(a)}px`)}let cv=1,cw=!1,cx=new Set;function cy(){return cw||(cw=!0,cv=1),cv}function cz(){return 1}function cA(a){return cx.add(a),()=>{cx.delete(a)}}function cB(a,b){let c=ct(a);if(cu(c),b,cw=!0,c!==cv)for(let a of(cv=c,cx))a()}function cC(a,b){return Math.max(1,Math.hypot(b.clientX-a.clientX,b.clientY-a.clientY))}function cD(a,b){for(let c=0;c<a.length;c++)if(a[c].identifier===b)return a[c];return null}function cE(){let a=(0,i.useSyncExternalStore)(cA,cy,cz),b=(0,i.useRef)(null),c=(0,i.useRef)(null),d=(0,i.useRef)(null);(0,i.useEffect)(()=>{cu(a)},[a]);let e=(0,i.useCallback)(a=>{c.current=a,null===d.current&&(d.current=requestAnimationFrame(()=>{d.current=null,null!==c.current&&cB(c.current,!1)}))},[]),f=(0,i.useCallback)(()=>{c.current=null,cB(1,!0)},[]);return((0,i.useEffect)(()=>{let a=()=>{let a=b.current;if(b.current=null,!a?.engaged)return;null!==d.current&&(cancelAnimationFrame(d.current),d.current=null);let e=c.current??cy();c.current=null,cB(ct(e),!0)},f=c=>{if(2!==c.touches.length){b.current&&a();return}let[d,e]=[c.touches[0],c.touches[1]];b1(d.target)||b1(e.target)||(b.current={a:d.identifier,b:e.identifier,startScale:cy(),startDist:cC(d,e),engaged:!1})},g=a=>{let c=b.current;if(!c)return;let d=cD(a.touches,c.a),f=cD(a.touches,c.b);if(!d||!f)return;a.preventDefault();let g=cC(d,f);if(!c.engaged){if(12>Math.abs(g-c.startDist))return;c.engaged=!0,c.startDist=g;return}e(ct(c.startScale*(g/c.startDist)))},h=c=>{let d=b.current;d&&(cD(c.touches,d.a)&&cD(c.touches,d.b)||a())};return document.addEventListener("touchstart",f,{passive:!0,capture:!0}),document.addEventListener("touchmove",g,{passive:!1,capture:!0}),document.addEventListener("touchend",h,{passive:!0,capture:!0}),document.addEventListener("touchcancel",h,{passive:!0,capture:!0}),()=>{document.removeEventListener("touchstart",f,{capture:!0}),document.removeEventListener("touchmove",g,{capture:!0}),document.removeEventListener("touchend",h,{capture:!0}),document.removeEventListener("touchcancel",h,{capture:!0}),null!==d.current&&cancelAnimationFrame(d.current)}},[e]),1===a)?null:(0,h.jsxs)("div",{className:"ui-scale-pill",role:"status","aria-live":"polite",children:[(0,h.jsxs)("span",{children:["UI ",Math.round(100*a),"%"]}),(0,h.jsx)("button",{type:"button",onClick:f,"aria-label":"Reset interface size to 100 percent",children:"Reset"})]})}let cF=(a,b)=>"chen"===b?`stateloom:erd-layout:chen:${a}`:`stateloom:erd-layout:${a}`,cG="stateloom:erd-notation";function cH(a,b){try{return JSON.parse(localStorage.getItem(cF(a,b))??"{}")}catch{return{}}}async function cI(a){let b=a.slice(0,a.lastIndexOf("/")),c=((await (await fetch("/api/docs",{cache:"no-store"})).json()).docs??[]).map(a=>a.path).filter(a=>a.endsWith(".smdf.json")&&a.slice(0,a.lastIndexOf("/"))===b),d=[];for(let a of c)try{let b=await (await fetch(`/api/file${(0,ci.docQuery)(a)}`,{cache:"no-store"})).json(),c=JSON.parse(b.content??"null"),e=c?.stateMachine??c?.StateMachine??c;e?.state&&d.push({path:a,def:e})}catch{}return d}let cJ="w-full rounded border border-gray-700 bg-gray-950 px-2 py-1 text-xs text-gray-200 placeholder:text-gray-600",cK="rounded border border-gray-700 bg-gray-800 px-2 py-1 text-xs text-gray-200 hover:bg-gray-700",cL="mb-1 mt-3 text-[11px] font-semibold uppercase tracking-wide text-gray-500";function cM(){let a=(0,ci.useRequestedDoc)(),[b,c]=(0,i.useState)(""),[d,e]=(0,i.useState)(null),[f,g]=(0,i.useState)({}),[j,k]=(0,i.useState)("crowsfoot"),[l,m]=(0,i.useState)({...M}),[n,o]=(0,i.useState)(0),[p,q]=(0,i.useState)(null),[r,s]=(0,i.useState)({text:"loading…",tone:"ok"}),t=(0,i.useCallback)((a,b="ok")=>s({text:a,tone:b}),[]),[u,v]=(0,i.useState)(!1);(0,i.useEffect)(()=>{let a=setTimeout(()=>v(!0),4e3);return()=>{clearTimeout(a),v(!1)}},[r]);let[w,x]=(0,i.useState)("entities"),[y,z]=(0,i.useState)(!1),[A,B]=(0,i.useState)(!1),[C,D]=(0,i.useState)(!1),E=(0,i.useRef)(null),[F,G]=(0,i.useState)(0),[H,I]=(0,i.useState)(null),J=(0,i.useRef)(null);(0,i.useEffect)(()=>{let b=!1,d=null;return(async()=>{let f=await (await fetch(`/api/file${(0,ci.docQuery)(a)}`,{cache:"no-store"})).json();if(b)return;if(f.error)return t(f.error,"warn");let h=f.path??"",i=null;try{let a=f.content?JSON.parse(f.content):null;X(a)&&(i={...a,relationships:a.relationships??[]})}catch{}if(f.exists&&!i)return t(`${h} is not a readable ERD definition`,"warn");let j=(h.split("/").pop()??"Untitled").replace(/\.erdf\.json$/i,""),l=function(){try{return"chen"===localStorage.getItem(cG)?"chen":"crowsfoot"}catch{return"crowsfoot"}}();c(h),e(i??{settings:{namespace:"Default",name:j},entities:[],relationships:[]}),k(l),g(cH(h,l)),q(null),I(null),o(a=>a+1),t(f.exists?"loaded":"new document — the first edit writes it");let{bridgeUrl:m}=await cr();!b&&m&&(J.current=d=bQ({url:m,role:"web",docId:h,name:"web-designer",onFull:a=>{let b=a.def;X(b)&&(e({...b,relationships:b.relationships??[]}),t("updated live"))},onPatch:()=>{},onPresence:a=>G(a.length)}),d.connect())})().catch(a=>!b&&t(String(a),"warn")),()=>{b=!0,J.current=null,d?.disconnect()}},[a,t]);let K=(0,i.useMemo)(()=>{if(!d)return{};let a=function(a,b={}){let c=b.notation??"crowsfoot",d=b.hSpacing??70,e=b.vSpacing??("chen"===c?130:90),f="chen"===c?ae:al,g=[],h=new Set;for(let b of a.entities??[])!b?.name||h.has(b.name)||(h.add(b.name),g.push(b));let i=new Map,j=(a,b,c=new Set)=>a===b||!c.has(a)&&(c.add(a),(i.get(a)??[]).some(a=>j(a,b,c)));for(let b of a.relationships??[]){if(!b||!h.has(b.from)||!h.has(b.to)||b.from===b.to)continue;let[a,c]="N:1"===b.cardinality?[b.to,b.from]:[b.from,b.to];if((i.get(a)??[]).includes(c)||j(c,a))continue;let d=i.get(a);d?d.push(c):i.set(a,[c])}let k=new Map,l=(a,b)=>{if(!((k.get(a)??-1)>=b))for(let c of(k.set(a,b),i.get(a)??[]))l(c,b+1)},m=new Set([...i.values()].flat());for(let a of g)m.has(a.name)||l(a.name,0);for(let a of g)k.has(a.name)||l(a.name,0);for(let a of[...g].sort((a,b)=>k.get(b.name)-k.get(a.name))){let b=i.get(a.name)??[];b.length&&k.set(a.name,Math.min(...b.map(a=>k.get(a)))-1)}let n=[],o=new Map,p=(a,b)=>((n[b]??=[]).push(a),o.set(a.id,a),a);for(let a of g)p({id:a.name,entity:a.name,...f(a),upper:[],lower:[],x:0},k.get(a.name)??0);let q=0;for(let[a,b]of i)for(let c of b){let b=a;for(let d=k.get(a)+1;d<k.get(c);d++){let a=p({id:`\u0000lane${q++}`,width:28,height:0,upper:[],lower:[],x:0},d);o.get(b).lower.push(a.id),a.upper.push(b),b=a.id}o.get(b).lower.push(c),o.get(c).upper.push(b)}for(let a=n.length-1;a>=0;a--)n[a]?.length||n.splice(a,1);let r=(a,b)=>a.length?a.reduce((a,c)=>a+b(o.get(c)),0)/a.length:null,s=(a,b)=>{let c=new Map;for(let a of n)a.forEach((a,b)=>c.set(a.id,b));let d=new Map(a.map((a,d)=>[a.id,r(a[b],a=>c.get(a.id))??d]));a.sort((a,b)=>d.get(a.id)-d.get(b.id))};for(let a=0;a<2;a++){for(let a=1;a<n.length;a++)s(n[a],"upper");for(let a=n.length-2;a>=0;a--)s(n[a],"lower")}let t=a=>a.x+a.width/2,u=(a,b)=>{let c=0;for(let e of a){let a=r(e[b],t);e.x=Math.max(c,null===a?c:a-e.width/2),c=e.x+e.width+d}};for(let a of n)u(a,"upper");for(let a=n.length-2;a>=0;a--)u(n[a],"lower");let v=Math.min(0,...[...o.values()].map(a=>a.x)),w={},x=40;for(let a of n){for(let b of a)b.entity&&(w[b.entity]={x:Math.round(b.x-v)+40,y:x,width:b.width,height:b.height});x+=Math.max(0,...a.map(a=>a.height))+e}return w}(d,{notation:j});for(let[b,c]of Object.entries(f))a[b]&&(a[b]={...a[b],...c});return a},[d,f,j]),L=(0,i.useMemo)(()=>d?function(a){let b=[],c=function(a){let b=new Map;for(let c of a.entities??[])c?.name&&!b.has(c.name)&&b.set(c.name,c);return b}(a),d=new Set;for(let[e,f]of(a.entities??[]).entries()){if(!f?.name){b.push({ruleId:"E001",message:`Entity at index ${e} has no name`,element:`entities[${e}]`});continue}d.has(f.name)&&b.push({ruleId:"E001",message:`Duplicate entity name "${f.name}"`,element:f.name}),d.add(f.name);let a=new Set;for(let[d,e]of(f.attributes??[]).entries()){if(!e?.name){b.push({ruleId:"E002",message:`Attribute at index ${d} of "${f.name}" has no name`,element:`${f.name}[${d}]`});continue}let g=`${f.name}.${e.name}`;if(a.has(e.name)&&b.push({ruleId:"E002",message:`Duplicate attribute "${g}"`,element:g}),a.add(e.name),e.references){let a=function(a){let b=a.indexOf(".");return b<0?{entity:a}:{entity:a.slice(0,b),attribute:a.slice(b+1)}}(e.references),d=c.get(a.entity);d?a.attribute&&!(d.attributes??[]).some(b=>b?.name===a.attribute)&&b.push({ruleId:"E005",message:`"${g}" references undefined attribute "${e.references}"`,element:g}):b.push({ruleId:"E005",message:`"${g}" references undefined entity "${a.entity}"`,element:g})}}}for(let[d,e]of(a.relationships??[]).entries()){let a=`relationships[${d}]`;for(let f of["from","to"]){let g=e?.[f];g&&c.has(g)||b.push({ruleId:"E003",message:`Relationship ${d} ${f} names undefined entity "${g??""}"`,element:a})}V.includes(e?.cardinality)||b.push({ruleId:"E004",message:`Relationship ${d} cardinality "${e?.cardinality??""}" is not one of ${V.join(", ")}`,element:a})}return b}(d):[],[d]),N=(0,i.useMemo)(()=>L.map(a=>(a.element??"").split(/[.[]/)[0]).filter(Boolean),[L]),O=(0,i.useCallback)(async a=>{let c;if(d&&b){try{c=a(d)}catch(a){return t(a instanceof Error?a.message:String(a),"warn")}e(c),I(null);try{let a=await fetch(`/api/file${(0,ci.docQuery)(b)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({content:JSON.stringify(c,null,2)+"\n"})});if(!a.ok)throw Error((await a.json())?.error??`HTTP ${a.status}`);J.current?.emitFull(c),t("saved")}catch(a){t(`not saved: ${a instanceof Error?a.message:String(a)}`,"warn")}}},[d,b,t]),Q=(0,i.useCallback)((a,c)=>{g(d=>{let e={...d,[a]:{x:Math.round(c.x),y:Math.round(c.y)}};try{localStorage.setItem(cF(b,j),JSON.stringify(e))}catch{}return e})},[b,j]),S=()=>{g({});try{localStorage.removeItem(cF(b,j))}catch{}o(a=>a+1)},T=async()=>{if(!d)return;t("checking links…");let a=await cI(b);if(0===a.length)return I("none"),x("problems"),z(!0),t("no .smdf.json beside this document to check against","warn");let c=a.flatMap(a=>(function(a,b){let c=[],d=new Map;for(let a of b.entities??[])a?.name&&!d.has(a.name)&&d.set(a.name,a);let e=a.settings?.name??"",f=a.settings?.objects??[],g=a.state?function a(b){let c=[b];for(let d of b.states??[])c.push(...a(d));for(let d of b.parallel?.states??[])c.push(...a(d));return c}(a.state):[],h=g.flatMap(a=>(a.transitions??[]).map(a=>a.condition??"")),i=new Map;for(let a of f){let e=d.get(a.class);if(e){i.set(a.instance,e);continue}h.some(b=>Y(b,a.instance).length>0)&&c.push({ruleId:"L001",message:`Object "${a.instance}" has class "${a.class}", which is not an entity in "${b.settings?.name??""}", and a guard reads its fields`,element:a.instance})}for(let a of g)for(let b of a.transitions??[])if(b.condition)for(let[d,e]of i)for(let f of Y(b.condition,d))(e.attributes??[]).some(a=>a?.name===f)||c.push({ruleId:"L002",message:`Guard on ${a.name} [${b.event}] reads "${d}.${f}", which is not an attribute of "${e.name}"`,element:a.name});if(e){let a=new Set([...i.values()].map(a=>a.name));for(let d of b.entities??[])for(let b of d?.attributes??[])b&&U(b).includes(e)&&(a.has(d.name)||c.push({ruleId:"L003",message:`"${d.name}.${b.name}" stores the state of "${e}", but "${d.name}" is not the class of any of that machine's objects`,element:`${d.name}.${b.name}`}))}return c})(a.def,d).map(b=>({...b,message:`${a.def.settings?.name??a.path}: ${b.message}`})));c.push(...function(a,b){let c=[];for(let d of a.entities??[])for(let a of d?.attributes??[])if(a)for(let e of U(a))b.includes(e)||c.push({ruleId:"L004",message:`"${d.name}.${a.name}" stores the state of "${e}", which is not among the machines checked (${b.join(", ")||"none"})`,element:`${d.name}.${a.name}`});return c}(d,a.map(a=>a.def.settings?.name??""))),I(c),x("problems"),z(!0),D(!1),t(`checked ${a.length} machine(s): ${c.length} problem(s)`,c.length?"warn":"ok")},W=async a=>{let c=(await cI(b)).find(b=>b.def.settings?.name===a);c?(0,ci.navigateToDoc)(c.path):t(`no .smdf.json beside this document defines '${a}'`,"warn")},aa=()=>{let a=E.current?.getBoundingClientRect();return{width:a?.width??0,height:a?.height??0}},ab=a=>{let{width:b,height:c}=aa();m(d=>P(d,a,{x:b/2,y:c/2}))},ac=d?.entities.find(a=>a.name===p)??null,ad=b.split("/").pop()||"…",ag=Array.isArray(H)?H:[],ak=L.length+ag.length,am=[{id:"entities",label:"Entities",icon:"▭"},{id:"relations",label:"Relations",icon:"⟷"},{id:"problems",label:"Problems",icon:"⚠",badge:ak||void 0}],an=a=>w===a?"":"hidden md:block",ao=()=>{d&&navigator.clipboard?.writeText(function(a){let b=["erDiagram"],c=" ",d=new Set;for(let e of a.relationships??[]){if(!e?.from||!e?.to)continue;let a=af[e.cardinality]??af["1:N"];b.push(`${c}${ah(e.from)} ${a} ${ah(e.to)} : ${aj(e.label??"")}`),d.add(e.from),d.add(e.to)}let e=new Set;for(let f of a.entities??[]){if(!f?.name||e.has(f.name))continue;e.add(f.name);let a=(f.attributes??[]).filter(a=>a?.name);if(0===a.length){d.has(f.name)||b.push(`${c}${ah(f.name)}`);continue}for(let d of(b.push(`${c}${ah(f.name)} {`),a))b.push(`${c}${c}${function(a){let b=[];"pk"===a.key&&b.push("PK"),"uk"===a.key&&b.push("UK"),a.references&&b.push("FK");let c=[],d=U(a);d.length&&c.push(`stateOf ${d.join(", ")}`),a.description&&c.push(a.description);let e=[ai(a.type??"","unknown"),ai(a.name,"unnamed")];return b.length&&e.push(b.join(", ")),c.length&&e.push(aj(c.join(" — "))),e.join(" ")}(d)}`);b.push(`${c}}`)}return b.join("\n")}(d)).then(()=>t("mermaid copied"))};return(0,h.jsxs)("div",{className:"app-shell dock-offset flex flex-col overflow-hidden bg-gray-950 text-gray-200",onClick:()=>A&&B(!1),children:[(0,h.jsxs)("header",{className:"relative z-40 flex items-center gap-2 border-b border-gray-800 bg-gray-900 px-2 py-1.5 text-xs md:px-3 md:py-2",children:[(0,h.jsx)("span",{className:"font-semibold text-blue-300",children:"ERD"}),(0,h.jsx)(cj,{}),(0,h.jsxs)("span",{className:"min-w-0 flex-1 truncate text-gray-400",title:b,children:[d?.settings.name??ad,(0,h.jsxs)("span",{className:"hidden text-gray-600 lg:inline",children:[" · ",ad]})]}),(0,h.jsx)("span",{className:"inline-flex shrink-0 overflow-hidden rounded border border-gray-700",role:"group","aria-label":"Notation",children:[["crowsfoot","▤","Crow's foot — attributes listed inside the entity box"],["chen","◇","Chen — attributes as ovals, relationships as diamonds"]].map(([a,c,d])=>(0,h.jsx)("button",{title:d,"aria-label":d,"aria-pressed":j===a,onClick:()=>(a=>{if(a!==j){try{localStorage.setItem(cG,a)}catch{}k(a),g(cH(b,a)),o(a=>a+1)}})(a),className:`px-2.5 py-1.5 text-sm leading-none md:px-2 md:py-1 ${j===a?"bg-blue-900/60 text-blue-200":"bg-gray-800 text-gray-400 hover:bg-gray-700"}`,children:c},a))}),(0,h.jsxs)("div",{className:"hidden shrink-0 items-center gap-2 md:flex",children:[(0,h.jsx)("button",{className:cK,onClick:S,title:"Forget the dragged positions and lay the board out again",children:"⤢ Arrange"}),(0,h.jsx)("button",{className:cK,onClick:T,title:"Check the state machines beside this document against it",children:"Check links"}),(0,h.jsx)("button",{className:cK,onClick:ao,children:"Copy mermaid"}),(0,h.jsx)("button",{className:cK,onClick:()=>D(a=>!a),"aria-pressed":!C,title:C?"Show the panel":"Hide the panel — the board takes the full width",children:C?"⟨ Panel":"Panel ⟩"})]}),(0,h.jsxs)("div",{className:"relative shrink-0 md:hidden",children:[(0,h.jsx)("button",{className:"rounded border border-gray-700 bg-gray-800 px-3 py-1.5 text-sm leading-none text-gray-200","aria-label":"More actions","aria-expanded":A,onClick:a=>{a.stopPropagation(),B(a=>!a)},children:"⋯"}),A&&(0,h.jsx)("div",{className:"absolute right-0 top-full z-50 mt-1 w-56 overflow-hidden rounded-lg border border-gray-700 bg-gray-900 py-1 shadow-xl",children:[["⤢ Arrange the board",S],["Check links to the machines",T],["Copy as mermaid",ao]].map(([a,b])=>(0,h.jsx)("button",{className:"block w-full px-4 py-3 text-left text-sm text-gray-200 hover:bg-gray-800",onClick:()=>{B(!1),b()},children:a},a))})]})]}),(0,h.jsxs)("div",{className:"relative flex min-h-0 flex-1",children:[(0,h.jsxs)("div",{ref:E,className:"relative min-w-0 flex-1 overflow-hidden",children:[d&&(0,h.jsx)(aC,{definition:d,notation:j,positions:K,viewport:l,onViewportChange:m,selection:p,errorElements:N,fitKey:n,onSelect:q,onClearSelection:()=>q(null),onEntityMove:Q,onOpenMachine:W,emptyHint:"No entities yet — add one in the panel, or let an agent call add_entity."}),(0,h.jsxs)("div",{className:`pointer-events-none absolute left-2 top-2 flex max-w-[75%] items-center gap-1.5 rounded bg-gray-950/70 px-1.5 py-0.5 text-[11px] ${"warn"===r.tone?"text-amber-300":"text-gray-500"}`,role:"status",children:[(0,h.jsx)("span",{className:`h-1.5 w-1.5 shrink-0 rounded-full ${"warn"===r.tone?"bg-amber-400":"bg-emerald-500"}`}),(0,h.jsxs)("span",{className:`truncate transition-opacity duration-500 ${u&&"ok"===r.tone?"opacity-0":"opacity-100"}`,children:[r.text,F>1?` \xb7 ${F} in the room`:""]})]}),(0,h.jsx)("div",{className:"absolute bottom-3 right-3 flex flex-col overflow-hidden rounded-lg border border-gray-700 bg-gray-900/90 shadow-lg backdrop-blur",children:[["+","Zoom in",()=>ab(1.25)],["−","Zoom out",()=>ab(.8)],["⛶","Fit the whole diagram",()=>o(a=>a+1)]].map(([a,b,c])=>(0,h.jsx)("button",{title:b,"aria-label":b,onClick:c,className:"h-10 w-10 border-b border-gray-800 text-base leading-none text-gray-200 last:border-b-0 hover:bg-gray-800 md:h-8 md:w-8 md:text-sm",children:a},b))}),ac&&!y&&(0,h.jsxs)("button",{className:"absolute bottom-3 left-1/2 max-w-[60%] -translate-x-1/2 truncate rounded-full border border-blue-500/60 bg-gray-900/95 px-4 py-2 text-sm text-blue-200 shadow-lg md:hidden",onClick:()=>{x("entities"),z(!0)},children:["✎ ",ac.name]})]}),y&&(0,h.jsx)("div",{className:"fixed inset-0 z-20 bg-black/50 md:hidden",onClick:()=>z(!1),"aria-hidden":"true"}),d&&(0,h.jsxs)("aside",{className:`safe-x fixed inset-x-0 bottom-0 z-30 flex h-[62dvh] flex-col overflow-hidden rounded-t-2xl border-t border-gray-800 bg-gray-900 shadow-2xl transition-transform duration-200 ease-out ${y?"translate-y-0":"pointer-events-none translate-y-full"} md:pointer-events-auto md:static md:z-auto md:h-auto md:w-80 md:translate-y-0 md:rounded-none md:border-l md:border-t-0 md:shadow-none md:transition-none ${C?"md:hidden":""}`,children:[(0,h.jsxs)("div",{className:"md:hidden",children:[(0,h.jsx)("div",{className:"flex justify-center pb-1 pt-2",children:(0,h.jsx)("span",{className:"h-1 w-10 rounded-full bg-gray-700"})}),(0,h.jsxs)("div",{className:"flex items-center justify-between border-b border-gray-800 px-4 pb-2",children:[(0,h.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:am.find(a=>a.id===w)?.label}),(0,h.jsx)("button",{onClick:()=>z(!1),className:"-mr-2 px-3 py-2 text-lg text-gray-400","aria-label":"Close panel",children:"✕"})]})]}),(0,h.jsxs)("div",{className:"touch-targets dock-offset flex-1 overflow-y-auto overscroll-contain p-3",children:[(0,h.jsxs)("section",{className:an("entities"),children:[(0,h.jsx)("div",{className:cL,style:{marginTop:0},children:"Entities"}),(0,h.jsx)("div",{className:"flex flex-wrap gap-1",children:d.entities.map(a=>(0,h.jsx)("button",{className:`${cK} ${p===a.name?"border-blue-500 text-blue-300":""}`,onClick:()=>q(a.name),children:a.name},a.name))}),(0,h.jsx)(cN,{fields:[{name:"name",placeholder:"new entity"}],submit:"+ Entity",onSubmit:a=>{O(b=>(function(a,b){if(!b.name?.trim())throw Error("An entity needs a name.");let c=Z(a);if(c.entities.some(a=>a.name===b.name))throw Error(`Entity '${b.name}' already exists.`);return c.entities.push(_({...b,attributes:b.attributes??[]})),c})(b,{name:a.name.trim()})),q(a.name.trim())}}),ac&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsxs)("div",{className:`${cL} flex items-center justify-between gap-2`,children:[(0,h.jsx)("span",{className:"truncate text-sm normal-case tracking-normal text-gray-200",children:ac.name}),(0,h.jsx)("button",{className:`${cK} normal-case tracking-normal`,onClick:()=>(a=>{let b=K[a],{width:c,height:d}=aa();b&&c&&(m(R([b],c,d,{padding:28,maxScale:1.25})),q(a),z(!1))})(ac.name),title:"Bring this entity to the middle of the board at a readable size",children:"◎ Show on board"})]}),(0,h.jsxs)("label",{className:"mb-1 flex items-center gap-2 text-[11px] text-gray-400",title:"Exists only through another entity (an order line, without its order). Chen draws it as a double rectangle.",children:[(0,h.jsx)("input",{type:"checkbox",checked:!!ac.weak,onChange:a=>O(b=>{var c,d;let e,f;return c=ac.name,d={weak:a.target.checked},f=$(e=Z(b),c),void 0!==d.description&&(d.description?f.description=d.description:delete f.description),void 0!==d.weak&&(d.weak?f.weak=!0:delete f.weak),e})}),"weak entity"]}),(ac.attributes??[]).map(a=>(0,h.jsxs)("div",{className:"flex items-center justify-between gap-2 py-0.5 font-mono text-[11px]",children:[(0,h.jsxs)("span",{className:a.stateOf?"text-blue-300":"text-gray-300",children:[a.name," : ",a.type,(0,h.jsxs)("span",{className:"text-gray-500",children:[a.key?` ${a.key.toUpperCase()}`:"",a.references?` → ${a.references}`:"",a.stateOf?` ◉ ${[a.stateOf].flat().join(", ")}`:""]})]}),(0,h.jsx)("button",{className:"text-gray-500 hover:text-red-400","aria-label":`Remove ${a.name}`,onClick:()=>O(b=>(function(a,b,c){let d=Z(a),e=$(d,b),f=e.attributes?.length??0;if(e.attributes=(e.attributes??[]).filter(a=>a.name!==c),e.attributes.length===f)throw Error(`Attribute '${b}.${c}' not found.`);return d})(b,ac.name,a.name)),children:"✕"})]},a.name)),(0,h.jsx)(cN,{fields:[{name:"name",placeholder:"attribute"},{name:"type",placeholder:"type",initial:"string"},{name:"key",options:["","pk","uk"]},{name:"references",placeholder:"references Entity.attr"},{name:"stateOf",placeholder:"stateOf Machine"}],submit:"+ Attribute",onSubmit:a=>O(b=>(function(a,b,c){if(!c.name?.trim())throw Error("An attribute needs a name.");let d=Z(a),e=$(d,b);if(e.attributes??=[],e.attributes.some(a=>a.name===c.name))throw Error(`Attribute '${b}.${c.name}' already exists.`);return e.attributes.push(_({...c})),d})(b,ac.name,{name:a.name.trim(),type:a.type.trim()||"string",key:"pk"===a.key||"uk"===a.key?a.key:void 0,references:a.references.trim()||void 0,stateOf:a.stateOf.trim()||void 0}))}),(0,h.jsxs)("button",{className:`${cK} mt-2 text-red-300`,onClick:()=>{O(a=>{var b;let c;return b=ac.name,$(c=Z(a),b),c.entities=c.entities.filter(a=>a.name!==b),c.relationships=c.relationships.filter(a=>a.from!==b&&a.to!==b),c}),q(null)},children:["🗑 Delete ",ac.name]})]})]}),(0,h.jsxs)("section",{className:an("relations"),children:[(0,h.jsx)("div",{className:`${cL} max-md:mt-0`,children:"Relationships"}),0===d.relationships.length&&(0,h.jsx)("div",{className:"py-0.5 text-[11px] text-gray-600",children:"None yet."}),d.relationships.map((a,b)=>(0,h.jsxs)("div",{className:"flex items-center justify-between gap-2 py-0.5 text-[11px] text-gray-300",children:[(0,h.jsxs)("span",{children:[a.from," ",(0,h.jsx)("span",{className:"text-gray-500",children:a.cardinality})," ",a.to,a.label?(0,h.jsxs)("span",{className:"text-gray-500",children:[" : ",a.label]}):null]}),(0,h.jsx)("button",{className:"text-gray-500 hover:text-red-400","aria-label":"Remove relationship",onClick:()=>O(b=>(function(a,b,c,d){let e=Z(a),f=e.relationships.length;if(e.relationships=e.relationships.filter(a=>a.from!==b||a.to!==c||void 0!==d&&a.label!==d),e.relationships.length===f)throw Error(`No relationship from '${b}' to '${c}'${void 0===d?"":` labelled '${d}'`}.`);return e})(b,a.from,a.to,a.label)),children:"✕"})]},b)),d.entities.length>0&&(0,h.jsx)(cN,{fields:[{name:"from",options:d.entities.map(a=>a.name)},{name:"cardinality",options:[...V],initial:"1:N"},{name:"to",options:d.entities.map(a=>a.name)},{name:"label",placeholder:"label (a verb)"}],submit:"+ Relationship",onSubmit:a=>O(b=>(function(a,b){let c=Z(a);if($(c,b.from),$(c,b.to),!V.includes(b.cardinality))throw Error(`Cardinality '${b.cardinality}' is not one of ${V.join(", ")}.`);return c.relationships.push(_({...b})),c})(b,{from:a.from,to:a.to,cardinality:a.cardinality,label:a.label.trim()||void 0}))})]}),(0,h.jsxs)("section",{className:an("problems"),children:[(0,h.jsx)("div",{className:`${cL} max-md:mt-0 ${0===ak&&!H?"md:hidden":""}`,children:"Problems"}),L.map((a,b)=>(0,h.jsxs)("div",{className:"py-0.5 text-[11px] text-red-300",children:["[",a.ruleId,"] ",a.message]},`p${b}`)),ag.map((a,b)=>(0,h.jsxs)("div",{className:"py-0.5 text-[11px] text-amber-300",children:["[",a.ruleId,"] ",a.message]},`l${b}`)),"none"===H&&(0,h.jsx)("div",{className:"py-0.5 text-[11px] text-amber-300",children:"No state machine (.smdf.json) sits beside this document, so there was nothing to check it against."}),0===ak&&"none"!==H&&(0,h.jsx)("div",{className:`py-0.5 text-[11px] ${H?"text-green-400":"text-gray-600 md:hidden"}`,children:H?"Every name the machines use resolves.":"The document is valid. “Check links” (⋯) holds the state machines beside it against it."})]})]})]})]}),(0,h.jsx)("nav",{className:"dock-safe safe-x fixed inset-x-0 bottom-0 z-40 flex border-t border-gray-800 bg-gray-900/95 backdrop-blur-md md:hidden",children:am.map(a=>{let b=y&&w===a.id;return(0,h.jsxs)("button",{onClick:()=>{var b;return b=a.id,void(z(a=>!(a&&w===b)),x(b))},"aria-pressed":b,className:`relative flex h-14 flex-1 flex-col items-center justify-center gap-0.5 text-[11px] transition-colors ${b?"text-blue-400":"text-gray-500"}`,children:[(0,h.jsx)("span",{className:"text-base leading-none",children:a.icon}),(0,h.jsx)("span",{children:a.label}),void 0!==a.badge&&(0,h.jsx)("span",{className:"absolute right-1/2 top-1 min-w-[16px] translate-x-5 rounded-full bg-red-600 px-1 text-[10px] leading-4 text-white",children:a.badge}),b&&(0,h.jsx)("span",{className:"absolute inset-x-4 top-0 h-0.5 rounded-full bg-blue-400"})]},a.id)})})]})}function cN({fields:a,submit:b,onSubmit:c}){let d=()=>Object.fromEntries(a.map(a=>[a.name,a.initial??a.options?.[0]??""])),[e,f]=(0,i.useState)(d),g=a[0];return(0,h.jsxs)("form",{className:"mt-1 grid grid-cols-2 gap-1",onSubmit:b=>{b.preventDefault();let h={...d(),...e};h[g.name]?.trim()&&(c(h),f(b=>Object.fromEntries(a.map(a=>[a.name,a.options?b[a.name]??"":a.initial??""]))))},children:[a.map(a=>a.options?(0,h.jsx)("select",{className:cJ,"aria-label":a.name,value:e[a.name]??"",onChange:b=>f(c=>({...c,[a.name]:b.target.value})),children:a.options.map(b=>(0,h.jsx)("option",{value:b,children:b||`(${a.name})`},b))},a.name):(0,h.jsx)("input",{className:cJ,"aria-label":a.name,placeholder:a.placeholder,value:e[a.name]??"",onChange:b=>f(c=>({...c,[a.name]:b.target.value}))},a.name)),(0,h.jsx)("button",{type:"submit",className:`${cK} ${1===a.length?"":"col-span-2"}`,children:b})]})}function cO(){let a=(0,ci.useRequestedDoc)(),[b,c]=(0,i.useState)(null);(0,i.useEffect)(()=>{let a=!0;return cr().then(b=>{a&&c(b.projectFile&&W(b.projectFile)?"erd":"machine")}),()=>{a=!1}},[]);let d=a?W(a)?"erd":"machine":b;return null===d?(0,h.jsx)("div",{className:"app-shell bg-gray-950"}):"erd"===d?(0,h.jsx)(cM,{}):(0,h.jsx)(cP,{})}function cP(){let[a,b]=(0,i.useState)("properties"),[c,d]=(0,i.useState)(!1),e=b$(a=>a.errors),f=b$(a=>a.contextMenu),g=b$(a=>a.hideContextMenu),j=b$(a=>a.addState),k=b$(a=>a.removeState),l=b$(a=>a.setDrawMode),m=b$(a=>a.setDrawSource),n=[{id:"properties",label:"Properties",icon:"🎛"},{id:"events",label:"Events",icon:"⚡"},{id:"settings",label:"Settings",icon:"⚙"},{id:"validation",label:"Errors",icon:"⚠",badge:e.length||void 0}],o=n.find(b=>b.id===a)?.label??"";return(0,h.jsxs)("div",{className:"app-shell dock-offset flex flex-col overflow-hidden",onClick:()=>f.visible&&g(),children:[(0,h.jsx)(cs,{}),(0,h.jsx)(cE,{}),(0,h.jsx)(cl,{}),(0,h.jsxs)("div",{className:"flex flex-1 min-h-0 overflow-hidden relative",children:[(0,h.jsx)("div",{className:"flex-1 overflow-hidden",children:(0,h.jsx)(cb,{})}),c&&(0,h.jsx)("div",{className:"fixed inset-0 z-20 bg-black/50 md:hidden",onClick:()=>d(!1),"aria-hidden":"true"}),(0,h.jsxs)("aside",{className:`safe-x fixed inset-x-0 bottom-0 z-30 h-[70dvh] flex flex-col overflow-hidden rounded-t-2xl border-t border-gray-800 bg-gray-900 shadow-2xl transition-transform duration-200 ease-out ${c?"translate-y-0":"translate-y-full pointer-events-none"} md:static md:z-auto md:h-auto md:w-80 md:translate-y-0 md:pointer-events-auto md:rounded-none md:border-t-0 md:border-l md:shadow-none md:transition-none`,children:[(0,h.jsxs)("div",{className:"md:hidden",children:[(0,h.jsx)("div",{className:"flex justify-center pt-2 pb-1",children:(0,h.jsx)("span",{className:"h-1 w-10 rounded-full bg-gray-700"})}),(0,h.jsxs)("div",{className:"flex items-center justify-between border-b border-gray-800 px-4 pb-2",children:[(0,h.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:o}),(0,h.jsx)("button",{onClick:()=>d(!1),className:"-mr-2 px-3 py-2 text-lg text-gray-400","aria-label":"Close panel",children:"✕"})]})]}),(0,h.jsx)("div",{className:"hidden border-b border-gray-800 md:flex",children:n.map(c=>(0,h.jsxs)("button",{onClick:()=>b(c.id),className:`flex-1 text-xs py-2 px-1 text-center transition-colors relative ${a===c.id?"text-blue-400 border-b-2 border-blue-400 bg-gray-800/50":"text-gray-500 hover:text-gray-300"}`,children:[c.label,void 0!==c.badge&&c.badge>0&&(0,h.jsx)("span",{className:"absolute top-1 right-1 bg-red-600 text-white text-[9px] rounded-full px-1 min-w-[14px]",children:c.badge})]},c.id))}),(0,h.jsxs)("div",{className:"touch-targets dock-offset flex-1 overflow-y-auto overscroll-contain",children:["properties"===a&&(0,h.jsx)(cd,{}),"events"===a&&(0,h.jsx)(cf,{}),"settings"===a&&(0,h.jsx)(cg,{}),"validation"===a&&(0,h.jsx)(ch,{})]})]}),(0,h.jsx)(cm,{})]}),(0,h.jsx)("nav",{className:"dock-safe safe-x fixed inset-x-0 bottom-0 z-40 flex border-t border-gray-800 bg-gray-900/95 backdrop-blur-md md:hidden",children:n.map(e=>{let f=c&&a===e.id;return(0,h.jsxs)("button",{onClick:()=>{var c;return c=e.id,void(d(b=>!(b&&a===c)),b(c))},"aria-pressed":f,className:`relative flex h-14 flex-1 flex-col items-center justify-center gap-0.5 text-[11px] transition-colors ${f?"text-blue-400":"text-gray-500"}`,children:[(0,h.jsx)("span",{className:"text-base leading-none",children:e.icon}),(0,h.jsx)("span",{children:e.label}),void 0!==e.badge&&e.badge>0&&(0,h.jsx)("span",{className:"absolute top-1 right-1/2 translate-x-4 rounded-full bg-red-600 px-1 text-[10px] leading-4 text-white min-w-[16px]",children:e.badge}),f&&(0,h.jsx)("span",{className:"absolute inset-x-4 top-0 h-0.5 rounded-full bg-blue-400"})]},e.id)})}),f.visible&&(0,h.jsx)("div",{className:"fixed z-50 bg-gray-900 border border-gray-700 rounded-lg shadow-xl py-1 min-w-[180px] md:min-w-[140px]",style:{left:f.x,top:f.y,maxWidth:"calc(100vw - 1rem)",maxHeight:"calc(100dvh - 1rem)",overflowY:"auto",transform:"translate(0, 0)"},onClick:a=>a.stopPropagation(),children:f.target?.kind==="state"?(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)("button",{className:"block w-full text-left text-sm text-gray-300 hover:bg-gray-800 px-4 py-3 md:text-xs md:px-3 md:py-1.5",onClick:()=>{l("transition"),m(f.target.id),g()},children:"↗ Draw transition from here"}),(0,h.jsx)("button",{className:"block w-full text-left text-sm text-red-400 hover:bg-gray-800 px-4 py-3 md:text-xs md:px-3 md:py-1.5",onClick:()=>{f.target?.id&&k(f.target.id),g()},children:"🗑 Delete state"})]}):(0,h.jsx)(h.Fragment,{children:(0,h.jsx)("button",{className:"block w-full text-left text-sm text-gray-300 hover:bg-gray-800 px-4 py-3 md:text-xs md:px-3 md:py-1.5",onClick:()=>{let a=prompt("State name:");a&&j(null,{name:a,kind:"normal"}),g()},children:"+ Add state here"})})})]})}a.s(["default",()=>cO],95421)}];
|
|
11
|
+
${a}`)}l(!0)};return(0,h.jsxs)("div",{className:"flex flex-col gap-1.5 px-2 py-1.5 bg-gray-900 border-b border-gray-800 md:flex-row md:flex-wrap md:items-center md:px-3",children:[(0,h.jsxs)("div",{className:"toolbar-ident",children:[(0,h.jsx)("input",{ref:A,type:"file",accept:".json,.smdf.json",onChange:a=>{let b=a.target.files?.[0];if(!b)return;let c=new FileReader;c.onload=a=>{e(a.target?.result,b.name)},c.readAsText(b),a.target.value=""},className:"hidden"}),(0,h.jsxs)("span",{className:"text-xs text-gray-400 mr-1 truncate max-w-[50vw] md:max-w-none",children:[b??"untitled.smdf.json",d&&(0,h.jsx)("span",{className:"text-yellow-500 ml-0.5",children:"●"})]}),(0,h.jsx)(cl,{}),"synced"===u&&(0,h.jsx)("span",{className:"text-[10px] text-emerald-500",title:"In sync with disk",children:"⌁ synced"}),"remote-changed"===u&&(0,h.jsx)("span",{className:"text-[10px] text-amber-400",title:v??"",children:"↻ remote changed"}),"error"===u&&(0,h.jsx)("span",{className:"text-[10px] text-red-400",title:v??"",children:"⚠ disk error"}),"idle"===u&&(0,h.jsx)("span",{className:"text-[10px] text-gray-600",title:v??"No file bound",children:"○ no disk"}),(0,h.jsx)(cm,{}),(0,h.jsx)("div",{className:"flex-1"})]}),(0,h.jsxs)("div",{className:"toolbar-strip",children:[(0,h.jsx)("button",{onClick:q,disabled:0===s.length,className:"toolbar-btn disabled:opacity-30",title:"Undo (Ctrl+Z)",children:"↩"}),(0,h.jsx)("button",{onClick:r,disabled:0===t.length,className:"toolbar-btn disabled:opacity-30",title:"Redo (Ctrl+Y)",children:"↪"}),(0,h.jsx)("div",{className:"w-px h-4 bg-gray-700"}),(0,h.jsx)("button",{onClick:p,className:"toolbar-btn",title:"Arrange states into layers (auto-layout)",children:"⤢ Arrange"}),(0,h.jsx)("div",{className:"w-px h-4 bg-gray-700"}),(0,h.jsx)("button",{onClick:()=>o("select"===n?"transition":"select"),className:`toolbar-btn ${"transition"===n?"!bg-amber-700 !text-white":""}`,title:"transition"===n?"Exit draw mode (Esc)":"Draw transition mode",children:"transition"===n?"✏️ Drawing":"↗ Draw"}),(0,h.jsx)("div",{className:"w-px h-4 bg-gray-700"}),(0,h.jsx)("button",{onClick:()=>A.current?.click(),className:"toolbar-btn",title:"Open local .smdf.json (browser)",children:"📂"}),(0,h.jsx)("button",{onClick:P,disabled:F,className:"toolbar-btn disabled:opacity-40",title:"Save to disk (STATELOOM_PROJECT_FILE)",children:"💾 Disk"}),(0,h.jsx)("button",{onClick:R,className:"toolbar-btn",title:"Reload from disk",children:"🔄"}),(0,h.jsx)("button",{onClick:()=>{let a=new Blob([f()],{type:"application/json"}),c=URL.createObjectURL(a),d=document.createElement("a");d.href=c,d.download=b??"statemachine.smdf.json",d.click(),URL.revokeObjectURL(c)},className:"toolbar-btn",title:"Download as file",children:"📥"}),(0,h.jsx)("select",{value:H,onChange:a=>{I(a.target.value),O(null),M(null)},className:"bg-gray-800 border border-gray-700 rounded text-xs text-gray-300 px-1 py-0.5",title:"Export format",children:b6.map(a=>(0,h.jsx)("option",{value:a,children:b7[a]},a))}),(0,h.jsx)("button",{onClick:Q,disabled:J,className:`toolbar-btn disabled:opacity-40 ${L?"!text-red-400":""}`,title:L??`Export the board as ${b7[H]}`,children:J?"…":"🖼 Export"}),N&&!L&&(0,h.jsxs)("span",{className:"text-[10px] text-emerald-500 truncate max-w-[40vw] md:max-w-[16rem]",title:N,children:["⤓ ",N]}),(0,h.jsx)("div",{className:"w-px h-4 bg-gray-700"}),B?(0,h.jsxs)("div",{className:"flex items-center gap-1",children:[(0,h.jsx)("input",{autoFocus:!0,className:"bg-gray-800 border border-gray-700 rounded px-2 py-0.5 text-xs text-gray-200 w-32 md:w-24",placeholder:"State name...",value:D,onChange:a=>E(a.target.value),onKeyDown:a=>{"Enter"===a.key&&S(),"Escape"===a.key&&C(!1)}}),(0,h.jsx)("button",{onClick:S,className:"toolbar-btn-sm",children:"✓"}),(0,h.jsx)("button",{onClick:()=>C(!1),className:"toolbar-btn-sm",children:"✕"})]}):(0,h.jsx)("button",{onClick:()=>C(!0),className:"toolbar-btn",children:"+State"}),(0,h.jsx)("div",{className:"w-px h-4 bg-gray-700"}),(0,h.jsx)("button",{onClick:()=>j(),className:"toolbar-btn",children:"✓ Validate"}),(0,h.jsxs)("select",{value:T,onChange:a=>U(a.target.value),className:"bg-gray-800 border border-gray-700 rounded text-xs text-gray-300 px-1 py-0.5",children:[(0,h.jsx)("option",{value:"python",children:"Python"}),(0,h.jsx)("option",{value:"typescript",children:"TypeScript"})]}),(0,h.jsx)("button",{onClick:W,className:"toolbar-btn",children:"⚡ Generate"}),(0,h.jsx)("button",{onClick:V,className:"toolbar-btn",title:"Generate RISE rispec markdown",children:"📜 RISE"}),(0,h.jsxs)("button",{onClick:()=>l(!k),className:`toolbar-btn ${k?"text-blue-400":""}`,children:["</>"," Code"]})]})]})}function co(){let a=b0(a=>a.generatedCode),b=b0(a=>a.showCodePreview),c=b0(a=>a.setShowCodePreview);return b?(0,h.jsx)("div",{className:"absolute inset-0 z-50 flex items-center justify-center bg-black/60 p-2 md:p-0",children:(0,h.jsxs)("div",{className:"bg-gray-900 border border-gray-700 rounded-lg shadow-xl w-full max-h-[85dvh] md:w-[80%] md:max-w-3xl md:max-h-[80dvh] flex flex-col",children:[(0,h.jsxs)("div",{className:"flex items-center justify-between px-4 py-2 border-b border-gray-800",children:[(0,h.jsx)("h3",{className:"text-sm font-semibold text-gray-300",children:"Generated Definition (JSON)"}),(0,h.jsx)("button",{onClick:()=>c(!1),className:"text-gray-500 hover:text-gray-300 text-lg min-h-11 min-w-11 md:min-h-0 md:min-w-0","aria-label":"Close preview",children:"✕"})]}),(0,h.jsx)("pre",{className:"flex-1 overflow-auto overscroll-contain p-4 text-[11px] leading-relaxed text-green-400 font-mono md:text-sm",children:a??"No code generated yet"}),(0,h.jsx)("div",{className:"flex justify-end px-4 py-2 border-t border-gray-800",children:(0,h.jsx)("button",{onClick:()=>{a&&navigator.clipboard.writeText(a)},className:"text-xs bg-gray-700 hover:bg-gray-600 text-gray-300 px-4 py-3 rounded md:px-3 md:py-1",children:"Copy to Clipboard"})})]})}):null}function cp(){let a=b0(a=>a.applyRemote),b=b0(a=>a.setRemoteStatus),c=b0(a=>a.setRemoteMtime),d=(0,ck.useRequestedDoc)();return(0,i.useEffect)(()=>{let e=!1,f=(0,ck.docQuery)(d);async function g(){try{let a=await fetch(`/api/file${f}`,{cache:"no-store"});if(!a.ok)return null;return await a.json()}catch{return null}}(async()=>{let c=await g();e||(c?.path&&b0.getState().setDocPath(c.path),c?.exists&&c.content?a(c.content,c.mtime,c.path.split("/").pop()):b("idle",c?`No file at ${c.path}`:null))})();let h=new EventSource(`/api/watch${f}`);return h.addEventListener("hello",a=>{try{let b=JSON.parse(a.data);"number"==typeof b?.mtime&&c(b.mtime)}catch{}}),h.addEventListener("change",async d=>{let e=0;try{e=JSON.parse(d.data)?.mtime??0}catch{}if(e<=(b0.getState().remoteMtime??0))return;let f=await g();f?.exists&&f.content&&(b0.getState().dirty?(b("remote-changed",`Disk changed at ${new Date(f.mtime).toLocaleTimeString()} — local has unsaved edits`),c(f.mtime)):a(f.content,f.mtime,f.path.split("/").pop()))}),h.addEventListener("error",()=>{b("error","Watch stream disconnected")}),()=>{e=!0,h.close()}},[a,b,c,d]),null}function cq({url:a}){let b=(0,ck.useRequestedDoc)();return(0,i.useEffect)(()=>{if(!a)return;let c=!1,d=null,e=null,f=null,g=null;return(async()=>{let h="";try{let a=await fetch(`/api/file${(0,ck.docQuery)(b)}`,{cache:"no-store"});a.ok&&(h=(await a.json())?.path??"")}catch{}c||(h&&b0.getState().setDocPath(h),(d=bS({url:a,role:"web",docId:h,name:"web-designer",onFull:a=>{b0.getState().applyRemote(JSON.stringify({stateMachine:a.def}),a.mtime??Date.now(),h&&h.split("/").pop()||void 0),g=a.def},onPatch:a=>{b0.getState().applyRemoteOps(a.ops,a.mtime??Date.now(),a.seq),g=b0.getState().definition},onPresence:a=>{b0.getState().setPresence(a)}})).connect(),e=b0.subscribe((a,b)=>{a.definition===b.definition||a._applyingRemote||(f&&clearTimeout(f),f=setTimeout(()=>{var a,b;let c,e;if(!d||"connected"!==d.getSnapshot().status)return;let f=b0.getState().definition;if(null===g){d.emitFull(f),g=f;return}let h=(a=g,b=f,c=a??{settings:{namespace:"",asynchronous:!1},events:[],state:{name:b.state.name,states:[]}},function(a,b,c){let d={},e=!1,f=new Set([...Object.keys(a.settings),...Object.keys(b.settings)]),g=a.settings,h=b.settings;for(let a of f)q(g[a],h[a])||void 0===h[a]||(d[a]=h[a],e=!0);void 0!==a.settings.notes&&void 0===b.settings.notes&&(d.notes="",e=!0),e&&c.push({op:"settings.update",patch:d})}(c,b,e=[]),function(a,b,c){let d=a.events,e=b.events,f=Math.min(d.length,e.length);for(let a=0;a<f;a++)!function(a,b,c,d){let e={},f=!1;for(let a of["name","file","feeder","description","timers"])q(b[a],c[a])||void 0===c[a]||(e[a]=c[a],f=!0);f&&d.push({op:"eventSource.update",index:a,patch:e});let g=b.events??[],h=c.events??[],i=new Set(h.map(a=>a.id));for(let a of g)i.has(a.id)||d.push({op:"event.remove",id:a.id});let j=g.filter(a=>i.has(a.id)),k=0;for(;k<h.length;){let b=h[k];k<j.length&&j[k].id===b.id?(function(a,b,c){let d={},e=!1;for(let c of["name","description","preAction","postAction"])q(a[c],b[c])||void 0===b[c]||(d[c]=b[c],e=!0);e&&c.push({op:"event.update",id:b.id,patch:d})}(j[k],b,d),function(a,b,c,d){let e=Math.min(b.length,c.length);for(let f=0;f<e;f++)if(!q(b[f],c[f])){let e={};b[f].name!==c[f].name&&(e.name=c[f].name),b[f].type!==c[f].type&&(e.type=c[f].type),d.push({op:"parameter.update",eventId:a,index:f,patch:e})}for(let b=e;b<c.length;b++)d.push({op:"parameter.add",eventId:a,parameter:c[b],index:b});for(let e=b.length-1;e>=c.length;e--)d.push({op:"parameter.remove",eventId:a,index:e})}(b.id,j[k].parameters??[],b.parameters??[],d)):(d.push({op:"event.add",sourceIndex:a,event:b,index:k}),j.splice(k,0,b)),k++}}(a,d[a],e[a],c);for(let a=d.length;a<e.length;a++)c.push({op:"eventSource.add",source:e[a]});for(let a=d.length-1;a>=e.length;a--)c.push({op:"eventSource.remove",index:a})}(c,b,e),function(a,b,c){let d=o(a.state),e=o(b.state),f=new Map(d.map(a=>[a.name,a])),g=new Map(e.map(a=>[a.name,a])),h=p(a.state),i=p(b.state),j=[];for(let a of e){if(f.has(a.name))continue;let b=i.get(a.name)??null,{states:d,transitions:e,...g}=a;c.push({op:"state.add",parent:b,state:{...g}}),e&&e.length>0&&j.push({state:a.name,transitions:e})}for(let a of e){if(!f.has(a.name))continue;let b=h.get(a.name)??null,d=i.get(a.name)??null;b!==d&&null!==d&&c.push({op:"state.nest",child:a.name,newParent:d})}for(let a of e){let b=f.get(a.name);if(!b)continue;let d={},e=!1;q(b.kind,a.kind)||void 0===a.kind||(d.kind=a.kind,e=!0),q(b.description,a.description)||void 0===a.description||(d.description=a.description,e=!0),q(b.notes,a.notes)||(d.notes=a.notes??"",e=!0),e&&c.push({op:"state.update",name:a.name,patch:d}),r(a.name,"onEntry",b.onEntry?.actions??[],a.onEntry?.actions??[],c),r(a.name,"onExit",b.onExit?.actions??[],a.onExit?.actions??[],c)}for(let a of j)a.transitions.forEach((b,d)=>{c.push({op:"transition.add",state:a.state,transition:b,index:d})});for(let a of e){let b=f.get(a.name);b&&function(a,b,c,d){let e=Math.min(b.length,c.length);for(let f=0;f<e;f++){if(q(b[f],c[f]))continue;let e={};for(let a of["event","nextState","condition","description","actions"])q(b[f][a],c[f][a])||void 0===c[f][a]||(e[a]=c[f][a]);Object.keys(e).length>0&&d.push({op:"transition.update",state:a,index:f,patch:e})}for(let b=e;b<c.length;b++)d.push({op:"transition.add",state:a,transition:c[b],index:b});for(let e=b.length-1;e>=c.length;e--)d.push({op:"transition.remove",state:a,index:e})}(a.name,b.transitions??[],a.transitions??[],c)}for(let a=d.length-1;a>=0;a--){let b=d[a];if(g.has(b.name))continue;let e=b.transitions??[];for(let a=e.length-1;a>=0;a--)c.push({op:"transition.remove",state:b.name,index:a});c.push({op:"state.remove",name:b.name})}}(c,b,e),e);0!==h.length&&(d.emitPatch(h),g=f)},60))}))})(),()=>{c=!0,f&&clearTimeout(f),e&&e(),d&&d.disconnect()}},[a,b]),null}function cr(){let a=process.env.NEXT_PUBLIC_STATELOOM_BRIDGE_URL??process.env.NEXT_PUBLIC_SMCRAFT_BRIDGE_URL;return"string"==typeof a&&a.length>0?a:void 0}let cs=null;function ct(){return cs||(cs=(async()=>{let a=cr()??null;try{let b=await fetch("/api/config",{cache:"no-store"});if(b.ok){let c=await b.json();return{bridgeUrl:c.bridgeUrl||a,projectFile:c.projectFile??null}}}catch{}return{bridgeUrl:a,projectFile:null}})())}function cu(){let a=cr(),[b,c]=(0,i.useState)(a);return((0,i.useEffect)(()=>{let a=!0;return ct().then(b=>{a&&b.bridgeUrl&&c(b.bridgeUrl)}),()=>{a=!1}},[]),"string"==typeof b&&b.length>0)?(0,h.jsx)(cq,{url:b}):(0,h.jsx)(cp,{})}function cv(a){return Number.isFinite(a)?Math.min(1.75,Math.max(.75,a)):1}function cw(a){"u">typeof document&&(document.documentElement.style.fontSize=`${16*cv(a)}px`)}let cx=1,cy=!1,cz=new Set;function cA(){return cy||(cy=!0,cx=1),cx}function cB(){return 1}function cC(a){return cz.add(a),()=>{cz.delete(a)}}function cD(a,b){let c=cv(a);if(cw(c),b,cy=!0,c!==cx)for(let a of(cx=c,cz))a()}function cE(a,b){return Math.max(1,Math.hypot(b.clientX-a.clientX,b.clientY-a.clientY))}function cF(a,b){for(let c=0;c<a.length;c++)if(a[c].identifier===b)return a[c];return null}function cG(){let a=(0,i.useSyncExternalStore)(cC,cA,cB),b=(0,i.useRef)(null),c=(0,i.useRef)(null),d=(0,i.useRef)(null);(0,i.useEffect)(()=>{cw(a)},[a]);let e=(0,i.useCallback)(a=>{c.current=a,null===d.current&&(d.current=requestAnimationFrame(()=>{d.current=null,null!==c.current&&cD(c.current,!1)}))},[]),f=(0,i.useCallback)(()=>{c.current=null,cD(1,!0)},[]);return((0,i.useEffect)(()=>{let a=()=>{let a=b.current;if(b.current=null,!a?.engaged)return;null!==d.current&&(cancelAnimationFrame(d.current),d.current=null);let e=c.current??cA();c.current=null,cD(cv(e),!0)},f=c=>{if(2!==c.touches.length){b.current&&a();return}let[d,e]=[c.touches[0],c.touches[1]];b3(d.target)||b3(e.target)||(b.current={a:d.identifier,b:e.identifier,startScale:cA(),startDist:cE(d,e),engaged:!1})},g=a=>{let c=b.current;if(!c)return;let d=cF(a.touches,c.a),f=cF(a.touches,c.b);if(!d||!f)return;a.preventDefault();let g=cE(d,f);if(!c.engaged){if(12>Math.abs(g-c.startDist))return;c.engaged=!0,c.startDist=g;return}e(cv(c.startScale*(g/c.startDist)))},h=c=>{let d=b.current;d&&(cF(c.touches,d.a)&&cF(c.touches,d.b)||a())};return document.addEventListener("touchstart",f,{passive:!0,capture:!0}),document.addEventListener("touchmove",g,{passive:!1,capture:!0}),document.addEventListener("touchend",h,{passive:!0,capture:!0}),document.addEventListener("touchcancel",h,{passive:!0,capture:!0}),()=>{document.removeEventListener("touchstart",f,{capture:!0}),document.removeEventListener("touchmove",g,{capture:!0}),document.removeEventListener("touchend",h,{capture:!0}),document.removeEventListener("touchcancel",h,{capture:!0}),null!==d.current&&cancelAnimationFrame(d.current)}},[e]),1===a)?null:(0,h.jsxs)("div",{className:"ui-scale-pill",role:"status","aria-live":"polite",children:[(0,h.jsxs)("span",{children:["UI ",Math.round(100*a),"%"]}),(0,h.jsx)("button",{type:"button",onClick:f,"aria-label":"Reset interface size to 100 percent",children:"Reset"})]})}function cH({size:a=16}){return(0,h.jsxs)("svg",{width:a,height:a,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,h.jsx)("path",{d:"M12 4.5 21 19.5H3Z"}),(0,h.jsx)("path",{d:"M12 10v4.5"}),(0,h.jsx)("path",{d:"M12 17.3v.01"})]})}function cI({locked:a,size:b=16}){return(0,h.jsxs)("svg",{width:b,height:b,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,h.jsx)("rect",{x:"5",y:"11",width:"14",height:"9",rx:"2"}),(0,h.jsx)("path",{d:a?"M8 11V8a4 4 0 0 1 8 0v3":"M8 11V8a4 4 0 0 1 7.5-1.9"})]})}function cJ(a){let{onClose:b,restVh:c,tallVh:d}=a,[e,f]=(0,i.useState)(!1),[g,h]=(0,i.useState)(null),j=(0,i.useRef)(null),k=()=>{f(!1),b()},l=a=>{let b=j.current;if(!b||b.id!==a.pointerId)return;j.current=null;let c=a.clientY-b.y;if(h(null),6>Math.abs(c))return f(a=>!a);if(c<=-50)return f(!0);if(c>=80){if(e&&c<260)return f(!1);k()}},m=e?d:c,n=null!==g;return{zoneProps:{onPointerDown:a=>{a.target.closest("button")||(j.current={y:a.clientY,id:a.pointerId},a.currentTarget.setPointerCapture(a.pointerId),h(0))},onPointerMove:a=>{let b=j.current;b&&b.id===a.pointerId&&h(a.clientY-b.y)},onPointerUp:l,onPointerCancel:l,style:{touchAction:"none",cursor:"grab"}},sheetStyle:{"--sheet-h":n&&g<0?`min(calc(${m}dvh + ${-g}px), ${d}dvh)`:`${m}dvh`,...n?{transition:"none"}:{},...n&&g>0?{transform:`translateY(${g}px)`}:{}},close:k}}let cK=(a,b)=>"chen"===b?`stateloom:erd-layout:chen:${a}`:`stateloom:erd-layout:${a}`,cL="stateloom:erd-notation",cM="stateloom:erd-lock";function cN(a,b){try{return JSON.parse(localStorage.getItem(cK(a,b))??"{}")}catch{return{}}}async function cO(a){let b=a.slice(0,a.lastIndexOf("/")),c=((await (await fetch("/api/docs",{cache:"no-store"})).json()).docs??[]).map(a=>a.path).filter(a=>a.endsWith(".smdf.json")&&a.slice(0,a.lastIndexOf("/"))===b),d=[];for(let a of c)try{let b=await (await fetch(`/api/file${(0,ck.docQuery)(a)}`,{cache:"no-store"})).json(),c=JSON.parse(b.content??"null"),e=c?.stateMachine??c?.StateMachine??c;e?.state&&d.push({path:a,def:e})}catch{}return d}let cP="w-full rounded border border-gray-700 bg-gray-950 px-2 py-1 text-xs text-gray-200 placeholder:text-gray-600",cQ="rounded border border-gray-700 bg-gray-800 px-2 py-1 text-xs text-gray-200 hover:bg-gray-700",cR="mb-1 mt-3 text-[11px] font-semibold uppercase tracking-wide text-gray-500";function cS(){let a=(0,ck.useRequestedDoc)(),[b,c]=(0,i.useState)(""),[d,e]=(0,i.useState)(null),[f,g]=(0,i.useState)({}),[j,k]=(0,i.useState)("crowsfoot"),[l,m]=(0,i.useState)(!1),[n,o]=(0,i.useState)({...M}),[p,q]=(0,i.useState)(0),[r,s]=(0,i.useState)(null),[t,u]=(0,i.useState)({text:"loading…",tone:"ok"}),v=(0,i.useCallback)((a,b="ok")=>u({text:a,tone:b}),[]),[w,x]=(0,i.useState)(!1);(0,i.useEffect)(()=>{let a=setTimeout(()=>x(!0),4e3);return()=>{clearTimeout(a),x(!1)}},[t]);let[y,z]=(0,i.useState)("entities"),[A,B]=(0,i.useState)(!1),[C,D]=(0,i.useState)(!1),[E,F]=(0,i.useState)(!1),G=(0,i.useRef)(null),H=cJ({onClose:()=>B(!1),restVh:62,tallVh:92}),[I,J]=(0,i.useState)(0),[K,L]=(0,i.useState)(null),N=(0,i.useRef)(null);(0,i.useEffect)(()=>{let b=!1,d=null;return(async()=>{let f=await (await fetch(`/api/file${(0,ck.docQuery)(a)}`,{cache:"no-store"})).json();if(b)return;if(f.error)return v(f.error,"warn");let h=f.path??"",i=null;try{let a=f.content?JSON.parse(f.content):null;X(a)&&(i={...a,relationships:a.relationships??[]})}catch{}if(f.exists&&!i)return v(`${h} is not a readable ERD definition`,"warn");let j=(h.split("/").pop()??"Untitled").replace(/\.erdf\.json$/i,""),l=function(){try{return"chen"===localStorage.getItem(cL)?"chen":"crowsfoot"}catch{return"crowsfoot"}}();c(h),e(i??{settings:{namespace:"Default",name:j},entities:[],relationships:[]}),k(l),m(function(){try{let a=localStorage.getItem(cM);if(null!==a)return"1"===a;return window.matchMedia("(pointer: coarse)").matches}catch{return!1}}()),g(cN(h,l)),s(null),L(null),q(a=>a+1),v(f.exists?"loaded":"new document — the first edit writes it");let{bridgeUrl:n}=await ct();!b&&n&&(N.current=d=bS({url:n,role:"web",docId:h,name:"web-designer",onFull:a=>{let b=a.def;X(b)&&(e({...b,relationships:b.relationships??[]}),v("updated live"))},onPatch:()=>{},onPresence:a=>J(a.length)}),d.connect())})().catch(a=>!b&&v(String(a),"warn")),()=>{b=!0,N.current=null,d?.disconnect()}},[a,v]);let O=(0,i.useMemo)(()=>{if(!d)return{};let a=function(a,b={}){let c=b.notation??"crowsfoot",d=b.hSpacing??70,e=b.vSpacing??("chen"===c?130:90),f="chen"===c?af:am,g=[],h=new Set;for(let b of a.entities??[])!b?.name||h.has(b.name)||(h.add(b.name),g.push(b));let i=new Map,j=(a,b,c=new Set)=>a===b||!c.has(a)&&(c.add(a),(i.get(a)??[]).some(a=>j(a,b,c)));for(let b of a.relationships??[]){if(!b||!h.has(b.from)||!h.has(b.to)||b.from===b.to)continue;let[a,c]="N:1"===b.cardinality?[b.to,b.from]:[b.from,b.to];if((i.get(a)??[]).includes(c)||j(c,a))continue;let d=i.get(a);d?d.push(c):i.set(a,[c])}let k=new Map,l=(a,b)=>{if(!((k.get(a)??-1)>=b))for(let c of(k.set(a,b),i.get(a)??[]))l(c,b+1)},m=new Set([...i.values()].flat());for(let a of g)m.has(a.name)||l(a.name,0);for(let a of g)k.has(a.name)||l(a.name,0);for(let a of[...g].sort((a,b)=>k.get(b.name)-k.get(a.name))){let b=i.get(a.name)??[];b.length&&k.set(a.name,Math.min(...b.map(a=>k.get(a)))-1)}let n=[],o=new Map,p=(a,b)=>((n[b]??=[]).push(a),o.set(a.id,a),a);for(let a of g)p({id:a.name,entity:a.name,...f(a),upper:[],lower:[],x:0},k.get(a.name)??0);let q=0;for(let[a,b]of i)for(let c of b){let b=a;for(let d=k.get(a)+1;d<k.get(c);d++){let a=p({id:`\u0000lane${q++}`,width:28,height:0,upper:[],lower:[],x:0},d);o.get(b).lower.push(a.id),a.upper.push(b),b=a.id}o.get(b).lower.push(c),o.get(c).upper.push(b)}for(let a=n.length-1;a>=0;a--)n[a]?.length||n.splice(a,1);let r=(a,b)=>a.length?a.reduce((a,c)=>a+b(o.get(c)),0)/a.length:null,s=(a,b)=>{let c=new Map;for(let a of n)a.forEach((a,b)=>c.set(a.id,b));let d=new Map(a.map((a,d)=>[a.id,r(a[b],a=>c.get(a.id))??d]));a.sort((a,b)=>d.get(a.id)-d.get(b.id))};for(let a=0;a<2;a++){for(let a=1;a<n.length;a++)s(n[a],"upper");for(let a=n.length-2;a>=0;a--)s(n[a],"lower")}let t=a=>a.x+a.width/2,u=(a,b)=>{let c=0;for(let e of a){let a=r(e[b],t);e.x=Math.max(c,null===a?c:a-e.width/2),c=e.x+e.width+d}};for(let a of n)u(a,"upper");for(let a=n.length-2;a>=0;a--)u(n[a],"lower");let v=Math.min(0,...[...o.values()].map(a=>a.x)),w={},x=40;for(let a of n){for(let b of a)b.entity&&(w[b.entity]={x:Math.round(b.x-v)+40,y:x,width:b.width,height:b.height});x+=Math.max(0,...a.map(a=>a.height))+e}return w}(d,{notation:j});for(let[b,c]of Object.entries(f))a[b]&&(a[b]={...a[b],...c});return a},[d,f,j]),Q=(0,i.useMemo)(()=>d?function(a){let b=[],c=function(a){let b=new Map;for(let c of a.entities??[])c?.name&&!b.has(c.name)&&b.set(c.name,c);return b}(a),d=new Set;for(let[e,f]of(a.entities??[]).entries()){if(!f?.name){b.push({ruleId:"E001",message:`Entity at index ${e} has no name`,element:`entities[${e}]`});continue}d.has(f.name)&&b.push({ruleId:"E001",message:`Duplicate entity name "${f.name}"`,element:f.name}),d.add(f.name);let a=new Set;for(let[d,e]of(f.attributes??[]).entries()){if(!e?.name){b.push({ruleId:"E002",message:`Attribute at index ${d} of "${f.name}" has no name`,element:`${f.name}[${d}]`});continue}let g=`${f.name}.${e.name}`;if(a.has(e.name)&&b.push({ruleId:"E002",message:`Duplicate attribute "${g}"`,element:g}),a.add(e.name),e.references){let a=function(a){let b=a.indexOf(".");return b<0?{entity:a}:{entity:a.slice(0,b),attribute:a.slice(b+1)}}(e.references),d=c.get(a.entity);d?a.attribute&&!(d.attributes??[]).some(b=>b?.name===a.attribute)&&b.push({ruleId:"E005",message:`"${g}" references undefined attribute "${e.references}"`,element:g}):b.push({ruleId:"E005",message:`"${g}" references undefined entity "${a.entity}"`,element:g})}}}for(let[d,e]of(a.relationships??[]).entries()){let a=`relationships[${d}]`;for(let f of["from","to"]){let g=e?.[f];g&&c.has(g)||b.push({ruleId:"E003",message:`Relationship ${d} ${f} names undefined entity "${g??""}"`,element:a})}V.includes(e?.cardinality)||b.push({ruleId:"E004",message:`Relationship ${d} cardinality "${e?.cardinality??""}" is not one of ${V.join(", ")}`,element:a})}return b}(d):[],[d]),S=(0,i.useMemo)(()=>Q.map(a=>(a.element??"").split(/[.[]/)[0]).filter(Boolean),[Q]),T=(0,i.useCallback)(async a=>{let c;if(d&&b){try{c=a(d)}catch(a){return v(a instanceof Error?a.message:String(a),"warn")}e(c),L(null);try{let a=await fetch(`/api/file${(0,ck.docQuery)(b)}`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({content:JSON.stringify(c,null,2)+"\n"})});if(!a.ok)throw Error((await a.json())?.error??`HTTP ${a.status}`);N.current?.emitFull(c),v("saved")}catch(a){v(`not saved: ${a instanceof Error?a.message:String(a)}`,"warn")}}},[d,b,v]),W=(0,i.useCallback)((a,c)=>{g(d=>{let e={...d,[a]:{x:Math.round(c.x),y:Math.round(c.y)}};try{localStorage.setItem(cK(b,j),JSON.stringify(e))}catch{}return e})},[b,j]),ab=()=>{g({});try{localStorage.removeItem(cK(b,j))}catch{}q(a=>a+1)},ac=async()=>{if(!d)return;v("checking links…");let a=await cO(b);if(0===a.length)return L("none"),z("issues"),B(!0),v("no .smdf.json beside this document to check against","warn");let c=a.flatMap(a=>(function(a,b){let c=[],d=new Map;for(let a of b.entities??[])a?.name&&!d.has(a.name)&&d.set(a.name,a);let e=a.settings?.name??"",f=a.settings?.objects??[],g=a.state?function a(b){let c=[b];for(let d of b.states??[])c.push(...a(d));for(let d of b.parallel?.states??[])c.push(...a(d));return c}(a.state):[],h=g.flatMap(a=>(a.transitions??[]).map(a=>a.condition??"")),i=new Map;for(let a of f){let e=d.get(a.class);if(e){i.set(a.instance,e);continue}h.some(b=>Y(b,a.instance).length>0)&&c.push({ruleId:"L001",message:`Object "${a.instance}" has class "${a.class}", which is not an entity in "${b.settings?.name??""}", and a guard reads its fields`,element:a.instance})}for(let a of g)for(let b of a.transitions??[])if(b.condition)for(let[d,e]of i)for(let f of Y(b.condition,d))(e.attributes??[]).some(a=>a?.name===f)||c.push({ruleId:"L002",message:`Guard on ${a.name} [${b.event}] reads "${d}.${f}", which is not an attribute of "${e.name}"`,element:a.name});if(e){let a=new Set([...i.values()].map(a=>a.name));for(let d of b.entities??[])for(let b of d?.attributes??[])b&&U(b).includes(e)&&(a.has(d.name)||c.push({ruleId:"L003",message:`"${d.name}.${b.name}" stores the state of "${e}", but "${d.name}" is not the class of any of that machine's objects`,element:`${d.name}.${b.name}`}))}return c})(a.def,d).map(b=>({...b,message:`${a.def.settings?.name??a.path}: ${b.message}`})));c.push(...function(a,b){let c=[];for(let d of a.entities??[])for(let a of d?.attributes??[])if(a)for(let e of U(a))b.includes(e)||c.push({ruleId:"L004",message:`"${d.name}.${a.name}" stores the state of "${e}", which is not among the machines checked (${b.join(", ")||"none"})`,element:`${d.name}.${a.name}`});return c}(d,a.map(a=>a.def.settings?.name??""))),L(c),z("issues"),B(!0),F(!1),v(`checked ${a.length} machine(s): ${c.length} problem(s)`,c.length?"warn":"ok")},ad=async a=>{let c=(await cO(b)).find(b=>b.def.settings?.name===a);c?(0,ck.navigateToDoc)(c.path):v(`no .smdf.json beside this document defines '${a}'`,"warn")},ae=()=>{let a=G.current?.getBoundingClientRect();return{width:a?.width??0,height:a?.height??0}},ah=a=>{let{width:b,height:c}=ae();o(d=>P(d,a,{x:b/2,y:c/2}))},al=d?.entities.find(a=>a.name===r)??null,an=b.split("/").pop()||"…",ao=Array.isArray(K)?K:[],ap=Q.length+ao.length,aq=[{id:"entities",label:"Entities",icon:"▭"},{id:"relations",label:"Relations",icon:"⟷"},{id:"notes",label:"Notes",icon:"✎",badge:void 0},{id:"issues",label:"Issues",icon:(0,h.jsx)(cH,{}),badge:ap||void 0}],ar=a=>y===a?"":"hidden md:block",as=()=>{d&&navigator.clipboard?.writeText(function(a){let b=["erDiagram"],c=" ",d=new Set;for(let e of a.relationships??[]){if(!e?.from||!e?.to)continue;let a=ag[e.cardinality]??ag["1:N"];b.push(`${c}${ai(e.from)} ${a} ${ai(e.to)} : ${ak(e.label??"")}`),d.add(e.from),d.add(e.to)}let e=new Set;for(let f of a.entities??[]){if(!f?.name||e.has(f.name))continue;e.add(f.name);let a=(f.attributes??[]).filter(a=>a?.name);if(0===a.length){d.has(f.name)||b.push(`${c}${ai(f.name)}`);continue}for(let d of(b.push(`${c}${ai(f.name)} {`),a))b.push(`${c}${c}${function(a){let b=[];"pk"===a.key&&b.push("PK"),"uk"===a.key&&b.push("UK"),a.references&&b.push("FK");let c=[],d=U(a);d.length&&c.push(`stateOf ${d.join(", ")}`),a.description&&c.push(a.description);let e=[aj(a.type??"","unknown"),aj(a.name,"unnamed")];return b.length&&e.push(b.join(", ")),c.length&&e.push(ak(c.join(" — "))),e.join(" ")}(d)}`);b.push(`${c}}`)}return b.join("\n")}(d)).then(()=>v("mermaid copied"))};return(0,h.jsxs)("div",{className:"app-shell dock-offset flex flex-col overflow-hidden bg-gray-950 text-gray-200",onClick:()=>C&&D(!1),children:[(0,h.jsxs)("header",{className:"relative z-40 flex items-center gap-2 border-b border-gray-800 bg-gray-900 px-2 py-1.5 text-xs md:px-3 md:py-2",children:[(0,h.jsx)("span",{className:"font-semibold text-blue-300",children:"ERD"}),(0,h.jsx)(cl,{}),(0,h.jsxs)("span",{className:"min-w-0 flex-1 truncate text-gray-400",title:b,children:[d?.settings.name??an,(0,h.jsxs)("span",{className:"hidden text-gray-600 lg:inline",children:[" · ",an]})]}),(0,h.jsx)("span",{className:"inline-flex shrink-0 overflow-hidden rounded border border-gray-700",role:"group","aria-label":"Notation",children:[["crowsfoot","▤","Crow's foot — attributes listed inside the entity box"],["chen","◇","Chen — attributes as ovals, relationships as diamonds"]].map(([a,c,d])=>(0,h.jsx)("button",{title:d,"aria-label":d,"aria-pressed":j===a,onClick:()=>(a=>{if(a!==j){try{localStorage.setItem(cL,a)}catch{}k(a),g(cN(b,a)),q(a=>a+1)}})(a),className:`px-2.5 py-1.5 text-sm leading-none md:px-2 md:py-1 ${j===a?"bg-blue-900/60 text-blue-200":"bg-gray-800 text-gray-400 hover:bg-gray-700"}`,children:c},a))}),(0,h.jsxs)("div",{className:"hidden shrink-0 items-center gap-2 md:flex",children:[(0,h.jsx)("button",{className:cQ,onClick:ab,title:"Forget the dragged positions and lay the board out again",children:"⤢ Arrange"}),(0,h.jsx)("button",{className:cQ,onClick:ac,title:"Check the state machines beside this document against it",children:"Check links"}),(0,h.jsx)("button",{className:cQ,onClick:as,children:"Copy mermaid"}),(0,h.jsx)("button",{className:cQ,onClick:()=>F(a=>!a),"aria-pressed":!E,title:E?"Show the panel":"Hide the panel — the board takes the full width",children:E?"⟨ Panel":"Panel ⟩"})]}),(0,h.jsxs)("div",{className:"relative shrink-0 md:hidden",children:[(0,h.jsx)("button",{className:"rounded border border-gray-700 bg-gray-800 px-3 py-1.5 text-sm leading-none text-gray-200","aria-label":"More actions","aria-expanded":C,onClick:a=>{a.stopPropagation(),D(a=>!a)},children:"⋯"}),C&&(0,h.jsx)("div",{className:"absolute right-0 top-full z-50 mt-1 w-56 overflow-hidden rounded-lg border border-gray-700 bg-gray-900 py-1 shadow-xl",children:[["⤢ Arrange the board",ab],["Check links to the machines",ac],["Copy as mermaid",as]].map(([a,b])=>(0,h.jsx)("button",{className:"block w-full px-4 py-3 text-left text-sm text-gray-200 hover:bg-gray-800",onClick:()=>{D(!1),b()},children:a},a))})]})]}),(0,h.jsxs)("div",{className:"relative flex min-h-0 flex-1",children:[(0,h.jsxs)("div",{ref:G,className:"relative min-w-0 flex-1 overflow-hidden",children:[d&&(0,h.jsx)(aE,{definition:d,notation:j,positions:O,viewport:n,onViewportChange:o,selection:r,readOnly:l,errorElements:S,fitKey:p,onSelect:s,onClearSelection:()=>s(null),onEntityMove:W,onOpenMachine:ad,emptyHint:"No entities yet — add one in the panel, or let an agent call add_entity."}),(0,h.jsxs)("div",{className:`pointer-events-none absolute left-2 top-2 flex max-w-[75%] items-center gap-1.5 rounded bg-gray-950/70 px-1.5 py-0.5 text-[11px] ${"warn"===t.tone?"text-amber-300":"text-gray-500"}`,role:"status",children:[(0,h.jsx)("span",{className:`h-1.5 w-1.5 shrink-0 rounded-full ${"warn"===t.tone?"bg-amber-400":"bg-emerald-500"}`}),(0,h.jsxs)("span",{className:`truncate transition-opacity duration-500 ${w&&"ok"===t.tone?"opacity-0":"opacity-100"}`,children:[t.text,I>1?` \xb7 ${I} in the room`:""]})]}),(0,h.jsxs)("div",{className:"absolute bottom-3 right-3 flex flex-col overflow-hidden rounded-lg border border-gray-700 bg-gray-900/90 shadow-lg backdrop-blur",children:[(0,h.jsx)("button",{title:l?"Shapes are locked: dragging moves the view. Tap to unlock.":"Lock the shapes in place, so dragging only moves the view","aria-label":"Lock shapes in place","aria-pressed":l,onClick:()=>{let a=!l;m(a);try{localStorage.setItem(cM,a?"1":"0")}catch{}v(a?"shapes locked — a drag anywhere moves the view":"shapes unlocked — drag one to move it")},className:`flex h-10 w-10 items-center justify-center border-b border-gray-800 hover:bg-gray-800 md:h-8 md:w-8 ${l?"bg-blue-950/60 text-blue-300":"text-gray-400"}`,children:(0,h.jsx)(cI,{locked:l})}),[["+","Zoom in",()=>ah(1.25)],["−","Zoom out",()=>ah(.8)],["⛶","Fit the whole diagram",()=>q(a=>a+1)]].map(([a,b,c])=>(0,h.jsx)("button",{title:b,"aria-label":b,onClick:c,className:"h-10 w-10 border-b border-gray-800 text-base leading-none text-gray-200 last:border-b-0 hover:bg-gray-800 md:h-8 md:w-8 md:text-sm",children:a},b))]}),al&&!A&&(0,h.jsxs)("button",{className:"absolute bottom-3 left-1/2 max-w-[60%] -translate-x-1/2 truncate rounded-full border border-blue-500/60 bg-gray-900/95 px-4 py-2 text-sm text-blue-200 shadow-lg md:hidden",onClick:()=>{z("entities"),B(!0)},children:["✎ ",al.name]})]}),A&&(0,h.jsx)("div",{className:"fixed inset-0 z-20 bg-black/50 md:hidden",onClick:H.close,"aria-hidden":"true"}),d&&(0,h.jsxs)("aside",{style:H.sheetStyle,className:`safe-x fixed inset-x-0 bottom-0 z-30 flex h-[var(--sheet-h)] flex-col overflow-hidden rounded-t-2xl border-t border-gray-800 bg-gray-900 shadow-2xl transition-[transform,height] duration-200 ease-out ${A?"translate-y-0":"pointer-events-none translate-y-full"} md:pointer-events-auto md:static md:z-auto md:h-auto md:w-80 md:translate-y-0 md:rounded-none md:border-l md:border-t-0 md:shadow-none md:transition-none ${E?"md:hidden":""}`,children:[(0,h.jsxs)("div",{className:"md:hidden",...H.zoneProps,children:[(0,h.jsx)("div",{className:"flex justify-center pb-1 pt-2",children:(0,h.jsx)("span",{className:"h-1.5 w-12 rounded-full bg-gray-600"})}),(0,h.jsxs)("div",{className:"flex items-center justify-between border-b border-gray-800 px-4 pb-2",children:[(0,h.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:aq.find(a=>a.id===y)?.label}),(0,h.jsx)("button",{onClick:H.close,className:"-mr-2 px-3 py-2 text-lg text-gray-400","aria-label":"Close panel",children:"✕"})]})]}),(0,h.jsxs)("div",{className:"touch-targets dock-offset flex-1 overflow-y-auto overscroll-contain p-3",children:[(0,h.jsxs)("section",{className:ar("entities"),children:[(0,h.jsx)("div",{className:cR,style:{marginTop:0},children:"Entities"}),(0,h.jsx)("div",{className:"flex flex-wrap gap-1",children:d.entities.map(a=>(0,h.jsx)("button",{className:`${cQ} ${r===a.name?"border-blue-500 text-blue-300":""}`,onClick:()=>s(a.name),children:a.name},a.name))}),(0,h.jsx)(cU,{fields:[{name:"name",placeholder:"new entity"}],submit:"+ Entity",onSubmit:a=>{T(b=>(function(a,b){if(!b.name?.trim())throw Error("An entity needs a name.");let c=Z(a);if(c.entities.some(a=>a.name===b.name))throw Error(`Entity '${b.name}' already exists.`);return c.entities.push(_({...b,attributes:b.attributes??[]})),c})(b,{name:a.name.trim()})),s(a.name.trim())}}),al&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsxs)("div",{className:`${cR} flex items-center justify-between gap-2`,children:[(0,h.jsx)("span",{className:"truncate text-sm normal-case tracking-normal text-gray-200",children:al.name}),(0,h.jsx)("button",{className:`${cQ} normal-case tracking-normal`,onClick:()=>(a=>{let b=O[a],{width:c,height:d}=ae();b&&c&&(o(R([b],c,d,{padding:28,maxScale:1.25})),s(a),H.close())})(al.name),title:"Bring this entity to the middle of the board at a readable size",children:"◎ Show on board"})]}),(0,h.jsxs)("label",{className:"mb-1 flex items-center gap-2 text-[11px] text-gray-400",title:"Exists only through another entity (an order line, without its order). Chen draws it as a double rectangle.",children:[(0,h.jsx)("input",{type:"checkbox",checked:!!al.weak,onChange:a=>T(b=>aa(b,al.name,{weak:a.target.checked}))}),"weak entity"]}),(al.attributes??[]).map(a=>(0,h.jsxs)("div",{className:"flex items-center justify-between gap-2 py-0.5 font-mono text-[11px]",children:[(0,h.jsxs)("span",{className:a.stateOf?"text-blue-300":"text-gray-300",children:[a.name," : ",a.type,(0,h.jsxs)("span",{className:"text-gray-500",children:[a.key?` ${a.key.toUpperCase()}`:"",a.references?` → ${a.references}`:"",a.stateOf?` ◉ ${[a.stateOf].flat().join(", ")}`:""]})]}),(0,h.jsx)("button",{className:"text-gray-500 hover:text-red-400","aria-label":`Remove ${a.name}`,onClick:()=>T(b=>(function(a,b,c){let d=Z(a),e=$(d,b),f=e.attributes?.length??0;if(e.attributes=(e.attributes??[]).filter(a=>a.name!==c),e.attributes.length===f)throw Error(`Attribute '${b}.${c}' not found.`);return d})(b,al.name,a.name)),children:"✕"})]},a.name)),(0,h.jsx)(cU,{fields:[{name:"name",placeholder:"attribute"},{name:"type",placeholder:"type",initial:"string"},{name:"key",options:["","pk","uk"]},{name:"references",placeholder:"references Entity.attr"},{name:"stateOf",placeholder:"stateOf Machine"}],submit:"+ Attribute",onSubmit:a=>T(b=>(function(a,b,c){if(!c.name?.trim())throw Error("An attribute needs a name.");let d=Z(a),e=$(d,b);if(e.attributes??=[],e.attributes.some(a=>a.name===c.name))throw Error(`Attribute '${b}.${c.name}' already exists.`);return e.attributes.push(_({...c})),d})(b,al.name,{name:a.name.trim(),type:a.type.trim()||"string",key:"pk"===a.key||"uk"===a.key?a.key:void 0,references:a.references.trim()||void 0,stateOf:a.stateOf.trim()||void 0}))}),(0,h.jsxs)("button",{className:`${cQ} mt-2 text-red-300`,onClick:()=>{T(a=>{var b;let c;return b=al.name,$(c=Z(a),b),c.entities=c.entities.filter(a=>a.name!==b),c.relationships=c.relationships.filter(a=>a.from!==b&&a.to!==b),c}),s(null)},children:["🗑 Delete ",al.name]})]})]}),(0,h.jsxs)("section",{className:ar("relations"),children:[(0,h.jsx)("div",{className:`${cR} max-md:mt-0`,children:"Relationships"}),0===d.relationships.length&&(0,h.jsx)("div",{className:"py-0.5 text-[11px] text-gray-600",children:"None yet."}),d.relationships.map((a,b)=>(0,h.jsxs)("div",{className:"flex items-center justify-between gap-2 py-0.5 text-[11px] text-gray-300",children:[(0,h.jsxs)("span",{children:[a.from," ",(0,h.jsx)("span",{className:"text-gray-500",children:a.cardinality})," ",a.to,a.label?(0,h.jsxs)("span",{className:"text-gray-500",children:[" : ",a.label]}):null]}),(0,h.jsx)("button",{className:"text-gray-500 hover:text-red-400","aria-label":"Remove relationship",onClick:()=>T(b=>(function(a,b,c,d){let e=Z(a),f=e.relationships.length;if(e.relationships=e.relationships.filter(a=>a.from!==b||a.to!==c||void 0!==d&&a.label!==d),e.relationships.length===f)throw Error(`No relationship from '${b}' to '${c}'${void 0===d?"":` labelled '${d}'`}.`);return e})(b,a.from,a.to,a.label)),children:"✕"})]},b)),d.entities.length>0&&(0,h.jsx)(cU,{fields:[{name:"from",options:d.entities.map(a=>a.name)},{name:"cardinality",options:[...V],initial:"1:N"},{name:"to",options:d.entities.map(a=>a.name)},{name:"label",placeholder:"label (a verb)"}],submit:"+ Relationship",onSubmit:a=>T(b=>(function(a,b){let c=Z(a);if($(c,b.from),$(c,b.to),!V.includes(b.cardinality))throw Error(`Cardinality '${b.cardinality}' is not one of ${V.join(", ")}.`);return c.relationships.push(_({...b})),c})(b,{from:a.from,to:a.to,cardinality:a.cardinality,label:a.label.trim()||void 0}))})]}),(0,h.jsxs)("section",{className:ar("notes"),children:[(0,h.jsx)("div",{className:`${cR} max-md:mt-0`,children:"Notes"}),(0,h.jsx)("p",{className:"mb-1 text-[11px] text-gray-600",children:"Saved in the document, for whoever opens it next — you, or an agent (it reads them with get_notes)."}),(0,h.jsx)(cT,{label:"On this diagram",value:d.settings.notes??"",placeholder:"What was discussed, what is still open…",onSave:a=>T(b=>(function(a,b){let c=Z(a);for(let a of["description","notes"]){let d=b[a];void 0!==d&&(d.trim()?c.settings[a]=d:delete c.settings[a])}return c})(b,{notes:a}))},"diagram"),al?(0,h.jsx)(cT,{label:`On ${al.name}`,value:al.notes??"",placeholder:`A question or a decision about ${al.name}…`,onSave:a=>T(b=>aa(b,al.name,{notes:a}))},`entity:${al.name}`):(0,h.jsx)("p",{className:"mt-2 text-[11px] text-gray-600",children:"Select an entity to leave a note on it."}),d.entities.some(a=>a.notes?.trim())&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)("div",{className:cR,children:"Entities with notes"}),(0,h.jsx)("div",{className:"flex flex-wrap gap-1",children:d.entities.filter(a=>a.notes?.trim()).map(a=>(0,h.jsx)("button",{className:`${cQ} ${r===a.name?"border-blue-500 text-blue-300":""}`,onClick:()=>s(a.name),children:a.name},a.name))})]})]}),(0,h.jsxs)("section",{className:ar("issues"),children:[(0,h.jsx)("div",{className:`${cR} max-md:mt-0 ${0===ap&&!K?"md:hidden":""}`,children:"Issues"}),Q.map((a,b)=>(0,h.jsxs)("div",{className:"py-0.5 text-[11px] text-red-300",children:["[",a.ruleId,"] ",a.message]},`p${b}`)),ao.map((a,b)=>(0,h.jsxs)("div",{className:"py-0.5 text-[11px] text-amber-300",children:["[",a.ruleId,"] ",a.message]},`l${b}`)),"none"===K&&(0,h.jsx)("div",{className:"py-0.5 text-[11px] text-amber-300",children:"No state machine (.smdf.json) sits beside this document, so there was nothing to check it against."}),0===ap&&"none"!==K&&(0,h.jsx)("div",{className:`py-0.5 text-[11px] ${K?"text-green-400":"text-gray-600 md:hidden"}`,children:K?"Every name the machines use resolves.":"The document is valid. “Check links” (⋯) holds the state machines beside it against it."})]})]})]})]}),(0,h.jsx)("nav",{className:"dock-safe safe-x fixed inset-x-0 bottom-0 z-40 flex border-t border-gray-800 bg-gray-900/95 backdrop-blur-md md:hidden",children:aq.map(a=>{let b=A&&y===a.id;return(0,h.jsxs)("button",{onClick:()=>{var b;return b=a.id,void(A&&y===b?H.close():B(!0),z(b))},"aria-pressed":b,className:`relative flex h-14 flex-1 flex-col items-center justify-center gap-0.5 text-[11px] transition-colors ${b?"text-blue-400":"text-gray-500"}`,children:[(0,h.jsx)("span",{className:"flex h-4 items-center text-base leading-none",children:a.icon}),(0,h.jsx)("span",{children:a.label}),void 0!==a.badge&&(0,h.jsx)("span",{className:"absolute right-1/2 top-1 min-w-[16px] translate-x-5 rounded-full border border-red-900/80 bg-red-950/80 px-1 text-[10px] leading-4 text-red-200",children:a.badge}),b&&(0,h.jsx)("span",{className:"absolute inset-x-4 top-0 h-0.5 rounded-full bg-blue-400"})]},a.id)})})]})}function cT({label:a,value:b,placeholder:c,onSave:d}){let[e,f]=(0,i.useState)(b),[g,j]=(0,i.useState)(b),[k,l]=(0,i.useState)(!1);b!==g&&(j(b),k||f(b));let m=(0,i.useRef)(null),n=a=>{m.current&&clearTimeout(m.current),m.current=null,a!==b&&d(a)};return(0,h.jsxs)("label",{className:"mt-2 block",children:[(0,h.jsx)("span",{className:"text-[11px] text-gray-500",children:a}),(0,h.jsx)("textarea",{className:`${cP} h-24 resize-y leading-snug`,placeholder:c,value:e,onChange:a=>{let b=a.target.value;f(b),m.current&&clearTimeout(m.current),m.current=setTimeout(()=>n(b),900)},onFocus:()=>l(!0),onBlur:()=>{l(!1),n(e)}})]})}function cU({fields:a,submit:b,onSubmit:c}){let d=()=>Object.fromEntries(a.map(a=>[a.name,a.initial??a.options?.[0]??""])),[e,f]=(0,i.useState)(d),g=a[0];return(0,h.jsxs)("form",{className:"mt-1 grid grid-cols-2 gap-1",onSubmit:b=>{b.preventDefault();let h={...d(),...e};h[g.name]?.trim()&&(c(h),f(b=>Object.fromEntries(a.map(a=>[a.name,a.options?b[a.name]??"":a.initial??""]))))},children:[a.map(a=>a.options?(0,h.jsx)("select",{className:cP,"aria-label":a.name,value:e[a.name]??"",onChange:b=>f(c=>({...c,[a.name]:b.target.value})),children:a.options.map(b=>(0,h.jsx)("option",{value:b,children:b||`(${a.name})`},b))},a.name):(0,h.jsx)("input",{className:cP,"aria-label":a.name,placeholder:a.placeholder,value:e[a.name]??"",onChange:b=>f(c=>({...c,[a.name]:b.target.value}))},a.name)),(0,h.jsx)("button",{type:"submit",className:`${cQ} ${1===a.length?"":"col-span-2"}`,children:b})]})}function cV(){let a=(0,ck.useRequestedDoc)(),[b,c]=(0,i.useState)(null);(0,i.useEffect)(()=>{let a=!0;return ct().then(b=>{a&&c(b.projectFile&&W(b.projectFile)?"erd":"machine")}),()=>{a=!1}},[]);let d=a?W(a)?"erd":"machine":b;return null===d?(0,h.jsx)("div",{className:"app-shell bg-gray-950"}):"erd"===d?(0,h.jsx)(cS,{}):(0,h.jsx)(cW,{})}function cW(){let[a,b]=(0,i.useState)("properties"),[c,d]=(0,i.useState)(!1),e=cJ({onClose:()=>d(!1),restVh:70,tallVh:92}),f=b0(a=>a.errors),g=b0(a=>a.contextMenu),j=b0(a=>a.hideContextMenu),k=b0(a=>a.addState),l=b0(a=>a.removeState),m=b0(a=>a.setDrawMode),n=b0(a=>a.setDrawSource),o=[{id:"properties",label:"Properties",icon:"🎛"},{id:"events",label:"Events",icon:"⚡"},{id:"settings",label:"Settings",icon:"⚙"},{id:"validation",label:"Errors",icon:(0,h.jsx)(cH,{}),badge:f.length||void 0}],p=o.find(b=>b.id===a)?.label??"";return(0,h.jsxs)("div",{className:"app-shell dock-offset flex flex-col overflow-hidden",onClick:()=>g.visible&&j(),children:[(0,h.jsx)(cu,{}),(0,h.jsx)(cG,{}),(0,h.jsx)(cn,{}),(0,h.jsxs)("div",{className:"flex flex-1 min-h-0 overflow-hidden relative",children:[(0,h.jsx)("div",{className:"flex-1 overflow-hidden",children:(0,h.jsx)(cd,{})}),c&&(0,h.jsx)("div",{className:"fixed inset-0 z-20 bg-black/50 md:hidden",onClick:e.close,"aria-hidden":"true"}),(0,h.jsxs)("aside",{style:e.sheetStyle,className:`safe-x fixed inset-x-0 bottom-0 z-30 h-[var(--sheet-h)] flex flex-col overflow-hidden rounded-t-2xl border-t border-gray-800 bg-gray-900 shadow-2xl transition-[transform,height] duration-200 ease-out ${c?"translate-y-0":"translate-y-full pointer-events-none"} md:static md:z-auto md:h-auto md:w-80 md:translate-y-0 md:pointer-events-auto md:rounded-none md:border-t-0 md:border-l md:shadow-none md:transition-none`,children:[(0,h.jsxs)("div",{className:"md:hidden",...e.zoneProps,children:[(0,h.jsx)("div",{className:"flex justify-center pt-2 pb-1",children:(0,h.jsx)("span",{className:"h-1.5 w-12 rounded-full bg-gray-600"})}),(0,h.jsxs)("div",{className:"flex items-center justify-between border-b border-gray-800 px-4 pb-2",children:[(0,h.jsx)("h2",{className:"text-sm font-semibold text-gray-300",children:p}),(0,h.jsx)("button",{onClick:e.close,className:"-mr-2 px-3 py-2 text-lg text-gray-400","aria-label":"Close panel",children:"✕"})]})]}),(0,h.jsx)("div",{className:"hidden border-b border-gray-800 md:flex",children:o.map(c=>(0,h.jsxs)("button",{onClick:()=>b(c.id),className:`flex-1 text-xs py-2 px-1 text-center transition-colors relative ${a===c.id?"text-blue-400 border-b-2 border-blue-400 bg-gray-800/50":"text-gray-500 hover:text-gray-300"}`,children:[c.label,void 0!==c.badge&&c.badge>0&&(0,h.jsx)("span",{className:"absolute top-1 right-1 bg-red-600 text-white text-[9px] rounded-full px-1 min-w-[14px]",children:c.badge})]},c.id))}),(0,h.jsxs)("div",{className:"touch-targets dock-offset flex-1 overflow-y-auto overscroll-contain",children:["properties"===a&&(0,h.jsx)(cf,{}),"events"===a&&(0,h.jsx)(ch,{}),"settings"===a&&(0,h.jsx)(ci,{}),"validation"===a&&(0,h.jsx)(cj,{})]})]}),(0,h.jsx)(co,{})]}),(0,h.jsx)("nav",{className:"dock-safe safe-x fixed inset-x-0 bottom-0 z-40 flex border-t border-gray-800 bg-gray-900/95 backdrop-blur-md md:hidden",children:o.map(f=>{let g=c&&a===f.id;return(0,h.jsxs)("button",{onClick:()=>{var g;return g=f.id,void(c&&a===g?e.close():d(!0),b(g))},"aria-pressed":g,className:`relative flex h-14 flex-1 flex-col items-center justify-center gap-0.5 text-[11px] transition-colors ${g?"text-blue-400":"text-gray-500"}`,children:[(0,h.jsx)("span",{className:"flex h-4 items-center text-base leading-none",children:f.icon}),(0,h.jsx)("span",{children:f.label}),void 0!==f.badge&&f.badge>0&&(0,h.jsx)("span",{className:"absolute top-1 right-1/2 translate-x-4 rounded-full bg-red-600 px-1 text-[10px] leading-4 text-white min-w-[16px]",children:f.badge}),g&&(0,h.jsx)("span",{className:"absolute inset-x-4 top-0 h-0.5 rounded-full bg-blue-400"})]},f.id)})}),g.visible&&(0,h.jsx)("div",{className:"fixed z-50 bg-gray-900 border border-gray-700 rounded-lg shadow-xl py-1 min-w-[180px] md:min-w-[140px]",style:{left:g.x,top:g.y,maxWidth:"calc(100vw - 1rem)",maxHeight:"calc(100dvh - 1rem)",overflowY:"auto",transform:"translate(0, 0)"},onClick:a=>a.stopPropagation(),children:g.target?.kind==="state"?(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)("button",{className:"block w-full text-left text-sm text-gray-300 hover:bg-gray-800 px-4 py-3 md:text-xs md:px-3 md:py-1.5",onClick:()=>{m("transition"),n(g.target.id),j()},children:"↗ Draw transition from here"}),(0,h.jsx)("button",{className:"block w-full text-left text-sm text-red-400 hover:bg-gray-800 px-4 py-3 md:text-xs md:px-3 md:py-1.5",onClick:()=>{g.target?.id&&l(g.target.id),j()},children:"🗑 Delete state"})]}):(0,h.jsx)(h.Fragment,{children:(0,h.jsx)("button",{className:"block w-full text-left text-sm text-gray-300 hover:bg-gray-800 px-4 py-3 md:text-xs md:px-3 md:py-1.5",onClick:()=>{let a=prompt("State name:");a&&k(null,{name:a,kind:"normal"}),j()},children:"+ Add state here"})})})]})}a.s(["default",()=>cV],95421)}];
|
|
12
12
|
|
|
13
13
|
//# sourceMappingURL=%5Broot-of-the-server%5D__edbb995c._.js.map
|