@kgdiff/viewer 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -8
- package/dist/controller.d.ts +23 -7
- package/dist/controller.d.ts.map +1 -1
- package/dist/controller.js +119 -14
- package/dist/controller.js.map +1 -1
- package/dist/element.d.ts +6 -3
- package/dist/element.d.ts.map +1 -1
- package/dist/element.js +68 -19
- package/dist/element.js.map +1 -1
- package/dist/hash-sync.d.ts +4 -2
- package/dist/hash-sync.d.ts.map +1 -1
- package/dist/hash-sync.js +21 -5
- package/dist/hash-sync.js.map +1 -1
- package/dist/i18n.d.ts +7 -7
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +14 -14
- package/dist/i18n.js.map +1 -1
- package/dist/index.d.ts +21 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/keyboard.d.ts +6 -4
- package/dist/keyboard.d.ts.map +1 -1
- package/dist/keyboard.js +6 -5
- package/dist/keyboard.js.map +1 -1
- package/dist/prefs.d.ts +7 -1
- package/dist/prefs.d.ts.map +1 -1
- package/dist/prefs.js +15 -3
- package/dist/prefs.js.map +1 -1
- package/dist/standalone/kgdiff-viewer.js +4 -4
- package/dist/styles.d.ts.map +1 -1
- package/dist/styles.js +69 -63
- package/dist/styles.js.map +1 -1
- package/dist/ui/context.d.ts +2 -0
- package/dist/ui/context.d.ts.map +1 -1
- package/dist/ui/context.js.map +1 -1
- package/dist/ui/dock.d.ts +17 -0
- package/dist/ui/dock.d.ts.map +1 -0
- package/dist/ui/dock.js +151 -0
- package/dist/ui/dock.js.map +1 -0
- package/dist/ui/header.d.ts +7 -2
- package/dist/ui/header.d.ts.map +1 -1
- package/dist/ui/header.js +24 -133
- package/dist/ui/header.js.map +1 -1
- package/dist/ui/popovers.d.ts.map +1 -1
- package/dist/ui/popovers.js +3 -2
- package/dist/ui/popovers.js.map +1 -1
- package/dist/ui/sidebar.d.ts.map +1 -1
- package/dist/ui/sidebar.js +2 -1
- package/dist/ui/sidebar.js.map +1 -1
- package/dist/ui/stage.d.ts +4 -0
- package/dist/ui/stage.d.ts.map +1 -1
- package/dist/ui/stage.js +41 -94
- package/dist/ui/stage.js.map +1 -1
- package/dist/ui/swatch.d.ts +7 -0
- package/dist/ui/swatch.d.ts.map +1 -0
- package/dist/ui/swatch.js +26 -0
- package/dist/ui/swatch.js.map +1 -0
- package/package.json +6 -6
- package/src/controller.ts +131 -20
- package/src/element.ts +72 -21
- package/src/hash-sync.ts +20 -6
- package/src/i18n.ts +15 -14
- package/src/index.ts +21 -9
- package/src/keyboard.ts +12 -6
- package/src/prefs.ts +19 -4
- package/src/styles.ts +69 -63
- package/src/ui/context.ts +2 -0
- package/src/ui/dock.ts +198 -0
- package/src/ui/header.ts +38 -168
- package/src/ui/popovers.ts +3 -2
- package/src/ui/sidebar.ts +2 -1
- package/src/ui/stage.ts +49 -114
- package/src/ui/swatch.ts +31 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
var KgdiffViewer=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n<32||n===34||n===92||n>=55296&&n<=57343)return!0}return!1}function n(e){return t(e)?JSON.stringify(e):`"${e}"`}function r(e,t,r){return`[${n(e)},${n(t)},${n(r)}]`}function i(e){return Array.isArray(e)}function a(){return{}}function o(e,t,n){t===`__proto__`?Object.defineProperty(e,t,{value:n,enumerable:!0,writable:!0,configurable:!0}):e[t]=n}function s(e,t){return Object.hasOwn(e,t)?e[t]:void 0}function c(e){return Object.keys(e).filter(t=>e[t]!==void 0)}function l(e){return c(e).sort()}function u(e){return typeof e!=`object`||!e?e:i(e)?e.map(u):d(e)}function d(e){let t=a();for(let n of l(e))o(t,n,u(e[n]));return t}function f(e){return JSON.stringify(u(e))}var p=class extends Error{code;details;name=`KgdiffError`;constructor(e,t,n){super(t),this.code=e,this.details=n}};function m(e,t){return e<t?-1:+(e>t)}function h(e){if(e.length<=1){let t=e[0];return t===void 0||t===``?[]:[t]}let t=[...new Set(e)].filter(e=>e!==``);return t.length>1&&t.sort(),t}function g(e,t,n){let r=e.get(t);return r===void 0&&(r=n(),e.set(t,r)),r}function _(e,t,n){let r=e.get(t);r?r.push(n):e.set(t,[n])}var v=Object.freeze([]);function y(e,t){return t===void 0?0:(e.outgoing.get(t)?.length??0)+(e.incoming.get(t)?.length??0)}function b(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var x=/^[\x20-\x7e]*$/;function S(e){return x.test(e)?e:e.normalize(`NFC`)}var ee=/^\d+$/;function te(e){if(!e.includes(`%`))return e;try{return decodeURIComponent(e)}catch{return e}}function ne(e){let t=re.get(e);return t===void 0&&(re.size>=ie&&re.clear(),t=oe(e),re.set(e,t)),t}var re=new Map,ie=4096,ae=/^https?:\/\/purl\.obolibrary\.org\/obo\/([A-Za-z][A-Za-z0-9]*)_(\d+)$/;function oe(e){let t=ae.exec(e);if(t)return`${t[1]}:${t[2]}`;let n=e.length;for(;n>0&&`#/:`.includes(e.charAt(n-1));)n--;let r=e.slice(0,n),i=Math.max(r.lastIndexOf(`#`),r.lastIndexOf(`/`),r.lastIndexOf(`:`)),a=r.slice(i+1);if(a===``||ee.test(a))return S(e);let o=te(a).replaceAll(`_`,` `).replace(/\s+/g,` `).trim();return S(o===``?e:o)}var se=Object.freeze([`rdfs:subClassOf`,`http://www.w3.org/2000/01/rdf-schema#subClassOf`,`rdfs:subPropertyOf`,`http://www.w3.org/2000/01/rdf-schema#subPropertyOf`,`skos:broader`,`http://www.w3.org/2004/02/skos/core#broader`,`is_a`,`subClassOf`,`parent`]),ce=Object.freeze({strategy:`auto`,threshold:.82,suggestThreshold:.6,maxCandidates:8}),le=new Set([`id`,`auto`,`similarity`]),ue=new Set([`structure`,`id`]);function C(e,t){throw new p(`invalid-input`,e,{option:t})}function de(e,t,n){return e===void 0?t:(typeof e==`number`&&e>=0&&e<=1||C(`${n} must be a number between 0 and 1 (got ${String(e)})`,n),e)}function fe(e,t,n){return e===void 0?[...t]:((!Array.isArray(e)||e.some(e=>typeof e!=`string`))&&C(`${n} must be an array of strings`,n),[...new Set(e)])}function pe(e){if(e===void 0)return ce;typeof e==`object`&&e||C(`match options must be an object`,`match`);let t=e.strategy??ce.strategy;le.has(t)||C(`match.strategy must be 'id', 'auto' or 'similarity' (got ${String(t)})`,`match.strategy`);let n=e.maxCandidates??ce.maxCandidates;return(!Number.isInteger(n)||n<1)&&C(`match.maxCandidates must be a positive integer (got ${String(n)})`,`match.maxCandidates`),{strategy:t,threshold:de(e.threshold,ce.threshold,`match.threshold`),suggestThreshold:de(e.suggestThreshold,ce.suggestThreshold,`match.suggestThreshold`),maxCandidates:n}}function me(e,t=`structure`){return e===void 0?t:(typeof e==`string`&&ue.has(e)||C(`edgeIdentity must be 'structure' or 'id' (got ${String(e)})`,`edgeIdentity`),e)}function he(e){e===void 0||typeof e==`object`&&e||C(`options must be an object`,`options`);let t=e??{};for(let e of[`detectMerges`,`detectSplits`])t[e]!==void 0&&typeof t[e]!=`boolean`&&C(`${e} must be a boolean`,e);return{match:pe(t.match),edgeIdentity:me(t.edgeIdentity),hierarchyPredicates:fe(t.hierarchyPredicates,se,`hierarchyPredicates`),detectMerges:t.detectMerges??!0,detectSplits:t.detectSplits??!0,ignoreAttrs:fe(t.ignoreAttrs,[],`ignoreAttrs`).sort()}}var ge=Object.freeze({}),_e=new Set([`create`,`drop`,`error`]);function ve(e,t){throw new p(`invalid-input`,e,t)}function ye(e){let{format:t,version:n}=e;if(typeof t==`string`&&t.startsWith(`kgdiff.`)){if(t!==`kgdiff.graph`)throw new p(`unsupported-version`,`Expected a kgdiff graph (format "kgdiff.graph"), got format "${t}"`,{format:t});if(n!==1)throw new p(`unsupported-version`,`Unsupported graph version ${String(n)}; this reader supports version 1`,{version:n})}}function be(e){if(typeof e==`string`)return e===``?void 0:e;if(typeof e==`number`&&Number.isFinite(e))return String(e)}function xe(e,t){return t===void 0?{what:`Node "${e}"`,ref:e}:{what:`Edge ${e} → ${t}`,ref:`${e} → ${t}`}}function Se(e,t,n,r){let{what:i,ref:a}=xe(e,t);return ve(`${i}: ${n} must be ${r}`,{ref:a})}function Ce(e,t,n,r){if(e!=null)return typeof e!=`string`&&Se(t,n,r,`a string`),e}function we(e,t,n){return e==null?v:typeof e==`string`?[e]:((!Array.isArray(e)||e.some(e=>typeof e!=`string`))&&Se(t,void 0,n,`an array of strings`),e)}var Te=1e3;function Ee(e,t,n){switch(typeof e){case`string`:case`boolean`:return e;case`number`:return Number.isFinite(e)?e:String(e);case`bigint`:return String(e);case`undefined`:case`function`:case`symbol`:n();return}if(e===null)return null;if(t>=Te)throw new p(`invalid-input`,`Attribute values may be nested at most ${Te} levels deep (or the value is cyclic)`);if(e instanceof Date)return Number.isNaN(e.getTime())?`Invalid Date`:e.toISOString();if(Array.isArray(e))return e.map(e=>Ee(e,t+1,n)??null);let r=e.toJSON;if(typeof r==`function`)return Ee(r.call(e),t+1,n);let i=a();for(let r of Object.keys(e)){let a=e[r],s=typeof a==`string`||typeof a==`boolean`||typeof a==`number`&&Number.isFinite(a)?a:Ee(a,t+1,n);s!==void 0&&o(i,r,s)}return i}function De(e,t,n,r){if(e==null)return;b(e)||Se(t,n,`attrs`,`an object`);let i=0,a=Ee(e,0,()=>i++);if(i>0){let{what:e,ref:a}=xe(t,n);r.push({code:`invalid-attr`,message:`${e}: ${i} attribute value(s) that are not JSON (function, symbol or undefined) were dropped`,ref:a})}return a}function Oe(e){if(!b(e))return;let{x:t,y:n}=e;return typeof t==`number`&&typeof n==`number`&&Number.isFinite(t)&&Number.isFinite(n)?{x:t,y:n}:void 0}function ke(e,t,n){let r=we(e.type,t,`type`),i=we(e.types,t,`types`),a=we(e.aliases,t,`aliases`),o=i.length?[...r,...i]:r,s={id:t,types:o.length?o.map(S):v,aliases:a.length?a.map(S):v,replaces:we(e.replaces,t,`replaces`),replacedBy:we(e.replacedBy,t,`replacedBy`),implicit:e.implicit===!0},c=Ce(e.label,t,void 0,`label`);c&&(s.label=S(c));let l=De(e.attrs,t,void 0,n);l&&(s.attrs=l),e.deprecated!==void 0&&e.deprecated!==null&&(typeof e.deprecated!=`boolean`&&Se(t,void 0,`deprecated`,`a boolean`),s.deprecated=e.deprecated);let u=Oe(e.position);return u&&(s.position=u),s}function Ae(e,t){return e===void 0?t:t===void 0?e:f(t)>f(e)?t:e}function je(e,t){if(!e||!t)return e??t;let n=a();for(let r of new Set([...Object.keys(e),...Object.keys(t)])){let i=Ae(s(e,r),s(t,r));i!==void 0&&o(n,r,i)}return n}function Me(e,t){let n=Ae(e.label,t.label);n!==void 0&&(e.label=n);let r=Ae(e.deprecated,t.deprecated);r!==void 0&&(e.deprecated=r);let i=Ae(e.position,t.position);i&&(e.position=i);let a=je(e.attrs,t.attrs);a&&(e.attrs=a),e.types=[...e.types,...t.types],e.aliases=[...e.aliases,...t.aliases],e.replaces=[...e.replaces,...t.replaces],e.replacedBy=[...e.replacedBy,...t.replacedBy],e.implicit=e.implicit&&t.implicit}function Ne(e){let t=e.label??e.id,n=h(e.aliases),r=n.indexOf(t);r>=0&&n.splice(r,1);let i={id:e.id,label:t,types:e.types.length?h(e.types):v,aliases:n.length?n:v,attrs:e.attrs??ge,deprecated:e.deprecated??!1,replaces:e.replaces.length?h(e.replaces):v,replacedBy:e.replacedBy.length?h(e.replacedBy):v,implicit:e.implicit};return e.position&&(i.position=e.position),i}function Pe(e){return f([e.label,e.attrs])}function Fe(e,t){return t.id===void 0?{key:e,source:t.source,target:t.target,predicate:t.predicate,label:t.label,attrs:t.attrs}:{key:e,id:t.id,source:t.source,target:t.target,predicate:t.predicate,label:t.label,attrs:t.attrs}}function Ie(e){return typeof e==`object`&&!!e&&e.nodes instanceof Map&&e.edges instanceof Map}function Le(e,t={}){b(e)&&ye(e),b(e)&&Array.isArray(e.nodes)||ve(`normalize expects a graph of the form { nodes: [...], edges: [...] }`),e.edges!==void 0&&e.edges!==null&&!Array.isArray(e.edges)&&ve(`graph.edges must be an array`);let n=me(t.edgeIdentity),i=t.danglingEdges??`create`;_e.has(i)||ve(`danglingEdges must be 'create', 'drop' or 'error' (got ${String(i)})`);let a=[],o=new Map;for(let t of e.nodes){b(t)||ve(`graph.nodes must contain objects`);let e=be(t.id);if(e===void 0){a.push({code:`empty-id`,message:`Dropped a node without an id`});continue}let n=ke(t,e,a),r=o.get(e);r?(Me(r,n),a.push({code:`duplicate-node`,message:`Node "${e}" is declared more than once; the declarations were merged`,ref:e})):o.set(e,n)}let s=new Map,c=[];for(let t of e.edges??[]){b(t)||ve(`graph.edges must contain objects`);let e=t,n=be(e.source),r=be(e.target);if(n===void 0||r===void 0){a.push({code:`empty-id`,message:`Dropped an edge with an empty endpoint`});continue}let l=Ce(e.predicate,n,r,`predicate`)??``,u=Ce(e.label,n,r,`label`),d=u===void 0?void 0:S(u);if(d===void 0&&(d=s.get(l),d===void 0&&(d=ne(l),s.set(l,d))),(!o.has(n)||!o.has(r))&&(Re(n,l,r,i,o,a),i===`drop`))continue;let f=be(e.id),p=De(e.attrs,n,r,a)??ge;c.push(f===void 0?{key:``,source:n,target:r,predicate:l,label:d,attrs:p}:{key:``,id:f,source:n,target:r,predicate:l,label:d,attrs:p})}let l=new Map;for(let[e,t]of o)l.set(e,Ne(t));let u=[],d=new Map,f=new Map;for(let e of c){let t=n===`id`&&e.id!==void 0,i=t?e.id:r(e.source,e.predicate,e.target),a=t?d:f,o=a.get(i);if(o)o.more?o.more.push(e):o.more=[e];else{let n={base:i,idKeyed:t,first:e};a.set(i,n),u.push(n)}}let p=n===`id`?new Set:void 0,h=e=>{if(!p)return e;let t=e;for(let n=2;p.has(t);n++)t=`${e}#${n}`;return p.add(t),t};for(let e of[!0,!1])for(let t of u){if(t.idKeyed!==e)continue;let{base:n,first:r,more:i}=t;if(!i){r.key=h(n),t.edge=r;continue}let o=[],s=(e,t)=>{o.push(Fe(h(e),t))};e?(s(n,ze([r,...i])),a.push({code:`duplicate-edge`,message:`Edge id "${n}" is used ${i.length+1} times; the declarations were merged`,ref:n})):Be(n,[r,...i],s,a),t.edges=o}let g=new Map;for(let e of u)if(e.edge)g.set(e.edge.key,e.edge);else for(let t of e.edges??[])g.set(t.key,t);let y=new Map,x=new Map;for(let e of g.values())_(y,e.source,e.key),_(x,e.target,e.key);for(let e of l.keys())y.has(e)||y.set(e,v),x.has(e)||x.set(e,v);return a.sort((e,t)=>m(e.code,t.code)||m(e.ref??``,t.ref??``)||m(e.message,t.message)),{meta:b(e.meta)?{...e.meta}:{},nodes:l,edges:g,outgoing:y,incoming:x,edgeIdentity:n,issues:a}}function Re(e,t,n,i,a,o){for(let s of e===n?[e]:[e,n])if(!a.has(s)){if(i===`error`)throw new p(`dangling-edge`,`Edge ${r(e,t,n)} points to the missing node "${s}"`,{source:e,predicate:t,target:n,missing:s});i===`create`&&a.set(s,{id:s,types:[],aliases:[],replaces:[],replacedBy:[],implicit:!0}),o.push({code:`dangling-edge`,message:i===`create`?`Edge endpoint "${s}" is not declared; an implicit node was created`:`Dropped an edge whose endpoint "${s}" is not declared`,ref:s})}}function ze(e){let t=e=>f([e.source,e.predicate,e.target,e.label]),n=e[0],r=n.attrs;for(let i=1;i<e.length;i++){let a=e[i];t(a)>t(n)&&(n=a),r=je(r,a.attrs)}return{...n,attrs:r??ge}}function Be(e,t,n,r){let i=new Map,a=0;for(let e of t){let t=Pe(e),n=i.get(t);n?(a++,e.id!==void 0&&(n.id===void 0||e.id<n.id)&&i.set(t,e)):i.set(t,e)}let o=[...i].map(([e,t])=>({draft:t,content:e})).sort((e,t)=>m(e.content,t.content));o.forEach(({draft:t},r)=>{n(r===0?e:`${e}#${r+1}`,t)}),a>0&&r.push({code:`duplicate-edge`,message:`Edge ${e} is declared ${a+1} times with identical content; the copies were collapsed`,ref:e}),o.length>1&&r.push({code:`duplicate-edge`,message:`Edge ${e} has ${o.length} parallel copies; they are keyed #2, #3…`,ref:e})}function Ve(e){return{id:e.id,label:e.label,types:e.types,aliases:e.aliases,attrs:e.attrs,deprecated:e.deprecated,replaces:e.replaces,replacedBy:e.replacedBy,implicit:e.implicit,...e.position?{position:e.position}:{}}}var He=Object.freeze([]);function Ue(e){let t;return()=>(t??=e(),t)}function We(e,t){let n=new Map;for(let r of e){let e=t(r);e!==void 0&&n.set(e,r)}return n}function Ge(e,t,n){let r=Ue(()=>We(e,e=>e.id)),i=Ue(()=>We(e,e=>e.beforeId)),a=Ue(()=>We(e,e=>e.afterId)),o=Ue(()=>We(t,e=>e.id)),s=Ue(()=>We(n,e=>e.id)),c=Ue(()=>{let e=new Map;for(let n of t){let t=new Set([n.source,n.target]);n.sourceBefore!==void 0&&t.add(n.sourceBefore),n.targetBefore!==void 0&&t.add(n.targetBefore);for(let r of t){let t=e.get(r);t?t.push(n):e.set(r,[n])}}return e});return{node:e=>r().get(e),edge:e=>o().get(e),hunk:e=>s().get(e),nodeByBefore:e=>i().get(e),nodeByAfter:e=>a().get(e),edgesOf:e=>c().get(e)??He}}function Ke(e,t,n){let r=e.after??e.before,i={id:e.id,status:e.status,facets:e.facets,label:r.label,types:r.types,degree:{before:y(t,e.beforeId),after:y(n,e.afterId)}};return e.beforeId!==void 0&&(i.beforeId=e.beforeId),e.afterId!==void 0&&(i.afterId=e.afterId),e.before&&(i.before=e.before),e.after&&(i.after=e.after),e.hunk!==void 0&&(i.hunk=e.hunk),i}function qe(e){let t={id:e.id,source:e.source,target:e.target,predicate:e.predicate,label:e.label,status:e.status,facets:e.facets,hierarchical:e.hierarchical};return e.sourceBefore!==void 0&&(t.sourceBefore=e.sourceBefore),e.targetBefore!==void 0&&(t.targetBefore=e.targetBefore),e.predicateBefore!==void 0&&(t.predicateBefore=e.predicateBefore),e.beforeKey!==void 0&&(t.beforeKey=e.beforeKey),e.afterKey!==void 0&&(t.afterKey=e.afterKey),e.before&&(t.before=e.before),e.after&&(t.after=e.after),e.hunk!==void 0&&(t.hunk=e.hunk),t}function w(e){return String(Math.trunc(e)).replace(/\B(?=(\d{3})+(?!\d))/g,`,`)}function Je(e){return`${Math.round(e*100)}%`}var Ye={node:[`node`,`nodes`],relation:[`relation`,`relations`],attribute:[`attribute`,`attributes`],type:[`type`,`types`],synonym:[`synonym`,`synonyms`],duplicate:[`duplicate`,`duplicates`]},Xe={node:[`个`,`节点`],relation:[`条`,`关系`],attribute:[`个`,`属性`],type:[`个`,`类型`],synonym:[`个`,`别名`],duplicate:[`条`,`重复关系`]};function Ze(e,t,n){let r=[];return e&&r.push(`+${w(e)}`),t&&r.push(`−${w(t)}`),n&&r.push(`~${w(n)}`),r.join(` `)}var Qe=(()=>{let e=e=>{let[t,n]=e.split(nt);return n===void 0?`“${e}”`:`“${t}” (${n})`},t=(e,t)=>`${w(e)} ${Ye[t][e===1?0:1]}`,n=(t,n)=>{let r=t.slice(0,2).map(e);return n<=1?r[0]??``:n===2?`${r[0]} and ${r[1]}`:`${r[0]}, ${r[1]} and ${w(n-2)} more`},r=n=>(r,i,a)=>{let o=e(r[0]??``),s=a?t(a,`relation`):``;if(i<=1)return s?`${n} ${o} and ${s}`:`${n} ${o}`;if(i===2){let t=e(r[1]??``);return s?`${n} ${o}, ${t} and ${s}`:`${n} ${o} and ${t}`}let c=`${w(i-1)} more nodes`;return s?`${n} ${o}, ${c} and ${s}`:`${n} ${o} and ${c}`},i=(t,n,r)=>`${e(t)} —${n}→ ${e(r)}`;return{quote:e,names:n,delta:(e,t,n,r)=>{let i=t+n+r;return i?`${Ze(t,n,r)} ${Ye[e][i===1?0:1]}`:``},facets:{rekey:`Re-keyed`,rename:`Renamed`,mergedInto:`Merged into`,mergeTarget:`Merge target`,splitFrom:`Split from`,splitInto:`Split into`,move:`Moved`,deprecate:`Deprecated`,replacement:`Replacement links`,types:`Types changed`,aliases:`Synonyms changed`,attrs:`Attributes changed`,retarget:`Retargeted`,predicate:`Relation type changed`,label:`Relabeled`,collapsed:`Collapsed duplicate`},title:{merged:(e,t)=>`Merged ${e} into ${t}`,split:(e,t)=>`Split ${e} into ${t}`,added:r(`Added`),removed:r(`Removed`),renamed:(t,n)=>`Renamed ${e(t)} → ${e(n)}`,moved:(t,n)=>`Moved ${e(t)} under ${n}`,detached:(t,n)=>`Detached ${e(t)} from ${n}`,deprecated:t=>`Deprecated ${e(t)}`,restored:t=>`Restored ${e(t)}`,rekeyed:t=>`Changed the id of ${e(t)}`,attrs:t=>`Updated attributes of ${e(t)}`,types:t=>`Changed the type of ${e(t)}`,aliases:t=>`Updated synonyms of ${e(t)}`,replacement:t=>`Updated replacement links of ${e(t)}`,edited:t=>`Edited ${e(t)}`,pointsTo:(t,n,r,i)=>`${e(t)}: ${n} now points to ${e(r)} (was ${e(i)})`,comesFrom:(t,n,r,i)=>`${e(t)}: ${n} now comes from ${e(r)} (was ${e(i)})`,predicate:(t,n,r,i)=>`${e(t)} → ${e(n)}: ${r} is now ${i}`,edgeAdded:(e,t,n)=>`Added ${i(e,t,n)}`,edgeRemoved:(e,t,n)=>`Removed ${i(e,t,n)}`,edgeEdited:(e,t,n)=>`Edited ${i(e,t,n)}`,relationsAdded:(n,r)=>`Added ${t(n,`relation`)} to ${e(r)}`,relationsRemoved:(n,r)=>`Removed ${t(n,`relation`)} from ${e(r)}`,relationsUpdated:(n,r)=>`Updated ${t(n,`relation`)} of ${e(r)}`},note:{viaHint:`via replacement hint`,inferred:e=>`inferred · ${e} confidence`,confidence:e=>`${e} confidence`,carried:e=>`${t(e,`relation`)} carried over`,collapsed:e=>`${t(e,`duplicate`)} collapsed`,keptDeprecated:`kept as deprecated`,sourceKept:`source kept`,sourceKeptDeprecated:`source kept as deprecated`,typed:e=>`type ${e}`,linkedTo:e=>`linked to ${e}`,wasLinkedTo:e=>`was linked to ${e}`,standalone:`standalone`,movedUnder:e=>`moved under ${e}`,movedFrom:e=>`from ${e}`,detachedFrom:e=>`detached from ${e}`,deprecated:`deprecated`,restored:`restored`,replacedBy:e=>`replaced by ${e}`,noLongerReplaced:`no longer replaced`,replaces:e=>`replaces ${e}`,noLongerReplaces:e=>`no longer replaces ${e}`,idChanged:(e,t)=>`${e} → ${t}`,match:e=>`${e} match`,retargeted:e=>`${w(e)} retargeted`,relationRetargeted:`relation retargeted`,relationResourced:`relation moved to another subject`,relationTypeChanged:`relation type changed`,newRelation:`new relation`,relationRemoved:`relation removed`,relabeled:(t,n)=>`label ${e(t)} → ${e(n)}`,hierarchy:`hierarchy`},separator:` · `}})(),$e={en:Qe,"zh-CN":(()=>{let e=e=>{let[t,n]=e.split(nt);return n===void 0?`「${e}」`:`「${t}」(${n})`},t=(e,t)=>`${w(e)} ${Xe[t][0]}${Xe[t][1]}`,n=(t,n)=>{let r=t.slice(0,2).map(e);return n<=1?r[0]??``:n===2?`${r[0]}和${r[1]}`:`${r[0]}、${r[1]}等 ${w(n)} 个节点`},r=n=>(r,i,a)=>{let o=e(r[0]??``),s=i<=1?o:i===2?`${o}和${e(r[1]??``)}`:`${o}等 ${w(i)} 个节点`;return a?`${n}${s}及 ${t(a,`relation`)}`:`${n}${s}`},i=(t,n,r)=>`${e(t)}—${n}→${e(r)}`;return{quote:e,names:n,delta:(e,t,n,r)=>t+n+r?`${Xe[e][1]} ${Ze(t,n,r)}`:``,facets:{rekey:`ID 变更`,rename:`改名`,mergedInto:`合并入`,mergeTarget:`合并目标`,splitFrom:`拆分自`,splitInto:`拆分为`,move:`移动`,deprecate:`弃用`,replacement:`替代关系`,types:`类型变更`,aliases:`别名变更`,attrs:`属性变更`,retarget:`改为指向`,predicate:`关系类型变更`,label:`标签变更`,collapsed:`重复合并`},title:{merged:(e,t)=>`${e}合并入${t}`,split:(e,t)=>`${e}拆分为${t}`,added:r(`新增`),removed:r(`删除`),renamed:(t,n)=>`${e(t)}改名为${e(n)}`,moved:(t,n)=>`${e(t)}移至${n}下`,detached:(t,n)=>`${e(t)}脱离${n}`,deprecated:t=>`弃用${e(t)}`,restored:t=>`恢复${e(t)}`,rekeyed:t=>`${e(t)}的 ID 已变更`,attrs:t=>`修改${e(t)}的属性`,types:t=>`修改${e(t)}的类型`,aliases:t=>`修改${e(t)}的别名`,replacement:t=>`修改${e(t)}的替代关系`,edited:t=>`修改${e(t)}`,pointsTo:(t,n,r,i)=>`${e(t)}的${e(n)}改为指向${e(r)}(原为${e(i)})`,comesFrom:(t,n,r,i)=>`${e(t)}的${e(n)}改为来自${e(r)}(原为${e(i)})`,predicate:(t,n,r,i)=>`${e(t)}→${e(n)}的关系由${e(r)}改为${e(i)}`,edgeAdded:(e,t,n)=>`新增关系${i(e,t,n)}`,edgeRemoved:(e,t,n)=>`删除关系${i(e,t,n)}`,edgeEdited:(e,t,n)=>`修改关系${i(e,t,n)}`,relationsAdded:(n,r)=>`为${e(r)}新增 ${t(n,`relation`)}`,relationsRemoved:(n,r)=>`删除${e(r)}的 ${t(n,`relation`)}`,relationsUpdated:(n,r)=>`修改${e(r)}的 ${t(n,`relation`)}`},note:{viaHint:`依据替代声明`,inferred:e=>`推断 · 置信度 ${e}`,confidence:e=>`置信度 ${e}`,carried:e=>`迁移 ${t(e,`relation`)}`,collapsed:e=>`合并 ${t(e,`duplicate`)}`,keptDeprecated:`源节点保留为已弃用`,sourceKept:`源节点保留`,sourceKeptDeprecated:`源节点保留为已弃用`,typed:e=>`类型 ${e}`,linkedTo:e=>`关联${e}`,wasLinkedTo:e=>`原关联${e}`,standalone:`无外部关联`,movedUnder:e=>`移至${e}下`,movedFrom:e=>`原属${e}`,detachedFrom:e=>`脱离${e}`,deprecated:`已弃用`,restored:`已恢复`,replacedBy:e=>`由${e}替代`,noLongerReplaced:`不再有替代项`,replaces:e=>`替代${e}`,noLongerReplaces:e=>`不再替代${e}`,idChanged:(e,t)=>`ID ${e} → ${t}`,match:e=>`匹配度 ${e}`,retargeted:e=>`${w(e)} 条关系改为指向新节点`,relationRetargeted:`关系改为指向新节点`,relationResourced:`关系改为来自新节点`,relationTypeChanged:`关系类型变更`,newRelation:`新关系`,relationRemoved:`关系已删除`,relabeled:(t,n)=>`标签${e(t)}→${e(n)}`,hierarchy:`层级关系`},separator:` · `}})()};function et(e){return $e[e??`en`]??Qe}var tt=40,nt=`\0`;function rt(e){let t=new Map;for(let n of e)g(t,n.name,()=>new Set).add(n.id);return e.map(e=>(t.get(e.name)?.size??0)>1?`${e.name}${nt}${e.id}`:e.name)}function it(e){let t=Array.from(e);return t.length>tt?`${t.slice(0,39).join(``)}…`:e}function T(e,t){return it(e.index.node(t)?.label??t)}function at(e){return it(e.before?.label??e.label)}function ot(e,t,n){let r=n===`after`?e.index.nodeByAfter(t)??e.index.nodeByBefore(t):e.index.nodeByBefore(t)??e.index.nodeByAfter(t);return r?n===`after`?T(e,r.id):at(r):t}function st(e,t){return e.names(t,t.length)}function E(e,t){return e.facets.find(e=>e.kind===t)}function ct(e,t){return e.facets.find(e=>e.kind===t)}function lt(e){let t=0,n=0,r=0;for(let i of e)i.before===void 0?t++:i.after===void 0?n++:r++;return[t,n,r]}function ut(e){return[e.filter(e=>e.status===`added`).length,e.filter(e=>e.status===`removed`).length,e.filter(e=>e.status===`modified`).length]}function D(e,t){return t.filter(e=>!!e).join(e.separator)}function dt(e,t){let n=[],r=E(t,`attrs`);r&&n.push(e.delta(`attribute`,...lt(r.changes)));let i=E(t,`types`);i&&n.push(e.delta(`type`,i.added.length,i.removed.length,0));let a=E(t,`aliases`);return a&&n.push(e.delta(`synonym`,a.added.length,a.removed.length,0)),n}function ft(e,t,n){let r=E(n,`replacement`);if(!r)return[];let i=(n,r)=>st(e,n.map(e=>ot(t,e,r))),a=[],o=n.after?.replacedBy??[];return(r.replacedBy.added.length||r.replacedBy.removed.length)&&a.push(o.length?e.note.replacedBy(i(o,`after`)):e.note.noLongerReplaced),r.replaces.added.length?a.push(e.note.replaces(i(r.replaces.added,`before`))):r.replaces.removed.length&&a.push(e.note.noLongerReplaces(i(r.replaces.removed,`before`))),a}function pt(e,t){if(t.every(e=>e.via===`hint`))return e.note.viaHint;let n=t.reduce((e,t)=>Math.min(e,t.confidence),1/0);return t.every(e=>e.via===`heuristic`)?e.note.inferred(Je(n)):e.note.confidence(Je(n))}function mt(e,t,n){let r=t.filter(e=>e.facets.some(e=>e.kind===`retarget`&&e.cause===n)),i=t.filter(e=>ct(e,`collapsed`)),a=t.filter(e=>!r.includes(e)&&!i.includes(e));return[r.length?e.note.carried(r.length):``,i.length?e.note.collapsed(i.length):``,e.delta(`relation`,...ut(a))]}function ht({p:e,diff:t,hunk:n,edges:r,anchor:i}){let a=((i?E(i,`mergeTarget`):void 0)?.sources??[]).map(e=>t.index.node(e)).filter(e=>e!==void 0),o=a.map(e=>E(e,`mergedInto`)).filter(e=>e!==void 0),s=rt([{id:n.anchor,name:T(t,n.anchor)},...a.map(e=>({id:e.beforeId??e.id,name:at(e)}))]);return{title:e.title.merged(e.names(s.slice(1),a.length),e.quote(s[0])),subtitle:D(e,[o.length?pt(e,o):``,...mt(e,r,`merge`),a.some(e=>e.status!==`removed`)?e.note.keptDeprecated:``,...i?dt(e,i):[]])}}function gt({p:e,diff:t,hunk:n,edges:r,anchor:i}){let a=i?E(i,`splitInto`)?.targets??[]:[],o=a.map(e=>t.index.node(e)).filter(e=>e!==void 0).map(e=>E(e,`splitFrom`)).filter(e=>e!==void 0),s=rt([{id:n.anchor,name:at(i??t.index.node(n.anchor))},...a.map(e=>({id:e,name:T(t,e)}))]),c=e.title.split(e.quote(s[0]),e.names(s.slice(1),a.length)),l=i?.after;return{title:c,subtitle:D(e,[o.length?pt(e,o):``,...mt(e,r,`split`),l?l.deprecated?e.note.sourceKeptDeprecated:e.note.sourceKept:``])}}function _t({p:e,diff:t,hunk:n,nodes:r,anchor:i},a){let o=[n.anchor,...n.nodes.filter(e=>e!==n.anchor)].map(e=>T(t,e)),s=(a?e.title.added:e.title.removed)(o,r.length,n.edges.length),c=n.context.map(e=>T(t,e)),l=i?.types??[];return{title:s,subtitle:D(e,[l.length?e.note.typed(l.join(`, `)):``,c.length?(a?e.note.linkedTo:e.note.wasLinkedTo)(st(e,c)):e.note.standalone])}}function vt({p:e,diff:t,edges:n,anchor:r}){let i=r,a=T(t,i.id),o=E(i,`rename`),s=i.facets.filter(e=>e.kind===`move`),c=[...new Set(s.flatMap(e=>e.to))].map(e=>T(t,e)),l=[...new Set(s.flatMap(e=>e.from))].map(e=>T(t,e)),u=E(i,`deprecate`),d=E(i,`rekey`),f=new Set(s.map(e=>e.predicate)),p=n.filter(e=>!(e.hierarchical&&f.has(e.predicate))),m=i.facets.filter(e=>e.kind===`attrs`||e.kind===`types`||e.kind===`aliases`||e.kind===`replacement`),h,g;if(o)h=e.title.renamed(it(o.from),it(o.to)),g=`rename`;else if(s.length)h=c.length?e.title.moved(a,st(e,c)):e.title.detached(a,st(e,l)),g=`move`;else if(u)h=(u.deprecated?e.title.deprecated:e.title.restored)(a),g=`deprecate`;else if(d)h=e.title.rekeyed(a),g=`rekey`;else{let t=m.length===1&&p.length===0?m[0]?.kind:void 0;h=t===`attrs`?e.title.attrs(a):t===`types`?e.title.types(a):t===`aliases`?e.title.aliases(a):t===`replacement`?e.title.replacement(a):e.title.edited(a),g=`content`}let _=[];return d&&(_.push(e.note.idChanged(d.from,d.to)),d.score<1&&_.push(e.note.match(Je(d.score)))),_.push(...dt(e,i)),s.length&&(g===`move`?c.length&&l.length&&_.push(e.note.movedFrom(st(e,l))):_.push(c.length?e.note.movedUnder(st(e,c)):e.note.detachedFrom(st(e,l)))),u&&g!==`deprecate`&&_.push(u.deprecated?e.note.deprecated:e.note.restored),_.push(...ft(e,t,i)),_.push(e.delta(`relation`,...ut(p))),{title:h,subtitle:D(e,_)}}function yt({p:e,diff:t,hunk:n,edges:r}){let i=T(t,n.anchor),a=r.length===1?r[0]:void 0;if(!a){let[t,n,a]=ut(r),o=r.length,s=t===o?e.title.relationsAdded(o,i):n===o?e.title.relationsRemoved(o,i):e.title.relationsUpdated(o,i),c=r.filter(e=>ct(e,`retarget`)).length;return{title:s,subtitle:D(e,[e.delta(`relation`,t,n,a),c?e.note.retargeted(c):``])}}let o=it(a.label),s=a.facets.filter(e=>e.kind===`retarget`),c=s.length===1?s[0]:void 0,[l=``,u=``,d=``,f=``]=rt([a.source,a.target,...c?[c.from,c.to]:[]].map(e=>({id:e,name:T(t,e)}))),p=ct(a,`predicate`),m=ct(a,`label`),h=ct(a,`attrs`),g=[m?e.note.relabeled(it(m.from),it(m.to)):``,h?e.delta(`attribute`,...lt(h.changes)):``,a.hierarchical?e.note.hierarchy:``];if(c&&!p)return c.end===`target`?{title:e.title.pointsTo(l,o,f,d),subtitle:D(e,[e.note.relationRetargeted,...g])}:{title:e.title.comesFrom(u,o,f,d),subtitle:D(e,[e.note.relationResourced,...g])};if(p&&s.length===0){let t=it(a.before?.label??p.from);return{title:e.title.predicate(l,u,t,o),subtitle:D(e,[e.note.relationTypeChanged,...g])}}return a.status===`added`?{title:e.title.edgeAdded(l,o,u),subtitle:D(e,[e.note.newRelation,...g])}:a.status===`removed`?{title:e.title.edgeRemoved(l,o,u),subtitle:D(e,[e.note.relationRemoved,...g])}:{title:e.title.edgeEdited(l,o,u),subtitle:D(e,g)}}function bt(e,t,n){let r=et(n),i=e.nodes.map(e=>t.index.node(e)),a=e.edges.map(e=>t.index.edge(e));if(i.some(e=>e===void 0)||a.some(e=>e===void 0))throw new p(`invalid-input`,`Hunk "${e.id}" does not belong to this diff`,{hunk:e.id});let o={p:r,diff:t,hunk:e,nodes:i,edges:a,anchor:t.index.node(e.anchor)};switch(e.kind){case`merge`:return ht(o);case`split`:return gt(o);case`add`:return _t(o,!0);case`remove`:return _t(o,!1);case`modify`:return o.anchor?vt(o):yt(o);case`relations`:return yt(o);default:{let t=e.kind;throw new p(`invalid-input`,`Unknown hunk kind "${String(t)}"`)}}}function O(e){throw new p(`invalid-input`,e)}var xt=new Set([`unchanged`,`added`,`removed`,`modified`]);function St(e){let t=e,n=t.meta;b(n)&&b(n.before)&&b(n.after)||O(`A kgdiff diff needs meta.before and meta.after objects`),b(t.options)||O(`A kgdiff diff needs an options object`);for(let e of[`nodes`,`edges`,`hunks`])Array.isArray(t[e])||O(`A kgdiff diff needs a ${e} array`);for(let e of[`matches`,`suggestions`])t[e]!==void 0&&!Array.isArray(t[e])&&O(`diff.${e} must be an array`);b(t.delta)||O(`A kgdiff diff needs a delta`),b(t.stats)||O(`A kgdiff diff needs stats`),e.nodes.forEach((e,t)=>{b(e)&&typeof e.id==`string`&&xt.has(e.status)||O(`diff.nodes[${t}] needs a string id and a valid status`)}),e.edges.forEach((e,t)=>{b(e)&&typeof e.id==`string`&&typeof e.source==`string`&&typeof e.target==`string`&&xt.has(e.status)||O(`diff.edges[${t}] needs string id / source / target and a valid status`)})}function Ct(e){return{...e}}function wt(e,t){if(t===`id`&&e.id!==void 0)return`i${e.id}`;let n=e.predicate??``,i=e.label??ne(n);return`t${r(e.source,n,e.target)}\u0000${f([i,e.attrs??{}])}`}function Tt(e){let t=new Map;for(let n of e.edges.values())t.set(wt(n,e.edgeIdentity),n);return t}function Et(e){if(!b(e)||e.format!==`kgdiff.diff`)throw new p(`unsupported-version`,`Not a kgdiff diff (expected format "kgdiff.diff")`);if(e.version!==1)throw new p(`unsupported-version`,`Unsupported diff version ${String(e.version)}; this reader supports version 1`,{version:e.version});St(e);let t=he(e.options),n=t.edgeIdentity,r=e=>e!==`added`,i=e=>e!==`removed`,a=[];for(let t of e.nodes)i(t.status)&&(t.after||O(`Union node "${t.id}" (${t.status}) has no after snapshot`),a.push(Ct(t.after)));let o=[];for(let t of e.edges)i(t.status)&&(t.after||O(`Union edge ${t.id} (${t.status}) has no after snapshot`),o.push(t.after));let s=Le({meta:e.meta.after,nodes:a,edges:o},{edgeIdentity:n}),c=[];for(let t of e.nodes){if(!r(t.status))continue;if(t.before){c.push(Ct(t.before));continue}let e=t.afterId===void 0?void 0:s.nodes.get(t.afterId);e&&t.beforeId!==void 0||O(`Union node "${t.id}" has no before snapshot`),c.push(Ve({...e,id:t.beforeId}))}let l=[];for(let t of e.edges){if(!r(t.status))continue;let e=t.before??t.after;e||O(`Union edge ${t.id} has no before snapshot`),l.push(e)}let u=Le({meta:e.meta.before,nodes:c,edges:l},{edgeIdentity:n}),d=e.nodes.map(e=>{let t={id:e.id,status:e.status,facets:e.facets??[]};return e.beforeId!==void 0&&(t.beforeId=e.beforeId,t.before=u.nodes.get(e.beforeId)),e.afterId!==void 0&&(t.afterId=e.afterId,t.after=s.nodes.get(e.afterId)),e.hunk!==void 0&&(t.hunk=e.hunk),Ke(t,u,s)}),f=new Set(t.hierarchyPredicates),m=Tt(u),h=Tt(s),g=e.edges.map(e=>{let t=r(e.status)?m.get(wt(e.before??e.after,n)):void 0,i=e.after?h.get(wt(e.after,n)):void 0,a=i??t;a||O(`Union edge ${e.id} could not be rebuilt`);let o={id:e.id,source:e.source,target:e.target,predicate:a.predicate,label:a.label,status:e.status,facets:e.facets??[],hierarchical:f.has(a.predicate),inPlace:!1};return e.sourceBefore!==void 0&&(o.sourceBefore=e.sourceBefore),e.targetBefore!==void 0&&(o.targetBefore=e.targetBefore),e.predicateBefore!==void 0&&(o.predicateBefore=e.predicateBefore),t&&(o.beforeKey=t.key,o.before=t),i&&(o.afterKey=i.key,o.after=i),e.hunk!==void 0&&(o.hunk=e.hunk),qe(o)}),_=e.hunks;return{before:u,after:s,options:t,nodes:d,edges:g,hunks:_,matches:e.matches??[],suggestions:e.suggestions??[],delta:e.delta,stats:e.stats,index:Ge(d,g,_)}}function Dt(e){return Ie(e)}function Ot(e){return Et(e)}function kt(e,t,n){return bt(e,t,n)}var At=(e,t)=>{let n=Math.max(1,Math.ceil(e)),r=Math.max(1,Math.ceil(t));if(typeof OffscreenCanvas==`function`)try{let e=new OffscreenCanvas(n,r),t=e.getContext(`2d`);if(t)return{canvas:e,ctx:t}}catch{}if(typeof document<`u`){let e=document.createElement(`canvas`);e.width=n,e.height=r;let t=e.getContext(`2d`);if(t)return{canvas:e,ctx:t}}return null},jt=Object.freeze([]),Mt=1.5;function Nt(e,t,n,r,i,a){let o=Math.max(0,Math.min(a,r/2,i/2));e.moveTo(t+o,n),e.lineTo(t+r-o,n),e.arc(t+r-o,n+o,o,-Math.PI/2,0),e.lineTo(t+r,n+i-o),e.arc(t+r-o,n+i-o,o,0,Math.PI/2),e.lineTo(t+o,n+i),e.arc(t+o,n+i-o,o,Math.PI/2,Math.PI),e.lineTo(t,n+o),e.arc(t+o,n+o,o,Math.PI,Math.PI*1.5),e.closePath()}function Pt(e,t,n,r,i){let a=t-r*7,o=n-i*7,s=5/2;e.moveTo(t,n),e.lineTo(a-i*s,o+r*s),e.lineTo(a+i*s,o-r*s),e.closePath()}var k=Math.PI*2;function A(e,t,n){return Math.min(Math.max(e,t),n)}function Ft(e,t,n){let r=A((n-e)/(t-e),0,1);return r*r*(3-2*r)}function It(e){return e<.5?4*e*e*e:1-(-2*e+2)**3/2}function Lt(e,t){return Math.round(e*t)/t}function Rt(e,t){return Math.round(e*t)%2==1?.5/t:0}function j(e,t,n,r){let i=1-r;return i*i*e+2*i*r*t+r*r*n}function zt(e,t,n,r){return 2*(1-r)*(t-e)+2*r*(n-t)}function Bt(e,t,n,r,i,a,o,s){if(o<=0)return+!!s;let c=s?i:e,l=s?a:t,u=o*o,d=+!!s,f=.5,p=j(e,n,i,.5)-c,m=j(t,r,a,.5)-l;if(p*p+m*m<=u)return .5;for(let o=0;o<12;o++){let o=(d+f)/2,s=j(e,n,i,o)-c,p=j(t,r,a,o)-l;s*s+p*p<u?d=o:f=o}return(d+f)/2}function Vt(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s,l=c>0?((e-n)*o+(t-r)*s)/c:0;l=A(l,0,1);let u=n+l*o-e,d=r+l*s-t;return u*u+d*d}function Ht(e,t,n,r,i,a,o,s,c=16){let l=1/0,u=n,d=r;for(let f=1;f<=c;f++){let p=f/c,m=j(n,i,o,p),h=j(r,a,s,p),g=Vt(e,t,u,d,m,h);g<l&&(l=g),u=m,d=h}return l}function Ut(e,t,n,r,i,a,o,s){if(e>=i&&e<=o&&t>=a&&t<=s||n>=i&&n<=o&&r>=a&&r<=s)return!0;if(e<i&&n<i||e>o&&n>o||t<a&&r<a||t>s&&r>s)return!1;let c=n-e,l=r-t,u=0,d=1,f=(e,t)=>{if(e===0)return t>=0;let n=t/e;if(e<0){if(n>d)return!1;n>u&&(u=n)}else{if(n<u)return!1;n<d&&(d=n)}return!0};return f(-c,e-i)&&f(c,o-e)&&f(-l,t-a)&&f(l,s-t)}function Wt(e,t,n,r,i,a,o,s){return e<i+o&&i<e+n&&t<a+s&&a<t+r}var Gt=1e-12;function Kt(e,t,n=Math.SQRT2){let r=n*n,i=r*r,a=Math.max(e.w,Gt),o=Math.max(t.w,Gt),s=t.x-e.x,c=t.y-e.y,l=Math.hypot(s,c);if(l<1e-9*Math.max(a,o)){let r=Math.log(o/a);return{S:Math.abs(r)/n,at(n){return n<=0?e:n>=1?t:{x:e.x+n*s,y:e.y+n*c,w:a*Math.exp(r*n)}}}}let u=(o*o-a*a+i*l*l)/(2*a*r*l),d=(o*o-a*a-i*l*l)/(2*o*r*l),f=-Math.asinh(u),p=(-Math.asinh(d)-f)/n,m=Math.cosh(f),h=Math.sinh(f);return{S:p,at(i){if(i<=0)return e;if(i>=1)return t;let o=i*p,u=a/(r*l)*(m*Math.tanh(n*o+f)-h);return{x:e.x+u*s,y:e.y+u*c,w:a*m/Math.cosh(n*o+f)}}}}var qt=Object.freeze({top:0,right:0,bottom:0,left:0}),Jt=Math.SQRT2;function Yt(e,t,n){return{x:(n.x-e.x)*e.k+t.width/2,y:(n.y-e.y)*e.k+t.height/2}}function Xt(e,t,n){return{x:(n.x-t.width/2)/e.k+e.x,y:(n.y-t.height/2)/e.k+e.y}}function Zt(e,t){let n=t.width/e.k,r=t.height/e.k;return{x:e.x-n/2,y:e.y-r/2,width:n,height:r}}function Qt(e,t,n,r,i){let a=(r-t.width/2)/e.k+e.x,o=(i-t.height/2)/e.k+e.y;return{x:a-(r-t.width/2)/n,y:o-(i-t.height/2)/n,k:n}}function $t(e){if(e===void 0)return{top:48,right:48,bottom:48,left:48};if(typeof e==`number`){let t=Number.isFinite(e)?Math.max(0,e):48;return{top:t,right:t,bottom:t,left:t}}return e}function en(e,t,n,r,i,a){let o=[[r,n],[qt,n],[qt,qt]],s=0,c=0,l=t.width,u=t.height;for(let[e,n]of o)if(s=e.left+n.left,c=e.top+n.top,l=t.width-s-e.right-n.right,u=t.height-c-e.bottom-n.bottom,l>=8&&u>=8)break;l=Math.max(l,1),u=Math.max(u,1);let d=Math.max(e.width,0),f=Math.max(e.height,0),p=Math.min(d>0?l/d:1/0,f>0?u/f:1/0);Number.isFinite(p)||(p=a),p=A(p,i,a);let m=e.x+d/2,h=e.y+f/2,g=s+l/2,_=c+u/2;return{x:m-(g-t.width/2)/p,y:h-(_-t.height/2)/p,k:p}}function tn(e){return A(Math.abs(e)*620,350,1100)}function nn(e,t,n=325){return e*Math.exp(-t/n)}function rn(e){return Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.width)&&Number.isFinite(e.height)&&e.width>=0&&e.height>=0}var an=class{host;minK;maxK;x=0;y=0;k=1;touched=!1;motion=null;pending=null;userChanged=!1;constructor(e,t,n){this.host=e,this.minK=t,this.maxK=n}get(){return{x:this.x,y:this.y,k:this.k}}set(e,t=`program`){this.touched=!0,this.stop(),this.apply(e.x,e.y,e.k,t)}flyTo(e,t={}){if(this.touched=!0,this.stop(),!rn(e))return Promise.resolve();let n=this.host.size();if(n.width<=0||n.height<=0)return new Promise(n=>{this.pending={bounds:e,options:t,resolve:n}});let r=this.targetFor(e,t,n),i=(t.animate??!0)&&!this.host.reducedMotion(),a=Math.max(n.width,n.height),o=Kt({x:this.x,y:this.y,w:a/this.k},{x:r.x,y:r.y,w:a/r.k},Jt),s=t.duration??tn(o.S),c=Math.abs(r.k/this.k-1)<1e-6&&Math.hypot(r.x-this.x,r.y-this.y)*this.k<.5;return!i||!(s>0)||c?(this.apply(r.x,r.y,r.k,`program`),Promise.resolve()):new Promise(e=>{this.motion={type:`fly`,path:o,ref:a,duration:s,start:-1,target:r,resolve:e},this.host.invalidate()})}fit(e,t){let n=e??this.host.contentBounds();return n?this.flyTo(n,t):(this.touched=!0,this.stop(),Promise.resolve())}zoomBy(e,t,n){if(this.touched=!0,!(e>0)||!Number.isFinite(e))return;let r=this.host.size(),i=t?.x??r.width/2,a=t?.y??r.height/2;(n?.animate??!0)&&!this.host.reducedMotion()?this.zoomSmooth(e,i,a,`program`):(this.stop(),this.zoomNow(e,i,a,`program`))}panBy(e,t){this.touched=!0,this.stop(),this.panNow(e,t,`program`)}worldToScreen(e){return Yt(this,this.host.size(),e)}screenToWorld(e){return Xt(this,this.host.size(),e)}viewport(){return Zt(this,this.host.size())}get animating(){return this.motion!==null}interrupt(){this.touched=!0,this.stop()}jump(e){this.stop(),this.apply(e.x,e.y,e.k,`program`)}targetFor(e,t,n){let r=Math.min(this.maxK,t.maxZoom??2.5);return en(e,n,$t(t.padding),this.host.safeArea(),this.minK,Math.max(this.minK,r))}panNow(e,t,n=`user`){Number.isFinite(e)&&Number.isFinite(t)&&this.apply(this.x-e/this.k,this.y-t/this.k,this.k,n)}zoomNow(e,t,n,r=`user`){if(!(e>0)||!Number.isFinite(e))return;this.motion?.type===`zoom`&&(this.motion=null);let i=A(this.k*e,this.minK,this.maxK),a=Qt(this,this.host.size(),i,t,n);this.apply(a.x,a.y,a.k,r)}zoomSmooth(e,t,n,r=`user`){if(!(e>0)||!Number.isFinite(e))return;let i=this.host.size(),a=(t-i.width/2)/this.k+this.x,o=(n-i.height/2)/this.k+this.y,s=this.motion;s?.type===`zoom`?(s.kTarget=A(s.kTarget*e,this.minK,this.maxK),s.source=r,s.ax=t,s.ay=n,s.wx=a,s.wy=o):(this.stop(),this.motion={type:`zoom`,source:r,ax:t,ay:n,wx:a,wy:o,kTarget:A(this.k*e,this.minK,this.maxK),last:-1}),this.host.invalidate()}glide(e,t){this.stop(),Math.hypot(e,t)>.02&&(this.motion={type:`glide`,vx:e,vy:t,last:-1},this.host.invalidate())}resized(){let e=this.pending;if(!e)return;let t=this.host.size();if(t.width<=0||t.height<=0)return;this.pending=null;let n=this.targetFor(e.bounds,e.options,t);this.apply(n.x,n.y,n.k,`program`),e.resolve()}tick(e){let t=this.motion;if(!t)return!1;switch(t.type){case`fly`:{t.start<0&&(t.start=e);let n=A((e-t.start)/t.duration,0,1);if(n>=1)return this.motion=null,this.apply(t.target.x,t.target.y,t.target.k,`program`),t.resolve(),!1;let r=t.path.at(It(n));return this.apply(r.x,r.y,t.ref/r.w,`program`),!0}case`zoom`:{let n=t.last<0?16:A(e-t.last,0,64);t.last=e;let r=Math.log(this.k),i=Math.log(t.kTarget),a=Math.abs(i-r)<.001,o=a?t.kTarget:Math.exp(r+(i-r)*(1-Math.exp(-n/80))),s=this.host.size(),c=A(o,this.minK,this.maxK);return this.apply(t.wx-(t.ax-s.width/2)/c,t.wy-(t.ay-s.height/2)/c,c,t.source),a&&(this.motion=null),!a}case`glide`:{let n=t.last<0?16:A(e-t.last,0,64);return t.last=e,this.panNow(t.vx*n,t.vy*n,`user`),t.vx=nn(t.vx,n),t.vy=nn(t.vy,n),Math.hypot(t.vx,t.vy)<.02?(this.motion=null,!1):!0}default:return t}}stop(){let e=this.motion;this.motion=null,e?.type===`fly`&&e.resolve();let t=this.pending;this.pending=null,t?.resolve()}takeSource(){let e=this.userChanged?`user`:`program`;return this.userChanged=!1,e}apply(e,t,n,r){if(!Number.isFinite(e)||!Number.isFinite(t)||!Number.isFinite(n)||n<=0)return;let i=A(n,this.minK,this.maxK);(e!==this.x||t!==this.y||i!==this.k)&&(this.x=e,this.y=t,this.k=i,r===`user`&&(this.userChanged=!0),this.host.invalidate())}},on=512,sn=class{x0=0;y0=0;cell=1;cols=0;rows=0;start=new Int32Array(1);items=new Int32Array;maxR=0;size=0;build(e,t,n,r,i){this.size=i;let a=1/0,o=1/0,s=-1/0,c=-1/0,l=0;for(let r=0;r<i;r++){let i=e[r],u=t[r];i<a&&(a=i),i>s&&(s=i),u<o&&(o=u),u>c&&(c=u),n[r]>l&&(l=n[r])}if(this.maxR=l,i===0){this.cols=this.rows=0;return}let u=Math.max(s-a,1e-9),d=Math.max(c-o,1e-9),f=Math.max(Math.sqrt(u*d/i),2*l,1e-6);f=Math.max(f,u/on,d/on),this.cell=f,this.x0=a,this.y0=o,this.cols=Math.floor(u/f)+1,this.rows=Math.floor(d/f)+1;let p=this.cols*this.rows;this.start.length<p+1?this.start=new Int32Array(p+1):this.start.fill(0,0,p+1),this.items.length<i&&(this.items=new Int32Array(Math.max(i,this.items.length*2)));let m=this.start;for(let n=0;n<i;n++)m[this.cellOf(e[n],t[n])+1]++;for(let e=0;e<p;e++)m[e+1]+=m[e];for(let n=0;n<i;n++){let i=this.cellOf(e[n],t[n]);this.items[m[i]++]=r[n]}for(let e=p;e>0;e--)m[e]=m[e-1];m[0]=0}query(e,t,n,r,i){if(i.length=0,this.cols===0)return 0;let a=Math.max(0,Math.floor((e-this.x0)/this.cell)),o=Math.min(this.cols-1,Math.floor((n-this.x0)/this.cell)),s=Math.max(0,Math.floor((t-this.y0)/this.cell)),c=Math.min(this.rows-1,Math.floor((r-this.y0)/this.cell));for(let e=s;e<=c;e++)for(let t=a;t<=o;t++){let n=e*this.cols+t,r=this.start[n+1];for(let e=this.start[n];e<r;e++)i.push(this.items[e])}return i.length}cellOf(e,t){let n=Math.min(this.cols-1,Math.max(0,Math.floor((e-this.x0)/this.cell)));return Math.min(this.rows-1,Math.max(0,Math.floor((t-this.y0)/this.cell)))*this.cols+n}},cn=2047,ln=63,un=class{colors=new Map;dashIds=new WeakMap;dashKeys=new Map;maintain(){this.colors.size>1983&&this.colors.clear(),this.dashKeys.size>55&&(this.dashKeys.clear(),this.dashIds=new WeakMap)}color(e){if(e===null)return 0;let t=this.colors.get(e);return t===void 0&&(t=this.colors.size+1,this.colors.set(e,t)),Math.min(t,cn)}dash(e){if(e===null||e.length===0)return 0;let t=this.dashIds.get(e);if(t===void 0){let n=e.join(`,`);t=this.dashKeys.get(n),t===void 0&&(t=this.dashKeys.size+1,this.dashKeys.set(n,t)),this.dashIds.set(e,t)}return Math.min(t,ln)}};function dn(e){return Number.isFinite(e)?Math.round(A(e,0,1)*64):0}function fn(e){return pn(e)+512}function pn(e){return Number.isFinite(e)?A(Math.round(e),-512,511):0}function mn(e){return Number.isFinite(e)?Math.round(A(e,0,15.75)*4):0}function hn(e,t){if(t===null||t.length===0||!Number.isFinite(e))return 0;let n=0;for(let e of t)n+=e;if(t.length%2==1&&(n*=2),!(n>0))return 0;let r=(e%n+n)%n;return A(Math.round(r*2),0,511)}function gn(e,t){return e.z-t.z||e.seq-t.seq}var _n=class{frame=null;version=-1;edgeBuckets=[];nodeBuckets=[];decor=[];halos=[];badges=[];glyphArcs=[];pivots=[];maxR=0;nodeCount=0;edgeCount=0;pillShown=new Uint8Array;pillsVersion=-1;edgeMap=new Map;nodeMap=new Map;edgePool=[];nodePool=[];gridVersion=-1;grid=new sn;xs=new Float64Array;ys=new Float64Array;rs=new Float64Array;ids=new Int32Array;boundsVersion=-1;boundsValue=null;sync(e,t,n){(e!==this.frame||t!==this.version)&&(this.frame=e,this.version=t,this.build(e,n))}build(e,t){t.maintain(),this.edgeMap.clear(),this.nodeMap.clear(),this.edgeBuckets.length=0,this.nodeBuckets.length=0,this.decor.length=0,this.halos.length=0,this.badges.length=0,this.glyphArcs.length=0,this.pivots.length=0,this.maxR=0,this.nodeCount=0,this.edgeCount=0;let n=e.edges;for(let e=0;e<n.length;e++){let r=n[e];if(!r.visible)continue;let i=dn(r.alpha);if(i===0||!(r.width>0)||!Number.isFinite(r.x1+r.y1+r.x2+r.y2))continue;let a=fn(r.z),o=mn(r.width),s=r.dash!==null&&r.dash.length>0?r.dash:null,c=hn(r.dashOffset,s),l=((((a*2048+t.color(r.color))*64+o)*64+t.dash(s))*512+c)*65+i,u=this.edgeMap.get(l);u||(u=this.edgePool[this.edgeBuckets.length],u||(u={key:0,seq:0,z:0,color:``,width:0,dash:null,dashOffset:0,alpha:0,members:[]},this.edgePool.push(u)),u.key=l,u.seq=this.edgeBuckets.length,u.z=a-512,u.color=r.color,u.width=o/4,u.dash=s,u.dashOffset=c/2,u.alpha=i/64,u.members.length=0,this.edgeMap.set(l,u),this.edgeBuckets.push(u)),u.members.push(e),this.edgeCount++}this.edgeBuckets.sort(gn);let r=e.nodes;for(let e=0;e<r.length;e++){let n=r[e];if(!n.visible)continue;let i=dn(n.alpha);if(i===0||!Number.isFinite(n.x+n.y+n.r)||n.r<0)continue;let a=fn(n.z),o=n.stroke!==null&&n.strokeWidth>0?n.stroke:null,s=o!==null&&n.dash!==null&&n.dash.length>0?n.dash:null,c=((((a*2048+t.color(n.fill))*2048+t.color(o))*64+(o?mn(n.strokeWidth):0))*64+t.dash(s))*65+i,l=this.nodeMap.get(c);l||(l=this.nodePool[this.nodeBuckets.length],l||(l={key:0,seq:0,z:0,fill:null,stroke:null,strokeWidth:0,dash:null,alpha:0,members:[]},this.nodePool.push(l)),l.key=c,l.seq=this.nodeBuckets.length,l.z=a-512,l.fill=n.fill,l.stroke=o,l.strokeWidth=o?mn(n.strokeWidth)/4:0,l.dash=s,l.alpha=i/64,l.members.length=0,this.nodeMap.set(c,l),this.nodeBuckets.push(l)),l.members.push(e),this.nodeCount++,n.r>this.maxR&&(this.maxR=n.r),(n.ring!==null||n.pulse>0&&n.pulse<1)&&this.decor.push(e),n.halo!==null&&n.halo.alpha>0&&this.halos.push(e),n.badge!==null&&n.badge.text.length>0&&this.badges.push(e)}this.nodeBuckets.sort(gn),this.decor.length>1&&this.decor.sort((e,t)=>fn(r[e].z)-fn(r[t].z)||e-t);let i=e.glyphs;for(let e=0;e<i.length;e++){let t=i[e];dn(t.alpha)!==0&&Number.isFinite(t.x1+t.y1+t.x2+t.y2)&&(t.kind===`pivot`?this.pivots.push(e):this.glyphArcs.push(e))}}pillPickable(e){return this.pillsVersion!==this.version||this.pillShown[e]===1}nodeGrid(){let e=this.frame;if(this.gridVersion===this.version||!e)return this.grid;this.gridVersion=this.version;let t=this.nodeCount;if(this.xs.length<t){let e=Math.max(t,this.xs.length*2);this.xs=new Float64Array(e),this.ys=new Float64Array(e),this.rs=new Float64Array(e),this.ids=new Int32Array(e)}let n=0;for(let t of this.nodeBuckets)for(let r of t.members){let t=e.nodes[r];this.xs[n]=t.x,this.ys[n]=t.y,this.rs[n]=t.r,this.ids[n]=r,n++}return this.grid.build(this.xs,this.ys,this.rs,this.ids,n),this.grid}contentBounds(){let e=this.frame;if(!e)return null;if(this.boundsVersion===this.version)return this.boundsValue;this.boundsVersion=this.version;let t=1/0,n=1/0,r=-1/0,i=-1/0;for(let a of this.nodeBuckets)for(let o of a.members){let a=e.nodes[o];a.x-a.r<t&&(t=a.x-a.r),a.y-a.r<n&&(n=a.y-a.r),a.x+a.r>r&&(r=a.x+a.r),a.y+a.r>i&&(i=a.y+a.r)}for(let a of e.collapsed)Number.isFinite(a.x+a.y)&&(t=Math.min(t,a.x),n=Math.min(n,a.y),r=Math.max(r,a.x),i=Math.max(i,a.y));for(let a of this.glyphArcs){let o=e.glyphs[a];t=Math.min(t,o.x1,o.x2),n=Math.min(n,o.y1,o.y2),r=Math.max(r,o.x1,o.x2),i=Math.max(i,o.y1,o.y2)}return this.boundsValue=t<=r?{x:t,y:n,width:r-t,height:i-n}:null,this.boundsValue}};function vn(e,t){if(!e)return t;if(!t)return e;let n=Math.min(e.x,t.x),r=Math.min(e.y,t.y);return{x:n,y:r,width:Math.max(e.x+e.width,t.x+t.width)-n,height:Math.max(e.y+e.height,t.y+t.height)-r}}var yn=4.000244140625;function bn(){return{last:-1/0,intent:null}}function xn(e){let t=e/yn;return t>=1&&Math.abs(t-Math.round(t))<1e-6}function Sn(e){let t=Math.abs(e);return t===0?!1:xn(t)||t>=50&&Number.isInteger(t)}function Cn(e,t,n){let r;return r=e.ctrlKey||e.metaKey?e.deltaMode!==0||Sn(e.deltaY)?`notch`:`pinch`:t.intent!==null&&t.intent!==`pinch`&&n-t.last<160?t.intent:e.deltaMode===0?e.deltaX===0?e.wheelDeltaY!==void 0&&e.wheelDeltaY!==0?e.wheelDeltaY===-3*e.deltaY?`pan`:`notch`:Sn(e.deltaY)?`notch`:`pan`:`pan`:`notch`,t.last=n,t.intent=r,r}function wn(e,t){let n=e.deltaMode===1?16:e.deltaMode===2?Math.max(t,1):1;return{x:e.deltaX*n,y:e.deltaY*n}}function Tn(e,t){if(e===`pinch`)return Math.exp(-A(t,-50,50)/100);let n=Math.abs(t);return 2**(-A(xn(n)?Math.sign(t)*Math.round(n/yn)*33:t,-240,240)/240)}var En=class{t=new Float64Array(8);x=new Float64Array(8);y=new Float64Array(8);n=0;head=0;reset(){this.n=0,this.head=0}add(e,t,n){this.t[this.head]=e,this.x[this.head]=t,this.y[this.head]=n,this.head=(this.head+1)%8,this.n<8&&this.n++}velocity(e,t=100){if(this.n<2)return{x:0,y:0};let n=(this.head+7)%8,r=this.t[n]??0;if(e-r>50)return{x:0,y:0};let i=n;for(let e=1;e<this.n;e++){let a=(n-e+8)%8;if(r-(this.t[a]??0)>t)break;i=a}let a=r-(this.t[i]??0);if(a<=0)return{x:0,y:0};let o=((this.x[n]??0)-(this.x[i]??0))/a,s=((this.y[n]??0)-(this.y[i]??0))/a,c=Math.hypot(o,s);return c>6&&(o*=6/c,s*=6/c),{x:o,y:s}}};function Dn(e,t){let n=new Map,r=new En,i=bn(),a=0,o=0,s=0,c=0,l=!1,u=!1,d=0,f=0,p=0,m=!1,h=1,g=t=>{let n=e.getBoundingClientRect();return[t.clientX-n.left,t.clientY-n.top]},_=()=>{let e=n.values(),t=e.next().value,r=e.next().value;return!t||!r?[0,0,0]:[(t.x+r.x)/2,(t.y+r.y)/2,Math.hypot(t.x-r.x,t.y-r.y)]},v=()=>{[d,f,p]=_()},y=i=>{if(i.pointerType===`mouse`&&i.button!==0&&i.button!==1)return;i.button===1&&i.preventDefault();let[d,f]=g(i);try{e.setPointerCapture(i.pointerId)}catch{}n.set(i.pointerId,{x:d,y:f}),t.camera.interrupt(),n.size===1?(a=s=d,o=c=f,l=!1,u=!1,r.reset(),r.add(t.now(),d,f)):(u=!0,v())},b=e=>{let[i,u]=g(e),m=n.get(e.pointerId);if(!m)n.size===0&&t.hover(i,u);else if(m.x=i,m.y=u,n.size>=2){let[e,n,r]=_();p>0&&r>0&&t.camera.zoomNow(r/p,e,n),t.camera.panNow(e-d,n-f),d=e,f=n,p=r}else{if(!l){if(Math.hypot(i-a,u-o)<4)return;l=!0,t.dragging(!0)}t.camera.panNow(i-s,u-c),s=i,c=u,r.add(t.now(),i,u)}},x=e=>{if(!n.delete(e.pointerId))return;let[i,a]=g(e);if(n.size===1){let e=n.values().next().value;e&&(s=e.x,c=e.y),r.reset(),l||(l=!0,t.dragging(!0));return}if(n.size>1){v();return}let o=e.type===`pointercancel`;if(l){if(t.dragging(!1),!o&&!u){let e=r.velocity(t.now());Math.hypot(e.x,e.y)>.1&&t.camera.glide(e.x,e.y)}}else!u&&!o&&t.click(i,a,e);l=!1,u=!1},S=[[`pointerdown`,y],[`pointermove`,b],[`pointerup`,x],[`pointercancel`,x],[`pointerleave`,()=>{n.size===0&&t.leave()}],[`wheel`,n=>{if(n.preventDefault(),m&&n.ctrlKey)return;let[r,a]=g(n);Number.isFinite(r)&&Number.isFinite(a)||(r=e.clientWidth/2,a=e.clientHeight/2);let o={deltaX:n.deltaX,deltaY:n.deltaY,deltaMode:n.deltaMode,ctrlKey:n.ctrlKey,metaKey:n.metaKey,wheelDeltaY:`wheelDeltaY`in n?Number(n.wheelDeltaY):void 0},s=Cn(o,i,t.now()),c=wn(o,e.clientHeight);s===`pan`?(t.camera.interrupt(),t.camera.panNow(-c.x,-c.y)):s===`pinch`?(t.camera.interrupt(),t.camera.zoomNow(Tn(`pinch`,c.y),r,a)):(t.camera.touched=!0,t.camera.zoomSmooth(Tn(`notch`,c.y),r,a))},{passive:!1}],[`dblclick`,e=>{let[n,r]=g(e);t.dblclick(n,r,e)}],[`gesturestart`,e=>{e.preventDefault(),n.size>=2||(m=!0,h=1,t.camera.interrupt())},{passive:!1}],[`gesturechange`,e=>{if(e.preventDefault(),!m||n.size>=2)return;let r=e;if(!(r.scale>0))return;let[i,a]=g(r);t.camera.zoomNow(r.scale/h,i,a),h=r.scale},{passive:!1}],[`gestureend`,e=>{e.preventDefault(),m=!1},{passive:!1}]];for(let[t,n,r]of S)e.addEventListener(t,n,r);return()=>{for(let[t,n,r]of S)e.removeEventListener(t,n,r);n.clear()}}var On=.9;function kn(e,t,n,r,i,a,o,s,c,l,u){let d=s+l/2;if(e.font=n,e.textAlign=`left`,e.textBaseline=`middle`,e.globalAlpha=u*On,e.strokeStyle=i,e.lineWidth=3,e.lineJoin=`round`,e.miterLimit=2,e.strokeText(t,o,d),e.globalAlpha=u,e.fillStyle=r,e.fillText(t,o,d),a){let t=Math.max(1,l/14);e.fillRect(o-1,d-t/2+.5,c+2,t)}}var An=class{factory;surface=null;size=0;dpr=1;halo=`#000`;shelfX=0;shelfY=0;shelfH=0;maps=[new Map,new Map];generation=0;budget=1/0;deferred=0;constructor(e){this.factory=e}get canvas(){return this.surface?.canvas??null}configure(e,t){if(e===this.dpr&&t===this.halo&&this.surface)return;this.dpr=e,this.halo=t;let n=Math.min(4096,Math.ceil(1024*Math.max(1,e)));this.surface&&this.size===n||(this.surface=this.factory(n,n),this.size=n),this.wipe()}beginFrame(e){this.budget=e,this.deferred=0}wipe(){this.maps[0].clear(),this.maps[1].clear(),this.shelfX=0,this.shelfY=0,this.shelfH=0,this.generation++,this.surface?.ctx.setTransform(1,0,0,1,0,0),this.surface?.ctx.clearRect(0,0,this.size,this.size)}get(e,t,n,r,i,a){let o=this.surface;if(!o)return null;let s=this.maps[+!!r],c=s.get(t);c||(c=new Map,s.set(t,c));let l=c.get(n);l||(l=new Map,c.set(n,l));let u=l.get(e);if(u)return u;if(this.budget<=0){this.deferred++;return}let d=this.dpr,f=Math.ceil((i+4)*d),p=Math.ceil((a+4)*d);if(f>this.size||p>this.size)return null;if(this.shelfX+f>this.size&&(this.shelfY+=this.shelfH+1,this.shelfX=0,this.shelfH=0),this.shelfY+p>this.size)return this.wipe(),this.get(e,t,n,r,i,a);this.budget--;let m={sx:this.shelfX,sy:this.shelfY,sw:f,sh:p},h=o.ctx;return h.setTransform(d,0,0,d,this.shelfX,this.shelfY),kn(h,e,t,n,this.halo,r,2,2,i,a,1),h.setTransform(1,0,0,1,0,0),this.shelfX+=f+1,this.shelfH=Math.max(this.shelfH,p),l.set(e,m),m}},jn=1.2,Mn=9.6,Nn=14.4;function Pn(e){if(!(e>0))return[];let t=24;for(let n=0;n<12&&t*e<Mn;n++)t*=4;let n=Ft(Mn,Nn,t*e);return n>=.999?[{spacing:t,alpha:1,nested:!1}]:[{spacing:t*4,alpha:1,nested:!1},{spacing:t,alpha:n,nested:!0}]}var Fn=class{factory;tiles=[null,null];constructor(e){this.factory=e}clear(){this.tiles[0]=null,this.tiles[1]=null}pattern(e,t,n,r,i,a,o){let s=`${n}|${r}|${i}|${a}|${o}`,c=this.tiles[t]??null;if(c?.key===s)return c.pattern;if(!c){let e=this.factory(n,n);if(!e)return null;c={surface:e,key:``,pattern:null},this.tiles[t]=c}let{canvas:l,ctx:u}=c.surface;l.width=n,l.height=n,u.setTransform(1,0,0,1,0,0),u.clearRect(0,0,n,n),u.fillStyle=a,u.beginPath();let d=n/r;for(let e=0;e<r;e++)for(let t=0;t<r;t++){if(i&&t===0&&e===0)continue;let n=(t+.5)*d,r=(e+.5)*d;u.moveTo(n+o,r),u.arc(n,r,o,0,k)}return u.fill(),c.key=s,c.pattern=e.createPattern(l,`repeat`),c.pattern}};function In(e,t,n,r,i){if(e.globalAlpha=1,e.fillStyle=n.canvas.background,e.fillRect(0,0,t.width,t.height),!r)return;let a=1-.5*Math.min(1,Math.max(0,Number.isFinite(i)?i:0)),o=Pn(t.k),s=t.dpr,c=Math.ceil(t.width*s),l=Math.ceil(t.height*s);e.save(),e.setTransform(1,0,0,1,0,0);for(let i=0;i<o.length;i++){let u=o[i],d=u.nested?4:1,f=d*u.spacing*t.k*s,p=Math.max(2,Math.round(f)),m=r.pattern(e,i,p,d,u.nested,n.canvas.grid,jn/2*s);if(!m||typeof m.setTransform!=`function`)continue;let h=f/p,g=.5*f/d,_=((t.ox*s-g)%f+f)%f,v=((t.oy*s-g)%f+f)%f;m.setTransform({a:h,b:0,c:0,d:h,e:_,f:v}),e.globalAlpha=u.alpha*a,e.fillStyle=m,e.fillRect(0,0,c,l)}e.restore()}var Ln=class{boxes=new Float64Array(160);count=0;font=``;layout(e,t,n,r,i,a){if(this.count=0,t.badges.length===0)return;let{k:o,ox:s,oy:c,dpr:l}=n,u=r.get(10,600,!0);this.font=u;for(let r of t.badges){let t=e.nodes[r],d=t.badge;if(o<d.minZoom||t.alpha<.02)continue;let f=t.ring,p=Math.max(t.r*o,1)+(f?f.gap+f.width/2:0),m=Math.ceil(i.width(u,d.text))+10,h=Lt(t.x*o+s+p*.7-2,l),g=Lt(t.y*o+c-p*.7-15+2,l);if(h+m<n.x0||h>n.x1||g+15<n.y0||g>n.y1)continue;if(a.insert(h-1,g-1,m+2,17),this.boxes.length<(this.count+1)*5){let e=new Float64Array(this.boxes.length*2);e.set(this.boxes),this.boxes=e}let _=this.count++*5;this.boxes[_]=h,this.boxes[_+1]=g,this.boxes[_+2]=m,this.boxes[_+3]=15,this.boxes[_+4]=r}}draw(e,t,n){if(this.count!==0){e.font=this.font,e.textAlign=`center`,e.textBaseline=`middle`;for(let r=0;r<this.count;r++){let i=r*5,a=this.boxes[i],o=this.boxes[i+1],s=this.boxes[i+2],c=this.boxes[i+3],l=t.nodes[this.boxes[i+4]],u=l.badge;u&&(e.globalAlpha=l.alpha,e.beginPath(),Nt(e,a,o,s,c,c/2),e.fillStyle=n.canvas.background,e.fill(),e.fillStyle=u.background,e.fill(),e.fillStyle=u.color,e.fillText(u.text,a+s/2,o+c/2+.5))}}}},Rn=new Map;function zn(e){if(typeof e.label==`string`&&e.label.length>0)return e.label;let t=e.count,n=Rn.get(t);return n===void 0&&(n=`+${t.toLocaleString(`en-US`)}`,Rn.size>4096&&Rn.clear(),Rn.set(t,n)),n}function Bn(e,t,n,r,i){let a=Math.ceil(r.width(n.get(11,500),zn(e)))+16;return i[0]=Lt(e.x*t.k+t.ox-a/2,t.dpr),i[1]=Lt(e.y*t.k+t.oy-10,t.dpr),i[2]=a,i[3]=20,i}var Vn=new Float64Array(4);function Hn(e,t,n,r,i,a,o){if(t.length===0)return;let s=a.get(11,500),c=Rt(1,r.dpr),l=!1;for(let u=0;u<t.length;u++){let d=t[u];if(n[u]!==1)continue;Bn(d,r,a,o,Vn);let f=Vn[0],p=Vn[1],m=Vn[2],h=Vn[3];f+m<r.x0||f>r.x1||p+h<r.y0||p>r.y1||(l||=(e.globalAlpha=1,e.lineWidth=1,e.font=s,e.textAlign=`center`,e.textBaseline=`middle`,!0),e.beginPath(),Nt(e,f+c,p+c,m-2*c,h-2*c,h/2),e.fillStyle=i.surface.raised,e.fill(),e.strokeStyle=i.surface.borderStrong,e.stroke(),e.fillStyle=i.text.secondary,e.fillText(zn(d),f+m/2,p+h/2+.5))}}function Un(e){return e>0?Math.min(e,1):0}function Wn(e,t,n,r,i,a,o,s,c,l,u,d){let f=r-t,p=i-n,m=Math.hypot(f,p),h=Un(c);if(!(m>1e-6)||h<=0)return 0;if(a===0||!Number.isFinite(a)){let r=f/m,i=p/m,a=o,c=m-s;if(c-a<.5)return 0;let g=a,_=c;if(h<1){let e=(c-a)*h;l?g=c-e:_=a+e}let v=_,y=u&&_-g>8.4;return y&&(v=_-6,d[0]=t+r*_,d[1]=n+i*_,d[2]=r,d[3]=i),e.moveTo(t+r*g,n+i*g),e.lineTo(t+r*v,n+i*v),y?2:1}let g=(t+r)/2-p*a,_=(n+i)/2+f*a,v=Bt(t,n,g,_,r,i,o,!1),y=Bt(t,n,g,_,r,i,s,!0);if(y-v<.01)return 0;let b=v,x=y;if(h<1){let e=(y-v)*h;l?b=y-e:x=v+e}let S=x,ee=!1;if(u){let e=zt(t,g,r,x),a=zt(n,_,i,x),o=Math.hypot(e,a);if(o>1e-6){let s=6/o;x-b>s*1.2&&(ee=!0,S=x-s,d[0]=j(t,g,r,x),d[1]=j(n,_,i,x),d[2]=e/o,d[3]=a/o)}}let te=j(t,g,r,b),ne=j(n,_,i,b),re=(S-b)/2;return e.moveTo(te,ne),e.quadraticCurveTo(te+re*zt(t,g,r,b),ne+re*zt(n,_,i,b),j(t,g,r,S),j(n,_,i,S)),ee?2:1}function Gn(e,t){let n=Number.isFinite(t)?Math.min(Math.abs(t),1):0;return Math.max(6,e*.8)*(1+2*n)}function Kn(e,t,n){return e-t-n*.5}function qn(e,t,n,r,i,a){let o=Un(a);if(o<=0)return 0;let s=Gn(r,i),c=Kn(n,r,s),l=Math.PI/2;return e.moveTo(t,c+s),e.arc(t,c,s,l,l+k*o),1}function Jn(e,t,n,r,i){let a=Number.isFinite(i)?i:0;return[(e+n)/2-(r-t)*a/2,(t+r)/2+(n-e)*a/2]}var Yn=new Float64Array(4),M=new Float64Array(1024);function Xn(e){if(M.length<(e+1)*4){let e=new Float64Array(M.length*2);e.set(M),M=e}let t=e*4;M[t]=Yn[0],M[t+1]=Yn[1],M[t+2]=Yn[2],M[t+3]=Yn[3]}function Zn(e,t){e.globalAlpha=t.alpha,e.strokeStyle=t.color,e.lineWidth=t.width,e.setLineDash(t.dash??jt),e.lineDashOffset=t.dash?t.dashOffset:0,e.lineCap=t.dash?`butt`:`round`,e.lineJoin=`round`}function Qn(e,t,n,r){return Math.abs(n-e)+Math.abs(r-t)<1e-9}function $n(e,t,n){return e&&!(n<t)}function er(e,t,n,r){let{k:i,ox:a,oy:o}=r,s=r.x0-48,c=r.x1+48,l=r.y0-48,u=r.y1+48,d=t.edges;for(let t of n.edgeBuckets){let n=!1,f=0,p=t.members;for(let m=0;m<p.length;m++){let h=d[p[m]],g=h.x1*i+a,_=h.y1*i+o,v=h.x2*i+a,y=h.y2*i+o,b=Math.max(h.r1*i,1),x=Qn(h.x1,h.y1,h.x2,h.y2);if(x){let e=Gn(b,h.curvature),t=Kn(_,b,e);if(g+e<s||g-e>c||t+e<l||t-e>u){r.stats.culledEdges++;continue}}else if(h.curvature===0){if(!Ut(g,_,v,y,s,l,c,u)){r.stats.culledEdges++;continue}}else{let e=(g+v)/2-(y-_)*h.curvature,t=(_+y)/2+(v-g)*h.curvature;if(Math.max(g,v,e)<s||Math.min(g,v,e)>c||Math.max(_,y,t)<l||Math.min(_,y,t)>u){r.stats.culledEdges++;continue}}n||=(Zn(e,t),e.beginPath(),!0);let S;if(x)S=qn(e,g,_,b,h.curvature,h.progress);else{let t=$n(h.arrow,h.arrowMinZoom,i),n=Math.max(h.r2*i,1)+(t?Mt:0);S=Wn(e,g,_,v,y,h.curvature,b,n,h.progress,h.fromTarget,t,Yn),S===2&&Xn(f++)}S!==0&&r.stats.edges++}if(n&&(e.stroke(),r.stats.edgeStrokes++,f>0)){e.fillStyle=t.color,e.beginPath();for(let t=0;t<f;t++){let n=t*4;Pt(e,M[n],M[n+1],M[n+2],M[n+3])}e.fill()}}}var tr=Object.freeze([.001,4]),nr={arrow:!0,dash:null,mark:!1},rr={arrow:!1,dash:tr,mark:!0},ir={arrow:!1,dash:null,mark:!1};function ar(e){switch(e){case`merge-arrow`:case`split-arrow`:case`move-arrow`:case`replacement-arrow`:case`edge-ghost`:return nr;case`suggestion`:return rr;default:return ir}}function or(e,t){return e>0&&Number.isFinite(e)?Math.max(e*t,1):0}var sr=new Float64Array(4);function cr(e,t,n,r,i,a){let{k:o,ox:s,oy:c}=r,l=r.x0-48,u=r.x1+48,d=r.y0-48,f=r.y1+48;for(let r of n.glyphArcs){let n=t.glyphs[r],p=n.x1*o+s,m=n.y1*o+c,h=n.x2*o+s,g=n.y2*o+c,_=Number.isFinite(n.curvature)?n.curvature:0,v=(p+h)/2-(g-m)*_,y=(m+g)/2+(h-p)*_;if(Math.max(p,h,v)<l||Math.min(p,h,v)>u||Math.max(m,g,y)<d||Math.min(m,g,y)>f)continue;let b=ar(n.kind),x=n.arrow,S=typeof x==`boolean`?x:b.arrow,ee=or(n.r1,o),te=or(n.r2,o),ne=n.dash!==null&&n.dash.length>0?n.dash:b.dash;e.globalAlpha=n.alpha,e.strokeStyle=n.color,e.lineWidth=n.width,e.setLineDash(ne??jt),e.lineDashOffset=0,e.lineCap=ne===null||(ne[0]??0)<.5?`round`:`butt`,e.lineJoin=`round`,e.beginPath();let re=Wn(e,p,m,h,g,_,ee,te>0&&S?te+Mt:te,n.progress,!1,S,sr);if(e.stroke(),re===2&&(e.fillStyle=n.color,e.beginPath(),Pt(e,sr[0],sr[1],sr[2],sr[3]),e.fill()),b.mark&&n.progress>=1&&Math.hypot(h-p,g-m)>42){let[t,r]=Jn(p,m,h,g,_);e.setLineDash(jt),e.beginPath(),e.arc(t,r,7,0,k),e.fillStyle=i.canvas.background,e.fill(),e.lineWidth=1.25,e.stroke(),e.fillStyle=n.color,e.font=a.get(10,700),e.textAlign=`center`,e.textBaseline=`middle`,e.fillText(`?`,t,r+.5)}}}function lr(e,t,n,r,i){let{k:a,ox:o,oy:s}=r;for(let c of n.pivots){let n=t.glyphs[c],l=n.x1*a+o,u=n.y1*a+s,d=Math.max(1.5,n.width/2);l+d<r.x0||l-d>r.x1||u+d<r.y0||u-d>r.y1||(e.globalAlpha=n.alpha,e.fillStyle=i.canvas.background,e.beginPath(),e.arc(l,u,d+1.5,0,k),e.fill(),e.fillStyle=n.color,e.beginPath(),e.arc(l,u,d,0,k),e.fill())}}var ur=new Map;function dr(e){let t=ur.get(e);if(t!==void 0)return t;let n=fr(e.trim().toLowerCase());return ur.size>512&&ur.clear(),ur.set(e,n),n}function fr(e){if(e.startsWith(`#`)){let t=e.slice(1);if(!/^[0-9a-f]+$/.test(t))return null;if(t.length===3||t.length===4){let e=e=>Number.parseInt(t.charAt(e)+t.charAt(e),16);return{r:e(0),g:e(1),b:e(2),a:t.length===4?e(3)/255:1}}if(t.length===6||t.length===8){let e=e=>Number.parseInt(t.slice(e,e+2),16);return{r:e(0),g:e(2),b:e(4),a:t.length===8?e(6)/255:1}}return null}let t=/^rgba?\(([^)]*)\)$/.exec(e);if(!t)return null;let n=(t[1]??``).split(/[\s,/]+/).filter(e=>e.length>0);if(n.length<3||n.length>4)return null;let r=e=>e.endsWith(`%`)?Number.parseFloat(e)*2.55:Number.parseFloat(e),i=e=>e===void 0?1:e.endsWith(`%`)?Number.parseFloat(e)/100:Number.parseFloat(e),a=r(n[0]??``),o=r(n[1]??``),s=r(n[2]??``),c=i(n[3]);return[a,o,s,c].every(Number.isFinite)?{r:A(a,0,255),g:A(o,0,255),b:A(s,0,255),a:A(c,0,1)}:null}function pr(e,t){let n=Math.round(A(e.a*t,0,1)*1e3)/1e3;return`rgba(${Math.round(e.r)}, ${Math.round(e.g)}, ${Math.round(e.b)}, ${n})`}var mr=[[0,1],[.3,.9],[.5,.6],[.7,.28],[.86,.08],[1,0]],hr=128,gr=class{factory;cache=new Map;constructor(e){this.factory=e}clear(){this.cache.clear()}get size(){return this.cache.size}sprite(e){let t=this.cache.get(e);return t===void 0&&(t=this.make(e),this.cache.size>64&&this.cache.clear(),this.cache.set(e,t)),t}make(e){let t=this.factory(hr,hr);if(!t)return null;let n=hr/2,r=t.ctx.createRadialGradient(n,n,0,n,n,n),i=dr(e);for(let[t,n]of mr)r.addColorStop(t,i?pr(i,n):n>0?e:`rgba(0, 0, 0, 0)`);return t.ctx.fillStyle=r,t.ctx.fillRect(0,0,hr,hr),t}};function _r(e,t,n,r,i,a){let{k:o,ox:s,oy:c}=r;i.glow||(e.lineWidth=2,e.setLineDash(jt));for(let l of n.halos){let n=t.nodes[l],u=n.halo,d=u.alpha*n.alpha;if(d<.01)continue;let f=n.x*o+s,p=n.y*o+c,m=Math.max(n.r*o,1),h=n.ring,g=h?m+h.gap+h.width/2:0,_=Math.max(u.radius*o,1),v=Math.max(_+5,g+1.5+1),y=i.glow?Math.max(u.radius*o,m*1.6):v+2;if(!(f+y<r.x0-48||f-y>r.x1+48)&&!(p+y<r.y0-48||p-y>r.y1+48)){if(e.globalAlpha=d,i.glow){let t=a.sprite(u.color);t&&e.drawImage(t.canvas,f-y,p-y,y*2,y*2)}else e.strokeStyle=u.color,e.beginPath(),e.arc(f,p,v,0,k),e.stroke()}}}function vr(){return{x:0,y:0,r:0,w:0,h:0,offset:0,priority:0,order:0,mode:0,pill:-1,placed:!1,side:0,bx:0,by:0,alpha:1,primary:null,secondary:null,textP:``,textS:``,fontP:``,fontS:``,wP:0,wS:0,hP:0,hS:0,dyS:0}}var yr=class{cell=64;cols=1;rows=1;x0=0;y0=0;cells=[[]];touched=[];rects=new Float64Array(1024);n=0;reset(e,t,n,r,i=64){for(let e of this.touched)this.cells[e].length=0;this.touched.length=0,this.n=0,this.cell=i,this.x0=e,this.y0=t,this.cols=Math.max(1,Math.ceil(n/i)),this.rows=Math.max(1,Math.ceil(r/i));let a=this.cols*this.rows;for(;this.cells.length<a;)this.cells.push([])}get count(){return this.n}extend(e){let t=this.rects;for(let n=0;n<this.n*4;n+=4)e[0]=Math.min(e[0],t[n]),e[1]=Math.min(e[1],t[n+1]),e[2]=Math.max(e[2],t[n]+t[n+2]),e[3]=Math.max(e[3],t[n+1]+t[n+3])}insert(e,t,n,r){if(this.rects.length<(this.n+1)*4){let e=new Float64Array(this.rects.length*2);e.set(this.rects),this.rects=e}let i=this.n++,a=i*4;this.rects[a]=e,this.rects[a+1]=t,this.rects[a+2]=n,this.rects[a+3]=r;let o=this.col(e),s=this.col(e+n),c=this.row(t),l=this.row(t+r);for(let e=c;e<=l;e++)for(let t=o;t<=s;t++){let n=e*this.cols+t,r=this.cells[n];r.length===0&&this.touched.push(n),r.push(i)}}overlaps(e,t,n,r){let i=this.col(e),a=this.col(e+n),o=this.row(t),s=this.row(t+r),c=this.rects;for(let l=o;l<=s;l++)for(let o=i;o<=a;o++){let i=this.cells[l*this.cols+o];for(let a=0;a<i.length;a++){let o=i[a]*4;if(Wt(e,t,n,r,c[o],c[o+1],c[o+2],c[o+3]))return!0}}return!1}col(e){let t=Math.floor((e-this.x0)/this.cell);return t<0?0:t>=this.cols?this.cols-1:t}row(e){let t=Math.floor((e-this.y0)/this.cell);return t<0?0:t>=this.rows?this.rows-1:t}};function br(e,t){return t.priority-e.priority||e.order-t.order}var xr=[0,1,2,3],Sr=[4,2,0],Cr=[4],wr={x:0,y:0};function Tr(e,t){let{x:n,y:r,r:i,w:a,h:o}=e,s,c;return e.mode===2?(s=n-a/2,c=r-o/2):e.mode===1?(s=n-a/2,c=t===2?r-o-4:t===0?r+4:r-o/2):t===1?(s=n+i+6,c=r-o/2):t===2?(s=n-a/2,c=r-i-e.offset-o):t===3?(s=n-i-6-a,c=r-o/2):(s=n-a/2,c=r+i+e.offset),wr.x=s,wr.y=c,wr}function Er(e,t,n){e.sort(br);let r=0;for(let i of e){i.placed=!1;let e=i.mode===2?Cr:i.mode===1?Sr:xr;for(let a of e){let{x:e,y:o}=Tr(i,a),{w:s,h:c}=i;if(!(e+s<n.x0||e>n.x1||o+c<n.y0||o>n.y1)&&!(n.strictX&&(e<n.x0||e+s>n.x1))&&!(n.strictY&&(o<n.y0||o+c>n.y1))&&!t.overlaps(e,o,s,c)){t.insert(e-2,o-2,s+4,c+4),i.placed=!0,i.side=a,i.bx=e,i.by=o,r++;break}}}return r}var Dr=2e4;function Or(e){return Math.round(e*1.3)}var kr=class{cache=new Map;family;mono;constructor(e){this.family=e.font.family,this.mono=e.font.mono}setTheme(e){(e.font.family!==this.family||e.font.mono!==this.mono)&&(this.family=e.font.family,this.mono=e.font.mono,this.cache.clear())}get(e,t,n=!1){let r=(n?-1:1)*(Math.round(t)*1e4+Math.round(e*100)),i=this.cache.get(r);return i===void 0&&(i=`${Math.round(t)} ${Math.round(e*100)/100}px ${n?this.mono:this.family}`,this.cache.set(r,i)),i}},Ar=/[ᄀ-ᇿ⺀-鿿가-豈--]/;function jr(e,t){let n=/(\d+(?:\.\d+)?)px/.exec(e),r=n?Number(n[1]):12,i=0;for(let e of t)i+=Ar.test(e)?r:r*.58;return i}var Mr=class{ctx;widths=new Map;fitted=new Map;count=0;font=``;constructor(e){this.ctx=e}setContext(e){this.ctx=e,this.clear()}clear(){this.widths.clear(),this.fitted.clear(),this.count=0,this.font=``}width(e,t){let n=this.widths.get(e);n||(n=new Map,this.widths.set(e,n));let r=n.get(t);return r===void 0&&(r=this.measure(e,t),++this.count>Dr&&(this.widths.clear(),this.fitted.clear(),this.count=0,n=new Map,this.widths.set(e,n)),n.set(t,r)),r}fit(e,t,n=240){if(this.width(e,t)<=n)return t;let r=this.fitted.get(e);r||(r=new Map,this.fitted.set(e,r));let i=r.get(t);if(i!==void 0)return i;let a=Array.from(t),o=0,s=a.length;for(;o<s;){let t=o+s+1>>1;this.measure(e,`${a.slice(0,t).join(``).trimEnd()}…`)<=n?o=t:s=t-1}let c=`${a.slice(0,o).join(``).trimEnd()}…`;return r.set(t,c),c}measure(e,t){let n=this.ctx;return n?(this.font!==e&&(n.font=e,this.font=e),n.measureText(t).width):jr(e,t)}},Nr=.02,Pr=new Float64Array(4);function Fr(e,t){if(!(e>0)||t>=e)return 1;let n=(t-.9*e)/(.1*e);return n<=0?0:n*n*(3-2*n)}function Ir(e,t,n){return e!==null&&e.text.length>0&&e.alpha*n*Fr(e.minZoom,t)>=Nr}var Lr=class{pool=[];active=[];clip={x0:0,y0:0,x1:0,y1:0,strictX:!1,strictY:!1};begin(e,t,n,r){r.reset(n.x0-160,n.y0-160,n.x1-n.x0+320,n.y1-n.y0+320);let{k:i,ox:a,oy:o}=n;if(!(t.maxR*i<3))for(let s of t.nodeBuckets)for(let t of s.members){let s=e.nodes[t],c=s.r*i;if(c<3)continue;let l=s.x*i+a,u=s.y*i+o;l+c<n.x0-160||l-c>n.x1+160||u+c<n.y0-160||u-c>n.y1+160||r.insert(l-c,u-c,2*c,2*c)}}place(e,t,n,r,i){this.collect(e,t,n,r);let a=e.collapsed.length;if(t.pillShown.length<a&&(t.pillShown=new Uint8Array(a)),t.pillShown.fill(0,0,a),t.pillsVersion=t.version,this.active.length===0)return;let o=this.clip;o.x0=n.x0,o.x1=n.x1,o.y0=n.y0,o.y1=n.y1,o.strictX=n.strictX,o.strictY=n.strictY,Er(this.active,i,o);for(let e of this.active)e.placed&&e.pill>=0&&(t.pillShown[e.pill]=1)}collect(e,t,n,r){this.active.length=0,this.collectNodes(e,n,r),this.collectEdges(e,n,r),this.collectGlyphs(e,t,n,r),this.collectPills(e,n,r)}extend(e){for(let t of this.active){let{x:n,y:r}=Tr(t,t.mode===0?0:4);e[0]=Math.min(e[0],n),e[1]=Math.min(e[1],r),e[2]=Math.max(e[2],n+t.w),e[3]=Math.max(e[3],r+t.h)}}draw(e,t,n,r){let i=0,a=n.canvas.background,o=r.atlas,s=o?.canvas??null;for(let n of this.active)if(!(!n.placed||n.pill>=0)){if(i++,n.primary){let r=Rr(n,n.wP);zr(e,n,n.primary,n.textP,n.fontP,n.wP,n.hP,r,n.by,t,a,o,s)}if(n.secondary){let r=Rr(n,n.wS);zr(e,n,n.secondary,n.textS,n.fontS,n.wS,n.hS,r,n.by+n.dyS,t,a,o,s)}}return i}take(){let e=this.active.length,t=this.pool[e];return t||(t=vr(),this.pool.push(t)),this.active.push(t),t.pill=-1,t}collectPills(e,t,n){let r=e.collapsed;for(let e=0;e<r.length;e++){let i=r[e];if(!(i.count>0)||!Number.isFinite(i.x+i.y))continue;Bn(i,t,n.fonts,n.measurer,Pr);let a=Pr[2],o=Pr[3],s=Pr[0]+a/2,c=Pr[1]+o/2;if(s<t.x0-160||s>t.x1+160||c<t.y0-160||c>t.y1+160)continue;let l=this.take();l.pill=e,l.x=s,l.y=c,l.r=0,l.w=a,l.h=o,l.offset=0,l.mode=2,l.priority=1,l.order=3e7+e,l.placed=!1,l.primary=null,l.secondary=null}}collectNodes(e,t,n){let{k:r,ox:i,oy:a}=t,o=e.nodes;for(let e=0;e<o.length;e++){let s=o[e];if(!s.visible||s.alpha<Nr)continue;let c=Ir(s.label,r,s.alpha)?s.label:null,l=Ir(s.secondaryLabel,r,s.alpha)?s.secondaryLabel:null;if(!c&&!l)continue;let u=s.x*r+i,d=s.y*r+a;if(u<t.x0-160||u>t.x1+160||d<t.y0-160||d>t.y1+160)continue;let f=this.take();f.x=u,f.y=d,f.r=Math.max(s.r*r,1),f.mode=0,f.order=e,f.alpha=s.alpha,this.fill(f,c,l,n)}}collectEdges(e,t,n){let{k:r,ox:i,oy:a}=t,o=e.edges;for(let e=0;e<o.length;e++){let s=o[e];if(s.label===null||!s.visible||s.progress<.999||!Ir(s.label,r,s.alpha))continue;let c=s.x1*r+i,l=s.y1*r+a,u,d;if(Qn(s.x1,s.y1,s.x2,s.y2)){let e=Math.max(s.r1*r,1),t=Gn(e,s.curvature);u=c,d=Kn(l,e,t)-t}else[u,d]=Jn(c,l,s.x2*r+i,s.y2*r+a,s.curvature);if(u<t.x0-160||u>t.x1+160||d<t.y0-160||d>t.y1+160)continue;let f=this.take();f.x=u,f.y=d,f.r=0,f.mode=1,f.order=1e7+e,f.alpha=s.alpha,this.fill(f,s.label,null,n)}}collectGlyphs(e,t,n,r){let{k:i,ox:a,oy:o}=n;for(let s of t.glyphArcs){let t=e.glyphs[s];if(!Ir(t.label,i,t.alpha)||t.progress<.999)continue;let[c,l]=Jn(t.x1*i+a,t.y1*i+o,t.x2*i+a,t.y2*i+o,t.curvature);if(c<n.x0-160||c>n.x1+160||l<n.y0-160||l>n.y1+160)continue;let u=this.take();u.x=c,u.y=l,u.r=t.kind===`suggestion`?7:0,u.mode=t.kind===`suggestion`?0:1,u.order=2e7+s,u.alpha=t.alpha,this.fill(u,t.label,null,r)}}fill(e,t,n,r){let{fonts:i,measurer:a}=r;e.primary=t,e.secondary=n,e.placed=!1,e.dyS=0,t&&(e.fontP=i.get(t.size,t.weight),e.textP=a.fit(e.fontP,t.text,240),e.wP=Math.ceil(a.width(e.fontP,e.textP)),e.hP=Or(t.size)),n&&(e.fontS=i.get(n.size,n.weight),e.textS=a.fit(e.fontS,n.text,240),e.wS=Math.ceil(a.width(e.fontS,e.textS)),e.hS=Or(n.size)),t&&n?(e.dyS=Math.max(n.offset-t.offset,e.hP-1),e.w=Math.max(e.wP,e.wS),e.h=e.dyS+e.hS,e.offset=t.offset,e.priority=Math.max(t.priority,n.priority)):t?(e.w=e.wP,e.h=e.hP,e.offset=t.offset,e.priority=t.priority):n&&(e.w=e.wS,e.h=e.hS,e.offset=n.offset,e.priority=n.priority)}};function Rr(e,t){switch(e.side){case 1:return e.bx;case 3:return e.bx+e.w-t;case 0:case 2:case 4:return e.bx+(e.w-t)/2;default:return e.bx}}function zr(e,t,n,r,i,a,o,s,c,l,u,d,f){let p=n.alpha*t.alpha*Fr(n.minZoom,l.k),m=Lt(s,l.dpr),h=Lt(c,l.dpr),g=d&&f?d.get(r,i,n.color,n.strike,a,o):null;g!==void 0&&(g&&f?(e.globalAlpha=p,e.drawImage(f,g.sx,g.sy,g.sw,g.sh,m-2,h-2,g.sw/l.dpr,g.sh/l.dpr)):kn(e,r,i,n.color,u,n.strike,m,h,a,o,p))}var Br=[];function Vr(e,t,n){let r=0;for(let t of e)r+=t;e.length%2==1&&(r*=2),n.length=e.length;let i=k*t,a=Math.max(1,Math.round(i/r)),o=r>0?i/(a*r):1;for(let t=0;t<e.length;t++)n[t]=e[t]*o;return n}function Hr(e,t,n,r){return t+r>=e.x0-48&&t-r<=e.x1+48&&n+r>=e.y0-48&&n-r<=e.y1+48}function Ur(e,t,n,r,i){let{k:a,ox:o,oy:s}=r,c=t.members,l=t.fill??i;if(e.globalAlpha=t.alpha,t.dash!==null&&t.stroke!==null){e.fillStyle=l,e.strokeStyle=t.stroke,e.lineWidth=t.strokeWidth,e.lineCap=`butt`;for(let i=0;i<c.length;i++){let l=n[c[i]],u=l.x*a+o,d=l.y*a+s,f=Math.max(l.r*a,1);Hr(r,u,d,f)?(r.stats.nodes++,e.beginPath(),e.arc(u,d,f,0,k),e.fill(),e.setLineDash(f<3?jt:Vr(t.dash,f,Br)),e.stroke()):r.stats.culledNodes++}e.setLineDash(jt);return}let u=!1,d=0;for(let t=0;t<c.length;t++){let i=n[c[t]],l=i.x*a+o,f=i.y*a+s,p=Math.max(i.r*a,1);Hr(r,l,f,p)?(r.stats.nodes++,p<1.25?d++:(u||=(e.beginPath(),!0),e.moveTo(l+p,f),e.arc(l,f,p,0,k))):r.stats.culledNodes++}if(u&&(e.fillStyle=l,e.fill(),t.stroke!==null&&(e.strokeStyle=t.stroke,e.lineWidth=t.strokeWidth,e.setLineDash(jt),e.stroke())),d>0){e.beginPath();for(let t=0;t<c.length;t++){let i=n[c[t]],l=Math.max(i.r*a,1);if(l>=1.25)continue;let u=i.x*a+o,d=i.y*a+s;Hr(r,u,d,l)&&e.rect(u-l,d-l,2*l,2*l)}e.fillStyle=t.fill??t.stroke??i,e.fill()}}function Wr(e,t,n,r){let i=t.x*n.k+n.ox,a=t.y*n.k+n.oy,o=Math.max(t.r*n.k,1),s=t.ring;if(!Hr(n,i,a,o+(s?s.gap+s.width:0)+24))return;if(s!==null&&s.width>0){let n=s.alpha*t.alpha;n>=.01&&(e.globalAlpha=n,e.strokeStyle=s.color,e.lineWidth=s.width,e.setLineDash(jt),e.beginPath(),e.arc(i,a,o+s.gap,0,k),e.stroke())}let c=t.pulse;if(c>0&&c<1){let n=1-c,l=n*n*.85*t.alpha;l>=.01&&(e.globalAlpha=l,e.strokeStyle=s?.color??t.stroke??t.fill??r.accent.base,e.lineWidth=.75+1.75*n,e.setLineDash(jt),e.beginPath(),e.arc(i,a,o+3+c*(12+o*.6),0,k),e.stroke())}}function Gr(e,t,n,r,i){let a=t.nodes,o=n.nodeBuckets,s=n.decor,c=i.canvas.background,l=0;for(let t=0;t<o.length;t++){let n=o[t];Ur(e,n,a,r,c);let u=o[t+1];if(u===void 0||u.z!==n.z)for(;l<s.length&&pn(a[s[l]].z)<=n.z;)Wr(e,a[s[l]],r,i),l++}for(;l<s.length;)Wr(e,a[s[l++]],r,i)}function Kr(){return{nodes:0,edges:0,culledNodes:0,culledEdges:0,labels:0,edgeStrokes:0,deferredLabels:0,phases:[]}}function qr(e){e.nodes=0,e.edges=0,e.culledNodes=0,e.culledEdges=0,e.labels=0,e.edgeStrokes=0,e.deferredLabels=0,e.phases.length=0}function Jr(e){return`before`in e&&`after`in e&&`split`in e}function Yr(e,t,n){return Lt(A(Number.isFinite(e)?e:.5,0,1)*t,n)}var Xr=class{factory;fonts;measurer;atlas;halos;tiles;interner=new un;dpr=0;theme;constructor(e,t,n){this.factory=e,this.theme=t,this.fonts=new kr(t),this.measurer=new Mr(e(1,1)?.ctx??n),this.atlas=new An(e),this.halos=new gr(e),this.tiles=new Fn(e)}setTheme(e){e!==this.theme&&(this.theme=e,this.fonts.setTheme(e),this.measurer.clear(),this.halos.clear(),this.tiles.clear(),this.atlas?.configure(this.dpr||1,e.canvas.background))}prepare(e){e!==this.dpr&&(this.dpr=e,this.tiles.clear(),this.atlas?.configure(e,this.theme.canvas.background))}fontsChanged(){this.measurer.clear(),this.atlas?.wipe()}},Zr=class{res;stats=Kr();rasterBudget=160;labelsInside=!1;labels=new Lr;badges=new Ln;grid=new yr;view={k:1,ox:0,oy:0,width:0,height:0,dpr:1,x0:0,x1:0,y0:0,y1:0,strictX:!1,strictY:!1,stats:this.stats};constructor(e){this.res=e}paint(e,t,n,r,i,a,o){let{ctx:s,width:c,height:l,dpr:u}=e,d=this.view;qr(this.stats),this.res.prepare(u),this.res.atlas?.beginFrame(this.rasterBudget),d.k=t.k,d.ox=c/2-t.x*t.k,d.oy=l/2-t.y*t.k,d.width=c,d.height=l,d.dpr=u,d.x0=0,d.x1=c,d.y0=0,d.y1=l,d.strictX=this.labelsInside,d.strictY=this.labelsInside,s.setTransform(u,0,0,u,0,0),s.imageSmoothingEnabled=!0;let f=n!==null&&Jr(n),p=n===null?0:f?Math.max(n.before.spotlight,n.after.spotlight):n.spotlight;if(In(s,d,a,o?this.res.tiles:null,p),this.stats.phases.push(`background`),n===null)return this.stats;if(!f)return r.main.sync(n,i,this.res.interner),this.layers(s,n,r.main,a),this.stats;let m=Yr(n.split,c,u);if(r.before.sync(n.before,i,this.res.interner),r.after.sync(n.after,i,this.res.interner),m>0&&(d.x0=0,d.x1=m,d.strictX=!0,s.save(),s.beginPath(),s.rect(0,0,m,l),s.clip(),this.layers(s,n.before,r.before,a),s.restore()),m<c&&(d.x0=m,d.x1=c,d.strictX=!0,s.save(),s.beginPath(),s.rect(m,0,c-m,l),s.clip(),this.layers(s,n.after,r.after,a),s.restore()),m>0&&m<c){let e=Math.max(1,Math.round(u));s.globalAlpha=1,s.fillStyle=a.surface.borderStrong,s.fillRect(Math.round(m*u-e/2)/u,0,e/u,l)}return this.stats.phases.push(`divider`),this.stats}layers(e,t,n,r){let i=this.view,a=this.res,o=this.stats.phases;this.labels.begin(t,n,i,this.grid),this.badges.layout(t,n,i,a.fonts,a.measurer,this.grid),this.labels.place(t,n,i,a,this.grid),Hn(e,t.collapsed,n.pillShown,i,r,a.fonts,a.measurer),o.push(`collapsed`),er(e,t,n,i),o.push(`edges`),cr(e,t,n,i,r,a.fonts),o.push(`glyphs`),_r(e,t,n,i,r,a.halos),o.push(`halos`),Gr(e,t,n,i,r),o.push(`nodes`),lr(e,t,n,i,r),o.push(`pivots`),this.badges.draw(e,t,r),o.push(`badges`),this.stats.labels+=this.labels.draw(e,i,r,a),this.stats.deferredLabels=a.atlas?.deferred??0,o.push(`labels`)}},Qr=[],$r=new Float64Array(4);function ei(e,t,n,r,i){if(t.nodeCount===0)return-1;let{k:a}=n,o=(r-n.ox)/a,s=(i-n.oy)/a,c=t.nodeGrid(),l=Math.max(c.maxR,1/a)+3/a;c.query(o-l,s-l,o+l,s+l,Qr);let u=-1,d=!1,f=-1/0,p=1/0;for(let t of Qr){let n=e.nodes[t],r=Math.max(n.r,1/a),i=Math.hypot(n.x-o,n.y-s);if(i>r+3/a)continue;let c=i<=r;(u<0||c&&!d||c===d&&(n.z>f||n.z===f&&(c?t>u:i<p)))&&(u=t,d=c,f=n.z,p=i)}return u}function ti(e,t,n,r,i){let{k:a}=n,o=(r-n.ox)/a,s=(i-n.oy)/a,c=-1,l=-1/0,u=1/0;for(let n of t.edgeBuckets){let t=(n.width/2+4)/a,r=t*t;for(let i of n.members){let d=e.edges[i],f;if(Qn(d.x1,d.y1,d.x2,d.y2)){let e=Math.max(d.r1*a,1),t=Gn(e,d.curvature)/a,n=Kn(d.y1*a,e,t*a)/a,r=Math.abs(Math.hypot(o-d.x1,s-n)-t);f=r*r}else if(d.curvature===0){if(o<Math.min(d.x1,d.x2)-t||o>Math.max(d.x1,d.x2)+t||s<Math.min(d.y1,d.y2)-t||s>Math.max(d.y1,d.y2)+t)continue;f=Vt(o,s,d.x1,d.y1,d.x2,d.y2)}else{let e=(d.x1+d.x2)/2-(d.y2-d.y1)*d.curvature,n=(d.y1+d.y2)/2+(d.x2-d.x1)*d.curvature;if(o<Math.min(d.x1,d.x2,e)-t||o>Math.max(d.x1,d.x2,e)+t||s<Math.min(d.y1,d.y2,n)-t||s>Math.max(d.y1,d.y2,n)+t)continue;f=Ht(o,s,d.x1,d.y1,e,n,d.x2,d.y2)}f>r||(n.z>l||n.z===l&&f<u)&&(c=i,l=n.z,u=f)}}return c}function ni(e,t,n,r,i,a,o){let s=e.collapsed;for(let e=s.length-1;e>=0;e--){let c=s[e];if(c.count>0&&Number.isFinite(c.x+c.y)&&t.pillPickable(e)&&(Bn(c,n,a,o,$r),r>=$r[0]&&r<=$r[0]+$r[2]&&i>=$r[1]&&i<=$r[1]+$r[3]))return e}return-1}function ri(e,t,n,r,i,a,o){let s=ei(e,t,n,r,i);if(s>=0)return{type:`node`,index:s};let c=ti(e,t,n,r,i);if(c>=0)return{type:`edge`,index:c};let l=ni(e,t,n,r,i,a,o);return l>=0?{type:`collapsed`,index:l}:null}var ii=new WeakMap,ai=3;function oi(e,t){return e===t||e!==null&&t!==null&&e.type===t.type&&e.index===t.index}function si(){return typeof window<`u`&&window.devicePixelRatio>0?window.devicePixelRatio:1}var ci=class{canvas;camera;ctx;theme;safe;grid;fixedRatio;dpr=1;width=0;height=0;frame=null;version=0;caches={main:new _n,before:new _n,after:new _n};res;painter;listeners={hover:new Set,click:new Set,dblclick:new Set,camera:new Set,frame:new Set};themeListeners=new Set;cleanup=[];now;requestFrame;cancelFrame;motionQuery;rafId=0;dirty=!0;busy=!1;destroyed=!1;cameraChanged=!0;viewportChanged=!0;emitted=null;autoFitted=!1;pointer=null;hoverPending=!1;hovered=null;dragging=!1;constructor(e,t,n){let r=t.minZoom??.05,i=t.maxZoom??6;if(!(r>0)||!(i>=r)||!Number.isFinite(i))throw new p(`invalid-input`,`createRenderer: expected 0 < minZoom ≤ maxZoom, got minZoom ${r}, maxZoom ${i}`);if(t.pixelRatio!==void 0&&!(t.pixelRatio>0))throw new p(`invalid-input`,`createRenderer: pixelRatio must be > 0, got ${t.pixelRatio}`);this.theme=t.theme,this.safe=t.safeArea??qt,this.grid=t.grid??!0,this.fixedRatio=t.pixelRatio,this.now=n.now??(()=>performance.now()),this.requestFrame=n.requestFrame??(e=>typeof requestAnimationFrame==`function`?requestAnimationFrame(e):0),this.cancelFrame=n.cancelFrame??(e=>typeof cancelAnimationFrame==`function`?cancelAnimationFrame(e):void 0),this.motionQuery=typeof window<`u`&&typeof window.matchMedia==`function`?window.matchMedia(`(prefers-reduced-motion: reduce)`):null;let a=document.createElement(`canvas`);a.setAttribute(`role`,`img`);let o=a.style;o.position=`absolute`,o.left=`0`,o.top=`0`,o.width=`100%`,o.height=`100%`,o.display=`block`,o.touchAction=`none`,o.userSelect=`none`,o.setProperty(`-webkit-user-select`,`none`),o.setProperty(`-webkit-tap-highlight-color`,`transparent`),o.outline=`none`,e.appendChild(a),this.canvas=a,this.ctx=n.context===void 0?a.getContext(`2d`,{alpha:!1}):n.context,this.camera=new an({size:()=>({width:this.width,height:this.height}),safeArea:()=>this.safe,contentBounds:()=>this.contentBounds(),reducedMotion:()=>this.motionQuery?.matches??!1,invalidate:()=>{this.cameraChanged=!0,this.pointer&&(this.hoverPending=!0),this.requestRender()}},r,i),this.res=new Xr(n.surfaceFactory??At,this.theme,this.ctx),this.painter=new Zr(this.res),this.painter.labelsInside=t.labelsInside??!1,this.observeSize(),this.watchPixelRatio(),this.watchFonts(),(t.interactive??!0)&&this.cleanup.push(Dn(a,{camera:this.camera,hover:(e,t)=>{this.pointer={x:e,y:t},this.hoverPending=!0,this.schedule()},leave:()=>{this.pointer=null,this.setHover(null)},click:(e,t,n)=>{this.emit(`click`,{pick:this.pick(e,t),world:this.camera.screenToWorld({x:e,y:t}),event:n})},dblclick:(e,t,n)=>{this.emit(`dblclick`,{pick:this.pick(e,t),world:this.camera.screenToWorld({x:e,y:t}),event:n})},dragging:e=>{this.dragging=e,this.canvas.style.cursor=e?`grabbing`:``,e?this.setHover(null):this.pointer&&(this.hoverPending=!0,this.schedule())},now:this.now})),ii.set(this,{theme:()=>this.theme,pixelRatio:()=>this.dpr,size:()=>({width:this.width,height:this.height}),userSet:e=>this.camera.set(e,`user`),onTheme:e=>(this.themeListeners.add(e),()=>this.themeListeners.delete(e)),requestFrame:this.requestFrame,cancelFrame:this.cancelFrame}),this.resize()}setFrame(e){this.destroyed||(this.frame=e,this.version++,this.pointer&&(this.hoverPending=!0),this.requestRender())}setTheme(e){if(!(this.destroyed||e===this.theme)){this.theme=e,this.res.setTheme(e);for(let t of this.themeListeners)t(e);this.requestRender()}}setSafeArea(e){this.safe={top:e.top,right:e.right,bottom:e.bottom,left:e.left}}setLabelsInside(e){this.destroyed||this.painter.labelsInside===e||(this.painter.labelsInside=e,this.dirty=!0,this.requestRender())}pick(e,t){let n=this.frame;if(!n||!Number.isFinite(e)||!Number.isFinite(t))return null;let r=this.camera.k,i={k:r,ox:this.width/2-this.camera.x*r,oy:this.height/2-this.camera.y*r,dpr:this.dpr},a,o;if(Jr(n)){let t=e<Yr(n.split,this.width,this.dpr);a=t?n.before:n.after,o=t?this.caches.before:this.caches.after}else a=n,o=this.caches.main;return o.sync(a,this.version,this.res.interner),ri(a,o,i,e,t,this.res.fonts,this.res.measurer)}on(e,t){let n=this.listeners[e];return n.add(t),()=>{n.delete(t)}}resize(){this.destroyed||(this.applySize(this.canvas.clientWidth,this.canvas.clientHeight,null),this.draw())}requestRender(){this.destroyed||(this.dirty=!0,this.busy||this.schedule())}toDataURL(e){let t=e!==void 0&&e>0?Math.min(e,8):this.dpr;if(!this.ctx)return this.canvas.toDataURL(`image/png`);if(t===this.dpr)return this.painter.rasterBudget=1/0,this.draw(),this.painter.rasterBudget=160,this.canvas.toDataURL(`image/png`);let n=document.createElement(`canvas`);n.width=Math.max(1,Math.round(this.width*t)),n.height=Math.max(1,Math.round(this.height*t));let r=n.getContext(`2d`,{alpha:!1});return r?(this.painter.rasterBudget=1/0,this.painter.paint({ctx:r,width:this.width,height:this.height,dpr:t},this.camera,this.frame,this.caches,this.version,this.theme,this.grid),this.painter.rasterBudget=160,this.dirty=!0,this.schedule(),n.toDataURL(`image/png`)):this.canvas.toDataURL(`image/png`)}destroy(){if(!this.destroyed){this.destroyed=!0,this.rafId&&this.cancelFrame(this.rafId),this.rafId=0,this.camera.stop();for(let e of this.cleanup.splice(0))e();for(let e of Object.values(this.listeners))e.clear();this.themeListeners.clear(),this.canvas.remove(),ii.delete(this)}}schedule(){this.rafId===0&&!this.destroyed&&(this.rafId=this.requestFrame(this.tick)||0)}tick=e=>{if(this.rafId=0,!this.destroyed){this.busy=!0;try{this.camera.tick(e),this.emitCamera(),this.hoverPending&&this.updateHover()}finally{this.busy=!1}this.dirty&&this.draw(),this.camera.animating&&this.schedule()}};draw(){if(this.destroyed)return;let e=this.ctx;if(!e||this.width<=0||this.height<=0)this.dirty=!1;else{this.busy=!0;try{this.autoFit(),this.dirty=!1;let t=this.now();this.painter.paint({ctx:e,width:this.width,height:this.height,dpr:this.dpr},this.camera,this.frame,this.caches,this.version,this.theme,this.grid);let n=this.now()-t;this.painter.stats.deferredLabels>0&&(this.dirty=!0),this.emitCamera(),this.emit(`frame`,{ms:n})}finally{this.busy=!1}this.dirty&&this.schedule()}}autoFit(){if(this.autoFitted||this.camera.touched||!this.frame)return;let e=this.contentBounds();e&&(this.autoFitted=!0,this.camera.jump(this.camera.targetFor(e,{},{width:this.width,height:this.height})))}emitCamera(){if(!this.cameraChanged)return;this.cameraChanged=!1;let e=this.camera.get(),t=this.emitted,n=this.viewportChanged;this.viewportChanged=!1;let r=this.camera.takeSource();(n||!t||t.x!==e.x||t.y!==e.y||t.k!==e.k)&&(this.emitted=e,this.emit(`camera`,{x:e.x,y:e.y,k:e.k,source:r}))}updateHover(){this.hoverPending=!1,this.pointer&&!this.dragging&&this.setHover(this.pick(this.pointer.x,this.pointer.y))}setHover(e){oi(e,this.hovered)||(this.hovered=e,this.dragging||(this.canvas.style.cursor=e?`pointer`:``),this.emit(`hover`,e))}emit(e,t){for(let n of this.listeners[e])n(t)}contentBounds(){let e=this.frame;if(!e)return null;let{interner:t}=this.res;return Jr(e)?(this.caches.before.sync(e.before,this.version,t),this.caches.after.sync(e.after,this.version,t),vn(this.caches.before.contentBounds(),this.caches.after.contentBounds())):(this.caches.main.sync(e,this.version,t),this.caches.main.contentBounds())}pixelRatio(){return A(this.fixedRatio??si(),.25,ai)}applySize(e,t,n){let r=this.pixelRatio(),i=n!==null&&this.fixedRatio===void 0&&si()<=ai,a=Math.max(1,i?n[0]:Math.round(e*r)),o=Math.max(1,i?n[1]:Math.round(t*r));this.canvas.width!==a&&(this.canvas.width=a),this.canvas.height!==o&&(this.canvas.height=o);let s=e!==this.width||t!==this.height||r!==this.dpr;this.width=Math.max(0,e),this.height=Math.max(0,t),this.dpr=r,s&&(this.cameraChanged=!0,this.viewportChanged=!0,this.camera.resized()),this.dirty=!0}observeSize(){if(typeof ResizeObserver!=`function`)return;let e=new ResizeObserver(e=>{if(this.destroyed)return;let t=e[e.length-1];if(!t)return;let n=t.contentBoxSize?.[0],r=n?n.inlineSize:t.contentRect.width,i=n?n.blockSize:t.contentRect.height,a=t.devicePixelContentBoxSize?.[0];this.applySize(r,i,a?[a.inlineSize,a.blockSize]:null),this.draw()});try{e.observe(this.canvas,{box:`device-pixel-content-box`})}catch{e.observe(this.canvas)}this.cleanup.push(()=>e.disconnect())}watchPixelRatio(){if(typeof window>`u`||typeof window.matchMedia!=`function`)return;let e=null,t=()=>{e?.removeEventListener(`change`,t),e=window.matchMedia(`(resolution: ${si()}dppx)`),e.addEventListener(`change`,t),!this.destroyed&&this.pixelRatio()!==this.dpr&&this.resize()};e=window.matchMedia(`(resolution: ${si()}dppx)`),e.addEventListener(`change`,t),this.cleanup.push(()=>e?.removeEventListener(`change`,t))}watchFonts(){let e=typeof document<`u`?document.fonts:void 0;if(!e||typeof e.addEventListener!=`function`)return;let t=()=>{this.res.fontsChanged(),this.requestRender()};e.addEventListener(`loadingdone`,t),this.cleanup.push(()=>e.removeEventListener(`loadingdone`,t))}};function li(e,t,n={}){if(!e||typeof e.appendChild!=`function`)throw new p(`invalid-input`,`createRenderer: container must be an HTMLElement`);return new ci(e,t,n)}var ui=8,di=12,fi=1.5,pi=.45,mi=2.5,hi=1,gi=3e3,_i=.5,vi=.12,yi=50,bi=.8;function xi(e,t){let n=e.family;return n===`neutral`?null:t.family[n]?.base??null}function Si(e,t){let n=e.x+e.width/2,r=e.y+e.height/2,i=Math.max(e.width/2,1),a=Math.max(e.height/2,1);return t&&Number.isFinite(t.x+t.y+t.width+t.height)&&t.width>0&&t.height>0&&(i=Math.max(i,n-t.x,t.x+t.width-n),a=Math.max(a,r-t.y,t.y+t.height-r)),{x:n-i,y:r-a,width:2*i,height:2*a}}var Ci=class{value=0;target=0;growing=!1;retarget(e){if(!(e>0)||!Number.isFinite(e))return!1;if(this.target=e,!(this.value>0)||e<=this.value){let t=e!==this.value;return this.value=e,this.growing=!1,t}return!this.growing&&this.value<e*bi&&(this.growing=!0),!1}step(e){return this.growing?(this.value+=(this.target-this.value)*(1-Math.exp(-Math.max(0,e)/yi)),Math.abs(this.target-this.value)<=this.target*.002&&(this.value=this.target,this.growing=!1),this.growing):!1}};function wi(e,t,n,r){let i=Math.max(1,t-2*r),a=Math.max(1,n-2*r),o=Math.max(e.width,1e-9),s=Math.max(e.height,1e-9),c=Math.min(i/o,a/s);return{s:c,ox:(t-o*c)/2-e.x*c,oy:(n-s*c)/2-e.y*c}}var Ti=class{renderer;canvas;ctx;factory;width;height;theme;dpr=1;layer=null;frame=null;collapsed=[];fit=null;content=null;scale=new Ci;rafId=0;lastTick=-1;cleanup=[];drag=null;destroyed=!1;constructor(e,t,n,r){this.renderer=t;let i=ii.get(t);if(!i)throw new p(`invalid-input`,`createMinimap: renderer is destroyed or was not created by createRenderer`);this.width=Math.max(16,Math.round(n.width??184)),this.height=Math.max(16,Math.round(n.height??128)),this.theme=i.theme(),this.factory=r.surfaceFactory??At;let a=document.createElement(`canvas`);a.setAttribute(`aria-hidden`,`true`);let o=a.style;o.display=`block`,o.width=`${this.width}px`,o.height=`${this.height}px`,o.borderRadius=`${di}px`,o.touchAction=`none`,o.cursor=`pointer`,o.setProperty(`-webkit-tap-highlight-color`,`transparent`),e.appendChild(a),this.canvas=a,this.ctx=r.context===void 0?a.getContext(`2d`):r.context,this.style(),this.resizeBuffer(i.pixelRatio()),this.cleanup.push(t.on(`camera`,()=>{this.refit(!1),this.redraw()})),this.cleanup.push(i.onTheme(e=>{this.theme=e,this.style(),this.rasterize(),this.redraw()}));let s=(e,t)=>{a.addEventListener(e,t),this.cleanup.push(()=>a.removeEventListener(e,t))};s(`pointerdown`,e=>this.onDown(e)),s(`pointermove`,e=>this.onMove(e)),s(`pointerup`,e=>this.onUp(e)),s(`pointercancel`,e=>this.onUp(e)),this.redraw()}update(e,t){if(this.destroyed)return;this.frame=e,this.collapsed=t??e.collapsed;let n=ii.get(this.renderer);n&&n.pixelRatio()!==this.dpr&&this.resizeBuffer(n.pixelRatio());let r=this.content===null;this.content=this.bounds(),this.refit(r),this.rasterize(),this.redraw()}transform(){return this.fit}destroy(){if(!this.destroyed){this.destroyed=!0,this.rafId&&ii.get(this.renderer)?.cancelFrame(this.rafId),this.rafId=0;for(let e of this.cleanup.splice(0))e();this.canvas.remove(),this.layer=null,this.frame=null}}style(){let e=this.canvas.style;e.background=this.theme.surface.overlay,e.boxShadow=this.theme.surface.shadow,e.setProperty(`backdrop-filter`,`blur(16px)`),e.setProperty(`-webkit-backdrop-filter`,`blur(16px)`)}refit(e){let t=this.content;if(!t){this.fit=null;return}if(this.drag&&!e)return;let n=wi(Si(t,this.renderer.camera.viewport()),this.width,this.height,ui).s;e&&(this.scale.value=0);let r=this.scale.retarget(n);this.applyScale(),r&&!e&&this.rasterize(),this.scale.growing&&this.schedule()}applyScale(){let e=this.content,t=this.scale.value;if(!e||!(t>0)){this.fit=null;return}let n=e.x+e.width/2,r=e.y+e.height/2;this.fit={s:t,ox:this.width/2-n*t,oy:this.height/2-r*t}}schedule(){if(this.rafId||this.destroyed)return;let e=ii.get(this.renderer);e&&(this.rafId=e.requestFrame(this.tick)||0)}tick=e=>{if(this.rafId=0,this.destroyed)return;let t=this.lastTick<0?16:Math.min(64,e-this.lastTick),n=this.scale.step(t);this.lastTick=n?e:-1,this.applyScale(),this.rasterize(),this.redraw(),n&&this.schedule()};resizeBuffer(e){this.dpr=e,this.canvas.width=Math.round(this.width*e),this.canvas.height=Math.round(this.height*e),this.layer=this.factory(this.canvas.width,this.canvas.height),this.rasterize()}bounds(){let e=this.frame;if(!e)return null;let t=1/0,n=1/0,r=-1/0,i=-1/0;for(let a of e.nodes)a.visible&&Number.isFinite(a.x+a.y)&&(a.x<t&&(t=a.x),a.y<n&&(n=a.y),a.x>r&&(r=a.x),a.y>i&&(i=a.y));for(let e of this.collapsed)Number.isFinite(e.x+e.y)&&(t=Math.min(t,e.x),n=Math.min(n,e.y),r=Math.max(r,e.x),i=Math.max(i,e.y));return t<=r?{x:t,y:n,width:r-t,height:i-n}:null}rasterize(){let e=this.layer?.ctx??null;e&&(e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,this.canvas.width,this.canvas.height),this.drawMarks(e))}drawMarks(e){let t=this.frame,n=this.fit;if(!t||!n)return;let r=this.theme,i=this.dpr,a=e=>(e*n.s+n.ox)*i,o=e=>(e*n.s+n.oy)*i,s=r.name===`light`?r.neutral.nodeStroke:r.neutral.node;if(t.edges.length>0&&t.edges.length<gi){e.globalAlpha=vi,e.strokeStyle=s,e.lineWidth=Math.max(1,_i*i),e.setLineDash([]),e.beginPath();for(let n of t.edges)n.visible&&Number.isFinite(n.x1+n.y1+n.x2+n.y2)&&(e.moveTo(a(n.x1),o(n.y1)),e.lineTo(a(n.x2),o(n.y2)));e.stroke()}let c=Math.max(1,Math.round(fi*i)),l=new Map;e.globalAlpha=pi,e.fillStyle=s,e.beginPath();for(let n=0;n<t.nodes.length;n++){let i=t.nodes[n];if(!i.visible||!Number.isFinite(i.x+i.y))continue;let s=xi(i,r);if(s!==null){let e=l.get(s);e||(e=[],l.set(s,e)),e.push(n)}else e.rect(Math.round(a(i.x)-c/2),Math.round(o(i.y)-c/2),c,c)}e.fill();let u=mi/2*i,d=u+hi*i;e.globalAlpha=.6,e.fillStyle=r.text.muted,e.beginPath();for(let t of this.collapsed)Number.isFinite(t.x+t.y)&&e.rect(Math.round(a(t.x)-u),Math.round(o(t.y)-u),Math.round(2*u),Math.round(2*u));if(e.fill(),l.size!==0){e.globalAlpha=1,e.fillStyle=r.canvas.background,e.beginPath();for(let n of l.values())for(let r of n){let n=t.nodes[r];e.moveTo(a(n.x)+d,o(n.y)),e.arc(a(n.x),o(n.y),d,0,k)}e.fill();for(let[n,r]of l){e.fillStyle=n,e.beginPath();for(let n of r){let r=t.nodes[n];e.moveTo(a(r.x)+u,o(r.y)),e.arc(a(r.x),o(r.y),u,0,k)}e.fill()}}}redraw(){let e=this.ctx;if(!e||this.destroyed)return;let t=ii.get(this.renderer)?.pixelRatio();t!==void 0&&t!==this.dpr&&this.resizeBuffer(t);let n=this.dpr,r=this.width,i=this.height;e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,this.canvas.width,this.canvas.height),e.save(),e.setTransform(n,0,0,n,0,0),e.beginPath(),Nt(e,0,0,r,i,di),e.clip(),this.layer?(e.setTransform(1,0,0,1,0,0),e.drawImage(this.layer.canvas,0,0,this.canvas.width,this.canvas.height),e.setTransform(n,0,0,n,0,0)):(e.setTransform(1,0,0,1,0,0),this.drawMarks(e),e.setTransform(n,0,0,n,0,0));let a=this.fit;if(a){let t=this.renderer.camera.viewport(),o=A(t.x*a.s+a.ox,-2,r+2),s=A(t.y*a.s+a.oy,-2,i+2),c=A((t.x+t.width)*a.s+a.ox,-2,r+2),l=A((t.y+t.height)*a.s+a.oy,-2,i+2);if(c-o>.5&&l-s>.5){let t=e=>Math.round(e*n)/n,r=t(o),i=t(s),a=Math.max(2,t(c)-r),u=Math.max(2,t(l)-i);e.globalAlpha=1,e.fillStyle=this.theme.accent.soft,e.fillRect(r,i,a,u),e.strokeStyle=this.theme.accent.base,e.lineWidth=1.25,e.setLineDash([]),e.beginPath(),e.rect(r+.625,i+.625,a-1.25,u-1.25),e.stroke()}}e.restore(),e.setTransform(n,0,0,n,0,0),e.globalAlpha=1,e.strokeStyle=this.theme.surface.border,e.lineWidth=1,e.beginPath(),Nt(e,.5,.5,r-1,i-1,11.5),e.stroke()}toWorld(e){let t=this.fit;if(!t)return null;let n=this.canvas.getBoundingClientRect(),r=e.clientX-n.left,i=e.clientY-n.top;return{x:(r-t.ox)/t.s,y:(i-t.oy)/t.s}}onDown(e){if(e.pointerType===`mouse`&&e.button!==0)return;let t=this.toWorld(e);if(!t)return;e.preventDefault();try{this.canvas.setPointerCapture(e.pointerId)}catch{}let n=this.renderer.camera,r=n.get(),i=n.viewport(),a=t.x>=i.x&&t.x<=i.x+i.width&&t.y>=i.y&&t.y<=i.y+i.height;this.drag=a?{id:e.pointerId,dx:r.x-t.x,dy:r.y-t.y}:{id:e.pointerId,dx:0,dy:0},a||this.move({x:t.x,y:t.y,k:r.k})}move(e){let t=ii.get(this.renderer);t?t.userSet(e):this.renderer.camera.set(e)}onMove(e){let t=this.drag;if(!t||t.id!==e.pointerId)return;let n=this.toWorld(e);n&&this.move({x:n.x+t.dx,y:n.y+t.dy,k:this.renderer.camera.get().k})}onUp(e){this.drag?.id===e.pointerId&&(this.drag=null,this.refit(!1),this.redraw())}};function Ei(e,t,n={},r={}){return new Ti(e,t,n,r)}var Di=240,Oi;function ki(e,t){return Oi===void 0&&(Oi=At(1,1)),new Ai(e,{fonts:new kr(t),measurer:new Mr(Oi?.ctx??null),atlas:null})}var Ai=class{frame;res;cache=new _n;labels=new Lr;badges=new Ln;grid=new yr;box=new Float64Array(4);view={k:1,ox:0,oy:0,width:0,height:0,dpr:1,x0:0,x1:0,y0:0,y1:0,strictX:!1,strictY:!1,stats:Kr()};constructor(e,t){this.frame=e,this.res=t,this.cache.sync(e,1,new un)}at(e){let t=Number.isFinite(e)&&e>0,n=t?e:1,r=this.box;r.fill(1/0,0,2).fill(-1/0,2,4);for(let e of this.frame.nodes){if(!e.visible)continue;let i=t?Math.max(e.r*n,1):e.r;r[0]=Math.min(r[0],e.x*n-i),r[1]=Math.min(r[1],e.y*n-i),r[2]=Math.max(r[2],e.x*n+i),r[3]=Math.max(r[3],e.y*n+i)}if(!(r[0]<=r[2]))return null;if(t){let e=this.view;e.k=n,e.x0=r[0]-Di,e.y0=r[1]-Di,e.x1=r[2]+Di,e.y1=r[3]+Di,e.width=e.x1-e.x0,e.height=e.y1-e.y0,this.grid.reset(e.x0,e.y0,e.width,e.height,Math.max(e.width,e.height)),this.badges.layout(this.frame,this.cache,e,this.res.fonts,this.res.measurer,this.grid),this.labels.collect(this.frame,this.cache,e,this.res),this.grid.extend(r),this.labels.extend(r)}return{x:r[0]/n,y:r[1]/n,width:(r[2]-r[0])/n,height:(r[3]-r[1])/n}}};function ji(e,t){return li(e,t)}function Mi(e,t,n){return Ei(e,t,n)}var Ni=1,Pi=.6,Fi=.68,Ii=.56,Li=.3,Ri=.5,zi=[[4352,4447],[8986,8987],[9001,9002],[9193,9196],[9200,9200],[9203,9203],[9725,9726],[9728,10175],[11035,11036],[11088,11088],[11093,11093],[11904,12350],[12353,13311],[13312,19903],[19968,40959],[40960,42191],[43360,43391],[44032,55203],[63744,64255],[65040,65049],[65072,65135],[65280,65376],[65504,65510],[94176,101119],[110592,111359],[126980,126980],[127183,127183],[127374,127374],[127377,127386],[127488,127743],[127744,128591],[128640,128767],[128992,129003],[129280,129535],[129648,129791],[131072,196605],[196608,262141]],Bi=/[\p{Mn}\p{Me}\p{Cf}\p{Cc}]/u,Vi=/\s/u,Hi=/\p{Nd}/u,Ui=/\p{Lu}/u;function Wi(e,t){let n=0,r=t.length-1;for(;n<=r;){let i=n+r>>>1,a=t[i];if(a===void 0)return!1;if(e<a[0])r=i-1;else if(e>a[1])n=i+1;else return!0}return!1}function Gi(e){return e===32||e===9?Li:e<32||e===127?0:e>=48&&e<=57?Pi:e>=65&&e<=90?Fi:Ii}function Ki(e){let t=e.codePointAt(0)??0;return t<128?Gi(t):Bi.test(e)||t>=127995&&t<=127999?0:t>=127462&&t<=127487?Ri:Wi(t,zi)?Ni:Vi.test(e)?Li:Hi.test(e)?Pi:Ui.test(e)?Fi:Ii}function qi(e,t){let n=0;for(let t=0;t<e.length;t++){let r=e.charCodeAt(t);if(r<128){n+=Gi(r);continue}let i=e.codePointAt(t)??r,a=String.fromCodePoint(i);i>65535&&t++,n+=Ki(a)}return n*t}var Ji=([e],[t])=>e<t?-1:+(e>t);function Yi(e){return[...e].sort(Ji)}function N(e,t){throw new p(`invalid-input`,`layoutFromJSON: ${e}`,t)}var Xi=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Zi=e=>typeof e==`number`&&Number.isFinite(e);function Qi(e,t){return Xi(e)&&[e.x,e.y,e.width,e.height].every(Zi)||N(`${t} must be a rectangle`,{where:t}),Object.freeze({x:e.x,y:e.y,width:e.width,height:e.height})}function $i(e,t){Xi(e)||N(`${t} must be an object`,{where:t});let n=new Map;for(let[r,i]of Yi(Object.entries(e)))Zi(i)||N(`${t}["${r}"] must be a finite number`,{where:t,id:r}),n.set(r,i);return n}function ea(e){let t=e;if(Xi(t)&&t.format===`kgdiff.layout`||N(`not a kgdiff.layout document`),t.version!==1)throw new p(`unsupported-version`,`Unsupported kgdiff.layout version ${String(t.version)}`,{version:t.version});let n=t.strategy;n!==`union`&&n!==`anchored`&&N(`strategy must be union or anchored`);let r=t.scope;r!==`all`&&r!==`changes`&&N(`scope must be all or changes`);let i=t.iterations;(!Zi(i)||i<0)&&N(`iterations must be a number ≥ 0`),Xi(t.positions)||N(`positions must be an object`);let a=new Map;for(let[e,n]of Yi(Object.entries(t.positions)))Array.isArray(n)&&n.length===2&&Zi(n[0])&&Zi(n[1])||N(`positions["${e}"] must be [x, y]`,{id:e}),a.set(e,Object.freeze({x:n[0],y:n[1]}));let o=$i(t.radii,`radii`),s=$i(t.hidden,`hidden`);Array.isArray(t.components)||N(`components must be an array`);let c=t.components.map((e,t)=>(Xi(e)&&Array.isArray(e.nodes)&&e.nodes.every(e=>typeof e==`string`)||N(`components[${t}] must have a nodes array`,{index:t}),Object.freeze({nodes:Object.freeze([...e.nodes]),bounds:Qi(e.bounds,`components[${t}].bounds`)})));return Object.freeze({positions:a,radii:o,bounds:Qi(t.bounds,`bounds`),scope:r,hidden:s,components:Object.freeze(c),stats:Object.freeze({strategy:n,iterations:i,nodes:a.size,ms:0})})}function ta(e){return Math.min(14,Math.max(4,4+2.2*Math.sqrt(Math.max(0,e))))}function na(e,t){return qi(e,t)}function ra(e){return ea(e)}var P={neutralEdge:1,changedEdge:1.75,selectedEdge:2.5,node:1.25,hoveredNode:2,ring:1.5,ringGap:3.5,glyph:1.5,suggestion:1.25,pivot:5},ia=Object.freeze([3,2.5]),aa=Object.freeze([4,3]),oa=Object.freeze([1,3]),sa={glowScale:2.6,glowAlpha:.32,ringAlpha:.35,ringOffset:5,ringWidth:2},F={size:12,oldSize:11,edgeSize:10.5,offset:5,secondaryGap:14,lineHeight:1.3},I={changedLabel:.35,neutralLabel:.5,importantNeutralLabel:.35,importantThreshold:.7,smallScene:300,smallChangedLabel:.2,smallNeutralLabel:.25,edgeLabel:1.1,badge:1.2,arrow:1.2},ca=.18,L={selectedContext:.7,selectedRest:.18,replayContext:.7,replayRest:.3,filtered:.4,focusContext:.55,ghostEdge:.45,collapsedEdge:.5},la={spotlightEnd:.18,settleStart:.82},ua={pace:1100,chapterThreshold:40,gap:160,maxStagger:.35},da=Object.freeze({x:0,y:0,width:0,height:0}),fa=class{minX=1/0;minY=1/0;maxX=-1/0;maxY=-1/0;get empty(){return this.minX>this.maxX}add(e,t,n,r){return e<this.minX&&(this.minX=e),t<this.minY&&(this.minY=t),n>this.maxX&&(this.maxX=n),r>this.maxY&&(this.maxY=r),this}addRect(e){return this.add(e.x,e.y,e.x+e.width,e.y+e.height)}rect(e=da){return this.empty?e:{x:this.minX,y:this.minY,width:this.maxX-this.minX,height:this.maxY-this.minY}}};function pa(e,t,n,r,i,a){let o=Math.max(r,na(i,F.size)/2,a===void 0?0:na(a,F.oldSize)/2),s=r+F.offset+F.size*F.lineHeight+(a===void 0?0:F.secondaryGap);e.add(t-o,n-r,t+o,n+s)}function ma(e){return{x:e.x+e.width/2,y:e.y+e.height/2}}function ha(e,t){return t?e===0?0:Math.ceil(e/2)*ca*(e%2==1?1:-1):(Math.floor(e/2)+1)*ca*(e%2==0?1:-1)}function ga(e){let t=new Float64Array(e.length),n=new Map;for(let t=0;t<e.length;t++){let r=e[t],i=r.a<=r.b?`${r.a},${r.b}`:`${r.b},${r.a}`,a=n.get(i);a===void 0?n.set(i,[t]):a.push(t)}for(let r of n.values()){if(r.length<2)continue;let n=r.filter(t=>e[t]?.ghost!==!0),i=r.filter(t=>e[t]?.ghost===!0),a=(n.length>0?n.length:i.length)%2==1,o=[...n,...i];for(let n=0;n<o.length;n++){let r=o[n],i=e[r],s=ha(n,a);t[r]=i.a<=i.b?s:-s}}return t}function _a(e){let t=[];for(let n of e)t.push({a:n.s,b:n.t});let n=new Int32Array(e.length).fill(-1);for(let r=0;r<e.length;r++){let i=e[r];(i.sb!==i.s||i.tb!==i.t)&&(n[r]=t.length,t.push({a:i.sb,b:i.tb,ghost:!0}))}let r=ga(t),i=r.slice(0,e.length),a=new Float64Array(e.length);for(let t=0;t<e.length;t++){let e=n[t];e>=0&&(a[t]=r[e])}return{primary:i,ghost:a}}function va(e){switch(e){case`add`:return`added`;case`remove`:return`removed`;case`merge`:case`split`:return`identity`;case`relations`:return`structure`;case`modify`:return`content`;default:return R(e)}}function R(e){throw Error(`Unexpected value ${String(e)}`)}var ya=(e,t)=>e.some(e=>e.kind===t);function ba(e){let t=e.facets;if(ya(t,`mergedInto`))return`merge-source`;if(ya(t,`mergeTarget`))return`merge-target`;if(ya(t,`splitInto`))return`split-source`;if(ya(t,`splitFrom`))return`split-target`;switch(e.status){case`added`:return`added`;case`removed`:return`removed`;case`unchanged`:return`unchanged`;case`modified`:return t.some(e=>e.kind===`deprecate`&&e.deprecated)?`deprecated`:`modified`;default:return R(e.status)}}function xa(e){let t=`neutral`;for(let n of e)switch(n.kind){case`rekey`:return`identity`;case`move`:t=`structure`;break;case`mergedInto`:case`mergeTarget`:case`splitFrom`:case`splitInto`:break;default:t===`neutral`&&(t=`content`)}return t}function Sa(e,t){switch(t){case`merge-source`:case`merge-target`:case`split-source`:case`split-target`:return`identity`;case`added`:return`added`;case`removed`:return`removed`;case`unchanged`:return`neutral`;case`deprecated`:return`content`;case`modified`:{let t=xa(e.facets);return t===`neutral`?`content`:t}default:return R(t)}}function Ca(e,t,n){let r=e.before!==void 0||e.beforeId!==void 0;return(t===`merge-target`||t===`split-target`)&&r?xa(e.facets):n}function wa(e){for(let t of e.facets){if(t.kind===`collapsed`)return`collapsed`;if(t.kind===`retarget`)return t.cause===`merge`||t.cause===`split`?`carried`:`retarget`}return e.status}function Ta(e,t){switch(t){case`added`:return`added`;case`removed`:return`removed`;case`unchanged`:return`neutral`;case`collapsed`:case`carried`:return`identity`;case`retarget`:return`structure`;case`modified`:return e.facets.some(e=>e.kind===`predicate`)?`structure`:`content`;default:return R(t)}}function Ea(e){let t=0,n=0,r=0;for(let i of e)i.before===void 0?t++:i.after===void 0?n++:r++;let i=[];return t>0&&i.push(`+${t}`),n>0&&i.push(`−${n}`),r>0&&i.push(`~${r}`),i.length>0?i.join(` `):void 0}var Da=e=>`⊕ ${e}`;function Oa(e,t){if(t===`merge-target`){let t=e.facets.find(e=>e.kind===`mergeTarget`);if(t!==void 0&&t.kind===`mergeTarget`&&t.sources.length>0)return Da(t.sources.length)}let n=e.facets.find(e=>e.kind===`attrs`);return n!==void 0&&n.kind===`attrs`?Ea(n.changes):void 0}function ka(e){let t=e.facets.find(e=>e.kind===`rename`);return t!==void 0&&t.kind===`rename`?t.from:void 0}function Aa(e){for(let t of e.facets){if(t.kind===`label`)return t.from;if(t.kind===`predicate`){let n=e.before?.label;return n!==void 0&&n!==e.label?n:t.from}}}var ja=(e,t,n)=>Math.min(n,Math.max(t,e));function Ma(e,t){throw new p(`invalid-input`,`Unsupported color ${JSON.stringify(e)}: ${t}. Use #rgb, #rgba, #rrggbb, #rrggbbaa, rgb() or rgba().`,{color:e})}function Na(e,t){/^[0-9a-f]+$/i.test(t)||Ma(e,`not a hex color`);let n=t.length===3||t.length===4;!n&&t.length!==6&&t.length!==8&&Ma(e,`hex colors have 3, 4, 6 or 8 digits`);let r=e=>n?Number.parseInt(t.charAt(e)+t.charAt(e),16):Number.parseInt(t.slice(2*e,2*e+2),16),i=t.length===4||t.length===8;return{r:r(0),g:r(1),b:r(2),a:i?r(3)/255:1}}function Pa(e,t,n){let r=t.endsWith(`%`),i=Number(r?t.slice(0,-1):t);return t!==``&&Number.isFinite(i)||Ma(e,`bad component "${t}"`),ja(r?i/100*n:i,0,n)}function Fa(e,t){let[n=``,r,i]=t.split(`/`);i!==void 0&&Ma(e,`more than one "/"`);let a=n.split(/[\s,]+/).map(e=>e.trim()).filter(e=>e!==``);r!==void 0&&a.push(r.trim()),a.length!==3&&a.length!==4&&Ma(e,`expected 3 or 4 components`);let[o=``,s=``,c=``,l]=a;return{r:Pa(e,o,255),g:Pa(e,s,255),b:Pa(e,c,255),a:l===void 0?1:Pa(e,l,1)}}function Ia(e){let t=e.trim().toLowerCase();if(t.startsWith(`#`))return Na(e,t.slice(1));if(t===`transparent`)return{r:0,g:0,b:0,a:0};let n=/^rgba?\((.*)\)$/.exec(t);return n?Fa(e,n[1]??``):Ma(e,`unknown syntax`)}var La=e=>Math.round(ja(e,0,255)).toString(16).padStart(2,`0`);function Ra(e){return e.a>=1?`#${La(e.r)}${La(e.g)}${La(e.b)}`.toUpperCase():`rgba(${Math.round(ja(e.r,0,255))}, ${Math.round(ja(e.g,0,255))}, ${Math.round(ja(e.b,0,255))}, ${Math.round(ja(e.a,0,1)*1e3)/1e3})`}function za(e,t,n){let r=ja(n,0,1),i=e.a+(t.a-e.a)*r;if(i===0)return{r:0,g:0,b:0,a:0};let a=(n,a)=>(n*e.a*(1-r)+a*t.a*r)/i;return{r:a(e.r,t.r),g:a(e.g,t.g),b:a(e.b,t.b),a:i}}function Ba(e,t){return Ra({...Ia(e),a:ja(t,0,1)})}function Va(e,t){let n=Ia(e),r=.2126*n.r+.7152*n.g+.0722*n.b,i=ja(t,0,1);return Ra({r:n.r+(r-n.r)*i,g:n.g+(r-n.g)*i,b:n.b+(r-n.b)*i,a:n.a})}function Ha(e,t,n=33){let r=Ia(e),i=Ia(t),a=[];for(let e=0;e<n;e++)a.push(Ra(za(r,i,e/(n-1))));return a[0]=e,a[n-1]=t,Object.freeze(a)}function Ua(e,t){let n=e.length-1;return e[t<=0?0:t>=1?n:Math.round(t*n)]}var Wa=class{cache=new Map;get(e,t){let n=`${e}\u0000${t}`,r=this.cache.get(n);return r===void 0&&(r=Ha(e,t),this.cache.set(n,r)),r}},Ga=`Inter, "SF Pro Text", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", system-ui, sans-serif`,Ka=`"JetBrains Mono", "SF Mono", ui-monospace, Menlo, Consolas, monospace`,qa={fast:120,base:220,slow:420,easing:[.2,0,0,1]},Ja={family:Ga,mono:Ka,size:12,weightRegular:400,weightStrong:600},Ya={added:{base:`#34D399`,strong:`#6EE7B7`,soft:`rgba(52,211,153,0.16)`,text:`#6EE7B7`},removed:{base:`#F87171`,strong:`#FCA5A5`,soft:`rgba(248,113,113,0.15)`,text:`#FCA5A5`},content:{base:`#FBBF24`,strong:`#FCD34D`,soft:`rgba(251,191,36,0.15)`,text:`#FCD34D`},structure:{base:`#38BDF8`,strong:`#7DD3FC`,soft:`rgba(56,189,248,0.15)`,text:`#7DD3FC`},identity:{base:`#A78BFA`,strong:`#C4B5FD`,soft:`rgba(167,139,250,0.17)`,text:`#C4B5FD`}},Xa={added:{base:`#16A34A`,strong:`#15803D`,soft:`rgba(22,163,74,0.11)`,text:`#147A3A`},removed:{base:`#DC2626`,strong:`#B91C1C`,soft:`rgba(220,38,38,0.09)`,text:`#B91C1C`},content:{base:`#D87506`,strong:`#B45309`,soft:`rgba(217,119,6,0.11)`,text:`#92400E`},structure:{base:`#0284C7`,strong:`#0369A1`,soft:`rgba(2,132,199,0.10)`,text:`#075985`},identity:{base:`#7C3AED`,strong:`#6D28D9`,soft:`rgba(124,58,237,0.10)`,text:`#5B21B6`}};function Za(e,t){let n=n=>{let[r,i,a]=e[n];return{base:r,strong:a,soft:Ba(r,t[n]),text:i}};return{added:n(`added`),removed:n(`removed`),content:n(`content`),structure:n(`structure`),identity:n(`identity`)}}var Qa={added:.16,removed:.15,content:.15,structure:.15,identity:.17},$a={added:.11,removed:.09,content:.11,structure:.1,identity:.1},eo=Za({added:[`#56B4E9`,`#8FD0F5`,`#8FD0F5`],removed:[`#E69F00`,`#F5C45C`,`#F5C45C`],content:[`#F0E442`,`#F5EC85`,`#F5EC85`],structure:[`#009E73`,`#3CC79E`,`#3CC79E`],identity:[`#CC79A7`,`#E0A6C6`,`#E0A6C6`]},Qa),to=Za({added:[`#0072B2`,`#005A8C`,`#00669F`],removed:[`#D55E00`,`#A84A00`,`#BF5400`],content:[`#9A8700`,`#6E6100`,`#847400`],structure:[`#00805C`,`#006248`,`#007152`],identity:[`#A3477F`,`#83335F`,`#933D6F`]},$a);function no(e){return{name:`dark`,palette:e,canvas:{background:`#0B0E14`,grid:`rgba(148, 163, 184, 0.07)`},surface:{panel:`#11151D`,raised:`#171C26`,overlay:`rgba(17, 21, 29, 0.78)`,border:`rgba(255,255,255,0.07)`,borderStrong:`rgba(255,255,255,0.13)`,controlBorder:`#5E687C`,shadow:`0 8px 32px rgba(0,0,0,0.45), 0 1px 0 rgba(255,255,255,0.04) inset`},text:{primary:`#E7EBF3`,secondary:`#A6AFBF`,muted:`#7A8495`},accent:{base:`#7C9CFF`,strong:`#A3BAFF`,soft:`rgba(124,156,255,0.16)`,text:`#A9BEFF`},neutral:{node:`#4B5568`,nodeStroke:`#5E687C`,edge:`#323A4A`,label:`#8B94A6`},family:e===`colorblind`?eo:Ya,glow:!0,font:Ja,motion:qa}}function ro(e){return{name:`light`,palette:e,canvas:{background:`#F7F8FA`,grid:`rgba(15, 23, 42, 0.07)`},surface:{panel:`#FFFFFF`,raised:`#FFFFFF`,overlay:`rgba(255, 255, 255, 0.82)`,border:`rgba(15,23,42,0.08)`,borderStrong:`rgba(15,23,42,0.15)`,controlBorder:`#8690A3`,shadow:`0 8px 28px rgba(15,23,42,0.10), 0 1px 2px rgba(15,23,42,0.06)`},text:{primary:`#0F172A`,secondary:`#475569`,muted:`#687284`},accent:{base:`#3B5BDB`,strong:`#2F49B5`,soft:`rgba(59,91,219,0.10)`,text:`#2F49B5`},neutral:{node:`#A7B0BF`,nodeStroke:`#8C96A8`,edge:`#D3D9E2`,label:`#5F6B7D`},family:e===`colorblind`?to:Xa,glow:!1,font:Ja,motion:qa}}function io(e){if(typeof e==`object`&&e&&!Object.isFrozen(e)){Object.freeze(e);for(let t of Object.values(e))io(t)}return e}var ao=new Map,oo=[`dark`,`light`],so=[`default`,`colorblind`];function co(e,t=`default`){if(!oo.includes(e))throw new p(`invalid-input`,`Unknown theme "${String(e)}" (expected "dark" or "light").`);if(!so.includes(t))throw new p(`invalid-input`,`Unknown palette "${String(t)}" (expected "default" or "colorblind").`);let n=`${e}/${t}`,r=ao.get(n);return r===void 0&&(r=io(e===`dark`?no(t):ro(t)),ao.set(n,r)),r}var lo=[`remove`,`restructure`,`modify`,`add`],uo=(e,t,n,r)=>e<n||e===n&&t<r,fo=class{items;members;minX;minY;cw;ch;gw;gh;cellStart;cellItems;cellAlive;alive;remaining;constructor(e,t){this.items=e,this.members=t;let n=1/0,r=1/0,i=-1/0,a=-1/0;for(let o of t){let t=e[o];n=Math.min(n,t.x),r=Math.min(r,t.y),i=Math.max(i,t.x),a=Math.max(a,t.y)}let o=Math.max(1,Math.ceil(Math.sqrt(t.length)));this.gw=o,this.gh=o,this.minX=n,this.minY=r;let s=(i-n)/o,c=(a-r)/o;this.cw=s>0&&Number.isFinite(s)?s:1,this.ch=c>0&&Number.isFinite(c)?c:1;let l=this.gw*this.gh,u=new Int32Array(l+1),d=new Int32Array(t.length);for(let n=0;n<t.length;n++){let r=e[t[n]],i=this.cellIndex(r.x,r.y);d[n]=i,u[i+1]=u[i+1]+1}for(let e=0;e<l;e++)u[e+1]=u[e+1]+u[e];this.cellStart=u;let f=u.slice(0,l);this.cellItems=new Int32Array(t.length);for(let e=0;e<t.length;e++){let t=d[e];this.cellItems[f[t]]=e,f[t]=f[t]+1}this.cellAlive=new Int32Array(l),this.alive=new Uint8Array(t.length),this.remaining=0}cellX(e){let t=Math.floor((e-this.minX)/this.cw);return t>=0?t>=this.gw?this.gw-1:t:0}cellY(e){let t=Math.floor((e-this.minY)/this.ch);return t>=0?t>=this.gh?this.gh-1:t:0}cellIndex(e,t){return this.cellY(t)*this.gw+this.cellX(e)}get size(){return this.remaining}activate(e){if(this.alive[e]===1)return;this.alive[e]=1,this.remaining++;let t=this.items[this.members[e]],n=this.cellIndex(t.x,t.y);this.cellAlive[n]=this.cellAlive[n]+1}take(e){if(this.alive[e]===0)return;this.alive[e]=0,this.remaining--;let t=this.items[this.members[e]],n=this.cellIndex(t.x,t.y);this.cellAlive[n]=this.cellAlive[n]-1}largest(){let e=-1;for(let t=0;t<this.members.length;t++){if(this.alive[t]===0)continue;let n=this.items[this.members[t]],r=e<0?void 0:this.items[this.members[e]];(r===void 0||n.size>r.size||n.size===r.size&&n.order<r.order)&&(e=t)}return e}nearest(e,t){if(this.remaining===0)return-1;let n=this.cellX(e),r=this.cellY(t),i=Math.min(this.cw,this.ch),a=-1,o=1/0,s=1/0,c=Math.max(this.gw,this.gh);for(let l=0;l<=c;l++){let c=n-l,u=n+l,d=r-l,f=r+l;for(let n=d;n<=f;n++){if(n<0||n>=this.gh)continue;let r=n===d||n===f;for(let i=c;i<=u;i+=r?1:u-c||1){if(i<0||i>=this.gw)continue;let r=n*this.gw+i;if(this.cellAlive[r]!==0)for(let n=this.cellStart[r];n<this.cellStart[r+1];n++){let r=this.cellItems[n];if(this.alive[r]===0)continue;let i=this.items[this.members[r]],c=i.x-e,l=i.y-t,u=c*c+l*l;uo(u,i.order,o,s)&&(a=r,o=u,s=i.order)}}}let p=l*i;if(a>=0&&o<p*p)break}return a}};function po(e){let t=e.length,n=e=>lo.indexOf(e),r=lo.map(()=>[]);for(let i=0;i<t;i++)r[n(e[i].phase)]?.push(i);for(let t of r)t.sort((t,n)=>e[t].order-e[n].order);let i=r.map(t=>new fo(e,t)),a=new Int32Array(t);for(let e of r)for(let t=0;t<e.length;t++)a[e[t]]=t;let o=new Int32Array(t),s=Array.from({length:t},()=>[]);for(let n=0;n<t;n++)for(let r of new Set(e[n].requires))r===n||r<0||r>=t||(o[n]=o[n]+1,s[r].push(n));let c=new Uint8Array(t),l=t=>{i[n(e[t].phase)]?.activate(a[t])};for(let e=0;e<t;e++)o[e]===0&&l(e);let u=[],d=null;for(;u.length<t;){let a=i.findIndex(e=>e.size>0);if(a<0){let r=-1;for(let n=0;n<t;n++)c[n]!==1&&(r<0||e[n].order<e[r].order)&&(r=n);o[r]=0,l(r),a=n(e[r].phase)}let f=i[a],p=d===null?f.largest():f.nearest(d.x,d.y);f.take(p);let m=r[a][p];c[m]=1,u.push(m),d=e[m];for(let e of s[m])c[e]!==1&&(o[e]=o[e]-1,o[e]===0&&l(e))}return u}function mo(e){let t=lo.filter(t=>e.some(e=>e.phase===t)),n=new Int32Array(e.length);for(let r=0;r<e.length;r++){let i=e[r],a=t.indexOf(i.phase);for(let e of i.requires)e>=0&&e<r&&(a=Math.max(a,n[e]));n[r]=a}return n}var ho={add:.85,remove:.85,modify:.8,relations:.95,merge:1.3,split:1.3},go=e=>Math.round(e*1e3)/1e3;function _o(e,t,n){return go(n*ho[e]*Math.min(2.2,Math.max(1,Math.sqrt(t))))}function vo(e,t){return go(t*Math.min(4,Math.max(1.2,1.2+Math.log2(Math.max(1,e)))))}function yo(e,t){let n=new fa;for(let r of t)n.addRect(e[r].bounds);return n.rect()}var bo=(e,t)=>e>t?`chapters`:`hunks`;function xo(e,t,n){let r=bo(e.length,n),i=[],a=[],o=r===`chapters`?mo(e):null,s=lo.filter(t=>e.some(e=>e.phase===t)),c=[];for(let t=0;t<e.length;t++){let n=e[t],r=o===null?lo.indexOf(n.phase):o[t],i=c[c.length-1];if(i!==void 0&&i.key===r)i.members.push(t);else{let e=o===null?n.phase:s[r]??n.phase;c.push({key:r,phase:e,members:[t]})}}let l=0;for(let n=0;n<c.length;n++){let{phase:o,members:s}=c[n];n>0&&(l=go(l+ua.gap));let u=l;if(r===`hunks`)for(let r=0;r<s.length;r++){r>0&&(l=go(l+ua.gap));let a=e[s[r]],o=go(l+_o(a.kind,a.size,t));i.push({hunk:s[r],start:l,end:o,chapter:n}),l=o}else{let e=s.length,r=vo(e,t),a=ua.maxStagger*r*(e-1)/e,o=e>1?a/(e-1):0,c=r-a;for(let t=0;t<e;t++){let e=go(u+t*o);i.push({hunk:s[t],start:e,end:go(e+c),chapter:n})}l=go(u+r)}a.push({phase:o,start:u,end:l,hunks:s,bounds:yo(e,s)})}return{duration:l,windows:i,chapters:a,mode:r}}function So(e){let t=e.theme;return t!==void 0&&typeof t==`object`?t:co(t??`dark`,e.palette??`default`)}function Co(e){let t=e.replay?.pace??ua.pace,n=e.replay?.chapterThreshold??ua.chapterThreshold;if(!(Number.isFinite(t)&&t>0))throw new p(`invalid-input`,`replay.pace must be a positive number of ms, got ${t}.`);if(!(n>=0))throw new p(`invalid-input`,`replay.chapterThreshold must be ≥ 0, got ${n}.`);return{pace:t,chapterThreshold:n}}function wo(e){let t=e.length,n=new Float64Array(t);for(let r=0;r<t;r++){let t=e[r].degree;n[r]=Math.max(t.before,t.after)}let r=Array.from({length:t},(e,t)=>t).sort((e,t)=>n[e]-n[t]),i=e=>r[e],a=new Float64Array(t);for(let e=0;e<t;){let r=e;for(;r<t&&n[i(r)]===n[i(e)];)r++;let o=t>1?e/(t-1):0;for(let t=e;t<r;t++)a[i(t)]=o;e=r}let o=new Float64Array(t);for(let n=0;n<t;n++){let t=e[n].status!==`unchanged`,r=a[n];o[n]=t?.8+.2*r:.75*r}return o}function To(e,t){for(let n of e.facets){if(n.kind===`mergedInto`&&t===`mergedInto`)return n.target;if(n.kind===`splitFrom`&&t===`splitFrom`)return n.source}}function Eo(e){let t=e.predicateLabels;return typeof t==`object`&&t&&!Array.isArray(t)?t:null}function Do(e){let t=[Eo(e.after.meta),Eo(e.before.meta)],n=e=>{if(e!==void 0)for(let n of t){if(n===null||!Object.hasOwn(n,e))continue;let t=n[e];if(typeof t==`string`&&t!==``)return t}};return e=>{if(e.facets.some(e=>e.kind===`label`))return{label:e.label,labelBefore:Aa(e)};let t=e.facets.find(e=>e.kind===`predicate`),r=t?.kind===`predicate`?n(e.predicateBefore??t.from)??Aa(e):void 0;return{label:n(e.predicate)??e.label,labelBefore:r}}}function Oo(e,t){if(e.kind!==`modify`)return va(e.kind);let n=t.get(e.anchor);if(n===void 0)return`content`;let r=Sa(n,ba(n));return r===`neutral`?`content`:r}function ko(e,t,n={}){let r=So(n),i=n.locale??`en`,{pace:a,chapterThreshold:o}=Co(n),s=[],c=new Map,l=new Map;for(let n of e.nodes){l.set(n.id,n);let e=t.positions.get(n.id);e!==void 0&&Number.isFinite(e.x)&&Number.isFinite(e.y)&&(c.set(n.id,s.length),s.push(n))}let u=new Map,d=new Map;for(let e=0;e<s.length;e++){let t=s[e];t.afterId!==void 0&&u.set(t.afterId,e),t.beforeId!==void 0&&d.set(t.beforeId,e)}let f=[],p=[];for(let t of e.edges){let e=c.get(t.source),n=c.get(t.target);if(e===void 0||n===void 0)continue;let r=t.sourceBefore===void 0?e:c.get(t.sourceBefore)??e,i=t.targetBefore===void 0?n:c.get(t.targetBefore)??n;f.push(t),p.push({s:e,t:n,sb:r,tb:i})}let m=new Float64Array(s.length),h=new Float64Array(s.length),g=new Float64Array(s.length);for(let e=0;e<s.length;e++){let n=s[e],r=t.positions.get(n.id);m[e]=r.x,h[e]=r.y;let i=t.radii.get(n.id);g[e]=i!==void 0&&Number.isFinite(i)&&i>0?i:ta(Math.max(n.degree.before,n.degree.after))}let _=new Map;for(let t=0;t<e.hunks.length;t++)_.set(e.hunks[t].id,t);let v=e=>{let t=[];for(let n of e.requires??[]){let e=_.get(n);e!==void 0&&t.push(e)}return t},y=e.hunks.map(e=>{let t=0,n=0,r=c.get(e.anchor);if(r!==void 0)t=m[r],n=h[r];else{let r=0;for(let i of[...e.nodes,...e.context]){let e=c.get(i);e!==void 0&&(t+=m[e],n+=h[e],r++)}r>0&&(t/=r,n/=r)}return{phase:e.phase,size:e.nodes.length+e.edges.length,order:e.order,x:t,y:n,requires:v(e)}}),b=po(y);if(bo(b.length,o)===`chapters`){let e=new Int32Array(b.length);for(let t=0;t<b.length;t++)e[b[t]]=t;let t=mo(b.map(t=>({phase:y[t].phase,requires:y[t].requires.map(t=>e[t])})));b=b.map((e,n)=>({h:e,k:n,c:t[n]})).sort((e,t)=>e.c-t.c||e.k-t.k).map(e=>e.h)}let x=new Map;for(let t=0;t<b.length;t++)x.set(e.hunks[b[t]].id,t);let S=e=>e===void 0?-1:x.get(e)??-1,ee=wo(s),te=s.map((e,n)=>{let r=ba(e),i=ka(e),a=Oa(e,r),o;if(r===`merge-source`){let t=To(e,`mergedInto`);o=t===void 0?void 0:c.get(t)}else if(r===`split-target`){let t=To(e,`splitFrom`);o=t===void 0?void 0:c.get(t)}else if(r===`deprecated`){for(let t of e.after?.replacedBy??[])if(o=u.get(t)??c.get(t),o!==void 0)break}o===n&&(o=void 0);let s=Sa(e,r);return{index:n,id:e.id,x:m[n],y:h[n],r:g[n],status:e.status,role:r,family:s,familyBefore:Ca(e,r,s),label:e.label,...i!==void 0&&i!==e.label?{labelBefore:i}:{},...a===void 0?{}:{badge:a},...o===void 0?{}:{flow:o},hunk:S(e.hunk),presentBefore:e.before!==void 0||e.beforeId!==void 0,presentAfter:e.after!==void 0||e.afterId!==void 0,implicit:(e.after??e.before)?.implicit??!1,degree:Math.max(e.degree.before,e.degree.after),hidden:t.hidden.get(e.id)??0,importance:ee[n]}}),ne=_a(p),re=Do(e),ie=f.map((e,t)=>{let n=wa(e),r=p[t],{label:i,labelBefore:a}=re(e);return{index:t,id:e.id,s:r.s,t:r.t,sb:r.sb,tb:r.tb,status:e.status,role:n,family:Ta(e,n),label:i,...a!==void 0&&a!==i?{labelBefore:a}:{},curvature:ne.primary[t],hunk:S(e.hunk),presentBefore:e.before!==void 0||e.beforeKey!==void 0,presentAfter:e.after!==void 0||e.afterKey!==void 0,hierarchical:e.hierarchical}}),ae=new fa;for(let e of te)pa(ae,e.x,e.y,e.r,e.label,e.labelBefore);let oe=ae.rect(),se=ma(oe),ce=(e,t)=>{let n=[];for(let r of e){let e=t.get(r);e!==void 0&&n.push(e)}return n},le=new Map;for(let e of ie)le.set(e.id,e.index);let ue=b.map((t,n)=>{let r=e.hunks[t],a=ce(r.nodes,c),o=ce(r.context,c),s=new fa;for(let e of[...a,...o]){let t=te[e];pa(s,t.x,t.y,t.r,t.label,t.labelBefore)}let u=kt(r,e,i);return{index:n,id:r.id,kind:r.kind,phase:r.phase,family:Oo(r,l),title:u.title,subtitle:u.subtitle,anchor:c.get(r.anchor)??-1,nodes:a,edges:ce(r.edges,le),context:o,bounds:s.rect({x:se.x,y:se.y,width:0,height:0})}}),C=[];for(let t of e.suggestions){let e=d.get(t.before),n=u.get(t.after);e!==void 0&&n!==void 0&&e!==n&&C.push({before:e,after:n,score:t.score})}let de=new Int32Array(b.length);for(let e=0;e<b.length;e++)de[b[e]]=e;let fe=xo(ue.map((e,t)=>{let n=y[b[t]];return{kind:e.kind,phase:e.phase,size:n.size,bounds:e.bounds,requires:n.requires.map(e=>de[e])}}),a,o),pe=new Map;for(let e of ue)pe.set(e.id,e.index);return{nodes:te,edges:ie,hunks:ue,suggestions:C,bounds:oe,stats:e.stats,timeline:fe,theme:r,locale:i,meta:{before:e.before.meta,after:e.after.meta},nodeIndex:c,edgeIndex:le,hunkIndex:pe}}var Ao=new WeakMap;function jo(e){let t=Ao.get(e);if(t!==void 0)return t;let n=e.nodes.length,r=new Int32Array(n+1),i=[],a=(e,t)=>{e!==t&&(i.push(e,t),r[e+1]=r[e+1]+1,r[t+1]=r[t+1]+1)};for(let t of e.edges)a(t.s,t.t),(t.sb!==t.s||t.tb!==t.t)&&a(t.sb,t.tb);for(let e=0;e<n;e++)r[e+1]=r[e+1]+r[e];let o=r.slice(0,n),s=new Int32Array(i.length);for(let e=0;e<i.length;e+=2){let t=i[e],n=i[e+1];s[o[t]]=n,o[t]=o[t]+1,s[o[n]]=t,o[n]=o[n]+1}for(let e=0;e<n;e++)s.subarray(r[e],r[e+1]).sort();let c={start:r,list:s};return Ao.set(e,c),c}var Mo=new Map;function No(e,t,n){let r=Mo.get(n);r===void 0&&(r=new Intl.NumberFormat(n),Mo.set(n,r));let i=r.format(e);return n===`zh-CN`?t?`+${i} 个未变节点`:`+${i} 个隐藏节点`:t?`+${i} unchanged`:`+${i} hidden`}var Po=28;function Fo(e,t={}){let n=t.hops??1;if(!(Number.isFinite(n)&&n>=0))throw new p(`invalid-input`,`computeFocus: hops must be a finite number ≥ 0, got ${n}.`);let r=t.hubDegree??40;if(!(r>=0))throw new p(`invalid-input`,`computeFocus: hubDegree must be a number ≥ 0 (Infinity disables), got ${r}.`);let i=t.hunk;if(i!==void 0&&!(Number.isInteger(i)&&i>=0&&i<e.hunks.length))throw new p(`invalid-input`,`computeFocus: hunk ${i} is out of range [0, ${e.hunks.length}).`);let a=e.nodes.length,o=e.edges.length,{start:s,list:c}=jo(e),l=new Uint8Array(a),u=new Uint8Array(a),d=new Int32Array(a).fill(-1),f=new Int32Array(a),m=0,h=0,g=(e,t)=>{e<0||e>=a||d[e]!==-1||(d[e]=t,l[e]=1,f[h++]=e)},_=[];if(i!==void 0){let t=e.hunks[i];for(let e of t?.nodes??[])u[e]=1,g(e,0);for(let e of t?.edges??[])_.push(e)}else{for(let t of e.nodes)t.status!==`unchanged`&&(u[t.index]=1,g(t.index,0));for(let t of e.edges)t.status!==`unchanged`&&_.push(t.index)}for(let t of _){let n=e.edges[t];n!==void 0&&(g(n.s,1),g(n.t,1),g(n.sb,1),g(n.tb,1))}let v=Math.floor(n),y=new Uint8Array(a);for(;m<h;){let t=f[m++],n=d[t];if(!(n>=v)){if((e.nodes[t]?.degree??0)>r)y[t]=1;else for(let e=s[t];e<s[t+1];e++)g(c[e],n+1)}}for(let e of t.expanded??[])e>=0&&e<a&&(l[e]=1);let b=new Uint8Array(a);for(let e=0;e<a;e++)l[e]===1&&u[e]===0&&(b[e]=1);let x=new Uint8Array(o);for(let t=0;t<o;t++){let n=e.edges[t];n!==void 0&&l[n.s]===1&&l[n.t]===1&&(x[t]=1)}return{nodes:l,edges:x,context:b,collapsed:Io(e,l,y,s,c)}}function Io(e,t,n,r,i){let a=e.nodes.length,o=new Int32Array(a).fill(-1),s=new Int32Array(a),c=0,l=0;for(let e=0;e<a;e++){if(t[e]===1)continue;let a=-1,c=-1;for(let o=r[e];o<r[e+1];o++){let e=i[o];if(t[e]===1&&(a<0&&(a=e),n[e]===1)){c=e;break}}a>=0&&(o[e]=c>=0?c:a,s[l++]=e)}let u=()=>{for(;c<l;){let e=s[c++];for(let n=r[e];n<r[e+1];n++){let r=i[n];t[r]!==1&&o[r]===-1&&(o[r]=o[e],s[l++]=r)}}};u();let d=new Uint8Array(a);for(let e=0;e<a;e++)t[e]!==1&&o[e]===-1&&(o[e]=e,d[e]=1,s[l++]=e,u());let f=new Map,p=e=>{let t=f.get(e);return t===void 0&&(t={owner:e,members:[],extra:0,changed:!1,sx:0,sy:0},f.set(e,t)),t};for(let n=0;n<a;n++){if(t[n]===1)continue;let r=p(o[n]),i=e.nodes[n];r.members.push(n),i!==void 0&&i.status!==`unchanged`&&(r.changed=!0),r.sx+=i?.x??0,r.sy+=i?.y??0}for(let n of e.nodes)n.hidden<=0||(p(t[n.index]===1?n.index:o[n.index]).extra+=n.hidden);let m=[];for(let n of f.values()){let a=e.nodes[n.owner];if(a===void 0)continue;let o=n.members.length+n.extra;if(o===0)continue;let s,c;if(n.members.length>0)s=n.sx/n.members.length,c=n.sy/n.members.length;else{let o=0,l=0,u=0;for(let a=r[n.owner];a<r[n.owner+1];a++){let n=e.nodes[i[a]];n!==void 0&&t[n.index]===1&&(o+=n.x,l+=n.y,u++)}let d=0,f=-1;if(u>0){let e=a.x-o/u,t=a.y-l/u,n=Math.hypot(e,t);n>1e-9&&(d=e/n,f=t/n)}let p=a.r+Po;s=a.x+d*p,c=a.y+f*p}m.push({id:d[n.owner]===1?`component:${a.id}`:`near:${a.id}`,x:s,y:c,count:o,nodes:n.members,label:No(o,!n.changed,e.locale)})}return m.sort((e,t)=>e.id<t.id?-1:+(e.id>t.id)),m}var Lo=.06,Ro=16,zo=160;function Bo(e,t){let n=e.bounds;if(t!==void 0&&t.length>0){let r=new fa;for(let n of t){let t=e.hunks[n];t!==void 0&&r.addRect(t.bounds)}n=r.rect(e.bounds)}let r=Math.max(Ro,Lo*Math.max(n.width,n.height)),i=Math.max(zo,n.width+2*r),a=Math.max(zo,n.height+2*r),o=n.x+n.width/2,s=n.y+n.height/2;return{x:o-i/2,y:s-a/2,width:i,height:a}}var z={retract:[0,.4],removeShrink:[.25,.55],removeGhostFade:[.65625,1],splitSourceShrink:[.6,.8],splitSourceFade:[.8,1],growFromExisting:[0,.45],pop:[.35,.75],popAfterArrival:[.55,.85],growBetweenNew:[.6,.9],growAfterArrival:[.7,.95],growOther:[.35,.85],labelFadeIn:.15,travelStagger:.15,travel:.55,arrivalFade:.12,mergeTargetFade:[.55,.85],mergeFlash:[.7,1],splitStart:.05,splitSourceStay:[.6,.9],modifyFade:[.3,.7],modifyFlash:[.4,.8],labelOut:[.1,.5],labelIn:[.3,.7],labelSlide:6,badgeTick:.6,swing:[.1,.8],ghostFade:[.3,1],pivotFade:[.8,1],edgeFade:[.2,.7],swap:[.2,.8],arc:.25};function Vo(e,t,n){let r=n+(t>1?z.travelStagger*e/(t-1):z.travelStagger/2);return[r,r+z.travel]}function Ho(e,t,n){let r=e.nodes.length,i=e.edges.length,a=e.hunks.length,o={nKind:new Uint8Array(r),nA:new Float64Array(r),nB:new Float64Array(r),nC:new Float64Array(r),nFlashA:new Float64Array(r).fill(-1),nFlashB:new Float64Array(r).fill(-1),nLabelSwap:new Uint8Array(r),nBadgeAt:new Float64Array(r).fill(2),nArrivals:Array(r).fill(null),nBadgeSteps:Array(r).fill(null),nPulse:new Uint8Array(r),hPulseContext:new Uint8Array(a),eKind:new Uint8Array(i),eA:new Float64Array(i),eB:new Float64Array(i),eFromTarget:new Uint8Array(i),ePivot:new Int32Array(i).fill(-1)},s=o.nArrivals,c=o.nBadgeSteps,l=(e,t,n,r,i=0)=>{o.nKind[e]=t,o.nA[e]=n,o.nB[e]=r,o.nC[e]=i},u=(e,t)=>{o.nFlashA[e]=t[0],o.nFlashB[e]=t[1]};for(let r of e.hunks){let i=r.kind,a=e=>t[e][1],d=e=>t[e][2],f=r.nodes.filter(t=>e.nodes[t]?.role===`merge-source`);f.forEach((t,n)=>{let r=e.nodes[t],[i,a]=Vo(n,f.length,0);r?.flow!==void 0&&!r.presentAfter?l(t,4,i,a):d(t).hidden?l(t,2,z.removeShrink[0],z.removeShrink[1],z.removeGhostFade[0]):l(t,1,i,a)});let p=r.nodes.filter(t=>e.nodes[t]?.role===`split-target`&&e.nodes[t]?.flow!==void 0&&a(t).hidden);p.forEach((e,t)=>{let[n,r]=Vo(t,p.length,z.splitStart);l(e,5,n,r)});let m=!1;for(let t of r.nodes){let n=e.nodes[t];if(n===void 0)continue;let r=a(t),s=d(t);if(r.hidden||(m=!0,o.nPulse[t]=1),o.nKind[t]===0&&!(r.hidden&&s.hidden)){if(r.hidden){let[e,n]=i===`merge`?z.popAfterArrival:z.pop;l(t,3,e,n,Math.min(1,n-.05))}else s.hidden?i===`split`?l(t,2,z.splitSourceShrink[0],z.splitSourceShrink[1],z.splitSourceFade[0]):l(t,2,z.removeShrink[0],z.removeShrink[1],z.removeGhostFade[0]):n.role===`merge-target`?(l(t,1,z.mergeTargetFade[0],z.mergeTargetFade[1]),u(t,z.mergeFlash)):n.role===`split-source`?(l(t,1,z.splitSourceStay[0],z.splitSourceStay[1]),u(t,z.mergeFlash)):(l(t,1,z.modifyFade[0],z.modifyFade[1]),s.ring!==null&&u(t,z.modifyFlash));o.nKind[t]===1&&(o.nLabelSwap[t]=r.labelBefore&&!s.labelBefore&&n.labelBefore!==void 0?1:0,s.badge&&!r.badge&&n.badge!==void 0&&(o.nBadgeAt[t]=z.badgeTick))}}if(m||(o.hPulseContext[r.index]=1),i===`merge`)for(let t of r.nodes){let n=e.nodes[t];if(n?.role!==`merge-target`||n.badge===void 0)continue;let r=f.filter(n=>e.nodes[n]?.flow===t).map(e=>o.nB[e]).sort((e,t)=>e-t);r.length===0&&r.push(z.mergeFlash[0]),s[t]=Float64Array.from(r),c[t]=r.map((e,t)=>t===r.length-1?n.badge:Da(t+1))}let h=t=>e.nodes[t]?.hunk===r.index&&(o.nKind[t]===3||o.nKind[t]===5),g=t=>e.nodes[t]?.hunk===r.index&&(o.nKind[t]===2||o.nKind[t]===4),_=(e,t,n,r=!1,i=-1)=>{o.eKind[e]=t,o.eA[e]=n[0],o.eB[e]=n[1],o.eFromTarget[e]=+!!r,o.ePivot[e]=i};for(let t of r.edges){let r=e.edges[t];if(r===void 0)continue;let a=n[t],s=a[1],c=a[2];switch(r.role){case`added`:{let e=h(r.s),n=h(r.t);_(t,1,e&&n?z.growBetweenNew:i===`add`&&(e||n)?z.growFromExisting:i===`merge`||i===`split`?z.growAfterArrival:z.growOther,e&&!n);break}case`removed`:_(t,2,z.retract,g(r.s)&&!g(r.t));break;case`collapsed`:case`carried`:{if(i===`split`&&r.role===`carried`){let e=o.nKind[r.s]===5?r.s:o.nKind[r.t]===5?r.t:-1;e>=0?_(t,5,[o.nA[e],o.nB[e]],!1,e):_(t,7,z.swap);break}let e=o.nKind[r.sb]===4?r.sb:o.nKind[r.tb]===4?r.tb:-1;e>=0?_(t,4,[o.nA[e],o.nB[e]],!1,e):r.role===`collapsed`?_(t,2,z.retract,g(r.s)&&!g(r.t)):_(t,7,z.swap);break}case`retarget`:{let e=r.s===r.sb&&r.t!==r.tb?r.s:r.t===r.tb&&r.s!==r.sb?r.t:-1;e>=0?_(t,3,z.swing,!1,e):_(t,7,z.swap);break}case`modified`:_(t,6,z.edgeFade);break;case`unchanged`:break;default:R(r.role)}s.hidden&&c.hidden&&(o.eKind[t]=0)}}return o}var Uo=e=>Math.min(1,Math.max(0,e)),Wo=(e,t,n)=>e+(t-e)*n,B=(e,t,n)=>{if(n<=t)return+(e>=n);let r=(e-t)/(n-t);return Math.min(1,Math.max(0,r))},Go=e=>e<=0||e>=1?0:Math.sin(Math.PI*e);function Ko(e,t,n,r){if(!(e>=0&&e<=1&&n>=0&&n<=1))throw new p(`invalid-input`,`cubicBezier: x1 and x2 must be in [0, 1], got ${e}, ${n}.`);let i=3*e,a=3*(n-e)-i,o=1-i-a,s=3*t,c=3*(r-t)-s,l=1-s-c,u=e=>((o*e+a)*e+i)*e,d=e=>((l*e+c)*e+s)*e,f=e=>(3*o*e+2*a)*e+i,m=e=>{let t=e;for(let n=0;n<8;n++){let n=u(t)-e;if(Math.abs(n)<1e-7)return t;let r=f(t);if(Math.abs(r)<1e-6)break;t-=n/r}let n=0,r=1;t=e;for(let i=0;i<64&&r-n>1e-7;i++){let i=u(t);if(Math.abs(i-e)<1e-7)return t;e>i?n=t:r=t,t=(n+r)/2}return t};return e=>e<=0?0:e>=1?1:d(m(e))}var qo=Ko(.2,0,0,1),Jo=1024,Yo=new Float64Array(1026);for(let e=0;e<=Jo;e++)Yo[e]=qo(e/Jo);Yo[1025]=1;var V=e=>{if(!(e>0))return 0;if(e>=1)return 1;let t=e*Jo,n=t|0,r=Yo[n];return r+(Yo[n+1]-r)*(t-n)},Xo=e=>{let t=Math.min(1,Math.max(0,e));if(t<.5)return 4*t*t*t;let n=2-2*t;return 1-n*n*n/2},Zo=(e,t=1.5)=>{let n=Math.min(1,Math.max(0,e))-1;return 1+(t+1)*n*n*n+t*n*n},Qo=[`added`,`removed`,`content`,`structure`,`identity`,`neutral`];function $o(e){switch(e){case`added`:return 0;case`removed`:return 1;case`content`:return 2;case`structure`:return 3;case`identity`:return 4;case`neutral`:return 5;default:return R(e)}}var es=new WeakMap;function ts(e){let t=es.get(e);if(t!==void 0)return t;let n=e.family,r=[n.added,n.removed,n.content,n.structure,n.identity],i={theme:e,base:[...r.map(e=>e.base),e.neutral.node],strong:[...r.map(e=>e.strong),e.neutral.nodeStroke],text:[...r.map(e=>e.text),e.neutral.label],soft:[...r.map(e=>e.soft),e.surface.raised],edge:[...r.map(e=>e.base),e.neutral.edge],deprecatedFill:Va(n.content.base,.6),deprecatedStroke:Va(n.content.strong,.6),background:e.canvas.background,primary:e.text.primary,secondary:e.text.secondary,muted:e.text.muted,neutralLabel:e.neutral.label,accent:e.accent.base,glow:e.glow,haloScale:e.glow?sa.glowScale:1,haloAlpha:e.glow?sa.glowAlpha:sa.ringAlpha,weightRegular:e.font.weightRegular,weightStrong:e.font.weightStrong,ramps:new Wa};return es.set(e,i),i}function ns(e){return Object.freeze({hidden:e.hidden,family:e.family,fill:e.fill,stroke:e.stroke,dash:e.dash,ring:e.ring,halo:e.halo,labelBefore:e.labelBefore,labelColor:e.labelColor,labelWeight:e.labelWeight,strike:e.strike,changed:e.changed,secondary:e.secondary,badge:e.badge,z:e.z})}var rs=ns({hidden:!0,family:5,fill:null,stroke:null,dash:null,ring:null,halo:null,labelBefore:!1,labelColor:``,labelWeight:400,strike:!1,changed:!1,secondary:!1,badge:!1,z:0});function is(e){return Object.freeze({hidden:e.hidden,family:e.family,before:e.before,color:e.color,width:e.width,alpha:e.alpha,dash:e.dash,arrow:e.arrow,label:e.label,labelColor:e.labelColor,strike:e.strike,changed:e.changed,z:e.z})}var as=is({hidden:!0,family:5,before:!1,color:``,width:0,alpha:0,dash:null,arrow:!1,label:0,labelColor:``,strike:!1,changed:!1,z:0}),os=class{tokens;nodes=new Map;edges=new Map;constructor(e){this.tokens=e}node(e,t,n={}){let r=`${e}|${t}|${+!!n.labelBefore}${+!!n.strike}${+!!n.secondary}${+!!n.badge}`,i=this.nodes.get(r);return i===void 0&&(i=ns(this.makeNode(e,t,n)),this.nodes.set(r,i)),i}makeNode(e,t,n){let r=this.tokens,i={hidden:!1,family:t,dash:null,ring:null,halo:null,labelBefore:n.labelBefore??!1,labelColor:r.primary,labelWeight:r.weightStrong,strike:n.strike??!1,changed:!0,secondary:n.secondary??!1,badge:n.badge??!1,z:2};switch(e){case`neutral`:return{...i,family:5,fill:r.base[5],stroke:r.strong[5],labelColor:r.neutralLabel,labelWeight:r.weightRegular,changed:!1,z:0};case`solid`:return{...i,fill:r.base[t],stroke:r.strong[t]};case`added`:return{...i,fill:r.base[t],stroke:r.strong[t],halo:r.base[t]};case`ringed`:return{...i,fill:r.base[t],stroke:r.strong[t],ring:r.base[t]};case`ringHalo`:return{...i,fill:r.base[t],stroke:r.strong[t],ring:r.base[t],halo:r.base[t]};case`ghost`:return{...i,fill:null,stroke:r.base[t],dash:ia,z:1};case`deprecated`:return{...i,family:2,fill:r.deprecatedFill,stroke:r.deprecatedStroke,ring:r.deprecatedFill,strike:!0};default:return R(e)}}edge(e,t,n,r,i=!1){let a=`${e}|${t}|${+!!n}|${r}|${+!!i}`,o=this.edges.get(a);return o===void 0&&(o=is(this.makeEdge(e,t,n,r,i)),this.edges.set(a,o)),o}makeEdge(e,t,n,r,i){let a=this.tokens,o={hidden:!1,family:t,before:n,color:a.edge[t],width:P.changedEdge,alpha:1,dash:null,arrow:!0,label:r,labelColor:a.text[t],strike:i,changed:!0,z:2};switch(e){case`neutral`:return{...o,family:5,color:a.edge[5],width:P.neutralEdge,labelColor:a.neutralLabel,changed:!1,z:0};case`solid`:return o;case`dashed`:return{...o,dash:aa,z:1};case`collapsed`:return{...o,dash:aa,alpha:L.collapsedEdge,z:1};default:return R(e)}}};function ss(e,t){let n=$o(t.family),r=t.labelBefore!==void 0;switch(t.role){case`unchanged`:{let t=e.node(`neutral`,5);return[t,t,t]}case`added`:{let t=e.node(`added`,0,{badge:!0});return[t,rs,t]}case`removed`:return[e.node(`ghost`,1,{strike:!0,badge:!0}),e.node(`solid`,1),rs];case`modified`:return[e.node(`ringed`,n,{secondary:r,badge:!0}),e.node(`ringed`,n,{labelBefore:!0}),e.node(`ringed`,n,{badge:!0})];case`deprecated`:return[e.node(`deprecated`,2,{secondary:r,badge:!0}),e.node(`ringed`,2,{labelBefore:!0}),e.node(`deprecated`,2,{badge:!0})];case`merge-source`:return[e.node(`ghost`,4,{strike:!0}),e.node(`solid`,4,{labelBefore:!0}),t.presentAfter?e.node(`deprecated`,2):rs];case`merge-target`:case`split-target`:{let n=$o(t.familyBefore),i=t.presentBefore?n===5?e.node(`neutral`,5):e.node(`ringed`,n,{labelBefore:!0}):rs;return[e.node(`ringHalo`,4,{secondary:r,badge:!0}),i,e.node(`ringHalo`,4,{badge:!0})]}case`split-source`:return[t.presentAfter?e.node(`ringHalo`,4,{secondary:r,badge:!0}):e.node(`ghost`,4,{strike:!0}),e.node(`solid`,4,{labelBefore:!0}),t.presentAfter?e.node(`ringHalo`,4,{badge:!0}):rs];default:return R(t.role)}}function cs(e,t){let n=$o(t.family),r=t.labelBefore!==void 0;switch(t.role){case`unchanged`:{let t=e.edge(`neutral`,5,!1,0);return[t,t,t]}case`added`:{let t=e.edge(`solid`,0,!1,1);return[t,as,t]}case`removed`:return[e.edge(`dashed`,1,!1,1,!0),e.edge(`solid`,1,!1,1),as];case`modified`:return[e.edge(`solid`,n,!1,r?3:1),e.edge(`solid`,n,!1,2),e.edge(`solid`,n,!1,1)];case`retarget`:case`carried`:return[e.edge(`solid`,n,!1,r?3:1),e.edge(`solid`,n,!0,2),e.edge(`solid`,n,!1,1)];case`collapsed`:return[e.edge(`collapsed`,4,!1,1,!0),e.edge(`solid`,4,!1,1),as];default:return R(t.role)}}var ls=0,us=1,ds=2,H=3,U=la.spotlightEnd,fs=la.settleStart,ps=fs-U,ms=[`added`,`removed`,`content`,`structure`,`identity`],hs=Object.freeze([]),gs=0,_s=1,vs=2,ys=3,bs=4,xs=()=>({text:``,color:``,alpha:0,size:0,weight:400,strike:!1,priority:0,minZoom:0,offset:0}),Ss=()=>({visible:!1,x:0,y:0,r:0,alpha:0,family:`neutral`,fill:null,stroke:null,strokeWidth:0,dash:null,ring:null,halo:null,label:null,secondaryLabel:null,badge:null,pulse:0,z:0}),Cs=()=>({visible:!1,x1:0,y1:0,x2:0,y2:0,r1:0,r2:0,curvature:0,color:``,width:0,alpha:0,dash:null,dashOffset:0,arrow:!1,arrowMinZoom:0,progress:1,fromTarget:!1,label:null,z:0}),ws=()=>({kind:`pivot`,x1:0,y1:0,x2:0,y2:0,r1:0,r2:0,color:``,alpha:0,width:0,dash:null,progress:1,curvature:0,label:null});function Ts(e){e.visible=!1,e.alpha=0,e.ring=null,e.halo=null,e.label=null,e.secondaryLabel=null,e.badge=null,e.pulse=0}function Es(e){e.visible=!1,e.alpha=0,e.label=null}var Ds=class{scene;t;N;M;H;nStyles;eStyles;nFam;nHunk;nHunkFam;eFam;eHunk;eHunkFam;eUnionText;ghostCurv;fillRamp;strokeRamp;ringRamp;c;glyphs;glyphLists;famBit;nx;ny;nr;nImp;nFlow;nLabel;nLabelBefore;nBadge;eS;eT;eSB;eTB;eCurv;eLabel;eLabelBefore;eUnchanged;hNodes;hContext;hEdges;hFam;chapterMode;chStart;chEnd;chHunks;wStart;wEnd;hState;hP;levelGen;level;edgeGen;pulseGen;pulseVal;gen=0;env=0;selNode;selHunk=-1;view=null;layer=ls;famMask=0;reduced=!1;curChanged=!1;curFamily=5;u=0;tau=0;time=0;emph=1;restLabels=1;lodChanged=I.changedLabel;lodNeutral=I.neutralLabel;lodImportant=I.importantNeutralLabel;countedFocus=null;focusCount=0;px=0;py=0;pools=new WeakMap;constructor(e){this.scene=e,this.t=ts(e.theme);let t=e.nodes.length,n=e.edges.length,r=e.hunks.length;this.N=t,this.M=n,this.H=r;let i=new os(this.t);this.nStyles=e.nodes.map(e=>ss(i,e)),this.eStyles=e.edges.map(e=>cs(i,e));let a=t=>{let n=t>=0?e.hunks[t]:void 0;return n===void 0?5:$o(n.family)};this.nFam=Uint8Array.from(e.nodes,e=>$o(e.family)),this.nHunk=Int32Array.from(e.nodes,e=>e.hunk),this.nHunkFam=Uint8Array.from(e.nodes,e=>a(e.hunk)),this.eFam=Uint8Array.from(e.edges,e=>$o(e.family)),this.eHunk=Int32Array.from(e.edges,e=>e.hunk),this.eHunkFam=Uint8Array.from(e.edges,e=>a(e.hunk)),this.eUnionText=e.edges.map(e=>e.labelBefore===void 0?e.label:`${e.labelBefore} → ${e.label}`),this.ghostCurv=_a(e.edges).ghost,this.famBit=Uint8Array.from([1,2,4,8,16,0]),this.nx=Float64Array.from(e.nodes,e=>e.x),this.ny=Float64Array.from(e.nodes,e=>e.y),this.nr=Float64Array.from(e.nodes,e=>e.r),this.nImp=Float64Array.from(e.nodes,e=>e.importance),this.nFlow=Int32Array.from(e.nodes,e=>e.flow??-1),this.nLabel=e.nodes.map(e=>e.label),this.nLabelBefore=e.nodes.map(e=>e.labelBefore??null),this.nBadge=e.nodes.map(e=>e.badge??null),this.eS=Int32Array.from(e.edges,e=>e.s),this.eT=Int32Array.from(e.edges,e=>e.t),this.eSB=Int32Array.from(e.edges,e=>e.sb),this.eTB=Int32Array.from(e.edges,e=>e.tb),this.eCurv=Float64Array.from(e.edges,e=>e.curvature),this.eLabel=e.edges.map(e=>e.label),this.eLabelBefore=e.edges.map(e=>e.labelBefore??null),this.eUnchanged=Uint8Array.from(e.edges,e=>+(e.status===`unchanged`)),this.hNodes=e.hunks.map(e=>Int32Array.from(e.nodes)),this.hContext=e.hunks.map(e=>Int32Array.from(e.context)),this.hEdges=e.hunks.map(e=>Int32Array.from(e.edges)),this.hFam=Uint8Array.from(e.hunks,e=>$o(e.family)),this.chapterMode=e.timeline.mode===`chapters`,this.chStart=Float64Array.from(e.timeline.chapters,e=>e.start),this.chEnd=Float64Array.from(e.timeline.chapters,e=>e.end),this.chHunks=e.timeline.chapters.map(e=>Int32Array.from(e.hunks));let o=this.t.background,s=this.t.ramps;this.fillRamp=[],this.strokeRamp=[],this.ringRamp=[];for(let e=0;e<t;e++){let[,t,n]=this.nStyles[e],r=t.hidden?null:t.fill,i=n.hidden?null:n.fill;this.fillRamp.push(!t.hidden&&n.hidden?s.get(r??o,o):r!==i&&!t.hidden?s.get(r??o,i??o):null),this.strokeRamp.push(!t.hidden&&!n.hidden&&t.stroke!==n.stroke&&t.stroke!==null&&n.stroke!==null?s.get(t.stroke,n.stroke):null),this.ringRamp.push(t.ring!==null&&n.ring!==null&&t.ring!==n.ring?s.get(t.ring,n.ring):null)}this.c=Ho(e,this.nStyles,this.eStyles);let c=this.buildGlyphs();this.glyphs=c;let l=[],u=[],d=[];c.forEach((e,t)=>{l.push(t),e.role===_s&&u.push(t),e.role!==bs&&d.push(t)}),this.glyphLists=[l,[],u,d],this.wStart=new Float64Array(r),this.wEnd=new Float64Array(r);for(let t of e.timeline.windows)t.hunk>=0&&t.hunk<r&&(this.wStart[t.hunk]=t.start,this.wEnd[t.hunk]=t.end);this.hState=new Uint8Array(r),this.hP=new Float64Array(r),this.levelGen=new Uint32Array(t),this.level=new Uint8Array(t),this.edgeGen=new Uint32Array(n),this.pulseGen=new Uint32Array(t),this.pulseVal=new Float32Array(t),this.selNode=new Uint8Array(t)}buildGlyphs(){let{scene:e,t}=this,n=[],r={push:e=>{n.push({role:e.role,kind:e.kind,a:e.a,b:e.b,edge:e.edge,node:e.node,hunk:e.hunk,family:e.family,color:e.color,alpha:e.alpha,width:e.width,dash:e.dash,curvature:e.curvature,clearA:e.clearA,clearB:e.clearB,label:e.label})}},i=(e,n,r,i,a,o)=>({role:e,kind:n,a:r,b:i,edge:-1,node:a,hunk:o,family:4,color:t.base[4],alpha:.9,width:P.glyph,dash:null,curvature:z.arc,clearA:4,clearB:4,label:null});for(let t of e.nodes)t.flow!==void 0&&(t.role===`merge-source`?r.push(i(gs,`merge-arrow`,t.index,t.flow,t.index,t.hunk)):t.role===`split-target`?r.push(i(gs,`split-arrow`,t.flow,t.index,t.index,t.hunk)):t.role===`deprecated`&&r.push(i(_s,`replacement-arrow`,t.index,t.flow,t.index,t.hunk)));for(let n of e.edges){if(n.role!==`retarget`&&n.role!==`carried`||n.sb===n.s&&n.tb===n.t)continue;let e=n.role===`retarget`?1:4;if(r.push({role:vs,kind:`edge-ghost`,a:n.sb,b:n.tb,edge:n.index,node:-1,hunk:n.hunk,family:$o(n.family),color:t.edge[e],alpha:L.ghostEdge,width:P.changedEdge,dash:aa,curvature:this.ghostCurv[n.index],clearA:0,clearB:0,label:null}),n.role!==`retarget`)continue;let i=n.s===n.sb?n.s:n.t===n.tb?n.t:-1;i<0||r.push({role:ys,kind:`pivot`,a:i,b:i===n.s?n.t:n.s,edge:n.index,node:-1,hunk:n.hunk,family:3,color:t.base[3],alpha:1,width:P.pivot,dash:null,curvature:0,clearA:0,clearB:0,label:null})}for(let n of e.suggestions)r.push({role:bs,kind:`suggestion`,a:n.before,b:n.after,edge:-1,node:-1,hunk:-1,family:4,color:t.base[4],alpha:.85,width:P.suggestion,dash:oa,curvature:.12,clearA:2,clearB:2,label:`?`});return n}newFrame(){return{nodes:[],edges:[],glyphs:[],collapsed:hs,spotlight:1}}prepare(e){let t=this.pools.get(e);if(t===void 0||t.n!==this.N||t.m!==this.M){let n=(e,t)=>Array.from({length:e},t);t={n:this.N,m:this.M,rings:n(this.N,()=>({color:``,width:0,gap:0,alpha:0})),halos:n(this.N,()=>({color:``,radius:0,alpha:0})),labels:n(this.N,xs),secondaries:n(this.N,xs),badges:n(this.N,()=>({text:``,color:``,background:``,minZoom:0})),edgeLabels:n(this.M,xs),glyphs:n(this.glyphs.length,ws),glyphLabels:n(this.glyphs.length,xs)},this.pools.set(e,t)}e.nodes.length!==this.N&&(e.nodes.length=this.N),e.edges.length!==this.M&&(e.edges.length=this.M);for(let t=0;t<this.N;t++)e.nodes[t]===void 0&&(e.nodes[t]=Ss());for(let t=0;t<this.M;t++)e.edges[t]===void 0&&(e.edges[t]=Cs());return t}resolve(e,t){let n=t??this.newFrame(),r=this.prepare(n);this.begin(e);let i=n.nodes;for(let e=0;e<this.N;e++)this.resolveNode(e,i[e],r);let a=n.edges;for(let e=0;e<this.M;e++)this.resolveEdge(e,a[e],i,r);return this.resolveGlyphs(n,r),n.collapsed=e.focus===null?hs:e.focus.collapsed,n.spotlight=this.layer===H?this.env:this.selHunk>=0?this.emph:0,this.view=null,n}begin(e){switch(this.view=e,e.layer){case`union`:this.layer=ls;break;case`before`:this.layer=us;break;case`after`:this.layer=ds;break;case`replay`:this.layer=H;break;default:throw new p(`invalid-input`,`Unknown layer "${String(e.layer)}".`)}let t=0;if(e.families.size>0)for(let n=0;n<ms.length;n++)e.families.has(ms[n])&&(t|=1<<n);this.famMask=t,this.reduced=e.reducedMotion;let n=e.emphasis;this.emph=Number.isFinite(n)?Uo(n):1,this.restLabels=1-this.emph;let r=e.focus;if(r!==null&&(r.nodes.length!==this.N||r.edges.length!==this.M||r.context.length!==this.N))throw new p(`invalid-input`,`view.focus does not belong to this scene (array lengths differ); recompute it with computeFocus(scene).`);let i=(r===null?this.N:this.focusVisible(r))<=I.smallScene;this.lodChanged=i?I.smallChangedLabel:I.changedLabel,this.lodNeutral=i?I.smallNeutralLabel:I.neutralLabel,this.lodImportant=i?I.smallNeutralLabel:I.importantNeutralLabel,this.updateSelection(e.selectedHunk>=0&&e.selectedHunk<this.H?e.selectedHunk:-1),this.env=0,this.layer===H&&(this.time=Number.isFinite(e.t)?e.t:0,this.updateReplay())}focusVisible(e){if(e!==this.countedFocus){let t=0,n=e.nodes;for(let e=0;e<n.length;e++)n[e]===1&&t++;this.countedFocus=e,this.focusCount=t}return this.focusCount}updateSelection(e){if(e!==this.selHunk){if(this.selNode.fill(0),e>=0){let t=this.hContext[e];for(let e=0;e<t.length;e++)this.selNode[t[e]]=1;let n=this.hNodes[e];for(let e=0;e<n.length;e++)this.selNode[n[e]]=2}this.selHunk=e}}updateReplay(){let{H:e,hState:t,hP:n,wStart:r,wEnd:i}=this,a=this.time,o=-1;for(let s=0;s<e;s++){let e=r[s],c=i[s];a<e?t[s]=0:a>=c?t[s]=2:(t[s]=1,n[s]=(a-e)/(c-e),o=s)}if(this.gen=this.gen+1>>>0,this.gen===0&&(this.levelGen.fill(0),this.edgeGen.fill(0),this.pulseGen.fill(0),this.gen=1),!this.chapterMode){if(o>=0){let e=n[o];this.env=e<U?V(e/U):e>fs?V((1-e)/(1-fs)):1,this.markHunk(o)}}else for(let e=0;e<this.chHunks.length;e++){let t=this.chStart[e],n=this.chEnd[e];if(a<t||a>=n)continue;let o=this.chHunks[e],s=o.length>0?o[0]:-1,c=s<0?1:U*(i[s]-r[s]);this.env=V(Uo(Math.min(a-t,n-a)/Math.max(c,1e-9)));for(let e=0;e<o.length;e++)this.markHunk(o[e]);break}}markHunk(e){let t=this.hContext[e],n=this.hNodes[e],r=this.hEdges[e];if(t===void 0||n===void 0||r===void 0)return;let{gen:i,levelGen:a,level:o,pulseGen:s,pulseVal:c}=this,l=this.hState[e]===1&&this.hP[e]<U&&!this.reduced,u=l?this.hP[e]/U:0;for(let n=0;n<t.length;n++){let r=t[n];a[r]!==i&&(a[r]=i,o[r]=1),l&&this.c.hPulseContext[e]===1&&(s[r]=i,c[r]=u)}for(let e=0;e<n.length;e++){let t=n[e];a[t]=i,o[t]=2,l&&this.c.nPulse[t]===1&&(s[t]=i,c[t]=u)}for(let e=0;e<r.length;e++)this.edgeGen[r[e]]=i}nodeLevel(e){return this.layer===H?this.levelGen[e]===this.gen?this.level[e]:0:this.selNode[e]}spotlight(e){return this.layer===H?this.env<=0||e===2?1:Wo(1,e===1?L.replayContext:L.replayRest,this.env):this.selHunk<0||e===2?1:Wo(1,e===1?L.selectedContext:L.selectedRest,this.emph)}fadesRestLabels(e){return this.layer!==H&&this.selHunk>=0&&e===0}filtered(e,t){let n=this.famMask;return n!==0&&(this.famBit[e]&n)===0&&(this.famBit[t]&n)===0}resolveNode(e,t,n){t.x=this.nx[e],t.y=this.ny[e],t.r=this.nr[e],t.family=Qo[this.nFam[e]],t.pulse=0,t.strokeWidth=P.node;let r=this.nStyles[e],i;if(this.layer!==H)i=this.applyNode(t,e,r[this.layer],n);else{let a=this.nHunk[e],o=a<0?2:this.hState[a];if(o===0)i=this.applyNode(t,e,r[us],n);else if(o===2)i=this.applyNode(t,e,r[ds],n);else{let o=this.hP[a];o<U?i=this.applyNode(t,e,r[us],n):o>=fs?i=this.applyNode(t,e,r[ds],n):(this.u=(o-U)/ps,i=this.animateNode(t,e,r,n))}i&&this.pulseGen[e]===this.gen&&(t.pulse=this.pulseVal[e])}i?this.modulateNode(t,e,n):Ts(t)}applyNode(e,t,n,r){if(n.hidden)return!1;let i=this.t,a=this.nLabelBefore[t]??null;if(e.visible=!0,e.alpha=1,e.family=Qo[n.family],e.fill=n.fill,e.stroke=n.stroke,e.dash=n.dash,e.z=n.z,n.ring!==null){let i=r.rings[t];i.color=n.ring,i.width=P.ring,i.gap=P.ringGap,i.alpha=1,e.ring=i}else e.ring=null;if(n.halo!==null){let a=r.halos[t];a.color=n.halo,a.radius=e.r*i.haloScale,a.alpha=i.haloAlpha,e.halo=a}else e.halo=null;let o=r.labels[t];if(o.text=n.labelBefore&&a!==null?a:this.nLabel[t],o.color=n.labelColor,o.alpha=1,o.size=F.size,o.weight=n.labelWeight,o.strike=n.strike,o.offset=F.offset,e.label=o,n.secondary&&a!==null){let n=r.secondaries[t];n.text=a,n.color=i.muted,n.alpha=1,n.size=F.oldSize,n.weight=i.weightRegular,n.strike=!0,n.offset=F.offset+F.secondaryGap,e.secondaryLabel=n}else e.secondaryLabel=null;let s=this.nBadge[t]??null;return n.badge&&s!==null?this.setBadge(e,t,s,n.family,r):e.badge=null,this.curChanged=n.changed,this.curFamily=n.family,!0}setBadge(e,t,n,r,i){let a=i.badges[t];a.text=n,a.color=this.t.text[r],a.background=this.t.soft[r],e.badge=a}animateNode(e,t,n,r){let i=this.c,a=this.u,o=i.nKind[t],s=n[us],c=n[ds],l=this.reduced;switch(o){case 1:return this.animFade(e,t,s,c,r);case 2:case 4:return this.applyNode(e,t,s,r)?l?(e.alpha=1-V(a),e.alpha>0):o===2?this.animRemove(e,t,s):this.animTravel(e,t):!1;case 3:case 5:return this.applyNode(e,t,c,r)?l?(e.alpha=V(a),e.alpha>0):o===3?this.animAdd(e,t):this.animEmerge(e,t):!1;case 0:return this.applyNode(e,t,a<.5?s:c,r);default:return this.applyNode(e,t,c,r)}}animFade(e,t,n,r,i){let a=this.c,o=this.u,s=this.nLabelBefore[t]??null,c=this.nBadge[t]??null,l=this.reduced,u=V(l?o:B(o,a.nA[t],a.nB[t]));if(!this.applyNode(e,t,u<.5?n:r,i))return!1;let d=this.t,f=this.fillRamp[t]??null;f!==null&&u>0&&u<1&&(e.fill=Ua(f,u));let p=this.strokeRamp[t]??null;p!==null&&u>0&&u<1&&(e.stroke=Ua(p,u));let m=i.rings[t];if(n.ring!==null||r.ring!==null){let i=this.ringRamp[t]??null;m.color=r.ring!==null&&n.ring!==null?i===null?r.ring:Ua(i,u):r.ring??n.ring??``,m.width=P.ring,m.gap=P.ringGap,m.alpha=r.ring!==null&&n.ring!==null?1:r.ring===null?1-u:u,e.ring=m.alpha>0?m:null}if(!l&&a.nFlashA[t]>=0&&e.ring!==null){let e=Go(B(o,a.nFlashA[t],a.nFlashB[t]));m.width=P.ring+P.ring*e,m.alpha=Math.max(m.alpha,e)}if(n.halo!==null||r.halo!==null){let a=i.halos[t];a.color=r.halo??n.halo,a.radius=e.r*d.haloScale,a.alpha=d.haloAlpha*(r.halo!==null&&n.halo!==null?1:r.halo===null?1-u:u),e.halo=a.alpha>0?a:null}if(a.nLabelSwap[t]===1&&s!==null){let a=l?u:V(B(o,z.labelOut[0],z.labelOut[1])),c=l?u:V(B(o,z.labelIn[0],z.labelIn[1])),d=i.labels[t];d.text=this.nLabel[t],d.color=r.labelColor,d.weight=r.labelWeight,d.strike=r.strike,d.alpha=c,d.offset=F.offset+(l?0:z.labelSlide*(1-c)),e.label=d;let f=i.secondaries[t];f.text=s,f.color=n.labelColor,f.size=F.size,f.weight=n.labelWeight,f.strike=!1,f.alpha=1-a,f.offset=F.offset-(l?0:z.labelSlide*a),e.secondaryLabel=f.alpha>0?f:null}let h=a.nArrivals[t]??null,g=a.nBadgeSteps[t]??null;if(h!==null&&g!==null){let n=0;if(l)n=u>=.5?h.length:0;else for(;n<h.length&&h[n]<=o;)n++;n>0?this.setBadge(e,t,g[n-1],r.family,i):e.badge=null}else a.nBadgeAt[t]<=1&&c!==null&&((l?u>=.5:o>=a.nBadgeAt[t])?this.setBadge(e,t,c,r.family,i):e.badge=null);return!0}animRemove(e,t,n){let r=this.c,i=this.u,a=V(B(i,r.nA[t],r.nB[t]));if(a>0){e.r=this.nr[t]*(1-.4*a);let r=this.fillRamp[t]??null;e.fill=a>=1||r===null?null:Ua(r,a),e.dash=ia,e.stroke=this.t.base[n.family],e.label!==null&&(e.label.strike=!0),e.ring!==null&&(e.ring.alpha=1-a),e.halo!==null&&(e.halo.alpha*=1-a,e.halo.radius=e.r*this.t.haloScale)}return e.alpha=1-V(B(i,r.nC[t],1)),e.alpha>0}arcPoint(e,t){let{nx:n,ny:r}=this,i=n[e],a=r[e],o=n[t],s=r[t],c=this.tau,l=(i+o)/2-z.arc*(s-a),u=(a+s)/2+z.arc*(o-i),d=(1-c)*(1-c),f=2*(1-c)*c,p=c*c;this.px=d*i+f*l+p*o,this.py=d*a+f*u+p*s}animTravel(e,t){let n=this.c,r=this.u,i=this.nFlow[t];if(i<0)return!0;let a=n.nA[t],o=n.nB[t];return this.tau=Xo(B(r,a,o)),this.arcPoint(t,i),e.x=this.px,e.y=this.py,e.z=3,e.alpha=1-B(r,o,o+z.arrivalFade),e.label!==null&&(e.label.alpha=1-B(r,(a+o)/2,o)),e.halo!==null&&(e.halo.radius=e.r*this.t.haloScale),e.alpha>0}animAdd(e,t){let n=this.c,r=this.u,i=B(r,n.nA[t],n.nB[t]);if(e.r=i>0?this.nr[t]*Zo(i):0,i<=0)return!1;e.alpha=Math.min(1,i*4),e.halo!==null&&(e.halo.radius=e.r*this.t.haloScale);let a=n.nC[t],o=V(B(r,a,Math.min(1,a+z.labelFadeIn)));return e.label!==null&&(e.label.alpha=o),e.secondaryLabel!==null&&(e.secondaryLabel.alpha=o),o<1&&(e.badge=null),!0}animEmerge(e,t){let n=this.c,r=this.u,i=this.nFlow[t];if(i<0)return!0;let a=n.nA[t],o=n.nB[t],s=Xo(B(r,a,o));this.tau=s,this.arcPoint(i,t),e.x=this.px,e.y=this.py,e.r=this.nr[t]*(.5+.5*s),e.z=3,e.alpha=B(r,a,a+.1),e.halo!==null&&(e.halo.radius=e.r*this.t.haloScale);let c=V(B(r,o-.05,Math.min(1,o+z.labelFadeIn)));return e.label!==null&&(e.label.alpha=c),e.secondaryLabel!==null&&(e.secondaryLabel.alpha=c),c<1&&(e.badge=null),e.alpha>0}modulateNode(e,t,n){let r=this.view,i=this.t,a=1,o=r.focus;if(o!==null){if(o.nodes[t]!==1){Ts(e);return}o.context[t]===1&&(a*=L.focusContext)}let s=this.curChanged,c=this.curFamily,l=!1;this.filtered(this.nFam[t],this.nHunkFam[t])&&(l=!0,s=!1,c=5,e.family=`neutral`,e.fill!==null&&(e.fill=i.base[5]),e.stroke=i.strong[5],e.ring=null,e.halo=null,e.badge=null,e.secondaryLabel=null,e.label!==null&&(e.label.color=i.neutralLabel,e.label.weight=i.weightRegular),a*=L.filtered);let u=this.nodeLevel(t);a*=this.spotlight(u);let d=this.selHunk>=0?this.selNode[t]:0,f=this.fadesRestLabels(d);if(d===2&&!l&&e.halo===null&&this.emph>0){let r=n.halos[t];r.color=i.base[c],r.radius=e.r*i.haloScale,r.alpha=i.haloAlpha*this.emph,e.halo=r}let p=r.hoveredNode===t,m=r.selectedNode===t;if(p&&(e.strokeWidth=P.hoveredNode,e.stroke=s?i.strong[c]:i.secondary,e.z=4),m){let r=n.rings[t];r.color=i.accent,r.width=P.hoveredNode,r.gap=P.ringGap,r.alpha=1,e.ring=r,e.z=4}e.alpha*=a;let h=this.nImp[t],g=s?this.lodChanged:h>=I.importantThreshold?this.lodImportant:this.lodNeutral,_=s?1+h:h;if(p&&(g=0,_=2+h),(d===2||m)&&(g=0,_=3+h),f&&!p&&!m){let t=this.restLabels;t<=0?(e.label=null,e.secondaryLabel=null):(e.label!==null&&(e.label.alpha*=t),e.secondaryLabel!==null&&(e.secondaryLabel.alpha*=t)),t<.5&&(e.badge=null)}e.label!==null&&(e.label.minZoom=g,e.label.priority=_),e.secondaryLabel!==null&&(e.secondaryLabel.minZoom=g,e.secondaryLabel.priority=_-.5),e.badge!==null&&(e.badge.minZoom=d===2?0:I.badge)}resolveEdge(e,t,n,r){let i=this.eStyles[e],a;if(this.layer!==H)a=this.applyEdge(t,e,i[this.layer],n,r);else{let o=this.eHunk[e],s=o<0?2:this.hState[o];if(s===0)a=this.applyEdge(t,e,i[us],n,r);else if(s===2)a=this.applyEdge(t,e,i[ds],n,r);else{let s=this.hP[o];s<U?a=this.applyEdge(t,e,i[us],n,r):s>=fs?a=this.applyEdge(t,e,i[ds],n,r):(this.u=(s-U)/ps,a=this.animateEdge(t,e,i,n,r))}}a?this.modulateEdge(t,e,r):Es(t)}setEnds(e,t,n){e.x1=t.x,e.y1=t.y,e.r1=t.r,e.x2=n.x,e.y2=n.y,e.r2=n.r}applyEdge(e,t,n,r,i){if(n.hidden)return!1;let a=this.eS[t],o=this.eT[t],s=this.eSB[t],c=this.eTB[t],l=n.before&&(s!==a||c!==o);if(this.setEnds(e,r[l?s:a],r[l?c:o]),e.curvature=l?this.ghostCurv[t]:this.eCurv[t],e.visible=!0,e.color=n.color,e.width=n.width,e.alpha=n.alpha,e.dash=n.dash,e.dashOffset=0,e.arrow=n.arrow,e.arrowMinZoom=n.changed?0:I.arrow,e.progress=1,e.fromTarget=!1,e.z=n.z,n.label===0)e.label=null;else{let r=i.edgeLabels[t];r.text=n.label===3?this.eUnionText[t]:n.label===2?this.eLabelBefore[t]??this.eLabel[t]:this.eLabel[t],r.color=n.labelColor,r.alpha=1,r.size=F.edgeSize,r.weight=this.t.weightRegular,r.strike=n.strike,r.offset=0,e.label=r}return this.curChanged=n.changed,this.curFamily=n.family,!0}animateEdge(e,t,n,r,i){let a=this.c,o=this.u,s=n[us],c=n[ds],l=a.eA[t],u=a.eB[t],d=this.reduced;switch(a.eKind[t]){case 1:{if(!this.applyEdge(e,t,c,r,i))return!1;if(d)return e.alpha*=V(o),e.alpha>0;let n=V(B(o,l,u));return n<=0?!1:(e.progress=n,e.fromTarget=a.eFromTarget[t]===1,e.label!==null&&(e.label.alpha=V(B(o,u-.05,Math.min(1,u+.15)))),!0)}case 2:{if(!this.applyEdge(e,t,s,r,i))return!1;if(d)return e.alpha*=1-V(o),e.alpha>0;let n=V(B(o,l,u));return n>=1?!1:(e.progress=1-n,e.fromTarget=a.eFromTarget[t]===1,e.label!==null&&(e.label.alpha=1-B(o,l,l+.1)),!0)}case 3:return this.applyEdge(e,t,c,r,i)?d?(e.alpha*=V(o),e.alpha>0):(this.tau=Xo(B(o,l,u)),this.swing(e,t,r),!0):!1;case 4:if(d){if(c.hidden){if(!this.applyEdge(e,t,s,r,i))return!1;e.alpha*=1-V(o)}else{if(!this.applyEdge(e,t,c,r,i))return!1;e.alpha*=V(o)}return e.alpha>0}return o<u||c.hidden?this.applyEdge(e,t,s,r,i)?(e.alpha*=1-B(o,u,u+z.arrivalFade),e.alpha>0):!1:this.applyEdge(e,t,c,r,i);case 5:return this.applyEdge(e,t,c,r,i)?(d&&(e.alpha*=V(o)),e.alpha>0):!1;case 6:{let n=V(B(o,l,u));return this.applyEdge(e,t,n<.5?s:c,r,i)?(e.label!==null&&s.label!==c.label&&(e.label.alpha=Math.abs(1-2*n)),d||(e.width+=Go(n)),!0):!1}case 7:return this.applyEdge(e,t,c,r,i)?(e.alpha*=V(d?o:B(o,l,u)),e.alpha>0):!1;case 0:return this.applyEdge(e,t,o<.5?s:c,r,i);default:return this.applyEdge(e,t,c,r,i)}}swing(e,t,n){let r=this.tau,i=this.c.ePivot[t],a=i===this.eS[t],o=n[a?this.eTB[t]:this.eSB[t]],s=n[a?this.eT[t]:this.eS[t]],c=n[i],l=Math.atan2(o.y-c.y,o.x-c.x),u=Math.atan2(s.y-c.y,s.x-c.x)-l;u>Math.PI?u-=2*Math.PI:u<-Math.PI&&(u+=2*Math.PI);let d=Wo(Math.hypot(o.x-c.x,o.y-c.y),Math.hypot(s.x-c.x,s.y-c.y),r),f=l+u*r,p=c.x+d*Math.cos(f),m=c.y+d*Math.sin(f),h=Wo(o.r,s.r,r);a?(e.x2=p,e.y2=m,e.r2=h):(e.x1=p,e.y1=m,e.r1=h),e.curvature=Wo(this.ghostCurv[t],this.eCurv[t],r)}modulateEdge(e,t,n){let r=this.view,i=this.eS[t],a=this.eT[t],o=this.t,s=1,c=r.focus;if(c!==null){if(c.edges[t]!==1){Es(e);return}this.eUnchanged[t]===1&&(c.context[i]===1||c.context[a]===1)&&(s*=L.focusContext)}let l=this.curChanged;this.filtered(this.eFam[t],this.eHunkFam[t])&&(l=!1,e.color=o.edge[5],e.width=P.neutralEdge,e.arrowMinZoom=I.arrow,e.label!==null&&(e.label.color=o.neutralLabel),s*=L.filtered);let u;u=this.layer===H?this.edgeGen[t]===this.gen?2:+(this.nodeLevel(i)>=1&&this.nodeLevel(a)>=1):this.selHunk>=0&&this.eHunk[t]===this.selHunk?2:+(this.selNode[i]>=1&&this.selNode[a]>=1),s*=this.spotlight(u);let d=this.selHunk>=0&&this.eHunk[t]===this.selHunk,f=r.hoveredEdge===t,p=l?I.edgeLabel:0,m=l?.9:.4;if(d&&(e.width<P.selectedEdge&&(e.width+=(P.selectedEdge-e.width)*this.emph),e.arrowMinZoom=0,e.z=Math.max(e.z,3),p=0,m=3),f){if(e.width=Math.max(e.width,P.selectedEdge),e.arrowMinZoom=0,e.z=4,e.label===null){let r=n.edgeLabels[t];r.text=this.eLabel[t],r.color=o.neutralLabel,r.alpha=1,r.size=F.edgeSize,r.weight=o.weightRegular,r.strike=!1,r.offset=0,e.label=r}p=0,m=Math.max(m,2.5)}e.label!==null&&this.fadesRestLabels(u)&&!f&&(this.restLabels<=0?e.label=null:e.label.alpha*=this.restLabels),e.alpha*=s,e.label!==null&&(e.label.minZoom=p,e.label.priority=m)}resolveGlyphs(e,t){let n=e.glyphs,r=this.glyphLists[this.layer],i=0;for(let a=0;a<r.length;a++){let o=this.glyphs[r[a]],s=t.glyphs[i];this.writeGlyph(o,s,t.glyphLabels[i],e.nodes)&&(n[i]!==s&&(n[i]=s),i++)}n.length!==i&&(n.length=i)}glyphLine(e,t){let{nx:n,ny:r,nr:i}=this;e.x1=n[t.a],e.y1=r[t.a],e.x2=n[t.b],e.y2=r[t.b],e.r1=i[t.a]+t.clearA,e.r2=i[t.b]+t.clearB}writeGlyph(e,t,n,r){let i=this.view,a=i.focus;if(a!==null&&(a.nodes[e.a]!==1||a.nodes[e.b]!==1))return!1;let o=e.alpha,s=1,c=e.color,l=e.dash,u=e.width;if(this.layer===H){let t=e.hunk;if(t<0)return!1;let n=this.hState[t],r=this.hP[t],i=n===1&&r>=U&&r<fs,a=i?(r-U)/ps:0,d=this.c;switch(e.role){case gs:{if(!i||this.reduced)return!1;let t=d.nA[e.node],n=d.nB[e.node];if(s=Xo(B(a,t,n)),o*=.6*(1-B(a,n+.05,1)),s<=0||o<=0)return!1;break}case _s:if(n===0||n===1&&r<U||i&&(this.reduced?o*=V(a):s=V(B(a,.4,.9)),s<=0||o<=0))return!1;break;case vs:{if(!i)return!1;let t=d.eKind[e.edge];if(t===3&&!this.reduced)o*=1-V(B(a,z.ghostFade[0],z.ghostFade[1]));else if(t===7||t===3||this.reduced){let t=this.eStyles[e.edge][us];c=t.color,l=t.dash,u=t.width,o=1-V(this.reduced?a:B(a,d.eA[e.edge],d.eB[e.edge]))}else return!1;if(o<=0)return!1;break}case ys:if(!i||this.reduced||d.eKind[e.edge]!==3||(o*=1-B(a,z.pivotFade[0],z.pivotFade[1]),o<=0))return!1;break;default:return!1}}else if(e.role===bs&&!i.showSuggestions)return!1;else if(e.edge>=0&&r[e.a]?.visible!==!0)return!1;if(t.kind=e.kind,e.role===ys){let{nx:n,ny:r,nr:i}=this,a=n[e.a],o=r[e.a],s=i[e.a],c=n[e.b]-a,l=r[e.b]-o,u=Math.sqrt(c*c+l*l);t.x1=u>0?a+c/u*s:a,t.y1=u>0?o+l/u*s:o-s,t.x2=t.x1,t.y2=t.y1,t.r1=0,t.r2=0,t.curvature=0}else this.glyphLine(t,e),t.curvature=e.curvature;let d=1;this.filtered(e.family,e.hunk>=0?this.hFam[e.hunk]:5)&&(c=this.t.edge[5],d*=L.filtered);let f=Math.max(this.nodeLevel(e.a),this.nodeLevel(e.b));d*=this.spotlight(f),t.color=c,t.alpha=o*d,t.width=u,t.dash=l,t.progress=s;let p=this.fadesRestLabels(f);return e.label!==null&&!(p&&this.restLabels<=0)?(n.text=e.label,n.color=this.t.text[4],n.alpha=p?this.restLabels:1,n.size=F.size,n.weight=this.t.weightStrong,n.strike=!1,n.priority=1,n.minZoom=this.lodChanged,n.offset=0,t.label=n):t.label=null,t.alpha>0}};function Os(e){return new Ds(e)}var ks=new Set;function As(e={}){return Object.freeze({layer:e.layer??`union`,t:e.t??0,selectedHunk:e.selectedHunk??-1,hoveredNode:e.hoveredNode??-1,hoveredEdge:e.hoveredEdge??-1,selectedNode:e.selectedNode??-1,focus:e.focus??null,families:e.families??ks,showSuggestions:e.showSuggestions??!0,reducedMotion:e.reducedMotion??!1,emphasis:e.emphasis??1})}var js=`KgdiffCompute`,Ms=null,Ns=null,Ps=!1;function Fs(){let e=globalThis[js];return typeof e==`object`&&e?e:null}function Is(){return Ns??=Fs(),Ns}function Ls(){return Is()?`ready`:Ps?`unavailable`:`unknown`}function Rs(){let e=Is();return e?Promise.resolve(e):(Ms??=import(`@kgdiff/viewer/compute`).then(e=>(Ns=e,Ps=!1,e),e=>{throw Ms=null,Ps=!0,new p(`invalid-input`,`Diffing in the browser needs the compute module: import @kgdiff/viewer as a module, or add kgdiff-viewer-compute.js.`,{cause:e instanceof Error?e.message:String(e)})}),Ms)}var zs=8,Bs=.94,Vs=6,Hs=48,Us=Object.freeze({top:0,right:0,bottom:0,left:0});function Ws(e,t,n,r){let i=t-r.left-r.right,a=n-r.top-r.bottom;if(i<Hs||a<Hs)return 0;let o=e.width>0?i/e.width:1/0,s=e.height>0?a/e.height:1/0;return Math.min(o,s)}function Gs(e,t,n=24,r=1/0){let{width:i,height:a}=t,o={top:n,right:n,bottom:n,left:n},s=t.obstacles.filter(e=>e.width>0&&e.height>0&&e.x<i&&e.y<a&&e.x+e.width>0&&e.y+e.height>0).sort((e,t)=>t.width*t.height-e.width*e.height).slice(0,Vs),c=s.map(e=>[e.y+e.height+zs,i-e.x+zs,a-e.y+zs,e.x+e.width+zs]),l=e=>Math.min(e,r),u=o,d=-1,f=1/0,p=4**s.length;for(let t=0;t<p;t++){let r=n,o=n,s=n,p=n,m=t;for(let e of c){let t=m&3;m>>=2;let n=e[t];t===0?r=Math.max(r,n):t===1?o=Math.max(o,n):t===2?s=Math.max(s,n):p=Math.max(p,n)}let h={top:r,right:o,bottom:s,left:p},g=l(Ws(e,i,a,h));if(!(g>0))continue;let _=Math.hypot((p-o)/2,(r-s)/2),v=g>d/Bs||g>=d*Bs&&_<f-.5;(d<0||v)&&(u=h,d=Math.max(g,d),f=_)}return u}var Ks=.05,qs=16;function Js(e,t,n,r,i){let a=i=>{let a=e(i);return a!==null&&Ws(a,t,n,r)>=i},o=i;if(!a(o)){let s=Math.min(Ks,i);if(!a(s)){let i=e(1/0);return i?{k:Ws(i,t,n,r),content:i,bounds:i}:null}let c=o;for(let e=0;e<qs;e++){let e=Math.sqrt(s*c);a(e)?s=e:c=e}o=s}let s=e(o);if(!s)return null;let c=(t-r.left-r.right)/o,l=(n-r.top-r.bottom)/o,u={x:s.x+s.width/2-c/2,y:s.y+s.height/2-l/2,width:c,height:l};return{k:o,content:s,bounds:u}}function Ys(e,t,n){return{x:e.x+n.left/t,y:e.y+n.top/t,width:Math.max(0,e.width-(n.left+n.right)/t),height:Math.max(0,e.height-(n.top+n.bottom)/t)}}var Xs={"brand.tagline":`git diff for knowledge graphs`,"header.compare":`Compared versions`,"mode.label":`View mode`,"mode.overlay":`Overlay`,"mode.swipe":`Swipe`,"mode.replay":`Replay`,"mode.changes":`Changes only`,"family.added":`Added`,"family.removed":`Removed`,"family.content":`Content`,"family.structure":`Structure`,"family.identity":`Identity`,"family.neutral":`Unchanged`,"familyHint.added":`Only in the new version`,"familyHint.removed":`Only in the old version`,"familyHint.content":`Renamed, attributes, types, synonyms`,"familyHint.structure":`Moved or relinked`,"familyHint.identity":`Merged, split or re-keyed`,"familyHint.neutral":`Unchanged context`,"phase.remove":`Removed`,"phase.restructure":`Restructured`,"phase.modify":`Modified`,"phase.add":`Added`,"kind.add":`Addition`,"kind.remove":`Removal`,"kind.merge":`Merge`,"kind.split":`Split`,"kind.modify":`Edit`,"kind.relations":`Relations`,"status.unchanged":`Unchanged`,"status.added":`Added`,"status.removed":`Removed`,"status.modified":`Modified`,"stat.added":`{n} added`,"stat.removed":`{n} removed`,"stat.modified":`{n} modified`,"stat.restructured":`{n} restructured`,"stat.filter":`Show only these changes`,"stat.label":`Change summary`,"action.fit":`Fit to view`,"action.help":`Keyboard shortcuts`,"action.sidebar":`Toggle sidebar`,"action.zoomIn":`Zoom in`,"action.zoomOut":`Zoom out`,"action.settings":`Display settings`,"menu.theme":`Theme`,"menu.palette":`Colors`,"menu.language":`Language`,"theme.auto":`Auto`,"theme.light":`Light`,"theme.dark":`Dark`,"palette.default":`Default`,"palette.colorblind":`Color-blind safe`,"sidebar.label":`Change list`,"sidebar.changes":`Changes`,"sidebar.search":`Search nodes`,"sidebar.searchPlaceholder":`Search nodes…`,"sidebar.searchClear":`Clear search`,"sidebar.noResults":`No nodes match “{q}”`,"sidebar.results.one":`{n} node`,"sidebar.results.other":`{n} nodes`,"sidebar.filters":`Filter by kind of change`,"sidebar.clearFilters":`Show all`,"sidebar.filteredEmpty":`No changes match the filters.`,"sidebar.noChanges":`No changes to review.`,"sidebar.sheet":`Resize panel`,"sidebar.sheetValue":`{p} of the height`,"review.progress":`{done} of {total} reviewed`,"review.toggle":`Reviewed`,"review.mark":`Mark as reviewed`,"review.unmark":`Mark as not reviewed`,"review.complete":`All changes reviewed`,"detail.label":`Change details`,"detail.empty":`Select a change to see what happened.`,"detail.emptyHint":`Use j / k to step through changes.`,"detail.prev":`Previous change`,"detail.next":`Next change`,"detail.changes":`Changes`,"detail.changedTo":`changed to`,"detail.identity":`Overview`,"detail.id":`Id`,"detail.types":`Types`,"detail.status":`Status`,"detail.name":`Name`,"detail.before":`Before`,"detail.after":`After`,"detail.attributes":`Attributes`,"detail.aliases":`Synonyms`,"detail.hierarchy":`Hierarchy`,"detail.relations":`Relations`,"detail.composition":`Composition`,"detail.evidence":`Match evidence`,"detail.nodes":`Nodes`,"detail.showMore":`Show more`,"detail.showLess":`Show less`,"detail.unchangedAttrs.one":`{n} unchanged attribute`,"detail.unchangedAttrs.other":`{n} unchanged attributes`,"detail.moreRelations.one":`{n} more relation`,"detail.moreRelations.other":`{n} more relations`,"detail.was":`was {x}`,"detail.viaHint":`via replacement hint`,"detail.viaHeuristic":`heuristic`,"detail.confidence":`{p} confidence`,"detail.matchScore":`{p} match`,"detail.matchHint":`Matched through a replacement hint`,"detail.evidence.label":`Label`,"detail.evidence.neighbors":`Neighbours`,"detail.evidence.types":`Types`,"detail.evidence.attrs":`Attributes`,"detail.suggestion":`Possible match`,"detail.suggestion.ambiguous":`ambiguous`,"detail.suggestion.below":`below threshold`,"detail.deprecated":`Deprecated`,"detail.undeprecated":`No longer deprecated`,"detail.replacedBy":`Replaced by`,"detail.replaces":`Replaces`,"detail.unchangedNode":`Unchanged node`,"detail.implicit":`Created for a dangling relation`,"detail.collapsed":`duplicate, collapsed`,"detail.mergedFrom":`Merged from`,"detail.splitInto":`Split into`,"detail.edgeAttrs":`attributes changed`,"detail.showOnCanvas":`Show on canvas`,"replay.label":`Replay controls`,"replay.play":`Play`,"replay.pause":`Pause`,"replay.speed":`Playback speed {s}`,"replay.position":`{i} / {n}`,"replay.finished":`Replay finished`,"replay.restart":`Restart`,"replay.scrubber":`Replay position`,"swipe.divider":`Comparison divider`,"focus.context":`Context`,"focus.hops":`Context hops`,"focus.expand":`Click to expand`,"focus.expandUnavailable":`Expanding needs the kgdiff compute add-on`,"focus.expandNearest":`Show hidden context near the selection`,"announce.expanded":`Expanded {label}`,"announce.nothingHidden":`No hidden context`,"help.expand":`Show hidden context (changes only)`,"legend.title":`Legend`,"legend.toggle":`Toggle legend`,"minimap.label":`Overview`,"tooltip.relations.one":`{n} relation`,"tooltip.relations.other":`{n} relations`,"tooltip.select":`Click to select`,"help.title":`Keyboard shortcuts`,"help.close":`Close`,"help.enter":`Fly to the selected change`,"help.esc":`Clear selection, close popovers`,"help.space":`Play / pause (replay)`,"help.arrows":`Step (replay) · move divider (swipe)`,"help.theme":`Cycle theme`,"help.homeEnd":`First / last change`,"state.loading":`Preparing the diff`,"step.parse":`Parsing`,"step.match":`Matching nodes`,"step.layout":`Laying out`,"step.scene":`Drawing`,"state.identical.title":`No differences`,"state.identical.body":`Both versions have {nodes} and {edges}.`,"count.nodes.one":`{n} node`,"count.nodes.other":`{n} nodes`,"count.edges.one":`{n} edge`,"count.edges.other":`{n} edges`,"state.error.title":`This diff could not be shown`,"state.error.details":`Details`,"state.empty.title":`Nothing to compare yet`,"state.empty.body":`Load two versions of a graph to see what changed.`,"aria.canvas":`Graph diff. Before: {nb} nodes, {eb} edges. After: {na} nodes, {ea} edges. {changes}.`,"aria.changes.one":`{n} change`,"aria.changes.other":`{n} changes`,"announce.change":`Change {i} of {n}: {title}`,"announce.node":`Node {label}, {status}`,"announce.mode":`{mode} view`,"announce.cleared":`Selection cleared`,"announce.reviewed":`Marked as reviewed. {progress}`,"announce.unreviewed":`Marked as not reviewed. {progress}`,"announce.finished":`Replay finished`,"announce.chapter":`{phase}: {n} changes`,"error.formats":`Parsing text needs @kgdiff/formats (import it, or pass parsed graphs).`,"error.notLoaded":`Nothing is loaded yet.`},Zs={en:Xs,"zh-CN":{"brand.tagline":`知识图谱的 git diff`,"header.compare":`对比的版本`,"mode.label":`视图模式`,"mode.overlay":`叠加`,"mode.swipe":`滑动对比`,"mode.replay":`回放`,"mode.changes":`仅看变更`,"family.added":`新增`,"family.removed":`删除`,"family.content":`内容`,"family.structure":`结构`,"family.identity":`身份`,"family.neutral":`未变`,"familyHint.added":`只在新版本中`,"familyHint.removed":`只在旧版本中`,"familyHint.content":`改名、属性、类型、别名`,"familyHint.structure":`移动或关系改指向`,"familyHint.identity":`合并、拆分或更换 id`,"familyHint.neutral":`未变化的上下文`,"phase.remove":`删除`,"phase.restructure":`结构调整`,"phase.modify":`修改`,"phase.add":`新增`,"kind.add":`新增`,"kind.remove":`删除`,"kind.merge":`合并`,"kind.split":`拆分`,"kind.modify":`修改`,"kind.relations":`关系`,"status.unchanged":`未变`,"status.added":`新增`,"status.removed":`删除`,"status.modified":`修改`,"stat.added":`新增 {n} 处`,"stat.removed":`删除 {n} 处`,"stat.modified":`修改 {n} 处`,"stat.restructured":`结构调整 {n} 处`,"stat.filter":`只显示这类变更`,"stat.label":`变更概览`,"action.fit":`适应视图`,"action.help":`键盘快捷键`,"action.sidebar":`显示或隐藏侧栏`,"action.zoomIn":`放大`,"action.zoomOut":`缩小`,"action.settings":`显示设置`,"menu.theme":`主题`,"menu.palette":`配色`,"menu.language":`语言`,"theme.auto":`跟随系统`,"theme.light":`浅色`,"theme.dark":`深色`,"palette.default":`默认`,"palette.colorblind":`色觉友好`,"sidebar.label":`变更列表`,"sidebar.changes":`变更`,"sidebar.search":`搜索节点`,"sidebar.searchPlaceholder":`搜索节点…`,"sidebar.searchClear":`清除搜索`,"sidebar.noResults":`没有与「{q}」匹配的节点`,"sidebar.results.one":`{n} 个节点`,"sidebar.results.other":`{n} 个节点`,"sidebar.filters":`按变更类别筛选`,"sidebar.clearFilters":`显示全部`,"sidebar.filteredEmpty":`没有符合筛选条件的变更。`,"sidebar.noChanges":`没有需要审阅的变更。`,"sidebar.sheet":`调整面板高度`,"sidebar.sheetValue":`占高度的 {p}`,"review.progress":`已审阅 {done} / {total}`,"review.toggle":`已审阅`,"review.mark":`标记为已审阅`,"review.unmark":`标记为未审阅`,"review.complete":`全部变更已审阅`,"detail.label":`变更详情`,"detail.empty":`选择一项变更,查看具体发生了什么。`,"detail.emptyHint":`按 j / k 逐项浏览变更。`,"detail.prev":`上一项变更`,"detail.next":`下一项变更`,"detail.changes":`变更内容`,"detail.changedTo":`改为`,"detail.identity":`基本信息`,"detail.id":`ID`,"detail.types":`类型`,"detail.status":`状态`,"detail.name":`名称`,"detail.before":`变更前`,"detail.after":`变更后`,"detail.attributes":`属性`,"detail.aliases":`别名`,"detail.hierarchy":`层级`,"detail.relations":`关系`,"detail.composition":`组成`,"detail.evidence":`匹配依据`,"detail.nodes":`节点`,"detail.showMore":`展开`,"detail.showLess":`收起`,"detail.unchangedAttrs.one":`{n} 个未变属性`,"detail.unchangedAttrs.other":`{n} 个未变属性`,"detail.moreRelations.one":`另外 {n} 条关系`,"detail.moreRelations.other":`另外 {n} 条关系`,"detail.was":`原为{x}`,"detail.viaHint":`依据替代声明`,"detail.viaHeuristic":`启发式推断`,"detail.confidence":`置信度 {p}`,"detail.matchScore":`匹配度 {p}`,"detail.matchHint":`依据替代声明匹配`,"detail.evidence.label":`名称`,"detail.evidence.neighbors":`邻居`,"detail.evidence.types":`类型`,"detail.evidence.attrs":`属性`,"detail.suggestion":`可能是同一节点`,"detail.suggestion.ambiguous":`存在歧义`,"detail.suggestion.below":`低于阈值`,"detail.deprecated":`已弃用`,"detail.undeprecated":`取消弃用`,"detail.replacedBy":`替代为`,"detail.replaces":`替代了`,"detail.unchangedNode":`未变节点`,"detail.implicit":`因悬空关系自动创建`,"detail.collapsed":`重复关系,已合并`,"detail.mergedFrom":`合并自`,"detail.splitInto":`拆分为`,"detail.edgeAttrs":`属性有变化`,"detail.showOnCanvas":`在画布中显示`,"replay.label":`回放控制`,"replay.play":`播放`,"replay.pause":`暂停`,"replay.speed":`播放速度 {s}`,"replay.position":`{i} / {n}`,"replay.finished":`回放结束`,"replay.restart":`重新播放`,"replay.scrubber":`回放进度`,"swipe.divider":`对比分隔线`,"focus.context":`上下文`,"focus.hops":`上下文跳数`,"focus.expand":`点击展开`,"focus.expandUnavailable":`展开需要 kgdiff 计算模块(kgdiff-viewer-compute.js)`,"focus.expandNearest":`展开选中项附近的隐藏节点`,"announce.expanded":`已展开{label}`,"announce.nothingHidden":`没有隐藏的节点`,"help.expand":`展开隐藏节点(仅看变更)`,"legend.title":`图例`,"legend.toggle":`显示或隐藏图例`,"minimap.label":`全局缩略图`,"tooltip.relations.one":`{n} 条关系`,"tooltip.relations.other":`{n} 条关系`,"tooltip.select":`点击选中`,"help.title":`键盘快捷键`,"help.close":`关闭`,"help.enter":`定位到选中的变更`,"help.esc":`取消选择,关闭弹出层`,"help.space":`播放 / 暂停(回放)`,"help.arrows":`单步(回放)· 移动分隔线(滑动对比)`,"help.theme":`切换主题`,"help.homeEnd":`第一项 / 最后一项变更`,"state.loading":`正在准备对比`,"step.parse":`解析文件`,"step.match":`匹配节点`,"step.layout":`计算布局`,"step.scene":`绘制`,"state.identical.title":`没有差异`,"state.identical.body":`两个版本均有 {nodes}、{edges}。`,"count.nodes.one":`{n} 个节点`,"count.nodes.other":`{n} 个节点`,"count.edges.one":`{n} 条关系`,"count.edges.other":`{n} 条关系`,"state.error.title":`无法显示这份对比`,"state.error.details":`详细信息`,"state.empty.title":`还没有可对比的内容`,"state.empty.body":`载入一个图谱的两个版本,查看发生了哪些变化。`,"aria.canvas":`图谱对比。变更前:{nb} 个节点、{eb} 条关系;变更后:{na} 个节点、{ea} 条关系;{changes}。`,"aria.changes.one":`共 {n} 项变更`,"aria.changes.other":`共 {n} 项变更`,"announce.change":`第 {i} 项变更,共 {n} 项:{title}`,"announce.node":`节点「{label}」,{status}`,"announce.mode":`{mode}视图`,"announce.cleared":`已取消选择`,"announce.reviewed":`已标记为已审阅。{progress}`,"announce.unreviewed":`已标记为未审阅。{progress}`,"announce.finished":`回放结束`,"announce.chapter":`{phase}:{n} 项变更`,"error.formats":`解析文本需要 @kgdiff/formats(请引入它,或传入已解析的图)。`,"error.notLoaded":`尚未载入任何内容。`}};function Qs(e){if(!e)return null;let t=e.trim().toLowerCase();return t===`en`||t.startsWith(`en-`)?`en`:t===`zh`||t.startsWith(`zh`)?`zh-CN`:null}function $s(){let e=typeof navigator<`u`?navigator:void 0;for(let t of e?.languages??[e?.language??``]){let e=Qs(t);if(e)return e}return`en`}var ec=new Map;function tc(e,t){let n=ec.get(t);return n===void 0&&(n=new Intl.NumberFormat(t),ec.set(t,n)),n.format(e)}function nc(e){return`${Math.round(Math.max(0,Math.min(1,e))*100)}%`}function W(e,t,n){let r=(Zs[e]??Zs.en)[t]??Xs[t];return n?r.replace(/\{(\w+)\}/g,(t,r)=>{let i=n[r];return i===void 0?t:typeof i==`number`?tc(i,e):i}):r}function rc(e,t,n,r){return W(e,`${t}.${new Intl.PluralRules(e).select(n)===`one`?`one`:`other`}`,{...r,n})}function ic(e,t){return t===`zh-CN`?`「${e}」`:`“${e}”`}function ac(e){return{locale:e,t:(t,n)=>W(e,t,n),plural:(t,n,r)=>rc(e,t,n,r),num:t=>tc(t,e),quote:t=>ic(t,e)}}var oc=[`remove`,`restructure`,`modify`,`add`],sc=Object.freeze({items:[],order:[],rank:new Map,itemOf:new Map});function cc(e,t){let n=new Map(oc.map(e=>[e,[]]));for(let r of e.hunks)t.size>0&&!t.has(r.family)||n.get(r.phase)?.push(r.index);let r=[],i=[],a=new Map,o=new Map;for(let e of oc){let t=n.get(e)??[];if(t.length!==0){r.push({kind:`header`,phase:e,count:t.length});for(let e of t)a.set(e,i.length),o.set(e,r.length),i.push(e),r.push({kind:`row`,hunk:e})}}return{items:r,order:i,rank:a,itemOf:o}}function lc(e){let t={added:0,removed:0,content:0,structure:0,identity:0};for(let n of e.hunks)t[n.family]++;return t}function uc(e,t,n){let{order:r,rank:i}=e;if(r.length===0)return-1;let a=i.get(t);if(a!==void 0)return r[Math.min(r.length-1,Math.max(0,a+n))];if(t<0)return n>0?r[0]:r[r.length-1];if(n>0)return r.find(e=>e>t)??r[r.length-1];let o=r[0];for(let e of r)e<t&&(o=e);return o}var dc=[`overlay`,`swipe`,`replay`,`changes`],fc=[`auto`,`light`,`dark`],pc=[`default`,`colorblind`],mc=[`full`,`none`],hc=[`auto`,`full`,`mini`,`none`],gc=fc;function _c(e){return dc.includes(e)?e:null}function vc(e){return fc.includes(e)?e:null}function yc(e){return pc.includes(e)?e:null}function bc(e){return typeof e==`string`?Qs(e):null}function xc(e){return mc.includes(e)?e:null}function Sc(e){return hc.includes(e)?e:null}function Cc(e){let t=typeof e==`string`&&e.trim()!==``?Number(e):e;return typeof t==`number`&&Number.isFinite(t)&&t>=0?t:null}function wc(e){if(typeof e!=`object`||!e)return;let t=e,n=_c(t.mode),r=vc(t.theme),i=yc(t.palette),a=bc(t.locale),o=[`mode`,`theme`,`palette`,`locale`].filter(e=>t[e]!==void 0&&{mode:n,theme:r,palette:i,locale:a}[e]===null);return o.length>0&&typeof console<`u`&&console.warn(`[kgdiff] ignoring invalid report view preferences: ${o.join(`, `)}`),{...n?{mode:n}:{},...r?{theme:r}:{},...i?{palette:i}:{},...a?{locale:a}:{}}}function Tc(e){return typeof e.text==`string`}function Ec(e){if(typeof e!=`object`||!e)return!1;let t=e;return Array.isArray(t.nodes)&&(t.edges===void 0||Array.isArray(t.edges))}var Dc=null;function Oc(){return Dc??=import(`@kgdiff/formats`).catch(e=>{throw Dc=null,new p(`invalid-input`,W(`en`,`error.formats`),{cause:e instanceof Error?e.message:String(e)})}),Dc}async function kc(e,t){if(typeof e!=`object`||!e)throw new p(`invalid-input`,`load(): \`${t}\` must be a GraphInput, a KGraph or { text, filename }.`);if(Tc(e)){let{parseGraph:t}=await Oc(),n=t(e.text,{...e.parse,...e.filename===void 0?{}:{filename:e.filename}});return{graph:n.graph,meta:n.graph.meta??{},...e.filename===void 0?{}:{filename:e.filename}}}if(Dt(e))return{graph:e,meta:e.meta};if(Ec(e))return{graph:e,meta:e.meta??{}};throw new p(`invalid-input`,`load(): \`${t}\` must be a GraphInput ({ nodes, edges }), a KGraph or { text, filename }.`)}function Ac(e){let t=e.split(/[?#]/)[0]??e;return t.slice(Math.max(t.lastIndexOf(`/`),t.lastIndexOf(`\\`))+1)||e}function G(e){return typeof e==`string`&&e.trim()!==``?e.trim():void 0}function jc(e,t,n,r){return G(n)??G(e.name)??(r?Ac(r):void 0)??(G(e.source)?Ac(e.source):void 0)??t}async function Mc(e,t){if(typeof e!=`object`||!e)throw new p(`invalid-input`,`load() expects { before, after, … }.`);let{before:n,after:r}=e;if(n===void 0||r===void 0)throw new p(`invalid-input`,"load() needs both `before` and `after`.");let i=Rs();(Tc(n)||Tc(r))&&await t(`parse`);let a=await kc(n,`before`),o=await kc(r,`after`),s=await i;await t(`match`);let c=s.diff(a.graph,o.graph,e.diff);await t(`layout`);let l=s.layoutDiff(c,e.layout),u=G(c.before.meta.version),d=G(c.after.meta.version);return{diff:c,layout:l,layoutOptions:e.layout,names:{before:jc(a.meta,`before`,e.names?.before,a.filename),after:jc(o.meta,`after`,e.names?.after,o.filename)},versions:{...u?{before:u}:{},...d?{after:d}:{}},...G(e.title)?{title:G(e.title)}:{}}}async function Nc(e,t){await t(`match`);let n=Ot(e.diff);await t(`layout`);let r=ra(e.layout),i=G(n.before.meta.version),a=G(n.after.meta.version),o=e.meta,s=wc(e.view);return{diff:n,layout:r,layoutOptions:void 0,names:{before:jc(n.before.meta,`before`,o?.before?.name),after:jc(n.after.meta,`after`,o?.after?.name)},versions:{...i?{before:i}:{},...a?{after:a}:{}},...G(o?.title)?{title:G(o?.title)}:{},...s?{view:s}:{}}}var Pc={createRenderer:ji,createMinimap:Mi};function Fc(){return Pc}var Ic=[.5,1,2,4],Lc=.5,Rc=class{timeline;#e=0;#t=1;#n=!1;#r;#i;constructor(e){this.timeline=e;let t=e.mode===`chapters`?e.chapters.map(e=>e.end):e.windows.map(e=>e.end);this.#r=[...new Set(t)].sort((e,t)=>e-t),this.#i=Float64Array.from(e.windows.map(e=>e.start)).sort()}get t(){return this.#e}get duration(){return this.timeline.duration}get speed(){return this.#t}get playing(){return this.#n}get finished(){return!this.#n&&this.duration>0&&this.#e>=this.duration}get progress(){return this.duration>0?this.#e/this.duration:0}setSpeed(e){let t=Ic.find(t=>t===e);t!==void 0&&(this.#t=t)}cycleSpeed(){let e=Ic.indexOf(this.#t);return this.#t=Ic[(e+1)%Ic.length],this.#t}play(){this.duration<=0||(this.#e>=this.duration&&(this.#e=0),this.#n=!0)}pause(){this.#n=!1}seek(e){this.#e=Number.isFinite(e)?Math.min(this.duration,Math.max(0,e)):0}advance(e){if(!this.#n||!(e>0))return!1;let t=this.#e;return this.#e=Math.min(this.duration,this.#e+Math.min(e,100)*this.#t),this.#e>=this.duration&&(this.#n=!1),this.#e!==t}step(e){this.#n=!1;let t=this.#e;if(e>0){let e=this.#r.find(e=>e>t+Lc);this.#e=e??this.duration}else{let e=0;for(let n of this.#r)if(n<t-Lc)e=n;else break;this.#e=e}}windowEnd(e){let t=this.timeline.windows.find(t=>t.hunk===e);return t===void 0?null:t.end}position(e=this.#e){let t=0,n=this.#i.length;for(;t<n;){let r=t+n>>1;this.#i[r]<e?t=r+1:n=r}return t}get total(){return this.timeline.windows.length}activeTarget(e=this.#e){return this.timeline.mode===`chapters`?{kind:`chapter`,index:this.timeline.chapters.findIndex(t=>e>=t.start&&e<t.end)}:{kind:`hunk`,index:this.activeHunk(e)}}activeHunk(e=this.#e){let t=-1,n=-1/0;for(let r of this.timeline.windows)e>=r.start&&e<r.end&&r.start>=n&&(t=r.hunk,n=r.start);return t}},zc=`kgdiff:review:`;function Bc(e,t){return`${zc}${e}→${t}`}function Vc(){try{return typeof localStorage<`u`?localStorage:null}catch{return null}}var Hc=class{#e=[];#t=new Set;#n=[];#r;#i;#a;#o;constructor(e,t,n){this.#i=e,this.#a=t,this.#o=n,this.#r=new Set(n),this.#s()}#s(){this.#e=[],this.#t=new Set,this.#n=[];for(let e of this.#c())this.#t.has(e)||this.#n.includes(e)||(this.#r.has(e)?(this.#t.add(e),this.#e.push(e)):this.#n.push(e))}reload(e){if(e!==null&&e!==this.#a)return!1;let t=this.#e.join(`
|
|
1
|
+
var KgdiffViewer=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e){for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n<32||n===34||n===92||n>=55296&&n<=57343)return!0}return!1}function n(e){return t(e)?JSON.stringify(e):`"${e}"`}function r(e,t,r){return`[${n(e)},${n(t)},${n(r)}]`}function i(e){return Array.isArray(e)}function a(){return{}}function o(e,t,n){t===`__proto__`?Object.defineProperty(e,t,{value:n,enumerable:!0,writable:!0,configurable:!0}):e[t]=n}function s(e,t){return Object.hasOwn(e,t)?e[t]:void 0}function c(e){return Object.keys(e).filter(t=>e[t]!==void 0)}function l(e){return c(e).sort()}function u(e){return typeof e!=`object`||!e?e:i(e)?e.map(u):d(e)}function d(e){let t=a();for(let n of l(e))o(t,n,u(e[n]));return t}function f(e){return JSON.stringify(u(e))}var p=class extends Error{code;details;name=`KgdiffError`;constructor(e,t,n){super(t),this.code=e,this.details=n}};function m(e,t){return e<t?-1:+(e>t)}function h(e){if(e.length<=1){let t=e[0];return t===void 0||t===``?[]:[t]}let t=[...new Set(e)].filter(e=>e!==``);return t.length>1&&t.sort(),t}function g(e,t,n){let r=e.get(t);return r===void 0&&(r=n(),e.set(t,r)),r}function _(e,t,n){let r=e.get(t);r?r.push(n):e.set(t,[n])}var v=Object.freeze([]);function y(e,t){return t===void 0?0:(e.outgoing.get(t)?.length??0)+(e.incoming.get(t)?.length??0)}function b(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var x=/^[\x20-\x7e]*$/;function S(e){return x.test(e)?e:e.normalize(`NFC`)}var ee=/^\d+$/;function te(e){if(!e.includes(`%`))return e;try{return decodeURIComponent(e)}catch{return e}}function ne(e){let t=re.get(e);return t===void 0&&(re.size>=ie&&re.clear(),t=oe(e),re.set(e,t)),t}var re=new Map,ie=4096,ae=/^https?:\/\/purl\.obolibrary\.org\/obo\/([A-Za-z][A-Za-z0-9]*)_(\d+)$/;function oe(e){let t=ae.exec(e);if(t)return`${t[1]}:${t[2]}`;let n=e.length;for(;n>0&&`#/:`.includes(e.charAt(n-1));)n--;let r=e.slice(0,n),i=Math.max(r.lastIndexOf(`#`),r.lastIndexOf(`/`),r.lastIndexOf(`:`)),a=r.slice(i+1);if(a===``||ee.test(a))return S(e);let o=te(a).replaceAll(`_`,` `).replace(/\s+/g,` `).trim();return S(o===``?e:o)}var se=Object.freeze([`rdfs:subClassOf`,`http://www.w3.org/2000/01/rdf-schema#subClassOf`,`rdfs:subPropertyOf`,`http://www.w3.org/2000/01/rdf-schema#subPropertyOf`,`skos:broader`,`http://www.w3.org/2004/02/skos/core#broader`,`is_a`,`subClassOf`,`parent`]),ce=Object.freeze({strategy:`auto`,threshold:.82,suggestThreshold:.6,maxCandidates:8}),le=new Set([`id`,`auto`,`similarity`]),ue=new Set([`structure`,`id`]);function C(e,t){throw new p(`invalid-input`,e,{option:t})}function de(e,t,n){return e===void 0?t:(typeof e==`number`&&e>=0&&e<=1||C(`${n} must be a number between 0 and 1 (got ${String(e)})`,n),e)}function fe(e,t,n){return e===void 0?[...t]:((!Array.isArray(e)||e.some(e=>typeof e!=`string`))&&C(`${n} must be an array of strings`,n),[...new Set(e)])}function pe(e){if(e===void 0)return ce;typeof e==`object`&&e||C(`match options must be an object`,`match`);let t=e.strategy??ce.strategy;le.has(t)||C(`match.strategy must be 'id', 'auto' or 'similarity' (got ${String(t)})`,`match.strategy`);let n=e.maxCandidates??ce.maxCandidates;return(!Number.isInteger(n)||n<1)&&C(`match.maxCandidates must be a positive integer (got ${String(n)})`,`match.maxCandidates`),{strategy:t,threshold:de(e.threshold,ce.threshold,`match.threshold`),suggestThreshold:de(e.suggestThreshold,ce.suggestThreshold,`match.suggestThreshold`),maxCandidates:n}}function me(e,t=`structure`){return e===void 0?t:(typeof e==`string`&&ue.has(e)||C(`edgeIdentity must be 'structure' or 'id' (got ${String(e)})`,`edgeIdentity`),e)}function he(e){e===void 0||typeof e==`object`&&e||C(`options must be an object`,`options`);let t=e??{};for(let e of[`detectMerges`,`detectSplits`])t[e]!==void 0&&typeof t[e]!=`boolean`&&C(`${e} must be a boolean`,e);return{match:pe(t.match),edgeIdentity:me(t.edgeIdentity),hierarchyPredicates:fe(t.hierarchyPredicates,se,`hierarchyPredicates`),detectMerges:t.detectMerges??!0,detectSplits:t.detectSplits??!0,ignoreAttrs:fe(t.ignoreAttrs,[],`ignoreAttrs`).sort()}}var ge=Object.freeze({}),_e=new Set([`create`,`drop`,`error`]);function ve(e,t){throw new p(`invalid-input`,e,t)}function ye(e){let{format:t,version:n}=e;if(typeof t==`string`&&t.startsWith(`kgdiff.`)){if(t!==`kgdiff.graph`)throw new p(`unsupported-version`,`Expected a kgdiff graph (format "kgdiff.graph"), got format "${t}"`,{format:t});if(n!==1)throw new p(`unsupported-version`,`Unsupported graph version ${String(n)}; this reader supports version 1`,{version:n})}}function be(e){if(typeof e==`string`)return e===``?void 0:e;if(typeof e==`number`&&Number.isFinite(e))return String(e)}function xe(e,t){return t===void 0?{what:`Node "${e}"`,ref:e}:{what:`Edge ${e} → ${t}`,ref:`${e} → ${t}`}}function Se(e,t,n,r){let{what:i,ref:a}=xe(e,t);return ve(`${i}: ${n} must be ${r}`,{ref:a})}function Ce(e,t,n,r){if(e!=null)return typeof e!=`string`&&Se(t,n,r,`a string`),e}function we(e,t,n){return e==null?v:typeof e==`string`?[e]:((!Array.isArray(e)||e.some(e=>typeof e!=`string`))&&Se(t,void 0,n,`an array of strings`),e)}var Te=1e3;function Ee(e,t,n){switch(typeof e){case`string`:case`boolean`:return e;case`number`:return Number.isFinite(e)?e:String(e);case`bigint`:return String(e);case`undefined`:case`function`:case`symbol`:n();return}if(e===null)return null;if(t>=Te)throw new p(`invalid-input`,`Attribute values may be nested at most ${Te} levels deep (or the value is cyclic)`);if(e instanceof Date)return Number.isNaN(e.getTime())?`Invalid Date`:e.toISOString();if(Array.isArray(e))return e.map(e=>Ee(e,t+1,n)??null);let r=e.toJSON;if(typeof r==`function`)return Ee(r.call(e),t+1,n);let i=a();for(let r of Object.keys(e)){let a=e[r],s=typeof a==`string`||typeof a==`boolean`||typeof a==`number`&&Number.isFinite(a)?a:Ee(a,t+1,n);s!==void 0&&o(i,r,s)}return i}function De(e,t,n,r){if(e==null)return;b(e)||Se(t,n,`attrs`,`an object`);let i=0,a=Ee(e,0,()=>i++);if(i>0){let{what:e,ref:a}=xe(t,n);r.push({code:`invalid-attr`,message:`${e}: ${i} attribute value(s) that are not JSON (function, symbol or undefined) were dropped`,ref:a})}return a}function Oe(e){if(!b(e))return;let{x:t,y:n}=e;return typeof t==`number`&&typeof n==`number`&&Number.isFinite(t)&&Number.isFinite(n)?{x:t,y:n}:void 0}function ke(e,t,n){let r=we(e.type,t,`type`),i=we(e.types,t,`types`),a=we(e.aliases,t,`aliases`),o=i.length?[...r,...i]:r,s={id:t,types:o.length?o.map(S):v,aliases:a.length?a.map(S):v,replaces:we(e.replaces,t,`replaces`),replacedBy:we(e.replacedBy,t,`replacedBy`),implicit:e.implicit===!0},c=Ce(e.label,t,void 0,`label`);c&&(s.label=S(c));let l=De(e.attrs,t,void 0,n);l&&(s.attrs=l),e.deprecated!==void 0&&e.deprecated!==null&&(typeof e.deprecated!=`boolean`&&Se(t,void 0,`deprecated`,`a boolean`),s.deprecated=e.deprecated);let u=Oe(e.position);return u&&(s.position=u),s}function Ae(e,t){return e===void 0?t:t===void 0?e:f(t)>f(e)?t:e}function je(e,t){if(!e||!t)return e??t;let n=a();for(let r of new Set([...Object.keys(e),...Object.keys(t)])){let i=Ae(s(e,r),s(t,r));i!==void 0&&o(n,r,i)}return n}function Me(e,t){let n=Ae(e.label,t.label);n!==void 0&&(e.label=n);let r=Ae(e.deprecated,t.deprecated);r!==void 0&&(e.deprecated=r);let i=Ae(e.position,t.position);i&&(e.position=i);let a=je(e.attrs,t.attrs);a&&(e.attrs=a),e.types=[...e.types,...t.types],e.aliases=[...e.aliases,...t.aliases],e.replaces=[...e.replaces,...t.replaces],e.replacedBy=[...e.replacedBy,...t.replacedBy],e.implicit=e.implicit&&t.implicit}function Ne(e){let t=e.label??e.id,n=h(e.aliases),r=n.indexOf(t);r>=0&&n.splice(r,1);let i={id:e.id,label:t,types:e.types.length?h(e.types):v,aliases:n.length?n:v,attrs:e.attrs??ge,deprecated:e.deprecated??!1,replaces:e.replaces.length?h(e.replaces):v,replacedBy:e.replacedBy.length?h(e.replacedBy):v,implicit:e.implicit};return e.position&&(i.position=e.position),i}function Pe(e){return f([e.label,e.attrs])}function Fe(e,t){return t.id===void 0?{key:e,source:t.source,target:t.target,predicate:t.predicate,label:t.label,attrs:t.attrs}:{key:e,id:t.id,source:t.source,target:t.target,predicate:t.predicate,label:t.label,attrs:t.attrs}}function Ie(e){return typeof e==`object`&&!!e&&e.nodes instanceof Map&&e.edges instanceof Map}function Le(e,t={}){b(e)&&ye(e),b(e)&&Array.isArray(e.nodes)||ve(`normalize expects a graph of the form { nodes: [...], edges: [...] }`),e.edges!==void 0&&e.edges!==null&&!Array.isArray(e.edges)&&ve(`graph.edges must be an array`);let n=me(t.edgeIdentity),i=t.danglingEdges??`create`;_e.has(i)||ve(`danglingEdges must be 'create', 'drop' or 'error' (got ${String(i)})`);let a=[],o=new Map;for(let t of e.nodes){b(t)||ve(`graph.nodes must contain objects`);let e=be(t.id);if(e===void 0){a.push({code:`empty-id`,message:`Dropped a node without an id`});continue}let n=ke(t,e,a),r=o.get(e);r?(Me(r,n),a.push({code:`duplicate-node`,message:`Node "${e}" is declared more than once; the declarations were merged`,ref:e})):o.set(e,n)}let s=new Map,c=[];for(let t of e.edges??[]){b(t)||ve(`graph.edges must contain objects`);let e=t,n=be(e.source),r=be(e.target);if(n===void 0||r===void 0){a.push({code:`empty-id`,message:`Dropped an edge with an empty endpoint`});continue}let l=Ce(e.predicate,n,r,`predicate`)??``,u=Ce(e.label,n,r,`label`),d=u===void 0?void 0:S(u);if(d===void 0&&(d=s.get(l),d===void 0&&(d=ne(l),s.set(l,d))),(!o.has(n)||!o.has(r))&&(Re(n,l,r,i,o,a),i===`drop`))continue;let f=be(e.id),p=De(e.attrs,n,r,a)??ge;c.push(f===void 0?{key:``,source:n,target:r,predicate:l,label:d,attrs:p}:{key:``,id:f,source:n,target:r,predicate:l,label:d,attrs:p})}let l=new Map;for(let[e,t]of o)l.set(e,Ne(t));let u=[],d=new Map,f=new Map;for(let e of c){let t=n===`id`&&e.id!==void 0,i=t?e.id:r(e.source,e.predicate,e.target),a=t?d:f,o=a.get(i);if(o)o.more?o.more.push(e):o.more=[e];else{let n={base:i,idKeyed:t,first:e};a.set(i,n),u.push(n)}}let p=n===`id`?new Set:void 0,h=e=>{if(!p)return e;let t=e;for(let n=2;p.has(t);n++)t=`${e}#${n}`;return p.add(t),t};for(let e of[!0,!1])for(let t of u){if(t.idKeyed!==e)continue;let{base:n,first:r,more:i}=t;if(!i){r.key=h(n),t.edge=r;continue}let o=[],s=(e,t)=>{o.push(Fe(h(e),t))};e?(s(n,ze([r,...i])),a.push({code:`duplicate-edge`,message:`Edge id "${n}" is used ${i.length+1} times; the declarations were merged`,ref:n})):Be(n,[r,...i],s,a),t.edges=o}let g=new Map;for(let e of u)if(e.edge)g.set(e.edge.key,e.edge);else for(let t of e.edges??[])g.set(t.key,t);let y=new Map,x=new Map;for(let e of g.values())_(y,e.source,e.key),_(x,e.target,e.key);for(let e of l.keys())y.has(e)||y.set(e,v),x.has(e)||x.set(e,v);return a.sort((e,t)=>m(e.code,t.code)||m(e.ref??``,t.ref??``)||m(e.message,t.message)),{meta:b(e.meta)?{...e.meta}:{},nodes:l,edges:g,outgoing:y,incoming:x,edgeIdentity:n,issues:a}}function Re(e,t,n,i,a,o){for(let s of e===n?[e]:[e,n])if(!a.has(s)){if(i===`error`)throw new p(`dangling-edge`,`Edge ${r(e,t,n)} points to the missing node "${s}"`,{source:e,predicate:t,target:n,missing:s});i===`create`&&a.set(s,{id:s,types:[],aliases:[],replaces:[],replacedBy:[],implicit:!0}),o.push({code:`dangling-edge`,message:i===`create`?`Edge endpoint "${s}" is not declared; an implicit node was created`:`Dropped an edge whose endpoint "${s}" is not declared`,ref:s})}}function ze(e){let t=e=>f([e.source,e.predicate,e.target,e.label]),n=e[0],r=n.attrs;for(let i=1;i<e.length;i++){let a=e[i];t(a)>t(n)&&(n=a),r=je(r,a.attrs)}return{...n,attrs:r??ge}}function Be(e,t,n,r){let i=new Map,a=0;for(let e of t){let t=Pe(e),n=i.get(t);n?(a++,e.id!==void 0&&(n.id===void 0||e.id<n.id)&&i.set(t,e)):i.set(t,e)}let o=[...i].map(([e,t])=>({draft:t,content:e})).sort((e,t)=>m(e.content,t.content));o.forEach(({draft:t},r)=>{n(r===0?e:`${e}#${r+1}`,t)}),a>0&&r.push({code:`duplicate-edge`,message:`Edge ${e} is declared ${a+1} times with identical content; the copies were collapsed`,ref:e}),o.length>1&&r.push({code:`duplicate-edge`,message:`Edge ${e} has ${o.length} parallel copies; they are keyed #2, #3…`,ref:e})}function Ve(e){return{id:e.id,label:e.label,types:e.types,aliases:e.aliases,attrs:e.attrs,deprecated:e.deprecated,replaces:e.replaces,replacedBy:e.replacedBy,implicit:e.implicit,...e.position?{position:e.position}:{}}}var He=Object.freeze([]);function Ue(e){let t;return()=>(t??=e(),t)}function We(e,t){let n=new Map;for(let r of e){let e=t(r);e!==void 0&&n.set(e,r)}return n}function Ge(e,t,n){let r=Ue(()=>We(e,e=>e.id)),i=Ue(()=>We(e,e=>e.beforeId)),a=Ue(()=>We(e,e=>e.afterId)),o=Ue(()=>We(t,e=>e.id)),s=Ue(()=>We(n,e=>e.id)),c=Ue(()=>{let e=new Map;for(let n of t){let t=new Set([n.source,n.target]);n.sourceBefore!==void 0&&t.add(n.sourceBefore),n.targetBefore!==void 0&&t.add(n.targetBefore);for(let r of t){let t=e.get(r);t?t.push(n):e.set(r,[n])}}return e});return{node:e=>r().get(e),edge:e=>o().get(e),hunk:e=>s().get(e),nodeByBefore:e=>i().get(e),nodeByAfter:e=>a().get(e),edgesOf:e=>c().get(e)??He}}function Ke(e,t,n){let r=e.after??e.before,i={id:e.id,status:e.status,facets:e.facets,label:r.label,types:r.types,degree:{before:y(t,e.beforeId),after:y(n,e.afterId)}};return e.beforeId!==void 0&&(i.beforeId=e.beforeId),e.afterId!==void 0&&(i.afterId=e.afterId),e.before&&(i.before=e.before),e.after&&(i.after=e.after),e.hunk!==void 0&&(i.hunk=e.hunk),i}function qe(e){let t={id:e.id,source:e.source,target:e.target,predicate:e.predicate,label:e.label,status:e.status,facets:e.facets,hierarchical:e.hierarchical};return e.sourceBefore!==void 0&&(t.sourceBefore=e.sourceBefore),e.targetBefore!==void 0&&(t.targetBefore=e.targetBefore),e.predicateBefore!==void 0&&(t.predicateBefore=e.predicateBefore),e.beforeKey!==void 0&&(t.beforeKey=e.beforeKey),e.afterKey!==void 0&&(t.afterKey=e.afterKey),e.before&&(t.before=e.before),e.after&&(t.after=e.after),e.hunk!==void 0&&(t.hunk=e.hunk),t}function w(e){return String(Math.trunc(e)).replace(/\B(?=(\d{3})+(?!\d))/g,`,`)}function Je(e){return`${Math.round(e*100)}%`}var Ye={node:[`node`,`nodes`],relation:[`relation`,`relations`],attribute:[`attribute`,`attributes`],type:[`type`,`types`],synonym:[`synonym`,`synonyms`],duplicate:[`duplicate`,`duplicates`]},Xe={node:[`个`,`节点`],relation:[`条`,`关系`],attribute:[`个`,`属性`],type:[`个`,`类型`],synonym:[`个`,`别名`],duplicate:[`条`,`重复关系`]};function Ze(e,t,n){let r=[];return e&&r.push(`+${w(e)}`),t&&r.push(`−${w(t)}`),n&&r.push(`~${w(n)}`),r.join(` `)}var Qe=(()=>{let e=e=>{let[t,n]=e.split(nt);return n===void 0?`“${e}”`:`“${t}” (${n})`},t=(e,t)=>`${w(e)} ${Ye[t][e===1?0:1]}`,n=(t,n)=>{let r=t.slice(0,2).map(e);return n<=1?r[0]??``:n===2?`${r[0]} and ${r[1]}`:`${r[0]}, ${r[1]} and ${w(n-2)} more`},r=n=>(r,i,a)=>{let o=e(r[0]??``),s=a?t(a,`relation`):``;if(i<=1)return s?`${n} ${o} and ${s}`:`${n} ${o}`;if(i===2){let t=e(r[1]??``);return s?`${n} ${o}, ${t} and ${s}`:`${n} ${o} and ${t}`}let c=`${w(i-1)} more nodes`;return s?`${n} ${o}, ${c} and ${s}`:`${n} ${o} and ${c}`},i=(t,n,r)=>`${e(t)} —${n}→ ${e(r)}`;return{quote:e,names:n,delta:(e,t,n,r)=>{let i=t+n+r;return i?`${Ze(t,n,r)} ${Ye[e][i===1?0:1]}`:``},facets:{rekey:`Re-keyed`,rename:`Renamed`,mergedInto:`Merged into`,mergeTarget:`Merge target`,splitFrom:`Split from`,splitInto:`Split into`,move:`Moved`,deprecate:`Deprecated`,replacement:`Replacement links`,types:`Types changed`,aliases:`Synonyms changed`,attrs:`Attributes changed`,retarget:`Retargeted`,predicate:`Relation type changed`,label:`Relabeled`,collapsed:`Collapsed duplicate`},title:{merged:(e,t)=>`Merged ${e} into ${t}`,split:(e,t)=>`Split ${e} into ${t}`,added:r(`Added`),removed:r(`Removed`),renamed:(t,n)=>`Renamed ${e(t)} → ${e(n)}`,moved:(t,n)=>`Moved ${e(t)} under ${n}`,detached:(t,n)=>`Detached ${e(t)} from ${n}`,deprecated:t=>`Deprecated ${e(t)}`,restored:t=>`Restored ${e(t)}`,rekeyed:t=>`Changed the id of ${e(t)}`,attrs:t=>`Updated attributes of ${e(t)}`,types:t=>`Changed the type of ${e(t)}`,aliases:t=>`Updated synonyms of ${e(t)}`,replacement:t=>`Updated replacement links of ${e(t)}`,edited:t=>`Edited ${e(t)}`,pointsTo:(t,n,r,i)=>`${e(t)}: ${n} now points to ${e(r)} (was ${e(i)})`,comesFrom:(t,n,r,i)=>`${e(t)}: ${n} now comes from ${e(r)} (was ${e(i)})`,predicate:(t,n,r,i)=>`${e(t)} → ${e(n)}: ${r} is now ${i}`,edgeAdded:(e,t,n)=>`Added ${i(e,t,n)}`,edgeRemoved:(e,t,n)=>`Removed ${i(e,t,n)}`,edgeEdited:(e,t,n)=>`Edited ${i(e,t,n)}`,relationsAdded:(n,r)=>`Added ${t(n,`relation`)} to ${e(r)}`,relationsRemoved:(n,r)=>`Removed ${t(n,`relation`)} from ${e(r)}`,relationsUpdated:(n,r)=>`Updated ${t(n,`relation`)} of ${e(r)}`},note:{viaHint:`via replacement hint`,inferred:e=>`inferred · ${e} confidence`,confidence:e=>`${e} confidence`,carried:e=>`${t(e,`relation`)} carried over`,collapsed:e=>`${t(e,`duplicate`)} collapsed`,keptDeprecated:`kept as deprecated`,sourceKept:`source kept`,sourceKeptDeprecated:`source kept as deprecated`,typed:e=>`type ${e}`,linkedTo:e=>`linked to ${e}`,wasLinkedTo:e=>`was linked to ${e}`,standalone:`standalone`,movedUnder:e=>`moved under ${e}`,movedFrom:e=>`from ${e}`,detachedFrom:e=>`detached from ${e}`,deprecated:`deprecated`,restored:`restored`,replacedBy:e=>`replaced by ${e}`,noLongerReplaced:`no longer replaced`,replaces:e=>`replaces ${e}`,noLongerReplaces:e=>`no longer replaces ${e}`,idChanged:(e,t)=>`${e} → ${t}`,match:e=>`${e} match`,retargeted:e=>`${w(e)} retargeted`,relationRetargeted:`relation retargeted`,relationResourced:`relation moved to another subject`,relationTypeChanged:`relation type changed`,newRelation:`new relation`,relationRemoved:`relation removed`,relabeled:(t,n)=>`label ${e(t)} → ${e(n)}`,hierarchy:`hierarchy`},separator:` · `}})(),$e={en:Qe,"zh-CN":(()=>{let e=e=>{let[t,n]=e.split(nt);return n===void 0?`「${e}」`:`「${t}」(${n})`},t=(e,t)=>`${w(e)} ${Xe[t][0]}${Xe[t][1]}`,n=(t,n)=>{let r=t.slice(0,2).map(e);return n<=1?r[0]??``:n===2?`${r[0]}和${r[1]}`:`${r[0]}、${r[1]}等 ${w(n)} 个节点`},r=n=>(r,i,a)=>{let o=e(r[0]??``),s=i<=1?o:i===2?`${o}和${e(r[1]??``)}`:`${o}等 ${w(i)} 个节点`;return a?`${n}${s}及 ${t(a,`relation`)}`:`${n}${s}`},i=(t,n,r)=>`${e(t)}—${n}→${e(r)}`;return{quote:e,names:n,delta:(e,t,n,r)=>t+n+r?`${Xe[e][1]} ${Ze(t,n,r)}`:``,facets:{rekey:`ID 变更`,rename:`改名`,mergedInto:`合并入`,mergeTarget:`合并目标`,splitFrom:`拆分自`,splitInto:`拆分为`,move:`移动`,deprecate:`弃用`,replacement:`替代关系`,types:`类型变更`,aliases:`别名变更`,attrs:`属性变更`,retarget:`改为指向`,predicate:`关系类型变更`,label:`标签变更`,collapsed:`重复合并`},title:{merged:(e,t)=>`${e}合并入${t}`,split:(e,t)=>`${e}拆分为${t}`,added:r(`新增`),removed:r(`删除`),renamed:(t,n)=>`${e(t)}改名为${e(n)}`,moved:(t,n)=>`${e(t)}移至${n}下`,detached:(t,n)=>`${e(t)}脱离${n}`,deprecated:t=>`弃用${e(t)}`,restored:t=>`恢复${e(t)}`,rekeyed:t=>`${e(t)}的 ID 已变更`,attrs:t=>`修改${e(t)}的属性`,types:t=>`修改${e(t)}的类型`,aliases:t=>`修改${e(t)}的别名`,replacement:t=>`修改${e(t)}的替代关系`,edited:t=>`修改${e(t)}`,pointsTo:(t,n,r,i)=>`${e(t)}的${e(n)}改为指向${e(r)}(原为${e(i)})`,comesFrom:(t,n,r,i)=>`${e(t)}的${e(n)}改为来自${e(r)}(原为${e(i)})`,predicate:(t,n,r,i)=>`${e(t)}→${e(n)}的关系由${e(r)}改为${e(i)}`,edgeAdded:(e,t,n)=>`新增关系${i(e,t,n)}`,edgeRemoved:(e,t,n)=>`删除关系${i(e,t,n)}`,edgeEdited:(e,t,n)=>`修改关系${i(e,t,n)}`,relationsAdded:(n,r)=>`为${e(r)}新增 ${t(n,`relation`)}`,relationsRemoved:(n,r)=>`删除${e(r)}的 ${t(n,`relation`)}`,relationsUpdated:(n,r)=>`修改${e(r)}的 ${t(n,`relation`)}`},note:{viaHint:`依据替代声明`,inferred:e=>`推断 · 置信度 ${e}`,confidence:e=>`置信度 ${e}`,carried:e=>`迁移 ${t(e,`relation`)}`,collapsed:e=>`合并 ${t(e,`duplicate`)}`,keptDeprecated:`源节点保留为已弃用`,sourceKept:`源节点保留`,sourceKeptDeprecated:`源节点保留为已弃用`,typed:e=>`类型 ${e}`,linkedTo:e=>`关联${e}`,wasLinkedTo:e=>`原关联${e}`,standalone:`无外部关联`,movedUnder:e=>`移至${e}下`,movedFrom:e=>`原属${e}`,detachedFrom:e=>`脱离${e}`,deprecated:`已弃用`,restored:`已恢复`,replacedBy:e=>`由${e}替代`,noLongerReplaced:`不再有替代项`,replaces:e=>`替代${e}`,noLongerReplaces:e=>`不再替代${e}`,idChanged:(e,t)=>`ID ${e} → ${t}`,match:e=>`匹配度 ${e}`,retargeted:e=>`${w(e)} 条关系改为指向新节点`,relationRetargeted:`关系改为指向新节点`,relationResourced:`关系改为来自新节点`,relationTypeChanged:`关系类型变更`,newRelation:`新关系`,relationRemoved:`关系已删除`,relabeled:(t,n)=>`标签${e(t)}→${e(n)}`,hierarchy:`层级关系`},separator:` · `}})()};function et(e){return $e[e??`en`]??Qe}var tt=40,nt=`\0`;function rt(e){let t=new Map;for(let n of e)g(t,n.name,()=>new Set).add(n.id);return e.map(e=>(t.get(e.name)?.size??0)>1?`${e.name}${nt}${e.id}`:e.name)}function it(e){let t=Array.from(e);return t.length>tt?`${t.slice(0,39).join(``)}…`:e}function T(e,t){return it(e.index.node(t)?.label??t)}function at(e){return it(e.before?.label??e.label)}function ot(e,t,n){let r=n===`after`?e.index.nodeByAfter(t)??e.index.nodeByBefore(t):e.index.nodeByBefore(t)??e.index.nodeByAfter(t);return r?n===`after`?T(e,r.id):at(r):t}function st(e,t){return e.names(t,t.length)}function E(e,t){return e.facets.find(e=>e.kind===t)}function ct(e,t){return e.facets.find(e=>e.kind===t)}function lt(e){let t=0,n=0,r=0;for(let i of e)i.before===void 0?t++:i.after===void 0?n++:r++;return[t,n,r]}function ut(e){return[e.filter(e=>e.status===`added`).length,e.filter(e=>e.status===`removed`).length,e.filter(e=>e.status===`modified`).length]}function D(e,t){return t.filter(e=>!!e).join(e.separator)}function dt(e,t){let n=[],r=E(t,`attrs`);r&&n.push(e.delta(`attribute`,...lt(r.changes)));let i=E(t,`types`);i&&n.push(e.delta(`type`,i.added.length,i.removed.length,0));let a=E(t,`aliases`);return a&&n.push(e.delta(`synonym`,a.added.length,a.removed.length,0)),n}function ft(e,t,n){let r=E(n,`replacement`);if(!r)return[];let i=(n,r)=>st(e,n.map(e=>ot(t,e,r))),a=[],o=n.after?.replacedBy??[];return(r.replacedBy.added.length||r.replacedBy.removed.length)&&a.push(o.length?e.note.replacedBy(i(o,`after`)):e.note.noLongerReplaced),r.replaces.added.length?a.push(e.note.replaces(i(r.replaces.added,`before`))):r.replaces.removed.length&&a.push(e.note.noLongerReplaces(i(r.replaces.removed,`before`))),a}function pt(e,t){if(t.every(e=>e.via===`hint`))return e.note.viaHint;let n=t.reduce((e,t)=>Math.min(e,t.confidence),1/0);return t.every(e=>e.via===`heuristic`)?e.note.inferred(Je(n)):e.note.confidence(Je(n))}function mt(e,t,n){let r=t.filter(e=>e.facets.some(e=>e.kind===`retarget`&&e.cause===n)),i=t.filter(e=>ct(e,`collapsed`)),a=t.filter(e=>!r.includes(e)&&!i.includes(e));return[r.length?e.note.carried(r.length):``,i.length?e.note.collapsed(i.length):``,e.delta(`relation`,...ut(a))]}function ht({p:e,diff:t,hunk:n,edges:r,anchor:i}){let a=((i?E(i,`mergeTarget`):void 0)?.sources??[]).map(e=>t.index.node(e)).filter(e=>e!==void 0),o=a.map(e=>E(e,`mergedInto`)).filter(e=>e!==void 0),s=rt([{id:n.anchor,name:T(t,n.anchor)},...a.map(e=>({id:e.beforeId??e.id,name:at(e)}))]);return{title:e.title.merged(e.names(s.slice(1),a.length),e.quote(s[0])),subtitle:D(e,[o.length?pt(e,o):``,...mt(e,r,`merge`),a.some(e=>e.status!==`removed`)?e.note.keptDeprecated:``,...i?dt(e,i):[]])}}function gt({p:e,diff:t,hunk:n,edges:r,anchor:i}){let a=i?E(i,`splitInto`)?.targets??[]:[],o=a.map(e=>t.index.node(e)).filter(e=>e!==void 0).map(e=>E(e,`splitFrom`)).filter(e=>e!==void 0),s=rt([{id:n.anchor,name:at(i??t.index.node(n.anchor))},...a.map(e=>({id:e,name:T(t,e)}))]),c=e.title.split(e.quote(s[0]),e.names(s.slice(1),a.length)),l=i?.after;return{title:c,subtitle:D(e,[o.length?pt(e,o):``,...mt(e,r,`split`),l?l.deprecated?e.note.sourceKeptDeprecated:e.note.sourceKept:``])}}function _t({p:e,diff:t,hunk:n,nodes:r,anchor:i},a){let o=[n.anchor,...n.nodes.filter(e=>e!==n.anchor)].map(e=>T(t,e)),s=(a?e.title.added:e.title.removed)(o,r.length,n.edges.length),c=n.context.map(e=>T(t,e)),l=i?.types??[];return{title:s,subtitle:D(e,[l.length?e.note.typed(l.join(`, `)):``,c.length?(a?e.note.linkedTo:e.note.wasLinkedTo)(st(e,c)):e.note.standalone])}}function vt({p:e,diff:t,edges:n,anchor:r}){let i=r,a=T(t,i.id),o=E(i,`rename`),s=i.facets.filter(e=>e.kind===`move`),c=[...new Set(s.flatMap(e=>e.to))].map(e=>T(t,e)),l=[...new Set(s.flatMap(e=>e.from))].map(e=>T(t,e)),u=E(i,`deprecate`),d=E(i,`rekey`),f=new Set(s.map(e=>e.predicate)),p=n.filter(e=>!(e.hierarchical&&f.has(e.predicate))),m=i.facets.filter(e=>e.kind===`attrs`||e.kind===`types`||e.kind===`aliases`||e.kind===`replacement`),h,g;if(o)h=e.title.renamed(it(o.from),it(o.to)),g=`rename`;else if(s.length)h=c.length?e.title.moved(a,st(e,c)):e.title.detached(a,st(e,l)),g=`move`;else if(u)h=(u.deprecated?e.title.deprecated:e.title.restored)(a),g=`deprecate`;else if(d)h=e.title.rekeyed(a),g=`rekey`;else{let t=m.length===1&&p.length===0?m[0]?.kind:void 0;h=t===`attrs`?e.title.attrs(a):t===`types`?e.title.types(a):t===`aliases`?e.title.aliases(a):t===`replacement`?e.title.replacement(a):e.title.edited(a),g=`content`}let _=[];return d&&(_.push(e.note.idChanged(d.from,d.to)),d.score<1&&_.push(e.note.match(Je(d.score)))),_.push(...dt(e,i)),s.length&&(g===`move`?c.length&&l.length&&_.push(e.note.movedFrom(st(e,l))):_.push(c.length?e.note.movedUnder(st(e,c)):e.note.detachedFrom(st(e,l)))),u&&g!==`deprecate`&&_.push(u.deprecated?e.note.deprecated:e.note.restored),_.push(...ft(e,t,i)),_.push(e.delta(`relation`,...ut(p))),{title:h,subtitle:D(e,_)}}function yt({p:e,diff:t,hunk:n,edges:r}){let i=T(t,n.anchor),a=r.length===1?r[0]:void 0;if(!a){let[t,n,a]=ut(r),o=r.length,s=t===o?e.title.relationsAdded(o,i):n===o?e.title.relationsRemoved(o,i):e.title.relationsUpdated(o,i),c=r.filter(e=>ct(e,`retarget`)).length;return{title:s,subtitle:D(e,[e.delta(`relation`,t,n,a),c?e.note.retargeted(c):``])}}let o=it(a.label),s=a.facets.filter(e=>e.kind===`retarget`),c=s.length===1?s[0]:void 0,[l=``,u=``,d=``,f=``]=rt([a.source,a.target,...c?[c.from,c.to]:[]].map(e=>({id:e,name:T(t,e)}))),p=ct(a,`predicate`),m=ct(a,`label`),h=ct(a,`attrs`),g=[m?e.note.relabeled(it(m.from),it(m.to)):``,h?e.delta(`attribute`,...lt(h.changes)):``,a.hierarchical?e.note.hierarchy:``];if(c&&!p)return c.end===`target`?{title:e.title.pointsTo(l,o,f,d),subtitle:D(e,[e.note.relationRetargeted,...g])}:{title:e.title.comesFrom(u,o,f,d),subtitle:D(e,[e.note.relationResourced,...g])};if(p&&s.length===0){let t=it(a.before?.label??p.from);return{title:e.title.predicate(l,u,t,o),subtitle:D(e,[e.note.relationTypeChanged,...g])}}return a.status===`added`?{title:e.title.edgeAdded(l,o,u),subtitle:D(e,[e.note.newRelation,...g])}:a.status===`removed`?{title:e.title.edgeRemoved(l,o,u),subtitle:D(e,[e.note.relationRemoved,...g])}:{title:e.title.edgeEdited(l,o,u),subtitle:D(e,g)}}function bt(e,t,n){let r=et(n),i=e.nodes.map(e=>t.index.node(e)),a=e.edges.map(e=>t.index.edge(e));if(i.some(e=>e===void 0)||a.some(e=>e===void 0))throw new p(`invalid-input`,`Hunk "${e.id}" does not belong to this diff`,{hunk:e.id});let o={p:r,diff:t,hunk:e,nodes:i,edges:a,anchor:t.index.node(e.anchor)};switch(e.kind){case`merge`:return ht(o);case`split`:return gt(o);case`add`:return _t(o,!0);case`remove`:return _t(o,!1);case`modify`:return o.anchor?vt(o):yt(o);case`relations`:return yt(o);default:{let t=e.kind;throw new p(`invalid-input`,`Unknown hunk kind "${String(t)}"`)}}}function O(e){throw new p(`invalid-input`,e)}var xt=new Set([`unchanged`,`added`,`removed`,`modified`]);function St(e){let t=e,n=t.meta;b(n)&&b(n.before)&&b(n.after)||O(`A kgdiff diff needs meta.before and meta.after objects`),b(t.options)||O(`A kgdiff diff needs an options object`);for(let e of[`nodes`,`edges`,`hunks`])Array.isArray(t[e])||O(`A kgdiff diff needs a ${e} array`);for(let e of[`matches`,`suggestions`])t[e]!==void 0&&!Array.isArray(t[e])&&O(`diff.${e} must be an array`);b(t.delta)||O(`A kgdiff diff needs a delta`),b(t.stats)||O(`A kgdiff diff needs stats`),e.nodes.forEach((e,t)=>{b(e)&&typeof e.id==`string`&&xt.has(e.status)||O(`diff.nodes[${t}] needs a string id and a valid status`)}),e.edges.forEach((e,t)=>{b(e)&&typeof e.id==`string`&&typeof e.source==`string`&&typeof e.target==`string`&&xt.has(e.status)||O(`diff.edges[${t}] needs string id / source / target and a valid status`)})}function Ct(e){return{...e}}function wt(e,t){if(t===`id`&&e.id!==void 0)return`i${e.id}`;let n=e.predicate??``,i=e.label??ne(n);return`t${r(e.source,n,e.target)}\u0000${f([i,e.attrs??{}])}`}function Tt(e){let t=new Map;for(let n of e.edges.values())t.set(wt(n,e.edgeIdentity),n);return t}function Et(e){if(!b(e)||e.format!==`kgdiff.diff`)throw new p(`unsupported-version`,`Not a kgdiff diff (expected format "kgdiff.diff")`);if(e.version!==1)throw new p(`unsupported-version`,`Unsupported diff version ${String(e.version)}; this reader supports version 1`,{version:e.version});St(e);let t=he(e.options),n=t.edgeIdentity,r=e=>e!==`added`,i=e=>e!==`removed`,a=[];for(let t of e.nodes)i(t.status)&&(t.after||O(`Union node "${t.id}" (${t.status}) has no after snapshot`),a.push(Ct(t.after)));let o=[];for(let t of e.edges)i(t.status)&&(t.after||O(`Union edge ${t.id} (${t.status}) has no after snapshot`),o.push(t.after));let s=Le({meta:e.meta.after,nodes:a,edges:o},{edgeIdentity:n}),c=[];for(let t of e.nodes){if(!r(t.status))continue;if(t.before){c.push(Ct(t.before));continue}let e=t.afterId===void 0?void 0:s.nodes.get(t.afterId);e&&t.beforeId!==void 0||O(`Union node "${t.id}" has no before snapshot`),c.push(Ve({...e,id:t.beforeId}))}let l=[];for(let t of e.edges){if(!r(t.status))continue;let e=t.before??t.after;e||O(`Union edge ${t.id} has no before snapshot`),l.push(e)}let u=Le({meta:e.meta.before,nodes:c,edges:l},{edgeIdentity:n}),d=e.nodes.map(e=>{let t={id:e.id,status:e.status,facets:e.facets??[]};return e.beforeId!==void 0&&(t.beforeId=e.beforeId,t.before=u.nodes.get(e.beforeId)),e.afterId!==void 0&&(t.afterId=e.afterId,t.after=s.nodes.get(e.afterId)),e.hunk!==void 0&&(t.hunk=e.hunk),Ke(t,u,s)}),f=new Set(t.hierarchyPredicates),m=Tt(u),h=Tt(s),g=e.edges.map(e=>{let t=r(e.status)?m.get(wt(e.before??e.after,n)):void 0,i=e.after?h.get(wt(e.after,n)):void 0,a=i??t;a||O(`Union edge ${e.id} could not be rebuilt`);let o={id:e.id,source:e.source,target:e.target,predicate:a.predicate,label:a.label,status:e.status,facets:e.facets??[],hierarchical:f.has(a.predicate),inPlace:!1};return e.sourceBefore!==void 0&&(o.sourceBefore=e.sourceBefore),e.targetBefore!==void 0&&(o.targetBefore=e.targetBefore),e.predicateBefore!==void 0&&(o.predicateBefore=e.predicateBefore),t&&(o.beforeKey=t.key,o.before=t),i&&(o.afterKey=i.key,o.after=i),e.hunk!==void 0&&(o.hunk=e.hunk),qe(o)}),_=e.hunks;return{before:u,after:s,options:t,nodes:d,edges:g,hunks:_,matches:e.matches??[],suggestions:e.suggestions??[],delta:e.delta,stats:e.stats,index:Ge(d,g,_)}}function Dt(e){return Ie(e)}function Ot(e){return Et(e)}function kt(e,t,n){return bt(e,t,n)}var At=(e,t)=>{let n=Math.max(1,Math.ceil(e)),r=Math.max(1,Math.ceil(t));if(typeof OffscreenCanvas==`function`)try{let e=new OffscreenCanvas(n,r),t=e.getContext(`2d`);if(t)return{canvas:e,ctx:t}}catch{}if(typeof document<`u`){let e=document.createElement(`canvas`);e.width=n,e.height=r;let t=e.getContext(`2d`);if(t)return{canvas:e,ctx:t}}return null},jt=Object.freeze([]),Mt=1.5;function Nt(e,t,n,r,i,a){let o=Math.max(0,Math.min(a,r/2,i/2));e.moveTo(t+o,n),e.lineTo(t+r-o,n),e.arc(t+r-o,n+o,o,-Math.PI/2,0),e.lineTo(t+r,n+i-o),e.arc(t+r-o,n+i-o,o,0,Math.PI/2),e.lineTo(t+o,n+i),e.arc(t+o,n+i-o,o,Math.PI/2,Math.PI),e.lineTo(t,n+o),e.arc(t+o,n+o,o,Math.PI,Math.PI*1.5),e.closePath()}function Pt(e,t,n,r,i){let a=t-r*7,o=n-i*7,s=5/2;e.moveTo(t,n),e.lineTo(a-i*s,o+r*s),e.lineTo(a+i*s,o-r*s),e.closePath()}var k=Math.PI*2;function A(e,t,n){return Math.min(Math.max(e,t),n)}function Ft(e,t,n){let r=A((n-e)/(t-e),0,1);return r*r*(3-2*r)}function It(e){return e<.5?4*e*e*e:1-(-2*e+2)**3/2}function Lt(e,t){return Math.round(e*t)/t}function Rt(e,t){return Math.round(e*t)%2==1?.5/t:0}function j(e,t,n,r){let i=1-r;return i*i*e+2*i*r*t+r*r*n}function zt(e,t,n,r){return 2*(1-r)*(t-e)+2*r*(n-t)}function Bt(e,t,n,r,i,a,o,s){if(o<=0)return+!!s;let c=s?i:e,l=s?a:t,u=o*o,d=+!!s,f=.5,p=j(e,n,i,.5)-c,m=j(t,r,a,.5)-l;if(p*p+m*m<=u)return .5;for(let o=0;o<12;o++){let o=(d+f)/2,s=j(e,n,i,o)-c,p=j(t,r,a,o)-l;s*s+p*p<u?d=o:f=o}return(d+f)/2}function Vt(e,t,n,r,i,a){let o=i-n,s=a-r,c=o*o+s*s,l=c>0?((e-n)*o+(t-r)*s)/c:0;l=A(l,0,1);let u=n+l*o-e,d=r+l*s-t;return u*u+d*d}function Ht(e,t,n,r,i,a,o,s,c=16){let l=1/0,u=n,d=r;for(let f=1;f<=c;f++){let p=f/c,m=j(n,i,o,p),h=j(r,a,s,p),g=Vt(e,t,u,d,m,h);g<l&&(l=g),u=m,d=h}return l}function Ut(e,t,n,r,i,a,o,s){if(e>=i&&e<=o&&t>=a&&t<=s||n>=i&&n<=o&&r>=a&&r<=s)return!0;if(e<i&&n<i||e>o&&n>o||t<a&&r<a||t>s&&r>s)return!1;let c=n-e,l=r-t,u=0,d=1,f=(e,t)=>{if(e===0)return t>=0;let n=t/e;if(e<0){if(n>d)return!1;n>u&&(u=n)}else{if(n<u)return!1;n<d&&(d=n)}return!0};return f(-c,e-i)&&f(c,o-e)&&f(-l,t-a)&&f(l,s-t)}function Wt(e,t,n,r,i,a,o,s){return e<i+o&&i<e+n&&t<a+s&&a<t+r}var Gt=1e-12;function Kt(e,t,n=Math.SQRT2){let r=n*n,i=r*r,a=Math.max(e.w,Gt),o=Math.max(t.w,Gt),s=t.x-e.x,c=t.y-e.y,l=Math.hypot(s,c);if(l<1e-9*Math.max(a,o)){let r=Math.log(o/a);return{S:Math.abs(r)/n,at(n){return n<=0?e:n>=1?t:{x:e.x+n*s,y:e.y+n*c,w:a*Math.exp(r*n)}}}}let u=(o*o-a*a+i*l*l)/(2*a*r*l),d=(o*o-a*a-i*l*l)/(2*o*r*l),f=-Math.asinh(u),p=(-Math.asinh(d)-f)/n,m=Math.cosh(f),h=Math.sinh(f);return{S:p,at(i){if(i<=0)return e;if(i>=1)return t;let o=i*p,u=a/(r*l)*(m*Math.tanh(n*o+f)-h);return{x:e.x+u*s,y:e.y+u*c,w:a*m/Math.cosh(n*o+f)}}}}var qt=Object.freeze({top:0,right:0,bottom:0,left:0}),Jt=Math.SQRT2;function Yt(e,t,n){return{x:(n.x-e.x)*e.k+t.width/2,y:(n.y-e.y)*e.k+t.height/2}}function Xt(e,t,n){return{x:(n.x-t.width/2)/e.k+e.x,y:(n.y-t.height/2)/e.k+e.y}}function Zt(e,t){let n=t.width/e.k,r=t.height/e.k;return{x:e.x-n/2,y:e.y-r/2,width:n,height:r}}function Qt(e,t,n,r,i){let a=(r-t.width/2)/e.k+e.x,o=(i-t.height/2)/e.k+e.y;return{x:a-(r-t.width/2)/n,y:o-(i-t.height/2)/n,k:n}}function $t(e){if(e===void 0)return{top:48,right:48,bottom:48,left:48};if(typeof e==`number`){let t=Number.isFinite(e)?Math.max(0,e):48;return{top:t,right:t,bottom:t,left:t}}return e}function en(e,t,n,r,i,a){let o=[[r,n],[qt,n],[qt,qt]],s=0,c=0,l=t.width,u=t.height;for(let[e,n]of o)if(s=e.left+n.left,c=e.top+n.top,l=t.width-s-e.right-n.right,u=t.height-c-e.bottom-n.bottom,l>=8&&u>=8)break;l=Math.max(l,1),u=Math.max(u,1);let d=Math.max(e.width,0),f=Math.max(e.height,0),p=Math.min(d>0?l/d:1/0,f>0?u/f:1/0);Number.isFinite(p)||(p=a),p=A(p,i,a);let m=e.x+d/2,h=e.y+f/2,g=s+l/2,_=c+u/2;return{x:m-(g-t.width/2)/p,y:h-(_-t.height/2)/p,k:p}}function tn(e){return A(Math.abs(e)*620,350,1100)}function nn(e,t,n=325){return e*Math.exp(-t/n)}function rn(e){return Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.width)&&Number.isFinite(e.height)&&e.width>=0&&e.height>=0}var an=class{host;minK;maxK;x=0;y=0;k=1;touched=!1;motion=null;pending=null;userChanged=!1;constructor(e,t,n){this.host=e,this.minK=t,this.maxK=n}get(){return{x:this.x,y:this.y,k:this.k}}set(e,t=`program`){this.touched=!0,this.stop(),this.apply(e.x,e.y,e.k,t)}flyTo(e,t={}){if(this.touched=!0,this.stop(),!rn(e))return Promise.resolve();let n=this.host.size();if(n.width<=0||n.height<=0)return new Promise(n=>{this.pending={bounds:e,options:t,resolve:n}});let r=this.targetFor(e,t,n),i=(t.animate??!0)&&!this.host.reducedMotion(),a=Math.max(n.width,n.height),o=Kt({x:this.x,y:this.y,w:a/this.k},{x:r.x,y:r.y,w:a/r.k},Jt),s=t.duration??tn(o.S),c=Math.abs(r.k/this.k-1)<1e-6&&Math.hypot(r.x-this.x,r.y-this.y)*this.k<.5;return!i||!(s>0)||c?(this.apply(r.x,r.y,r.k,`program`),Promise.resolve()):new Promise(e=>{this.motion={type:`fly`,path:o,ref:a,duration:s,start:-1,target:r,resolve:e},this.host.invalidate()})}fit(e,t){let n=e??this.host.contentBounds();return n?this.flyTo(n,t):(this.touched=!0,this.stop(),Promise.resolve())}zoomBy(e,t,n){if(this.touched=!0,!(e>0)||!Number.isFinite(e))return;let r=this.host.size(),i=t?.x??r.width/2,a=t?.y??r.height/2;(n?.animate??!0)&&!this.host.reducedMotion()?this.zoomSmooth(e,i,a,`program`):(this.stop(),this.zoomNow(e,i,a,`program`))}panBy(e,t){this.touched=!0,this.stop(),this.panNow(e,t,`program`)}worldToScreen(e){return Yt(this,this.host.size(),e)}screenToWorld(e){return Xt(this,this.host.size(),e)}viewport(){return Zt(this,this.host.size())}get animating(){return this.motion!==null}interrupt(){this.touched=!0,this.stop()}jump(e){this.stop(),this.apply(e.x,e.y,e.k,`program`)}targetFor(e,t,n){let r=Math.min(this.maxK,t.maxZoom??2.5);return en(e,n,$t(t.padding),this.host.safeArea(),this.minK,Math.max(this.minK,r))}panNow(e,t,n=`user`){Number.isFinite(e)&&Number.isFinite(t)&&this.apply(this.x-e/this.k,this.y-t/this.k,this.k,n)}zoomNow(e,t,n,r=`user`){if(!(e>0)||!Number.isFinite(e))return;this.motion?.type===`zoom`&&(this.motion=null);let i=A(this.k*e,this.minK,this.maxK),a=Qt(this,this.host.size(),i,t,n);this.apply(a.x,a.y,a.k,r)}zoomSmooth(e,t,n,r=`user`){if(!(e>0)||!Number.isFinite(e))return;let i=this.host.size(),a=(t-i.width/2)/this.k+this.x,o=(n-i.height/2)/this.k+this.y,s=this.motion;s?.type===`zoom`?(s.kTarget=A(s.kTarget*e,this.minK,this.maxK),s.source=r,s.ax=t,s.ay=n,s.wx=a,s.wy=o):(this.stop(),this.motion={type:`zoom`,source:r,ax:t,ay:n,wx:a,wy:o,kTarget:A(this.k*e,this.minK,this.maxK),last:-1}),this.host.invalidate()}glide(e,t){this.stop(),Math.hypot(e,t)>.02&&(this.motion={type:`glide`,vx:e,vy:t,last:-1},this.host.invalidate())}resized(){let e=this.pending;if(!e)return;let t=this.host.size();if(t.width<=0||t.height<=0)return;this.pending=null;let n=this.targetFor(e.bounds,e.options,t);this.apply(n.x,n.y,n.k,`program`),e.resolve()}tick(e){let t=this.motion;if(!t)return!1;switch(t.type){case`fly`:{t.start<0&&(t.start=e);let n=A((e-t.start)/t.duration,0,1);if(n>=1)return this.motion=null,this.apply(t.target.x,t.target.y,t.target.k,`program`),t.resolve(),!1;let r=t.path.at(It(n));return this.apply(r.x,r.y,t.ref/r.w,`program`),!0}case`zoom`:{let n=t.last<0?16:A(e-t.last,0,64);t.last=e;let r=Math.log(this.k),i=Math.log(t.kTarget),a=Math.abs(i-r)<.001,o=a?t.kTarget:Math.exp(r+(i-r)*(1-Math.exp(-n/80))),s=this.host.size(),c=A(o,this.minK,this.maxK);return this.apply(t.wx-(t.ax-s.width/2)/c,t.wy-(t.ay-s.height/2)/c,c,t.source),a&&(this.motion=null),!a}case`glide`:{let n=t.last<0?16:A(e-t.last,0,64);return t.last=e,this.panNow(t.vx*n,t.vy*n,`user`),t.vx=nn(t.vx,n),t.vy=nn(t.vy,n),Math.hypot(t.vx,t.vy)<.02?(this.motion=null,!1):!0}default:return t}}stop(){let e=this.motion;this.motion=null,e?.type===`fly`&&e.resolve();let t=this.pending;this.pending=null,t?.resolve()}takeSource(){let e=this.userChanged?`user`:`program`;return this.userChanged=!1,e}apply(e,t,n,r){if(!Number.isFinite(e)||!Number.isFinite(t)||!Number.isFinite(n)||n<=0)return;let i=A(n,this.minK,this.maxK);(e!==this.x||t!==this.y||i!==this.k)&&(this.x=e,this.y=t,this.k=i,r===`user`&&(this.userChanged=!0),this.host.invalidate())}},on=512,sn=class{x0=0;y0=0;cell=1;cols=0;rows=0;start=new Int32Array(1);items=new Int32Array;maxR=0;size=0;build(e,t,n,r,i){this.size=i;let a=1/0,o=1/0,s=-1/0,c=-1/0,l=0;for(let r=0;r<i;r++){let i=e[r],u=t[r];i<a&&(a=i),i>s&&(s=i),u<o&&(o=u),u>c&&(c=u),n[r]>l&&(l=n[r])}if(this.maxR=l,i===0){this.cols=this.rows=0;return}let u=Math.max(s-a,1e-9),d=Math.max(c-o,1e-9),f=Math.max(Math.sqrt(u*d/i),2*l,1e-6);f=Math.max(f,u/on,d/on),this.cell=f,this.x0=a,this.y0=o,this.cols=Math.floor(u/f)+1,this.rows=Math.floor(d/f)+1;let p=this.cols*this.rows;this.start.length<p+1?this.start=new Int32Array(p+1):this.start.fill(0,0,p+1),this.items.length<i&&(this.items=new Int32Array(Math.max(i,this.items.length*2)));let m=this.start;for(let n=0;n<i;n++)m[this.cellOf(e[n],t[n])+1]++;for(let e=0;e<p;e++)m[e+1]+=m[e];for(let n=0;n<i;n++){let i=this.cellOf(e[n],t[n]);this.items[m[i]++]=r[n]}for(let e=p;e>0;e--)m[e]=m[e-1];m[0]=0}query(e,t,n,r,i){if(i.length=0,this.cols===0)return 0;let a=Math.max(0,Math.floor((e-this.x0)/this.cell)),o=Math.min(this.cols-1,Math.floor((n-this.x0)/this.cell)),s=Math.max(0,Math.floor((t-this.y0)/this.cell)),c=Math.min(this.rows-1,Math.floor((r-this.y0)/this.cell));for(let e=s;e<=c;e++)for(let t=a;t<=o;t++){let n=e*this.cols+t,r=this.start[n+1];for(let e=this.start[n];e<r;e++)i.push(this.items[e])}return i.length}cellOf(e,t){let n=Math.min(this.cols-1,Math.max(0,Math.floor((e-this.x0)/this.cell)));return Math.min(this.rows-1,Math.max(0,Math.floor((t-this.y0)/this.cell)))*this.cols+n}},cn=2047,ln=63,un=class{colors=new Map;dashIds=new WeakMap;dashKeys=new Map;maintain(){this.colors.size>1983&&this.colors.clear(),this.dashKeys.size>55&&(this.dashKeys.clear(),this.dashIds=new WeakMap)}color(e){if(e===null)return 0;let t=this.colors.get(e);return t===void 0&&(t=this.colors.size+1,this.colors.set(e,t)),Math.min(t,cn)}dash(e){if(e===null||e.length===0)return 0;let t=this.dashIds.get(e);if(t===void 0){let n=e.join(`,`);t=this.dashKeys.get(n),t===void 0&&(t=this.dashKeys.size+1,this.dashKeys.set(n,t)),this.dashIds.set(e,t)}return Math.min(t,ln)}};function dn(e){return Number.isFinite(e)?Math.round(A(e,0,1)*64):0}function fn(e){return pn(e)+512}function pn(e){return Number.isFinite(e)?A(Math.round(e),-512,511):0}function mn(e){return Number.isFinite(e)?Math.round(A(e,0,15.75)*4):0}function hn(e,t){if(t===null||t.length===0||!Number.isFinite(e))return 0;let n=0;for(let e of t)n+=e;if(t.length%2==1&&(n*=2),!(n>0))return 0;let r=(e%n+n)%n;return A(Math.round(r*2),0,511)}function gn(e,t){return e.z-t.z||e.seq-t.seq}var _n=class{frame=null;version=-1;edgeBuckets=[];nodeBuckets=[];decor=[];halos=[];badges=[];glyphArcs=[];pivots=[];maxR=0;nodeCount=0;edgeCount=0;pillShown=new Uint8Array;pillsVersion=-1;edgeMap=new Map;nodeMap=new Map;edgePool=[];nodePool=[];gridVersion=-1;grid=new sn;xs=new Float64Array;ys=new Float64Array;rs=new Float64Array;ids=new Int32Array;boundsVersion=-1;boundsValue=null;sync(e,t,n){(e!==this.frame||t!==this.version)&&(this.frame=e,this.version=t,this.build(e,n))}build(e,t){t.maintain(),this.edgeMap.clear(),this.nodeMap.clear(),this.edgeBuckets.length=0,this.nodeBuckets.length=0,this.decor.length=0,this.halos.length=0,this.badges.length=0,this.glyphArcs.length=0,this.pivots.length=0,this.maxR=0,this.nodeCount=0,this.edgeCount=0;let n=e.edges;for(let e=0;e<n.length;e++){let r=n[e];if(!r.visible)continue;let i=dn(r.alpha);if(i===0||!(r.width>0)||!Number.isFinite(r.x1+r.y1+r.x2+r.y2))continue;let a=fn(r.z),o=mn(r.width),s=r.dash!==null&&r.dash.length>0?r.dash:null,c=hn(r.dashOffset,s),l=((((a*2048+t.color(r.color))*64+o)*64+t.dash(s))*512+c)*65+i,u=this.edgeMap.get(l);u||(u=this.edgePool[this.edgeBuckets.length],u||(u={key:0,seq:0,z:0,color:``,width:0,dash:null,dashOffset:0,alpha:0,members:[]},this.edgePool.push(u)),u.key=l,u.seq=this.edgeBuckets.length,u.z=a-512,u.color=r.color,u.width=o/4,u.dash=s,u.dashOffset=c/2,u.alpha=i/64,u.members.length=0,this.edgeMap.set(l,u),this.edgeBuckets.push(u)),u.members.push(e),this.edgeCount++}this.edgeBuckets.sort(gn);let r=e.nodes;for(let e=0;e<r.length;e++){let n=r[e];if(!n.visible)continue;let i=dn(n.alpha);if(i===0||!Number.isFinite(n.x+n.y+n.r)||n.r<0)continue;let a=fn(n.z),o=n.stroke!==null&&n.strokeWidth>0?n.stroke:null,s=o!==null&&n.dash!==null&&n.dash.length>0?n.dash:null,c=((((a*2048+t.color(n.fill))*2048+t.color(o))*64+(o?mn(n.strokeWidth):0))*64+t.dash(s))*65+i,l=this.nodeMap.get(c);l||(l=this.nodePool[this.nodeBuckets.length],l||(l={key:0,seq:0,z:0,fill:null,stroke:null,strokeWidth:0,dash:null,alpha:0,members:[]},this.nodePool.push(l)),l.key=c,l.seq=this.nodeBuckets.length,l.z=a-512,l.fill=n.fill,l.stroke=o,l.strokeWidth=o?mn(n.strokeWidth)/4:0,l.dash=s,l.alpha=i/64,l.members.length=0,this.nodeMap.set(c,l),this.nodeBuckets.push(l)),l.members.push(e),this.nodeCount++,n.r>this.maxR&&(this.maxR=n.r),(n.ring!==null||n.pulse>0&&n.pulse<1)&&this.decor.push(e),n.halo!==null&&n.halo.alpha>0&&this.halos.push(e),n.badge!==null&&n.badge.text.length>0&&this.badges.push(e)}this.nodeBuckets.sort(gn),this.decor.length>1&&this.decor.sort((e,t)=>fn(r[e].z)-fn(r[t].z)||e-t);let i=e.glyphs;for(let e=0;e<i.length;e++){let t=i[e];dn(t.alpha)!==0&&Number.isFinite(t.x1+t.y1+t.x2+t.y2)&&(t.kind===`pivot`?this.pivots.push(e):this.glyphArcs.push(e))}}pillPickable(e){return this.pillsVersion!==this.version||this.pillShown[e]===1}nodeGrid(){let e=this.frame;if(this.gridVersion===this.version||!e)return this.grid;this.gridVersion=this.version;let t=this.nodeCount;if(this.xs.length<t){let e=Math.max(t,this.xs.length*2);this.xs=new Float64Array(e),this.ys=new Float64Array(e),this.rs=new Float64Array(e),this.ids=new Int32Array(e)}let n=0;for(let t of this.nodeBuckets)for(let r of t.members){let t=e.nodes[r];this.xs[n]=t.x,this.ys[n]=t.y,this.rs[n]=t.r,this.ids[n]=r,n++}return this.grid.build(this.xs,this.ys,this.rs,this.ids,n),this.grid}contentBounds(){let e=this.frame;if(!e)return null;if(this.boundsVersion===this.version)return this.boundsValue;this.boundsVersion=this.version;let t=1/0,n=1/0,r=-1/0,i=-1/0;for(let a of this.nodeBuckets)for(let o of a.members){let a=e.nodes[o];a.x-a.r<t&&(t=a.x-a.r),a.y-a.r<n&&(n=a.y-a.r),a.x+a.r>r&&(r=a.x+a.r),a.y+a.r>i&&(i=a.y+a.r)}for(let a of e.collapsed)Number.isFinite(a.x+a.y)&&(t=Math.min(t,a.x),n=Math.min(n,a.y),r=Math.max(r,a.x),i=Math.max(i,a.y));for(let a of this.glyphArcs){let o=e.glyphs[a];t=Math.min(t,o.x1,o.x2),n=Math.min(n,o.y1,o.y2),r=Math.max(r,o.x1,o.x2),i=Math.max(i,o.y1,o.y2)}return this.boundsValue=t<=r?{x:t,y:n,width:r-t,height:i-n}:null,this.boundsValue}};function vn(e,t){if(!e)return t;if(!t)return e;let n=Math.min(e.x,t.x),r=Math.min(e.y,t.y);return{x:n,y:r,width:Math.max(e.x+e.width,t.x+t.width)-n,height:Math.max(e.y+e.height,t.y+t.height)-r}}var yn=4.000244140625;function bn(){return{last:-1/0,intent:null}}function xn(e){let t=e/yn;return t>=1&&Math.abs(t-Math.round(t))<1e-6}function Sn(e){let t=Math.abs(e);return t===0?!1:xn(t)||t>=50&&Number.isInteger(t)}function Cn(e,t,n){let r;return r=e.ctrlKey||e.metaKey?e.deltaMode!==0||Sn(e.deltaY)?`notch`:`pinch`:t.intent!==null&&t.intent!==`pinch`&&n-t.last<160?t.intent:e.deltaMode===0?e.deltaX===0?e.wheelDeltaY!==void 0&&e.wheelDeltaY!==0?e.wheelDeltaY===-3*e.deltaY?`pan`:`notch`:Sn(e.deltaY)?`notch`:`pan`:`pan`:`notch`,t.last=n,t.intent=r,r}function wn(e,t){let n=e.deltaMode===1?16:e.deltaMode===2?Math.max(t,1):1;return{x:e.deltaX*n,y:e.deltaY*n}}function Tn(e,t){if(e===`pinch`)return Math.exp(-A(t,-50,50)/100);let n=Math.abs(t);return 2**(-A(xn(n)?Math.sign(t)*Math.round(n/yn)*33:t,-240,240)/240)}var En=class{t=new Float64Array(8);x=new Float64Array(8);y=new Float64Array(8);n=0;head=0;reset(){this.n=0,this.head=0}add(e,t,n){this.t[this.head]=e,this.x[this.head]=t,this.y[this.head]=n,this.head=(this.head+1)%8,this.n<8&&this.n++}velocity(e,t=100){if(this.n<2)return{x:0,y:0};let n=(this.head+7)%8,r=this.t[n]??0;if(e-r>50)return{x:0,y:0};let i=n;for(let e=1;e<this.n;e++){let a=(n-e+8)%8;if(r-(this.t[a]??0)>t)break;i=a}let a=r-(this.t[i]??0);if(a<=0)return{x:0,y:0};let o=((this.x[n]??0)-(this.x[i]??0))/a,s=((this.y[n]??0)-(this.y[i]??0))/a,c=Math.hypot(o,s);return c>6&&(o*=6/c,s*=6/c),{x:o,y:s}}};function Dn(e,t){let n=new Map,r=new En,i=bn(),a=0,o=0,s=0,c=0,l=!1,u=!1,d=0,f=0,p=0,m=!1,h=1,g=t=>{let n=e.getBoundingClientRect();return[t.clientX-n.left,t.clientY-n.top]},_=()=>{let e=n.values(),t=e.next().value,r=e.next().value;return!t||!r?[0,0,0]:[(t.x+r.x)/2,(t.y+r.y)/2,Math.hypot(t.x-r.x,t.y-r.y)]},v=()=>{[d,f,p]=_()},y=i=>{if(i.pointerType===`mouse`&&i.button!==0&&i.button!==1)return;i.button===1&&i.preventDefault();let[d,f]=g(i);try{e.setPointerCapture(i.pointerId)}catch{}n.set(i.pointerId,{x:d,y:f}),t.camera.interrupt(),n.size===1?(a=s=d,o=c=f,l=!1,u=!1,r.reset(),r.add(t.now(),d,f)):(u=!0,v())},b=e=>{let[i,u]=g(e),m=n.get(e.pointerId);if(!m)n.size===0&&t.hover(i,u);else if(m.x=i,m.y=u,n.size>=2){let[e,n,r]=_();p>0&&r>0&&t.camera.zoomNow(r/p,e,n),t.camera.panNow(e-d,n-f),d=e,f=n,p=r}else{if(!l){if(Math.hypot(i-a,u-o)<4)return;l=!0,t.dragging(!0)}t.camera.panNow(i-s,u-c),s=i,c=u,r.add(t.now(),i,u)}},x=e=>{if(!n.delete(e.pointerId))return;let[i,a]=g(e);if(n.size===1){let e=n.values().next().value;e&&(s=e.x,c=e.y),r.reset(),l||(l=!0,t.dragging(!0));return}if(n.size>1){v();return}let o=e.type===`pointercancel`;if(l){if(t.dragging(!1),!o&&!u){let e=r.velocity(t.now());Math.hypot(e.x,e.y)>.1&&t.camera.glide(e.x,e.y)}}else!u&&!o&&t.click(i,a,e);l=!1,u=!1},S=[[`pointerdown`,y],[`pointermove`,b],[`pointerup`,x],[`pointercancel`,x],[`pointerleave`,()=>{n.size===0&&t.leave()}],[`wheel`,n=>{if(n.preventDefault(),m&&n.ctrlKey)return;let[r,a]=g(n);Number.isFinite(r)&&Number.isFinite(a)||(r=e.clientWidth/2,a=e.clientHeight/2);let o={deltaX:n.deltaX,deltaY:n.deltaY,deltaMode:n.deltaMode,ctrlKey:n.ctrlKey,metaKey:n.metaKey,wheelDeltaY:`wheelDeltaY`in n?Number(n.wheelDeltaY):void 0},s=Cn(o,i,t.now()),c=wn(o,e.clientHeight);s===`pan`?(t.camera.interrupt(),t.camera.panNow(-c.x,-c.y)):s===`pinch`?(t.camera.interrupt(),t.camera.zoomNow(Tn(`pinch`,c.y),r,a)):(t.camera.touched=!0,t.camera.zoomSmooth(Tn(`notch`,c.y),r,a))},{passive:!1}],[`dblclick`,e=>{let[n,r]=g(e);t.dblclick(n,r,e)}],[`gesturestart`,e=>{e.preventDefault(),n.size>=2||(m=!0,h=1,t.camera.interrupt())},{passive:!1}],[`gesturechange`,e=>{if(e.preventDefault(),!m||n.size>=2)return;let r=e;if(!(r.scale>0))return;let[i,a]=g(r);t.camera.zoomNow(r.scale/h,i,a),h=r.scale},{passive:!1}],[`gestureend`,e=>{e.preventDefault(),m=!1},{passive:!1}]];for(let[t,n,r]of S)e.addEventListener(t,n,r);return()=>{for(let[t,n,r]of S)e.removeEventListener(t,n,r);n.clear()}}var On=.9;function kn(e,t,n,r,i,a,o,s,c,l,u){let d=s+l/2;if(e.font=n,e.textAlign=`left`,e.textBaseline=`middle`,e.globalAlpha=u*On,e.strokeStyle=i,e.lineWidth=3,e.lineJoin=`round`,e.miterLimit=2,e.strokeText(t,o,d),e.globalAlpha=u,e.fillStyle=r,e.fillText(t,o,d),a){let t=Math.max(1,l/14);e.fillRect(o-1,d-t/2+.5,c+2,t)}}var An=class{factory;surface=null;size=0;dpr=1;halo=`#000`;shelfX=0;shelfY=0;shelfH=0;maps=[new Map,new Map];generation=0;budget=1/0;deferred=0;constructor(e){this.factory=e}get canvas(){return this.surface?.canvas??null}configure(e,t){if(e===this.dpr&&t===this.halo&&this.surface)return;this.dpr=e,this.halo=t;let n=Math.min(4096,Math.ceil(1024*Math.max(1,e)));this.surface&&this.size===n||(this.surface=this.factory(n,n),this.size=n),this.wipe()}beginFrame(e){this.budget=e,this.deferred=0}wipe(){this.maps[0].clear(),this.maps[1].clear(),this.shelfX=0,this.shelfY=0,this.shelfH=0,this.generation++,this.surface?.ctx.setTransform(1,0,0,1,0,0),this.surface?.ctx.clearRect(0,0,this.size,this.size)}get(e,t,n,r,i,a){let o=this.surface;if(!o)return null;let s=this.maps[+!!r],c=s.get(t);c||(c=new Map,s.set(t,c));let l=c.get(n);l||(l=new Map,c.set(n,l));let u=l.get(e);if(u)return u;if(this.budget<=0){this.deferred++;return}let d=this.dpr,f=Math.ceil((i+4)*d),p=Math.ceil((a+4)*d);if(f>this.size||p>this.size)return null;if(this.shelfX+f>this.size&&(this.shelfY+=this.shelfH+1,this.shelfX=0,this.shelfH=0),this.shelfY+p>this.size)return this.wipe(),this.get(e,t,n,r,i,a);this.budget--;let m={sx:this.shelfX,sy:this.shelfY,sw:f,sh:p},h=o.ctx;return h.setTransform(d,0,0,d,this.shelfX,this.shelfY),kn(h,e,t,n,this.halo,r,2,2,i,a,1),h.setTransform(1,0,0,1,0,0),this.shelfX+=f+1,this.shelfH=Math.max(this.shelfH,p),l.set(e,m),m}},jn=1.2,Mn=9.6,Nn=14.4;function Pn(e){if(!(e>0))return[];let t=24;for(let n=0;n<12&&t*e<Mn;n++)t*=4;let n=Ft(Mn,Nn,t*e);return n>=.999?[{spacing:t,alpha:1,nested:!1}]:[{spacing:t*4,alpha:1,nested:!1},{spacing:t,alpha:n,nested:!0}]}var Fn=class{factory;tiles=[null,null];constructor(e){this.factory=e}clear(){this.tiles[0]=null,this.tiles[1]=null}pattern(e,t,n,r,i,a,o){let s=`${n}|${r}|${i}|${a}|${o}`,c=this.tiles[t]??null;if(c?.key===s)return c.pattern;if(!c){let e=this.factory(n,n);if(!e)return null;c={surface:e,key:``,pattern:null},this.tiles[t]=c}let{canvas:l,ctx:u}=c.surface;l.width=n,l.height=n,u.setTransform(1,0,0,1,0,0),u.clearRect(0,0,n,n),u.fillStyle=a,u.beginPath();let d=n/r;for(let e=0;e<r;e++)for(let t=0;t<r;t++){if(i&&t===0&&e===0)continue;let n=(t+.5)*d,r=(e+.5)*d;u.moveTo(n+o,r),u.arc(n,r,o,0,k)}return u.fill(),c.key=s,c.pattern=e.createPattern(l,`repeat`),c.pattern}};function In(e,t,n,r,i){if(e.globalAlpha=1,e.fillStyle=n.canvas.background,e.fillRect(0,0,t.width,t.height),!r)return;let a=1-.5*Math.min(1,Math.max(0,Number.isFinite(i)?i:0)),o=Pn(t.k),s=t.dpr,c=Math.ceil(t.width*s),l=Math.ceil(t.height*s);e.save(),e.setTransform(1,0,0,1,0,0);for(let i=0;i<o.length;i++){let u=o[i],d=u.nested?4:1,f=d*u.spacing*t.k*s,p=Math.max(2,Math.round(f)),m=r.pattern(e,i,p,d,u.nested,n.canvas.grid,jn/2*s);if(!m||typeof m.setTransform!=`function`)continue;let h=f/p,g=.5*f/d,_=((t.ox*s-g)%f+f)%f,v=((t.oy*s-g)%f+f)%f;m.setTransform({a:h,b:0,c:0,d:h,e:_,f:v}),e.globalAlpha=u.alpha*a,e.fillStyle=m,e.fillRect(0,0,c,l)}e.restore()}var Ln=class{boxes=new Float64Array(160);count=0;font=``;layout(e,t,n,r,i,a){if(this.count=0,t.badges.length===0)return;let{k:o,ox:s,oy:c,dpr:l}=n,u=r.get(10,600,!0);this.font=u;for(let r of t.badges){let t=e.nodes[r],d=t.badge;if(o<d.minZoom||t.alpha<.02)continue;let f=t.ring,p=Math.max(t.r*o,1)+(f?f.gap+f.width/2:0),m=Math.ceil(i.width(u,d.text))+10,h=Lt(t.x*o+s+p*.7-2,l),g=Lt(t.y*o+c-p*.7-15+2,l);if(h+m<n.x0||h>n.x1||g+15<n.y0||g>n.y1)continue;if(a.insert(h-1,g-1,m+2,17),this.boxes.length<(this.count+1)*5){let e=new Float64Array(this.boxes.length*2);e.set(this.boxes),this.boxes=e}let _=this.count++*5;this.boxes[_]=h,this.boxes[_+1]=g,this.boxes[_+2]=m,this.boxes[_+3]=15,this.boxes[_+4]=r}}draw(e,t,n){if(this.count!==0){e.font=this.font,e.textAlign=`center`,e.textBaseline=`middle`;for(let r=0;r<this.count;r++){let i=r*5,a=this.boxes[i],o=this.boxes[i+1],s=this.boxes[i+2],c=this.boxes[i+3],l=t.nodes[this.boxes[i+4]],u=l.badge;u&&(e.globalAlpha=l.alpha,e.beginPath(),Nt(e,a,o,s,c,c/2),e.fillStyle=n.canvas.background,e.fill(),e.fillStyle=u.background,e.fill(),e.fillStyle=u.color,e.fillText(u.text,a+s/2,o+c/2+.5))}}}},Rn=new Map;function zn(e){if(typeof e.label==`string`&&e.label.length>0)return e.label;let t=e.count,n=Rn.get(t);return n===void 0&&(n=`+${t.toLocaleString(`en-US`)}`,Rn.size>4096&&Rn.clear(),Rn.set(t,n)),n}function Bn(e,t,n,r,i){let a=Math.ceil(r.width(n.get(11,500),zn(e)))+16;return i[0]=Lt(e.x*t.k+t.ox-a/2,t.dpr),i[1]=Lt(e.y*t.k+t.oy-10,t.dpr),i[2]=a,i[3]=20,i}var Vn=new Float64Array(4);function Hn(e,t,n,r,i,a,o){if(t.length===0)return;let s=a.get(11,500),c=Rt(1,r.dpr),l=!1;for(let u=0;u<t.length;u++){let d=t[u];if(n[u]!==1)continue;Bn(d,r,a,o,Vn);let f=Vn[0],p=Vn[1],m=Vn[2],h=Vn[3];f+m<r.x0||f>r.x1||p+h<r.y0||p>r.y1||(l||=(e.globalAlpha=1,e.lineWidth=1,e.font=s,e.textAlign=`center`,e.textBaseline=`middle`,!0),e.beginPath(),Nt(e,f+c,p+c,m-2*c,h-2*c,h/2),e.fillStyle=i.surface.raised,e.fill(),e.strokeStyle=i.surface.borderStrong,e.stroke(),e.fillStyle=i.text.secondary,e.fillText(zn(d),f+m/2,p+h/2+.5))}}function Un(e){return e>0?Math.min(e,1):0}function Wn(e,t,n,r,i,a,o,s,c,l,u,d){let f=r-t,p=i-n,m=Math.hypot(f,p),h=Un(c);if(!(m>1e-6)||h<=0)return 0;if(a===0||!Number.isFinite(a)){let r=f/m,i=p/m,a=o,c=m-s;if(c-a<.5)return 0;let g=a,_=c;if(h<1){let e=(c-a)*h;l?g=c-e:_=a+e}let v=_,y=u&&_-g>8.4;return y&&(v=_-6,d[0]=t+r*_,d[1]=n+i*_,d[2]=r,d[3]=i),e.moveTo(t+r*g,n+i*g),e.lineTo(t+r*v,n+i*v),y?2:1}let g=(t+r)/2-p*a,_=(n+i)/2+f*a,v=Bt(t,n,g,_,r,i,o,!1),y=Bt(t,n,g,_,r,i,s,!0);if(y-v<.01)return 0;let b=v,x=y;if(h<1){let e=(y-v)*h;l?b=y-e:x=v+e}let S=x,ee=!1;if(u){let e=zt(t,g,r,x),a=zt(n,_,i,x),o=Math.hypot(e,a);if(o>1e-6){let s=6/o;x-b>s*1.2&&(ee=!0,S=x-s,d[0]=j(t,g,r,x),d[1]=j(n,_,i,x),d[2]=e/o,d[3]=a/o)}}let te=j(t,g,r,b),ne=j(n,_,i,b),re=(S-b)/2;return e.moveTo(te,ne),e.quadraticCurveTo(te+re*zt(t,g,r,b),ne+re*zt(n,_,i,b),j(t,g,r,S),j(n,_,i,S)),ee?2:1}function Gn(e,t){let n=Number.isFinite(t)?Math.min(Math.abs(t),1):0;return Math.max(6,e*.8)*(1+2*n)}function Kn(e,t,n){return e-t-n*.5}function qn(e,t,n,r,i,a){let o=Un(a);if(o<=0)return 0;let s=Gn(r,i),c=Kn(n,r,s),l=Math.PI/2;return e.moveTo(t,c+s),e.arc(t,c,s,l,l+k*o),1}function Jn(e,t,n,r,i){let a=Number.isFinite(i)?i:0;return[(e+n)/2-(r-t)*a/2,(t+r)/2+(n-e)*a/2]}var Yn=new Float64Array(4),M=new Float64Array(1024);function Xn(e){if(M.length<(e+1)*4){let e=new Float64Array(M.length*2);e.set(M),M=e}let t=e*4;M[t]=Yn[0],M[t+1]=Yn[1],M[t+2]=Yn[2],M[t+3]=Yn[3]}function Zn(e,t){e.globalAlpha=t.alpha,e.strokeStyle=t.color,e.lineWidth=t.width,e.setLineDash(t.dash??jt),e.lineDashOffset=t.dash?t.dashOffset:0,e.lineCap=t.dash?`butt`:`round`,e.lineJoin=`round`}function Qn(e,t,n,r){return Math.abs(n-e)+Math.abs(r-t)<1e-9}function $n(e,t,n){return e&&!(n<t)}function er(e,t,n,r){let{k:i,ox:a,oy:o}=r,s=r.x0-48,c=r.x1+48,l=r.y0-48,u=r.y1+48,d=t.edges;for(let t of n.edgeBuckets){let n=!1,f=0,p=t.members;for(let m=0;m<p.length;m++){let h=d[p[m]],g=h.x1*i+a,_=h.y1*i+o,v=h.x2*i+a,y=h.y2*i+o,b=Math.max(h.r1*i,1),x=Qn(h.x1,h.y1,h.x2,h.y2);if(x){let e=Gn(b,h.curvature),t=Kn(_,b,e);if(g+e<s||g-e>c||t+e<l||t-e>u){r.stats.culledEdges++;continue}}else if(h.curvature===0){if(!Ut(g,_,v,y,s,l,c,u)){r.stats.culledEdges++;continue}}else{let e=(g+v)/2-(y-_)*h.curvature,t=(_+y)/2+(v-g)*h.curvature;if(Math.max(g,v,e)<s||Math.min(g,v,e)>c||Math.max(_,y,t)<l||Math.min(_,y,t)>u){r.stats.culledEdges++;continue}}n||=(Zn(e,t),e.beginPath(),!0);let S;if(x)S=qn(e,g,_,b,h.curvature,h.progress);else{let t=$n(h.arrow,h.arrowMinZoom,i),n=Math.max(h.r2*i,1)+(t?Mt:0);S=Wn(e,g,_,v,y,h.curvature,b,n,h.progress,h.fromTarget,t,Yn),S===2&&Xn(f++)}S!==0&&r.stats.edges++}if(n&&(e.stroke(),r.stats.edgeStrokes++,f>0)){e.fillStyle=t.color,e.beginPath();for(let t=0;t<f;t++){let n=t*4;Pt(e,M[n],M[n+1],M[n+2],M[n+3])}e.fill()}}}var tr=Object.freeze([.001,4]),nr={arrow:!0,dash:null,mark:!1},rr={arrow:!1,dash:tr,mark:!0},ir={arrow:!1,dash:null,mark:!1};function ar(e){switch(e){case`merge-arrow`:case`split-arrow`:case`move-arrow`:case`replacement-arrow`:case`edge-ghost`:return nr;case`suggestion`:return rr;default:return ir}}function or(e,t){return e>0&&Number.isFinite(e)?Math.max(e*t,1):0}var sr=new Float64Array(4);function cr(e,t,n,r,i,a){let{k:o,ox:s,oy:c}=r,l=r.x0-48,u=r.x1+48,d=r.y0-48,f=r.y1+48;for(let r of n.glyphArcs){let n=t.glyphs[r],p=n.x1*o+s,m=n.y1*o+c,h=n.x2*o+s,g=n.y2*o+c,_=Number.isFinite(n.curvature)?n.curvature:0,v=(p+h)/2-(g-m)*_,y=(m+g)/2+(h-p)*_;if(Math.max(p,h,v)<l||Math.min(p,h,v)>u||Math.max(m,g,y)<d||Math.min(m,g,y)>f)continue;let b=ar(n.kind),x=n.arrow,S=typeof x==`boolean`?x:b.arrow,ee=or(n.r1,o),te=or(n.r2,o),ne=n.dash!==null&&n.dash.length>0?n.dash:b.dash;e.globalAlpha=n.alpha,e.strokeStyle=n.color,e.lineWidth=n.width,e.setLineDash(ne??jt),e.lineDashOffset=0,e.lineCap=ne===null||(ne[0]??0)<.5?`round`:`butt`,e.lineJoin=`round`,e.beginPath();let re=Wn(e,p,m,h,g,_,ee,te>0&&S?te+Mt:te,n.progress,!1,S,sr);if(e.stroke(),re===2&&(e.fillStyle=n.color,e.beginPath(),Pt(e,sr[0],sr[1],sr[2],sr[3]),e.fill()),b.mark&&n.progress>=1&&Math.hypot(h-p,g-m)>42){let[t,r]=Jn(p,m,h,g,_);e.setLineDash(jt),e.beginPath(),e.arc(t,r,7,0,k),e.fillStyle=i.canvas.background,e.fill(),e.lineWidth=1.25,e.stroke(),e.fillStyle=n.color,e.font=a.get(10,700),e.textAlign=`center`,e.textBaseline=`middle`,e.fillText(`?`,t,r+.5)}}}function lr(e,t,n,r,i){let{k:a,ox:o,oy:s}=r;for(let c of n.pivots){let n=t.glyphs[c],l=n.x1*a+o,u=n.y1*a+s,d=Math.max(1.5,n.width/2);l+d<r.x0||l-d>r.x1||u+d<r.y0||u-d>r.y1||(e.globalAlpha=n.alpha,e.fillStyle=i.canvas.background,e.beginPath(),e.arc(l,u,d+1.5,0,k),e.fill(),e.fillStyle=n.color,e.beginPath(),e.arc(l,u,d,0,k),e.fill())}}var ur=new Map;function dr(e){let t=ur.get(e);if(t!==void 0)return t;let n=fr(e.trim().toLowerCase());return ur.size>512&&ur.clear(),ur.set(e,n),n}function fr(e){if(e.startsWith(`#`)){let t=e.slice(1);if(!/^[0-9a-f]+$/.test(t))return null;if(t.length===3||t.length===4){let e=e=>Number.parseInt(t.charAt(e)+t.charAt(e),16);return{r:e(0),g:e(1),b:e(2),a:t.length===4?e(3)/255:1}}if(t.length===6||t.length===8){let e=e=>Number.parseInt(t.slice(e,e+2),16);return{r:e(0),g:e(2),b:e(4),a:t.length===8?e(6)/255:1}}return null}let t=/^rgba?\(([^)]*)\)$/.exec(e);if(!t)return null;let n=(t[1]??``).split(/[\s,/]+/).filter(e=>e.length>0);if(n.length<3||n.length>4)return null;let r=e=>e.endsWith(`%`)?Number.parseFloat(e)*2.55:Number.parseFloat(e),i=e=>e===void 0?1:e.endsWith(`%`)?Number.parseFloat(e)/100:Number.parseFloat(e),a=r(n[0]??``),o=r(n[1]??``),s=r(n[2]??``),c=i(n[3]);return[a,o,s,c].every(Number.isFinite)?{r:A(a,0,255),g:A(o,0,255),b:A(s,0,255),a:A(c,0,1)}:null}function pr(e,t){let n=Math.round(A(e.a*t,0,1)*1e3)/1e3;return`rgba(${Math.round(e.r)}, ${Math.round(e.g)}, ${Math.round(e.b)}, ${n})`}var mr=[[0,1],[.3,.9],[.5,.6],[.7,.28],[.86,.08],[1,0]],hr=128,gr=class{factory;cache=new Map;constructor(e){this.factory=e}clear(){this.cache.clear()}get size(){return this.cache.size}sprite(e){let t=this.cache.get(e);return t===void 0&&(t=this.make(e),this.cache.size>64&&this.cache.clear(),this.cache.set(e,t)),t}make(e){let t=this.factory(hr,hr);if(!t)return null;let n=hr/2,r=t.ctx.createRadialGradient(n,n,0,n,n,n),i=dr(e);for(let[t,n]of mr)r.addColorStop(t,i?pr(i,n):n>0?e:`rgba(0, 0, 0, 0)`);return t.ctx.fillStyle=r,t.ctx.fillRect(0,0,hr,hr),t}};function _r(e,t,n,r,i,a){let{k:o,ox:s,oy:c}=r;i.glow||(e.lineWidth=2,e.setLineDash(jt));for(let l of n.halos){let n=t.nodes[l],u=n.halo,d=u.alpha*n.alpha;if(d<.01)continue;let f=n.x*o+s,p=n.y*o+c,m=Math.max(n.r*o,1),h=n.ring,g=h?m+h.gap+h.width/2:0,_=Math.max(u.radius*o,1),v=Math.max(_+5,g+1.5+1),y=i.glow?Math.max(u.radius*o,m*1.6):v+2;if(!(f+y<r.x0-48||f-y>r.x1+48)&&!(p+y<r.y0-48||p-y>r.y1+48)){if(e.globalAlpha=d,i.glow){let t=a.sprite(u.color);t&&e.drawImage(t.canvas,f-y,p-y,y*2,y*2)}else e.strokeStyle=u.color,e.beginPath(),e.arc(f,p,v,0,k),e.stroke()}}}function vr(){return{x:0,y:0,r:0,w:0,h:0,offset:0,priority:0,order:0,mode:0,pill:-1,placed:!1,side:0,bx:0,by:0,alpha:1,primary:null,secondary:null,textP:``,textS:``,fontP:``,fontS:``,wP:0,wS:0,hP:0,hS:0,dyS:0}}var yr=class{cell=64;cols=1;rows=1;x0=0;y0=0;cells=[[]];touched=[];rects=new Float64Array(1024);n=0;reset(e,t,n,r,i=64){for(let e of this.touched)this.cells[e].length=0;this.touched.length=0,this.n=0,this.cell=i,this.x0=e,this.y0=t,this.cols=Math.max(1,Math.ceil(n/i)),this.rows=Math.max(1,Math.ceil(r/i));let a=this.cols*this.rows;for(;this.cells.length<a;)this.cells.push([])}get count(){return this.n}extend(e){let t=this.rects;for(let n=0;n<this.n*4;n+=4)e[0]=Math.min(e[0],t[n]),e[1]=Math.min(e[1],t[n+1]),e[2]=Math.max(e[2],t[n]+t[n+2]),e[3]=Math.max(e[3],t[n+1]+t[n+3])}insert(e,t,n,r){if(this.rects.length<(this.n+1)*4){let e=new Float64Array(this.rects.length*2);e.set(this.rects),this.rects=e}let i=this.n++,a=i*4;this.rects[a]=e,this.rects[a+1]=t,this.rects[a+2]=n,this.rects[a+3]=r;let o=this.col(e),s=this.col(e+n),c=this.row(t),l=this.row(t+r);for(let e=c;e<=l;e++)for(let t=o;t<=s;t++){let n=e*this.cols+t,r=this.cells[n];r.length===0&&this.touched.push(n),r.push(i)}}overlaps(e,t,n,r){let i=this.col(e),a=this.col(e+n),o=this.row(t),s=this.row(t+r),c=this.rects;for(let l=o;l<=s;l++)for(let o=i;o<=a;o++){let i=this.cells[l*this.cols+o];for(let a=0;a<i.length;a++){let o=i[a]*4;if(Wt(e,t,n,r,c[o],c[o+1],c[o+2],c[o+3]))return!0}}return!1}col(e){let t=Math.floor((e-this.x0)/this.cell);return t<0?0:t>=this.cols?this.cols-1:t}row(e){let t=Math.floor((e-this.y0)/this.cell);return t<0?0:t>=this.rows?this.rows-1:t}};function br(e,t){return t.priority-e.priority||e.order-t.order}var xr=[0,1,2,3],Sr=[4,2,0],Cr=[4],wr={x:0,y:0};function Tr(e,t){let{x:n,y:r,r:i,w:a,h:o}=e,s,c;return e.mode===2?(s=n-a/2,c=r-o/2):e.mode===1?(s=n-a/2,c=t===2?r-o-4:t===0?r+4:r-o/2):t===1?(s=n+i+6,c=r-o/2):t===2?(s=n-a/2,c=r-i-e.offset-o):t===3?(s=n-i-6-a,c=r-o/2):(s=n-a/2,c=r+i+e.offset),wr.x=s,wr.y=c,wr}function Er(e,t,n){e.sort(br);let r=0;for(let i of e){i.placed=!1;let e=i.mode===2?Cr:i.mode===1?Sr:xr;for(let a of e){let{x:e,y:o}=Tr(i,a),{w:s,h:c}=i;if(!(e+s<n.x0||e>n.x1||o+c<n.y0||o>n.y1)&&!(n.strictX&&(e<n.x0||e+s>n.x1))&&!(n.strictY&&(o<n.y0||o+c>n.y1))&&!t.overlaps(e,o,s,c)){t.insert(e-2,o-2,s+4,c+4),i.placed=!0,i.side=a,i.bx=e,i.by=o,r++;break}}}return r}var Dr=2e4;function Or(e){return Math.round(e*1.3)}var kr=class{cache=new Map;family;mono;constructor(e){this.family=e.font.family,this.mono=e.font.mono}setTheme(e){(e.font.family!==this.family||e.font.mono!==this.mono)&&(this.family=e.font.family,this.mono=e.font.mono,this.cache.clear())}get(e,t,n=!1){let r=(n?-1:1)*(Math.round(t)*1e4+Math.round(e*100)),i=this.cache.get(r);return i===void 0&&(i=`${Math.round(t)} ${Math.round(e*100)/100}px ${n?this.mono:this.family}`,this.cache.set(r,i)),i}},Ar=/[ᄀ-ᇿ⺀-鿿가-豈--]/;function jr(e,t){let n=/(\d+(?:\.\d+)?)px/.exec(e),r=n?Number(n[1]):12,i=0;for(let e of t)i+=Ar.test(e)?r:r*.58;return i}var Mr=class{ctx;widths=new Map;fitted=new Map;count=0;font=``;constructor(e){this.ctx=e}setContext(e){this.ctx=e,this.clear()}clear(){this.widths.clear(),this.fitted.clear(),this.count=0,this.font=``}width(e,t){let n=this.widths.get(e);n||(n=new Map,this.widths.set(e,n));let r=n.get(t);return r===void 0&&(r=this.measure(e,t),++this.count>Dr&&(this.widths.clear(),this.fitted.clear(),this.count=0,n=new Map,this.widths.set(e,n)),n.set(t,r)),r}fit(e,t,n=240){if(this.width(e,t)<=n)return t;let r=this.fitted.get(e);r||(r=new Map,this.fitted.set(e,r));let i=r.get(t);if(i!==void 0)return i;let a=Array.from(t),o=0,s=a.length;for(;o<s;){let t=o+s+1>>1;this.measure(e,`${a.slice(0,t).join(``).trimEnd()}…`)<=n?o=t:s=t-1}let c=`${a.slice(0,o).join(``).trimEnd()}…`;return r.set(t,c),c}measure(e,t){let n=this.ctx;return n?(this.font!==e&&(n.font=e,this.font=e),n.measureText(t).width):jr(e,t)}},Nr=.02,Pr=new Float64Array(4);function Fr(e,t){if(!(e>0)||t>=e)return 1;let n=(t-.9*e)/(.1*e);return n<=0?0:n*n*(3-2*n)}function Ir(e,t,n){return e!==null&&e.text.length>0&&e.alpha*n*Fr(e.minZoom,t)>=Nr}var Lr=class{pool=[];active=[];clip={x0:0,y0:0,x1:0,y1:0,strictX:!1,strictY:!1};begin(e,t,n,r){r.reset(n.x0-160,n.y0-160,n.x1-n.x0+320,n.y1-n.y0+320);let{k:i,ox:a,oy:o}=n;if(!(t.maxR*i<3))for(let s of t.nodeBuckets)for(let t of s.members){let s=e.nodes[t],c=s.r*i;if(c<3)continue;let l=s.x*i+a,u=s.y*i+o;l+c<n.x0-160||l-c>n.x1+160||u+c<n.y0-160||u-c>n.y1+160||r.insert(l-c,u-c,2*c,2*c)}}place(e,t,n,r,i){this.collect(e,t,n,r);let a=e.collapsed.length;if(t.pillShown.length<a&&(t.pillShown=new Uint8Array(a)),t.pillShown.fill(0,0,a),t.pillsVersion=t.version,this.active.length===0)return;let o=this.clip;o.x0=n.x0,o.x1=n.x1,o.y0=n.y0,o.y1=n.y1,o.strictX=n.strictX,o.strictY=n.strictY,Er(this.active,i,o);for(let e of this.active)e.placed&&e.pill>=0&&(t.pillShown[e.pill]=1)}collect(e,t,n,r){this.active.length=0,this.collectNodes(e,n,r),this.collectEdges(e,n,r),this.collectGlyphs(e,t,n,r),this.collectPills(e,n,r)}extend(e){for(let t of this.active){let{x:n,y:r}=Tr(t,t.mode===0?0:4);e[0]=Math.min(e[0],n),e[1]=Math.min(e[1],r),e[2]=Math.max(e[2],n+t.w),e[3]=Math.max(e[3],r+t.h)}}draw(e,t,n,r){let i=0,a=n.canvas.background,o=r.atlas,s=o?.canvas??null;for(let n of this.active)if(!(!n.placed||n.pill>=0)){if(i++,n.primary){let r=Rr(n,n.wP);zr(e,n,n.primary,n.textP,n.fontP,n.wP,n.hP,r,n.by,t,a,o,s)}if(n.secondary){let r=Rr(n,n.wS);zr(e,n,n.secondary,n.textS,n.fontS,n.wS,n.hS,r,n.by+n.dyS,t,a,o,s)}}return i}take(){let e=this.active.length,t=this.pool[e];return t||(t=vr(),this.pool.push(t)),this.active.push(t),t.pill=-1,t}collectPills(e,t,n){let r=e.collapsed;for(let e=0;e<r.length;e++){let i=r[e];if(!(i.count>0)||!Number.isFinite(i.x+i.y))continue;Bn(i,t,n.fonts,n.measurer,Pr);let a=Pr[2],o=Pr[3],s=Pr[0]+a/2,c=Pr[1]+o/2;if(s<t.x0-160||s>t.x1+160||c<t.y0-160||c>t.y1+160)continue;let l=this.take();l.pill=e,l.x=s,l.y=c,l.r=0,l.w=a,l.h=o,l.offset=0,l.mode=2,l.priority=1,l.order=3e7+e,l.placed=!1,l.primary=null,l.secondary=null}}collectNodes(e,t,n){let{k:r,ox:i,oy:a}=t,o=e.nodes;for(let e=0;e<o.length;e++){let s=o[e];if(!s.visible||s.alpha<Nr)continue;let c=Ir(s.label,r,s.alpha)?s.label:null,l=Ir(s.secondaryLabel,r,s.alpha)?s.secondaryLabel:null;if(!c&&!l)continue;let u=s.x*r+i,d=s.y*r+a;if(u<t.x0-160||u>t.x1+160||d<t.y0-160||d>t.y1+160)continue;let f=this.take();f.x=u,f.y=d,f.r=Math.max(s.r*r,1),f.mode=0,f.order=e,f.alpha=s.alpha,this.fill(f,c,l,n)}}collectEdges(e,t,n){let{k:r,ox:i,oy:a}=t,o=e.edges;for(let e=0;e<o.length;e++){let s=o[e];if(s.label===null||!s.visible||s.progress<.999||!Ir(s.label,r,s.alpha))continue;let c=s.x1*r+i,l=s.y1*r+a,u,d;if(Qn(s.x1,s.y1,s.x2,s.y2)){let e=Math.max(s.r1*r,1),t=Gn(e,s.curvature);u=c,d=Kn(l,e,t)-t}else[u,d]=Jn(c,l,s.x2*r+i,s.y2*r+a,s.curvature);if(u<t.x0-160||u>t.x1+160||d<t.y0-160||d>t.y1+160)continue;let f=this.take();f.x=u,f.y=d,f.r=0,f.mode=1,f.order=1e7+e,f.alpha=s.alpha,this.fill(f,s.label,null,n)}}collectGlyphs(e,t,n,r){let{k:i,ox:a,oy:o}=n;for(let s of t.glyphArcs){let t=e.glyphs[s];if(!Ir(t.label,i,t.alpha)||t.progress<.999)continue;let[c,l]=Jn(t.x1*i+a,t.y1*i+o,t.x2*i+a,t.y2*i+o,t.curvature);if(c<n.x0-160||c>n.x1+160||l<n.y0-160||l>n.y1+160)continue;let u=this.take();u.x=c,u.y=l,u.r=t.kind===`suggestion`?7:0,u.mode=t.kind===`suggestion`?0:1,u.order=2e7+s,u.alpha=t.alpha,this.fill(u,t.label,null,r)}}fill(e,t,n,r){let{fonts:i,measurer:a}=r;e.primary=t,e.secondary=n,e.placed=!1,e.dyS=0,t&&(e.fontP=i.get(t.size,t.weight),e.textP=a.fit(e.fontP,t.text,240),e.wP=Math.ceil(a.width(e.fontP,e.textP)),e.hP=Or(t.size)),n&&(e.fontS=i.get(n.size,n.weight),e.textS=a.fit(e.fontS,n.text,240),e.wS=Math.ceil(a.width(e.fontS,e.textS)),e.hS=Or(n.size)),t&&n?(e.dyS=Math.max(n.offset-t.offset,e.hP-1),e.w=Math.max(e.wP,e.wS),e.h=e.dyS+e.hS,e.offset=t.offset,e.priority=Math.max(t.priority,n.priority)):t?(e.w=e.wP,e.h=e.hP,e.offset=t.offset,e.priority=t.priority):n&&(e.w=e.wS,e.h=e.hS,e.offset=n.offset,e.priority=n.priority)}};function Rr(e,t){switch(e.side){case 1:return e.bx;case 3:return e.bx+e.w-t;case 0:case 2:case 4:return e.bx+(e.w-t)/2;default:return e.bx}}function zr(e,t,n,r,i,a,o,s,c,l,u,d,f){let p=n.alpha*t.alpha*Fr(n.minZoom,l.k),m=Lt(s,l.dpr),h=Lt(c,l.dpr),g=d&&f?d.get(r,i,n.color,n.strike,a,o):null;g!==void 0&&(g&&f?(e.globalAlpha=p,e.drawImage(f,g.sx,g.sy,g.sw,g.sh,m-2,h-2,g.sw/l.dpr,g.sh/l.dpr)):kn(e,r,i,n.color,u,n.strike,m,h,a,o,p))}var Br=[];function Vr(e,t,n){let r=0;for(let t of e)r+=t;e.length%2==1&&(r*=2),n.length=e.length;let i=k*t,a=Math.max(1,Math.round(i/r)),o=r>0?i/(a*r):1;for(let t=0;t<e.length;t++)n[t]=e[t]*o;return n}function Hr(e,t,n,r){return t+r>=e.x0-48&&t-r<=e.x1+48&&n+r>=e.y0-48&&n-r<=e.y1+48}function Ur(e,t,n,r,i){let{k:a,ox:o,oy:s}=r,c=t.members,l=t.fill??i;if(e.globalAlpha=t.alpha,t.dash!==null&&t.stroke!==null){e.fillStyle=l,e.strokeStyle=t.stroke,e.lineWidth=t.strokeWidth,e.lineCap=`butt`;for(let i=0;i<c.length;i++){let l=n[c[i]],u=l.x*a+o,d=l.y*a+s,f=Math.max(l.r*a,1);Hr(r,u,d,f)?(r.stats.nodes++,e.beginPath(),e.arc(u,d,f,0,k),e.fill(),e.setLineDash(f<3?jt:Vr(t.dash,f,Br)),e.stroke()):r.stats.culledNodes++}e.setLineDash(jt);return}let u=!1,d=0;for(let t=0;t<c.length;t++){let i=n[c[t]],l=i.x*a+o,f=i.y*a+s,p=Math.max(i.r*a,1);Hr(r,l,f,p)?(r.stats.nodes++,p<1.25?d++:(u||=(e.beginPath(),!0),e.moveTo(l+p,f),e.arc(l,f,p,0,k))):r.stats.culledNodes++}if(u&&(e.fillStyle=l,e.fill(),t.stroke!==null&&(e.strokeStyle=t.stroke,e.lineWidth=t.strokeWidth,e.setLineDash(jt),e.stroke())),d>0){e.beginPath();for(let t=0;t<c.length;t++){let i=n[c[t]],l=Math.max(i.r*a,1);if(l>=1.25)continue;let u=i.x*a+o,d=i.y*a+s;Hr(r,u,d,l)&&e.rect(u-l,d-l,2*l,2*l)}e.fillStyle=t.fill??t.stroke??i,e.fill()}}function Wr(e,t,n,r){let i=t.x*n.k+n.ox,a=t.y*n.k+n.oy,o=Math.max(t.r*n.k,1),s=t.ring;if(!Hr(n,i,a,o+(s?s.gap+s.width:0)+24))return;if(s!==null&&s.width>0){let n=s.alpha*t.alpha;n>=.01&&(e.globalAlpha=n,e.strokeStyle=s.color,e.lineWidth=s.width,e.setLineDash(jt),e.beginPath(),e.arc(i,a,o+s.gap,0,k),e.stroke())}let c=t.pulse;if(c>0&&c<1){let n=1-c,l=n*n*.85*t.alpha;l>=.01&&(e.globalAlpha=l,e.strokeStyle=s?.color??t.stroke??t.fill??r.accent.base,e.lineWidth=.75+1.75*n,e.setLineDash(jt),e.beginPath(),e.arc(i,a,o+3+c*(12+o*.6),0,k),e.stroke())}}function Gr(e,t,n,r,i){let a=t.nodes,o=n.nodeBuckets,s=n.decor,c=i.canvas.background,l=0;for(let t=0;t<o.length;t++){let n=o[t];Ur(e,n,a,r,c);let u=o[t+1];if(u===void 0||u.z!==n.z)for(;l<s.length&&pn(a[s[l]].z)<=n.z;)Wr(e,a[s[l]],r,i),l++}for(;l<s.length;)Wr(e,a[s[l++]],r,i)}function Kr(){return{nodes:0,edges:0,culledNodes:0,culledEdges:0,labels:0,edgeStrokes:0,deferredLabels:0,phases:[]}}function qr(e){e.nodes=0,e.edges=0,e.culledNodes=0,e.culledEdges=0,e.labels=0,e.edgeStrokes=0,e.deferredLabels=0,e.phases.length=0}function Jr(e){return`before`in e&&`after`in e&&`split`in e}function Yr(e,t,n){return Lt(A(Number.isFinite(e)?e:.5,0,1)*t,n)}var Xr=class{factory;fonts;measurer;atlas;halos;tiles;interner=new un;dpr=0;theme;constructor(e,t,n){this.factory=e,this.theme=t,this.fonts=new kr(t),this.measurer=new Mr(e(1,1)?.ctx??n),this.atlas=new An(e),this.halos=new gr(e),this.tiles=new Fn(e)}setTheme(e){e!==this.theme&&(this.theme=e,this.fonts.setTheme(e),this.measurer.clear(),this.halos.clear(),this.tiles.clear(),this.atlas?.configure(this.dpr||1,e.canvas.background))}prepare(e){e!==this.dpr&&(this.dpr=e,this.tiles.clear(),this.atlas?.configure(e,this.theme.canvas.background))}fontsChanged(){this.measurer.clear(),this.atlas?.wipe()}},Zr=class{res;stats=Kr();rasterBudget=160;labelsInside=!1;labels=new Lr;badges=new Ln;grid=new yr;view={k:1,ox:0,oy:0,width:0,height:0,dpr:1,x0:0,x1:0,y0:0,y1:0,strictX:!1,strictY:!1,stats:this.stats};constructor(e){this.res=e}paint(e,t,n,r,i,a,o){let{ctx:s,width:c,height:l,dpr:u}=e,d=this.view;qr(this.stats),this.res.prepare(u),this.res.atlas?.beginFrame(this.rasterBudget),d.k=t.k,d.ox=c/2-t.x*t.k,d.oy=l/2-t.y*t.k,d.width=c,d.height=l,d.dpr=u,d.x0=0,d.x1=c,d.y0=0,d.y1=l,d.strictX=this.labelsInside,d.strictY=this.labelsInside,s.setTransform(u,0,0,u,0,0),s.imageSmoothingEnabled=!0;let f=n!==null&&Jr(n),p=n===null?0:f?Math.max(n.before.spotlight,n.after.spotlight):n.spotlight;if(In(s,d,a,o?this.res.tiles:null,p),this.stats.phases.push(`background`),n===null)return this.stats;if(!f)return r.main.sync(n,i,this.res.interner),this.layers(s,n,r.main,a),this.stats;let m=Yr(n.split,c,u);if(r.before.sync(n.before,i,this.res.interner),r.after.sync(n.after,i,this.res.interner),m>0&&(d.x0=0,d.x1=m,d.strictX=!0,s.save(),s.beginPath(),s.rect(0,0,m,l),s.clip(),this.layers(s,n.before,r.before,a),s.restore()),m<c&&(d.x0=m,d.x1=c,d.strictX=!0,s.save(),s.beginPath(),s.rect(m,0,c-m,l),s.clip(),this.layers(s,n.after,r.after,a),s.restore()),m>0&&m<c){let e=Math.max(1,Math.round(u));s.globalAlpha=1,s.fillStyle=a.surface.borderStrong,s.fillRect(Math.round(m*u-e/2)/u,0,e/u,l)}return this.stats.phases.push(`divider`),this.stats}layers(e,t,n,r){let i=this.view,a=this.res,o=this.stats.phases;this.labels.begin(t,n,i,this.grid),this.badges.layout(t,n,i,a.fonts,a.measurer,this.grid),this.labels.place(t,n,i,a,this.grid),Hn(e,t.collapsed,n.pillShown,i,r,a.fonts,a.measurer),o.push(`collapsed`),er(e,t,n,i),o.push(`edges`),cr(e,t,n,i,r,a.fonts),o.push(`glyphs`),_r(e,t,n,i,r,a.halos),o.push(`halos`),Gr(e,t,n,i,r),o.push(`nodes`),lr(e,t,n,i,r),o.push(`pivots`),this.badges.draw(e,t,r),o.push(`badges`),this.stats.labels+=this.labels.draw(e,i,r,a),this.stats.deferredLabels=a.atlas?.deferred??0,o.push(`labels`)}},Qr=[],$r=new Float64Array(4);function ei(e,t,n,r,i){if(t.nodeCount===0)return-1;let{k:a}=n,o=(r-n.ox)/a,s=(i-n.oy)/a,c=t.nodeGrid(),l=Math.max(c.maxR,1/a)+3/a;c.query(o-l,s-l,o+l,s+l,Qr);let u=-1,d=!1,f=-1/0,p=1/0;for(let t of Qr){let n=e.nodes[t],r=Math.max(n.r,1/a),i=Math.hypot(n.x-o,n.y-s);if(i>r+3/a)continue;let c=i<=r;(u<0||c&&!d||c===d&&(n.z>f||n.z===f&&(c?t>u:i<p)))&&(u=t,d=c,f=n.z,p=i)}return u}function ti(e,t,n,r,i){let{k:a}=n,o=(r-n.ox)/a,s=(i-n.oy)/a,c=-1,l=-1/0,u=1/0;for(let n of t.edgeBuckets){let t=(n.width/2+4)/a,r=t*t;for(let i of n.members){let d=e.edges[i],f;if(Qn(d.x1,d.y1,d.x2,d.y2)){let e=Math.max(d.r1*a,1),t=Gn(e,d.curvature)/a,n=Kn(d.y1*a,e,t*a)/a,r=Math.abs(Math.hypot(o-d.x1,s-n)-t);f=r*r}else if(d.curvature===0){if(o<Math.min(d.x1,d.x2)-t||o>Math.max(d.x1,d.x2)+t||s<Math.min(d.y1,d.y2)-t||s>Math.max(d.y1,d.y2)+t)continue;f=Vt(o,s,d.x1,d.y1,d.x2,d.y2)}else{let e=(d.x1+d.x2)/2-(d.y2-d.y1)*d.curvature,n=(d.y1+d.y2)/2+(d.x2-d.x1)*d.curvature;if(o<Math.min(d.x1,d.x2,e)-t||o>Math.max(d.x1,d.x2,e)+t||s<Math.min(d.y1,d.y2,n)-t||s>Math.max(d.y1,d.y2,n)+t)continue;f=Ht(o,s,d.x1,d.y1,e,n,d.x2,d.y2)}f>r||(n.z>l||n.z===l&&f<u)&&(c=i,l=n.z,u=f)}}return c}function ni(e,t,n,r,i,a,o){let s=e.collapsed;for(let e=s.length-1;e>=0;e--){let c=s[e];if(c.count>0&&Number.isFinite(c.x+c.y)&&t.pillPickable(e)&&(Bn(c,n,a,o,$r),r>=$r[0]&&r<=$r[0]+$r[2]&&i>=$r[1]&&i<=$r[1]+$r[3]))return e}return-1}function ri(e,t,n,r,i,a,o){let s=ei(e,t,n,r,i);if(s>=0)return{type:`node`,index:s};let c=ti(e,t,n,r,i);if(c>=0)return{type:`edge`,index:c};let l=ni(e,t,n,r,i,a,o);return l>=0?{type:`collapsed`,index:l}:null}var ii=new WeakMap,ai=3;function oi(e,t){return e===t||e!==null&&t!==null&&e.type===t.type&&e.index===t.index}function si(){return typeof window<`u`&&window.devicePixelRatio>0?window.devicePixelRatio:1}var ci=class{canvas;camera;ctx;theme;safe;grid;fixedRatio;dpr=1;width=0;height=0;frame=null;version=0;caches={main:new _n,before:new _n,after:new _n};res;painter;listeners={hover:new Set,click:new Set,dblclick:new Set,camera:new Set,frame:new Set};themeListeners=new Set;cleanup=[];now;requestFrame;cancelFrame;motionQuery;rafId=0;dirty=!0;busy=!1;destroyed=!1;cameraChanged=!0;viewportChanged=!0;emitted=null;autoFitted=!1;pointer=null;hoverPending=!1;hovered=null;dragging=!1;constructor(e,t,n){let r=t.minZoom??.05,i=t.maxZoom??6;if(!(r>0)||!(i>=r)||!Number.isFinite(i))throw new p(`invalid-input`,`createRenderer: expected 0 < minZoom ≤ maxZoom, got minZoom ${r}, maxZoom ${i}`);if(t.pixelRatio!==void 0&&!(t.pixelRatio>0))throw new p(`invalid-input`,`createRenderer: pixelRatio must be > 0, got ${t.pixelRatio}`);this.theme=t.theme,this.safe=t.safeArea??qt,this.grid=t.grid??!0,this.fixedRatio=t.pixelRatio,this.now=n.now??(()=>performance.now()),this.requestFrame=n.requestFrame??(e=>typeof requestAnimationFrame==`function`?requestAnimationFrame(e):0),this.cancelFrame=n.cancelFrame??(e=>typeof cancelAnimationFrame==`function`?cancelAnimationFrame(e):void 0),this.motionQuery=typeof window<`u`&&typeof window.matchMedia==`function`?window.matchMedia(`(prefers-reduced-motion: reduce)`):null;let a=document.createElement(`canvas`);a.setAttribute(`role`,`img`);let o=a.style;o.position=`absolute`,o.left=`0`,o.top=`0`,o.width=`100%`,o.height=`100%`,o.display=`block`,o.touchAction=`none`,o.userSelect=`none`,o.setProperty(`-webkit-user-select`,`none`),o.setProperty(`-webkit-tap-highlight-color`,`transparent`),o.outline=`none`,e.appendChild(a),this.canvas=a,this.ctx=n.context===void 0?a.getContext(`2d`,{alpha:!1}):n.context,this.camera=new an({size:()=>({width:this.width,height:this.height}),safeArea:()=>this.safe,contentBounds:()=>this.contentBounds(),reducedMotion:()=>this.motionQuery?.matches??!1,invalidate:()=>{this.cameraChanged=!0,this.pointer&&(this.hoverPending=!0),this.requestRender()}},r,i),this.res=new Xr(n.surfaceFactory??At,this.theme,this.ctx),this.painter=new Zr(this.res),this.painter.labelsInside=t.labelsInside??!1,this.observeSize(),this.watchPixelRatio(),this.watchFonts(),(t.interactive??!0)&&this.cleanup.push(Dn(a,{camera:this.camera,hover:(e,t)=>{this.pointer={x:e,y:t},this.hoverPending=!0,this.schedule()},leave:()=>{this.pointer=null,this.setHover(null)},click:(e,t,n)=>{this.emit(`click`,{pick:this.pick(e,t),world:this.camera.screenToWorld({x:e,y:t}),event:n})},dblclick:(e,t,n)=>{this.emit(`dblclick`,{pick:this.pick(e,t),world:this.camera.screenToWorld({x:e,y:t}),event:n})},dragging:e=>{this.dragging=e,this.canvas.style.cursor=e?`grabbing`:``,e?this.setHover(null):this.pointer&&(this.hoverPending=!0,this.schedule())},now:this.now})),ii.set(this,{theme:()=>this.theme,pixelRatio:()=>this.dpr,size:()=>({width:this.width,height:this.height}),userSet:e=>this.camera.set(e,`user`),onTheme:e=>(this.themeListeners.add(e),()=>this.themeListeners.delete(e)),requestFrame:this.requestFrame,cancelFrame:this.cancelFrame}),this.resize()}setFrame(e){this.destroyed||(this.frame=e,this.version++,this.pointer&&(this.hoverPending=!0),this.requestRender())}setTheme(e){if(!(this.destroyed||e===this.theme)){this.theme=e,this.res.setTheme(e);for(let t of this.themeListeners)t(e);this.requestRender()}}setSafeArea(e){this.safe={top:e.top,right:e.right,bottom:e.bottom,left:e.left}}setLabelsInside(e){this.destroyed||this.painter.labelsInside===e||(this.painter.labelsInside=e,this.dirty=!0,this.requestRender())}pick(e,t){let n=this.frame;if(!n||!Number.isFinite(e)||!Number.isFinite(t))return null;let r=this.camera.k,i={k:r,ox:this.width/2-this.camera.x*r,oy:this.height/2-this.camera.y*r,dpr:this.dpr},a,o;if(Jr(n)){let t=e<Yr(n.split,this.width,this.dpr);a=t?n.before:n.after,o=t?this.caches.before:this.caches.after}else a=n,o=this.caches.main;return o.sync(a,this.version,this.res.interner),ri(a,o,i,e,t,this.res.fonts,this.res.measurer)}on(e,t){let n=this.listeners[e];return n.add(t),()=>{n.delete(t)}}resize(){this.destroyed||(this.applySize(this.canvas.clientWidth,this.canvas.clientHeight,null),this.draw())}requestRender(){this.destroyed||(this.dirty=!0,this.busy||this.schedule())}toDataURL(e){let t=e!==void 0&&e>0?Math.min(e,8):this.dpr;if(!this.ctx)return this.canvas.toDataURL(`image/png`);if(t===this.dpr)return this.painter.rasterBudget=1/0,this.draw(),this.painter.rasterBudget=160,this.canvas.toDataURL(`image/png`);let n=document.createElement(`canvas`);n.width=Math.max(1,Math.round(this.width*t)),n.height=Math.max(1,Math.round(this.height*t));let r=n.getContext(`2d`,{alpha:!1});return r?(this.painter.rasterBudget=1/0,this.painter.paint({ctx:r,width:this.width,height:this.height,dpr:t},this.camera,this.frame,this.caches,this.version,this.theme,this.grid),this.painter.rasterBudget=160,this.dirty=!0,this.schedule(),n.toDataURL(`image/png`)):this.canvas.toDataURL(`image/png`)}destroy(){if(!this.destroyed){this.destroyed=!0,this.rafId&&this.cancelFrame(this.rafId),this.rafId=0,this.camera.stop();for(let e of this.cleanup.splice(0))e();for(let e of Object.values(this.listeners))e.clear();this.themeListeners.clear(),this.canvas.remove(),ii.delete(this)}}schedule(){this.rafId===0&&!this.destroyed&&(this.rafId=this.requestFrame(this.tick)||0)}tick=e=>{if(this.rafId=0,!this.destroyed){this.busy=!0;try{this.camera.tick(e),this.emitCamera(),this.hoverPending&&this.updateHover()}finally{this.busy=!1}this.dirty&&this.draw(),this.camera.animating&&this.schedule()}};draw(){if(this.destroyed)return;let e=this.ctx;if(!e||this.width<=0||this.height<=0)this.dirty=!1;else{this.busy=!0;try{this.autoFit(),this.dirty=!1;let t=this.now();this.painter.paint({ctx:e,width:this.width,height:this.height,dpr:this.dpr},this.camera,this.frame,this.caches,this.version,this.theme,this.grid);let n=this.now()-t;this.painter.stats.deferredLabels>0&&(this.dirty=!0),this.emitCamera(),this.emit(`frame`,{ms:n})}finally{this.busy=!1}this.dirty&&this.schedule()}}autoFit(){if(this.autoFitted||this.camera.touched||!this.frame)return;let e=this.contentBounds();e&&(this.autoFitted=!0,this.camera.jump(this.camera.targetFor(e,{},{width:this.width,height:this.height})))}emitCamera(){if(!this.cameraChanged)return;this.cameraChanged=!1;let e=this.camera.get(),t=this.emitted,n=this.viewportChanged;this.viewportChanged=!1;let r=this.camera.takeSource();(n||!t||t.x!==e.x||t.y!==e.y||t.k!==e.k)&&(this.emitted=e,this.emit(`camera`,{x:e.x,y:e.y,k:e.k,source:r}))}updateHover(){this.hoverPending=!1,this.pointer&&!this.dragging&&this.setHover(this.pick(this.pointer.x,this.pointer.y))}setHover(e){oi(e,this.hovered)||(this.hovered=e,this.dragging||(this.canvas.style.cursor=e?`pointer`:``),this.emit(`hover`,e))}emit(e,t){for(let n of this.listeners[e])n(t)}contentBounds(){let e=this.frame;if(!e)return null;let{interner:t}=this.res;return Jr(e)?(this.caches.before.sync(e.before,this.version,t),this.caches.after.sync(e.after,this.version,t),vn(this.caches.before.contentBounds(),this.caches.after.contentBounds())):(this.caches.main.sync(e,this.version,t),this.caches.main.contentBounds())}pixelRatio(){return A(this.fixedRatio??si(),.25,ai)}applySize(e,t,n){let r=this.pixelRatio(),i=n!==null&&this.fixedRatio===void 0&&si()<=ai,a=Math.max(1,i?n[0]:Math.round(e*r)),o=Math.max(1,i?n[1]:Math.round(t*r));this.canvas.width!==a&&(this.canvas.width=a),this.canvas.height!==o&&(this.canvas.height=o);let s=e!==this.width||t!==this.height||r!==this.dpr;this.width=Math.max(0,e),this.height=Math.max(0,t),this.dpr=r,s&&(this.cameraChanged=!0,this.viewportChanged=!0,this.camera.resized()),this.dirty=!0}observeSize(){if(typeof ResizeObserver!=`function`)return;let e=new ResizeObserver(e=>{if(this.destroyed)return;let t=e[e.length-1];if(!t)return;let n=t.contentBoxSize?.[0],r=n?n.inlineSize:t.contentRect.width,i=n?n.blockSize:t.contentRect.height,a=t.devicePixelContentBoxSize?.[0];this.applySize(r,i,a?[a.inlineSize,a.blockSize]:null),this.draw()});try{e.observe(this.canvas,{box:`device-pixel-content-box`})}catch{e.observe(this.canvas)}this.cleanup.push(()=>e.disconnect())}watchPixelRatio(){if(typeof window>`u`||typeof window.matchMedia!=`function`)return;let e=null,t=()=>{e?.removeEventListener(`change`,t),e=window.matchMedia(`(resolution: ${si()}dppx)`),e.addEventListener(`change`,t),!this.destroyed&&this.pixelRatio()!==this.dpr&&this.resize()};e=window.matchMedia(`(resolution: ${si()}dppx)`),e.addEventListener(`change`,t),this.cleanup.push(()=>e?.removeEventListener(`change`,t))}watchFonts(){let e=typeof document<`u`?document.fonts:void 0;if(!e||typeof e.addEventListener!=`function`)return;let t=()=>{this.res.fontsChanged(),this.requestRender()};e.addEventListener(`loadingdone`,t),this.cleanup.push(()=>e.removeEventListener(`loadingdone`,t))}};function li(e,t,n={}){if(!e||typeof e.appendChild!=`function`)throw new p(`invalid-input`,`createRenderer: container must be an HTMLElement`);return new ci(e,t,n)}var ui=8,di=12,fi=1.5,pi=.45,mi=2.5,hi=1,gi=3e3,_i=.5,vi=.12,yi=50,bi=.8;function xi(e,t){let n=e.family;return n===`neutral`?null:t.family[n]?.base??null}function Si(e,t){let n=e.x+e.width/2,r=e.y+e.height/2,i=Math.max(e.width/2,1),a=Math.max(e.height/2,1);return t&&Number.isFinite(t.x+t.y+t.width+t.height)&&t.width>0&&t.height>0&&(i=Math.max(i,n-t.x,t.x+t.width-n),a=Math.max(a,r-t.y,t.y+t.height-r)),{x:n-i,y:r-a,width:2*i,height:2*a}}var Ci=class{value=0;target=0;growing=!1;retarget(e){if(!(e>0)||!Number.isFinite(e))return!1;if(this.target=e,!(this.value>0)||e<=this.value){let t=e!==this.value;return this.value=e,this.growing=!1,t}return!this.growing&&this.value<e*bi&&(this.growing=!0),!1}step(e){return this.growing?(this.value+=(this.target-this.value)*(1-Math.exp(-Math.max(0,e)/yi)),Math.abs(this.target-this.value)<=this.target*.002&&(this.value=this.target,this.growing=!1),this.growing):!1}};function wi(e,t,n,r){let i=Math.max(1,t-2*r),a=Math.max(1,n-2*r),o=Math.max(e.width,1e-9),s=Math.max(e.height,1e-9),c=Math.min(i/o,a/s);return{s:c,ox:(t-o*c)/2-e.x*c,oy:(n-s*c)/2-e.y*c}}var Ti=class{renderer;canvas;ctx;factory;width;height;theme;dpr=1;layer=null;frame=null;collapsed=[];fit=null;content=null;scale=new Ci;rafId=0;lastTick=-1;cleanup=[];drag=null;destroyed=!1;constructor(e,t,n,r){this.renderer=t;let i=ii.get(t);if(!i)throw new p(`invalid-input`,`createMinimap: renderer is destroyed or was not created by createRenderer`);this.width=Math.max(16,Math.round(n.width??184)),this.height=Math.max(16,Math.round(n.height??128)),this.theme=i.theme(),this.factory=r.surfaceFactory??At;let a=document.createElement(`canvas`);a.setAttribute(`aria-hidden`,`true`);let o=a.style;o.display=`block`,o.width=`${this.width}px`,o.height=`${this.height}px`,o.borderRadius=`${di}px`,o.touchAction=`none`,o.cursor=`pointer`,o.setProperty(`-webkit-tap-highlight-color`,`transparent`),e.appendChild(a),this.canvas=a,this.ctx=r.context===void 0?a.getContext(`2d`):r.context,this.style(),this.resizeBuffer(i.pixelRatio()),this.cleanup.push(t.on(`camera`,()=>{this.refit(!1),this.redraw()})),this.cleanup.push(i.onTheme(e=>{this.theme=e,this.style(),this.rasterize(),this.redraw()}));let s=(e,t)=>{a.addEventListener(e,t),this.cleanup.push(()=>a.removeEventListener(e,t))};s(`pointerdown`,e=>this.onDown(e)),s(`pointermove`,e=>this.onMove(e)),s(`pointerup`,e=>this.onUp(e)),s(`pointercancel`,e=>this.onUp(e)),this.redraw()}update(e,t){if(this.destroyed)return;this.frame=e,this.collapsed=t??e.collapsed;let n=ii.get(this.renderer);n&&n.pixelRatio()!==this.dpr&&this.resizeBuffer(n.pixelRatio());let r=this.content===null;this.content=this.bounds(),this.refit(r),this.rasterize(),this.redraw()}transform(){return this.fit}destroy(){if(!this.destroyed){this.destroyed=!0,this.rafId&&ii.get(this.renderer)?.cancelFrame(this.rafId),this.rafId=0;for(let e of this.cleanup.splice(0))e();this.canvas.remove(),this.layer=null,this.frame=null}}style(){let e=this.canvas.style;e.background=this.theme.surface.overlay,e.boxShadow=this.theme.surface.shadow,e.setProperty(`backdrop-filter`,`blur(16px)`),e.setProperty(`-webkit-backdrop-filter`,`blur(16px)`)}refit(e){let t=this.content;if(!t){this.fit=null;return}if(this.drag&&!e)return;let n=wi(Si(t,this.renderer.camera.viewport()),this.width,this.height,ui).s;e&&(this.scale.value=0);let r=this.scale.retarget(n);this.applyScale(),r&&!e&&this.rasterize(),this.scale.growing&&this.schedule()}applyScale(){let e=this.content,t=this.scale.value;if(!e||!(t>0)){this.fit=null;return}let n=e.x+e.width/2,r=e.y+e.height/2;this.fit={s:t,ox:this.width/2-n*t,oy:this.height/2-r*t}}schedule(){if(this.rafId||this.destroyed)return;let e=ii.get(this.renderer);e&&(this.rafId=e.requestFrame(this.tick)||0)}tick=e=>{if(this.rafId=0,this.destroyed)return;let t=this.lastTick<0?16:Math.min(64,e-this.lastTick),n=this.scale.step(t);this.lastTick=n?e:-1,this.applyScale(),this.rasterize(),this.redraw(),n&&this.schedule()};resizeBuffer(e){this.dpr=e,this.canvas.width=Math.round(this.width*e),this.canvas.height=Math.round(this.height*e),this.layer=this.factory(this.canvas.width,this.canvas.height),this.rasterize()}bounds(){let e=this.frame;if(!e)return null;let t=1/0,n=1/0,r=-1/0,i=-1/0;for(let a of e.nodes)a.visible&&Number.isFinite(a.x+a.y)&&(a.x<t&&(t=a.x),a.y<n&&(n=a.y),a.x>r&&(r=a.x),a.y>i&&(i=a.y));for(let e of this.collapsed)Number.isFinite(e.x+e.y)&&(t=Math.min(t,e.x),n=Math.min(n,e.y),r=Math.max(r,e.x),i=Math.max(i,e.y));return t<=r?{x:t,y:n,width:r-t,height:i-n}:null}rasterize(){let e=this.layer?.ctx??null;e&&(e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,this.canvas.width,this.canvas.height),this.drawMarks(e))}drawMarks(e){let t=this.frame,n=this.fit;if(!t||!n)return;let r=this.theme,i=this.dpr,a=e=>(e*n.s+n.ox)*i,o=e=>(e*n.s+n.oy)*i,s=r.name===`light`?r.neutral.nodeStroke:r.neutral.node;if(t.edges.length>0&&t.edges.length<gi){e.globalAlpha=vi,e.strokeStyle=s,e.lineWidth=Math.max(1,_i*i),e.setLineDash([]),e.beginPath();for(let n of t.edges)n.visible&&Number.isFinite(n.x1+n.y1+n.x2+n.y2)&&(e.moveTo(a(n.x1),o(n.y1)),e.lineTo(a(n.x2),o(n.y2)));e.stroke()}let c=Math.max(1,Math.round(fi*i)),l=new Map;e.globalAlpha=pi,e.fillStyle=s,e.beginPath();for(let n=0;n<t.nodes.length;n++){let i=t.nodes[n];if(!i.visible||!Number.isFinite(i.x+i.y))continue;let s=xi(i,r);if(s!==null){let e=l.get(s);e||(e=[],l.set(s,e)),e.push(n)}else e.rect(Math.round(a(i.x)-c/2),Math.round(o(i.y)-c/2),c,c)}e.fill();let u=mi/2*i,d=u+hi*i;e.globalAlpha=.6,e.fillStyle=r.text.muted,e.beginPath();for(let t of this.collapsed)Number.isFinite(t.x+t.y)&&e.rect(Math.round(a(t.x)-u),Math.round(o(t.y)-u),Math.round(2*u),Math.round(2*u));if(e.fill(),l.size!==0){e.globalAlpha=1,e.fillStyle=r.canvas.background,e.beginPath();for(let n of l.values())for(let r of n){let n=t.nodes[r];e.moveTo(a(n.x)+d,o(n.y)),e.arc(a(n.x),o(n.y),d,0,k)}e.fill();for(let[n,r]of l){e.fillStyle=n,e.beginPath();for(let n of r){let r=t.nodes[n];e.moveTo(a(r.x)+u,o(r.y)),e.arc(a(r.x),o(r.y),u,0,k)}e.fill()}}}redraw(){let e=this.ctx;if(!e||this.destroyed)return;let t=ii.get(this.renderer)?.pixelRatio();t!==void 0&&t!==this.dpr&&this.resizeBuffer(t);let n=this.dpr,r=this.width,i=this.height;e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,this.canvas.width,this.canvas.height),e.save(),e.setTransform(n,0,0,n,0,0),e.beginPath(),Nt(e,0,0,r,i,di),e.clip(),this.layer?(e.setTransform(1,0,0,1,0,0),e.drawImage(this.layer.canvas,0,0,this.canvas.width,this.canvas.height),e.setTransform(n,0,0,n,0,0)):(e.setTransform(1,0,0,1,0,0),this.drawMarks(e),e.setTransform(n,0,0,n,0,0));let a=this.fit;if(a){let t=this.renderer.camera.viewport(),o=A(t.x*a.s+a.ox,-2,r+2),s=A(t.y*a.s+a.oy,-2,i+2),c=A((t.x+t.width)*a.s+a.ox,-2,r+2),l=A((t.y+t.height)*a.s+a.oy,-2,i+2);if(c-o>.5&&l-s>.5){let t=e=>Math.round(e*n)/n,r=t(o),i=t(s),a=Math.max(2,t(c)-r),u=Math.max(2,t(l)-i);e.globalAlpha=1,e.fillStyle=this.theme.accent.soft,e.fillRect(r,i,a,u),e.strokeStyle=this.theme.accent.base,e.lineWidth=1.25,e.setLineDash([]),e.beginPath(),e.rect(r+.625,i+.625,a-1.25,u-1.25),e.stroke()}}e.restore(),e.setTransform(n,0,0,n,0,0),e.globalAlpha=1,e.strokeStyle=this.theme.surface.border,e.lineWidth=1,e.beginPath(),Nt(e,.5,.5,r-1,i-1,11.5),e.stroke()}toWorld(e){let t=this.fit;if(!t)return null;let n=this.canvas.getBoundingClientRect(),r=e.clientX-n.left,i=e.clientY-n.top;return{x:(r-t.ox)/t.s,y:(i-t.oy)/t.s}}onDown(e){if(e.pointerType===`mouse`&&e.button!==0)return;let t=this.toWorld(e);if(!t)return;e.preventDefault();try{this.canvas.setPointerCapture(e.pointerId)}catch{}let n=this.renderer.camera,r=n.get(),i=n.viewport(),a=t.x>=i.x&&t.x<=i.x+i.width&&t.y>=i.y&&t.y<=i.y+i.height;this.drag=a?{id:e.pointerId,dx:r.x-t.x,dy:r.y-t.y}:{id:e.pointerId,dx:0,dy:0},a||this.move({x:t.x,y:t.y,k:r.k})}move(e){let t=ii.get(this.renderer);t?t.userSet(e):this.renderer.camera.set(e)}onMove(e){let t=this.drag;if(!t||t.id!==e.pointerId)return;let n=this.toWorld(e);n&&this.move({x:n.x+t.dx,y:n.y+t.dy,k:this.renderer.camera.get().k})}onUp(e){this.drag?.id===e.pointerId&&(this.drag=null,this.refit(!1),this.redraw())}};function Ei(e,t,n={},r={}){return new Ti(e,t,n,r)}var Di=240,Oi;function ki(e,t){return Oi===void 0&&(Oi=At(1,1)),new Ai(e,{fonts:new kr(t),measurer:new Mr(Oi?.ctx??null),atlas:null})}var Ai=class{frame;res;cache=new _n;labels=new Lr;badges=new Ln;grid=new yr;box=new Float64Array(4);view={k:1,ox:0,oy:0,width:0,height:0,dpr:1,x0:0,x1:0,y0:0,y1:0,strictX:!1,strictY:!1,stats:Kr()};constructor(e,t){this.frame=e,this.res=t,this.cache.sync(e,1,new un)}at(e){let t=Number.isFinite(e)&&e>0,n=t?e:1,r=this.box;r.fill(1/0,0,2).fill(-1/0,2,4);for(let e of this.frame.nodes){if(!e.visible)continue;let i=t?Math.max(e.r*n,1):e.r;r[0]=Math.min(r[0],e.x*n-i),r[1]=Math.min(r[1],e.y*n-i),r[2]=Math.max(r[2],e.x*n+i),r[3]=Math.max(r[3],e.y*n+i)}if(!(r[0]<=r[2]))return null;if(t){let e=this.view;e.k=n,e.x0=r[0]-Di,e.y0=r[1]-Di,e.x1=r[2]+Di,e.y1=r[3]+Di,e.width=e.x1-e.x0,e.height=e.y1-e.y0,this.grid.reset(e.x0,e.y0,e.width,e.height,Math.max(e.width,e.height)),this.badges.layout(this.frame,this.cache,e,this.res.fonts,this.res.measurer,this.grid),this.labels.collect(this.frame,this.cache,e,this.res),this.grid.extend(r),this.labels.extend(r)}return{x:r[0]/n,y:r[1]/n,width:(r[2]-r[0])/n,height:(r[3]-r[1])/n}}};function ji(e,t){return li(e,t)}function Mi(e,t,n){return Ei(e,t,n)}var Ni=1,Pi=.6,Fi=.68,Ii=.56,Li=.3,Ri=.5,zi=[[4352,4447],[8986,8987],[9001,9002],[9193,9196],[9200,9200],[9203,9203],[9725,9726],[9728,10175],[11035,11036],[11088,11088],[11093,11093],[11904,12350],[12353,13311],[13312,19903],[19968,40959],[40960,42191],[43360,43391],[44032,55203],[63744,64255],[65040,65049],[65072,65135],[65280,65376],[65504,65510],[94176,101119],[110592,111359],[126980,126980],[127183,127183],[127374,127374],[127377,127386],[127488,127743],[127744,128591],[128640,128767],[128992,129003],[129280,129535],[129648,129791],[131072,196605],[196608,262141]],Bi=/[\p{Mn}\p{Me}\p{Cf}\p{Cc}]/u,Vi=/\s/u,Hi=/\p{Nd}/u,Ui=/\p{Lu}/u;function Wi(e,t){let n=0,r=t.length-1;for(;n<=r;){let i=n+r>>>1,a=t[i];if(a===void 0)return!1;if(e<a[0])r=i-1;else if(e>a[1])n=i+1;else return!0}return!1}function Gi(e){return e===32||e===9?Li:e<32||e===127?0:e>=48&&e<=57?Pi:e>=65&&e<=90?Fi:Ii}function Ki(e){let t=e.codePointAt(0)??0;return t<128?Gi(t):Bi.test(e)||t>=127995&&t<=127999?0:t>=127462&&t<=127487?Ri:Wi(t,zi)?Ni:Vi.test(e)?Li:Hi.test(e)?Pi:Ui.test(e)?Fi:Ii}function qi(e,t){let n=0;for(let t=0;t<e.length;t++){let r=e.charCodeAt(t);if(r<128){n+=Gi(r);continue}let i=e.codePointAt(t)??r,a=String.fromCodePoint(i);i>65535&&t++,n+=Ki(a)}return n*t}var Ji=([e],[t])=>e<t?-1:+(e>t);function Yi(e){return[...e].sort(Ji)}function N(e,t){throw new p(`invalid-input`,`layoutFromJSON: ${e}`,t)}var Xi=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Zi=e=>typeof e==`number`&&Number.isFinite(e);function Qi(e,t){return Xi(e)&&[e.x,e.y,e.width,e.height].every(Zi)||N(`${t} must be a rectangle`,{where:t}),Object.freeze({x:e.x,y:e.y,width:e.width,height:e.height})}function $i(e,t){Xi(e)||N(`${t} must be an object`,{where:t});let n=new Map;for(let[r,i]of Yi(Object.entries(e)))Zi(i)||N(`${t}["${r}"] must be a finite number`,{where:t,id:r}),n.set(r,i);return n}function ea(e){let t=e;if(Xi(t)&&t.format===`kgdiff.layout`||N(`not a kgdiff.layout document`),t.version!==1)throw new p(`unsupported-version`,`Unsupported kgdiff.layout version ${String(t.version)}`,{version:t.version});let n=t.strategy;n!==`union`&&n!==`anchored`&&N(`strategy must be union or anchored`);let r=t.scope;r!==`all`&&r!==`changes`&&N(`scope must be all or changes`);let i=t.iterations;(!Zi(i)||i<0)&&N(`iterations must be a number ≥ 0`),Xi(t.positions)||N(`positions must be an object`);let a=new Map;for(let[e,n]of Yi(Object.entries(t.positions)))Array.isArray(n)&&n.length===2&&Zi(n[0])&&Zi(n[1])||N(`positions["${e}"] must be [x, y]`,{id:e}),a.set(e,Object.freeze({x:n[0],y:n[1]}));let o=$i(t.radii,`radii`),s=$i(t.hidden,`hidden`);Array.isArray(t.components)||N(`components must be an array`);let c=t.components.map((e,t)=>(Xi(e)&&Array.isArray(e.nodes)&&e.nodes.every(e=>typeof e==`string`)||N(`components[${t}] must have a nodes array`,{index:t}),Object.freeze({nodes:Object.freeze([...e.nodes]),bounds:Qi(e.bounds,`components[${t}].bounds`)})));return Object.freeze({positions:a,radii:o,bounds:Qi(t.bounds,`bounds`),scope:r,hidden:s,components:Object.freeze(c),stats:Object.freeze({strategy:n,iterations:i,nodes:a.size,ms:0})})}function ta(e){return Math.min(14,Math.max(4,4+2.2*Math.sqrt(Math.max(0,e))))}function na(e,t){return qi(e,t)}function ra(e){return ea(e)}var P={neutralEdge:1,changedEdge:1.75,selectedEdge:2.5,node:1.25,hoveredNode:2,ring:1.5,ringGap:3.5,glyph:1.5,suggestion:1.25,pivot:5},ia=Object.freeze([3,2.5]),aa=Object.freeze([4,3]),oa=Object.freeze([1,3]),sa={glowScale:2.6,glowAlpha:.32,ringAlpha:.35,ringOffset:5,ringWidth:2},F={size:12,oldSize:11,edgeSize:10.5,offset:5,secondaryGap:14,lineHeight:1.3},I={changedLabel:.35,neutralLabel:.5,importantNeutralLabel:.35,importantThreshold:.7,smallScene:300,smallChangedLabel:.2,smallNeutralLabel:.25,edgeLabel:1.1,badge:1.2,arrow:1.2},ca=.18,L={selectedContext:.7,selectedRest:.18,replayContext:.7,replayRest:.3,filtered:.4,focusContext:.55,ghostEdge:.45,collapsedEdge:.5},la={spotlightEnd:.18,settleStart:.82},ua={pace:1100,chapterThreshold:40,gap:160,maxStagger:.35},da=Object.freeze({x:0,y:0,width:0,height:0}),fa=class{minX=1/0;minY=1/0;maxX=-1/0;maxY=-1/0;get empty(){return this.minX>this.maxX}add(e,t,n,r){return e<this.minX&&(this.minX=e),t<this.minY&&(this.minY=t),n>this.maxX&&(this.maxX=n),r>this.maxY&&(this.maxY=r),this}addRect(e){return this.add(e.x,e.y,e.x+e.width,e.y+e.height)}rect(e=da){return this.empty?e:{x:this.minX,y:this.minY,width:this.maxX-this.minX,height:this.maxY-this.minY}}};function pa(e,t,n,r,i,a){let o=Math.max(r,na(i,F.size)/2,a===void 0?0:na(a,F.oldSize)/2),s=r+F.offset+F.size*F.lineHeight+(a===void 0?0:F.secondaryGap);e.add(t-o,n-r,t+o,n+s)}function ma(e){return{x:e.x+e.width/2,y:e.y+e.height/2}}function ha(e,t){return t?e===0?0:Math.ceil(e/2)*ca*(e%2==1?1:-1):(Math.floor(e/2)+1)*ca*(e%2==0?1:-1)}function ga(e){let t=new Float64Array(e.length),n=new Map;for(let t=0;t<e.length;t++){let r=e[t],i=r.a<=r.b?`${r.a},${r.b}`:`${r.b},${r.a}`,a=n.get(i);a===void 0?n.set(i,[t]):a.push(t)}for(let r of n.values()){if(r.length<2)continue;let n=r.filter(t=>e[t]?.ghost!==!0),i=r.filter(t=>e[t]?.ghost===!0),a=(n.length>0?n.length:i.length)%2==1,o=[...n,...i];for(let n=0;n<o.length;n++){let r=o[n],i=e[r],s=ha(n,a);t[r]=i.a<=i.b?s:-s}}return t}function _a(e){let t=[];for(let n of e)t.push({a:n.s,b:n.t});let n=new Int32Array(e.length).fill(-1);for(let r=0;r<e.length;r++){let i=e[r];(i.sb!==i.s||i.tb!==i.t)&&(n[r]=t.length,t.push({a:i.sb,b:i.tb,ghost:!0}))}let r=ga(t),i=r.slice(0,e.length),a=new Float64Array(e.length);for(let t=0;t<e.length;t++){let e=n[t];e>=0&&(a[t]=r[e])}return{primary:i,ghost:a}}function va(e){switch(e){case`add`:return`added`;case`remove`:return`removed`;case`merge`:case`split`:return`identity`;case`relations`:return`structure`;case`modify`:return`content`;default:return R(e)}}function R(e){throw Error(`Unexpected value ${String(e)}`)}var ya=(e,t)=>e.some(e=>e.kind===t);function ba(e){let t=e.facets;if(ya(t,`mergedInto`))return`merge-source`;if(ya(t,`mergeTarget`))return`merge-target`;if(ya(t,`splitInto`))return`split-source`;if(ya(t,`splitFrom`))return`split-target`;switch(e.status){case`added`:return`added`;case`removed`:return`removed`;case`unchanged`:return`unchanged`;case`modified`:return t.some(e=>e.kind===`deprecate`&&e.deprecated)?`deprecated`:`modified`;default:return R(e.status)}}function xa(e){let t=`neutral`;for(let n of e)switch(n.kind){case`rekey`:return`identity`;case`move`:t=`structure`;break;case`mergedInto`:case`mergeTarget`:case`splitFrom`:case`splitInto`:break;default:t===`neutral`&&(t=`content`)}return t}function Sa(e,t){switch(t){case`merge-source`:case`merge-target`:case`split-source`:case`split-target`:return`identity`;case`added`:return`added`;case`removed`:return`removed`;case`unchanged`:return`neutral`;case`deprecated`:return`content`;case`modified`:{let t=xa(e.facets);return t===`neutral`?`content`:t}default:return R(t)}}function Ca(e,t,n){let r=e.before!==void 0||e.beforeId!==void 0;return(t===`merge-target`||t===`split-target`)&&r?xa(e.facets):n}function wa(e){for(let t of e.facets){if(t.kind===`collapsed`)return`collapsed`;if(t.kind===`retarget`)return t.cause===`merge`||t.cause===`split`?`carried`:`retarget`}return e.status}function Ta(e,t){switch(t){case`added`:return`added`;case`removed`:return`removed`;case`unchanged`:return`neutral`;case`collapsed`:case`carried`:return`identity`;case`retarget`:return`structure`;case`modified`:return e.facets.some(e=>e.kind===`predicate`)?`structure`:`content`;default:return R(t)}}function Ea(e){let t=0,n=0,r=0;for(let i of e)i.before===void 0?t++:i.after===void 0?n++:r++;let i=[];return t>0&&i.push(`+${t}`),n>0&&i.push(`−${n}`),r>0&&i.push(`~${r}`),i.length>0?i.join(` `):void 0}var Da=e=>`⊕ ${e}`;function Oa(e,t){if(t===`merge-target`){let t=e.facets.find(e=>e.kind===`mergeTarget`);if(t!==void 0&&t.kind===`mergeTarget`&&t.sources.length>0)return Da(t.sources.length)}let n=e.facets.find(e=>e.kind===`attrs`);return n!==void 0&&n.kind===`attrs`?Ea(n.changes):void 0}function ka(e){let t=e.facets.find(e=>e.kind===`rename`);return t!==void 0&&t.kind===`rename`?t.from:void 0}function Aa(e){for(let t of e.facets){if(t.kind===`label`)return t.from;if(t.kind===`predicate`){let n=e.before?.label;return n!==void 0&&n!==e.label?n:t.from}}}var ja=(e,t,n)=>Math.min(n,Math.max(t,e));function Ma(e,t){throw new p(`invalid-input`,`Unsupported color ${JSON.stringify(e)}: ${t}. Use #rgb, #rgba, #rrggbb, #rrggbbaa, rgb() or rgba().`,{color:e})}function Na(e,t){/^[0-9a-f]+$/i.test(t)||Ma(e,`not a hex color`);let n=t.length===3||t.length===4;!n&&t.length!==6&&t.length!==8&&Ma(e,`hex colors have 3, 4, 6 or 8 digits`);let r=e=>n?Number.parseInt(t.charAt(e)+t.charAt(e),16):Number.parseInt(t.slice(2*e,2*e+2),16),i=t.length===4||t.length===8;return{r:r(0),g:r(1),b:r(2),a:i?r(3)/255:1}}function Pa(e,t,n){let r=t.endsWith(`%`),i=Number(r?t.slice(0,-1):t);return t!==``&&Number.isFinite(i)||Ma(e,`bad component "${t}"`),ja(r?i/100*n:i,0,n)}function Fa(e,t){let[n=``,r,i]=t.split(`/`);i!==void 0&&Ma(e,`more than one "/"`);let a=n.split(/[\s,]+/).map(e=>e.trim()).filter(e=>e!==``);r!==void 0&&a.push(r.trim()),a.length!==3&&a.length!==4&&Ma(e,`expected 3 or 4 components`);let[o=``,s=``,c=``,l]=a;return{r:Pa(e,o,255),g:Pa(e,s,255),b:Pa(e,c,255),a:l===void 0?1:Pa(e,l,1)}}function Ia(e){let t=e.trim().toLowerCase();if(t.startsWith(`#`))return Na(e,t.slice(1));if(t===`transparent`)return{r:0,g:0,b:0,a:0};let n=/^rgba?\((.*)\)$/.exec(t);return n?Fa(e,n[1]??``):Ma(e,`unknown syntax`)}var La=e=>Math.round(ja(e,0,255)).toString(16).padStart(2,`0`);function Ra(e){return e.a>=1?`#${La(e.r)}${La(e.g)}${La(e.b)}`.toUpperCase():`rgba(${Math.round(ja(e.r,0,255))}, ${Math.round(ja(e.g,0,255))}, ${Math.round(ja(e.b,0,255))}, ${Math.round(ja(e.a,0,1)*1e3)/1e3})`}function za(e,t,n){let r=ja(n,0,1),i=e.a+(t.a-e.a)*r;if(i===0)return{r:0,g:0,b:0,a:0};let a=(n,a)=>(n*e.a*(1-r)+a*t.a*r)/i;return{r:a(e.r,t.r),g:a(e.g,t.g),b:a(e.b,t.b),a:i}}function Ba(e,t){return Ra({...Ia(e),a:ja(t,0,1)})}function Va(e,t){let n=Ia(e),r=.2126*n.r+.7152*n.g+.0722*n.b,i=ja(t,0,1);return Ra({r:n.r+(r-n.r)*i,g:n.g+(r-n.g)*i,b:n.b+(r-n.b)*i,a:n.a})}function Ha(e,t,n=33){let r=Ia(e),i=Ia(t),a=[];for(let e=0;e<n;e++)a.push(Ra(za(r,i,e/(n-1))));return a[0]=e,a[n-1]=t,Object.freeze(a)}function Ua(e,t){let n=e.length-1;return e[t<=0?0:t>=1?n:Math.round(t*n)]}var Wa=class{cache=new Map;get(e,t){let n=`${e}\u0000${t}`,r=this.cache.get(n);return r===void 0&&(r=Ha(e,t),this.cache.set(n,r)),r}},Ga=`Inter, "SF Pro Text", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", system-ui, sans-serif`,Ka=`"JetBrains Mono", "SF Mono", ui-monospace, Menlo, Consolas, monospace`,qa={fast:120,base:220,slow:420,easing:[.2,0,0,1]},Ja={family:Ga,mono:Ka,size:12,weightRegular:400,weightStrong:600},Ya={added:{base:`#34D399`,strong:`#6EE7B7`,soft:`rgba(52,211,153,0.16)`,text:`#6EE7B7`},removed:{base:`#F87171`,strong:`#FCA5A5`,soft:`rgba(248,113,113,0.15)`,text:`#FCA5A5`},content:{base:`#FBBF24`,strong:`#FCD34D`,soft:`rgba(251,191,36,0.15)`,text:`#FCD34D`},structure:{base:`#38BDF8`,strong:`#7DD3FC`,soft:`rgba(56,189,248,0.15)`,text:`#7DD3FC`},identity:{base:`#A78BFA`,strong:`#C4B5FD`,soft:`rgba(167,139,250,0.17)`,text:`#C4B5FD`}},Xa={added:{base:`#16A34A`,strong:`#15803D`,soft:`rgba(22,163,74,0.11)`,text:`#147A3A`},removed:{base:`#DC2626`,strong:`#B91C1C`,soft:`rgba(220,38,38,0.09)`,text:`#B91C1C`},content:{base:`#D87506`,strong:`#B45309`,soft:`rgba(217,119,6,0.11)`,text:`#92400E`},structure:{base:`#0284C7`,strong:`#0369A1`,soft:`rgba(2,132,199,0.10)`,text:`#075985`},identity:{base:`#7C3AED`,strong:`#6D28D9`,soft:`rgba(124,58,237,0.10)`,text:`#5B21B6`}};function Za(e,t){let n=n=>{let[r,i,a]=e[n];return{base:r,strong:a,soft:Ba(r,t[n]),text:i}};return{added:n(`added`),removed:n(`removed`),content:n(`content`),structure:n(`structure`),identity:n(`identity`)}}var Qa={added:.16,removed:.15,content:.15,structure:.15,identity:.17},$a={added:.11,removed:.09,content:.11,structure:.1,identity:.1},eo=Za({added:[`#56B4E9`,`#8FD0F5`,`#8FD0F5`],removed:[`#E69F00`,`#F5C45C`,`#F5C45C`],content:[`#F0E442`,`#F5EC85`,`#F5EC85`],structure:[`#009E73`,`#3CC79E`,`#3CC79E`],identity:[`#CC79A7`,`#E0A6C6`,`#E0A6C6`]},Qa),to=Za({added:[`#0072B2`,`#005A8C`,`#00669F`],removed:[`#D55E00`,`#A84A00`,`#BF5400`],content:[`#9A8700`,`#6E6100`,`#847400`],structure:[`#00805C`,`#006248`,`#007152`],identity:[`#A3477F`,`#83335F`,`#933D6F`]},$a);function no(e){return{name:`dark`,palette:e,canvas:{background:`#0B0E14`,grid:`rgba(148, 163, 184, 0.07)`},surface:{panel:`#11151D`,raised:`#171C26`,overlay:`rgba(17, 21, 29, 0.78)`,border:`rgba(255,255,255,0.07)`,borderStrong:`rgba(255,255,255,0.13)`,controlBorder:`#5E687C`,shadow:`0 8px 32px rgba(0,0,0,0.45), 0 1px 0 rgba(255,255,255,0.04) inset`},text:{primary:`#E7EBF3`,secondary:`#A6AFBF`,muted:`#7A8495`},accent:{base:`#7C9CFF`,strong:`#A3BAFF`,soft:`rgba(124,156,255,0.16)`,text:`#A9BEFF`},neutral:{node:`#4B5568`,nodeStroke:`#5E687C`,edge:`#323A4A`,label:`#7A8495`},family:e===`colorblind`?eo:Ya,glow:!0,font:Ja,motion:qa}}function ro(e){return{name:`light`,palette:e,canvas:{background:`#F7F8FA`,grid:`rgba(15, 23, 42, 0.07)`},surface:{panel:`#FFFFFF`,raised:`#FFFFFF`,overlay:`rgba(255, 255, 255, 0.82)`,border:`rgba(15,23,42,0.08)`,borderStrong:`rgba(15,23,42,0.15)`,controlBorder:`#8690A3`,shadow:`0 8px 28px rgba(15,23,42,0.10), 0 1px 2px rgba(15,23,42,0.06)`},text:{primary:`#0F172A`,secondary:`#475569`,muted:`#687284`},accent:{base:`#3B5BDB`,strong:`#2F49B5`,soft:`rgba(59,91,219,0.10)`,text:`#2F49B5`},neutral:{node:`#A7B0BF`,nodeStroke:`#8C96A8`,edge:`#D3D9E2`,label:`#687284`},family:e===`colorblind`?to:Xa,glow:!1,font:Ja,motion:qa}}function io(e){if(typeof e==`object`&&e&&!Object.isFrozen(e)){Object.freeze(e);for(let t of Object.values(e))io(t)}return e}var ao=new Map,oo=[`dark`,`light`],so=[`default`,`colorblind`];function co(e,t=`default`){if(!oo.includes(e))throw new p(`invalid-input`,`Unknown theme "${String(e)}" (expected "dark" or "light").`);if(!so.includes(t))throw new p(`invalid-input`,`Unknown palette "${String(t)}" (expected "default" or "colorblind").`);let n=`${e}/${t}`,r=ao.get(n);return r===void 0&&(r=io(e===`dark`?no(t):ro(t)),ao.set(n,r)),r}var lo=[`remove`,`restructure`,`modify`,`add`],uo=(e,t,n,r)=>e<n||e===n&&t<r,fo=class{items;members;minX;minY;cw;ch;gw;gh;cellStart;cellItems;cellAlive;alive;remaining;constructor(e,t){this.items=e,this.members=t;let n=1/0,r=1/0,i=-1/0,a=-1/0;for(let o of t){let t=e[o];n=Math.min(n,t.x),r=Math.min(r,t.y),i=Math.max(i,t.x),a=Math.max(a,t.y)}let o=Math.max(1,Math.ceil(Math.sqrt(t.length)));this.gw=o,this.gh=o,this.minX=n,this.minY=r;let s=(i-n)/o,c=(a-r)/o;this.cw=s>0&&Number.isFinite(s)?s:1,this.ch=c>0&&Number.isFinite(c)?c:1;let l=this.gw*this.gh,u=new Int32Array(l+1),d=new Int32Array(t.length);for(let n=0;n<t.length;n++){let r=e[t[n]],i=this.cellIndex(r.x,r.y);d[n]=i,u[i+1]=u[i+1]+1}for(let e=0;e<l;e++)u[e+1]=u[e+1]+u[e];this.cellStart=u;let f=u.slice(0,l);this.cellItems=new Int32Array(t.length);for(let e=0;e<t.length;e++){let t=d[e];this.cellItems[f[t]]=e,f[t]=f[t]+1}this.cellAlive=new Int32Array(l),this.alive=new Uint8Array(t.length),this.remaining=0}cellX(e){let t=Math.floor((e-this.minX)/this.cw);return t>=0?t>=this.gw?this.gw-1:t:0}cellY(e){let t=Math.floor((e-this.minY)/this.ch);return t>=0?t>=this.gh?this.gh-1:t:0}cellIndex(e,t){return this.cellY(t)*this.gw+this.cellX(e)}get size(){return this.remaining}activate(e){if(this.alive[e]===1)return;this.alive[e]=1,this.remaining++;let t=this.items[this.members[e]],n=this.cellIndex(t.x,t.y);this.cellAlive[n]=this.cellAlive[n]+1}take(e){if(this.alive[e]===0)return;this.alive[e]=0,this.remaining--;let t=this.items[this.members[e]],n=this.cellIndex(t.x,t.y);this.cellAlive[n]=this.cellAlive[n]-1}largest(){let e=-1;for(let t=0;t<this.members.length;t++){if(this.alive[t]===0)continue;let n=this.items[this.members[t]],r=e<0?void 0:this.items[this.members[e]];(r===void 0||n.size>r.size||n.size===r.size&&n.order<r.order)&&(e=t)}return e}nearest(e,t){if(this.remaining===0)return-1;let n=this.cellX(e),r=this.cellY(t),i=Math.min(this.cw,this.ch),a=-1,o=1/0,s=1/0,c=Math.max(this.gw,this.gh);for(let l=0;l<=c;l++){let c=n-l,u=n+l,d=r-l,f=r+l;for(let n=d;n<=f;n++){if(n<0||n>=this.gh)continue;let r=n===d||n===f;for(let i=c;i<=u;i+=r?1:u-c||1){if(i<0||i>=this.gw)continue;let r=n*this.gw+i;if(this.cellAlive[r]!==0)for(let n=this.cellStart[r];n<this.cellStart[r+1];n++){let r=this.cellItems[n];if(this.alive[r]===0)continue;let i=this.items[this.members[r]],c=i.x-e,l=i.y-t,u=c*c+l*l;uo(u,i.order,o,s)&&(a=r,o=u,s=i.order)}}}let p=l*i;if(a>=0&&o<p*p)break}return a}};function po(e){let t=e.length,n=e=>lo.indexOf(e),r=lo.map(()=>[]);for(let i=0;i<t;i++)r[n(e[i].phase)]?.push(i);for(let t of r)t.sort((t,n)=>e[t].order-e[n].order);let i=r.map(t=>new fo(e,t)),a=new Int32Array(t);for(let e of r)for(let t=0;t<e.length;t++)a[e[t]]=t;let o=new Int32Array(t),s=Array.from({length:t},()=>[]);for(let n=0;n<t;n++)for(let r of new Set(e[n].requires))r===n||r<0||r>=t||(o[n]=o[n]+1,s[r].push(n));let c=new Uint8Array(t),l=t=>{i[n(e[t].phase)]?.activate(a[t])};for(let e=0;e<t;e++)o[e]===0&&l(e);let u=[],d=null;for(;u.length<t;){let a=i.findIndex(e=>e.size>0);if(a<0){let r=-1;for(let n=0;n<t;n++)c[n]!==1&&(r<0||e[n].order<e[r].order)&&(r=n);o[r]=0,l(r),a=n(e[r].phase)}let f=i[a],p=d===null?f.largest():f.nearest(d.x,d.y);f.take(p);let m=r[a][p];c[m]=1,u.push(m),d=e[m];for(let e of s[m])c[e]!==1&&(o[e]=o[e]-1,o[e]===0&&l(e))}return u}function mo(e){let t=lo.filter(t=>e.some(e=>e.phase===t)),n=new Int32Array(e.length);for(let r=0;r<e.length;r++){let i=e[r],a=t.indexOf(i.phase);for(let e of i.requires)e>=0&&e<r&&(a=Math.max(a,n[e]));n[r]=a}return n}var ho={add:.85,remove:.85,modify:.8,relations:.95,merge:1.3,split:1.3},go=e=>Math.round(e*1e3)/1e3;function _o(e,t,n){return go(n*ho[e]*Math.min(2.2,Math.max(1,Math.sqrt(t))))}function vo(e,t){return go(t*Math.min(4,Math.max(1.2,1.2+Math.log2(Math.max(1,e)))))}function yo(e,t){let n=new fa;for(let r of t)n.addRect(e[r].bounds);return n.rect()}var bo=(e,t)=>e>t?`chapters`:`hunks`;function xo(e,t,n){let r=bo(e.length,n),i=[],a=[],o=r===`chapters`?mo(e):null,s=lo.filter(t=>e.some(e=>e.phase===t)),c=[];for(let t=0;t<e.length;t++){let n=e[t],r=o===null?lo.indexOf(n.phase):o[t],i=c[c.length-1];if(i!==void 0&&i.key===r)i.members.push(t);else{let e=o===null?n.phase:s[r]??n.phase;c.push({key:r,phase:e,members:[t]})}}let l=0;for(let n=0;n<c.length;n++){let{phase:o,members:s}=c[n];n>0&&(l=go(l+ua.gap));let u=l;if(r===`hunks`)for(let r=0;r<s.length;r++){r>0&&(l=go(l+ua.gap));let a=e[s[r]],o=go(l+_o(a.kind,a.size,t));i.push({hunk:s[r],start:l,end:o,chapter:n}),l=o}else{let e=s.length,r=vo(e,t),a=ua.maxStagger*r*(e-1)/e,o=e>1?a/(e-1):0,c=r-a;for(let t=0;t<e;t++){let e=go(u+t*o);i.push({hunk:s[t],start:e,end:go(e+c),chapter:n})}l=go(u+r)}a.push({phase:o,start:u,end:l,hunks:s,bounds:yo(e,s)})}return{duration:l,windows:i,chapters:a,mode:r}}function So(e){let t=e.theme;return t!==void 0&&typeof t==`object`?t:co(t??`dark`,e.palette??`default`)}function Co(e){let t=e.replay?.pace??ua.pace,n=e.replay?.chapterThreshold??ua.chapterThreshold;if(!(Number.isFinite(t)&&t>0))throw new p(`invalid-input`,`replay.pace must be a positive number of ms, got ${t}.`);if(!(n>=0))throw new p(`invalid-input`,`replay.chapterThreshold must be ≥ 0, got ${n}.`);return{pace:t,chapterThreshold:n}}function wo(e){let t=e.length,n=new Float64Array(t);for(let r=0;r<t;r++){let t=e[r].degree;n[r]=Math.max(t.before,t.after)}let r=Array.from({length:t},(e,t)=>t).sort((e,t)=>n[e]-n[t]),i=e=>r[e],a=new Float64Array(t);for(let e=0;e<t;){let r=e;for(;r<t&&n[i(r)]===n[i(e)];)r++;let o=t>1?e/(t-1):0;for(let t=e;t<r;t++)a[i(t)]=o;e=r}let o=new Float64Array(t);for(let n=0;n<t;n++){let t=e[n].status!==`unchanged`,r=a[n];o[n]=t?.8+.2*r:.75*r}return o}function To(e,t){for(let n of e.facets){if(n.kind===`mergedInto`&&t===`mergedInto`)return n.target;if(n.kind===`splitFrom`&&t===`splitFrom`)return n.source}}function Eo(e){let t=e.predicateLabels;return typeof t==`object`&&t&&!Array.isArray(t)?t:null}function Do(e){let t=[Eo(e.after.meta),Eo(e.before.meta)],n=e=>{if(e!==void 0)for(let n of t){if(n===null||!Object.hasOwn(n,e))continue;let t=n[e];if(typeof t==`string`&&t!==``)return t}};return e=>{if(e.facets.some(e=>e.kind===`label`))return{label:e.label,labelBefore:Aa(e)};let t=e.facets.find(e=>e.kind===`predicate`),r=t?.kind===`predicate`?n(e.predicateBefore??t.from)??Aa(e):void 0;return{label:n(e.predicate)??e.label,labelBefore:r}}}function Oo(e,t){if(e.kind!==`modify`)return va(e.kind);let n=t.get(e.anchor);if(n===void 0)return`content`;let r=Sa(n,ba(n));return r===`neutral`?`content`:r}function ko(e,t,n={}){let r=So(n),i=n.locale??`en`,{pace:a,chapterThreshold:o}=Co(n),s=[],c=new Map,l=new Map;for(let n of e.nodes){l.set(n.id,n);let e=t.positions.get(n.id);e!==void 0&&Number.isFinite(e.x)&&Number.isFinite(e.y)&&(c.set(n.id,s.length),s.push(n))}let u=new Map,d=new Map;for(let e=0;e<s.length;e++){let t=s[e];t.afterId!==void 0&&u.set(t.afterId,e),t.beforeId!==void 0&&d.set(t.beforeId,e)}let f=[],p=[];for(let t of e.edges){let e=c.get(t.source),n=c.get(t.target);if(e===void 0||n===void 0)continue;let r=t.sourceBefore===void 0?e:c.get(t.sourceBefore)??e,i=t.targetBefore===void 0?n:c.get(t.targetBefore)??n;f.push(t),p.push({s:e,t:n,sb:r,tb:i})}let m=new Float64Array(s.length),h=new Float64Array(s.length),g=new Float64Array(s.length);for(let e=0;e<s.length;e++){let n=s[e],r=t.positions.get(n.id);m[e]=r.x,h[e]=r.y;let i=t.radii.get(n.id);g[e]=i!==void 0&&Number.isFinite(i)&&i>0?i:ta(Math.max(n.degree.before,n.degree.after))}let _=new Map;for(let t=0;t<e.hunks.length;t++)_.set(e.hunks[t].id,t);let v=e=>{let t=[];for(let n of e.requires??[]){let e=_.get(n);e!==void 0&&t.push(e)}return t},y=e.hunks.map(e=>{let t=0,n=0,r=c.get(e.anchor);if(r!==void 0)t=m[r],n=h[r];else{let r=0;for(let i of[...e.nodes,...e.context]){let e=c.get(i);e!==void 0&&(t+=m[e],n+=h[e],r++)}r>0&&(t/=r,n/=r)}return{phase:e.phase,size:e.nodes.length+e.edges.length,order:e.order,x:t,y:n,requires:v(e)}}),b=po(y);if(bo(b.length,o)===`chapters`){let e=new Int32Array(b.length);for(let t=0;t<b.length;t++)e[b[t]]=t;let t=mo(b.map(t=>({phase:y[t].phase,requires:y[t].requires.map(t=>e[t])})));b=b.map((e,n)=>({h:e,k:n,c:t[n]})).sort((e,t)=>e.c-t.c||e.k-t.k).map(e=>e.h)}let x=new Map;for(let t=0;t<b.length;t++)x.set(e.hunks[b[t]].id,t);let S=e=>e===void 0?-1:x.get(e)??-1,ee=wo(s),te=s.map((e,n)=>{let r=ba(e),i=ka(e),a=Oa(e,r),o;if(r===`merge-source`){let t=To(e,`mergedInto`);o=t===void 0?void 0:c.get(t)}else if(r===`split-target`){let t=To(e,`splitFrom`);o=t===void 0?void 0:c.get(t)}else if(r===`deprecated`){for(let t of e.after?.replacedBy??[])if(o=u.get(t)??c.get(t),o!==void 0)break}o===n&&(o=void 0);let s=Sa(e,r);return{index:n,id:e.id,x:m[n],y:h[n],r:g[n],status:e.status,role:r,family:s,familyBefore:Ca(e,r,s),label:e.label,...i!==void 0&&i!==e.label?{labelBefore:i}:{},...a===void 0?{}:{badge:a},...o===void 0?{}:{flow:o},hunk:S(e.hunk),presentBefore:e.before!==void 0||e.beforeId!==void 0,presentAfter:e.after!==void 0||e.afterId!==void 0,implicit:(e.after??e.before)?.implicit??!1,degree:Math.max(e.degree.before,e.degree.after),hidden:t.hidden.get(e.id)??0,importance:ee[n]}}),ne=_a(p),re=Do(e),ie=f.map((e,t)=>{let n=wa(e),r=p[t],{label:i,labelBefore:a}=re(e);return{index:t,id:e.id,s:r.s,t:r.t,sb:r.sb,tb:r.tb,status:e.status,role:n,family:Ta(e,n),label:i,...a!==void 0&&a!==i?{labelBefore:a}:{},curvature:ne.primary[t],hunk:S(e.hunk),presentBefore:e.before!==void 0||e.beforeKey!==void 0,presentAfter:e.after!==void 0||e.afterKey!==void 0,hierarchical:e.hierarchical}}),ae=new fa;for(let e of te)pa(ae,e.x,e.y,e.r,e.label,e.labelBefore);let oe=ae.rect(),se=ma(oe),ce=(e,t)=>{let n=[];for(let r of e){let e=t.get(r);e!==void 0&&n.push(e)}return n},le=new Map;for(let e of ie)le.set(e.id,e.index);let ue=b.map((t,n)=>{let r=e.hunks[t],a=ce(r.nodes,c),o=ce(r.context,c),s=new fa;for(let e of[...a,...o]){let t=te[e];pa(s,t.x,t.y,t.r,t.label,t.labelBefore)}let u=kt(r,e,i);return{index:n,id:r.id,kind:r.kind,phase:r.phase,family:Oo(r,l),title:u.title,subtitle:u.subtitle,anchor:c.get(r.anchor)??-1,nodes:a,edges:ce(r.edges,le),context:o,bounds:s.rect({x:se.x,y:se.y,width:0,height:0})}}),C=[];for(let t of e.suggestions){let e=d.get(t.before),n=u.get(t.after);e!==void 0&&n!==void 0&&e!==n&&C.push({before:e,after:n,score:t.score})}let de=new Int32Array(b.length);for(let e=0;e<b.length;e++)de[b[e]]=e;let fe=xo(ue.map((e,t)=>{let n=y[b[t]];return{kind:e.kind,phase:e.phase,size:n.size,bounds:e.bounds,requires:n.requires.map(e=>de[e])}}),a,o),pe=new Map;for(let e of ue)pe.set(e.id,e.index);return{nodes:te,edges:ie,hunks:ue,suggestions:C,bounds:oe,stats:e.stats,timeline:fe,theme:r,locale:i,meta:{before:e.before.meta,after:e.after.meta},nodeIndex:c,edgeIndex:le,hunkIndex:pe}}var Ao=new WeakMap;function jo(e){let t=Ao.get(e);if(t!==void 0)return t;let n=e.nodes.length,r=new Int32Array(n+1),i=[],a=(e,t)=>{e!==t&&(i.push(e,t),r[e+1]=r[e+1]+1,r[t+1]=r[t+1]+1)};for(let t of e.edges)a(t.s,t.t),(t.sb!==t.s||t.tb!==t.t)&&a(t.sb,t.tb);for(let e=0;e<n;e++)r[e+1]=r[e+1]+r[e];let o=r.slice(0,n),s=new Int32Array(i.length);for(let e=0;e<i.length;e+=2){let t=i[e],n=i[e+1];s[o[t]]=n,o[t]=o[t]+1,s[o[n]]=t,o[n]=o[n]+1}for(let e=0;e<n;e++)s.subarray(r[e],r[e+1]).sort();let c={start:r,list:s};return Ao.set(e,c),c}var Mo=new Map;function No(e,t,n){let r=Mo.get(n);r===void 0&&(r=new Intl.NumberFormat(n),Mo.set(n,r));let i=r.format(e);return n===`zh-CN`?t?`+${i} 个未变节点`:`+${i} 个隐藏节点`:t?`+${i} unchanged`:`+${i} hidden`}var Po=28;function Fo(e,t={}){let n=t.hops??1;if(!(Number.isFinite(n)&&n>=0))throw new p(`invalid-input`,`computeFocus: hops must be a finite number ≥ 0, got ${n}.`);let r=t.hubDegree??40;if(!(r>=0))throw new p(`invalid-input`,`computeFocus: hubDegree must be a number ≥ 0 (Infinity disables), got ${r}.`);let i=t.hunk;if(i!==void 0&&!(Number.isInteger(i)&&i>=0&&i<e.hunks.length))throw new p(`invalid-input`,`computeFocus: hunk ${i} is out of range [0, ${e.hunks.length}).`);let a=e.nodes.length,o=e.edges.length,{start:s,list:c}=jo(e),l=new Uint8Array(a),u=new Uint8Array(a),d=new Int32Array(a).fill(-1),f=new Int32Array(a),m=0,h=0,g=(e,t)=>{e<0||e>=a||d[e]!==-1||(d[e]=t,l[e]=1,f[h++]=e)},_=[];if(i!==void 0){let t=e.hunks[i];for(let e of t?.nodes??[])u[e]=1,g(e,0);for(let e of t?.edges??[])_.push(e)}else{for(let t of e.nodes)t.status!==`unchanged`&&(u[t.index]=1,g(t.index,0));for(let t of e.edges)t.status!==`unchanged`&&_.push(t.index)}for(let t of _){let n=e.edges[t];n!==void 0&&(g(n.s,1),g(n.t,1),g(n.sb,1),g(n.tb,1))}let v=Math.floor(n),y=new Uint8Array(a);for(;m<h;){let t=f[m++],n=d[t];if(!(n>=v)){if((e.nodes[t]?.degree??0)>r)y[t]=1;else for(let e=s[t];e<s[t+1];e++)g(c[e],n+1)}}for(let e of t.expanded??[])e>=0&&e<a&&(l[e]=1);let b=new Uint8Array(a);for(let e=0;e<a;e++)l[e]===1&&u[e]===0&&(b[e]=1);let x=new Uint8Array(o);for(let t=0;t<o;t++){let n=e.edges[t];n!==void 0&&l[n.s]===1&&l[n.t]===1&&(x[t]=1)}return{nodes:l,edges:x,context:b,collapsed:Io(e,l,y,s,c)}}function Io(e,t,n,r,i){let a=e.nodes.length,o=new Int32Array(a).fill(-1),s=new Int32Array(a),c=0,l=0;for(let e=0;e<a;e++){if(t[e]===1)continue;let a=-1,c=-1;for(let o=r[e];o<r[e+1];o++){let e=i[o];if(t[e]===1&&(a<0&&(a=e),n[e]===1)){c=e;break}}a>=0&&(o[e]=c>=0?c:a,s[l++]=e)}let u=()=>{for(;c<l;){let e=s[c++];for(let n=r[e];n<r[e+1];n++){let r=i[n];t[r]!==1&&o[r]===-1&&(o[r]=o[e],s[l++]=r)}}};u();let d=new Uint8Array(a);for(let e=0;e<a;e++)t[e]!==1&&o[e]===-1&&(o[e]=e,d[e]=1,s[l++]=e,u());let f=new Map,p=e=>{let t=f.get(e);return t===void 0&&(t={owner:e,members:[],extra:0,changed:!1,sx:0,sy:0},f.set(e,t)),t};for(let n=0;n<a;n++){if(t[n]===1)continue;let r=p(o[n]),i=e.nodes[n];r.members.push(n),i!==void 0&&i.status!==`unchanged`&&(r.changed=!0),r.sx+=i?.x??0,r.sy+=i?.y??0}for(let n of e.nodes)n.hidden<=0||(p(t[n.index]===1?n.index:o[n.index]).extra+=n.hidden);let m=[];for(let n of f.values()){let a=e.nodes[n.owner];if(a===void 0)continue;let o=n.members.length+n.extra;if(o===0)continue;let s,c;if(n.members.length>0)s=n.sx/n.members.length,c=n.sy/n.members.length;else{let o=0,l=0,u=0;for(let a=r[n.owner];a<r[n.owner+1];a++){let n=e.nodes[i[a]];n!==void 0&&t[n.index]===1&&(o+=n.x,l+=n.y,u++)}let d=0,f=-1;if(u>0){let e=a.x-o/u,t=a.y-l/u,n=Math.hypot(e,t);n>1e-9&&(d=e/n,f=t/n)}let p=a.r+Po;s=a.x+d*p,c=a.y+f*p}m.push({id:d[n.owner]===1?`component:${a.id}`:`near:${a.id}`,x:s,y:c,count:o,nodes:n.members,label:No(o,!n.changed,e.locale)})}return m.sort((e,t)=>e.id<t.id?-1:+(e.id>t.id)),m}var Lo=.06,Ro=16,zo=160;function Bo(e,t){let n=e.bounds;if(t!==void 0&&t.length>0){let r=new fa;for(let n of t){let t=e.hunks[n];t!==void 0&&r.addRect(t.bounds)}n=r.rect(e.bounds)}let r=Math.max(Ro,Lo*Math.max(n.width,n.height)),i=Math.max(zo,n.width+2*r),a=Math.max(zo,n.height+2*r),o=n.x+n.width/2,s=n.y+n.height/2;return{x:o-i/2,y:s-a/2,width:i,height:a}}var z={retract:[0,.4],removeShrink:[.25,.55],removeGhostFade:[.65625,1],splitSourceShrink:[.6,.8],splitSourceFade:[.8,1],growFromExisting:[0,.45],pop:[.35,.75],popAfterArrival:[.55,.85],growBetweenNew:[.6,.9],growAfterArrival:[.7,.95],growOther:[.35,.85],labelFadeIn:.15,travelStagger:.15,travel:.55,arrivalFade:.12,mergeTargetFade:[.55,.85],mergeFlash:[.7,1],splitStart:.05,splitSourceStay:[.6,.9],modifyFade:[.3,.7],modifyFlash:[.4,.8],labelOut:[.1,.5],labelIn:[.3,.7],labelSlide:6,badgeTick:.6,swing:[.1,.8],ghostFade:[.3,1],pivotFade:[.8,1],edgeFade:[.2,.7],swap:[.2,.8],arc:.25};function Vo(e,t,n){let r=n+(t>1?z.travelStagger*e/(t-1):z.travelStagger/2);return[r,r+z.travel]}function Ho(e,t,n){let r=e.nodes.length,i=e.edges.length,a=e.hunks.length,o={nKind:new Uint8Array(r),nA:new Float64Array(r),nB:new Float64Array(r),nC:new Float64Array(r),nFlashA:new Float64Array(r).fill(-1),nFlashB:new Float64Array(r).fill(-1),nLabelSwap:new Uint8Array(r),nBadgeAt:new Float64Array(r).fill(2),nArrivals:Array(r).fill(null),nBadgeSteps:Array(r).fill(null),nPulse:new Uint8Array(r),hPulseContext:new Uint8Array(a),eKind:new Uint8Array(i),eA:new Float64Array(i),eB:new Float64Array(i),eFromTarget:new Uint8Array(i),ePivot:new Int32Array(i).fill(-1)},s=o.nArrivals,c=o.nBadgeSteps,l=(e,t,n,r,i=0)=>{o.nKind[e]=t,o.nA[e]=n,o.nB[e]=r,o.nC[e]=i},u=(e,t)=>{o.nFlashA[e]=t[0],o.nFlashB[e]=t[1]};for(let r of e.hunks){let i=r.kind,a=e=>t[e][1],d=e=>t[e][2],f=r.nodes.filter(t=>e.nodes[t]?.role===`merge-source`);f.forEach((t,n)=>{let r=e.nodes[t],[i,a]=Vo(n,f.length,0);r?.flow!==void 0&&!r.presentAfter?l(t,4,i,a):d(t).hidden?l(t,2,z.removeShrink[0],z.removeShrink[1],z.removeGhostFade[0]):l(t,1,i,a)});let p=r.nodes.filter(t=>e.nodes[t]?.role===`split-target`&&e.nodes[t]?.flow!==void 0&&a(t).hidden);p.forEach((e,t)=>{let[n,r]=Vo(t,p.length,z.splitStart);l(e,5,n,r)});let m=!1;for(let t of r.nodes){let n=e.nodes[t];if(n===void 0)continue;let r=a(t),s=d(t);if(r.hidden||(m=!0,o.nPulse[t]=1),o.nKind[t]===0&&!(r.hidden&&s.hidden)){if(r.hidden){let[e,n]=i===`merge`?z.popAfterArrival:z.pop;l(t,3,e,n,Math.min(1,n-.05))}else s.hidden?i===`split`?l(t,2,z.splitSourceShrink[0],z.splitSourceShrink[1],z.splitSourceFade[0]):l(t,2,z.removeShrink[0],z.removeShrink[1],z.removeGhostFade[0]):n.role===`merge-target`?(l(t,1,z.mergeTargetFade[0],z.mergeTargetFade[1]),u(t,z.mergeFlash)):n.role===`split-source`?(l(t,1,z.splitSourceStay[0],z.splitSourceStay[1]),u(t,z.mergeFlash)):(l(t,1,z.modifyFade[0],z.modifyFade[1]),s.ring!==null&&u(t,z.modifyFlash));o.nKind[t]===1&&(o.nLabelSwap[t]=r.labelBefore&&!s.labelBefore&&n.labelBefore!==void 0?1:0,s.badge&&!r.badge&&n.badge!==void 0&&(o.nBadgeAt[t]=z.badgeTick))}}if(m||(o.hPulseContext[r.index]=1),i===`merge`)for(let t of r.nodes){let n=e.nodes[t];if(n?.role!==`merge-target`||n.badge===void 0)continue;let r=f.filter(n=>e.nodes[n]?.flow===t).map(e=>o.nB[e]).sort((e,t)=>e-t);r.length===0&&r.push(z.mergeFlash[0]),s[t]=Float64Array.from(r),c[t]=r.map((e,t)=>t===r.length-1?n.badge:Da(t+1))}let h=t=>e.nodes[t]?.hunk===r.index&&(o.nKind[t]===3||o.nKind[t]===5),g=t=>e.nodes[t]?.hunk===r.index&&(o.nKind[t]===2||o.nKind[t]===4),_=(e,t,n,r=!1,i=-1)=>{o.eKind[e]=t,o.eA[e]=n[0],o.eB[e]=n[1],o.eFromTarget[e]=+!!r,o.ePivot[e]=i};for(let t of r.edges){let r=e.edges[t];if(r===void 0)continue;let a=n[t],s=a[1],c=a[2];switch(r.role){case`added`:{let e=h(r.s),n=h(r.t);_(t,1,e&&n?z.growBetweenNew:i===`add`&&(e||n)?z.growFromExisting:i===`merge`||i===`split`?z.growAfterArrival:z.growOther,e&&!n);break}case`removed`:_(t,2,z.retract,g(r.s)&&!g(r.t));break;case`collapsed`:case`carried`:{if(i===`split`&&r.role===`carried`){let e=o.nKind[r.s]===5?r.s:o.nKind[r.t]===5?r.t:-1;e>=0?_(t,5,[o.nA[e],o.nB[e]],!1,e):_(t,7,z.swap);break}let e=o.nKind[r.sb]===4?r.sb:o.nKind[r.tb]===4?r.tb:-1;e>=0?_(t,4,[o.nA[e],o.nB[e]],!1,e):r.role===`collapsed`?_(t,2,z.retract,g(r.s)&&!g(r.t)):_(t,7,z.swap);break}case`retarget`:{let e=r.s===r.sb&&r.t!==r.tb?r.s:r.t===r.tb&&r.s!==r.sb?r.t:-1;e>=0?_(t,3,z.swing,!1,e):_(t,7,z.swap);break}case`modified`:_(t,6,z.edgeFade);break;case`unchanged`:break;default:R(r.role)}s.hidden&&c.hidden&&(o.eKind[t]=0)}}return o}var Uo=e=>Math.min(1,Math.max(0,e)),Wo=(e,t,n)=>e+(t-e)*n,B=(e,t,n)=>{if(n<=t)return+(e>=n);let r=(e-t)/(n-t);return Math.min(1,Math.max(0,r))},Go=e=>e<=0||e>=1?0:Math.sin(Math.PI*e);function Ko(e,t,n,r){if(!(e>=0&&e<=1&&n>=0&&n<=1))throw new p(`invalid-input`,`cubicBezier: x1 and x2 must be in [0, 1], got ${e}, ${n}.`);let i=3*e,a=3*(n-e)-i,o=1-i-a,s=3*t,c=3*(r-t)-s,l=1-s-c,u=e=>((o*e+a)*e+i)*e,d=e=>((l*e+c)*e+s)*e,f=e=>(3*o*e+2*a)*e+i,m=e=>{let t=e;for(let n=0;n<8;n++){let n=u(t)-e;if(Math.abs(n)<1e-7)return t;let r=f(t);if(Math.abs(r)<1e-6)break;t-=n/r}let n=0,r=1;t=e;for(let i=0;i<64&&r-n>1e-7;i++){let i=u(t);if(Math.abs(i-e)<1e-7)return t;e>i?n=t:r=t,t=(n+r)/2}return t};return e=>e<=0?0:e>=1?1:d(m(e))}var qo=Ko(.2,0,0,1),Jo=1024,Yo=new Float64Array(1026);for(let e=0;e<=Jo;e++)Yo[e]=qo(e/Jo);Yo[1025]=1;var V=e=>{if(!(e>0))return 0;if(e>=1)return 1;let t=e*Jo,n=t|0,r=Yo[n];return r+(Yo[n+1]-r)*(t-n)},Xo=e=>{let t=Math.min(1,Math.max(0,e));if(t<.5)return 4*t*t*t;let n=2-2*t;return 1-n*n*n/2},Zo=(e,t=1.5)=>{let n=Math.min(1,Math.max(0,e))-1;return 1+(t+1)*n*n*n+t*n*n},Qo=[`added`,`removed`,`content`,`structure`,`identity`,`neutral`];function $o(e){switch(e){case`added`:return 0;case`removed`:return 1;case`content`:return 2;case`structure`:return 3;case`identity`:return 4;case`neutral`:return 5;default:return R(e)}}var es=new WeakMap;function ts(e){let t=es.get(e);if(t!==void 0)return t;let n=e.family,r=[n.added,n.removed,n.content,n.structure,n.identity],i={theme:e,base:[...r.map(e=>e.base),e.neutral.node],strong:[...r.map(e=>e.strong),e.neutral.nodeStroke],text:[...r.map(e=>e.text),e.neutral.label],soft:[...r.map(e=>e.soft),e.surface.raised],edge:[...r.map(e=>e.base),e.neutral.edge],deprecatedFill:Va(n.content.base,.6),deprecatedStroke:Va(n.content.strong,.6),background:e.canvas.background,primary:e.text.primary,secondary:e.text.secondary,muted:e.text.muted,neutralLabel:e.neutral.label,accent:e.accent.base,glow:e.glow,haloScale:e.glow?sa.glowScale:1,haloAlpha:e.glow?sa.glowAlpha:sa.ringAlpha,weightRegular:e.font.weightRegular,weightStrong:e.font.weightStrong,ramps:new Wa};return es.set(e,i),i}function ns(e){return Object.freeze({hidden:e.hidden,family:e.family,fill:e.fill,stroke:e.stroke,dash:e.dash,ring:e.ring,halo:e.halo,labelBefore:e.labelBefore,labelColor:e.labelColor,labelWeight:e.labelWeight,strike:e.strike,changed:e.changed,secondary:e.secondary,badge:e.badge,z:e.z})}var rs=ns({hidden:!0,family:5,fill:null,stroke:null,dash:null,ring:null,halo:null,labelBefore:!1,labelColor:``,labelWeight:400,strike:!1,changed:!1,secondary:!1,badge:!1,z:0});function is(e){return Object.freeze({hidden:e.hidden,family:e.family,before:e.before,color:e.color,width:e.width,alpha:e.alpha,dash:e.dash,arrow:e.arrow,label:e.label,labelColor:e.labelColor,strike:e.strike,changed:e.changed,z:e.z})}var as=is({hidden:!0,family:5,before:!1,color:``,width:0,alpha:0,dash:null,arrow:!1,label:0,labelColor:``,strike:!1,changed:!1,z:0}),os=class{tokens;nodes=new Map;edges=new Map;constructor(e){this.tokens=e}node(e,t,n={}){let r=`${e}|${t}|${+!!n.labelBefore}${+!!n.strike}${+!!n.secondary}${+!!n.badge}`,i=this.nodes.get(r);return i===void 0&&(i=ns(this.makeNode(e,t,n)),this.nodes.set(r,i)),i}makeNode(e,t,n){let r=this.tokens,i={hidden:!1,family:t,dash:null,ring:null,halo:null,labelBefore:n.labelBefore??!1,labelColor:r.primary,labelWeight:r.weightStrong,strike:n.strike??!1,changed:!0,secondary:n.secondary??!1,badge:n.badge??!1,z:2};switch(e){case`neutral`:return{...i,family:5,fill:r.base[5],stroke:r.strong[5],labelColor:r.neutralLabel,labelWeight:r.weightRegular,changed:!1,z:0};case`solid`:return{...i,fill:r.base[t],stroke:r.strong[t]};case`added`:return{...i,fill:r.base[t],stroke:r.strong[t],halo:r.base[t]};case`ringed`:return{...i,fill:r.base[t],stroke:r.strong[t],ring:r.base[t]};case`ringHalo`:return{...i,fill:r.base[t],stroke:r.strong[t],ring:r.base[t],halo:r.base[t]};case`ghost`:return{...i,fill:null,stroke:r.base[t],dash:ia,z:1};case`deprecated`:return{...i,family:2,fill:r.deprecatedFill,stroke:r.deprecatedStroke,ring:r.deprecatedFill,strike:!0};default:return R(e)}}edge(e,t,n,r,i=!1){let a=`${e}|${t}|${+!!n}|${r}|${+!!i}`,o=this.edges.get(a);return o===void 0&&(o=is(this.makeEdge(e,t,n,r,i)),this.edges.set(a,o)),o}makeEdge(e,t,n,r,i){let a=this.tokens,o={hidden:!1,family:t,before:n,color:a.edge[t],width:P.changedEdge,alpha:1,dash:null,arrow:!0,label:r,labelColor:a.text[t],strike:i,changed:!0,z:2};switch(e){case`neutral`:return{...o,family:5,color:a.edge[5],width:P.neutralEdge,labelColor:a.neutralLabel,changed:!1,z:0};case`solid`:return o;case`dashed`:return{...o,dash:aa,z:1};case`collapsed`:return{...o,dash:aa,alpha:L.collapsedEdge,z:1};default:return R(e)}}};function ss(e,t){let n=$o(t.family),r=t.labelBefore!==void 0;switch(t.role){case`unchanged`:{let t=e.node(`neutral`,5);return[t,t,t]}case`added`:{let t=e.node(`added`,0,{badge:!0});return[t,rs,t]}case`removed`:return[e.node(`ghost`,1,{strike:!0,badge:!0}),e.node(`solid`,1),rs];case`modified`:return[e.node(`ringed`,n,{secondary:r,badge:!0}),e.node(`ringed`,n,{labelBefore:!0}),e.node(`ringed`,n,{badge:!0})];case`deprecated`:return[e.node(`deprecated`,2,{secondary:r,badge:!0}),e.node(`ringed`,2,{labelBefore:!0}),e.node(`deprecated`,2,{badge:!0})];case`merge-source`:return[e.node(`ghost`,4,{strike:!0}),e.node(`solid`,4,{labelBefore:!0}),t.presentAfter?e.node(`deprecated`,2):rs];case`merge-target`:case`split-target`:{let n=$o(t.familyBefore),i=t.presentBefore?n===5?e.node(`neutral`,5):e.node(`ringed`,n,{labelBefore:!0}):rs;return[e.node(`ringHalo`,4,{secondary:r,badge:!0}),i,e.node(`ringHalo`,4,{badge:!0})]}case`split-source`:return[t.presentAfter?e.node(`ringHalo`,4,{secondary:r,badge:!0}):e.node(`ghost`,4,{strike:!0}),e.node(`solid`,4,{labelBefore:!0}),t.presentAfter?e.node(`ringHalo`,4,{badge:!0}):rs];default:return R(t.role)}}function cs(e,t){let n=$o(t.family),r=t.labelBefore!==void 0;switch(t.role){case`unchanged`:{let t=e.edge(`neutral`,5,!1,0);return[t,t,t]}case`added`:{let t=e.edge(`solid`,0,!1,1);return[t,as,t]}case`removed`:return[e.edge(`dashed`,1,!1,1,!0),e.edge(`solid`,1,!1,1),as];case`modified`:return[e.edge(`solid`,n,!1,r?3:1),e.edge(`solid`,n,!1,2),e.edge(`solid`,n,!1,1)];case`retarget`:case`carried`:return[e.edge(`solid`,n,!1,r?3:1),e.edge(`solid`,n,!0,2),e.edge(`solid`,n,!1,1)];case`collapsed`:return[e.edge(`collapsed`,4,!1,1,!0),e.edge(`solid`,4,!1,1),as];default:return R(t.role)}}var ls=0,us=1,ds=2,H=3,U=la.spotlightEnd,fs=la.settleStart,ps=fs-U,ms=[`added`,`removed`,`content`,`structure`,`identity`],hs=Object.freeze([]),gs=0,_s=1,vs=2,ys=3,bs=4,xs=()=>({text:``,color:``,alpha:0,size:0,weight:400,strike:!1,priority:0,minZoom:0,offset:0}),Ss=()=>({visible:!1,x:0,y:0,r:0,alpha:0,family:`neutral`,fill:null,stroke:null,strokeWidth:0,dash:null,ring:null,halo:null,label:null,secondaryLabel:null,badge:null,pulse:0,z:0}),Cs=()=>({visible:!1,x1:0,y1:0,x2:0,y2:0,r1:0,r2:0,curvature:0,color:``,width:0,alpha:0,dash:null,dashOffset:0,arrow:!1,arrowMinZoom:0,progress:1,fromTarget:!1,label:null,z:0}),ws=()=>({kind:`pivot`,x1:0,y1:0,x2:0,y2:0,r1:0,r2:0,color:``,alpha:0,width:0,dash:null,progress:1,curvature:0,label:null});function Ts(e){e.visible=!1,e.alpha=0,e.ring=null,e.halo=null,e.label=null,e.secondaryLabel=null,e.badge=null,e.pulse=0}function Es(e){e.visible=!1,e.alpha=0,e.label=null}var Ds=class{scene;t;N;M;H;nStyles;eStyles;nFam;nHunk;nHunkFam;eFam;eHunk;eHunkFam;eUnionText;ghostCurv;fillRamp;strokeRamp;ringRamp;c;glyphs;glyphLists;famBit;nx;ny;nr;nImp;nFlow;nLabel;nLabelBefore;nBadge;eS;eT;eSB;eTB;eCurv;eLabel;eLabelBefore;eUnchanged;hNodes;hContext;hEdges;hFam;chapterMode;chStart;chEnd;chHunks;wStart;wEnd;hState;hP;levelGen;level;edgeGen;pulseGen;pulseVal;gen=0;env=0;selNode;selHunk=-1;view=null;layer=ls;famMask=0;reduced=!1;curChanged=!1;curFamily=5;u=0;tau=0;time=0;emph=1;restLabels=1;lodChanged=I.changedLabel;lodNeutral=I.neutralLabel;lodImportant=I.importantNeutralLabel;countedFocus=null;focusCount=0;px=0;py=0;pools=new WeakMap;constructor(e){this.scene=e,this.t=ts(e.theme);let t=e.nodes.length,n=e.edges.length,r=e.hunks.length;this.N=t,this.M=n,this.H=r;let i=new os(this.t);this.nStyles=e.nodes.map(e=>ss(i,e)),this.eStyles=e.edges.map(e=>cs(i,e));let a=t=>{let n=t>=0?e.hunks[t]:void 0;return n===void 0?5:$o(n.family)};this.nFam=Uint8Array.from(e.nodes,e=>$o(e.family)),this.nHunk=Int32Array.from(e.nodes,e=>e.hunk),this.nHunkFam=Uint8Array.from(e.nodes,e=>a(e.hunk)),this.eFam=Uint8Array.from(e.edges,e=>$o(e.family)),this.eHunk=Int32Array.from(e.edges,e=>e.hunk),this.eHunkFam=Uint8Array.from(e.edges,e=>a(e.hunk)),this.eUnionText=e.edges.map(e=>e.labelBefore===void 0?e.label:`${e.labelBefore} → ${e.label}`),this.ghostCurv=_a(e.edges).ghost,this.famBit=Uint8Array.from([1,2,4,8,16,0]),this.nx=Float64Array.from(e.nodes,e=>e.x),this.ny=Float64Array.from(e.nodes,e=>e.y),this.nr=Float64Array.from(e.nodes,e=>e.r),this.nImp=Float64Array.from(e.nodes,e=>e.importance),this.nFlow=Int32Array.from(e.nodes,e=>e.flow??-1),this.nLabel=e.nodes.map(e=>e.label),this.nLabelBefore=e.nodes.map(e=>e.labelBefore??null),this.nBadge=e.nodes.map(e=>e.badge??null),this.eS=Int32Array.from(e.edges,e=>e.s),this.eT=Int32Array.from(e.edges,e=>e.t),this.eSB=Int32Array.from(e.edges,e=>e.sb),this.eTB=Int32Array.from(e.edges,e=>e.tb),this.eCurv=Float64Array.from(e.edges,e=>e.curvature),this.eLabel=e.edges.map(e=>e.label),this.eLabelBefore=e.edges.map(e=>e.labelBefore??null),this.eUnchanged=Uint8Array.from(e.edges,e=>+(e.status===`unchanged`)),this.hNodes=e.hunks.map(e=>Int32Array.from(e.nodes)),this.hContext=e.hunks.map(e=>Int32Array.from(e.context)),this.hEdges=e.hunks.map(e=>Int32Array.from(e.edges)),this.hFam=Uint8Array.from(e.hunks,e=>$o(e.family)),this.chapterMode=e.timeline.mode===`chapters`,this.chStart=Float64Array.from(e.timeline.chapters,e=>e.start),this.chEnd=Float64Array.from(e.timeline.chapters,e=>e.end),this.chHunks=e.timeline.chapters.map(e=>Int32Array.from(e.hunks));let o=this.t.background,s=this.t.ramps;this.fillRamp=[],this.strokeRamp=[],this.ringRamp=[];for(let e=0;e<t;e++){let[,t,n]=this.nStyles[e],r=t.hidden?null:t.fill,i=n.hidden?null:n.fill;this.fillRamp.push(!t.hidden&&n.hidden?s.get(r??o,o):r!==i&&!t.hidden?s.get(r??o,i??o):null),this.strokeRamp.push(!t.hidden&&!n.hidden&&t.stroke!==n.stroke&&t.stroke!==null&&n.stroke!==null?s.get(t.stroke,n.stroke):null),this.ringRamp.push(t.ring!==null&&n.ring!==null&&t.ring!==n.ring?s.get(t.ring,n.ring):null)}this.c=Ho(e,this.nStyles,this.eStyles);let c=this.buildGlyphs();this.glyphs=c;let l=[],u=[],d=[];c.forEach((e,t)=>{l.push(t),e.role===_s&&u.push(t),e.role!==bs&&d.push(t)}),this.glyphLists=[l,[],u,d],this.wStart=new Float64Array(r),this.wEnd=new Float64Array(r);for(let t of e.timeline.windows)t.hunk>=0&&t.hunk<r&&(this.wStart[t.hunk]=t.start,this.wEnd[t.hunk]=t.end);this.hState=new Uint8Array(r),this.hP=new Float64Array(r),this.levelGen=new Uint32Array(t),this.level=new Uint8Array(t),this.edgeGen=new Uint32Array(n),this.pulseGen=new Uint32Array(t),this.pulseVal=new Float32Array(t),this.selNode=new Uint8Array(t)}buildGlyphs(){let{scene:e,t}=this,n=[],r={push:e=>{n.push({role:e.role,kind:e.kind,a:e.a,b:e.b,edge:e.edge,node:e.node,hunk:e.hunk,family:e.family,color:e.color,alpha:e.alpha,width:e.width,dash:e.dash,curvature:e.curvature,clearA:e.clearA,clearB:e.clearB,label:e.label})}},i=(e,n,r,i,a,o)=>({role:e,kind:n,a:r,b:i,edge:-1,node:a,hunk:o,family:4,color:t.base[4],alpha:.9,width:P.glyph,dash:null,curvature:z.arc,clearA:4,clearB:4,label:null});for(let t of e.nodes)t.flow!==void 0&&(t.role===`merge-source`?r.push(i(gs,`merge-arrow`,t.index,t.flow,t.index,t.hunk)):t.role===`split-target`?r.push(i(gs,`split-arrow`,t.flow,t.index,t.index,t.hunk)):t.role===`deprecated`&&r.push(i(_s,`replacement-arrow`,t.index,t.flow,t.index,t.hunk)));for(let n of e.edges){if(n.role!==`retarget`&&n.role!==`carried`||n.sb===n.s&&n.tb===n.t)continue;let e=n.role===`retarget`?1:4;if(r.push({role:vs,kind:`edge-ghost`,a:n.sb,b:n.tb,edge:n.index,node:-1,hunk:n.hunk,family:$o(n.family),color:t.edge[e],alpha:L.ghostEdge,width:P.changedEdge,dash:aa,curvature:this.ghostCurv[n.index],clearA:0,clearB:0,label:null}),n.role!==`retarget`)continue;let i=n.s===n.sb?n.s:n.t===n.tb?n.t:-1;i<0||r.push({role:ys,kind:`pivot`,a:i,b:i===n.s?n.t:n.s,edge:n.index,node:-1,hunk:n.hunk,family:3,color:t.base[3],alpha:1,width:P.pivot,dash:null,curvature:0,clearA:0,clearB:0,label:null})}for(let n of e.suggestions)r.push({role:bs,kind:`suggestion`,a:n.before,b:n.after,edge:-1,node:-1,hunk:-1,family:4,color:t.base[4],alpha:.85,width:P.suggestion,dash:oa,curvature:.12,clearA:2,clearB:2,label:`?`});return n}newFrame(){return{nodes:[],edges:[],glyphs:[],collapsed:hs,spotlight:1}}prepare(e){let t=this.pools.get(e);if(t===void 0||t.n!==this.N||t.m!==this.M){let n=(e,t)=>Array.from({length:e},t);t={n:this.N,m:this.M,rings:n(this.N,()=>({color:``,width:0,gap:0,alpha:0})),halos:n(this.N,()=>({color:``,radius:0,alpha:0})),labels:n(this.N,xs),secondaries:n(this.N,xs),badges:n(this.N,()=>({text:``,color:``,background:``,minZoom:0})),edgeLabels:n(this.M,xs),glyphs:n(this.glyphs.length,ws),glyphLabels:n(this.glyphs.length,xs)},this.pools.set(e,t)}e.nodes.length!==this.N&&(e.nodes.length=this.N),e.edges.length!==this.M&&(e.edges.length=this.M);for(let t=0;t<this.N;t++)e.nodes[t]===void 0&&(e.nodes[t]=Ss());for(let t=0;t<this.M;t++)e.edges[t]===void 0&&(e.edges[t]=Cs());return t}resolve(e,t){let n=t??this.newFrame(),r=this.prepare(n);this.begin(e);let i=n.nodes;for(let e=0;e<this.N;e++)this.resolveNode(e,i[e],r);let a=n.edges;for(let e=0;e<this.M;e++)this.resolveEdge(e,a[e],i,r);return this.resolveGlyphs(n,r),n.collapsed=e.focus===null?hs:e.focus.collapsed,n.spotlight=this.layer===H?this.env:this.selHunk>=0?this.emph:0,this.view=null,n}begin(e){switch(this.view=e,e.layer){case`union`:this.layer=ls;break;case`before`:this.layer=us;break;case`after`:this.layer=ds;break;case`replay`:this.layer=H;break;default:throw new p(`invalid-input`,`Unknown layer "${String(e.layer)}".`)}let t=0;if(e.families.size>0)for(let n=0;n<ms.length;n++)e.families.has(ms[n])&&(t|=1<<n);this.famMask=t,this.reduced=e.reducedMotion;let n=e.emphasis;this.emph=Number.isFinite(n)?Uo(n):1,this.restLabels=1-this.emph;let r=e.focus;if(r!==null&&(r.nodes.length!==this.N||r.edges.length!==this.M||r.context.length!==this.N))throw new p(`invalid-input`,`view.focus does not belong to this scene (array lengths differ); recompute it with computeFocus(scene).`);let i=(r===null?this.N:this.focusVisible(r))<=I.smallScene;this.lodChanged=i?I.smallChangedLabel:I.changedLabel,this.lodNeutral=i?I.smallNeutralLabel:I.neutralLabel,this.lodImportant=i?I.smallNeutralLabel:I.importantNeutralLabel,this.updateSelection(e.selectedHunk>=0&&e.selectedHunk<this.H?e.selectedHunk:-1),this.env=0,this.layer===H&&(this.time=Number.isFinite(e.t)?e.t:0,this.updateReplay())}focusVisible(e){if(e!==this.countedFocus){let t=0,n=e.nodes;for(let e=0;e<n.length;e++)n[e]===1&&t++;this.countedFocus=e,this.focusCount=t}return this.focusCount}updateSelection(e){if(e!==this.selHunk){if(this.selNode.fill(0),e>=0){let t=this.hContext[e];for(let e=0;e<t.length;e++)this.selNode[t[e]]=1;let n=this.hNodes[e];for(let e=0;e<n.length;e++)this.selNode[n[e]]=2}this.selHunk=e}}updateReplay(){let{H:e,hState:t,hP:n,wStart:r,wEnd:i}=this,a=this.time,o=-1;for(let s=0;s<e;s++){let e=r[s],c=i[s];a<e?t[s]=0:a>=c?t[s]=2:(t[s]=1,n[s]=(a-e)/(c-e),o=s)}if(this.gen=this.gen+1>>>0,this.gen===0&&(this.levelGen.fill(0),this.edgeGen.fill(0),this.pulseGen.fill(0),this.gen=1),!this.chapterMode){if(o>=0){let e=n[o];this.env=e<U?V(e/U):e>fs?V((1-e)/(1-fs)):1,this.markHunk(o)}}else for(let e=0;e<this.chHunks.length;e++){let t=this.chStart[e],n=this.chEnd[e];if(a<t||a>=n)continue;let o=this.chHunks[e],s=o.length>0?o[0]:-1,c=s<0?1:U*(i[s]-r[s]);this.env=V(Uo(Math.min(a-t,n-a)/Math.max(c,1e-9)));for(let e=0;e<o.length;e++)this.markHunk(o[e]);break}}markHunk(e){let t=this.hContext[e],n=this.hNodes[e],r=this.hEdges[e];if(t===void 0||n===void 0||r===void 0)return;let{gen:i,levelGen:a,level:o,pulseGen:s,pulseVal:c}=this,l=this.hState[e]===1&&this.hP[e]<U&&!this.reduced,u=l?this.hP[e]/U:0;for(let n=0;n<t.length;n++){let r=t[n];a[r]!==i&&(a[r]=i,o[r]=1),l&&this.c.hPulseContext[e]===1&&(s[r]=i,c[r]=u)}for(let e=0;e<n.length;e++){let t=n[e];a[t]=i,o[t]=2,l&&this.c.nPulse[t]===1&&(s[t]=i,c[t]=u)}for(let e=0;e<r.length;e++)this.edgeGen[r[e]]=i}nodeLevel(e){return this.layer===H?this.levelGen[e]===this.gen?this.level[e]:0:this.selNode[e]}spotlight(e){return this.layer===H?this.env<=0||e===2?1:Wo(1,e===1?L.replayContext:L.replayRest,this.env):this.selHunk<0||e===2?1:Wo(1,e===1?L.selectedContext:L.selectedRest,this.emph)}fadesRestLabels(e){return this.layer!==H&&this.selHunk>=0&&e===0}filtered(e,t){let n=this.famMask;return n!==0&&(this.famBit[e]&n)===0&&(this.famBit[t]&n)===0}resolveNode(e,t,n){t.x=this.nx[e],t.y=this.ny[e],t.r=this.nr[e],t.family=Qo[this.nFam[e]],t.pulse=0,t.strokeWidth=P.node;let r=this.nStyles[e],i;if(this.layer!==H)i=this.applyNode(t,e,r[this.layer],n);else{let a=this.nHunk[e],o=a<0?2:this.hState[a];if(o===0)i=this.applyNode(t,e,r[us],n);else if(o===2)i=this.applyNode(t,e,r[ds],n);else{let o=this.hP[a];o<U?i=this.applyNode(t,e,r[us],n):o>=fs?i=this.applyNode(t,e,r[ds],n):(this.u=(o-U)/ps,i=this.animateNode(t,e,r,n))}i&&this.pulseGen[e]===this.gen&&(t.pulse=this.pulseVal[e])}i?this.modulateNode(t,e,n):Ts(t)}applyNode(e,t,n,r){if(n.hidden)return!1;let i=this.t,a=this.nLabelBefore[t]??null;if(e.visible=!0,e.alpha=1,e.family=Qo[n.family],e.fill=n.fill,e.stroke=n.stroke,e.dash=n.dash,e.z=n.z,n.ring!==null){let i=r.rings[t];i.color=n.ring,i.width=P.ring,i.gap=P.ringGap,i.alpha=1,e.ring=i}else e.ring=null;if(n.halo!==null){let a=r.halos[t];a.color=n.halo,a.radius=e.r*i.haloScale,a.alpha=i.haloAlpha,e.halo=a}else e.halo=null;let o=r.labels[t];if(o.text=n.labelBefore&&a!==null?a:this.nLabel[t],o.color=n.labelColor,o.alpha=1,o.size=F.size,o.weight=n.labelWeight,o.strike=n.strike,o.offset=F.offset,e.label=o,n.secondary&&a!==null){let n=r.secondaries[t];n.text=a,n.color=i.muted,n.alpha=1,n.size=F.oldSize,n.weight=i.weightRegular,n.strike=!0,n.offset=F.offset+F.secondaryGap,e.secondaryLabel=n}else e.secondaryLabel=null;let s=this.nBadge[t]??null;return n.badge&&s!==null?this.setBadge(e,t,s,n.family,r):e.badge=null,this.curChanged=n.changed,this.curFamily=n.family,!0}setBadge(e,t,n,r,i){let a=i.badges[t];a.text=n,a.color=this.t.text[r],a.background=this.t.soft[r],e.badge=a}animateNode(e,t,n,r){let i=this.c,a=this.u,o=i.nKind[t],s=n[us],c=n[ds],l=this.reduced;switch(o){case 1:return this.animFade(e,t,s,c,r);case 2:case 4:return this.applyNode(e,t,s,r)?l?(e.alpha=1-V(a),e.alpha>0):o===2?this.animRemove(e,t,s):this.animTravel(e,t):!1;case 3:case 5:return this.applyNode(e,t,c,r)?l?(e.alpha=V(a),e.alpha>0):o===3?this.animAdd(e,t):this.animEmerge(e,t):!1;case 0:return this.applyNode(e,t,a<.5?s:c,r);default:return this.applyNode(e,t,c,r)}}animFade(e,t,n,r,i){let a=this.c,o=this.u,s=this.nLabelBefore[t]??null,c=this.nBadge[t]??null,l=this.reduced,u=V(l?o:B(o,a.nA[t],a.nB[t]));if(!this.applyNode(e,t,u<.5?n:r,i))return!1;let d=this.t,f=this.fillRamp[t]??null;f!==null&&u>0&&u<1&&(e.fill=Ua(f,u));let p=this.strokeRamp[t]??null;p!==null&&u>0&&u<1&&(e.stroke=Ua(p,u));let m=i.rings[t];if(n.ring!==null||r.ring!==null){let i=this.ringRamp[t]??null;m.color=r.ring!==null&&n.ring!==null?i===null?r.ring:Ua(i,u):r.ring??n.ring??``,m.width=P.ring,m.gap=P.ringGap,m.alpha=r.ring!==null&&n.ring!==null?1:r.ring===null?1-u:u,e.ring=m.alpha>0?m:null}if(!l&&a.nFlashA[t]>=0&&e.ring!==null){let e=Go(B(o,a.nFlashA[t],a.nFlashB[t]));m.width=P.ring+P.ring*e,m.alpha=Math.max(m.alpha,e)}if(n.halo!==null||r.halo!==null){let a=i.halos[t];a.color=r.halo??n.halo,a.radius=e.r*d.haloScale,a.alpha=d.haloAlpha*(r.halo!==null&&n.halo!==null?1:r.halo===null?1-u:u),e.halo=a.alpha>0?a:null}if(a.nLabelSwap[t]===1&&s!==null){let a=l?u:V(B(o,z.labelOut[0],z.labelOut[1])),c=l?u:V(B(o,z.labelIn[0],z.labelIn[1])),d=i.labels[t];d.text=this.nLabel[t],d.color=r.labelColor,d.weight=r.labelWeight,d.strike=r.strike,d.alpha=c,d.offset=F.offset+(l?0:z.labelSlide*(1-c)),e.label=d;let f=i.secondaries[t];f.text=s,f.color=n.labelColor,f.size=F.size,f.weight=n.labelWeight,f.strike=!1,f.alpha=1-a,f.offset=F.offset-(l?0:z.labelSlide*a),e.secondaryLabel=f.alpha>0?f:null}let h=a.nArrivals[t]??null,g=a.nBadgeSteps[t]??null;if(h!==null&&g!==null){let n=0;if(l)n=u>=.5?h.length:0;else for(;n<h.length&&h[n]<=o;)n++;n>0?this.setBadge(e,t,g[n-1],r.family,i):e.badge=null}else a.nBadgeAt[t]<=1&&c!==null&&((l?u>=.5:o>=a.nBadgeAt[t])?this.setBadge(e,t,c,r.family,i):e.badge=null);return!0}animRemove(e,t,n){let r=this.c,i=this.u,a=V(B(i,r.nA[t],r.nB[t]));if(a>0){e.r=this.nr[t]*(1-.4*a);let r=this.fillRamp[t]??null;e.fill=a>=1||r===null?null:Ua(r,a),e.dash=ia,e.stroke=this.t.base[n.family],e.label!==null&&(e.label.strike=!0),e.ring!==null&&(e.ring.alpha=1-a),e.halo!==null&&(e.halo.alpha*=1-a,e.halo.radius=e.r*this.t.haloScale)}return e.alpha=1-V(B(i,r.nC[t],1)),e.alpha>0}arcPoint(e,t){let{nx:n,ny:r}=this,i=n[e],a=r[e],o=n[t],s=r[t],c=this.tau,l=(i+o)/2-z.arc*(s-a),u=(a+s)/2+z.arc*(o-i),d=(1-c)*(1-c),f=2*(1-c)*c,p=c*c;this.px=d*i+f*l+p*o,this.py=d*a+f*u+p*s}animTravel(e,t){let n=this.c,r=this.u,i=this.nFlow[t];if(i<0)return!0;let a=n.nA[t],o=n.nB[t];return this.tau=Xo(B(r,a,o)),this.arcPoint(t,i),e.x=this.px,e.y=this.py,e.z=3,e.alpha=1-B(r,o,o+z.arrivalFade),e.label!==null&&(e.label.alpha=1-B(r,(a+o)/2,o)),e.halo!==null&&(e.halo.radius=e.r*this.t.haloScale),e.alpha>0}animAdd(e,t){let n=this.c,r=this.u,i=B(r,n.nA[t],n.nB[t]);if(e.r=i>0?this.nr[t]*Zo(i):0,i<=0)return!1;e.alpha=Math.min(1,i*4),e.halo!==null&&(e.halo.radius=e.r*this.t.haloScale);let a=n.nC[t],o=V(B(r,a,Math.min(1,a+z.labelFadeIn)));return e.label!==null&&(e.label.alpha=o),e.secondaryLabel!==null&&(e.secondaryLabel.alpha=o),o<1&&(e.badge=null),!0}animEmerge(e,t){let n=this.c,r=this.u,i=this.nFlow[t];if(i<0)return!0;let a=n.nA[t],o=n.nB[t],s=Xo(B(r,a,o));this.tau=s,this.arcPoint(i,t),e.x=this.px,e.y=this.py,e.r=this.nr[t]*(.5+.5*s),e.z=3,e.alpha=B(r,a,a+.1),e.halo!==null&&(e.halo.radius=e.r*this.t.haloScale);let c=V(B(r,o-.05,Math.min(1,o+z.labelFadeIn)));return e.label!==null&&(e.label.alpha=c),e.secondaryLabel!==null&&(e.secondaryLabel.alpha=c),c<1&&(e.badge=null),e.alpha>0}modulateNode(e,t,n){let r=this.view,i=this.t,a=1,o=r.focus;if(o!==null){if(o.nodes[t]!==1){Ts(e);return}o.context[t]===1&&(a*=L.focusContext)}let s=this.curChanged,c=this.curFamily,l=!1;this.filtered(this.nFam[t],this.nHunkFam[t])&&(l=!0,s=!1,c=5,e.family=`neutral`,e.fill!==null&&(e.fill=i.base[5]),e.stroke=i.strong[5],e.ring=null,e.halo=null,e.badge=null,e.secondaryLabel=null,e.label!==null&&(e.label.color=i.neutralLabel,e.label.weight=i.weightRegular),a*=L.filtered);let u=this.nodeLevel(t);a*=this.spotlight(u);let d=this.selHunk>=0?this.selNode[t]:0,f=this.fadesRestLabels(d);if(d===2&&!l&&e.halo===null&&this.emph>0){let r=n.halos[t];r.color=i.base[c],r.radius=e.r*i.haloScale,r.alpha=i.haloAlpha*this.emph,e.halo=r}let p=r.hoveredNode===t,m=r.selectedNode===t;if(p&&(e.strokeWidth=P.hoveredNode,e.stroke=s?i.strong[c]:i.secondary,e.z=4),m){let r=n.rings[t];r.color=i.accent,r.width=P.hoveredNode,r.gap=P.ringGap,r.alpha=1,e.ring=r,e.z=4}e.alpha*=a;let h=this.nImp[t],g=s?this.lodChanged:h>=I.importantThreshold?this.lodImportant:this.lodNeutral,_=s?1+h:h;if(p&&(g=0,_=2+h),(d===2||m)&&(g=0,_=3+h),f&&!p&&!m){let t=this.restLabels;t<=0?(e.label=null,e.secondaryLabel=null):(e.label!==null&&(e.label.alpha*=t),e.secondaryLabel!==null&&(e.secondaryLabel.alpha*=t)),t<.5&&(e.badge=null)}e.label!==null&&(e.label.minZoom=g,e.label.priority=_),e.secondaryLabel!==null&&(e.secondaryLabel.minZoom=g,e.secondaryLabel.priority=_-.5),e.badge!==null&&(e.badge.minZoom=d===2?0:I.badge)}resolveEdge(e,t,n,r){let i=this.eStyles[e],a;if(this.layer!==H)a=this.applyEdge(t,e,i[this.layer],n,r);else{let o=this.eHunk[e],s=o<0?2:this.hState[o];if(s===0)a=this.applyEdge(t,e,i[us],n,r);else if(s===2)a=this.applyEdge(t,e,i[ds],n,r);else{let s=this.hP[o];s<U?a=this.applyEdge(t,e,i[us],n,r):s>=fs?a=this.applyEdge(t,e,i[ds],n,r):(this.u=(s-U)/ps,a=this.animateEdge(t,e,i,n,r))}}a?this.modulateEdge(t,e,r):Es(t)}setEnds(e,t,n){e.x1=t.x,e.y1=t.y,e.r1=t.r,e.x2=n.x,e.y2=n.y,e.r2=n.r}applyEdge(e,t,n,r,i){if(n.hidden)return!1;let a=this.eS[t],o=this.eT[t],s=this.eSB[t],c=this.eTB[t],l=n.before&&(s!==a||c!==o);if(this.setEnds(e,r[l?s:a],r[l?c:o]),e.curvature=l?this.ghostCurv[t]:this.eCurv[t],e.visible=!0,e.color=n.color,e.width=n.width,e.alpha=n.alpha,e.dash=n.dash,e.dashOffset=0,e.arrow=n.arrow,e.arrowMinZoom=n.changed?0:I.arrow,e.progress=1,e.fromTarget=!1,e.z=n.z,n.label===0)e.label=null;else{let r=i.edgeLabels[t];r.text=n.label===3?this.eUnionText[t]:n.label===2?this.eLabelBefore[t]??this.eLabel[t]:this.eLabel[t],r.color=n.labelColor,r.alpha=1,r.size=F.edgeSize,r.weight=this.t.weightRegular,r.strike=n.strike,r.offset=0,e.label=r}return this.curChanged=n.changed,this.curFamily=n.family,!0}animateEdge(e,t,n,r,i){let a=this.c,o=this.u,s=n[us],c=n[ds],l=a.eA[t],u=a.eB[t],d=this.reduced;switch(a.eKind[t]){case 1:{if(!this.applyEdge(e,t,c,r,i))return!1;if(d)return e.alpha*=V(o),e.alpha>0;let n=V(B(o,l,u));return n<=0?!1:(e.progress=n,e.fromTarget=a.eFromTarget[t]===1,e.label!==null&&(e.label.alpha=V(B(o,u-.05,Math.min(1,u+.15)))),!0)}case 2:{if(!this.applyEdge(e,t,s,r,i))return!1;if(d)return e.alpha*=1-V(o),e.alpha>0;let n=V(B(o,l,u));return n>=1?!1:(e.progress=1-n,e.fromTarget=a.eFromTarget[t]===1,e.label!==null&&(e.label.alpha=1-B(o,l,l+.1)),!0)}case 3:return this.applyEdge(e,t,c,r,i)?d?(e.alpha*=V(o),e.alpha>0):(this.tau=Xo(B(o,l,u)),this.swing(e,t,r),!0):!1;case 4:if(d){if(c.hidden){if(!this.applyEdge(e,t,s,r,i))return!1;e.alpha*=1-V(o)}else{if(!this.applyEdge(e,t,c,r,i))return!1;e.alpha*=V(o)}return e.alpha>0}return o<u||c.hidden?this.applyEdge(e,t,s,r,i)?(e.alpha*=1-B(o,u,u+z.arrivalFade),e.alpha>0):!1:this.applyEdge(e,t,c,r,i);case 5:return this.applyEdge(e,t,c,r,i)?(d&&(e.alpha*=V(o)),e.alpha>0):!1;case 6:{let n=V(B(o,l,u));return this.applyEdge(e,t,n<.5?s:c,r,i)?(e.label!==null&&s.label!==c.label&&(e.label.alpha=Math.abs(1-2*n)),d||(e.width+=Go(n)),!0):!1}case 7:return this.applyEdge(e,t,c,r,i)?(e.alpha*=V(d?o:B(o,l,u)),e.alpha>0):!1;case 0:return this.applyEdge(e,t,o<.5?s:c,r,i);default:return this.applyEdge(e,t,c,r,i)}}swing(e,t,n){let r=this.tau,i=this.c.ePivot[t],a=i===this.eS[t],o=n[a?this.eTB[t]:this.eSB[t]],s=n[a?this.eT[t]:this.eS[t]],c=n[i],l=Math.atan2(o.y-c.y,o.x-c.x),u=Math.atan2(s.y-c.y,s.x-c.x)-l;u>Math.PI?u-=2*Math.PI:u<-Math.PI&&(u+=2*Math.PI);let d=Wo(Math.hypot(o.x-c.x,o.y-c.y),Math.hypot(s.x-c.x,s.y-c.y),r),f=l+u*r,p=c.x+d*Math.cos(f),m=c.y+d*Math.sin(f),h=Wo(o.r,s.r,r);a?(e.x2=p,e.y2=m,e.r2=h):(e.x1=p,e.y1=m,e.r1=h),e.curvature=Wo(this.ghostCurv[t],this.eCurv[t],r)}modulateEdge(e,t,n){let r=this.view,i=this.eS[t],a=this.eT[t],o=this.t,s=1,c=r.focus;if(c!==null){if(c.edges[t]!==1){Es(e);return}this.eUnchanged[t]===1&&(c.context[i]===1||c.context[a]===1)&&(s*=L.focusContext)}let l=this.curChanged;this.filtered(this.eFam[t],this.eHunkFam[t])&&(l=!1,e.color=o.edge[5],e.width=P.neutralEdge,e.arrowMinZoom=I.arrow,e.label!==null&&(e.label.color=o.neutralLabel),s*=L.filtered);let u;u=this.layer===H?this.edgeGen[t]===this.gen?2:+(this.nodeLevel(i)>=1&&this.nodeLevel(a)>=1):this.selHunk>=0&&this.eHunk[t]===this.selHunk?2:+(this.selNode[i]>=1&&this.selNode[a]>=1),s*=this.spotlight(u);let d=this.selHunk>=0&&this.eHunk[t]===this.selHunk,f=r.hoveredEdge===t,p=l?I.edgeLabel:0,m=l?.9:.4;if(d&&(e.width<P.selectedEdge&&(e.width+=(P.selectedEdge-e.width)*this.emph),e.arrowMinZoom=0,e.z=Math.max(e.z,3),p=0,m=3),f){if(e.width=Math.max(e.width,P.selectedEdge),e.arrowMinZoom=0,e.z=4,e.label===null){let r=n.edgeLabels[t];r.text=this.eLabel[t],r.color=o.neutralLabel,r.alpha=1,r.size=F.edgeSize,r.weight=o.weightRegular,r.strike=!1,r.offset=0,e.label=r}p=0,m=Math.max(m,2.5)}e.label!==null&&this.fadesRestLabels(u)&&!f&&(this.restLabels<=0?e.label=null:e.label.alpha*=this.restLabels),e.alpha*=s,e.label!==null&&(e.label.minZoom=p,e.label.priority=m)}resolveGlyphs(e,t){let n=e.glyphs,r=this.glyphLists[this.layer],i=0;for(let a=0;a<r.length;a++){let o=this.glyphs[r[a]],s=t.glyphs[i];this.writeGlyph(o,s,t.glyphLabels[i],e.nodes)&&(n[i]!==s&&(n[i]=s),i++)}n.length!==i&&(n.length=i)}glyphLine(e,t){let{nx:n,ny:r,nr:i}=this;e.x1=n[t.a],e.y1=r[t.a],e.x2=n[t.b],e.y2=r[t.b],e.r1=i[t.a]+t.clearA,e.r2=i[t.b]+t.clearB}writeGlyph(e,t,n,r){let i=this.view,a=i.focus;if(a!==null&&(a.nodes[e.a]!==1||a.nodes[e.b]!==1))return!1;let o=e.alpha,s=1,c=e.color,l=e.dash,u=e.width;if(this.layer===H){let t=e.hunk;if(t<0)return!1;let n=this.hState[t],r=this.hP[t],i=n===1&&r>=U&&r<fs,a=i?(r-U)/ps:0,d=this.c;switch(e.role){case gs:{if(!i||this.reduced)return!1;let t=d.nA[e.node],n=d.nB[e.node];if(s=Xo(B(a,t,n)),o*=.6*(1-B(a,n+.05,1)),s<=0||o<=0)return!1;break}case _s:if(n===0||n===1&&r<U||i&&(this.reduced?o*=V(a):s=V(B(a,.4,.9)),s<=0||o<=0))return!1;break;case vs:{if(!i)return!1;let t=d.eKind[e.edge];if(t===3&&!this.reduced)o*=1-V(B(a,z.ghostFade[0],z.ghostFade[1]));else if(t===7||t===3||this.reduced){let t=this.eStyles[e.edge][us];c=t.color,l=t.dash,u=t.width,o=1-V(this.reduced?a:B(a,d.eA[e.edge],d.eB[e.edge]))}else return!1;if(o<=0)return!1;break}case ys:if(!i||this.reduced||d.eKind[e.edge]!==3||(o*=1-B(a,z.pivotFade[0],z.pivotFade[1]),o<=0))return!1;break;default:return!1}}else if(e.role===bs&&!i.showSuggestions)return!1;else if(e.edge>=0&&r[e.a]?.visible!==!0)return!1;if(t.kind=e.kind,e.role===ys){let{nx:n,ny:r,nr:i}=this,a=n[e.a],o=r[e.a],s=i[e.a],c=n[e.b]-a,l=r[e.b]-o,u=Math.sqrt(c*c+l*l);t.x1=u>0?a+c/u*s:a,t.y1=u>0?o+l/u*s:o-s,t.x2=t.x1,t.y2=t.y1,t.r1=0,t.r2=0,t.curvature=0}else this.glyphLine(t,e),t.curvature=e.curvature;let d=1;this.filtered(e.family,e.hunk>=0?this.hFam[e.hunk]:5)&&(c=this.t.edge[5],d*=L.filtered);let f=Math.max(this.nodeLevel(e.a),this.nodeLevel(e.b));d*=this.spotlight(f),t.color=c,t.alpha=o*d,t.width=u,t.dash=l,t.progress=s;let p=this.fadesRestLabels(f);return e.label!==null&&!(p&&this.restLabels<=0)?(n.text=e.label,n.color=this.t.text[4],n.alpha=p?this.restLabels:1,n.size=F.size,n.weight=this.t.weightStrong,n.strike=!1,n.priority=1,n.minZoom=this.lodChanged,n.offset=0,t.label=n):t.label=null,t.alpha>0}};function Os(e){return new Ds(e)}var ks=new Set;function As(e={}){return Object.freeze({layer:e.layer??`union`,t:e.t??0,selectedHunk:e.selectedHunk??-1,hoveredNode:e.hoveredNode??-1,hoveredEdge:e.hoveredEdge??-1,selectedNode:e.selectedNode??-1,focus:e.focus??null,families:e.families??ks,showSuggestions:e.showSuggestions??!0,reducedMotion:e.reducedMotion??!1,emphasis:e.emphasis??1})}var js=`KgdiffCompute`,Ms=null,Ns=null,Ps=!1;function Fs(){let e=globalThis[js];return typeof e==`object`&&e?e:null}function Is(){return Ns??=Fs(),Ns}function Ls(){return Is()?`ready`:Ps?`unavailable`:`unknown`}function Rs(){let e=Is();return e?Promise.resolve(e):(Ms??=import(`@kgdiff/viewer/compute`).then(e=>(Ns=e,Ps=!1,e),e=>{throw Ms=null,Ps=!0,new p(`invalid-input`,`Diffing in the browser needs the compute module: import @kgdiff/viewer as a module, or add kgdiff-viewer-compute.js.`,{cause:e instanceof Error?e.message:String(e)})}),Ms)}var zs=8,Bs=.94,Vs=6,Hs=48,Us=Object.freeze({top:0,right:0,bottom:0,left:0});function Ws(e,t,n,r){let i=t-r.left-r.right,a=n-r.top-r.bottom;if(i<Hs||a<Hs)return 0;let o=e.width>0?i/e.width:1/0,s=e.height>0?a/e.height:1/0;return Math.min(o,s)}function Gs(e,t,n=24,r=1/0){let{width:i,height:a}=t,o={top:n,right:n,bottom:n,left:n},s=t.obstacles.filter(e=>e.width>0&&e.height>0&&e.x<i&&e.y<a&&e.x+e.width>0&&e.y+e.height>0).sort((e,t)=>t.width*t.height-e.width*e.height).slice(0,Vs),c=s.map(e=>[e.y+e.height+zs,i-e.x+zs,a-e.y+zs,e.x+e.width+zs]),l=e=>Math.min(e,r),u=o,d=-1,f=1/0,p=4**s.length;for(let t=0;t<p;t++){let r=n,o=n,s=n,p=n,m=t;for(let e of c){let t=m&3;m>>=2;let n=e[t];t===0?r=Math.max(r,n):t===1?o=Math.max(o,n):t===2?s=Math.max(s,n):p=Math.max(p,n)}let h={top:r,right:o,bottom:s,left:p},g=l(Ws(e,i,a,h));if(!(g>0))continue;let _=Math.hypot((p-o)/2,(r-s)/2),v=g>d/Bs||g>=d*Bs&&_<f-.5;(d<0||v)&&(u=h,d=Math.max(g,d),f=_)}return u}var Ks=.05,qs=16;function Js(e,t,n,r,i){let a=i=>{let a=e(i);return a!==null&&Ws(a,t,n,r)>=i},o=i;if(!a(o)){let s=Math.min(Ks,i);if(!a(s)){let i=e(1/0);return i?{k:Ws(i,t,n,r),content:i,bounds:i}:null}let c=o;for(let e=0;e<qs;e++){let e=Math.sqrt(s*c);a(e)?s=e:c=e}o=s}let s=e(o);if(!s)return null;let c=(t-r.left-r.right)/o,l=(n-r.top-r.bottom)/o,u={x:s.x+s.width/2-c/2,y:s.y+s.height/2-l/2,width:c,height:l};return{k:o,content:s,bounds:u}}function Ys(e,t,n){return{x:e.x+n.left/t,y:e.y+n.top/t,width:Math.max(0,e.width-(n.left+n.right)/t),height:Math.max(0,e.height-(n.top+n.bottom)/t)}}var Xs={"brand.tagline":`git diff for knowledge graphs`,"header.compare":`Compared versions`,"header.actions":`Viewer actions`,"dock.label":`View`,"mode.label":`Compare by`,"mode.overlay":`Overlay`,"mode.swipe":`Swipe`,"mode.replay":`Replay`,"mode.changes":`Changes only`,"scope.hint":`Show only the changes, with nearby context`,"scope.on":`Showing only the changes`,"scope.off":`Showing the whole graph`,"scope.locked":`This graph was laid out around its changes only: the whole graph cannot be shown.`,"family.added":`Added`,"family.removed":`Removed`,"family.content":`Content`,"family.structure":`Structure`,"family.identity":`Identity`,"family.neutral":`Unchanged`,"familyHint.added":`Only in the new version`,"familyHint.removed":`Only in the old version`,"familyHint.content":`Renamed, attributes, types, synonyms`,"familyHint.structure":`Moved or relinked`,"familyHint.identity":`Merged, split or re-keyed`,"familyHint.neutral":`Unchanged context`,"phase.remove":`Removed`,"phase.restructure":`Restructured`,"phase.modify":`Modified`,"phase.add":`Added`,"kind.add":`Addition`,"kind.remove":`Removal`,"kind.merge":`Merge`,"kind.split":`Split`,"kind.modify":`Edit`,"kind.relations":`Relations`,"status.unchanged":`Unchanged`,"status.added":`Added`,"status.removed":`Removed`,"status.modified":`Modified`,"action.fit":`Fit to view`,"action.help":`Keyboard shortcuts`,"action.sidebar":`Toggle sidebar`,"action.zoomIn":`Zoom in`,"action.zoomOut":`Zoom out`,"action.settings":`Display settings`,"menu.theme":`Theme`,"menu.palette":`Colors`,"menu.language":`Language`,"theme.auto":`Auto`,"theme.light":`Light`,"theme.dark":`Dark`,"palette.default":`Default`,"palette.colorblind":`Color-blind safe`,"sidebar.label":`Change list`,"sidebar.changes":`Changes`,"sidebar.search":`Search nodes`,"sidebar.searchPlaceholder":`Search nodes…`,"sidebar.searchClear":`Clear search`,"sidebar.noResults":`No nodes match “{q}”`,"sidebar.results.one":`{n} node`,"sidebar.results.other":`{n} nodes`,"sidebar.filters":`Filter by kind of change`,"sidebar.clearFilters":`Show all`,"sidebar.filteredEmpty":`No changes match the filters.`,"sidebar.noChanges":`No changes to review.`,"sidebar.sheet":`Resize panel`,"sidebar.sheetValue":`{p} of the height`,"review.progress":`{done} of {total} reviewed`,"review.toggle":`Reviewed`,"review.mark":`Mark as reviewed`,"review.unmark":`Mark as not reviewed`,"review.complete":`All changes reviewed`,"detail.label":`Change details`,"detail.empty":`Select a change to see what happened.`,"detail.emptyHint":`Use j / k to step through changes.`,"detail.prev":`Previous change`,"detail.next":`Next change`,"detail.changes":`Changes`,"detail.changedTo":`changed to`,"detail.identity":`Overview`,"detail.id":`Id`,"detail.types":`Types`,"detail.status":`Status`,"detail.name":`Name`,"detail.before":`Before`,"detail.after":`After`,"detail.attributes":`Attributes`,"detail.aliases":`Synonyms`,"detail.hierarchy":`Hierarchy`,"detail.relations":`Relations`,"detail.composition":`Composition`,"detail.evidence":`Match evidence`,"detail.nodes":`Nodes`,"detail.showMore":`Show more`,"detail.showLess":`Show less`,"detail.unchangedAttrs.one":`{n} unchanged attribute`,"detail.unchangedAttrs.other":`{n} unchanged attributes`,"detail.moreRelations.one":`{n} more relation`,"detail.moreRelations.other":`{n} more relations`,"detail.was":`was {x}`,"detail.viaHint":`via replacement hint`,"detail.viaHeuristic":`heuristic`,"detail.confidence":`{p} confidence`,"detail.matchScore":`{p} match`,"detail.matchHint":`Matched through a replacement hint`,"detail.evidence.label":`Label`,"detail.evidence.neighbors":`Neighbours`,"detail.evidence.types":`Types`,"detail.evidence.attrs":`Attributes`,"detail.suggestion":`Possible match`,"detail.suggestion.ambiguous":`ambiguous`,"detail.suggestion.below":`below threshold`,"detail.deprecated":`Deprecated`,"detail.undeprecated":`No longer deprecated`,"detail.replacedBy":`Replaced by`,"detail.replaces":`Replaces`,"detail.unchangedNode":`Unchanged node`,"detail.implicit":`Created for a dangling relation`,"detail.collapsed":`duplicate, collapsed`,"detail.mergedFrom":`Merged from`,"detail.splitInto":`Split into`,"detail.edgeAttrs":`attributes changed`,"detail.showOnCanvas":`Show on canvas`,"replay.label":`Replay controls`,"replay.play":`Play`,"replay.pause":`Pause`,"replay.speed":`Playback speed {s}`,"replay.position":`{i} / {n}`,"replay.finished":`Replay finished`,"replay.restart":`Restart`,"replay.scrubber":`Replay position`,"swipe.divider":`Comparison divider`,"focus.context":`Context`,"focus.hops":`Context hops`,"focus.expand":`Click to expand`,"focus.expandUnavailable":`Expanding needs the kgdiff compute add-on`,"focus.expandNearest":`Show hidden context near the selection`,"announce.expanded":`Expanded {label}`,"announce.nothingHidden":`No hidden context`,"help.expand":`Show hidden context (changes only)`,"legend.title":`Legend`,"legend.toggle":`Toggle legend`,"minimap.label":`Overview`,"tooltip.relations.one":`{n} relation`,"tooltip.relations.other":`{n} relations`,"tooltip.select":`Click to select`,"help.title":`Keyboard shortcuts`,"help.close":`Close`,"help.enter":`Fly to the selected change`,"help.esc":`Clear selection, close popovers`,"help.space":`Play / pause (replay)`,"help.arrows":`Step (replay) · move divider (swipe)`,"help.theme":`Cycle theme`,"help.homeEnd":`First / last change`,"state.loading":`Preparing the diff`,"step.parse":`Parsing`,"step.match":`Matching nodes`,"step.layout":`Laying out`,"step.scene":`Drawing`,"state.identical.title":`No differences`,"state.identical.body":`Both versions have {nodes} and {edges}.`,"count.nodes.one":`{n} node`,"count.nodes.other":`{n} nodes`,"count.edges.one":`{n} edge`,"count.edges.other":`{n} edges`,"state.error.title":`This diff could not be shown`,"state.error.details":`Details`,"state.empty.title":`Nothing to compare yet`,"state.empty.body":`Load two versions of a graph to see what changed.`,"aria.canvas":`Graph diff. Before: {nb} nodes, {eb} edges. After: {na} nodes, {ea} edges. {changes}.`,"aria.changes.one":`{n} change`,"aria.changes.other":`{n} changes`,"announce.change":`Change {i} of {n}: {title}`,"announce.node":`Node {label}, {status}`,"announce.mode":`{mode} view`,"announce.cleared":`Selection cleared`,"announce.reviewed":`Marked as reviewed. {progress}`,"announce.unreviewed":`Marked as not reviewed. {progress}`,"announce.finished":`Replay finished`,"announce.chapter":`{phase}: {n} changes`,"error.formats":`Parsing text needs @kgdiff/formats (import it, or pass parsed graphs).`,"error.notLoaded":`Nothing is loaded yet.`},Zs={en:Xs,"zh-CN":{"brand.tagline":`知识图谱的 git diff`,"header.compare":`对比的版本`,"header.actions":`查看器操作`,"dock.label":`视图`,"mode.label":`对比方式`,"mode.overlay":`叠加`,"mode.swipe":`滑动对比`,"mode.replay":`回放`,"mode.changes":`仅看变更`,"scope.hint":`只显示变更,以及附近的上下文`,"scope.on":`只显示变更`,"scope.off":`显示全图`,"scope.locked":`这张图只对变更部分做了布局,无法显示全图。`,"family.added":`新增`,"family.removed":`删除`,"family.content":`内容`,"family.structure":`结构`,"family.identity":`身份`,"family.neutral":`未变`,"familyHint.added":`只在新版本中`,"familyHint.removed":`只在旧版本中`,"familyHint.content":`改名、属性、类型、别名`,"familyHint.structure":`移动或关系改指向`,"familyHint.identity":`合并、拆分或更换 id`,"familyHint.neutral":`未变化的上下文`,"phase.remove":`删除`,"phase.restructure":`结构调整`,"phase.modify":`修改`,"phase.add":`新增`,"kind.add":`新增`,"kind.remove":`删除`,"kind.merge":`合并`,"kind.split":`拆分`,"kind.modify":`修改`,"kind.relations":`关系`,"status.unchanged":`未变`,"status.added":`新增`,"status.removed":`删除`,"status.modified":`修改`,"action.fit":`适应视图`,"action.help":`键盘快捷键`,"action.sidebar":`显示或隐藏侧栏`,"action.zoomIn":`放大`,"action.zoomOut":`缩小`,"action.settings":`显示设置`,"menu.theme":`主题`,"menu.palette":`配色`,"menu.language":`语言`,"theme.auto":`跟随系统`,"theme.light":`浅色`,"theme.dark":`深色`,"palette.default":`默认`,"palette.colorblind":`色觉友好`,"sidebar.label":`变更列表`,"sidebar.changes":`变更`,"sidebar.search":`搜索节点`,"sidebar.searchPlaceholder":`搜索节点…`,"sidebar.searchClear":`清除搜索`,"sidebar.noResults":`没有与「{q}」匹配的节点`,"sidebar.results.one":`{n} 个节点`,"sidebar.results.other":`{n} 个节点`,"sidebar.filters":`按变更类别筛选`,"sidebar.clearFilters":`显示全部`,"sidebar.filteredEmpty":`没有符合筛选条件的变更。`,"sidebar.noChanges":`没有需要审阅的变更。`,"sidebar.sheet":`调整面板高度`,"sidebar.sheetValue":`占高度的 {p}`,"review.progress":`已审阅 {done} / {total}`,"review.toggle":`已审阅`,"review.mark":`标记为已审阅`,"review.unmark":`标记为未审阅`,"review.complete":`全部变更已审阅`,"detail.label":`变更详情`,"detail.empty":`选择一项变更,查看具体发生了什么。`,"detail.emptyHint":`按 j / k 逐项浏览变更。`,"detail.prev":`上一项变更`,"detail.next":`下一项变更`,"detail.changes":`变更内容`,"detail.changedTo":`改为`,"detail.identity":`基本信息`,"detail.id":`ID`,"detail.types":`类型`,"detail.status":`状态`,"detail.name":`名称`,"detail.before":`变更前`,"detail.after":`变更后`,"detail.attributes":`属性`,"detail.aliases":`别名`,"detail.hierarchy":`层级`,"detail.relations":`关系`,"detail.composition":`组成`,"detail.evidence":`匹配依据`,"detail.nodes":`节点`,"detail.showMore":`展开`,"detail.showLess":`收起`,"detail.unchangedAttrs.one":`{n} 个未变属性`,"detail.unchangedAttrs.other":`{n} 个未变属性`,"detail.moreRelations.one":`另外 {n} 条关系`,"detail.moreRelations.other":`另外 {n} 条关系`,"detail.was":`原为{x}`,"detail.viaHint":`依据替代声明`,"detail.viaHeuristic":`启发式推断`,"detail.confidence":`置信度 {p}`,"detail.matchScore":`匹配度 {p}`,"detail.matchHint":`依据替代声明匹配`,"detail.evidence.label":`名称`,"detail.evidence.neighbors":`邻居`,"detail.evidence.types":`类型`,"detail.evidence.attrs":`属性`,"detail.suggestion":`可能是同一节点`,"detail.suggestion.ambiguous":`存在歧义`,"detail.suggestion.below":`低于阈值`,"detail.deprecated":`已弃用`,"detail.undeprecated":`取消弃用`,"detail.replacedBy":`替代为`,"detail.replaces":`替代了`,"detail.unchangedNode":`未变节点`,"detail.implicit":`因悬空关系自动创建`,"detail.collapsed":`重复关系,已合并`,"detail.mergedFrom":`合并自`,"detail.splitInto":`拆分为`,"detail.edgeAttrs":`属性有变化`,"detail.showOnCanvas":`在画布中显示`,"replay.label":`回放控制`,"replay.play":`播放`,"replay.pause":`暂停`,"replay.speed":`播放速度 {s}`,"replay.position":`{i} / {n}`,"replay.finished":`回放结束`,"replay.restart":`重新播放`,"replay.scrubber":`回放进度`,"swipe.divider":`对比分隔线`,"focus.context":`上下文`,"focus.hops":`上下文跳数`,"focus.expand":`点击展开`,"focus.expandUnavailable":`展开需要 kgdiff 计算模块(kgdiff-viewer-compute.js)`,"focus.expandNearest":`展开选中项附近的隐藏节点`,"announce.expanded":`已展开{label}`,"announce.nothingHidden":`没有隐藏的节点`,"help.expand":`展开隐藏节点(仅看变更)`,"legend.title":`图例`,"legend.toggle":`显示或隐藏图例`,"minimap.label":`全局缩略图`,"tooltip.relations.one":`{n} 条关系`,"tooltip.relations.other":`{n} 条关系`,"tooltip.select":`点击选中`,"help.title":`键盘快捷键`,"help.close":`关闭`,"help.enter":`定位到选中的变更`,"help.esc":`取消选择,关闭弹出层`,"help.space":`播放 / 暂停(回放)`,"help.arrows":`单步(回放)· 移动分隔线(滑动对比)`,"help.theme":`切换主题`,"help.homeEnd":`第一项 / 最后一项变更`,"state.loading":`正在准备对比`,"step.parse":`解析文件`,"step.match":`匹配节点`,"step.layout":`计算布局`,"step.scene":`绘制`,"state.identical.title":`没有差异`,"state.identical.body":`两个版本均有 {nodes}、{edges}。`,"count.nodes.one":`{n} 个节点`,"count.nodes.other":`{n} 个节点`,"count.edges.one":`{n} 条关系`,"count.edges.other":`{n} 条关系`,"state.error.title":`无法显示这份对比`,"state.error.details":`详细信息`,"state.empty.title":`还没有可对比的内容`,"state.empty.body":`载入一个图谱的两个版本,查看发生了哪些变化。`,"aria.canvas":`图谱对比。变更前:{nb} 个节点、{eb} 条关系;变更后:{na} 个节点、{ea} 条关系;{changes}。`,"aria.changes.one":`共 {n} 项变更`,"aria.changes.other":`共 {n} 项变更`,"announce.change":`第 {i} 项变更,共 {n} 项:{title}`,"announce.node":`节点「{label}」,{status}`,"announce.mode":`{mode}视图`,"announce.cleared":`已取消选择`,"announce.reviewed":`已标记为已审阅。{progress}`,"announce.unreviewed":`已标记为未审阅。{progress}`,"announce.finished":`回放结束`,"announce.chapter":`{phase}:{n} 项变更`,"error.formats":`解析文本需要 @kgdiff/formats(请引入它,或传入已解析的图)。`,"error.notLoaded":`尚未载入任何内容。`}};function Qs(e){if(!e)return null;let t=e.trim().toLowerCase();return t===`en`||t.startsWith(`en-`)?`en`:t===`zh`||t.startsWith(`zh`)?`zh-CN`:null}function $s(){let e=typeof navigator<`u`?navigator:void 0;for(let t of e?.languages??[e?.language??``]){let e=Qs(t);if(e)return e}return`en`}var ec=new Map;function tc(e,t){let n=ec.get(t);return n===void 0&&(n=new Intl.NumberFormat(t),ec.set(t,n)),n.format(e)}function nc(e){return`${Math.round(Math.max(0,Math.min(1,e))*100)}%`}function W(e,t,n){let r=(Zs[e]??Zs.en)[t]??Xs[t];return n?r.replace(/\{(\w+)\}/g,(t,r)=>{let i=n[r];return i===void 0?t:typeof i==`number`?tc(i,e):i}):r}function rc(e,t,n,r){return W(e,`${t}.${new Intl.PluralRules(e).select(n)===`one`?`one`:`other`}`,{...r,n})}function ic(e,t){return t===`zh-CN`?`「${e}」`:`“${e}”`}function ac(e){return{locale:e,t:(t,n)=>W(e,t,n),plural:(t,n,r)=>rc(e,t,n,r),num:t=>tc(t,e),quote:t=>ic(t,e)}}var oc=[`remove`,`restructure`,`modify`,`add`],sc=Object.freeze({items:[],order:[],rank:new Map,itemOf:new Map});function cc(e,t){let n=new Map(oc.map(e=>[e,[]]));for(let r of e.hunks)t.size>0&&!t.has(r.family)||n.get(r.phase)?.push(r.index);let r=[],i=[],a=new Map,o=new Map;for(let e of oc){let t=n.get(e)??[];if(t.length!==0){r.push({kind:`header`,phase:e,count:t.length});for(let e of t)a.set(e,i.length),o.set(e,r.length),i.push(e),r.push({kind:`row`,hunk:e})}}return{items:r,order:i,rank:a,itemOf:o}}function lc(e){let t={added:0,removed:0,content:0,structure:0,identity:0};for(let n of e.hunks)t[n.family]++;return t}function uc(e,t,n){let{order:r,rank:i}=e;if(r.length===0)return-1;let a=i.get(t);if(a!==void 0)return r[Math.min(r.length-1,Math.max(0,a+n))];if(t<0)return n>0?r[0]:r[r.length-1];if(n>0)return r.find(e=>e>t)??r[r.length-1];let o=r[0];for(let e of r)e<t&&(o=e);return o}var dc=[`overlay`,`swipe`,`replay`],fc=[`all`,`changes`],pc=[`auto`,`light`,`dark`],mc=[`default`,`colorblind`],hc=[`full`,`none`],gc=[`auto`,`full`,`mini`,`none`],_c=pc;function vc(e){return dc.includes(e)?e:null}function yc(e){return fc.includes(e)?e:null}var bc=`changes`;function xc(e){return pc.includes(e)?e:null}function Sc(e){return mc.includes(e)?e:null}function Cc(e){return typeof e==`string`?Qs(e):null}function wc(e){return hc.includes(e)?e:null}function Tc(e){return gc.includes(e)?e:null}function Ec(e){let t=typeof e==`string`&&e.trim()!==``?Number(e):e;return typeof t==`number`&&Number.isFinite(t)&&t>=0?t:null}function Dc(e){if(typeof e!=`object`||!e)return;let t=e,n=t.mode===bc,r=n?`overlay`:vc(t.mode),i=yc(t.scope)??(n&&t.scope===void 0?`changes`:null),a=xc(t.theme),o=Sc(t.palette),s=Cc(t.locale),c=[`mode`,`scope`,`theme`,`palette`,`locale`].filter(e=>t[e]!==void 0&&{mode:r,scope:i,theme:a,palette:o,locale:s}[e]===null);return c.length>0&&typeof console<`u`&&console.warn(`[kgdiff] ignoring invalid report view preferences: ${c.join(`, `)}`),{...r?{mode:r}:{},...i?{scope:i}:{},...a?{theme:a}:{},...o?{palette:o}:{},...s?{locale:s}:{}}}function Oc(e){return typeof e.text==`string`}function kc(e){if(typeof e!=`object`||!e)return!1;let t=e;return Array.isArray(t.nodes)&&(t.edges===void 0||Array.isArray(t.edges))}var Ac=null;function jc(){return Ac??=import(`@kgdiff/formats`).catch(e=>{throw Ac=null,new p(`invalid-input`,W(`en`,`error.formats`),{cause:e instanceof Error?e.message:String(e)})}),Ac}async function Mc(e,t){if(typeof e!=`object`||!e)throw new p(`invalid-input`,`load(): \`${t}\` must be a GraphInput, a KGraph or { text, filename }.`);if(Oc(e)){let{parseGraph:t}=await jc(),n=t(e.text,{...e.parse,...e.filename===void 0?{}:{filename:e.filename}});return{graph:n.graph,meta:n.graph.meta??{},...e.filename===void 0?{}:{filename:e.filename}}}if(Dt(e))return{graph:e,meta:e.meta};if(kc(e))return{graph:e,meta:e.meta??{}};throw new p(`invalid-input`,`load(): \`${t}\` must be a GraphInput ({ nodes, edges }), a KGraph or { text, filename }.`)}function Nc(e){let t=e.split(/[?#]/)[0]??e;return t.slice(Math.max(t.lastIndexOf(`/`),t.lastIndexOf(`\\`))+1)||e}function G(e){return typeof e==`string`&&e.trim()!==``?e.trim():void 0}function Pc(e,t,n,r){return G(n)??G(e.name)??(r?Nc(r):void 0)??(G(e.source)?Nc(e.source):void 0)??t}async function Fc(e,t){if(typeof e!=`object`||!e)throw new p(`invalid-input`,`load() expects { before, after, … }.`);let{before:n,after:r}=e;if(n===void 0||r===void 0)throw new p(`invalid-input`,"load() needs both `before` and `after`.");let i=Rs();(Oc(n)||Oc(r))&&await t(`parse`);let a=await Mc(n,`before`),o=await Mc(r,`after`),s=await i;await t(`match`);let c=s.diff(a.graph,o.graph,e.diff);await t(`layout`);let l=s.layoutDiff(c,e.layout),u=G(c.before.meta.version),d=G(c.after.meta.version);return{diff:c,layout:l,layoutOptions:e.layout,names:{before:Pc(a.meta,`before`,e.names?.before,a.filename),after:Pc(o.meta,`after`,e.names?.after,o.filename)},versions:{...u?{before:u}:{},...d?{after:d}:{}},...G(e.title)?{title:G(e.title)}:{}}}async function Ic(e,t){await t(`match`);let n=Ot(e.diff);await t(`layout`);let r=ra(e.layout),i=G(n.before.meta.version),a=G(n.after.meta.version),o=e.meta,s=Dc(e.view);return{diff:n,layout:r,layoutOptions:void 0,names:{before:Pc(n.before.meta,`before`,o?.before?.name),after:Pc(n.after.meta,`after`,o?.after?.name)},versions:{...i?{before:i}:{},...a?{after:a}:{}},...G(o?.title)?{title:G(o?.title)}:{},...s?{view:s}:{}}}var Lc={createRenderer:ji,createMinimap:Mi};function Rc(){return Lc}var zc=[.5,1,2,4],Bc=.5,Vc=class{timeline;#e=0;#t=1;#n=!1;#r;#i;constructor(e){this.timeline=e;let t=e.mode===`chapters`?e.chapters.map(e=>e.end):e.windows.map(e=>e.end);this.#r=[...new Set(t)].sort((e,t)=>e-t),this.#i=Float64Array.from(e.windows.map(e=>e.start)).sort()}get t(){return this.#e}get duration(){return this.timeline.duration}get speed(){return this.#t}get playing(){return this.#n}get finished(){return!this.#n&&this.duration>0&&this.#e>=this.duration}get progress(){return this.duration>0?this.#e/this.duration:0}setSpeed(e){let t=zc.find(t=>t===e);t!==void 0&&(this.#t=t)}cycleSpeed(){let e=zc.indexOf(this.#t);return this.#t=zc[(e+1)%zc.length],this.#t}play(){this.duration<=0||(this.#e>=this.duration&&(this.#e=0),this.#n=!0)}pause(){this.#n=!1}seek(e){this.#e=Number.isFinite(e)?Math.min(this.duration,Math.max(0,e)):0}advance(e){if(!this.#n||!(e>0))return!1;let t=this.#e;return this.#e=Math.min(this.duration,this.#e+Math.min(e,100)*this.#t),this.#e>=this.duration&&(this.#n=!1),this.#e!==t}step(e){this.#n=!1;let t=this.#e;if(e>0){let e=this.#r.find(e=>e>t+Bc);this.#e=e??this.duration}else{let e=0;for(let n of this.#r)if(n<t-Bc)e=n;else break;this.#e=e}}windowEnd(e){let t=this.timeline.windows.find(t=>t.hunk===e);return t===void 0?null:t.end}position(e=this.#e){let t=0,n=this.#i.length;for(;t<n;){let r=t+n>>1;this.#i[r]<e?t=r+1:n=r}return t}get total(){return this.timeline.windows.length}activeTarget(e=this.#e){return this.timeline.mode===`chapters`?{kind:`chapter`,index:this.timeline.chapters.findIndex(t=>e>=t.start&&e<t.end)}:{kind:`hunk`,index:this.activeHunk(e)}}activeHunk(e=this.#e){let t=-1,n=-1/0;for(let r of this.timeline.windows)e>=r.start&&e<r.end&&r.start>=n&&(t=r.hunk,n=r.start);return t}},Hc=`kgdiff:review:`;function Uc(e,t){return`${Hc}${e}→${t}`}function Wc(){try{return typeof localStorage<`u`?localStorage:null}catch{return null}}var Gc=class{#e=[];#t=new Set;#n=[];#r;#i;#a;#o;constructor(e,t,n){this.#i=e,this.#a=t,this.#o=n,this.#r=new Set(n),this.#s()}#s(){this.#e=[],this.#t=new Set,this.#n=[];for(let e of this.#c())this.#t.has(e)||this.#n.includes(e)||(this.#r.has(e)?(this.#t.add(e),this.#e.push(e)):this.#n.push(e))}reload(e){if(e!==null&&e!==this.#a)return!1;let t=this.#e.join(`
|
|
2
2
|
`);return this.#s(),this.#e.join(`
|
|
3
|
-
`)!==t}has(e){return this.#t.has(e)}get size(){return this.#e.length}setReviewed(e,t){if(t===this.#t.has(e))return!1;if(t){if(!this.#r.has(e))return!1;this.#t.add(e),this.#e.push(e)}else this.#t.delete(e),this.#e.splice(this.#e.indexOf(e),1);return this.#l(),!0}state(){return{reviewed:[...this.#e],total:this.#o.length}}#c(){if(!this.#i||!this.#a)return[];try{let e=this.#i.getItem(this.#a);if(!e)return[];let t=JSON.parse(e),n=Array.isArray(t)?t:typeof t==`object`&&t&&`reviewed`in t?t.reviewed:[];return Array.isArray(n)?n.filter(e=>typeof e==`string`):[]}catch{return[]}}#l(){if(this.#i&&this.#a)try{let e=[...this.#e,...this.#n];e.length===0?this.#i.removeItem(this.#a):this.#i.setItem(this.#a,JSON.stringify({v:1,reviewed:e}))}catch{}}};function Uc(e){return e.normalize(`NFKC`).toLowerCase()}var Wc=/[\s_\-./:#|()[\]{}「」“”"'’,;]/;function Gc(e,t){if(e===``)return 0;if(t===e)return 1e3;if(t.startsWith(e))return 800-Math.min(100,t.length-e.length);let n=t.indexOf(e);if(n>0)return(Wc.test(t[n-1]??``)?600:400)-Math.min(150,n);let r=200,i=0,a=-2;for(let n of e){let e=t.indexOf(n,i);if(e<0)return 0;e!==a+1&&(r-=Math.min(20,e-i+2)),(e===0||Wc.test(t[e-1]??``))&&(r+=6),a=e,i=e+1}return Math.max(1,r)}var Kc=class{#e;constructor(e){this.#e=e.nodes.map(e=>{let t=[e.label],n=[`label`],r=(e,r)=>{e&&!t.includes(e)&&(t.push(e),n.push(r))};r(e.before?.label,`label`);for(let t of e.after?.aliases??[])r(t,`alias`);for(let t of e.before?.aliases??[])r(t,`alias`);return r(e.afterId,`id`),r(e.beforeId,`id`),r(e.id,`id`),{node:e,texts:t,folded:t.map(Uc),fields:n}})}search(e,t=50){let n=Uc(e.trim());if(n===``)return[];let r=[];for(let e of this.#e){let t=0,i=0;for(let r=0;r<e.folded.length;r++){let a=e.fields[r],o=a===`label`?0:a===`alias`?40:60,s=Gc(n,e.folded[r]);s>0&&s-o>t&&(t=s-o,i=r)}t>0&&r.push({node:e.node,score:t+(e.node.status===`unchanged`?0:1),matched:e.texts[i],field:e.fields[i]})}return r.sort((e,t)=>t.score-e.score||e.node.label.length-t.node.label.length||(e.node.id<t.node.id?-1:+(e.node.id>t.node.id))),r.slice(0,t)}},qc=.35,Jc=1.8,Yc=2.5,Xc=200,Zc=class extends Error{};function Qc(e,t){let n=Math.min(e.x+e.width,t.x+t.width)-Math.max(e.x,t.x),r=Math.min(e.y+e.height,t.y+t.height)-Math.max(e.y,t.y),i=e.width*e.height;return i>0?n>0&&r>0?n*r/i:0:+(e.x>=t.x&&e.x<=t.x+t.width&&e.y>=t.y&&e.y<=t.y+t.height)}var $c=e=>1-(1-e)**3,el=class{status=`idle`;steps=[];step=null;error=null;data=null;layout=null;scene=null;resolver=null;list=sc;mode=`overlay`;themePreference=`auto`;palette=`default`;locale=`en`;systemDark=!0;reducedMotion=!1;explicit=new Set;selectedHunk=-1;selectedNode=-1;pinnedEdge=-1;hoverNode=-1;hoverEdge=-1;hoverGroup=-1;families=new Set;hops=1;expanded=new Set;focus=null;clock=null;split=.5;emphasis=1;autoFit=!1;selectOnClick=!0;#e=!1;#t=null;#n=null;#r=null;#i=null;#a=[];#o={main:null,before:null,after:null};#s=-1;#c=null;#l=0;#u=0;#d=!1;#f=!0;#p=-1/0;#m=-1/0;#h=``;#g=0;#_=null;#v=null;#y=null;#b=!1;#x=!1;#S=24;#C=null;#w=NaN;#T=!1;#E=!1;#D=new Set;#O=new Set;#k=!1;#A=!1;#j;#M;constructor(e,t){this.#j=e,this.#M=t}subscribe(e){return this.#D.add(e),()=>this.#D.delete(e)}#N(...e){for(let t of e)this.#O.add(t);this.#k||(this.#k=!0,queueMicrotask(()=>this.flush()))}flush(){if(this.#k=!1,this.#O.size===0)return;let e=this.#O;this.#O=new Set;for(let t of this.#D)t(e)}get themeName(){return this.themePreference===`auto`?this.systemDark?`dark`:`light`:this.themePreference}get theme(){try{return co(this.themeName,this.palette)}catch{return co(`dark`,`default`)}}get diff(){return this.data?.diff??null}get hunkCount(){return this.scene?.hunks.length??0}isReviewed(e){return this.#t?.has(e)??!1}reviewState(){return this.#t?.state()??{reviewed:[],total:0}}search(e,t){let n=this.diff;return n?(this.#n??=new Kc(n),this.#n.search(e,t)):[]}async load(e){let t=e=>typeof e==`object`&&!!e&&typeof e.text==`string`,n=t(e?.before)||t(e?.after);await this.#P(n?[`parse`,`match`,`layout`,`scene`]:[`match`,`layout`,`scene`],t=>Mc(e,t))}async loadPayload(e){await this.#P([`match`,`layout`,`scene`],t=>Nc(e,t))}async#P(e,t){let n=++this.#g;this.pause(),this.status=`loading`,this.error=null,this.steps=e,this.step=null,this.#N(`status`);let r=async e=>{if(n!==this.#g||this.#A||(this.step=e,this.#N(`status`),this.flush(),await this.#M.yieldToPaint(),n!==this.#g||this.#A))throw new Zc};try{let e=await t(r);await r(`scene`),this.#F(e)}catch(e){if(e instanceof Zc)throw new DOMException(`Superseded by a newer load.`,`AbortError`);let t=e instanceof Error?e:new p(`invalid-input`,String(e));throw n===this.#g&&this.fail(t),t}}fail(e){this.#g++,this.clock?.pause(),this.#w=NaN,this.#E=!1,this.status=`error`,this.error=e,this.step=null,this.data=null,this.layout=null,this.scene=null,this.resolver=null,this.list=sc,this.clock=null,this.focus=null,this.#t=null,this.selectedHunk=this.selectedNode=this.pinnedEdge=-1,this.#N(`status`,`data`,`selection`,`filters`,`review`,`replay`,`focus`),this.#j.error(e)}#F(e){let{diff:t,layout:n,view:r}=e;this.data=e,this.layout=n,this.#n=null,this.families.clear(),this.expanded.clear(),this.hops=Math.max(0,Math.min(2,e.layoutOptions?.contextHops??1)),this.selectedHunk=-1,this.selectedNode=-1,this.pinnedEdge=-1,this.#s=-1,this.emphasis=1,this.#c=null,this.hoverNode=this.hoverEdge=this.hoverGroup=-1,this.split=.5,this.clock=null,this.#h=``,r&&(r.theme&&!this.explicit.has(`theme`)&&(this.themePreference=r.theme),r.palette&&!this.explicit.has(`palette`)&&(this.palette=r.palette),r.locale&&!this.explicit.has(`locale`)&&(this.locale=r.locale));let i=this.mode;if(!this.explicit.has(`mode`)){let i=e.layoutOptions?.largeGraphThreshold??3e3,a=n.scope===`changes`||t.nodes.length>i;this.mode=r?.mode??(a?`changes`:`overlay`)}this.#t=new Hc(this.#M.storage,Bc(t.delta.base.hash,t.delta.target.hash),t.hunks.map(e=>e.id)),this.#I(),this.status=`ready`,this.step=null,n.scope===`changes`&&Ls()===`unknown`&&Rs().then(()=>this.#N(`focus`),()=>this.#N(`focus`)),this.#N(`status`,`data`,`mode`,`selection`,`filters`,`review`,`replay`,`theme`,`locale`,`focus`,`swipe`),this.#b=!0,this.#y=null,queueMicrotask(()=>this.layoutChanged()),this.#j.ready(t.stats),this.mode!==i&&this.#j.mode(this.mode);let a=this.#_;this.#_=null,a===null?this.#ce():this.selectHunkById(a.id,{fly:a.fly})}#I(){let e=this.data,t=this.layout;if(!e||!t)return;let n=this.scene,r=n&&this.selectedHunk>=0?n.hunks[this.selectedHunk]?.id:void 0,i=n&&this.selectedNode>=0?n.nodes[this.selectedNode]?.id:void 0,a=n&&this.pinnedEdge>=0?n.edges[this.pinnedEdge]?.id:void 0,o=ko(e.diff,t,{theme:this.theme,locale:this.locale});this.scene=o,this.resolver=Os(o),this.#o.main=this.#o.before=this.#o.after=null;let s=this.clock;this.clock=new Rc(o.timeline),s&&(this.clock.setSpeed(s.speed),this.clock.seek(s.t),s.playing&&this.clock.play()),this.selectedHunk=r===void 0?-1:o.hunkIndex.get(r)??-1,this.selectedNode=i===void 0?-1:o.nodeIndex.get(i)??-1,this.pinnedEdge=a===void 0?-1:o.edgeIndex.get(a)??-1,this.#s=-1,this.hoverNode=this.hoverEdge=this.hoverGroup=-1,this.list=cc(o,this.families),this.#L(),this.#r?.setTheme(o.theme),this.#f=!0,this.invalidate()}#L(){let e=this.scene;if(!e||this.mode!==`changes`){this.focus=null;return}let t=new Set;for(let n of this.expanded){let r=e.nodeIndex.get(n);r!==void 0&&t.add(r)}this.focus=Fo(e,{hops:this.hops,expanded:t})}attach(e,t){if(this.#r)return;let n=Fc(),r=n.createRenderer(e,{theme:this.theme,labelsInside:this.#e});this.#r=r,this.#y&&r.camera.set(this.#y),t&&(this.#i=n.createMinimap(t,r)),this.#a.push(r.on(`hover`,e=>this.#te(e)),r.on(`click`,({pick:e})=>this.#ne(e)),r.on(`dblclick`,({pick:e})=>this.#re(e)),r.on(`camera`,({source:e})=>{e===`user`&&this.noteUserCamera()})),this.#f=!0,this.invalidate()}detach(){this.#r&&this.status===`ready`&&(this.#y=this.#r.camera.get()),this.#l&&this.#M.cancelFrame(this.#l),this.#l=0;for(let e of this.#a.splice(0))e();this.#i?.destroy(),this.#i=null,this.#r?.destroy(),this.#r=null}destroy(){this.#A=!0,this.detach(),this.#D.clear()}get camera(){return this.#r?.camera??null}setChrome(e){this.#v=e}setLabelsInside(e){this.#e=e,this.#r?.setLabelsInside(e)}layoutChanged(){if(this.status!==`ready`)return;if(!this.#b){this.autoFit&&!this.#x&&this.fit({animate:!1});return}let e=this.#Z();if(e){if(!this.#W(e,1.8))return;this.#b=!1,this.#G(e,{animate:!1});return}let t=this.#$(),n=this.#r?.camera;t&&n&&this.#Q(n,t,{animate:!1})}noteUserCamera(){this.#m=this.#M.now(),this.#x=!0}invalidate(){this.#d=!0,this.#R()}#R(){this.#l!==0||this.#A||(this.#l=this.#M.requestFrame(this.#z)||0)}#z=()=>{if(this.#l=0,this.#A)return;let e=this.#M.now(),t=this.#u>0?e-this.#u:0,n=!1,r=this.clock;if(r?.playing&&this.mode===`replay`&&(r.advance(t),this.#d=!0,this.#N(`replay`),this.#ee(),r.playing?n=!0:r.finished&&this.#le()),!Number.isNaN(this.#w)&&!this.#T&&(e>=this.#w?this.#ue():n=!0),this.#c){let t=this.#c,r=t.duration>0?Math.min(1,(e-t.start)/t.duration):1;this.emphasis=t.from+(t.to-t.from)*$c(r),this.#d=!0,r>=1?(this.#c=null,this.#s>=0&&(this.#s=-1,this.emphasis=1)):n=!0}this.#d&&this.draw(e),n?(this.#u=e,this.#R()):this.#u=0};#B(e){let t=this.selectedHunk>=0?this.selectedHunk:this.#s;return As({layer:e,t:this.clock?.t??0,selectedHunk:t,hoveredNode:this.hoverNode,hoveredEdge:this.hoverEdge>=0?this.hoverEdge:this.pinnedEdge,selectedNode:this.selectedNode,focus:this.focus,families:this.families,reducedMotion:this.reducedMotion,emphasis:this.emphasis})}draw(e=this.#M.now()){this.#d=!1;let t=this.resolver,n=this.#r;if(!t||!n||this.status!==`ready`)return;let r=this.#o,i;if(this.mode===`swipe`)r.before=t.resolve(this.#B(`before`),r.before??void 0),r.after=t.resolve(this.#B(`after`),r.after??void 0),n.setFrame({split:this.split,before:r.before,after:r.after}),i=r.after;else{let e=this.mode===`replay`?`replay`:`union`;r.main=t.resolve(this.#B(e),r.main??void 0),n.setFrame(r.main),i=r.main}let a=this.mode===`replay`&&(this.clock?.playing??!1);this.#i&&(this.#f||a&&e-this.#p>=Xc)&&(this.#i.update(i),this.#f=!1,this.#p=e)}#V(e){this.reducedMotion?(this.emphasis=1,this.#c=null,this.#s=-1):(this.emphasis=e,this.#c={from:e,to:1,start:this.#M.now(),duration:this.theme.motion.base})}#H(e){this.reducedMotion||e<0?(this.#s=-1,this.#c=null,this.emphasis=1):(this.#s=e,this.#c={from:this.emphasis,to:0,start:this.#M.now(),duration:this.theme.motion.base})}setMode(e){let t=_c(e);t!==null&&t!==this.mode&&(this.mode=t,t!==`replay`&&(this.clock?.pause(),this.#w=NaN,this.#E=!1),this.#h=``,this.#L(),this.#f=!0,this.#N(`mode`,`focus`,`replay`),this.invalidate(),this.status===`ready`&&(this.#j.mode(t),this.#j.announce(W(this.locale,`announce.mode`,{mode:W(this.locale,`mode.${t}`)}))),t===`replay`&&this.#ce())}selectHunkById(e,t={}){if(e===null){this.#_=null,this.clearSelection();return}let n=this.scene;if(!n||this.status!==`ready`){this.#_={id:e,fly:t.fly??!0};return}let r=n.hunkIndex.get(e);r!==void 0&&this.selectHunk(r,t)}selectHunk(e,t={}){let n=this.scene;if(!n)return;if(e<0||e>=n.hunks.length){this.clearSelection();return}let r=t.node??-1,i=this.selectedHunk,a=i!==e||this.selectedNode!==r;if(this.selectedHunk=e,this.selectedNode=r,this.pinnedEdge=-1,i!==e&&(this.#s=-1,this.#V(i>=0?qc:0),this.mode===`replay`&&this.clock)){let t=this.clock.windowEnd(e);this.clock.pause(),this.#w=NaN,this.#E=!1,t!==null&&this.clock.seek(t),this.#h=``,this.#N(`replay`)}if((t.fly??!0)&&this.flyToHunk(e),this.invalidate(),!a)return;this.#N(`selection`);let o=n.hunks[e];if(!o)return;let s=r>=0?n.nodes[r]?.id??null:null;if(this.#j.select(o.id,s),i!==e){let t=this.list.rank.get(e);this.#j.announce(W(this.locale,`announce.change`,{i:(t??e)+1,n:t===void 0?n.hunks.length:this.list.order.length,title:o.title}))}}selectNode(e,t={}){let n=this.scene,r=n?.nodes[e];if(!n||!r)return;if(r.hunk>=0){this.selectHunk(r.hunk,{...t,node:e});return}let i=this.selectedHunk;i<0&&this.selectedNode===e?t.fly&&this.flyToNode(e):(this.selectedHunk=-1,this.selectedNode=e,this.pinnedEdge=-1,i>=0&&this.#H(i),t.fly&&this.flyToNode(e),this.invalidate(),this.#N(`selection`),this.#j.select(null,r.id),this.#j.announce(W(this.locale,`announce.node`,{label:r.label,status:W(this.locale,`status.${r.status}`)})))}clearSelection(){if(this.selectedHunk<0&&this.selectedNode<0&&this.pinnedEdge<0)return;let e=this.selectedHunk;this.selectedHunk=-1,this.selectedNode=-1,this.pinnedEdge=-1,this.#H(e),this.invalidate(),this.#N(`selection`),this.#j.select(null,null),this.#j.announce(W(this.locale,`announce.cleared`))}next(){this.#U(1)}prev(){this.#U(-1)}#U(e){let t=uc(this.list,this.selectedHunk,e);t>=0&&this.selectHunk(t)}first(){let e=this.list.order[0];e!==void 0&&this.selectHunk(e)}last(){let e=this.list.order[this.list.order.length-1];e!==void 0&&this.selectHunk(e)}pinEdge(e){let t=this.scene,n=t?.edges[e];if(!t||!n)return;this.pinnedEdge=e;let r=[n.s,n.t,n.sb,n.tb],i=1/0,a=1/0,o=-1/0,s=-1/0;for(let e of r){let n=t.nodes[e];n&&(i=Math.min(i,n.x-n.r),a=Math.min(a,n.y-n.r),o=Math.max(o,n.x+n.r),s=Math.max(s,n.y+n.r))}i<=o&&this.#G(rl({x:i,y:a,width:o-i,height:s-a})),this.invalidate()}#W(e,t){let n=this.#v?.();return!n||!(n.width>0)||!(n.height>0)?null:Gs(e,n,24,t)}#G(e,t={}){let n=this.#r?.camera;if(!n)return;let r=this.#W(e,Jc);n.flyTo(e,{...t,maxZoom:Jc,...r?{padding:r}:{}})}#K(e){let t=this.#r?.camera;if(!t)return null;let n=this.#W(e,1.8)??Us;return Ys(t.viewport(),t.get().k,n)}#q(e,t){let n=this.scene,r=this.clock;if(!n||!r)return;if(e===`chapter`){let e=n.timeline.chapters[t];if(!e)return;this.#j.announce(W(this.locale,`announce.chapter`,{phase:W(this.locale,`phase.${e.phase}`),n:e.hunks.length}));return}let i=n.hunks[t],a=r.timeline.windows.findIndex(e=>e.hunk===t);!i||a<0||this.#j.announce(W(this.locale,`announce.change`,{i:a+1,n:r.total,title:i.title}))}#J(e){let t=this.scene;if(!t||e.length===0||this.#M.now()-this.#m<2e3)return;let n=Bo(t,e),r=this.#K(n);!r||Qc(n,r)>=.7||this.#G(n)}#Y(e){let t=this.scene;return t?.hunks[e]?Bo(t,[e]):null}#X(e){let t=this.scene?.nodes[e];return t?rl({x:t.x-t.r,y:t.y-t.r,width:2*t.r,height:2*t.r}):null}#Z(){return this.selectedHunk>=0?this.#Y(this.selectedHunk):this.selectedNode>=0?this.#X(this.selectedNode):null}flyToHunk(e){let t=this.#Y(e);t&&this.#G(t)}flyToNode(e){let t=this.#X(e);t&&this.#G(t)}flyToSelection(){let e=this.#Z();e&&this.#G(e)}fit(e={}){let t=this.#r?.camera;if(!t)return Promise.resolve();let{padding:n,...r}=e;n!==void 0&&(this.#S=Number.isFinite(n)&&n>=0?n:24);let i=this.#$();return i?this.#Q(t,i,r):t.fit(void 0,r)}#Q(e,t,n){return this.#b=!1,this.#x=!1,e.fit(t.bounds,{...n,padding:t.insets,maxZoom:Yc})}#$(){let e=this.#v?.(),t=this.resolver;if(!e||!t||!(e.width>0)||!(e.height>0))return null;let n=ki(t.resolve(As({layer:`union`,focus:this.focus,families:this.families,reducedMotion:this.reducedMotion})),this.theme),r=e=>n.at(e),i=r(1/0);if(!i)return null;let{width:a,height:o}=e,s=this.#S,c=Gs(i,e,s,Yc),l=Js(r,a,o,c,Yc);if(!l)return null;let u=Gs(l.content,e,s,Yc);return nl(u,c)||(c=u,l=Js(r,a,o,c,2.5)??l),{bounds:l.bounds,insets:c}}zoom(e){this.noteUserCamera(),this.#r?.camera.zoomBy(e>0?1.4:1/1.4)}#ee(){let e=this.scene,t=this.clock,n=this.#r?.camera;if(!e||!t||!n)return;let r=t.activeTarget();if(r.index<0)return;let i=`${r.kind}:${r.index}`;i!==this.#h&&(this.#h=i,this.#q(r.kind,r.index),this.#J(r.kind===`chapter`?e.timeline.chapters[r.index]?.hunks??[]:[r.index]))}#te(e){let t=e?.type===`node`?e.index:-1,n=e?.type===`edge`?e.index:-1,r=e?.type===`collapsed`?e.index:-1;(t!==this.hoverNode||n!==this.hoverEdge||r!==this.hoverGroup)&&(this.hoverNode=t,this.hoverEdge=n,this.hoverGroup=r,this.#N(`hover`),this.invalidate())}clearHover(){this.#te(null)}#ne(e){if(this.selectOnClick){if(!e)this.clearSelection();else switch(e.type){case`node`:this.selectNode(e.index,{fly:!1});break;case`edge`:{let t=this.scene?.edges[e.index];t&&t.hunk>=0&&this.selectHunk(t.hunk,{fly:!1}),this.pinnedEdge=e.index,this.invalidate();break}case`collapsed`:this.expandGroup(e.index)}}}#re(e){if(!this.selectOnClick||e?.type!==`node`)return;let t=this.scene?.nodes[e.index];t&&(t.hunk>=0?this.flyToHunk(t.hunk):this.flyToNode(e.index))}toggleFamily(e){this.families.has(e)?this.families.delete(e):this.families.add(e),this.#ie()}setFamilies(e){let t=e.length===this.families.size&&e.every(e=>this.families.has(e));if(this.families.clear(),!t)for(let t of e)this.families.add(t);this.#ie()}#ie(){this.scene&&(this.list=cc(this.scene,this.families)),this.#f=!0,this.#N(`filters`),this.invalidate()}setHops(e){let t=Math.max(0,Math.min(2,Math.round(e)));t!==this.hops&&(this.hops=t,this.#L(),this.#f=!0,this.#N(`focus`),this.invalidate())}expandGroup(e){let t=this.focus?.collapsed[e],n=this.scene;if(!t||!n)return;let r=t.nodes.map(e=>n.nodes[e]?.id).filter(tl);if(!this.canExpand(e)){r.length>0&&this.#ae(r,[]);return}let i=t.id.startsWith(`near:`)?t.id.slice(5):t.id.startsWith(`component:`)?t.id.slice(10):null;this.#ae(r,i===null?r:[i,...r])}nearestGroup(){let e=this.focus?.collapsed??[];if(e.length===0)return-1;let t=this.#Z(),n=this.#r?.camera.viewport(),r=t??n??this.scene?.bounds,i=r?r.x+r.width/2:0,a=r?r.y+r.height/2:0,o=-1,s=1/0;return e.forEach((e,t)=>{let n=this.canExpand(t)||e.nodes.length>0,r=Math.hypot(e.x-i,e.y-a)+(n?0:0xe8d4a51000);r<s&&(s=r,o=t)}),o}expandNearest(){let e=this.nearestGroup(),t=e>=0?this.focus?.collapsed[e]:void 0;!t||!this.canExpand(e)&&t.nodes.length===0?this.#j.announce(W(this.locale,t?`focus.expandUnavailable`:`announce.nothingHidden`)):(this.expandGroup(e),this.#j.announce(W(this.locale,`announce.expanded`,{label:t.label})))}canExpand(e){let t=this.focus?.collapsed[e];return t?!(this.layout?.scope===`changes`&&t.count>t.nodes.length)||Ls()!==`unavailable`:!1}#ae(e,t){let n=this.data,r=this.layout;if(!n||!r)return Promise.resolve();for(let t of e)this.expanded.add(t);let i=new Set;if(r.scope===`changes`){for(let t of e)r.positions.has(t)||i.add(t);for(let e of t)for(let t of n.diff.index.edgesOf(e))for(let e of[t.source,t.target,t.sourceBefore,t.targetBefore])e!==void 0&&!r.positions.has(e)&&i.add(e)}if(i.size===0)return this.#oe(),Promise.resolve();let a=()=>{let e=Is(),t=this.layout;if(!e||!t||this.data!==n)return;let r=[...i].filter(e=>!t.positions.has(e));if(r.length>0){this.layout=e.extendLayout(n.diff,t,r,n.layoutOptions);for(let e of r)this.expanded.add(e);this.#I(),this.#N(`data`,`selection`,`replay`)}this.#oe()};return Is()?(a(),Promise.resolve()):Rs().then(a,()=>this.#oe())}#oe(){this.#L(),this.#f=!0,this.#N(`focus`),this.invalidate()}revealNode(e){if(!this.data||!this.scene)return Promise.resolve();let t=()=>{let t=this.scene?.nodeIndex.get(e);t!==void 0&&this.selectNode(t,{fly:!0})};return this.scene.nodeIndex.has(e)&&this.#se(e)?(t(),Promise.resolve()):this.#ae([e],[]).then(t)}#se(e){let t=this.scene?.nodeIndex.get(e);return t!==void 0&&(this.focus===null||this.focus.nodes[t]===1)}play(){let e=this.clock;e&&this.status===`ready`&&(this.mode!==`replay`&&this.setMode(`replay`),this.#w=NaN,this.#E=!1,e.play(),this.#h=``,this.#u=0,this.#N(`replay`),this.invalidate())}pause(){this.#w=NaN,this.#E=!1,this.clock?.playing&&(this.clock.pause(),this.#N(`replay`),this.invalidate())}togglePlay(){this.clock?.playing?this.pause():this.play()}setLoop(e){let t=this.#C;this.#C=e===null?null:Number.isFinite(e)?Math.max(0,e):0,this.#C===null?this.#w=NaN:t===null&&this.#ce()}get loopDelay(){return this.#C}hold(e){if(e===this.#T)return;this.#T=e;let t=this.clock;if(e){if(!t?.playing)return;t.pause(),this.#E=!0,this.#N(`replay`),this.invalidate()}else!Number.isNaN(this.#w)&&this.#C!==null&&(this.#w=this.#M.now()+this.#C,this.#R()),this.#E&&this.play()}#ce(){this.#C!==null&&this.status===`ready`&&this.mode===`replay`&&this.clock&&!this.clock.playing&&Number.isNaN(this.#w)&&(this.#T?this.#E=!0:this.play())}#le(){this.#j.announce(W(this.locale,`announce.finished`));let e=this.#C!==null;e&&(this.#w=this.#M.now()+(this.#C??0)),this.#j.replayEnd(e)}#ue(){this.#w=NaN,this.autoFit&&this.fit(),this.clock?.seek(0),this.play()}seek(e){let t=this.clock;t&&(this.#w=NaN,t.seek(e),this.#N(`replay`),this.#ee(),this.invalidate())}stepReplay(e){let t=this.clock;if(!t)return;t.step(e),this.#w=NaN,this.#E=!1,this.#h=``;let n=t.timeline.windows[t.position()-1];n&&(t.timeline.mode===`chapters`?this.#q(`chapter`,n.chapter):this.#q(`hunk`,n.hunk),this.#J(t.timeline.mode===`chapters`?t.timeline.chapters[n.chapter]?.hunks??[n.hunk]:[n.hunk])),this.#N(`replay`),this.invalidate()}restart(){this.clock?.seek(0),this.play()}cycleSpeed(){this.clock?.cycleSpeed(),this.#N(`replay`)}setSpeed(e){this.clock?.setSpeed(e),this.#N(`replay`)}setSplit(e){let t=Number.isFinite(e)?Math.min(1,Math.max(0,e)):.5;t!==this.split&&(this.split=t,this.#N(`swipe`),this.mode===`swipe`&&this.invalidate())}setReviewed(e,t){let n=this.#t;if(!n?.setReviewed(e,t))return;let r=n.state();this.#N(`review`),this.#j.review(e,t,r);let i=W(this.locale,`review.progress`,{done:r.reviewed.length,total:r.total});this.#j.announce(W(this.locale,t?`announce.reviewed`:`announce.unreviewed`,{progress:i}))}syncReview(e){this.#t?.reload(e)&&this.#N(`review`)}toggleReviewed(e){let t=e??(this.selectedHunk>=0?this.scene?.hunks[this.selectedHunk]?.id:void 0);t!==void 0&&this.setReviewed(t,!this.isReviewed(t))}#de(e){let t=this.themeName,n=this.palette,r=this.locale;e();let i=t!==this.themeName||n!==this.palette,a=r!==this.locale;(i||a)&&(this.data?this.#I():this.#r?.setTheme(this.theme)),i&&this.#N(`theme`),a&&this.#N(`locale`,`data`)}setThemePreference(e){this.#de(()=>{this.themePreference=vc(e)??`auto`}),this.#N(`theme`)}setPalette(e){this.#de(()=>{this.palette=yc(e)??`default`})}setLocale(e){this.#de(()=>{this.locale=bc(e)??`en`})}setSystemDark(e){this.#de(()=>{this.systemDark=e})}setReducedMotion(e){this.reducedMotion=e,this.invalidate()}};function tl(e){return e!==void 0}function nl(e,t){return e.top===t.top&&e.right===t.right&&e.bottom===t.bottom&&e.left===t.left}function rl(e,t=200,n=1.4){let r=Math.max(t,e.width*n),i=Math.max(t,e.height*n);return{x:e.x+e.width/2-r/2,y:e.y+e.height/2-i/2,width:r,height:i}}var il={overlay:`<path d="M8 2.25 14 5.5 8 8.75 2 5.5Z"/><path d="m2 8.25 6 3.25 6-3.25"/><path d="m2 11 6 3.25L14 11" opacity=".55"/>`,swipe:`<rect x="2" y="3" width="12" height="10" rx="2"/><path d="M8 1.75v12.5"/><path d="M4.75 8h-1M12.25 8h-1" opacity=".55"/>`,replay:`<path d="M2.75 8a5.25 5.25 0 1 0 1.6-3.78"/><path d="M2.5 2.5v2.75h2.75"/><path d="M8 5.25V8l1.9 1.3"/>`,changes:`<path d="M2.5 5.5v-2a1 1 0 0 1 1-1h2M10.5 2.5h2a1 1 0 0 1 1 1v2M13.5 10.5v2a1 1 0 0 1-1 1h-2M5.5 13.5h-2a1 1 0 0 1-1-1v-2"/><circle cx="8" cy="8" r="1.9"/>`,fit:`<path d="M2.5 6V3.5a1 1 0 0 1 1-1H6M10 2.5h2.5a1 1 0 0 1 1 1V6M13.5 10v2.5a1 1 0 0 1-1 1H10M6 13.5H3.5a1 1 0 0 1-1-1V10"/>`,help:`<circle cx="8" cy="8" r="6"/><path d="M6.25 6.25a1.8 1.8 0 0 1 3.5.5c0 1.25-1.75 1.5-1.75 2.6"/><path d="M8 11.3v.01"/>`,sidebar:`<rect x="2" y="2.75" width="12" height="10.5" rx="2"/><path d="M10 2.75v10.5"/>`,contrast:`<circle cx="8" cy="8" r="5.75"/><path d="M8 2.25a5.75 5.75 0 0 1 0 11.5Z" fill="currentColor" stroke="none"/>`,sun:`<circle cx="8" cy="8" r="2.75"/><path d="M8 1.75v1.5M8 12.75v1.5M1.75 8h1.5M12.75 8h1.5M3.6 3.6l1.05 1.05M11.35 11.35l1.05 1.05M3.6 12.4l1.05-1.05M11.35 4.65l1.05-1.05"/>`,moon:`<path d="M13.25 9.6A5.5 5.5 0 0 1 6.4 2.75a5.5 5.5 0 1 0 6.85 6.85Z"/>`,monitor:`<rect x="2" y="2.75" width="12" height="8.5" rx="1.5"/><path d="M5.5 13.75h5M8 11.25v2.5"/>`,search:`<circle cx="7.25" cy="7.25" r="4.5"/><path d="m10.6 10.6 3 3"/>`,close:`<path d="m4.25 4.25 7.5 7.5M11.75 4.25l-7.5 7.5"/>`,check:`<path d="m3.5 8.4 3 2.9 6-6.6"/>`,"chevron-left":`<path d="M10 3.5 5.5 8l4.5 4.5"/>`,"chevron-right":`<path d="M6 3.5 10.5 8 6 12.5"/>`,"chevron-up":`<path d="M3.5 10 8 5.5l4.5 4.5"/>`,"chevron-down":`<path d="M3.5 6 8 10.5 12.5 6"/>`,play:`<path d="M5.25 3.6v8.8a.5.5 0 0 0 .77.42l6.6-4.4a.5.5 0 0 0 0-.84l-6.6-4.4a.5.5 0 0 0-.77.42Z" fill="currentColor"/>`,pause:`<path d="M5.5 3.75v8.5M10.5 3.75v8.5" stroke-width="2"/>`,"skip-back":`<path d="M12 4.1v7.8a.5.5 0 0 1-.78.41L5.6 8.41a.5.5 0 0 1 0-.82l5.62-3.9A.5.5 0 0 1 12 4.1Z" fill="currentColor"/><path d="M3.75 4v8"/>`,"skip-forward":`<path d="M4 4.1v7.8a.5.5 0 0 0 .78.41l5.62-3.9a.5.5 0 0 0 0-.82L4.78 3.69A.5.5 0 0 0 4 4.1Z" fill="currentColor"/><path d="M12.25 4v8"/>`,restart:`<path d="M2.75 8a5.25 5.25 0 1 0 1.6-3.78"/><path d="M2.5 2.5v2.75h2.75"/>`,plus:`<path d="M8 3.25v9.5M3.25 8h9.5"/>`,minus:`<path d="M3.25 8h9.5"/>`,target:`<circle cx="8" cy="8" r="4.25"/><path d="M8 1.75v2.5M8 11.75v2.5M1.75 8h2.5M11.75 8h2.5"/>`,"check-circle":`<circle cx="8" cy="8" r="6"/><path d="m5.4 8.2 1.85 1.85L10.75 6.3"/>`,alert:`<path d="M8 2.25 14.25 13a.5.5 0 0 1-.43.75H2.18a.5.5 0 0 1-.43-.75Z"/><path d="M8 6.5v3"/><path d="M8 11.6v.01"/>`,keyboard:`<rect x="1.75" y="4" width="12.5" height="8" rx="1.5"/><path d="M4.5 6.75h.01M7 6.75h.01M9.5 6.75h.01M12 6.75h.01M5.5 9.5h5"/>`};function al(e,t){if(t!=null&&t!==!1){if(Array.isArray(t))for(let n of t)al(e,n);else e.appendChild(typeof t==`string`||typeof t==`number`?document.createTextNode(String(t)):t)}}function K(e,t,...n){let r=document.createElement(e);if(t)for(let[e,n]of Object.entries(t))n!=null&&n!==!1&&(e===`text`?r.textContent=String(n):e.startsWith(`on`)&&typeof n==`function`?r.addEventListener(e.slice(2),n):e===`class`?r.className=String(n):r.setAttribute(e,n===!0?``:String(n)));for(let e of n)al(r,e);return r}function q(e,...t){e.textContent=``;for(let n of t)al(e,n)}function ol(e,t,n,...r){let i=e.activeElement,a=i!==null&&t.contains(i),o=a?i.dataset.focusKey??``:``;if(q(t,...r),!a)return;let s=null;if(o){for(let e of t.querySelectorAll(`[data-focus-key]`))if(e.dataset.focusKey===o&&!e.disabled){s=e;break}}(s??n)?.focus({preventScroll:!0})}function J(e,t,n){if(n===null||n===!1){e.hasAttribute(t)&&e.removeAttribute(t);return}let r=n===!0?``:n;e.getAttribute(t)!==r&&e.setAttribute(t,r)}function Y(e,t){e.textContent!==t&&(e.textContent=t)}function X(e,t=`icon`){let n=document.createElement(`template`);return n.innerHTML=`<svg class="${t}" viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">${il[e]}</svg>`,n.content.firstElementChild}function Z(e,t,n,r={}){return K(`button`,{type:`button`,class:`icon-btn`,"aria-label":t,title:t,onclick:n,...r},X(e))}function Q(e,t){J(e,`aria-label`,t),J(e,`title`,t)}var sl=`kgdiff=`,cl=new Set([`overlay`,`swipe`,`replay`,`changes`]);function ll(e){return typeof e==`string`&&cl.has(e)}function ul(e){try{return decodeURIComponent(e)}catch{return}}function dl(e){let t=e.startsWith(`#`)?e.slice(1):e;if(!t.startsWith(sl))return null;let n,r;for(let e of t.slice(7).split(`;`)){let t=e.indexOf(`:`);if(t<=0)continue;let i=e.slice(0,t),a=ul(e.slice(t+1));a!==void 0&&a!==``&&(i===`hunk`?n=a:i===`mode`&&ll(a)&&(r=a))}return{...n===void 0?{}:{hunk:n},...r===void 0?{}:{mode:r}}}function fl(e){let t=[];return e.hunk!==void 0&&t.push(`hunk:${encodeURIComponent(e.hunk)}`),e.mode!==void 0&&t.push(`mode:${e.mode}`),`#${sl}${t.join(`;`)}`}var pl={1:`overlay`,2:`swipe`,3:`replay`,4:`changes`},ml=.02,hl=.1;function gl(e,t){if(e.ctrlKey||e.metaKey||e.altKey)return null;let n=e.key,r=pl[n];if(r!==void 0)return{type:`mode`,mode:r};switch(n){case`j`:case`ArrowDown`:return{type:`next`};case`k`:case`ArrowUp`:return{type:`prev`};case`Home`:return{type:`first`};case`End`:return{type:`last`};case`Enter`:return{type:`fly`};case`Escape`:return{type:`escape`};case` `:case`Spacebar`:return t===`replay`?{type:`play-pause`}:null;case`ArrowLeft`:case`ArrowRight`:{let r=n===`ArrowRight`?1:-1;return t===`replay`?{type:`step`,direction:r}:t===`swipe`?{type:`divider`,delta:r*(e.shiftKey?hl:ml)}:null}case`f`:case`F`:return{type:`fit`};case`+`:case`=`:return{type:`zoom`,direction:1};case`-`:case`_`:case`−`:return{type:`zoom`,direction:-1};case`/`:return{type:`search`};case`x`:case`X`:return{type:`review`};case`\\`:return{type:`sidebar`};case`t`:case`T`:return{type:`theme`};case`e`:case`E`:return t===`changes`?{type:`expand`}:null;case`?`:return{type:`help`};default:return null}}function _l(e){if(e===null||typeof e.tagName!=`string`)return!1;let t=e,n=t.tagName.toLowerCase();if(n===`textarea`||n===`select`)return!0;if(n===`input`){let e=(t.type??`text`).toLowerCase();return![`button`,`checkbox`,`radio`,`range`,`submit`,`reset`,`color`,`file`].includes(e)}return t.isContentEditable===!0||t.getAttribute?.(`contenteditable`)===`true`}var vl=new Set,yl=`application/kgdiff+json`;function bl(e){let t=e.replace(/\s+/g,``),n=atob(t),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);return r}async function xl(e){if(typeof DecompressionStream!=`function`)throw new p(`invalid-input`,`This browser cannot decompress the embedded report (DecompressionStream is missing).`);let t=new ReadableStream({start(t){t.enqueue(e),t.close()}}).pipeThrough(new DecompressionStream(`gzip`)).getReader(),n=[],r=0;for(;;){let{done:e,value:i}=await t.read();if(e)break;n.push(i),r+=i.length}let i=new Uint8Array(r),a=0;for(let e of n)i.set(e,a),a+=e.length;return new TextDecoder().decode(i)}async function Sl(e,t){let n,r=(t??``).trim().toLowerCase();if(r===``||r===`json`||r===`identity`)n=e;else if(r===`gzip-base64`)try{n=await xl(bl(e))}catch(e){throw e instanceof p?e:new p(`invalid-input`,`The embedded report is not valid gzip-base64: ${e.message}`)}else throw new p(`invalid-input`,`Unknown payload encoding "${t}".`);let i;try{i=JSON.parse(n)}catch(e){throw new p(`invalid-input`,`The embedded report is not valid JSON: ${e.message}`)}return Cl(i)}function Cl(e){if(typeof e!=`object`||!e)throw new p(`invalid-input`,`A kgdiff report payload must be an object.`);let t=e;if(t.format!==`kgdiff.report`)throw new p(`invalid-input`,`Expected format "kgdiff.report", got ${JSON.stringify(t.format)}.`);if(t.version!==1)throw new p(`unsupported-version`,`Unsupported kgdiff report version ${JSON.stringify(t.version)} (this viewer reads version 1).`);if(typeof t.diff!=`object`||t.diff===null||typeof t.layout!=`object`||!t.layout)throw new p(`invalid-input`,"A kgdiff report needs both `diff` and `layout`.");return e}function wl(e,t){let n=e;return typeof n.getElementById==`function`?n.getElementById(t):e.querySelector(`[id="${t.replace(/["\\]/g,`\\$&`)}"]`)}function Tl(e){for(let t of e.querySelectorAll(`*`))if(vl.has(t.localName))return t;return null}function El(e,t){let n=e.getAttribute(`data-for`);return n?wl(t,n):Tl(t)}async function Dl(e){let t=[...e.querySelectorAll(`script[type="${yl}"]`)];await Promise.all(t.map(async t=>{let n=El(t,e);try{let e=await Sl(t.textContent??``,t.getAttribute(`data-encoding`));n&&(n.payload=e)}catch(e){let t=e instanceof Error?e:new p(`invalid-input`,String(e));if(n){let e=n.showError;typeof e==`function`?e.call(n,t):n.dispatchEvent(new CustomEvent(`kgdiff-error`,{detail:{error:t},bubbles:!0,composed:!0}))}else console.error(`[kgdiff] embedded payload:`,t)}}))}var Ol=[`added`,`removed`,`content`,`structure`,`identity`];function kl(e){let t=e.name===`dark`,n={"color-scheme":t?`dark`:`light`,"--kg-bg":e.canvas.background,"--kg-grid":e.canvas.grid,"--kg-panel":e.surface.panel,"--kg-raised":e.surface.raised,"--kg-overlay":e.surface.overlay,"--kg-border":e.surface.border,"--kg-border-strong":e.surface.borderStrong,"--kg-control-border":e.surface.controlBorder,"--kg-shadow":e.surface.shadow,"--kg-text":e.text.primary,"--kg-text-2":e.text.secondary,"--kg-text-3":e.text.muted,"--kg-accent":e.accent.base,"--kg-accent-strong":e.accent.strong,"--kg-accent-soft":e.accent.soft,"--kg-accent-text":e.accent.text,"--kg-neutral":e.neutral.node,"--kg-neutral-stroke":e.neutral.nodeStroke,"--kg-neutral-edge":e.neutral.edge,"--kg-font":e.font.family,"--kg-mono":e.font.mono,"--kg-fast":`${e.motion.fast}ms`,"--kg-base":`${e.motion.base}ms`,"--kg-slow":`${e.motion.slow}ms`,"--kg-ease":`cubic-bezier(${e.motion.easing.join(`, `)})`,"--kg-hover":t?`rgba(255,255,255,0.045)`:`rgba(15,23,42,0.04)`,"--kg-press":t?`rgba(255,255,255,0.08)`:`rgba(15,23,42,0.07)`,"--kg-input":t?e.surface.raised:`#F3F5F8`,"--kg-selected":t?e.surface.raised:`#F5F7FB`,"--kg-scrim":t?`rgba(5,7,11,0.56)`:`rgba(15,23,42,0.18)`,"--kg-skeleton":t?`rgba(255,255,255,0.05)`:`rgba(15,23,42,0.05)`,"--kg-skeleton-hi":t?`rgba(255,255,255,0.09)`:`rgba(15,23,42,0.09)`,"--kg-track":t?`rgba(255,255,255,0.08)`:`rgba(15,23,42,0.08)`,"--kg-kbd":t?`rgba(255,255,255,0.06)`:`rgba(15,23,42,0.05)`};for(let t of Ol){let r=e.family[t];n[`--kg-${t}`]=r.base,n[`--kg-${t}-strong`]=r.strong,n[`--kg-${t}-soft`]=r.soft,n[`--kg-${t}-text`]=r.text}return Object.entries(n).map(([e,t])=>`${e}: ${t};`).join(` `)}var Al=`:host{all:initial;display:block;position:relative;height:100%;min-height:420px;contain:content;font-family:var(--kg-font);font-size:13px;line-height:1.45;color:var(--kg-text);background:var(--kg-bg);-webkit-font-smoothing:antialiased}:host([hidden]){display:none}:host([chrome="none"]){min-height:120px}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}button,input{font:inherit;color:inherit;letter-spacing:inherit}button{margin:0;padding:0;border:0;background:none;cursor:pointer;-webkit-tap-highlight-color:transparent}button:disabled{cursor:default;opacity:0.4}:focus{outline:none}:focus-visible{outline:2px solid var(--kg-accent);outline-offset:2px}.icon{width:16px;height:16px;flex:none;display:block}.sr-only{position:absolute !important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}kbd{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 5px;border-radius:5px;font:500 11px/1 var(--kg-mono);color:var(--kg-text-2);background:var(--kg-kbd);box-shadow:inset 0 0 0 1px var(--kg-border),inset 0 -1px 0 var(--kg-border)}.scroll{overflow:auto;scrollbar-width:thin;scrollbar-color:var(--kg-border-strong) transparent}.root{position:absolute;inset:0;display:flex;flex-direction:column;overflow:hidden;background:var(--kg-bg)}.body{position:relative;flex:1;min-height:0;display:flex}.stage-wrap{position:relative;flex:1;min-width:0;min-height:0;overflow:hidden;background:var(--kg-bg)}.stage{position:absolute;inset:0}.stage canvas{outline:none}.stage canvas:focus-visible{outline:2px solid var(--kg-accent);outline-offset:-2px}.chrome{position:absolute;inset:0;pointer-events:none}.chrome>*{pointer-events:auto}.icon-btn{display:inline-flex;align-items:center;justify-content:center;flex:none;width:32px;height:32px;border-radius:8px;color:var(--kg-text-2);transition:background var(--kg-fast) var(--kg-ease),color var(--kg-fast) var(--kg-ease)}.icon-btn:hover{background:var(--kg-hover);color:var(--kg-text)}.icon-btn:active{background:var(--kg-press)}.icon-btn[aria-pressed="true"],.icon-btn[aria-expanded="true"]{background:var(--kg-press);color:var(--kg-text)}.icon-btn.sm{width:28px;height:28px;border-radius:7px}.btn{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 10px;border-radius:7px;font-size:12px;font-weight:500;color:var(--kg-text);background:var(--kg-hover);box-shadow:inset 0 0 0 1px var(--kg-border);transition:background var(--kg-fast) var(--kg-ease),box-shadow var(--kg-fast) var(--kg-ease)}.btn:hover{background:var(--kg-press);box-shadow:inset 0 0 0 1px var(--kg-border-strong)}.link-btn{min-height:28px;color:var(--kg-accent-text);font-weight:500;font-size:12px;border-radius:4px}.link-btn:hover{text-decoration:underline;text-underline-offset:3px}.header{position:relative;z-index:3;flex:none;height:52px;display:flex;align-items:center;gap:12px;padding:0 10px 0 14px;background:var(--kg-panel);border-bottom:1px solid var(--kg-border)}.brand{display:flex;align-items:center;gap:8px;flex:none;color:var(--kg-text)}.brand-mark{width:20px;height:20px;display:block}.brand-name{font-size:14px;font-weight:650;letter-spacing:-0.01em}.header-sep{width:1px;height:20px;background:var(--kg-border-strong);flex:none}.versions{display:flex;align-items:center;gap:8px;min-width:0;flex:1 1 0;font-size:13px;overflow:hidden;mask-image:linear-gradient(90deg,#000 calc(100% - 16px),transparent)}.versions .name{font-weight:550;color:var(--kg-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.versions .arrow{color:var(--kg-text-3);flex:none}.versions .side{display:flex;align-items:center;gap:6px;min-width:0}.tag{display:inline-flex;align-items:center;height:20px;padding:0 6px;border-radius:5px;flex:none;font:500 11px/1 var(--kg-mono);color:var(--kg-text-2);background:var(--kg-hover);box-shadow:inset 0 0 0 1px var(--kg-border);white-space:nowrap;max-width:160px;overflow:hidden;text-overflow:ellipsis}.header-center{flex:none;display:flex;justify-content:center}:host([header="compact"]) .brand,:host([header="compact"]) .header-sep{display:none}:host([header="compact"]) .versions{visibility:hidden}.header-end{display:flex;align-items:center;gap:4px;flex:1 0 auto;justify-content:flex-end}.stats{display:flex;align-items:center;gap:4px;margin-right:6px}.segmented{position:relative;display:inline-flex;align-items:center;gap:2px;height:32px;padding:2px;border-radius:9px;background:var(--kg-hover);box-shadow:inset 0 0 0 1px var(--kg-border)}.segmented .thumb{position:absolute;top:2px;bottom:2px;left:0;width:0;border-radius:7px;background:var(--kg-raised);box-shadow:0 1px 2px rgba(0,0,0,0.12),inset 0 0 0 1px var(--kg-border-strong);transition:transform var(--kg-base) var(--kg-ease),width var(--kg-base) var(--kg-ease)}.seg{position:relative;z-index:1;display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 10px;border-radius:7px;font-size:12.5px;font-weight:500;color:var(--kg-text-2);white-space:nowrap;transition:color var(--kg-fast) var(--kg-ease)}.seg:hover{color:var(--kg-text)}.seg[aria-checked="true"]{color:var(--kg-text)}.seg .icon{opacity:0.9}.pill{display:inline-flex;align-items:center;gap:4px;height:28px;padding:0 9px;border-radius:14px;font-size:12px;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;transition:box-shadow var(--kg-fast) var(--kg-ease),background var(--kg-fast) var(--kg-ease),opacity var(--kg-fast) var(--kg-ease)}.stat{color:var(--fam-text);background:var(--fam-soft);box-shadow:inset 0 0 0 1px transparent}.stat:hover{box-shadow:inset 0 0 0 1px var(--fam-base)}.stat[aria-pressed="true"]{box-shadow:inset 0 0 0 1.5px var(--fam-base)}.stats.filtering .stat[aria-pressed="false"]{opacity:0.55}.stat .glyph{font-weight:700}${[...Ol,`neutral`].map(e=>e===`neutral`?`[data-family="neutral"] { --fam-base: var(--kg-neutral); --fam-soft: var(--kg-hover); --fam-text: var(--kg-text-2); }`:`[data-family="${e}"] { --fam-base: var(--kg-${e}); --fam-soft: var(--kg-${e}-soft); --fam-text: var(--kg-${e}-text); }`).join(`
|
|
4
|
-
`)}.card{background:var(--kg-overlay);border-radius:12px;box-shadow:var(--kg-shadow),0 0 0 1px var(--kg-border);backdrop-filter:blur(16px) saturate(140%)}.float{position:absolute}.top-left{top:12px;left:12px}.bottom-left{bottom:16px;left:16px}.bottom-right{bottom:16px;right:16px}.chip{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 10px;border-radius:8px;font-size:12px;font-weight:600;color:var(--kg-text-2);letter-spacing:0.01em}.map-cluster{display:flex;align-items:flex-end;gap:8px}.zoom-bar{display:flex;flex-direction:column;padding:2px;gap:2px}.zoom-bar .icon-btn{width:30px;height:30px}.minimap-host{position:relative;width:184px;height:128px;border-radius:12px;box-shadow:0 0 0 1px var(--kg-border)}.minimap-host canvas{border-radius:12px}.legend{padding:6px;min-width:0}.legend-head{display:flex;align-items:center;gap:6px;height:28px;padding:0 6px 0 8px;font-size:11px;font-weight:600;letter-spacing:0.06em;text-transform:uppercase;color:var(--kg-text-3);border-radius:7px;width:100%}.legend-head:hover{color:var(--kg-text-2);background:var(--kg-hover)}.legend-head .icon{width:14px;height:14px;margin-left:auto;transition:transform var(--kg-base) var(--kg-ease)}.legend[data-open="false"] .legend-head .icon{transform:rotate(180deg)}.legend[data-open="false"] .legend-body{display:none}.legend[data-open="false"]{padding:2px}.legend-body{display:grid;gap:2px;padding:2px 4px 4px}.legend-row{display:grid;grid-template-columns:22px auto;align-items:center;column-gap:8px;height:26px;padding:0 10px 0 4px;border-radius:6px;cursor:default}.legend-row .name{font-size:12px;font-weight:550;color:var(--kg-text)}.swatch{width:22px;height:22px;display:block}.mini-legend{display:none}.stage-wrap[data-legend="mini"] .mini-legend{display:flex;flex-wrap:wrap;align-items:center;gap:2px 12px;bottom:8px;left:12px;max-width:calc(100% - 24px);font-size:11px;line-height:16px;color:var(--kg-text-2)}.mini-item{display:inline-flex;align-items:center;gap:5px;white-space:nowrap}.mini-item .dot{width:8px;height:8px;border-radius:50%;flex:none;background:var(--fam-base)}.mini-item[data-family="removed"] .dot{background:none;box-shadow:inset 0 0 0 1.5px var(--fam-base)}.stage-wrap[data-legend="mini"] .legend,.stage-wrap[data-legend="none"] .legend{display:none}.caption{position:absolute;top:12px;left:50%;transform:translateX(-50%);max-width:min(560px,calc(100% - 200px));display:flex;align-items:center;gap:8px;height:32px;padding:0 12px 0 6px;font-size:12.5px;font-weight:550;transition:opacity var(--kg-base) var(--kg-ease)}.caption .text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.caption .count{color:var(--kg-text-3);font-weight:500;font-variant-numeric:tabular-nums;flex:none}.caption[data-empty="true"]{opacity:0;pointer-events:none}.glyph-box{display:inline-flex;align-items:center;justify-content:center;flex:none;width:20px;height:20px;border-radius:6px;font-size:12px;font-weight:700;line-height:1;color:var(--fam-text);background:var(--fam-soft)}.stepper{display:inline-flex;align-items:center;gap:8px;height:38px;padding:0 4px 0 12px}.stepper .label{font-size:12px;font-weight:550;color:var(--kg-text-2)}.stepper .opts{display:inline-flex;gap:2px;padding:2px;border-radius:8px;background:var(--kg-hover)}.stepper .opt{width:28px;height:28px;border-radius:6px;font-size:12px;font-weight:600;color:var(--kg-text-2);font-variant-numeric:tabular-nums}.stepper .opt:hover{color:var(--kg-text)}.stepper .expand{display:inline-flex;align-items:center;gap:4px;height:28px;padding:0 10px 0 8px;margin-left:4px;border-radius:7px;font-size:12px;font-weight:600;color:var(--kg-text-2);box-shadow:inset 0 0 0 1px var(--kg-border-strong);font-variant-numeric:tabular-nums}.stepper .expand:hover:not(:disabled){color:var(--kg-text);background:var(--kg-hover)}.stepper .expand .icon{width:14px;height:14px}.stepper .opt[aria-checked="true"]{background:var(--kg-raised);color:var(--kg-text);box-shadow:inset 0 0 0 1px var(--kg-border-strong)}.swipe{position:absolute;inset:0;pointer-events:none}.swipe .divider{position:absolute;top:0;bottom:0;left:0;width:24px;margin-left:-12px;cursor:ew-resize;pointer-events:auto;touch-action:none;display:flex;justify-content:center}.swipe .divider::before{content:'';width:1.5px;height:100%;background:var(--kg-accent);opacity:0.85;box-shadow:0 0 12px var(--kg-accent-soft)}.swipe .handle{position:absolute;top:50%;left:50%;width:32px;height:32px;margin:-16px 0 0 -16px;border-radius:50%;display:flex;align-items:center;justify-content:center;gap:0;color:var(--kg-accent-text);background:var(--kg-overlay);box-shadow:var(--kg-shadow),0 0 0 1.5px var(--kg-accent);backdrop-filter:blur(16px);transition:transform var(--kg-fast) var(--kg-ease)}.swipe .handle .icon{width:12px;height:12px}.swipe .divider:hover .handle,.swipe .divider.dragging .handle{transform:scale(1.08)}.swipe .divider:focus-visible{outline:none}.swipe .divider:focus-visible .handle{box-shadow:var(--kg-shadow),0 0 0 2px var(--kg-accent),0 0 0 5px var(--kg-accent-soft)}.swipe .side-chip{position:absolute;top:12px;pointer-events:none}.swipe .side-chip.before{left:12px}.swipe .side-chip.after{right:12px}.transport{position:absolute;left:50%;bottom:16px;transform:translateX(-50%);width:min(600px,calc(100% - 496px));min-width:360px;display:flex;align-items:center;gap:4px;height:48px;padding:0 8px}.transport .play{width:36px;height:36px;border-radius:10px;color:var(--kg-text)}.transport .play .icon{width:18px;height:18px}.transport .pos{flex:none;min-width:64px;text-align:center;font-size:12px;font-weight:550;color:var(--kg-text-2);font-variant-numeric:tabular-nums}.transport .speed{flex:none;height:28px;min-width:44px;padding:0 8px;border-radius:7px;font-size:12px;font-weight:600;color:var(--kg-text-2);font-variant-numeric:tabular-nums;box-shadow:inset 0 0 0 1px var(--kg-border)}.transport .speed:hover{color:var(--kg-text);background:var(--kg-hover)}.scrubber{position:relative;flex:1;height:36px;margin:0 8px;cursor:pointer;touch-action:none;border-radius:6px}.scrubber .track{position:absolute;left:0;right:0;top:50%;height:4px;margin-top:-2px;border-radius:2px;background:var(--kg-track);overflow:hidden}.scrubber .fill{position:absolute;left:0;top:0;bottom:0;width:100%;transform-origin:left;background:var(--kg-accent);opacity:0.85}.scrubber .ticks{position:absolute;left:0;right:0;top:50%;height:14px;margin-top:-7px;width:100%;pointer-events:none;overflow:visible}.scrubber .knob{position:absolute;top:50%;left:0;width:14px;height:14px;margin:-7px 0 0 -7px;border-radius:50%;background:var(--kg-text);box-shadow:0 1px 4px rgba(0,0,0,0.35),0 0 0 3px var(--kg-accent-soft);pointer-events:none}.scrubber:focus-visible{outline-offset:0}.scrub-tip{position:absolute;bottom:100%;margin-bottom:10px;transform:translateX(-50%);max-width:320px;padding:6px 10px;font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:none;display:flex;align-items:center;gap:6px}.finished{position:absolute;left:50%;bottom:76px;transform:translateX(-50%);display:flex;align-items:center;gap:10px;height:36px;padding:0 6px 0 12px;font-size:12.5px;font-weight:550;color:var(--kg-text);animation:rise var(--kg-base) var(--kg-ease)}.finished .icon{color:var(--kg-accent-text)}@keyframes rise{from{opacity:0;transform:translate(-50%,6px)}}.tooltip{position:absolute;left:0;top:0;z-index:4;width:max-content;max-width:300px;padding:10px 12px;pointer-events:none;border-radius:10px;opacity:0;transition:opacity var(--kg-fast) var(--kg-ease)}.tooltip[data-open="true"]{opacity:1}.tooltip .t-label{font-size:13px;font-weight:600;color:var(--kg-text);overflow-wrap:anywhere}.tooltip .t-old{font-size:12px;color:var(--kg-text-3);text-decoration:line-through;overflow-wrap:anywhere}.tooltip .t-id{margin-top:2px;font:11px/1.4 var(--kg-mono);color:var(--kg-text-3);overflow-wrap:anywhere}.tooltip .t-status{margin-top:8px;display:flex;align-items:center;gap:6px;font-size:12px;font-weight:550;color:var(--fam-text)}.tooltip .t-status .dot{width:7px;height:7px;border-radius:50%;background:var(--fam-base);flex:none}.tooltip .t-sum{margin-top:4px;font-size:12px;color:var(--kg-text-2);overflow-wrap:anywhere}.tooltip .t-hint{margin-top:6px;font-size:11px;color:var(--kg-text-3)}.state{position:absolute;inset:0;z-index:2;display:flex;align-items:center;justify-content:center;padding:24px;pointer-events:none}.state>*{pointer-events:auto}.state.blocking{background:var(--kg-bg)}.state-card{width:min(380px,100%);padding:24px;text-align:left}.state-card .state-icon{width:36px;height:36px;border-radius:10px;display:flex;align-items:center;justify-content:center;color:var(--kg-accent-text);background:var(--kg-accent-soft);margin-bottom:16px}.state-card .state-icon .icon{width:20px;height:20px}.state-card.error .state-icon{color:var(--kg-removed-text);background:var(--kg-removed-soft)}.state-card.ok .state-icon{color:var(--kg-added-text);background:var(--kg-added-soft)}.state-card h2{margin:0;font-size:15px;font-weight:650;letter-spacing:-0.01em}.state-card p{margin:6px 0 0;color:var(--kg-text-2);font-size:13px}.state-card details{margin-top:16px;font-size:12px;color:var(--kg-text-2)}.state-card summary{cursor:pointer;font-weight:550;color:var(--kg-text-2);border-radius:4px;width:max-content}.state-card pre{margin:8px 0 0;max-height:200px;padding:10px 12px;border-radius:8px;background:var(--kg-input);font:11.5px/1.5 var(--kg-mono);white-space:pre-wrap;overflow-wrap:anywhere;color:var(--kg-text-2);box-shadow:inset 0 0 0 1px var(--kg-border)}.steps{list-style:none;margin:16px 0 0;padding:0;display:grid;gap:10px}.steps li{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--kg-text-3);transition:color var(--kg-base) var(--kg-ease)}.steps li[data-state="active"]{color:var(--kg-text);font-weight:550}.steps li[data-state="done"]{color:var(--kg-text-2)}.steps .mark{width:18px;height:18px;flex:none;border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:inset 0 0 0 1.5px var(--kg-border-strong)}.steps li[data-state="done"] .mark{background:var(--kg-accent-soft);box-shadow:none;color:var(--kg-accent-text)}.steps li[data-state="done"] .mark .icon{width:12px;height:12px}.steps li[data-state="active"] .mark{box-shadow:inset 0 0 0 1.5px var(--kg-accent-soft);border-top:1.5px solid var(--kg-accent);animation:spin 0.8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.skeleton-grid{position:absolute;inset:0;background-image:radial-gradient(var(--kg-skeleton-hi) 1.2px,transparent 1.4px);background-size:24px 24px;mask-image:radial-gradient(ellipse at center,#000 20%,transparent 75%);animation:breathe 2.4s ease-in-out infinite}@keyframes breathe{50%{opacity:0.45}}.sidebar{position:relative;z-index:2;flex:none;width:360px;display:flex;overflow:hidden;background:var(--kg-panel);border-left:1px solid var(--kg-border);transition:width var(--kg-base) var(--kg-ease),border-color var(--kg-base) var(--kg-ease)}.sidebar[data-open="false"]{width:0;border-left-color:transparent}.sidebar-inner{width:360px;flex:none;display:flex;flex-direction:column;min-height:0}.sheet-handle{display:none}.sb-head{flex:none;padding:12px 12px 8px;display:grid;gap:10px;border-bottom:1px solid var(--kg-border)}.sb-title{display:flex;align-items:center;gap:8px;height:24px;padding:0 2px}.sb-title h2{margin:0;font-size:13px;font-weight:650}.count-badge{display:inline-flex;align-items:center;height:18px;padding:0 6px;border-radius:9px;font-size:11px;font-weight:600;color:var(--kg-text-2);background:var(--kg-hover);box-shadow:inset 0 0 0 1px var(--kg-border);font-variant-numeric:tabular-nums}.progress{margin-left:auto;display:flex;align-items:center;gap:8px;font-size:11.5px;color:var(--kg-text-3);font-variant-numeric:tabular-nums}.progress .bar{width:64px;height:4px;border-radius:2px;background:var(--kg-track);overflow:hidden}.progress .bar>div{height:100%;width:100%;transform-origin:left;background:var(--kg-accent);border-radius:2px;transition:transform var(--kg-base) var(--kg-ease)}.progress[data-complete="true"]{color:var(--kg-accent-text)}.search{position:relative;display:flex;align-items:center;height:32px;border-radius:8px;background:var(--kg-input);box-shadow:inset 0 0 0 1px var(--kg-border);transition:box-shadow var(--kg-fast) var(--kg-ease)}.search:focus-within{box-shadow:inset 0 0 0 1px var(--kg-accent),0 0 0 3px var(--kg-accent-soft)}.search>.icon{position:absolute;left:10px;color:var(--kg-text-3);pointer-events:none}.search input{flex:1;min-width:0;height:100%;padding:0 64px 0 32px;border:0;background:transparent;font-size:13px;color:var(--kg-text)}.search input::placeholder{color:var(--kg-text-3)}.search input::-webkit-search-cancel-button{display:none}.search kbd{position:absolute;right:8px}.search .clear{position:absolute;right:2px;width:28px;height:28px;border-radius:6px;display:flex;align-items:center;justify-content:center;color:var(--kg-text-3)}.search .clear:hover{color:var(--kg-text);background:var(--kg-hover)}.filters{display:flex;flex-wrap:wrap;gap:4px}.fchip{display:inline-flex;align-items:center;gap:5px;height:28px;padding:0 8px 0 7px;border-radius:14px;font-size:11.5px;font-weight:550;color:var(--kg-text-2);box-shadow:inset 0 0 0 1px var(--kg-border);transition:background var(--kg-fast) var(--kg-ease),box-shadow var(--kg-fast) var(--kg-ease),color var(--kg-fast) var(--kg-ease)}.fchip:hover{background:var(--kg-hover);color:var(--kg-text)}.fchip .dot{width:7px;height:7px;border-radius:50%;background:var(--fam-base);flex:none}.fchip .n{color:var(--kg-text-3);font-variant-numeric:tabular-nums;font-weight:500}.fchip[aria-pressed="true"]{background:var(--fam-soft);color:var(--fam-text);box-shadow:inset 0 0 0 1px var(--fam-base)}.fchip[aria-pressed="true"] .n{color:var(--fam-text);opacity:0.8}.fchip:disabled{opacity:0.35}.list-wrap{position:relative;flex:1 1 50%;min-height:96px;display:flex;flex-direction:column}.list{position:relative;flex:1;min-height:0;outline:none}.list:focus-visible{outline:none}.list:focus-visible:not(:has(.row[aria-selected="true"])){box-shadow:inset 0 0 0 2px var(--kg-accent)}.list:focus-visible .row[aria-selected="true"]{box-shadow:inset 0 0 0 2px var(--kg-accent)}.list-inner{position:relative;width:100%}.row{position:absolute;left:8px;right:8px;height:52px;display:flex;align-items:center;gap:10px;padding:0 6px 0 14px;border-radius:8px;cursor:pointer;user-select:none;-webkit-user-select:none;transition:background var(--kg-fast) var(--kg-ease),box-shadow var(--kg-fast) var(--kg-ease)}.row::before{content:'';position:absolute;left:4px;top:10px;bottom:10px;width:3px;border-radius:2px;background:var(--fam-base)}.row:hover{background:var(--kg-hover)}.row[aria-selected="true"]{background:var(--kg-selected);box-shadow:inset 0 0 0 1px var(--kg-accent),0 1px 2px rgba(0,0,0,0.06)}.row .txt{flex:1;min-width:0;display:grid;gap:1px}.row .title{font-size:13px;font-weight:500;color:var(--kg-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.row .sub{font-size:12px;color:var(--kg-text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-height:17px}.row[data-reviewed="true"] .title{color:var(--kg-text-2)}.row[data-reviewed="true"] .glyph-box{opacity:0.7}.rv{flex:none;width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer}.rv .ring{width:18px;height:18px;border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:inset 0 0 0 1.5px var(--kg-control-border);color:transparent;transition:background var(--kg-fast) var(--kg-ease),box-shadow var(--kg-fast) var(--kg-ease),color var(--kg-fast) var(--kg-ease),transform var(--kg-fast) var(--kg-ease)}.rv .ring .icon{width:12px;height:12px}.rv:hover .ring{box-shadow:inset 0 0 0 1.5px var(--kg-accent);color:var(--kg-text-3)}.rv[data-pressed="true"] .ring{background:var(--kg-accent);box-shadow:none;color:var(--kg-bg)}.rv[data-pressed="true"]:active .ring{transform:scale(0.9)}.group{position:absolute;left:0;right:0;height:32px;display:flex;align-items:center;gap:8px;padding:10px 16px 0 22px;font-size:11px;font-weight:650;letter-spacing:0.06em;text-transform:uppercase;color:var(--kg-text-3)}.group .n{font-weight:500;letter-spacing:0;font-variant-numeric:tabular-nums}.sticky{position:absolute;top:0;left:0;right:0;z-index:1;height:32px;background:var(--kg-panel);box-shadow:0 1px 0 var(--kg-border);pointer-events:none}.sticky .group{position:static;height:32px;padding-top:0}.sticky[data-shadow="false"]{box-shadow:none}.list-empty{padding:32px 24px;text-align:center;color:var(--kg-text-3);font-size:12.5px;display:grid;gap:10px;justify-items:center}.skeleton-row{height:52px;margin:0 8px;padding:0 14px;display:flex;align-items:center;gap:10px}.skeleton-row .b{flex:1;max-width:70%;height:10px;border-radius:5px;background:var(--kg-skeleton)}.skeleton-row:nth-child(even) .b{max-width:52%}.skeleton-row .g{width:20px;height:20px;border-radius:6px;background:var(--kg-skeleton);flex:none}.shimmer{animation:breathe 1.6s ease-in-out infinite}.results{padding:4px 0 8px}.results-head{padding:8px 16px 6px;font-size:11px;font-weight:650;letter-spacing:0.06em;text-transform:uppercase;color:var(--kg-text-3)}.result{display:flex;align-items:center;gap:10px;width:calc(100% - 16px);margin:0 8px;height:44px;padding:0 10px;border-radius:8px;text-align:left}.result:hover,.result[aria-selected="true"]{background:var(--kg-hover)}.result[aria-selected="true"]{box-shadow:inset 0 0 0 1px var(--kg-border-strong)}.result .sdot{width:8px;height:8px;border-radius:50%;flex:none;background:var(--fam-base)}.result[data-family="neutral"] .sdot{background:transparent;box-shadow:inset 0 0 0 1.5px var(--kg-neutral-stroke)}.result .txt{flex:1;min-width:0;display:grid}.result .title{font-size:13px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.result .sub{font:11px/1.4 var(--kg-mono);color:var(--kg-text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.result mark{background:var(--kg-accent-soft);color:inherit;border-radius:3px;padding:0 1px}.result .status{font-size:11.5px;color:var(--fam-text);flex:none}.detail{flex:0 1 auto;max-height:58%;min-height:0;display:flex;flex-direction:column;border-top:1px solid var(--kg-border);background:var(--kg-panel)}.detail[data-empty="true"]{flex:none}.detail-empty{padding:16px;display:flex;align-items:center;gap:12px;color:var(--kg-text-3);font-size:12.5px}.detail-empty .icon{color:var(--kg-text-3)}.detail-empty .sub{font-size:11.5px;margin-top:2px}.detail-scroll{flex:1;min-height:0;padding:14px 16px 20px}.d-top{display:flex;align-items:center;gap:6px;margin-bottom:10px}.fam-pill{display:inline-flex;align-items:center;gap:6px;height:22px;padding:0 8px 0 6px;border-radius:6px;font-size:11.5px;font-weight:600;color:var(--fam-text);background:var(--fam-soft)}.fam-pill .g{font-weight:700}.d-nav{margin-left:auto;display:flex;align-items:center;gap:2px}.d-title{margin:0;font-size:14.5px;line-height:1.4;font-weight:600;letter-spacing:-0.005em;overflow-wrap:anywhere}.d-sub{margin-top:4px;font-size:12.5px;color:var(--kg-text-2);overflow-wrap:anywhere}.rv-btn{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 10px 0 6px;border-radius:7px;font-size:12px;font-weight:550;color:var(--kg-text-2);box-shadow:inset 0 0 0 1px var(--kg-border);margin-right:4px}.rv-btn:hover{color:var(--kg-text);background:var(--kg-hover)}.rv-btn .ring{width:16px;height:16px;border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:inset 0 0 0 1.5px var(--kg-control-border);color:transparent}.rv-btn .ring .icon{width:11px;height:11px}.rv-btn[aria-pressed="true"]{color:var(--kg-accent-text);box-shadow:inset 0 0 0 1px var(--kg-accent);background:var(--kg-accent-soft)}.rv-btn[aria-pressed="true"] .ring{background:var(--kg-accent);box-shadow:none;color:var(--kg-bg)}.section{margin-top:18px}.section>h3{margin:0 0 8px;font-size:11px;font-weight:650;letter-spacing:0.06em;text-transform:uppercase;color:var(--kg-text-3);display:flex;align-items:center;gap:6px}.section>h3 .n{font-weight:500;letter-spacing:0}.kv{display:grid;grid-template-columns:72px minmax(0,1fr);gap:6px 12px;font-size:12.5px;align-items:baseline}.kv dt{color:var(--kg-text-3)}.kv dd{margin:0;min-width:0;overflow-wrap:anywhere}.id-text{font:12px/1.5 var(--kg-mono);color:var(--kg-text);overflow-wrap:anywhere}.chips{display:flex;flex-wrap:wrap;gap:4px}.vchip{display:inline-flex;align-items:center;gap:4px;min-height:22px;padding:2px 8px;border-radius:6px;font-size:12px;background:var(--kg-hover);box-shadow:inset 0 0 0 1px var(--kg-border);overflow-wrap:anywhere}.vchip.add{color:var(--kg-added-text);background:var(--kg-added-soft);box-shadow:none}.vchip.del{color:var(--kg-removed-text);background:var(--kg-removed-soft);box-shadow:none;text-decoration:line-through;text-decoration-thickness:1px}.vchip .sign{font-weight:700;text-decoration:none;display:inline-block}.pair{display:flex;flex-wrap:wrap;align-items:baseline;gap:0 6px}.pair .b,.line.old{color:var(--kg-text-2)}.pair .arr{color:var(--kg-text-3)}.line{display:grid;grid-template-columns:10px minmax(0,1fr);gap:6px;align-items:baseline}.line .sign{font:600 12px/1 var(--kg-mono);text-align:center}.line.old .sign{color:var(--kg-removed-text)}.line.new .sign{color:var(--kg-added-text)}del.hl{text-decoration:line-through;text-decoration-color:var(--kg-removed);background:var(--kg-removed-soft);color:var(--kg-removed-text);border-radius:3px;padding:0 1px}ins.hl{text-decoration:none;background:var(--kg-added-soft);color:var(--kg-added-text);border-radius:3px;padding:0 1px}.attrs{width:100%;border-collapse:separate;border-spacing:0;font-size:12.5px;table-layout:fixed}.attrs td{vertical-align:baseline;padding:6px 8px 6px 0;border-top:1px solid var(--kg-border);overflow-wrap:anywhere}.attrs tr:first-child td{border-top:0;padding-top:0}.attrs td>* + *{margin-top:4px}.attrs td.k{color:var(--kg-text-2)}.attrs col.k{width:28%}.val{white-space:pre-wrap}.val.clamped{display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}.more{margin-top:2px}.disclosure{display:inline-flex;align-items:center;gap:4px;min-height:28px;margin-top:4px;font-size:12px;color:var(--kg-text-2);border-radius:4px}.disclosure:hover{color:var(--kg-text)}.disclosure .icon{width:12px;height:12px;transition:transform var(--kg-base) var(--kg-ease)}.disclosure[aria-expanded="true"] .icon{transform:rotate(180deg)}.rels{display:grid;gap:2px}.rel{display:flex;align-items:baseline;gap:8px;width:100%;padding:6px 8px;margin:0 -8px;border-radius:7px;text-align:left;font-size:12.5px;line-height:1.5;width:calc(100% + 16px)}.rel:hover{background:var(--kg-hover)}.rel .sign{flex:none;width:12px;font:600 12px/1.5 var(--kg-mono);color:var(--fam-text);text-align:center}.rel .s{min-width:0;overflow-wrap:anywhere}.rel .node{font-weight:550}.rel .pred{color:var(--kg-text-2);white-space:nowrap}.rel .was{color:var(--kg-text-3)}.rel.removed .s{text-decoration:line-through;text-decoration-color:var(--kg-text-3);color:var(--kg-text-2)}.nodes{display:grid;gap:2px}.node-link{display:flex;align-items:center;gap:8px;width:calc(100% + 16px);margin:0 -8px;padding:5px 8px;border-radius:7px;text-align:left;font-size:12.5px}.node-link:hover{background:var(--kg-hover)}.node-link[aria-current="true"]{background:var(--kg-hover);box-shadow:inset 0 0 0 1px var(--kg-border-strong)}.node-link .sdot{width:8px;height:8px;border-radius:50%;flex:none;background:var(--fam-base)}.node-link .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}.node-link .meta{flex:none;color:var(--kg-text-3);font-size:11.5px}.comp{display:grid;gap:6px}.comp-row{display:flex;align-items:center;gap:8px;font-size:12.5px;flex-wrap:wrap}.comp-row .arrow{color:var(--kg-text-3)}.comp-row .note{color:var(--kg-text-3);font-size:11.5px}.bars{display:grid;gap:6px}.bar-row{display:grid;grid-template-columns:84px minmax(0,1fr) 40px;align-items:center;gap:10px;font-size:12px}.bar-row .lbl{color:var(--kg-text-2)}.bar-row .track{height:6px;border-radius:3px;background:var(--kg-track);overflow:hidden}.bar-row .fill{height:100%;border-radius:3px;background:var(--kg-identity)}.bar-row .v{text-align:right;color:var(--kg-text-2);font-variant-numeric:tabular-nums}.note-line{font-size:12px;color:var(--kg-text-3);margin-top:6px}.menu{position:absolute;z-index:10;top:48px;right:10px;width:240px;padding:6px;border-radius:12px;animation:pop var(--kg-fast) var(--kg-ease)}@keyframes pop{from{opacity:0;transform:translateY(-4px) scale(0.98)}}.menu-group + .menu-group{margin-top:4px;padding-top:4px;border-top:1px solid var(--kg-border)}.menu-label{padding:6px 8px 4px;font-size:11px;font-weight:650;letter-spacing:0.06em;text-transform:uppercase;color:var(--kg-text-3)}.menu-item{display:flex;align-items:center;gap:8px;width:100%;height:32px;padding:0 8px;border-radius:7px;font-size:13px;color:var(--kg-text);text-align:left}.menu-item:hover,.menu-item:focus-visible{background:var(--kg-hover);outline:none}.menu-item .icon{color:var(--kg-text-2)}.menu-item .check{margin-left:auto;color:var(--kg-accent-text);opacity:0}.menu-item[aria-checked="true"] .check{opacity:1}.menu-item .sw{display:inline-flex;gap:2px}.menu-item .sw i{width:6px;height:6px;border-radius:50%;display:block}.overlay-scrim{position:absolute;inset:0;z-index:20;display:flex;align-items:center;justify-content:center;padding:24px;background:var(--kg-scrim);animation:fade var(--kg-fast) var(--kg-ease)}@keyframes fade{from{opacity:0}}.dialog{width:min(640px,100%);max-height:100%;display:flex;flex-direction:column;border-radius:14px;animation:pop var(--kg-base) var(--kg-ease)}.dialog-head{display:flex;align-items:center;gap:10px;padding:14px 12px 10px 20px}.dialog-head h2{margin:0;font-size:15px;font-weight:650}.dialog-head .icon-btn{margin-left:auto}.dialog-body{padding:0 20px 18px}.keys{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 24px}.key-row{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:34px;border-bottom:1px solid var(--kg-border);font-size:12.5px;color:var(--kg-text-2)}.key-row .ks{display:inline-flex;align-items:center;gap:3px;flex:none;color:var(--kg-text-3);font-size:11px}.root[data-chrome="none"] .header,.root[data-chrome="none"] .sidebar,.root[data-chrome="none"] .caption,.root[data-chrome="none"] .transport,.root[data-chrome="none"] .finished,.root[data-chrome="none"] .stepper,.root[data-chrome="none"] .map-cluster,.root[data-chrome="none"] .side-chip{display:none !important}.stage-wrap[data-selectable="false"] .tooltip .t-hint{display:none}.root[data-compact="true"] .body{flex-direction:column}.root[data-compact="true"] .sidebar{width:auto;height:var(--sheet-h,40%);min-height:0;border-left:0;border-top:1px solid var(--kg-border);border-radius:14px 14px 0 0;margin-top:-14px;box-shadow:0 -8px 24px rgba(0,0,0,0.18);transition:height var(--kg-base) var(--kg-ease)}.root[data-compact="true"] .sidebar.dragging{transition:none}.root[data-compact="true"] .sidebar[data-open="false"]{height:0;border-top-color:transparent;box-shadow:none}.root[data-compact="true"] .sidebar-inner{width:100%}.root[data-compact="true"] .sheet-handle{display:flex;flex:none;justify-content:center;align-items:center;height:28px;cursor:ns-resize;touch-action:none;border-radius:14px 14px 0 0}.root[data-compact="true"] .sheet-handle::before{content:"";width:36px;height:4px;border-radius:2px;background:var(--kg-control-border)}.root[data-compact="true"] .sb-head{padding-top:4px}.root[data-compact="true"] .seg .lbl{display:none}.root[data-compact="true"] .seg{padding:0 9px}.root[data-compact="true"] .versions,.root[data-compact="true"] .header-sep,.root[data-compact="true"] .stats,.root[data-compact="true"] .brand-name{display:none}.root[data-compact="true"] .header-center{flex:1;justify-content:flex-start}.root[data-compact="true"] .header-end{flex:none}.root[data-compact="true"] .minimap-host,.root[data-compact="true"] .legend{display:none}.root[data-compact="true"] .map-cluster{top:52px;bottom:auto;right:12px}.root[data-compact="true"] .transport{bottom:24px;width:calc(100% - 24px);min-width:0}.root[data-compact="true"] .transport .pos{min-width:48px}.root[data-compact="true"] .detail{max-height:50%}.root[data-compact="true"] .caption{max-width:calc(100% - 24px)}.root[data-narrow="true"] .stats{display:none}.root[data-narrow="true"] .versions .tag,.root[data-narrow="true"] .versions .arrow{display:none}@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:1ms !important;animation-iteration-count:1 !important;transition-duration:1ms !important}.skeleton-grid,.shimmer{animation:none}}`,jl=[{mode:`overlay`,icon:`overlay`,key:`1`},{mode:`swipe`,icon:`swipe`,key:`2`},{mode:`replay`,icon:`replay`,key:`3`},{mode:`changes`,icon:`changes`,key:`4`}],Ml=[{id:`added`,family:`added`,families:[`added`],glyph:`+`},{id:`removed`,family:`removed`,families:[`removed`],glyph:`−`},{id:`modified`,family:`content`,families:[`content`],glyph:`~`},{id:`restructured`,family:`structure`,families:[`structure`,`identity`],glyph:`⇄`}];function Nl(){let e=document.createElement(`template`);return e.innerHTML=`<svg class="brand-mark" viewBox="0 0 20 20" aria-hidden="true" focusable="false"><rect x="4.1" y="4.1" width="11.8" height="11.8" rx="3.2" transform="rotate(45 10 10)" fill="var(--kg-accent-soft)" stroke="var(--kg-accent)" stroke-width="1.5"/><circle cx="10" cy="10" r="2.4" fill="var(--kg-accent)"/></svg>`,e.content.firstElementChild}var Pl=class{el;#e;#t;#n;#r=new Map;#i;#a=new Map;menuButton;#o;#s;#c;#l;#u;constructor(e){this.#u=e;let t=e.controller;this.#l=K(`div`,{class:`brand`},Nl(),K(`span`,{class:`brand-name`,text:`kgdiff`})),this.#e=K(`div`,{class:`versions`}),this.#n=K(`span`,{class:`thumb`,"aria-hidden":`true`}),this.#t=K(`div`,{class:`segmented`,role:`radiogroup`},this.#n);for(let t of jl){let n=K(`button`,{type:`button`,class:`seg`,role:`radio`,"data-mode":t.mode,onclick:()=>e.setMode(t.mode)},X(t.icon),K(`span`,{class:`lbl`}));this.#r.set(t.mode,n),this.#t.appendChild(n)}this.#t.addEventListener(`keydown`,e=>this.#h(e)),this.#i=K(`div`,{class:`stats`,role:`group`});for(let e of Ml){let n=K(`button`,{type:`button`,class:`pill stat`,"data-family":e.family,"aria-pressed":`false`,onclick:()=>t.setFamilies(e.families)},K(`span`,{class:`glyph`,"aria-hidden":`true`,text:e.glyph}),K(`span`,{class:`n`}));this.#a.set(e.id,n),this.#i.appendChild(n)}this.menuButton=Z(`contrast`,``,()=>e.toggleMenu(),{"aria-haspopup":`menu`,"aria-expanded":`false`}),this.#o=Z(`fit`,``,()=>void t.fit()),this.#s=Z(`help`,``,()=>e.openHelp()),this.#c=Z(`sidebar`,``,()=>e.toggleSidebar()),this.el=K(`header`,{class:`header`},this.#l,K(`span`,{class:`header-sep`,"aria-hidden":`true`}),this.#e,K(`div`,{class:`header-center`},this.#t),K(`div`,{class:`header-end`},this.#i,this.menuButton,this.#o,this.#s,this.#c))}update(e){let t=this.#u.tr();if(e.has(`locale`)||e.has(`data`)||e.has(`status`)){J(this.#l,`title`,`kgdiff — ${t.t(`brand.tagline`)}`),J(this.#t,`aria-label`,t.t(`mode.label`)),J(this.#i,`aria-label`,t.t(`stat.label`));for(let e of jl){let n=this.#r.get(e.mode),r=t.t(`mode.${e.mode}`);Y(n.querySelector(`.lbl`),r),J(n,`title`,`${r} (${e.key})`),J(n,`aria-label`,r)}Q(this.menuButton,t.t(`action.settings`)),Q(this.#o,`${t.t(`action.fit`)} (F)`),Q(this.#s,`${t.t(`action.help`)} (?)`),Q(this.#c,`${t.t(`action.sidebar`)} (\\)`),this.#d(),this.#f()}(e.has(`mode`)||e.has(`status`)||e.has(`locale`))&&this.#m(),(e.has(`filters`)||e.has(`data`))&&this.#p()}layout(){this.#m()}setSidebarState(e){J(this.#c,`aria-pressed`,String(e))}setMenuState(e){J(this.menuButton,`aria-expanded`,String(e))}#d(){let e=this.#u.controller.data;if(!e){q(this.#e);return}let t=this.#u.tr(),{names:n,versions:r}=e,i=e=>e?K(`span`,{class:`tag`,title:e,text:e}):null,a=()=>K(`span`,{class:`arrow`,"aria-hidden":`true`,text:`→`});J(this.#e,`aria-label`,t.t(`header.compare`)),J(this.#e,`role`,`group`),n.before===n.after?q(this.#e,K(`span`,{class:`name`,title:e.title??n.after,text:e.title??n.after}),r.before||r.after?K(`span`,{class:`side`},i(r.before??`—`),a(),i(r.after??`—`)):null):q(this.#e,K(`span`,{class:`side`},K(`span`,{class:`name`,title:n.before,text:n.before}),i(r.before)),a(),K(`span`,{class:`side`},K(`span`,{class:`name`,title:n.after,text:n.after}),i(r.after)))}#f(){let e=this.#u.controller.scene,t=this.#u.tr(),n=e?lc(e):null,r={added:n?.added??0,removed:n?.removed??0,modified:n?.content??0,restructured:(n?.structure??0)+(n?.identity??0)};this.#i.hidden=!e||e.hunks.length===0;for(let e of Ml){let n=this.#a.get(e.id),i=r[e.id];n.hidden=i===0,Y(n.querySelector(`.n`),t.num(i));let a=`${t.t(`stat.${e.id}`,{n:i})} — ${t.t(`stat.filter`)}`;J(n,`aria-label`,a),J(n,`title`,a)}}#p(){let e=this.#u.controller.families;this.#i.classList.toggle(`filtering`,e.size>0);for(let t of Ml){let n=e.size===t.families.length&&t.families.every(t=>e.has(t));J(this.#a.get(t.id),`aria-pressed`,String(n))}}#m(){let e=this.#u.controller.mode;for(let[t,n]of this.#r){let r=t===e;J(n,`aria-checked`,String(r)),n.tabIndex=r?0:-1}let t=this.#r.get(e);t&&t.offsetWidth>0&&(this.#n.style.width=`${t.offsetWidth}px`,this.#n.style.transform=`translateX(${t.offsetLeft}px)`)}#h(e){if(e.key!==`ArrowLeft`&&e.key!==`ArrowRight`)return;e.preventDefault(),e.stopPropagation();let t=jl[(jl.findIndex(e=>e.mode===this.#u.controller.mode)+(e.key===`ArrowRight`?1:jl.length-1))%jl.length];t&&(this.#u.setMode(t.mode),this.#r.get(t.mode)?.focus())}},Fl=class{el;#e=null;#t;constructor(e){this.#t=e,this.el=K(`div`,{class:`menu card`,role:`menu`,hidden:!0,tabindex:`-1`}),this.el.addEventListener(`keydown`,e=>this.#r(e))}get open(){return!this.el.hidden}show(e){this.#e=e,this.render(),this.el.hidden=!1,this.el.querySelector(`[aria-checked="true"]`)?.focus()}hide(e=!0){this.el.hidden||(this.el.hidden=!0,e&&this.#e?.focus())}render(){let e=this.#t.tr(),t=this.#t.controller,n=t=>()=>e.t(t),r=e=>{let n=co(t.themeName,e).family;return Ol.map(e=>n[e].base)},i=[{value:`auto`,label:n(`theme.auto`),icon:`monitor`},{value:`light`,label:n(`theme.light`),icon:`sun`},{value:`dark`,label:n(`theme.dark`),icon:`moon`}],a=[{value:`default`,label:n(`palette.default`),swatch:r(`default`)},{value:`colorblind`,label:n(`palette.colorblind`),swatch:r(`colorblind`)}];J(this.el,`aria-label`,e.t(`action.settings`)),ol(this.#t.root,this.el,this.el,this.#n(e.t(`menu.theme`),i,t.themePreference,e=>this.#t.setThemePreference(e)),this.#n(e.t(`menu.palette`),a,t.palette,e=>this.#t.setPalette(e)),this.#n(e.t(`menu.language`),[{value:`en`,label:()=>`English`},{value:`zh-CN`,label:()=>`简体中文`}],t.locale,e=>this.#t.setLocale(e)))}#n(e,t,n,r){return K(`div`,{class:`menu-group`,role:`group`,"aria-label":e},K(`div`,{class:`menu-label`,"aria-hidden":`true`,text:e}),t.map(e=>K(`button`,{type:`button`,class:`menu-item`,role:`menuitemradio`,"data-focus-key":e.value,"aria-checked":String(e.value===n),tabindex:`-1`,onclick:()=>{r(e.value),this.render(),this.el.querySelector(`[aria-checked="true"]`)?.focus()}},e.icon?X(e.icon):null,e.swatch?K(`span`,{class:`sw`,"aria-hidden":`true`},e.swatch.map(e=>K(`i`,{style:`background:${e}`}))):null,K(`span`,{text:e.label()}),X(`check`,`icon check`))))}#r(e){let t=[...this.el.querySelectorAll(`.menu-item`)],n=t.indexOf(this.#t.root.activeElement),r=-1;if(e.key===`ArrowDown`)r=(n+1)%t.length;else if(e.key===`ArrowUp`)r=(n-1+t.length)%t.length;else if(e.key===`Home`)r=0;else if(e.key===`End`)r=t.length-1;else if(e.key===`Escape`||e.key===`Tab`){e.key===`Escape`&&e.preventDefault(),e.stopPropagation(),this.hide(e.key===`Escape`);return}else return;e.preventDefault(),e.stopPropagation(),t[r]?.focus()}},Il=[[[[`1`],[`2`],[`3`],[`4`]],[`mode.overlay`,`mode.swipe`,`mode.replay`,`mode.changes`]],[[[`j`],[`↓`]],`detail.next`],[[[`k`],[`↑`]],`detail.prev`],[[[`Home`],[`End`]],`help.homeEnd`],[[[`Enter`]],`help.enter`],[[[`Esc`]],`help.esc`],[[[`Space`]],`help.space`],[[[`←`],[`→`]],`help.arrows`],[[[`f`]],`action.fit`],[[[`+`],[`−`]],[`action.zoomIn`,`action.zoomOut`]],[[[`/`]],`sidebar.search`],[[[`x`]],`review.mark`],[[[`\\`]],`action.sidebar`],[[[`t`]],`help.theme`],[[[`e`]],`help.expand`],[[[`?`]],`action.help`]],Ll=class{el;#e=null;#t;constructor(e){this.#t=e,this.el=K(`div`,{class:`overlay-scrim`,hidden:!0}),this.el.addEventListener(`click`,e=>{e.target===this.el&&this.hide()}),this.el.addEventListener(`keydown`,e=>{e.key===`Escape`||e.key===`?`?(e.preventDefault(),e.stopPropagation(),this.hide()):e.key===`Tab`&&(e.preventDefault(),this.el.querySelector(`.icon-btn`)?.focus())})}get open(){return!this.el.hidden}show(){this.#e=this.#t.root.activeElement,this.render(),this.el.hidden=!1,this.el.querySelector(`.icon-btn`)?.focus()}hide(){this.el.hidden||(this.el.hidden=!0,this.#e?.focus?.())}render(){let e=this.#t.tr(),t=e=>K(`span`,{class:`ks`},e.map((e,t)=>[t>0?K(`span`,{"aria-hidden":`true`,text:`/`}):null,e.map(e=>K(`kbd`,{text:e}))])),n=Il.map(([n,r])=>K(`div`,{class:`key-row`},K(`span`,{text:typeof r==`string`?e.t(r):r.map(t=>e.t(t)).join(` / `)}),t(n)));ol(this.#t.root,this.el,null,K(`div`,{class:`dialog card`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`kg-help-title`},K(`div`,{class:`dialog-head`},K(`h2`,{id:`kg-help-title`,text:e.t(`help.title`)}),Z(`close`,e.t(`help.close`),()=>this.hide(),{"data-focus-key":`close`})),K(`div`,{class:`dialog-body`},K(`div`,{class:`keys`},n))))}};function Rl(e,t){switch(e){case`add`:return`+`;case`remove`:return`−`;case`merge`:return`⊕`;case`split`:return`⑂`;case`relations`:return`⇄`;case`modify`:return t===`structure`?`⇄`:t===`identity`?`≡`:`~`;default:return`~`}}function zl(e){return Rl(e.kind,e.family)}function Bl(e){return e===void 0?``:e===null?`null`:typeof e==`string`?e:typeof e==`number`||typeof e==`boolean`?String(e):Array.isArray(e)?e.map(e=>Bl(e)).join(`, `):JSON.stringify(e)}function Vl(e){if(!Array.isArray(e))return null;let t=[];for(let n of e){if(typeof n==`object`&&n)return null;t.push(Bl(n))}return t}var Hl=1024;function Ul(e,t){let n=0;for(;n<e.length&&n<t.length&&e[n]===t[n];)n++;let r=e.length,i=t.length;for(;r>n&&i>n&&e[r-1]===t[i-1];)r--,i--;let a=[],o=(e,t)=>{let n=a[a.length-1];n!==void 0&&n.op===e?n.items.push(t):a.push({op:e,items:[t]})};for(let t=0;t<n;t++)o(`equal`,e[t]);let s=Wl(e.slice(n,r),t.slice(n,i));for(let[e,t]of s)o(e,t);for(let t=r;t<e.length;t++)o(`equal`,e[t]);return Gl(a)}function Wl(e,t){let n=e.length,r=t.length;if(n===0)return t.map(e=>[`insert`,e]);if(r===0)return e.map(e=>[`delete`,e]);let i=n+r,a=Math.min(i,Hl),o=i,s=new Int32Array(2*i+2),c=[],l=-1;for(let i=0;i<=a;i++){c.push(s.slice(o-i,o+i+1));for(let a=-i;a<=i;a+=2){let c;c=a===-i||a!==i&&s[o+a-1]<s[o+a+1]?s[o+a+1]:s[o+a-1]+1;let u=c-a;for(;c<n&&u<r&&e[c]===t[u];)c++,u++;if(s[o+a]=c,c>=n&&u>=r){l=i;break}}if(l>=0)break}if(l<0)return[...e.map(e=>[`delete`,e]),...t.map(e=>[`insert`,e])];let u=[],d=n,f=r;for(let n=l;n>0;n--){let r=c[n],i=e=>r[e+n],a=d-f,o=a===-n||a!==n&&i(a-1)<i(a+1),s=o?a+1:a-1,l=i(s),p=l-s;for(;d>l&&f>p;)u.push([`equal`,e[d-1]]),d--,f--;o?u.push([`insert`,t[f-1]]):u.push([`delete`,e[d-1]]),d=l,f=p}for(;d>0&&f>0;)u.push([`equal`,e[d-1]]),d--,f--;return u.reverse()}function Gl(e){let t=[],n=[],r=[],i=()=>{n.length&&t.push({op:`delete`,items:n}),r.length&&t.push({op:`insert`,items:r}),n=[],r=[]};for(let a of e){if(a.op===`equal`){i(),t.push(a);continue}let e=a.op===`delete`?n:r;for(let t of a.items)e.push(t)}return i(),t}function Kl(e){return e.map(e=>({op:e.op,text:e.items.join(``)}))}function ql(e,t=3){let n=[],r=``,i=``,a=()=>{r&&n.push({op:`delete`,text:r}),i&&n.push({op:`insert`,text:i}),r=``,i=``};for(let o=0;o<e.length;o++){let s=e[o];if(s.op===`delete`)r+=s.text;else if(s.op===`insert`)i+=s.text;else{let c=o>0&&o<e.length-1&&(r!==``||i!==``),l=[...s.text].length<t&&s.text.trim().length<=t;c&&l&&Jl(e,o)?(r+=s.text,i+=s.text):(a(),n.push(s))}}return a(),n}function Jl(e,t){let n=e[t+1];return n!==void 0&&n.op!==`equal`}function Yl(e,t){return ql(Kl(Ul(Array.from(e),Array.from(t))))}var Xl=/\s+|[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}]|[\p{L}\p{N}\p{M}_'’-]+|[^\s]/gu;function Zl(e){return e.match(Xl)??[]}function Ql(e,t){return ql(Kl(Ul(Zl(e),Zl(t))),2)}var $l=.5,eu=400;function tu(e,t){let n=0;for(let r of Ul(e,t))r.op===`equal`&&(n+=r.items.length);return 2*n/(e.length+t.length)}function nu(e,t){let n=[];if(e.length===1&&t.length===1)n.push([1,0,0]);else if(e.length*t.length<=eu){let r=t.map(e=>Array.from(e));e.forEach((e,t)=>{let i=Array.from(e);r.forEach((e,r)=>{let a=tu(i,e);a>=$l&&n.push([a,t,r])})}),n.sort((e,t)=>t[0]-e[0]||e[1]-t[1]||e[2]-t[2])}let r=new Set,i=new Set,a=[];for(let[,e,t]of n)r.has(e)||i.has(t)||(r.add(e),i.add(t),a.push([e,t]));return a.sort((e,t)=>e[0]-t[0]),{pairs:a.map(([n,r])=>[e[n],t[r]]),removed:e.filter((e,t)=>!r.has(t)),added:t.filter((e,t)=>!i.has(t))}}var ru=12,iu=12,au=180,ou=60;function su(e,t,...n){return K(`section`,{class:`section`},K(`h3`,null,e,t===null?null:K(`span`,{class:`n`,text:String(t)})),...n)}function cu(e){let t=K(`dl`,{class:`kv`});for(let[n,r]of e)t.append(K(`dt`,{text:n}),K(`dd`,null,...[r].flat()));return t}function lu(e,t){let n=[];for(let r of e)r.op===`equal`?n.push(r.text):r.op===`delete`&&t===`before`?n.push(K(`del`,{class:`hl`,text:r.text})):r.op===`insert`&&t===`after`&&n.push(K(`ins`,{class:`hl`,text:r.text}));return n}function $(e,t){let n=t===`add`?`+`:t===`del`?`−`:``;return K(`span`,{class:`vchip${t===`same`?``:` ${t}`}`},n?K(`span`,{class:`sign`,"aria-hidden":`true`,text:n}):null,e)}function uu(e,t,n=[]){return K(`div`,{class:`chips`},t.map(e=>$(e,`del`)),e.map(e=>$(e,`add`)),n.map(e=>$(e,`same`)))}function du(e,t,n){return K(`div`,{class:`pair`},K(`span`,{class:`b`},e),K(`span`,{class:`arr`,"aria-hidden":`true`,text:`→`}),K(`span`,{class:`sr-only`,text:n.t(`detail.changedTo`)}),K(`span`,null,t))}function fu(e,t,n){let r=Yl(e,t);return du(lu(r,`before`),lu(r,`after`),n)}function pu(e,t){return K(`div`,{class:`line ${e}`},K(`span`,{class:`sign`,"aria-hidden":`true`,text:e===`old`?`−`:`+`}),K(`div`,null,t))}function mu(e,t,n,r=[]){let i=nu(t,e),a=i.pairs.map(([e,t])=>fu(e,t,n));return(i.added.length>0||i.removed.length>0||r.length>0)&&a.push(uu(i.added,i.removed,r)),a}function hu(e,t=`attrs`){return K(`table`,{class:t},K(`colgroup`,null,K(`col`,{class:`k`}),K(`col`)),K(`tbody`,null,e.map(([e,t])=>K(`tr`,null,K(`td`,{class:`k`,text:e}),K(`td`,null,t)))))}function gu(e){if(e.status===`added`)return`added`;if(e.status===`removed`)return e.facets.some(e=>e.kind===`collapsed`)?`identity`:`removed`;for(let t of e.facets){if(t.kind===`retarget`)return t.cause===`merge`||t.cause===`split`?`identity`:`structure`;if(t.kind===`predicate`)return`structure`}return e.status===`modified`?`content`:`neutral`}var _u=class{el;#e;#t=!1;#n=!1;#r=!1;#i=new Set;#a=``;#o;constructor(e){this.#o=e,this.#e=K(`div`,{class:`detail-scroll scroll`,tabindex:`-1`}),this.el=K(`section`,{class:`detail`,"data-empty":`true`},this.#e)}update(e){(e.has(`selection`)||e.has(`data`)||e.has(`locale`)||e.has(`review`)||e.has(`status`)||e.has(`filters`))&&this.#s()}#s(){let e=this.#o.controller,t=this.#o.tr();J(this.el,`aria-label`,t.t(`detail.label`));let n=e.scene,r=e.diff;if(this.el.hidden=e.status!==`ready`||!n||!r||n.hunks.length===0&&e.selectedNode<0,this.el.hidden||!n||!r)return;let i=`${e.selectedHunk}|${e.selectedNode}`;if(i!==this.#a&&(this.#a=i,this.#t=!1,this.#n=!1,this.#r=!1,this.#i.clear(),this.#e.scrollTop=0),e.selectedHunk<0&&e.selectedNode<0){J(this.el,`data-empty`,`true`),ol(this.#o.root,this.#e,this.#e,K(`div`,{class:`detail-empty`},X(`changes`),K(`div`,null,K(`div`,{text:t.t(`detail.empty`)}),K(`div`,{class:`sub`,text:t.t(`detail.emptyHint`)}))));return}J(this.el,`data-empty`,`false`);let a=e.selectedHunk>=0?n.hunks[e.selectedHunk]:void 0;a?this.#l(a,n,r,t):this.#u(n,r,t)}#c(e,t){let n=this.#o.controller,r=[];if(t){let i=n.isReviewed(t.id);r.push(K(`button`,{type:`button`,class:`rv-btn`,"data-focus-key":`review`,"aria-pressed":String(i),title:`${e.t(i?`review.unmark`:`review.mark`)} (X)`,onclick:()=>n.toggleReviewed(t.id)},K(`span`,{class:`ring`},X(`check`)),e.t(`review.toggle`)))}let i=t?n.list.rank.get(t.index):void 0,a=Z(`chevron-up`,`${e.t(`detail.prev`)} (K)`,()=>n.prev(),{class:`icon-btn sm`,"data-focus-key":`prev`}),o=Z(`chevron-down`,`${e.t(`detail.next`)} (J)`,()=>n.next(),{class:`icon-btn sm`,"data-focus-key":`next`});return a.disabled=i===0||n.list.order.length===0,o.disabled=i!==void 0&&i>=n.list.order.length-1||n.list.order.length===0,r.push(a,o),K(`div`,{class:`d-nav`},...r)}#l(e,t,n,r){let i=this.#o.controller,a=n.index.hunk(e.id),o=i.selectedNode>=0&&e.nodes.includes(i.selectedNode)?i.selectedNode:e.anchor,s=o>=0?t.nodes[o]?.id:a?.anchor,c=s===void 0?void 0:n.index.node(s),l=[K(`div`,{class:`d-top`},K(`span`,{class:`fam-pill`,"data-family":e.family},K(`span`,{class:`g`,"aria-hidden":`true`,text:zl(e)}),r.t(`kind.${e.kind}`)),this.#c(r,e)),K(`h2`,{class:`d-title`,text:e.title}),e.subtitle?K(`div`,{class:`d-sub`,text:e.subtitle}):null],u=a?.nodes??[];u.length>1&&l.push(this.#d(u,s,t,n,r));let[d,f]=c?this.#p(c,n,r,u.length>1,!0):[[],[]],p=(a?.edges??[]).map(e=>n.index.edge(e)).filter(e=>e!==void 0);l.push(...d),p.length>0&&l.push(this.#x(p,s,t,n,r,!0)),l.push(...f),ol(this.#o.root,this.#e,this.#e,...l)}#u(e,t,n){let r=this.#o.controller,i=e.nodes[r.selectedNode],a=i?t.index.node(i.id):void 0;if(!i||!a){ol(this.#o.root,this.#e,this.#e);return}let o=t.index.edgesOf(a.id),[s,c]=this.#p(a,t,n,!1,!1);ol(this.#o.root,this.#e,this.#e,K(`div`,{class:`d-top`},K(`span`,{class:`fam-pill`,"data-family":i.family},K(`span`,{class:`g`,"aria-hidden":`true`,text:`·`}),n.t(a.status===`unchanged`?`detail.unchangedNode`:`status.${a.status}`)),this.#c(n,void 0)),K(`h2`,{class:`d-title`,text:a.label}),...s,o.length>0?this.#x(o,a.id,e,t,n,!1):null,...c)}#d(e,t,n,r,i){let a=this.#o.controller,o=this.#r?e:e.slice(0,ru),s=K(`div`,{class:`nodes`});for(let e of o){let o=r.index.node(e),c=n.nodeIndex.get(e),l=c===void 0?`neutral`:n.nodes[c]?.family??`neutral`;s.appendChild(K(`button`,{type:`button`,class:`node-link`,"data-focus-key":`node:${e}`,"data-family":l,"aria-current":String(e===t),onclick:()=>{c!==void 0&&a.selectNode(c,{fly:!0})}},K(`span`,{class:`sdot`,"aria-hidden":`true`}),K(`span`,{class:`lbl`,text:o?.label??e,title:o?.label??e}),K(`span`,{class:`meta`,text:o?i.t(`status.${o.status}`):``})))}return su(i.t(`detail.nodes`),e.length,s,e.length>ru?this.#f(i,this.#r,()=>{this.#r=!this.#r,this.#s()}):null)}#f(e,t,n){return K(`button`,{type:`button`,class:`disclosure`,"data-focus-key":`nodes-more`,"aria-expanded":String(t),onclick:n},e.t(t?`detail.showLess`:`detail.showMore`),X(`chevron-down`))}#p(e,t,n,r,i){let a=e=>t.index.node(e)?.label??e,o=e.status===`modified`||i&&e.status===`unchanged`,s=this.#m(e,t,n,a),c=this.#v(e,t,n,a),l=this.#y(e,t,n,a),u=this.#g(e,n,r,o),d=e=>e.filter(e=>e!==null);return o?[d([c,s]),d([l,...u])]:[d([...u,s,c,l]),[]]}#m(e,t,n,r){let i=e=>e.map(e=>(t.index.nodeByAfter(e)??t.index.nodeByBefore(e))?.label??e),a=[];for(let t of e.facets)switch(t.kind){case`rekey`:a.push([n.t(`detail.id`),[K(`div`,{class:`id-text`},fu(t.from,t.to,n)),t.score<1?K(`div`,{class:`note-line`,text:n.t(`detail.matchScore`,{p:nc(t.score)})}):null]]);break;case`rename`:a.push([n.t(`detail.name`),fu(t.from,t.to,n)]);break;case`types`:case`aliases`:a.push([n.t(`detail.${t.kind}`),mu(t.added,t.removed,n)]);break;case`attrs`:for(let r of t.changes)a.push([r.key,this.#h(e.id,r,n)]);break;case`move`:a.push([n.t(`detail.hierarchy`),mu(t.to.map(r),t.from.map(r),n)]);break;case`deprecate`:a.push([n.t(`detail.status`),K(`strong`,{text:n.t(t.deprecated?`detail.deprecated`:`detail.undeprecated`)})]);break;case`replacement`:for(let[e,r]of[[`detail.replacedBy`,t.replacedBy],[`detail.replaces`,t.replaces]])(r.added.length>0||r.removed.length>0)&&a.push([n.t(e),mu(i(r.added),i(r.removed),n)])}return a.length>0?su(n.t(`detail.changes`),a.length,hu(a,`attrs changes`)):null}#h(e,t,n){let r=Vl(t.before),i=Vl(t.after);if(r&&i){let e=new Set(r),t=new Set(i);return mu(i.filter(t=>!e.has(t)),r.filter(e=>!t.has(e)),n,i.filter(t=>e.has(t)))}let a=`${e}|${t.key}`,o=Bl(t.before),s=Bl(t.after);if(t.before===void 0){let e=K(`ins`,{class:`hl`,text:s});return[pu(`new`,this.#_(`${a}|a`,s,n,[e]))]}if(t.after===void 0){let e=K(`del`,{class:`hl`,text:o});return[pu(`old`,this.#_(`${a}|b`,o,n,[e]))]}let c=typeof t.before==`string`&&typeof t.after==`string`?Ql(o,s):[{op:`delete`,text:o},{op:`insert`,text:s}],l=lu(c,`before`),u=lu(c,`after`);return o.length+s.length<=ou&&!/\n/.test(o+s)?[du(l,u,n)]:[pu(`old`,this.#_(`${a}|b`,o,n,l)),pu(`new`,this.#_(`${a}|a`,s,n,u))]}#g(e,t,n,r){let i=t=>e.facets.some(e=>e.kind===t),a=e.after??e.before,o=[];n&&!i(`rename`)&&o.push([t.t(`detail.name`),e.label]),i(`rekey`)||o.push([t.t(`detail.id`),K(`span`,{class:`id-text`,text:e.afterId??e.beforeId??e.id})]),!i(`types`)&&e.types.length>0&&o.push([t.t(`detail.types`),uu([],[],e.types)]),!i(`aliases`)&&a&&a.aliases.length>0&&o.push([t.t(`detail.aliases`),uu([],[],a.aliases)]);let s=[t.t(`status.${e.status}`)];a?.deprecated&&!i(`deprecate`)&&s.push(` · ${t.t(`detail.deprecated`)}`),a?.implicit&&s.push(` · ${t.t(`detail.implicit`)}`),o.push([t.t(`detail.status`),s]);let c=a?.attrs??{},l=new Set;for(let t of e.facets)if(t.kind===`attrs`)for(let e of t.changes)l.add(e.key);let u=Object.keys(c).filter(e=>!l.has(e)).sort(),d=()=>hu(u.map(n=>[n,this.#_(`${e.id}|u|${n}`,Bl(c[n]),t)]));if(!r){let e=[su(t.t(`detail.identity`),null,cu(o))];return u.length>0&&e.push(su(t.t(`detail.attributes`),null,d())),e}return[su(t.t(`detail.identity`),null,cu(o),u.length>0?K(`button`,{type:`button`,class:`disclosure`,"data-focus-key":`attrs-more`,"aria-expanded":String(this.#t),onclick:()=>{this.#t=!this.#t,this.#s()}},t.plural(`detail.unchangedAttrs`,u.length),X(`chevron-down`)):null,u.length>0&&this.#t?d():null)]}#_(e,t,n,r){let i=t.length>au,a=this.#i.has(e),o=K(`div`,{class:`val${i&&!a?` clamped`:``}`},...r??[t]);return i?K(`div`,null,o,K(`button`,{type:`button`,class:`link-btn more`,"data-focus-key":`value:${e}`,text:n.t(a?`detail.showLess`:`detail.showMore`),onclick:()=>{a?this.#i.delete(e):this.#i.add(e),this.#s()}})):o}#v(e,t,n,r){let i=[],a=(e,t)=>e===`hint`?n.t(`detail.viaHint`):`${n.t(`detail.viaHeuristic`)} · ${n.t(`detail.confidence`,{p:nc(t)})}`;for(let o of e.facets)switch(o.kind){case`mergedInto`:i.push(K(`div`,{class:`comp-row`},$(e.label,`del`),K(`span`,{class:`arrow`,"aria-hidden":`true`,text:`→`}),$(r(o.target),`same`),K(`span`,{class:`note`,text:a(o.via,o.confidence)})));break;case`mergeTarget`:{let s=o.sources.map(e=>{let n=t.index.node(e)?.facets.find(e=>e.kind===`mergedInto`);return n&&n.kind===`mergedInto`?a(n.via,n.confidence):``});i.push(K(`div`,{class:`comp-row`},K(`span`,{class:`note`,text:n.t(`detail.mergedFrom`)}))),o.sources.forEach((t,n)=>{i.push(K(`div`,{class:`comp-row`},$(r(t),`del`),K(`span`,{class:`arrow`,"aria-hidden":`true`,text:`→`}),$(e.label,`same`),s[n]?K(`span`,{class:`note`,text:s[n]}):null))});break}case`splitFrom`:i.push(K(`div`,{class:`comp-row`},$(r(o.source),`same`),K(`span`,{class:`arrow`,"aria-hidden":`true`,text:`→`}),$(e.label,`add`),K(`span`,{class:`note`,text:a(o.via,o.confidence)})));break;case`splitInto`:i.push(K(`div`,{class:`comp-row`},K(`span`,{class:`note`,text:n.t(`detail.splitInto`)})),K(`div`,{class:`comp-row`},$(e.label,`same`),K(`span`,{class:`arrow`,"aria-hidden":`true`,text:`→`}),o.targets.map(e=>$(r(e),`add`))))}return i.length?su(n.t(`detail.composition`),null,K(`div`,{class:`comp`},i)):null}#y(e,t,n,r){let i=[];if(e.facets.find(e=>e.kind===`rekey`)&&e.afterId!==void 0){let r=t.matches.find(t=>t.after===e.afterId);r?.method===`hint`?i.push(K(`div`,{class:`note-line`,text:n.t(`detail.matchHint`)})):r&&(i.push(K(`div`,{class:`note-line`,text:n.t(`detail.matchScore`,{p:nc(r.score)})})),r.evidence&&i.push(this.#b(r.evidence,n)))}let a=t.suggestions.filter(t=>e.beforeId!==void 0&&e.status===`removed`&&t.before===e.beforeId||e.afterId!==void 0&&e.status===`added`&&t.after===e.afterId);for(let o of a){let a=e.status===`removed`?t.index.nodeByAfter(o.after):t.index.nodeByBefore(o.before);i.push(K(`div`,{class:`comp-row`,style:`margin-top: 8px`},K(`span`,{class:`note`,text:n.t(`detail.suggestion`)}),$(a?r(a.id):e.status===`removed`?o.after:o.before,`same`),K(`span`,{class:`note`,text:`${n.t(`detail.matchScore`,{p:nc(o.score)})} · ${n.t(o.reason===`ambiguous`?`detail.suggestion.ambiguous`:`detail.suggestion.below`)}`})),this.#b(o.evidence,n))}return i.length?su(n.t(`detail.evidence`),null,...i):null}#b(e,t){return K(`div`,{class:`bars`,style:`margin-top: 8px`},[[t.t(`detail.evidence.label`),e.label],[t.t(`detail.evidence.neighbors`),e.neighbors],[t.t(`detail.evidence.types`),e.types],[t.t(`detail.evidence.attrs`),e.attrs]].map(([e,t])=>K(`div`,{class:`bar-row`},K(`span`,{class:`lbl`,text:e}),K(`span`,{class:`track`,role:`meter`,"aria-label":e,"aria-valuemin":`0`,"aria-valuemax":`100`,"aria-valuenow":String(Math.round(t*100))},K(`span`,{class:`fill`,style:`display:block; width: ${Math.round(Math.max(0,Math.min(1,t))*100)}%`})),K(`span`,{class:`v`,text:nc(t)}))))}#x(e,t,n,r,i,a){let o=a?e:[...e].sort((e,n)=>Number(e.source!==t)-Number(n.source!==t)),s=this.#n?o:o.slice(0,iu),c=K(`div`,{class:`rels`});for(let e of s)c.appendChild(this.#S(e,t,n,r,i));let l=o.length-s.length;return su(i.t(`detail.relations`),e.length,c,l>0||this.#n?K(`button`,{type:`button`,class:`disclosure`,"data-focus-key":`rels-more`,"aria-expanded":String(this.#n),onclick:()=>{this.#n=!this.#n,this.#s()}},this.#n?i.t(`detail.showLess`):i.plural(`detail.moreRelations`,l),X(`chevron-down`)):null)}#S(e,t,n,r,i){let a=this.#o.controller,o=e=>r.index.node(e)?.label??e,s=e=>K(`span`,{class:`node`,text:o(e)}),c=e=>K(`span`,{class:`was`,text:` (${i.t(`detail.was`,{x:i.quote(o(e))})})`}),l=e.facets.find(e=>e.kind===`retarget`),u=e.facets.find(e=>e.kind===`predicate`),d=e.facets.find(e=>e.kind===`label`),f=K(`span`,{class:`pred`,text:` —${e.label}→ `}),p=t!==void 0&&e.source===t&&e.target!==t,m=t!==void 0&&e.target===t&&e.source!==t,h=[];p?(h.push(K(`span`,{class:`pred`,text:`→ ${e.label} → `}),s(e.target)),l?.end===`target`&&h.push(c(l.from))):m?(h.push(K(`span`,{class:`pred`,text:`← ${e.label} ← `}),s(e.source)),l?.end===`source`&&h.push(c(l.from))):(h.push(s(e.source)),l?.end===`source`&&h.push(c(l.from)),h.push(f,s(e.target)),l?.end===`target`&&h.push(c(l.from)));let g=u?e.before?.label??u.from:d?d.from:void 0;g!==void 0&&h.push(K(`span`,{class:`was`,text:` (${i.t(`detail.was`,{x:i.quote(g)})})`})),e.facets.some(e=>e.kind===`attrs`)&&h.push(K(`span`,{class:`was`,text:` · ${i.t(`detail.edgeAttrs`)}`})),e.facets.some(e=>e.kind===`collapsed`)&&h.push(K(`span`,{class:`was`,text:` · ${i.t(`detail.collapsed`)}`}));let _=e.status===`added`?`+`:e.status===`removed`?`−`:e.status===`modified`?`~`:`·`,v=n.edgeIndex.get(e.id),y=gu(e);return K(`button`,{type:`button`,class:`rel ${e.status}`,"data-focus-key":`rel:${e.id}`,"data-family":y,title:i.t(`detail.showOnCanvas`),disabled:v===void 0,onclick:()=>{v!==void 0&&a.pinEdge(v)}},K(`span`,{class:`sign`,"aria-hidden":`true`,text:_}),K(`span`,{class:`s`},...h))}},vu=320,yu=50;function bu(e){return e.kind===`header`?32:56}var xu=class{el;detail;#e;#t;#n;#r;#i;searchInput;#a;#o;#s;#c=new Map;#l;list;#u;#d=K(`div`,{class:`sr-only`});#f;#p;#m;#h=[];#g=new Map;#_=!1;#v=``;#y=[];#b=0;#x;constructor(e){this.#x=e;let t=e.controller;this.#e=K(`h2`,{id:`kg-changes-title`}),this.#t=K(`span`,{class:`count-badge`}),this.#r=K(`span`),this.#i=K(`div`),this.#n=K(`div`,{class:`progress`},this.#r,K(`span`,{class:`bar`,"aria-hidden":`true`},this.#i)),this.searchInput=K(`input`,{type:`search`,autocomplete:`off`,spellcheck:`false`,role:`combobox`,"aria-autocomplete":`list`,"aria-expanded":`false`,"aria-controls":`kg-results`,enterkeyhint:`go`}),this.#a=K(`kbd`,{"aria-hidden":`true`,text:`/`}),this.#o=K(`button`,{type:`button`,class:`clear`,hidden:!0,onclick:()=>this.#F(``,!0)},X(`close`)),this.searchInput.addEventListener(`input`,()=>this.#F(this.searchInput.value)),this.searchInput.addEventListener(`keydown`,e=>this.#V(e)),this.searchInput.addEventListener(`focus`,()=>this.#L()),this.searchInput.addEventListener(`blur`,()=>this.#L()),this.#s=K(`div`,{class:`filters`,role:`group`});for(let e of Ol){let n=K(`button`,{type:`button`,class:`fchip`,"data-family":e,"aria-pressed":`false`,onclick:()=>t.toggleFamily(e)},K(`span`,{class:`dot`,"aria-hidden":`true`}),K(`span`,{class:`lbl`}),K(`span`,{class:`n`}));this.#c.set(e,n),this.#s.appendChild(n)}this.#l=K(`button`,{type:`button`,class:`link-btn`,hidden:!0,onclick:()=>t.setFamilies([])}),this.#s.appendChild(this.#l),this.#u=K(`div`,{class:`list-inner`,role:`presentation`}),this.list=K(`div`,{class:`list scroll`,role:`listbox`,tabindex:`0`,"aria-labelledby":`kg-changes-title`,"aria-keyshortcuts":`J K X Enter Home End`},this.#u),this.list.addEventListener(`scroll`,()=>this.#D(),{passive:!0}),this.list.addEventListener(`click`,e=>this.#P(e)),this.list.addEventListener(`dblclick`,e=>{e.target.closest(`.row`)&&t.flyToSelection()}),this.#f=K(`div`,{class:`sticky`,"aria-hidden":`true`,hidden:!0}),this.#p=K(`div`,{class:`results list scroll`,id:`kg-results`,role:`listbox`,hidden:!0}),this.#m=K(`div`,{class:`sheet-handle`,role:`separator`,"aria-orientation":`horizontal`,tabindex:`0`}),this.#U(),this.detail=new _u(e);let n=K(`div`,{class:`sb-head`},K(`div`,{class:`sb-title`},this.#e,this.#t,this.#n),K(`div`,{class:`search`},X(`search`),this.searchInput,this.#a,this.#o),this.#s);this.el=K(`aside`,{class:`sidebar`,"data-open":`true`},K(`div`,{class:`sidebar-inner`},this.#m,n,K(`div`,{class:`list-wrap`},this.#f,this.list,this.#p,this.#d),this.detail.el))}setOpen(e){J(this.el,`data-open`,String(e)),this.el.inert=!e}update(e){let t=this.#x.tr(),n=e.has(`status`)||e.has(`data`)||e.has(`locale`);n&&(J(this.el,`aria-label`,t.t(`sidebar.label`)),Y(this.#e,t.t(`sidebar.changes`)),this.searchInput.placeholder=t.t(`sidebar.searchPlaceholder`),J(this.searchInput,`aria-label`,t.t(`sidebar.search`)),J(this.#o,`aria-label`,t.t(`sidebar.searchClear`)),J(this.#s,`aria-label`,t.t(`sidebar.filters`)),J(this.#m,`aria-label`,t.t(`sidebar.sheet`)),Y(this.#l,t.t(`sidebar.clearFilters`)),this.searchInput.disabled=this.#x.controller.status!==`ready`,this.#S(),this.#v&&this.#I()),(n||e.has(`filters`))&&(this.#C(),this.#T()),(n||e.has(`review`))&&(this.#w(),this.#j()),e.has(`selection`)&&(this.#j(),this.#M()),this.detail.update(e)}focusList(){this.list.focus({preventScroll:!0})}focusSearch(){this.searchInput.focus(),this.searchInput.select()}escape(){return this.#v?(this.#F(``,!0),!0):!1}#S(){let e=this.#x.tr(),t=this.#x.controller.scene,n=t?lc(t):null;Y(this.#t,e.num(t?.hunks.length??0)),this.#t.hidden=!t,this.#s.hidden=!t||t.hunks.length===0;for(let[t,r]of this.#c){let i=n?n[t]:0;Y(r.querySelector(`.lbl`),e.t(`family.${t}`)),Y(r.querySelector(`.n`),e.num(i)),r.hidden=i===0,J(r,`title`,e.t(`familyHint.${t}`))}}#C(){let e=this.#x.controller.families;for(let[t,n]of this.#c)J(n,`aria-pressed`,String(e.has(t)));this.#l.hidden=e.size===0}#w(){let e=this.#x.tr(),t=this.#x.controller.reviewState(),n=t.reviewed.length,r=t.total;this.#n.hidden=r===0;let i=r>0&&n===r;J(this.#n,`data-complete`,String(i)),Y(this.#r,i?e.t(`review.complete`):e.t(`review.progress`,{done:n,total:r})),this.#i.style.transform=`scaleX(${r>0?n/r:0})`}#T(){let e=this.#x.controller,t=this.#x.tr();q(this.#d,e.list.items.map(e=>e.kind===`header`?K(`span`,{id:`kg-phase-${e.phase}`,text:`${t.t(`phase.${e.phase}`)} (${t.num(e.count)})`}):null));for(let e of this.#g.values())e.remove();this.#g.clear();let n=e.list.items;this.#h=Array(n.length);let r=0;for(let e=0;e<n.length;e++)this.#h[e]=r,r+=bu(n[e]);this.#u.style.height=`${r+8}px`,this.#E(),this.renderWindow()}#E(){let e=this.#x.controller,t=this.#x.tr();if(this.#u.querySelector(`.list-empty, .skeleton`)?.remove(),e.status===`loading`||e.status===`idle`){let t=K(`div`,{class:`skeleton`,"aria-hidden":`true`});if(e.status===`loading`)for(let e=0;e<6;e++)t.appendChild(K(`div`,{class:`skeleton-row shimmer`},K(`span`,{class:`g`}),K(`span`,{class:`b`})));this.#u.appendChild(t);return}if(e.status!==`ready`||e.list.items.length>0)return;let n=e.families.size>0&&e.hunkCount>0;this.#u.appendChild(K(`div`,{class:`list-empty`},X(n?`search`:`check-circle`),K(`span`,{text:t.t(n?`sidebar.filteredEmpty`:`sidebar.noChanges`)}),n?K(`button`,{type:`button`,class:`btn`,text:t.t(`sidebar.clearFilters`),onclick:()=>e.setFamilies([])}):null))}#D(){this.#_||(this.#_=!0,requestAnimationFrame(()=>{this.#_=!1,this.renderWindow()}))}#O(e){let t=0,n=this.#h.length;for(;t<n;){let r=t+n>>1;this.#h[r]+56<=e?t=r+1:n=r}return t}renderWindow(){let e=this.#x.controller.list.items,t=this.list.scrollTop,n=this.list.clientHeight||640,r=this.#O(Math.max(0,t-vu)),i=t+n+vu,a=new Set;for(let t=r;t<e.length&&this.#h[t]<i;t++)a.add(t);for(let[e,t]of this.#g)a.has(e)||(t.remove(),this.#g.delete(e));for(let t of a){if(this.#g.has(t))continue;let n=this.#k(e[t],this.#h[t]);this.#g.set(t,n),this.#u.appendChild(n)}this.#N(t)}#k(e,t){let n=this.#x.tr(),r=this.#x.controller;if(e.kind===`header`)return K(`div`,{class:`group`,role:`presentation`,style:`top: ${t}px`},K(`span`,{text:n.t(`phase.${e.phase}`)}),K(`span`,{class:`n`,text:n.num(e.count)}));let i=r.scene?.hunks[e.hunk],a=r.isReviewed(i.id),o=K(`span`,{class:`rv`,"aria-hidden":`true`,"data-pressed":String(a),title:n.t(a?`review.unmark`:`review.mark`),"data-hunk":i.id},K(`span`,{class:`ring`},X(`check`))),s=r.list.rank.get(e.hunk)??0,c=K(`div`,{class:`row`,role:`option`,id:`kg-opt-${e.hunk}`,"data-index":String(e.hunk),"data-family":i.family,"data-reviewed":String(a),"aria-selected":String(r.selectedHunk===e.hunk),"aria-setsize":String(r.list.order.length),"aria-posinset":String(s+1),"aria-describedby":`kg-phase-${i.phase}`,style:`top: ${t+2}px`},K(`span`,{class:`glyph-box`,"aria-hidden":`true`,text:zl(i)}),K(`span`,{class:`txt`},K(`span`,{class:`title`,title:i.title,text:i.title}),K(`span`,{class:`sub`,text:i.subtitle})),o);return this.#A(c,i,a),c}#A(e,t,n){let r=this.#x.tr(),i=[t.title];t.subtitle&&i.push(t.subtitle),n&&i.push(r.t(`review.toggle`)),J(e,`aria-label`,i.join(`. `))}#j(){let e=this.#x.controller,t=this.#x.tr();for(let n of this.#g.values()){if(!n.classList.contains(`row`))continue;let r=Number(n.dataset.index),i=e.scene?.hunks[r];if(!i)continue;let a=e.isReviewed(i.id);J(n,`aria-selected`,String(r===e.selectedHunk)),J(n,`data-reviewed`,String(a));let o=n.querySelector(`.rv`);J(o,`data-pressed`,String(a)),J(o,`title`,t.t(a?`review.unmark`:`review.mark`)),this.#A(n,i,a)}let n=e.selectedHunk;J(this.list,`aria-activedescendant`,n>=0&&e.list.rank.has(n)?`kg-opt-${n}`:null)}#M(){let e=this.#x.controller,t=e.list.itemOf.get(e.selectedHunk);if(t===void 0)return;let n=this.#h[t],r=this.list.scrollTop,i=this.list.clientHeight||640,a=e.list.items[t-1]?.kind===`header`?this.#h[t-1]:n-32;n<r+32?this.list.scrollTop=Math.max(0,a):n+56>r+i&&(this.list.scrollTop=n+56-i+8),this.renderWindow(),this.#j()}#N(e){let t=this.#x.controller.list.items,n=-1,r=-1;for(let i=0;i<t.length;i++)if(t[i]?.kind===`header`){if(this.#h[i]<=e)n=i;else{r=i;break}}if(n<0||e<=0){this.#f.hidden=!0;return}let i=t[n],a=this.#x.tr();this.#f.hidden=!1;let o=`${a.t(`phase.${i.phase}`)}|${i.count}`;this.#f.dataset.key!==o&&(this.#f.dataset.key=o,q(this.#f,K(`div`,{class:`group`},K(`span`,{text:a.t(`phase.${i.phase}`)}),K(`span`,{class:`n`,text:a.num(i.count)}))));let s=r>=0?Math.min(0,this.#h[r]-e-32):0;this.#f.style.transform=`translateY(${s}px)`}#P(e){let t=this.#x.controller,n=e.target,r=n.closest(`.rv`);if(r?.dataset.hunk){e.stopPropagation(),t.toggleReviewed(r.dataset.hunk);return}let i=n.closest(`.row`);if(!i)return;let a=Number(i.dataset.index);Number.isInteger(a)&&t.selectHunk(a)}#F(e,t=!1){this.#v=e,this.searchInput.value!==e&&(this.searchInput.value=e),this.#b=0,this.#I(),t&&this.searchInput.focus()}#I(){let e=this.#v.trim();this.#y=e?this.#x.controller.search(e,yu):[];let t=e!==``;this.#p.hidden=!t,this.list.hidden=t,this.#f.hidden=t||this.#f.hidden,J(this.searchInput,`aria-expanded`,String(t)),this.#L(),t?this.#R():(q(this.#p),this.renderWindow())}#L(){let e=this.#x.root.activeElement===this.searchInput;this.#a.hidden=this.#v!==``||e,this.#o.hidden=this.#v===``}#R(){let e=this.#x.tr(),t=this.#x.controller,n=this.#v.trim();if(this.#y.length===0){q(this.#p,K(`div`,{class:`list-empty`},X(`search`),K(`span`,{text:e.t(`sidebar.noResults`,{q:n})}))),J(this.searchInput,`aria-activedescendant`,null);return}let r=t.scene,i=this.#y.map((t,i)=>{let a=r?.nodeIndex.get(t.node.id),o=(a===void 0?void 0:r?.nodes[a])?.family??(t.node.status===`added`?`added`:t.node.status===`removed`?`removed`:t.node.status===`modified`?`content`:`neutral`),s=t.field===`label`?t.node.id:(t.field,t.matched);return K(`button`,{type:`button`,class:`result`,role:`option`,id:`kg-hit-${i}`,tabindex:`-1`,"data-family":o,"aria-selected":String(i===this.#b),onclick:()=>this.#B(i),onpointermove:()=>this.#z(i)},K(`span`,{class:`sdot`,"aria-hidden":`true`}),K(`span`,{class:`txt`},K(`span`,{class:`title`},Su(t.node.label,t.field===`label`?n:``)),K(`span`,{class:`sub`},Su(s,t.field===`label`?``:n))),K(`span`,{class:`status`,text:e.t(`status.${t.node.status}`)}))});q(this.#p,K(`div`,{class:`results-head`,text:e.plural(`sidebar.results`,this.#y.length)}),i),J(this.searchInput,`aria-activedescendant`,`kg-hit-${this.#b}`)}#z(e){if(!(e===this.#b||e<0||e>=this.#y.length)){this.#b=e;for(let t of this.#p.querySelectorAll(`.result`))J(t,`aria-selected`,String(t.id===`kg-hit-${e}`));J(this.searchInput,`aria-activedescendant`,`kg-hit-${e}`),this.#p.querySelector(`#kg-hit-${e}`)?.scrollIntoView?.({block:`nearest`})}}#B(e){let t=this.#y[e];t&&(this.#F(``),this.#x.controller.revealNode(t.node.id),this.focusList())}#V(e){switch(e.key){case`ArrowDown`:e.preventDefault(),this.#z(Math.min(this.#y.length-1,this.#b+1));break;case`ArrowUp`:e.preventDefault(),this.#z(Math.max(0,this.#b-1));break;case`Enter`:e.preventDefault(),this.#B(this.#b);break;case`Escape`:e.preventDefault(),e.stopPropagation(),this.#v?this.#F(``):this.focusList();break;default:return}}#H(e,t){let n=e=>Math.round(100*e/Math.max(1,t));J(this.#m,`aria-valuemin`,String(n(120))),J(this.#m,`aria-valuemax`,String(n(t-96))),J(this.#m,`aria-valuenow`,String(n(e))),J(this.#m,`aria-valuetext`,this.#x.tr().t(`sidebar.sheetValue`,{p:`${n(e)}%`}))}syncSheet(){let e=this.el.parentElement?.clientHeight??0;e>0&&this.#H(this.el.getBoundingClientRect().height,e)}#U(){let e=null,t=()=>this.el.parentElement,n=e=>{let n=t()?.clientHeight??600,r=Math.max(120,Math.min(n-96,e));this.el.style.setProperty(`--sheet-h`,`${Math.round(r)}px`),this.#H(r,n)};this.#m.addEventListener(`pointerdown`,t=>{e={y:t.clientY,h:this.el.getBoundingClientRect().height,id:t.pointerId},this.#m.setPointerCapture?.(t.pointerId),this.el.classList.add(`dragging`)}),this.#m.addEventListener(`pointermove`,t=>{e&&t.pointerId===e.id&&n(e.h+(e.y-t.clientY))});let r=t=>{e&&t.pointerId===e.id&&(e=null,this.el.classList.remove(`dragging`))};this.#m.addEventListener(`pointerup`,r),this.#m.addEventListener(`pointercancel`,r),this.#m.addEventListener(`keydown`,e=>{if(e.key!==`ArrowUp`&&e.key!==`ArrowDown`)return;e.preventDefault(),e.stopPropagation();let t=this.el.getBoundingClientRect().height;n(t+(e.key===`ArrowUp`?40:-40))})}};function Su(e,t){if(!t)return[e];let n=e.toLowerCase().indexOf(t.toLowerCase());return n<0?[e]:[e.slice(0,n),K(`mark`,{text:e.slice(n,n+t.length)}),e.slice(n+t.length)]}var Cu=1e3;function wu(e){let t=(e=>`var(--kg-${e})`)(e===`neutral`?`neutral`:e),n;switch(e){case`added`:n=`<circle cx="11" cy="11" r="8.5" fill="none" stroke="${t}" stroke-opacity=".35" stroke-width="2"/><circle cx="11" cy="11" r="5" fill="${t}"/>`;break;case`removed`:n=`<circle cx="11" cy="11" r="5.25" fill="none" stroke="${t}" stroke-width="1.5" stroke-dasharray="3 2.5"/>`;break;case`identity`:n=`<circle cx="11" cy="11" r="9.5" fill="none" stroke="${t}" stroke-opacity=".3" stroke-width="1.5"/><circle cx="11" cy="11" r="7.25" fill="none" stroke="${t}" stroke-width="1.5"/><circle cx="11" cy="11" r="4.25" fill="${t}"/>`;break;case`content`:case`structure`:n=`<circle cx="11" cy="11" r="7.75" fill="none" stroke="${t}" stroke-width="1.5"/><circle cx="11" cy="11" r="4.5" fill="${t}"/>`;break;default:n=`<circle cx="11" cy="11" r="3.5" fill="${t}"/>`}let r=document.createElement(`template`);return r.innerHTML=`<svg class="swatch" viewBox="0 0 22 22" aria-hidden="true" focusable="false">${n}</svg>`,r.content.firstElementChild}var Tu=class{el;canvasHost;minimapHost;#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p;#m;#h;#g;#_;#v;#y;#b=[];#x;#S;#C;#w;#T;#E;#D;#O;#k;tooltip;#A;#j=null;#M=null;#N=null;#P=null;#F=``;#I;constructor(e){this.#I=e;let t=e.controller;this.canvasHost=K(`div`,{class:`stage`}),this.#t=K(`div`,{class:`sr-only`}),this.#n=K(`div`,{class:`caption card`,"aria-hidden":`true`,"data-empty":`true`}),this.#a=Z(`skip-back`,``,()=>t.stepReplay(-1),{class:`icon-btn`}),this.#i=Z(`play`,``,()=>t.togglePlay(),{class:`icon-btn play`}),this.#o=Z(`skip-forward`,``,()=>t.stepReplay(1),{class:`icon-btn`}),this.#c=K(`div`,{class:`fill`}),this.#l=K(`div`,{class:`knob`}),this.#u=document.createElementNS(`http://www.w3.org/2000/svg`,`svg`),this.#u.setAttribute(`class`,`ticks`),this.#u.setAttribute(`viewBox`,`0 0 ${Cu} 14`),this.#u.setAttribute(`preserveAspectRatio`,`none`),this.#u.setAttribute(`aria-hidden`,`true`),this.#d=K(`div`,{class:`scrub-tip card`,hidden:!0}),this.#s=K(`div`,{class:`scrubber`,role:`slider`,tabindex:`0`,"aria-valuemin":`0`},K(`div`,{class:`track`},this.#c),this.#u,this.#l,this.#d),this.#G(),this.#f=K(`span`,{class:`pos`,"aria-hidden":`true`}),this.#p=K(`button`,{type:`button`,class:`speed`,onclick:()=>t.cycleSpeed()}),this.#r=K(`div`,{class:`transport card`,role:`toolbar`},this.#a,this.#i,this.#o,this.#s,this.#f,this.#p),this.#m=K(`div`,{class:`finished card`,role:`status`,hidden:!0}),this.#_=K(`div`,{class:`side-chip before chip card`}),this.#v=K(`div`,{class:`side-chip after chip card`}),this.#g=K(`div`,{class:`divider`,role:`slider`,tabindex:`0`,"aria-valuemin":`0`,"aria-valuemax":`100`,"aria-orientation":`horizontal`},K(`span`,{class:`handle`,"aria-hidden":`true`},X(`chevron-left`),X(`chevron-right`))),this.#J(),this.#h=K(`div`,{class:`swipe`,hidden:!0},this.#_,this.#v,this.#g);let n=K(`span`,{class:`opts`,role:`radiogroup`});for(let e=0;e<=2;e++){let r=K(`button`,{type:`button`,class:`opt`,role:`radio`,text:String(e),onclick:()=>t.setHops(e)});this.#b.push(r),n.appendChild(r)}n.addEventListener(`keydown`,e=>{if(e.key!==`ArrowLeft`&&e.key!==`ArrowRight`)return;e.preventDefault(),e.stopPropagation();let n=Math.max(0,Math.min(2,t.hops+(e.key===`ArrowRight`?1:-1)));t.setHops(n),this.#b[n]?.focus()}),this.#x=K(`button`,{type:`button`,class:`expand`,onclick:()=>t.expandNearest()},X(`plus`),K(`span`,{class:`n`})),this.#y=K(`div`,{class:`stepper card float top-left`,hidden:!0},K(`span`,{class:`label`}),n,this.#x),this.#C=K(`button`,{type:`button`,class:`legend-head`,onclick:()=>this.#R(!(this.#P??!0))},K(`span`,{class:`lbl`}),X(`chevron-down`)),this.#w=K(`div`,{class:`legend-body`,id:`kg-legend`}),J(this.#C,`aria-controls`,`kg-legend`),this.#S=K(`div`,{class:`legend card float bottom-left`,"data-open":`true`},this.#C,this.#w),this.#T=K(`div`,{class:`mini-legend float bottom-left`,role:`list`}),this.#E=Z(`plus`,``,()=>t.zoom(1)),this.#D=Z(`minus`,``,()=>t.zoom(-1)),this.#O=Z(`fit`,``,()=>void t.fit()),this.minimapHost=K(`div`,{class:`minimap-host`}),this.#k=K(`div`,{class:`map-cluster float bottom-right`},K(`div`,{class:`zoom-bar card`,role:`toolbar`},this.#E,this.#D,this.#O),this.minimapHost),this.tooltip=K(`div`,{class:`tooltip card`,role:`tooltip`,"data-open":`false`}),this.#A=K(`div`,{class:`state`,hidden:!0}),this.#e=K(`div`,{class:`chrome`},this.#h,this.#n,this.#y,this.#S,this.#T,this.#k,this.#m,this.#r,this.tooltip),this.el=K(`main`,{class:`stage-wrap`},this.canvasHost,this.#t,this.#e,this.#A),this.el.addEventListener(`pointermove`,e=>{let t=this.el.getBoundingClientRect();this.#j={x:e.clientX-t.left,y:e.clientY-t.top},this.tooltip.dataset.open===`true`&&this.#X()}),this.el.addEventListener(`pointerleave`,()=>{this.#j=null,t.clearHover()})}chromeLayout(){let e=this.el.getBoundingClientRect(),t=[],n=[this.#S,this.#T,this.#k,this.#r,this.#m,this.#y,this.#_,this.#v];this.#n.dataset.empty!==`true`&&n.push(this.#n);for(let r of n){if(r.hidden)continue;let n=r.getBoundingClientRect();n.width<=0||n.height<=0||t.push({x:n.left-e.left,y:n.top-e.top,width:n.width,height:n.height})}return{width:e.width,height:e.height,obstacles:t}}#L(){let e=this.el.clientHeight;return e===0||e>=560}#R(e){this.#P=e,J(this.#S,`data-open`,String(e)),J(this.#C,`aria-expanded`,String(e))}setChrome(e,t){this.el.dataset.legend=e,this.el.dataset.selectable=String(t)}update(e){let t=this.#I.controller,n=this.#I.tr(),r=e.has(`status`)||e.has(`data`)||e.has(`locale`);r&&(this.#z(n),this.#B(n),this.#Z(n),this.#W(),this.#V(n),this.#P===null&&this.#R(this.#L())),(r||e.has(`mode`)||e.has(`focus`)||e.has(`selection`))&&this.#H(n),(r||e.has(`mode`)||e.has(`replay`))&&this.#U(n),(r||e.has(`mode`)||e.has(`swipe`))&&this.#q(),(r||e.has(`hover`)||e.has(`selection`)||e.has(`focus`))&&this.#Y(n),e.has(`theme`)&&this.#W();let i=t.status===`ready`;this.#e.hidden=!i}#z(e){Q(this.#a,`${e.t(`detail.prev`)} (←)`),Q(this.#o,`${e.t(`detail.next`)} (→)`),J(this.#r,`aria-label`,e.t(`replay.label`)),J(this.#s,`aria-label`,e.t(`replay.scrubber`)),Y(this.#_,e.t(`detail.before`)),Y(this.#v,e.t(`detail.after`)),J(this.#g,`aria-label`,e.t(`swipe.divider`)),Y(this.#y.querySelector(`.label`),e.t(`focus.context`)),J(this.#y.querySelector(`.opts`),`aria-label`,e.t(`focus.hops`)),Y(this.#C.querySelector(`.lbl`),e.t(`legend.title`)),J(this.#C,`aria-label`,e.t(`legend.toggle`)),Q(this.#E,`${e.t(`action.zoomIn`)} (+)`),Q(this.#D,`${e.t(`action.zoomOut`)} (−)`),Q(this.#O,`${e.t(`action.fit`)} (F)`),J(this.minimapHost,`aria-label`,e.t(`minimap.label`)),J(this.minimapHost,`title`,e.t(`minimap.label`));let t=[...Ol,`neutral`];q(this.#w,t.map(t=>K(`div`,{class:`legend-row`,"data-family":t,title:e.t(`familyHint.${t}`)},wu(t),K(`span`,{class:`name`,text:e.t(`family.${t}`)}))))}#B(e){let t=this.#I.controller.scene,n=new Set(t?.hunks.map(e=>e.family));t?.nodes.some(e=>e.status===`unchanged`)&&n.add(`neutral`),J(this.#T,`aria-label`,e.t(`legend.title`)),q(this.#T,[...Ol,`neutral`].filter(e=>n.has(e)).map(t=>K(`span`,{class:`mini-item`,role:`listitem`,"data-family":t,title:e.t(`familyHint.${t}`)},K(`span`,{class:`dot`,"aria-hidden":`true`}),e.t(`family.${t}`))))}#V(e){let t=this.#I.controller.diff?.stats,n=this.canvasHost.querySelector(`canvas`);if(!t)return;let r=e.t(`aria.canvas`,{nb:t.before.nodes,eb:t.before.edges,na:t.after.nodes,ea:t.after.edges,changes:e.plural(`aria.changes`,this.#I.controller.hunkCount)});n&&J(n,`aria-label`,r),Y(this.#t,``)}#H(e){let t=this.#I.controller,n=t.mode;this.#y.hidden=n!==`changes`,this.#b.forEach((n,r)=>{J(n,`aria-checked`,String(r===t.hops)),n.tabIndex=r===t.hops?0:-1,J(n,`aria-label`,`${e.t(`focus.hops`)}: ${r}`)});let r=t.focus?.collapsed[t.nearestGroup()];if(this.#x.hidden=!r,r){let n=t.canExpand(t.nearestGroup())||r.nodes.length>0;this.#x.disabled=!n,Y(this.#x.querySelector(`.n`),e.num(r.count)),Q(this.#x,`${n?e.t(`focus.expandNearest`):e.t(`focus.expandUnavailable`)}: ${r.label} (E)`)}this.#r.hidden=n!==`replay`,this.#n.hidden=n!==`replay`,this.#h.hidden=n!==`swipe`}#U(e){let t=this.#I.controller,n=t.clock,r=t.scene;if(t.mode!==`replay`||!n||!r){this.#m.hidden=!0;return}let i=n.progress;this.#c.style.transform=`scaleX(${i})`,this.#l.style.left=`${i*100}%`;let a=n.position(),o=n.total;Y(this.#f,e.t(`replay.position`,{i:a,n:o})),J(this.#s,`aria-valuemax`,String(Math.round(n.duration))),J(this.#s,`aria-valuenow`,String(Math.round(n.t))),J(this.#s,`aria-valuetext`,e.t(`replay.position`,{i:a,n:o}));let s=n.playing,c=`${e.t(s?`replay.pause`:`replay.play`)} (Space)`;this.#i.dataset.state!==String(s)&&(this.#i.dataset.state=String(s),q(this.#i,X(s?`pause`:`play`))),Q(this.#i,c),Y(this.#p,`${n.speed}×`),Q(this.#p,e.t(`replay.speed`,{s:`${n.speed}×`})),this.#a.disabled=n.t<=0,this.#o.disabled=n.t>=n.duration;let l=``,u=[];if(!(n.t<=0)){if(n.timeline.mode===`chapters`){let t=n.activeTarget(),i=t.index>=0?n.timeline.chapters[t.index]:void 0;if(i){l=`c${t.index}`;let n=r.hunks[i.hunks[0]??-1];u=[K(`span`,{class:`glyph-box`,"data-family":n?.family??`neutral`,text:n?zl(n):`·`}),K(`span`,{class:`text`,text:e.t(`phase.${i.phase}`)}),K(`span`,{class:`count`,text:e.num(i.hunks.length)})]}}else{let e=n.activeHunk();e<0&&a>0&&(e=n.timeline.windows[a-1]?.hunk??-1);let t=e>=0?r.hunks[e]:void 0;t&&(l=`h${e}|${a}`,u=[K(`span`,{class:`glyph-box`,"data-family":t.family,text:zl(t)}),K(`span`,{class:`text`,text:t.title,title:t.title}),K(`span`,{class:`count`,text:`${a} / ${o}`})])}}this.#n.dataset.key!==l&&(this.#n.dataset.key=l,J(this.#n,`data-empty`,String(l===``)),q(this.#n,...u));let d=n.finished;this.#m.hidden=!d,d&&this.#m.childElementCount===0?q(this.#m,X(`check-circle`),K(`span`,{text:e.t(`replay.finished`)}),K(`button`,{type:`button`,class:`btn`,onclick:()=>t.restart()},X(`restart`),e.t(`replay.restart`))):!d&&this.#m.childElementCount>0&&ol(this.#I.root,this.#m,this.#i)}#W(){let e=this.#I.controller,t=e.clock,n=e.scene;for(;this.#u.firstChild;)this.#u.removeChild(this.#u.firstChild);if(!t||!n||t.duration<=0)return;let r=new Map;for(let e of t.timeline.windows){let i=n.hunks[e.hunk]?.family;if(!i)continue;let a=(e.start/t.duration*Cu).toFixed(1),o=r.get(i);o||(o=[],r.set(i,o)),o.push(`M${a} 2V12`)}for(let[e,t]of r){let n=document.createElementNS(`http://www.w3.org/2000/svg`,`path`);n.setAttribute(`d`,t.join(``)),n.setAttribute(`stroke`,`var(--kg-${e})`),n.setAttribute(`stroke-width`,`2`),n.setAttribute(`stroke-linecap`,`round`),n.setAttribute(`vector-effect`,`non-scaling-stroke`),this.#u.appendChild(n)}}#G(){let e=e=>{let t=this.#I.controller.clock,n=this.#s.getBoundingClientRect();return!t||n.width<=0?0:Math.max(0,Math.min(1,(e-n.left)/n.width))*t.duration};this.#s.addEventListener(`pointerdown`,t=>{this.#M=t.pointerId,this.#s.setPointerCapture?.(t.pointerId),this.#I.controller.pause(),this.#I.controller.seek(e(t.clientX))}),this.#s.addEventListener(`pointermove`,t=>{this.#M===t.pointerId&&this.#I.controller.seek(e(t.clientX)),this.#K(t.clientX,e(t.clientX))});let t=e=>{this.#M===e.pointerId&&(this.#M=null)};this.#s.addEventListener(`pointerup`,t),this.#s.addEventListener(`pointercancel`,t),this.#s.addEventListener(`pointerleave`,()=>{this.#d.hidden=!0}),this.#s.addEventListener(`keydown`,e=>{let t=this.#I.controller;if(e.key===`Home`)t.seek(0);else if(e.key===`End`)t.seek(t.clock?.duration??0);else return;e.preventDefault(),e.stopPropagation()})}#K(e,t){let n=this.#I.controller,r=n.clock,i=n.scene;if(!r||!i)return;let a=-1,o=1/0;for(let e of r.timeline.windows){let n=Math.abs(e.start-t);n<o&&(o=n,a=e.hunk)}let s=i.hunks[a];if(!s){this.#d.hidden=!0;return}let c=this.#s.getBoundingClientRect();this.#d.hidden=!1,this.#d.style.left=`${e-c.left}px`,this.#d.dataset.hunk!==s.id&&(this.#d.dataset.hunk=s.id,q(this.#d,K(`span`,{class:`glyph-box`,"data-family":s.family,text:zl(s)}),K(`span`,{text:s.title})))}#q(){let e=this.#I.controller;if(e.mode!==`swipe`)return;let t=e.split*100;this.#g.style.left=`${t}%`,J(this.#g,`aria-valuenow`,String(Math.round(t))),J(this.#g,`aria-valuetext`,`${Math.round(t)}%`)}#J(){let e=e=>{let t=this.el.getBoundingClientRect();return t.width>0?(e-t.left)/t.width:.5};this.#g.addEventListener(`pointerdown`,e=>{e.preventDefault(),this.#N=e.pointerId,this.#g.setPointerCapture?.(e.pointerId),this.#g.classList.add(`dragging`),this.#g.focus({preventScroll:!0})}),this.#g.addEventListener(`pointermove`,t=>{this.#N===t.pointerId&&this.#I.controller.setSplit(e(t.clientX))});let t=e=>{this.#N===e.pointerId&&(this.#N=null,this.#g.classList.remove(`dragging`))};this.#g.addEventListener(`pointerup`,t),this.#g.addEventListener(`pointercancel`,t),this.#g.addEventListener(`dblclick`,()=>this.#I.controller.setSplit(.5)),this.#g.addEventListener(`keydown`,e=>{let t=this.#I.controller,n={Home:0,End:1,PageUp:t.split-.1,PageDown:t.split+.1}[e.key];n!==void 0&&(e.preventDefault(),e.stopPropagation(),t.setSplit(n))})}#Y(e){let t=this.#I.controller,n=t.scene,r=t.diff;if(!n||!r||this.#N!==null){J(this.tooltip,`data-open`,`false`);return}let i=[],a=`neutral`;if(t.hoverNode>=0){let o=n.nodes[t.hoverNode],s=o?r.index.node(o.id):void 0;if(!o||!s)return;a=o.family;let c=o.hunk>=0?n.hunks[o.hunk]:void 0,l=s.facets.find(e=>e.kind===`rekey`),u=Math.max(s.degree.before,s.degree.after);i.push(K(`div`,{class:`t-label`,text:o.label}),o.labelBefore?K(`div`,{class:`t-old`,text:o.labelBefore}):null,K(`div`,{class:`t-id`,text:l&&l.kind===`rekey`?`${l.from} → ${l.to}`:o.id}),K(`div`,{class:`t-status`,"data-family":a},K(`span`,{class:`dot`}),o.status===`unchanged`?e.t(`status.unchanged`):`${e.t(`status.${o.status}`)} · ${e.t(`family.${a}`)}`),K(`div`,{class:`t-sum`,text:c?c.title:e.plural(`tooltip.relations`,u)}),K(`div`,{class:`t-hint`,text:e.t(`tooltip.select`)}))}else if(t.hoverEdge>=0){let r=n.edges[t.hoverEdge];if(!r)return;a=r.family;let o=n.nodes[r.s]?.label??``,s=n.nodes[r.t]?.label??``,c=r.hunk>=0?n.hunks[r.hunk]:void 0;i.push(K(`div`,{class:`t-label`,text:`${o} —${r.label}→ ${s}`}),r.labelBefore?K(`div`,{class:`t-old`,text:r.labelBefore}):null,K(`div`,{class:`t-status`,"data-family":a},K(`span`,{class:`dot`}),e.t(`status.${r.status}`)),c?K(`div`,{class:`t-sum`,text:c.title}):null)}else if(t.hoverGroup>=0){let n=t.focus?.collapsed[t.hoverGroup];if(!n)return;i.push(K(`div`,{class:`t-label`,text:n.label}),K(`div`,{class:`t-hint`,text:e.t(t.canExpand(t.hoverGroup)?`focus.expand`:`focus.expandUnavailable`)}))}i.length===0?J(this.tooltip,`data-open`,`false`):(q(this.tooltip,...i),J(this.tooltip,`data-open`,`true`),this.#X())}#X(){let e=this.#j;if(!e){J(this.tooltip,`data-open`,`false`);return}let t=this.tooltip.offsetWidth,n=this.tooltip.offsetHeight,r=this.el.clientWidth,i=this.el.clientHeight,a=e.x+16,o=e.y+18;a+t>r-8&&(a=Math.max(8,e.x-t-12)),o+n>i-8&&(o=Math.max(8,e.y-n-12)),this.tooltip.style.transform=`translate(${Math.round(a)}px, ${Math.round(o)}px)`}#Z(e){let t=this.#I.controller,n=t.diff?.stats,r=t.status;if(t.status===`loading`&&(r+=`|${t.step}|${t.steps.join(`,`)}`),t.status===`ready`&&(r+=n?.identical?`|identical`:``),r+=`|${e.locale}`,t.status===`error`&&(r+=`|${t.error?.message}`),r!==this.#F){if(this.#F=r,this.#A.classList.remove(`blocking`),t.status===`ready`&&!n?.identical)this.#A.hidden=!0,q(this.#A);else if(this.#A.hidden=!1,t.status===`loading`){this.#A.classList.add(`blocking`);let n=t.step?t.steps.indexOf(t.step):-1;q(this.#A,K(`div`,{class:`skeleton-grid`,"aria-hidden":`true`}),K(`div`,{class:`state-card card`,role:`status`,"aria-live":`polite`},K(`h2`,{text:e.t(`state.loading`)}),K(`ol`,{class:`steps`},t.steps.map((t,r)=>K(`li`,{"data-state":r<n?`done`:r===n?`active`:`pending`},K(`span`,{class:`mark`,"aria-hidden":`true`},r<n?X(`check`):null),K(`span`,{text:`${e.t(`step.${t}`)}${r===n?`…`:``}`}))))))}else if(t.status===`error`){this.#A.classList.add(`blocking`);let n=t.error,r=n instanceof p?n.code:n?.name,i=[r?`[${r}]`:``,n?.message??``,n?.stack??``].filter(Boolean).join(`
|
|
5
|
-
`);q(this.#A,K(`div`,{class:`state-card card error`,role:`alert`},K(`div`,{class:`state-icon`},X(`alert`)),K(`h2`,{text:e.t(`state.error.title`)}),K(`p`,{text:n?.message??``}),K(`details`,null,K(`summary`,{text:e.t(`state.error.details`)}),K(`pre`,{text:i}))))}else t.status===`ready`&&n?.identical?q(this.#A,K(`div`,{class:`state-card card ok`,role:`status`},K(`div`,{class:`state-icon`},X(`check-circle`)),K(`h2`,{text:e.t(`state.identical.title`)}),K(`p`,{text:e.t(`state.identical.body`,{nodes:e.plural(`count.nodes`,n.after.nodes),edges:e.plural(`count.edges`,n.after.edges)})}))):(this.#A.classList.add(`blocking`),q(this.#A,K(`div`,{class:`state-card`},K(`div`,{class:`state-icon`},X(`overlay`)),K(`h2`,{text:e.t(`state.empty.title`)}),K(`p`,{text:e.t(`state.empty.body`)}))))}}},Eu=1100,Du=[`mode`,`theme`,`palette`,`locale`,`sidebar`,`sync-hash`,`chrome`,`legend`,`loop`,`loop-delay`,`pause-on-hover`],Ou=[`mode`,`theme`,`palette`,`locale`,`chrome`,`legend`,`loop`,`loopDelay`,`pauseOnHover`,`payload`],ku=new Set([`ArrowUp`,`ArrowDown`,`ArrowLeft`,`ArrowRight`,`Home`,`End`,`PageUp`,`PageDown`,` `,`Spacebar`]),Au=[];function ju(e){if(typeof e==`object`&&e&&!Object.isFrozen(e)){for(let t of Object.values(e))ju(t);Object.freeze(e)}return e}function Mu(e){return typeof window<`u`&&typeof window.matchMedia==`function`?window.matchMedia(e):null}function Nu(){return new Promise(e=>{let t=!1,n=()=>{t||(t=!0,e())};typeof requestAnimationFrame==`function`&&requestAnimationFrame(()=>setTimeout(n,0)),setTimeout(n,50)})}var Pu=class extends HTMLElement{static get observedAttributes(){return Du}controller;#e;#t=null;#n=null;#r=!1;#i=!1;#a=!1;#o=[];#s=``;#c=!1;#l=!1;constructor(){super(),this.#e=this.attachShadow({mode:`open`});let e={ready:e=>this.#d(`kgdiff-ready`,{stats:e}),select:(e,t)=>{this.#d(`kgdiff-select`,{hunk:e,node:t}),this.#O()},mode:e=>{this.#d(`kgdiff-mode`,{mode:e}),this.#O()},review:(e,t,n)=>this.#d(`kgdiff-review`,{hunk:e,reviewed:t,progress:n}),error:e=>this.#d(`kgdiff-error`,{error:e}),announce:e=>this.#p(e),replayEnd:e=>this.#d(`kgdiff-replay-end`,{loop:e})};this.controller=new el(e,{now:()=>typeof performance<`u`?performance.now():Date.now(),requestFrame:e=>typeof requestAnimationFrame==`function`?requestAnimationFrame(e):0,cancelFrame:e=>{typeof cancelAnimationFrame==`function`&&cancelAnimationFrame(e)},yieldToPaint:Nu,storage:Vc()}),this.controller.locale=bc(this.getAttribute(`locale`))??$s(),this.controller.subscribe(e=>this.#y(e))}connectedCallback(){if(!this.#c){this.#c=!0;for(let e of Ou)if(Object.hasOwn(this,e)){let t=this[e];delete this[e],this[e]=t}}this.#t||this.#v(),Au.push(this);let e=this.#t;if(!e)return;this.controller.attach(e.stage.canvasHost,e.stage.minimapHost);let t=e.stage.canvasHost.querySelector(`canvas`);if(t){t.tabIndex=this.chrome===`none`?-1:0;let e=()=>{this.chrome!==`none`&&t.focus({preventScroll:!0})};t.addEventListener(`pointerdown`,e),this.#o.push(()=>t.removeEventListener(`pointerdown`,e))}this.#w(),this.#T();let n=e=>this.#E(e);document.addEventListener(`keydown`,n),this.#o.push(()=>document.removeEventListener(`keydown`,n));let r=e=>this.controller.syncReview(e.key);window.addEventListener(`storage`,r),this.#o.push(()=>window.removeEventListener(`storage`,r));let i=()=>this.#D();window.addEventListener(`hashchange`,i),this.#o.push(()=>window.removeEventListener(`hashchange`,i)),this.controller.setChrome(()=>e.stage.chromeLayout()),document.fonts?.ready?.then(()=>this.#t?.header.layout()).catch(()=>void 0),this.#D(),this.#y(new Set([`status`,`data`,`mode`,`theme`,`locale`,`filters`,`review`,`selection`,`focus`,`swipe`,`replay`]))}disconnectedCallback(){let e=Au.indexOf(this);e>=0&&Au.splice(e,1);for(let e of this.#o.splice(0))e();this.controller.detach(),this.#l=!1,this.#_()}attributeChangedCallback(e,t,n){if(!this.#i)switch(e){case`mode`:case`theme`:case`palette`:case`locale`:this.#u(e,n,!1);break;case`sidebar`:this.#h();break;case`sync-hash`:n!==null&&this.#D();break;case`chrome`:case`legend`:this.#g();break;case`loop`:case`loop-delay`:this.controller.setLoop(this.loop?this.loopDelay:null),this.#_();break;case`pause-on-hover`:this.#_()}}#u(e,t,n){let r=this.controller,i;switch(e){case`mode`:{let e=_c(t);r.setMode(e??`overlay`),i=e;break}case`theme`:{let e=vc(t);r.setThemePreference(e??`auto`),i=e;break}case`palette`:{let e=yc(t);r.setPalette(e??`default`),i=e;break}case`locale`:{let e=bc(t);r.setLocale(e??$s()),i=e;break}default:return}i===null?r.explicit.delete(e):r.explicit.add(e),n&&this.#f(e,i)}get mode(){return this.controller.mode}set mode(e){this.#u(`mode`,e,!0)}get theme(){return this.controller.themePreference}set theme(e){this.#u(`theme`,e,!0)}get palette(){return this.controller.palette}set palette(e){this.#u(`palette`,e,!0)}get locale(){return this.controller.locale}set locale(e){this.#u(`locale`,e,!0)}get chrome(){return xc(this.getAttribute(`chrome`))??`full`}set chrome(e){this.#f(`chrome`,xc(e)===`none`?`none`:null),this.#g()}get legend(){return Sc(this.getAttribute(`legend`))??`auto`}set legend(e){let t=Sc(e);this.#f(`legend`,t===`auto`?null:t),this.#g()}get loop(){return this.hasAttribute(`loop`)}set loop(e){this.toggleAttribute(`loop`,!!e)}get loopDelay(){return Cc(this.getAttribute(`loop-delay`))??1200}set loopDelay(e){let t=Cc(e);t===null?this.removeAttribute(`loop-delay`):this.setAttribute(`loop-delay`,String(t))}get pauseOnHover(){return this.getAttribute(`pause-on-hover`)!==`false`}set pauseOnHover(e){e?this.removeAttribute(`pause-on-hover`):this.setAttribute(`pause-on-hover`,`false`)}get payload(){return this.#n}set payload(e){if(this.#n=e,e==null)return;let t;try{t=Cl(e)}catch(e){this.controller.fail(e);return}this.controller.loadPayload(t).catch(()=>{})}load(e){return this.#n=null,this.controller.load(e)}selectHunk(e){this.controller.selectHunkById(e,{fly:!0})}next(){this.controller.next()}prev(){this.controller.prev()}play(){this.controller.play()}pause(){this.controller.pause()}fit(e){return this.controller.fit(e)}exportDelta(){let e=this.controller.diff;if(!e)throw new p(`invalid-input`,W(`en`,`error.notLoaded`));return ju(structuredClone(e.delta))}reviewState(){return this.controller.reviewState()}setReviewed(e,t){this.controller.setReviewed(e,t)}showError(e){this.controller.fail(e)}#d(e,t){this.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}#f(e,t){if(this.getAttribute(e)!==t){this.#i=!0;try{t===null?this.removeAttribute(e):this.setAttribute(e,t)}finally{this.#i=!1}}}#p(e){let t=this.#t?.live;t&&(t.textContent=``,setTimeout(()=>{t.textContent=e},30))}get#m(){return this.getAttribute(`sidebar`)!==`closed`}#h(){let e=this.#t;e&&(e.sidebar.setOpen(this.#m),e.header.setSidebarState(this.#m))}#g(){let e=this.chrome===`none`,t=this.controller;t.autoFit=e,t.selectOnClick=!e,t.setLabelsInside(e);let n=this.#t;if(!n)return;n.root.dataset.chrome=this.chrome;let r=this.legend;n.stage.setChrome(r===`auto`?e?`mini`:`full`:r,!e);let i=n.stage.canvasHost.querySelector(`canvas`);i&&(i.tabIndex=e?-1:0),e&&(n.help.hide(),this.#S(!1))}#_(){this.controller.hold(this.#l&&this.loop&&this.pauseOnHover)}#v(){let e=K(`style`,{text:Al}),t=K(`style`),n={controller:this.controller,tr:()=>ac(this.controller.locale),root:this.#e,setMode:e=>{this.controller.setMode(e)},setThemePreference:e=>{this.theme=e},setPalette:e=>{this.palette=e},setLocale:e=>{this.locale=e},toggleSidebar:e=>this.#x(e),sidebarOpen:()=>this.#m,toggleMenu:e=>this.#S(e),openHelp:()=>this.#t?.help.show(),focusSearch:()=>this.#C()},r=new Pl(n),i=new Tu(n),a=new xu(n),o=new Fl(n),s=new Ll(n),c=K(`div`,{class:`sr-only`,"aria-live":`polite`,"aria-atomic":`true`}),l=K(`div`,{class:`root`},r.el,K(`div`,{class:`body`},i.el,a.el),o.el,s.el,c);this.#e.append(e,t,l),this.#t={root:l,vars:t,header:r,stage:i,sidebar:a,menu:o,help:s,live:c},l.addEventListener(`pointerdown`,e=>{if(!o.open)return;let t=e.composedPath();!t.includes(o.el)&&!t.includes(r.menuButton)&&this.#S(!1)});let u=e=>t=>{t.pointerType!==`touch`&&(this.#l=e,this.#_())};i.el.addEventListener(`pointerenter`,u(!0)),i.el.addEventListener(`pointerleave`,u(!1)),this.#h(),this.#g()}#y(e){try{this.#b(e),this.#r=!1}catch(e){if(console.error(`[kgdiff] render failed:`,e),this.#r)return;this.#r=!0;let t=this.controller;t.explicit.clear(),t.setThemePreference(`auto`),t.setPalette(`default`),t.fail(e instanceof Error?e:Error(String(e)))}}#b(e){let t=this.#t,n=this.controller;e.has(`mode`)&&this.#f(`mode`,n.mode),e.has(`theme`)&&this.#f(`theme`,n.themePreference===`auto`&&!this.hasAttribute(`theme`)?null:n.themePreference),t&&((e.has(`theme`)||e.has(`status`))&&(t.vars.textContent=`:host { ${kl(n.theme)} }`,t.root.dataset.theme=n.themeName),(e.has(`locale`)||e.has(`status`))&&(t.root.setAttribute(`lang`,n.locale),t.menu.open&&t.menu.render(),t.help.open&&t.help.render()),e.has(`theme`)&&t.menu.open&&t.menu.render(),t.header.update(e),t.sidebar.update(e),t.stage.update(e),(e.has(`mode`)||e.has(`status`))&&(t.root.dataset.mode=n.mode))}#x(e){let t=e??!this.#m;this.#f(`sidebar`,t?`open`:`closed`),this.#h()}#S(e){let t=this.#t;if(!t)return;let n=e??!t.menu.open;n?t.menu.show(t.header.menuButton):t.menu.hide(!1),t.header.setMenuState(n)}#C(){this.#m||this.#x(!0),this.#t?.sidebar.focusSearch()}#w(){let e=Mu(`(prefers-color-scheme: light)`),t=Mu(`(prefers-reduced-motion: reduce)`),n=()=>{this.controller.setSystemDark(!(e?.matches??!1)),this.controller.setReducedMotion(t?.matches??!1)};n();for(let r of[e,t])r&&(r.addEventListener?.(`change`,n),this.#o.push(()=>r.removeEventListener?.(`change`,n)))}#T(){if(typeof ResizeObserver!=`function`)return;let e=new ResizeObserver(()=>{let e=this.#t;if(!e)return;let t=this.clientWidth,n=t>0&&t<760;e.root.dataset.narrow=String(t>0&&t<Eu),n!==this.#a&&(this.#a=n,e.root.dataset.compact=String(n)),e.header.layout(),e.sidebar.renderWindow(),n&&e.sidebar.syncSheet(),this.controller.layoutChanged()});e.observe(this),this.#t&&e.observe(this.#t.stage.el),this.#o.push(()=>e.disconnect())}#E(e){if(e.defaultPrevented||e.isComposing)return;let t=this.#t;if(!t||this.chrome===`none`)return;let n=e.composedPath();if(!n.includes(this)){if(!this.hasAttribute(`global-shortcuts`)||ku.has(e.key))return;let t=document.activeElement;if(t&&t!==document.body&&t!==document.documentElement||Au.find(e=>e.hasAttribute(`global-shortcuts`))!==this)return}if(t.help.open||t.menu.open){e.key===`Escape`&&(e.preventDefault(),t.help.hide(),this.#S(!1));return}let r=n[0]??null;if(_l(r))return;let i=this.controller,a=gl(e,i.mode);if(!a)return;let o=r;if((e.key!==`Enter`&&e.key!==` `||!o?.closest?.(`button, a, summary, [role="radio"], [role="menuitemradio"]`))&&(i.status===`ready`||[`help`,`theme`,`sidebar`,`escape`].includes(a.type)))switch(e.preventDefault(),a.type){case`mode`:i.setMode(a.mode);break;case`next`:i.next();break;case`prev`:i.prev();break;case`first`:i.first();break;case`last`:i.last();break;case`fly`:i.flyToSelection();break;case`escape`:t.sidebar.escape()||i.clearSelection();break;case`play-pause`:i.togglePlay();break;case`step`:i.stepReplay(a.direction);break;case`divider`:i.setSplit(i.split+a.delta);break;case`fit`:i.fit();break;case`zoom`:i.zoom(a.direction);break;case`search`:this.#C();break;case`review`:i.toggleReviewed();break;case`sidebar`:this.#x();break;case`theme`:{let e=gc.indexOf(i.themePreference);this.theme=gc[(e+1)%gc.length];break}case`help`:t.help.show();break;case`expand`:i.expandNearest()}}#D(){if(!this.hasAttribute(`sync-hash`)||typeof location>`u`||location.hash===this.#s)return;let e=dl(location.hash);this.#s=location.hash,e&&(e.mode&&(this.controller.explicit.add(`mode`),this.controller.setMode(e.mode)),e.hunk&&this.controller.selectHunkById(e.hunk,{fly:!0}))}#O(){if(!this.hasAttribute(`sync-hash`)||typeof location>`u`)return;let e=this.controller,t=e.selectedHunk>=0?e.scene?.hunks[e.selectedHunk]?.id:void 0,n=fl({...t===void 0?{}:{hunk:t},mode:e.mode});if(n!==location.hash){this.#s=n;try{history.replaceState(history.state,``,n)}catch{location.hash=n}}}},Fu=`application/kgdiff+json`,Iu=!1;function Lu(e=`kgdiff-viewer`){if(typeof customElements>`u`)return;let t=e.toLowerCase();if(customElements.get(t)===void 0){let e=Iu?class extends Pu{}:Pu;customElements.define(t,e),Iu=!0}vl.add(t)}function Ru(e){let t=e??(typeof document<`u`?document:void 0);return t?Dl(t):Promise.resolve()}Lu();function zu(){Ru().catch(e=>console.error(`[kgdiff]`,e))}return typeof document<`u`&&(document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,zu,{once:!0}):zu()),e.COMPUTE_GLOBAL=js,e.PAYLOAD_SCRIPT_TYPE=Fu,e.defineViewer=Lu,e.hydrateEmbeddedPayloads=Ru,e})({});
|
|
3
|
+
`)!==t}has(e){return this.#t.has(e)}get size(){return this.#e.length}setReviewed(e,t){if(t===this.#t.has(e))return!1;if(t){if(!this.#r.has(e))return!1;this.#t.add(e),this.#e.push(e)}else this.#t.delete(e),this.#e.splice(this.#e.indexOf(e),1);return this.#l(),!0}state(){return{reviewed:[...this.#e],total:this.#o.length}}#c(){if(!this.#i||!this.#a)return[];try{let e=this.#i.getItem(this.#a);if(!e)return[];let t=JSON.parse(e),n=Array.isArray(t)?t:typeof t==`object`&&t&&`reviewed`in t?t.reviewed:[];return Array.isArray(n)?n.filter(e=>typeof e==`string`):[]}catch{return[]}}#l(){if(this.#i&&this.#a)try{let e=[...this.#e,...this.#n];e.length===0?this.#i.removeItem(this.#a):this.#i.setItem(this.#a,JSON.stringify({v:1,reviewed:e}))}catch{}}};function Kc(e){return e.normalize(`NFKC`).toLowerCase()}var qc=/[\s_\-./:#|()[\]{}「」“”"'’,;]/;function Jc(e,t){if(e===``)return 0;if(t===e)return 1e3;if(t.startsWith(e))return 800-Math.min(100,t.length-e.length);let n=t.indexOf(e);if(n>0)return(qc.test(t[n-1]??``)?600:400)-Math.min(150,n);let r=200,i=0,a=-2;for(let n of e){let e=t.indexOf(n,i);if(e<0)return 0;e!==a+1&&(r-=Math.min(20,e-i+2)),(e===0||qc.test(t[e-1]??``))&&(r+=6),a=e,i=e+1}return Math.max(1,r)}var Yc=class{#e;constructor(e){this.#e=e.nodes.map(e=>{let t=[e.label],n=[`label`],r=(e,r)=>{e&&!t.includes(e)&&(t.push(e),n.push(r))};r(e.before?.label,`label`);for(let t of e.after?.aliases??[])r(t,`alias`);for(let t of e.before?.aliases??[])r(t,`alias`);return r(e.afterId,`id`),r(e.beforeId,`id`),r(e.id,`id`),{node:e,texts:t,folded:t.map(Kc),fields:n}})}search(e,t=50){let n=Kc(e.trim());if(n===``)return[];let r=[];for(let e of this.#e){let t=0,i=0;for(let r=0;r<e.folded.length;r++){let a=e.fields[r],o=a===`label`?0:a===`alias`?40:60,s=Jc(n,e.folded[r]);s>0&&s-o>t&&(t=s-o,i=r)}t>0&&r.push({node:e.node,score:t+(e.node.status===`unchanged`?0:1),matched:e.texts[i],field:e.fields[i]})}return r.sort((e,t)=>t.score-e.score||e.node.label.length-t.node.label.length||(e.node.id<t.node.id?-1:+(e.node.id>t.node.id))),r.slice(0,t)}},Xc=.35,Zc=1.8,Qc=2.5,$c=200,el=class extends Error{};function tl(e,t){let n=Math.min(e.x+e.width,t.x+t.width)-Math.max(e.x,t.x),r=Math.min(e.y+e.height,t.y+t.height)-Math.max(e.y,t.y),i=e.width*e.height;return i>0?n>0&&r>0?n*r/i:0:+(e.x>=t.x&&e.x<=t.x+t.width&&e.y>=t.y&&e.y<=t.y+t.height)}var nl=e=>1-(1-e)**3,rl=class{status=`idle`;steps=[];step=null;error=null;data=null;layout=null;scene=null;resolver=null;list=sc;mode=`overlay`;scope=`all`;themePreference=`auto`;palette=`default`;locale=`en`;systemDark=!0;reducedMotion=!1;explicit=new Set;selectedHunk=-1;selectedNode=-1;pinnedEdge=-1;hoverNode=-1;hoverEdge=-1;hoverGroup=-1;families=new Set;hops=1;expanded=new Set;focus=null;clock=null;split=.5;emphasis=1;autoFit=!1;selectOnClick=!0;#e=!1;overview=!0;#t=null;#n=null;#r=null;#i=null;#a=[];#o={main:null,before:null,after:null};#s=-1;#c=null;#l=0;#u=0;#d=!1;#f=!0;#p=-1/0;#m=-1/0;#h=``;#g=0;#_=null;#v=null;#y=null;#b=null;#x=!1;#S=!1;#C=24;#w=null;#T=NaN;#E=!1;#D=!1;#O=new Set;#k=new Set;#A=!1;#j=!1;#M;#N;constructor(e,t){this.#M=e,this.#N=t}subscribe(e){return this.#O.add(e),()=>this.#O.delete(e)}#P(...e){for(let t of e)this.#k.add(t);this.#A||(this.#A=!0,queueMicrotask(()=>this.flush()))}flush(){if(this.#A=!1,this.#k.size===0)return;let e=this.#k;this.#k=new Set;for(let t of this.#O)t(e)}get themeName(){return this.themePreference===`auto`?this.systemDark?`dark`:`light`:this.themePreference}get theme(){try{return co(this.themeName,this.palette)}catch{return co(`dark`,`default`)}}get diff(){return this.data?.diff??null}get hunkCount(){return this.scene?.hunks.length??0}isReviewed(e){return this.#t?.has(e)??!1}reviewState(){return this.#t?.state()??{reviewed:[],total:0}}search(e,t){let n=this.diff;return n?(this.#n??=new Yc(n),this.#n.search(e,t)):[]}async load(e){let t=e=>typeof e==`object`&&!!e&&typeof e.text==`string`,n=t(e?.before)||t(e?.after);await this.#F(n?[`parse`,`match`,`layout`,`scene`]:[`match`,`layout`,`scene`],t=>Fc(e,t))}async loadPayload(e){await this.#F([`match`,`layout`,`scene`],t=>Ic(e,t))}async#F(e,t){let n=++this.#g;this.pause(),this.status=`loading`,this.error=null,this.steps=e,this.step=null,this.#P(`status`);let r=async e=>{if(n!==this.#g||this.#j||(this.step=e,this.#P(`status`),this.flush(),await this.#N.yieldToPaint(),n!==this.#g||this.#j))throw new el};try{let e=await t(r);await r(`scene`),this.#I(e)}catch(e){if(e instanceof el)throw new DOMException(`Superseded by a newer load.`,`AbortError`);let t=e instanceof Error?e:new p(`invalid-input`,String(e));throw n===this.#g&&this.fail(t),t}}fail(e){this.#g++,this.clock?.pause(),this.#T=NaN,this.#D=!1,this.status=`error`,this.error=e,this.step=null,this.data=null,this.layout=null,this.scene=null,this.resolver=null,this.list=sc,this.clock=null,this.focus=null,this.#t=null,this.selectedHunk=this.selectedNode=this.pinnedEdge=-1,this.#P(`status`,`data`,`selection`,`filters`,`review`,`replay`,`focus`),this.#M.error(e)}#I(e){let{diff:t,layout:n,view:r}=e;this.data=e,this.layout=n,this.#n=null,this.families.clear(),this.expanded.clear(),this.hops=Math.max(0,Math.min(2,e.layoutOptions?.contextHops??1)),this.selectedHunk=-1,this.selectedNode=-1,this.pinnedEdge=-1,this.#s=-1,this.emphasis=1,this.#c=null,this.hoverNode=this.hoverEdge=this.hoverGroup=-1,this.split=.5,this.clock=null,this.#h=``,r&&(r.theme&&!this.explicit.has(`theme`)&&(this.themePreference=r.theme),r.palette&&!this.explicit.has(`palette`)&&(this.palette=r.palette),r.locale&&!this.explicit.has(`locale`)&&(this.locale=r.locale));let i=this.mode,a=this.scope;if(this.explicit.has(`mode`)||(this.mode=r?.mode??`overlay`),n.scope===`changes`)this.scope=`changes`;else if(!this.explicit.has(`scope`)){let n=e.layoutOptions?.largeGraphThreshold??3e3;this.scope=r?.scope??(t.nodes.length>n?`changes`:`all`)}this.#t=new Gc(this.#N.storage,Uc(t.delta.base.hash,t.delta.target.hash),t.hunks.map(e=>e.id)),this.#L(),this.status=`ready`,this.step=null,n.scope===`changes`&&Ls()===`unknown`&&Rs().then(()=>this.#P(`focus`),()=>this.#P(`focus`)),this.#P(`status`,`data`,`mode`,`selection`,`filters`,`review`,`replay`,`theme`,`locale`,`focus`,`swipe`,`overview`),this.#x=!0,this.#b=null,queueMicrotask(()=>this.layoutChanged()),this.#M.ready(t.stats),(this.mode!==i||this.scope!==a)&&this.#M.mode(this.mode,this.scope);let o=this.#_;this.#_=null,o===null?this.#de():this.selectHunkById(o.id,{fly:o.fly})}#L(){let e=this.data,t=this.layout;if(!e||!t)return;let n=this.scene,r=n&&this.selectedHunk>=0?n.hunks[this.selectedHunk]?.id:void 0,i=n&&this.selectedNode>=0?n.nodes[this.selectedNode]?.id:void 0,a=n&&this.pinnedEdge>=0?n.edges[this.pinnedEdge]?.id:void 0,o=ko(e.diff,t,{theme:this.theme,locale:this.locale});this.scene=o,this.resolver=Os(o),this.#o.main=this.#o.before=this.#o.after=null;let s=this.clock;this.clock=new Vc(o.timeline),s&&(this.clock.setSpeed(s.speed),this.clock.seek(s.t),s.playing&&this.clock.play()),this.selectedHunk=r===void 0?-1:o.hunkIndex.get(r)??-1,this.selectedNode=i===void 0?-1:o.nodeIndex.get(i)??-1,this.pinnedEdge=a===void 0?-1:o.edgeIndex.get(a)??-1,this.#s=-1,this.hoverNode=this.hoverEdge=this.hoverGroup=-1,this.list=cc(o,this.families),this.#R(),this.#r?.setTheme(o.theme),this.#f=!0,this.invalidate()}#R(){let e=this.scene;if(!e||this.scope!==`changes`){this.focus=null;return}let t=new Set;for(let n of this.expanded){let r=e.nodeIndex.get(n);r!==void 0&&t.add(r)}this.focus=Fo(e,{hops:this.hops,expanded:t})}attach(e,t){if(this.#r)return;let n=Rc(),r=n.createRenderer(e,{theme:this.theme,labelsInside:this.#e});this.#r=r,this.#b&&r.camera.set(this.#b),t&&(this.#i=n.createMinimap(t,r)),this.#a.push(r.on(`hover`,e=>this.#ie(e)),r.on(`click`,({pick:e})=>this.#ae(e)),r.on(`dblclick`,({pick:e})=>this.#oe(e)),r.on(`camera`,({source:e})=>{e===`user`&&this.noteUserCamera(),this.#ne()})),this.#f=!0,this.invalidate()}detach(){this.#r&&this.status===`ready`&&(this.#b=this.#r.camera.get()),this.#l&&this.#N.cancelFrame(this.#l),this.#l=0;for(let e of this.#a.splice(0))e();this.#i?.destroy(),this.#i=null,this.#r?.destroy(),this.#r=null}destroy(){this.#j=!0,this.detach(),this.#O.clear()}get camera(){return this.#r?.camera??null}setChrome(e){this.#y=e}setLabelsInside(e){this.#e=e,this.#r?.setLabelsInside(e)}layoutChanged(){if(this.#ne(),this.status!==`ready`)return;if(!this.#x){this.autoFit&&!this.#S&&this.fit({animate:!1});return}let e=this.#Q();if(e){if(!this.#G(e,1.8))return;this.#x=!1,this.#K(e,{animate:!1});return}let t=this.#ee(),n=this.#r?.camera;t&&n&&this.#$(n,t,{animate:!1})}noteUserCamera(){this.#m=this.#N.now(),this.#S=!0}invalidate(){this.#d=!0,this.#z()}#z(){this.#l!==0||this.#j||(this.#l=this.#N.requestFrame(this.#B)||0)}#B=()=>{if(this.#l=0,this.#j)return;let e=this.#N.now(),t=this.#u>0?e-this.#u:0,n=!1,r=this.clock;if(r?.playing&&this.mode===`replay`&&(r.advance(t),this.#d=!0,this.#P(`replay`),this.#re(),r.playing?n=!0:r.finished&&this.#fe()),!Number.isNaN(this.#T)&&!this.#E&&(e>=this.#T?this.#pe():n=!0),this.#c){let t=this.#c,r=t.duration>0?Math.min(1,(e-t.start)/t.duration):1;this.emphasis=t.from+(t.to-t.from)*nl(r),this.#d=!0,r>=1?(this.#c=null,this.#s>=0&&(this.#s=-1,this.emphasis=1)):n=!0}this.#d&&this.draw(e),n?(this.#u=e,this.#z()):this.#u=0};#V(e){let t=this.selectedHunk>=0?this.selectedHunk:this.#s;return As({layer:e,t:this.clock?.t??0,selectedHunk:t,hoveredNode:this.hoverNode,hoveredEdge:this.hoverEdge>=0?this.hoverEdge:this.pinnedEdge,selectedNode:this.selectedNode,focus:this.focus,families:this.families,reducedMotion:this.reducedMotion,emphasis:this.emphasis})}draw(e=this.#N.now()){this.#d=!1;let t=this.resolver,n=this.#r;if(!t||!n||this.status!==`ready`)return;let r=this.#o,i;if(this.mode===`swipe`)r.before=t.resolve(this.#V(`before`),r.before??void 0),r.after=t.resolve(this.#V(`after`),r.after??void 0),n.setFrame({split:this.split,before:r.before,after:r.after}),i=r.after;else{let e=this.mode===`replay`?`replay`:`union`;r.main=t.resolve(this.#V(e),r.main??void 0),n.setFrame(r.main),i=r.main}let a=this.mode===`replay`&&(this.clock?.playing??!1);this.#i&&(this.#f||a&&e-this.#p>=$c)&&(this.#i.update(i),this.#f=!1,this.#p=e)}#H(e){this.reducedMotion?(this.emphasis=1,this.#c=null,this.#s=-1):(this.emphasis=e,this.#c={from:e,to:1,start:this.#N.now(),duration:this.theme.motion.base})}#U(e){this.reducedMotion||e<0?(this.#s=-1,this.#c=null,this.emphasis=1):(this.#s=e,this.#c={from:this.emphasis,to:0,start:this.#N.now(),duration:this.theme.motion.base})}get scopeLocked(){return this.layout?.scope===`changes`}setMode(e){if(e===`changes`){this.setView(`overlay`,`changes`);return}let t=vc(e);t!==null&&this.setView(t,this.scope)}setScope(e){let t=yc(e);t!==null&&this.setView(this.mode,t)}toggleScope(){this.scopeLocked?this.#M.announce(W(this.locale,`scope.locked`)):this.setScope(this.scope===`changes`?`all`:`changes`)}setView(e,t){let n=this.scopeLocked?`changes`:t,r=e!==this.mode,i=n!==this.scope;if(r||i){if(this.mode=e,this.scope=n,e!==`replay`&&(this.clock?.pause(),this.#T=NaN,this.#D=!1),this.#h=``,i&&(this.#R(),this.#ne()),this.#f=!0,this.#P(`mode`,`focus`,`replay`),this.invalidate(),this.status===`ready`){this.#M.mode(e,n);let t=[];r&&t.push(W(this.locale,`announce.mode`,{mode:W(this.locale,`mode.${e}`)})),i&&t.push(W(this.locale,n===`changes`?`scope.on`:`scope.off`)),this.#M.announce(t.join(` · `))}r&&e===`replay`&&this.#de()}}selectHunkById(e,t={}){if(e===null){this.#_=null,this.clearSelection();return}let n=this.scene;if(!n||this.status!==`ready`){this.#_={id:e,fly:t.fly??!0};return}let r=n.hunkIndex.get(e);r!==void 0&&this.selectHunk(r,t)}selectHunk(e,t={}){let n=this.scene;if(!n)return;if(e<0||e>=n.hunks.length){this.clearSelection();return}let r=t.node??-1,i=this.selectedHunk,a=i!==e||this.selectedNode!==r;if(this.selectedHunk=e,this.selectedNode=r,this.pinnedEdge=-1,i!==e&&(this.#s=-1,this.#H(i>=0?Xc:0),this.mode===`replay`&&this.clock)){let t=this.clock.windowEnd(e);this.clock.pause(),this.#T=NaN,this.#D=!1,t!==null&&this.clock.seek(t),this.#h=``,this.#P(`replay`)}if((t.fly??!0)&&this.flyToHunk(e),this.invalidate(),!a)return;this.#P(`selection`);let o=n.hunks[e];if(!o)return;let s=r>=0?n.nodes[r]?.id??null:null;if(this.#M.select(o.id,s),i!==e){let t=this.list.rank.get(e);this.#M.announce(W(this.locale,`announce.change`,{i:(t??e)+1,n:t===void 0?n.hunks.length:this.list.order.length,title:o.title}))}}selectNode(e,t={}){let n=this.scene,r=n?.nodes[e];if(!n||!r)return;if(r.hunk>=0){this.selectHunk(r.hunk,{...t,node:e});return}let i=this.selectedHunk;i<0&&this.selectedNode===e?t.fly&&this.flyToNode(e):(this.selectedHunk=-1,this.selectedNode=e,this.pinnedEdge=-1,i>=0&&this.#U(i),t.fly&&this.flyToNode(e),this.invalidate(),this.#P(`selection`),this.#M.select(null,r.id),this.#M.announce(W(this.locale,`announce.node`,{label:r.label,status:W(this.locale,`status.${r.status}`)})))}clearSelection(){if(this.selectedHunk<0&&this.selectedNode<0&&this.pinnedEdge<0)return;let e=this.selectedHunk;this.selectedHunk=-1,this.selectedNode=-1,this.pinnedEdge=-1,this.#U(e),this.invalidate(),this.#P(`selection`),this.#M.select(null,null),this.#M.announce(W(this.locale,`announce.cleared`))}next(){this.#W(1)}prev(){this.#W(-1)}#W(e){let t=uc(this.list,this.selectedHunk,e);t>=0&&this.selectHunk(t)}first(){let e=this.list.order[0];e!==void 0&&this.selectHunk(e)}last(){let e=this.list.order[this.list.order.length-1];e!==void 0&&this.selectHunk(e)}pinEdge(e){let t=this.scene,n=t?.edges[e];if(!t||!n)return;this.pinnedEdge=e;let r=[n.s,n.t,n.sb,n.tb],i=1/0,a=1/0,o=-1/0,s=-1/0;for(let e of r){let n=t.nodes[e];n&&(i=Math.min(i,n.x-n.r),a=Math.min(a,n.y-n.r),o=Math.max(o,n.x+n.r),s=Math.max(s,n.y+n.r))}i<=o&&this.#K(sl({x:i,y:a,width:o-i,height:s-a})),this.invalidate()}#G(e,t){let n=this.#y?.();return!n||!(n.width>0)||!(n.height>0)?null:Gs(e,n,24,t)}#K(e,t={}){let n=this.#r?.camera;if(!n)return;let r=this.#G(e,Zc);n.flyTo(e,{...t,maxZoom:Zc,...r?{padding:r}:{}})}#q(e){let t=this.#r?.camera;if(!t)return null;let n=this.#G(e,1.8)??Us;return Ys(t.viewport(),t.get().k,n)}#J(e,t){let n=this.scene,r=this.clock;if(!n||!r)return;if(e===`chapter`){let e=n.timeline.chapters[t];if(!e)return;this.#M.announce(W(this.locale,`announce.chapter`,{phase:W(this.locale,`phase.${e.phase}`),n:e.hunks.length}));return}let i=n.hunks[t],a=r.timeline.windows.findIndex(e=>e.hunk===t);!i||a<0||this.#M.announce(W(this.locale,`announce.change`,{i:a+1,n:r.total,title:i.title}))}#Y(e){let t=this.scene;if(!t||e.length===0||this.#N.now()-this.#m<2e3)return;let n=Bo(t,e),r=this.#q(n);!r||tl(n,r)>=.7||this.#K(n)}#X(e){let t=this.scene;return t?.hunks[e]?Bo(t,[e]):null}#Z(e){let t=this.scene?.nodes[e];return t?sl({x:t.x-t.r,y:t.y-t.r,width:2*t.r,height:2*t.r}):null}#Q(){return this.selectedHunk>=0?this.#X(this.selectedHunk):this.selectedNode>=0?this.#Z(this.selectedNode):null}flyToHunk(e){let t=this.#X(e);t&&this.#K(t)}flyToNode(e){let t=this.#Z(e);t&&this.#K(t)}flyToSelection(){let e=this.#Q();e&&this.#K(e)}fit(e={}){let t=this.#r?.camera;if(!t)return Promise.resolve();let{padding:n,...r}=e;n!==void 0&&(this.#C=Number.isFinite(n)&&n>=0?n:24);let i=this.#ee();return i?this.#$(t,i,r):t.fit(void 0,r)}#$(e,t,n){return this.#x=!1,this.#S=!1,e.fit(t.bounds,{...n,padding:t.insets,maxZoom:Qc})}#ee(){let e=this.#y?.(),t=this.resolver;if(!e||!t||!(e.width>0)||!(e.height>0))return null;let n=ki(t.resolve(As({layer:`union`,focus:this.focus,families:this.families,reducedMotion:this.reducedMotion})),this.theme),r=e=>n.at(e),i=r(1/0);if(!i)return null;let{width:a,height:o}=e,s=this.#C,c=Gs(i,e,s,Qc),l=Js(r,a,o,c,Qc);if(!l)return null;let u=Gs(l.content,e,s,Qc);return al(u,c)||(c=u,l=Js(r,a,o,c,2.5)??l),{bounds:l.bounds,insets:c}}#te(){let e=this.scene;if(!e)return null;let t=this.focus,n=this.#v;if(n&&n.scene===e&&n.focus===t)return n.rect;let r=t?ol(e,t):Bo(e);return this.#v={scene:e,focus:t,rect:r},r}#ne(){let e=this.#te(),t=this.#r?.camera.viewport(),n=!e||!t||tl(e,t)>=.98;n!==this.overview&&(this.overview=n,this.#P(`overview`))}zoom(e){this.noteUserCamera(),this.#r?.camera.zoomBy(e>0?1.4:1/1.4)}#re(){let e=this.scene,t=this.clock,n=this.#r?.camera;if(!e||!t||!n)return;let r=t.activeTarget();if(r.index<0)return;let i=`${r.kind}:${r.index}`;i!==this.#h&&(this.#h=i,this.#J(r.kind,r.index),this.#Y(r.kind===`chapter`?e.timeline.chapters[r.index]?.hunks??[]:[r.index]))}#ie(e){let t=e?.type===`node`?e.index:-1,n=e?.type===`edge`?e.index:-1,r=e?.type===`collapsed`?e.index:-1;(t!==this.hoverNode||n!==this.hoverEdge||r!==this.hoverGroup)&&(this.hoverNode=t,this.hoverEdge=n,this.hoverGroup=r,this.#P(`hover`),this.invalidate())}clearHover(){this.#ie(null)}#ae(e){if(this.selectOnClick){if(!e)this.clearSelection();else switch(e.type){case`node`:this.selectNode(e.index,{fly:!1});break;case`edge`:{let t=this.scene?.edges[e.index];t&&t.hunk>=0&&this.selectHunk(t.hunk,{fly:!1}),this.pinnedEdge=e.index,this.invalidate();break}case`collapsed`:this.expandGroup(e.index)}}}#oe(e){if(!this.selectOnClick||e?.type!==`node`)return;let t=this.scene?.nodes[e.index];t&&(t.hunk>=0?this.flyToHunk(t.hunk):this.flyToNode(e.index))}toggleFamily(e){this.families.has(e)?this.families.delete(e):this.families.add(e),this.#se()}setFamilies(e){let t=e.length===this.families.size&&e.every(e=>this.families.has(e));if(this.families.clear(),!t)for(let t of e)this.families.add(t);this.#se()}#se(){this.scene&&(this.list=cc(this.scene,this.families)),this.#f=!0,this.#P(`filters`),this.invalidate()}setHops(e){let t=Math.max(0,Math.min(2,Math.round(e)));t!==this.hops&&(this.hops=t,this.#R(),this.#ne(),this.#f=!0,this.#P(`focus`),this.invalidate())}expandGroup(e){let t=this.focus?.collapsed[e],n=this.scene;if(!t||!n)return;let r=t.nodes.map(e=>n.nodes[e]?.id).filter(il);if(!this.canExpand(e)){r.length>0&&this.#ce(r,[]);return}let i=t.id.startsWith(`near:`)?t.id.slice(5):t.id.startsWith(`component:`)?t.id.slice(10):null;this.#ce(r,i===null?r:[i,...r])}nearestGroup(){let e=this.focus?.collapsed??[];if(e.length===0)return-1;let t=this.#Q(),n=this.#r?.camera.viewport(),r=t??n??this.scene?.bounds,i=r?r.x+r.width/2:0,a=r?r.y+r.height/2:0,o=-1,s=1/0;return e.forEach((e,t)=>{let n=this.canExpand(t)||e.nodes.length>0,r=Math.hypot(e.x-i,e.y-a)+(n?0:0xe8d4a51000);r<s&&(s=r,o=t)}),o}expandNearest(){let e=this.nearestGroup(),t=e>=0?this.focus?.collapsed[e]:void 0;!t||!this.canExpand(e)&&t.nodes.length===0?this.#M.announce(W(this.locale,t?`focus.expandUnavailable`:`announce.nothingHidden`)):(this.expandGroup(e),this.#M.announce(W(this.locale,`announce.expanded`,{label:t.label})))}canExpand(e){let t=this.focus?.collapsed[e];return t?!(this.layout?.scope===`changes`&&t.count>t.nodes.length)||Ls()!==`unavailable`:!1}#ce(e,t){let n=this.data,r=this.layout;if(!n||!r)return Promise.resolve();for(let t of e)this.expanded.add(t);let i=new Set;if(r.scope===`changes`){for(let t of e)r.positions.has(t)||i.add(t);for(let e of t)for(let t of n.diff.index.edgesOf(e))for(let e of[t.source,t.target,t.sourceBefore,t.targetBefore])e!==void 0&&!r.positions.has(e)&&i.add(e)}if(i.size===0)return this.#le(),Promise.resolve();let a=()=>{let e=Is(),t=this.layout;if(!e||!t||this.data!==n)return;let r=[...i].filter(e=>!t.positions.has(e));if(r.length>0){this.layout=e.extendLayout(n.diff,t,r,n.layoutOptions);for(let e of r)this.expanded.add(e);this.#L(),this.#P(`data`,`selection`,`replay`)}this.#le()};return Is()?(a(),Promise.resolve()):Rs().then(a,()=>this.#le())}#le(){this.#R(),this.#ne(),this.#f=!0,this.#P(`focus`),this.invalidate()}revealNode(e){if(!this.data||!this.scene)return Promise.resolve();let t=()=>{let t=this.scene?.nodeIndex.get(e);t!==void 0&&this.selectNode(t,{fly:!0})};return this.scene.nodeIndex.has(e)&&this.#ue(e)?(t(),Promise.resolve()):this.#ce([e],[]).then(t)}#ue(e){let t=this.scene?.nodeIndex.get(e);return t!==void 0&&(this.focus===null||this.focus.nodes[t]===1)}play(){let e=this.clock;e&&this.status===`ready`&&(this.mode!==`replay`&&this.setMode(`replay`),this.#T=NaN,this.#D=!1,e.play(),this.#h=``,this.#u=0,this.#P(`replay`),this.invalidate())}pause(){this.#T=NaN,this.#D=!1,this.clock?.playing&&(this.clock.pause(),this.#P(`replay`),this.invalidate())}togglePlay(){this.clock?.playing?this.pause():this.play()}setLoop(e){let t=this.#w;this.#w=e===null?null:Number.isFinite(e)?Math.max(0,e):0,this.#w===null?this.#T=NaN:t===null&&this.#de()}get loopDelay(){return this.#w}hold(e){if(e===this.#E)return;this.#E=e;let t=this.clock;if(e){if(!t?.playing)return;t.pause(),this.#D=!0,this.#P(`replay`),this.invalidate()}else!Number.isNaN(this.#T)&&this.#w!==null&&(this.#T=this.#N.now()+this.#w,this.#z()),this.#D&&this.play()}#de(){this.#w!==null&&this.status===`ready`&&this.mode===`replay`&&this.clock&&!this.clock.playing&&Number.isNaN(this.#T)&&(this.#E?this.#D=!0:this.play())}#fe(){this.#M.announce(W(this.locale,`announce.finished`));let e=this.#w!==null;e&&(this.#T=this.#N.now()+(this.#w??0)),this.#M.replayEnd(e)}#pe(){this.#T=NaN,this.autoFit&&this.fit(),this.clock?.seek(0),this.play()}seek(e){let t=this.clock;t&&(this.#T=NaN,t.seek(e),this.#P(`replay`),this.#re(),this.invalidate())}stepReplay(e){let t=this.clock;if(!t)return;t.step(e),this.#T=NaN,this.#D=!1,this.#h=``;let n=t.timeline.windows[t.position()-1];n&&(t.timeline.mode===`chapters`?this.#J(`chapter`,n.chapter):this.#J(`hunk`,n.hunk),this.#Y(t.timeline.mode===`chapters`?t.timeline.chapters[n.chapter]?.hunks??[n.hunk]:[n.hunk])),this.#P(`replay`),this.invalidate()}restart(){this.clock?.seek(0),this.play()}cycleSpeed(){this.clock?.cycleSpeed(),this.#P(`replay`)}setSpeed(e){this.clock?.setSpeed(e),this.#P(`replay`)}setSplit(e){let t=Number.isFinite(e)?Math.min(1,Math.max(0,e)):.5;t!==this.split&&(this.split=t,this.#P(`swipe`),this.mode===`swipe`&&this.invalidate())}setReviewed(e,t){let n=this.#t;if(!n?.setReviewed(e,t))return;let r=n.state();this.#P(`review`),this.#M.review(e,t,r);let i=W(this.locale,`review.progress`,{done:r.reviewed.length,total:r.total});this.#M.announce(W(this.locale,t?`announce.reviewed`:`announce.unreviewed`,{progress:i}))}syncReview(e){this.#t?.reload(e)&&this.#P(`review`)}toggleReviewed(e){let t=e??(this.selectedHunk>=0?this.scene?.hunks[this.selectedHunk]?.id:void 0);t!==void 0&&this.setReviewed(t,!this.isReviewed(t))}#me(e){let t=this.themeName,n=this.palette,r=this.locale;e();let i=t!==this.themeName||n!==this.palette,a=r!==this.locale;(i||a)&&(this.data?this.#L():this.#r?.setTheme(this.theme)),i&&this.#P(`theme`),a&&this.#P(`locale`,`data`)}setThemePreference(e){this.#me(()=>{this.themePreference=xc(e)??`auto`}),this.#P(`theme`)}setPalette(e){this.#me(()=>{this.palette=Sc(e)??`default`})}setLocale(e){this.#me(()=>{this.locale=Cc(e)??`en`})}setSystemDark(e){this.#me(()=>{this.systemDark=e})}setReducedMotion(e){this.reducedMotion=e,this.invalidate()}};function il(e){return e!==void 0}function al(e,t){return e.top===t.top&&e.right===t.right&&e.bottom===t.bottom&&e.left===t.left}function ol(e,t){let n=1/0,r=1/0,i=-1/0,a=-1/0,o=(e,t,o,s,c)=>{n=Math.min(n,e-o),i=Math.max(i,e+o),r=Math.min(r,t-s),a=Math.max(a,t+c)};for(let n of e.nodes)t.nodes[n.index]===1&&o(n.x,n.y,n.r+48,n.r,n.r+24);for(let e of t.collapsed)o(e.x,e.y,48,12,12);return n<=i?sl({x:n,y:r,width:i-n,height:a-r},160,1.12):Bo(e)}function sl(e,t=200,n=1.4){let r=Math.max(t,e.width*n),i=Math.max(t,e.height*n);return{x:e.x+e.width/2-r/2,y:e.y+e.height/2-i/2,width:r,height:i}}var cl={overlay:`<path d="M8 2.25 14 5.5 8 8.75 2 5.5Z"/><path d="m2 8.25 6 3.25 6-3.25"/><path d="m2 11 6 3.25L14 11" opacity=".55"/>`,swipe:`<rect x="2" y="3" width="12" height="10" rx="2"/><path d="M8 1.75v12.5"/><path d="M4.75 8h-1M12.25 8h-1" opacity=".55"/>`,replay:`<path d="M2.75 8a5.25 5.25 0 1 0 1.6-3.78"/><path d="M2.5 2.5v2.75h2.75"/><path d="M8 5.25V8l1.9 1.3"/>`,changes:`<path d="M2.5 5.5v-2a1 1 0 0 1 1-1h2M10.5 2.5h2a1 1 0 0 1 1 1v2M13.5 10.5v2a1 1 0 0 1-1 1h-2M5.5 13.5h-2a1 1 0 0 1-1-1v-2"/><circle cx="8" cy="8" r="1.9"/>`,fit:`<path d="M2.5 6V3.5a1 1 0 0 1 1-1H6M10 2.5h2.5a1 1 0 0 1 1 1V6M13.5 10v2.5a1 1 0 0 1-1 1H10M6 13.5H3.5a1 1 0 0 1-1-1V10"/>`,help:`<circle cx="8" cy="8" r="6"/><path d="M6.25 6.25a1.8 1.8 0 0 1 3.5.5c0 1.25-1.75 1.5-1.75 2.6"/><path d="M8 11.3v.01"/>`,sidebar:`<rect x="2" y="2.75" width="12" height="10.5" rx="2"/><path d="M10 2.75v10.5"/>`,contrast:`<circle cx="8" cy="8" r="5.75"/><path d="M8 2.25a5.75 5.75 0 0 1 0 11.5Z" fill="currentColor" stroke="none"/>`,sun:`<circle cx="8" cy="8" r="2.75"/><path d="M8 1.75v1.5M8 12.75v1.5M1.75 8h1.5M12.75 8h1.5M3.6 3.6l1.05 1.05M11.35 11.35l1.05 1.05M3.6 12.4l1.05-1.05M11.35 4.65l1.05-1.05"/>`,moon:`<path d="M13.25 9.6A5.5 5.5 0 0 1 6.4 2.75a5.5 5.5 0 1 0 6.85 6.85Z"/>`,monitor:`<rect x="2" y="2.75" width="12" height="8.5" rx="1.5"/><path d="M5.5 13.75h5M8 11.25v2.5"/>`,search:`<circle cx="7.25" cy="7.25" r="4.5"/><path d="m10.6 10.6 3 3"/>`,close:`<path d="m4.25 4.25 7.5 7.5M11.75 4.25l-7.5 7.5"/>`,check:`<path d="m3.5 8.4 3 2.9 6-6.6"/>`,"chevron-left":`<path d="M10 3.5 5.5 8l4.5 4.5"/>`,"chevron-right":`<path d="M6 3.5 10.5 8 6 12.5"/>`,"chevron-up":`<path d="M3.5 10 8 5.5l4.5 4.5"/>`,"chevron-down":`<path d="M3.5 6 8 10.5 12.5 6"/>`,play:`<path d="M5.25 3.6v8.8a.5.5 0 0 0 .77.42l6.6-4.4a.5.5 0 0 0 0-.84l-6.6-4.4a.5.5 0 0 0-.77.42Z" fill="currentColor"/>`,pause:`<path d="M5.5 3.75v8.5M10.5 3.75v8.5" stroke-width="2"/>`,"skip-back":`<path d="M12 4.1v7.8a.5.5 0 0 1-.78.41L5.6 8.41a.5.5 0 0 1 0-.82l5.62-3.9A.5.5 0 0 1 12 4.1Z" fill="currentColor"/><path d="M3.75 4v8"/>`,"skip-forward":`<path d="M4 4.1v7.8a.5.5 0 0 0 .78.41l5.62-3.9a.5.5 0 0 0 0-.82L4.78 3.69A.5.5 0 0 0 4 4.1Z" fill="currentColor"/><path d="M12.25 4v8"/>`,restart:`<path d="M2.75 8a5.25 5.25 0 1 0 1.6-3.78"/><path d="M2.5 2.5v2.75h2.75"/>`,plus:`<path d="M8 3.25v9.5M3.25 8h9.5"/>`,minus:`<path d="M3.25 8h9.5"/>`,target:`<circle cx="8" cy="8" r="4.25"/><path d="M8 1.75v2.5M8 11.75v2.5M1.75 8h2.5M11.75 8h2.5"/>`,"check-circle":`<circle cx="8" cy="8" r="6"/><path d="m5.4 8.2 1.85 1.85L10.75 6.3"/>`,alert:`<path d="M8 2.25 14.25 13a.5.5 0 0 1-.43.75H2.18a.5.5 0 0 1-.43-.75Z"/><path d="M8 6.5v3"/><path d="M8 11.6v.01"/>`,keyboard:`<rect x="1.75" y="4" width="12.5" height="8" rx="1.5"/><path d="M4.5 6.75h.01M7 6.75h.01M9.5 6.75h.01M12 6.75h.01M5.5 9.5h5"/>`};function ll(e,t){if(t!=null&&t!==!1){if(Array.isArray(t))for(let n of t)ll(e,n);else e.appendChild(typeof t==`string`||typeof t==`number`?document.createTextNode(String(t)):t)}}function K(e,t,...n){let r=document.createElement(e);if(t)for(let[e,n]of Object.entries(t))n!=null&&n!==!1&&(e===`text`?r.textContent=String(n):e.startsWith(`on`)&&typeof n==`function`?r.addEventListener(e.slice(2),n):e===`class`?r.className=String(n):r.setAttribute(e,n===!0?``:String(n)));for(let e of n)ll(r,e);return r}function q(e,...t){e.textContent=``;for(let n of t)ll(e,n)}function ul(e,t,n,...r){let i=e.activeElement,a=i!==null&&t.contains(i),o=a?i.dataset.focusKey??``:``;if(q(t,...r),!a)return;let s=null;if(o){for(let e of t.querySelectorAll(`[data-focus-key]`))if(e.dataset.focusKey===o&&!e.disabled){s=e;break}}(s??n)?.focus({preventScroll:!0})}function J(e,t,n){if(n===null||n===!1){e.hasAttribute(t)&&e.removeAttribute(t);return}let r=n===!0?``:n;e.getAttribute(t)!==r&&e.setAttribute(t,r)}function Y(e,t){e.textContent!==t&&(e.textContent=t)}function X(e,t=`icon`){let n=document.createElement(`template`);return n.innerHTML=`<svg class="${t}" viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">${cl[e]}</svg>`,n.content.firstElementChild}function Z(e,t,n,r={}){return K(`button`,{type:`button`,class:`icon-btn`,"aria-label":t,title:t,onclick:n,...r},X(e))}function Q(e,t){J(e,`aria-label`,t),J(e,`title`,t)}var dl=`kgdiff=`;function fl(e){try{return decodeURIComponent(e)}catch{return}}function pl(e){let t=e.startsWith(`#`)?e.slice(1):e;if(!t.startsWith(dl))return null;let n,r,i,a=!1;for(let e of t.slice(7).split(`;`)){let t=e.indexOf(`:`);if(t<=0)continue;let o=e.slice(0,t),s=fl(e.slice(t+1));s!==void 0&&s!==``&&(o===`hunk`?n=s:o===`mode`&&s===`changes`?(r=`overlay`,a=!0):o===`mode`?r=vc(s)??r:o===`scope`&&(i=yc(s)??i))}return a&&(i??=`changes`),{...n===void 0?{}:{hunk:n},...r===void 0?{}:{mode:r},...i===void 0?{}:{scope:i}}}function ml(e){let t=[];return e.hunk!==void 0&&t.push(`hunk:${encodeURIComponent(e.hunk)}`),e.mode!==void 0&&t.push(`mode:${e.mode}`),e.scope!==void 0&&t.push(`scope:${e.scope}`),`#${dl}${t.join(`;`)}`}var hl={1:`overlay`,2:`swipe`,3:`replay`},gl=.02,_l=.1;function vl(e,t,n=`all`){if(e.ctrlKey||e.metaKey||e.altKey)return null;let r=e.key,i=hl[r];if(i!==void 0)return{type:`mode`,mode:i};switch(r){case`4`:return{type:`scope`};case`j`:case`ArrowDown`:return{type:`next`};case`k`:case`ArrowUp`:return{type:`prev`};case`Home`:return{type:`first`};case`End`:return{type:`last`};case`Enter`:return{type:`fly`};case`Escape`:return{type:`escape`};case` `:case`Spacebar`:return t===`replay`?{type:`play-pause`}:null;case`ArrowLeft`:case`ArrowRight`:{let n=r===`ArrowRight`?1:-1;return t===`replay`?{type:`step`,direction:n}:t===`swipe`?{type:`divider`,delta:n*(e.shiftKey?_l:gl)}:null}case`f`:case`F`:return{type:`fit`};case`+`:case`=`:return{type:`zoom`,direction:1};case`-`:case`_`:case`−`:return{type:`zoom`,direction:-1};case`/`:return{type:`search`};case`x`:case`X`:return{type:`review`};case`\\`:return{type:`sidebar`};case`t`:case`T`:return{type:`theme`};case`e`:case`E`:return n===`changes`?{type:`expand`}:null;case`?`:return{type:`help`};default:return null}}function yl(e){if(e===null||typeof e.tagName!=`string`)return!1;let t=e,n=t.tagName.toLowerCase();if(n===`textarea`||n===`select`)return!0;if(n===`input`){let e=(t.type??`text`).toLowerCase();return![`button`,`checkbox`,`radio`,`range`,`submit`,`reset`,`color`,`file`].includes(e)}return t.isContentEditable===!0||t.getAttribute?.(`contenteditable`)===`true`}var bl=new Set,xl=`application/kgdiff+json`;function Sl(e){let t=e.replace(/\s+/g,``),n=atob(t),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);return r}async function Cl(e){if(typeof DecompressionStream!=`function`)throw new p(`invalid-input`,`This browser cannot decompress the embedded report (DecompressionStream is missing).`);let t=new ReadableStream({start(t){t.enqueue(e),t.close()}}).pipeThrough(new DecompressionStream(`gzip`)).getReader(),n=[],r=0;for(;;){let{done:e,value:i}=await t.read();if(e)break;n.push(i),r+=i.length}let i=new Uint8Array(r),a=0;for(let e of n)i.set(e,a),a+=e.length;return new TextDecoder().decode(i)}async function wl(e,t){let n,r=(t??``).trim().toLowerCase();if(r===``||r===`json`||r===`identity`)n=e;else if(r===`gzip-base64`)try{n=await Cl(Sl(e))}catch(e){throw e instanceof p?e:new p(`invalid-input`,`The embedded report is not valid gzip-base64: ${e.message}`)}else throw new p(`invalid-input`,`Unknown payload encoding "${t}".`);let i;try{i=JSON.parse(n)}catch(e){throw new p(`invalid-input`,`The embedded report is not valid JSON: ${e.message}`)}return Tl(i)}function Tl(e){if(typeof e!=`object`||!e)throw new p(`invalid-input`,`A kgdiff report payload must be an object.`);let t=e;if(t.format!==`kgdiff.report`)throw new p(`invalid-input`,`Expected format "kgdiff.report", got ${JSON.stringify(t.format)}.`);if(t.version!==1)throw new p(`unsupported-version`,`Unsupported kgdiff report version ${JSON.stringify(t.version)} (this viewer reads version 1).`);if(typeof t.diff!=`object`||t.diff===null||typeof t.layout!=`object`||!t.layout)throw new p(`invalid-input`,"A kgdiff report needs both `diff` and `layout`.");return e}function El(e,t){let n=e;return typeof n.getElementById==`function`?n.getElementById(t):e.querySelector(`[id="${t.replace(/["\\]/g,`\\$&`)}"]`)}function Dl(e){for(let t of e.querySelectorAll(`*`))if(bl.has(t.localName))return t;return null}function Ol(e,t){let n=e.getAttribute(`data-for`);return n?El(t,n):Dl(t)}async function kl(e){let t=[...e.querySelectorAll(`script[type="${xl}"]`)];await Promise.all(t.map(async t=>{let n=Ol(t,e);try{let e=await wl(t.textContent??``,t.getAttribute(`data-encoding`));n&&(n.payload=e)}catch(e){let t=e instanceof Error?e:new p(`invalid-input`,String(e));if(n){let e=n.showError;typeof e==`function`?e.call(n,t):n.dispatchEvent(new CustomEvent(`kgdiff-error`,{detail:{error:t},bubbles:!0,composed:!0}))}else console.error(`[kgdiff] embedded payload:`,t)}}))}var Al=[`added`,`removed`,`content`,`structure`,`identity`];function jl(e){let t=e.name===`dark`,n={"color-scheme":t?`dark`:`light`,"--kg-bg":e.canvas.background,"--kg-grid":e.canvas.grid,"--kg-panel":e.surface.panel,"--kg-raised":e.surface.raised,"--kg-overlay":e.surface.overlay,"--kg-border":e.surface.border,"--kg-border-strong":e.surface.borderStrong,"--kg-control-border":e.surface.controlBorder,"--kg-shadow":e.surface.shadow,"--kg-text":e.text.primary,"--kg-text-2":e.text.secondary,"--kg-text-3":e.text.muted,"--kg-accent":e.accent.base,"--kg-accent-strong":e.accent.strong,"--kg-accent-soft":e.accent.soft,"--kg-accent-text":e.accent.text,"--kg-neutral":e.neutral.node,"--kg-neutral-stroke":e.neutral.nodeStroke,"--kg-neutral-edge":e.neutral.edge,"--kg-font":e.font.family,"--kg-mono":e.font.mono,"--kg-fast":`${e.motion.fast}ms`,"--kg-base":`${e.motion.base}ms`,"--kg-slow":`${e.motion.slow}ms`,"--kg-ease":`cubic-bezier(${e.motion.easing.join(`, `)})`,"--kg-hover":t?`rgba(255,255,255,0.045)`:`rgba(15,23,42,0.04)`,"--kg-press":t?`rgba(255,255,255,0.08)`:`rgba(15,23,42,0.07)`,"--kg-input":t?e.surface.raised:`#F3F5F8`,"--kg-selected":t?e.surface.raised:`#F5F7FB`,"--kg-scrim":t?`rgba(5,7,11,0.56)`:`rgba(15,23,42,0.18)`,"--kg-skeleton":t?`rgba(255,255,255,0.05)`:`rgba(15,23,42,0.05)`,"--kg-skeleton-hi":t?`rgba(255,255,255,0.09)`:`rgba(15,23,42,0.09)`,"--kg-track":t?`rgba(255,255,255,0.08)`:`rgba(15,23,42,0.08)`,"--kg-kbd":t?`rgba(255,255,255,0.06)`:`rgba(15,23,42,0.05)`};for(let t of Al){let r=e.family[t];n[`--kg-${t}`]=r.base,n[`--kg-${t}-strong`]=r.strong,n[`--kg-${t}-soft`]=r.soft,n[`--kg-${t}-text`]=r.text}return Object.entries(n).map(([e,t])=>`${e}: ${t};`).join(` `)}var Ml=`:host{all:initial;display:block;position:relative;height:100%;min-height:420px;contain:content;font-family:var(--kg-font);font-size:13px;line-height:1.45;color:var(--kg-text);background:var(--kg-bg);-webkit-font-smoothing:antialiased}:host([hidden]){display:none}:host([chrome="none"]){min-height:120px}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}button,input{font:inherit;color:inherit;letter-spacing:inherit}button{margin:0;padding:0;border:0;background:none;cursor:pointer;-webkit-tap-highlight-color:transparent}button:disabled{cursor:default;opacity:0.4}:focus{outline:none}:focus-visible{outline:2px solid var(--kg-accent);outline-offset:2px}.icon{width:16px;height:16px;flex:none;display:block}.sr-only{position:absolute !important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}kbd{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 5px;border-radius:5px;font:500 11px/1 var(--kg-mono);color:var(--kg-text-2);background:var(--kg-kbd);box-shadow:inset 0 0 0 1px var(--kg-border),inset 0 -1px 0 var(--kg-border)}.scroll{overflow:auto;scrollbar-width:thin;scrollbar-color:var(--kg-border-strong) transparent}.root{position:absolute;inset:0;display:flex;flex-direction:column;overflow:hidden;background:var(--kg-bg)}.body{position:relative;flex:1;min-height:0;display:flex}.stage-wrap{position:relative;flex:1;min-width:0;min-height:0;overflow:hidden;background:var(--kg-bg);container-type:inline-size}.stage{position:absolute;inset:0}.stage canvas{outline:none}.stage canvas:focus-visible{outline:2px solid var(--kg-accent);outline-offset:-2px}.chrome{position:absolute;inset:0;pointer-events:none}.chrome>*{pointer-events:auto}.icon-btn{display:inline-flex;align-items:center;justify-content:center;flex:none;width:32px;height:32px;border-radius:8px;color:var(--kg-text-2);transition:background var(--kg-fast) var(--kg-ease),color var(--kg-fast) var(--kg-ease)}.icon-btn:hover{background:var(--kg-hover);color:var(--kg-text)}.icon-btn:active{background:var(--kg-press)}.icon-btn[aria-pressed="true"],.icon-btn[aria-expanded="true"]{background:var(--kg-press);color:var(--kg-text)}.icon-btn.sm{width:28px;height:28px;border-radius:7px}.btn{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 10px;border-radius:7px;font-size:12px;font-weight:500;color:var(--kg-text);background:var(--kg-hover);box-shadow:inset 0 0 0 1px var(--kg-border);transition:background var(--kg-fast) var(--kg-ease),box-shadow var(--kg-fast) var(--kg-ease)}.btn:hover{background:var(--kg-press);box-shadow:inset 0 0 0 1px var(--kg-border-strong)}.link-btn{min-height:28px;color:var(--kg-accent-text);font-weight:500;font-size:12px;border-radius:4px}.link-btn:hover{text-decoration:underline;text-underline-offset:3px}.hud{position:absolute;inset:0;z-index:3;pointer-events:none}.hud>*{pointer-events:auto}.hud-title{position:absolute;top:12px;left:12px;max-width:calc(100% - 184px);height:40px;display:flex;align-items:center;gap:10px;padding:0 14px 0 10px}.hud[data-titled="false"] .header-sep{display:none}:host([header="compact"]) .hud-title{display:none}.hud-end{position:absolute;top:12px;right:12px}.hud-actions{display:flex;align-items:center;gap:2px;padding:4px}.brand{display:flex;align-items:center;gap:8px;flex:none;color:var(--kg-text)}.brand-mark{width:20px;height:20px;display:block}.brand-name{font-size:14px;font-weight:650;letter-spacing:-0.01em}.header-sep{width:1px;height:18px;background:var(--kg-border-strong);flex:none}.versions{display:flex;align-items:center;gap:8px;min-width:0;flex:0 1 auto;font-size:13px;overflow:hidden}.versions .name{font-weight:550;color:var(--kg-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.versions .arrow{color:var(--kg-text-3);flex:none}.versions .side{display:flex;align-items:center;gap:6px;min-width:0}.tag{display:inline-flex;align-items:center;height:20px;padding:0 6px;border-radius:5px;flex:none;font:500 11px/1 var(--kg-mono);color:var(--kg-text-2);background:var(--kg-hover);box-shadow:inset 0 0 0 1px var(--kg-border);white-space:nowrap;max-width:160px;overflow:hidden;text-overflow:ellipsis}.segmented{position:relative;display:inline-flex;align-items:center;gap:2px;height:32px;padding:2px;flex:none;border-radius:9px;background:var(--kg-hover);box-shadow:inset 0 0 0 1px var(--kg-border)}.segmented .thumb{position:absolute;top:2px;bottom:2px;left:0;width:0;border-radius:7px;background:var(--kg-raised);box-shadow:0 1px 2px rgba(0,0,0,0.12),inset 0 0 0 1px var(--kg-border-strong);transition:transform var(--kg-base) var(--kg-ease),width var(--kg-base) var(--kg-ease)}.seg{position:relative;z-index:1;display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 10px;border-radius:7px;font-size:12.5px;font-weight:500;color:var(--kg-text-2);white-space:nowrap;transition:color var(--kg-fast) var(--kg-ease)}.seg:hover{color:var(--kg-text)}.seg[aria-checked="true"]{color:var(--kg-text)}.seg .icon{opacity:0.9}${[...Al,`neutral`].map(e=>e===`neutral`?`[data-family="neutral"] { --fam-base: var(--kg-neutral); --fam-soft: var(--kg-hover); --fam-text: var(--kg-text-2); }`:`[data-family="${e}"] { --fam-base: var(--kg-${e}); --fam-soft: var(--kg-${e}-soft); --fam-text: var(--kg-${e}-text); }`).join(`
|
|
4
|
+
`)}.card{background:var(--kg-overlay);border-radius:12px;box-shadow:var(--kg-shadow),0 0 0 1px var(--kg-border);backdrop-filter:blur(16px) saturate(140%)}.float{position:absolute}.bottom-left{bottom:16px;left:16px}.bottom-right{bottom:16px;right:16px}.chip{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 10px;border-radius:8px;font-size:12px;font-weight:600;color:var(--kg-text-2);letter-spacing:0.01em}.map-cluster{display:flex;align-items:flex-end;gap:8px}.zoom-bar{display:flex;flex-direction:column;padding:2px;gap:2px}.zoom-bar .icon-btn{width:30px;height:30px}.minimap-host{position:relative;width:184px;height:128px;border-radius:12px;box-shadow:0 0 0 1px var(--kg-border);animation:fade var(--kg-base) var(--kg-ease)}.minimap-host[data-hidden="true"]{display:none}.minimap-host canvas{border-radius:12px}.legend{padding:6px;min-width:0}.legend-head{display:flex;align-items:center;gap:6px;height:28px;padding:0 6px 0 8px;font-size:11px;font-weight:600;letter-spacing:0.06em;text-transform:uppercase;color:var(--kg-text-3);border-radius:7px;width:100%}.legend-head:hover{color:var(--kg-text-2);background:var(--kg-hover)}.legend-head .icon{width:14px;height:14px;margin-left:auto;transition:transform var(--kg-base) var(--kg-ease)}.legend[data-open="false"] .legend-head .icon{transform:rotate(180deg)}.legend[data-open="false"] .legend-body{display:none}.legend[data-open="false"]{padding:2px}.legend-body{display:grid;gap:2px;padding:2px 4px 4px}.legend-row{display:grid;grid-template-columns:22px auto;align-items:center;column-gap:8px;height:26px;padding:0 10px 0 4px;border-radius:6px;cursor:default}.legend-row .name{font-size:12px;font-weight:550;color:var(--kg-text)}.swatch{width:22px;height:22px;display:block}.mini-legend{display:none}.stage-wrap[data-legend="mini"] .mini-legend{display:flex;flex-wrap:wrap;align-items:center;gap:2px 12px;bottom:8px;left:12px;max-width:calc(100% - 24px);font-size:11px;line-height:16px;color:var(--kg-text-2)}.mini-item{display:inline-flex;align-items:center;gap:5px;white-space:nowrap}.mini-item .dot{width:8px;height:8px;border-radius:50%;flex:none;background:var(--fam-base)}.mini-item[data-family="removed"] .dot{background:none;box-shadow:inset 0 0 0 1.5px var(--fam-base)}.stage-wrap[data-legend="mini"] .legend,.stage-wrap[data-legend="none"] .legend{display:none}.caption{max-width:min(560px,100%);display:flex;align-items:center;gap:8px;height:32px;padding:0 12px 0 6px;font-size:12.5px;font-weight:550}.caption .text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.caption .count{color:var(--kg-text-3);font-weight:500;font-variant-numeric:tabular-nums;flex:none}.caption[data-empty="true"]{display:none}.glyph-box{display:inline-flex;align-items:center;justify-content:center;flex:none;width:20px;height:20px;border-radius:6px;font-size:12px;font-weight:700;line-height:1;color:var(--fam-text);background:var(--fam-soft)}.chrome>.dock{position:absolute;left:16px;right:16px;bottom:16px;display:flex;flex-direction:column;align-items:center;gap:8px;pointer-events:none}.dock>*{pointer-events:auto}.dock-bar{display:flex;align-items:center;gap:4px;height:44px;padding:0 6px;max-width:100%}.dock-sep{width:1px;height:20px;margin:0 2px;flex:none;background:var(--kg-border-strong)}.scope-btn{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 10px;border-radius:9px;flex:none;font-size:12.5px;font-weight:500;color:var(--kg-text-2);white-space:nowrap;transition:background var(--kg-fast) var(--kg-ease),color var(--kg-fast) var(--kg-ease),box-shadow var(--kg-fast) var(--kg-ease)}.scope-btn:hover{color:var(--kg-text);background:var(--kg-hover)}.scope-btn[aria-pressed="true"]{color:var(--kg-accent-text);background:var(--kg-accent-soft);box-shadow:inset 0 0 0 1px var(--kg-accent-soft)}.scope-btn[aria-disabled="true"]{cursor:default}.context{display:inline-flex;align-items:center;gap:8px;padding-left:2px;flex:none;animation:reveal var(--kg-base) var(--kg-ease)}@keyframes reveal{from{opacity:0;transform:translateX(-6px)}}.context .label{font-size:12px;font-weight:550;color:var(--kg-text-3);white-space:nowrap}.context .opts{display:inline-flex;gap:2px;padding:2px;border-radius:8px;background:var(--kg-hover)}.context .opt{width:28px;height:28px;border-radius:6px;font-size:12px;font-weight:600;color:var(--kg-text-2);font-variant-numeric:tabular-nums}.context .opt:hover{color:var(--kg-text)}.context .opt[aria-checked="true"]{background:var(--kg-raised);color:var(--kg-text);box-shadow:inset 0 0 0 1px var(--kg-border-strong)}.context .expand{display:inline-flex;align-items:center;gap:4px;height:28px;padding:0 10px 0 8px;border-radius:7px;font-size:12px;font-weight:600;color:var(--kg-text-2);box-shadow:inset 0 0 0 1px var(--kg-border-strong);font-variant-numeric:tabular-nums}.context .expand:hover:not(:disabled){color:var(--kg-text);background:var(--kg-hover)}.context .expand .icon{width:14px;height:14px}@container (max-width:1180px){.context .label{display:none}}@container (max-width:1000px){.dock-bar .seg .lbl{display:none}.dock-bar .seg{padding:0 9px}}@container (max-width:640px){.scope-btn .lbl{display:none}.scope-btn{padding:0 9px}}.swipe{position:absolute;inset:0;pointer-events:none}.swipe .divider{position:absolute;top:0;bottom:0;left:0;width:24px;margin-left:-12px;cursor:ew-resize;pointer-events:auto;touch-action:none;display:flex;justify-content:center}.swipe .divider::before{content:'';width:1.5px;height:100%;background:var(--kg-accent);opacity:0.85;box-shadow:0 0 12px var(--kg-accent-soft)}.swipe .handle{position:absolute;top:50%;left:50%;width:32px;height:32px;margin:-16px 0 0 -16px;border-radius:50%;display:flex;align-items:center;justify-content:center;gap:0;color:var(--kg-accent-text);background:var(--kg-overlay);box-shadow:var(--kg-shadow),0 0 0 1.5px var(--kg-accent);backdrop-filter:blur(16px);transition:transform var(--kg-fast) var(--kg-ease)}.swipe .handle .icon{width:12px;height:12px}.swipe .divider:hover .handle,.swipe .divider.dragging .handle{transform:scale(1.08)}.swipe .divider:focus-visible{outline:none}.swipe .divider:focus-visible .handle{box-shadow:var(--kg-shadow),0 0 0 2px var(--kg-accent),0 0 0 5px var(--kg-accent-soft)}.swipe .side-chip{position:absolute;top:64px;pointer-events:none}.swipe .side-chip.before{left:12px}.swipe .side-chip.after{right:12px}.transport{width:min(600px,calc(100% - 464px));min-width:min(360px,100%);display:flex;align-items:center;gap:4px;height:48px;padding:0 8px}.transport .play{width:36px;height:36px;border-radius:10px;color:var(--kg-text)}.transport .play .icon{width:18px;height:18px}.transport .pos{flex:none;min-width:64px;text-align:center;font-size:12px;font-weight:550;color:var(--kg-text-2);font-variant-numeric:tabular-nums}.transport .speed{flex:none;height:28px;min-width:44px;padding:0 8px;border-radius:7px;font-size:12px;font-weight:600;color:var(--kg-text-2);font-variant-numeric:tabular-nums;box-shadow:inset 0 0 0 1px var(--kg-border)}.transport .speed:hover{color:var(--kg-text);background:var(--kg-hover)}.scrubber{position:relative;flex:1;height:36px;margin:0 8px;cursor:pointer;touch-action:none;border-radius:6px}.scrubber .track{position:absolute;left:0;right:0;top:50%;height:4px;margin-top:-2px;border-radius:2px;background:var(--kg-track);overflow:hidden}.scrubber .fill{position:absolute;left:0;top:0;bottom:0;width:100%;transform-origin:left;background:var(--kg-accent);opacity:0.85}.scrubber .ticks{position:absolute;left:0;right:0;top:50%;height:14px;margin-top:-7px;width:100%;pointer-events:none;overflow:visible}.scrubber .knob{position:absolute;top:50%;left:0;width:14px;height:14px;margin:-7px 0 0 -7px;border-radius:50%;background:var(--kg-text);box-shadow:0 1px 4px rgba(0,0,0,0.35),0 0 0 3px var(--kg-accent-soft);pointer-events:none}.scrubber:focus-visible{outline-offset:0}.scrub-tip{position:absolute;bottom:100%;margin-bottom:10px;transform:translateX(-50%);max-width:320px;padding:6px 10px;font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:none;display:flex;align-items:center;gap:6px}.finished{display:flex;align-items:center;gap:10px;height:36px;padding:0 6px 0 12px;font-size:12.5px;font-weight:550;color:var(--kg-text);animation:rise var(--kg-base) var(--kg-ease)}.finished .icon{color:var(--kg-accent-text)}@keyframes rise{from{opacity:0;transform:translateY(6px)}}.tooltip{position:absolute;left:0;top:0;z-index:4;width:max-content;max-width:300px;padding:10px 12px;pointer-events:none;border-radius:10px;opacity:0;transition:opacity var(--kg-fast) var(--kg-ease)}.tooltip[data-open="true"]{opacity:1}.tooltip .t-label{font-size:13px;font-weight:600;color:var(--kg-text);overflow-wrap:anywhere}.tooltip .t-old{font-size:12px;color:var(--kg-text-3);text-decoration:line-through;overflow-wrap:anywhere}.tooltip .t-id{margin-top:2px;font:11px/1.4 var(--kg-mono);color:var(--kg-text-3);overflow-wrap:anywhere}.tooltip .t-status{margin-top:8px;display:flex;align-items:center;gap:6px;font-size:12px;font-weight:550;color:var(--fam-text)}.tooltip .t-status .dot{width:7px;height:7px;border-radius:50%;background:var(--fam-base);flex:none}.tooltip .t-sum{margin-top:4px;font-size:12px;color:var(--kg-text-2);overflow-wrap:anywhere}.tooltip .t-hint{margin-top:6px;font-size:11px;color:var(--kg-text-3)}.state{position:absolute;inset:0;z-index:2;display:flex;align-items:center;justify-content:center;padding:24px;pointer-events:none}.state>*{pointer-events:auto}.state.blocking{background:var(--kg-bg)}.state-card{width:min(380px,100%);padding:24px;text-align:left}.state-card .state-icon{width:36px;height:36px;border-radius:10px;display:flex;align-items:center;justify-content:center;color:var(--kg-accent-text);background:var(--kg-accent-soft);margin-bottom:16px}.state-card .state-icon .icon{width:20px;height:20px}.state-card.error .state-icon{color:var(--kg-removed-text);background:var(--kg-removed-soft)}.state-card.ok .state-icon{color:var(--kg-added-text);background:var(--kg-added-soft)}.state-card h2{margin:0;font-size:15px;font-weight:650;letter-spacing:-0.01em}.state-card p{margin:6px 0 0;color:var(--kg-text-2);font-size:13px}.state-card details{margin-top:16px;font-size:12px;color:var(--kg-text-2)}.state-card summary{cursor:pointer;font-weight:550;color:var(--kg-text-2);border-radius:4px;width:max-content}.state-card pre{margin:8px 0 0;max-height:200px;padding:10px 12px;border-radius:8px;background:var(--kg-input);font:11.5px/1.5 var(--kg-mono);white-space:pre-wrap;overflow-wrap:anywhere;color:var(--kg-text-2);box-shadow:inset 0 0 0 1px var(--kg-border)}.steps{list-style:none;margin:16px 0 0;padding:0;display:grid;gap:10px}.steps li{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--kg-text-3);transition:color var(--kg-base) var(--kg-ease)}.steps li[data-state="active"]{color:var(--kg-text);font-weight:550}.steps li[data-state="done"]{color:var(--kg-text-2)}.steps .mark{width:18px;height:18px;flex:none;border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:inset 0 0 0 1.5px var(--kg-border-strong)}.steps li[data-state="done"] .mark{background:var(--kg-accent-soft);box-shadow:none;color:var(--kg-accent-text)}.steps li[data-state="done"] .mark .icon{width:12px;height:12px}.steps li[data-state="active"] .mark{box-shadow:inset 0 0 0 1.5px var(--kg-accent-soft);border-top:1.5px solid var(--kg-accent);animation:spin 0.8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.skeleton-grid{position:absolute;inset:0;background-image:radial-gradient(var(--kg-skeleton-hi) 1.2px,transparent 1.4px);background-size:24px 24px;mask-image:radial-gradient(ellipse at center,#000 20%,transparent 75%);animation:breathe 2.4s ease-in-out infinite}@keyframes breathe{50%{opacity:0.45}}.sidebar{position:relative;z-index:2;flex:none;width:360px;display:flex;overflow:hidden;background:var(--kg-panel);border-left:1px solid var(--kg-border);transition:width var(--kg-base) var(--kg-ease),border-color var(--kg-base) var(--kg-ease)}.sidebar[data-open="false"]{width:0;border-left-color:transparent}.sidebar-inner{width:360px;flex:none;display:flex;flex-direction:column;min-height:0}.sheet-handle{display:none}.sb-head{flex:none;padding:12px 12px 8px;display:grid;gap:10px;border-bottom:1px solid var(--kg-border)}.sb-title{display:flex;align-items:center;gap:8px;height:24px;padding:0 2px}.sb-title h2{margin:0;font-size:13px;font-weight:650}.count-badge{display:inline-flex;align-items:center;height:18px;padding:0 6px;border-radius:9px;font-size:11px;font-weight:600;color:var(--kg-text-2);background:var(--kg-hover);box-shadow:inset 0 0 0 1px var(--kg-border);font-variant-numeric:tabular-nums}.progress{margin-left:auto;display:flex;align-items:center;gap:8px;font-size:11.5px;color:var(--kg-text-3);font-variant-numeric:tabular-nums}.progress .bar{width:64px;height:4px;border-radius:2px;background:var(--kg-track);overflow:hidden}.progress .bar>div{height:100%;width:100%;transform-origin:left;background:var(--kg-accent);border-radius:2px;transition:transform var(--kg-base) var(--kg-ease)}.progress[data-complete="true"]{color:var(--kg-accent-text)}.search{position:relative;display:flex;align-items:center;height:32px;border-radius:8px;background:var(--kg-input);box-shadow:inset 0 0 0 1px var(--kg-border);transition:box-shadow var(--kg-fast) var(--kg-ease)}.search:focus-within{box-shadow:inset 0 0 0 1px var(--kg-accent),0 0 0 3px var(--kg-accent-soft)}.search>.icon{position:absolute;left:10px;color:var(--kg-text-3);pointer-events:none}.search input{flex:1;min-width:0;height:100%;padding:0 64px 0 32px;border:0;background:transparent;font-size:13px;color:var(--kg-text)}.search input::placeholder{color:var(--kg-text-3)}.search input::-webkit-search-cancel-button{display:none}.search kbd{position:absolute;right:8px}.search .clear{position:absolute;right:2px;width:28px;height:28px;border-radius:6px;display:flex;align-items:center;justify-content:center;color:var(--kg-text-3)}.search .clear:hover{color:var(--kg-text);background:var(--kg-hover)}.filters{display:flex;flex-wrap:wrap;gap:4px}.fchip{display:inline-flex;align-items:center;gap:5px;height:28px;padding:0 8px 0 7px;border-radius:14px;font-size:11.5px;font-weight:550;color:var(--kg-text-2);box-shadow:inset 0 0 0 1px var(--kg-border);transition:background var(--kg-fast) var(--kg-ease),box-shadow var(--kg-fast) var(--kg-ease),color var(--kg-fast) var(--kg-ease)}.fchip:hover{background:var(--kg-hover);color:var(--kg-text)}.fchip .swatch{width:16px;height:16px;margin:0 -1px}.fchip .n{color:var(--kg-text-3);font-variant-numeric:tabular-nums;font-weight:500}.fchip[aria-pressed="true"]{background:var(--fam-soft);color:var(--fam-text);box-shadow:inset 0 0 0 1px var(--fam-base)}.fchip[aria-pressed="true"] .n{color:var(--fam-text);opacity:0.8}.fchip:disabled{opacity:0.35}.list-wrap{position:relative;flex:1 1 50%;min-height:96px;display:flex;flex-direction:column}.list{position:relative;flex:1;min-height:0;outline:none}.list:focus-visible{outline:none}.list:focus-visible:not(:has(.row[aria-selected="true"])){box-shadow:inset 0 0 0 2px var(--kg-accent)}.list:focus-visible .row[aria-selected="true"]{box-shadow:inset 0 0 0 2px var(--kg-accent)}.list-inner{position:relative;width:100%}.row{position:absolute;left:8px;right:8px;height:52px;display:flex;align-items:center;gap:10px;padding:0 6px 0 14px;border-radius:8px;cursor:pointer;user-select:none;-webkit-user-select:none;transition:background var(--kg-fast) var(--kg-ease),box-shadow var(--kg-fast) var(--kg-ease)}.row::before{content:'';position:absolute;left:4px;top:10px;bottom:10px;width:3px;border-radius:2px;background:var(--fam-base)}.row:hover{background:var(--kg-hover)}.row[aria-selected="true"]{background:var(--kg-selected);box-shadow:inset 0 0 0 1px var(--kg-accent),0 1px 2px rgba(0,0,0,0.06)}.row .txt{flex:1;min-width:0;display:grid;gap:1px}.row .title{font-size:13px;font-weight:500;color:var(--kg-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.row .sub{font-size:12px;color:var(--kg-text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-height:17px}.row[data-reviewed="true"] .title{color:var(--kg-text-2)}.row[data-reviewed="true"] .glyph-box{opacity:0.7}.rv{flex:none;width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer}.rv .ring{width:18px;height:18px;border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:inset 0 0 0 1.5px var(--kg-control-border);color:transparent;transition:background var(--kg-fast) var(--kg-ease),box-shadow var(--kg-fast) var(--kg-ease),color var(--kg-fast) var(--kg-ease),transform var(--kg-fast) var(--kg-ease)}.rv .ring .icon{width:12px;height:12px}.rv:hover .ring{box-shadow:inset 0 0 0 1.5px var(--kg-accent);color:var(--kg-text-3)}.rv[data-pressed="true"] .ring{background:var(--kg-accent);box-shadow:none;color:var(--kg-bg)}.rv[data-pressed="true"]:active .ring{transform:scale(0.9)}.group{position:absolute;left:0;right:0;height:32px;display:flex;align-items:center;gap:8px;padding:10px 16px 0 22px;font-size:11px;font-weight:650;letter-spacing:0.06em;text-transform:uppercase;color:var(--kg-text-3)}.group .n{font-weight:500;letter-spacing:0;font-variant-numeric:tabular-nums}.sticky{position:absolute;top:0;left:0;right:0;z-index:1;height:32px;background:var(--kg-panel);box-shadow:0 1px 0 var(--kg-border);pointer-events:none}.sticky .group{position:static;height:32px;padding-top:0}.sticky[data-shadow="false"]{box-shadow:none}.list-empty{padding:32px 24px;text-align:center;color:var(--kg-text-3);font-size:12.5px;display:grid;gap:10px;justify-items:center}.skeleton-row{height:52px;margin:0 8px;padding:0 14px;display:flex;align-items:center;gap:10px}.skeleton-row .b{flex:1;max-width:70%;height:10px;border-radius:5px;background:var(--kg-skeleton)}.skeleton-row:nth-child(even) .b{max-width:52%}.skeleton-row .g{width:20px;height:20px;border-radius:6px;background:var(--kg-skeleton);flex:none}.shimmer{animation:breathe 1.6s ease-in-out infinite}.results{padding:4px 0 8px}.results-head{padding:8px 16px 6px;font-size:11px;font-weight:650;letter-spacing:0.06em;text-transform:uppercase;color:var(--kg-text-3)}.result{display:flex;align-items:center;gap:10px;width:calc(100% - 16px);margin:0 8px;height:44px;padding:0 10px;border-radius:8px;text-align:left}.result:hover,.result[aria-selected="true"]{background:var(--kg-hover)}.result[aria-selected="true"]{box-shadow:inset 0 0 0 1px var(--kg-border-strong)}.result .sdot{width:8px;height:8px;border-radius:50%;flex:none;background:var(--fam-base)}.result[data-family="neutral"] .sdot{background:transparent;box-shadow:inset 0 0 0 1.5px var(--kg-neutral-stroke)}.result .txt{flex:1;min-width:0;display:grid}.result .title{font-size:13px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.result .sub{font:11px/1.4 var(--kg-mono);color:var(--kg-text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.result mark{background:var(--kg-accent-soft);color:inherit;border-radius:3px;padding:0 1px}.result .status{font-size:11.5px;color:var(--fam-text);flex:none}.detail{flex:0 1 auto;max-height:58%;min-height:0;display:flex;flex-direction:column;border-top:1px solid var(--kg-border);background:var(--kg-panel)}.detail[data-empty="true"]{flex:none}.detail-empty{padding:16px;display:flex;align-items:center;gap:12px;color:var(--kg-text-3);font-size:12.5px}.detail-empty .icon{color:var(--kg-text-3)}.detail-empty .sub{font-size:11.5px;margin-top:2px}.detail-scroll{flex:1;min-height:0;padding:14px 16px 20px}.d-top{display:flex;align-items:center;gap:6px;margin-bottom:10px}.fam-pill{display:inline-flex;align-items:center;gap:6px;height:22px;padding:0 8px 0 6px;border-radius:6px;font-size:11.5px;font-weight:600;color:var(--fam-text);background:var(--fam-soft)}.fam-pill .g{font-weight:700}.d-nav{margin-left:auto;display:flex;align-items:center;gap:2px}.d-title{margin:0;font-size:14.5px;line-height:1.4;font-weight:600;letter-spacing:-0.005em;overflow-wrap:anywhere}.d-sub{margin-top:4px;font-size:12.5px;color:var(--kg-text-2);overflow-wrap:anywhere}.rv-btn{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 10px 0 6px;border-radius:7px;font-size:12px;font-weight:550;color:var(--kg-text-2);box-shadow:inset 0 0 0 1px var(--kg-border);margin-right:4px}.rv-btn:hover{color:var(--kg-text);background:var(--kg-hover)}.rv-btn .ring{width:16px;height:16px;border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:inset 0 0 0 1.5px var(--kg-control-border);color:transparent}.rv-btn .ring .icon{width:11px;height:11px}.rv-btn[aria-pressed="true"]{color:var(--kg-accent-text);box-shadow:inset 0 0 0 1px var(--kg-accent);background:var(--kg-accent-soft)}.rv-btn[aria-pressed="true"] .ring{background:var(--kg-accent);box-shadow:none;color:var(--kg-bg)}.section{margin-top:18px}.section>h3{margin:0 0 8px;font-size:11px;font-weight:650;letter-spacing:0.06em;text-transform:uppercase;color:var(--kg-text-3);display:flex;align-items:center;gap:6px}.section>h3 .n{font-weight:500;letter-spacing:0}.kv{display:grid;grid-template-columns:72px minmax(0,1fr);gap:6px 12px;font-size:12.5px;align-items:baseline}.kv dt{color:var(--kg-text-3)}.kv dd{margin:0;min-width:0;overflow-wrap:anywhere}.id-text{font:12px/1.5 var(--kg-mono);color:var(--kg-text);overflow-wrap:anywhere}.chips{display:flex;flex-wrap:wrap;gap:4px}.vchip{display:inline-flex;align-items:center;gap:4px;min-height:22px;padding:2px 8px;border-radius:6px;font-size:12px;background:var(--kg-hover);box-shadow:inset 0 0 0 1px var(--kg-border);overflow-wrap:anywhere}.vchip.add{color:var(--kg-added-text);background:var(--kg-added-soft);box-shadow:none}.vchip.del{color:var(--kg-removed-text);background:var(--kg-removed-soft);box-shadow:none;text-decoration:line-through;text-decoration-thickness:1px}.vchip .sign{font-weight:700;text-decoration:none;display:inline-block}.pair{display:flex;flex-wrap:wrap;align-items:baseline;gap:0 6px}.pair .b,.line.old{color:var(--kg-text-2)}.pair .arr{color:var(--kg-text-3)}.line{display:grid;grid-template-columns:10px minmax(0,1fr);gap:6px;align-items:baseline}.line .sign{font:600 12px/1 var(--kg-mono);text-align:center}.line.old .sign{color:var(--kg-removed-text)}.line.new .sign{color:var(--kg-added-text)}del.hl{text-decoration:line-through;text-decoration-color:var(--kg-removed);background:var(--kg-removed-soft);color:var(--kg-removed-text);border-radius:3px;padding:0 1px}ins.hl{text-decoration:none;background:var(--kg-added-soft);color:var(--kg-added-text);border-radius:3px;padding:0 1px}.attrs{width:100%;border-collapse:separate;border-spacing:0;font-size:12.5px;table-layout:fixed}.attrs td{vertical-align:baseline;padding:6px 8px 6px 0;border-top:1px solid var(--kg-border);overflow-wrap:anywhere}.attrs tr:first-child td{border-top:0;padding-top:0}.attrs td>* + *{margin-top:4px}.attrs td.k{color:var(--kg-text-2)}.attrs col.k{width:28%}.val{white-space:pre-wrap}.val.clamped{display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}.more{margin-top:2px}.disclosure{display:inline-flex;align-items:center;gap:4px;min-height:28px;margin-top:4px;font-size:12px;color:var(--kg-text-2);border-radius:4px}.disclosure:hover{color:var(--kg-text)}.disclosure .icon{width:12px;height:12px;transition:transform var(--kg-base) var(--kg-ease)}.disclosure[aria-expanded="true"] .icon{transform:rotate(180deg)}.rels{display:grid;gap:2px}.rel{display:flex;align-items:baseline;gap:8px;width:100%;padding:6px 8px;margin:0 -8px;border-radius:7px;text-align:left;font-size:12.5px;line-height:1.5;width:calc(100% + 16px)}.rel:hover{background:var(--kg-hover)}.rel .sign{flex:none;width:12px;font:600 12px/1.5 var(--kg-mono);color:var(--fam-text);text-align:center}.rel .s{min-width:0;overflow-wrap:anywhere}.rel .node{font-weight:550}.rel .pred{color:var(--kg-text-2);white-space:nowrap}.rel .was{color:var(--kg-text-3)}.rel.removed .s{text-decoration:line-through;text-decoration-color:var(--kg-text-3);color:var(--kg-text-2)}.nodes{display:grid;gap:2px}.node-link{display:flex;align-items:center;gap:8px;width:calc(100% + 16px);margin:0 -8px;padding:5px 8px;border-radius:7px;text-align:left;font-size:12.5px}.node-link:hover{background:var(--kg-hover)}.node-link[aria-current="true"]{background:var(--kg-hover);box-shadow:inset 0 0 0 1px var(--kg-border-strong)}.node-link .sdot{width:8px;height:8px;border-radius:50%;flex:none;background:var(--fam-base)}.node-link .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}.node-link .meta{flex:none;color:var(--kg-text-3);font-size:11.5px}.comp{display:grid;gap:6px}.comp-row{display:flex;align-items:center;gap:8px;font-size:12.5px;flex-wrap:wrap}.comp-row .arrow{color:var(--kg-text-3)}.comp-row .note{color:var(--kg-text-3);font-size:11.5px}.bars{display:grid;gap:6px}.bar-row{display:grid;grid-template-columns:84px minmax(0,1fr) 40px;align-items:center;gap:10px;font-size:12px}.bar-row .lbl{color:var(--kg-text-2)}.bar-row .track{height:6px;border-radius:3px;background:var(--kg-track);overflow:hidden}.bar-row .fill{height:100%;border-radius:3px;background:var(--kg-identity)}.bar-row .v{text-align:right;color:var(--kg-text-2);font-variant-numeric:tabular-nums}.note-line{font-size:12px;color:var(--kg-text-3);margin-top:6px}.menu{position:absolute;z-index:10;top:calc(100% + 8px);right:0;width:240px;padding:6px;border-radius:12px;animation:pop var(--kg-fast) var(--kg-ease)}@keyframes pop{from{opacity:0;transform:translateY(-4px) scale(0.98)}}.menu-group + .menu-group{margin-top:4px;padding-top:4px;border-top:1px solid var(--kg-border)}.menu-label{padding:6px 8px 4px;font-size:11px;font-weight:650;letter-spacing:0.06em;text-transform:uppercase;color:var(--kg-text-3)}.menu-item{display:flex;align-items:center;gap:8px;width:100%;height:32px;padding:0 8px;border-radius:7px;font-size:13px;color:var(--kg-text);text-align:left}.menu-item:hover,.menu-item:focus-visible{background:var(--kg-hover);outline:none}.menu-item .icon{color:var(--kg-text-2)}.menu-item .check{margin-left:auto;color:var(--kg-accent-text);opacity:0}.menu-item[aria-checked="true"] .check{opacity:1}.menu-item .sw{display:inline-flex;gap:2px}.menu-item .sw i{width:6px;height:6px;border-radius:50%;display:block}.overlay-scrim{position:absolute;inset:0;z-index:20;display:flex;align-items:center;justify-content:center;padding:24px;background:var(--kg-scrim);animation:fade var(--kg-fast) var(--kg-ease)}@keyframes fade{from{opacity:0}}.dialog{width:min(640px,100%);max-height:100%;display:flex;flex-direction:column;border-radius:14px;animation:pop var(--kg-base) var(--kg-ease)}.dialog-head{display:flex;align-items:center;gap:10px;padding:14px 12px 10px 20px}.dialog-head h2{margin:0;font-size:15px;font-weight:650}.dialog-head .icon-btn{margin-left:auto}.dialog-body{padding:0 20px 18px}.keys{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 24px}.key-row{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:34px;border-bottom:1px solid var(--kg-border);font-size:12.5px;color:var(--kg-text-2)}.key-row .ks{display:inline-flex;align-items:center;gap:3px;flex:none;color:var(--kg-text-3);font-size:11px}.root[data-chrome="none"] .hud,.root[data-chrome="none"] .sidebar,.root[data-chrome="none"] .dock,.root[data-chrome="none"] .map-cluster,.root[data-chrome="none"] .side-chip{display:none !important}.stage-wrap[data-selectable="false"] .tooltip .t-hint{display:none}.root[data-compact="true"] .body{flex-direction:column}.root[data-compact="true"] .sidebar{width:auto;height:var(--sheet-h,40%);min-height:0;border-left:0;border-top:1px solid var(--kg-border);border-radius:14px 14px 0 0;margin-top:-14px;box-shadow:0 -8px 24px rgba(0,0,0,0.18);transition:height var(--kg-base) var(--kg-ease)}.root[data-compact="true"] .sidebar.dragging{transition:none}.root[data-compact="true"] .sidebar[data-open="false"]{height:0;border-top-color:transparent;box-shadow:none}.root[data-compact="true"] .sidebar-inner{width:100%}.root[data-compact="true"] .sheet-handle{display:flex;flex:none;justify-content:center;align-items:center;height:28px;cursor:ns-resize;touch-action:none;border-radius:14px 14px 0 0}.root[data-compact="true"] .sheet-handle::before{content:"";width:36px;height:4px;border-radius:2px;background:var(--kg-control-border)}.root[data-compact="true"] .sb-head{padding-top:4px}.root[data-compact="true"] .versions,.root[data-compact="true"] .header-sep,.root[data-compact="true"] .brand-name{display:none}.root[data-compact="true"] .hud-title{padding:0 10px}.root[data-compact="true"] .minimap-host,.root[data-compact="true"] .legend{display:none}.root[data-compact="true"] .map-cluster{top:64px;bottom:auto;right:12px}.root[data-compact="true"] .chrome>.dock{left:12px;right:12px;bottom:26px}.root[data-compact="true"] .transport{width:100%;min-width:0}.root[data-compact="true"] .transport .pos{min-width:48px}.root[data-compact="true"] .detail{max-height:50%}.root[data-narrow="true"] .versions .tag,.root[data-narrow="true"] .versions .arrow{display:none}@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:1ms !important;animation-iteration-count:1 !important;transition-duration:1ms !important}.skeleton-grid,.shimmer{animation:none}}`;function Nl(){let e=document.createElement(`template`);return e.innerHTML=`<svg class="brand-mark" viewBox="0 0 20 20" aria-hidden="true" focusable="false"><rect x="4.1" y="4.1" width="11.8" height="11.8" rx="3.2" transform="rotate(45 10 10)" fill="var(--kg-accent-soft)" stroke="var(--kg-accent)" stroke-width="1.5"/><circle cx="10" cy="10" r="2.4" fill="var(--kg-accent)"/></svg>`,e.content.firstElementChild}var Pl=class{el;menuButton;#e;#t;#n;#r;#i;#a;#o;constructor(e){this.#o=e,this.#e=K(`div`,{class:`brand`},Nl(),K(`span`,{class:`brand-name`,text:`kgdiff`})),this.#t=K(`div`,{class:`versions`}),this.menuButton=Z(`contrast`,``,()=>e.toggleMenu(),{"aria-haspopup":`menu`,"aria-expanded":`false`}),this.#i=Z(`help`,``,()=>e.openHelp()),this.#a=Z(`sidebar`,``,()=>e.toggleSidebar()),this.#n=K(`div`,{class:`hud-actions card`,role:`group`},this.menuButton,this.#i,this.#a),this.#r=K(`div`,{class:`hud-end`},this.#n),this.el=K(`header`,{class:`hud`},K(`div`,{class:`hud-title card`},this.#e,K(`span`,{class:`header-sep`,"aria-hidden":`true`}),this.#t),this.#r)}attachMenu(e){this.#r.appendChild(e)}update(e){if(!(e.has(`locale`)||e.has(`data`)||e.has(`status`)))return;let t=this.#o.tr();J(this.#e,`title`,`kgdiff — ${t.t(`brand.tagline`)}`),J(this.#n,`aria-label`,t.t(`header.actions`)),Q(this.menuButton,t.t(`action.settings`)),Q(this.#i,`${t.t(`action.help`)} (?)`),Q(this.#a,`${t.t(`action.sidebar`)} (\\)`),this.#s()}setSidebarState(e){J(this.#a,`aria-pressed`,String(e))}setMenuState(e){J(this.menuButton,`aria-expanded`,String(e))}#s(){let e=this.#o.controller.data;if(!e){q(this.#t),this.el.dataset.titled=`false`;return}this.el.dataset.titled=`true`;let t=this.#o.tr(),{names:n,versions:r}=e,i=e=>e?K(`span`,{class:`tag`,title:e,text:e}):null,a=()=>K(`span`,{class:`arrow`,"aria-hidden":`true`,text:`→`});J(this.#t,`aria-label`,t.t(`header.compare`)),J(this.#t,`role`,`group`),n.before===n.after?q(this.#t,K(`span`,{class:`name`,title:e.title??n.after,text:e.title??n.after}),r.before||r.after?K(`span`,{class:`side`},i(r.before??`—`),a(),i(r.after??`—`)):null):q(this.#t,K(`span`,{class:`side`},K(`span`,{class:`name`,title:n.before,text:n.before}),i(r.before)),a(),K(`span`,{class:`side`},K(`span`,{class:`name`,title:n.after,text:n.after}),i(r.after)))}},Fl=class{el;#e=null;#t;constructor(e){this.#t=e,this.el=K(`div`,{class:`menu card`,role:`menu`,hidden:!0,tabindex:`-1`}),this.el.addEventListener(`keydown`,e=>this.#r(e))}get open(){return!this.el.hidden}show(e){this.#e=e,this.render(),this.el.hidden=!1,this.el.querySelector(`[aria-checked="true"]`)?.focus()}hide(e=!0){this.el.hidden||(this.el.hidden=!0,e&&this.#e?.focus())}render(){let e=this.#t.tr(),t=this.#t.controller,n=t=>()=>e.t(t),r=e=>{let n=co(t.themeName,e).family;return Al.map(e=>n[e].base)},i=[{value:`auto`,label:n(`theme.auto`),icon:`monitor`},{value:`light`,label:n(`theme.light`),icon:`sun`},{value:`dark`,label:n(`theme.dark`),icon:`moon`}],a=[{value:`default`,label:n(`palette.default`),swatch:r(`default`)},{value:`colorblind`,label:n(`palette.colorblind`),swatch:r(`colorblind`)}];J(this.el,`aria-label`,e.t(`action.settings`)),ul(this.#t.root,this.el,this.el,this.#n(e.t(`menu.theme`),i,t.themePreference,e=>this.#t.setThemePreference(e)),this.#n(e.t(`menu.palette`),a,t.palette,e=>this.#t.setPalette(e)),this.#n(e.t(`menu.language`),[{value:`en`,label:()=>`English`},{value:`zh-CN`,label:()=>`简体中文`}],t.locale,e=>this.#t.setLocale(e)))}#n(e,t,n,r){return K(`div`,{class:`menu-group`,role:`group`,"aria-label":e},K(`div`,{class:`menu-label`,"aria-hidden":`true`,text:e}),t.map(e=>K(`button`,{type:`button`,class:`menu-item`,role:`menuitemradio`,"data-focus-key":e.value,"aria-checked":String(e.value===n),tabindex:`-1`,onclick:()=>{r(e.value),this.render(),this.el.querySelector(`[aria-checked="true"]`)?.focus()}},e.icon?X(e.icon):null,e.swatch?K(`span`,{class:`sw`,"aria-hidden":`true`},e.swatch.map(e=>K(`i`,{style:`background:${e}`}))):null,K(`span`,{text:e.label()}),X(`check`,`icon check`))))}#r(e){let t=[...this.el.querySelectorAll(`.menu-item`)],n=t.indexOf(this.#t.root.activeElement),r=-1;if(e.key===`ArrowDown`)r=(n+1)%t.length;else if(e.key===`ArrowUp`)r=(n-1+t.length)%t.length;else if(e.key===`Home`)r=0;else if(e.key===`End`)r=t.length-1;else if(e.key===`Escape`||e.key===`Tab`){e.key===`Escape`&&e.preventDefault(),e.stopPropagation(),this.hide(e.key===`Escape`);return}else return;e.preventDefault(),e.stopPropagation(),t[r]?.focus()}},Il=[[[[`1`],[`2`],[`3`]],[`mode.overlay`,`mode.swipe`,`mode.replay`]],[[[`4`]],`mode.changes`],[[[`j`],[`↓`]],`detail.next`],[[[`k`],[`↑`]],`detail.prev`],[[[`Home`],[`End`]],`help.homeEnd`],[[[`Enter`]],`help.enter`],[[[`Esc`]],`help.esc`],[[[`Space`]],`help.space`],[[[`←`],[`→`]],`help.arrows`],[[[`f`]],`action.fit`],[[[`+`],[`−`]],[`action.zoomIn`,`action.zoomOut`]],[[[`/`]],`sidebar.search`],[[[`x`]],`review.mark`],[[[`\\`]],`action.sidebar`],[[[`t`]],`help.theme`],[[[`e`]],`help.expand`],[[[`?`]],`action.help`]],Ll=class{el;#e=null;#t;constructor(e){this.#t=e,this.el=K(`div`,{class:`overlay-scrim`,hidden:!0}),this.el.addEventListener(`click`,e=>{e.target===this.el&&this.hide()}),this.el.addEventListener(`keydown`,e=>{e.key===`Escape`||e.key===`?`?(e.preventDefault(),e.stopPropagation(),this.hide()):e.key===`Tab`&&(e.preventDefault(),this.el.querySelector(`.icon-btn`)?.focus())})}get open(){return!this.el.hidden}show(){this.#e=this.#t.root.activeElement,this.render(),this.el.hidden=!1,this.el.querySelector(`.icon-btn`)?.focus()}hide(){this.el.hidden||(this.el.hidden=!0,this.#e?.focus?.())}render(){let e=this.#t.tr(),t=e=>K(`span`,{class:`ks`},e.map((e,t)=>[t>0?K(`span`,{"aria-hidden":`true`,text:`/`}):null,e.map(e=>K(`kbd`,{text:e}))])),n=Il.map(([n,r])=>K(`div`,{class:`key-row`},K(`span`,{text:typeof r==`string`?e.t(r):r.map(t=>e.t(t)).join(` / `)}),t(n)));ul(this.#t.root,this.el,null,K(`div`,{class:`dialog card`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`kg-help-title`},K(`div`,{class:`dialog-head`},K(`h2`,{id:`kg-help-title`,text:e.t(`help.title`)}),Z(`close`,e.t(`help.close`),()=>this.hide(),{"data-focus-key":`close`})),K(`div`,{class:`dialog-body`},K(`div`,{class:`keys`},n))))}};function Rl(e,t){switch(e){case`add`:return`+`;case`remove`:return`−`;case`merge`:return`⊕`;case`split`:return`⑂`;case`relations`:return`⇄`;case`modify`:return t===`structure`?`⇄`:t===`identity`?`≡`:`~`;default:return`~`}}function zl(e){return Rl(e.kind,e.family)}function Bl(e){return e===void 0?``:e===null?`null`:typeof e==`string`?e:typeof e==`number`||typeof e==`boolean`?String(e):Array.isArray(e)?e.map(e=>Bl(e)).join(`, `):JSON.stringify(e)}function Vl(e){if(!Array.isArray(e))return null;let t=[];for(let n of e){if(typeof n==`object`&&n)return null;t.push(Bl(n))}return t}var Hl=1024;function Ul(e,t){let n=0;for(;n<e.length&&n<t.length&&e[n]===t[n];)n++;let r=e.length,i=t.length;for(;r>n&&i>n&&e[r-1]===t[i-1];)r--,i--;let a=[],o=(e,t)=>{let n=a[a.length-1];n!==void 0&&n.op===e?n.items.push(t):a.push({op:e,items:[t]})};for(let t=0;t<n;t++)o(`equal`,e[t]);let s=Wl(e.slice(n,r),t.slice(n,i));for(let[e,t]of s)o(e,t);for(let t=r;t<e.length;t++)o(`equal`,e[t]);return Gl(a)}function Wl(e,t){let n=e.length,r=t.length;if(n===0)return t.map(e=>[`insert`,e]);if(r===0)return e.map(e=>[`delete`,e]);let i=n+r,a=Math.min(i,Hl),o=i,s=new Int32Array(2*i+2),c=[],l=-1;for(let i=0;i<=a;i++){c.push(s.slice(o-i,o+i+1));for(let a=-i;a<=i;a+=2){let c;c=a===-i||a!==i&&s[o+a-1]<s[o+a+1]?s[o+a+1]:s[o+a-1]+1;let u=c-a;for(;c<n&&u<r&&e[c]===t[u];)c++,u++;if(s[o+a]=c,c>=n&&u>=r){l=i;break}}if(l>=0)break}if(l<0)return[...e.map(e=>[`delete`,e]),...t.map(e=>[`insert`,e])];let u=[],d=n,f=r;for(let n=l;n>0;n--){let r=c[n],i=e=>r[e+n],a=d-f,o=a===-n||a!==n&&i(a-1)<i(a+1),s=o?a+1:a-1,l=i(s),p=l-s;for(;d>l&&f>p;)u.push([`equal`,e[d-1]]),d--,f--;o?u.push([`insert`,t[f-1]]):u.push([`delete`,e[d-1]]),d=l,f=p}for(;d>0&&f>0;)u.push([`equal`,e[d-1]]),d--,f--;return u.reverse()}function Gl(e){let t=[],n=[],r=[],i=()=>{n.length&&t.push({op:`delete`,items:n}),r.length&&t.push({op:`insert`,items:r}),n=[],r=[]};for(let a of e){if(a.op===`equal`){i(),t.push(a);continue}let e=a.op===`delete`?n:r;for(let t of a.items)e.push(t)}return i(),t}function Kl(e){return e.map(e=>({op:e.op,text:e.items.join(``)}))}function ql(e,t=3){let n=[],r=``,i=``,a=()=>{r&&n.push({op:`delete`,text:r}),i&&n.push({op:`insert`,text:i}),r=``,i=``};for(let o=0;o<e.length;o++){let s=e[o];if(s.op===`delete`)r+=s.text;else if(s.op===`insert`)i+=s.text;else{let c=o>0&&o<e.length-1&&(r!==``||i!==``),l=[...s.text].length<t&&s.text.trim().length<=t;c&&l&&Jl(e,o)?(r+=s.text,i+=s.text):(a(),n.push(s))}}return a(),n}function Jl(e,t){let n=e[t+1];return n!==void 0&&n.op!==`equal`}function Yl(e,t){return ql(Kl(Ul(Array.from(e),Array.from(t))))}var Xl=/\s+|[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}]|[\p{L}\p{N}\p{M}_'’-]+|[^\s]/gu;function Zl(e){return e.match(Xl)??[]}function Ql(e,t){return ql(Kl(Ul(Zl(e),Zl(t))),2)}var $l=.5,eu=400;function tu(e,t){let n=0;for(let r of Ul(e,t))r.op===`equal`&&(n+=r.items.length);return 2*n/(e.length+t.length)}function nu(e,t){let n=[];if(e.length===1&&t.length===1)n.push([1,0,0]);else if(e.length*t.length<=eu){let r=t.map(e=>Array.from(e));e.forEach((e,t)=>{let i=Array.from(e);r.forEach((e,r)=>{let a=tu(i,e);a>=$l&&n.push([a,t,r])})}),n.sort((e,t)=>t[0]-e[0]||e[1]-t[1]||e[2]-t[2])}let r=new Set,i=new Set,a=[];for(let[,e,t]of n)r.has(e)||i.has(t)||(r.add(e),i.add(t),a.push([e,t]));return a.sort((e,t)=>e[0]-t[0]),{pairs:a.map(([n,r])=>[e[n],t[r]]),removed:e.filter((e,t)=>!r.has(t)),added:t.filter((e,t)=>!i.has(t))}}var ru=12,iu=12,au=180,ou=60;function su(e,t,...n){return K(`section`,{class:`section`},K(`h3`,null,e,t===null?null:K(`span`,{class:`n`,text:String(t)})),...n)}function cu(e){let t=K(`dl`,{class:`kv`});for(let[n,r]of e)t.append(K(`dt`,{text:n}),K(`dd`,null,...[r].flat()));return t}function lu(e,t){let n=[];for(let r of e)r.op===`equal`?n.push(r.text):r.op===`delete`&&t===`before`?n.push(K(`del`,{class:`hl`,text:r.text})):r.op===`insert`&&t===`after`&&n.push(K(`ins`,{class:`hl`,text:r.text}));return n}function $(e,t){let n=t===`add`?`+`:t===`del`?`−`:``;return K(`span`,{class:`vchip${t===`same`?``:` ${t}`}`},n?K(`span`,{class:`sign`,"aria-hidden":`true`,text:n}):null,e)}function uu(e,t,n=[]){return K(`div`,{class:`chips`},t.map(e=>$(e,`del`)),e.map(e=>$(e,`add`)),n.map(e=>$(e,`same`)))}function du(e,t,n){return K(`div`,{class:`pair`},K(`span`,{class:`b`},e),K(`span`,{class:`arr`,"aria-hidden":`true`,text:`→`}),K(`span`,{class:`sr-only`,text:n.t(`detail.changedTo`)}),K(`span`,null,t))}function fu(e,t,n){let r=Yl(e,t);return du(lu(r,`before`),lu(r,`after`),n)}function pu(e,t){return K(`div`,{class:`line ${e}`},K(`span`,{class:`sign`,"aria-hidden":`true`,text:e===`old`?`−`:`+`}),K(`div`,null,t))}function mu(e,t,n,r=[]){let i=nu(t,e),a=i.pairs.map(([e,t])=>fu(e,t,n));return(i.added.length>0||i.removed.length>0||r.length>0)&&a.push(uu(i.added,i.removed,r)),a}function hu(e,t=`attrs`){return K(`table`,{class:t},K(`colgroup`,null,K(`col`,{class:`k`}),K(`col`)),K(`tbody`,null,e.map(([e,t])=>K(`tr`,null,K(`td`,{class:`k`,text:e}),K(`td`,null,t)))))}function gu(e){if(e.status===`added`)return`added`;if(e.status===`removed`)return e.facets.some(e=>e.kind===`collapsed`)?`identity`:`removed`;for(let t of e.facets){if(t.kind===`retarget`)return t.cause===`merge`||t.cause===`split`?`identity`:`structure`;if(t.kind===`predicate`)return`structure`}return e.status===`modified`?`content`:`neutral`}var _u=class{el;#e;#t=!1;#n=!1;#r=!1;#i=new Set;#a=``;#o;constructor(e){this.#o=e,this.#e=K(`div`,{class:`detail-scroll scroll`,tabindex:`-1`}),this.el=K(`section`,{class:`detail`,"data-empty":`true`},this.#e)}update(e){(e.has(`selection`)||e.has(`data`)||e.has(`locale`)||e.has(`review`)||e.has(`status`)||e.has(`filters`))&&this.#s()}#s(){let e=this.#o.controller,t=this.#o.tr();J(this.el,`aria-label`,t.t(`detail.label`));let n=e.scene,r=e.diff;if(this.el.hidden=e.status!==`ready`||!n||!r||n.hunks.length===0&&e.selectedNode<0,this.el.hidden||!n||!r)return;let i=`${e.selectedHunk}|${e.selectedNode}`;if(i!==this.#a&&(this.#a=i,this.#t=!1,this.#n=!1,this.#r=!1,this.#i.clear(),this.#e.scrollTop=0),e.selectedHunk<0&&e.selectedNode<0){J(this.el,`data-empty`,`true`),ul(this.#o.root,this.#e,this.#e,K(`div`,{class:`detail-empty`},X(`changes`),K(`div`,null,K(`div`,{text:t.t(`detail.empty`)}),K(`div`,{class:`sub`,text:t.t(`detail.emptyHint`)}))));return}J(this.el,`data-empty`,`false`);let a=e.selectedHunk>=0?n.hunks[e.selectedHunk]:void 0;a?this.#l(a,n,r,t):this.#u(n,r,t)}#c(e,t){let n=this.#o.controller,r=[];if(t){let i=n.isReviewed(t.id);r.push(K(`button`,{type:`button`,class:`rv-btn`,"data-focus-key":`review`,"aria-pressed":String(i),title:`${e.t(i?`review.unmark`:`review.mark`)} (X)`,onclick:()=>n.toggleReviewed(t.id)},K(`span`,{class:`ring`},X(`check`)),e.t(`review.toggle`)))}let i=t?n.list.rank.get(t.index):void 0,a=Z(`chevron-up`,`${e.t(`detail.prev`)} (K)`,()=>n.prev(),{class:`icon-btn sm`,"data-focus-key":`prev`}),o=Z(`chevron-down`,`${e.t(`detail.next`)} (J)`,()=>n.next(),{class:`icon-btn sm`,"data-focus-key":`next`});return a.disabled=i===0||n.list.order.length===0,o.disabled=i!==void 0&&i>=n.list.order.length-1||n.list.order.length===0,r.push(a,o),K(`div`,{class:`d-nav`},...r)}#l(e,t,n,r){let i=this.#o.controller,a=n.index.hunk(e.id),o=i.selectedNode>=0&&e.nodes.includes(i.selectedNode)?i.selectedNode:e.anchor,s=o>=0?t.nodes[o]?.id:a?.anchor,c=s===void 0?void 0:n.index.node(s),l=[K(`div`,{class:`d-top`},K(`span`,{class:`fam-pill`,"data-family":e.family},K(`span`,{class:`g`,"aria-hidden":`true`,text:zl(e)}),r.t(`kind.${e.kind}`)),this.#c(r,e)),K(`h2`,{class:`d-title`,text:e.title}),e.subtitle?K(`div`,{class:`d-sub`,text:e.subtitle}):null],u=a?.nodes??[];u.length>1&&l.push(this.#d(u,s,t,n,r));let[d,f]=c?this.#p(c,n,r,u.length>1,!0):[[],[]],p=(a?.edges??[]).map(e=>n.index.edge(e)).filter(e=>e!==void 0);l.push(...d),p.length>0&&l.push(this.#x(p,s,t,n,r,!0)),l.push(...f),ul(this.#o.root,this.#e,this.#e,...l)}#u(e,t,n){let r=this.#o.controller,i=e.nodes[r.selectedNode],a=i?t.index.node(i.id):void 0;if(!i||!a){ul(this.#o.root,this.#e,this.#e);return}let o=t.index.edgesOf(a.id),[s,c]=this.#p(a,t,n,!1,!1);ul(this.#o.root,this.#e,this.#e,K(`div`,{class:`d-top`},K(`span`,{class:`fam-pill`,"data-family":i.family},K(`span`,{class:`g`,"aria-hidden":`true`,text:`·`}),n.t(a.status===`unchanged`?`detail.unchangedNode`:`status.${a.status}`)),this.#c(n,void 0)),K(`h2`,{class:`d-title`,text:a.label}),...s,o.length>0?this.#x(o,a.id,e,t,n,!1):null,...c)}#d(e,t,n,r,i){let a=this.#o.controller,o=this.#r?e:e.slice(0,ru),s=K(`div`,{class:`nodes`});for(let e of o){let o=r.index.node(e),c=n.nodeIndex.get(e),l=c===void 0?`neutral`:n.nodes[c]?.family??`neutral`;s.appendChild(K(`button`,{type:`button`,class:`node-link`,"data-focus-key":`node:${e}`,"data-family":l,"aria-current":String(e===t),onclick:()=>{c!==void 0&&a.selectNode(c,{fly:!0})}},K(`span`,{class:`sdot`,"aria-hidden":`true`}),K(`span`,{class:`lbl`,text:o?.label??e,title:o?.label??e}),K(`span`,{class:`meta`,text:o?i.t(`status.${o.status}`):``})))}return su(i.t(`detail.nodes`),e.length,s,e.length>ru?this.#f(i,this.#r,()=>{this.#r=!this.#r,this.#s()}):null)}#f(e,t,n){return K(`button`,{type:`button`,class:`disclosure`,"data-focus-key":`nodes-more`,"aria-expanded":String(t),onclick:n},e.t(t?`detail.showLess`:`detail.showMore`),X(`chevron-down`))}#p(e,t,n,r,i){let a=e=>t.index.node(e)?.label??e,o=e.status===`modified`||i&&e.status===`unchanged`,s=this.#m(e,t,n,a),c=this.#v(e,t,n,a),l=this.#y(e,t,n,a),u=this.#g(e,n,r,o),d=e=>e.filter(e=>e!==null);return o?[d([c,s]),d([l,...u])]:[d([...u,s,c,l]),[]]}#m(e,t,n,r){let i=e=>e.map(e=>(t.index.nodeByAfter(e)??t.index.nodeByBefore(e))?.label??e),a=[];for(let t of e.facets)switch(t.kind){case`rekey`:a.push([n.t(`detail.id`),[K(`div`,{class:`id-text`},fu(t.from,t.to,n)),t.score<1?K(`div`,{class:`note-line`,text:n.t(`detail.matchScore`,{p:nc(t.score)})}):null]]);break;case`rename`:a.push([n.t(`detail.name`),fu(t.from,t.to,n)]);break;case`types`:case`aliases`:a.push([n.t(`detail.${t.kind}`),mu(t.added,t.removed,n)]);break;case`attrs`:for(let r of t.changes)a.push([r.key,this.#h(e.id,r,n)]);break;case`move`:a.push([n.t(`detail.hierarchy`),mu(t.to.map(r),t.from.map(r),n)]);break;case`deprecate`:a.push([n.t(`detail.status`),K(`strong`,{text:n.t(t.deprecated?`detail.deprecated`:`detail.undeprecated`)})]);break;case`replacement`:for(let[e,r]of[[`detail.replacedBy`,t.replacedBy],[`detail.replaces`,t.replaces]])(r.added.length>0||r.removed.length>0)&&a.push([n.t(e),mu(i(r.added),i(r.removed),n)])}return a.length>0?su(n.t(`detail.changes`),a.length,hu(a,`attrs changes`)):null}#h(e,t,n){let r=Vl(t.before),i=Vl(t.after);if(r&&i){let e=new Set(r),t=new Set(i);return mu(i.filter(t=>!e.has(t)),r.filter(e=>!t.has(e)),n,i.filter(t=>e.has(t)))}let a=`${e}|${t.key}`,o=Bl(t.before),s=Bl(t.after);if(t.before===void 0){let e=K(`ins`,{class:`hl`,text:s});return[pu(`new`,this.#_(`${a}|a`,s,n,[e]))]}if(t.after===void 0){let e=K(`del`,{class:`hl`,text:o});return[pu(`old`,this.#_(`${a}|b`,o,n,[e]))]}let c=typeof t.before==`string`&&typeof t.after==`string`?Ql(o,s):[{op:`delete`,text:o},{op:`insert`,text:s}],l=lu(c,`before`),u=lu(c,`after`);return o.length+s.length<=ou&&!/\n/.test(o+s)?[du(l,u,n)]:[pu(`old`,this.#_(`${a}|b`,o,n,l)),pu(`new`,this.#_(`${a}|a`,s,n,u))]}#g(e,t,n,r){let i=t=>e.facets.some(e=>e.kind===t),a=e.after??e.before,o=[];n&&!i(`rename`)&&o.push([t.t(`detail.name`),e.label]),i(`rekey`)||o.push([t.t(`detail.id`),K(`span`,{class:`id-text`,text:e.afterId??e.beforeId??e.id})]),!i(`types`)&&e.types.length>0&&o.push([t.t(`detail.types`),uu([],[],e.types)]),!i(`aliases`)&&a&&a.aliases.length>0&&o.push([t.t(`detail.aliases`),uu([],[],a.aliases)]);let s=[t.t(`status.${e.status}`)];a?.deprecated&&!i(`deprecate`)&&s.push(` · ${t.t(`detail.deprecated`)}`),a?.implicit&&s.push(` · ${t.t(`detail.implicit`)}`),o.push([t.t(`detail.status`),s]);let c=a?.attrs??{},l=new Set;for(let t of e.facets)if(t.kind===`attrs`)for(let e of t.changes)l.add(e.key);let u=Object.keys(c).filter(e=>!l.has(e)).sort(),d=()=>hu(u.map(n=>[n,this.#_(`${e.id}|u|${n}`,Bl(c[n]),t)]));if(!r){let e=[su(t.t(`detail.identity`),null,cu(o))];return u.length>0&&e.push(su(t.t(`detail.attributes`),null,d())),e}return[su(t.t(`detail.identity`),null,cu(o),u.length>0?K(`button`,{type:`button`,class:`disclosure`,"data-focus-key":`attrs-more`,"aria-expanded":String(this.#t),onclick:()=>{this.#t=!this.#t,this.#s()}},t.plural(`detail.unchangedAttrs`,u.length),X(`chevron-down`)):null,u.length>0&&this.#t?d():null)]}#_(e,t,n,r){let i=t.length>au,a=this.#i.has(e),o=K(`div`,{class:`val${i&&!a?` clamped`:``}`},...r??[t]);return i?K(`div`,null,o,K(`button`,{type:`button`,class:`link-btn more`,"data-focus-key":`value:${e}`,text:n.t(a?`detail.showLess`:`detail.showMore`),onclick:()=>{a?this.#i.delete(e):this.#i.add(e),this.#s()}})):o}#v(e,t,n,r){let i=[],a=(e,t)=>e===`hint`?n.t(`detail.viaHint`):`${n.t(`detail.viaHeuristic`)} · ${n.t(`detail.confidence`,{p:nc(t)})}`;for(let o of e.facets)switch(o.kind){case`mergedInto`:i.push(K(`div`,{class:`comp-row`},$(e.label,`del`),K(`span`,{class:`arrow`,"aria-hidden":`true`,text:`→`}),$(r(o.target),`same`),K(`span`,{class:`note`,text:a(o.via,o.confidence)})));break;case`mergeTarget`:{let s=o.sources.map(e=>{let n=t.index.node(e)?.facets.find(e=>e.kind===`mergedInto`);return n&&n.kind===`mergedInto`?a(n.via,n.confidence):``});i.push(K(`div`,{class:`comp-row`},K(`span`,{class:`note`,text:n.t(`detail.mergedFrom`)}))),o.sources.forEach((t,n)=>{i.push(K(`div`,{class:`comp-row`},$(r(t),`del`),K(`span`,{class:`arrow`,"aria-hidden":`true`,text:`→`}),$(e.label,`same`),s[n]?K(`span`,{class:`note`,text:s[n]}):null))});break}case`splitFrom`:i.push(K(`div`,{class:`comp-row`},$(r(o.source),`same`),K(`span`,{class:`arrow`,"aria-hidden":`true`,text:`→`}),$(e.label,`add`),K(`span`,{class:`note`,text:a(o.via,o.confidence)})));break;case`splitInto`:i.push(K(`div`,{class:`comp-row`},K(`span`,{class:`note`,text:n.t(`detail.splitInto`)})),K(`div`,{class:`comp-row`},$(e.label,`same`),K(`span`,{class:`arrow`,"aria-hidden":`true`,text:`→`}),o.targets.map(e=>$(r(e),`add`))))}return i.length?su(n.t(`detail.composition`),null,K(`div`,{class:`comp`},i)):null}#y(e,t,n,r){let i=[];if(e.facets.find(e=>e.kind===`rekey`)&&e.afterId!==void 0){let r=t.matches.find(t=>t.after===e.afterId);r?.method===`hint`?i.push(K(`div`,{class:`note-line`,text:n.t(`detail.matchHint`)})):r&&(i.push(K(`div`,{class:`note-line`,text:n.t(`detail.matchScore`,{p:nc(r.score)})})),r.evidence&&i.push(this.#b(r.evidence,n)))}let a=t.suggestions.filter(t=>e.beforeId!==void 0&&e.status===`removed`&&t.before===e.beforeId||e.afterId!==void 0&&e.status===`added`&&t.after===e.afterId);for(let o of a){let a=e.status===`removed`?t.index.nodeByAfter(o.after):t.index.nodeByBefore(o.before);i.push(K(`div`,{class:`comp-row`,style:`margin-top: 8px`},K(`span`,{class:`note`,text:n.t(`detail.suggestion`)}),$(a?r(a.id):e.status===`removed`?o.after:o.before,`same`),K(`span`,{class:`note`,text:`${n.t(`detail.matchScore`,{p:nc(o.score)})} · ${n.t(o.reason===`ambiguous`?`detail.suggestion.ambiguous`:`detail.suggestion.below`)}`})),this.#b(o.evidence,n))}return i.length?su(n.t(`detail.evidence`),null,...i):null}#b(e,t){return K(`div`,{class:`bars`,style:`margin-top: 8px`},[[t.t(`detail.evidence.label`),e.label],[t.t(`detail.evidence.neighbors`),e.neighbors],[t.t(`detail.evidence.types`),e.types],[t.t(`detail.evidence.attrs`),e.attrs]].map(([e,t])=>K(`div`,{class:`bar-row`},K(`span`,{class:`lbl`,text:e}),K(`span`,{class:`track`,role:`meter`,"aria-label":e,"aria-valuemin":`0`,"aria-valuemax":`100`,"aria-valuenow":String(Math.round(t*100))},K(`span`,{class:`fill`,style:`display:block; width: ${Math.round(Math.max(0,Math.min(1,t))*100)}%`})),K(`span`,{class:`v`,text:nc(t)}))))}#x(e,t,n,r,i,a){let o=a?e:[...e].sort((e,n)=>Number(e.source!==t)-Number(n.source!==t)),s=this.#n?o:o.slice(0,iu),c=K(`div`,{class:`rels`});for(let e of s)c.appendChild(this.#S(e,t,n,r,i));let l=o.length-s.length;return su(i.t(`detail.relations`),e.length,c,l>0||this.#n?K(`button`,{type:`button`,class:`disclosure`,"data-focus-key":`rels-more`,"aria-expanded":String(this.#n),onclick:()=>{this.#n=!this.#n,this.#s()}},this.#n?i.t(`detail.showLess`):i.plural(`detail.moreRelations`,l),X(`chevron-down`)):null)}#S(e,t,n,r,i){let a=this.#o.controller,o=e=>r.index.node(e)?.label??e,s=e=>K(`span`,{class:`node`,text:o(e)}),c=e=>K(`span`,{class:`was`,text:` (${i.t(`detail.was`,{x:i.quote(o(e))})})`}),l=e.facets.find(e=>e.kind===`retarget`),u=e.facets.find(e=>e.kind===`predicate`),d=e.facets.find(e=>e.kind===`label`),f=K(`span`,{class:`pred`,text:` —${e.label}→ `}),p=t!==void 0&&e.source===t&&e.target!==t,m=t!==void 0&&e.target===t&&e.source!==t,h=[];p?(h.push(K(`span`,{class:`pred`,text:`→ ${e.label} → `}),s(e.target)),l?.end===`target`&&h.push(c(l.from))):m?(h.push(K(`span`,{class:`pred`,text:`← ${e.label} ← `}),s(e.source)),l?.end===`source`&&h.push(c(l.from))):(h.push(s(e.source)),l?.end===`source`&&h.push(c(l.from)),h.push(f,s(e.target)),l?.end===`target`&&h.push(c(l.from)));let g=u?e.before?.label??u.from:d?d.from:void 0;g!==void 0&&h.push(K(`span`,{class:`was`,text:` (${i.t(`detail.was`,{x:i.quote(g)})})`})),e.facets.some(e=>e.kind===`attrs`)&&h.push(K(`span`,{class:`was`,text:` · ${i.t(`detail.edgeAttrs`)}`})),e.facets.some(e=>e.kind===`collapsed`)&&h.push(K(`span`,{class:`was`,text:` · ${i.t(`detail.collapsed`)}`}));let _=e.status===`added`?`+`:e.status===`removed`?`−`:e.status===`modified`?`~`:`·`,v=n.edgeIndex.get(e.id),y=gu(e);return K(`button`,{type:`button`,class:`rel ${e.status}`,"data-focus-key":`rel:${e.id}`,"data-family":y,title:i.t(`detail.showOnCanvas`),disabled:v===void 0,onclick:()=>{v!==void 0&&a.pinEdge(v)}},K(`span`,{class:`sign`,"aria-hidden":`true`,text:_}),K(`span`,{class:`s`},...h))}};function vu(e){let t=(e=>`var(--kg-${e})`)(e===`neutral`?`neutral`:e),n;switch(e){case`added`:n=`<circle cx="11" cy="11" r="8.5" fill="none" stroke="${t}" stroke-opacity=".35" stroke-width="2"/><circle cx="11" cy="11" r="5" fill="${t}"/>`;break;case`removed`:n=`<circle cx="11" cy="11" r="5.25" fill="none" stroke="${t}" stroke-width="1.5" stroke-dasharray="3 2.5"/>`;break;case`identity`:n=`<circle cx="11" cy="11" r="9.5" fill="none" stroke="${t}" stroke-opacity=".3" stroke-width="1.5"/><circle cx="11" cy="11" r="7.25" fill="none" stroke="${t}" stroke-width="1.5"/><circle cx="11" cy="11" r="4.25" fill="${t}"/>`;break;case`content`:case`structure`:n=`<circle cx="11" cy="11" r="7.75" fill="none" stroke="${t}" stroke-width="1.5"/><circle cx="11" cy="11" r="4.5" fill="${t}"/>`;break;default:n=`<circle cx="11" cy="11" r="3.5" fill="${t}"/>`}let r=document.createElement(`template`);return r.innerHTML=`<svg class="swatch" viewBox="0 0 22 22" aria-hidden="true" focusable="false">${n}</svg>`,r.content.firstElementChild}var yu=320,bu=50;function xu(e){return e.kind===`header`?32:56}var Su=class{el;detail;#e;#t;#n;#r;#i;searchInput;#a;#o;#s;#c=new Map;#l;list;#u;#d=K(`div`,{class:`sr-only`});#f;#p;#m;#h=[];#g=new Map;#_=!1;#v=``;#y=[];#b=0;#x;constructor(e){this.#x=e;let t=e.controller;this.#e=K(`h2`,{id:`kg-changes-title`}),this.#t=K(`span`,{class:`count-badge`}),this.#r=K(`span`),this.#i=K(`div`),this.#n=K(`div`,{class:`progress`},this.#r,K(`span`,{class:`bar`,"aria-hidden":`true`},this.#i)),this.searchInput=K(`input`,{type:`search`,autocomplete:`off`,spellcheck:`false`,role:`combobox`,"aria-autocomplete":`list`,"aria-expanded":`false`,"aria-controls":`kg-results`,enterkeyhint:`go`}),this.#a=K(`kbd`,{"aria-hidden":`true`,text:`/`}),this.#o=K(`button`,{type:`button`,class:`clear`,hidden:!0,onclick:()=>this.#F(``,!0)},X(`close`)),this.searchInput.addEventListener(`input`,()=>this.#F(this.searchInput.value)),this.searchInput.addEventListener(`keydown`,e=>this.#V(e)),this.searchInput.addEventListener(`focus`,()=>this.#L()),this.searchInput.addEventListener(`blur`,()=>this.#L()),this.#s=K(`div`,{class:`filters`,role:`group`});for(let e of Al){let n=K(`button`,{type:`button`,class:`fchip`,"data-family":e,"aria-pressed":`false`,onclick:()=>t.toggleFamily(e)},vu(e),K(`span`,{class:`lbl`}),K(`span`,{class:`n`}));this.#c.set(e,n),this.#s.appendChild(n)}this.#l=K(`button`,{type:`button`,class:`link-btn`,hidden:!0,onclick:()=>t.setFamilies([])}),this.#s.appendChild(this.#l),this.#u=K(`div`,{class:`list-inner`,role:`presentation`}),this.list=K(`div`,{class:`list scroll`,role:`listbox`,tabindex:`0`,"aria-labelledby":`kg-changes-title`,"aria-keyshortcuts":`J K X Enter Home End`},this.#u),this.list.addEventListener(`scroll`,()=>this.#D(),{passive:!0}),this.list.addEventListener(`click`,e=>this.#P(e)),this.list.addEventListener(`dblclick`,e=>{e.target.closest(`.row`)&&t.flyToSelection()}),this.#f=K(`div`,{class:`sticky`,"aria-hidden":`true`,hidden:!0}),this.#p=K(`div`,{class:`results list scroll`,id:`kg-results`,role:`listbox`,hidden:!0}),this.#m=K(`div`,{class:`sheet-handle`,role:`separator`,"aria-orientation":`horizontal`,tabindex:`0`}),this.#U(),this.detail=new _u(e);let n=K(`div`,{class:`sb-head`},K(`div`,{class:`sb-title`},this.#e,this.#t,this.#n),K(`div`,{class:`search`},X(`search`),this.searchInput,this.#a,this.#o),this.#s);this.el=K(`aside`,{class:`sidebar`,"data-open":`true`},K(`div`,{class:`sidebar-inner`},this.#m,n,K(`div`,{class:`list-wrap`},this.#f,this.list,this.#p,this.#d),this.detail.el))}setOpen(e){J(this.el,`data-open`,String(e)),this.el.inert=!e}update(e){let t=this.#x.tr(),n=e.has(`status`)||e.has(`data`)||e.has(`locale`);n&&(J(this.el,`aria-label`,t.t(`sidebar.label`)),Y(this.#e,t.t(`sidebar.changes`)),this.searchInput.placeholder=t.t(`sidebar.searchPlaceholder`),J(this.searchInput,`aria-label`,t.t(`sidebar.search`)),J(this.#o,`aria-label`,t.t(`sidebar.searchClear`)),J(this.#s,`aria-label`,t.t(`sidebar.filters`)),J(this.#m,`aria-label`,t.t(`sidebar.sheet`)),Y(this.#l,t.t(`sidebar.clearFilters`)),this.searchInput.disabled=this.#x.controller.status!==`ready`,this.#S(),this.#v&&this.#I()),(n||e.has(`filters`))&&(this.#C(),this.#T()),(n||e.has(`review`))&&(this.#w(),this.#j()),e.has(`selection`)&&(this.#j(),this.#M()),this.detail.update(e)}focusList(){this.list.focus({preventScroll:!0})}focusSearch(){this.searchInput.focus(),this.searchInput.select()}escape(){return this.#v?(this.#F(``,!0),!0):!1}#S(){let e=this.#x.tr(),t=this.#x.controller.scene,n=t?lc(t):null;Y(this.#t,e.num(t?.hunks.length??0)),this.#t.hidden=!t,this.#s.hidden=!t||t.hunks.length===0;for(let[t,r]of this.#c){let i=n?n[t]:0;Y(r.querySelector(`.lbl`),e.t(`family.${t}`)),Y(r.querySelector(`.n`),e.num(i)),r.hidden=i===0,J(r,`title`,e.t(`familyHint.${t}`))}}#C(){let e=this.#x.controller.families;for(let[t,n]of this.#c)J(n,`aria-pressed`,String(e.has(t)));this.#l.hidden=e.size===0}#w(){let e=this.#x.tr(),t=this.#x.controller.reviewState(),n=t.reviewed.length,r=t.total;this.#n.hidden=r===0;let i=r>0&&n===r;J(this.#n,`data-complete`,String(i)),Y(this.#r,i?e.t(`review.complete`):e.t(`review.progress`,{done:n,total:r})),this.#i.style.transform=`scaleX(${r>0?n/r:0})`}#T(){let e=this.#x.controller,t=this.#x.tr();q(this.#d,e.list.items.map(e=>e.kind===`header`?K(`span`,{id:`kg-phase-${e.phase}`,text:`${t.t(`phase.${e.phase}`)} (${t.num(e.count)})`}):null));for(let e of this.#g.values())e.remove();this.#g.clear();let n=e.list.items;this.#h=Array(n.length);let r=0;for(let e=0;e<n.length;e++)this.#h[e]=r,r+=xu(n[e]);this.#u.style.height=`${r+8}px`,this.#E(),this.renderWindow()}#E(){let e=this.#x.controller,t=this.#x.tr();if(this.#u.querySelector(`.list-empty, .skeleton`)?.remove(),e.status===`loading`||e.status===`idle`){let t=K(`div`,{class:`skeleton`,"aria-hidden":`true`});if(e.status===`loading`)for(let e=0;e<6;e++)t.appendChild(K(`div`,{class:`skeleton-row shimmer`},K(`span`,{class:`g`}),K(`span`,{class:`b`})));this.#u.appendChild(t);return}if(e.status!==`ready`||e.list.items.length>0)return;let n=e.families.size>0&&e.hunkCount>0;this.#u.appendChild(K(`div`,{class:`list-empty`},X(n?`search`:`check-circle`),K(`span`,{text:t.t(n?`sidebar.filteredEmpty`:`sidebar.noChanges`)}),n?K(`button`,{type:`button`,class:`btn`,text:t.t(`sidebar.clearFilters`),onclick:()=>e.setFamilies([])}):null))}#D(){this.#_||(this.#_=!0,requestAnimationFrame(()=>{this.#_=!1,this.renderWindow()}))}#O(e){let t=0,n=this.#h.length;for(;t<n;){let r=t+n>>1;this.#h[r]+56<=e?t=r+1:n=r}return t}renderWindow(){let e=this.#x.controller.list.items,t=this.list.scrollTop,n=this.list.clientHeight||640,r=this.#O(Math.max(0,t-yu)),i=t+n+yu,a=new Set;for(let t=r;t<e.length&&this.#h[t]<i;t++)a.add(t);for(let[e,t]of this.#g)a.has(e)||(t.remove(),this.#g.delete(e));for(let t of a){if(this.#g.has(t))continue;let n=this.#k(e[t],this.#h[t]);this.#g.set(t,n),this.#u.appendChild(n)}this.#N(t)}#k(e,t){let n=this.#x.tr(),r=this.#x.controller;if(e.kind===`header`)return K(`div`,{class:`group`,role:`presentation`,style:`top: ${t}px`},K(`span`,{text:n.t(`phase.${e.phase}`)}),K(`span`,{class:`n`,text:n.num(e.count)}));let i=r.scene?.hunks[e.hunk],a=r.isReviewed(i.id),o=K(`span`,{class:`rv`,"aria-hidden":`true`,"data-pressed":String(a),title:n.t(a?`review.unmark`:`review.mark`),"data-hunk":i.id},K(`span`,{class:`ring`},X(`check`))),s=r.list.rank.get(e.hunk)??0,c=K(`div`,{class:`row`,role:`option`,id:`kg-opt-${e.hunk}`,"data-index":String(e.hunk),"data-family":i.family,"data-reviewed":String(a),"aria-selected":String(r.selectedHunk===e.hunk),"aria-setsize":String(r.list.order.length),"aria-posinset":String(s+1),"aria-describedby":`kg-phase-${i.phase}`,style:`top: ${t+2}px`},K(`span`,{class:`glyph-box`,"aria-hidden":`true`,text:zl(i)}),K(`span`,{class:`txt`},K(`span`,{class:`title`,title:i.title,text:i.title}),K(`span`,{class:`sub`,text:i.subtitle})),o);return this.#A(c,i,a),c}#A(e,t,n){let r=this.#x.tr(),i=[t.title];t.subtitle&&i.push(t.subtitle),n&&i.push(r.t(`review.toggle`)),J(e,`aria-label`,i.join(`. `))}#j(){let e=this.#x.controller,t=this.#x.tr();for(let n of this.#g.values()){if(!n.classList.contains(`row`))continue;let r=Number(n.dataset.index),i=e.scene?.hunks[r];if(!i)continue;let a=e.isReviewed(i.id);J(n,`aria-selected`,String(r===e.selectedHunk)),J(n,`data-reviewed`,String(a));let o=n.querySelector(`.rv`);J(o,`data-pressed`,String(a)),J(o,`title`,t.t(a?`review.unmark`:`review.mark`)),this.#A(n,i,a)}let n=e.selectedHunk;J(this.list,`aria-activedescendant`,n>=0&&e.list.rank.has(n)?`kg-opt-${n}`:null)}#M(){let e=this.#x.controller,t=e.list.itemOf.get(e.selectedHunk);if(t===void 0)return;let n=this.#h[t],r=this.list.scrollTop,i=this.list.clientHeight||640,a=e.list.items[t-1]?.kind===`header`?this.#h[t-1]:n-32;n<r+32?this.list.scrollTop=Math.max(0,a):n+56>r+i&&(this.list.scrollTop=n+56-i+8),this.renderWindow(),this.#j()}#N(e){let t=this.#x.controller.list.items,n=-1,r=-1;for(let i=0;i<t.length;i++)if(t[i]?.kind===`header`){if(this.#h[i]<=e)n=i;else{r=i;break}}if(n<0||e<=0){this.#f.hidden=!0;return}let i=t[n],a=this.#x.tr();this.#f.hidden=!1;let o=`${a.t(`phase.${i.phase}`)}|${i.count}`;this.#f.dataset.key!==o&&(this.#f.dataset.key=o,q(this.#f,K(`div`,{class:`group`},K(`span`,{text:a.t(`phase.${i.phase}`)}),K(`span`,{class:`n`,text:a.num(i.count)}))));let s=r>=0?Math.min(0,this.#h[r]-e-32):0;this.#f.style.transform=`translateY(${s}px)`}#P(e){let t=this.#x.controller,n=e.target,r=n.closest(`.rv`);if(r?.dataset.hunk){e.stopPropagation(),t.toggleReviewed(r.dataset.hunk);return}let i=n.closest(`.row`);if(!i)return;let a=Number(i.dataset.index);Number.isInteger(a)&&t.selectHunk(a)}#F(e,t=!1){this.#v=e,this.searchInput.value!==e&&(this.searchInput.value=e),this.#b=0,this.#I(),t&&this.searchInput.focus()}#I(){let e=this.#v.trim();this.#y=e?this.#x.controller.search(e,bu):[];let t=e!==``;this.#p.hidden=!t,this.list.hidden=t,this.#f.hidden=t||this.#f.hidden,J(this.searchInput,`aria-expanded`,String(t)),this.#L(),t?this.#R():(q(this.#p),this.renderWindow())}#L(){let e=this.#x.root.activeElement===this.searchInput;this.#a.hidden=this.#v!==``||e,this.#o.hidden=this.#v===``}#R(){let e=this.#x.tr(),t=this.#x.controller,n=this.#v.trim();if(this.#y.length===0){q(this.#p,K(`div`,{class:`list-empty`},X(`search`),K(`span`,{text:e.t(`sidebar.noResults`,{q:n})}))),J(this.searchInput,`aria-activedescendant`,null);return}let r=t.scene,i=this.#y.map((t,i)=>{let a=r?.nodeIndex.get(t.node.id),o=(a===void 0?void 0:r?.nodes[a])?.family??(t.node.status===`added`?`added`:t.node.status===`removed`?`removed`:t.node.status===`modified`?`content`:`neutral`),s=t.field===`label`?t.node.id:(t.field,t.matched);return K(`button`,{type:`button`,class:`result`,role:`option`,id:`kg-hit-${i}`,tabindex:`-1`,"data-family":o,"aria-selected":String(i===this.#b),onclick:()=>this.#B(i),onpointermove:()=>this.#z(i)},K(`span`,{class:`sdot`,"aria-hidden":`true`}),K(`span`,{class:`txt`},K(`span`,{class:`title`},Cu(t.node.label,t.field===`label`?n:``)),K(`span`,{class:`sub`},Cu(s,t.field===`label`?``:n))),K(`span`,{class:`status`,text:e.t(`status.${t.node.status}`)}))});q(this.#p,K(`div`,{class:`results-head`,text:e.plural(`sidebar.results`,this.#y.length)}),i),J(this.searchInput,`aria-activedescendant`,`kg-hit-${this.#b}`)}#z(e){if(!(e===this.#b||e<0||e>=this.#y.length)){this.#b=e;for(let t of this.#p.querySelectorAll(`.result`))J(t,`aria-selected`,String(t.id===`kg-hit-${e}`));J(this.searchInput,`aria-activedescendant`,`kg-hit-${e}`),this.#p.querySelector(`#kg-hit-${e}`)?.scrollIntoView?.({block:`nearest`})}}#B(e){let t=this.#y[e];t&&(this.#F(``),this.#x.controller.revealNode(t.node.id),this.focusList())}#V(e){switch(e.key){case`ArrowDown`:e.preventDefault(),this.#z(Math.min(this.#y.length-1,this.#b+1));break;case`ArrowUp`:e.preventDefault(),this.#z(Math.max(0,this.#b-1));break;case`Enter`:e.preventDefault(),this.#B(this.#b);break;case`Escape`:e.preventDefault(),e.stopPropagation(),this.#v?this.#F(``):this.focusList();break;default:return}}#H(e,t){let n=e=>Math.round(100*e/Math.max(1,t));J(this.#m,`aria-valuemin`,String(n(120))),J(this.#m,`aria-valuemax`,String(n(t-96))),J(this.#m,`aria-valuenow`,String(n(e))),J(this.#m,`aria-valuetext`,this.#x.tr().t(`sidebar.sheetValue`,{p:`${n(e)}%`}))}syncSheet(){let e=this.el.parentElement?.clientHeight??0;e>0&&this.#H(this.el.getBoundingClientRect().height,e)}#U(){let e=null,t=()=>this.el.parentElement,n=e=>{let n=t()?.clientHeight??600,r=Math.max(120,Math.min(n-96,e));this.el.style.setProperty(`--sheet-h`,`${Math.round(r)}px`),this.#H(r,n)};this.#m.addEventListener(`pointerdown`,t=>{e={y:t.clientY,h:this.el.getBoundingClientRect().height,id:t.pointerId},this.#m.setPointerCapture?.(t.pointerId),this.el.classList.add(`dragging`)}),this.#m.addEventListener(`pointermove`,t=>{e&&t.pointerId===e.id&&n(e.h+(e.y-t.clientY))});let r=t=>{e&&t.pointerId===e.id&&(e=null,this.el.classList.remove(`dragging`))};this.#m.addEventListener(`pointerup`,r),this.#m.addEventListener(`pointercancel`,r),this.#m.addEventListener(`keydown`,e=>{if(e.key!==`ArrowUp`&&e.key!==`ArrowDown`)return;e.preventDefault(),e.stopPropagation();let t=this.el.getBoundingClientRect().height;n(t+(e.key===`ArrowUp`?40:-40))})}};function Cu(e,t){if(!t)return[e];let n=e.toLowerCase().indexOf(t.toLowerCase());return n<0?[e]:[e.slice(0,n),K(`mark`,{text:e.slice(n,n+t.length)}),e.slice(n+t.length)]}var wu=[{mode:`overlay`,icon:`overlay`,key:`1`},{mode:`swipe`,icon:`swipe`,key:`2`},{mode:`replay`,icon:`replay`,key:`3`}],Tu=class{el;#e;#t;#n=new Map;#r;#i;#a;#o=[];#s;#c;constructor(e){this.#c=e;let t=e.controller;this.#t=K(`span`,{class:`thumb`,"aria-hidden":`true`}),this.#e=K(`div`,{class:`segmented`,role:`radiogroup`},this.#t);for(let t of wu){let n=K(`button`,{type:`button`,class:`seg`,role:`radio`,"data-mode":t.mode,onclick:()=>e.setMode(t.mode)},X(t.icon),K(`span`,{class:`lbl`}));this.#n.set(t.mode,n),this.#e.appendChild(n)}this.#e.addEventListener(`keydown`,e=>this.#f(e)),this.#r=K(`button`,{type:`button`,class:`scope-btn`,"aria-pressed":`false`,"aria-keyshortcuts":`4`,onclick:()=>e.toggleScope()},X(`changes`),K(`span`,{class:`lbl`})),this.#a=K(`span`,{class:`opts`,role:`radiogroup`});for(let e=0;e<=2;e++){let n=K(`button`,{type:`button`,class:`opt`,role:`radio`,text:String(e),onclick:()=>t.setHops(e)});this.#o.push(n),this.#a.appendChild(n)}this.#a.addEventListener(`keydown`,e=>{if(e.key!==`ArrowLeft`&&e.key!==`ArrowRight`)return;e.preventDefault(),e.stopPropagation();let n=Math.max(0,Math.min(2,t.hops+(e.key===`ArrowRight`?1:-1)));t.setHops(n),this.#o[n]?.focus()}),this.#s=K(`button`,{type:`button`,class:`expand`,onclick:()=>t.expandNearest()},X(`plus`),K(`span`,{class:`n`})),this.#i=K(`div`,{class:`context`,hidden:!0},K(`span`,{class:`label`}),this.#a,this.#s),this.el=K(`div`,{class:`dock-bar card`,role:`group`},this.#e,K(`span`,{class:`dock-sep`,"aria-hidden":`true`}),this.#r,this.#i)}update(e){let t=e.has(`status`)||e.has(`data`)||e.has(`locale`);t&&this.#l(),(t||e.has(`mode`))&&this.#u(),(t||e.has(`mode`)||e.has(`focus`)||e.has(`selection`))&&this.#d()}layout(){this.#u()}#l(){let e=this.#c.tr();J(this.el,`aria-label`,e.t(`dock.label`)),J(this.#e,`aria-label`,e.t(`mode.label`));for(let t of wu){let n=this.#n.get(t.mode),r=e.t(`mode.${t.mode}`);Y(n.querySelector(`.lbl`),r),J(n,`title`,`${r} (${t.key})`),J(n,`aria-label`,r)}Y(this.#r.querySelector(`.lbl`),e.t(`mode.changes`)),J(this.#r,`aria-label`,e.t(`mode.changes`)),Y(this.#i.querySelector(`.label`),e.t(`focus.context`)),J(this.#a,`aria-label`,e.t(`focus.hops`))}#u(){let e=this.#c.controller.mode;for(let[t,n]of this.#n){let r=t===e;J(n,`aria-checked`,String(r)),n.tabIndex=r?0:-1}let t=this.#n.get(e);t&&t.offsetWidth>0&&(this.#t.style.width=`${t.offsetWidth}px`,this.#t.style.transform=`translateX(${t.offsetLeft}px)`)}#d(){let e=this.#c.controller,t=this.#c.tr(),n=e.scope===`changes`,r=e.scopeLocked;if(J(this.#r,`aria-pressed`,String(n)),J(this.#r,`aria-disabled`,r?`true`:null),J(this.#r,`title`,r?t.t(`scope.locked`):`${t.t(`scope.hint`)} (4)`),this.#i.hidden=!n,this.#u(),!n)return;this.#o.forEach((n,r)=>{J(n,`aria-checked`,String(r===e.hops)),n.tabIndex=r===e.hops?0:-1,J(n,`aria-label`,`${t.t(`focus.hops`)}: ${r}`)});let i=e.focus?.collapsed[e.nearestGroup()];if(this.#s.hidden=!i,i){let n=e.canExpand(e.nearestGroup())||i.nodes.length>0;this.#s.disabled=!n,Y(this.#s.querySelector(`.n`),t.num(i.count)),Q(this.#s,`${n?t.t(`focus.expandNearest`):t.t(`focus.expandUnavailable`)}: ${i.label} (E)`)}}#f(e){if(e.key!==`ArrowLeft`&&e.key!==`ArrowRight`)return;e.preventDefault(),e.stopPropagation();let t=wu[(wu.findIndex(e=>e.mode===this.#c.controller.mode)+(e.key===`ArrowRight`?1:wu.length-1))%wu.length];t&&(this.#c.setMode(t.mode),this.#n.get(t.mode)?.focus())}},Eu=1e3,Du=class{el;canvasHost;minimapHost;#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p;#m;#h;#g;#_;#v;dock;#y;#b;#x;#S;#C;#w;#T;#E;#D;#O;tooltip;#k;#A=null;#j=null;#M=null;#N=!1;#P=``;#F;constructor(e){this.#F=e;let t=e.controller;this.canvasHost=K(`div`,{class:`stage`}),this.#t=K(`div`,{class:`sr-only`}),this.#n=K(`div`,{class:`caption card`,"aria-hidden":`true`,"data-empty":`true`}),this.#a=Z(`skip-back`,``,()=>t.stepReplay(-1),{class:`icon-btn`}),this.#i=Z(`play`,``,()=>t.togglePlay(),{class:`icon-btn play`}),this.#o=Z(`skip-forward`,``,()=>t.stepReplay(1),{class:`icon-btn`}),this.#c=K(`div`,{class:`fill`}),this.#l=K(`div`,{class:`knob`}),this.#u=document.createElementNS(`http://www.w3.org/2000/svg`,`svg`),this.#u.setAttribute(`class`,`ticks`),this.#u.setAttribute(`viewBox`,`0 0 ${Eu} 14`),this.#u.setAttribute(`preserveAspectRatio`,`none`),this.#u.setAttribute(`aria-hidden`,`true`),this.#d=K(`div`,{class:`scrub-tip card`,hidden:!0}),this.#s=K(`div`,{class:`scrubber`,role:`slider`,tabindex:`0`,"aria-valuemin":`0`},K(`div`,{class:`track`},this.#c),this.#u,this.#l,this.#d),this.#U(),this.#f=K(`span`,{class:`pos`,"aria-hidden":`true`}),this.#p=K(`button`,{type:`button`,class:`speed`,onclick:()=>t.cycleSpeed()}),this.#r=K(`div`,{class:`transport card`,role:`toolbar`},this.#a,this.#i,this.#o,this.#s,this.#f,this.#p),this.#m=K(`div`,{class:`finished card`,role:`status`,hidden:!0}),this.#_=K(`div`,{class:`side-chip before chip card`}),this.#v=K(`div`,{class:`side-chip after chip card`}),this.#g=K(`div`,{class:`divider`,role:`slider`,tabindex:`0`,"aria-valuemin":`0`,"aria-valuemax":`100`,"aria-orientation":`horizontal`},K(`span`,{class:`handle`,"aria-hidden":`true`},X(`chevron-left`),X(`chevron-right`))),this.#K(),this.#h=K(`div`,{class:`swipe`,hidden:!0},this.#_,this.#v,this.#g),this.dock=new Tu(e),this.#y=K(`div`,{class:`dock`},this.#m,this.#n,this.#r,this.dock.el),this.#x=K(`button`,{type:`button`,class:`legend-head`,"aria-expanded":`false`,onclick:()=>this.#I(!this.#N)},K(`span`,{class:`lbl`}),X(`chevron-down`)),this.#S=K(`div`,{class:`legend-body`,id:`kg-legend`}),J(this.#x,`aria-controls`,`kg-legend`),this.#b=K(`div`,{class:`legend card float bottom-left`,"data-open":`false`},this.#x,this.#S),this.#C=K(`div`,{class:`mini-legend float bottom-left`,role:`list`}),this.#w=Z(`plus`,``,()=>t.zoom(1)),this.#T=Z(`minus`,``,()=>t.zoom(-1)),this.#E=Z(`fit`,``,()=>void t.fit()),this.minimapHost=K(`div`,{class:`minimap-host`}),this.#O=K(`div`,{class:`zoom-bar card`,role:`toolbar`},this.#w,this.#T,this.#E),this.#D=K(`div`,{class:`map-cluster float bottom-right`},this.#O,this.minimapHost),this.tooltip=K(`div`,{class:`tooltip card`,role:`tooltip`,"data-open":`false`}),this.#k=K(`div`,{class:`state`,hidden:!0}),this.#e=K(`div`,{class:`chrome`},this.#h,this.#b,this.#C,this.#D,this.#y,this.tooltip),this.el=K(`main`,{class:`stage-wrap`},this.canvasHost,this.#t,this.#e,this.#k),this.el.addEventListener(`pointermove`,e=>{let t=this.el.getBoundingClientRect();this.#A={x:e.clientX-t.left,y:e.clientY-t.top},this.tooltip.dataset.open===`true`&&this.#J()}),this.el.addEventListener(`pointerleave`,()=>{this.#A=null,t.clearHover()})}chromeLayout(){let e=this.el.getBoundingClientRect(),t=[],n=[this.#b,this.#C,this.#O,this.dock.el,this.#r,this.#m,this.#_,this.#v];this.#n.dataset.empty!==`true`&&n.push(this.#n),this.minimapHost.dataset.hidden!==`true`&&n.push(this.minimapHost);for(let e of this.el.querySelectorAll(`.hud .card`))n.push(e);for(let r of n){if(r.hidden||r.closest(`[hidden]`))continue;let n=r.getBoundingClientRect();n.width<=0||n.height<=0||t.push({x:n.left-e.left,y:n.top-e.top,width:n.width,height:n.height})}return{width:e.width,height:e.height,obstacles:t}}layout(){this.dock.layout()}#I(e){this.#N=e,J(this.#b,`data-open`,String(e)),J(this.#x,`aria-expanded`,String(e))}setChrome(e,t){this.el.dataset.legend=e,this.el.dataset.selectable=String(t)}update(e){let t=this.#F.controller,n=this.#F.tr(),r=e.has(`status`)||e.has(`data`)||e.has(`locale`);r&&(this.#L(n),this.#R(n),this.#Y(n),this.#H(),this.#z(n)),this.dock.update(e),(r||e.has(`mode`))&&this.#B(),(r||e.has(`overview`))&&J(this.minimapHost,`data-hidden`,String(t.overview)),(r||e.has(`mode`)||e.has(`replay`))&&this.#V(n),(r||e.has(`mode`)||e.has(`swipe`))&&this.#G(),(r||e.has(`hover`)||e.has(`selection`)||e.has(`focus`))&&this.#q(n),e.has(`theme`)&&this.#H();let i=t.status===`ready`;this.#e.hidden=!i}#L(e){Q(this.#a,`${e.t(`detail.prev`)} (←)`),Q(this.#o,`${e.t(`detail.next`)} (→)`),J(this.#r,`aria-label`,e.t(`replay.label`)),J(this.#s,`aria-label`,e.t(`replay.scrubber`)),Y(this.#_,e.t(`detail.before`)),Y(this.#v,e.t(`detail.after`)),J(this.#g,`aria-label`,e.t(`swipe.divider`)),Y(this.#x.querySelector(`.lbl`),e.t(`legend.title`)),J(this.#x,`aria-label`,e.t(`legend.toggle`)),Q(this.#w,`${e.t(`action.zoomIn`)} (+)`),Q(this.#T,`${e.t(`action.zoomOut`)} (−)`),Q(this.#E,`${e.t(`action.fit`)} (F)`),J(this.minimapHost,`aria-label`,e.t(`minimap.label`)),J(this.minimapHost,`title`,e.t(`minimap.label`));let t=[...Al,`neutral`];q(this.#S,t.map(t=>K(`div`,{class:`legend-row`,"data-family":t,title:e.t(`familyHint.${t}`)},vu(t),K(`span`,{class:`name`,text:e.t(`family.${t}`)}))))}#R(e){let t=this.#F.controller.scene,n=new Set(t?.hunks.map(e=>e.family));t?.nodes.some(e=>e.status===`unchanged`)&&n.add(`neutral`),J(this.#C,`aria-label`,e.t(`legend.title`)),q(this.#C,[...Al,`neutral`].filter(e=>n.has(e)).map(t=>K(`span`,{class:`mini-item`,role:`listitem`,"data-family":t,title:e.t(`familyHint.${t}`)},K(`span`,{class:`dot`,"aria-hidden":`true`}),e.t(`family.${t}`))))}#z(e){let t=this.#F.controller.diff?.stats,n=this.canvasHost.querySelector(`canvas`);if(!t)return;let r=e.t(`aria.canvas`,{nb:t.before.nodes,eb:t.before.edges,na:t.after.nodes,ea:t.after.edges,changes:e.plural(`aria.changes`,this.#F.controller.hunkCount)});n&&J(n,`aria-label`,r),Y(this.#t,``)}#B(){let e=this.#F.controller.mode;this.#r.hidden=e!==`replay`,this.#n.hidden=e!==`replay`,this.#h.hidden=e!==`swipe`}#V(e){let t=this.#F.controller,n=t.clock,r=t.scene;if(t.mode!==`replay`||!n||!r){this.#m.hidden=!0;return}let i=n.progress;this.#c.style.transform=`scaleX(${i})`,this.#l.style.left=`${i*100}%`;let a=n.position(),o=n.total;Y(this.#f,e.t(`replay.position`,{i:a,n:o})),J(this.#s,`aria-valuemax`,String(Math.round(n.duration))),J(this.#s,`aria-valuenow`,String(Math.round(n.t))),J(this.#s,`aria-valuetext`,e.t(`replay.position`,{i:a,n:o}));let s=n.playing,c=`${e.t(s?`replay.pause`:`replay.play`)} (Space)`;this.#i.dataset.state!==String(s)&&(this.#i.dataset.state=String(s),q(this.#i,X(s?`pause`:`play`))),Q(this.#i,c),Y(this.#p,`${n.speed}×`),Q(this.#p,e.t(`replay.speed`,{s:`${n.speed}×`})),this.#a.disabled=n.t<=0,this.#o.disabled=n.t>=n.duration;let l=``,u=[];if(!(n.t<=0)){if(n.timeline.mode===`chapters`){let t=n.activeTarget(),i=t.index>=0?n.timeline.chapters[t.index]:void 0;if(i){l=`c${t.index}`;let n=r.hunks[i.hunks[0]??-1];u=[K(`span`,{class:`glyph-box`,"data-family":n?.family??`neutral`,text:n?zl(n):`·`}),K(`span`,{class:`text`,text:e.t(`phase.${i.phase}`)}),K(`span`,{class:`count`,text:e.num(i.hunks.length)})]}}else{let e=n.activeHunk();e<0&&a>0&&(e=n.timeline.windows[a-1]?.hunk??-1);let t=e>=0?r.hunks[e]:void 0;t&&(l=`h${e}|${a}`,u=[K(`span`,{class:`glyph-box`,"data-family":t.family,text:zl(t)}),K(`span`,{class:`text`,text:t.title,title:t.title}),K(`span`,{class:`count`,text:`${a} / ${o}`})])}}this.#n.dataset.key!==l&&(this.#n.dataset.key=l,J(this.#n,`data-empty`,String(l===``)),q(this.#n,...u));let d=n.finished;this.#m.hidden=!d,this.#n.hidden=d,d&&this.#m.childElementCount===0?q(this.#m,X(`check-circle`),K(`span`,{text:e.t(`replay.finished`)}),K(`button`,{type:`button`,class:`btn`,onclick:()=>t.restart()},X(`restart`),e.t(`replay.restart`))):!d&&this.#m.childElementCount>0&&ul(this.#F.root,this.#m,this.#i)}#H(){let e=this.#F.controller,t=e.clock,n=e.scene;for(;this.#u.firstChild;)this.#u.removeChild(this.#u.firstChild);if(!t||!n||t.duration<=0)return;let r=new Map;for(let e of t.timeline.windows){let i=n.hunks[e.hunk]?.family;if(!i)continue;let a=(e.start/t.duration*Eu).toFixed(1),o=r.get(i);o||(o=[],r.set(i,o)),o.push(`M${a} 2V12`)}for(let[e,t]of r){let n=document.createElementNS(`http://www.w3.org/2000/svg`,`path`);n.setAttribute(`d`,t.join(``)),n.setAttribute(`stroke`,`var(--kg-${e})`),n.setAttribute(`stroke-width`,`2`),n.setAttribute(`stroke-linecap`,`round`),n.setAttribute(`vector-effect`,`non-scaling-stroke`),this.#u.appendChild(n)}}#U(){let e=e=>{let t=this.#F.controller.clock,n=this.#s.getBoundingClientRect();return!t||n.width<=0?0:Math.max(0,Math.min(1,(e-n.left)/n.width))*t.duration};this.#s.addEventListener(`pointerdown`,t=>{this.#j=t.pointerId,this.#s.setPointerCapture?.(t.pointerId),this.#F.controller.pause(),this.#F.controller.seek(e(t.clientX))}),this.#s.addEventListener(`pointermove`,t=>{this.#j===t.pointerId&&this.#F.controller.seek(e(t.clientX)),this.#W(t.clientX,e(t.clientX))});let t=e=>{this.#j===e.pointerId&&(this.#j=null)};this.#s.addEventListener(`pointerup`,t),this.#s.addEventListener(`pointercancel`,t),this.#s.addEventListener(`pointerleave`,()=>{this.#d.hidden=!0}),this.#s.addEventListener(`keydown`,e=>{let t=this.#F.controller;if(e.key===`Home`)t.seek(0);else if(e.key===`End`)t.seek(t.clock?.duration??0);else return;e.preventDefault(),e.stopPropagation()})}#W(e,t){let n=this.#F.controller,r=n.clock,i=n.scene;if(!r||!i)return;let a=-1,o=1/0;for(let e of r.timeline.windows){let n=Math.abs(e.start-t);n<o&&(o=n,a=e.hunk)}let s=i.hunks[a];if(!s){this.#d.hidden=!0;return}let c=this.#s.getBoundingClientRect();this.#d.hidden=!1,this.#d.style.left=`${e-c.left}px`,this.#d.dataset.hunk!==s.id&&(this.#d.dataset.hunk=s.id,q(this.#d,K(`span`,{class:`glyph-box`,"data-family":s.family,text:zl(s)}),K(`span`,{text:s.title})))}#G(){let e=this.#F.controller;if(e.mode!==`swipe`)return;let t=e.split*100;this.#g.style.left=`${t}%`,J(this.#g,`aria-valuenow`,String(Math.round(t))),J(this.#g,`aria-valuetext`,`${Math.round(t)}%`)}#K(){let e=e=>{let t=this.el.getBoundingClientRect();return t.width>0?(e-t.left)/t.width:.5};this.#g.addEventListener(`pointerdown`,e=>{e.preventDefault(),this.#M=e.pointerId,this.#g.setPointerCapture?.(e.pointerId),this.#g.classList.add(`dragging`),this.#g.focus({preventScroll:!0})}),this.#g.addEventListener(`pointermove`,t=>{this.#M===t.pointerId&&this.#F.controller.setSplit(e(t.clientX))});let t=e=>{this.#M===e.pointerId&&(this.#M=null,this.#g.classList.remove(`dragging`))};this.#g.addEventListener(`pointerup`,t),this.#g.addEventListener(`pointercancel`,t),this.#g.addEventListener(`dblclick`,()=>this.#F.controller.setSplit(.5)),this.#g.addEventListener(`keydown`,e=>{let t=this.#F.controller,n={Home:0,End:1,PageUp:t.split-.1,PageDown:t.split+.1}[e.key];n!==void 0&&(e.preventDefault(),e.stopPropagation(),t.setSplit(n))})}#q(e){let t=this.#F.controller,n=t.scene,r=t.diff;if(!n||!r||this.#M!==null){J(this.tooltip,`data-open`,`false`);return}let i=[],a=`neutral`;if(t.hoverNode>=0){let o=n.nodes[t.hoverNode],s=o?r.index.node(o.id):void 0;if(!o||!s)return;a=o.family;let c=o.hunk>=0?n.hunks[o.hunk]:void 0,l=s.facets.find(e=>e.kind===`rekey`),u=Math.max(s.degree.before,s.degree.after);i.push(K(`div`,{class:`t-label`,text:o.label}),o.labelBefore?K(`div`,{class:`t-old`,text:o.labelBefore}):null,K(`div`,{class:`t-id`,text:l&&l.kind===`rekey`?`${l.from} → ${l.to}`:o.id}),K(`div`,{class:`t-status`,"data-family":a},K(`span`,{class:`dot`}),o.status===`unchanged`?e.t(`status.unchanged`):`${e.t(`status.${o.status}`)} · ${e.t(`family.${a}`)}`),K(`div`,{class:`t-sum`,text:c?c.title:e.plural(`tooltip.relations`,u)}),K(`div`,{class:`t-hint`,text:e.t(`tooltip.select`)}))}else if(t.hoverEdge>=0){let r=n.edges[t.hoverEdge];if(!r)return;a=r.family;let o=n.nodes[r.s]?.label??``,s=n.nodes[r.t]?.label??``,c=r.hunk>=0?n.hunks[r.hunk]:void 0;i.push(K(`div`,{class:`t-label`,text:`${o} —${r.label}→ ${s}`}),r.labelBefore?K(`div`,{class:`t-old`,text:r.labelBefore}):null,K(`div`,{class:`t-status`,"data-family":a},K(`span`,{class:`dot`}),e.t(`status.${r.status}`)),c?K(`div`,{class:`t-sum`,text:c.title}):null)}else if(t.hoverGroup>=0){let n=t.focus?.collapsed[t.hoverGroup];if(!n)return;i.push(K(`div`,{class:`t-label`,text:n.label}),K(`div`,{class:`t-hint`,text:e.t(t.canExpand(t.hoverGroup)?`focus.expand`:`focus.expandUnavailable`)}))}i.length===0?J(this.tooltip,`data-open`,`false`):(q(this.tooltip,...i),J(this.tooltip,`data-open`,`true`),this.#J())}#J(){let e=this.#A;if(!e){J(this.tooltip,`data-open`,`false`);return}let t=this.tooltip.offsetWidth,n=this.tooltip.offsetHeight,r=this.el.clientWidth,i=this.el.clientHeight,a=e.x+16,o=e.y+18;a+t>r-8&&(a=Math.max(8,e.x-t-12)),o+n>i-8&&(o=Math.max(8,e.y-n-12)),this.tooltip.style.transform=`translate(${Math.round(a)}px, ${Math.round(o)}px)`}#Y(e){let t=this.#F.controller,n=t.diff?.stats,r=t.status;if(t.status===`loading`&&(r+=`|${t.step}|${t.steps.join(`,`)}`),t.status===`ready`&&(r+=n?.identical?`|identical`:``),r+=`|${e.locale}`,t.status===`error`&&(r+=`|${t.error?.message}`),r!==this.#P){if(this.#P=r,this.#k.classList.remove(`blocking`),t.status===`ready`&&!n?.identical)this.#k.hidden=!0,q(this.#k);else if(this.#k.hidden=!1,t.status===`loading`){this.#k.classList.add(`blocking`);let n=t.step?t.steps.indexOf(t.step):-1;q(this.#k,K(`div`,{class:`skeleton-grid`,"aria-hidden":`true`}),K(`div`,{class:`state-card card`,role:`status`,"aria-live":`polite`},K(`h2`,{text:e.t(`state.loading`)}),K(`ol`,{class:`steps`},t.steps.map((t,r)=>K(`li`,{"data-state":r<n?`done`:r===n?`active`:`pending`},K(`span`,{class:`mark`,"aria-hidden":`true`},r<n?X(`check`):null),K(`span`,{text:`${e.t(`step.${t}`)}${r===n?`…`:``}`}))))))}else if(t.status===`error`){this.#k.classList.add(`blocking`);let n=t.error,r=n instanceof p?n.code:n?.name,i=[r?`[${r}]`:``,n?.message??``,n?.stack??``].filter(Boolean).join(`
|
|
5
|
+
`);q(this.#k,K(`div`,{class:`state-card card error`,role:`alert`},K(`div`,{class:`state-icon`},X(`alert`)),K(`h2`,{text:e.t(`state.error.title`)}),K(`p`,{text:n?.message??``}),K(`details`,null,K(`summary`,{text:e.t(`state.error.details`)}),K(`pre`,{text:i}))))}else t.status===`ready`&&n?.identical?q(this.#k,K(`div`,{class:`state-card card ok`,role:`status`},K(`div`,{class:`state-icon`},X(`check-circle`)),K(`h2`,{text:e.t(`state.identical.title`)}),K(`p`,{text:e.t(`state.identical.body`,{nodes:e.plural(`count.nodes`,n.after.nodes),edges:e.plural(`count.edges`,n.after.edges)})}))):(this.#k.classList.add(`blocking`),q(this.#k,K(`div`,{class:`state-card`},K(`div`,{class:`state-icon`},X(`overlay`)),K(`h2`,{text:e.t(`state.empty.title`)}),K(`p`,{text:e.t(`state.empty.body`)}))))}}},Ou=1100,ku=[`mode`,`scope`,`theme`,`palette`,`locale`,`sidebar`,`sync-hash`,`chrome`,`legend`,`loop`,`loop-delay`,`pause-on-hover`],Au=[`mode`,`scope`,`theme`,`palette`,`locale`,`chrome`,`legend`,`loop`,`loopDelay`,`pauseOnHover`,`payload`],ju=new Set([`ArrowUp`,`ArrowDown`,`ArrowLeft`,`ArrowRight`,`Home`,`End`,`PageUp`,`PageDown`,` `,`Spacebar`]),Mu=[];function Nu(e){if(typeof e==`object`&&e&&!Object.isFrozen(e)){for(let t of Object.values(e))Nu(t);Object.freeze(e)}return e}function Pu(e){return typeof window<`u`&&typeof window.matchMedia==`function`?window.matchMedia(e):null}function Fu(){return new Promise(e=>{let t=!1,n=()=>{t||(t=!0,e())};typeof requestAnimationFrame==`function`&&requestAnimationFrame(()=>setTimeout(n,0)),setTimeout(n,50)})}var Iu=class extends HTMLElement{static get observedAttributes(){return ku}controller;#e;#t=null;#n=null;#r=!1;#i=!1;#a=!1;#o=[];#s=``;#c=!1;#l=!1;constructor(){super(),this.#e=this.attachShadow({mode:`open`});let e={ready:e=>this.#d(`kgdiff-ready`,{stats:e}),select:(e,t)=>{this.#d(`kgdiff-select`,{hunk:e,node:t}),this.#O()},mode:(e,t)=>{this.#d(`kgdiff-mode`,{mode:e,scope:t}),this.#O()},review:(e,t,n)=>this.#d(`kgdiff-review`,{hunk:e,reviewed:t,progress:n}),error:e=>this.#d(`kgdiff-error`,{error:e}),announce:e=>this.#p(e),replayEnd:e=>this.#d(`kgdiff-replay-end`,{loop:e})};this.controller=new rl(e,{now:()=>typeof performance<`u`?performance.now():Date.now(),requestFrame:e=>typeof requestAnimationFrame==`function`?requestAnimationFrame(e):0,cancelFrame:e=>{typeof cancelAnimationFrame==`function`&&cancelAnimationFrame(e)},yieldToPaint:Fu,storage:Wc()}),this.controller.locale=Cc(this.getAttribute(`locale`))??$s(),this.controller.subscribe(e=>this.#y(e))}connectedCallback(){if(!this.#c){this.#c=!0;for(let e of Au)if(Object.hasOwn(this,e)){let t=this[e];delete this[e],this[e]=t}}this.#t||this.#v(),Mu.push(this);let e=this.#t;if(!e)return;this.controller.attach(e.stage.canvasHost,e.stage.minimapHost);let t=e.stage.canvasHost.querySelector(`canvas`);if(t){t.tabIndex=this.chrome===`none`?-1:0;let e=()=>{this.chrome!==`none`&&t.focus({preventScroll:!0})};t.addEventListener(`pointerdown`,e),this.#o.push(()=>t.removeEventListener(`pointerdown`,e))}this.#w(),this.#T();let n=e=>this.#E(e);document.addEventListener(`keydown`,n),this.#o.push(()=>document.removeEventListener(`keydown`,n));let r=e=>this.controller.syncReview(e.key);window.addEventListener(`storage`,r),this.#o.push(()=>window.removeEventListener(`storage`,r));let i=()=>this.#D();window.addEventListener(`hashchange`,i),this.#o.push(()=>window.removeEventListener(`hashchange`,i)),this.controller.setChrome(()=>e.stage.chromeLayout()),document.fonts?.ready?.then(()=>this.#t?.stage.layout()).catch(()=>void 0),this.#D(),this.#y(new Set([`status`,`data`,`mode`,`theme`,`locale`,`filters`,`review`,`selection`,`focus`,`swipe`,`replay`,`overview`]))}disconnectedCallback(){let e=Mu.indexOf(this);e>=0&&Mu.splice(e,1);for(let e of this.#o.splice(0))e();this.controller.detach(),this.#l=!1,this.#_()}attributeChangedCallback(e,t,n){if(!this.#i)switch(e){case`mode`:case`scope`:case`theme`:case`palette`:case`locale`:this.#u(e,n,!1);break;case`sidebar`:this.#h();break;case`sync-hash`:n!==null&&this.#D();break;case`chrome`:case`legend`:this.#g();break;case`loop`:case`loop-delay`:this.controller.setLoop(this.loop?this.loopDelay:null),this.#_();break;case`pause-on-hover`:this.#_()}}#u(e,t,n){let r=this.controller,i=e===`mode`&&t===`changes`,a;switch(e){case`mode`:{if(i){r.explicit.add(`scope`),r.setView(`overlay`,`changes`),a=`overlay`;break}let e=vc(t);r.setMode(e??`overlay`),a=e;break}case`scope`:{let e=yc(t);r.setScope(e??`all`),a=e===null?null:r.scope;break}case`theme`:{let e=xc(t);r.setThemePreference(e??`auto`),a=e;break}case`palette`:{let e=Sc(t);r.setPalette(e??`default`),a=e;break}case`locale`:{let e=Cc(t);r.setLocale(e??$s()),a=e;break}default:return}a===null?r.explicit.delete(e):r.explicit.add(e),(n||i)&&this.#f(e,a),i&&this.#f(`scope`,r.scope)}get mode(){return this.controller.mode}set mode(e){this.#u(`mode`,e,!0)}get scope(){return this.controller.scope}set scope(e){this.#u(`scope`,e,!0)}get theme(){return this.controller.themePreference}set theme(e){this.#u(`theme`,e,!0)}get palette(){return this.controller.palette}set palette(e){this.#u(`palette`,e,!0)}get locale(){return this.controller.locale}set locale(e){this.#u(`locale`,e,!0)}get chrome(){return wc(this.getAttribute(`chrome`))??`full`}set chrome(e){this.#f(`chrome`,wc(e)===`none`?`none`:null),this.#g()}get legend(){return Tc(this.getAttribute(`legend`))??`auto`}set legend(e){let t=Tc(e);this.#f(`legend`,t===`auto`?null:t),this.#g()}get loop(){return this.hasAttribute(`loop`)}set loop(e){this.toggleAttribute(`loop`,!!e)}get loopDelay(){return Ec(this.getAttribute(`loop-delay`))??1200}set loopDelay(e){let t=Ec(e);t===null?this.removeAttribute(`loop-delay`):this.setAttribute(`loop-delay`,String(t))}get pauseOnHover(){return this.getAttribute(`pause-on-hover`)!==`false`}set pauseOnHover(e){e?this.removeAttribute(`pause-on-hover`):this.setAttribute(`pause-on-hover`,`false`)}get payload(){return this.#n}set payload(e){if(this.#n=e,e==null)return;let t;try{t=Tl(e)}catch(e){this.controller.fail(e);return}this.controller.loadPayload(t).catch(()=>{})}load(e){return this.#n=null,this.controller.load(e)}selectHunk(e){this.controller.selectHunkById(e,{fly:!0})}next(){this.controller.next()}prev(){this.controller.prev()}play(){this.controller.play()}pause(){this.controller.pause()}fit(e){return this.controller.fit(e)}exportDelta(){let e=this.controller.diff;if(!e)throw new p(`invalid-input`,W(`en`,`error.notLoaded`));return Nu(structuredClone(e.delta))}reviewState(){return this.controller.reviewState()}setReviewed(e,t){this.controller.setReviewed(e,t)}showError(e){this.controller.fail(e)}#d(e,t){this.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}#f(e,t){if(this.getAttribute(e)!==t){this.#i=!0;try{t===null?this.removeAttribute(e):this.setAttribute(e,t)}finally{this.#i=!1}}}#p(e){let t=this.#t?.live;t&&(t.textContent=``,setTimeout(()=>{t.textContent=e},30))}get#m(){return this.getAttribute(`sidebar`)!==`closed`}#h(){let e=this.#t;e&&(e.sidebar.setOpen(this.#m),e.header.setSidebarState(this.#m))}#g(){let e=this.chrome===`none`,t=this.controller;t.autoFit=e,t.selectOnClick=!e,t.setLabelsInside(e);let n=this.#t;if(!n)return;n.root.dataset.chrome=this.chrome;let r=this.legend;n.stage.setChrome(r===`auto`?e?`mini`:`full`:r,!e);let i=n.stage.canvasHost.querySelector(`canvas`);i&&(i.tabIndex=e?-1:0),e&&(n.help.hide(),this.#S(!1))}#_(){this.controller.hold(this.#l&&this.loop&&this.pauseOnHover)}#v(){let e=K(`style`,{text:Ml}),t=K(`style`),n={controller:this.controller,tr:()=>ac(this.controller.locale),root:this.#e,setMode:e=>{this.controller.setMode(e)},toggleScope:()=>{this.controller.toggleScope()},setThemePreference:e=>{this.theme=e},setPalette:e=>{this.palette=e},setLocale:e=>{this.locale=e},toggleSidebar:e=>this.#x(e),sidebarOpen:()=>this.#m,toggleMenu:e=>this.#S(e),openHelp:()=>this.#t?.help.show(),focusSearch:()=>this.#C()},r=new Pl(n),i=new Du(n),a=new Su(n),o=new Fl(n),s=new Ll(n),c=K(`div`,{class:`sr-only`,"aria-live":`polite`,"aria-atomic":`true`});r.attachMenu(o.el),i.el.appendChild(r.el);let l=K(`div`,{class:`root`},K(`div`,{class:`body`},i.el,a.el),s.el,c);this.#e.append(e,t,l),this.#t={root:l,vars:t,header:r,stage:i,sidebar:a,menu:o,help:s,live:c},l.addEventListener(`pointerdown`,e=>{if(!o.open)return;let t=e.composedPath();!t.includes(o.el)&&!t.includes(r.menuButton)&&this.#S(!1)});let u=e=>t=>{t.pointerType!==`touch`&&(this.#l=e,this.#_())};i.el.addEventListener(`pointerenter`,u(!0)),i.el.addEventListener(`pointerleave`,u(!1)),this.#h(),this.#g()}#y(e){try{this.#b(e),this.#r=!1}catch(e){if(console.error(`[kgdiff] render failed:`,e),this.#r)return;this.#r=!0;let t=this.controller;t.explicit.clear(),t.setThemePreference(`auto`),t.setPalette(`default`),t.fail(e instanceof Error?e:Error(String(e)))}}#b(e){let t=this.#t,n=this.controller;e.has(`mode`)&&(this.#f(`mode`,n.mode),this.#f(`scope`,n.scope)),e.has(`theme`)&&this.#f(`theme`,n.themePreference===`auto`&&!this.hasAttribute(`theme`)?null:n.themePreference),t&&((e.has(`theme`)||e.has(`status`))&&(t.vars.textContent=`:host { ${jl(n.theme)} }`,t.root.dataset.theme=n.themeName),(e.has(`locale`)||e.has(`status`))&&(t.root.setAttribute(`lang`,n.locale),t.menu.open&&t.menu.render(),t.help.open&&t.help.render()),e.has(`theme`)&&t.menu.open&&t.menu.render(),t.header.update(e),t.sidebar.update(e),t.stage.update(e),(e.has(`mode`)||e.has(`status`))&&(t.root.dataset.mode=n.mode,t.root.dataset.scope=n.scope))}#x(e){let t=e??!this.#m;this.#f(`sidebar`,t?`open`:`closed`),this.#h()}#S(e){let t=this.#t;if(!t)return;let n=e??!t.menu.open;n?t.menu.show(t.header.menuButton):t.menu.hide(!1),t.header.setMenuState(n)}#C(){this.#m||this.#x(!0),this.#t?.sidebar.focusSearch()}#w(){let e=Pu(`(prefers-color-scheme: light)`),t=Pu(`(prefers-reduced-motion: reduce)`),n=()=>{this.controller.setSystemDark(!(e?.matches??!1)),this.controller.setReducedMotion(t?.matches??!1)};n();for(let r of[e,t])r&&(r.addEventListener?.(`change`,n),this.#o.push(()=>r.removeEventListener?.(`change`,n)))}#T(){if(typeof ResizeObserver!=`function`)return;let e=new ResizeObserver(()=>{let e=this.#t;if(!e)return;let t=this.clientWidth,n=t>0&&t<760;e.root.dataset.narrow=String(t>0&&t<Ou),n!==this.#a&&(this.#a=n,e.root.dataset.compact=String(n)),e.stage.layout(),e.sidebar.renderWindow(),n&&e.sidebar.syncSheet(),this.controller.layoutChanged()});e.observe(this),this.#t&&e.observe(this.#t.stage.el),this.#o.push(()=>e.disconnect())}#E(e){if(e.defaultPrevented||e.isComposing)return;let t=this.#t;if(!t||this.chrome===`none`)return;let n=e.composedPath();if(!n.includes(this)){if(!this.hasAttribute(`global-shortcuts`)||ju.has(e.key))return;let t=document.activeElement;if(t&&t!==document.body&&t!==document.documentElement||Mu.find(e=>e.hasAttribute(`global-shortcuts`))!==this)return}if(t.help.open||t.menu.open){e.key===`Escape`&&(e.preventDefault(),t.help.hide(),this.#S(!1));return}let r=n[0]??null;if(yl(r))return;let i=this.controller,a=vl(e,i.mode,i.scope);if(!a)return;let o=r;if((e.key!==`Enter`&&e.key!==` `||!o?.closest?.(`button, a, summary, [role="radio"], [role="menuitemradio"]`))&&(i.status===`ready`||[`help`,`theme`,`sidebar`,`escape`].includes(a.type)))switch(e.preventDefault(),a.type){case`mode`:i.setMode(a.mode);break;case`scope`:i.toggleScope();break;case`next`:i.next();break;case`prev`:i.prev();break;case`first`:i.first();break;case`last`:i.last();break;case`fly`:i.flyToSelection();break;case`escape`:t.sidebar.escape()||i.clearSelection();break;case`play-pause`:i.togglePlay();break;case`step`:i.stepReplay(a.direction);break;case`divider`:i.setSplit(i.split+a.delta);break;case`fit`:i.fit();break;case`zoom`:i.zoom(a.direction);break;case`search`:this.#C();break;case`review`:i.toggleReviewed();break;case`sidebar`:this.#x();break;case`theme`:{let e=_c.indexOf(i.themePreference);this.theme=_c[(e+1)%_c.length];break}case`help`:t.help.show();break;case`expand`:i.expandNearest()}}#D(){if(!this.hasAttribute(`sync-hash`)||typeof location>`u`||location.hash===this.#s)return;let e=pl(location.hash);if(this.#s=location.hash,e){if(e.mode||e.scope){let t=this.controller;e.mode&&t.explicit.add(`mode`),e.scope&&t.explicit.add(`scope`),t.setView(e.mode??t.mode,e.scope??t.scope)}e.hunk&&this.controller.selectHunkById(e.hunk,{fly:!0})}}#O(){if(!this.hasAttribute(`sync-hash`)||typeof location>`u`)return;let e=this.controller,t=e.selectedHunk>=0?e.scene?.hunks[e.selectedHunk]?.id:void 0,n=ml({...t===void 0?{}:{hunk:t},mode:e.mode,scope:e.scope});if(n!==location.hash){this.#s=n;try{history.replaceState(history.state,``,n)}catch{location.hash=n}}}},Lu=`application/kgdiff+json`,Ru=!1;function zu(e=`kgdiff-viewer`){if(typeof customElements>`u`)return;let t=e.toLowerCase();if(customElements.get(t)===void 0){let e=Ru?class extends Iu{}:Iu;customElements.define(t,e),Ru=!0}bl.add(t)}function Bu(e){let t=e??(typeof document<`u`?document:void 0);return t?kl(t):Promise.resolve()}zu();function Vu(){Bu().catch(e=>console.error(`[kgdiff]`,e))}return typeof document<`u`&&(document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,Vu,{once:!0}):Vu()),e.COMPUTE_GLOBAL=js,e.PAYLOAD_SCRIPT_TYPE=Lu,e.defineViewer=zu,e.hydrateEmbeddedPayloads=Bu,e})({});
|