agentic-mermaid 0.3.0 → 0.3.1
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/CHANGELOG.md +14 -0
- package/dist/agent-core.d.ts +8 -3
- package/dist/agent-core.js +2 -2
- package/dist/agent.d.ts +2 -2
- package/dist/agent.js +4 -4
- package/dist/agentic-mermaid-mcp.js +5 -5
- package/dist/am.js +6 -6
- package/dist/browser-lazy/chunks/architecture-3CGEU363.js +31 -0
- package/dist/browser-lazy/chunks/chunk-2U4EUPSI.js +4 -0
- package/dist/browser-lazy/chunks/chunk-4IUBLBJJ.js +11 -0
- package/dist/browser-lazy/chunks/chunk-4U2TVB2S.js +1 -0
- package/dist/browser-lazy/chunks/chunk-5Q4S74UO.js +1 -0
- package/dist/browser-lazy/chunks/chunk-6UT2VTFI.js +1 -0
- package/dist/browser-lazy/chunks/chunk-7D24ZLOV.js +1 -0
- package/dist/browser-lazy/chunks/chunk-A7L4WWVW.js +143 -0
- package/dist/browser-lazy/chunks/chunk-CTVVJPMX.js +24 -0
- package/dist/browser-lazy/chunks/chunk-DPSSG7LR.js +4 -0
- package/dist/browser-lazy/chunks/chunk-EPFMQPXX.js +1 -0
- package/dist/browser-lazy/chunks/chunk-FFOHLPDA.js +2 -0
- package/dist/browser-lazy/chunks/chunk-FLD63DXE.js +2 -0
- package/dist/browser-lazy/chunks/chunk-FXBBGAMJ.js +46 -0
- package/dist/browser-lazy/chunks/chunk-GRXCKTHX.js +0 -0
- package/dist/browser-lazy/chunks/chunk-HZ4ADQMK.js +1 -0
- package/dist/browser-lazy/chunks/chunk-I6VE56S7.js +1 -0
- package/dist/browser-lazy/chunks/chunk-JX5ZZY3T.js +1 -0
- package/dist/browser-lazy/chunks/chunk-KJVNXJ5Y.js +1 -0
- package/dist/browser-lazy/chunks/chunk-KTTWXSIX.js +1 -0
- package/dist/browser-lazy/chunks/chunk-M6BT2HIP.js +1 -0
- package/dist/browser-lazy/chunks/chunk-MMWVZP6M.js +1 -0
- package/dist/browser-lazy/chunks/chunk-OFRMKQA6.js +1 -0
- package/dist/browser-lazy/chunks/chunk-P7HMSKHJ.js +1 -0
- package/dist/browser-lazy/chunks/chunk-PXRUFH7U.js +1 -0
- package/dist/browser-lazy/chunks/chunk-PZEWZT35.js +1 -0
- package/dist/browser-lazy/chunks/chunk-RVO6J7S3.js +1 -0
- package/dist/browser-lazy/chunks/chunk-STQRDZ67.js +1 -0
- package/dist/browser-lazy/chunks/chunk-T7IJ6V4B.js +3 -0
- package/dist/browser-lazy/chunks/chunk-VDTSULBU.js +7 -0
- package/dist/browser-lazy/chunks/chunk-WEUWIFG3.js +1 -0
- package/dist/browser-lazy/chunks/class-B3AVLSIF.js +9 -0
- package/dist/browser-lazy/chunks/er-AF4BKKKC.js +9 -0
- package/dist/browser-lazy/chunks/flowchart-BE6BQZLZ.js +4 -0
- package/dist/browser-lazy/chunks/gantt-U4BMMSEL.js +28 -0
- package/dist/browser-lazy/chunks/gitgraph-UPSWNFRP.js +8 -0
- package/dist/browser-lazy/chunks/journey-PDZ7FDJR.js +40 -0
- package/dist/browser-lazy/chunks/mindmap-BFEUURLS.js +9 -0
- package/dist/browser-lazy/chunks/pie-ZFYW5JZO.js +19 -0
- package/dist/browser-lazy/chunks/quadrant-XJVEYYXK.js +24 -0
- package/dist/browser-lazy/chunks/radar-OVXFNRNC.js +32 -0
- package/dist/browser-lazy/chunks/render-core-R4ZGGEFS.js +12 -0
- package/dist/browser-lazy/chunks/sequence-AWY6JCSB.js +12 -0
- package/dist/browser-lazy/chunks/state-TCE4DXKR.js +4 -0
- package/dist/browser-lazy/chunks/timeline-W4ZVT3FF.js +20 -0
- package/dist/browser-lazy/chunks/xychart-K3QQACKS.js +36 -0
- package/dist/browser-lazy/index.d.ts +1012 -0
- package/dist/browser-lazy/index.js +1 -0
- package/dist/browser.global.js +322 -321
- package/dist/{chunk-AVCWKYII.js → chunk-BSVM3VMO.js} +18 -5
- package/dist/{chunk-HFD4MALA.js → chunk-FGO3J7RA.js} +7 -7
- package/dist/{chunk-UJNY65QS.js → chunk-JJ7JRYZV.js} +2 -2
- package/dist/{chunk-3QCXO4V6.js → chunk-KQMJ37OY.js} +4 -4
- package/dist/{chunk-GILQUGFK.js → chunk-MBIR6S3B.js} +2 -2
- package/dist/{chunk-WHYJLDYG.js → chunk-XVY324NY.js} +47736 -47665
- package/dist/{index-CLwYn6Im.d.ts → index-Do8z5rPq.d.ts} +5409 -5391
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/mcp-cli-7FLGTEG3.js +17 -0
- package/docs/README.md +1 -1
- package/docs/browser.md +355 -47
- package/package.json +13 -3
- package/server.json +2 -2
- package/dist/mcp-cli-SJVOGRA6.js +0 -17
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{a as y,b as w,c as m,d as j,h as p}from"./chunk-FXBBGAMJ.js";function C(o,t,r,u,i=0){if(!Number.isFinite(t)||t<=0||p(o,r,u,i)<=t)return o;let e=[];for(let l of o.split(/\r?\n/)){if(y.test(l)){e.push(..._(l,t,r,u,i));continue}let c=l.split(/\s+/).filter(Boolean),n="";for(let s of c){let d=n?`${n} ${s}`:s;if(p(d,r,u,i)<=t){n=d;continue}n&&e.push(n),n=k(s,t,r,u,i)}n&&e.push(n)}return e.join(`
|
|
2
|
+
`)}function $(o){let t=[],r=[];for(let u of w(o))for(let i of u.text.split(/(\s+)/))i&&(/^\s+$/.test(i)?r.length>0&&(t.push(r),r=[]):r.push({...u,text:i}));return r.length>0&&t.push(r),t}function I(o){return o.map(m).join("")}function _(o,t,r,u,i){let e=[],l=[];for(let c of $(o)){let n=I(c),s=[...l,n].join(" ");if(p(s,r,u,i)<=t){l.push(n);continue}if(l.length>0&&e.push(l.join(" ")),l=[],c.length===1&&p(n,r,u,i)>t){let d=c[0],a=k(d.text,t,r,d.bold?Math.max(700,u):u,i).split(`
|
|
3
|
+
`);e.push(...a.slice(0,-1).map(f=>m({...d,text:f}))),l=[m({...d,text:a.at(-1)})]}else l=[n]}return l.length>0&&e.push(l.join(" ")),e}function k(o,t,r,u,i=0){if(p(o,r,u,i)<=t)return o;let e=j(o),l=[],c=0;for(;c<e.length;){let n="",s=c;for(;s<e.length;){let b=e[s],g=n+b,F=s<e.length-1,A=e[s+1]??"",T=F&&h(b)&&h(A),M=g+(F&&!T?"-":"");if(n&&p(M,r,u,i)>t)break;n=g,s++}s===c&&(n=e[s],s++);let d=s<e.length,a=d&&h(e[s-1])&&h(e[s]),f=`${n}-`;l.push(d&&!a&&p(f,r,u,i)<=t?f:n),c=s}return l.join(`
|
|
4
|
+
`)}function h(o){return/[ᄀ-ᅟ⺀-가-힣豈-︰-﹏-⦆¢-₩\u{1F300}-\u{1FAFF}\u{20000}-\u{2FA1F}]|\p{Extended_Pictographic}|\uFE0F|\u200D/u.test(o)}export{C as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function t(e){return o=>e(o)}function i(e,o={}){return{positioned:e,...o}}function r(e,o){return Object.freeze({...e,...o,contractVersion:2,capabilityEvidence:Object.freeze([])})}export{t as a,i as b,r as c};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{g as O}from"./chunk-P7HMSKHJ.js";var T=Object.freeze({maxDepth:64,maxNodes:1e5,maxItemsPerContainer:4096,maxAggregateTextCharacters:5e6,maxAggregateTextBytes:1e7,maxDiagnostics:64}),I=new Set(["__proto__","prototype","constructor"]);function J(n){if(typeof n!="object"||n===null||Array.isArray(n))return!1;let s=Object.getPrototypeOf(n);return s===Object.prototype||s===null}function A(n){return typeof n=="number"?"must be a finite number":`must be a JSON value, not ${typeof n}`}function S(n,s=[],r={}){let e=T,a=[],l=new WeakSet,m=[{kind:"visit",value:n,path:s,depth:0}],u=0,f=0,d=0,o=!1,c=(i,t,p,g=!1)=>{if(!o){if(a.length>=e.maxDiagnostics-1){a.push({code:"JSON_DIAGNOSTIC_LIMIT",path:s,message:`exceeds the ${e.maxDiagnostics}-diagnostic admission limit`}),o=!0;return}a.push({code:i,path:t,message:p}),g&&(o=!0)}},y=(i,t)=>{if(o)return;if(f+=i.length,f>e.maxAggregateTextCharacters){c("JSON_TEXT_CHARACTER_LIMIT",t,`exceeds the aggregate ${e.maxAggregateTextCharacters}-character text limit`,!0);return}let p=e.maxAggregateTextBytes-d;d+=O(i,Math.max(0,p)),d>e.maxAggregateTextBytes&&c("JSON_TEXT_BYTE_LIMIT",t,`exceeds the aggregate ${e.maxAggregateTextBytes}-byte UTF-8 text limit`,!0)};for(;m.length>0&&!o;){let i=m.pop();if(i.kind==="exit"){l.delete(i.value);continue}if(i.depth>e.maxDepth){c("JSON_DEPTH_LIMIT",i.path,`exceeds maximum nesting depth ${e.maxDepth}`,!0);continue}if(u++,u>e.maxNodes){c("JSON_NODE_LIMIT",i.path,`exceeds the aggregate ${e.maxNodes}-node limit`,!0);continue}let t=i.value;if(t===null||typeof t=="boolean")continue;if(typeof t=="string"){y(t,i.path);continue}if(typeof t=="number"){Number.isFinite(t)||c("JSON_NON_JSON_VALUE",i.path,A(t));continue}if(typeof t!="object"){c("JSON_NON_JSON_VALUE",i.path,A(t));continue}if(l.has(t)){c("JSON_CYCLE",i.path,"must be acyclic");continue}if(Array.isArray(t)){if(t.length>e.maxItemsPerContainer){c("JSON_ITEM_LIMIT",i.path,`must contain at most ${e.maxItemsPerContainer} items`,!0);continue}l.add(t),m.push({kind:"exit",value:t});for(let g=t.length-1;g>=0;g--){if(!Object.prototype.hasOwnProperty.call(t,g)){c("JSON_SPARSE_ARRAY",[...i.path,g],"must not be a sparse array");continue}m.push({kind:"visit",value:t[g],path:[...i.path,g],depth:i.depth+1})}continue}if(!J(t)){c("JSON_NON_PLAIN_OBJECT",i.path,"must be a plain JSON object");continue}let p=Object.entries(t);if(p.length>e.maxItemsPerContainer){c("JSON_ITEM_LIMIT",i.path,`must contain at most ${e.maxItemsPerContainer} properties`,!0);continue}l.add(t),m.push({kind:"exit",value:t});for(let g=p.length-1;g>=0;g--){let[_,N]=p[g],x=[...i.path,_];if(y(_,x),I.has(_)){c("JSON_PROTOTYPE_KEY",x,"uses a forbidden prototype key");continue}N===void 0&&r.allowUndefinedObjectProperties||m.push({kind:"visit",value:N,path:x,depth:i.depth+1})}}return a}function b(n){let s="$";for(let r of n)typeof r=="number"?s+=`[${r}]`:/^[A-Za-z_$][\w$]*$/.test(r)?s+=`.${r}`:s+=`[${JSON.stringify(r)}]`;return s}var h=class extends TypeError{constructor(r,e){super(`${r} failed JSON/config admission: ${e.map(a=>`${b(a.path)} ${a.message}`).join("; ")}`);this.context=r;this.problems=e;this.name="JsonConfigAdmissionError"}context;problems;code="JSON_CONFIG_ADMISSION_FAILED"};function E(n,s,r={}){let e=S(n,[],r);if(e.length>0)throw new h(s,e)}function P(n,s,r={}){let e=T,a=[];if(n.length>e.maxAggregateTextCharacters?a.push({code:"JSON_TEXT_CHARACTER_LIMIT",path:[],message:`exceeds the aggregate ${e.maxAggregateTextCharacters}-character text limit`}):O(n,e.maxAggregateTextBytes)>e.maxAggregateTextBytes&&a.push({code:"JSON_TEXT_BYTE_LIMIT",path:[],message:`exceeds the aggregate ${e.maxAggregateTextBytes}-byte UTF-8 text limit`}),a.length===0&&r.trackFlowDepth){let l=[],m,u=!1,f=!1;for(let d=0;d<n.length;d++){let o=n[d];if(f){(o===`
|
|
2
|
+
`||o==="\r")&&(f=!1);continue}if(m){if(m==='"'&&u){u=!1;continue}if(m==='"'&&o==="\\"){u=!0;continue}if(m==="'"&&o==="'"&&n[d+1]==="'"){d++;continue}o===m&&(m=void 0);continue}if(o==='"'||o==="'"){m=o;continue}if(o==="#"){f=!0;continue}if(o==="{"||o==="["){if(l.push(o),l.length>e.maxDepth){a.push({code:"JSON_DEPTH_LIMIT",path:[],message:`exceeds maximum nesting depth ${e.maxDepth}`});break}}else(o==="}"||o==="]")&&l.pop()}}if(a.length>0)throw new h(s,a)}function L(n,s){let r=T.maxDiagnostics;return n.length<=r?[...n]:[...n.slice(0,r-1),`${s} exceeds the ${r}-diagnostic admission limit`]}export{T as a,S as b,h as c,E as d,P as e,L as f};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var a=/^\s*accTitle(?:\s*:\s*|\s+)(.+)$/i,m=/^\s*accDescr(?:\s*:\s*|\s+)(.+)$/i,y=/^\s*accDescr\s*:?\s*\{(.*)$/i;function A(i,e){let c=i[e];if(c===void 0)return null;let s=c.match(y);if(s){let o=[];for(let r=e;r<i.length;r++){let l=r===e?s[1]:i[r],d=l.indexOf("}");if(d<0){l.trim()&&o.push(l.trim());continue}let f=l.slice(0,d).trim();f&&o.push(f);let u=l.slice(d+1),b=i[r].match(/^\s*/)?.[0]??"";return{title:!1,form:"block",value:o.join(`
|
|
2
|
+
`).trim(),endIndex:r,...u.trim()?{suffixLine:b+u.trimStart()}:{}}}return}let n=c.match(a);if(n)return{title:!0,form:"inline",value:n[1].trim(),endIndex:e};let t=c.match(m);return t?{title:!1,form:"inline",value:t[1].trim(),endIndex:e}:null}function p(i){let e={},c=[],s;for(let n=0;n<i.length;n++){let t=A(i,n);if(t===void 0){s=n,c.push(...i.slice(n));break}if(t===null){c.push(i[n]);continue}t.title?e.title=t.value:e.descr=t.value,t.suffixLine&&c.push(t.suffixLine),n=t.endIndex}return{accessibility:e,familyLines:c,...s!==void 0?{unclosedIndex:s}:{}}}function g(i){if(i.unclosedIndex!==void 0)throw new Error("Unclosed accDescr block")}function x(i){return{...i.title!==void 0?{accessibilityTitle:i.title}:{},...i.descr!==void 0?{accessibilityDescription:i.descr}:{}}}function h(i,e){return e.title===void 0&&e.descr===void 0?i:{...i,...x(e)}}function j(i,e){return e.title===void 0&&e.descr===void 0?i:{...i,accessibility:{...e.title!==void 0?{title:e.title}:{},...e.descr!==void 0?{description:e.descr}:{}}}}export{A as a,p as b,g as c,x as d,h as e,j as f};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import{f as bt,g as de}from"./chunk-P7HMSKHJ.js";var xt=/<(\/)?(?:(b|strong)|(i|em)|(u)|(s|del))\s*>/gi,Ue=/<\/?(?:b|strong|i|em|u|s|del)\s*>/i;function Ve(e){let n=[],t=!1,r=!1,i=!1,s=!1,o=0;xt.lastIndex=0;let a;for(;(a=xt.exec(e))!==null;){a.index>o&&n.push({text:e.slice(o,a.index),bold:t,italic:r,underline:i,strikethrough:s}),o=a.index+a[0].length;let c=!!a[1];a[2]?t=!c:a[3]?r=!c:a[4]?i=!c:a[5]&&(s=!c)}return o<e.length&&n.push({text:e.slice(o),bold:t,italic:r,underline:i,strikethrough:s}),n}function Rs(e){let n=e.text;return e.strikethrough&&(n=`<s>${n}</s>`),e.underline&&(n=`<u>${n}</u>`),e.italic&&(n=`<i>${n}</i>`),e.bold&&(n=`<b>${n}</b>`),n}var ni=new Intl.Segmenter(void 0,{granularity:"grapheme"});function $n(e){return Array.from(ni.segment(e),n=>n.segment)}var ti=[[11904,12031],[12032,12255],[12288,12351],[12352,12447],[12448,12543],[12544,12591],[12688,12799],[12800,13311],[13312,19903],[19968,40959],[63744,64255],[131072,196607]],ri=[[4352,4447],[12592,12687],[44032,55215]],ii=[[9001,9002],[65040,65049],[65072,65135],[65280,65376],[65504,65510]],oi=[[127744,129791]];var si=[[768,879],[6832,6911],[7616,7679],[8400,8447],[65056,65071]],ai=new Set([8203,8204,8205,65279]),kt=65038,St=65039;function _e(e,n){for(let[t,r]of n)if(e>=t&&e<=r)return!0;return!1}function Et(e){return _e(e,ti)||_e(e,ri)||_e(e,ii)||_e(e,oi)}function Ct(e){return _e(e,si)||ai.has(e)}var ci=new Set(["i","l","t","f","j","I","1","!","|",".",",",":",";","'"]),di=new Set(["W","M","w","m","@","%"]),$t=new Set(["W","M"]),li=new Set(["(",")","[","]","{","}","/","\\","-",'"',"`"]);function wt(e){return Ct(e)||e===kt||e===St}function Nt(e){return Et(e)}var ui=/\p{Emoji_Presentation}|\p{Extended_Pictographic}/u;function Tt(e){return ui.test(e)}function fi(e){let n=e.codePointAt(0);return n===void 0||wt(n)?0:Nt(n)||Tt(e)?2:e===" "?.3:$t.has(e)?1.5:di.has(e)?1.2:ci.has(e)?.4:li.has(e)?.5:e==="r"?.8:n>=65&&n<=90?1.2:(n>=48&&n<=57,1)}var pi={version:3,unit:"px",fontCalibration:"Inter-compatible proportional estimate",monospaceCalibration:"0.6em-per-cell",wideCodepoints:"src/shared/unicode-ranges.ts",emojiDetection:"Emoji_Presentation-or-Extended_Pictographic",ambiguousWidth:"single-cell",paintedAdvanceProjection:"svg-textLength-spacingAndGlyphs",naturalAdvanceExemptions:"none"};function mi(e){return e>=600?.6:e>=500?.57:.54}function Rt(e){let n=mi(e.fontWeight),t=0,r=0;for(let s of e.text)t+=fi(s),r++;let i=e.fontSize*.15;return{contract:pi,width:t*e.fontSize*n+i,charWidthUnits:t,codePointCount:r,fontSize:e.fontSize,fontWeight:e.fontWeight,baseRatio:n,minPadding:i}}function We(e,n,t){return Rt({text:e,fontSize:n,fontWeight:t}).width}function Ps(e,n,t){let r=Rt({text:e,fontSize:n,fontWeight:t}),i=0;for(let s of e)$t.has(s)&&(i+=1.85-1.5);return r.width+i*n*r.baseRatio}function zs(e,n,t=0){let r=$n(e),i=0;for(let o of r){let a=0;for(let c of o){let d=c.codePointAt(0);d===void 0||wt(d)||(a=Math.max(a,Nt(d)||Tt(c)?2:1))}i+=a}let s=Math.max(0,r.length-1)*t;return Math.max(0,i*n*.6+s)}function yi(e,n,t,r=0){let i=Ue.test(e)?Ve(e):[{text:e,bold:!1}],s=i.map(c=>c.text).join(""),o=Math.max(0,$n(s).length-1)*r,a=i.reduce((c,d)=>c+We(d.text,n,d.bold?Math.max(700,t):t),0);return Math.max(0,a+o)}var wn=1.3;function Ds(e,n,t,r=0){let i=e.split(`
|
|
2
|
+
`),s=n*wn,o=0;for(let a of i){let c=yi(a,n,t,r);c>o&&(o=c)}return{width:o,height:i.length*s,lines:i,lineHeight:s}}var Mt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};function Ee(e){let n=e.replace("#",""),t=n.length===3?n[0]+n[0]+n[1]+n[1]+n[2]+n[2]:n;return[parseInt(t.slice(0,2),16),parseInt(t.slice(2,4),16),parseInt(t.slice(4,6),16)]}function gi(e){return/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(e)?Ee(e):null}function Nn(e,n,t){return"#"+[e,n,t].map(r=>Math.round(Math.max(0,Math.min(255,r))).toString(16).padStart(2,"0")).join("")}function H(e,n,t){let[r,i,s]=Ee(e),[o,a,c]=Ee(n),d=t/100;return Nn(r*d+o*(1-d),i*d+a*(1-d),s*d+c*(1-d))}function vt(e){let n=Tn(e);if(!n)return null;let t=r=>{let i=r/255;return i<=.04045?i/12.92:((i+.055)/1.055)**2.4};return .2126*t(n[0])+.7152*t(n[1])+.0722*t(n[2])}function Se(e,n){let t=vt(e),r=vt(n);return t===null||r===null?null:(Math.max(t,r)+.05)/(Math.min(t,r)+.05)}function se(e,n,t,r){let i=Se(e,n);if(i===null||i>=t)return e;let s=Se("#000000",n)??0,o=Se("#ffffff",n)??0,c=(r?Se(r,n)??0:0)>=t?r:s>=o?"#000000":"#ffffff";if((Se(c,n)??0)<t)return e;for(let d=1;d<=1e3;d++){let u=H(c,e,d/10);if((Se(u,n)??0)>=t)return u}return c}function le(e){return/^#[0-9a-fA-F]{3,8}$/.test(e)}function Fs(e){return/^#[0-9a-fA-F]{6}$/.test(e)}function It(e,n,t){return(e*299+n*587+t*114)/1e3}function Tn(e){let n=e.trim().toLowerCase(),t=Mt[n];if(t){let o=Ee(t);return[o[0],o[1],o[2],1]}if(n==="transparent")return[0,0,0,0];let r=n.match(/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i)?.[1];if(r){let o=r.length<=4?[...r].map(a=>a+a).join(""):r;return[Number.parseInt(o.slice(0,2),16),Number.parseInt(o.slice(2,4),16),Number.parseInt(o.slice(4,6),16),o.length===8?Number.parseInt(o.slice(6,8),16)/255:1]}let i=n.match(/^rgba?\((.*)\)$/);if(i){let o=i[1].trim(),a=o.split("/").map(p=>p.trim()),c=(o.includes(",")?o.split(","):a[0].split(/\s+/)).map(p=>p.trim()),d=a[1];if(c.length===4&&d===void 0&&(d=c.pop()),c.length!==3)return null;let u=p=>{let g=p.endsWith("%"),b=Number.parseFloat(p);if(!Number.isFinite(b))return null;let x=g?b*2.55:b;return x>=0&&x<=255?x:null},f=c.map(u);if(f.some(p=>p===null))return null;let m=At(d);return m===null?null:[f[0],f[1],f[2],m]}let s=n.match(/^hsla?\((.*)\)$/);if(s){let o=s[1].trim(),a=o.split("/").map(h=>h.trim()),c=(o.includes(",")?o.split(","):a[0].split(/\s+/)).map(h=>h.trim()),d=a[1];if(c.length===4&&d===void 0&&(d=c.pop()),c.length!==3||!c[1].endsWith("%")||!c[2].endsWith("%"))return null;let u=hi(c[0]),f=Number.parseFloat(c[1]),m=Number.parseFloat(c[2]),p=At(d);if(u===null||![f,m].every(Number.isFinite)||f<0||f>100||m<0||m>100||p===null)return null;let g=f/100,b=m/100,x=(1-Math.abs(2*b-1))*g,v=(u%360+360)%360/60,y=x*(1-Math.abs(v%2-1)),[E,w,j]=v<1?[x,y,0]:v<2?[y,x,0]:v<3?[0,x,y]:v<4?[0,y,x]:v<5?[y,0,x]:[x,0,y],F=b-x/2;return[(E+F)*255,(w+F)*255,(j+F)*255,p]}return null}function hi(e){let n=e.trim().match(/^([+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?)(deg|grad|rad|turn)?$/i);if(!n)return null;let t=Number(n[1]);if(!Number.isFinite(t))return null;switch(n[2]?.toLowerCase()){case"grad":return t*.9;case"rad":return t*180/Math.PI;case"turn":return t*360;default:return t}}function At(e){if(e===void 0)return 1;let n=e.endsWith("%"),t=Number.parseFloat(e);if(!Number.isFinite(t))return null;let r=n?t/100:t;return r>=0&&r<=1?r:null}function _t(e,n){let t=Tn(e);if(!t)return null;if(t[3]===1)return[t[0],t[1],t[2]];let r=Tn(n);if(!r)return null;let i=r[3],s=t[3]+i*(1-t[3]);return s<=0?null:[0,1,2].map(o=>(t[o]*t[3]+r[o]*i*(1-t[3]))/s)}function Ot(e){let n=gi(e);if(!n)return null;let t=r=>{let i=r/255;return i<=.04045?i/12.92:((i+.055)/1.055)**2.4};return .2126*t(n[0])+.7152*t(n[1])+.0722*t(n[2])}function bi(e,n){let t=Ot(e),r=Ot(n);if(t===null||r===null)return null;let[i,s]=t>r?[t,r]:[r,t];return(i+.05)/(s+.05)}function Us(e,n,t="#ffffff"){let r=_t(n,t);if(!r)return null;let i=Nn(...r),s=_t(e,i);return s?bi(Nn(...s),i):null}function Pt(e){return e!==void 0&&/[A-Za-z0-9_.:-]/.test(e)}function xi(e,n){let t;for(let r=n;r<e.length;r++){let i=e[r];if(t)i===t&&(t=void 0);else if(i==='"'||i==="'")t=i;else if(i===">")return r+1}return-1}function Rn(e){let n=[];for(let t=e.indexOf("<");t>=0;t=e.indexOf("<",t+1)){if(e.startsWith("<!--",t)){let c=e.indexOf("-->",t+4);if(c<0)break;t=c+2;continue}let r=e[t+1];if(!r||r==="/"||r==="!"||r==="?")continue;let i=t+1;for(;Pt(e[i]);)i++;if(i===t+1)continue;let s=xi(e,i);if(s<0)break;let o=[],a=i;for(;a<s-1;){for(;/\s/.test(e[a]??"");)a++;if(e[a]===">"||e[a]==="/"&&e[a+1]===">")break;let c=a;for(;Pt(e[a]);)a++;if(a===c)break;let d=e.slice(c,a);for(;/\s/.test(e[a]??"");)a++;if(e[a]!=="=")break;for(a++;/\s/.test(e[a]??"");)a++;let u=e[a];if(u!=='"'&&u!=="'")break;a++;let f=a;for(;a<s-1&&e[a]!==u;)a++;if(e[a]!==u)break;o.push({name:d,value:e.slice(f,a),quote:u,nameStart:c,valueStart:f,valueEnd:a}),a++}n.push({name:e.slice(t+1,i),start:t,end:s,attributes:Object.freeze(o),selfClosing:/\/\s*>$/.test(e.slice(t,s))}),t=s-1}return Object.freeze(n)}function qs(e){let n=e.search(/\S/);if(n<0)return;let t=Rn(e)[0];return t?.start===n&&t.name==="svg"?t:void 0}function Hs(e,n){return e.attributes.find(t=>t.name===n)}function zt(e,n){let t=e;for(let r of[...n].sort((i,s)=>s.start-i.start))t=`${t.slice(0,r.start)}${r.value}${t.slice(r.end)}`;return t}function Ks(e,n){let t=[];for(let r of Rn(e))for(let i of r.attributes){let s=n(i,r);s!==void 0&&s!==i.value&&t.push({start:i.valueStart,end:i.valueEnd,value:s})}return zt(e,t)}var ki=new Set(["clip-path","color","cursor","fill","filter","flood-color","lighting-color","marker-end","marker-mid","marker-start","mask","stop-color","stroke","style"]);function Dt(e){let n=[];for(let t of Rn(e)){for(let r of t.attributes)ki.has(r.name)&&n.push({start:r.valueStart,end:r.valueEnd});if(t.name==="style"&&!t.selfClosing){let r=e.indexOf("</style",t.end);r>=0&&n.push({start:t.end,end:r})}}return n}function Mn(e){return Dt(e).map(n=>e.slice(n.start,n.end)).join(`
|
|
3
|
+
`)}function vn(e,n){return zt(e,Dt(e).map(t=>({...t,value:n(e.slice(t.start,t.end))})))}function Xs(e,n,t){return`${e.slice(0,n.start)}${t}${e.slice(n.end)}`}var Si=/^(?:#[0-9a-f]{3,4}|#[0-9a-f]{6}|#[0-9a-f]{8}|[a-z][a-z0-9-]*)$/i,jt=/^[a-z0-9_#(),.%+\-\s/]*$/i,Ge=new Set(["color","color-mix","device-cmyk","hsl","hsla","hwb","lab","lch","oklab","oklch","rgb","rgba"]);function Bt(e){if(typeof e!="string")return;let n=e.trim();if(n.length===0||n.length>256)return;if(Si.test(n))return n;if(!jt.test(n))return;let t=n.indexOf("(");if(t<=0||!n.endsWith(")"))return;let r=0;for(let s of n)if(s==="(")r++;else if(s===")"&&(r--,r<0))return;if(r!==0)return;for(let s of n.matchAll(/([a-z][a-z0-9-]*)\s*\(/gi))if(!Ge.has(s[1].toLowerCase()))return;let i=n.slice(0,t).trim().toLowerCase();return Ge.has(i)?n:void 0}function Zs(e){return Bt(e)!==void 0}function Ce(e){let n=Bt(e);if(n!==void 0)return n;if(typeof e!="string")return;let t=e.trim();if(t.length===0||t.length>256||!jt.test(t))return;let r=t.indexOf("(");if(r<=0||!t.endsWith(")"))return;let i=0;for(let o of t)if(o==="(")i++;else if(o===")"&&(i--,i<0))return;if(i!==0)return;for(let o of t.matchAll(/([a-z][a-z0-9-]*)\s*\(/gi)){let a=o[1].toLowerCase();if(a!=="var"&&!Ge.has(a))return}let s=t.slice(0,r).trim().toLowerCase();return s==="var"||Ge.has(s)?t:void 0}function Lt(e,n){let t=Ce(e);if(t===void 0)throw new Error(`${n} must be a safe non-fetching CSS color or var() reference`);return t}var Ei=/^[a-z0-9_,'().\s-]+$/i;function An(e){if(typeof e!="string")return;let n=e.trim();if(n.length===0||n.length>256||!Ei.test(n))return;let t=0;for(let r of n)if(r==="(")t++;else if(r===")"&&(t--,t<0))return;if(t===0){for(let r of n.matchAll(/([a-z][a-z0-9-]*)\s*\(/gi))if(r[1].toLowerCase()!=="var")return;if(!/\b(?:url|expression|import)\b/i.test(n))return n}}function _n(e){let n=An(e);if(n===void 0)throw new Error("font family must be a safe non-fetching CSS family or var() fallback");return n}var oa={bg:"#FFFFFF",fg:"#27272A"},U={text:100,textSec:78,textMuted:66,textFaint:54,line:50,arrow:85,nodeFill:3,nodeStroke:20,groupHeader:5,innerStroke:12,keyBadge:10};function sa(e){if(!e.shadow)return"";let n=Ci(e.bg);return` <filter id="bm-shadow" x="-12%" y="-10%" width="128%" height="136%">
|
|
4
|
+
<feDropShadow dx="0" dy="1.5" stdDeviation="2.5" flood-color="${n?"#ffffff":"#000000"}" flood-opacity="${n?"0.12":"0.08"}" />
|
|
5
|
+
</filter>`}function Ci(e){if(e.replace("#","").length<6)return!1;let[t,r,i]=Ee(e);return It(t,r,i)/255<.4}function Ft(e){return/^[A-Za-z0-9][A-Za-z0-9 _-]*$/.test(e)}function Ut(e,n,t,r=!1){e=_n(e);let i=r?[...Ft(e)?[`@import url('https://fonts.googleapis.com/css2?family=${encodeURIComponent(e)}:wght@400;500;600;700&display=swap');`]:[],...n?["@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&display=swap');"]:[]]:[],s=`
|
|
6
|
+
/* Derived from --bg and --fg (overridable via --line, --accent, etc.) */
|
|
7
|
+
--_text: var(--fg);
|
|
8
|
+
--_text-sec: var(--muted, color-mix(in srgb, var(--fg) ${U.textSec}%, var(--bg)));
|
|
9
|
+
--_text-muted: var(--muted, color-mix(in srgb, var(--fg) ${U.textMuted}%, var(--bg)));
|
|
10
|
+
--_text-faint: color-mix(in srgb, var(--fg) ${U.textFaint}%, var(--bg));
|
|
11
|
+
--_line: var(--line, color-mix(in srgb, var(--fg) ${U.line}%, var(--bg)));
|
|
12
|
+
--_arrow: var(--accent, color-mix(in srgb, var(--fg) ${U.arrow}%, var(--bg)));
|
|
13
|
+
--_node-fill: var(--surface, color-mix(in srgb, var(--fg) ${U.nodeFill}%, var(--bg)));
|
|
14
|
+
--_node-stroke: var(--border, color-mix(in srgb, var(--fg) ${U.nodeStroke}%, var(--bg)));
|
|
15
|
+
--_group-fill: var(--bg);
|
|
16
|
+
--_group-hdr: color-mix(in srgb, var(--fg) ${U.groupHeader}%, var(--bg));
|
|
17
|
+
--_inner-stroke: color-mix(in srgb, var(--fg) ${U.innerStroke}%, var(--bg));
|
|
18
|
+
--_key-badge: color-mix(in srgb, var(--fg) ${U.keyBadge}%, var(--bg));`,o=t?`
|
|
19
|
+
.node, .class-node, .entity, .actor[data-type="participant"], .note, .block, .timeline-event, .journey-task { filter: url(#bm-shadow); }`:"",c=` text { font-family: var(--font, ${Ft(e)?`'${e}'`:e}), system-ui, sans-serif; }`;return["<style>",...i.length>0?[` ${i.join(`
|
|
20
|
+
`)}`,c]:[c],...n?[" .mono { font-family: 'JetBrains Mono', 'SF Mono', 'Fira Code', ui-monospace, monospace; }"]:[],` svg {${s}`,` }${o}`,"</style>"].join(`
|
|
21
|
+
`)}function Vt(e,n,t,r,i){t.font!==void 0&&_n(t.font);for(let m of["bg","fg","line","accent","muted","surface","border"]){let p=t[m];p!==void 0&&Lt(p,m)}let s=[`--bg:${t.bg}`,`--fg:${t.fg}`,t.line?`--line:${t.line}`:"",t.accent?`--accent:${t.accent}`:"",t.muted?`--muted:${t.muted}`:"",t.surface?`--surface:${t.surface}`:"",t.border?`--border:${t.border}`:"",t.font?`--font:${t.font}`:""].filter(Boolean).join(";"),o=r?"":";background:var(--bg)",a=wi(i)?i:void 0,c=a?.attrs??i??{},d=`${s}${o}${a?.style?`;${a.style}`:""}`,u=Object.entries(c).filter(([,m])=>m!==void 0).map(([m,p])=>`${m}="${p}"`).join(" "),f=u?` ${u}`:"";return`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${e} ${n}" width="${a?.width??e}" height="${a?.height??n}" style="${d}"${f}>`}function $i(e){let{bg:n,fg:t}=e,r=e.surface??H(t,n,U.nodeFill),i=H(t,n,U.groupHeader),s=se(t,n,4.5);s=se(s,r,4.5);let o=se(e.muted??H(t,n,U.textSec),n,4.5,s);o=se(o,i,4.5,s);let a=se(e.muted??H(t,n,U.textMuted),n,4.5,s),c=se(H(t,n,U.textFaint),n,3,s);return{bg:n,fg:t,text:s,textSec:o,textMuted:a,textFaint:c,line:se(e.line??H(t,n,U.line),n,3,s),arrow:se(e.accent??H(t,n,U.arrow),n,3,s),nodeFill:r,nodeStroke:e.border??H(t,n,U.nodeStroke),groupFill:n,groupHdr:i,innerStroke:H(t,n,U.innerStroke),keyBadge:H(t,n,U.keyBadge)}}function aa(e,n){if(!le(n.bg)||!le(n.fg))return e;let t=$i(n),r=new Map;r.set("bg",t.bg),r.set("fg",t.fg),n.line&&le(n.line)&&r.set("line",n.line),n.accent&&le(n.accent)&&r.set("accent",n.accent),n.muted&&le(n.muted)&&r.set("muted",n.muted),n.surface&&le(n.surface)&&r.set("surface",n.surface),n.border&&le(n.border)&&r.set("border",n.border);let i=/--([\w-]+)\s*:\s*(#[0-9a-fA-F]{3,8})\s*;?/g,s;for(;(s=i.exec(Mn(e)))!==null;)r.set(s[1],s[2]);r.set("_text",t.text),r.set("_text-sec",t.textSec),r.set("_text-muted",t.textMuted),r.set("_text-faint",t.textFaint),r.set("_line",t.line),r.set("_arrow",t.arrow),r.set("_node-fill",t.nodeFill),r.set("_node-stroke",t.nodeStroke),r.set("_group-fill",t.groupFill),r.set("_group-hdr",t.groupHdr),r.set("_inner-stroke",t.innerStroke),r.set("_key-badge",t.keyBadge);let o=new Set(["font"]);if(n.font)for(let p of n.font.matchAll(/var\(\s*--([\w-]+)/g))r.has(p[1])||o.add(p[1]);let a=(p,g,b)=>{let x=p;for(let v=0;v<b;v++){let y=x;if(x=x.replace(/var\(--([\w-]+)\)/g,(E,w)=>o.has(w)?E:g.get(w)??E),x=x.replace(/var\(--([\w-]+),\s*([^()]+)\)/g,(E,w,j)=>o.has(w)?E:g.get(w)??j.trim()),x=x.replace(/color-mix\(in srgb,\s*(#[0-9a-fA-F]{3,8})\s+(\d+(?:\.\d+)?)%,\s*(#[0-9a-fA-F]{3,8}|transparent)\)/g,(E,w,j,F)=>{let h=F==="transparent"?t.bg:F;return H(w,h,parseFloat(j))}),x===y)break}return x},c=vn(e,p=>a(p,r,10)),d=new Map,u=/--([\w-]+)\s*:\s*(#[0-9a-fA-F]{3,8})\s*;/g,f=Mn(c),m;for(;(m=u.exec(f))!==null;)d.set(m[1],m[2]);if(d.size>0)for(let p=0;p<5;p++){let g=vn(c,b=>a(b,d,1));if(g===c)break;c=g}return c}function wi(e){return!!(e&&("width"in e||"height"in e||"style"in e||"attrs"in e))}function ua(e){return(e.startsWith('"')&&e.endsWith('"')?e.slice(1,-1):e).replace(/<br\s*\/?>/gi,`
|
|
22
|
+
`).replace(/\\n/g,`
|
|
23
|
+
`).replace(/<\/?(?:sub|sup|small|mark)\s*>/gi,"").replace(/\*\*(.+?)\*\*/g,"<b>$1</b>").replace(/(?<!\*)\*([^\s*](?:[^*]*[^\s*])?)\*(?!\*)/g,"<i>$1</i>").replace(/~~(.+?)~~/g,"<s>$1</s>")}function fa(e){return e.replace(/<\/?(?:b|strong|i|em|u|s|del)\s*>/gi,"")}function Y(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function N(e){return Y(e)}function Wt(e){if(!Ue.test(e))return Y(e);let n=Ve(e);return n.length===0?"":n.every(r=>!r.bold&&!r.italic&&!r.underline&&!r.strikethrough)?n.map(r=>Y(r.text)).join(""):n.map(r=>{let i=Y(r.text);if(!r.bold&&!r.italic&&!r.underline&&!r.strikethrough)return i;let s=[];r.bold&&s.push('font-weight="bold"'),r.italic&&s.push('font-style="italic"');let o=[];return r.underline&&o.push("underline"),r.strikethrough&&o.push("line-through"),o.length&&s.push(`text-decoration="${o.join(" ")}"`),`<tspan ${s.join(" ")}>${i}</tspan>`}).join("")}function Ni(e,n,t,r,i,s=.35){let o=e.split(`
|
|
24
|
+
`);if(o.length===1){let u=r*s;return`<text x="${n}" y="${t}" ${i} dy="${u}">${Wt(e)}</text>`}let a=r*wn,c=-((o.length-1)/2)*a+r*s,d=o.map((u,f)=>`<tspan x="${n}" dy="${f===0?c:a}">${Wt(u)}</tspan>`).join("");return`<text x="${n}" y="${t}" ${i}>${d}</text>`}function pa(e,n,t,r,i,s,o,a,c){let d=r+o*2,u=i+o*2,f=`<rect x="${n-d/2}" y="${t-u/2}" width="${d}" height="${u}" ${c} />`,m=Ni(e,n,t,s,a);return`${f}
|
|
25
|
+
${m}`}var Gt=Object.freeze(["svg","png","ascii","unicode","html","layout"]);var Ti=1,Ri=/^[a-z][a-z0-9.-]*:[a-z0-9][a-z0-9._/-]*$/,Mi=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/,vi=new Set(["required","preferred","optional"]);function qe(e){return Ri.test(e)}function $e(e){if(typeof e!="string")return;let n=e.match(Mi);if(!n)return;let t=n[4];if(!t?.split(".").some(r=>/^\d+$/.test(r)&&r.length>1&&r.startsWith("0")))return{major:n[1],minor:n[2],patch:n[3],...t?{prerelease:t}:{}}}function On(e,n){return e.length!==n.length?e.length<n.length?-1:1:e===n?0:e<n?-1:1}function Ai(e,n){return On(e.major,n.major)||On(e.minor,n.minor)||On(e.patch,n.patch)}function He(e){if(typeof e!="string")return!1;let n=e.trim();if(n==="*"||/^(0|[1-9]\d*)\.(?:x|\*)$/i.test(n))return!0;let t=n.match(/^(\^|~|>=)?(.+)$/),r=$e(t?.[2]??"");return!t||!r?!1:!r.prerelease||t[1]===void 0}function In(e,n){let t=$e(e);if(!t||!He(n))return!1;let r=n.trim();if(r==="*")return t.prerelease===void 0;let i=r.match(/^(0|[1-9]\d*)\.(?:x|\*)$/i);if(i)return t.prerelease===void 0&&t.major===i[1];let s=r.match(/^(\^|~|>=)?(.+)$/),o=$e(s?.[2]??"");if(!s||!o)return!1;let a=Ai(t,o);if(t.prerelease||o.prerelease)return s[1]===void 0&&a===0&&t.prerelease===o.prerelease;switch(s[1]){case">=":return a>=0;case"~":return a>=0&&t.major===o.major&&t.minor===o.minor;case"^":return a<0?!1:o.major!=="0"?t.major===o.major:o.minor!=="0"?t.major==="0"&&t.minor===o.minor:t.major==="0"&&t.minor==="0"&&t.patch===o.patch;default:return a===0}}function _i(e,n){if(!Array.isArray(e))throw new TypeError("Capability offers must be an array");if(!Array.isArray(n))throw new TypeError("Capability requirements must be an array");let t=new Map;for(let[o,a]of e.entries()){if(!a||typeof a!="object"||Array.isArray(a))throw new TypeError(`Capability offer at index ${o} must be an object`);if(typeof a.id!="string")throw new Error(`Invalid capability id "${String(a.id)}"`);if(!qe(a.id))throw new Error(`Invalid capability id "${a.id}"`);if(typeof a.version!="string")throw new Error(`Capability "${a.id}" has invalid semantic version "${String(a.version)}"`);if(!$e(a.version))throw new Error(`Capability "${a.id}" has invalid semantic version "${a.version}"`);if(t.has(a.id))throw new Error(`Duplicate capability offer "${a.id}"`);t.set(a.id,a.version)}let r=new Set,i=n.map((o,a)=>{if(!o||typeof o!="object"||Array.isArray(o))throw new TypeError(`Capability requirement at index ${a} must be an object`);if(typeof o.id!="string")throw new Error(`Invalid capability id "${String(o.id)}"`);if(!qe(o.id))throw new Error(`Invalid capability id "${o.id}"`);if(!vi.has(o.level))throw new Error(`Capability "${o.id}" has invalid requirement level "${String(o.level)}"`);if(!He(o.range))throw new Error(`Capability "${o.id}" has invalid semantic-version range "${String(o.range)}"`);if(r.has(o.id))throw new Error(`Duplicate capability requirement "${o.id}"`);r.add(o.id);let c=t.get(o.id),d=c===void 0?"unsupported":In(c,o.range)?"selected":"incompatible";return Object.freeze({id:o.id,range:o.range,level:o.level,status:d,...c!==void 0?{version:c}:{}})}),s=i.every(o=>o.level!=="required"||o.status==="selected");return Object.freeze({version:Ti,accepted:s,resolutions:Object.freeze(i)})}var Oi=Object.freeze([{id:"core:render-request",version:"1.0.0"},{id:"core:family-descriptor",version:"1.0.0"}].map(e=>Object.freeze(e)));function Ii(e,n,t,r){let i={id:`output:${e}`,version:"1.0.0"},s=Gt.includes(e);return _i([...Oi,...n,...!s||!r?[]:[i]],[{id:"core:render-request",range:"^1.0.0",level:"required"},...t,{id:`output:${e}`,range:"^1.0.0",level:"required"}])}function ha(e,n){return Ii(e,n.offers,n.requirements,n.outputAvailable)}var qt="2.0.0";var Ht="0.3.1";var Pi=Object.freeze({core:Ht,scene:qt});function zi(e){let n=[];for(let[t,r]of Object.entries(e.compatibility)){if(r===void 0)continue;let i=Pi[t];if(!He(r)){n.push(Object.freeze({contract:t,range:r,status:"invalid",diagnostic:`Compatibility requirement "${t}" has invalid semantic-version range "${r}".`}));continue}if(i!==void 0){let s=In(i,r);n.push(Object.freeze({contract:t,range:r,status:s?"compatible":"incompatible",version:i,...s?{}:{diagnostic:`Compatibility requirement "${t}" range "${r}" does not include host version ${i}.`}}));continue}if(!qe(t)){n.push(Object.freeze({contract:t,range:r,status:"invalid",diagnostic:`Unknown compatibility requirement "${t}" must use a namespace.`}));continue}n.push(Object.freeze({contract:t,range:r,status:"deferred"}))}return Object.freeze({accepted:n.every(t=>t.status==="compatible"||t.status==="deferred"),resolutions:Object.freeze(n)})}var Kt=/^[a-z][a-z0-9-]*$/,Xt=/^[a-z0-9][a-z0-9._/-]*$/,Yt=new WeakSet,Ke=new WeakMap;function Di(e,n){let t=Ke.get(e);if(t)throw t.reentrantAttempted=!0,new Error(`Extension registry mutation is forbidden while ${t.operation} is in progress`);let r={operation:n,reentrantAttempted:!1};return Ke.set(e,r),r}function ji(e){if(e.reentrantAttempted)throw new Error(`Extension registry mutation is forbidden after a reentrant attempt during ${e.operation}`)}function Bi(e,n){Ke.get(e)===n&&Ke.delete(e)}function Zt(e,n){if(!Kt.test(e))throw new Error(`Invalid extension kind "${e}"`);if(!Xt.test(n))throw new Error(`Invalid ${e} extension local id "${n}"`);return`${e}:${n}`}function Xe(e){let n=e.indexOf(":");if(n<=0||n===e.length-1||e.indexOf(":",n+1)!==-1)return;let t=e.slice(0,n),r=e.slice(n+1);if(!(!Kt.test(t)||!Xt.test(r)))return{kind:t,localId:r}}function Ye(e){let n=e.id,t=e.kind,r=e.version,i=e.compatibility,s=e.provenance,o=Object.freeze({...i??{}}),a=Object.freeze({...s}),c=Xe(n);if(!c||c.kind!==t)throw new Error(`Extension id "${n}" must use the "${t}:" namespace`);if(!$e(r))throw new Error(`Extension "${n}" requires a semantic version (received "${r}")`);if(a.owner.trim().length===0)throw new Error(`Extension "${n}" requires a provenance owner`);if(a.source.trim().length===0)throw new Error(`Extension "${n}" requires a provenance source`);let d=Object.freeze({id:n,kind:t,version:r,compatibility:o,provenance:a}),u=zi(d);if(!u.accepted)throw new Error(`Extension "${n}" has incompatible requirements: ${u.resolutions.filter(f=>f.status==="incompatible"||f.status==="invalid").map(f=>f.diagnostic).join("; ")}`);return Yt.add(d),d}var Pn=class extends Error{constructor(t,r){super(`Cannot register ${t.kind} "${t.id}" for owner "${t.provenance.owner}": already registered by "${r.provenance.owner}" at version ${r.version}`);this.incoming=t;this.existing=r;this.name="ExtensionCollisionError"}incoming;existing;code="EXTENSION_ID_COLLISION"};function Jt(e,n){let t=Di(e,"extension registration");try{let r=Object.freeze({identity:n.identity,value:n.value});if(!Yt.has(r.identity))throw new TypeError("Extension registration identity must be created by createExtensionIdentity()");let i=r.identity.id,s=e.get(i);if(s)throw new Pn(r.identity,s.identity);ji(t),e.set(i,r)}finally{Bi(e,t)}}var wa=Object.freeze({fontFamily:{kind:"font",description:"Safe font family/stack for roles whose descriptor exposes family-specific typography."},fontSize:{kind:"number",minimum:1,maximum:256,expected:"between 1 and 256",description:"Font size in SVG user units."},fontWeight:{kind:"number",minimum:1,maximum:1e3,expected:"between 1 and 1000",description:"CSS numeric font weight."},letterSpacing:{kind:"number",minimum:-2,maximum:4,expected:"between -2 and 4",description:"Letter spacing in SVG user units."},textTransform:{kind:"enum",values:["uppercase","lowercase","capitalize"],description:"Text transformation."},textColor:{kind:"color",description:"Text paint."},paddingX:{kind:"number",minimum:0,maximum:256,expected:"between 0 and 256",description:"Horizontal role padding."},paddingY:{kind:"number",minimum:0,maximum:256,expected:"between 0 and 256",description:"Vertical role padding."},cornerRadius:{kind:"number",minimum:0,maximum:256,expected:"between 0 and 256",description:"Applicable corner radius."},lineWidth:{kind:"number",exclusiveMinimum:0,maximum:20,expected:"greater than 0 and at most 20",description:"Border or connector width."},bendRadius:{kind:"number",minimum:0,maximum:256,expected:"between 0 and 256",description:"Applicable connector bend radius."},fillColor:{kind:"color",description:"Surface fill paint."},borderColor:{kind:"color",description:"Border paint."},strokeColor:{kind:"color",description:"Connector stroke paint."},headerFillColor:{kind:"color",description:"Group header surface paint."},cue:{kind:"enum",values:["none","outline","double-line","pattern"],description:"Non-color semantic cue on roles whose family renderer exposes a cue projection."}}),zn=Object.freeze(["fontSize","fontWeight","letterSpacing","textTransform","textColor","paddingX","paddingY","cornerRadius","lineWidth","fillColor","borderColor"]),Qt=Object.freeze(["fontSize","fontWeight","letterSpacing","textTransform","textColor","lineWidth","bendRadius","strokeColor"]),Li=Object.freeze([...zn,"fontFamily","headerFillColor"]),Fi=Object.freeze(["fontSize","fontWeight","letterSpacing","textTransform","textColor"]),Ui=Object.freeze(["fontFamily","fontSize","fontWeight","letterSpacing","textTransform","textColor","fillColor","borderColor","strokeColor","lineWidth","cue"]),Vi=Object.freeze(["fillColor","borderColor","strokeColor","lineWidth","cue"]),Wi=Object.freeze(["fillColor","borderColor","strokeColor","lineWidth","textColor"]),Dn=Object.freeze(["fillColor","borderColor","strokeColor","lineWidth"]),Gi=Object.freeze(["borderColor","strokeColor","lineWidth"]),er=Object.freeze([...Dn,"cue"]);function W(e,n){return Object.freeze({properties:e,...n?{bindingFamilies:Object.freeze([...n])}:{}})}var Oe=Object.freeze({node:W(zn),edge:W(Qt),group:W(Li),"group-header":W(Ui,["journey"]),label:W(Fi),actor:W(zn,["sequence"]),relationship:W(Qt,["er"]),"pie-slice":W(Vi,["pie","radar"]),legend:W(Wi,["radar"]),bar:W(Dn,["xychart"]),series:W(Gi,["xychart"]),point:W(Dn,["radar"]),task:W(er,["gantt"]),milestone:W(er,["gantt"])}),qi=Object.freeze(Object.keys(Oe)),Hi=Object.freeze(qi.filter(e=>"bindingFamilies"in Oe[e])),Na=Object.freeze([...new Set(Hi.flatMap(e=>Oe[e].properties))]);var Z=["shape","connector","text","group","document"],pe=["shape"],Ze=["connector"],nr=["text"],Ki=["shape","text"],ee=["shape","group"],Xi=["shape","text","group"],Yi=["connector","group"],Zi=["document"],tr=["text","group"];var Ji=["shape","text","document"],Qi=["document"];function $(e,n,t,r={}){let i=Oe[e];return Object.freeze({applicableKinds:n,styleFallback:t,styleConsumption:i?"exact":"fallback-only",styleExtras:Object.freeze([]),...i?{styleProperties:i.properties}:{},styleBindingFamilies:Object.freeze([...i?.bindingFamilies??[]]),domIdentity:!1,relation:!1,sketch:"none",textHalo:!1,...r})}var Je=Object.freeze({node:$("node",ee,"node",{domIdentity:!0,sketch:"shape"}),edge:$("edge",Ze,"edge",{domIdentity:!0,relation:!0,sketch:"connector"}),"edge-label":$("edge-label",tr,"label"),group:$("group",ee,"group",{domIdentity:!0,sketch:"shape"}),"group-header":$("group-header",Z,"group",{sketch:"shape",textHalo:!0}),label:$("label",nr,"label",{textHalo:!0}),actor:$("actor",ee,"node",{domIdentity:!0,sketch:"shape"}),lifeline:$("lifeline",Ze,"edge",{sketch:"connector"}),activation:$("activation",pe,"node",{domIdentity:!0,sketch:"shape"}),message:$("message",Yi,"edge",{domIdentity:!0,relation:!0,sketch:"connector"}),block:$("block",Z,"group",{domIdentity:!0,sketch:"shape"}),note:$("note",ee,"group",{domIdentity:!0,sketch:"shape"}),"class-box":$("class-box",ee,"node",{domIdentity:!0,sketch:"shape"}),member:$("member",nr,"label",{domIdentity:!0,textHalo:!0}),entity:$("entity",ee,"node",{domIdentity:!0,sketch:"shape"}),attribute:$("attribute",tr,"label",{domIdentity:!0,textHalo:!0}),relationship:$("relationship",Ze,"edge",{domIdentity:!0,relation:!0,sketch:"connector"}),cardinality:$("cardinality",Ki,"label",{domIdentity:!0,textHalo:!0}),"pie-slice":$("pie-slice",pe,"node",{domIdentity:!0,sketch:"shape"}),legend:$("legend",Xi,"group",{textHalo:!0}),bar:$("bar",pe,"node",{domIdentity:!0,sketch:"shape"}),series:$("series",Ze,"edge",{domIdentity:!0,sketch:"connector"}),point:$("point",pe,"node",{domIdentity:!0}),axis:$("axis",Z,"label",{textHalo:!0}),grid:$("grid",Z,"edge"),plate:$("plate",pe,"node",{domIdentity:!0,sketch:"shape"}),section:$("section",Z,"group",{domIdentity:!0,sketch:"shape",textHalo:!0}),task:$("task",Z,"node",{domIdentity:!0,sketch:"shape"}),milestone:$("milestone",pe,"node",{domIdentity:!0,sketch:"shape"}),"marker-line":$("marker-line",Z,"edge"),rail:$("rail",Z,"edge",{sketch:"connector"}),period:$("period",ee,"group",{domIdentity:!0,sketch:"shape"}),event:$("event",ee,"group",{domIdentity:!0,sketch:"shape"}),score:$("score",Z,"node"),"actor-pill":$("actor-pill",pe,"node",{sketch:"shape"}),service:$("service",ee,"node",{domIdentity:!0,sketch:"shape"}),junction:$("junction",ee,"node",{domIdentity:!0}),icon:$("icon",Ji,"node"),title:$("title",Z,"label",{domIdentity:!0}),defs:$("defs",Zi,"label"),prelude:$("prelude",Qi,"label"),chrome:$("chrome",Z,"label")}),eo=Object.freeze({applicableKinds:Z,styleFallback:"label",styleConsumption:"fallback-only",styleExtras:Object.freeze([]),styleBindingFamilies:Object.freeze([]),domIdentity:!0,relation:!1,sketch:"none",textHalo:!1}),va=Object.freeze(Object.entries(Je).map(([e,n])=>Object.freeze({identity:Ye({id:`role:${e}`,kind:"role",version:"1.0.0",compatibility:{core:"^0.3.0",scene:"^2.0.0"},provenance:{owner:"agentic-mermaid",source:"built-in",reference:"src/scene/roles.ts"}}),role:e,traits:n,style:(()=>{let t=n.styleFallback;return Object.freeze({fallbackRole:t,applicableProperties:n.styleProperties??Object.freeze([])})})()})));function no(e){let n=Je[e];return n?{traits:n,source:"builtin"}:{traits:eo,source:"namespaced-safe"}}function we(e){return no(e).traits}function Ne(e){return!e.includes("->")&&!/[#:"\[\],\u0000-\u001f]/.test(e)}function Ia(e,n,t=""){let r=Ne(e)&&Ne(n)?`${e}->${n}`:`relation:${JSON.stringify([e,n])}`;return t?`${t}:${r}`:r}function Pa(e,...n){let t=n.map(String);return Ne(e)&&t.every(Ne)?[e,...t].join(":"):`part:${JSON.stringify([e,...t])}`}function za(e,n,...t){let r=t.map(String);return Ne(n)&&r.every(Ne)?[e,n,...r].join(":"):`${e}:${JSON.stringify([n,...r])}`}function to(e){return e.replace(/"/g,'"').replace(/'|'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&")}function Qe(e,n){let t=e.match(/^\s*<([A-Za-z][\w:-]*)\b[^>]*>/)?.[0]??"",r=a=>{let c=t.match(new RegExp(`\\s${a}="([^"]*)"`))?.[1];return c===void 0?void 0:to(c)},i=(r("class")??"").split(/\s+/).filter(Boolean),s=r("data-from"),o=r("data-to");return{id:r("data-id")??n.id,role:n.role,...s!==void 0?{from:s}:{},...o!==void 0?{to:o}:{},...i.length>0?{classNames:i}:{}}}function jn(e){return we(e).domIdentity}function Ie(e,n){if(!jn(n.role))return e;let t=e.match(/^\s*<([A-Za-z][\w:-]*)\b[^>]*>/)?.[0];if(!t||t.startsWith("<style")||t.startsWith("<defs")||t.startsWith("<svg"))return e;let r=(s,o,a)=>{let c=N(a),d=new RegExp(`\\s${o}="[^"]*"`);if(d.test(s))return s.replace(d,` ${o}="${c}"`);let u=s.endsWith("/>")?"/>":">";return`${s.slice(0,-u.length).trimEnd()} ${o}="${c}"${u==="/>"?" /":""}>`},i=r(r(t,"data-id",n.id),"data-role",n.role);return n.from!==void 0&&(i=r(i,"data-from",n.from)),n.to!==void 0&&(i=r(i,"data-to",n.to)),i===t?e:e.replace(t,i)}function G(e,n,t=0){return Math.abs(e.x-n.x)<=t&&Math.abs(e.y-n.y)<=t}function Bn(e,n){let t=n.x-e.x,r=n.y-e.y,i=Math.hypot(t,r);return Number.isFinite(i)&&i>0?{x:t/i,y:r/i}:void 0}function Te(e,n){return{x:(e.x+n.x)/2,y:(e.y+n.y)/2}}function me(e,n){return Math.hypot(n.x-e.x,n.y-e.y)}function rr(e,n,t){let r=me(n,t);return r===0?me(e,n):Math.abs((t.x-n.x)*(n.y-e.y)-(n.x-e.x)*(t.y-n.y))/r}function ir(e,n,t,r,i=.5,s=12){if(!Number.isFinite(i)||i<=0)throw new TypeError("Cubic flattening tolerance must be positive and finite");if(!Number.isSafeInteger(s)||s<0)throw new TypeError("Cubic flattening maxDepth must be a non-negative safe integer");for(let c of[e,n,t,r])if(!Number.isFinite(c.x)||!Number.isFinite(c.y))throw new TypeError("Cubic flattening points must be finite");let o=[{...e}],a=(c,d,u,f,m)=>{let p=me(c,f),g=me(c,d)+me(d,u)+me(u,f)-p;if(Math.max(rr(d,c,f),rr(u,c,f))<=i&&g<=i||m>=s){o.push({...f});return}let x=Te(c,d),v=Te(d,u),y=Te(u,f),E=Te(x,v),w=Te(v,y),j=Te(E,w);a(c,x,E,j,m+1),a(j,w,y,f,m+1)};return a(e,n,t,r,0),o}function ae(...e){let n=e[0];if(n)for(let t=1;t<e.length;t++){let r=Bn(n,e[t]);if(r)return r}}function ro(e,n){return n.kind==="line"?ae(e,n.end):n.kind==="quadratic"?ae(e,n.control,n.end):ae(e,n.control1,n.control2,n.end)}function io(e,n){return n.kind==="line"?ae(e,n.end):n.kind==="quadratic"?ae(n.control,n.end)??ae(e,n.end):ae(n.control2,n.end)??ae(n.control1,n.end)??ae(e,n.end)}function oo(e,n,t){return[{x:e.x+(n.x-e.x)*2/3,y:e.y+(n.y-e.y)*2/3},{x:t.x+(n.x-t.x)*2/3,y:t.y+(n.y-t.y)*2/3}]}function or(e,n,t,r=.5){for(let d of[n,...t.flatMap(u=>u.kind==="line"?[u.end]:u.kind==="quadratic"?[u.control,u.end]:[u.control1,u.control2,u.end])])if(!Number.isFinite(d.x)||!Number.isFinite(d.y))throw new TypeError("Connector path projection points must be finite");let i=[{...n}],s=[],o=n;for(let d of t){if(s.push(o),d.kind==="line")i.push({...d.end});else if(d.kind==="quadratic"){let[u,f]=oo(o,d.control,d.end);i.push(...ir(o,u,f,d.end,r).slice(1))}else i.push(...ir(o,d.control1,d.control2,d.end,r).slice(1));o=d.end}let a;for(let d=0;d<t.length&&!a;d++)a=ro(s[d],t[d]);let c;for(let d=t.length-1;d>=0&&!c;d--)c=io(s[d],t[d]);return{geometry:{kind:"path",d:e,points:i},contours:[{start:{...n},end:{...o},closed:!1,...a?{startTangent:a}:{},...c?{endTangent:c}:{}}]}}function Ln(e,n,t){return t==="manhattan"?Math.abs(n.x-e.x)+Math.abs(n.y-e.y):me(e,n)}function sr(e,n){if(n===void 0)return e;if(!Number.isSafeInteger(n)||n<0)throw new TypeError("Rounded connector precision must be a non-negative safe integer");let t=10**n;return Math.round(e*t)/t}function ar(e,n,t,r,i){let s=Ln(e,n,r);if(s===0)return{...e};let o=t/s;return{x:sr(e.x+(n.x-e.x)*o,i),y:sr(e.y+(n.y-e.y)*o,i)}}function ja(e,n,t={}){if(e.length===0)throw new RangeError("Rounded connector paths require at least one point");if(!Number.isFinite(n))throw new TypeError("Rounded connector radius must be finite");let r=t.metric??"euclidean",i=e[0],s=[];if(n<=0||e.length<3){for(let d=1;d<e.length;d++)s.push({kind:"line",end:e[d]});let c=`M${e.map(d=>`${d.x},${d.y}`).join(" L")}`;return or(c,i,s,t.tolerance)}let o=[`M${i.x},${i.y}`];for(let c=1;c<e.length-1;c++){let d=e[c-1],u=e[c],f=e[c+1],m=Ln(d,u,r),p=Ln(u,f,r),g=Math.min(n,m/2,p/2);if(g<=0){o.push(`L${u.x},${u.y}`),s.push({kind:"line",end:u});continue}let b=ar(u,d,g,r,t.precision),x=ar(u,f,g,r,t.precision);o.push(`L${b.x},${b.y}`),o.push(`Q${u.x},${u.y} ${x.x},${x.y}`),s.push({kind:"line",end:b}),s.push({kind:"quadratic",control:u,end:x})}let a=e.at(-1);return o.push(`L${a.x},${a.y}`),s.push({kind:"line",end:a}),or(o.join(" "),i,s,t.tolerance)}function ce(e,n=!1){return e.kind==="line"?[{points:[{x:e.x1,y:e.y1},{x:e.x2,y:e.y2}],closed:!1}]:e.kind==="path"&&e.subpaths!==void 0?e.subpaths:[{points:e.points,closed:n}]}function en(e){return e.kind==="path"&&/[AaCcQqSsTt]/.test(e.d)}function nn(e,n=!1){let t=ce(e,n),r=Fn(e,n);return t.flatMap((i,s)=>{let o=i.points[0],a=i.points.at(-1);if(!o||!a)return[];let c=r.filter(f=>f.subpathIndex===s),d;for(let f=0;f<c.length&&!d;f++)d=Bn(c[f].start,c[f].end);let u;for(let f=c.length-1;f>=0&&!u;f--)u=Bn(c[f].start,c[f].end);return[{start:{...o},end:{...i.closed?o:a},closed:i.closed,...d?{startTangent:d}:{},...u?{endTangent:u}:{}}]})}function cr(e,n=!1){let t=[],r=[];return ce(e,n).forEach((i,s)=>{let o=i.points[0],a=i.closed?o:i.points.at(-1);o&&t.push({point:{...o},contourIndex:s}),a&&r.push({point:{...a},contourIndex:s})}),{starts:t,ends:r}}function tn(e,n=!1){let t=[],r=[];for(let i of ce(e,n)){let s=i.points[0],o=i.closed?s:i.points.at(-1);s&&t.push(s),o&&r.push(o)}return{starts:t,ends:r}}function Fn(e,n=!1){let t=[];for(let[r,i]of ce(e,n).entries()){for(let a=1;a<i.points.length;a++)t.push({start:i.points[a-1],end:i.points[a],subpathIndex:r,closing:!1});let s=i.points[0],o=i.points.at(-1);i.closed&&s&&o&&!G(s,o)&&t.push({start:o,end:s,subpathIndex:r,closing:!0})}return t}function rn(e,n=!1){return e.kind==="line"?[]:e.kind==="path"?e.markerMidpoints??[]:ce(e,n).flatMap(t=>{if(t.points.length<2)return[];let r=t.closed&&G(t.points[0],t.points.at(-1))?t.points.slice(0,-1):t.points;return t.closed?r.slice(1):r.slice(1,-1)})}function dr(e,n=!1){if(e.kind==="line")return[];let t=ce(e,n);return e.kind==="path"?(e.markerMidpoints??[]).map(r=>{if(t.length===1)return{point:{...r},contourIndex:0};let i=t.flatMap((s,o)=>s.points.some(a=>G(a,r))?[o]:[]);if(i.length!==1)throw new TypeError("Path marker-mid vertices on multiple subpaths must belong to exactly one typed contour");return{point:{...r},contourIndex:i[0]}}):t.flatMap((r,i)=>{if(r.points.length<2)return[];let s=r.closed&&G(r.points[0],r.points.at(-1))?r.points.slice(0,-1):r.points;return(r.closed?s.slice(1):s.slice(1,-1)).map(a=>({point:{...a},contourIndex:i}))})}function on(e){return e.match(/[Mm](?=\s*[-+.]?\d)/g)?.length??0}function Un(e){return e.replace(/"/g,'"').replace(/'|'/g,"'").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&")}function Vn(e,n){if(!we(e.role).relation||e.from===void 0||e.to===void 0)return;let t={from:e.from,to:e.to,...n?{label:n}:{}};return{label:`${t.from} to ${t.to}${t.label?`: ${t.label}`:""}`,role:"graphics-symbol",roleDescription:"relation",relation:t}}function Wn(e,n){let r=(e.match(/^\s*<[A-Za-z][\w:-]*\b[^>]*>/)?.[0]??"").match(/\sdata-label="([^"]*)"/)?.[1];return Vn({...n,...n.from!==void 0?{from:Un(n.from)}:{},...n.to!==void 0?{to:Un(n.to)}:{}},r?Un(r):void 0)}function sn(e,n){if(!n)return e;let t=e.match(/^\s*<[A-Za-z][\w:-]*\b[^>]*>/)?.[0];if(!t)return e;let r=[];if(/\srole=/.test(t)||r.push(`role="${n.role}"`),/\saria-roledescription=/.test(t)||r.push(`aria-roledescription="${n.roleDescription}"`),/\saria-label=/.test(t)||r.push(`aria-label="${N(n.label)}"`),r.length===0)return e;let i=t.endsWith("/>")?"/>":">",s=t.slice(0,-i.length).trimEnd();return e.replace(t,`${s} ${r.join(" ")}${i==="/>"?" /":""}>`)}function Gn(e){return e?{...e,...e.geometry?{geometry:e.geometry}:{},...e.size?{size:{...e.size}}:{},...e.viewBox?{viewBox:{...e.viewBox}}:{},...e.ref?{ref:{...e.ref}}:{},...e.bounds?{bounds:{...e.bounds}}:{},...e.paint?{paint:{...e.paint}}:{}}:void 0}function so(e,n){let t=["continuous-geometry","stroke-width","stroke-cap","stroke-join"];return e.bendRadius>0&&t.push("bend-radius"),n.opacity!==void 0&&t.push("stroke-opacity"),(n.lineJoin==="miter"||n.lineJoin==="miter-clip")&&t.push("stroke-miter"),n.dash&&t.push("dash-pattern"),n.dash?.offset!==void 0&&t.push("dash-offset"),n.pathLength!==void 0&&t.push("path-length"),n.paintOrder!==void 0&&t.push("paint-order"),n.nonScaling&&t.push("non-scaling-stroke"),t}function an(e){let n=so(e.route,e.stroke),t=cr(e.geometry,e.route.closed),r=dr(e.geometry,e.route.closed),i={start:e.markers.start?t.starts.map(s=>({markerId:e.markers.start.id,point:{...s.point},contourIndex:s.contourIndex})):[],mid:e.markers.mid.length===0?[]:r.map((s,o)=>({markerId:(e.markers.mid.length===1?e.markers.mid[0]:e.markers.mid[o]).id,point:{...s.point},contourIndex:s.contourIndex})),end:e.markers.end?t.ends.map(s=>({markerId:e.markers.end.id,point:{...s.point},contourIndex:s.contourIndex})):[]};return{realization:e.lineStyle==="invisible"?"unsupported":"projected",topology:e.geometry.kind,geometry:e.geometry,direction:e.relationship.direction,relationship:e.relationship.kind,markers:{...e.markers.start?{start:Gn(e.markers.start)}:{},mid:e.markers.mid.map(s=>Gn(s)),...e.markers.end?{end:Gn(e.markers.end)}:{}},markerPlacements:i,endpoints:{...e.endpoints,...e.endpoints.start?{start:{...e.endpoints.start,...e.endpoints.start.point?{point:{...e.endpoints.start.point}}:{}}}:{},...e.endpoints.end?{end:{...e.endpoints.end,...e.endpoints.end.point?{point:{...e.endpoints.end.point}}:{}}}:{}},route:{ownership:e.route.ownership,closed:e.route.closed,bendRadius:e.route.bendRadius,contours:e.route.contours.map(s=>({...s,start:{...s.start},end:{...s.end},...s.startTangent?{startTangent:{...s.startTangent}}:{},...s.endTangent?{endTangent:{...s.endTangent}}:{}})),...e.route.startTangent?{startTangent:{...e.route.startTangent}}:{},...e.route.endTangent?{endTangent:{...e.route.endTangent}}:{},labelAnchors:e.route.labelAnchors.map(s=>({...s}))},stroke:{...e.stroke,...e.stroke.dash?{dash:{...e.stroke.dash,array:Array.isArray(e.stroke.dash.array)?[...e.stroke.dash.array]:e.stroke.dash.array}}:{}},hit:{...e.hit,geometry:e.hit.geometry},...e.transform?{transform:{...e.transform}}:{},labels:e.labels.map(s=>({...s,...s.anchor?{anchor:{...s.anchor}}:{},...s.bounds?{bounds:{...s.bounds}}:{},...s.halo?{halo:{...s.halo}}:{},...s.paint?{paint:{...s.paint}}:{},...s.visual?{visual:{...s.visual}}:{}})),lineStyle:e.lineStyle,strokeLosses:n,diagnostics:[e.lineStyle==="invisible"?"This connector affects layout but is intentionally absent from terminal output.":`The terminal grid preserves connector semantics while projecting continuous stroke fields: ${n.join(", ")}.`,...e.additionalDiagnostics??[]]}}var cn=new WeakMap;function ao(e){let n=e.match(/^<([A-Za-z_][A-Za-z0-9_.:-]*)/);if(!n||e.startsWith("</")||e.startsWith("<!")||e.startsWith("<?"))return e;let t=n[1];if(t!=="svg")return e;let r=/\/\s*>$/.test(e),i=r?e.lastIndexOf("/"):e.length-1,s=[],o=n[0].length;for(;o<i;){for(;/\s/.test(e[o]??"");)o++;if(o>=i)break;let d=e.slice(o).match(/^([^\s=<>/]+)/);if(!d)return e;let u=d[1];for(o+=d[0].length;/\s/.test(e[o]??"");)o++;if(e[o]!=="=")return e;for(o++;/\s/.test(e[o]??"");)o++;let f=e[o];if(f!=='"'&&f!=="'")return e;o++;let m=o;for(;o<i&&e[o]!==f;)o++;if(e[o]!==f)return e;let p=e.slice(m,o);o++,s.push({name:u,value:f==='"'?p:p.replaceAll('"',"""),index:s.length})}let a=new Map([["xmlns",0],["width",1],["height",2],["viewBox",3],["style",4]]);s.sort((d,u)=>{let f=a.get(d.name)??100,m=a.get(u.name)??100;return f-m||bt(d.name,u.name)||d.index-u.index});let c=s.map(d=>`${d.name}="${d.value}"`).join(" ");return`<${t}${c?` ${c}`:""}${r?" /":""}>`}function ue(e){let n="",t=0;for(;t<e.length;){let r=e.indexOf("<",t);if(r<0)return n+e.slice(t);if(n+=e.slice(t,r),e.startsWith("<!--",r)){let o=e.indexOf("-->",r+4);if(o<0)return n+e.slice(r);n+=e.slice(r,o+3),t=o+3;continue}let i,s=r+1;for(;s<e.length;s++){let o=e[s];if(i)o===i&&(i=void 0);else if(o==='"'||o==="'")i=o;else if(o===">")break}if(s>=e.length)return n+e.slice(r);n+=ao(e.slice(r,s+1)),t=s+1}return n}function ne(e,n){return cn.set(e,ue(n)),e}function R(e){let n=cn.get(e);if(n===void 0)throw new TypeError(`Scene node "${e.id}" has no admitted SVG serialization`);return n}function qn(e,n){let t=cn.get(e);t!==void 0&&cn.set(n,t)}function Pe(e,n){let t=Qe(n,e),r=Wn(n,t),i=sn(Ie(n,t),r);return ne({kind:"shape",identity:t,accessibility:r,...e},i)}function co(e,n){if(e.kind==="line")return{start:{point:{x:e.x1,y:e.y1}},end:{point:{x:e.x2,y:e.y2}}};let t=ce(e,n),r=t[0]?.points[0],i=t.at(-1),s=i?.closed?i.points[0]:i?.points.at(-1);return{...r?{start:{point:{...r}}}:{},...s?{end:{point:{...s}}}:{}}}function lo(e){let n=typeof e=="number"?e:parseFloat(e);return Number.isFinite(n)?Math.max(0,n):1}function uo(e,n,t){return e.from!==void 0&&e.from===e.to?"self":n&&t?"bidirectional":n?"reverse":t?"forward":"undirected"}function fo(e,n,t,r){if(r.length===0)return;let i=rn(n,t).length;if(i===0)throw new RangeError(`Connector "${e}" has mid markers but no typed interior route points`);if(r.length!==1&&r.length!==i)throw new RangeError(`Connector "${e}" mid markers must contain one repeated descriptor or one descriptor per interior route point`);if(new Set(r.map(o=>o.id)).size!==1)throw new RangeError(`Connector "${e}" uses distinct mid markers that one SVG marker-mid carrier cannot represent`);return r[0].id}function po(e,n){if(e==="")return e;let t=e;for(let[r,i]of Object.entries(n)){if(!i)continue;let s=`marker-${r}`,o=t.match(/^\s*<(?:line|polyline|path)\b[^>]*>/)?.[0];!o||new RegExp(`\\s${s}=`).test(o)||(t=t.replace(o,o.replace(/\s*\/?>$/,a=>` ${s}="url(#${N(i)})"${a}`)))}return t}function mo(e,n){if(e===""||!n)return e;let t=e.match(/^\s*<(?:line|polyline|path)\b[^>]*>/)?.[0];if(!t||/\stransform=/.test(t))return e;let r=`rotate(${n.angle} ${n.cx} ${n.cy})`;return e.replace(t,t.replace(/\s*\/?>$/,i=>` transform="${r}"${i}`))}function yo(e,n){if(e==="")return e;let t=e.match(/^\s*<(?:line|polyline|path)\b[^>]*>/)?.[0];if(!t)return e;let r=t;for(let[i,s]of[["data-relationship",n.kind],["data-direction",n.direction]])new RegExp(`\\s${i}=`).test(r)||(r=r.replace(/\s*\/?>$/,o=>` ${i}="${N(s)}"${o}`));return e.replace(t,r)}function go(e,n,t,r){if(n.visual?.kind!=="inline")return;if(!n.anchor||!n.paint||n.fontSize===void 0||n.textAnchor===void 0)throw new TypeError(`Connector "${e}" inline label ${t+1} requires anchor, paint, fontSize, and textAnchor`);let i=[`data-id="${N(n.id??`${e}-label-${t+1}`)}"`,'data-role="label"',`data-connector-label-for="${N(e)}"`,`x="${n.anchor.x}"`,`y="${n.anchor.y-Math.max(0,n.clearance??0)}"`,`font-size="${n.fontSize}"`,`text-anchor="${n.textAnchor}"`];r?.kind==="rotate"&&i.push(`transform="rotate(${r.angle} ${r.cx} ${r.cy})"`);let s={...n.paint,...n.halo?{stroke:n.halo.color??"var(--bg)",strokeWidth:String(n.halo.width),paintOrder:"stroke fill"}:{}},o=[["fill",s.fill],["stroke",s.stroke],["stroke-width",s.strokeWidth],["stroke-dasharray",s.strokeDasharray],["stroke-dashoffset",s.strokeDashoffset],["stroke-linecap",s.strokeLinecap],["stroke-linejoin",s.strokeLinejoin],["stroke-miterlimit",s.strokeMiterlimit],["vector-effect",s.vectorEffect],["paint-order",s.paintOrder],["opacity",s.opacity]];for(let[a,c]of o)c!==void 0&&i.push(`${a}="${N(c)}"`);return`<text ${i.join(" ")}>${Y(n.text)}</text>`}function ye(e,n){if(e.geometry.kind!=="path"&&e.route?.closed===!0)throw new TypeError(`Connector "${e.id}" closed route topology requires path geometry`);if(e.geometry.kind==="path"){let S=e.geometry,O=S.subpaths,D=on(S.d);if(D>1&&!O)throw new TypeError(`Connector "${e.id}" path has multiple SVG subpaths but no typed subpaths`);if(O){if(O.length===0||O.some(X=>X.points.length<2))throw new TypeError(`Connector "${e.id}" typed subpaths must each contain at least two points`);if(D!==O.length)throw new TypeError(`Connector "${e.id}" typed subpath count disagrees with SVG path moves`);let oe=O.flatMap(X=>X.points);if(oe.length!==S.points.length||oe.some((X,Fe)=>{let Cn=S.points[Fe];return!Cn||Cn.x!==X.x||Cn.y!==X.y}))throw new TypeError(`Connector "${e.id}" typed subpaths disagree with the canonical point projection`)}}let t=ce(e.geometry,e.route?.closed??!1),r=t.length===1&&t[0].closed;if(e.geometry.kind==="path"&&e.geometry.subpaths&&e.route?.closed!==void 0&&e.route.closed!==r)throw new TypeError(`Connector "${e.id}" route.closed disagrees with typed subpath topology`);let i=e.geometry.kind==="path"&&e.geometry.subpaths?r:e.route?.closed??!1;if(e.geometry.kind==="path"){let S=e.geometry.d.match(/[Zz]/g)?.length??0,O=e.geometry.subpaths?e.geometry.subpaths.filter(D=>D.closed).length:i?1:0;if(S!==O)throw new TypeError(`Connector "${e.id}" SVG close commands disagree with typed closed-contour semantics`)}let s=e.markers?.start,o=e.markers?.end,a=e.markers?.mid??[];for(let S of[s,...a,o])if(S?.geometry?.kind==="path"&&!S.bounds&&!S.viewBox&&!S.size)throw new TypeError(`Connector "${e.id}" path marker "${S.id}" requires bounds, viewBox, or size`);let c=fo(e.id,e.geometry,i,a),d=co(e.geometry,i);for(let S of["start","end"]){let O=e.endpoints?.[S]?.point,D=d[S]?.point;if(O&&D&&!G(O,D))throw new TypeError(`Connector "${e.id}" endpoints.${S}.point disagrees with typed route geometry`)}let u={...e.endpoints??{},start:{...d.start,...e.endpoints?.start},end:{...d.end,...e.endpoints?.end}},f={kind:e.relationship?.kind??e.role,direction:e.relationship?.direction??uo(u,s,o)},m=e.labels??[],p={id:e.identity?.id??e.id,role:e.role,...e.identity?.classNames?{classNames:e.identity.classNames}:{},...e.identity?.from??u.from?{from:e.identity?.from??u.from}:{},...e.identity?.to??u.to?{to:e.identity?.to??u.to}:{}},g=Vn(p,m[0]?.text),b=po(n,{...s?{start:s.id}:{},...c?{mid:c}:{},...o?{end:o.id}:{}}),x=yo(b,f),v=mo(x,e.transform),y=sn(Ie(v,p),g),E=m.map((S,O)=>go(e.id,S,O,e.transform)).filter(S=>S!==void 0);E.length>0&&(y=[y,...E].join(`
|
|
26
|
+
`));let w=e.stroke?.width??e.paint.strokeWidth??"1",j=e.stroke?.dash??(e.paint.strokeDasharray?{array:e.paint.strokeDasharray,...e.paint.strokeDashoffset!==void 0?{offset:e.paint.strokeDashoffset}:{}}:void 0),F=e.stroke?.opacity??e.paint.opacity,h=e.stroke?.paintOrder??e.paint.paintOrder,B={color:e.stroke?.color??e.paint.stroke??"var(--_line)",width:w,...F!==void 0?{opacity:F}:{},...j?{dash:j}:{},lineCap:e.stroke?.lineCap??e.paint.strokeLinecap??"butt",lineJoin:e.stroke?.lineJoin??e.paint.strokeLinejoin??"miter",miterLimit:e.stroke?.miterLimit??Number(e.paint.strokeMiterlimit??4),...e.stroke?.pathLength!==void 0?{pathLength:e.stroke.pathLength}:{},...h!==void 0?{paintOrder:h}:{},nonScaling:e.stroke?.nonScaling??e.paint.vectorEffect==="non-scaling-stroke"},ie=nn(e.geometry,i),V=e.route?.contours;if(V&&(V.length!==ie.length||V.some((S,O)=>{let D=ie[O];return!D||S.start.x!==D.start.x||S.start.y!==D.start.y||S.end.x!==D.end.x||S.end.y!==D.end.y||S.closed!==D.closed})))throw new TypeError(`Connector "${e.id}" route contours disagree with typed subpath endpoint topology`);if(!en(e.geometry)&&V)for(let[S,O]of V.entries()){let D=ie[S];for(let oe of["startTangent","endTangent"]){let X=O[oe],Fe=D[oe];if(X&&(!Fe||!G(X,Fe,1e-9)))throw new TypeError(`Connector "${e.id}" route.contours[${S}].${oe} disagrees with linear route geometry`)}}let z=ie.map((S,O)=>{let D=V?.[O],oe=D?.startTangent??S.startTangent,X=D?.endTangent??S.endTangent;return{start:{...S.start},end:{...S.end},closed:S.closed,...oe?{startTangent:oe}:{},...X?{endTangent:X}:{}}});for(let S of z)for(let O of[S.startTangent,S.endTangent]){if(!O)continue;let D=Math.hypot(O.x,O.y);if(!Number.isFinite(D)||Math.abs(D-1)>1e-9)throw new TypeError(`Connector "${e.id}" contour tangents must be finite unit vectors`)}for(let S of[e.route?.startTangent,e.route?.endTangent]){if(!S)continue;let O=Math.hypot(S.x,S.y);if(!Number.isFinite(O)||Math.abs(O-1)>1e-9)throw new TypeError(`Connector "${e.id}" route tangents must be finite unit vectors`)}for(let[S,O,D]of[["startTangent",e.route?.startTangent,z[0]?.startTangent],["endTangent",e.route?.endTangent,z.at(-1)?.endTangent]])if(O&&D&&!G(O,D,1e-9))throw new TypeError(`Connector "${e.id}" route.${S} disagrees with its contour tangent authority`);let Ae={geometry:e.geometry,ownership:e.route?.ownership??"family",closed:i,bendRadius:e.route?.bendRadius??0,contours:z,...(()=>{let S={start:z[0]?.startTangent,end:z.at(-1)?.endTangent};return{...e.route?.startTangent??S.start?{startTangent:e.route?.startTangent??S.start}:{},...e.route?.endTangent??S.end?{endTangent:e.route?.endTangent??S.end}:{}}})(),labelAnchors:e.route?.labelAnchors??m.flatMap(S=>S.anchor?[S.anchor]:[])};if(e.hit?.closed!==void 0&&e.hit.closed!==i)throw new TypeError(`Connector "${e.id}" hit.closed must match route.closed topology`);let ht={geometry:e.hit?.geometry??e.geometry,closed:e.hit?.closed??i,strokeWidth:e.hit?.strokeWidth??Math.max(6,lo(w)),pointerEvents:e.hit?.pointerEvents??(e.lineStyle==="invisible"?"none":"stroke")},Qr=an({geometry:e.geometry,lineStyle:e.lineStyle,endpoints:u,relationship:f,route:Ae,stroke:B,markers:{...s?{start:s}:{},mid:a,...o?{end:o}:{}},labels:m,hit:ht,...e.transform?{transform:e.transform}:{},additionalDiagnostics:e.terminalProjection?.diagnostics}),ei={kind:"connector",id:e.id,role:e.role,lineStyle:e.lineStyle,endpoints:u,relationship:f,route:Ae,stroke:B,markers:{...s?{start:s}:{},mid:a,...o?{end:o}:{}},labels:m,hit:ht,terminalProjection:Qr,identity:p,...g?{accessibility:g}:{},...e.channels?{channels:e.channels}:{},...e.transform?{transform:e.transform}:{}};return ne(ei,y)}function dn(e,n){let t=Qe(n,e),r=Wn(n,t),i=sn(Ie(n,t),r);return ne({kind:"text",identity:t,accessibility:r,...e},i)}function Qa(e,n){return ne({kind:"document",element:"content",...e},n)}function Hn(e){let n=e.element==="title"?"title":"desc",t=e.domId?` id="${N(e.domId)}"`:"";return ne({kind:"document",role:"chrome",...e},`<${n}${t}>${Y(e.text)}</${n}>`)}function lr(e,n){return ne({kind:"document",role:"defs",element:"definitions",...e},n)}function ur(){return ne({kind:"document",id:"svg-close",role:"chrome",element:"close"},"</svg>")}function Kn(e,n){if(n<=0||e==="")return e;let t=" ".repeat(n);return t+e.replace(/\n/g,`
|
|
27
|
+
${t}`)}function ln(e){let n=e.join??`
|
|
28
|
+
`,t=Qe(e.open,e),r=ue(Ie(e.open,t)),i=[r];for(let s of e.children)i.push(Kn(R(s.node),s.indent));return i.push(e.close),ne({kind:"group",id:e.id,role:e.role,open:r,close:e.close,children:e.children,join:n,channels:e.channels,identity:t},i.join(n))}function fr(e,n){return ne({kind:"document",element:"open",id:e.id,role:"prelude"},n)}function Qn(e){return e.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\\(?:\r\n|[\n\r\f])/g,"").replace(/\\([0-9a-fA-F]{1,6})\s?/g,(n,t)=>{let r=Number.parseInt(t,16);return Number.isFinite(r)?String.fromCodePoint(r):""}).replace(/\\([^\n\r\f])/g,"$1")}var gr=/\s([^\s=<>]+)\s*=\s*("[^"]*"|'[^']*'|[^\s>]+)/g,hr=/<(?:[^\s<>/:]+:)?(?:animate(?:Motion|Transform)?|set)\b/i;function br(e){let n=[];for(let t=e.indexOf("<");t>=0;t=e.indexOf("<",t+1)){let r=e[t+1];if(!r||r==="/"||r==="!"||r==="?"||!/[^\s<>]/.test(r))continue;let i;for(let s=t+1;s<e.length;s++){let o=e[s];if(i)o===i&&(i=void 0);else if(o==='"'||o==="'")i=o;else if(o===">"){n.push(e.slice(t,s+1)),t=s;break}}}return n}var bo=new Set(["amp","lt","gt","quot","apos"]);function ze(e){return e===" "||e===" "||e===`
|
|
29
|
+
`||e==="\r"}function xo(e){return e!==void 0&&/[A-Za-z_]/.test(e)}function ko(e){return e!==void 0&&/[A-Za-z0-9_.:-]/.test(e)}function Xn(e,n){if(!xo(e[n]))return;let t=n+1;for(;ko(e[t]);)t++;return{name:e.slice(n,t),end:t}}function Yn(e){let n=e.split(":");if(n.length===1)return{local:n[0]};if(!(n.length!==2||!n[0]||!n[1]))return{prefix:n[0],local:n[1]}}var Zn="http://www.w3.org/XML/1998/namespace",So="http://www.w3.org/2000/xmlns/",pr="http://www.w3.org/2000/svg";function Jn(e){return e===9||e===10||e===13||e>=32&&e<=55295||e>=57344&&e<=65533||e>=65536&&e<=1114111}function Eo(e){for(let n=0;n<e.length;n++){let t=e.codePointAt(n);if(!Jn(t))return!1;t>65535&&n++}return!0}function mr(e){for(let n=e.indexOf("&");n>=0;n=e.indexOf("&",n+1)){let t=e.indexOf(";",n+1);if(t<0)return!1;let r=e.slice(n+1,t);if(r.startsWith("#x")||r.startsWith("#X")){if(!/^[0-9a-f]+$/i.test(r.slice(2))||!Jn(Number.parseInt(r.slice(2),16)))return!1}else if(r.startsWith("#")){if(!/^[0-9]+$/.test(r.slice(1))||!Jn(Number.parseInt(r.slice(1),10)))return!1}else if(!bo.has(r))return!1;n=t}return!0}function et(e){if(!Eo(e))return!1;let n=[],t=!1,r=!1,i=0;for(;i<e.length;){if(e[i]!=="<"){let g=e.indexOf("<",i),b=g<0?e.length:g,x=e.slice(i,b);if(n.length===0&&x.trim()!==""||x.includes("]]>")||!mr(x))return!1;i=b;continue}if(e.startsWith("<!--",i)){if(n.length===0)return!1;let g=e.indexOf("-->",i+4),b=g<0?"":e.slice(i+4,g);if(g<0||b.includes("--")||b.endsWith("-"))return!1;i=g+3;continue}if(e.startsWith("<![CDATA[",i)||e.startsWith("<!",i)||e.startsWith("<?",i))return!1;if(e.startsWith("</",i)){let g=Xn(e,i+2);if(!g||!Yn(g.name))return!1;let b=g.end;for(;ze(e[b]);)b++;if(e[b]!==">"||n.pop()?.name!==g.name)return!1;if(i=b+1,n.length===0){if(g.name!=="svg"||r)return!1;r=!0}continue}let s=Xn(e,i+1),o=s&&Yn(s.name);if(!s||!o||r)return!1;if(n.length===0){if(t||s.name!=="svg")return!1;t=!0}let a=s.end,c=new Set,d=[],u=!1;for(;;){let g=ze(e[a]);for(;ze(e[a]);)a++;if(e[a]===">"){a++;break}if(e[a]==="/"&&e[a+1]===">"){u=!0,a+=2;break}if(!g)return!1;let b=Xn(e,a),x=b&&Yn(b.name);if(!b||!x||c.has(b.name))return!1;for(c.add(b.name),a=b.end;ze(e[a]);)a++;if(e[a]!=="=")return!1;for(a++;ze(e[a]);)a++;let v=e[a];if(v!=='"'&&v!=="'")return!1;let y=++a;for(;a<e.length&&e[a]!==v;){if(e[a]==="<")return!1;a++}if(a>=e.length)return!1;let E=e.slice(y,a);if(!mr(E))return!1;d.push({name:b.name,qname:x,value:De(E)}),a++}let f=new Map(n.at(-1)?.namespaces??[["xml",Zn]]);for(let g of d){let b=g.name==="xmlns",x=g.qname.prefix==="xmlns";if(!b&&!x)continue;let v=b?"":g.qname.local,y=g.value;if(v==="xmlns"||y===So||v==="xml"&&y!==Zn||v!=="xml"&&y===Zn||v!==""&&y==="")return!1;f.set(v,y)}if(o.prefix==="xmlns")return!1;let m=o.prefix===void 0?f.get("")??"":f.get(o.prefix);if(m===void 0||o.prefix!==void 0||m!==pr||n.length>0&&o.local==="svg"&&m===pr)return!1;let p=new Set;for(let g of d){if(g.name==="xmlns"||g.qname.prefix==="xmlns")continue;let b=g.qname.prefix===void 0?"":f.get(g.qname.prefix);if(b===void 0||g.qname.prefix==="xmlns")return!1;let x=`${b}\0${g.qname.local}`;if(p.has(x))return!1;p.add(x)}if(i=a,u){if(n.length===0)return!1}else n.push({name:s.name,namespaces:f})}return t&&r&&n.length===0}function De(e){let n=e;for(let t=0;t<3;t++){let r=n.replace(/&#x([0-9a-f]+);?/gi,(i,s)=>{let o=Number.parseInt(s,16);return Number.isFinite(o)&&o<=1114111?String.fromCodePoint(o):""}).replace(/&#([0-9]+);?/g,(i,s)=>{let o=Number.parseInt(s,10);return Number.isFinite(o)&&o<=1114111?String.fromCodePoint(o):""}).replace(/:?/gi,":").replace(//?/gi,"/").replace(/&tab;?/gi," ").replace(/&newline;?/gi,`
|
|
30
|
+
`).replace(/"?/gi,'"').replace(/'?/gi,"'").replace(/<?/gi,"<").replace(/>?/gi,">").replace(/&?/gi,"&");if(r===n)break;n=r}return n}function xr(e){let n=e[0];return(n==='"'||n==="'")&&e[e.length-1]===n?e.slice(1,-1):e}function un(e){return De(e).replace(/[\u0000-\u0020\u007f-\u009f]+/g,"").toLowerCase()}function Co(e){let n=un(e);return n!==""&&!n.startsWith("#")}function kr(e){let n=Qn(De(e)),t=[];/@import\b/i.test(n)&&t.push("@import");for(let r of n.matchAll(/url\s*\(\s*(["']?)([\s\S]*?)\1\s*\)/gi)){let i=un(r[2]);i!==""&&!i.startsWith("#")&&t.push(`url(${r[2].trim()})`)}for(let r of n.matchAll(/(?:-webkit-)?(?:image-set|cross-fade)\s*\(/gi))t.push(`${r[0].slice(0,-1).trim()}()`);return t}function $o(e){return/^(?:javascript|vbscript|data|file):/.test(un(e))}function yr(e){let n=Qn(De(e));return!!(/(?:expression|behavior)\s*\(|-moz-binding\s*:/i.test(n)||/(?:javascript|vbscript|data|file)\s*:/i.test(n))}function wo(e){let n=Qn(De(e));return kr(n).length>0||/(?:javascript|vbscript|data|file)\s*:/i.test(n)||/(?:expression|behavior)\s*\(/i.test(n)}var Sr=new Set(["clip-path","cursor","fill","filter","marker-end","marker-mid","marker-start","mask","stroke","style"]);function ec(e,n){if(!(e===void 0||e===""))return typeof e!="string"?"Mermaid themeCSS must be a string":`Raw Mermaid themeCSS is not allowed in ${n} security mode because selectors can escape an imported SVG; use a declarative StyleSpec`}function No(e){let n=[];for(let t of br(e))for(let r of t.matchAll(new RegExp(gr.source,"g"))){let i=r[1],s=i.slice(i.lastIndexOf(":")+1).toLowerCase(),o=xr(r[2]);/^on[a-z]/.test(s)&&n.push("inline-event-handler"),i.toLowerCase()==="xml:base"&&n.push(`xml:base=${o}`),(s==="href"||s==="src"||s==="data")&&Co(o)&&n.push(un(o).startsWith("javascript:")?"javascript-url":o),(Sr.has(s)||s==="values"||s==="from"||s==="to")&&wo(o)&&n.push(`${i}=${o}`)}return n}function To(e){let n=e.replace(/<!--[\s\S]*?-->/g,""),t=[];for(let r of br(n))for(let i of r.matchAll(new RegExp(gr.source,"g"))){let s=i[1],o=s.slice(s.lastIndexOf(":")+1).toLowerCase(),a=xr(i[2]);/^on[a-z]/.test(o)&&t.push("inline-event-handler"),(o==="href"||o==="src"||o==="data")&&$o(a)&&t.push(`${s}=${a}`),(Sr.has(o)||o==="values"||o==="from"||o==="to")&&yr(a)&&t.push(`${s}=${a}`)}for(let r of n.matchAll(/<style\b[^>]*>([\s\S]*?)<\/style>/gi))yr(r[1])&&t.push("active-css");return/<(?:[^\s<>/:]+:)?script\b/i.test(n)&&t.push("<script>"),/<(?:[^\s<>/:]+:)?foreignObject\b/i.test(n)&&t.push("<foreignObject>"),/<(?:[^\s<>/:]+:)?object\b/i.test(n)&&t.push("<object>"),/<(?:[^\s<>/:]+:)?embed\b/i.test(n)&&t.push("<embed>"),/<(?:[^\s<>/:]+:)?iframe\b/i.test(n)&&t.push("<iframe>"),hr.test(n)&&t.push("<animation>"),t}function fn(e){let n=e.replace(/<!--[\s\S]*?-->/g,""),t=No(n);for(let r of n.matchAll(/<style\b[^>]*>([\s\S]*?)<\/style>/gi))t.push(...kr(r[1]));return/<(?:[^\s<>/:]+:)?script\b/i.test(n)&&t.push("<script>"),/<(?:[^\s<>/:]+:)?foreignObject\b/i.test(n)&&t.push("<foreignObject>"),/<(?:[^\s<>/:]+:)?image\b/i.test(n)&&t.push("<image>"),/<(?:[^\s<>/:]+:)?object\b/i.test(n)&&t.push("<object>"),/<(?:[^\s<>/:]+:)?embed\b/i.test(n)&&t.push("<embed>"),/<(?:[^\s<>/:]+:)?iframe\b/i.test(n)&&t.push("<iframe>"),hr.test(n)&&t.push("<animation>"),{ok:t.length===0,refs:t}}function pn(e,n="default"){if(!et(e))throw new Error("OutputSecurityPolicy rejected an invalid SVG document envelope");let t=To(e);if(t.length>0)throw new Error(`OutputSecurityPolicy rejected active content: ${t.join(", ")}`);let r=fn(e);if(n==="strict"&&!r.ok)throw new Error(`OutputSecurityPolicy strict verification failed: ${r.refs.join(", ")}`);return{svg:e,diagnostics:n==="strict"?[]:r.refs.map(i=>({code:"EXTERNAL_REFERENCE",reference:i}))}}function A(e,n){if(!Number.isFinite(e))throw new Error(`Marker ${n} must be finite`);return e}function Ro(e){if(!e)return"";let n=[];return e.fill!==void 0&&n.push(`fill="${N(e.fill)}"`),e.stroke!==void 0&&n.push(`stroke="${N(e.stroke)}"`),e.strokeWidth!==void 0&&n.push(`stroke-width="${N(e.strokeWidth)}"`),e.strokeDasharray!==void 0&&n.push(`stroke-dasharray="${N(e.strokeDasharray)}"`),e.strokeDashoffset!==void 0&&n.push(`stroke-dashoffset="${N(e.strokeDashoffset)}"`),e.strokeLinecap!==void 0&&n.push(`stroke-linecap="${N(e.strokeLinecap)}"`),e.strokeLinejoin!==void 0&&n.push(`stroke-linejoin="${N(e.strokeLinejoin)}"`),e.strokeMiterlimit!==void 0&&n.push(`stroke-miterlimit="${N(e.strokeMiterlimit)}"`),e.vectorEffect!==void 0&&n.push(`vector-effect="${N(e.vectorEffect)}"`),e.paintOrder!==void 0&&n.push(`paint-order="${N(e.paintOrder)}"`),e.opacity!==void 0&&n.push(`opacity="${N(e.opacity)}"`),n.length>0?` ${n.join(" ")}`:""}function Er(e){return e.map(n=>`${A(n.x,"point.x")} ${A(n.y,"point.y")}`).join(", ")}function Cr(e,n,t){let r=Ro(n);switch(e.kind){case"rect":return[`${t}<rect x="${A(e.x,"rect.x")}" y="${A(e.y,"rect.y")}" width="${A(e.width,"rect.width")}" height="${A(e.height,"rect.height")}"${e.rx!==void 0?` rx="${A(e.rx,"rect.rx")}"`:""}${e.ry!==void 0?` ry="${A(e.ry,"rect.ry")}"`:""}${r} />`];case"circle":return[`${t}<circle cx="${A(e.cx,"circle.cx")}" cy="${A(e.cy,"circle.cy")}" r="${A(e.r,"circle.r")}"${r} />`];case"ellipse":return[`${t}<ellipse cx="${A(e.cx,"ellipse.cx")}" cy="${A(e.cy,"ellipse.cy")}" rx="${A(e.rx,"ellipse.rx")}" ry="${A(e.ry,"ellipse.ry")}"${r} />`];case"line":return[`${t}<line x1="${A(e.x1,"line.x1")}" y1="${A(e.y1,"line.y1")}" x2="${A(e.x2,"line.x2")}" y2="${A(e.y2,"line.y2")}"${r} />`];case"polygon":return[`${t}<polygon points="${Er(e.points)}"${r} />`];case"polyline":return[`${t}<polyline points="${Er(e.points)}"${r} />`];case"path":return[`${t}<path d="${N(e.d)}"${r} />`];case"compound":return e.children.flatMap(i=>Cr(i,n,t))}}function nt(e){if(typeof e.id!="string"||e.id.trim()==="")throw new Error("Marker id must not be empty");if(!["arrow","open-arrow","circle","cross","triangle","diamond","diamond-open"].includes(String(e.shape)))throw new Error(`Marker "${e.id}" has an unknown shape`);if(!e.geometry)throw new Error(`Marker "${e.id}" must declare geometry`);if(!e.size)throw new Error(`Marker "${e.id}" must declare marker size`);if(!e.ref)throw new Error(`Marker "${e.id}" must declare a reference point`);if(!(e.size.width>0)||!(e.size.height>0))throw new Error(`Marker "${e.id}" size must be positive`);if(A(e.size.width,"size.width"),A(e.size.height,"size.height"),A(e.ref.x,"ref.x"),A(e.ref.y,"ref.y"),e.units!==void 0&&e.units!=="strokeWidth"&&e.units!=="userSpaceOnUse")throw new Error(`Marker "${e.id}" units must be strokeWidth or userSpaceOnUse`);if(typeof e.orient=="number")A(e.orient,"orient");else if(e.orient!==void 0&&e.orient!=="auto"&&e.orient!=="auto-start-reverse")throw new Error(`Marker "${e.id}" orient must be auto, auto-start-reverse, or a finite angle`);if(e.overflow!==void 0&&e.overflow!=="hidden"&&e.overflow!=="visible")throw new Error(`Marker "${e.id}" overflow must be hidden or visible`);if(e.viewBox&&(A(e.viewBox.x,"viewBox.x"),A(e.viewBox.y,"viewBox.y"),A(e.viewBox.width,"viewBox.width"),A(e.viewBox.height,"viewBox.height"),!(e.viewBox.width>0)||!(e.viewBox.height>0)))throw new Error(`Marker "${e.id}" viewBox must be positive`)}function tt(e,n={}){nt(e);let t=" ".repeat(n.indent??2),r=`${t} `,i=e.units,s=e.orient??"auto",o=[`id="${N(e.id)}"`,`markerWidth="${A(e.size.width,"size.width")}"`,`markerHeight="${A(e.size.height,"size.height")}"`,`refX="${A(e.ref.x,"ref.x")}"`,`refY="${A(e.ref.y,"ref.y")}"`,`orient="${N(String(s))}"`,...i?[`markerUnits="${N(i)}"`]:[],...e.viewBox?[`viewBox="${A(e.viewBox.x,"viewBox.x")} ${A(e.viewBox.y,"viewBox.y")} ${A(e.viewBox.width,"viewBox.width")} ${A(e.viewBox.height,"viewBox.height")}"`]:[],...e.overflow?[`overflow="${N(e.overflow)}"`]:[]];return[`${t}<marker ${o.join(" ")}>`,...Cr(e.geometry,e.paint,r),`${t}</marker>`].join(`
|
|
31
|
+
`)}function $r(e,n={}){let t=new Set;for(let r of e){if(t.has(r.id))throw new Error(`Duplicate marker resource "${r.id}"`);t.add(r.id)}return e.map(r=>tt(r,n)).join(`
|
|
32
|
+
`)}function mn(e,n,t){let r=t*Math.PI/180,i=Math.cos(r),s=Math.sin(r),o=e.x-n.x,a=e.y-n.y;return{x:n.x+o*i-a*s,y:n.y+o*s+a*i}}function wr(e,n,t){if(t%360===0)return{...e};let r=[mn({x:e.x0,y:e.y0},n,t),mn({x:e.x1,y:e.y0},n,t),mn({x:e.x0,y:e.y1},n,t),mn({x:e.x1,y:e.y1},n,t)];return{x0:Math.min(...r.map(i=>i.x)),y0:Math.min(...r.map(i=>i.y)),x1:Math.max(...r.map(i=>i.x)),y1:Math.max(...r.map(i=>i.y))}}function Nr(e){if(e.length!==0)return{x0:Math.min(...e.map(n=>n.x)),y0:Math.min(...e.map(n=>n.y)),x1:Math.max(...e.map(n=>n.x)),y1:Math.max(...e.map(n=>n.y))}}function Re(e,n){return e?n?{x0:Math.min(e.x0,n.x0),y0:Math.min(e.y0,n.y0),x1:Math.max(e.x1,n.x1),y1:Math.max(e.y1,n.y1)}:e:n}function Tr(e,n){let t=Number.isFinite(n)?Math.max(0,n):0;return{x0:e.x0-t,y0:e.y0-t,x1:e.x1+t,y1:e.y1+t}}function gn(e){switch(e.kind){case"rect":return{x0:e.x,y0:e.y,x1:e.x+e.width,y1:e.y+e.height};case"circle":return{x0:e.cx-e.r,y0:e.cy-e.r,x1:e.cx+e.r,y1:e.cy+e.r};case"ellipse":return{x0:e.cx-e.rx,y0:e.cy-e.ry,x1:e.cx+e.rx,y1:e.cy+e.ry};case"line":return{x0:Math.min(e.x1,e.x2),y0:Math.min(e.y1,e.y2),x1:Math.max(e.x1,e.x2),y1:Math.max(e.y1,e.y2)};case"polygon":case"polyline":return Nr(e.points);case"compound":{let n=e.children.map(gn).filter(t=>t!==void 0);return n.length===0?void 0:{x0:Math.min(...n.map(t=>t.x0)),y0:Math.min(...n.map(t=>t.y0)),x1:Math.max(...n.map(t=>t.x1)),y1:Math.max(...n.map(t=>t.y1))}}case"path":return}}function yn(e,n,t){if(!e||!n)return;let r=e.bounds??(e.geometry?gn(e.geometry):void 0)??(e.viewBox?{x0:e.viewBox.x,y0:e.viewBox.y,x1:e.viewBox.x+e.viewBox.width,y1:e.viewBox.y+e.viewBox.height}:void 0)??(e.size?{x0:0,y0:0,x1:e.size.width,y1:e.size.height}:void 0);if(!r)return;let i=e.ref?.x??0,s=e.ref?.y??0,o=r;if(e.viewBox&&e.size){let u=Math.min(e.size.width/e.viewBox.width,e.size.height/e.viewBox.height),f=(e.size.width-e.viewBox.width*u)/2,m=(e.size.height-e.viewBox.height*u)/2,p=b=>f+(b-e.viewBox.x)*u,g=b=>m+(b-e.viewBox.y)*u;o={x0:p(r.x0),y0:g(r.y0),x1:p(r.x1),y1:g(r.y1)},i=p(i),s=g(s)}let a=(e.units??"strokeWidth")==="strokeWidth"?t:1,c=Math.max(0,e.scale??1)*a,d=Math.max(Math.abs(o.x0-i),Math.abs(o.x1-i),Math.abs(o.y0-s),Math.abs(o.y1-s))*c;return{x0:n.x-d,y0:n.y-d,x1:n.x+d,y1:n.y+d}}function Mo(e){let n=typeof e=="number"?e:parseFloat(e);return Number.isFinite(n)?Math.max(0,n):1}function vo(e){let n=e.route.geometry,t=n.kind==="path"?Nr(n.points):gn(n);if(!t)return;let r=Mo(e.stroke.width),i=r/2,s=e.stroke.lineJoin==="miter"||e.stroke.lineJoin==="miter-clip"?i*Math.max(1,e.stroke.miterLimit):i;t=Tr(t,s);let o=tn(n,e.route.closed);for(let c of o.starts)t=Re(t,yn(e.markers.start,c,r));for(let c of o.ends)t=Re(t,yn(e.markers.end,c,r));let a=rn(n,e.route.closed);if(e.markers.mid.length===1)for(let c of a)t=Re(t,yn(e.markers.mid[0],c,r));else for(let c=0;c<e.markers.mid.length;c++)t=Re(t,yn(e.markers.mid[c],a[c],r));for(let c of e.labels)c.bounds&&(t=Re(t,c.bounds)),t=Re(t,Ao(c));return t}function Ao(e){if(e.visual?.kind!=="inline"||!e.anchor||e.fontSize===void 0||e.textAnchor===void 0)return;let n=We(e.text,e.fontSize,500),t=e.textAnchor==="middle"?e.anchor.x-n/2:e.textAnchor==="end"?e.anchor.x-n:e.anchor.x,r=e.anchor.y-Math.max(0,e.clearance??0),i=Math.max(0,e.halo?.width??0)/2;return Tr({x0:t,y0:r-e.fontSize,x1:t+n,y1:r+e.fontSize*.28},i)}function Rr(e){let n;if(e.kind==="shape")n=gn(e.geometry);else if(e.kind==="connector")n=vo(e);else if(e.kind==="text"){let t=We(e.text,e.fontSize,500),r=e.anchor==="middle"?e.x-t/2:e.anchor==="end"?e.x-t:e.x;n={x0:r,y0:e.y-e.fontSize,x1:r+t,y1:e.y+e.fontSize*.28}}else return;return!n||!e.transform?n:e.transform.kind==="rotate"?wr(n,{x:e.transform.cx,y:e.transform.cy},e.transform.angle):n}function P(e){return String(e)}function rt(e){return e.map(n=>`${P(n.x)},${P(n.y)}`).join(" ")}function it(e){let n=[],t=(r,i)=>{i!==void 0&&n.push(`${r}="${N(String(i))}"`)};return t("fill",e.fill),t("stroke",e.stroke),t("stroke-width",e.strokeWidth),t("stroke-dasharray",e.strokeDasharray),t("stroke-dashoffset",e.strokeDashoffset),t("stroke-linecap",e.strokeLinecap),t("stroke-linejoin",e.strokeLinejoin),t("stroke-miterlimit",e.strokeMiterlimit),t("vector-effect",e.vectorEffect),t("paint-order",e.paintOrder),t("opacity",e.opacity),n.length>0?` ${n.join(" ")}`:""}function _o(e,n){let t=it(n);switch(e.kind){case"rect":return`<rect x="${P(e.x)}" y="${P(e.y)}" width="${P(e.width)}" height="${P(e.height)}"${e.rx===void 0?"":` rx="${P(e.rx)}"`}${e.ry===void 0?"":` ry="${P(e.ry)}"`}${t} />`;case"circle":return`<circle cx="${P(e.cx)}" cy="${P(e.cy)}" r="${P(e.r)}"${t} />`;case"ellipse":return`<ellipse cx="${P(e.cx)}" cy="${P(e.cy)}" rx="${P(e.rx)}" ry="${P(e.ry)}"${t} />`;case"line":return`<line x1="${P(e.x1)}" y1="${P(e.y1)}" x2="${P(e.x2)}" y2="${P(e.y2)}"${t} />`;case"polygon":return`<polygon points="${N(rt(e.points))}"${t} />`;case"polyline":return`<polyline points="${N(rt(e.points))}"${t} />`;case"path":case"compound":throw new Error(`External shapes cannot project ${e.kind} geometry`)}}function Oo(e){return`<text x="${P(e.x)}" y="${P(e.y)}" text-anchor="${N(e.anchor)}" font-size="${P(e.fontSize)}"${it(e.paint)}>${Y(e.text)}</text>`}function Io(e){switch(e.kind){case"line":return`x1="${P(e.x1)}" y1="${P(e.y1)}" x2="${P(e.x2)}" y2="${P(e.y2)}"`;case"polyline":return`points="${N(rt(e.points))}"`;case"path":return`d="${N(e.d)}"`}}function Po(e,n){if(e.kind!=="path"){if(n)throw new TypeError("External Scene closed topology is only valid for path geometry");return}if(e.subpaths!==void 0)throw new TypeError("External Scene v1 does not expose typed connector subpaths");if(on(e.d)!==1)throw new TypeError("External Scene v1 path geometry must contain exactly one SVG subpath");let t=e.d.match(/[Zz]/g)?.length??0;if(t>1||n!==(t===1))throw new TypeError("External Scene connector closed must exactly match its single SVG path contour");zo(e,n)}function zo(e,n){let t=e.d.match(/[A-Za-z]|[-+]?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?/g)??[],r=0,i=[],s=()=>{let a=t[r++],c=Number(a);if(a===void 0||!Number.isFinite(c))throw new TypeError("External Scene v1 path must use finite canonical M/L vertices");return c};if(t[r++]!=="M")throw new TypeError("External Scene v1 path must use one absolute M followed by absolute L vertices");i.push({x:s(),y:s()});let o=!1;for(;r<t.length;){let a=t[r++];if(a==="Z"){if(o=!0,r!==t.length)throw new TypeError("External Scene v1 path Z must terminate the contour");break}if(a!=="L")throw new TypeError("External Scene v1 path supports only absolute M/L/Z so route, bounds, hit geometry, and SVG cannot diverge");i.push({x:s(),y:s()})}if(o!==n)throw new TypeError("External Scene connector closed must exactly match its single SVG path contour");if(i.length!==e.points.length||i.some((a,c)=>{let d=e.points[c];return!d||d.x!==a.x||d.y!==a.y}))throw new TypeError("External Scene v1 path vertices must exactly match typed connector points")}function Do(e,n,t,r){if(e.lineStyle==="invisible")return"";let i=[...n?[`marker-start="url(#${N(n.id)})"`]:[],...t?[`marker-mid="url(#${N(t.id)})"`]:[],...r?[`marker-end="url(#${N(r.id)})"`]:[]];return`<${e.geometry.kind} ${Io(e.geometry)}${it(e.paint)}${i.length?` ${i.join(" ")}`:""} />`}function Mr(e){switch(e.kind){case"shape":return Pe({id:e.id,role:e.role,geometry:e.geometry,paint:e.paint,...e.channels?{channels:e.channels}:{}},_o(e.geometry,e.paint));case"text":return dn({id:e.id,role:e.role,text:e.text,x:e.x,y:e.y,fontSize:e.fontSize,anchor:e.anchor,paint:e.paint,...e.channels?{channels:e.channels}:{}},Oo(e));case"group":return ln({id:e.id,role:e.role,open:"<g>",close:"</g>",children:e.children.map(n=>({node:n.node,indent:2})),...e.channels?{channels:e.channels}:{}});case"connector":{let n=e.markers.start,t=e.markers.mid.length===1?e.markers.mid[0]:void 0,r=e.markers.end,i=e.route.geometry,s={fill:"none",stroke:e.stroke.color,strokeWidth:String(e.stroke.width),...e.stroke.opacity===void 0?{}:{opacity:String(e.stroke.opacity)},...e.stroke.dash===void 0?{}:{strokeDasharray:typeof e.stroke.dash.array=="string"?e.stroke.dash.array:e.stroke.dash.array.join(" "),...e.stroke.dash.offset===void 0?{}:{strokeDashoffset:String(e.stroke.dash.offset)}},strokeLinecap:e.stroke.lineCap,strokeLinejoin:e.stroke.lineJoin,strokeMiterlimit:String(e.stroke.miterLimit),...e.stroke.paintOrder===void 0?{}:{paintOrder:e.stroke.paintOrder},...e.stroke.nonScaling?{vectorEffect:"non-scaling-stroke"}:{}};return Po(i,e.route.closed),ye({id:e.id,role:e.role,geometry:i,lineStyle:e.lineStyle,paint:s,endpoints:{...e.endpoints.from===void 0?{}:{from:e.endpoints.from},...e.endpoints.to===void 0?{}:{to:e.endpoints.to}},relationship:e.relationship,route:{closed:e.route.closed},markers:{...n?{start:n}:{},mid:t?[t]:[],...r?{end:r}:{}},labels:e.labels,...e.channels?{channels:e.channels}:{}},Do({geometry:i,lineStyle:e.lineStyle,paint:s},n,t,r))}}}function ot(e){let n=[],t=/<([a-zA-Z][a-zA-Z0-9-]*)((?:\s+[a-zA-Z_:][\w:.-]*="[^"]*")*)\s*\/?>/g,r=0,i,s=/<\/([a-zA-Z][a-zA-Z0-9-]*)>/g,o=[];for(;(i=t.exec(e))!==null;){let a=new Map;for(let c of i[2].matchAll(/([a-zA-Z_:][\w:.-]*)="([^"]*)"/g))a.set(c[1],c[2]);o.push({index:i.index,kind:i[0].endsWith("/>")?"self":"open",tag:i[1],attrs:a})}for(;(i=s.exec(e))!==null;)o.push({index:i.index,kind:"close",tag:i[1]});o.sort((a,c)=>a.index-c.index);for(let a of o)a.kind==="self"?r===0&&n.push({tag:a.tag,attrs:a.attrs}):a.kind==="open"?(r===0&&n.push({tag:a.tag,attrs:a.attrs}),r++):r--;return n}function bn(e){if(e===void 0)return;let n=Number(e);return Number.isFinite(n)?n:void 0}function vr(e,n,t,r){let i=n[0],s=a=>{if(!i){r.push(`${t}: expected <${a}>, crisp has no element`);return}if(i.tag!==a){r.push(`${t}: expected <${a}>, crisp has <${i.tag}>`);return}return i},o=(a,c,d)=>{if(c===void 0)return;let u=bn(d),f=typeof c=="number"&&u!==void 0&&Math.abs(u-c)<=Number.EPSILON*8*Math.max(1,Math.abs(u),Math.abs(c));String(c)!==d&&!f&&r.push(`${t}.${a}: semantic ${c} != crisp ${d}`)};switch(e.kind){case"rect":{let a=s("rect");return a&&(o("x",e.x,a.attrs.get("x")),o("y",e.y,a.attrs.get("y")),o("width",e.width,a.attrs.get("width")),o("height",e.height,a.attrs.get("height")),e.rx!==void 0&&o("rx",e.rx,a.attrs.get("rx"))),1}case"circle":{let a=s("circle");return a&&(o("cx",e.cx,a.attrs.get("cx")),o("cy",e.cy,a.attrs.get("cy")),o("r",e.r,a.attrs.get("r"))),1}case"ellipse":{let a=s("ellipse");return a&&(o("cx",e.cx,a.attrs.get("cx")),o("cy",e.cy,a.attrs.get("cy")),o("rx",e.rx,a.attrs.get("rx")),o("ry",e.ry,a.attrs.get("ry"))),1}case"line":{let a=s("line");return a&&(o("x1",e.x1,a.attrs.get("x1")),o("y1",e.y1,a.attrs.get("y1")),o("x2",e.x2,a.attrs.get("x2")),o("y2",e.y2,a.attrs.get("y2"))),1}case"polygon":case"polyline":{let a=s(e.kind);if(!a)return 1;let c=e.points.map(d=>`${d.x},${d.y}`).join(" ");return a.attrs.get("points")!==c&&r.push(`${t}.points: semantic "${c.slice(0,60)}" != crisp "${(a.attrs.get("points")??"").slice(0,60)}"`),1}case"path":{let a=s("path");return a&&a.attrs.get("d")!==e.d&&r.push(`${t}.d: semantic "${e.d.slice(0,60)}" != crisp "${(a.attrs.get("d")??"").slice(0,60)}"`),1}case"compound":{let a=0;for(let c=0;c<e.children.length;c++)a+=vr(e.children[c],n.slice(a),`${t}.children[${c}]`,r);return a}}}function hn(e){return e.replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/&/g,"&")}function jo(e){if(!e)return;let n=/^rotate\(\s*([-+\d.eE]+)[,\s]+([-+\d.eE]+)[,\s]+([-+\d.eE]+)\s*\)$/.exec(e);if(!n)return;let[t,r,i]=n.slice(1).map(Number);if([t,r,i].every(Number.isFinite))return{kind:"rotate",angle:t,cx:r,cy:i}}function Bo(e,n,t,r){let i=n?.get("transform"),s=jo(i);if(i&&!s){r.push(`${t}(${e.kind}:${e.id}).transform: unsupported crisp transform ${i}`);return}if(!e.transform&&s){r.push(`${t}(${e.kind}:${e.id}).transform: crisp rotation is missing from semantic fields`);return}if(e.transform&&!s){r.push(`${t}(${e.kind}:${e.id}).transform: semantic rotation is missing from crisp SVG`);return}e.transform&&s&&(e.transform.kind!==s.kind||e.transform.angle!==s.angle||e.transform.cx!==s.cx||e.transform.cy!==s.cy)&&r.push(`${t}(${e.kind}:${e.id}).transform: semantic ${JSON.stringify(e.transform)} != crisp ${JSON.stringify(s)}`)}function Ar(e,n,t){let r=R(e);if(e.kind!=="document"){let i=ot(e.kind==="group"?e.open:r)[0];if(Bo(e,i?.attrs,n,t),r!==""&&jn(e.role)&&(e.identity||t.push(`${n}(${e.kind}:${e.id}): missing typed identity`),i||t.push(`${n}(${e.kind}:${e.id}): no SVG element for identity`),i&&e.identity)){let s=i.attrs.get("data-id")===void 0?void 0:hn(i.attrs.get("data-id")),o=i.attrs.get("data-role");s!==e.identity.id&&t.push(`${n}(${e.kind}:${e.id}): data-id ${s} != typed ${e.identity.id}`),o!==e.identity.role&&t.push(`${n}(${e.kind}:${e.id}): data-role ${o} != typed ${e.identity.role}`)}if(i&&e.accessibility){let s=hn(i.attrs.get("aria-label")??"");s!==e.accessibility.label&&t.push(`${n}(${e.kind}:${e.id}): aria-label ${s} != typed ${e.accessibility.label}`),i.attrs.get("role")!==e.accessibility.role&&t.push(`${n}(${e.kind}:${e.id}): ARIA role drift`)}}switch(e.kind){case"shape":{let i=ot(r);vr(e.geometry,i,`${n}(shape:${e.id})`,t);return}case"connector":return;case"text":{if(r===""){t.push(`${n}(text:${e.id}): empty crisp`);return}let s=ot(r).find(p=>p.tag==="text");if(!s){t.push(`${n}(text:${e.id}): crisp has no <text>`);return}let o=s.attrs.get("font-size");o!==void 0&&bn(o)!==e.fontSize&&t.push(`${n}(text:${e.id}).fontSize: semantic ${e.fontSize} != crisp ${o}`);let a=s.attrs.get("text-anchor")??"start",c=e.anchor??"start";a!==c&&t.push(`${n}(text:${e.id}).anchor: semantic ${c} != crisp ${a}`);let d=bn(s.attrs.get("x"));d!==void 0&&Math.abs(d-e.x)>.5&&t.push(`${n}(text:${e.id}).x: semantic ${e.x} != crisp ${d}`);let u=bn(s.attrs.get("y"));u!==void 0&&Math.abs(u-e.y)>.5&&t.push(`${n}(text:${e.id}).y: semantic ${e.y} != crisp ${u}`);let f=p=>hn(p.replace(/<br\s*\/?>/gi," ").replace(/<[^>]+>/g,"")).replace(/[`*_]/g,"").replace(/\s+/g," ").trim(),m=f(e.text);m&&!f(r).includes(m.split(" ")[0])&&t.push(`${n}(text:${e.id}): text "${m.slice(0,40)}" not found in crisp`);return}case"group":{r.startsWith(e.open)||t.push(`${n}(group:${e.id}): crisp does not start with open tag`),r.endsWith(e.close)||t.push(`${n}(group:${e.id}): crisp does not end with close tag`),e.children.forEach((i,s)=>Ar(i.node,`${n}/${s}`,t));return}case"document":{if(e.element==="title"||e.element==="description"){let i=e.element==="title"?"title":"desc";(!r.startsWith(`<${i}`)||!r.endsWith(`</${i}>`))&&t.push(`${n}(doc-mark:${e.id}): malformed ${i}`),e.text!==void 0&&!hn(r).includes(e.text)&&t.push(`${n}(doc-mark:${e.id}): text drift`)}return}}}function _r(e){let n=[];return e.parts.forEach((t,r)=>Ar(t,`parts[${r}]`,n)),n}var L=Object.freeze({maxExtent:1e6,maxNodes:1e5,maxDepth:64,maxTextLength:1e6,maxTextBytes:2e6,maxPoints:5e4,maxSerializationBytesPerNode:5e6,maxAggregateSerializationBytes:16e6,maxFinalSvgBytes:8e6}),dt=class extends Error{constructor(t){super(`Scene validation failed: ${t.map(r=>`${r.path}: ${r.message}`).join("; ")}`);this.diagnostics=t;this.name="SceneValidationError"}diagnostics;code="SCENE_VALIDATION_FAILED"},Sn=L.maxExtent,I=L.maxNodes,En=L.maxDepth,lt=L.maxTextLength,st=L.maxTextBytes,ve=L.maxPoints,Or=L.maxSerializationBytesPerNode,Lo=L.maxAggregateSerializationBytes,ge=L.maxFinalSvgBytes,Fo=/^[A-Za-z0-9][A-Za-z0-9_.:/-]*$/,Uo=/^[a-z0-9][a-z0-9._/-]*:[a-z0-9][a-z0-9._/-]*$/i,Pr=/^(?:none|[-+]?\d*\.?\d+(?:[eE][-+]?\d+)?(?:[\s,]+[-+]?\d*\.?\d+(?:[eE][-+]?\d+)?)*)$/,Vo="MmLlHhVvCcSsQqTtAaZz",Wo=Object.freeze({M:2,m:2,L:2,l:2,H:1,h:1,V:1,v:1,C:6,c:6,S:4,s:4,Q:4,q:4,T:2,t:2,A:7,a:7,Z:0,z:0}),at=/[-+]?(?:(?:\d+(?:\.\d*)?)|(?:\.\d+))(?:[eE][-+]?\d+)?/y,Go=["fill","stroke","strokeWidth","strokeDasharray","strokeDashoffset","strokeLinecap","strokeLinejoin","strokeMiterlimit","vectorEffect","paintOrder","opacity"];function ut(e,n="final SVG"){if(typeof e!="string")throw new TypeError(`${n} must be a string`);if(de(e,ge)>ge)throw new RangeError(`${n} exceeds the ${ge}-byte final SVG limit`)}function k(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function l(e,n,t,r){e.push({code:n,path:t,message:r})}function K(e,n,t,r){let i=new Set(n);for(let s of Object.keys(e))i.has(s)||l(r,"SCENE_DOCUMENT",`${t}.${s}`,"is not part of the external Scene contract")}function qo(e,n=!1){let t=0,r,i=!1,s=0,o=()=>{for(;t<e.length&&(e[t]===","||/\s/.test(e[t]));)t++},a=()=>{let d=e[t];return d!==void 0&&Vo.includes(d)?d:void 0},c=()=>{o(),at.lastIndex=t;let d=at.exec(e);if(!d)return"expected a numeric path parameter";t=at.lastIndex;let u=Number(d[0]);if(!Number.isFinite(u))return`path parameter ${d[0]} is not finite`;if(Math.abs(u)>Sn)return`path parameter ${d[0]} exceeds ${Sn} user units`};for(;o(),!(t>=e.length);){let d=a();if(d!==void 0){if(r=d,t++,!i&&r!=="M"&&r!=="m")return"must start with an M or m moveto command";if(i&&n&&(r==="M"||r==="m"))return"multiple moveto subpaths require typed subpath geometry";if(i=!0,r==="Z"||r==="z"){r=void 0;continue}}else if(r===void 0)return"path parameters must follow a command";let u=Wo[r];if(u===void 0||u===0)return`unknown path command ${String(r)}`;let f=0;for(;;){if(o(),t>=e.length||a()!==void 0){if(f===0)return`command ${r} requires ${u} parameters`;break}for(let m=0;m<u;m++){if(o(),t>=e.length||a()!==void 0)return`command ${r} ended before its ${u}-parameter group was complete`;if((r==="A"||r==="a")&&(m===3||m===4)){let p=e[t];if(p!=="0"&&p!=="1")return`command ${r} arc flags must be 0 or 1`;t++}else{let p=c();if(p)return p}}if(f++,++s>ve)return`contains more than ${ve} path parameter groups`}}return i?void 0:"must contain an M or m moveto command"}function C(e,n,t,r={}){return typeof e!="number"||!Number.isFinite(e)?(l(t,"SCENE_FINITE",n,"must be a finite number"),!1):(r.positive&&e<=0&&l(t,"SCENE_BOUNDS",n,"must be positive"),r.nonNegative&&e<0&&l(t,"SCENE_BOUNDS",n,"must be non-negative"),Math.abs(e)>Sn&&l(t,"SCENE_BOUNDS",n,`must not exceed ${Sn} user units`),!0)}function q(e,n,t,r={}){return typeof e!="string"?(l(t,"SCENE_ID",n,"must be a string"),!1):(!r.empty&&e.length===0&&l(t,"SCENE_ID",n,"must not be empty"),e.length>(r.max??256)&&l(t,"SCENE_ID",n,"is too long"),/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/.test(e)&&l(t,"SCENE_ID",n,"contains a control character"),r.externalId&&!Fo.test(e)&&l(t,"SCENE_ID",n,"must use the safe external id grammar"),!0)}function te(e,n,t,r={}){if(e===void 0)return;if(typeof e!="string"&&typeof e!="number"){l(t,"SCENE_PAINT",n,"must be a finite numeric value");return}let s=(typeof e=="string"?e.trim():void 0)?.match(r.length?/^([-+]?\d*\.?\d+(?:[eE][-+]?\d+)?)(?:px)?$/:/^([-+]?\d*\.?\d+(?:[eE][-+]?\d+)?)$/),o=typeof e=="number"?e:s?Number(s[1]):Number.NaN;if(Number.isFinite(o))r.nonNegative&&o<0?l(t,"SCENE_PAINT",n,"must be non-negative"):r.unitInterval&&(o<0||o>1)&&l(t,"SCENE_PAINT",n,"must be in [0,1]");else{if(typeof e=="string"&&/^var\(--[a-z0-9_-]+(?:,\s*[-+]?\d*\.?\d+)?\)$/i.test(e.trim()))return;l(t,"SCENE_PAINT",n,`must be a finite number or safe numeric custom-property reference (received ${JSON.stringify(e)})`)}}function kn(e,n,t,r=!1){if(!k(e)){l(t,"SCENE_PAINT",n,"must be a paint object");return}r&&K(e,Go,n,t);for(let i of["fill","stroke"]){let s=e[i];s!==void 0&&Ce(s)===void 0&&l(t,"SCENE_PAINT",`${n}.${i}`,"must be a safe non-fetching CSS paint")}if(te(e.strokeWidth,`${n}.strokeWidth`,t,{nonNegative:!0,length:!0}),te(e.strokeDashoffset,`${n}.strokeDashoffset`,t,{length:!0}),te(e.strokeMiterlimit,`${n}.strokeMiterlimit`,t,{nonNegative:!0}),te(e.opacity,`${n}.opacity`,t,{unitInterval:!0}),e.strokeDasharray!==void 0&&(typeof e.strokeDasharray!="string"||!Pr.test(e.strokeDasharray.trim()))&&l(t,"SCENE_PAINT",`${n}.strokeDasharray`,'must be "none" or a finite numeric dash list'),e.strokeLinecap!==void 0&&!["butt","round","square"].includes(String(e.strokeLinecap))&&l(t,"SCENE_PAINT",`${n}.strokeLinecap`,"must be butt, round, or square"),e.strokeLinejoin!==void 0&&!["arcs","bevel","miter","miter-clip","round"].includes(String(e.strokeLinejoin))&&l(t,"SCENE_PAINT",`${n}.strokeLinejoin`,"must be arcs, bevel, miter, miter-clip, or round"),e.vectorEffect!==void 0&&!["none","non-scaling-stroke"].includes(String(e.vectorEffect))&&l(t,"SCENE_PAINT",`${n}.vectorEffect`,"must be none or non-scaling-stroke"),e.paintOrder!==void 0){let i=typeof e.paintOrder=="string"?e.paintOrder.trim().split(/\s+/).filter(Boolean).map(o=>o.toLowerCase()):[];i.length===1&&i[0]==="normal"||i.length>=1&&i.length<=3&&new Set(i).size===i.length&&i.every(o=>["fill","stroke","markers"].includes(o))||l(t,"SCENE_PAINT",`${n}.paintOrder`,"must be normal or one to three unique fill, stroke, and markers keywords")}}function xn(e,n,t,r,i,s,o,a){if(!e||typeof r!="string"||e[t])return;let c=Math.max(0,o-e[n]),d=de(r,c);d>c?(e[n]=o+1,e[t]=!0,l(s,"SCENE_BOUNDS",i,`${a} exceed the aggregate ${o}-byte limit`)):e[n]+=d}function Ho(e,n,t){!e||e.pointsExceeded||++e.points>ve&&(e.pointsExceeded=!0,l(t,"SCENE_BOUNDS",n,`Scene points exceed the aggregate ${ve}-point limit`))}function J(e,n,t,r,i=!1){if(!k(e)){l(t,"SCENE_FINITE",n,"must be a point object");return}i&&K(e,["x","y"],n,t),Ho(r,n,t),C(e.x,`${n}.x`,t),C(e.y,`${n}.y`,t)}function ct(e,n,t){if(!k(e)||typeof e.x!="number"||typeof e.y!="number")return;let r=Math.hypot(e.x,e.y);(!Number.isFinite(r)||Math.abs(r-1)>1e-9)&&l(t,"SCENE_FINITE",n,"must be a finite unit vector")}function je(e,n,t,r,i,s=!1){if(!Array.isArray(e)){l(t,"SCENE_FINITE",n,"must be an array of points");return}if(i?.pointCollections.has(e))return;i?.pointCollections.add(e),e.length<r&&l(t,"SCENE_BOUNDS",n,`must contain at least ${r} points`),e.length>I&&l(t,"SCENE_BOUNDS",n,"contains too many points");let o=Math.min(e.length,I,i?Math.max(0,ve-i.points+1):I);for(let a=0;a<o;a++)J(e[a],`${n}[${a}]`,t,i,s)}function Me(e,n,t,r=!1,i=0,s,o=!1){if(i>En){l(t,"SCENE_BOUNDS",n,`geometry exceeds maximum nesting depth ${En}`);return}if(!k(e)||typeof e.kind!="string"){l(t,"SCENE_DOCUMENT",n,"must be a typed geometry object");return}if(o){let c={rect:["kind","x","y","width","height","rx","ry"],circle:["kind","cx","cy","r"],ellipse:["kind","cx","cy","rx","ry"],line:["kind","x1","y1","x2","y2"],polygon:["kind","points"],polyline:["kind","points"],path:["kind","d","points"],compound:["kind","children"]}[e.kind];c&&K(e,c,n,t)}switch(e.kind){case"rect":C(e.x,`${n}.x`,t),C(e.y,`${n}.y`,t),C(e.width,`${n}.width`,t,{nonNegative:!0}),C(e.height,`${n}.height`,t,{nonNegative:!0}),e.rx!==void 0&&C(e.rx,`${n}.rx`,t,{nonNegative:!0}),e.ry!==void 0&&C(e.ry,`${n}.ry`,t,{nonNegative:!0});return;case"circle":C(e.cx,`${n}.cx`,t),C(e.cy,`${n}.cy`,t),C(e.r,`${n}.r`,t,{nonNegative:!0});return;case"ellipse":C(e.cx,`${n}.cx`,t),C(e.cy,`${n}.cy`,t),C(e.rx,`${n}.rx`,t,{nonNegative:!0}),C(e.ry,`${n}.ry`,t,{nonNegative:!0});return;case"line":C(e.x1,`${n}.x1`,t),C(e.y1,`${n}.y1`,t),C(e.x2,`${n}.x2`,t),C(e.y2,`${n}.y2`,t);return;case"polygon":je(e.points,`${n}.points`,t,3,s,o);return;case"polyline":je(e.points,`${n}.points`,t,2,s,o);return;case"path":if(typeof e.d!="string"||e.d.length===0||e.d.length>lt)l(t,"SCENE_SECURITY",`${n}.d`,"must use bounded SVG path data");else{let a=qo(e.d,o&&!r);a&&l(t,"SCENE_SECURITY",`${n}.d`,`must use semantic SVG path data: ${a}`)}if(e.points!==void 0&&je(e.points,`${n}.points`,t,2,s,o),e.markerMidpoints!==void 0&&je(e.markerMidpoints,`${n}.markerMidpoints`,t,0,s,o),e.subpaths!==void 0)if(!Array.isArray(e.subpaths)||e.subpaths.length===0)l(t,"SCENE_BOUNDS",`${n}.subpaths`,"must be a non-empty array of typed contours");else for(let a=0;a<Math.min(e.subpaths.length,I);a++){let c=e.subpaths[a];if(!k(c)){l(t,"SCENE_DOCUMENT",`${n}.subpaths[${a}]`,"must be a typed contour");continue}je(c.points,`${n}.subpaths[${a}].points`,t,2,s,o),typeof c.closed!="boolean"&&l(t,"SCENE_DOCUMENT",`${n}.subpaths[${a}].closed`,"must be boolean")}return;case"compound":if(!Array.isArray(e.children)){l(t,"SCENE_BOUNDS",`${n}.children`,"must be a geometry array");return}e.children.length>I&&l(t,"SCENE_BOUNDS",`${n}.children`,"contains too many geometries");for(let a=0;a<Math.min(e.children.length,I);a++)Me(e.children[a],`${n}.children[${a}]`,t,r,i+1,s,o);return;default:l(t,"SCENE_DOCUMENT",`${n}.kind`,`unknown geometry kind "${e.kind}"`)}}function Ko(e,n,t){if(e!==void 0){if(!k(e)){l(t,"SCENE_DOCUMENT",n,"must be a semantic channel object");return}for(let r of["importance","value","progress"])e[r]!==void 0&&C(e[r],`${n}.${r}`,t);typeof e.progress=="number"&&(e.progress<0||e.progress>1)&&l(t,"SCENE_BOUNDS",`${n}.progress`,"must be in [0,1]");for(let r of["category","status","route"])e[r]!==void 0&&q(e[r],`${n}.${r}`,t,{max:4096});e.emphasis!==void 0&&typeof e.emphasis!="boolean"&&l(t,"SCENE_DOCUMENT",`${n}.emphasis`,"must be boolean")}}function Ir(e,n,t,r,i){if(!k(e))return l(t,"SCENE_MARKER",n,"must be a marker descriptor"),!1;if(r&&K(e,["id","shape","geometry","size","viewBox","ref","bounds","units","orient","overflow","paint","scale"],n,t),q(e.id,`${n}.id`,t,{externalId:r}),["arrow","open-arrow","circle","cross","triangle","diamond","diamond-open"].includes(String(e.shape))||l(t,"SCENE_MARKER",`${n}.shape`,"must be a known marker shape"),Me(e.geometry,`${n}.geometry`,t,!0,0,i,r),r&&k(e.geometry)&&e.geometry.kind==="compound"&&(!Array.isArray(e.geometry.children)||e.geometry.children.length===0)&&l(t,"SCENE_BOUNDS",`${n}.geometry.children`,"external marker compounds must contain geometry"),k(e.size)&&(r&&K(e.size,["width","height"],`${n}.size`,t),C(e.size.width,`${n}.size.width`,t,{positive:!0}),C(e.size.height,`${n}.size.height`,t,{positive:!0})),k(e.ref)&&J(e.ref,`${n}.ref`,t,i,r),e.paint!==void 0&&kn(e.paint,`${n}.paint`,t,r),k(e.viewBox)&&(r&&K(e.viewBox,["x","y","width","height"],`${n}.viewBox`,t),C(e.viewBox.x,`${n}.viewBox.x`,t),C(e.viewBox.y,`${n}.viewBox.y`,t),C(e.viewBox.width,`${n}.viewBox.width`,t,{positive:!0}),C(e.viewBox.height,`${n}.viewBox.height`,t,{positive:!0})),k(e.bounds)){r&&K(e.bounds,["x0","y0","x1","y1"],`${n}.bounds`,t);for(let s of["x0","y0","x1","y1"])C(e.bounds[s],`${n}.bounds.${s}`,t);typeof e.bounds.x0=="number"&&typeof e.bounds.x1=="number"&&e.bounds.x0>e.bounds.x1&&l(t,"SCENE_BOUNDS",`${n}.bounds`,"x0 must not exceed x1"),typeof e.bounds.y0=="number"&&typeof e.bounds.y1=="number"&&e.bounds.y0>e.bounds.y1&&l(t,"SCENE_BOUNDS",`${n}.bounds`,"y0 must not exceed y1")}e.scale!==void 0&&C(e.scale,`${n}.scale`,t,{nonNegative:!0}),e.units!==void 0&&!["strokeWidth","userSpaceOnUse"].includes(String(e.units))&&l(t,"SCENE_MARKER",`${n}.units`,"must be strokeWidth or userSpaceOnUse"),typeof e.orient=="number"?C(e.orient,`${n}.orient`,t):e.orient!==void 0&&!["auto","auto-start-reverse"].includes(String(e.orient))&&l(t,"SCENE_MARKER",`${n}.orient`,"must be auto, auto-start-reverse, or a finite angle"),e.overflow!==void 0&&!["hidden","visible"].includes(String(e.overflow))&&l(t,"SCENE_MARKER",`${n}.overflow`,"must be hidden or visible");try{nt(e)}catch(s){l(t,"SCENE_MARKER",n,s instanceof Error?s.message:String(s))}return typeof e.id=="string"}function Xo(e,n,t,r){return typeof n!="string"?(l(r.diagnostics,"SCENE_ROLE",t,"must be a Scene role string"),!1):!Object.prototype.hasOwnProperty.call(Je,n)&&!Uo.test(n)?(l(r.diagnostics,"SCENE_ROLE",t,"must be a built-in or namespaced Scene role"),!1):(we(n).applicableKinds.includes(e)||l(r.diagnostics,"SCENE_ROLE",t,`role "${n}" is not applicable to ${e} marks`),!0)}function zr(e,n,t,r){if(r>En){l(t.diagnostics,"SCENE_BOUNDS",n,`exceeds maximum nesting depth ${En}`);return}if(++t.nodeCount>I){t.nodeCount===I+1&&l(t.diagnostics,"SCENE_BOUNDS",n,"contains too many Scene nodes");return}if(!k(e)||typeof e.kind!="string"){l(t.diagnostics,"SCENE_DOCUMENT",n,"must be a typed Scene node");return}let i=e.kind;if(!["shape","connector","text","group","document"].includes(i)){l(t.diagnostics,"SCENE_DOCUMENT",`${n}.kind`,`unknown Scene node kind "${i}"`);return}if(t.external&&r>0&&i==="document"&&l(t.diagnostics,"SCENE_DOCUMENT",n,`${i} marks must be top-level document furniture`),t.external){let o=["kind","id","role","identity","accessibility","channels","transform"],a={shape:[...o,"geometry","paint"],text:[...o,"text","x","y","fontSize","anchor","paint"],group:[...o,"open","close","children","join"],document:[...o,"element","text","domId","markerResources"],connector:[...o,"lineStyle","endpoints","relationship","route","stroke","markers","labels","hit","terminalProjection"]};K(e,a[i],n,t.diagnostics)}if(q(e.id,`${n}.id`,t.diagnostics,{externalId:t.external})){let o=t.ids.get(e.id);t.external&&o?l(t.diagnostics,"SCENE_ID",`${n}.id`,`duplicates ${o.path}`):t.ids.set(e.id,{path:`${n}.id`,kind:i})}if(e.domId!==void 0&&q(e.domId,`${n}.domId`,t.diagnostics,{externalId:t.external})){let o=t.domIds.get(e.domId),a=t.markerIds.get(e.domId);t.external&&o?l(t.diagnostics,"SCENE_ID",`${n}.domId`,`duplicates DOM id owned by ${o}`):t.external&&a?l(t.diagnostics,"SCENE_ID",`${n}.domId`,`collides with marker resource "${e.domId}"`):t.domIds.set(e.domId,`${n}.domId`)}Xo(i,e.role,`${n}.role`,t),Ko(e.channels,`${n}.channels`,t.diagnostics);let s;try{s=R(e),de(s,Or)>Or&&l(t.diagnostics,"SCENE_DOCUMENT",n,"has an oversized SVG serialization")}catch(o){l(t.diagnostics,"SCENE_DOCUMENT",n,o instanceof Error?o.message:String(o))}if(t.external&&s!==void 0&&xn(t.budget,"serializationBytes","serializationExceeded",s,n,t.diagnostics,Lo,"Scene serializations"),e.transform!==void 0&&(!k(e.transform)||e.transform.kind!=="rotate"?l(t.diagnostics,"SCENE_DOCUMENT",`${n}.transform`,"must be a rotate transform"):(C(e.transform.angle,`${n}.transform.angle`,t.diagnostics),C(e.transform.cx,`${n}.transform.cx`,t.diagnostics),C(e.transform.cy,`${n}.transform.cy`,t.diagnostics)),t.external&&l(t.diagnostics,"SCENE_DOCUMENT",`${n}.transform`,"external Scene transforms are not exposed by the declarative builder")),i==="shape"){Me(e.geometry,`${n}.geometry`,t.diagnostics,!1,0,t.budget,t.external),t.external&&k(e.geometry)&&(e.geometry.kind==="path"||e.geometry.kind==="compound")&&l(t.diagnostics,"SCENE_BOUNDS",`${n}.geometry`,"external shapes must use a directly bounded structured geometry"),kn(e.paint,`${n}.paint`,t.diagnostics,t.external);return}if(i==="text"){q(e.text,`${n}.text`,t.diagnostics,{empty:!0,max:lt}),t.external&&xn(t.budget,"textBytes","textExceeded",e.text,`${n}.text`,t.diagnostics,st,"Scene text values"),C(e.x,`${n}.x`,t.diagnostics),C(e.y,`${n}.y`,t.diagnostics),C(e.fontSize,`${n}.fontSize`,t.diagnostics,{positive:!0}),["start","middle","end"].includes(String(e.anchor))||l(t.diagnostics,"SCENE_DOCUMENT",`${n}.anchor`,"must be start, middle, or end"),kn(e.paint,`${n}.paint`,t.diagnostics,t.external);return}if(i==="group"){if(!Array.isArray(e.children)){l(t.diagnostics,"SCENE_DOCUMENT",`${n}.children`,"must be an array");return}e.children.length>I&&l(t.diagnostics,"SCENE_BOUNDS",`${n}.children`,"contains too many Scene nodes");let o=Math.min(e.children.length,Math.max(0,I-t.nodeCount+1));for(let a=0;a<o;a++){let c=e.children[a];k(c)?(C(c.indent,`${n}.children[${a}].indent`,t.diagnostics,{nonNegative:!0}),zr(c.node,`${n}.children[${a}].node`,t,r+1)):l(t.diagnostics,"SCENE_DOCUMENT",`${n}.children[${a}]`,"must wrap a Scene node")}t.external&&(typeof e.open!="string"||!/^<g(?:\s|>)/.test(e.open)||e.close!=="</g>")&&l(t.diagnostics,"SCENE_SECURITY",n,"external containers must use a generated <g> wrapper");return}if(i==="document"){if(["open","title","description","definitions","content","close"].includes(String(e.element))||l(t.diagnostics,"SCENE_DOCUMENT",`${n}.element`,"has an unknown document element"),e.markerResources!==void 0)if(!Array.isArray(e.markerResources))l(t.diagnostics,"SCENE_MARKER",`${n}.markerResources`,"must be an array");else{e.markerResources.length>I&&l(t.diagnostics,"SCENE_BOUNDS",`${n}.markerResources`,"contains too many marker resources");for(let o=0;o<Math.min(e.markerResources.length,I);o++){let a=e.markerResources[o],c=`${n}.markerResources[${o}]`;if(Ir(a,c,t.diagnostics,t.external,t.budget)&&typeof a.id=="string"){let d=t.markerIds.get(a.id),u=t.domIds.get(a.id);d?l(t.diagnostics,"SCENE_MARKER",`${c}.id`,`duplicates marker resource "${a.id}"`):t.external&&u?l(t.diagnostics,"SCENE_ID",`${c}.id`,`collides with DOM id owned by ${u}`):t.markerIds.set(a.id,a)}}if(t.external&&e.element==="definitions")try{let o=ue(`<defs>
|
|
33
|
+
${$r(e.markerResources)}
|
|
34
|
+
</defs>`);s!==o&&l(t.diagnostics,"SCENE_FIDELITY",n,"definitions must be generated from the typed marker resources")}catch{}}t.external&&(e.element==="title"||e.element==="description")&&xn(t.budget,"textBytes","textExceeded",e.text,`${n}.text`,t.diagnostics,st,"Scene text values"),t.external&&e.element==="close"&&s!=="</svg>"&&l(t.diagnostics,"SCENE_SECURITY",n,"external document close must be canonical");return}if(["solid","dotted","dashed","thick","invisible"].includes(String(e.lineStyle))||l(t.diagnostics,"SCENE_DOCUMENT",`${n}.lineStyle`,"has an unknown line style"),k(e.endpoints)){for(let o of["from","to"])t.external&&e.endpoints[o]===void 0?l(t.diagnostics,"SCENE_REFERENCE",`${n}.endpoints.${o}`,"is required for external connectors"):e.endpoints[o]!==void 0&&q(e.endpoints[o],`${n}.endpoints.${o}`,t.diagnostics,{externalId:t.external})&&t.endpointReferences.push({id:e.endpoints[o],path:`${n}.endpoints.${o}`});for(let o of["start","end"]){let a=e.endpoints[o];k(a)&&(a.point!==void 0&&J(a.point,`${n}.endpoints.${o}.point`,t.diagnostics,t.budget,t.external),a.id!==void 0&&q(a.id,`${n}.endpoints.${o}.id`,t.diagnostics,{externalId:t.external}),a.portId!==void 0&&q(a.portId,`${n}.endpoints.${o}.portId`,t.diagnostics,{externalId:t.external}))}}else l(t.diagnostics,"SCENE_REFERENCE",`${n}.endpoints`,"must be a typed endpoint object");if(k(e.relationship)?q(e.relationship.kind,`${n}.relationship.kind`,t.diagnostics,{max:4096}):l(t.diagnostics,"SCENE_DOCUMENT",`${n}.relationship`,"must be a typed relationship"),k(e.relationship)&&!["forward","reverse","bidirectional","undirected","self"].includes(String(e.relationship.direction))&&l(t.diagnostics,"SCENE_DOCUMENT",`${n}.relationship.direction`,"has an unknown connector direction"),k(e.route)){if(Me(e.route.geometry,`${n}.route.geometry`,t.diagnostics,!1,0,t.budget,t.external),t.external&&k(e.route.geometry)&&e.route.geometry.kind==="path"&&!Array.isArray(e.route.geometry.points)&&l(t.diagnostics,"SCENE_BOUNDS",`${n}.route.geometry.points`,"external connector paths require deterministic routed points"),C(e.route.bendRadius,`${n}.route.bendRadius`,t.diagnostics,{nonNegative:!0}),["authored","layout","family","projected"].includes(String(e.route.ownership))||l(t.diagnostics,"SCENE_DOCUMENT",`${n}.route.ownership`,"has an unknown route ownership"),typeof e.route.closed!="boolean"&&l(t.diagnostics,"SCENE_DOCUMENT",`${n}.route.closed`,"must be boolean"),e.route.closed===!0&&k(e.route.geometry)&&e.route.geometry.kind!=="path"&&l(t.diagnostics,"SCENE_DOCUMENT",`${n}.route.closed`,"closed connector topology requires path geometry"),e.route.startTangent!==void 0&&(J(e.route.startTangent,`${n}.route.startTangent`,t.diagnostics,t.budget,t.external),ct(e.route.startTangent,`${n}.route.startTangent`,t.diagnostics)),e.route.endTangent!==void 0&&(J(e.route.endTangent,`${n}.route.endTangent`,t.diagnostics,t.budget,t.external),ct(e.route.endTangent,`${n}.route.endTangent`,t.diagnostics)),Array.isArray(e.route.labelAnchors)){e.route.labelAnchors.length>I&&l(t.diagnostics,"SCENE_BOUNDS",`${n}.route.labelAnchors`,"contains too many points");let o=Math.min(e.route.labelAnchors.length,I,Math.max(0,ve-t.budget.points+1));for(let a=0;a<o;a++)J(e.route.labelAnchors[a],`${n}.route.labelAnchors[${a}]`,t.diagnostics,t.budget,t.external)}else l(t.diagnostics,"SCENE_DOCUMENT",`${n}.route.labelAnchors`,"must be an array");if(Array.isArray(e.route.contours)){(e.route.contours.length===0||e.route.contours.length>I)&&l(t.diagnostics,"SCENE_BOUNDS",`${n}.route.contours`,"must contain a bounded non-empty contour list");for(let o=0;o<Math.min(e.route.contours.length,I);o++){let a=e.route.contours[o];if(!k(a)){l(t.diagnostics,"SCENE_DOCUMENT",`${n}.route.contours[${o}]`,"must be typed contour semantics");continue}J(a.start,`${n}.route.contours[${o}].start`,t.diagnostics,t.budget,t.external),J(a.end,`${n}.route.contours[${o}].end`,t.diagnostics,t.budget,t.external),typeof a.closed!="boolean"&&l(t.diagnostics,"SCENE_DOCUMENT",`${n}.route.contours[${o}].closed`,"must be boolean");for(let[c,d]of[["startTangent",a.startTangent],["endTangent",a.endTangent]]){if(d===void 0)continue;let u=`${n}.route.contours[${o}].${c}`;J(d,u,t.diagnostics,t.budget,t.external),ct(d,u,t.diagnostics)}}}else l(t.diagnostics,"SCENE_DOCUMENT",`${n}.route.contours`,"must be an array")}else l(t.diagnostics,"SCENE_DOCUMENT",`${n}.route`,"must be a typed connector route");if(k(e.stroke)){if(Ce(e.stroke.color)===void 0&&l(t.diagnostics,"SCENE_PAINT",`${n}.stroke.color`,"must be a safe non-fetching CSS paint"),te(e.stroke.width,`${n}.stroke.width`,t.diagnostics,{nonNegative:!0,length:!0}),te(e.stroke.opacity,`${n}.stroke.opacity`,t.diagnostics,{unitInterval:!0}),te(e.stroke.miterLimit,`${n}.stroke.miterLimit`,t.diagnostics,{nonNegative:!0}),te(e.stroke.pathLength,`${n}.stroke.pathLength`,t.diagnostics,{nonNegative:!0}),["butt","round","square"].includes(String(e.stroke.lineCap))||l(t.diagnostics,"SCENE_PAINT",`${n}.stroke.lineCap`,"has an unknown line cap"),["arcs","bevel","miter","miter-clip","round"].includes(String(e.stroke.lineJoin))||l(t.diagnostics,"SCENE_PAINT",`${n}.stroke.lineJoin`,"has an unknown line join"),typeof e.stroke.nonScaling!="boolean"&&l(t.diagnostics,"SCENE_PAINT",`${n}.stroke.nonScaling`,"must be boolean"),e.stroke.dash!==void 0)if(!k(e.stroke.dash))l(t.diagnostics,"SCENE_PAINT",`${n}.stroke.dash`,"must be a dash descriptor");else{let o=e.stroke.dash.array;typeof o=="string"?Pr.test(o.trim())||l(t.diagnostics,"SCENE_PAINT",`${n}.stroke.dash.array`,"must be a finite numeric dash list"):Array.isArray(o)?o.forEach((a,c)=>te(a,`${n}.stroke.dash.array[${c}]`,t.diagnostics,{nonNegative:!0})):l(t.diagnostics,"SCENE_PAINT",`${n}.stroke.dash.array`,"must be a string or numeric array"),te(e.stroke.dash.offset,`${n}.stroke.dash.offset`,t.diagnostics)}}else l(t.diagnostics,"SCENE_PAINT",`${n}.stroke`,"must be a typed connector stroke");if(k(e.hit)?(Me(e.hit.geometry,`${n}.hit.geometry`,t.diagnostics,!1,0,t.budget,t.external),C(e.hit.strokeWidth,`${n}.hit.strokeWidth`,t.diagnostics,{nonNegative:!0}),typeof e.hit.closed!="boolean"&&l(t.diagnostics,"SCENE_DOCUMENT",`${n}.hit.closed`,"must be boolean"),["stroke","none"].includes(String(e.hit.pointerEvents))||l(t.diagnostics,"SCENE_DOCUMENT",`${n}.hit.pointerEvents`,"has unknown pointer-event semantics"),k(e.route)&&typeof e.route.closed=="boolean"&&typeof e.hit.closed=="boolean"&&e.hit.closed!==e.route.closed&&l(t.diagnostics,"SCENE_DOCUMENT",`${n}.hit.closed`,"must match route.closed topology")):l(t.diagnostics,"SCENE_DOCUMENT",`${n}.hit`,"must be typed hit geometry"),Array.isArray(e.labels)){e.labels.length>I&&l(t.diagnostics,"SCENE_BOUNDS",`${n}.labels`,"contains too many connector labels");for(let o=0;o<Math.min(e.labels.length,I);o++){let a=e.labels[o];if(!k(a)){l(t.diagnostics,"SCENE_DOCUMENT",`${n}.labels[${o}]`,"must be a label descriptor");continue}if(t.external&&K(a,["id","text","anchor","bounds","halo","clearance","paint","fontSize","textAnchor","visual"],`${n}.labels[${o}]`,t.diagnostics),a.id!==void 0&&q(a.id,`${n}.labels[${o}].id`,t.diagnostics,{externalId:t.external}),q(a.text,`${n}.labels[${o}].text`,t.diagnostics,{empty:!0,max:lt}),t.external&&xn(t.budget,"textBytes","textExceeded",a.text,`${n}.labels[${o}].text`,t.diagnostics,st,"Scene text values"),a.anchor!==void 0&&J(a.anchor,`${n}.labels[${o}].anchor`,t.diagnostics,t.budget,t.external),a.bounds!==void 0)if(!k(a.bounds))l(t.diagnostics,"SCENE_BOUNDS",`${n}.labels[${o}].bounds`,"must be a finite ordered box");else{t.external&&K(a.bounds,["x0","y0","x1","y1"],`${n}.labels[${o}].bounds`,t.diagnostics);for(let c of["x0","y0","x1","y1"])C(a.bounds[c],`${n}.labels[${o}].bounds.${c}`,t.diagnostics);typeof a.bounds.x0=="number"&&typeof a.bounds.x1=="number"&&a.bounds.x0>a.bounds.x1&&l(t.diagnostics,"SCENE_BOUNDS",`${n}.labels[${o}].bounds`,"x0 must not exceed x1"),typeof a.bounds.y0=="number"&&typeof a.bounds.y1=="number"&&a.bounds.y0>a.bounds.y1&&l(t.diagnostics,"SCENE_BOUNDS",`${n}.labels[${o}].bounds`,"y0 must not exceed y1")}if(a.clearance!==void 0&&C(a.clearance,`${n}.labels[${o}].clearance`,t.diagnostics,{nonNegative:!0}),a.fontSize!==void 0&&C(a.fontSize,`${n}.labels[${o}].fontSize`,t.diagnostics,{positive:!0}),a.textAnchor!==void 0&&!["start","middle","end"].includes(String(a.textAnchor))&&l(t.diagnostics,"SCENE_DOCUMENT",`${n}.labels[${o}].textAnchor`,"must be start, middle, or end"),a.paint!==void 0&&kn(a.paint,`${n}.labels[${o}].paint`,t.diagnostics,t.external),a.halo!==void 0&&(k(a.halo)?(t.external&&K(a.halo,["color","width"],`${n}.labels[${o}].halo`,t.diagnostics),C(a.halo.width,`${n}.labels[${o}].halo.width`,t.diagnostics,{nonNegative:!0}),a.halo.color!==void 0&&Ce(a.halo.color)===void 0&&l(t.diagnostics,"SCENE_PAINT",`${n}.labels[${o}].halo.color`,"must be a safe non-fetching CSS paint")):l(t.diagnostics,"SCENE_DOCUMENT",`${n}.labels[${o}].halo`,"must be a halo descriptor")),a.visual!==void 0)if(!k(a.visual)||!["inline","companion"].includes(String(a.visual.kind)))l(t.diagnostics,"SCENE_DOCUMENT",`${n}.labels[${o}].visual`,"must be inline or companion label ownership");else if(a.visual.kind==="companion"){let c=`${n}.labels[${o}].visual.markId`;q(a.visual.markId,c,t.diagnostics,{externalId:t.external})&&t.companionLabelReferences.push({id:a.visual.markId,path:c})}else(a.anchor===void 0||a.paint===void 0||a.fontSize===void 0||a.textAnchor===void 0)&&l(t.diagnostics,"SCENE_DOCUMENT",`${n}.labels[${o}].visual`,"inline labels require anchor, paint, fontSize, and textAnchor")}}if(k(e.markers)){Array.isArray(e.markers.mid)||l(t.diagnostics,"SCENE_MARKER",`${n}.markers.mid`,"must be an array"),Array.isArray(e.markers.mid)&&e.markers.mid.length>I&&l(t.diagnostics,"SCENE_BOUNDS",`${n}.markers.mid`,"contains too many mid markers");let o=[[e.markers.start,`${n}.markers.start`],[e.markers.end,`${n}.markers.end`]];if(Array.isArray(e.markers.mid))for(let a=0;a<Math.min(e.markers.mid.length,I);a++)o.push([e.markers.mid[a],`${n}.markers.mid[${a}]`]);for(let[a,c]of o)a!==void 0&&Ir(a,c,t.diagnostics,t.external,t.budget)&&k(a)&&typeof a.id=="string"&&t.markerReferences.push({id:a.id,path:`${c}.id`,marker:a})}else l(t.diagnostics,"SCENE_MARKER",`${n}.markers`,"must be a typed marker set");if(k(e.terminalProjection)){["native","emulated","projected","lossy","unsupported"].includes(String(e.terminalProjection.realization))||l(t.diagnostics,"SCENE_DOCUMENT",`${n}.terminalProjection.realization`,"has an unknown realization"),["line","polyline","path"].includes(String(e.terminalProjection.topology))||l(t.diagnostics,"SCENE_DOCUMENT",`${n}.terminalProjection.topology`,"has an unknown topology"),Me(e.terminalProjection.geometry,`${n}.terminalProjection.geometry`,t.diagnostics,!1,0,void 0,t.external),["forward","reverse","bidirectional","undirected","self"].includes(String(e.terminalProjection.direction))||l(t.diagnostics,"SCENE_DOCUMENT",`${n}.terminalProjection.direction`,"has an unknown direction"),["solid","dotted","dashed","thick","invisible"].includes(String(e.terminalProjection.lineStyle))||l(t.diagnostics,"SCENE_DOCUMENT",`${n}.terminalProjection.lineStyle`,"has an unknown line style");for(let o of["labels","strokeLosses","diagnostics"])Array.isArray(e.terminalProjection[o])||l(t.diagnostics,"SCENE_DOCUMENT",`${n}.terminalProjection.${o}`,"must be an array");if((!k(e.terminalProjection.markers)||!Array.isArray(e.terminalProjection.markers.mid))&&l(t.diagnostics,"SCENE_DOCUMENT",`${n}.terminalProjection.markers`,"must contain a mid-marker array"),!k(e.terminalProjection.markerPlacements))l(t.diagnostics,"SCENE_DOCUMENT",`${n}.terminalProjection.markerPlacements`,"must contain typed start/mid/end marker placements");else for(let o of["start","mid","end"]){let a=e.terminalProjection.markerPlacements[o];if(!Array.isArray(a)){l(t.diagnostics,"SCENE_DOCUMENT",`${n}.terminalProjection.markerPlacements.${o}`,"must be an array");continue}for(let c=0;c<Math.min(a.length,I);c++){let d=a[c];if(!k(d)){l(t.diagnostics,"SCENE_DOCUMENT",`${n}.terminalProjection.markerPlacements.${o}[${c}]`,"must be a marker placement");continue}q(d.markerId,`${n}.terminalProjection.markerPlacements.${o}[${c}].markerId`,t.diagnostics,{externalId:t.external}),J(d.point,`${n}.terminalProjection.markerPlacements.${o}[${c}].point`,t.diagnostics,void 0,t.external),C(d.contourIndex,`${n}.terminalProjection.markerPlacements.${o}[${c}].contourIndex`,t.diagnostics,{nonNegative:!0})}}for(let o of["endpoints","route","stroke","hit"])k(e.terminalProjection[o])||l(t.diagnostics,"SCENE_DOCUMENT",`${n}.terminalProjection.${o}`,"must preserve typed connector semantics")}else l(t.diagnostics,"SCENE_DOCUMENT",`${n}.terminalProjection`,"must be a terminal projection");t.external||Yo(e,n,t)}function he(e,n){if(Object.is(e,n))return!0;if(Array.isArray(e)||Array.isArray(n))return Array.isArray(e)&&Array.isArray(n)&&e.length===n.length&&e.every((i,s)=>he(i,n[s]));if(!k(e)||!k(n))return!1;let t=Object.keys(e).filter(i=>e[i]!==void 0).sort(),r=Object.keys(n).filter(i=>n[i]!==void 0).sort();return t.length===r.length&&t.every((i,s)=>i===r[s]&&he(e[i],n[i]))}function Yo(e,n,t){if(!k(e.route)||!k(e.stroke)||!k(e.markers)||!Array.isArray(e.markers.mid)||!Array.isArray(e.labels)||!k(e.hit)||!k(e.endpoints)||!k(e.relationship)||!k(e.terminalProjection)||!Array.isArray(e.terminalProjection.diagnostics))return;let r=e,i=r.route.geometry,s=tn(i,r.route.closed),o=s.starts[0],a=s.ends.at(-1);for(let[m,p,g]of[["start",r.endpoints.start?.point,o],["end",r.endpoints.end?.point,a]])p&&g&&!G(p,g)&&l(t.diagnostics,"SCENE_FIDELITY",`${n}.endpoints.${m}.point`,"must equal the endpoint derived from connector geometry");let c=nn(i,r.route.closed);r.route.contours.length!==c.length&&l(t.diagnostics,"SCENE_FIDELITY",`${n}.route.contours`,"must match the geometry-derived contour count");let d=!en(i);for(let m=0;m<Math.min(r.route.contours.length,c.length);m++){let p=r.route.contours[m],g=c[m];if((!G(p.start,g.start)||!G(p.end,g.end)||p.closed!==g.closed)&&l(t.diagnostics,"SCENE_FIDELITY",`${n}.route.contours[${m}]`,"must match geometry-derived endpoint topology"),d)for(let b of["startTangent","endTangent"]){let x=p[b],v=g[b];(x===void 0!=(v===void 0)||x&&v&&!G(x,v,1e-9))&&l(t.diagnostics,"SCENE_FIDELITY",`${n}.route.contours[${m}].${b}`,"must match the tangent derived from linear route geometry")}}let u=r.route.contours[0]?.startTangent,f=r.route.contours.at(-1)?.endTangent;for(let[m,p,g]of[["startTangent",r.route.startTangent,u],["endTangent",r.route.endTangent,f]])(p===void 0!=(g===void 0)||p&&g&&!G(p,g,1e-9))&&l(t.diagnostics,"SCENE_FIDELITY",`${n}.route.${m}`,"must equal the corresponding contour tangent authority");try{let m=an({geometry:i,lineStyle:r.lineStyle,endpoints:r.endpoints,relationship:r.relationship,route:r.route,stroke:r.stroke,markers:r.markers,labels:r.labels,hit:r.hit,...r.transform?{transform:r.transform}:{},additionalDiagnostics:r.terminalProjection.diagnostics.slice(1)});he(r.terminalProjection,m)||l(t.diagnostics,"SCENE_FIDELITY",`${n}.terminalProjection`,"must equal the canonical projection derived from connector semantics")}catch(m){l(t.diagnostics,"SCENE_FIDELITY",`${n}.terminalProjection`,m instanceof Error?m.message:String(m))}}function Dr(e,n,t){if(e.kind==="document")return;let r;try{r=Mr(e)}catch(i){l(t,"SCENE_FIDELITY",n,i instanceof Error?i.message:String(i));return}if(R(e)!==R(r)&&l(t,"SCENE_FIDELITY",n,"must equal the canonical serialization generated from the external Scene fields"),(!he(e.identity,r.identity)||!he(e.accessibility,r.accessibility))&&l(t,"SCENE_FIDELITY",n,"typed identity and accessibility must equal the canonical generated projection"),e.kind==="group"&&r.kind==="group"&&((e.open!==r.open||e.close!==r.close||e.join!==r.join)&&l(t,"SCENE_FIDELITY",n,"external containers must use the canonical generated wrapper and join"),e.children.forEach((i,s)=>{i.indent!==2&&l(t,"SCENE_FIDELITY",`${n}.children[${s}].indent`,"external container children must use the canonical two-space indent"),Dr(i.node,`${n}.children[${s}].node`,t)})),e.kind==="connector"&&r.kind==="connector"){let i=["endpoints","route","stroke","hit","terminalProjection"];for(let s of i)he(e[s],r[s])||l(t,"SCENE_FIDELITY",`${n}.${s}`,"must equal semantics derived by the external Scene builder");he(e.markers,r.markers)||l(t,"SCENE_FIDELITY",`${n}.markers`,"must equal the canonical external start/mid/end marker projection")}}function Zo(e,n){e.parts.forEach((t,r)=>Dr(t,`scene.parts[${r}]`,n))}function Jo(e,n){let t=[],r=Math.max(0,e.length-1);if(r>ge){l(n,"SCENE_BOUNDS","scene.parts",`serialized SVG exceeds the aggregate ${ge}-byte limit`);return}for(let i=0;i<e.length;i++){let s=e[i];if(!k(s))return;let o;try{o=R(s)}catch{return}let a=Math.max(0,ge-r),c=de(o,a);if(c>a){l(n,"SCENE_BOUNDS","scene.parts",`serialized SVG exceeds the aggregate ${ge}-byte limit`);return}r+=c,t.push(o)}return t.join(`
|
|
35
|
+
`)}function Qo(e,n={}){let t=[];if(!k(e))return Object.freeze({valid:!1,diagnostics:Object.freeze([{code:"SCENE_DOCUMENT",path:"scene",message:"must be a Scene document object"}])});let r=typeof e.family=="string"?Xe(e.family):void 0,i=n.mode==="external"||n.mode!=="internal"&&r?.kind==="family";i&&K(e,["family","width","height","colors","transparent","parts"],"scene",t),q(e.family,"scene.family",t);let s=C(e.width,"scene.width",t,i?{positive:!0}:{nonNegative:!0}),o=C(e.height,"scene.height",t,i?{positive:!0}:{nonNegative:!0});if(e.transparent!==void 0&&typeof e.transparent!="boolean"&&l(t,"SCENE_DOCUMENT","scene.transparent","must be boolean"),!k(e.colors))l(t,"SCENE_DOCUMENT","scene.colors","must be a DiagramColors object");else{i&&K(e.colors,["bg","fg","line","accent","muted","surface","border","font","shadow","embedFontImport"],"scene.colors",t);for(let a of["bg","fg","line","accent","muted","surface","border"])(a==="bg"||a==="fg"||e.colors[a]!==void 0)&&Ce(e.colors[a])===void 0&&l(t,"SCENE_PAINT",`scene.colors.${a}`,"must be a safe non-fetching CSS paint");e.colors.font!==void 0&&An(e.colors.font)===void 0&&l(t,"SCENE_SECURITY","scene.colors.font","must be a safe non-fetching font family"),e.colors.shadow!==void 0&&typeof e.colors.shadow!="boolean"&&l(t,"SCENE_DOCUMENT","scene.colors.shadow","must be boolean"),e.colors.embedFontImport!==void 0&&typeof e.colors.embedFontImport!="boolean"&&l(t,"SCENE_DOCUMENT","scene.colors.embedFontImport","must be boolean")}if(!Array.isArray(e.parts))l(t,"SCENE_DOCUMENT","scene.parts","must be an array");else{let a={diagnostics:t,external:i,ids:new Map,domIds:new Map,markerIds:new Map,markerReferences:[],endpointReferences:[],companionLabelReferences:[],budget:{textBytes:0,serializationBytes:0,points:0,textExceeded:!1,serializationExceeded:!1,pointsExceeded:!1,pointCollections:new WeakSet},nodeCount:0};e.parts.length>I&&l(t,"SCENE_BOUNDS","scene.parts","contains too many top-level Scene nodes");for(let d=0;d<Math.min(e.parts.length,I);d++)zr(e.parts[d],`scene.parts[${d}]`,a,0);let c=i&&e.parts.length<=I?Jo(e.parts,t):void 0;if(i){let d=[];for(let h=0;h<Math.min(e.parts.length,I);h++){let B=e.parts[h];k(B)&&d.push({part:B,index:h})}let u=d.filter(h=>h.part.kind==="document"),f=u.filter(h=>h.part.element==="open"),m=u.filter(h=>h.part.element==="title"),p=u.filter(h=>h.part.element==="description"),g=u.filter(h=>h.part.element==="definitions"),b=u.filter(h=>h.part.element==="close");(f.length!==1||f[0]?.index!==0)&&l(t,"SCENE_DOCUMENT","scene.parts","external Scene documents require exactly one leading open mark"),(m.length!==1||m[0]?.index!==1)&&l(t,"SCENE_DOCUMENT","scene.parts","external Scene documents require exactly one title after the open mark"),p.length>1&&l(t,"SCENE_DOCUMENT","scene.parts","external Scene documents allow at most one description"),g.length>1&&l(t,"SCENE_DOCUMENT","scene.parts","external Scene documents allow at most one definitions mark"),(b.length!==1||b[0]?.index!==e.parts.length-1)&&l(t,"SCENE_DOCUMENT","scene.parts","external Scene documents require exactly one trailing close");let x=1+m.length+p.length+g.length;([...m,...p,...g].map(h=>h.index).some((h,B)=>h!==B+1)||u.some(h=>!["open","close"].includes(String(h.part.element))&&h.index>x))&&l(t,"SCENE_DOCUMENT","scene.parts","title, description, and typed definitions must be contiguous leading furniture");let y=m[0]?.part;if(y&&(y.id!=="external-scene-title"||y.domId!=="external-scene-title")&&l(t,"SCENE_DOCUMENT",`scene.parts[${m[0].index}]`,"external title must use the canonical generated identity"),y&&typeof y.text=="string"){let h=ue(`<title id="external-scene-title">${Y(y.text)}</title>`);R(y)!==h&&l(t,"SCENE_FIDELITY",`scene.parts[${m[0].index}]`,"external title must use the canonical generated serialization")}let E=p[0]?.part;if(E&&(E.id!=="external-scene-description"||E.domId!=="external-scene-description")&&l(t,"SCENE_DOCUMENT",`scene.parts[${p[0].index}]`,"external description must use the canonical generated identity"),E&&typeof E.text=="string"){let h=ue(`<desc id="${N("external-scene-description")}">${Y(E.text)}</desc>`);R(E)!==h&&l(t,"SCENE_FIDELITY",`scene.parts[${p[0].index}]`,"external description must use the canonical generated serialization")}let w=g[0]?.part;w&&(w.id!=="external-scene-definitions"||!Array.isArray(w.markerResources)||w.markerResources.length===0)&&l(t,"SCENE_DOCUMENT",`scene.parts[${g[0].index}]`,"external definitions must be the canonical non-empty typed marker resource mark");let j=b[0]?.part;j&&j.id!=="svg-close"&&l(t,"SCENE_DOCUMENT",`scene.parts[${b[0].index}]`,"external close must use the canonical generated identity");let F=f[0]?.part;if(F){F.id!=="external-scene-prelude"&&l(t,"SCENE_DOCUMENT","scene.parts[0].id","external open mark must use the canonical generated identity");try{let h=e.colors,B=["external-scene-title",...p.length?["external-scene-description"]:[]].join(" "),ie=ue([Vt(e.width,e.height,h,!!e.transparent,{attrs:{role:"img","aria-labelledby":B}}),Ut(h.font??"Inter",!1,h.shadow,!1)].join(`
|
|
36
|
+
`));R(F)!==ie&&l(t,"SCENE_SECURITY","scene.parts[0]","must be the canonical CSS-free external document serialization")}catch(h){l(t,"SCENE_SECURITY","scene.parts[0]",h instanceof Error?h.message:String(h))}}for(let h of a.markerReferences){let B=a.markerIds.get(h.id);B?B!==h.marker&&l(t,"SCENE_REFERENCE",h.path,`must reference the exact typed marker resource "${h.id}"`):l(t,"SCENE_REFERENCE",h.path,`references undeclared marker "${h.id}"`)}for(let h of a.endpointReferences)a.ids.has(h.id)||l(t,"SCENE_REFERENCE",h.path,`references unknown Scene id "${h.id}"`);if(s&&o&&t.length===0){let h=e.width,B=e.height,ie=(V,Le)=>{if(k(V)){if(["shape","connector","text"].includes(String(V.kind)))try{let z=Rr(V);z&&(z.x0<-1||z.y0<-1||z.x1>h+1||z.y1>B+1)&&l(t,"SCENE_BOUNDS",Le,`visual bounds [${z.x0}, ${z.y0}, ${z.x1}, ${z.y1}] escape the ${h}x${B} document`)}catch(z){l(t,"SCENE_BOUNDS",Le,z instanceof Error?z.message:String(z))}if(V.kind==="group"&&Array.isArray(V.children))for(let z=0;z<Math.min(V.children.length,I);z++){let Ae=V.children[z];k(Ae)&&ie(Ae.node,`${Le}.children[${z}].node`)}}};for(let V=0;V<Math.min(e.parts.length,I);V++)ie(e.parts[V],`scene.parts[${V}]`)}}for(let d of a.companionLabelReferences){let u=a.ids.get(d.id);u?u.kind!=="text"&&l(t,"SCENE_REFERENCE",d.path,`must reference a Text mark; "${d.id}" is a ${u.kind} mark`):l(t,"SCENE_REFERENCE",d.path,`references unknown companion Text mark "${d.id}"`)}if(t.length===0&&i&&Zo(e,t),t.length===0){let d=e;try{for(let u of _r(d))l(t,"SCENE_FIDELITY","scene",u)}catch(u){l(t,"SCENE_FIDELITY","scene",u instanceof Error?u.message:String(u))}try{let u=i?c:d.parts.map(R).join(`
|
|
37
|
+
`);u!==void 0&&pn(u,i?"strict":"default")}catch(u){l(t,"SCENE_SECURITY","scene",u instanceof Error?u.message:String(u))}}}return Object.freeze({valid:t.length===0,diagnostics:Object.freeze(t.map(a=>Object.freeze(a)))})}function jr(e,n={}){let t=Qo(e,n);if(!t.valid)throw new dt(t.diagnostics)}var ft=["document","text","shape","container","connector","marker","data-mark"],Ac=Object.freeze(ft.map(e=>Object.freeze({primitive:e,operation:e==="document"?"serialize":"render"})));var Br=["measure","layout","bounds","hit-test","render","accessibility","terminal-project","serialize"],Lr=["geometry","paint","stroke","transform","identity","relation","labels","markers","resources","interaction","topology","subpaths","closedness","bend-radius","endpoints","direction","hit-geometry","stroke-opacity","stroke-cap","stroke-join","stroke-miter","dash-array","dash-offset","dash-restart","path-length","paint-order","non-scaling-stroke","marker-orientation","marker-overflow"],Fr=Object.freeze([{primitive:"document",feature:"identity",operation:"serialize"},{primitive:"document",feature:"resources",operation:"serialize"},{primitive:"document",feature:"interaction",operation:"accessibility"},{primitive:"text",feature:"geometry",operation:"render"},{primitive:"text",feature:"paint",operation:"render"},{primitive:"text",feature:"labels",operation:"accessibility"},{primitive:"text",feature:"identity",operation:"serialize"},{primitive:"shape",feature:"geometry",operation:"render"},{primitive:"shape",feature:"paint",operation:"render"},{primitive:"shape",feature:"identity",operation:"serialize"},{primitive:"container",feature:"geometry",operation:"render"},{primitive:"container",feature:"paint",operation:"render"},{primitive:"container",feature:"identity",operation:"serialize"},{primitive:"connector",feature:"geometry",operation:"render"},{primitive:"connector",feature:"stroke",operation:"render"},{primitive:"connector",feature:"transform",operation:"render"},{primitive:"connector",feature:"topology",operation:"render"},{primitive:"connector",feature:"subpaths",operation:"render"},{primitive:"connector",feature:"closedness",operation:"render"},{primitive:"connector",feature:"bend-radius",operation:"render"},{primitive:"connector",feature:"stroke-opacity",operation:"render"},{primitive:"connector",feature:"stroke-cap",operation:"render"},{primitive:"connector",feature:"stroke-join",operation:"render"},{primitive:"connector",feature:"stroke-miter",operation:"render"},{primitive:"connector",feature:"dash-array",operation:"render"},{primitive:"connector",feature:"dash-offset",operation:"render"},{primitive:"connector",feature:"dash-restart",operation:"render"},{primitive:"connector",feature:"path-length",operation:"render"},{primitive:"connector",feature:"paint-order",operation:"render"},{primitive:"connector",feature:"non-scaling-stroke",operation:"render"},{primitive:"connector",feature:"marker-orientation",operation:"render"},{primitive:"connector",feature:"marker-overflow",operation:"render"},{primitive:"connector",feature:"endpoints",operation:"serialize"},{primitive:"connector",feature:"direction",operation:"serialize"},{primitive:"connector",feature:"labels",operation:"render"},{primitive:"connector",feature:"labels",operation:"accessibility"},{primitive:"connector",feature:"markers",operation:"render"},{primitive:"connector",feature:"relation",operation:"accessibility"},{primitive:"connector",feature:"interaction",operation:"hit-test"},{primitive:"connector",feature:"hit-geometry",operation:"hit-test"},{primitive:"connector",feature:"identity",operation:"serialize"},{primitive:"marker",feature:"geometry",operation:"render"},{primitive:"marker",feature:"paint",operation:"render"},{primitive:"marker",feature:"identity",operation:"serialize"},{primitive:"data-mark",feature:"geometry",operation:"render"},{primitive:"data-mark",feature:"paint",operation:"render"},{primitive:"data-mark",feature:"identity",operation:"serialize"}]),es=["native","emulated","projected","lossy","unsupported"];function _c(e){switch(e.kind){case"text":return["text"];case"shape":return e.channels?.value===void 0?["shape"]:["shape","data-mark"];case"group":return["container"];case"connector":return["connector"];case"document":return e.markerResources?.length?["document","marker"]:["document"]}}function Ur(e,n,t="rough"){let r=n==="crisp"?"native":"emulated",i=n==="crisp"?"native":"projected",s="src/__tests__/backend-capability-conformance.test.ts",o=u=>n==="crisp"?{realization:"native"}:u==="geometry"||u==="topology"?{realization:"lossy",diagnostic:"The exact authored path remains as an invisible semantic carrier, but arbitrary curves are flattened to typed routed contours for the visible sketch."}:u==="closedness"?{realization:"lossy",diagnostic:"Sketch shafts are rebuilt from routed geometry and do not preserve explicit closed-subpath semantics."}:u==="bend-radius"?{realization:"lossy",diagnostic:"The authored rounded carrier remains exact, but the visible sketch follows its routed polyline and cannot preserve the continuous bend radius."}:u==="dash-restart"?{realization:"lossy",diagnostic:"A rough stroke may contain multiple generated stroke subpaths, so SVG dash restart boundaries can differ."}:u==="path-length"?{realization:"lossy",diagnostic:"One pathLength value spans generated stroke subpaths, so a sketch cannot retain one authored path calibration exactly."}:t==="hybrid"&&(u==="stroke-cap"||u==="stroke-join"||u==="stroke-miter"||u==="non-scaling-stroke")?{realization:"lossy",diagnostic:`Freehand ribbon geometry cannot preserve authored ${u} semantics; dashed Hybrid connectors fall back to the faithful rough projection.`}:u==="marker-orientation"||u==="marker-overflow"?{realization:"projected",diagnostic:"Marker geometry, orientation, and overflow remain in the typed marker projection instead of being sketched."}:{realization:"emulated"},a=["transform","topology","subpaths","closedness","bend-radius","stroke-opacity","stroke-cap","stroke-join","stroke-miter","dash-array","dash-offset","dash-restart","path-length","paint-order","non-scaling-stroke","marker-orientation","marker-overflow"],c=[{target:e,primitive:"document",feature:"identity",operation:"serialize",realization:"native",evidence:s},{target:e,primitive:"document",feature:"resources",operation:"serialize",realization:"native",evidence:s},{target:e,primitive:"document",feature:"interaction",operation:"accessibility",realization:"native",evidence:s},{target:e,primitive:"text",feature:"geometry",operation:"render",realization:"native",evidence:s},{target:e,primitive:"text",feature:"paint",operation:"render",realization:"native",evidence:s},{target:e,primitive:"text",feature:"labels",operation:"accessibility",realization:"native",evidence:s},{target:e,primitive:"text",feature:"identity",operation:"serialize",realization:"native",evidence:s},{target:e,primitive:"shape",feature:"geometry",operation:"render",realization:r,evidence:s},{target:e,primitive:"shape",feature:"paint",operation:"render",realization:r,evidence:s},{target:e,primitive:"shape",feature:"identity",operation:"serialize",realization:"native",evidence:s},{target:e,primitive:"container",feature:"geometry",operation:"render",realization:"native",evidence:s},{target:e,primitive:"container",feature:"paint",operation:"render",realization:"native",evidence:s},{target:e,primitive:"container",feature:"identity",operation:"serialize",realization:"native",evidence:s},{target:e,primitive:"connector",feature:"geometry",operation:"render",...o("geometry"),evidence:s},{target:e,primitive:"connector",feature:"stroke",operation:"render",realization:r,evidence:s},...a.map(u=>({target:e,primitive:"connector",feature:u,operation:"render",...o(u),evidence:s})),{target:e,primitive:"connector",feature:"relation",operation:"accessibility",realization:"native",evidence:s},{target:e,primitive:"connector",feature:"endpoints",operation:"serialize",realization:"native",evidence:s},{target:e,primitive:"connector",feature:"direction",operation:"serialize",realization:"native",evidence:s},{target:e,primitive:"connector",feature:"labels",operation:"render",realization:"native",evidence:s},{target:e,primitive:"connector",feature:"labels",operation:"accessibility",realization:"native",evidence:s},{target:e,primitive:"connector",feature:"markers",operation:"render",realization:i,evidence:s},{target:e,primitive:"connector",feature:"interaction",operation:"hit-test",realization:"native",evidence:s},{target:e,primitive:"connector",feature:"hit-geometry",operation:"hit-test",realization:"native",evidence:s},{target:e,primitive:"connector",feature:"identity",operation:"serialize",realization:"native",evidence:s},{target:e,primitive:"marker",feature:"geometry",operation:"render",realization:i,evidence:s},{target:e,primitive:"marker",feature:"paint",operation:"render",realization:i,evidence:s},{target:e,primitive:"marker",feature:"identity",operation:"serialize",realization:"native",evidence:s},{target:e,primitive:"data-mark",feature:"geometry",operation:"render",realization:r,evidence:s},{target:e,primitive:"data-mark",feature:"paint",operation:"render",realization:r,evidence:s},{target:e,primitive:"data-mark",feature:"identity",operation:"serialize",realization:"native",evidence:s}],d=mt(c);if(!d.valid)throw new Error(`Invalid graphical backend capability contract: ${d.diagnostics.join("; ")}`);return Object.freeze(c.map(u=>Object.freeze({...u})))}function pt(e){return[e.target,e.primitive,e.feature,e.operation].join("\0")}function mt(e){let n=[],t=new Set;for(let r=0;r<e.length;r++){let i=e[r],s=pt(i);t.has(s)&&n.push(`claim[${r}]: duplicate target/primitive/feature/operation`),t.add(s),i.target.trim()===""&&n.push(`claim[${r}]: target must not be empty`),i.primitive.trim()===""&&n.push(`claim[${r}]: primitive must not be empty`),i.feature.trim()===""&&n.push(`claim[${r}]: feature must not be empty`),i.operation.trim()===""&&n.push(`claim[${r}]: operation must not be empty`),es.includes(i.realization)||n.push(`claim[${r}]: invalid realization ${String(i.realization)}`),(i.realization==="lossy"||i.realization==="unsupported")&&!i.diagnostic?.trim()&&n.push(`claim[${r}]: ${i.realization} realization requires a diagnostic`)}return{valid:n.length===0,diagnostics:n}}var Ic=Object.freeze(["importance","value","category","status","progress","route","emphasis"]);function ns(e,n,t){let r=t.x-n.x,i=t.y-n.y,s=r*r+i*i;if(s===0)return Math.hypot(e.x-n.x,e.y-n.y);let o=Math.max(0,Math.min(1,((e.x-n.x)*r+(e.y-n.y)*i)/s));return Math.hypot(e.x-(n.x+o*r),e.y-(n.y+o*i))}function ts(e,n){if(!e.transform)return n;let t=-e.transform.angle*Math.PI/180,r=n.x-e.transform.cx,i=n.y-e.transform.cy;return{x:e.transform.cx+r*Math.cos(t)-i*Math.sin(t),y:e.transform.cy+r*Math.sin(t)+i*Math.cos(t)}}function rs(e,n){if(e.hit.pointerEvents==="none")return;let t=Fn(e.hit.geometry,e.hit.closed);if(t.length===0)return;let r=ts(e,n),i=Number.POSITIVE_INFINITY;for(let s of t)i=Math.min(i,ns(r,s.start,s.end));return i}function Q(e,n,t=0){let r=rs(e,n);return r!==void 0&&r<=e.hit.strokeWidth/2+Math.max(0,t)}var os=4,qr="backend-claim-matrix@3",Hc=Object.freeze(["draw-node-determinism","draw-node-semantics","document-determinism","single-svg-document","finite-serialization","output-security","document-semantics","container-semantics","shape-semantics","text-semantics","connector-semantics","marker-semantics","data-mark-semantics","capability-claims"]);function yt(e){if(typeof e!="object"||e===null||Object.isFrozen(e))return e;for(let n of Object.values(e))yt(n);return Object.freeze(e)}function ss(){let e={bg:"#ffffff",fg:"#172033",line:"#334155",accent:"#a33b20"},n={id:"backend-conformance-arrow",shape:"arrow",geometry:{kind:"path",d:"M 0 0 L 8 4 L 0 8 Z"},size:{width:8,height:8},viewBox:{x:0,y:0,width:8,height:8},ref:{x:8,y:4},units:"userSpaceOnUse",orient:"auto",overflow:"visible",paint:{fill:"#a33b20",stroke:"#334155",strokeWidth:"1"}},t=fr({id:"backend-conformance-prelude",width:120,height:80,colors:e,transparent:!0,font:"Inter",hasMonoFont:!1},'<svg xmlns="http://www.w3.org/2000/svg" width="120" height="80" viewBox="0 0 120 80" role="img" aria-labelledby="backend-conformance-title backend-conformance-description">'),r=Hn({id:"backend-conformance-title",element:"title",text:"Backend conformance fixture",domId:"backend-conformance-title"}),i=Hn({id:"backend-conformance-description",element:"description",text:"A representative Scene document",domId:"backend-conformance-description"}),s=lr({id:"backend-conformance-definitions",markerResources:[n]},`<defs>
|
|
38
|
+
${tt(n)}
|
|
39
|
+
</defs>`),o=Pe({id:"backend-conformance-node",role:"node",geometry:{kind:"rect",x:8,y:16,width:34,height:24,rx:3,ry:3},paint:{fill:"#f4efe6",stroke:"#334155",strokeWidth:"2"}},'<rect x="8" y="16" width="34" height="24" rx="3" ry="3" fill="#f4efe6" stroke="#334155" stroke-width="2" />'),a=ln({id:"backend-conformance-container",role:"group",open:'<g opacity="0.8" fill="#f4efe6">',close:"</g>",children:[{node:o,indent:2}]}),c=Pe({id:"backend-conformance-data-mark",role:"bar",geometry:{kind:"rect",x:92,y:48,width:16,height:20},paint:{fill:"#a33b20",stroke:"#334155",strokeWidth:"1"},channels:{value:.75,category:"fixture"}},'<rect x="92" y="48" width="16" height="20" fill="#a33b20" stroke="#334155" stroke-width="1" />'),d=ye({id:"backend-conformance-relation",role:"edge",geometry:{kind:"path",d:"M 42 28 L 62 14 Q 66 12 70 14 L 90 28",points:[{x:42,y:28},{x:66,y:12},{x:90,y:28}],markerMidpoints:[{x:62,y:14},{x:70,y:14}]},lineStyle:"dashed",paint:{fill:"none",stroke:"#334155",strokeWidth:"2",opacity:"0.65",strokeLinecap:"square",strokeLinejoin:"miter",strokeMiterlimit:"7",strokeDasharray:"6 3",strokeDashoffset:"2",vectorEffect:"non-scaling-stroke",paintOrder:"stroke fill"},endpoints:{from:"backend-conformance-node",to:"backend-conformance-data-mark"},relationship:{kind:"dependency",direction:"forward"},route:{ownership:"layout",bendRadius:4,labelAnchors:[{x:66,y:8}],contours:[{start:{x:42,y:28},end:{x:90,y:28},closed:!1,startTangent:{x:.8192319205190405,y:-.5734623443633283},endTangent:{x:.8192319205190405,y:.5734623443633283}}]},stroke:{opacity:.65,dash:{array:"6 3",offset:2},lineCap:"square",lineJoin:"miter",miterLimit:7,pathLength:77,paintOrder:"stroke fill",nonScaling:!0},markers:{start:n,mid:[n],end:n},labels:[{id:"backend-conformance-relation-label",text:"depends on",anchor:{x:66,y:8},clearance:2,halo:{color:"#ffffff",width:3},paint:{fill:"#172033"},fontSize:11,textAnchor:"middle",visual:{kind:"inline"}}]},'<path d="M 42 28 L 62 14 Q 66 12 70 14 L 90 28" fill="none" stroke="#334155" stroke-width="2" stroke-opacity="0.65" stroke-linecap="square" stroke-linejoin="miter" stroke-miterlimit="7" stroke-dasharray="6 3" stroke-dashoffset="2" pathLength="77" paint-order="stroke fill" vector-effect="non-scaling-stroke" marker-start="url(#backend-conformance-arrow)" marker-mid="url(#backend-conformance-arrow)" marker-end="url(#backend-conformance-arrow)" />'),u=ye({id:"backend-conformance-freehand-relation",role:"edge",geometry:{kind:"line",x1:42,y1:58,x2:90,y2:58},lineStyle:"solid",paint:{fill:"none",stroke:"#334155",strokeWidth:"2",strokeLinecap:"square",strokeLinejoin:"miter",strokeMiterlimit:"7",vectorEffect:"non-scaling-stroke"},endpoints:{from:"backend-conformance-node",to:"backend-conformance-data-mark"},relationship:{kind:"association",direction:"forward"},stroke:{lineCap:"square",lineJoin:"miter",miterLimit:7,nonScaling:!0},transform:{kind:"rotate",angle:90,cx:42,cy:58}},'<line x1="42" y1="58" x2="90" y2="58" fill="none" stroke="#334155" stroke-width="2" stroke-linecap="square" stroke-linejoin="miter" stroke-miterlimit="7" vector-effect="non-scaling-stroke" />'),f=ye({id:"backend-conformance-closed-relation",role:"edge",geometry:{kind:"path",d:"M 10 65 L 25 50 L 40 65 Z",points:[{x:10,y:65},{x:25,y:50},{x:40,y:65}]},lineStyle:"solid",paint:{fill:"none",stroke:"#334155",strokeWidth:"2"},route:{ownership:"authored",closed:!0}},'<path d="M 10 65 L 25 50 L 40 65 Z" fill="none" stroke="#334155" stroke-width="2" />'),m=ye({id:"backend-conformance-multi-relation",role:"edge",geometry:{kind:"path",d:"M 8 72 L 28 72 M 52 72 L 72 72",points:[{x:8,y:72},{x:28,y:72},{x:52,y:72},{x:72,y:72}],subpaths:[{points:[{x:8,y:72},{x:28,y:72}],closed:!1},{points:[{x:52,y:72},{x:72,y:72}],closed:!1}]},lineStyle:"solid",paint:{fill:"none",stroke:"#334155",strokeWidth:"2"},markers:{start:n,mid:[],end:n}},'<path d="M 8 72 L 28 72 M 52 72 L 72 72" fill="none" stroke="#334155" stroke-width="2" marker-start="url(#backend-conformance-arrow)" marker-end="url(#backend-conformance-arrow)" />'),p=dn({id:"backend-conformance-text",role:"member",text:"Fixture label",x:25,y:31,fontSize:12,anchor:"middle",paint:{fill:"#172033"}},'<text x="25" y="31" text-anchor="middle" font-size="12" fill="#172033">Fixture label</text>'),g={family:"backend-conformance",width:120,height:80,colors:e,transparent:!1,parts:[t,r,i,s,a,c,d,p,ur()]};return yt({doc:g,context:{seed:24301,style:{stroke:"freehand",fill:"wash",roughness:1,bowing:1,passes:2,strokeWidth:1.5,hachureAngle:-41,hachureGap:5,fillWeight:.8,washOpacity:.3,washEdge:.34,backdrop:"plain"}},probes:[{primitive:"document",node:t,requiredFragments:["<svg","backend-conformance-title"]},{primitive:"marker",node:s,requiredFragments:['id="backend-conformance-arrow"']},{primitive:"container",node:a,requiredFragments:['data-id="backend-conformance-container"','data-id="backend-conformance-node"']},{primitive:"shape",node:o,requiredFragments:['data-id="backend-conformance-node"','data-role="node"']},{primitive:"data-mark",node:c,requiredFragments:['data-id="backend-conformance-data-mark"','data-role="bar"']},{primitive:"connector",node:d,requiredFragments:['data-id="backend-conformance-relation"','data-role="edge"']},{primitive:"text",node:p,requiredFragments:['data-id="backend-conformance-text"',"Fixture label"]}],nodes:{root:t,marker:s,shape:o,container:a,dataMark:c,richConnector:d,freehandConnector:u,closedConnector:f,multiSubpathConnector:m,label:p}})}var T=ss();function Wr(e){return e.length===0?void 0:`missing ${e.join(", ")}`}function M(e,n,t){return e?{passed:e,observation:n}:{passed:e,observation:n,diagnostic:t}}function be(e,n){return e.split(n).length-1}function _(e,n){let t=e.drawNode(n,T.context);return ut(t,"backend conformance drawNode output"),t}function ke(e){let n=e.render(T.doc,T.context);return ut(n,"backend conformance render output"),n}function re(e,n){let t=e.match(/^\s*<(?:line|polyline|path)\b[^>]*>/)?.[0]??"";return/\sstroke-opacity="0"/.test(t)?e.split(`
|
|
40
|
+
`).slice(n.split(`
|
|
41
|
+
`).length).join(`
|
|
42
|
+
`):e}function xe(e,n,t,r=()=>!0){let i=_(e,t),s=re(i,R(t)),o=t.kind==="text"?i.includes(t.text)&&i.includes(`x="${t.x}"`)&&i.includes(`y="${t.y}"`):t.kind==="shape"&&t.geometry.kind==="rect"?i.includes(`x="${t.geometry.x}"`)&&i.includes(`y="${t.geometry.y}"`)&&i.includes(`width="${t.geometry.width}"`)&&i.includes(`height="${t.geometry.height}"`):t.kind==="connector"&&t.route.geometry.kind==="line"?i.includes(`x1="${t.route.geometry.x1}"`)&&i.includes(`y1="${t.route.geometry.y1}"`)&&i.includes(`x2="${t.route.geometry.x2}"`)&&i.includes(`y2="${t.route.geometry.y2}"`):t.kind==="connector"&&t.route.geometry.kind==="path"?i.includes(`d="${t.route.geometry.d}"`):i===R(t),a=n.realization==="native"?o:n.realization==="emulated"&&i!==R(t)&&s.includes("<path"),c=n.target==="backend:hybrid"&&t.kind==="shape"?i.includes("fill-opacity=")&&i.includes('stroke="none"'):!0;return M(a&&c&&r(i,s),n.realization==="native"?"authored serialization preserved":"typed mark re-realized by backend geometry",`backend output did not demonstrate ${n.realization} ${n.primitive}/${n.feature}`)}function fe(e,n,t,r){let i=n.realization==="lossy"?T.nodes.freehandConnector:T.nodes.richConnector,s=_(e,i),o=re(s,R(i));if(n.realization==="lossy")return M(s!==R(i)&&o.includes('stroke="none"')&&!o.includes(`${t}="`),`visible freehand ribbon intentionally omits ${t}; typed semantic projection remains non-visual`,`lossy ${t} projection was not observable on the visible freehand ribbon`);let a=n.realization==="native"?s.includes('data-id="backend-conformance-relation"'):s!==R(i);return M(a&&o.includes(`${t}="${r}"`),`${t}=${r} present on the ${n.realization==="native"?"authored":"visible generated"} stroke`,`${t}=${r} was not preserved by the ${n.realization} realization`)}function Gr(e){return[e.primitive,e.feature,e.operation].join("/")}var as=Object.freeze({"document/identity/serialize":e=>{let n=ke(e);return M(be(n,"<svg")===1&&n.includes('viewBox="0 0 120 80"')&&n.trimEnd().endsWith("</svg>"),"one bounded SVG document serialized","document envelope or bounds were not preserved")},"document/resources/serialize":e=>{let n=ke(e);return M(n.includes("<defs>")&&n.includes('id="backend-conformance-arrow"')&&fn(n).ok,"typed marker resource serialized without external references","document resources were missing or unsafe")},"document/interaction/accessibility":e=>{let n=ke(e);return M(n.includes('role="img"')&&n.includes('aria-labelledby="backend-conformance-title backend-conformance-description"')&&n.includes('<title id="backend-conformance-title">Backend conformance fixture</title>')&&n.includes('<desc id="backend-conformance-description">A representative Scene document</desc>'),"root role, title, and description preserved","document accessibility projection was incomplete")},"text/geometry/render":(e,n)=>xe(e,n,T.nodes.label,t=>t.includes('x="25"')&&t.includes('y="31"')&&t.includes('font-size="12"')),"text/paint/render":(e,n)=>xe(e,n,T.nodes.label,t=>t.includes('fill="#172033"')),"text/labels/accessibility":e=>{let n=_(e,T.nodes.label);return M(n.includes("Fixture label"),"readable label text preserved","text label was not serialized")},"text/identity/serialize":e=>{let n=_(e,T.nodes.label);return M(n.includes('data-id="backend-conformance-text"')&&n.includes('data-role="member"'),"text DOM identity preserved","text DOM identity was lost")},"shape/geometry/render":(e,n)=>xe(e,n,T.nodes.shape),"shape/paint/render":(e,n)=>xe(e,n,T.nodes.shape,t=>t.includes("#334155")&&t.includes("#f4efe6")),"shape/identity/serialize":e=>{let n=_(e,T.nodes.shape);return M(n.includes('data-id="backend-conformance-node"')&&n.includes('data-role="node"'),"shape DOM identity preserved on backend output","shape DOM identity was lost")},"container/geometry/render":(e,n)=>{let t=_(e,T.nodes.container);return M(n.realization==="native"&&t.startsWith("<g ")&&t.trimEnd().endsWith("</g>")&&t.includes('data-id="backend-conformance-node"'),"container boundary and child composition preserved natively while children may be re-realized","container boundary/child geometry was not preserved as a native wrapper")},"container/paint/render":(e,n)=>{let t=_(e,T.nodes.container);return M(n.realization==="native"&&t.includes('opacity="0.8"')&&t.includes('fill="#f4efe6"'),"container opacity and fill cascade preserved natively","container paint cascade was not preserved as a native wrapper")},"container/identity/serialize":e=>{let n=_(e,T.nodes.container);return M(n.includes('data-id="backend-conformance-container"')&&n.includes('data-role="group"'),"container DOM identity preserved","container DOM identity was lost")},"connector/geometry/render":(e,n)=>{let t=T.nodes.richConnector,r=_(e,t),i=re(r,R(t));return M(n.realization==="native"?t.route.geometry.kind==="path"&&r.includes(`d="${t.route.geometry.d}"`):n.realization==="lossy"&&r!==R(t)&&r.includes("Q 66 12 70 14")&&!i.includes("Q 66 12 70 14"),n.realization==="lossy"?"exact curve retained on the semantic carrier while visible geometry uses typed routed contours":"authored connector geometry retained","connector geometry realization did not match its claim")},"connector/stroke/render":(e,n)=>xe(e,n,T.nodes.freehandConnector,t=>t.includes("#334155")),"connector/transform/render":(e,n)=>{let t=T.nodes.freehandConnector,r=_(e,t),i=re(r,R(t)),s=r.includes('transform="rotate(90 42 58)"')&&Q(t,{x:42,y:82})&&!Q(t,{x:66,y:58});return M(s&&(n.realization==="native"?!/\sstroke-opacity="0"/.test(r.match(/^\s*<(?:line|polyline|path)\b[^>]*>/)?.[0]??""):n.realization==="emulated"&&i.startsWith('<g transform="rotate(90 42 58)">')),"the same typed rotation governs SVG projection and world-space hit testing","connector transform was not preserved by both rendering and interaction")},"connector/topology/render":(e,n)=>{let t=T.nodes.richConnector,r=_(e,t),i=re(r,R(t));return M(n.realization==="native"?t.route.geometry.kind==="path"&&r.includes(`d="${t.route.geometry.d}"`):n.realization==="lossy"&&r!==R(t)&&r.includes("Q 66 12 70 14")&&!i.includes("Q 66 12 70 14"),n.realization==="lossy"?"path topology remains on the carrier while the visible sketch is a flattened contour projection":"authored path topology retained","connector topology realization did not match its claim")},"connector/subpaths/render":(e,n)=>{let t=T.nodes.multiSubpathConnector,r=_(e,t),i=re(r,R(t)),s=Q(t,{x:18,y:72})&&Q(t,{x:62,y:72})&&!Q(t,{x:40,y:72})&&t.route.contours.length===2&&t.route.contours.every(a=>a.startTangent?.x===1&&a.endTangent?.x===1),o=n.realization==="native"?be(r.match(/^\s*<path\b[^>]*>/)?.[0]??"","M ")===2:n.realization==="emulated"&&r!==R(t)&&be(i,"<path")>=2;return M(s&&o,"two typed contours render and hit-test without a synthetic bridge","connector subpath boundaries were not preserved")},"connector/closedness/render":(e,n)=>{let t=T.nodes.closedConnector,r=_(e,t),i=re(r,R(t)),o=Q(t,{x:25,y:65})&&(n.realization==="native"?/\sZ(?:\s|"|")/.test(r.match(/^\s*<path\b[^>]*>/)?.[0]??""):n.realization==="lossy"&&r!==R(t)&&/\sZ(?:\s|"|")/.test(r.slice(0,r.indexOf(`
|
|
43
|
+
`)))&&!i.includes("M 10 65 L 25 50 L 40 65 Z"));return M(o,n.realization==="lossy"?"authored closed carrier retained while visible ribbon is rebuilt from the routed points":"authored closed subpath retained","output did not demonstrate the declared closedness realization")},"connector/bend-radius/render":(e,n)=>{let t=T.nodes.richConnector,r=_(e,t),i=re(r,R(t)),s=r.includes("Q 66 12 70 14")&&t.route.bendRadius===4;return M(s&&(n.realization==="native"?!/\sstroke-opacity="0"/.test(r.match(/^\s*<path\b[^>]*>/)?.[0]??""):n.realization==="lossy"&&r!==R(t)&&!i.includes("Q 66 12 70 14")),n.realization==="lossy"?"exact rounded carrier retained while the visible sketch uses the declared routed projection":"authored rounded connector geometry retained","bend-radius realization did not match the declared capability")},"connector/stroke-opacity/render":(e,n)=>fe(e,n,"stroke-opacity","0.65"),"connector/stroke-cap/render":(e,n)=>fe(e,n,"stroke-linecap","square"),"connector/stroke-join/render":(e,n)=>fe(e,n,"stroke-linejoin","miter"),"connector/stroke-miter/render":(e,n)=>fe(e,n,"stroke-miterlimit","7"),"connector/dash-array/render":(e,n)=>fe(e,n,"stroke-dasharray","6 3"),"connector/dash-offset/render":(e,n)=>fe(e,n,"stroke-dashoffset","2"),"connector/dash-restart/render":(e,n)=>{let t=T.nodes.richConnector,r=_(e,t),i=re(r,R(t)),s=be(i,'stroke-dasharray="6 3"'),o=be(i,"M");return M(n.realization==="native"?s===1:n.realization==="lossy"&&s>=1&&o>1,n.realization==="lossy"?`${o} generated stroke subpaths restart independently`:"one authored dashed path retains one dash phase","dash restart boundaries did not match the declared realization")},"connector/path-length/render":(e,n)=>{let t=T.nodes.richConnector,r=_(e,t),i=re(r,R(t)),s=be(i,'pathLength="77"'),o=be(i,"M");return M(n.realization==="native"?s===1:n.realization==="lossy"&&s>=1&&o>1,n.realization==="lossy"?`one pathLength value spans ${o} generated stroke subpaths`:"one authored pathLength calibration retained","pathLength behavior did not match the declared realization")},"connector/paint-order/render":(e,n)=>fe(e,n,"paint-order","stroke fill"),"connector/non-scaling-stroke/render":(e,n)=>fe(e,n,"vector-effect","non-scaling-stroke"),"connector/marker-orientation/render":(e,n)=>{let t=ke(e);if(n.realization==="unsupported")return M(t.includes('orient="auto"')&&!t.includes('marker-start="url(#backend-conformance-arrow)"')&&!t.includes('marker-mid="url(#backend-conformance-arrow)"')&&!t.includes('marker-end="url(#backend-conformance-arrow)"'),"marker resource remains serializable but the unsupported connector attachment is omitted","backend declared connector marker orientation unsupported but attached the marker");let r=t.includes('orient="auto"')&&t.includes('marker-start="url(#backend-conformance-arrow)"')&&t.includes('marker-mid="url(#backend-conformance-arrow)"')&&t.includes('marker-end="url(#backend-conformance-arrow)"'),i=n.realization!=="projected"||t.includes('markerUnits="userSpaceOnUse"');return M((n.realization==="native"||n.realization==="projected")&&r&&i,n.realization==="projected"?"typed marker kept in the marker projection with projected units/orientation":"native marker orientation retained","marker orientation/carrier projection did not match the declaration")},"connector/marker-overflow/render":(e,n)=>{let t=ke(e),r=t.includes('marker-start="url(#backend-conformance-arrow)"')&&t.includes('marker-end="url(#backend-conformance-arrow)"');return n.realization==="unsupported"?M(t.includes('overflow="visible"')&&!r&&!t.includes('marker-mid="url(#backend-conformance-arrow)"'),"marker resource remains serializable but its unsupported connector attachment is omitted","backend declared connector marker overflow unsupported but attached the marker"):M((n.realization==="native"||n.realization==="projected")&&t.includes('overflow="visible"')&&r,n.realization==="projected"?"visible overflow remains in the typed marker resource projection":"native marker overflow retained","marker overflow or its connector attachment was not preserved")},"connector/endpoints/serialize":e=>{let n=_(e,T.nodes.richConnector);return M(n.includes('data-from="backend-conformance-node"')&&n.includes('data-to="backend-conformance-data-mark"'),"typed endpoint identities serialized on the semantic carrier","connector endpoint identities were not serialized")},"connector/direction/serialize":e=>{let n=_(e,T.nodes.richConnector);return M(n.includes('data-relationship="dependency"')&&n.includes('data-direction="forward"'),"typed relationship kind and direction serialized on the semantic carrier","connector relationship direction was not serialized")},"connector/labels/accessibility":e=>{let n=_(e,T.nodes.richConnector);return M(n.includes('aria-label="backend-conformance-node to backend-conformance-data-mark: depends on"'),"typed connector label participates in the accessible relation name","connector label was absent from accessibility output")},"connector/labels/render":(e,n)=>{let t=_(e,T.nodes.richConnector);return M(n.realization==="native"&&t.includes('data-id="backend-conformance-relation-label"')&&t.includes('data-connector-label-for="backend-conformance-relation"')&&t.includes('x="66" y="6"')&&t.includes('font-size="11"')&&t.includes('fill="#172033"')&&t.includes('stroke="#ffffff"')&&t.includes('stroke-width="3"')&&t.includes('paint-order="stroke fill"')&&t.includes(">depends on</text>"),"typed label anchor, clearance, paint, typography, and halo render on the connector carrier","connector label visual semantics were not preserved")},"connector/relation/accessibility":e=>{let n=_(e,T.nodes.richConnector);return M(n.includes('data-from="backend-conformance-node"')&&n.includes('data-to="backend-conformance-data-mark"')&&n.includes('role="graphics-symbol"')&&n.includes('aria-roledescription="relation"')&&n.includes('aria-label="backend-conformance-node to backend-conformance-data-mark: depends on"'),"typed relation and accessible label preserved on the carrier","connector relation accessibility semantics were lost")},"connector/markers/render":(e,n)=>{let t=_(e,T.nodes.richConnector);return n.realization==="unsupported"?M(!t.includes('marker-start="url(#backend-conformance-arrow)"')&&!t.includes('marker-mid="url(#backend-conformance-arrow)"')&&!t.includes('marker-end="url(#backend-conformance-arrow)"'),"backend omits the explicitly unsupported connector marker","backend declared connector markers unsupported but still serialized one"):M((n.realization==="native"||n.realization==="projected")&&t.includes('marker-start="url(#backend-conformance-arrow)"')&&t.includes('marker-mid="url(#backend-conformance-arrow)"')&&t.includes('marker-end="url(#backend-conformance-arrow)"'),n.realization==="projected"?"marker retained in the typed marker projection":"native connector marker retained","connector marker projection did not match the declaration")},"connector/interaction/hit-test":e=>{let n=T.nodes.freehandConnector,t=_(e,n);return M(t.includes('data-id="backend-conformance-freehand-relation"')&&Q(n,{x:42,y:82})&&!Q(n,{x:66,y:58}),"typed hit geometry remains aligned with the backend-preserved connector carrier","connector carrier or typed hit geometry was not preserved")},"connector/hit-geometry/hit-test":e=>{let n=T.nodes.multiSubpathConnector,t=_(e,n);return M(t.includes('data-id="backend-conformance-multi-relation"')&&Q(n,{x:18,y:72})&&!Q(n,{x:40,y:72}),"typed hit geometry preserves contour gaps independently of backend artwork","connector hit geometry did not preserve typed contour boundaries")},"connector/identity/serialize":e=>{let n=_(e,T.nodes.richConnector);return M(n.includes('data-id="backend-conformance-relation"')&&n.includes('data-role="edge"'),"connector DOM identity preserved on carrier","connector DOM identity was lost")},"marker/geometry/render":(e,n)=>{let t=_(e,T.nodes.marker);return M((n.realization==="native"||n.realization==="projected")&&t.includes("M 0 0 L 8 4 L 0 8 Z")&&t.includes('viewBox="0 0 8 8"'),n.realization==="projected"?"typed marker geometry reserialized in the marker resource projection":"native marker geometry retained","marker geometry was not present in backend output")},"marker/paint/render":(e,n)=>{let t=_(e,T.nodes.marker);return M((n.realization==="native"||n.realization==="projected")&&t.includes('fill="#a33b20"')&&t.includes('stroke="#334155"'),n.realization==="projected"?"typed marker paint retained in the marker resource projection":"native marker paint retained","marker paint was not present in backend output")},"marker/identity/serialize":e=>{let n=_(e,T.nodes.marker);return M(n.includes('id="backend-conformance-arrow"'),"marker resource identity retained","marker resource identity was lost")},"data-mark/geometry/render":(e,n)=>xe(e,n,T.nodes.dataMark),"data-mark/paint/render":(e,n)=>xe(e,n,T.nodes.dataMark,t=>t.includes("#a33b20")&&t.includes("#334155")),"data-mark/identity/serialize":e=>{let n=_(e,T.nodes.dataMark);return M(n.includes('data-id="backend-conformance-data-mark"')&&n.includes('data-role="bar"'),"quantitative mark DOM identity retained","quantitative mark DOM identity was lost")}});function cs(e){return ft.includes(e.primitive)&&Lr.includes(e.feature)&&Br.includes(e.operation)}function ds(e){return e.capabilities.map(n=>{let t=pt(n),r=as[Gr(n)],i={claimKey:t,target:n.target,primitive:n.primitive,feature:n.feature,operation:n.operation,realization:n.realization,...n.diagnostic?{limitation:n.diagnostic}:{}};if(!r)return cs(n)?{...i,status:"failed",diagnostic:"No executable witness is registered for this core claim."}:{...i,status:"unverified-extension",diagnostic:"Namespaced extension claim is outside the built-in witness vocabulary."};let s=`${qr}/${Gr(n)}`;try{let o=r(e,n);return{...i,witnessId:s,status:o.passed?"passed":"failed",observation:o.observation,...o.diagnostic?{diagnostic:o.diagnostic}:{}}}catch(o){return{...i,witnessId:s,status:"failed",diagnostic:`Witness threw ${o instanceof Error?o.message:String(o)}`}}})}function Hr(e,n=e.id){let t=[],r=(y,E,w)=>{t.push(Object.freeze({id:y,passed:E,...w?{diagnostic:w}:{}}))},i=[],s=[];for(let y of T.probes)try{let E=_(e,y.node),w=_(e,y.node);if(typeof E!="string"||typeof w!="string"){i.push(`${y.primitive} returned a non-string`),s.push(`${y.primitive} returned a non-string`);continue}E!==w&&i.push(`${y.primitive} changed between identical calls`);let j=y.requiredFragments.filter(F=>!E.includes(F));j.length>0&&s.push(`${y.primitive} ${Wr(j)}`)}catch(E){let w=`${y.primitive} threw ${E instanceof Error?E.message:String(E)}`;i.push(w),s.push(w)}r("draw-node-determinism",i.length===0,i.join("; ")||void 0),r("draw-node-semantics",s.length===0,s.join("; ")||void 0);let o="",a="",c;try{o=ke(e),a=ke(e),typeof o!="string"||typeof a!="string"?(c="render must return a string",o=typeof o=="string"?o:"",a=typeof a=="string"?a:""):o!==a&&(c="render changed between identical calls")}catch(y){c=`render threw ${y instanceof Error?y.message:String(y)}`}r("document-determinism",c===void 0,c);let d=et(o);r("single-svg-document",d,d?void 0:"render must return one well-formed namespaced SVG document");let u=o.match(/\b(?:NaN|Infinity|undefined)\b/)?.[0];r("finite-serialization",!u,u?`serialized ${u}`:void 0);let f=fn(o),m;try{pn(o,"default")}catch(y){m=y instanceof Error?y.message:String(y)}let p=f.ok&&m===void 0;r("output-security",p,p?void 0:[m,f.ok?void 0:`unsafe SVG constructs: ${f.refs.join(", ")}`].filter(Boolean).join("; "));let g=[["document-semantics",['aria-labelledby="backend-conformance-title backend-conformance-description"','<title id="backend-conformance-title">Backend conformance fixture</title>','<desc id="backend-conformance-description">A representative Scene document</desc>']],["container-semantics",['data-id="backend-conformance-container"','data-role="group"']],["shape-semantics",['data-id="backend-conformance-node"','data-role="node"']],["text-semantics",['data-id="backend-conformance-text"','data-role="member"',"Fixture label"]],["connector-semantics",['data-id="backend-conformance-relation"','data-role="edge"','data-from="backend-conformance-node"','data-to="backend-conformance-data-mark"','role="graphics-symbol"','aria-roledescription="relation"','aria-label="backend-conformance-node to backend-conformance-data-mark: depends on"']],["marker-semantics",['id="backend-conformance-arrow"']],["data-mark-semantics",['data-id="backend-conformance-data-mark"','data-role="bar"']]];for(let[y,E]of g){let w=E.filter(j=>!o.includes(j));r(y,w.length===0,Wr(w))}let b=ds(e),x=b.filter(y=>y.status==="failed");r("capability-claims",x.length===0,x.map(y=>`${y.primitive}/${y.feature}/${y.operation}: ${y.diagnostic??"failed"}`).join("; ")||void 0);let v={version:os,fixtureId:qr,backendId:n,contracts:{scene:2,outputSecurity:2},directOutputs:["svg"],passed:t.every(y=>y.passed),checks:t,claims:b};return yt(v)}var ls=64,us=256,fs=L.maxNodes*16,ps=L.maxNodes*16,ms=L.maxTextBytes*8,ys=Object.freeze({maxObjects:L.maxNodes*4,maxTextBytes:L.maxTextBytes,maxArrayEntries:L.maxNodes,maxAggregateArrayEntries:ps,maxDepth:L.maxDepth*4,maxPropertiesPerObject:ls,maxAggregateProperties:fs,maxPropertyKeyBytes:us,maxAggregatePropertyKeyBytes:ms}),gs=Object.freeze({...ys,maxObjects:L.maxNodes*8,maxTextBytes:L.maxTextBytes+L.maxAggregateSerializationBytes+L.maxFinalSvgBytes});function hs(e,n,t="input"){let r=new WeakSet,i=new WeakMap,s=0,o=0,a=0,c=0,d=0,u=(f,m,p)=>{if(typeof f=="string"){let b=Math.max(0,n.maxTextBytes-o),x=de(f,b);if(x>b)throw new Error(`External Scene text values exceed the aggregate ${n.maxTextBytes}-byte limit`);return o+=x,f}if(f===null||typeof f!="object"){if(typeof f=="function"||typeof f=="symbol"||typeof f=="bigint")throw new TypeError(`External Scene ${p} must be declarative data`);return f}if(m>n.maxDepth)throw new Error("External Scene input object graph is too deeply nested");if(++s>n.maxObjects)throw new Error("External Scene input object graph is too large");if(r.has(f))throw new Error("External Scene input must be acyclic");let g=i.get(f);if(g!==void 0)return g;r.add(f);try{if(Array.isArray(f)){if(Object.getPrototypeOf(f)!==Array.prototype)throw new TypeError(`External Scene ${p} must be a plain array`);let y=Reflect.getOwnPropertyDescriptor(f,"length");if(!y||!("value"in y)||typeof y.value!="number"||!Number.isSafeInteger(y.value)||y.value<0)throw new TypeError(`External Scene ${p}.length must be a non-negative integer data property`);let E=y.value;if(E>n.maxArrayEntries)throw new Error(`External Scene ${p} contains too many entries`);if(a+=E,a>n.maxAggregateArrayEntries)throw new Error(`External Scene input exceeds the aggregate ${n.maxAggregateArrayEntries}-array-entry limit`);let w=Reflect.ownKeys(f);if(w.length>E+1||!w.includes("length"))throw new TypeError(`External Scene ${p} must not define custom array properties or iterators`);let j=new Map;j.set("length",y);for(let h of w){if(h==="length")continue;let B=Reflect.getOwnPropertyDescriptor(f,h);if(!B)throw new TypeError(`External Scene ${p} has an unstable property descriptor`);j.set(h,B)}for(let h of w)if(h!=="length"&&(typeof h!="string"||!/^(?:0|[1-9]\d*)$/.test(h)||Number(h)>=E))throw new TypeError(`External Scene ${p} must not define custom array properties or iterators`);let F=new Array(E);i.set(f,F),qn(f,F);for(let h=0;h<E;h++){let B=j.get(String(h));if(!B)throw new TypeError(`External Scene ${p} must not be sparse`);if(!("value"in B)||!B.enumerable)throw new TypeError(`External Scene ${p}[${h}] must be an enumerable data property`);F[h]=u(B.value,m+1,`${p}[${h}]`)}return Object.freeze(F)}let b=Object.getPrototypeOf(f);if(b!==Object.prototype&&b!==null)throw new TypeError(`External Scene ${p} must be a plain object`);let x=Reflect.ownKeys(f);if(x.length>n.maxPropertiesPerObject)throw new Error(`External Scene ${p} contains too many properties`);if(c+=x.length,c>n.maxAggregateProperties)throw new Error(`External Scene input exceeds the aggregate ${n.maxAggregateProperties}-property limit`);for(let y of x){if(typeof y!="string")continue;let E=Math.max(0,n.maxAggregatePropertyKeyBytes-d),w=de(y,Math.min(n.maxPropertyKeyBytes,E));if(w>n.maxPropertyKeyBytes)throw new Error(`External Scene ${p} contains a property key longer than ${n.maxPropertyKeyBytes} bytes`);if(w>E)throw new Error(`External Scene property keys exceed the aggregate ${n.maxAggregatePropertyKeyBytes}-byte limit`);d+=w}let v=Object.create(null);i.set(f,v),qn(f,v);for(let y of x){if(typeof y!="string")throw new TypeError(`External Scene ${p} must not contain symbol keys`);let E=Reflect.getOwnPropertyDescriptor(f,y);if(!E||!("value"in E)||!E.enumerable)throw new TypeError(`External Scene ${p}.${y} must be an enumerable data property`);Object.defineProperty(v,y,{value:u(E.value,m+1,`${p}.${y}`),enumerable:!0,configurable:!1,writable:!1})}return Object.freeze(v)}finally{r.delete(f)}};return u(e,0,t)}function Kr(e){let n=hs(e,gs,"scene");return jr(n),n}function sd(e,n,t,r){return[e,...r.map(i=>Kn(i.serialized,i.indent)),n].join(t)}function bs(e,n){return!n.style||e.transparent?"":`<rect width="${e.width}" height="${e.height}" fill="var(--bg)" data-backdrop="page" />`}var ad={id:"default",capabilities:Ur("backend:default","crisp"),drawNode(e){return R(e)},render(e,n){let t=Kr(e),r=bs(t,n);return r?t.parts.map((i,s)=>s===0?`${R(i)}
|
|
44
|
+
${r}`:R(i)).join(`
|
|
45
|
+
`):t.parts.map(R).join(`
|
|
46
|
+
`)}},Yr="1.0.0",xs=Object.freeze({core:"^0.3.0",scene:"^2.0.0"}),ks=Object.freeze({owner:"agentic-mermaid",source:"built-in",reference:"src/scene/backend.ts"}),Ss=Object.freeze({owner:"host",source:"in-process"}),Zr=new Map,gt=new Map,Jr=new Map,Be=null;function Es(){if(Be!==null)throw new Error(`Backend registry mutation is forbidden while candidate "${Be}" is undergoing conformance`)}function Cs(e,n){return Ye({id:e,kind:"backend",version:n.version??Yr,compatibility:n.compatibility,provenance:n.provenance??Ss})}function $s(e,n){if(!Array.isArray(e.capabilities))throw new Error(`Backend "${e.id}" must declare capability claims`);let t=mt(e.capabilities);if(!t.valid)throw new Error(`Backend "${e.id}" has invalid capabilities: ${t.diagnostics.join("; ")}`);if(e.capabilities.length===0)throw new Error(`Backend "${e.id}" must declare capability claims`);if(e.capabilities.find(s=>s.target!==n))throw new Error(`Backend "${e.id}" capability target must be "${n}"`);let i=e.capabilities.find(s=>!s.evidence?.trim());if(i)throw new Error(`Backend "${e.id}" capability ${i.primitive}/${i.feature}/${i.operation} must declare evidence`);for(let{primitive:s,feature:o,operation:a}of Fr)if(!e.capabilities.some(c=>c.primitive===s&&c.feature===o&&c.operation===a))throw new Error(`Backend "${e.id}" must declare an evidenced essential ${s}/${o}/${a} capability`)}function ws(e){let n=["target","primitive","feature","operation","realization","evidence","diagnostic"];return Object.freeze(e.map(t=>{let i=(typeof t=="object"||typeof t=="function")&&t!==null?t:void 0,s=i?{...i}:{};if(i)for(let o of n)Object.prototype.hasOwnProperty.call(s,o)||(s[o]=Reflect.get(i,o));return Object.freeze(s)}))}function Ns(e){let n=e;return n.capabilities=ws(e.capabilities),Object.freeze(e)}function cd(e){Es(),Be="<built-in>";try{let n=e.id,t=Zt("backend",n);Be=t;let r=gt.get(n);if(r!==void 0)throw new Error(`Backend input name "${n}" already selects "${r}"`);$s(e,t);let i=Ns(e),s=Hr(i,t);if(!s.passed){let o=s.checks.filter(a=>!a.passed).map(a=>`${a.id}${a.diagnostic?`: ${a.diagnostic}`:""}`);throw new Error(`Built-in backend "${n}" failed registration SVG conformance: ${o.join("; ")}`)}Jt(Zr,{identity:Cs(t,{version:Yr,compatibility:xs,provenance:ks}),value:i}),Jr.set(t,s),gt.set(n,t)}finally{Be=null}}function Ts(){return Object.freeze(Array.from(Zr.values(),({identity:e,value:n})=>Object.freeze({identity:e,backend:n,inputName:Array.from(gt.entries()).find(([,t])=>t===e.id)?.[0]??e.id,conformance:Jr.get(e.id)})))}function Xr(e,n){return e.find(t=>t.identity.id===n||t.inputName===n)}function dd(e,n){let t=Ts(),r=Xr(t,e);if(!n)return r;let i=n.selectBackend(Object.freeze({requestedId:e,...r?{canonicalId:r.identity.id}:{},registered:t}));if(i!==null)return typeof i=="string"?Xr(t,i):r}export{Ue as a,Ve as b,Rs as c,$n as d,We as e,Ps as f,zs as g,yi as h,Ds as i,Mt as j,Ee as k,gi as l,Nn as m,H as n,se as o,le as p,Fs as q,It as r,Tn as s,bi as t,Us as u,Rn as v,qs as w,Hs as x,Ks as y,vn as z,Xs as A,An as B,Bt as C,Zs as D,Ce as E,oa as F,sa as G,Ut as H,Vt as I,$i as J,aa as K,ua as L,fa as M,Y as N,N as O,Ni as P,pa as Q,Gt as R,ha as S,Zt as T,Ye as U,Jt as V,wa as W,qi as X,Hi as Y,Na as Z,va as _,we as $,Ia as aa,Pa as ba,za as ca,Ie as da,or as ea,ja as fa,ce as ga,R as ha,Pe as ia,ye as ja,dn as ka,Qa as la,Hn as ma,lr as na,ur as oa,ln as pa,fr as qa,ec as ra,pn as sa,Fr as ta,_c as ua,Ur as va,tt as wa,$r as xa,wr as ya,ot as za,dt as Aa,ut as Ba,jr as Ca,gs as Da,hs as Ea,Kr as Fa,sd as Ga,bs as Ha,ad as Ia,cd as Ja,dd as Ka};
|
|
File without changes
|