showai-reader 0.9.0-reader.oiqfgzqt → 0.9.0-reader.x77hhf3w

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.
Files changed (29) hide show
  1. package/README.md +1 -1
  2. package/chunks/{ComparisonMatrix-YQJRBJHK.js → ComparisonMatrix-KTLR7NQV.js} +1 -1
  3. package/chunks/{ExperimentTracker-L4ERILSH.js → ExperimentTracker-JWWECSJR.js} +1 -1
  4. package/chunks/{ExternalDiagram-CESN6AFD.js → ExternalDiagram-VNWAO35E.js} +10 -10
  5. package/chunks/{Flowchart-7I3IRBXN.js → Flowchart-BOY3JGQF.js} +2 -2
  6. package/chunks/{G2Chart-N3VN7CJU.js → G2Chart-M63242NG.js} +2 -2
  7. package/chunks/{Mindmap-H2BMB2CH.js → Mindmap-WERZLYP6.js} +1 -1
  8. package/chunks/{RichTextEditor-XPGN2LUL.js → RichTextEditor-3PQXABDI.js} +50 -49
  9. package/chunks/{Scene3D-RIDB2UPZ.js → Scene3D-WNBIE7LS.js} +2 -2
  10. package/chunks/{StatusTree-DE6SBNV3.js → StatusTree-JVEVAYO5.js} +1 -1
  11. package/chunks/chunk-CMJMBEIC.js +21 -0
  12. package/chunks/{chunk-Z2EQGXZF.js.LEGAL.txt → chunk-CMJMBEIC.js.LEGAL.txt} +1 -0
  13. package/chunks/{chunk-ZZKYSVG3.js → chunk-GNOF6PGV.js} +1 -1
  14. package/chunks/{chunk-24VJITFC.js → chunk-HHKKCN2F.js} +1 -1
  15. package/chunks/{chunk-X2BFI7UA.js → chunk-J7ZODHSI.js} +1 -1
  16. package/chunks/{chunk-UYGYV3XW.js → chunk-NPT6AF6K.js} +2 -2
  17. package/chunks/{chunk-EJKNO2TI.js → chunk-QIGHBYK6.js} +1 -1
  18. package/chunks/{chunk-KS3LLFYE.js → chunk-UHMLBB4O.js} +3 -3
  19. package/index.js +1 -1
  20. package/manifest.json +4 -4
  21. package/package.json +1 -1
  22. package/reader-X77HHF3W.js +41 -0
  23. package/chunks/chunk-Z2EQGXZF.js +0 -21
  24. package/reader-OIQFGZQT.js +0 -41
  25. /package/chunks/{Flowchart-7I3IRBXN.js.LEGAL.txt → Flowchart-BOY3JGQF.js.LEGAL.txt} +0 -0
  26. /package/chunks/{G2Chart-N3VN7CJU.js.LEGAL.txt → G2Chart-M63242NG.js.LEGAL.txt} +0 -0
  27. /package/chunks/{Scene3D-RIDB2UPZ.js.LEGAL.txt → Scene3D-WNBIE7LS.js.LEGAL.txt} +0 -0
  28. /package/chunks/{chunk-UYGYV3XW.js.LEGAL.txt → chunk-NPT6AF6K.js.LEGAL.txt} +0 -0
  29. /package/{reader-OIQFGZQT.js.LEGAL.txt → reader-X77HHF3W.js.LEGAL.txt} +0 -0
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  The [ShowAI](https://showai.renaissancemind.ai) page reader, built from ShowAI 0.9.0 as code-split ES modules. Inline conversation pages written by `render-artifact --cdn` import it and load each component's code only when the page uses it.
4
4
 
5
5
  ```js
6
- const { mount } = await import("https://cdn.jsdelivr.net/npm/showai-reader@0.9.0-reader.oiqfgzqt/index.js");
6
+ const { mount } = await import("https://cdn.jsdelivr.net/npm/showai-reader@0.9.0-reader.x77hhf3w/index.js");
7
7
  mount(document.getElementById("page"), { artifact });
8
8
  ```
9
9
 
@@ -1 +1 @@
1
- import{a as v}from"./chunk-24VJITFC.js";import{c as x}from"./chunk-KF47DKNH.js";import{d as w}from"./chunk-X2BFI7UA.js";import{c as O,hb as N,kb as k}from"./chunk-Z2EQGXZF.js";import{c as g}from"./chunk-DUIGVKKG.js";var s=g(O(),1);var e=g(N(),1),c={yes:"\u2713",no:"\u2715",partial:"\u25D0",neutral:"\u2022",na:""},C={yes:"matrix.legend.yes",no:"matrix.legend.no",partial:"matrix.legend.partial",neutral:"matrix.legend.neutral",na:"matrix.legend.na"};function E({data:M}){let n=k(v),a=M,[i,u]=(0,s.useState)(null),[h,$]=(0,s.useState)(!1),R=(0,s.useMemo)(()=>new Map(a.cells.map(t=>[`${t.row}\0${t.column}`,t])),[a.cells]),b=(0,s.useMemo)(()=>new Set(x(a)),[a]),m=h?a.rows.filter(t=>b.has(t.id)):a.rows,S=Object.keys(c).filter(t=>a.cells.some(o=>o.tone===t)),p=a.cells.filter(t=>t.note),f=t=>[t.highlight?"is-highlight":"",i===t.id?"is-focus":""].filter(Boolean).join(" ")||void 0;return(0,e.jsxs)("section",{className:"sb-block an-block","aria-label":w(a.title,n("matrix.title")),children:[(0,e.jsxs)("div",{className:"an-head",children:[a.title&&(0,e.jsx)("h3",{className:"an-title",children:a.title}),a.description&&(0,e.jsx)("p",{className:"an-sub",children:a.description}),(0,e.jsxs)("div",{className:"an-tools",children:[(0,e.jsx)("button",{type:"button",className:"an-chip","aria-pressed":h,onClick:()=>$(t=>!t),children:n("matrix.diffOnly",{count:b.size,total:a.rows.length})}),i&&(0,e.jsx)("button",{type:"button",className:"an-chip",onClick:()=>u(null),children:n("matrix.clearFocus")})]})]}),(0,e.jsx)("div",{className:"an-matrix-scroll",children:(0,e.jsxs)("table",{className:`an-matrix${i?" has-focus":""}`,children:[(0,e.jsx)("thead",{children:(0,e.jsxs)("tr",{children:[(0,e.jsx)("th",{className:"an-rowhead",scope:"col",children:n("matrix.dimension")}),a.columns.map(t=>(0,e.jsxs)("th",{scope:"col",className:f(t),children:[(0,e.jsxs)("button",{type:"button",className:"an-col-button","aria-pressed":i===t.id,onClick:()=>u(i===t.id?null:t.id),children:[t.label,t.note&&(0,e.jsx)("span",{className:"an-col-note",children:t.note})]}),t.url&&(0,e.jsx)("a",{href:t.url,target:"_blank",rel:"noreferrer",className:"an-col-note",children:n("matrix.source")})]},t.id))]})}),(0,e.jsxs)("tbody",{children:[m.length===0&&(0,e.jsx)("tr",{children:(0,e.jsx)("td",{colSpan:a.columns.length+1,className:"an-empty",children:n("matrix.allSame")})}),m.map((t,o)=>{let T=t.group&&t.group!==m[o-1]?.group;return(0,e.jsxs)(s.Fragment,{children:[T&&(0,e.jsx)("tr",{className:"an-group-row",children:(0,e.jsx)("th",{colSpan:a.columns.length+1,scope:"rowgroup",children:t.group})}),(0,e.jsxs)("tr",{children:[(0,e.jsxs)("th",{className:"an-rowhead",scope:"row",children:[(0,e.jsx)("div",{className:"an-row-label",children:t.label}),t.hint&&(0,e.jsx)("div",{className:"an-row-hint",children:t.hint})]}),a.columns.map(d=>{let r=R.get(`${t.id}\0${d.id}`),l=r?.tone??"na",y=r?.note?p.indexOf(r)+1:0;return(0,e.jsxs)("td",{className:f(d),title:r?.note,children:[(0,e.jsxs)("span",{className:`an-cell an-tone-${l}`,children:[c[l]&&(0,e.jsx)("b",{"aria-hidden":"true",children:c[l]}),(0,e.jsx)("span",{children:r?.text??(l==="na"?"\u2014":a.legend?.[l]??n(C[l]))})]}),y>0&&(0,e.jsx)("sup",{className:"an-note-mark",children:y})]},d.id)})]})]},t.id)})]})]})}),(0,e.jsxs)("div",{className:"an-legend",children:[S.map(t=>(0,e.jsxs)("span",{className:`an-tone-${t}`,children:[c[t]?(0,e.jsx)("b",{children:c[t]}):"\u2014"," ",a.legend?.[t]??n(C[t])]},t)),(0,e.jsx)("span",{children:n("matrix.focusHint")})]}),p.length>0&&(0,e.jsx)("ol",{className:"an-static","aria-label":n("matrix.notes"),children:p.map(t=>(0,e.jsx)("li",{children:n("matrix.note",{column:a.columns.find(o=>o.id===t.column)?.label??"",row:a.rows.find(o=>o.id===t.row)?.label??"",note:t.note??""})},`${t.row}-${t.column}`))})]})}export{E as ComparisonMatrixBlock};
1
+ import{a as v}from"./chunk-HHKKCN2F.js";import{c as x}from"./chunk-KF47DKNH.js";import{d as w}from"./chunk-J7ZODHSI.js";import{c as O,ib as N,lb as k}from"./chunk-CMJMBEIC.js";import{c as g}from"./chunk-DUIGVKKG.js";var s=g(O(),1);var e=g(N(),1),c={yes:"\u2713",no:"\u2715",partial:"\u25D0",neutral:"\u2022",na:""},C={yes:"matrix.legend.yes",no:"matrix.legend.no",partial:"matrix.legend.partial",neutral:"matrix.legend.neutral",na:"matrix.legend.na"};function E({data:M}){let n=k(v),a=M,[i,u]=(0,s.useState)(null),[h,$]=(0,s.useState)(!1),R=(0,s.useMemo)(()=>new Map(a.cells.map(t=>[`${t.row}\0${t.column}`,t])),[a.cells]),b=(0,s.useMemo)(()=>new Set(x(a)),[a]),m=h?a.rows.filter(t=>b.has(t.id)):a.rows,S=Object.keys(c).filter(t=>a.cells.some(o=>o.tone===t)),p=a.cells.filter(t=>t.note),f=t=>[t.highlight?"is-highlight":"",i===t.id?"is-focus":""].filter(Boolean).join(" ")||void 0;return(0,e.jsxs)("section",{className:"sb-block an-block","aria-label":w(a.title,n("matrix.title")),children:[(0,e.jsxs)("div",{className:"an-head",children:[a.title&&(0,e.jsx)("h3",{className:"an-title",children:a.title}),a.description&&(0,e.jsx)("p",{className:"an-sub",children:a.description}),(0,e.jsxs)("div",{className:"an-tools",children:[(0,e.jsx)("button",{type:"button",className:"an-chip","aria-pressed":h,onClick:()=>$(t=>!t),children:n("matrix.diffOnly",{count:b.size,total:a.rows.length})}),i&&(0,e.jsx)("button",{type:"button",className:"an-chip",onClick:()=>u(null),children:n("matrix.clearFocus")})]})]}),(0,e.jsx)("div",{className:"an-matrix-scroll",children:(0,e.jsxs)("table",{className:`an-matrix${i?" has-focus":""}`,children:[(0,e.jsx)("thead",{children:(0,e.jsxs)("tr",{children:[(0,e.jsx)("th",{className:"an-rowhead",scope:"col",children:n("matrix.dimension")}),a.columns.map(t=>(0,e.jsxs)("th",{scope:"col",className:f(t),children:[(0,e.jsxs)("button",{type:"button",className:"an-col-button","aria-pressed":i===t.id,onClick:()=>u(i===t.id?null:t.id),children:[t.label,t.note&&(0,e.jsx)("span",{className:"an-col-note",children:t.note})]}),t.url&&(0,e.jsx)("a",{href:t.url,target:"_blank",rel:"noreferrer",className:"an-col-note",children:n("matrix.source")})]},t.id))]})}),(0,e.jsxs)("tbody",{children:[m.length===0&&(0,e.jsx)("tr",{children:(0,e.jsx)("td",{colSpan:a.columns.length+1,className:"an-empty",children:n("matrix.allSame")})}),m.map((t,o)=>{let T=t.group&&t.group!==m[o-1]?.group;return(0,e.jsxs)(s.Fragment,{children:[T&&(0,e.jsx)("tr",{className:"an-group-row",children:(0,e.jsx)("th",{colSpan:a.columns.length+1,scope:"rowgroup",children:t.group})}),(0,e.jsxs)("tr",{children:[(0,e.jsxs)("th",{className:"an-rowhead",scope:"row",children:[(0,e.jsx)("div",{className:"an-row-label",children:t.label}),t.hint&&(0,e.jsx)("div",{className:"an-row-hint",children:t.hint})]}),a.columns.map(d=>{let r=R.get(`${t.id}\0${d.id}`),l=r?.tone??"na",y=r?.note?p.indexOf(r)+1:0;return(0,e.jsxs)("td",{className:f(d),title:r?.note,children:[(0,e.jsxs)("span",{className:`an-cell an-tone-${l}`,children:[c[l]&&(0,e.jsx)("b",{"aria-hidden":"true",children:c[l]}),(0,e.jsx)("span",{children:r?.text??(l==="na"?"\u2014":a.legend?.[l]??n(C[l]))})]}),y>0&&(0,e.jsx)("sup",{className:"an-note-mark",children:y})]},d.id)})]})]},t.id)})]})]})}),(0,e.jsxs)("div",{className:"an-legend",children:[S.map(t=>(0,e.jsxs)("span",{className:`an-tone-${t}`,children:[c[t]?(0,e.jsx)("b",{children:c[t]}):"\u2014"," ",a.legend?.[t]??n(C[t])]},t)),(0,e.jsx)("span",{children:n("matrix.focusHint")})]}),p.length>0&&(0,e.jsx)("ol",{className:"an-static","aria-label":n("matrix.notes"),children:p.map(t=>(0,e.jsx)("li",{children:n("matrix.note",{column:a.columns.find(o=>o.id===t.column)?.label??"",row:a.rows.find(o=>o.id===t.row)?.label??"",note:t.note??""})},`${t.row}-${t.column}`))})]})}export{E as ComparisonMatrixBlock};
@@ -1 +1 @@
1
- import{a as Z}from"./chunk-24VJITFC.js";import{e as rt}from"./chunk-KF47DKNH.js";import{d as lt}from"./chunk-X2BFI7UA.js";import{c as ut,hb as at,kb as Q}from"./chunk-Z2EQGXZF.js";import{c as J,f as it}from"./chunk-DUIGVKKG.js";var $=J(ut(),1);var t=J(at(),1),O={kept:"tracker.status.kept",discarded:"tracker.status.discarded",failed:"tracker.status.failed",running:"tracker.status.running",stopped:"tracker.status.stopped"},dt=["all","kept","running","discarded","failed","stopped"],X=["#2f6b4f","#3b74b8","#b0473f","#a86b34","#7061b0","#8a918c"],f=i=>Date.parse(i),z=i=>String(i).padStart(2,"0"),j=i=>{let r=new Date(i);return`${z(r.getMonth()+1)}-${z(r.getDate())} ${z(r.getHours())}:${z(r.getMinutes())}`},M=i=>i.toLocaleString(it(),{maximumFractionDigits:Math.abs(i)<10?3:1});function ot(){let i=(0,$.useRef)(null),[r,s]=(0,$.useState)(900);return(0,$.useEffect)(()=>{let h=i.current;if(!h)return;let b=new ResizeObserver(([N])=>s(N.contentRect.width));return b.observe(h),()=>b.disconnect()},[]),[i,r]}function mt({model:i,frontier:r,selected:s,onSelect:h}){let b=Q(Z),[N,x]=ot(),[u,p]=(0,$.useState)(null),H=360,o={l:44,r:16,t:18,b:52},y=28,g=H-o.t-o.b-y,w=i.metric.direction==="higher",B=i.experiments.filter(n=>n.score!==null),E=i.experiments.map(n=>f(n.start)),T=Math.min(...E),S=i.experiments.map(n=>f(n.start)+(n.minutes??0)*6e4),D=Math.max(i.updatedAt?f(i.updatedAt):0,...S,T+36e5),a=[...B.map(n=>n.score),...i.metric.baseline===void 0?[]:[i.metric.baseline]],A=(a.length?Math.max(...a)-Math.min(...a):0)*.1||Math.abs(a[0]??0)*.05||1,L=a.length?Math.min(...a)-A:0,W=a.length?Math.max(...a)+A:1,R=n=>o.l+(n-T)/(D-T)*(x-o.l-o.r),v=n=>o.t+(w?1-(n-L)/(W-L):(n-L)/(W-L))*g,C=o.t+g+y/2+6,G=new Map(i.experiments.map(n=>[n.id,n])),k=new Map((i.groups??[]).map(n=>[n.id,n])),U=new Map((i.runs??[]).map((n,m)=>[n.id,n.color??X[m%X.length]])),F=r.map(n=>G.get(n)),e="";F.forEach((n,m)=>{e+=m===0?`M${R(f(n.start))},${v(n.score)}`:`H${R(f(n.start))}V${v(n.score)}`}),F.length&&(e+=`H${R(D)}`);let l=new Set,c=-1/0;for(let n of F){let m=R(f(n.start));m-c>120&&(l.add(n.id),c=m)}let K=[],tt=(W-L)/5||1,et=Math.pow(10,Math.floor(Math.log10(tt))),Y=[1,2,5,10].map(n=>n*et).find(n=>n>=tt)??10*et;for(let n=Math.ceil(L/Y)*Y;n<=W;n+=Y)K.push(+n.toFixed(6));let nt=[],st=new Date(T);st.setHours(0,0,0,0);for(let n=st.getTime()+864e5;n<D;n+=864e5)nt.push(n);let ct=i.metric.unit??"";return(0,t.jsxs)("div",{className:"an-plot",ref:N,children:[(0,t.jsxs)("svg",{width:x,height:H,role:"img","aria-label":b("tracker.overTime",{metric:i.metric.label}),onMouseLeave:()=>p(null),children:[K.map(n=>(0,t.jsxs)("g",{children:[(0,t.jsx)("line",{className:"an-grid-line",x1:o.l,x2:x-o.r,y1:v(n),y2:v(n)}),(0,t.jsx)("text",{x:o.l-8,y:v(n)+4,textAnchor:"end",children:M(n)})]},n)),nt.map(n=>(0,t.jsxs)("g",{children:[(0,t.jsx)("line",{x1:R(n),x2:R(n),y1:o.t,y2:o.t+g+y,stroke:"var(--an-line)"}),(0,t.jsx)("text",{x:R(n)+4,y:H-18,children:j(n).slice(0,5)})]},n)),(0,t.jsx)("rect",{className:"an-lane",x:o.l,y:o.t+g+6,width:Math.max(0,x-o.l-o.r),height:y,rx:6}),(0,t.jsx)("text",{x:o.l+8,y:C+4,children:b("tracker.noScore")}),i.metric.baseline!==void 0&&(0,t.jsxs)("g",{children:[(0,t.jsx)("line",{className:"an-baseline",x1:o.l,x2:x-o.r,y1:v(i.metric.baseline),y2:v(i.metric.baseline)}),(0,t.jsx)("text",{className:"an-baseline-label",x:x-o.r-4,y:v(i.metric.baseline)-5,textAnchor:"end",children:b("tracker.baseline",{value:i.metric.baseline})})]}),e&&(0,t.jsx)("path",{className:"an-frontier",d:e}),i.experiments.map(n=>{let m=R(f(n.start)),_={onMouseEnter:()=>p(n),onClick:()=>h(n.id),className:"an-point"};if(n.score===null)return n.status==="failed"?(0,t.jsxs)("g",{..._,children:[(0,t.jsx)("path",{d:`M${m-5},${C-5}L${m+5},${C+5}M${m+5},${C-5}L${m-5},${C+5}`,stroke:"var(--an-bad)",strokeWidth:2.2}),(0,t.jsx)("circle",{cx:m,cy:C,r:9,fill:"transparent"})]},n.id):(0,t.jsxs)("g",{..._,children:[(0,t.jsx)("circle",{className:n.status==="running"?"an-ring":void 0,cx:m,cy:C,r:6,fill:"none",stroke:"var(--an-info)",strokeWidth:2}),(0,t.jsx)("circle",{cx:m,cy:C,r:3,fill:"var(--an-info)"})]},n.id);let I=v(n.score),V=k.get(n.group??"")?.shape==="diamond",q=U.get(n.id)??(n.status==="kept"?"var(--an-good)":n.status==="stopped"?"var(--an-warn)":"var(--an-idle)");return(0,t.jsxs)("g",{..._,children:[s===n.id&&(0,t.jsx)("circle",{cx:m,cy:I,r:13,fill:"none",stroke:"var(--an-text)",strokeWidth:1.5,strokeDasharray:"3 3"}),V?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("rect",{x:m-7,y:I-7,width:14,height:14,rx:3,transform:`rotate(45 ${m} ${I})`,fill:"var(--an-paper)",stroke:q,strokeWidth:3}),n.status==="running"&&(0,t.jsx)("circle",{className:"an-ring",cx:m,cy:I,r:11,fill:"none",stroke:q,strokeWidth:1.5})]}):n.status==="kept"?(0,t.jsx)("circle",{className:"an-point-kept",cx:m,cy:I,r:5.5}):(0,t.jsx)("circle",{className:"an-point-other",cx:m,cy:I,r:4}),(l.has(n.id)||V)&&(0,t.jsx)("text",{className:`an-point-label${l.has(n.id)?" is-frontier":""}`,x:m+10,y:I-8,style:V?{fill:q}:void 0,children:V?`${n.id} \xB7 ${M(n.score)}`:n.name.length>8?`${n.name.slice(0,8)}\u2026`:n.name})]},n.id)}),(0,t.jsx)("text",{x:o.l,y:H-2,children:b("tracker.startTime")})]}),u&&(0,t.jsxs)("div",{className:"an-tip",style:{left:Math.min(R(f(u.start))+14,x-230),top:u.score===null?C-120:Math.max(0,v(u.score)-20)},children:[(0,t.jsxs)("b",{children:[u.id," \xB7 ",u.name]}),(0,t.jsxs)("span",{children:[j(f(u.start)),u.minutes!==void 0&&` \xB7 ${b("tracker.minutes",{count:u.minutes})}`,u.resources!==void 0&&` \xB7 ${u.resources} ${i.resource?.unit??""}`]}),b("tracker.metricValue",{metric:i.metric.label,value:u.score===null?"\u2014":`${M(u.score)}${ct}`})," ","\xB7 ",b(O[u.status]),u.note&&(0,t.jsx)("span",{children:u.note})]})]})}function pt({chart:i,runs:r,colors:s,hoverStep:h,onHover:b}){let[N,x]=ot(),u=140,p={l:40,r:10,t:8,b:20},H=r.filter(a=>a.series[i.key]?.length),o=H.flatMap(a=>a.series[i.key]),y=Math.max(1,...H.flatMap(a=>a.steps));if(!o.length)return null;let g=Math.min(...o),w=Math.max(...o),B=(w-g)*.08||1;g-=B,w+=B;let E=a=>p.l+a/y*(x-p.l-p.r),T=a=>p.t+(1-(a-g)/(w-g))*(u-p.t-p.b),S=a=>Math.abs(w)<5?a.toFixed(2):M(Math.round(a)),D=a=>{if(h===null)return;let d=a.steps.findIndex(A=>A>=h);return d<0?void 0:{step:a.steps[d],value:a.series[i.key][d]}};return(0,t.jsxs)("div",{className:"an-panel an-mini",ref:N,children:[(0,t.jsxs)("p",{className:"an-panel-title",children:[i.label,i.unit&&(0,t.jsxs)("span",{className:"an-sub",children:[" \xB7 ",i.unit]})]}),(0,t.jsxs)("svg",{width:x,height:u,role:"img","aria-label":i.label,onMouseMove:a=>{let d=a.currentTarget.getBoundingClientRect();b(Math.max(0,Math.min(y,(a.clientX-d.left-p.l)/(x-p.l-p.r)*y)))},onMouseLeave:()=>b(null),children:[[g+(w-g)*.1,(g+w)/2,w-(w-g)*.1].map(a=>(0,t.jsxs)("g",{children:[(0,t.jsx)("line",{className:"an-grid-line",x1:p.l,x2:x-p.r,y1:T(a),y2:T(a)}),(0,t.jsx)("text",{x:p.l-6,y:T(a)+3,textAnchor:"end",children:S(a)})]},a)),[0,y/2,y].map((a,d)=>(0,t.jsx)("text",{x:E(a),y:u-5,textAnchor:d===0?"start":d===2?"end":"middle",children:M(a)},a)),H.map(a=>(0,t.jsx)("path",{d:a.series[i.key].map((d,A)=>`${A?"L":"M"}${E(a.steps[A])},${T(d)}`).join(""),fill:"none",stroke:s.get(a.id),strokeWidth:2,strokeLinejoin:"round"},a.id)),h!==null&&(0,t.jsxs)("g",{children:[(0,t.jsx)("line",{x1:E(h),x2:E(h),y1:p.t,y2:u-p.b,stroke:"var(--an-text)",strokeOpacity:.35}),H.map(a=>{let d=D(a);return d?(0,t.jsx)("circle",{cx:E(d.step),cy:T(d.value),r:3.5,fill:s.get(a.id),stroke:"var(--an-paper)",strokeWidth:1.5},a.id):null})]})]}),(0,t.jsx)("div",{className:"an-mini-values",children:h!==null&&H.map(a=>{let d=D(a);return(0,t.jsxs)("span",{children:[(0,t.jsx)("b",{style:{color:s.get(a.id)},children:a.id})," ",d?S(d.value):"\u2014"]},a.id)})})]})}function P({label:i,value:r,unit:s,detail:h,wide:b,meter:N}){return(0,t.jsxs)("div",{className:`an-stat${b?" is-wide":""}`,children:[(0,t.jsx)("small",{children:i}),(0,t.jsxs)("div",{className:"an-stat-value",children:[r,s&&(0,t.jsx)("span",{className:"an-stat-unit",children:s})]}),h&&(0,t.jsx)("p",{children:h}),N!==void 0&&(0,t.jsx)("div",{className:"an-meter",children:(0,t.jsx)("i",{style:{width:`${Math.min(100,N*100)}%`}})})]})}function yt({data:i}){let r=Q(Z),s=i,[h,b]=(0,$.useState)("all"),[N,x]=(0,$.useState)(null),[u,p]=(0,$.useState)(new Set),[H,o]=(0,$.useState)(null),y=(0,$.useMemo)(()=>rt(s),[s]),g=s.runs??[],w=s.charts??[],B=new Map(g.map((e,l)=>[e.id,e.color??X[l%X.length]])),E=s.metric.direction==="higher",T=(e,l)=>E?e>l:e<l,S={all:s.experiments.length};for(let e of s.experiments)S[e.status]=(S[e.status]??0)+1;let D=s.experiments.filter(e=>h==="all"||e.status===h).sort((e,l)=>f(l.start)-f(e.start)),a=s.experiments.filter(e=>e.score!==null&&e.status!=="failed"),d=s.groups?.length?s.groups:[{id:"",label:r("tracker.best")}],A=d.map(e=>{let l=a.filter(c=>!s.groups?.length||c.group===e.id);return{group:e,best:l.reduce((c,K)=>!c||T(K.score,c.score)?K:c,null)}}),L=y.length?s.experiments.find(e=>e.id===y[y.length-1]):void 0,W=L&&s.metric.baseline!==void 0?(L.score-s.metric.baseline)*(E?1:-1):0,R=s.experiments.reduce((e,l)=>e+(l.minutes??0)/60*(l.resources??0),0),v=s.metric.unit??"",C=(0,$.useMemo)(()=>{let e=new Map;for(let l of s.experiments){if(!l.category)continue;let c=e.get(l.category)??{total:0,kept:0};c.total+=1,l.status==="kept"&&(c.kept+=1),e.set(l.category,c)}return[...e.entries()].sort((l,c)=>c[1].total-l[1].total)},[s.experiments]),G=Math.max(1,...C.map(([,e])=>e.total)),k=s.experiments.find(e=>e.id===N),U=g.filter(e=>!u.has(e.id)),F=e=>p(l=>{let c=new Set(l);return c.has(e)?c.delete(e):c.add(e),c});return(0,t.jsx)("section",{className:"sb-block an-block","aria-label":lt(s.title,r("tracker.title")),children:(0,t.jsxs)("div",{className:"an-tracker",children:[(0,t.jsxs)("div",{className:"an-head",children:[s.title&&(0,t.jsx)("h3",{className:"an-title",children:s.title}),s.subtitle&&(0,t.jsx)("p",{className:"an-sub",children:s.subtitle}),s.updatedAt&&(0,t.jsx)("p",{className:"an-sub an-tools",children:r("tracker.updatedAt",{time:j(f(s.updatedAt))})})]}),(0,t.jsxs)("div",{className:"an-tracker-grid",children:[(0,t.jsxs)("div",{className:"an-panel an-runs",children:[(0,t.jsxs)("div",{className:"an-runs-head",children:[(0,t.jsx)("p",{className:"an-panel-title",children:r("tracker.runs",{count:s.experiments.length})}),(0,t.jsx)("div",{className:"an-tools",style:{marginLeft:0},role:"group","aria-label":r("tracker.filterByStatus"),children:dt.filter(e=>e==="all"||S[e]).map(e=>(0,t.jsxs)("button",{type:"button",className:"an-chip","aria-pressed":h===e,onClick:()=>b(e),children:[r(e==="all"?"tracker.all":O[e])," ",S[e]??0]},e))})]}),(0,t.jsx)("div",{className:"an-runs-list",children:D.map(e=>{let l=g.find(c=>c.id===e.id);return(0,t.jsxs)("div",{role:"button",tabIndex:0,className:`an-row an-ex-${e.status}${N===e.id?" is-selected":""}`,onClick:()=>x(N===e.id?null:e.id),onKeyDown:c=>{(c.key==="Enter"||c.key===" ")&&(c.preventDefault(),x(N===e.id?null:e.id))},children:[l?(0,t.jsx)("input",{type:"checkbox","aria-label":r("tracker.showRun",{id:l.id}),checked:!u.has(l.id),onClick:c=>c.stopPropagation(),onChange:()=>F(l.id),style:{margin:0,accentColor:B.get(l.id)}}):(0,t.jsx)("span",{style:{width:8,height:8,borderRadius:4,background:"var(--tone)",justifySelf:"center"}}),(0,t.jsx)("b",{style:l?{color:B.get(l.id)}:void 0,children:e.id}),(0,t.jsxs)("span",{className:"an-row-name",children:[e.name,(0,t.jsxs)("small",{children:[j(f(e.start))," \xB7"," ",(0,t.jsx)("span",{className:"an-status",children:r(O[e.status])})]})]}),(0,t.jsx)("span",{className:"an-score",children:e.score===null?"\u2014":M(e.score)})]},e.id)})})]}),(0,t.jsxs)("div",{className:"an-main",children:[(0,t.jsxs)("div",{className:"an-panel",children:[(0,t.jsxs)("div",{className:"an-plot-legend",children:[(0,t.jsxs)("b",{children:[r("tracker.allExperiments",{metric:s.metric.label}),v?` (${v})`:""," \xB7"," ",r(E?"tracker.higherIsBetter":"tracker.lowerIsBetter")]}),y.length>0&&(0,t.jsx)("span",{children:r("tracker.frontier")}),(0,t.jsx)("span",{children:r("tracker.legendKept")}),(0,t.jsx)("span",{children:r("tracker.legendOther")}),s.groups?.some(e=>e.shape==="diamond")&&(0,t.jsxs)("span",{children:["\u25C7"," ",s.groups.filter(e=>e.shape==="diamond").map(e=>e.label).join(r("tracker.listSeparator"))]})]}),(0,t.jsx)(mt,{model:s,frontier:y,selected:N,onSelect:e=>x(N===e?null:e)})]}),w.length>0&&g.length>0&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"an-small-multiples",children:w.map(e=>(0,t.jsx)(pt,{chart:e,runs:U,colors:B,hoverStep:H,onHover:o},e.key))}),(0,t.jsxs)("div",{className:"an-legend",children:[g.map(e=>(0,t.jsxs)("span",{style:{opacity:u.has(e.id)?.35:1},children:[(0,t.jsx)("b",{style:{color:B.get(e.id)},children:"\u2501"})," ",e.id," \xB7"," ",e.name]},e.id)),(0,t.jsx)("span",{children:r("tracker.runsHint")})]})]})]}),(0,t.jsxs)("div",{className:"an-stats",children:[(0,t.jsxs)("div",{className:"an-stat-grid",children:[(0,t.jsx)(P,{label:r("tracker.total"),value:String(s.experiments.length),detail:d.length>1?d.map(e=>`${e.label} ${s.experiments.filter(l=>l.group===e.id).length}`).join(" \xB7 "):r("tracker.runningCount",{count:S.running??0})}),A.map(({group:e,best:l})=>l?(0,t.jsx)(P,{label:d.length>1?r("tracker.groupBest",{group:e.label}):r("tracker.currentBest"),value:M(l.score),unit:v,detail:`${l.id} \xB7 ${l.name}`},e.id):null),s.metric.baseline!==void 0&&L&&(0,t.jsx)(P,{label:r("tracker.gain"),value:`${W>=0?"+":"\u2212"}${M(Math.abs(W))}`,unit:v==="%"?"pt":v,detail:r("tracker.gainDetail",{best:M(L.score),baseline:s.metric.baseline})}),(0,t.jsx)(P,{label:r("tracker.keepRate"),value:String(Math.round((S.kept??0)/s.experiments.length*100)),unit:"%",detail:r("tracker.keepRateDetail",{kept:S.kept??0,running:S.running??0})}),s.resource&&(0,t.jsx)(P,{label:r("tracker.resourceHours",{unit:s.resource.unit}),value:M(Math.round(R)),detail:s.resource.budget?r("tracker.budget",{value:M(s.resource.budget)}):void 0,meter:s.resource.budget?R/s.resource.budget:void 0}),s.resource?.costPerHour!==void 0&&(0,t.jsx)(P,{wide:!0,label:r("tracker.cost"),value:`${s.resource.currency??"\xA5"}${M(Math.round(R*s.resource.costPerHour))}`,detail:r("tracker.costRate",{rate:`${s.resource.currency??"\xA5"}${s.resource.costPerHour}`,unit:s.resource.unit})})]}),C.length>0&&(0,t.jsxs)("div",{className:"an-panel",children:[(0,t.jsx)("p",{className:"an-panel-title",children:r("tracker.byCategory")}),C.map(([e,l])=>(0,t.jsxs)("div",{style:{fontSize:11.5,marginBottom:5},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between"},children:[(0,t.jsx)("span",{children:e}),(0,t.jsxs)("span",{className:"an-sub",children:[l.kept," / ",l.total]})]}),(0,t.jsxs)("div",{className:"an-meter",children:[(0,t.jsx)("i",{className:"is-total",style:{width:`${l.total/G*100}%`}}),(0,t.jsx)("i",{style:{width:`${l.kept/G*100}%`}})]})]},e))]}),k&&(0,t.jsxs)("div",{className:"an-detail-card","aria-live":"polite",children:[(0,t.jsxs)("b",{children:[k.id," \xB7 ",k.name]}),(0,t.jsx)("span",{children:[k.category,s.groups?.find(e=>e.id===k.group)?.label].filter(Boolean).join(" \xB7 ")}),(0,t.jsxs)("span",{children:[j(f(k.start)),k.minutes!==void 0&&` \xB7 ${r("tracker.minutes",{count:k.minutes})}`,k.resources!==void 0&&` \xB7 ${k.resources} ${s.resource?.unit??""}`]}),r("tracker.metricValue",{metric:s.metric.label,value:k.score===null?"\u2014":M(k.score)})," ","\xB7 ",r(O[k.status]),k.note&&(0,t.jsx)("span",{children:k.note})]})]})]}),(0,t.jsxs)("details",{className:"an-static",children:[(0,t.jsx)("summary",{children:r("tracker.readTable",{count:s.experiments.length})}),(0,t.jsxs)("table",{children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"ID"}),(0,t.jsx)("th",{children:r("tracker.column.name")}),(0,t.jsx)("th",{children:r("tracker.column.start")}),(0,t.jsx)("th",{children:r("tracker.column.status")}),(0,t.jsx)("th",{children:s.metric.label}),(0,t.jsx)("th",{children:r("tracker.column.note")})]})}),(0,t.jsx)("tbody",{children:[...s.experiments].sort((e,l)=>f(e.start)-f(l.start)).map(e=>(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{children:e.id}),(0,t.jsx)("td",{children:e.name}),(0,t.jsx)("td",{children:j(f(e.start))}),(0,t.jsx)("td",{children:r(O[e.status])}),(0,t.jsx)("td",{children:e.score===null?"\u2014":M(e.score)}),(0,t.jsx)("td",{children:e.note??""})]},e.id))})]})]})]})})}export{yt as ExperimentTrackerBlock};
1
+ import{a as Z}from"./chunk-HHKKCN2F.js";import{e as rt}from"./chunk-KF47DKNH.js";import{d as lt}from"./chunk-J7ZODHSI.js";import{c as ut,ib as at,lb as Q}from"./chunk-CMJMBEIC.js";import{c as J,f as it}from"./chunk-DUIGVKKG.js";var $=J(ut(),1);var t=J(at(),1),O={kept:"tracker.status.kept",discarded:"tracker.status.discarded",failed:"tracker.status.failed",running:"tracker.status.running",stopped:"tracker.status.stopped"},dt=["all","kept","running","discarded","failed","stopped"],X=["#2f6b4f","#3b74b8","#b0473f","#a86b34","#7061b0","#8a918c"],f=i=>Date.parse(i),z=i=>String(i).padStart(2,"0"),j=i=>{let r=new Date(i);return`${z(r.getMonth()+1)}-${z(r.getDate())} ${z(r.getHours())}:${z(r.getMinutes())}`},M=i=>i.toLocaleString(it(),{maximumFractionDigits:Math.abs(i)<10?3:1});function ot(){let i=(0,$.useRef)(null),[r,s]=(0,$.useState)(900);return(0,$.useEffect)(()=>{let h=i.current;if(!h)return;let b=new ResizeObserver(([N])=>s(N.contentRect.width));return b.observe(h),()=>b.disconnect()},[]),[i,r]}function mt({model:i,frontier:r,selected:s,onSelect:h}){let b=Q(Z),[N,x]=ot(),[u,p]=(0,$.useState)(null),H=360,o={l:44,r:16,t:18,b:52},y=28,g=H-o.t-o.b-y,w=i.metric.direction==="higher",B=i.experiments.filter(n=>n.score!==null),E=i.experiments.map(n=>f(n.start)),T=Math.min(...E),S=i.experiments.map(n=>f(n.start)+(n.minutes??0)*6e4),D=Math.max(i.updatedAt?f(i.updatedAt):0,...S,T+36e5),a=[...B.map(n=>n.score),...i.metric.baseline===void 0?[]:[i.metric.baseline]],A=(a.length?Math.max(...a)-Math.min(...a):0)*.1||Math.abs(a[0]??0)*.05||1,L=a.length?Math.min(...a)-A:0,W=a.length?Math.max(...a)+A:1,R=n=>o.l+(n-T)/(D-T)*(x-o.l-o.r),v=n=>o.t+(w?1-(n-L)/(W-L):(n-L)/(W-L))*g,C=o.t+g+y/2+6,G=new Map(i.experiments.map(n=>[n.id,n])),k=new Map((i.groups??[]).map(n=>[n.id,n])),U=new Map((i.runs??[]).map((n,m)=>[n.id,n.color??X[m%X.length]])),F=r.map(n=>G.get(n)),e="";F.forEach((n,m)=>{e+=m===0?`M${R(f(n.start))},${v(n.score)}`:`H${R(f(n.start))}V${v(n.score)}`}),F.length&&(e+=`H${R(D)}`);let l=new Set,c=-1/0;for(let n of F){let m=R(f(n.start));m-c>120&&(l.add(n.id),c=m)}let K=[],tt=(W-L)/5||1,et=Math.pow(10,Math.floor(Math.log10(tt))),Y=[1,2,5,10].map(n=>n*et).find(n=>n>=tt)??10*et;for(let n=Math.ceil(L/Y)*Y;n<=W;n+=Y)K.push(+n.toFixed(6));let nt=[],st=new Date(T);st.setHours(0,0,0,0);for(let n=st.getTime()+864e5;n<D;n+=864e5)nt.push(n);let ct=i.metric.unit??"";return(0,t.jsxs)("div",{className:"an-plot",ref:N,children:[(0,t.jsxs)("svg",{width:x,height:H,role:"img","aria-label":b("tracker.overTime",{metric:i.metric.label}),onMouseLeave:()=>p(null),children:[K.map(n=>(0,t.jsxs)("g",{children:[(0,t.jsx)("line",{className:"an-grid-line",x1:o.l,x2:x-o.r,y1:v(n),y2:v(n)}),(0,t.jsx)("text",{x:o.l-8,y:v(n)+4,textAnchor:"end",children:M(n)})]},n)),nt.map(n=>(0,t.jsxs)("g",{children:[(0,t.jsx)("line",{x1:R(n),x2:R(n),y1:o.t,y2:o.t+g+y,stroke:"var(--an-line)"}),(0,t.jsx)("text",{x:R(n)+4,y:H-18,children:j(n).slice(0,5)})]},n)),(0,t.jsx)("rect",{className:"an-lane",x:o.l,y:o.t+g+6,width:Math.max(0,x-o.l-o.r),height:y,rx:6}),(0,t.jsx)("text",{x:o.l+8,y:C+4,children:b("tracker.noScore")}),i.metric.baseline!==void 0&&(0,t.jsxs)("g",{children:[(0,t.jsx)("line",{className:"an-baseline",x1:o.l,x2:x-o.r,y1:v(i.metric.baseline),y2:v(i.metric.baseline)}),(0,t.jsx)("text",{className:"an-baseline-label",x:x-o.r-4,y:v(i.metric.baseline)-5,textAnchor:"end",children:b("tracker.baseline",{value:i.metric.baseline})})]}),e&&(0,t.jsx)("path",{className:"an-frontier",d:e}),i.experiments.map(n=>{let m=R(f(n.start)),_={onMouseEnter:()=>p(n),onClick:()=>h(n.id),className:"an-point"};if(n.score===null)return n.status==="failed"?(0,t.jsxs)("g",{..._,children:[(0,t.jsx)("path",{d:`M${m-5},${C-5}L${m+5},${C+5}M${m+5},${C-5}L${m-5},${C+5}`,stroke:"var(--an-bad)",strokeWidth:2.2}),(0,t.jsx)("circle",{cx:m,cy:C,r:9,fill:"transparent"})]},n.id):(0,t.jsxs)("g",{..._,children:[(0,t.jsx)("circle",{className:n.status==="running"?"an-ring":void 0,cx:m,cy:C,r:6,fill:"none",stroke:"var(--an-info)",strokeWidth:2}),(0,t.jsx)("circle",{cx:m,cy:C,r:3,fill:"var(--an-info)"})]},n.id);let I=v(n.score),V=k.get(n.group??"")?.shape==="diamond",q=U.get(n.id)??(n.status==="kept"?"var(--an-good)":n.status==="stopped"?"var(--an-warn)":"var(--an-idle)");return(0,t.jsxs)("g",{..._,children:[s===n.id&&(0,t.jsx)("circle",{cx:m,cy:I,r:13,fill:"none",stroke:"var(--an-text)",strokeWidth:1.5,strokeDasharray:"3 3"}),V?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("rect",{x:m-7,y:I-7,width:14,height:14,rx:3,transform:`rotate(45 ${m} ${I})`,fill:"var(--an-paper)",stroke:q,strokeWidth:3}),n.status==="running"&&(0,t.jsx)("circle",{className:"an-ring",cx:m,cy:I,r:11,fill:"none",stroke:q,strokeWidth:1.5})]}):n.status==="kept"?(0,t.jsx)("circle",{className:"an-point-kept",cx:m,cy:I,r:5.5}):(0,t.jsx)("circle",{className:"an-point-other",cx:m,cy:I,r:4}),(l.has(n.id)||V)&&(0,t.jsx)("text",{className:`an-point-label${l.has(n.id)?" is-frontier":""}`,x:m+10,y:I-8,style:V?{fill:q}:void 0,children:V?`${n.id} \xB7 ${M(n.score)}`:n.name.length>8?`${n.name.slice(0,8)}\u2026`:n.name})]},n.id)}),(0,t.jsx)("text",{x:o.l,y:H-2,children:b("tracker.startTime")})]}),u&&(0,t.jsxs)("div",{className:"an-tip",style:{left:Math.min(R(f(u.start))+14,x-230),top:u.score===null?C-120:Math.max(0,v(u.score)-20)},children:[(0,t.jsxs)("b",{children:[u.id," \xB7 ",u.name]}),(0,t.jsxs)("span",{children:[j(f(u.start)),u.minutes!==void 0&&` \xB7 ${b("tracker.minutes",{count:u.minutes})}`,u.resources!==void 0&&` \xB7 ${u.resources} ${i.resource?.unit??""}`]}),b("tracker.metricValue",{metric:i.metric.label,value:u.score===null?"\u2014":`${M(u.score)}${ct}`})," ","\xB7 ",b(O[u.status]),u.note&&(0,t.jsx)("span",{children:u.note})]})]})}function pt({chart:i,runs:r,colors:s,hoverStep:h,onHover:b}){let[N,x]=ot(),u=140,p={l:40,r:10,t:8,b:20},H=r.filter(a=>a.series[i.key]?.length),o=H.flatMap(a=>a.series[i.key]),y=Math.max(1,...H.flatMap(a=>a.steps));if(!o.length)return null;let g=Math.min(...o),w=Math.max(...o),B=(w-g)*.08||1;g-=B,w+=B;let E=a=>p.l+a/y*(x-p.l-p.r),T=a=>p.t+(1-(a-g)/(w-g))*(u-p.t-p.b),S=a=>Math.abs(w)<5?a.toFixed(2):M(Math.round(a)),D=a=>{if(h===null)return;let d=a.steps.findIndex(A=>A>=h);return d<0?void 0:{step:a.steps[d],value:a.series[i.key][d]}};return(0,t.jsxs)("div",{className:"an-panel an-mini",ref:N,children:[(0,t.jsxs)("p",{className:"an-panel-title",children:[i.label,i.unit&&(0,t.jsxs)("span",{className:"an-sub",children:[" \xB7 ",i.unit]})]}),(0,t.jsxs)("svg",{width:x,height:u,role:"img","aria-label":i.label,onMouseMove:a=>{let d=a.currentTarget.getBoundingClientRect();b(Math.max(0,Math.min(y,(a.clientX-d.left-p.l)/(x-p.l-p.r)*y)))},onMouseLeave:()=>b(null),children:[[g+(w-g)*.1,(g+w)/2,w-(w-g)*.1].map(a=>(0,t.jsxs)("g",{children:[(0,t.jsx)("line",{className:"an-grid-line",x1:p.l,x2:x-p.r,y1:T(a),y2:T(a)}),(0,t.jsx)("text",{x:p.l-6,y:T(a)+3,textAnchor:"end",children:S(a)})]},a)),[0,y/2,y].map((a,d)=>(0,t.jsx)("text",{x:E(a),y:u-5,textAnchor:d===0?"start":d===2?"end":"middle",children:M(a)},a)),H.map(a=>(0,t.jsx)("path",{d:a.series[i.key].map((d,A)=>`${A?"L":"M"}${E(a.steps[A])},${T(d)}`).join(""),fill:"none",stroke:s.get(a.id),strokeWidth:2,strokeLinejoin:"round"},a.id)),h!==null&&(0,t.jsxs)("g",{children:[(0,t.jsx)("line",{x1:E(h),x2:E(h),y1:p.t,y2:u-p.b,stroke:"var(--an-text)",strokeOpacity:.35}),H.map(a=>{let d=D(a);return d?(0,t.jsx)("circle",{cx:E(d.step),cy:T(d.value),r:3.5,fill:s.get(a.id),stroke:"var(--an-paper)",strokeWidth:1.5},a.id):null})]})]}),(0,t.jsx)("div",{className:"an-mini-values",children:h!==null&&H.map(a=>{let d=D(a);return(0,t.jsxs)("span",{children:[(0,t.jsx)("b",{style:{color:s.get(a.id)},children:a.id})," ",d?S(d.value):"\u2014"]},a.id)})})]})}function P({label:i,value:r,unit:s,detail:h,wide:b,meter:N}){return(0,t.jsxs)("div",{className:`an-stat${b?" is-wide":""}`,children:[(0,t.jsx)("small",{children:i}),(0,t.jsxs)("div",{className:"an-stat-value",children:[r,s&&(0,t.jsx)("span",{className:"an-stat-unit",children:s})]}),h&&(0,t.jsx)("p",{children:h}),N!==void 0&&(0,t.jsx)("div",{className:"an-meter",children:(0,t.jsx)("i",{style:{width:`${Math.min(100,N*100)}%`}})})]})}function yt({data:i}){let r=Q(Z),s=i,[h,b]=(0,$.useState)("all"),[N,x]=(0,$.useState)(null),[u,p]=(0,$.useState)(new Set),[H,o]=(0,$.useState)(null),y=(0,$.useMemo)(()=>rt(s),[s]),g=s.runs??[],w=s.charts??[],B=new Map(g.map((e,l)=>[e.id,e.color??X[l%X.length]])),E=s.metric.direction==="higher",T=(e,l)=>E?e>l:e<l,S={all:s.experiments.length};for(let e of s.experiments)S[e.status]=(S[e.status]??0)+1;let D=s.experiments.filter(e=>h==="all"||e.status===h).sort((e,l)=>f(l.start)-f(e.start)),a=s.experiments.filter(e=>e.score!==null&&e.status!=="failed"),d=s.groups?.length?s.groups:[{id:"",label:r("tracker.best")}],A=d.map(e=>{let l=a.filter(c=>!s.groups?.length||c.group===e.id);return{group:e,best:l.reduce((c,K)=>!c||T(K.score,c.score)?K:c,null)}}),L=y.length?s.experiments.find(e=>e.id===y[y.length-1]):void 0,W=L&&s.metric.baseline!==void 0?(L.score-s.metric.baseline)*(E?1:-1):0,R=s.experiments.reduce((e,l)=>e+(l.minutes??0)/60*(l.resources??0),0),v=s.metric.unit??"",C=(0,$.useMemo)(()=>{let e=new Map;for(let l of s.experiments){if(!l.category)continue;let c=e.get(l.category)??{total:0,kept:0};c.total+=1,l.status==="kept"&&(c.kept+=1),e.set(l.category,c)}return[...e.entries()].sort((l,c)=>c[1].total-l[1].total)},[s.experiments]),G=Math.max(1,...C.map(([,e])=>e.total)),k=s.experiments.find(e=>e.id===N),U=g.filter(e=>!u.has(e.id)),F=e=>p(l=>{let c=new Set(l);return c.has(e)?c.delete(e):c.add(e),c});return(0,t.jsx)("section",{className:"sb-block an-block","aria-label":lt(s.title,r("tracker.title")),children:(0,t.jsxs)("div",{className:"an-tracker",children:[(0,t.jsxs)("div",{className:"an-head",children:[s.title&&(0,t.jsx)("h3",{className:"an-title",children:s.title}),s.subtitle&&(0,t.jsx)("p",{className:"an-sub",children:s.subtitle}),s.updatedAt&&(0,t.jsx)("p",{className:"an-sub an-tools",children:r("tracker.updatedAt",{time:j(f(s.updatedAt))})})]}),(0,t.jsxs)("div",{className:"an-tracker-grid",children:[(0,t.jsxs)("div",{className:"an-panel an-runs",children:[(0,t.jsxs)("div",{className:"an-runs-head",children:[(0,t.jsx)("p",{className:"an-panel-title",children:r("tracker.runs",{count:s.experiments.length})}),(0,t.jsx)("div",{className:"an-tools",style:{marginLeft:0},role:"group","aria-label":r("tracker.filterByStatus"),children:dt.filter(e=>e==="all"||S[e]).map(e=>(0,t.jsxs)("button",{type:"button",className:"an-chip","aria-pressed":h===e,onClick:()=>b(e),children:[r(e==="all"?"tracker.all":O[e])," ",S[e]??0]},e))})]}),(0,t.jsx)("div",{className:"an-runs-list",children:D.map(e=>{let l=g.find(c=>c.id===e.id);return(0,t.jsxs)("div",{role:"button",tabIndex:0,className:`an-row an-ex-${e.status}${N===e.id?" is-selected":""}`,onClick:()=>x(N===e.id?null:e.id),onKeyDown:c=>{(c.key==="Enter"||c.key===" ")&&(c.preventDefault(),x(N===e.id?null:e.id))},children:[l?(0,t.jsx)("input",{type:"checkbox","aria-label":r("tracker.showRun",{id:l.id}),checked:!u.has(l.id),onClick:c=>c.stopPropagation(),onChange:()=>F(l.id),style:{margin:0,accentColor:B.get(l.id)}}):(0,t.jsx)("span",{style:{width:8,height:8,borderRadius:4,background:"var(--tone)",justifySelf:"center"}}),(0,t.jsx)("b",{style:l?{color:B.get(l.id)}:void 0,children:e.id}),(0,t.jsxs)("span",{className:"an-row-name",children:[e.name,(0,t.jsxs)("small",{children:[j(f(e.start))," \xB7"," ",(0,t.jsx)("span",{className:"an-status",children:r(O[e.status])})]})]}),(0,t.jsx)("span",{className:"an-score",children:e.score===null?"\u2014":M(e.score)})]},e.id)})})]}),(0,t.jsxs)("div",{className:"an-main",children:[(0,t.jsxs)("div",{className:"an-panel",children:[(0,t.jsxs)("div",{className:"an-plot-legend",children:[(0,t.jsxs)("b",{children:[r("tracker.allExperiments",{metric:s.metric.label}),v?` (${v})`:""," \xB7"," ",r(E?"tracker.higherIsBetter":"tracker.lowerIsBetter")]}),y.length>0&&(0,t.jsx)("span",{children:r("tracker.frontier")}),(0,t.jsx)("span",{children:r("tracker.legendKept")}),(0,t.jsx)("span",{children:r("tracker.legendOther")}),s.groups?.some(e=>e.shape==="diamond")&&(0,t.jsxs)("span",{children:["\u25C7"," ",s.groups.filter(e=>e.shape==="diamond").map(e=>e.label).join(r("tracker.listSeparator"))]})]}),(0,t.jsx)(mt,{model:s,frontier:y,selected:N,onSelect:e=>x(N===e?null:e)})]}),w.length>0&&g.length>0&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"an-small-multiples",children:w.map(e=>(0,t.jsx)(pt,{chart:e,runs:U,colors:B,hoverStep:H,onHover:o},e.key))}),(0,t.jsxs)("div",{className:"an-legend",children:[g.map(e=>(0,t.jsxs)("span",{style:{opacity:u.has(e.id)?.35:1},children:[(0,t.jsx)("b",{style:{color:B.get(e.id)},children:"\u2501"})," ",e.id," \xB7"," ",e.name]},e.id)),(0,t.jsx)("span",{children:r("tracker.runsHint")})]})]})]}),(0,t.jsxs)("div",{className:"an-stats",children:[(0,t.jsxs)("div",{className:"an-stat-grid",children:[(0,t.jsx)(P,{label:r("tracker.total"),value:String(s.experiments.length),detail:d.length>1?d.map(e=>`${e.label} ${s.experiments.filter(l=>l.group===e.id).length}`).join(" \xB7 "):r("tracker.runningCount",{count:S.running??0})}),A.map(({group:e,best:l})=>l?(0,t.jsx)(P,{label:d.length>1?r("tracker.groupBest",{group:e.label}):r("tracker.currentBest"),value:M(l.score),unit:v,detail:`${l.id} \xB7 ${l.name}`},e.id):null),s.metric.baseline!==void 0&&L&&(0,t.jsx)(P,{label:r("tracker.gain"),value:`${W>=0?"+":"\u2212"}${M(Math.abs(W))}`,unit:v==="%"?"pt":v,detail:r("tracker.gainDetail",{best:M(L.score),baseline:s.metric.baseline})}),(0,t.jsx)(P,{label:r("tracker.keepRate"),value:String(Math.round((S.kept??0)/s.experiments.length*100)),unit:"%",detail:r("tracker.keepRateDetail",{kept:S.kept??0,running:S.running??0})}),s.resource&&(0,t.jsx)(P,{label:r("tracker.resourceHours",{unit:s.resource.unit}),value:M(Math.round(R)),detail:s.resource.budget?r("tracker.budget",{value:M(s.resource.budget)}):void 0,meter:s.resource.budget?R/s.resource.budget:void 0}),s.resource?.costPerHour!==void 0&&(0,t.jsx)(P,{wide:!0,label:r("tracker.cost"),value:`${s.resource.currency??"\xA5"}${M(Math.round(R*s.resource.costPerHour))}`,detail:r("tracker.costRate",{rate:`${s.resource.currency??"\xA5"}${s.resource.costPerHour}`,unit:s.resource.unit})})]}),C.length>0&&(0,t.jsxs)("div",{className:"an-panel",children:[(0,t.jsx)("p",{className:"an-panel-title",children:r("tracker.byCategory")}),C.map(([e,l])=>(0,t.jsxs)("div",{style:{fontSize:11.5,marginBottom:5},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between"},children:[(0,t.jsx)("span",{children:e}),(0,t.jsxs)("span",{className:"an-sub",children:[l.kept," / ",l.total]})]}),(0,t.jsxs)("div",{className:"an-meter",children:[(0,t.jsx)("i",{className:"is-total",style:{width:`${l.total/G*100}%`}}),(0,t.jsx)("i",{style:{width:`${l.kept/G*100}%`}})]})]},e))]}),k&&(0,t.jsxs)("div",{className:"an-detail-card","aria-live":"polite",children:[(0,t.jsxs)("b",{children:[k.id," \xB7 ",k.name]}),(0,t.jsx)("span",{children:[k.category,s.groups?.find(e=>e.id===k.group)?.label].filter(Boolean).join(" \xB7 ")}),(0,t.jsxs)("span",{children:[j(f(k.start)),k.minutes!==void 0&&` \xB7 ${r("tracker.minutes",{count:k.minutes})}`,k.resources!==void 0&&` \xB7 ${k.resources} ${s.resource?.unit??""}`]}),r("tracker.metricValue",{metric:s.metric.label,value:k.score===null?"\u2014":M(k.score)})," ","\xB7 ",r(O[k.status]),k.note&&(0,t.jsx)("span",{children:k.note})]})]})]}),(0,t.jsxs)("details",{className:"an-static",children:[(0,t.jsx)("summary",{children:r("tracker.readTable",{count:s.experiments.length})}),(0,t.jsxs)("table",{children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{children:[(0,t.jsx)("th",{children:"ID"}),(0,t.jsx)("th",{children:r("tracker.column.name")}),(0,t.jsx)("th",{children:r("tracker.column.start")}),(0,t.jsx)("th",{children:r("tracker.column.status")}),(0,t.jsx)("th",{children:s.metric.label}),(0,t.jsx)("th",{children:r("tracker.column.note")})]})}),(0,t.jsx)("tbody",{children:[...s.experiments].sort((e,l)=>f(e.start)-f(l.start)).map(e=>(0,t.jsxs)("tr",{children:[(0,t.jsx)("td",{children:e.id}),(0,t.jsx)("td",{children:e.name}),(0,t.jsx)("td",{children:j(f(e.start))}),(0,t.jsx)("td",{children:r(O[e.status])}),(0,t.jsx)("td",{children:e.score===null?"\u2014":M(e.score)}),(0,t.jsx)("td",{children:e.note??""})]},e.id))})]})]})]})})}export{yt as ExperimentTrackerBlock};
@@ -1,4 +1,4 @@
1
- import{b as z}from"./chunk-QBNRB4AJ.js";import{b as g,j as V}from"./chunk-7GHGKKPY.js";import{d as he,e as fe}from"./chunk-EJKNO2TI.js";import"./chunk-WDYURK6F.js";import{c as me,e as pe,g as S}from"./chunk-X2BFI7UA.js";import{J as oe,a as re,c as $e,eb as ie,hb as se,kb as ce}from"./chunk-Z2EQGXZF.js";import{c as q,d as le,i as de}from"./chunk-DUIGVKKG.js";var p=q($e(),1);var ue={html:`<!DOCTYPE html>
1
+ import{b as z}from"./chunk-QBNRB4AJ.js";import{b as g,j as V}from"./chunk-7GHGKKPY.js";import{d as he,e as fe}from"./chunk-QIGHBYK6.js";import"./chunk-WDYURK6F.js";import{c as me,e as pe,g as S}from"./chunk-J7ZODHSI.js";import{J as oe,a as re,c as $e,fb as ie,ib as se,lb as ce}from"./chunk-CMJMBEIC.js";import{c as q,d as le,i as de}from"./chunk-DUIGVKKG.js";var p=q($e(),1);var ue={html:`<!DOCTYPE html>
2
2
  <html lang="en" data-theme="dark" data-preset="[VISUAL PRESET]">
3
3
  <head>
4
4
  <meta charset="UTF-8">
@@ -27580,7 +27580,7 @@ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
27580
27580
  DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
27581
27581
  FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
27582
27582
  OTHER DEALINGS IN THE FONT SOFTWARE.
27583
- `}};var we=["en","zh-CN"];var it={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};function v(e){return String(e??"").replace(/[&<>"']/g,t=>it[t])}var ve={"page.title":["{title} Diagram","{title}"],"diagram.description.architecture":["An architecture diagram generated by Archify.","\u7531 Archify \u751F\u6210\u7684\u67B6\u6784\u56FE\u3002"],"diagram.description.workflow":["A workflow diagram generated by Archify.","\u7531 Archify \u751F\u6210\u7684\u5DE5\u4F5C\u6D41\u56FE\u3002"],"diagram.description.sequence":["A sequence diagram generated by Archify.","\u7531 Archify \u751F\u6210\u7684\u65F6\u5E8F\u56FE\u3002"],"diagram.description.dataflow":["A data-flow diagram generated by Archify.","\u7531 Archify \u751F\u6210\u7684\u6570\u636E\u6D41\u56FE\u3002"],"diagram.description.lifecycle":["A lifecycle diagram generated by Archify.","\u7531 Archify \u751F\u6210\u7684\u751F\u547D\u5468\u671F\u56FE\u3002"],"node.focus":["Focus {label}","\u805A\u7126{label}"],"node.focus.detail":["Focus {label}, {detail}","\u805A\u7126{label}\uFF0C{detail}"],"node.context.architecture":["Architecture component","\u67B6\u6784\u7EC4\u4EF6"],"node.context.workflow":["Workflow node","\u5DE5\u4F5C\u6D41\u8282\u70B9"],"node.context.sequence":["Sequence participant","\u65F6\u5E8F\u53C2\u4E0E\u8005"],"node.context.dataflow":["Data-flow node","\u6570\u636E\u6D41\u8282\u70B9"],"node.context.lifecycle":["Lifecycle state","\u751F\u547D\u5468\u671F\u72B6\u6001"],"legend.title":["Legend","\u56FE\u4F8B"],"legend.architecture.frontend":["Frontend","\u524D\u7AEF"],"legend.architecture.backend":["Backend","\u540E\u7AEF"],"legend.architecture.database":["Database","\u6570\u636E\u5E93"],"legend.architecture.cloud":["Cloud","\u4E91\u670D\u52A1"],"legend.architecture.security":["Security","\u5B89\u5168"],"legend.architecture.messagebus":["Message bus","\u6D88\u606F\u603B\u7EBF"],"legend.architecture.external":["External","\u5916\u90E8\u7CFB\u7EDF"],"legend.workflow.frontend":["User UI","\u7528\u6237\u754C\u9762"],"legend.workflow.backend":["Agent logic","Agent \u903B\u8F91"],"legend.workflow.security":["Policy","\u7B56\u7565"],"legend.workflow.messagebus":["Tool action","\u5DE5\u5177\u64CD\u4F5C"],"legend.workflow.database":["Context / trace","\u4E0A\u4E0B\u6587 / \u8FFD\u8E2A"],"legend.workflow.cloud":["Cloud service","\u4E91\u670D\u52A1"],"legend.workflow.external":["External system","\u5916\u90E8\u7CFB\u7EDF"],"legend.sequence.emphasis":["main request","\u4E3B\u8DEF\u5F84\u8BF7\u6C42"],"legend.sequence.return":["return","\u8FD4\u56DE"],"legend.sequence.security":["security","\u5B89\u5168"],"legend.sequence.dashed":["async trace","\u5F02\u6B65\u8FFD\u8E2A"],"legend.sequence.default":["message","\u666E\u901A\u6D88\u606F"],"legend.dataflow.emphasis":["primary data","\u4E3B\u8981\u6570\u636E"],"legend.dataflow.security":["policy / PII","\u7B56\u7565 / PII"],"legend.dataflow.dashed":["async batch","\u5F02\u6B65\u6279\u5904\u7406"],"legend.dataflow.database":["data store","\u6570\u636E\u5B58\u50A8"],"legend.dataflow.default":["data flow","\u6570\u636E\u6D41"],"legend.lifecycle.start":["initial state","\u8D77\u70B9"],"legend.lifecycle.active":["active","\u8FDB\u884C\u4E2D"],"legend.lifecycle.waiting":["waiting","\u7B49\u5F85"],"legend.lifecycle.decision":["decision","\u51B3\u7B56"],"legend.lifecycle.success":["success","\u6210\u529F"],"legend.lifecycle.failure":["failure / exit","\u5931\u8D25 / \u9000\u51FA"],"legend.lifecycle.neutral":["neutral","\u4E2D\u6027\u72B6\u6001"],"legend.lifecycle.external":["external","\u5916\u90E8\u72B6\u6001"],"legend.lifecycle.final":["final state","\u7EC8\u6001"],"viewer.kind.frontend":["Frontend","\u524D\u7AEF"],"viewer.kind.backend":["Backend","\u540E\u7AEF"],"viewer.kind.database":["Database","\u6570\u636E\u5E93"],"viewer.kind.cloud":["Cloud","\u4E91\u670D\u52A1"],"viewer.kind.security":["Security","\u5B89\u5168"],"viewer.kind.messagebus":["Message bus","\u6D88\u606F\u603B\u7EBF"],"viewer.kind.external":["External","\u5916\u90E8\u7CFB\u7EDF"],"viewer.kind.neutral":["Neutral","\u4E2D\u6027"],"viewer.kind.node":["Node","\u8282\u70B9"],"viewer.kind.start":["Start","\u5F00\u59CB"],"viewer.kind.active":["Active","\u6D3B\u52A8"],"viewer.kind.waiting":["Waiting","\u7B49\u5F85"],"viewer.kind.decision":["Decision","\u51B3\u7B56"],"viewer.kind.success":["Success","\u6210\u529F"],"viewer.kind.failure":["Failure","\u5931\u8D25"],"viewer.toolbar.actions":["Diagram actions","\u56FE\u8868\u64CD\u4F5C"],"viewer.theme.toggle.title":["Toggle theme (T)","\u5207\u6362\u4E3B\u9898\uFF08T\uFF09"],"viewer.theme.toggle":["Toggle color theme","\u5207\u6362\u989C\u8272\u4E3B\u9898"],"viewer.theme.dark":["Dark","\u6DF1\u8272"],"viewer.theme.light":["Light","\u6D45\u8272"],"viewer.preset.choose.title":["Choose visual style (S cycles)","\u9009\u62E9\u89C6\u89C9\u98CE\u683C\uFF08S \u5FAA\u73AF\u5207\u6362\uFF09"],"viewer.preset.choose":["Choose visual style","\u9009\u62E9\u89C6\u89C9\u98CE\u683C"],"viewer.preset.style":["Style","\u98CE\u683C"],"viewer.preset.menu":["Visual style","\u89C6\u89C9\u98CE\u683C"],"viewer.preset.identity":["Visual identity","\u89C6\u89C9\u8868\u8FBE"],"viewer.preset.cycles":["to cycle","\u5FAA\u73AF\u5207\u6362"],"viewer.preset.classic":["Classic","\u7ECF\u5178"],"viewer.preset.classic.short":["Classic","\u7ECF\u5178"],"viewer.preset.classic.hint":["Stable technical default","\u7A33\u5B9A\u7684\u6280\u672F\u9ED8\u8BA4\u98CE\u683C"],"viewer.preset.flow":["Signal Flow","\u4FE1\u53F7\u6D41"],"viewer.preset.flow.short":["Flow","\u6D41\u52A8"],"viewer.preset.flow.hint":["Motion-forward presentation","\u7A81\u51FA\u52A8\u6001\u6D41\u5411"],"viewer.preset.blueprint":["Blueprint","\u84DD\u56FE"],"viewer.preset.blueprint.hint":["Engineering review","\u5DE5\u7A0B\u8BC4\u5BA1"],"viewer.preset.editorial":["Editorial","\u7F16\u8F91\u98CE\u683C"],"viewer.preset.editorial.hint":["Publication and launch notes","\u9002\u5408\u53D1\u5E03\u4E0E\u4E0A\u7EBF\u8BF4\u660E"],"viewer.preset.badge.signalFlow":["SIGNAL FLOW","\u4FE1\u53F7\u6D41"],"viewer.preset.badge.blueprint":["BLUEPRINT / REV 01","\u84DD\u56FE / \u4FEE\u8BA2 01"],"viewer.preset.badge.editorial":["EDITORIAL / FIELD NOTE","\u7F16\u8F91\u98CE\u683C / \u73B0\u573A\u7B14\u8BB0"],"viewer.preset.badge.editorialPlate":["ARCHIFY / PLATE 04","ARCHIFY / \u56FE\u7248 04"],"viewer.preset.current":["Visual style: {style}. Choose visual style","\u5F53\u524D\u89C6\u89C9\u98CE\u683C\uFF1A{style}\u3002\u9009\u62E9\u89C6\u89C9\u98CE\u683C"],"viewer.motion.live":["Live","\u52A8\u6001"],"viewer.motion.still":["Still","\u9759\u6001"],"viewer.motion.pause":["Pause motion","\u6682\u505C\u52A8\u6548"],"viewer.motion.resume":["Resume motion","\u6062\u590D\u52A8\u6548"],"viewer.motion.reduced":["Motion paused by reduced-motion preference","\u5DF2\u6839\u636E\u51CF\u5C11\u52A8\u6001\u6548\u679C\u504F\u597D\u6682\u505C\u52A8\u6548"],"viewer.motion.hidden":["Motion paused while this page is hidden","\u9875\u9762\u4E0D\u53EF\u89C1\u65F6\u5DF2\u6682\u505C\u52A8\u6548"],"viewer.motion.yielding":["Pause motion; currently yielding to {owner}","\u6682\u505C\u52A8\u6548\uFF1B\u5F53\u524D\u8BA9\u4F4D\u4E8E{owner}"],"viewer.motion.yielding.title":["Live preview enabled \xB7 yielding to {owner}","\u52A8\u6001\u9884\u89C8\u5DF2\u542F\u7528 \xB7 \u6B63\u5728\u8BA9\u4F4D\u4E8E{owner}"],"viewer.owner.route":["Route Probe","\u8DEF\u5F84\u63A2\u6D4B"],"viewer.owner.lens":["Semantic Lens","\u8BED\u4E49\u900F\u955C"],"viewer.owner.relationship":["Relationship Preview","\u5173\u7CFB\u9884\u89C8"],"viewer.owner.intent":["Intent Trace","\u610F\u56FE\u8FFD\u8E2A"],"viewer.owner.focus":["semantic focus","\u8BED\u4E49\u805A\u7126"],"viewer.owner.legend":["legend preview","\u56FE\u4F8B\u9884\u89C8"],"viewer.owner.reader":["reader interaction","\u8BFB\u8005\u4EA4\u4E92"],"viewer.present.enter":["Enter presentation stage","\u8FDB\u5165\u6F14\u793A\u6A21\u5F0F"],"viewer.present.enter.title":["Presentation stage (F)","\u6F14\u793A\u6A21\u5F0F\uFF08F\uFF09"],"viewer.present.exit":["Exit presentation stage","\u9000\u51FA\u6F14\u793A\u6A21\u5F0F"],"viewer.present.exit.title":["Exit presentation stage (F or Escape)","\u9000\u51FA\u6F14\u793A\u6A21\u5F0F\uFF08F \u6216 Escape\uFF09"],"viewer.present.present":["Present","\u6F14\u793A"],"viewer.present.exit.label":["Exit","\u9000\u51FA"],"viewer.export.button":["Export","\u5BFC\u51FA"],"viewer.export.button.title":["Export diagram (E)","\u5BFC\u51FA\u56FE\u8868\uFF08E\uFF09"],"viewer.export.diagram":["Export diagram","\u5BFC\u51FA\u56FE\u8868"],"viewer.export.menu":["Export","\u5BFC\u51FA"],"viewer.export.subtitle":["Portable, clean outputs","\u4FBF\u643A\u3001\u6574\u6D01\u7684\u8F93\u51FA"],"viewer.export.share":["Share","\u5206\u4EAB"],"viewer.export.shareCard":["Share Card","\u5206\u4EAB\u5361\u7247"],"viewer.export.routeShareCard":["Route Share Card","\u8DEF\u5F84\u5206\u4EAB\u5361\u7247"],"viewer.export.reachShareCard":["Reach Share Card","\u53EF\u8FBE\u8303\u56F4\u5206\u4EAB\u5361\u7247"],"viewer.export.copyDiagram":["Copy diagram","\u590D\u5236\u56FE\u8868"],"viewer.export.clipboardPng":["PNG to clipboard","\u590D\u5236 PNG \u5230\u526A\u8D34\u677F"],"viewer.export.raster":["Raster images","\u4F4D\u56FE"],"viewer.export.image":["Image","\u56FE\u50CF"],"viewer.export.lossless":["Lossless image","\u65E0\u635F\u56FE\u50CF"],"viewer.export.compact":["Compact image","\u7D27\u51D1\u56FE\u50CF"],"viewer.export.modern":["Modern image","\u73B0\u4EE3\u56FE\u50CF\u683C\u5F0F"],"viewer.export.vectorMotion":["Vector and motion","\u77E2\u91CF\u4E0E\u52A8\u6548"],"viewer.export.vectorMotion.heading":["Vector & motion","\u77E2\u91CF\u4E0E\u52A8\u6548"],"viewer.export.editable":["Editable vector","\u53EF\u7F16\u8F91\u77E2\u91CF\u56FE"],"viewer.export.svg.auto":["SVG \xB7 Auto","SVG \xB7 \u81EA\u52A8"],"viewer.export.svg.auto.hint":["Matches host theme","\u5339\u914D\u5BBF\u4E3B\u4E3B\u9898"],"viewer.export.svg.light":["SVG \xB7 Light","SVG \xB7 \u6D45\u8272"],"viewer.export.svg.light.hint":["Always light","\u59CB\u7EC8\u6D45\u8272"],"viewer.export.svg.dark":["SVG \xB7 Dark","SVG \xB7 \u6DF1\u8272"],"viewer.export.svg.dark.hint":["Always dark","\u59CB\u7EC8\u6DF1\u8272"],"viewer.export.motion6s":["6s motion","6 \u79D2\u52A8\u6548"],"viewer.export.unsupported":["Not supported by this browser","\u5F53\u524D\u6D4F\u89C8\u5668\u4E0D\u652F\u6301"],"viewer.export.clipboardUnsupported":["Clipboard image write not supported by this browser","\u5F53\u524D\u6D4F\u89C8\u5668\u4E0D\u652F\u6301\u5199\u5165\u56FE\u7247\u526A\u8D34\u677F"],"viewer.export.clipboardUnsupported.short":["Clipboard image write not supported in this browser.","\u6B64\u6D4F\u89C8\u5668\u4E0D\u652F\u6301\u5199\u5165\u56FE\u7247\u526A\u8D34\u677F\u3002"],"viewer.export.motionUnavailable":["Motion capture unavailable in this browser","\u5F53\u524D\u6D4F\u89C8\u5668\u65E0\u6CD5\u5F55\u5236\u52A8\u6548"],"viewer.export.webmUnavailable":["WebM unavailable in this browser","\u5F53\u524D\u6D4F\u89C8\u5668\u4E0D\u652F\u6301 WebM"],"viewer.export.failed":["Export failed: {message}","\u5BFC\u51FA\u5931\u8D25\uFF1A{message}"],"viewer.export.unknownVariant":["Unknown Share Card variant: {variant}","\u672A\u77E5\u7684\u5206\u4EAB\u5361\u7247\u7C7B\u578B\uFF1A{variant}"],"viewer.export.routeRequired":["Trace a route before exporting a Route Share Card","\u8BF7\u5148\u8FFD\u8E2A\u8DEF\u5F84\uFF0C\u518D\u5BFC\u51FA\u8DEF\u5F84\u5206\u4EAB\u5361\u7247"],"viewer.export.reachRequired":["Trace authored reach before exporting a Reach Share Card","\u8BF7\u5148\u8FFD\u8E2A\u7F16\u5199\u53EF\u8FBE\u8303\u56F4\uFF0C\u518D\u5BFC\u51FA\u53EF\u8FBE\u8303\u56F4\u5206\u4EAB\u5361\u7247"],"viewer.export.unknown":["unknown","\u672A\u77E5\u9519\u8BEF"],"viewer.export.routeFailed":["Route Share Card export failed: {message}","\u8DEF\u5F84\u5206\u4EAB\u5361\u7247\u5BFC\u51FA\u5931\u8D25\uFF1A{message}"],"viewer.export.reachFailed":["Reach Share Card export failed: {message}","\u53EF\u8FBE\u8303\u56F4\u5206\u4EAB\u5361\u7247\u5BFC\u51FA\u5931\u8D25\uFF1A{message}"],"viewer.export.copyFailed":["Copy failed: {message}","\u590D\u5236\u5931\u8D25\uFF1A{message}"],"viewer.export.copiedPng":["Copied PNG to clipboard","\u5DF2\u5C06 PNG \u590D\u5236\u5230\u526A\u8D34\u677F"],"viewer.export.downloadedRoute":["Downloaded Route Share Card","\u5DF2\u4E0B\u8F7D\u8DEF\u5F84\u5206\u4EAB\u5361\u7247"],"viewer.export.downloadedReach":["Downloaded Reach Share Card","\u5DF2\u4E0B\u8F7D\u53EF\u8FBE\u8303\u56F4\u5206\u4EAB\u5361\u7247"],"viewer.export.downloadedWebm":["Downloaded WebM","\u5DF2\u4E0B\u8F7D WebM"],"viewer.export.recording":["Recording 6 seconds of motion\u2026","\u6B63\u5728\u5F55\u5236 6 \u79D2\u52A8\u6548\u2026"],"viewer.export.card.routeSummary.one":["Path: {source} \u2192 {target} \xB7 {count} step","\u8DEF\u5F84\uFF1A{source} \u2192 {target} \xB7 {count} \u6B65"],"viewer.export.card.routeSummary.other":["Path: {source} \u2192 {target} \xB7 {count} steps","\u8DEF\u5F84\uFF1A{source} \u2192 {target} \xB7 {count} \u6B65"],"viewer.export.card.reachSummary":["Authored {direction} from {origin} \xB7 {nodes} \xB7 {links} \xB7 max {hops}","\u4ECE{origin}\u5F00\u59CB\u7684\u7F16\u5199{direction} \xB7 {nodes} \xB7 {links} \xB7 \u6700\u6DF1 {hops}"],"viewer.export.card.node.one":["{count} node","{count} \u4E2A\u8282\u70B9"],"viewer.export.card.node.other":["{count} nodes","{count} \u4E2A\u8282\u70B9"],"viewer.export.card.link.one":["{count} link","{count} \u6761\u8FDE\u63A5"],"viewer.export.card.link.other":["{count} links","{count} \u6761\u8FDE\u63A5"],"viewer.export.card.hop.one":["{count} hop","{count} \u8DF3"],"viewer.export.card.hop.other":["{count} hops","{count} \u8DF3"],"viewer.export.card.routeBadge":["ARCHIFY \xB7 ROUTE \xB7 {hops}","ARCHIFY \xB7 \u8DEF\u5F84 \xB7 {hops}"],"viewer.export.card.reachBadge":["ARCHIFY \xB7 {direction} REACH","ARCHIFY \xB7 {direction}\u53EF\u8FBE\u8303\u56F4"],"viewer.export.direction.upstream":["Upstream","\u4E0A\u6E38"],"viewer.export.direction.downstream":["Downstream","\u4E0B\u6E38"],"viewer.export.error.canvasUnavailable":["Canvas unavailable for {label}","\u65E0\u6CD5\u4E3A{label}\u4F7F\u7528\u753B\u5E03"],"viewer.export.error.contextUnavailable":["2D canvas context unavailable for {label}","\u65E0\u6CD5\u4E3A{label}\u521B\u5EFA\u4E8C\u7EF4\u753B\u5E03\u4E0A\u4E0B\u6587"],"viewer.export.error.toBlobUnavailable":["canvas.toBlob unavailable for {label}","{label}\u65E0\u6CD5\u4F7F\u7528 canvas.toBlob"],"viewer.export.error.toBlobNull":["canvas.toBlob returned no data for {label}","{label}\u7684 canvas.toBlob \u672A\u8FD4\u56DE\u6570\u636E"],"viewer.export.error.variantsCombined":["Share Card variants cannot be combined","\u65E0\u6CD5\u540C\u65F6\u7EC4\u5408\u591A\u79CD\u5206\u4EAB\u5361\u7247\u7C7B\u578B"],"viewer.export.error.viewerState":["Share Card export could not remove temporary viewer state","\u5206\u4EAB\u5361\u7247\u5BFC\u51FA\u65E0\u6CD5\u79FB\u9664\u4E34\u65F6 Viewer \u72B6\u6001"],"viewer.export.error.routeState":["Route Card export could not preserve the resolved route safely","\u8DEF\u5F84\u5361\u7247\u5BFC\u51FA\u65E0\u6CD5\u5B89\u5168\u4FDD\u7559\u5DF2\u89E3\u6790\u8DEF\u5F84"],"viewer.export.error.reachState":["Reach Card export could not preserve authored reach safely","\u53EF\u8FBE\u8303\u56F4\u5361\u7247\u5BFC\u51FA\u65E0\u6CD5\u5B89\u5168\u4FDD\u7559\u7F16\u5199\u7684\u53EF\u8FBE\u8303\u56F4"],"viewer.export.error.webmRequirements":["WebM motion export requires a trace animation and browser MediaRecorder support","WebM \u52A8\u6548\u5BFC\u51FA\u9700\u8981\u8FFD\u8E2A\u52A8\u753B\u53CA\u6D4F\u89C8\u5668 MediaRecorder \u652F\u6301"],"viewer.export.error.mediaRecorder":["MediaRecorder failed","MediaRecorder \u5F55\u5236\u5931\u8D25"],"viewer.export.error.emptyWebm":["MediaRecorder produced an empty WebM","MediaRecorder \u751F\u6210\u4E86\u7A7A\u7684 WebM"],"viewer.export.error.webmBackground":["SVG background could not be loaded for WebM export","\u65E0\u6CD5\u4E3A WebM \u5BFC\u51FA\u52A0\u8F7D SVG \u80CC\u666F"],"viewer.guide.title":["Explore this system","\u63A2\u7D22\u6B64\u7CFB\u7EDF"],"viewer.focus.selectedNodes":["{count} selected nodes","\u5DF2\u9009\u62E9 {count} \u4E2A\u8282\u70B9"],"viewer.guide.eyebrow":["Diagram guide","\u56FE\u8868\u6307\u5357"],"viewer.guide.close":["Close diagram guide","\u5173\u95ED\u56FE\u8868\u6307\u5357"],"viewer.guide.inspecting":["Inspecting compiled semantics","\u6B63\u5728\u68C0\u67E5\u5DF2\u7F16\u8BD1\u8BED\u4E49"],"viewer.guide.actions":["Diagram exploration actions","\u56FE\u8868\u63A2\u7D22\u64CD\u4F5C"],"viewer.guide.find":["Find any node","\u67E5\u627E\u4EFB\u610F\u8282\u70B9"],"viewer.guide.find.hint":["Search labels, responsibilities, kinds, and stable IDs.","\u641C\u7D22\u6807\u7B7E\u3001\u804C\u8D23\u3001\u7C7B\u578B\u548C\u7A33\u5B9A ID\u3002"],"viewer.guide.route":["Trace a route","\u8FFD\u8E2A\u8DEF\u5F84"],"viewer.guide.route.aria":["Trace a directed route","\u8FFD\u8E2A\u6709\u5411\u8DEF\u5F84"],"viewer.guide.route.hint":["Ask how two semantic nodes connect in authored direction.","\u67E5\u770B\u4E24\u4E2A\u8BED\u4E49\u8282\u70B9\u5982\u4F55\u6309\u7F16\u5199\u65B9\u5411\u8FDE\u63A5\u3002"],"viewer.guide.map":["See the whole system","\u67E5\u770B\u5B8C\u6574\u7CFB\u7EDF"],"viewer.guide.map.hint":["Open Semantic Radar with a live viewport and stable nodes.","\u6253\u5F00\u5E26\u5B9E\u65F6\u89C6\u53E3\u548C\u7A33\u5B9A\u8282\u70B9\u7684\u8BED\u4E49\u96F7\u8FBE\u3002"],"viewer.guide.lens":["Compare semantic kinds","\u6BD4\u8F83\u8BED\u4E49\u7C7B\u578B"],"viewer.guide.lens.hint":["Count roles, reveal their traffic, and compare direct authored links.","\u7EDF\u8BA1\u89D2\u8272\u3001\u663E\u793A\u6D41\u91CF\u5E76\u6BD4\u8F83\u76F4\u63A5\u7F16\u5199\u7684\u8FDE\u63A5\u3002"],"viewer.guide.present":["Enter Presentation Stage","\u8FDB\u5165\u6F14\u793A\u6A21\u5F0F"],"viewer.guide.present.hint":["Give the live diagram the viewport without changing export.","\u8BA9\u5B9E\u65F6\u56FE\u8868\u5360\u6EE1\u89C6\u53E3\uFF0C\u540C\u65F6\u4E0D\u6539\u53D8\u5BFC\u51FA\u3002"],"viewer.guide.shortcuts":["Additional keyboard shortcuts","\u5176\u4ED6\u952E\u76D8\u5FEB\u6377\u952E"],"viewer.guide.shortcut.export":["Export","\u5BFC\u51FA"],"viewer.guide.shortcut.theme":["Theme","\u4E3B\u9898"],"viewer.guide.shortcut.style":["Style","\u98CE\u683C"],"viewer.guide.shortcut.reset":["Reset","\u91CD\u7F6E"],"viewer.guide.shortcut.zoomIn":["Zoom in","\u653E\u5927"],"viewer.guide.shortcut.zoomOut":["Zoom out","\u7F29\u5C0F"],"viewer.guide.shortcut.close":["Close","\u5173\u95ED"],"viewer.guide.facts":["{nodes} \xB7 {relationships}","{nodes} \xB7 {relationships}"],"viewer.guide.fact.node.one":["{count} semantic node","{count} \u4E2A\u8BED\u4E49\u8282\u70B9"],"viewer.guide.fact.node.other":["{count} semantic nodes","{count} \u4E2A\u8BED\u4E49\u8282\u70B9"],"viewer.guide.fact.relationship.one":["{count} relationship","{count} \u6761\u5173\u7CFB"],"viewer.guide.fact.relationship.other":["{count} relationships","{count} \u6761\u5173\u7CFB"],"viewer.guide.open":["Open diagram guide","\u6253\u5F00\u56FE\u8868\u6307\u5357"],"viewer.finder.title":["Find a node","\u67E5\u627E\u8282\u70B9"],"viewer.finder.close":["Close node finder","\u5173\u95ED\u8282\u70B9\u67E5\u627E\u5668"],"viewer.finder.placeholder":["Search labels or IDs","\u641C\u7D22\u6807\u7B7E\u6216 ID"],"viewer.finder.search":["Search diagram nodes","\u641C\u7D22\u56FE\u8868\u8282\u70B9"],"viewer.finder.results":["Diagram nodes","\u56FE\u8868\u8282\u70B9"],"viewer.finder.empty":["No matching nodes","\u6CA1\u6709\u5339\u914D\u7684\u8282\u70B9"],"viewer.finder.result.focus":["Focus {label}","\u805A\u7126{label}"],"viewer.finder.result.routeStart":["Choose {label} as route start","\u9009\u62E9{label}\u4F5C\u4E3A\u8DEF\u5F84\u8D77\u70B9"],"viewer.finder.result.routeTarget":["Choose {label} as route destination, {links}","\u9009\u62E9{label}\u4F5C\u4E3A\u8DEF\u5F84\u7EC8\u70B9\uFF0C{links}"],"viewer.finder.status.empty":["No matching nodes","\u6CA1\u6709\u5339\u914D\u7684\u8282\u70B9"],"viewer.finder.status.count.one":["{count} matching node","{count} \u4E2A\u5339\u914D\u8282\u70B9"],"viewer.finder.status.count.other":["{count} matching nodes","{count} \u4E2A\u5339\u914D\u8282\u70B9"],"viewer.finder.noun.nodes":["nodes","\u4E2A\u8282\u70B9"],"viewer.finder.link.one":["{count} link","{count} \u6761\u8FDE\u63A5"],"viewer.finder.link.other":["{count} links","{count} \u6761\u8FDE\u63A5"],"viewer.finder.result.focus.one":["Focus {label}, {count} related connection","\u805A\u7126{label}\uFF0C{count} \u6761\u76F8\u5173\u8FDE\u63A5"],"viewer.finder.result.focus.other":["Focus {label}, {count} related connections","\u805A\u7126{label}\uFF0C{count} \u6761\u76F8\u5173\u8FDE\u63A5"],"viewer.finder.status.filtered":["{visible} of {available} {noun}","{visible}/{available} {noun}"],"viewer.finder.status.all":["{available} {noun}","{available} {noun}"],"viewer.passport.eyebrow":["Semantic passport","\u8BED\u4E49\u62A4\u7167"],"viewer.passport.metadata":["Node metadata","\u8282\u70B9\u5143\u6570\u636E"],"viewer.passport.evidence":["Verified source evidence","\u5DF2\u9A8C\u8BC1\u7684\u6E90\u4EE3\u7801\u8BC1\u636E"],"viewer.passport.verified":["Verified source","\u5DF2\u9A8C\u8BC1\u6765\u6E90"],"viewer.passport.verificationScope":["Verified against local Git at the pinned revision. Remote access has not been checked.","\u5DF2\u6309\u56FA\u5B9A\u4FEE\u8BA2\u7248\u672C\u9A8C\u8BC1\u672C\u5730 Git \u8BC1\u636E\uFF0C\u672A\u68C0\u67E5\u8FDC\u7A0B\u8BBF\u95EE\u6743\u9650\u3002"],"viewer.passport.reach":["Authored reach","\u7F16\u5199\u53EF\u8FBE\u8303\u56F4"],"viewer.passport.reach.trace":["Trace authored reachability","\u8FFD\u8E2A\u7F16\u5199\u7684\u53EF\u8FBE\u6027"],"viewer.passport.upstream":["Upstream","\u4E0A\u6E38"],"viewer.passport.downstream":["Downstream","\u4E0B\u6E38"],"viewer.passport.upstream.trace":["Trace upstream authored reachability","\u8FFD\u8E2A\u4E0A\u6E38\u7F16\u5199\u53EF\u8FBE\u6027"],"viewer.passport.downstream.trace":["Trace downstream authored reachability","\u8FFD\u8E2A\u4E0B\u6E38\u7F16\u5199\u53EF\u8FBE\u6027"],"viewer.passport.close":["Close semantic passport","\u5173\u95ED\u8BED\u4E49\u62A4\u7167"],"viewer.passport.move":["Move semantic passport. Drag, use arrow keys, or press Home to reset.","\u79FB\u52A8\u8BED\u4E49\u62A4\u7167\u3002\u53EF\u62D6\u52A8\u3001\u4F7F\u7528\u65B9\u5411\u952E\u79FB\u52A8\uFF0C\u6216\u6309 Home \u6062\u590D\u81EA\u52A8\u4F4D\u7F6E\u3002"],"viewer.passport.copy":["Copy link","\u590D\u5236\u94FE\u63A5"],"viewer.passport.copy.focus":["Copy link to focused node","\u590D\u5236\u805A\u7126\u8282\u70B9\u7684\u94FE\u63A5"],"viewer.passport.relations":["Relations","\u5173\u7CFB"],"viewer.passport.relations.show":["Show connected relationships","\u663E\u793A\u5173\u8054\u5173\u7CFB"],"viewer.passport.relations.hide":["Hide connected relationships","\u9690\u85CF\u5173\u8054\u5173\u7CFB"],"viewer.passport.relations.list":["Connected relationships","\u5173\u8054\u5173\u7CFB"],"viewer.passport.copyRelation":["Copy relation","\u590D\u5236\u5173\u7CFB"],"viewer.passport.copyNode":["Copy node","\u590D\u5236\u8282\u70B9"],"viewer.passport.copyPinned":["Copy link to pinned relationship","\u590D\u5236\u56FA\u5B9A\u5173\u7CFB\u7684\u94FE\u63A5"],"viewer.passport.copySource":["Copy link to source node","\u590D\u5236\u6765\u6E90\u8282\u70B9\u7684\u94FE\u63A5"],"viewer.passport.copy.focused.success":["Focused node link copied","\u5DF2\u590D\u5236\u805A\u7126\u8282\u70B9\u94FE\u63A5"],"viewer.passport.copy.pinned.success":["Pinned relationship link copied","\u5DF2\u590D\u5236\u56FA\u5B9A\u5173\u7CFB\u94FE\u63A5"],"viewer.passport.copy.focused.failed":["Could not copy focused node link","\u65E0\u6CD5\u590D\u5236\u805A\u7126\u8282\u70B9\u94FE\u63A5"],"viewer.passport.copy.pinned.failed":["Could not copy pinned relationship link","\u65E0\u6CD5\u590D\u5236\u56FA\u5B9A\u5173\u7CFB\u94FE\u63A5"],"viewer.passport.relationship.none":["No connected relationships","\u6CA1\u6709\u5173\u8054\u5173\u7CFB"],"viewer.passport.relationship.count.one":["{count} relation","{count} \u6761\u5173\u7CFB"],"viewer.passport.relationship.count.other":["{count} relations","{count} \u6761\u5173\u7CFB"],"viewer.passport.relationship.show.one":["Show {count} connected relationship","\u663E\u793A {count} \u6761\u5173\u8054\u5173\u7CFB"],"viewer.passport.relationship.show.other":["Show {count} connected relationships","\u663E\u793A {count} \u6761\u5173\u8054\u5173\u7CFB"],"viewer.passport.relationship.summary":["{out} outgoing \xB7 {in} incoming{loops}","{out} \u6761\u51FA\u5411 \xB7 {in} \u6761\u5165\u5411{loops}"],"viewer.passport.relationship.loops":[" \xB7 {count} loop"," \xB7 {count} \u6761\u81EA\u73AF"],"viewer.passport.relationship.explorer":["Direct relationship explorer","\u76F4\u63A5\u5173\u7CFB\u6D4F\u89C8\u5668"],"viewer.passport.relationship.help":["Use arrow keys to explore relationships. Press Enter or Space to pin details; Escape clears.","\u4F7F\u7528\u65B9\u5411\u952E\u6D4F\u89C8\u5173\u7CFB\u3002\u6309 Enter \u6216\u7A7A\u683C\u952E\u56FA\u5B9A\u8BE6\u60C5\uFF1B\u6309 Escape \u6E05\u9664\u3002"],"viewer.passport.relationship.loopsBack":["loops back","\u56DE\u73AF"],"viewer.passport.relationship.connectsTo":["connects to","\u8FDE\u63A5\u5230"],"viewer.passport.relationship.connectsFrom":["connects from","\u8FDE\u63A5\u81EA"],"viewer.passport.relationship.pinned":["Pinned relationship \xB7 {from} \u2192 {to} \xB7 {label}","\u5DF2\u56FA\u5B9A\u5173\u7CFB \xB7 {from} \u2192 {to} \xB7 {label}"],"viewer.passport.relationship.inspect":["Inspect relationship {index} of {total}: {from} to {to}, {label}. Press Enter for details.","\u68C0\u67E5\u7B2C {index}/{total} \u6761\u5173\u7CFB\uFF1A{from} \u5230 {to}\uFF0C{label}\u3002\u6309 Enter \u67E5\u770B\u8BE6\u60C5\u3002"],"viewer.passport.relationship.group.out":["Outgoing","\u51FA\u5411"],"viewer.passport.relationship.group.in":["Incoming","\u5165\u5411"],"viewer.passport.relationship.group.loop":["Self loops","\u81EA\u73AF"],"viewer.passport.relationship.row":["{group}: {relationship}, {neighbor}","{group}\uFF1A{relationship}\uFF0C{neighbor}"],"viewer.passport.relationship.direction.out":["OUT \u2192","\u51FA \u2192"],"viewer.passport.relationship.direction.in":["\u2190 IN","\u2190 \u5165"],"viewer.passport.relationship.direction.loop":["LOOP","\u81EA\u73AF"],"viewer.passport.sourceCount.one":["{count} verified source reference","{count} \u4E2A\u5DF2\u9A8C\u8BC1\u6765\u6E90\u5F15\u7528"],"viewer.passport.sourceCount.other":["{count} verified source references","{count} \u4E2A\u5DF2\u9A8C\u8BC1\u6765\u6E90\u5F15\u7528"],"viewer.passport.sourceMarker":["SRC","\u6765\u6E90"],"viewer.passport.beacon.one":["{count} verified source; focus this node to inspect","{count} \u4E2A\u5DF2\u9A8C\u8BC1\u6765\u6E90\uFF1B\u805A\u7126\u6B64\u8282\u70B9\u4EE5\u68C0\u67E5"],"viewer.passport.beacon.other":["{count} verified sources; focus this node to inspect","{count} \u4E2A\u5DF2\u9A8C\u8BC1\u6765\u6E90\uFF1B\u805A\u7126\u6B64\u8282\u70B9\u4EE5\u68C0\u67E5"],"viewer.passport.repository.open":["Open verified repository revision {revision}","\u6253\u5F00\u5DF2\u9A8C\u8BC1\u7684\u4ED3\u5E93\u4FEE\u8BA2\u7248\u672C {revision}"],"viewer.passport.source.open":["Open verified source {path} at revision {revision}","\u6253\u5F00\u4FEE\u8BA2\u7248\u672C {revision} \u4E2D\u5DF2\u9A8C\u8BC1\u7684\u6765\u6E90 {path}"],"viewer.passport.source.openLink":["Open \u2197","\u6253\u5F00 \u2197"],"viewer.passport.reach.upstream.one":["Trace {count} upstream authored node","\u8FFD\u8E2A {count} \u4E2A\u4E0A\u6E38\u7F16\u5199\u8282\u70B9"],"viewer.passport.reach.upstream.other":["Trace {count} upstream authored nodes","\u8FFD\u8E2A {count} \u4E2A\u4E0A\u6E38\u7F16\u5199\u8282\u70B9"],"viewer.passport.reach.downstream.one":["Trace {count} downstream authored node","\u8FFD\u8E2A {count} \u4E2A\u4E0B\u6E38\u7F16\u5199\u8282\u70B9"],"viewer.passport.reach.downstream.other":["Trace {count} downstream authored nodes","\u8FFD\u8E2A {count} \u4E2A\u4E0B\u6E38\u7F16\u5199\u8282\u70B9"],"viewer.passport.reach.noUpstream":["No upstream authored nodes","\u6CA1\u6709\u4E0A\u6E38\u7F16\u5199\u8282\u70B9"],"viewer.passport.reach.noDownstream":["No downstream authored nodes","\u6CA1\u6709\u4E0B\u6E38\u7F16\u5199\u8282\u70B9"],"viewer.passport.reach.status":["{direction} \xB7 {nodes} nodes \xB7 {links} links \xB7 max {hops} hops","{direction} \xB7 {nodes} \u4E2A\u8282\u70B9 \xB7 {links} \u6761\u8FDE\u63A5 \xB7 \u6700\u6DF1 {hops} \u8DF3"],"viewer.route.eyebrow":["Path","\u8DEF\u5F84"],"viewer.route.start":["Click where the path starts","\u70B9\u51FB\u8DEF\u5F84\u7684\u8D77\u70B9"],"viewer.route.start.find":["Find start","\u67E5\u627E\u8D77\u70B9"],"viewer.route.start.find.aria":["Find a route start","\u67E5\u627E\u8DEF\u5F84\u8D77\u70B9"],"viewer.route.copy":["Copy link","\u590D\u5236\u94FE\u63A5"],"viewer.route.copy.aria":["Copy link to traced route","\u590D\u5236\u5DF2\u8FFD\u8E2A\u8DEF\u5F84\u7684\u94FE\u63A5"],"viewer.route.clear":["Clear","\u6E05\u9664"],"viewer.route.clear.aria":["Clear route probe","\u6E05\u9664\u8DEF\u5F84\u63A2\u6D4B"],"viewer.route.traced":["Path","\u8DEF\u5F84"],"viewer.route.pickTwo":["Click two nodes on the diagram","\u5728\u56FE\u4E0A\u70B9\u4E24\u4E2A\u8282\u70B9"],"viewer.route.pickOne":["Click a node on the diagram","\u5728\u56FE\u4E0A\u70B9\u4E00\u4E2A\u8282\u70B9"],"viewer.route.controls":["Route journey controls","\u8DEF\u5F84\u65C5\u7A0B\u63A7\u5236"],"viewer.route.previous":["Previous route position","\u4E0A\u4E00\u4E2A\u8DEF\u5F84\u4F4D\u7F6E"],"viewer.route.play":["Play route journey","\u64AD\u653E\u8DEF\u5F84\u65C5\u7A0B"],"viewer.route.pause":["Pause route journey","\u6682\u505C\u8DEF\u5F84\u65C5\u7A0B"],"viewer.route.replay":["Replay route journey","\u91CD\u64AD\u8DEF\u5F84\u65C5\u7A0B"],"viewer.route.next":["Next route position","\u4E0B\u4E00\u4E2A\u8DEF\u5F84\u4F4D\u7F6E"],"viewer.route.journey":["Journey","\u65C5\u7A0B"],"viewer.route.pause.label":["Pause","\u6682\u505C"],"viewer.route.replay.label":["Replay","\u91CD\u64AD"],"viewer.route.overview":["Overview","\u603B\u89C8"],"viewer.route.overview.aria":["Show complete route overview","\u663E\u793A\u5B8C\u6574\u8DEF\u5F84\u603B\u89C8"],"viewer.route.instructions":["Click a start, then an end. Paths follow the arrows.","\u5148\u70B9\u8D77\u70B9\uFF0C\u518D\u70B9\u7EC8\u70B9\uFF0C\u6CBF\u7BAD\u5934\u65B9\u5411\u627E\u8DEF\u3002"],"viewer.route.destination":["Where does the path from {label} end?","\u4ECE{label}\u51FA\u53D1\uFF0C\u8D70\u5230\u54EA\u91CC\uFF1F"],"viewer.route.destination.find":["Find target","\u67E5\u627E\u76EE\u6807"],"viewer.route.destination.find.aria":["Find a reachable route destination","\u67E5\u627E\u53EF\u8FBE\u7684\u8DEF\u5F84\u76EE\u6807"],"viewer.route.differentDestination":["Choose a different destination","\u9009\u62E9\u5176\u4ED6\u76EE\u6807"],"viewer.route.distinct":["Pick two different nodes.","\u8BF7\u9009\u4E24\u4E2A\u4E0D\u540C\u7684\u8282\u70B9\u3002"],"viewer.route.unreachable":["Cannot reach {label} from here","\u8D70\u4E0D\u5230{label}"],"viewer.route.unreachable.detail":["{target} cannot be reached from {source} along the arrows. Pick a highlighted node.","\u6CBF\u7BAD\u5934\u65B9\u5411\uFF0C\u4ECE{source}\u8D70\u4E0D\u5230{target}\u3002\u8BF7\u9009\u4E00\u4E2A\u9AD8\u4EAE\u8282\u70B9\u3002"],"viewer.route.start.instructions":["Next, pick the end. Only nodes you can reach will light up.","\u63A5\u7740\u9009\u7EC8\u70B9\uFF0C\u80FD\u8D70\u5230\u7684\u8282\u70B9\u4F1A\u4EAE\u8D77\u3002"],"viewer.route.copy.success":["Traced route link copied","\u5DF2\u590D\u5236\u8DEF\u5F84\u94FE\u63A5"],"viewer.route.copy.failed":["Could not copy traced route link","\u65E0\u6CD5\u590D\u5236\u8DEF\u5F84\u94FE\u63A5"],"viewer.route.position":["Route position {index} of {total}: {label}","\u8DEF\u5F84\u4F4D\u7F6E {index}/{total}\uFF1A{label}"],"viewer.route.step":["Step {index} of {total} \xB7 {phase} \xB7 {label}","\u7B2C {index}/{total} \u6B65 \xB7 {phase} \xB7 {label}"],"viewer.route.motionRequired":["Automatic journey requires Live motion","\u81EA\u52A8\u65C5\u7A0B\u9700\u8981\u52A8\u6001\u6A21\u5F0F"],"viewer.route.trigger.clear":["Clear traced route","\u6E05\u9664\u5DF2\u8FFD\u8E2A\u8DEF\u5F84"],"viewer.route.overview.status":["{nodes} \xB7 {hops} \xB7 shortest path","{nodes} \xB7 {hops} \xB7 \u6700\u77ED\u8DEF\u5F84"],"viewer.route.overview.node.one":["{count} node","{count} \u4E2A\u8282\u70B9"],"viewer.route.overview.node.other":["{count} nodes","{count} \u4E2A\u8282\u70B9"],"viewer.route.overview.hop.one":["{count} step","{count} \u6B65"],"viewer.route.overview.hop.other":["{count} steps","{count} \u6B65"],"viewer.route.phase.playing":["Playing","\u64AD\u653E\u4E2D"],"viewer.route.phase.complete":["Complete","\u5DF2\u5B8C\u6210"],"viewer.route.phase.inspecting":["Inspecting","\u68C0\u67E5\u4E2D"],"viewer.route.destination.count.one":["{count} reachable node is highlighted. Click it.","\u6709 {count} \u4E2A\u80FD\u8D70\u5230\u7684\u8282\u70B9\u5DF2\u9AD8\u4EAE\uFF0C\u70B9\u4E00\u4E0B\u3002"],"viewer.route.destination.count.other":["{count} reachable nodes are highlighted. Click one.","\u6709 {count} \u4E2A\u80FD\u8D70\u5230\u7684\u8282\u70B9\u5DF2\u9AD8\u4EAE\uFF0C\u70B9\u4E00\u4E2A\u3002"],"viewer.route.noOutgoing":["No arrows lead out of this node. Clear it and pick another start.","\u8FD9\u4E2A\u8282\u70B9\u6CA1\u6709\u5411\u5916\u7684\u7BAD\u5934\u3002\u6E05\u9664\u540E\u6362\u4E00\u4E2A\u8D77\u70B9\u3002"],"viewer.route.result.title":["{source} to {target}","{source} \u5230 {target}"],"viewer.route.finder.source.title":["Choose route start","\u9009\u62E9\u8DEF\u5F84\u8D77\u70B9"],"viewer.route.finder.source.placeholder":["Search route sources","\u641C\u7D22\u8DEF\u5F84\u6765\u6E90"],"viewer.route.finder.source.empty":["No matching route sources","\u6CA1\u6709\u5339\u914D\u7684\u8DEF\u5F84\u6765\u6E90"],"viewer.route.finder.source.results":["Nodes that can start a route","\u53EF\u4F5C\u4E3A\u8DEF\u5F84\u8D77\u70B9\u7684\u8282\u70B9"],"viewer.route.finder.source.noun":["route sources","\u4E2A\u8DEF\u5F84\u6765\u6E90"],"viewer.route.finder.source.badge":["start","\u8D77\u70B9"],"viewer.route.finder.target.title":["Destination from {label}","\u4ECE{label}\u51FA\u53D1\u7684\u76EE\u6807"],"viewer.route.finder.target.placeholder":["Search reachable destinations","\u641C\u7D22\u53EF\u8FBE\u76EE\u6807"],"viewer.route.finder.target.empty":["No matching reachable destinations","\u6CA1\u6709\u5339\u914D\u7684\u53EF\u8FBE\u76EE\u6807"],"viewer.route.finder.target.results":["Reachable route destinations","\u53EF\u8FBE\u8DEF\u5F84\u76EE\u6807"],"viewer.route.finder.target.noun":["reachable destinations","\u4E2A\u53EF\u8FBE\u76EE\u6807"],"viewer.route.hop.one":["{count} hop","{count} \u8DF3"],"viewer.route.hop.other":["{count} hops","{count} \u8DF3"],"viewer.lens.eyebrow":["Semantic lens","\u8BED\u4E49\u900F\u955C"],"viewer.lens.title":["Compare system roles","\u6BD4\u8F83\u7CFB\u7EDF\u89D2\u8272"],"viewer.lens.close":["Close semantic lens","\u5173\u95ED\u8BED\u4E49\u900F\u955C"],"viewer.lens.instruction":["Choose up to two semantic kinds. One reveals its real traffic; two compare only direct authored relationships.","\u6700\u591A\u9009\u62E9\u4E24\u79CD\u8BED\u4E49\u7C7B\u578B\u3002\u9009\u62E9\u4E00\u79CD\u53EF\u663E\u793A\u5176\u771F\u5B9E\u6D41\u91CF\uFF1B\u9009\u62E9\u4E24\u79CD\u53EA\u6BD4\u8F83\u76F4\u63A5\u7F16\u5199\u7684\u5173\u7CFB\u3002"],"viewer.lens.kinds":["Semantic kinds","\u8BED\u4E49\u7C7B\u578B"],"viewer.lens.choose":["Choose a kind to inspect its nodes and touching relationships.","\u9009\u62E9\u4E00\u79CD\u7C7B\u578B\u4EE5\u68C0\u67E5\u5176\u8282\u70B9\u548C\u76F8\u8FDE\u5173\u7CFB\u3002"],"viewer.lens.copy":["Copy link to semantic lens","\u590D\u5236\u8BED\u4E49\u900F\u955C\u94FE\u63A5"],"viewer.lens.clear":["Clear semantic lens","\u6E05\u9664\u8BED\u4E49\u900F\u955C"],"viewer.lens.open":["Open semantic lens","\u6253\u5F00\u8BED\u4E49\u900F\u955C"],"viewer.lens.openActive":["Open active semantic lens","\u6253\u5F00\u5F53\u524D\u8BED\u4E49\u900F\u955C"],"viewer.lens.legend":["Semantic legend","\u8BED\u4E49\u56FE\u4F8B"],"viewer.lens.legend.inspect.one":["Inspect {label}, {count} node","\u68C0\u67E5{label}\uFF0C{count} \u4E2A\u8282\u70B9"],"viewer.lens.legend.inspect.other":["Inspect {label}, {count} nodes","\u68C0\u67E5{label}\uFF0C{count} \u4E2A\u8282\u70B9"],"viewer.lens.kind.count.one":["{label}, {count} node","{label}\uFF0C{count} \u4E2A\u8282\u70B9"],"viewer.lens.kind.count.other":["{label}, {count} nodes","{label}\uFF0C{count} \u4E2A\u8282\u70B9"],"viewer.lens.compare.one":["{first} \u2192 {second}: {forward} \xB7 {second} \u2192 {first}: {reverse} \xB7 {count} direct relationship","{first} \u2192 {second}\uFF1A{forward} \xB7 {second} \u2192 {first}\uFF1A{reverse} \xB7 \u5171 {count} \u6761\u76F4\u63A5\u5173\u7CFB"],"viewer.lens.compare.other":["{first} \u2192 {second}: {forward} \xB7 {second} \u2192 {first}: {reverse} \xB7 {count} direct relationships","{first} \u2192 {second}\uFF1A{forward} \xB7 {second} \u2192 {first}\uFF1A{reverse} \xB7 \u5171 {count} \u6761\u76F4\u63A5\u5173\u7CFB"],"viewer.lens.single":["{nodes} \xB7 {relationships} \xB7 connected peers remain visible","{nodes} \xB7 {relationships} \xB7 \u5DF2\u8FDE\u63A5\u8282\u70B9\u4FDD\u6301\u53EF\u89C1"],"viewer.lens.node.one":["{count} {label} node","{count} \u4E2A{label}\u8282\u70B9"],"viewer.lens.node.other":["{count} {label} nodes","{count} \u4E2A{label}\u8282\u70B9"],"viewer.lens.relationship.one":["{count} touching relationship","{count} \u6761\u76F8\u8FDE\u5173\u7CFB"],"viewer.lens.relationship.other":["{count} touching relationships","{count} \u6761\u76F8\u8FDE\u5173\u7CFB"],"viewer.radar.title":["Semantic radar","\u8BED\u4E49\u96F7\u8FBE"],"viewer.radar.building":["Building overview","\u6B63\u5728\u6784\u5EFA\u603B\u89C8"],"viewer.radar.openFull":["Open full semantic radar","\u6253\u5F00\u5B8C\u6574\u8BED\u4E49\u96F7\u8FBE"],"viewer.radar.open":["Open radar","\u6253\u5F00\u96F7\u8FBE"],"viewer.radar.close":["Close semantic radar","\u5173\u95ED\u8BED\u4E49\u96F7\u8FBE"],"viewer.radar.surface":["Diagram overview. Click a node to focus it, or use arrow keys to pan.","\u56FE\u8868\u603B\u89C8\u3002\u70B9\u51FB\u8282\u70B9\u8FDB\u884C\u805A\u7126\uFF0C\u6216\u4F7F\u7528\u65B9\u5411\u952E\u5E73\u79FB\u3002"],"viewer.radar.click":["Click node","\u70B9\u51FB\u8282\u70B9"],"viewer.radar.drag":["Drag to pan","\u62D6\u52A8\u5E73\u79FB"],"viewer.radar.space":["Semantic radar needs more MAP space.","\u8BED\u4E49\u96F7\u8FBE\u9700\u8981\u66F4\u591A\u5730\u56FE\u53EF\u89C1\u7A7A\u95F4\u3002"],"viewer.radar.nodes":["Semantic diagram radar nodes","\u8BED\u4E49\u56FE\u8868\u96F7\u8FBE\u8282\u70B9"],"viewer.radar.focus":["Focus {label} from Semantic Radar","\u4ECE\u8BED\u4E49\u96F7\u8FBE\u805A\u7126{label}"],"viewer.radar.status":["{count} nodes \xB7 {viewport}","{count} \u4E2A\u8282\u70B9 \xB7 {viewport}"],"viewer.radar.fullMap":["{count} nodes \xB7 full map","{count} \u4E2A\u8282\u70B9 \xB7 \u5B8C\u6574\u5730\u56FE"],"viewer.radar.compacted":["Radar compacted to avoid covering the Semantic Passport or MAP controls.","\u5DF2\u6536\u7D27\u96F7\u8FBE\uFF0C\u907F\u514D\u906E\u6321\u8BED\u4E49\u62A4\u7167\u6216\u5730\u56FE\u63A7\u4EF6\u3002"],"viewer.radar.cancelWaiting":["Cancel semantic radar waiting for more MAP space","\u53D6\u6D88\u7B49\u5F85\u66F4\u591A\u5730\u56FE\u7A7A\u95F4\u7684\u8BED\u4E49\u96F7\u8FBE"],"viewer.radar.needsSpace":["Semantic radar needs more visible MAP space","\u8BED\u4E49\u96F7\u8FBE\u9700\u8981\u66F4\u591A\u53EF\u89C1\u5730\u56FE\u7A7A\u95F4"],"viewer.radar.viewport.full":["full map","\u5B8C\u6574\u5730\u56FE"],"viewer.radar.viewport.width":["{percent}% width","\u5BBD\u5EA6 {percent}%"],"viewer.radar.viewport.scale":["{percent}% viewport","\u89C6\u53E3 {percent}%"],"viewer.nav.controls":["Diagram view controls","\u56FE\u8868\u89C6\u56FE\u63A7\u5236"],"viewer.nav.route":["Trace a directed route","\u8FFD\u8E2A\u6709\u5411\u8DEF\u5F84"],"viewer.nav.route.title":["Trace route (R)","\u8FFD\u8E2A\u8DEF\u5F84\uFF08R\uFF09"],"viewer.nav.route.short":["PATH","\u8DEF\u5F84"],"viewer.nav.radar":["Open semantic radar","\u6253\u5F00\u8BED\u4E49\u96F7\u8FBE"],"viewer.nav.radar.title":["Semantic radar (M)","\u8BED\u4E49\u96F7\u8FBE\uFF08M\uFF09"],"viewer.nav.radar.short":["MAP","\u5730\u56FE"],"viewer.nav.lens":["Open semantic lens","\u6253\u5F00\u8BED\u4E49\u900F\u955C"],"viewer.nav.lens.title":["Semantic lens (L)","\u8BED\u4E49\u900F\u955C\uFF08L\uFF09"],"viewer.nav.lens.short":["LENS","\u900F\u955C"],"viewer.nav.find":["Find a node","\u67E5\u627E\u8282\u70B9"],"viewer.nav.find.title":["Find a node (/)","\u67E5\u627E\u8282\u70B9\uFF08/\uFF09"],"viewer.outline.title":["Node index","\u8282\u70B9\u7D22\u5F15"],"viewer.rail.show":["Notes & index","\u8981\u70B9\u4E0E\u7D22\u5F15"],"viewer.rail.controls":["Side panel","\u4FA7\u680F"],"viewer.rail.collapse":["Collapse side panel","\u6536\u8D77\u4FA7\u680F"],"viewer.rail.bottom":["Move panel below the diagram","\u79FB\u5230\u56FE\u4E0B\u65B9"],"viewer.rail.right":["Move panel beside the diagram","\u79FB\u5230\u56FE\u53F3\u4FA7"],"viewer.nav.guide":["Open diagram guide","\u6253\u5F00\u56FE\u8868\u6307\u5357"],"viewer.nav.guide.title":["Diagram guide (?)","\u56FE\u8868\u6307\u5357\uFF08?\uFF09"],"viewer.nav.zoomOut":["Zoom out","\u7F29\u5C0F"],"viewer.nav.zoomOut.title":["Zoom out (-)","\u7F29\u5C0F\uFF08-\uFF09"],"viewer.nav.reset":["Reset diagram view","\u91CD\u7F6E\u56FE\u8868\u89C6\u56FE"],"viewer.nav.reset.title":["Reset view (0)","\u91CD\u7F6E\u89C6\u56FE\uFF080\uFF09"],"viewer.nav.read":["READ","\u9605\u8BFB"],"viewer.nav.zoomIn":["Zoom in","\u653E\u5927"],"viewer.nav.zoomIn.title":["Zoom in (+)","\u653E\u5927\uFF08+\uFF09"],"viewer.nav.camera":["{hint}. Reset diagram view","{hint}\u3002\u91CD\u7F6E\u56FE\u8868\u89C6\u56FE"],"viewer.nav.camera.title":["{semantic}{hint} \xB7 reset view (0)","{semantic}{hint} \xB7 \u91CD\u7F6E\u89C6\u56FE\uFF080\uFF09"],"viewer.nav.camera.semantic":["Semantic camera active \xB7 ","\u8BED\u4E49\u76F8\u673A\u5DF2\u542F\u7528 \xB7 "],"viewer.nav.level.map":["MAP","\u6982\u89C8"],"viewer.nav.level.read":["READ","\u9605\u8BFB"],"viewer.nav.level.full":["FULL","\u5B8C\u6574"],"viewer.nav.level.auto":["AUTO","\u81EA\u52A8"],"viewer.nav.detail.map":["Zoom in to reveal relationship labels and node context","\u653E\u5927\u4EE5\u663E\u793A\u5173\u7CFB\u6807\u7B7E\u548C\u8282\u70B9\u4E0A\u4E0B\u6587"],"viewer.nav.detail.read":["Zoom in again to reveal tags and annotations","\u518D\u6B21\u653E\u5927\u4EE5\u663E\u793A\u6807\u7B7E\u548C\u6CE8\u91CA"],"viewer.nav.detail.full":["Full diagram detail","\u5B8C\u6574\u56FE\u8868\u8BE6\u60C5"],"viewer.intent.summary":["{label}. {out} outgoing, {in} incoming{loops}. {total} connections. Press Enter for details.","{label}\u3002{out} \u6761\u51FA\u5411\uFF0C{in} \u6761\u5165\u5411{loops}\u3002\u5171 {total} \u6761\u8FDE\u63A5\u3002\u6309 Enter \u67E5\u770B\u8BE6\u60C5\u3002"],"viewer.intent.loops":[", {count} self loop","\uFF0C{count} \u6761\u81EA\u73AF"],"viewer.common.copied":["Copied","\u5DF2\u590D\u5236"],"viewer.common.copyFailed":["Copy failed","\u590D\u5236\u5931\u8D25"],"viewer.common.copyLink":["Copy link","\u590D\u5236\u94FE\u63A5"],"viewer.common.clear":["Clear","\u6E05\u9664"],"viewer.common.close":["Close","\u5173\u95ED"]};for(let[e,t]of Object.entries(ve))if(t.length!==we.length||t.some(o=>typeof o!="string"))throw new Error(`Incomplete Archify i18n tuple ${JSON.stringify(e)}`);var ke=Object.fromEntries(we.map((e,t)=>[e,Object.fromEntries(Object.entries(ve).map(([o,i])=>[o,i[t]]))])),Ae=ke.en,st=Object.keys(Ae),lt=/\{([a-zA-Z0-9_]+)\}/g;function dt(e){return new Set([...String(e).matchAll(lt)].map(t=>t[1]))}var kt=Object.fromEntries(st.map(e=>[e,dt(Ae[e])]));var ct=new Map;function K(e){return ct.get(e)||ke[e]}function N(e){return K(e)?e:"en"}function ht(e,t={}){return String(e).replace(/\{([a-zA-Z0-9_]+)\}/g,(o,i)=>Object.hasOwn(t,i)?String(t[i]):o)}function Q(e,t,o={}){let i=N(e),a=K(i);if(!Object.hasOwn(a,t))throw new Error(`Missing Archify i18n message ${JSON.stringify(t)} for ${i}`);return ht(a[t],o)}function Se(e){let t=N(e);return Object.fromEntries(Object.entries(K(t)).filter(([o])=>o.startsWith("viewer.")))}function Le(e,t){return e.replace(/\{\{i18n:([a-zA-Z0-9_.-]+)\}\}/g,(o,i)=>v(Q(t,i)))}var ft=6,mt=11,Lt=ft+mt;function ze(e){return` <!-- Info Cards -->
27583
+ `}};var we=["en","zh-CN"];var it={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};function v(e){return String(e??"").replace(/[&<>"']/g,t=>it[t])}var ve={"page.title":["{title} Diagram","{title}"],"diagram.description.architecture":["An architecture diagram generated by Archify.","\u7531 Archify \u751F\u6210\u7684\u67B6\u6784\u56FE\u3002"],"diagram.description.workflow":["A workflow diagram generated by Archify.","\u7531 Archify \u751F\u6210\u7684\u5DE5\u4F5C\u6D41\u56FE\u3002"],"diagram.description.sequence":["A sequence diagram generated by Archify.","\u7531 Archify \u751F\u6210\u7684\u65F6\u5E8F\u56FE\u3002"],"diagram.description.dataflow":["A data-flow diagram generated by Archify.","\u7531 Archify \u751F\u6210\u7684\u6570\u636E\u6D41\u56FE\u3002"],"diagram.description.lifecycle":["A lifecycle diagram generated by Archify.","\u7531 Archify \u751F\u6210\u7684\u751F\u547D\u5468\u671F\u56FE\u3002"],"node.focus":["Focus {label}","\u805A\u7126{label}"],"node.focus.detail":["Focus {label}, {detail}","\u805A\u7126{label}\uFF0C{detail}"],"node.context.architecture":["Architecture component","\u67B6\u6784\u7EC4\u4EF6"],"node.context.workflow":["Workflow node","\u5DE5\u4F5C\u6D41\u8282\u70B9"],"node.context.sequence":["Sequence participant","\u65F6\u5E8F\u53C2\u4E0E\u8005"],"node.context.dataflow":["Data-flow node","\u6570\u636E\u6D41\u8282\u70B9"],"node.context.lifecycle":["Lifecycle state","\u751F\u547D\u5468\u671F\u72B6\u6001"],"legend.title":["Legend","\u56FE\u4F8B"],"legend.architecture.frontend":["Frontend","\u524D\u7AEF"],"legend.architecture.backend":["Backend","\u540E\u7AEF"],"legend.architecture.database":["Database","\u6570\u636E\u5E93"],"legend.architecture.cloud":["Cloud","\u4E91\u670D\u52A1"],"legend.architecture.security":["Security","\u5B89\u5168"],"legend.architecture.messagebus":["Message bus","\u6D88\u606F\u603B\u7EBF"],"legend.architecture.external":["External","\u5916\u90E8\u7CFB\u7EDF"],"legend.workflow.frontend":["User UI","\u7528\u6237\u754C\u9762"],"legend.workflow.backend":["Agent logic","Agent \u903B\u8F91"],"legend.workflow.security":["Policy","\u7B56\u7565"],"legend.workflow.messagebus":["Tool action","\u5DE5\u5177\u64CD\u4F5C"],"legend.workflow.database":["Context / trace","\u4E0A\u4E0B\u6587 / \u8FFD\u8E2A"],"legend.workflow.cloud":["Cloud service","\u4E91\u670D\u52A1"],"legend.workflow.external":["External system","\u5916\u90E8\u7CFB\u7EDF"],"legend.sequence.emphasis":["main request","\u4E3B\u8DEF\u5F84\u8BF7\u6C42"],"legend.sequence.return":["return","\u8FD4\u56DE"],"legend.sequence.security":["security","\u5B89\u5168"],"legend.sequence.dashed":["async trace","\u5F02\u6B65\u8FFD\u8E2A"],"legend.sequence.default":["message","\u666E\u901A\u6D88\u606F"],"legend.dataflow.emphasis":["primary data","\u4E3B\u8981\u6570\u636E"],"legend.dataflow.security":["policy / PII","\u7B56\u7565 / PII"],"legend.dataflow.dashed":["async batch","\u5F02\u6B65\u6279\u5904\u7406"],"legend.dataflow.database":["data store","\u6570\u636E\u5B58\u50A8"],"legend.dataflow.default":["data flow","\u6570\u636E\u6D41"],"legend.lifecycle.start":["initial state","\u8D77\u70B9"],"legend.lifecycle.active":["active","\u8FDB\u884C\u4E2D"],"legend.lifecycle.waiting":["waiting","\u7B49\u5F85"],"legend.lifecycle.decision":["decision","\u51B3\u7B56"],"legend.lifecycle.success":["success","\u6210\u529F"],"legend.lifecycle.failure":["failure / exit","\u5931\u8D25 / \u9000\u51FA"],"legend.lifecycle.neutral":["neutral","\u4E2D\u6027\u72B6\u6001"],"legend.lifecycle.external":["external","\u5916\u90E8\u72B6\u6001"],"legend.lifecycle.final":["final state","\u7EC8\u6001"],"viewer.kind.frontend":["Frontend","\u524D\u7AEF"],"viewer.kind.backend":["Backend","\u540E\u7AEF"],"viewer.kind.database":["Database","\u6570\u636E\u5E93"],"viewer.kind.cloud":["Cloud","\u4E91\u670D\u52A1"],"viewer.kind.security":["Security","\u5B89\u5168"],"viewer.kind.messagebus":["Message bus","\u6D88\u606F\u603B\u7EBF"],"viewer.kind.external":["External","\u5916\u90E8\u7CFB\u7EDF"],"viewer.kind.neutral":["Neutral","\u4E2D\u6027"],"viewer.kind.node":["Node","\u8282\u70B9"],"viewer.kind.start":["Start","\u5F00\u59CB"],"viewer.kind.active":["Active","\u6D3B\u52A8"],"viewer.kind.waiting":["Waiting","\u7B49\u5F85"],"viewer.kind.decision":["Decision","\u51B3\u7B56"],"viewer.kind.success":["Success","\u6210\u529F"],"viewer.kind.failure":["Failure","\u5931\u8D25"],"viewer.toolbar.actions":["Diagram actions","\u56FE\u8868\u64CD\u4F5C"],"viewer.theme.toggle.title":["Toggle theme (T)","\u5207\u6362\u4E3B\u9898\uFF08T\uFF09"],"viewer.theme.toggle":["Toggle color theme","\u5207\u6362\u989C\u8272\u4E3B\u9898"],"viewer.theme.dark":["Dark","\u6DF1\u8272"],"viewer.theme.light":["Light","\u6D45\u8272"],"viewer.preset.choose.title":["Choose visual style (S cycles)","\u9009\u62E9\u89C6\u89C9\u98CE\u683C\uFF08S \u5FAA\u73AF\u5207\u6362\uFF09"],"viewer.preset.choose":["Choose visual style","\u9009\u62E9\u89C6\u89C9\u98CE\u683C"],"viewer.preset.style":["Style","\u98CE\u683C"],"viewer.preset.menu":["Visual style","\u89C6\u89C9\u98CE\u683C"],"viewer.preset.identity":["Visual identity","\u89C6\u89C9\u8868\u8FBE"],"viewer.preset.cycles":["to cycle","\u5FAA\u73AF\u5207\u6362"],"viewer.preset.classic":["Classic","\u7ECF\u5178"],"viewer.preset.classic.short":["Classic","\u7ECF\u5178"],"viewer.preset.classic.hint":["Stable technical default","\u7A33\u5B9A\u7684\u6280\u672F\u9ED8\u8BA4\u98CE\u683C"],"viewer.preset.flow":["Signal Flow","\u4FE1\u53F7\u6D41"],"viewer.preset.flow.short":["Flow","\u6D41\u52A8"],"viewer.preset.flow.hint":["Motion-forward presentation","\u7A81\u51FA\u52A8\u6001\u6D41\u5411"],"viewer.preset.blueprint":["Blueprint","\u84DD\u56FE"],"viewer.preset.blueprint.hint":["Engineering review","\u5DE5\u7A0B\u8BC4\u5BA1"],"viewer.preset.editorial":["Editorial","\u7F16\u8F91\u98CE\u683C"],"viewer.preset.editorial.hint":["Publication and launch notes","\u9002\u5408\u53D1\u5E03\u4E0E\u4E0A\u7EBF\u8BF4\u660E"],"viewer.preset.badge.signalFlow":["SIGNAL FLOW","\u4FE1\u53F7\u6D41"],"viewer.preset.badge.blueprint":["BLUEPRINT / REV 01","\u84DD\u56FE / \u4FEE\u8BA2 01"],"viewer.preset.badge.editorial":["EDITORIAL / FIELD NOTE","\u7F16\u8F91\u98CE\u683C / \u73B0\u573A\u7B14\u8BB0"],"viewer.preset.badge.editorialPlate":["ARCHIFY / PLATE 04","ARCHIFY / \u56FE\u7248 04"],"viewer.preset.current":["Visual style: {style}. Choose visual style","\u5F53\u524D\u89C6\u89C9\u98CE\u683C\uFF1A{style}\u3002\u9009\u62E9\u89C6\u89C9\u98CE\u683C"],"viewer.motion.live":["Live","\u52A8\u6001"],"viewer.motion.still":["Still","\u9759\u6001"],"viewer.motion.pause":["Pause motion","\u6682\u505C\u52A8\u6548"],"viewer.motion.resume":["Resume motion","\u6062\u590D\u52A8\u6548"],"viewer.motion.reduced":["Motion paused by reduced-motion preference","\u5DF2\u6839\u636E\u51CF\u5C11\u52A8\u6001\u6548\u679C\u504F\u597D\u6682\u505C\u52A8\u6548"],"viewer.motion.hidden":["Motion paused while this page is hidden","\u9875\u9762\u4E0D\u53EF\u89C1\u65F6\u5DF2\u6682\u505C\u52A8\u6548"],"viewer.motion.yielding":["Pause motion; currently yielding to {owner}","\u6682\u505C\u52A8\u6548\uFF1B\u5F53\u524D\u8BA9\u4F4D\u4E8E{owner}"],"viewer.motion.yielding.title":["Live preview enabled \xB7 yielding to {owner}","\u52A8\u6001\u9884\u89C8\u5DF2\u542F\u7528 \xB7 \u6B63\u5728\u8BA9\u4F4D\u4E8E{owner}"],"viewer.owner.route":["Route Probe","\u8DEF\u5F84\u63A2\u6D4B"],"viewer.owner.lens":["Semantic Lens","\u8BED\u4E49\u900F\u955C"],"viewer.owner.relationship":["Relationship Preview","\u5173\u7CFB\u9884\u89C8"],"viewer.owner.intent":["Intent Trace","\u610F\u56FE\u8FFD\u8E2A"],"viewer.owner.focus":["semantic focus","\u8BED\u4E49\u805A\u7126"],"viewer.owner.legend":["legend preview","\u56FE\u4F8B\u9884\u89C8"],"viewer.owner.reader":["reader interaction","\u8BFB\u8005\u4EA4\u4E92"],"viewer.present.enter":["Enter presentation stage","\u8FDB\u5165\u6F14\u793A\u6A21\u5F0F"],"viewer.present.enter.title":["Presentation stage (F)","\u6F14\u793A\u6A21\u5F0F\uFF08F\uFF09"],"viewer.present.exit":["Exit presentation stage","\u9000\u51FA\u6F14\u793A\u6A21\u5F0F"],"viewer.present.exit.title":["Exit presentation stage (F or Escape)","\u9000\u51FA\u6F14\u793A\u6A21\u5F0F\uFF08F \u6216 Escape\uFF09"],"viewer.present.present":["Present","\u6F14\u793A"],"viewer.present.exit.label":["Exit","\u9000\u51FA"],"viewer.export.button":["Export","\u5BFC\u51FA"],"viewer.export.button.title":["Export diagram (E)","\u5BFC\u51FA\u56FE\u8868\uFF08E\uFF09"],"viewer.export.diagram":["Export diagram","\u5BFC\u51FA\u56FE\u8868"],"viewer.export.menu":["Export","\u5BFC\u51FA"],"viewer.export.subtitle":["Portable, clean outputs","\u4FBF\u643A\u3001\u6574\u6D01\u7684\u8F93\u51FA"],"viewer.export.share":["Share","\u5206\u4EAB"],"viewer.export.shareCard":["Share Card","\u5206\u4EAB\u5361\u7247"],"viewer.export.routeShareCard":["Route Share Card","\u8DEF\u5F84\u5206\u4EAB\u5361\u7247"],"viewer.export.reachShareCard":["Reach Share Card","\u53EF\u8FBE\u8303\u56F4\u5206\u4EAB\u5361\u7247"],"viewer.export.copyDiagram":["Copy diagram","\u590D\u5236\u56FE\u8868"],"viewer.export.clipboardPng":["PNG to clipboard","\u590D\u5236 PNG \u5230\u526A\u8D34\u677F"],"viewer.export.raster":["Raster images","\u4F4D\u56FE"],"viewer.export.image":["Image","\u56FE\u50CF"],"viewer.export.lossless":["Lossless image","\u65E0\u635F\u56FE\u50CF"],"viewer.export.compact":["Compact image","\u7D27\u51D1\u56FE\u50CF"],"viewer.export.modern":["Modern image","\u73B0\u4EE3\u56FE\u50CF\u683C\u5F0F"],"viewer.export.vectorMotion":["Vector and motion","\u77E2\u91CF\u4E0E\u52A8\u6548"],"viewer.export.vectorMotion.heading":["Vector & motion","\u77E2\u91CF\u4E0E\u52A8\u6548"],"viewer.export.editable":["Editable vector","\u53EF\u7F16\u8F91\u77E2\u91CF\u56FE"],"viewer.export.svg.auto":["SVG \xB7 Auto","SVG \xB7 \u81EA\u52A8"],"viewer.export.svg.auto.hint":["Matches host theme","\u5339\u914D\u5BBF\u4E3B\u4E3B\u9898"],"viewer.export.svg.light":["SVG \xB7 Light","SVG \xB7 \u6D45\u8272"],"viewer.export.svg.light.hint":["Always light","\u59CB\u7EC8\u6D45\u8272"],"viewer.export.svg.dark":["SVG \xB7 Dark","SVG \xB7 \u6DF1\u8272"],"viewer.export.svg.dark.hint":["Always dark","\u59CB\u7EC8\u6DF1\u8272"],"viewer.export.motion6s":["6s motion","6 \u79D2\u52A8\u6548"],"viewer.export.unsupported":["Not supported by this browser","\u5F53\u524D\u6D4F\u89C8\u5668\u4E0D\u652F\u6301"],"viewer.export.clipboardUnsupported":["Clipboard image write not supported by this browser","\u5F53\u524D\u6D4F\u89C8\u5668\u4E0D\u652F\u6301\u5199\u5165\u56FE\u7247\u526A\u8D34\u677F"],"viewer.export.clipboardUnsupported.short":["Clipboard image write not supported in this browser.","\u6B64\u6D4F\u89C8\u5668\u4E0D\u652F\u6301\u5199\u5165\u56FE\u7247\u526A\u8D34\u677F\u3002"],"viewer.export.motionUnavailable":["Motion capture unavailable in this browser","\u5F53\u524D\u6D4F\u89C8\u5668\u65E0\u6CD5\u5F55\u5236\u52A8\u6548"],"viewer.export.webmUnavailable":["WebM unavailable in this browser","\u5F53\u524D\u6D4F\u89C8\u5668\u4E0D\u652F\u6301 WebM"],"viewer.export.failed":["Export failed: {message}","\u5BFC\u51FA\u5931\u8D25\uFF1A{message}"],"viewer.export.unknownVariant":["Unknown Share Card variant: {variant}","\u672A\u77E5\u7684\u5206\u4EAB\u5361\u7247\u7C7B\u578B\uFF1A{variant}"],"viewer.export.routeRequired":["Trace a route before exporting a Route Share Card","\u8BF7\u5148\u8FFD\u8E2A\u8DEF\u5F84\uFF0C\u518D\u5BFC\u51FA\u8DEF\u5F84\u5206\u4EAB\u5361\u7247"],"viewer.export.reachRequired":["Trace authored reach before exporting a Reach Share Card","\u8BF7\u5148\u8FFD\u8E2A\u7F16\u5199\u53EF\u8FBE\u8303\u56F4\uFF0C\u518D\u5BFC\u51FA\u53EF\u8FBE\u8303\u56F4\u5206\u4EAB\u5361\u7247"],"viewer.export.unknown":["unknown","\u672A\u77E5\u9519\u8BEF"],"viewer.export.routeFailed":["Route Share Card export failed: {message}","\u8DEF\u5F84\u5206\u4EAB\u5361\u7247\u5BFC\u51FA\u5931\u8D25\uFF1A{message}"],"viewer.export.reachFailed":["Reach Share Card export failed: {message}","\u53EF\u8FBE\u8303\u56F4\u5206\u4EAB\u5361\u7247\u5BFC\u51FA\u5931\u8D25\uFF1A{message}"],"viewer.export.copyFailed":["Copy failed: {message}","\u590D\u5236\u5931\u8D25\uFF1A{message}"],"viewer.export.copiedPng":["Copied PNG to clipboard","\u5DF2\u5C06 PNG \u590D\u5236\u5230\u526A\u8D34\u677F"],"viewer.export.downloadedRoute":["Downloaded Route Share Card","\u5DF2\u4E0B\u8F7D\u8DEF\u5F84\u5206\u4EAB\u5361\u7247"],"viewer.export.downloadedReach":["Downloaded Reach Share Card","\u5DF2\u4E0B\u8F7D\u53EF\u8FBE\u8303\u56F4\u5206\u4EAB\u5361\u7247"],"viewer.export.downloadedWebm":["Downloaded WebM","\u5DF2\u4E0B\u8F7D WebM"],"viewer.export.recording":["Recording 6 seconds of motion\u2026","\u6B63\u5728\u5F55\u5236 6 \u79D2\u52A8\u6548\u2026"],"viewer.export.card.routeSummary.one":["Path: {source} \u2192 {target} \xB7 {count} step","\u8DEF\u5F84\uFF1A{source} \u2192 {target} \xB7 {count} \u6B65"],"viewer.export.card.routeSummary.other":["Path: {source} \u2192 {target} \xB7 {count} steps","\u8DEF\u5F84\uFF1A{source} \u2192 {target} \xB7 {count} \u6B65"],"viewer.export.card.reachSummary":["Authored {direction} from {origin} \xB7 {nodes} \xB7 {links} \xB7 max {hops}","\u4ECE{origin}\u5F00\u59CB\u7684\u7F16\u5199{direction} \xB7 {nodes} \xB7 {links} \xB7 \u6700\u6DF1 {hops}"],"viewer.export.card.node.one":["{count} node","{count} \u4E2A\u8282\u70B9"],"viewer.export.card.node.other":["{count} nodes","{count} \u4E2A\u8282\u70B9"],"viewer.export.card.link.one":["{count} link","{count} \u6761\u8FDE\u63A5"],"viewer.export.card.link.other":["{count} links","{count} \u6761\u8FDE\u63A5"],"viewer.export.card.hop.one":["{count} hop","{count} \u8DF3"],"viewer.export.card.hop.other":["{count} hops","{count} \u8DF3"],"viewer.export.card.routeBadge":["ARCHIFY \xB7 ROUTE \xB7 {hops}","ARCHIFY \xB7 \u8DEF\u5F84 \xB7 {hops}"],"viewer.export.card.reachBadge":["ARCHIFY \xB7 {direction} REACH","ARCHIFY \xB7 {direction}\u53EF\u8FBE\u8303\u56F4"],"viewer.export.direction.upstream":["Upstream","\u4E0A\u6E38"],"viewer.export.direction.downstream":["Downstream","\u4E0B\u6E38"],"viewer.export.error.canvasUnavailable":["Canvas unavailable for {label}","\u65E0\u6CD5\u4E3A{label}\u4F7F\u7528\u753B\u5E03"],"viewer.export.error.contextUnavailable":["2D canvas context unavailable for {label}","\u65E0\u6CD5\u4E3A{label}\u521B\u5EFA\u4E8C\u7EF4\u753B\u5E03\u4E0A\u4E0B\u6587"],"viewer.export.error.toBlobUnavailable":["canvas.toBlob unavailable for {label}","{label}\u65E0\u6CD5\u4F7F\u7528 canvas.toBlob"],"viewer.export.error.toBlobNull":["canvas.toBlob returned no data for {label}","{label}\u7684 canvas.toBlob \u672A\u8FD4\u56DE\u6570\u636E"],"viewer.export.error.variantsCombined":["Share Card variants cannot be combined","\u65E0\u6CD5\u540C\u65F6\u7EC4\u5408\u591A\u79CD\u5206\u4EAB\u5361\u7247\u7C7B\u578B"],"viewer.export.error.viewerState":["Share Card export could not remove temporary viewer state","\u5206\u4EAB\u5361\u7247\u5BFC\u51FA\u65E0\u6CD5\u79FB\u9664\u4E34\u65F6 Viewer \u72B6\u6001"],"viewer.export.error.routeState":["Route Card export could not preserve the resolved route safely","\u8DEF\u5F84\u5361\u7247\u5BFC\u51FA\u65E0\u6CD5\u5B89\u5168\u4FDD\u7559\u5DF2\u89E3\u6790\u8DEF\u5F84"],"viewer.export.error.reachState":["Reach Card export could not preserve authored reach safely","\u53EF\u8FBE\u8303\u56F4\u5361\u7247\u5BFC\u51FA\u65E0\u6CD5\u5B89\u5168\u4FDD\u7559\u7F16\u5199\u7684\u53EF\u8FBE\u8303\u56F4"],"viewer.export.error.webmRequirements":["WebM motion export requires a trace animation and browser MediaRecorder support","WebM \u52A8\u6548\u5BFC\u51FA\u9700\u8981\u8FFD\u8E2A\u52A8\u753B\u53CA\u6D4F\u89C8\u5668 MediaRecorder \u652F\u6301"],"viewer.export.error.mediaRecorder":["MediaRecorder failed","MediaRecorder \u5F55\u5236\u5931\u8D25"],"viewer.export.error.emptyWebm":["MediaRecorder produced an empty WebM","MediaRecorder \u751F\u6210\u4E86\u7A7A\u7684 WebM"],"viewer.export.error.webmBackground":["SVG background could not be loaded for WebM export","\u65E0\u6CD5\u4E3A WebM \u5BFC\u51FA\u52A0\u8F7D SVG \u80CC\u666F"],"viewer.guide.title":["Explore this system","\u63A2\u7D22\u6B64\u7CFB\u7EDF"],"viewer.focus.selectedNodes":["{count} selected nodes","\u5DF2\u9009\u62E9 {count} \u4E2A\u8282\u70B9"],"viewer.guide.eyebrow":["Diagram guide","\u56FE\u8868\u6307\u5357"],"viewer.guide.close":["Close diagram guide","\u5173\u95ED\u56FE\u8868\u6307\u5357"],"viewer.guide.inspecting":["Inspecting compiled semantics","\u6B63\u5728\u68C0\u67E5\u5DF2\u7F16\u8BD1\u8BED\u4E49"],"viewer.guide.actions":["Diagram exploration actions","\u56FE\u8868\u63A2\u7D22\u64CD\u4F5C"],"viewer.guide.find":["Find any node","\u67E5\u627E\u4EFB\u610F\u8282\u70B9"],"viewer.guide.find.hint":["Search labels, responsibilities, kinds, and stable IDs.","\u641C\u7D22\u6807\u7B7E\u3001\u804C\u8D23\u3001\u7C7B\u578B\u548C\u7A33\u5B9A ID\u3002"],"viewer.guide.route":["Trace a route","\u8FFD\u8E2A\u8DEF\u5F84"],"viewer.guide.route.aria":["Trace a directed route","\u8FFD\u8E2A\u6709\u5411\u8DEF\u5F84"],"viewer.guide.route.hint":["Ask how two semantic nodes connect in authored direction.","\u67E5\u770B\u4E24\u4E2A\u8BED\u4E49\u8282\u70B9\u5982\u4F55\u6309\u7F16\u5199\u65B9\u5411\u8FDE\u63A5\u3002"],"viewer.guide.map":["See the whole system","\u67E5\u770B\u5B8C\u6574\u7CFB\u7EDF"],"viewer.guide.map.hint":["Open Semantic Radar with a live viewport and stable nodes.","\u6253\u5F00\u5E26\u5B9E\u65F6\u89C6\u53E3\u548C\u7A33\u5B9A\u8282\u70B9\u7684\u8BED\u4E49\u96F7\u8FBE\u3002"],"viewer.guide.lens":["Compare semantic kinds","\u6BD4\u8F83\u8BED\u4E49\u7C7B\u578B"],"viewer.guide.lens.hint":["Count roles, reveal their traffic, and compare direct authored links.","\u7EDF\u8BA1\u89D2\u8272\u3001\u663E\u793A\u6D41\u91CF\u5E76\u6BD4\u8F83\u76F4\u63A5\u7F16\u5199\u7684\u8FDE\u63A5\u3002"],"viewer.guide.present":["Enter Presentation Stage","\u8FDB\u5165\u6F14\u793A\u6A21\u5F0F"],"viewer.guide.present.hint":["Give the live diagram the viewport without changing export.","\u8BA9\u5B9E\u65F6\u56FE\u8868\u5360\u6EE1\u89C6\u53E3\uFF0C\u540C\u65F6\u4E0D\u6539\u53D8\u5BFC\u51FA\u3002"],"viewer.guide.shortcuts":["Additional keyboard shortcuts","\u5176\u4ED6\u952E\u76D8\u5FEB\u6377\u952E"],"viewer.guide.shortcut.export":["Export","\u5BFC\u51FA"],"viewer.guide.shortcut.theme":["Theme","\u4E3B\u9898"],"viewer.guide.shortcut.style":["Style","\u98CE\u683C"],"viewer.guide.shortcut.reset":["Reset","\u91CD\u7F6E"],"viewer.guide.shortcut.zoomIn":["Zoom in","\u653E\u5927"],"viewer.guide.shortcut.zoomOut":["Zoom out","\u7F29\u5C0F"],"viewer.guide.shortcut.close":["Close","\u5173\u95ED"],"viewer.guide.facts":["{nodes} \xB7 {relationships}","{nodes} \xB7 {relationships}"],"viewer.guide.fact.node.one":["{count} semantic node","{count} \u4E2A\u8BED\u4E49\u8282\u70B9"],"viewer.guide.fact.node.other":["{count} semantic nodes","{count} \u4E2A\u8BED\u4E49\u8282\u70B9"],"viewer.guide.fact.relationship.one":["{count} relationship","{count} \u6761\u5173\u7CFB"],"viewer.guide.fact.relationship.other":["{count} relationships","{count} \u6761\u5173\u7CFB"],"viewer.guide.open":["Open diagram guide","\u6253\u5F00\u56FE\u8868\u6307\u5357"],"viewer.finder.title":["Find a node","\u67E5\u627E\u8282\u70B9"],"viewer.finder.close":["Close node finder","\u5173\u95ED\u8282\u70B9\u67E5\u627E\u5668"],"viewer.finder.placeholder":["Search labels or IDs","\u641C\u7D22\u6807\u7B7E\u6216 ID"],"viewer.finder.search":["Search diagram nodes","\u641C\u7D22\u56FE\u8868\u8282\u70B9"],"viewer.finder.results":["Diagram nodes","\u56FE\u8868\u8282\u70B9"],"viewer.finder.empty":["No matching nodes","\u6CA1\u6709\u5339\u914D\u7684\u8282\u70B9"],"viewer.finder.result.focus":["Focus {label}","\u805A\u7126{label}"],"viewer.finder.result.routeStart":["Choose {label} as route start","\u9009\u62E9{label}\u4F5C\u4E3A\u8DEF\u5F84\u8D77\u70B9"],"viewer.finder.result.routeTarget":["Choose {label} as route destination, {links}","\u9009\u62E9{label}\u4F5C\u4E3A\u8DEF\u5F84\u7EC8\u70B9\uFF0C{links}"],"viewer.finder.status.empty":["No matching nodes","\u6CA1\u6709\u5339\u914D\u7684\u8282\u70B9"],"viewer.finder.status.count.one":["{count} matching node","{count} \u4E2A\u5339\u914D\u8282\u70B9"],"viewer.finder.status.count.other":["{count} matching nodes","{count} \u4E2A\u5339\u914D\u8282\u70B9"],"viewer.finder.noun.nodes":["nodes","\u4E2A\u8282\u70B9"],"viewer.finder.link.one":["{count} link","{count} \u6761\u8FDE\u63A5"],"viewer.finder.link.other":["{count} links","{count} \u6761\u8FDE\u63A5"],"viewer.finder.result.focus.one":["Focus {label}, {count} related connection","\u805A\u7126{label}\uFF0C{count} \u6761\u76F8\u5173\u8FDE\u63A5"],"viewer.finder.result.focus.other":["Focus {label}, {count} related connections","\u805A\u7126{label}\uFF0C{count} \u6761\u76F8\u5173\u8FDE\u63A5"],"viewer.finder.status.filtered":["{visible} of {available} {noun}","{visible}/{available} {noun}"],"viewer.finder.status.all":["{available} {noun}","{available} {noun}"],"viewer.passport.eyebrow":["Semantic passport","\u8BED\u4E49\u62A4\u7167"],"viewer.passport.metadata":["Node metadata","\u8282\u70B9\u5143\u6570\u636E"],"viewer.passport.evidence":["Verified source evidence","\u5DF2\u9A8C\u8BC1\u7684\u6E90\u4EE3\u7801\u8BC1\u636E"],"viewer.passport.verified":["Verified source","\u5DF2\u9A8C\u8BC1\u6765\u6E90"],"viewer.passport.verificationScope":["Verified against local Git at the pinned revision. Remote access has not been checked.","\u5DF2\u6309\u56FA\u5B9A\u4FEE\u8BA2\u7248\u672C\u9A8C\u8BC1\u672C\u5730 Git \u8BC1\u636E\uFF0C\u672A\u68C0\u67E5\u8FDC\u7A0B\u8BBF\u95EE\u6743\u9650\u3002"],"viewer.passport.reach":["Authored reach","\u7F16\u5199\u53EF\u8FBE\u8303\u56F4"],"viewer.passport.reach.trace":["Trace authored reachability","\u8FFD\u8E2A\u7F16\u5199\u7684\u53EF\u8FBE\u6027"],"viewer.passport.upstream":["Upstream","\u4E0A\u6E38"],"viewer.passport.downstream":["Downstream","\u4E0B\u6E38"],"viewer.passport.upstream.trace":["Trace upstream authored reachability","\u8FFD\u8E2A\u4E0A\u6E38\u7F16\u5199\u53EF\u8FBE\u6027"],"viewer.passport.downstream.trace":["Trace downstream authored reachability","\u8FFD\u8E2A\u4E0B\u6E38\u7F16\u5199\u53EF\u8FBE\u6027"],"viewer.passport.close":["Close semantic passport","\u5173\u95ED\u8BED\u4E49\u62A4\u7167"],"viewer.passport.move":["Move semantic passport. Drag, use arrow keys, or press Home to reset.","\u79FB\u52A8\u8BED\u4E49\u62A4\u7167\u3002\u53EF\u62D6\u52A8\u3001\u4F7F\u7528\u65B9\u5411\u952E\u79FB\u52A8\uFF0C\u6216\u6309 Home \u6062\u590D\u81EA\u52A8\u4F4D\u7F6E\u3002"],"viewer.passport.copy":["Copy link","\u590D\u5236\u94FE\u63A5"],"viewer.passport.copy.focus":["Copy link to focused node","\u590D\u5236\u805A\u7126\u8282\u70B9\u7684\u94FE\u63A5"],"viewer.passport.relations":["Relations","\u5173\u7CFB"],"viewer.passport.relations.show":["Show connected relationships","\u663E\u793A\u5173\u8054\u5173\u7CFB"],"viewer.passport.relations.hide":["Hide connected relationships","\u9690\u85CF\u5173\u8054\u5173\u7CFB"],"viewer.passport.relations.list":["Connected relationships","\u5173\u8054\u5173\u7CFB"],"viewer.passport.copyRelation":["Copy relation","\u590D\u5236\u5173\u7CFB"],"viewer.passport.copyNode":["Copy node","\u590D\u5236\u8282\u70B9"],"viewer.passport.copyPinned":["Copy link to pinned relationship","\u590D\u5236\u56FA\u5B9A\u5173\u7CFB\u7684\u94FE\u63A5"],"viewer.passport.copySource":["Copy link to source node","\u590D\u5236\u6765\u6E90\u8282\u70B9\u7684\u94FE\u63A5"],"viewer.passport.copy.focused.success":["Focused node link copied","\u5DF2\u590D\u5236\u805A\u7126\u8282\u70B9\u94FE\u63A5"],"viewer.passport.copy.pinned.success":["Pinned relationship link copied","\u5DF2\u590D\u5236\u56FA\u5B9A\u5173\u7CFB\u94FE\u63A5"],"viewer.passport.copy.focused.failed":["Could not copy focused node link","\u65E0\u6CD5\u590D\u5236\u805A\u7126\u8282\u70B9\u94FE\u63A5"],"viewer.passport.copy.pinned.failed":["Could not copy pinned relationship link","\u65E0\u6CD5\u590D\u5236\u56FA\u5B9A\u5173\u7CFB\u94FE\u63A5"],"viewer.passport.relationship.none":["No connected relationships","\u6CA1\u6709\u5173\u8054\u5173\u7CFB"],"viewer.passport.relationship.count.one":["{count} relation","{count} \u6761\u5173\u7CFB"],"viewer.passport.relationship.count.other":["{count} relations","{count} \u6761\u5173\u7CFB"],"viewer.passport.relationship.show.one":["Show {count} connected relationship","\u663E\u793A {count} \u6761\u5173\u8054\u5173\u7CFB"],"viewer.passport.relationship.show.other":["Show {count} connected relationships","\u663E\u793A {count} \u6761\u5173\u8054\u5173\u7CFB"],"viewer.passport.relationship.summary":["{out} outgoing \xB7 {in} incoming{loops}","{out} \u6761\u51FA\u5411 \xB7 {in} \u6761\u5165\u5411{loops}"],"viewer.passport.relationship.loops":[" \xB7 {count} loop"," \xB7 {count} \u6761\u81EA\u73AF"],"viewer.passport.relationship.explorer":["Direct relationship explorer","\u76F4\u63A5\u5173\u7CFB\u6D4F\u89C8\u5668"],"viewer.passport.relationship.help":["Use arrow keys to explore relationships. Press Enter or Space to pin details; Escape clears.","\u4F7F\u7528\u65B9\u5411\u952E\u6D4F\u89C8\u5173\u7CFB\u3002\u6309 Enter \u6216\u7A7A\u683C\u952E\u56FA\u5B9A\u8BE6\u60C5\uFF1B\u6309 Escape \u6E05\u9664\u3002"],"viewer.passport.relationship.loopsBack":["loops back","\u56DE\u73AF"],"viewer.passport.relationship.connectsTo":["connects to","\u8FDE\u63A5\u5230"],"viewer.passport.relationship.connectsFrom":["connects from","\u8FDE\u63A5\u81EA"],"viewer.passport.relationship.pinned":["Pinned relationship \xB7 {from} \u2192 {to} \xB7 {label}","\u5DF2\u56FA\u5B9A\u5173\u7CFB \xB7 {from} \u2192 {to} \xB7 {label}"],"viewer.passport.relationship.inspect":["Inspect relationship {index} of {total}: {from} to {to}, {label}. Press Enter for details.","\u68C0\u67E5\u7B2C {index}/{total} \u6761\u5173\u7CFB\uFF1A{from} \u5230 {to}\uFF0C{label}\u3002\u6309 Enter \u67E5\u770B\u8BE6\u60C5\u3002"],"viewer.passport.relationship.group.out":["Outgoing","\u51FA\u5411"],"viewer.passport.relationship.group.in":["Incoming","\u5165\u5411"],"viewer.passport.relationship.group.loop":["Self loops","\u81EA\u73AF"],"viewer.passport.relationship.row":["{group}: {relationship}, {neighbor}","{group}\uFF1A{relationship}\uFF0C{neighbor}"],"viewer.passport.relationship.direction.out":["OUT \u2192","\u51FA \u2192"],"viewer.passport.relationship.direction.in":["\u2190 IN","\u2190 \u5165"],"viewer.passport.relationship.direction.loop":["LOOP","\u81EA\u73AF"],"viewer.passport.sourceCount.one":["{count} verified source reference","{count} \u4E2A\u5DF2\u9A8C\u8BC1\u6765\u6E90\u5F15\u7528"],"viewer.passport.sourceCount.other":["{count} verified source references","{count} \u4E2A\u5DF2\u9A8C\u8BC1\u6765\u6E90\u5F15\u7528"],"viewer.passport.sourceMarker":["SRC","\u6765\u6E90"],"viewer.passport.beacon.one":["{count} verified source; focus this node to inspect","{count} \u4E2A\u5DF2\u9A8C\u8BC1\u6765\u6E90\uFF1B\u805A\u7126\u6B64\u8282\u70B9\u4EE5\u68C0\u67E5"],"viewer.passport.beacon.other":["{count} verified sources; focus this node to inspect","{count} \u4E2A\u5DF2\u9A8C\u8BC1\u6765\u6E90\uFF1B\u805A\u7126\u6B64\u8282\u70B9\u4EE5\u68C0\u67E5"],"viewer.passport.repository.open":["Open verified repository revision {revision}","\u6253\u5F00\u5DF2\u9A8C\u8BC1\u7684\u4ED3\u5E93\u4FEE\u8BA2\u7248\u672C {revision}"],"viewer.passport.source.open":["Open verified source {path} at revision {revision}","\u6253\u5F00\u4FEE\u8BA2\u7248\u672C {revision} \u4E2D\u5DF2\u9A8C\u8BC1\u7684\u6765\u6E90 {path}"],"viewer.passport.source.openLink":["Open \u2197","\u6253\u5F00 \u2197"],"viewer.passport.reach.upstream.one":["Trace {count} upstream authored node","\u8FFD\u8E2A {count} \u4E2A\u4E0A\u6E38\u7F16\u5199\u8282\u70B9"],"viewer.passport.reach.upstream.other":["Trace {count} upstream authored nodes","\u8FFD\u8E2A {count} \u4E2A\u4E0A\u6E38\u7F16\u5199\u8282\u70B9"],"viewer.passport.reach.downstream.one":["Trace {count} downstream authored node","\u8FFD\u8E2A {count} \u4E2A\u4E0B\u6E38\u7F16\u5199\u8282\u70B9"],"viewer.passport.reach.downstream.other":["Trace {count} downstream authored nodes","\u8FFD\u8E2A {count} \u4E2A\u4E0B\u6E38\u7F16\u5199\u8282\u70B9"],"viewer.passport.reach.noUpstream":["No upstream authored nodes","\u6CA1\u6709\u4E0A\u6E38\u7F16\u5199\u8282\u70B9"],"viewer.passport.reach.noDownstream":["No downstream authored nodes","\u6CA1\u6709\u4E0B\u6E38\u7F16\u5199\u8282\u70B9"],"viewer.passport.reach.status":["{direction} \xB7 {nodes} nodes \xB7 {links} links \xB7 max {hops} hops","{direction} \xB7 {nodes} \u4E2A\u8282\u70B9 \xB7 {links} \u6761\u8FDE\u63A5 \xB7 \u6700\u6DF1 {hops} \u8DF3"],"viewer.route.eyebrow":["Path","\u8DEF\u5F84"],"viewer.route.start":["Click where the path starts","\u70B9\u51FB\u8DEF\u5F84\u7684\u8D77\u70B9"],"viewer.route.start.find":["Find start","\u67E5\u627E\u8D77\u70B9"],"viewer.route.start.find.aria":["Find a route start","\u67E5\u627E\u8DEF\u5F84\u8D77\u70B9"],"viewer.route.copy":["Copy link","\u590D\u5236\u94FE\u63A5"],"viewer.route.copy.aria":["Copy link to traced route","\u590D\u5236\u5DF2\u8FFD\u8E2A\u8DEF\u5F84\u7684\u94FE\u63A5"],"viewer.route.clear":["Clear","\u6E05\u9664"],"viewer.route.clear.aria":["Clear route probe","\u6E05\u9664\u8DEF\u5F84\u63A2\u6D4B"],"viewer.route.traced":["Path","\u8DEF\u5F84"],"viewer.route.pickTwo":["Click two nodes on the diagram","\u5728\u56FE\u4E0A\u70B9\u4E24\u4E2A\u8282\u70B9"],"viewer.route.pickOne":["Click a node on the diagram","\u5728\u56FE\u4E0A\u70B9\u4E00\u4E2A\u8282\u70B9"],"viewer.route.controls":["Route journey controls","\u8DEF\u5F84\u65C5\u7A0B\u63A7\u5236"],"viewer.route.previous":["Previous route position","\u4E0A\u4E00\u4E2A\u8DEF\u5F84\u4F4D\u7F6E"],"viewer.route.play":["Play route journey","\u64AD\u653E\u8DEF\u5F84\u65C5\u7A0B"],"viewer.route.pause":["Pause route journey","\u6682\u505C\u8DEF\u5F84\u65C5\u7A0B"],"viewer.route.replay":["Replay route journey","\u91CD\u64AD\u8DEF\u5F84\u65C5\u7A0B"],"viewer.route.next":["Next route position","\u4E0B\u4E00\u4E2A\u8DEF\u5F84\u4F4D\u7F6E"],"viewer.route.journey":["Journey","\u65C5\u7A0B"],"viewer.route.pause.label":["Pause","\u6682\u505C"],"viewer.route.replay.label":["Replay","\u91CD\u64AD"],"viewer.route.overview":["Overview","\u603B\u89C8"],"viewer.route.overview.aria":["Show complete route overview","\u663E\u793A\u5B8C\u6574\u8DEF\u5F84\u603B\u89C8"],"viewer.route.instructions":["Click a start, then an end. Paths follow the arrows.","\u5148\u70B9\u8D77\u70B9\uFF0C\u518D\u70B9\u7EC8\u70B9\uFF0C\u6CBF\u7BAD\u5934\u65B9\u5411\u627E\u8DEF\u3002"],"viewer.route.destination":["Where does the path from {label} end?","\u4ECE{label}\u51FA\u53D1\uFF0C\u8D70\u5230\u54EA\u91CC\uFF1F"],"viewer.route.destination.find":["Find target","\u67E5\u627E\u76EE\u6807"],"viewer.route.destination.find.aria":["Find a reachable route destination","\u67E5\u627E\u53EF\u8FBE\u7684\u8DEF\u5F84\u76EE\u6807"],"viewer.route.differentDestination":["Choose a different destination","\u9009\u62E9\u5176\u4ED6\u76EE\u6807"],"viewer.route.distinct":["Pick two different nodes.","\u8BF7\u9009\u4E24\u4E2A\u4E0D\u540C\u7684\u8282\u70B9\u3002"],"viewer.route.unreachable":["Cannot reach {label} from here","\u8D70\u4E0D\u5230{label}"],"viewer.route.unreachable.detail":["{target} cannot be reached from {source} along the arrows. Pick a highlighted node.","\u6CBF\u7BAD\u5934\u65B9\u5411\uFF0C\u4ECE{source}\u8D70\u4E0D\u5230{target}\u3002\u8BF7\u9009\u4E00\u4E2A\u9AD8\u4EAE\u8282\u70B9\u3002"],"viewer.route.start.instructions":["Next, pick the end. Only nodes you can reach will light up.","\u63A5\u7740\u9009\u7EC8\u70B9\uFF0C\u80FD\u8D70\u5230\u7684\u8282\u70B9\u4F1A\u4EAE\u8D77\u3002"],"viewer.route.copy.success":["Traced route link copied","\u5DF2\u590D\u5236\u8DEF\u5F84\u94FE\u63A5"],"viewer.route.copy.failed":["Could not copy traced route link","\u65E0\u6CD5\u590D\u5236\u8DEF\u5F84\u94FE\u63A5"],"viewer.route.position":["Route position {index} of {total}: {label}","\u8DEF\u5F84\u4F4D\u7F6E {index}/{total}\uFF1A{label}"],"viewer.route.step":["Step {index} of {total} \xB7 {phase} \xB7 {label}","\u7B2C {index}/{total} \u6B65 \xB7 {phase} \xB7 {label}"],"viewer.route.motionRequired":["Automatic journey requires Live motion","\u81EA\u52A8\u65C5\u7A0B\u9700\u8981\u52A8\u6001\u6A21\u5F0F"],"viewer.route.trigger.clear":["Clear traced route","\u6E05\u9664\u5DF2\u8FFD\u8E2A\u8DEF\u5F84"],"viewer.route.overview.status":["{nodes} \xB7 {hops} \xB7 shortest path","{nodes} \xB7 {hops} \xB7 \u6700\u77ED\u8DEF\u5F84"],"viewer.route.overview.node.one":["{count} node","{count} \u4E2A\u8282\u70B9"],"viewer.route.overview.node.other":["{count} nodes","{count} \u4E2A\u8282\u70B9"],"viewer.route.overview.hop.one":["{count} step","{count} \u6B65"],"viewer.route.overview.hop.other":["{count} steps","{count} \u6B65"],"viewer.route.phase.playing":["Playing","\u64AD\u653E\u4E2D"],"viewer.route.phase.complete":["Complete","\u5DF2\u5B8C\u6210"],"viewer.route.phase.inspecting":["Inspecting","\u68C0\u67E5\u4E2D"],"viewer.route.destination.count.one":["{count} reachable node is highlighted. Click it.","\u6709 {count} \u4E2A\u80FD\u8D70\u5230\u7684\u8282\u70B9\u5DF2\u9AD8\u4EAE\uFF0C\u70B9\u4E00\u4E0B\u3002"],"viewer.route.destination.count.other":["{count} reachable nodes are highlighted. Click one.","\u6709 {count} \u4E2A\u80FD\u8D70\u5230\u7684\u8282\u70B9\u5DF2\u9AD8\u4EAE\uFF0C\u70B9\u4E00\u4E2A\u3002"],"viewer.route.noOutgoing":["No arrows lead out of this node. Clear it and pick another start.","\u8FD9\u4E2A\u8282\u70B9\u6CA1\u6709\u5411\u5916\u7684\u7BAD\u5934\u3002\u6E05\u9664\u540E\u6362\u4E00\u4E2A\u8D77\u70B9\u3002"],"viewer.route.result.title":["{source} to {target}","{source} \u5230 {target}"],"viewer.route.finder.source.title":["Choose route start","\u9009\u62E9\u8DEF\u5F84\u8D77\u70B9"],"viewer.route.finder.source.placeholder":["Search route sources","\u641C\u7D22\u8DEF\u5F84\u6765\u6E90"],"viewer.route.finder.source.empty":["No matching route sources","\u6CA1\u6709\u5339\u914D\u7684\u8DEF\u5F84\u6765\u6E90"],"viewer.route.finder.source.results":["Nodes that can start a route","\u53EF\u4F5C\u4E3A\u8DEF\u5F84\u8D77\u70B9\u7684\u8282\u70B9"],"viewer.route.finder.source.noun":["route sources","\u4E2A\u8DEF\u5F84\u6765\u6E90"],"viewer.route.finder.source.badge":["start","\u8D77\u70B9"],"viewer.route.finder.target.title":["Destination from {label}","\u4ECE{label}\u51FA\u53D1\u7684\u76EE\u6807"],"viewer.route.finder.target.placeholder":["Search reachable destinations","\u641C\u7D22\u53EF\u8FBE\u76EE\u6807"],"viewer.route.finder.target.empty":["No matching reachable destinations","\u6CA1\u6709\u5339\u914D\u7684\u53EF\u8FBE\u76EE\u6807"],"viewer.route.finder.target.results":["Reachable route destinations","\u53EF\u8FBE\u8DEF\u5F84\u76EE\u6807"],"viewer.route.finder.target.noun":["reachable destinations","\u4E2A\u53EF\u8FBE\u76EE\u6807"],"viewer.route.hop.one":["{count} hop","{count} \u8DF3"],"viewer.route.hop.other":["{count} hops","{count} \u8DF3"],"viewer.lens.eyebrow":["Semantic lens","\u8BED\u4E49\u900F\u955C"],"viewer.lens.title":["Compare system roles","\u6BD4\u8F83\u7CFB\u7EDF\u89D2\u8272"],"viewer.lens.close":["Close semantic lens","\u5173\u95ED\u8BED\u4E49\u900F\u955C"],"viewer.lens.instruction":["Choose up to two semantic kinds. One reveals its real traffic; two compare only direct authored relationships.","\u6700\u591A\u9009\u62E9\u4E24\u79CD\u8BED\u4E49\u7C7B\u578B\u3002\u9009\u62E9\u4E00\u79CD\u53EF\u663E\u793A\u5176\u771F\u5B9E\u6D41\u91CF\uFF1B\u9009\u62E9\u4E24\u79CD\u53EA\u6BD4\u8F83\u76F4\u63A5\u7F16\u5199\u7684\u5173\u7CFB\u3002"],"viewer.lens.kinds":["Semantic kinds","\u8BED\u4E49\u7C7B\u578B"],"viewer.lens.choose":["Choose a kind to inspect its nodes and touching relationships.","\u9009\u62E9\u4E00\u79CD\u7C7B\u578B\u4EE5\u68C0\u67E5\u5176\u8282\u70B9\u548C\u76F8\u8FDE\u5173\u7CFB\u3002"],"viewer.lens.copy":["Copy link to semantic lens","\u590D\u5236\u8BED\u4E49\u900F\u955C\u94FE\u63A5"],"viewer.lens.clear":["Clear semantic lens","\u6E05\u9664\u8BED\u4E49\u900F\u955C"],"viewer.lens.open":["Open semantic lens","\u6253\u5F00\u8BED\u4E49\u900F\u955C"],"viewer.lens.openActive":["Open active semantic lens","\u6253\u5F00\u5F53\u524D\u8BED\u4E49\u900F\u955C"],"viewer.lens.legend":["Semantic legend","\u8BED\u4E49\u56FE\u4F8B"],"viewer.lens.legend.inspect.one":["Inspect {label}, {count} node","\u68C0\u67E5{label}\uFF0C{count} \u4E2A\u8282\u70B9"],"viewer.lens.legend.inspect.other":["Inspect {label}, {count} nodes","\u68C0\u67E5{label}\uFF0C{count} \u4E2A\u8282\u70B9"],"viewer.lens.kind.count.one":["{label}, {count} node","{label}\uFF0C{count} \u4E2A\u8282\u70B9"],"viewer.lens.kind.count.other":["{label}, {count} nodes","{label}\uFF0C{count} \u4E2A\u8282\u70B9"],"viewer.lens.compare.one":["{first} \u2192 {second}: {forward} \xB7 {second} \u2192 {first}: {reverse} \xB7 {count} direct relationship","{first} \u2192 {second}\uFF1A{forward} \xB7 {second} \u2192 {first}\uFF1A{reverse} \xB7 \u5171 {count} \u6761\u76F4\u63A5\u5173\u7CFB"],"viewer.lens.compare.other":["{first} \u2192 {second}: {forward} \xB7 {second} \u2192 {first}: {reverse} \xB7 {count} direct relationships","{first} \u2192 {second}\uFF1A{forward} \xB7 {second} \u2192 {first}\uFF1A{reverse} \xB7 \u5171 {count} \u6761\u76F4\u63A5\u5173\u7CFB"],"viewer.lens.single":["{nodes} \xB7 {relationships} \xB7 connected peers remain visible","{nodes} \xB7 {relationships} \xB7 \u5DF2\u8FDE\u63A5\u8282\u70B9\u4FDD\u6301\u53EF\u89C1"],"viewer.lens.node.one":["{count} {label} node","{count} \u4E2A{label}\u8282\u70B9"],"viewer.lens.node.other":["{count} {label} nodes","{count} \u4E2A{label}\u8282\u70B9"],"viewer.lens.relationship.one":["{count} touching relationship","{count} \u6761\u76F8\u8FDE\u5173\u7CFB"],"viewer.lens.relationship.other":["{count} touching relationships","{count} \u6761\u76F8\u8FDE\u5173\u7CFB"],"viewer.radar.title":["Semantic radar","\u8BED\u4E49\u96F7\u8FBE"],"viewer.radar.building":["Building overview","\u6B63\u5728\u6784\u5EFA\u603B\u89C8"],"viewer.radar.openFull":["Open full semantic radar","\u6253\u5F00\u5B8C\u6574\u8BED\u4E49\u96F7\u8FBE"],"viewer.radar.open":["Open radar","\u6253\u5F00\u96F7\u8FBE"],"viewer.radar.close":["Close semantic radar","\u5173\u95ED\u8BED\u4E49\u96F7\u8FBE"],"viewer.radar.surface":["Diagram overview. Click a node to focus it, or use arrow keys to pan.","\u56FE\u8868\u603B\u89C8\u3002\u70B9\u51FB\u8282\u70B9\u8FDB\u884C\u805A\u7126\uFF0C\u6216\u4F7F\u7528\u65B9\u5411\u952E\u5E73\u79FB\u3002"],"viewer.radar.click":["Click node","\u70B9\u51FB\u8282\u70B9"],"viewer.radar.drag":["Drag to pan","\u62D6\u52A8\u5E73\u79FB"],"viewer.radar.space":["Semantic radar needs more MAP space.","\u8BED\u4E49\u96F7\u8FBE\u9700\u8981\u66F4\u591A\u5730\u56FE\u53EF\u89C1\u7A7A\u95F4\u3002"],"viewer.radar.nodes":["Semantic diagram radar nodes","\u8BED\u4E49\u56FE\u8868\u96F7\u8FBE\u8282\u70B9"],"viewer.radar.focus":["Focus {label} from Semantic Radar","\u4ECE\u8BED\u4E49\u96F7\u8FBE\u805A\u7126{label}"],"viewer.radar.status":["{count} nodes \xB7 {viewport}","{count} \u4E2A\u8282\u70B9 \xB7 {viewport}"],"viewer.radar.fullMap":["{count} nodes \xB7 full map","{count} \u4E2A\u8282\u70B9 \xB7 \u5B8C\u6574\u5730\u56FE"],"viewer.radar.compacted":["Radar compacted to avoid covering the Semantic Passport or MAP controls.","\u5DF2\u6536\u7D27\u96F7\u8FBE\uFF0C\u907F\u514D\u906E\u6321\u8BED\u4E49\u62A4\u7167\u6216\u5730\u56FE\u63A7\u4EF6\u3002"],"viewer.radar.cancelWaiting":["Cancel semantic radar waiting for more MAP space","\u53D6\u6D88\u7B49\u5F85\u66F4\u591A\u5730\u56FE\u7A7A\u95F4\u7684\u8BED\u4E49\u96F7\u8FBE"],"viewer.radar.needsSpace":["Semantic radar needs more visible MAP space","\u8BED\u4E49\u96F7\u8FBE\u9700\u8981\u66F4\u591A\u53EF\u89C1\u5730\u56FE\u7A7A\u95F4"],"viewer.radar.viewport.full":["full map","\u5B8C\u6574\u5730\u56FE"],"viewer.radar.viewport.width":["{percent}% width","\u5BBD\u5EA6 {percent}%"],"viewer.radar.viewport.scale":["{percent}% viewport","\u89C6\u53E3 {percent}%"],"viewer.nav.controls":["Diagram view controls","\u56FE\u8868\u89C6\u56FE\u63A7\u5236"],"viewer.nav.route":["Trace a directed route","\u8FFD\u8E2A\u6709\u5411\u8DEF\u5F84"],"viewer.nav.route.title":["Trace route (R)","\u8FFD\u8E2A\u8DEF\u5F84\uFF08R\uFF09"],"viewer.nav.route.short":["PATH","\u8DEF\u5F84"],"viewer.nav.radar":["Open semantic radar","\u6253\u5F00\u8BED\u4E49\u96F7\u8FBE"],"viewer.nav.radar.title":["Semantic radar (M)","\u8BED\u4E49\u96F7\u8FBE\uFF08M\uFF09"],"viewer.nav.radar.short":["MAP","\u5730\u56FE"],"viewer.nav.lens":["Open semantic lens","\u6253\u5F00\u8BED\u4E49\u900F\u955C"],"viewer.nav.lens.title":["Semantic lens (L)","\u8BED\u4E49\u900F\u955C\uFF08L\uFF09"],"viewer.nav.lens.short":["LENS","\u900F\u955C"],"viewer.nav.find":["Find a node","\u67E5\u627E\u8282\u70B9"],"viewer.nav.find.title":["Find a node (/)","\u67E5\u627E\u8282\u70B9\uFF08/\uFF09"],"viewer.outline.title":["Node index","\u8282\u70B9\u7D22\u5F15"],"viewer.rail.show":["Notes & index","\u8981\u70B9\u4E0E\u7D22\u5F15"],"viewer.rail.controls":["Side panel","\u4FA7\u680F"],"viewer.rail.collapse":["Collapse side panel","\u6536\u8D77\u4FA7\u680F"],"viewer.rail.bottom":["Move panel below the diagram","\u79FB\u5230\u56FE\u4E0B\u65B9"],"viewer.rail.right":["Move panel beside the diagram","\u79FB\u5230\u56FE\u53F3\u4FA7"],"viewer.nav.guide":["Open diagram guide","\u6253\u5F00\u56FE\u8868\u6307\u5357"],"viewer.nav.guide.title":["Diagram guide (?)","\u56FE\u8868\u6307\u5357\uFF08?\uFF09"],"viewer.nav.zoomOut":["Zoom out","\u7F29\u5C0F"],"viewer.nav.zoomOut.title":["Zoom out (-)","\u7F29\u5C0F\uFF08-\uFF09"],"viewer.nav.reset":["Reset diagram view","\u91CD\u7F6E\u56FE\u8868\u89C6\u56FE"],"viewer.nav.reset.title":["Reset view (0)","\u91CD\u7F6E\u89C6\u56FE\uFF080\uFF09"],"viewer.nav.read":["READ","\u9605\u8BFB"],"viewer.nav.zoomIn":["Zoom in","\u653E\u5927"],"viewer.nav.zoomIn.title":["Zoom in (+)","\u653E\u5927\uFF08+\uFF09"],"viewer.nav.camera":["{hint}. Reset diagram view","{hint}\u3002\u91CD\u7F6E\u56FE\u8868\u89C6\u56FE"],"viewer.nav.camera.title":["{semantic}{hint} \xB7 reset view (0)","{semantic}{hint} \xB7 \u91CD\u7F6E\u89C6\u56FE\uFF080\uFF09"],"viewer.nav.camera.semantic":["Semantic camera active \xB7 ","\u8BED\u4E49\u76F8\u673A\u5DF2\u542F\u7528 \xB7 "],"viewer.nav.level.map":["MAP","\u6982\u89C8"],"viewer.nav.level.read":["READ","\u9605\u8BFB"],"viewer.nav.level.full":["FULL","\u5B8C\u6574"],"viewer.nav.level.auto":["AUTO","\u81EA\u52A8"],"viewer.nav.detail.map":["Zoom in to reveal relationship labels and node context","\u653E\u5927\u4EE5\u663E\u793A\u5173\u7CFB\u6807\u7B7E\u548C\u8282\u70B9\u4E0A\u4E0B\u6587"],"viewer.nav.detail.read":["Zoom in again to reveal tags and annotations","\u518D\u6B21\u653E\u5927\u4EE5\u663E\u793A\u6807\u7B7E\u548C\u6CE8\u91CA"],"viewer.nav.detail.full":["Full diagram detail","\u5B8C\u6574\u56FE\u8868\u8BE6\u60C5"],"viewer.intent.summary":["{label}. {out} outgoing, {in} incoming{loops}. {total} connections. Press Enter for details.","{label}\u3002{out} \u6761\u51FA\u5411\uFF0C{in} \u6761\u5165\u5411{loops}\u3002\u5171 {total} \u6761\u8FDE\u63A5\u3002\u6309 Enter \u67E5\u770B\u8BE6\u60C5\u3002"],"viewer.intent.loops":[", {count} self loop","\uFF0C{count} \u6761\u81EA\u73AF"],"viewer.common.copied":["Copied","\u5DF2\u590D\u5236"],"viewer.common.copyFailed":["Copy failed","\u590D\u5236\u5931\u8D25"],"viewer.common.copyLink":["Copy link","\u590D\u5236\u94FE\u63A5"],"viewer.common.clear":["Clear","\u6E05\u9664"],"viewer.common.close":["Close","\u5173\u95ED"]};for(let[e,t]of Object.entries(ve))if(t.length!==we.length||t.some(o=>typeof o!="string"))throw new Error(`Incomplete Archify i18n tuple ${JSON.stringify(e)}`);var ke=Object.fromEntries(we.map((e,t)=>[e,Object.fromEntries(Object.entries(ve).map(([o,i])=>[o,i[t]]))])),Ae=ke.en,st=Object.keys(Ae),lt=/\{([a-zA-Z0-9_]+)\}/g;function dt(e){return new Set([...String(e).matchAll(lt)].map(t=>t[1]))}var kt=Object.fromEntries(st.map(e=>[e,dt(Ae[e])]));var ct=new Map;function K(e){return ct.get(e)||ke[e]}function N(e){return K(e)?e:"en"}function ht(e,t={}){return String(e).replace(/\{([a-zA-Z0-9_]+)\}/g,(o,i)=>Object.hasOwn(t,i)?String(t[i]):o)}function Q(e,t,o={}){let i=N(e),n=K(i);if(!Object.hasOwn(n,t))throw new Error(`Missing Archify i18n message ${JSON.stringify(t)} for ${i}`);return ht(n[t],o)}function Se(e){let t=N(e);return Object.fromEntries(Object.entries(K(t)).filter(([o])=>o.startsWith("viewer.")))}function Le(e,t){return e.replace(/\{\{i18n:([a-zA-Z0-9_.-]+)\}\}/g,(o,i)=>v(Q(t,i)))}var ft=6,mt=11,Lt=ft+mt;function ze(e){return` <!-- Info Cards -->
27584
27584
  <div class="cards">
27585
27585
  ${(Array.isArray(e)?e:[]).map(o=>` <div class="card">
27586
27586
  <div class="card-header">
@@ -27594,8 +27594,8 @@ ${o.items.map(i=>` <li>${v(i)}</li>`).join(`
27594
27594
  </div>`).join(`
27595
27595
 
27596
27596
  `)}
27597
- </div>`}var Ee=/ <!-- ARCHIFY:SVG_SLOT_START -->[\s\S]*? <!-- ARCHIFY:SVG_SLOT_END -->/,Ce=/ <!-- ARCHIFY:CARDS_SLOT_START -->[\s\S]*? <!-- ARCHIFY:CARDS_SLOT_END -->/,Me=/^([ \t]*)<p class="subtitle">\[Subtitle description\]<\/p>[ \t]*(\r?\n)?/m,X=" <!-- ARCHIFY:SOURCE_EVIDENCE_DATA -->",Ie=" <!-- ARCHIFY:I18N_DATA -->";function Te(e){return JSON.stringify(e).replaceAll("<","\\u003c").replaceAll(">","\\u003e").replaceAll("&","\\u0026")}var D=['<html lang="en" data-theme="dark" data-preset="[VISUAL PRESET]">',"<title>[PROJECT NAME] Architecture Diagram</title>","<h1>[PROJECT NAME] Architecture</h1>",Ie];function Re(e,{title:t,subtitle:o,svg:i,cards:a,locale:f,visualPreset:m="classic",sourceEvidence:h=null}){if(!Ee.test(e))throw new Error("applyTemplate: template missing ARCHIFY:SVG_SLOT sentinel");if(!Ce.test(e))throw new Error("applyTemplate: template missing ARCHIFY:CARDS_SLOT sentinel");if(!Me.test(e))throw new Error("applyTemplate: template missing subtitle placeholder");for(let M of D)if(!e.includes(M))throw new Error(`applyTemplate: template missing placeholder ${JSON.stringify(M)}`);if(h&&!e.includes(X))throw new Error(`applyTemplate: repository evidence requires placeholder ${JSON.stringify(X)}`);let d=Te(h),l=N(f),x=Te({locale:l,messages:Se(l)}),c=typeof o=="string"&&o.trim()?`<p class="subtitle">${v(o)}</p>`:"",w=` <script id="archify-i18n-data" type="application/json">${x}<\/script>`;return Le(e,l).replace(Ie,()=>w).replace(D[0],()=>`<html lang="${v(l)}" data-theme="dark" data-preset="${v(m)}">`).replace(D[1],()=>`<title>${v(Q(l,"page.title",{title:t}))}</title>`).replace(D[2],()=>`<h1>${v(t)}</h1>`).replace(Me,(M,E,I="")=>c?`${E}${c}${I}`:"").replace(Ee,()=>i).replace(Ce,()=>a).replace(X,()=>h?` <script id="archify-source-evidence-data" type="application/json">${d}<\/script>`:"")}var B=le("diagram",{"zh-CN":{"family.archify":"Archify \u4EA4\u4E92\u67B6\u6784\u56FE","family.diagramDesign":"Diagram Design \u56FE\u5F62","family.fireworks":"Fireworks \u6280\u672F\u56FE",fileTooLarge:"\u8BF7\u9009\u62E9 8 MiB \u4EE5\u5185\u7684 HTML \u6216 SVG \u6587\u4EF6\u3002",changedElsewhere:"\u56FE\u5F62\u5DF2\u88AB\u5176\u4ED6\u4FEE\u6539\u66F4\u65B0\u3002\u8349\u7A3F\u5DF2\u4FDD\u7559\uFF0C\u8BF7\u91CD\u65B0\u8BFB\u53D6\u5E76\u5408\u5E76\u540E\u4FDD\u5B58\u3002",downloadSvg:"\u4E0B\u8F7D\u56FE\u5F62 SVG",downloadHtml:"\u4E0B\u8F7D\u5B8C\u6574\u56FE\u5F62 HTML",diagram:"\u56FE\u5F62",unlockDescription:"\u64CD\u4F5C\u56FE\u5F62\u5185\u7684\u63A2\u7D22\u3001\u7F29\u653E\u548C\u6EDA\u52A8",template:"\u6A21\u677F",diagramTemplate:"\u56FE\u5F62\u6A21\u677F",customTemplate:"\u5BFC\u5165\u6216\u81EA\u5B9A\u4E49\u56FE\u5F62",title:"\u6807\u9898",diagramTitle:"\u56FE\u5F62\u6807\u9898",height:"\u9AD8\u5EA6",diagramHeight:"\u56FE\u5F62\u9AD8\u5EA6",description:"\u8BF4\u660E",diagramDescription:"\u56FE\u5F62\u8BF4\u660E",labelsSummary:"\u56FE\u4E2D\u6587\u5B57\uFF08{count}\uFF09",labelField:"\u6587\u5B57 {index}",labelInput:"\u56FE\u4E2D\u6587\u5B57 {index}",source:"\u56FE\u5F62\u6E90\u7801",readLabels:"\u8BFB\u53D6\u56FE\u4E2D\u6587\u5B57",importFile:"\u5BFC\u5165 HTML / SVG",importFileInput:"\u5BFC\u5165\u56FE\u5F62\u6587\u4EF6",save:"\u4FDD\u5B58\u56FE\u5F62",cancel:"\u53D6\u6D88","error.missingSvg":"\u56FE\u5F62\u6E90\u7801\u7F3A\u5C11\u5B8C\u6574\u7684 SVG\u3002","error.invalidXml":"SVG \u7684 XML \u7ED3\u6784\u4E0D\u6B63\u786E\u3002","error.structureChanged":"\u56FE\u5F62\u7ED3\u6784\u5DF2\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u8BFB\u53D6\u6587\u5B57\u3002"},en:{"family.archify":"Archify architecture diagram","family.diagramDesign":"Diagram Design graphic","family.fireworks":"Fireworks technical diagram",fileTooLarge:"Choose an HTML or SVG file of 8 MiB or less.",changedElsewhere:"The diagram was updated by another change. Your draft is kept. Reload and merge your changes, then save.",downloadSvg:"Download diagram SVG",downloadHtml:"Download full diagram HTML",diagram:"Diagram",unlockDescription:"Explore, zoom, and scroll inside the diagram",template:"Template",diagramTemplate:"Diagram template",customTemplate:"Import or customize a diagram",title:"Title",diagramTitle:"Diagram title",height:"Height",diagramHeight:"Diagram height",description:"Description",diagramDescription:"Diagram description",labelsSummary:"Text in diagram ({count})",labelField:"Text {index}",labelInput:"Diagram text {index}",source:"Diagram source",readLabels:"Read text from diagram",importFile:"Import HTML / SVG",importFileInput:"Import diagram file",save:"Save diagram",cancel:"Cancel","error.missingSvg":"The diagram source doesn't contain a complete SVG.","error.invalidXml":"The SVG's XML structure is invalid.","error.structureChanged":"The diagram structure has changed. Read the text again."}});var F=de(B);function H(e){let t=e.search(/\bclass\s*=\s*["'][^"']*\bdiagram-container\b/i),o=e.slice(t<0?0:t),i=o.search(/<svg\b/i);if(i<0)throw new Error(F("error.missingSvg"));let a=o.slice(i),f=/<!--[\s\S]*?-->|<!\[CDATA\[[\s\S]*?\]\]>|<\/?svg\b(?:[^>"']|"[^"]*"|'[^']*')*>/gi,m=0;for(let h of a.matchAll(f))if(!/^<!/.test(h[0])&&(/^<\/svg/i.test(h[0])?m--:/\/\s*>$/.test(h[0])||m++,m===0))return a.slice(0,h.index+h[0].length);throw new Error(F("error.missingSvg"))}function W(e){return H(e).replace(/<svg\b(?:[^>"']|"[^"]*"|'[^']*')*>/i,t=>/\bxmlns\s*=/.test(t)?t:t.replace(/\s*\/?>$/,o=>` xmlns="http://www.w3.org/2000/svg"${o}`))}function Z(e){let t=W(e),o=new DOMParser().parseFromString(t,"image/svg+xml");if(o.querySelector("parsererror"))throw new Error(F("error.invalidXml"));return o}function Oe(e){return[...e.querySelectorAll("text")].flatMap(t=>{let o=[...t.querySelectorAll("tspan")];return o.length?o:[t]})}function J(e){return Oe(Z(e)).map(t=>t.textContent??"")}function Ge(e,t){let o=H(e),i=Z(e),a=Oe(i);if(t.length!==a.length)throw new Error(F("error.structureChanged"));a.forEach((m,h)=>{let d=m.textContent;if(d!==t[h]){m.textContent=t[h];for(let l=m;l&&l!==i.documentElement;l=l.parentElement){for(let c of["data-focus-label","aria-label"])l.getAttribute(c)===d&&l.setAttribute(c,t[h]);let x=["data-node-label","data-node-sublabel","data-node-tag"].filter(c=>d&&l.getAttribute(c)===d);if(x.length){for(let w of x)l.setAttribute(w,t[h]);let c=l.getAttribute("aria-label");c&&l.setAttribute("aria-label",c.replace(d,()=>t[h]));for(let w of l.querySelectorAll(":scope > title"))w.textContent?.includes(d)&&(w.textContent=w.textContent.replace(d,()=>t[h]))}for(let c of l.querySelectorAll(":scope > title"))c.textContent===d&&(c.textContent=t[h])}}});let f=new XMLSerializer().serializeToString(i.documentElement);return e.replace(o,()=>f)}function Pe(e){let t=Z(e),o=[...e.matchAll(/<style\b[^>]*>([\s\S]*?)<\/style>/gi)].map(f=>f[1]).join(`
27598
- `),i=t.createElementNS("http://www.w3.org/2000/svg","style");i.textContent=o,t.documentElement.prepend(i);let a=e.match(/<html\b[^>]*>/i)?.[0]??"";for(let f of["data-theme","data-preset"]){let m=a.match(new RegExp(`${f}="([^"]*)"`))?.[1];m&&t.documentElement.setAttribute(f,m)}return new XMLSerializer().serializeToString(t.documentElement)}var L={title:"inside",description:"inside",notes:"inline",legend:!0,controls:!0},$={title:"outside",description:"outside",notes:"hidden",legend:!0,controls:!0};function k(e){return e.presentation?{...L,...e.presentation}:L}function _(e){return new DOMParser().parseFromString(e.replace(/<[^>]*>/g,""),"text/html").body.textContent?.trim()??""}function pt(e){let t=e.search(/<div\b[^>]*class=["'][^"']*\bcards\b[^"']*["'][^>]*>/i);if(t<0)return[];let o=e.slice(t),i=0;for(let a of o.matchAll(/<\/?div\b[^>]*>/gi))if(i+=/^<\//.test(a[0])?-1:1,i===0)return[_(o.slice(0,a.index+a[0].length).replace(/<\/(?:h3|p|li)>/gi,"$& "))].filter(Boolean);return[]}function Ne(e){let t=new DOMParser().parseFromString(W(e),"image/svg+xml"),o=e.match(/<h1\b[^>]*>([\s\S]*?)<\/h1>/i),i=e.match(/<p\b[^>]*class=["'][^"']*\bsubtitle\b[^"']*["'][^>]*>([\s\S]*?)<\/p>/i);return{title:o?_(o[1]):t.querySelector("svg > text.title, svg > g#title text.title, svg > title")?.textContent?.trim()??"",description:i?_(i[1]):t.querySelector("svg > text.subtitle, svg > text.title + text.detail, svg > g#title text.subtitle, svg > desc")?.textContent?.trim()??"",notes:[...t.querySelectorAll("svg > text.footnote, svg > g#footer, svg > g.footer, svg > g[data-graph-role=legend] + text.detail")].map(a=>a.textContent?.trim()??"").filter(Boolean).concat(pt(e))}}function De(e,t){if(JSON.stringify(t)===JSON.stringify(L))return e;let o=H(e),i=new DOMParser().parseFromString(W(e),"image/svg+xml"),a=i.documentElement,f=(l,x)=>{if(x)for(let c of i.querySelectorAll(l))c.setAttribute("data-showai-diagram-hidden","true")};f("svg > text.title, svg > g#title > text.title",t.title!=="inside"),f("svg > text.subtitle, svg > text.title + text.detail, svg > g#title > text.subtitle",t.description!=="inside"),f("svg > g#footer, svg > g.footer, svg > text.footnote, svg > g[data-graph-role=legend] + text.detail",t.notes!=="inline"),f("svg > g#legend, svg > g.legend, svg > g[data-graph-role=legend]",!t.legend);let m=i.createElementNS("http://www.w3.org/2000/svg","style");m.textContent="[data-showai-diagram-hidden=true]{display:none!important}",a.prepend(m);let h=[...i.querySelectorAll("svg > text[data-showai-diagram-hidden=true],svg > g#title > text[data-showai-diagram-hidden=true]")].filter(l=>l.matches(".title,.subtitle")||l.matches(".detail")&&l.previousElementSibling?.matches("text.title")),d=a.getAttribute("viewBox")?.split(/[ ,]+/).map(Number);if(d?.length===4&&h.length){let l=Math.max(...h.map(c=>Number(c.getAttribute("y")??0)+12)),x=[...i.querySelectorAll('[data-graph-role="node"],[data-graph-role="container"]')].map(c=>Number(c.getAttribute("data-graph-bounds")?.split(",")[1])).filter(Number.isFinite);if(x.length){let c=Math.min(l,Math.min(...x)-16);c>d[1]&&c<d[1]+d[3]&&a.setAttribute("viewBox",`${d[0]} ${c} ${d[2]} ${d[3]-(c-d[1])}`)}}return e.replace(o,()=>new XMLSerializer().serializeToString(a))}function Be(e){return`${e.title!=="inside"?".header h1,.frame>h1,.frame>.eyebrow,.header .pulse-dot{display:none!important}":""}
27597
+ </div>`}var Ee=/ <!-- ARCHIFY:SVG_SLOT_START -->[\s\S]*? <!-- ARCHIFY:SVG_SLOT_END -->/,Ce=/ <!-- ARCHIFY:CARDS_SLOT_START -->[\s\S]*? <!-- ARCHIFY:CARDS_SLOT_END -->/,Me=/^([ \t]*)<p class="subtitle">\[Subtitle description\]<\/p>[ \t]*(\r?\n)?/m,X=" <!-- ARCHIFY:SOURCE_EVIDENCE_DATA -->",Ie=" <!-- ARCHIFY:I18N_DATA -->";function Te(e){return JSON.stringify(e).replaceAll("<","\\u003c").replaceAll(">","\\u003e").replaceAll("&","\\u0026")}var D=['<html lang="en" data-theme="dark" data-preset="[VISUAL PRESET]">',"<title>[PROJECT NAME] Architecture Diagram</title>","<h1>[PROJECT NAME] Architecture</h1>",Ie];function Re(e,{title:t,subtitle:o,svg:i,cards:n,locale:f,visualPreset:m="classic",sourceEvidence:h=null}){if(!Ee.test(e))throw new Error("applyTemplate: template missing ARCHIFY:SVG_SLOT sentinel");if(!Ce.test(e))throw new Error("applyTemplate: template missing ARCHIFY:CARDS_SLOT sentinel");if(!Me.test(e))throw new Error("applyTemplate: template missing subtitle placeholder");for(let M of D)if(!e.includes(M))throw new Error(`applyTemplate: template missing placeholder ${JSON.stringify(M)}`);if(h&&!e.includes(X))throw new Error(`applyTemplate: repository evidence requires placeholder ${JSON.stringify(X)}`);let d=Te(h),l=N(f),x=Te({locale:l,messages:Se(l)}),c=typeof o=="string"&&o.trim()?`<p class="subtitle">${v(o)}</p>`:"",w=` <script id="archify-i18n-data" type="application/json">${x}<\/script>`;return Le(e,l).replace(Ie,()=>w).replace(D[0],()=>`<html lang="${v(l)}" data-theme="dark" data-preset="${v(m)}">`).replace(D[1],()=>`<title>${v(Q(l,"page.title",{title:t}))}</title>`).replace(D[2],()=>`<h1>${v(t)}</h1>`).replace(Me,(M,E,I="")=>c?`${E}${c}${I}`:"").replace(Ee,()=>i).replace(Ce,()=>n).replace(X,()=>h?` <script id="archify-source-evidence-data" type="application/json">${d}<\/script>`:"")}var B=le("diagram",{"zh-CN":{"family.archify":"Archify \u4EA4\u4E92\u67B6\u6784\u56FE","family.diagramDesign":"Diagram Design \u56FE\u5F62","family.fireworks":"Fireworks \u6280\u672F\u56FE",fileTooLarge:"\u8BF7\u9009\u62E9 8 MiB \u4EE5\u5185\u7684 HTML \u6216 SVG \u6587\u4EF6\u3002",changedElsewhere:"\u56FE\u5F62\u5DF2\u88AB\u5176\u4ED6\u4FEE\u6539\u66F4\u65B0\u3002\u8349\u7A3F\u5DF2\u4FDD\u7559\uFF0C\u8BF7\u91CD\u65B0\u8BFB\u53D6\u5E76\u5408\u5E76\u540E\u4FDD\u5B58\u3002",downloadSvg:"\u4E0B\u8F7D\u56FE\u5F62 SVG",downloadHtml:"\u4E0B\u8F7D\u5B8C\u6574\u56FE\u5F62 HTML",diagram:"\u56FE\u5F62",unlockDescription:"\u64CD\u4F5C\u56FE\u5F62\u5185\u7684\u63A2\u7D22\u3001\u7F29\u653E\u548C\u6EDA\u52A8",template:"\u6A21\u677F",diagramTemplate:"\u56FE\u5F62\u6A21\u677F",customTemplate:"\u5BFC\u5165\u6216\u81EA\u5B9A\u4E49\u56FE\u5F62",title:"\u6807\u9898",diagramTitle:"\u56FE\u5F62\u6807\u9898",height:"\u9AD8\u5EA6",diagramHeight:"\u56FE\u5F62\u9AD8\u5EA6",description:"\u8BF4\u660E",diagramDescription:"\u56FE\u5F62\u8BF4\u660E",labelsSummary:"\u56FE\u4E2D\u6587\u5B57\uFF08{count}\uFF09",labelField:"\u6587\u5B57 {index}",labelInput:"\u56FE\u4E2D\u6587\u5B57 {index}",source:"\u56FE\u5F62\u6E90\u7801",readLabels:"\u8BFB\u53D6\u56FE\u4E2D\u6587\u5B57",importFile:"\u5BFC\u5165 HTML / SVG",importFileInput:"\u5BFC\u5165\u56FE\u5F62\u6587\u4EF6",save:"\u4FDD\u5B58\u56FE\u5F62",cancel:"\u53D6\u6D88","error.missingSvg":"\u56FE\u5F62\u6E90\u7801\u7F3A\u5C11\u5B8C\u6574\u7684 SVG\u3002","error.invalidXml":"SVG \u7684 XML \u7ED3\u6784\u4E0D\u6B63\u786E\u3002","error.structureChanged":"\u56FE\u5F62\u7ED3\u6784\u5DF2\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u8BFB\u53D6\u6587\u5B57\u3002","presentation.notes":"\u8865\u5145\u8BF4\u660E","presentation.label":"\u56FE\u5F62\u5448\u73B0","presentation.compact":"\u7B80\u6D01\uFF1A\u6807\u9898\u4E0E\u8BF4\u660E\u653E\u5728\u56FE\u5916","presentation.original":"\u539F\u7248\uFF1A\u4FDD\u7559\u4E0A\u6E38\u5B8C\u6574\u56FE\u5F62","presentation.custom":"\u81EA\u5B9A\u4E49\u663E\u793A","presentation.titlePosition":"\u6807\u9898\u4F4D\u7F6E","presentation.descriptionPosition":"\u8BF4\u660E\u4F4D\u7F6E","presentation.outside":"\u653E\u5728\u56FE\u5916","presentation.inside":"\u4FDD\u7559\u5728\u56FE\u5185","presentation.hidden":"\u9690\u85CF","presentation.notesDisplay":"\u8865\u5145\u8BF4\u660E\u663E\u793A","presentation.details":"\u6298\u53E0\u5230\u56FE\u5916","presentation.inline":"\u4FDD\u7559\u539F\u4F4D\u7F6E","presentation.legend":"\u663E\u793A\u56FE\u4F8B","presentation.controls":"\u663E\u793A\u9605\u8BFB\u63A7\u4EF6"},en:{"family.archify":"Archify architecture diagram","family.diagramDesign":"Diagram Design graphic","family.fireworks":"Fireworks technical diagram",fileTooLarge:"Choose an HTML or SVG file of 8 MiB or less.",changedElsewhere:"The diagram was updated by another change. Your draft is kept. Reload and merge your changes, then save.",downloadSvg:"Download diagram SVG",downloadHtml:"Download full diagram HTML",diagram:"Diagram",unlockDescription:"Explore, zoom, and scroll inside the diagram",template:"Template",diagramTemplate:"Diagram template",customTemplate:"Import or customize a diagram",title:"Title",diagramTitle:"Diagram title",height:"Height",diagramHeight:"Diagram height",description:"Description",diagramDescription:"Diagram description",labelsSummary:"Text in diagram ({count})",labelField:"Text {index}",labelInput:"Diagram text {index}",source:"Diagram source",readLabels:"Read text from diagram",importFile:"Import HTML / SVG",importFileInput:"Import diagram file",save:"Save diagram",cancel:"Cancel","error.missingSvg":"The diagram source doesn't contain a complete SVG.","error.invalidXml":"The SVG's XML structure is invalid.","error.structureChanged":"The diagram structure has changed. Read the text again.","presentation.notes":"Notes","presentation.label":"Diagram display","presentation.compact":"Compact: title and description outside the diagram","presentation.original":"Original: keep the complete upstream diagram","presentation.custom":"Custom display","presentation.titlePosition":"Title position","presentation.descriptionPosition":"Description position","presentation.outside":"Outside the diagram","presentation.inside":"Inside the diagram","presentation.hidden":"Hidden","presentation.notesDisplay":"Notes display","presentation.details":"Collapsed outside the diagram","presentation.inline":"Keep in place","presentation.legend":"Show legend","presentation.controls":"Show reading controls"}});var F=de(B);function H(e){let t=e.search(/\bclass\s*=\s*["'][^"']*\bdiagram-container\b/i),o=e.slice(t<0?0:t),i=o.search(/<svg\b/i);if(i<0)throw new Error(F("error.missingSvg"));let n=o.slice(i),f=/<!--[\s\S]*?-->|<!\[CDATA\[[\s\S]*?\]\]>|<\/?svg\b(?:[^>"']|"[^"]*"|'[^']*')*>/gi,m=0;for(let h of n.matchAll(f))if(!/^<!/.test(h[0])&&(/^<\/svg/i.test(h[0])?m--:/\/\s*>$/.test(h[0])||m++,m===0))return n.slice(0,h.index+h[0].length);throw new Error(F("error.missingSvg"))}function W(e){return H(e).replace(/<svg\b(?:[^>"']|"[^"]*"|'[^']*')*>/i,t=>/\bxmlns\s*=/.test(t)?t:t.replace(/\s*\/?>$/,o=>` xmlns="http://www.w3.org/2000/svg"${o}`))}function Z(e){let t=W(e),o=new DOMParser().parseFromString(t,"image/svg+xml");if(o.querySelector("parsererror"))throw new Error(F("error.invalidXml"));return o}function Oe(e){return[...e.querySelectorAll("text")].flatMap(t=>{let o=[...t.querySelectorAll("tspan")];return o.length?o:[t]})}function J(e){return Oe(Z(e)).map(t=>t.textContent??"")}function Ge(e,t){let o=H(e),i=Z(e),n=Oe(i);if(t.length!==n.length)throw new Error(F("error.structureChanged"));n.forEach((m,h)=>{let d=m.textContent;if(d!==t[h]){m.textContent=t[h];for(let l=m;l&&l!==i.documentElement;l=l.parentElement){for(let c of["data-focus-label","aria-label"])l.getAttribute(c)===d&&l.setAttribute(c,t[h]);let x=["data-node-label","data-node-sublabel","data-node-tag"].filter(c=>d&&l.getAttribute(c)===d);if(x.length){for(let w of x)l.setAttribute(w,t[h]);let c=l.getAttribute("aria-label");c&&l.setAttribute("aria-label",c.replace(d,()=>t[h]));for(let w of l.querySelectorAll(":scope > title"))w.textContent?.includes(d)&&(w.textContent=w.textContent.replace(d,()=>t[h]))}for(let c of l.querySelectorAll(":scope > title"))c.textContent===d&&(c.textContent=t[h])}}});let f=new XMLSerializer().serializeToString(i.documentElement);return e.replace(o,()=>f)}function Pe(e){let t=Z(e),o=[...e.matchAll(/<style\b[^>]*>([\s\S]*?)<\/style>/gi)].map(f=>f[1]).join(`
27598
+ `),i=t.createElementNS("http://www.w3.org/2000/svg","style");i.textContent=o,t.documentElement.prepend(i);let n=e.match(/<html\b[^>]*>/i)?.[0]??"";for(let f of["data-theme","data-preset"]){let m=n.match(new RegExp(`${f}="([^"]*)"`))?.[1];m&&t.documentElement.setAttribute(f,m)}return new XMLSerializer().serializeToString(t.documentElement)}var L={title:"inside",description:"inside",notes:"inline",legend:!0,controls:!0},$={title:"outside",description:"outside",notes:"hidden",legend:!0,controls:!0};function k(e){return e.presentation?{...L,...e.presentation}:L}function _(e){return new DOMParser().parseFromString(e.replace(/<[^>]*>/g,""),"text/html").body.textContent?.trim()??""}function pt(e){let t=e.search(/<div\b[^>]*class=["'][^"']*\bcards\b[^"']*["'][^>]*>/i);if(t<0)return[];let o=e.slice(t),i=0;for(let n of o.matchAll(/<\/?div\b[^>]*>/gi))if(i+=/^<\//.test(n[0])?-1:1,i===0)return[_(o.slice(0,n.index+n[0].length).replace(/<\/(?:h3|p|li)>/gi,"$& "))].filter(Boolean);return[]}function Ne(e){let t=new DOMParser().parseFromString(W(e),"image/svg+xml"),o=e.match(/<h1\b[^>]*>([\s\S]*?)<\/h1>/i),i=e.match(/<p\b[^>]*class=["'][^"']*\bsubtitle\b[^"']*["'][^>]*>([\s\S]*?)<\/p>/i);return{title:o?_(o[1]):t.querySelector("svg > text.title, svg > g#title text.title, svg > title")?.textContent?.trim()??"",description:i?_(i[1]):t.querySelector("svg > text.subtitle, svg > text.title + text.detail, svg > g#title text.subtitle, svg > desc")?.textContent?.trim()??"",notes:[...t.querySelectorAll("svg > text.footnote, svg > g#footer, svg > g.footer, svg > g[data-graph-role=legend] + text.detail")].map(n=>n.textContent?.trim()??"").filter(Boolean).concat(pt(e))}}function De(e,t){if(JSON.stringify(t)===JSON.stringify(L))return e;let o=H(e),i=new DOMParser().parseFromString(W(e),"image/svg+xml"),n=i.documentElement,f=(l,x)=>{if(x)for(let c of i.querySelectorAll(l))c.setAttribute("data-showai-diagram-hidden","true")};f("svg > text.title, svg > g#title > text.title",t.title!=="inside"),f("svg > text.subtitle, svg > text.title + text.detail, svg > g#title > text.subtitle",t.description!=="inside"),f("svg > g#footer, svg > g.footer, svg > text.footnote, svg > g[data-graph-role=legend] + text.detail",t.notes!=="inline"),f("svg > g#legend, svg > g.legend, svg > g[data-graph-role=legend]",!t.legend);let m=i.createElementNS("http://www.w3.org/2000/svg","style");m.textContent="[data-showai-diagram-hidden=true]{display:none!important}",n.prepend(m);let h=[...i.querySelectorAll("svg > text[data-showai-diagram-hidden=true],svg > g#title > text[data-showai-diagram-hidden=true]")].filter(l=>l.matches(".title,.subtitle")||l.matches(".detail")&&l.previousElementSibling?.matches("text.title")),d=n.getAttribute("viewBox")?.split(/[ ,]+/).map(Number);if(d?.length===4&&h.length){let l=Math.max(...h.map(c=>Number(c.getAttribute("y")??0)+12)),x=[...i.querySelectorAll('[data-graph-role="node"],[data-graph-role="container"]')].map(c=>Number(c.getAttribute("data-graph-bounds")?.split(",")[1])).filter(Number.isFinite);if(x.length){let c=Math.min(l,Math.min(...x)-16);c>d[1]&&c<d[1]+d[3]&&n.setAttribute("viewBox",`${d[0]} ${c} ${d[2]} ${d[3]-(c-d[1])}`)}}return e.replace(o,()=>new XMLSerializer().serializeToString(n))}function Be(e){return`${e.title!=="inside"?".header h1,.frame>h1,.frame>.eyebrow,.header .pulse-dot{display:none!important}":""}
27599
27599
  ${e.description!=="inside"?".header>p.subtitle,.frame>p.subtitle{display:none!important}":""}
27600
27600
  ${e.title!=="inside"&&e.description!=="inside"?".header,.header-row{margin:0!important;padding:0!important;min-height:0!important}.header:has(h1){display:none!important}":""}
27601
27601
  ${e.notes!=="inline"?".reader-rail,.cards,.frame>.notes,.frame>.source-note{display:none!important}":""}
@@ -27607,13 +27607,13 @@ Commit: ${t.commit}
27607
27607
 
27608
27608
  ${t.text}
27609
27609
  ${t.notices}`}function He(e,t){return e!=="diagram-design"||t.includes("data:font/")?t:`<!-- Offline font licenses
27610
- ${Object.entries(Y.licenses).map(([i,a])=>`${i}
27611
- ${a}`).join(`
27610
+ ${Object.entries(Y.licenses).map(([i,n])=>`${i}
27611
+ ${n}`).join(`
27612
27612
 
27613
27613
  `).replaceAll("--","\u2014")}
27614
- --><style>${Y.css}</style>${t}`}function We(e,t,o,i){let a=m=>m.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;");if(!t&&!o&&!i.length)return e;let f=`<section style="max-width:1120px;margin:20px auto;font-family:system-ui,sans-serif">${t?`<h2>${a(t)}</h2>`:""}${o?`<p>${a(o)}</p>`:""}${i.length?`<details><summary>\u8865\u5145\u8BF4\u660E</summary>${i.map(m=>`<p>${a(m)}</p>`).join("")}</details>`:""}</section>`;return/<body\b[^>]*>/i.test(e)?e.replace(/<body\b[^>]*>/i,m=>m+f):e.replace(/<style>/i,f+"<style>")}function je(e,t,o=L){let i="default-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; img-src data: blob:; font-src data:; connect-src 'none'; frame-src 'none'; base-uri 'none'; form-action 'none'",a=JSON.stringify(o)!==JSON.stringify(L),f=/<html\b|<body\b/i.test(t)?"":"body{margin:0;padding:12px}body>svg{display:block;width:100%;height:auto}";return`<!doctype html><meta charset="utf-8"><meta http-equiv="Content-Security-Policy" content="${i}"><!--
27614
+ --><style>${Y.css}</style>${t}`}function We(e,t,o,i){let n=m=>m.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;");if(!t&&!o&&!i.length)return e;let f=`<section style="max-width:1120px;margin:20px auto;font-family:system-ui,sans-serif">${t?`<h2>${n(t)}</h2>`:""}${o?`<p>${n(o)}</p>`:""}${i.length?`<details><summary>\u8865\u5145\u8BF4\u660E</summary>${i.map(m=>`<p>${n(m)}</p>`).join("")}</details>`:""}</section>`;return/<body\b[^>]*>/i.test(e)?e.replace(/<body\b[^>]*>/i,m=>m+f):e.replace(/<style>/i,f+"<style>")}function je(e,t,o=L){let i="default-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; img-src data: blob:; font-src data:; connect-src 'none'; frame-src 'none'; base-uri 'none'; form-action 'none'",n=JSON.stringify(o)!==JSON.stringify(L),f=/<html\b|<body\b/i.test(t)?"":"body{margin:0;padding:12px}body>svg{display:block;width:100%;height:auto}";return`<!doctype html><meta charset="utf-8"><meta http-equiv="Content-Security-Policy" content="${i}"><!--
27615
27615
  ${te(e).replaceAll("--","\u2014")}
27616
- -->${t}<style>${f}${a?Be(o):""}</style>`}re(`.sb-external-diagram{min-width:0;position:relative}.sb-diagram-frame{display:block;width:100%;border:0;border-radius:8px;background:var(--paper, #fff)}.sb-diagram-editor{display:grid;gap:12px;width:min(100%,520px);padding:12px}.sb-diagram-fields{display:grid;grid-template-columns:minmax(0,1fr) 100px;gap:10px}.sb-diagram-display-settings{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px}.sb-diagram-editor .sb-diagram-toggle{display:flex;align-items:center;gap:6px}.sb-diagram-editor .sb-diagram-toggle input{width:auto}.sb-diagram-notes{margin:8px 0;color:var(--muted)}.sb-diagram-editor select,.sb-diagram-editor input:not([type=file]),.sb-diagram-editor textarea{width:100%;min-width:0}.sb-diagram-editor details>summary{cursor:pointer;padding:8px 0;color:var(--text)}.sb-diagram-labels>div{display:grid;gap:8px;max-height:320px;overflow:auto;padding:4px}.sb-diagram-source{font-family:ui-monospace,monospace;font-size:12px;resize:vertical;margin-bottom:8px}.sb-diagram-upload{width:fit-content;cursor:pointer}.sb-diagram-upload input{display:none}.sb-diagram-editor .sb-editor-footer{display:flex;gap:8px}@media(max-width:420px){.sb-diagram-fields{grid-template-columns:minmax(0,1fr)}}@media print{.sb-external-diagram .viewport-lock-button{display:none}}
27617
- `);var n=q(se(),1),ut={archify:"family.archify","diagram-design":"family.diagramDesign","fireworks-tech-graph":"family.fireworks"};function ne({family:e,data:t,onChange:o,readOnly:i}){let a=ce(B),f=a(ut[e]),m=(0,p.useMemo)(()=>ee(e),[e]),h=(0,p.useMemo)(()=>Fe(e,t),[e,t]),d=(0,p.useMemo)(()=>k(t),[t]),l=(0,p.useMemo)(()=>Ne(h),[h]),x=(0,p.useMemo)(()=>De(He(e,h),d),[e,h,d]),c=(0,p.useMemo)(()=>je(e,x,d),[e,x,d]),w=d.title==="outside"?g(t.title,l.title):!t.presentation&&d.title==="inside"?g(t.title):"",M=d.description==="outside"?g(t.description,l.description):!t.presentation&&d.description==="inside"?g(t.description):"",E=he(`diagram-${e}`),I=(0,p.useRef)(""),[R,T]=(0,p.useState)(!1),[u,b]=(0,p.useState)({}),[j,O]=(0,p.useState)([]),[Ue,U]=(0,p.useState)(!1),[G,A]=(0,p.useState)(""),[qe,ae]=(0,p.useState)(!1),Ve=!!(o&&!i);(0,p.useEffect)(()=>ae(!1),[c]);let P=r=>{try{O(J(r)),U(!1),A("")}catch(s){O([]),A(s instanceof Error?s.message:String(s))}},Ye=()=>{if(R){T(!1);return}I.current=JSON.stringify(t),b({...t,source:h}),P(h),T(!0)},Ke=r=>{if(r==="custom"){b(y=>({...y,template:r}));return}let s=m.find(y=>y.id===r);b(y=>({...y,template:r,source:s.source})),P(s.source)},Qe=async r=>{if(r.size>8*1024*1024){A(a("fileTooLarge"));return}try{let s=await r.text();z(e,{template:"custom",source:s}),b(y=>({...y,template:"custom",source:s})),P(s)}catch(s){A(s instanceof Error?s.message:String(s))}},Xe=()=>{if(JSON.stringify(t)!==I.current){A(a("changedElsewhere"));return}try{let r={...u,source:Ue?Ge(g(u.source),j):g(u.source)};z(e,r),J(r.source),o?.(r),T(!1),A("")}catch(r){A(r instanceof Error?r.message:String(r))}},Ze=()=>{try{let r=Pe(x);V(`<!--
27616
+ -->${t}<style>${f}${n?Be(o):""}</style>`}re(`.sb-external-diagram{min-width:0;position:relative}.sb-diagram-frame{display:block;width:100%;border:0;border-radius:8px;background:var(--paper, #fff)}.sb-diagram-editor{display:grid;gap:12px;width:min(100%,520px);padding:12px}.sb-diagram-fields{display:grid;grid-template-columns:minmax(0,1fr) 100px;gap:10px}.sb-diagram-display-settings{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px}.sb-diagram-editor .sb-diagram-toggle{display:flex;align-items:center;gap:6px}.sb-diagram-editor .sb-diagram-toggle input{width:auto}.sb-diagram-notes{margin:8px 0;color:var(--muted)}.sb-diagram-editor select,.sb-diagram-editor input:not([type=file]),.sb-diagram-editor textarea{width:100%;min-width:0}.sb-diagram-editor details>summary{cursor:pointer;padding:8px 0;color:var(--text)}.sb-diagram-labels>div{display:grid;gap:8px;max-height:320px;overflow:auto;padding:4px}.sb-diagram-source{font-family:ui-monospace,monospace;font-size:12px;resize:vertical;margin-bottom:8px}.sb-diagram-upload{width:fit-content;cursor:pointer}.sb-diagram-upload input{display:none}.sb-diagram-editor .sb-editor-footer{display:flex;gap:8px}@media(max-width:420px){.sb-diagram-fields{grid-template-columns:minmax(0,1fr)}}@media print{.sb-external-diagram .viewport-lock-button{display:none}}
27617
+ `);var a=q(se(),1),ut={archify:"family.archify","diagram-design":"family.diagramDesign","fireworks-tech-graph":"family.fireworks"};function ne({family:e,data:t,onChange:o,readOnly:i}){let n=ce(B),f=n(ut[e]),m=(0,p.useMemo)(()=>ee(e),[e]),h=(0,p.useMemo)(()=>Fe(e,t),[e,t]),d=(0,p.useMemo)(()=>k(t),[t]),l=(0,p.useMemo)(()=>Ne(h),[h]),x=(0,p.useMemo)(()=>De(He(e,h),d),[e,h,d]),c=(0,p.useMemo)(()=>je(e,x,d),[e,x,d]),w=d.title==="outside"?g(t.title,l.title):!t.presentation&&d.title==="inside"?g(t.title):"",M=d.description==="outside"?g(t.description,l.description):!t.presentation&&d.description==="inside"?g(t.description):"",E=he(`diagram-${e}`),I=(0,p.useRef)(""),[R,T]=(0,p.useState)(!1),[u,b]=(0,p.useState)({}),[j,O]=(0,p.useState)([]),[Ue,U]=(0,p.useState)(!1),[G,A]=(0,p.useState)(""),[qe,ae]=(0,p.useState)(!1),Ve=!!(o&&!i);(0,p.useEffect)(()=>ae(!1),[c]);let P=r=>{try{O(J(r)),U(!1),A("")}catch(s){O([]),A(s instanceof Error?s.message:String(s))}},Ye=()=>{if(R){T(!1);return}I.current=JSON.stringify(t),b({...t,source:h}),P(h),T(!0)},Ke=r=>{if(r==="custom"){b(y=>({...y,template:r}));return}let s=m.find(y=>y.id===r);b(y=>({...y,template:r,source:s.source})),P(s.source)},Qe=async r=>{if(r.size>8*1024*1024){A(n("fileTooLarge"));return}try{let s=await r.text();z(e,{template:"custom",source:s}),b(y=>({...y,template:"custom",source:s})),P(s)}catch(s){A(s instanceof Error?s.message:String(s))}},Xe=()=>{if(JSON.stringify(t)!==I.current){A(n("changedElsewhere"));return}try{let r={...u,source:Ue?Ge(g(u.source),j):g(u.source)};z(e,r),J(r.source),o?.(r),T(!1),A("")}catch(r){A(r instanceof Error?r.message:String(r))}},Ze=()=>{try{let r=Pe(x);V(`<!--
27618
27618
  ${te(e).replaceAll("--","\u2014")}
27619
- -->${r}`,`${e}.svg`,"image/svg+xml"),A("")}catch(r){A(r instanceof Error?r.message:String(r))}};return(0,n.jsxs)("section",{ref:E.ref,className:"sb-block sb-external-diagram","aria-label":g(t.title,f),"data-diagram-family":e,"data-viewport-lock-scope":`diagram-${e}`,"data-viewport-locked":E.locked,"data-diagram-ready":qe,children:[(0,n.jsxs)(pe,{title:w||f,defaultTitle:f,description:M,editable:Ve,editing:R,onEdit:Ye,children:[(0,n.jsx)("button",{type:"button",className:"sb-icon-button","aria-label":a("downloadSvg"),title:a("downloadSvg"),onClick:Ze,children:(0,n.jsx)(oe,{size:16})}),(0,n.jsx)("button",{type:"button",className:"sb-icon-button","aria-label":a("downloadHtml"),title:a("downloadHtml"),onClick:()=>V(We(c,w,M,d.notes==="details"?l.notes:[]),`${e}.html`,"text/html"),children:"HTML"})]}),d.notes==="details"&&l.notes.length>0&&(0,n.jsxs)("details",{className:"sb-diagram-notes",children:[(0,n.jsx)("summary",{children:"\u8865\u5145\u8BF4\u660E"}),l.notes.map((r,s)=>(0,n.jsx)("p",{children:r},s))]}),(0,n.jsx)(fe,{...E,label:a("diagram"),unlockDescription:a("unlockDescription")}),(0,n.jsx)("iframe",{title:g(t.title,f),className:"sb-diagram-frame",sandbox:"allow-scripts allow-downloads",referrerPolicy:"no-referrer",srcDoc:c,style:{height:Number(t.height??560),pointerEvents:E.locked?"none":"auto"},tabIndex:E.locked?-1:0,onLoad:()=>ae(!0)}),G&&!R&&(0,n.jsx)("p",{className:"sb-error",role:"alert",children:G}),R&&(0,n.jsx)(me,{children:(0,n.jsxs)("div",{className:"sb-diagram-editor",onKeyDown:r=>{r.stopPropagation(),r.key==="Escape"&&T(!1)},children:[(0,n.jsx)(S,{label:"\u56FE\u5F62\u5448\u73B0",children:(0,n.jsxs)("select",{"aria-label":"\u56FE\u5F62\u5448\u73B0",value:JSON.stringify(k(u))===JSON.stringify(L)?"original":JSON.stringify(k(u))===JSON.stringify($)?"compact":"custom",onChange:r=>{r.target.value!=="custom"&&b(s=>({...s,presentation:r.target.value==="original"?L:$}))},children:[(0,n.jsx)("option",{value:"compact",children:"\u7B80\u6D01\uFF1A\u6807\u9898\u4E0E\u8BF4\u660E\u653E\u5728\u56FE\u5916"}),(0,n.jsx)("option",{value:"original",children:"\u539F\u7248\uFF1A\u4FDD\u7559\u4E0A\u6E38\u5B8C\u6574\u56FE\u5F62"}),(0,n.jsx)("option",{value:"custom",children:"\u81EA\u5B9A\u4E49\u663E\u793A"})]})}),(0,n.jsxs)("div",{className:"sb-diagram-display-settings",children:[[["title","\u6807\u9898"],["description","\u8BF4\u660E"]].map(([r,s])=>(0,n.jsx)(S,{label:`${s}\u4F4D\u7F6E`,children:(0,n.jsxs)("select",{"aria-label":`${s}\u4F4D\u7F6E`,value:k(u)[r],onChange:y=>b(C=>({...C,presentation:{...k(C),[r]:y.target.value}})),children:[(0,n.jsx)("option",{value:"outside",children:"\u653E\u5728\u56FE\u5916"}),(0,n.jsx)("option",{value:"inside",children:"\u4FDD\u7559\u5728\u56FE\u5185"}),(0,n.jsx)("option",{value:"hidden",children:"\u9690\u85CF"})]})},r)),(0,n.jsx)(S,{label:"\u8865\u5145\u8BF4\u660E",children:(0,n.jsxs)("select",{"aria-label":"\u8865\u5145\u8BF4\u660E\u663E\u793A",value:k(u).notes,onChange:r=>b(s=>({...s,presentation:{...k(s),notes:r.target.value}})),children:[(0,n.jsx)("option",{value:"hidden",children:"\u9690\u85CF"}),(0,n.jsx)("option",{value:"details",children:"\u6298\u53E0\u5230\u56FE\u5916"}),(0,n.jsx)("option",{value:"inline",children:"\u4FDD\u7559\u539F\u4F4D\u7F6E"})]})}),[["legend","\u663E\u793A\u56FE\u4F8B"],["controls","\u663E\u793A\u9605\u8BFB\u63A7\u4EF6"]].map(([r,s])=>(0,n.jsxs)("label",{className:"sb-diagram-toggle",children:[(0,n.jsx)("input",{"aria-label":s,type:"checkbox",checked:k(u)[r],onChange:y=>b(C=>({...C,presentation:{...k(C),[r]:y.target.checked}}))}),s]},r))]}),(0,n.jsx)(S,{label:a("template"),children:(0,n.jsxs)("select",{"aria-label":a("diagramTemplate"),value:g(u.template),onChange:r=>Ke(r.target.value),children:[m.map(r=>(0,n.jsx)("option",{value:r.id,children:r.name},r.id)),(0,n.jsx)("option",{value:"custom",children:a("customTemplate")})]})}),(0,n.jsxs)("div",{className:"sb-diagram-fields",children:[(0,n.jsx)(S,{label:a("title"),children:(0,n.jsx)("input",{"aria-label":a("diagramTitle"),value:g(u.title),onChange:r=>b(s=>({...s,title:r.target.value}))})}),(0,n.jsx)(S,{label:a("height"),children:(0,n.jsx)("input",{"aria-label":a("diagramHeight"),type:"number",min:240,max:1200,value:Number(u.height??560),onChange:r=>b(s=>({...s,height:Number(r.target.value)}))})})]}),(0,n.jsx)(S,{label:a("description"),children:(0,n.jsx)("textarea",{"aria-label":a("diagramDescription"),rows:2,value:g(u.description),onChange:r=>b(s=>({...s,description:r.target.value}))})}),(0,n.jsxs)("details",{className:"sb-diagram-labels",children:[(0,n.jsx)("summary",{children:a("labelsSummary",{count:j.length})}),(0,n.jsx)("div",{children:j.map((r,s)=>(0,n.jsx)(S,{label:a("labelField",{index:s+1}),children:(0,n.jsx)("input",{"aria-label":a("labelInput",{index:s+1}),value:r,onChange:y=>{O(C=>C.map((Je,_e)=>_e===s?y.target.value:Je)),U(!0)}})},s))})]}),(0,n.jsxs)("details",{children:[(0,n.jsx)("summary",{children:a("source")}),(0,n.jsx)("textarea",{"aria-label":a("source"),className:"sb-diagram-source",rows:12,spellCheck:!1,value:g(u.source),onChange:r=>{b(s=>({...s,source:r.target.value})),O([]),U(!1)}}),(0,n.jsx)("button",{type:"button",className:"sb-button",onClick:()=>P(g(u.source)),children:a("readLabels")})]}),(0,n.jsxs)("label",{className:"sb-button sb-diagram-upload",children:[(0,n.jsx)(ie,{size:14}),a("importFile"),(0,n.jsx)("input",{type:"file","aria-label":a("importFileInput"),accept:".html,.htm,.svg,text/html,image/svg+xml",onChange:r=>{let s=r.target.files?.[0];s&&Qe(s),r.target.value=""}})]}),G&&(0,n.jsx)("p",{className:"sb-error",role:"alert",children:G}),(0,n.jsxs)("div",{className:"sb-editor-footer",children:[(0,n.jsx)("button",{type:"button",className:"sb-button",onClick:Xe,children:a("save")}),(0,n.jsx)("button",{type:"button",className:"sb-button",onClick:()=>T(!1),children:a("cancel")})]})]})})]})}function an(e){return(0,n.jsx)(ne,{...e,family:"archify"})}function rn(e){return(0,n.jsx)(ne,{...e,family:"diagram-design"})}function on(e){return(0,n.jsx)(ne,{...e,family:"fireworks-tech-graph"})}export{an as ArchifyBlock,rn as DiagramDesignBlock,on as FireworksTechGraphBlock};
27619
+ -->${r}`,`${e}.svg`,"image/svg+xml"),A("")}catch(r){A(r instanceof Error?r.message:String(r))}};return(0,a.jsxs)("section",{ref:E.ref,className:"sb-block sb-external-diagram","aria-label":g(t.title,f),"data-diagram-family":e,"data-viewport-lock-scope":`diagram-${e}`,"data-viewport-locked":E.locked,"data-diagram-ready":qe,children:[(0,a.jsxs)(pe,{title:w||f,defaultTitle:f,description:M,editable:Ve,editing:R,onEdit:Ye,children:[(0,a.jsx)("button",{type:"button",className:"sb-icon-button","aria-label":n("downloadSvg"),title:n("downloadSvg"),onClick:Ze,children:(0,a.jsx)(oe,{size:16})}),(0,a.jsx)("button",{type:"button",className:"sb-icon-button","aria-label":n("downloadHtml"),title:n("downloadHtml"),onClick:()=>V(We(c,w,M,d.notes==="details"?l.notes:[]),`${e}.html`,"text/html"),children:"HTML"})]}),d.notes==="details"&&l.notes.length>0&&(0,a.jsxs)("details",{className:"sb-diagram-notes",children:[(0,a.jsx)("summary",{children:n("presentation.notes")}),l.notes.map((r,s)=>(0,a.jsx)("p",{children:r},s))]}),(0,a.jsx)(fe,{...E,label:n("diagram"),unlockDescription:n("unlockDescription")}),(0,a.jsx)("iframe",{title:g(t.title,f),className:"sb-diagram-frame",sandbox:"allow-scripts allow-downloads",referrerPolicy:"no-referrer",srcDoc:c,style:{height:Number(t.height??560),pointerEvents:E.locked?"none":"auto"},tabIndex:E.locked?-1:0,onLoad:()=>ae(!0)}),G&&!R&&(0,a.jsx)("p",{className:"sb-error",role:"alert",children:G}),R&&(0,a.jsx)(me,{children:(0,a.jsxs)("div",{className:"sb-diagram-editor",onKeyDown:r=>{r.stopPropagation(),r.key==="Escape"&&T(!1)},children:[(0,a.jsx)(S,{label:n("presentation.label"),children:(0,a.jsxs)("select",{"aria-label":n("presentation.label"),value:JSON.stringify(k(u))===JSON.stringify(L)?"original":JSON.stringify(k(u))===JSON.stringify($)?"compact":"custom",onChange:r=>{r.target.value!=="custom"&&b(s=>({...s,presentation:r.target.value==="original"?L:$}))},children:[(0,a.jsx)("option",{value:"compact",children:n("presentation.compact")}),(0,a.jsx)("option",{value:"original",children:n("presentation.original")}),(0,a.jsx)("option",{value:"custom",children:n("presentation.custom")})]})}),(0,a.jsxs)("div",{className:"sb-diagram-display-settings",children:[[["title","presentation.titlePosition"],["description","presentation.descriptionPosition"]].map(([r,s])=>(0,a.jsx)(S,{label:n(s),children:(0,a.jsxs)("select",{"aria-label":n(s),value:k(u)[r],onChange:y=>b(C=>({...C,presentation:{...k(C),[r]:y.target.value}})),children:[(0,a.jsx)("option",{value:"outside",children:n("presentation.outside")}),(0,a.jsx)("option",{value:"inside",children:n("presentation.inside")}),(0,a.jsx)("option",{value:"hidden",children:n("presentation.hidden")})]})},r)),(0,a.jsx)(S,{label:n("presentation.notes"),children:(0,a.jsxs)("select",{"aria-label":n("presentation.notesDisplay"),value:k(u).notes,onChange:r=>b(s=>({...s,presentation:{...k(s),notes:r.target.value}})),children:[(0,a.jsx)("option",{value:"hidden",children:n("presentation.hidden")}),(0,a.jsx)("option",{value:"details",children:n("presentation.details")}),(0,a.jsx)("option",{value:"inline",children:n("presentation.inline")})]})}),[["legend","presentation.legend"],["controls","presentation.controls"]].map(([r,s])=>(0,a.jsxs)("label",{className:"sb-diagram-toggle",children:[(0,a.jsx)("input",{"aria-label":n(s),type:"checkbox",checked:k(u)[r],onChange:y=>b(C=>({...C,presentation:{...k(C),[r]:y.target.checked}}))}),n(s)]},r))]}),(0,a.jsx)(S,{label:n("template"),children:(0,a.jsxs)("select",{"aria-label":n("diagramTemplate"),value:g(u.template),onChange:r=>Ke(r.target.value),children:[m.map(r=>(0,a.jsx)("option",{value:r.id,children:r.name},r.id)),(0,a.jsx)("option",{value:"custom",children:n("customTemplate")})]})}),(0,a.jsxs)("div",{className:"sb-diagram-fields",children:[(0,a.jsx)(S,{label:n("title"),children:(0,a.jsx)("input",{"aria-label":n("diagramTitle"),value:g(u.title),onChange:r=>b(s=>({...s,title:r.target.value}))})}),(0,a.jsx)(S,{label:n("height"),children:(0,a.jsx)("input",{"aria-label":n("diagramHeight"),type:"number",min:240,max:1200,value:Number(u.height??560),onChange:r=>b(s=>({...s,height:Number(r.target.value)}))})})]}),(0,a.jsx)(S,{label:n("description"),children:(0,a.jsx)("textarea",{"aria-label":n("diagramDescription"),rows:2,value:g(u.description),onChange:r=>b(s=>({...s,description:r.target.value}))})}),(0,a.jsxs)("details",{className:"sb-diagram-labels",children:[(0,a.jsx)("summary",{children:n("labelsSummary",{count:j.length})}),(0,a.jsx)("div",{children:j.map((r,s)=>(0,a.jsx)(S,{label:n("labelField",{index:s+1}),children:(0,a.jsx)("input",{"aria-label":n("labelInput",{index:s+1}),value:r,onChange:y=>{O(C=>C.map((Je,_e)=>_e===s?y.target.value:Je)),U(!0)}})},s))})]}),(0,a.jsxs)("details",{children:[(0,a.jsx)("summary",{children:n("source")}),(0,a.jsx)("textarea",{"aria-label":n("source"),className:"sb-diagram-source",rows:12,spellCheck:!1,value:g(u.source),onChange:r=>{b(s=>({...s,source:r.target.value})),O([]),U(!1)}}),(0,a.jsx)("button",{type:"button",className:"sb-button",onClick:()=>P(g(u.source)),children:n("readLabels")})]}),(0,a.jsxs)("label",{className:"sb-button sb-diagram-upload",children:[(0,a.jsx)(ie,{size:14}),n("importFile"),(0,a.jsx)("input",{type:"file","aria-label":n("importFileInput"),accept:".html,.htm,.svg,text/html,image/svg+xml",onChange:r=>{let s=r.target.files?.[0];s&&Qe(s),r.target.value=""}})]}),G&&(0,a.jsx)("p",{className:"sb-error",role:"alert",children:G}),(0,a.jsxs)("div",{className:"sb-editor-footer",children:[(0,a.jsx)("button",{type:"button",className:"sb-button",onClick:Xe,children:n("save")}),(0,a.jsx)("button",{type:"button",className:"sb-button",onClick:()=>T(!1),children:n("cancel")})]})]})})]})}function an(e){return(0,a.jsx)(ne,{...e,family:"archify"})}function rn(e){return(0,a.jsx)(ne,{...e,family:"diagram-design"})}function on(e){return(0,a.jsx)(ne,{...e,family:"fireworks-tech-graph"})}export{an as ArchifyBlock,rn as DiagramDesignBlock,on as FireworksTechGraphBlock};