@kgdiff/viewer 0.5.0 → 0.6.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 +43 -16
- package/custom-elements.json +2347 -0
- package/dist/bind.d.ts +41 -0
- package/dist/bind.d.ts.map +1 -0
- package/dist/bind.js +47 -0
- package/dist/bind.js.map +1 -0
- package/dist/controller.d.ts +22 -74
- package/dist/controller.d.ts.map +1 -1
- package/dist/controller.js +35 -376
- package/dist/controller.js.map +1 -1
- package/dist/dom.d.ts +10 -0
- package/dist/dom.d.ts.map +1 -1
- package/dist/dom.js +29 -0
- package/dist/dom.js.map +1 -1
- package/dist/element.d.ts +52 -46
- package/dist/element.d.ts.map +1 -1
- package/dist/element.js +362 -403
- package/dist/element.js.map +1 -1
- package/dist/elements/actions.d.ts +27 -0
- package/dist/elements/actions.d.ts.map +1 -0
- package/dist/elements/actions.js +81 -0
- package/dist/elements/actions.js.map +1 -0
- package/dist/elements/bound.d.ts +63 -0
- package/dist/elements/bound.d.ts.map +1 -0
- package/dist/elements/bound.js +213 -0
- package/dist/elements/bound.js.map +1 -0
- package/dist/elements/change-detail.d.ts +25 -0
- package/dist/elements/change-detail.d.ts.map +1 -0
- package/dist/elements/change-detail.js +19 -0
- package/dist/elements/change-detail.js.map +1 -0
- package/dist/elements/change-list.d.ts +27 -0
- package/dist/elements/change-list.d.ts.map +1 -0
- package/dist/elements/change-list.js +29 -0
- package/dist/elements/change-list.js.map +1 -0
- package/dist/elements/filters.d.ts +25 -0
- package/dist/elements/filters.d.ts.map +1 -0
- package/dist/elements/filters.js +19 -0
- package/dist/elements/filters.js.map +1 -0
- package/dist/elements/legend.d.ts +40 -0
- package/dist/elements/legend.d.ts.map +1 -0
- package/dist/elements/legend.js +87 -0
- package/dist/elements/legend.js.map +1 -0
- package/dist/elements/minimap.d.ts +38 -0
- package/dist/elements/minimap.d.ts.map +1 -0
- package/dist/elements/minimap.js +59 -0
- package/dist/elements/minimap.js.map +1 -0
- package/dist/elements/root.d.ts +40 -0
- package/dist/elements/root.d.ts.map +1 -0
- package/dist/elements/root.js +67 -0
- package/dist/elements/root.js.map +1 -0
- package/dist/elements/search.d.ts +29 -0
- package/dist/elements/search.d.ts.map +1 -0
- package/dist/elements/search.js +23 -0
- package/dist/elements/search.js.map +1 -0
- package/dist/elements/stage-context.d.ts +31 -0
- package/dist/elements/stage-context.d.ts.map +1 -0
- package/dist/elements/stage-context.js +4 -0
- package/dist/elements/stage-context.js.map +1 -0
- package/dist/elements/stage.d.ts +65 -0
- package/dist/elements/stage.d.ts.map +1 -0
- package/dist/elements/stage.js +259 -0
- package/dist/elements/stage.js.map +1 -0
- package/dist/elements/title.d.ts +25 -0
- package/dist/elements/title.d.ts.map +1 -0
- package/dist/elements/title.js +19 -0
- package/dist/elements/title.js.map +1 -0
- package/dist/elements/transport.d.ts +29 -0
- package/dist/elements/transport.d.ts.map +1 -0
- package/dist/elements/transport.js +24 -0
- package/dist/elements/transport.js.map +1 -0
- package/dist/elements/view-bound.d.ts +39 -0
- package/dist/elements/view-bound.d.ts.map +1 -0
- package/dist/elements/view-bound.js +88 -0
- package/dist/elements/view-bound.js.map +1 -0
- package/dist/elements/view-dock.d.ts +28 -0
- package/dist/elements/view-dock.d.ts.map +1 -0
- package/dist/elements/view-dock.js +28 -0
- package/dist/elements/view-dock.js.map +1 -0
- package/dist/elements/zoom.d.ts +28 -0
- package/dist/elements/zoom.d.ts.map +1 -0
- package/dist/elements/zoom.js +22 -0
- package/dist/elements/zoom.js.map +1 -0
- package/dist/i18n.d.ts +10 -0
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +20 -0
- package/dist/i18n.js.map +1 -1
- package/dist/icons.d.ts +1 -0
- package/dist/icons.d.ts.map +1 -1
- package/dist/icons.js +1 -0
- package/dist/icons.js.map +1 -1
- package/dist/index.d.ts +328 -34
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -1
- package/dist/keyboard.d.ts +39 -2
- package/dist/keyboard.d.ts.map +1 -1
- package/dist/keyboard.js +145 -62
- package/dist/keyboard.js.map +1 -1
- package/dist/layout-store.d.ts +26 -0
- package/dist/layout-store.d.ts.map +1 -0
- package/dist/layout-store.js +46 -0
- package/dist/layout-store.js.map +1 -0
- package/dist/panel-levels.d.ts +18 -0
- package/dist/panel-levels.d.ts.map +1 -0
- package/dist/panel-levels.js +41 -0
- package/dist/panel-levels.js.map +1 -0
- package/dist/panels.d.ts +28 -0
- package/dist/panels.d.ts.map +1 -0
- package/dist/panels.js +73 -0
- package/dist/panels.js.map +1 -0
- package/dist/prefs.d.ts +5 -2
- package/dist/prefs.d.ts.map +1 -1
- package/dist/prefs.js +12 -3
- package/dist/prefs.js.map +1 -1
- package/dist/react.d.ts +460 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +2 -0
- package/dist/react.js.map +1 -0
- package/dist/root-element.d.ts +122 -0
- package/dist/root-element.d.ts.map +1 -0
- package/dist/root-element.js +541 -0
- package/dist/root-element.js.map +1 -0
- package/dist/root.d.ts +30 -30
- package/dist/root.d.ts.map +1 -1
- package/dist/root.js +65 -42
- package/dist/root.js.map +1 -1
- package/dist/session.d.ts +19 -3
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +15 -17
- package/dist/session.js.map +1 -1
- package/dist/standalone/kgdiff-viewer.js +4 -4
- package/dist/styles.d.ts +4 -0
- package/dist/styles.d.ts.map +1 -1
- package/dist/styles.js +224 -84
- package/dist/styles.js.map +1 -1
- package/dist/theme.d.ts +7 -0
- package/dist/theme.d.ts.map +1 -1
- package/dist/theme.js +10 -7
- package/dist/theme.js.map +1 -1
- package/dist/topics.d.ts +8 -0
- package/dist/topics.d.ts.map +1 -0
- package/dist/topics.js +18 -0
- package/dist/topics.js.map +1 -0
- package/dist/ui/change-list.d.ts.map +1 -1
- package/dist/ui/change-list.js +2 -2
- package/dist/ui/change-list.js.map +1 -1
- package/dist/ui/context.d.ts +20 -7
- package/dist/ui/context.d.ts.map +1 -1
- package/dist/ui/context.js.map +1 -1
- package/dist/ui/header.d.ts +41 -3
- package/dist/ui/header.d.ts.map +1 -1
- package/dist/ui/header.js +99 -34
- package/dist/ui/header.js.map +1 -1
- package/dist/ui/legend.d.ts +15 -0
- package/dist/ui/legend.d.ts.map +1 -0
- package/dist/ui/legend.js +68 -0
- package/dist/ui/legend.js.map +1 -0
- package/dist/ui/popovers.d.ts +3 -1
- package/dist/ui/popovers.d.ts.map +1 -1
- package/dist/ui/popovers.js +62 -23
- package/dist/ui/popovers.js.map +1 -1
- package/dist/ui/search.d.ts.map +1 -1
- package/dist/ui/search.js +3 -2
- package/dist/ui/search.js.map +1 -1
- package/dist/ui/sidebar.d.ts +26 -3
- package/dist/ui/sidebar.d.ts.map +1 -1
- package/dist/ui/sidebar.js +344 -12
- package/dist/ui/sidebar.js.map +1 -1
- package/dist/ui/stage.d.ts +56 -1
- package/dist/ui/stage.d.ts.map +1 -1
- package/dist/ui/stage.js +244 -256
- package/dist/ui/stage.js.map +1 -1
- package/dist/ui/transport.d.ts +12 -0
- package/dist/ui/transport.d.ts.map +1 -0
- package/dist/ui/transport.js +198 -0
- package/dist/ui/transport.js.map +1 -0
- package/dist/ui/zoom.d.ts +15 -0
- package/dist/ui/zoom.d.ts.map +1 -0
- package/dist/ui/zoom.js +30 -0
- package/dist/ui/zoom.js.map +1 -0
- package/dist/view.d.ts +94 -0
- package/dist/view.d.ts.map +1 -0
- package/dist/view.js +441 -0
- package/dist/view.js.map +1 -0
- package/package.json +95 -12
- package/src/bind.ts +80 -0
- package/src/controller.ts +51 -442
- package/src/dom.ts +30 -0
- package/src/element.ts +364 -406
- package/src/elements/actions.ts +94 -0
- package/src/elements/bound.ts +247 -0
- package/src/elements/change-detail.ts +34 -0
- package/src/elements/change-list.ts +51 -0
- package/src/elements/filters.ts +34 -0
- package/src/elements/legend.ts +103 -0
- package/src/elements/minimap.ts +75 -0
- package/src/elements/root.ts +86 -0
- package/src/elements/search.ts +38 -0
- package/src/elements/stage-context.ts +34 -0
- package/src/elements/stage.ts +285 -0
- package/src/elements/title.ts +34 -0
- package/src/elements/transport.ts +39 -0
- package/src/elements/view-bound.ts +118 -0
- package/src/elements/view-dock.ts +43 -0
- package/src/elements/zoom.ts +38 -0
- package/src/i18n.ts +20 -0
- package/src/icons.ts +1 -0
- package/src/index.ts +347 -34
- package/src/keyboard.ts +188 -61
- package/src/layout-store.ts +71 -0
- package/src/panel-levels.ts +53 -0
- package/src/panels.ts +81 -0
- package/src/prefs.ts +12 -4
- package/src/react.ts +459 -0
- package/src/root-element.ts +624 -0
- package/src/root.ts +92 -65
- package/src/session.ts +22 -33
- package/src/styles.ts +245 -84
- package/src/theme.ts +10 -7
- package/src/topics.ts +37 -0
- package/src/ui/change-list.ts +6 -2
- package/src/ui/context.ts +20 -7
- package/src/ui/header.ts +127 -56
- package/src/ui/legend.ts +112 -0
- package/src/ui/popovers.ts +68 -25
- package/src/ui/search.ts +10 -5
- package/src/ui/sidebar.ts +386 -23
- package/src/ui/stage.ts +267 -331
- package/src/ui/transport.ts +240 -0
- package/src/ui/zoom.ts +45 -0
- package/src/view.ts +516 -0
- package/vscode.html-custom-data.json +726 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
var KgdiffViewer=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(e,t,n){return JSON.stringify([e,t,n])}function n(e){return e.charCodeAt(e.length-1)!==93}function r(e){return Array.isArray(e)}function i(e,t){if(e===t)return!0;if(e===void 0||t===void 0||e===null||t===null)return!1;if(typeof e!=`object`||typeof t!=`object`)return typeof e==`number`&&typeof t==`number`&&Number.isNaN(e)&&Number.isNaN(t);if(r(e)){if(!r(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!i(e[n],t[n]))return!1;return!0}return!r(t)&&l(e,t)}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,t,n){if(e===t)return!0;let r=0;for(let a of Object.keys(e)){let o=e[a];if(!(o===void 0||n?.has(a))&&(r++,!i(o,s(t,a))))return!1}let a=0;for(let e of Object.keys(t))t[e]!==void 0&&!n?.has(e)&&a++;return r===a}function u(e){return c(e).sort()}function d(e){for(let t of Object.keys(e))if(e[t]!==void 0)return!1;return!0}function f(e){return typeof e!=`object`||!e?e:r(e)?e.map(f):p(e)}function p(e){let t=a();for(let n of u(e))o(t,n,f(e[n]));return t}function m(e){return JSON.stringify(f(e))}var h=class{seed;h1=0;h2=0;constructor(e=0){this.seed=e,this.reset()}reset(){return this.h1=3735928559^this.seed,this.h2=1103547991^this.seed,this}code(e){return this.h1=Math.imul(this.h1^e,2654435761),this.h2=Math.imul(this.h2^e,1597334677),this}update(e){let t=this.h1,n=this.h2;for(let r=0;r<e.length;r++){let i=e.charCodeAt(r);t=Math.imul(t^i,2654435761),n=Math.imul(n^i,1597334677)}return this.h1=t,this.h2=n,this}string(e){return this.code(e.length&65535).code(e.length>>>16).update(e)}value(e){if(e===void 0)return this.code(117);if(e===null)return this.code(110);switch(typeof e){case`boolean`:return this.code(e?116:102);case`number`:return this.code(100).string(String(e));case`string`:return this.code(115).string(e)}if(r(e)){this.code(97).code(e.length&65535).code(e.length>>>16);for(let t of e)this.value(t);return this}let t=Object.keys(e);if(t.length===0)return this.code(111).code(0).code(0);let n=t.length===1&&e[t[0]]!==void 0?t:u(e);this.code(111).code(n.length&65535).code(n.length>>>16);for(let t of n)this.string(t).value(e[t]);return this}digestPair(){let e=this.h1,t=this.h2;return e=Math.imul(e^e>>>16,2246822507),e^=Math.imul(t^t>>>13,3266489909),t=Math.imul(t^t>>>16,2246822507),t^=Math.imul(e^e>>>13,3266489909),[e>>>0,t>>>0]}digest(){let[e,t]=this.digestPair();return 4294967296*(2097151&t)+e}},g=class extends Error{code;details;name=`KgdiffError`;constructor(e,t,n){super(t),this.code=e,this.details=n}};function _(e,t){return e<t?-1:+(e>t)}function v(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 y(e,t,n){let r=e.get(t);return r===void 0&&(r=n(),e.set(t,r)),r}function b(e,t,n){let r=e.get(t);r?r.push(n):e.set(t,[n])}var x=Object.freeze([]);function S(e,t){return t===void 0?0:(e.outgoing.get(t)?.length??0)+(e.incoming.get(t)?.length??0)}function C(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var ee=/^[\x20-\x7e]*$/;function w(e){return ee.test(e)?e:e.normalize(`NFC`)}var te=/^\d+$/;function ne(e){if(!e.includes(`%`))return e;try{return decodeURIComponent(e)}catch{return e}}function re(e){let t=ie.get(e);return t===void 0&&(ie.size>=ae&&ie.clear(),t=se(e),ie.set(e,t)),t}var ie=new Map,ae=4096,oe=/^https?:\/\/purl\.obolibrary\.org\/obo\/([A-Za-z][A-Za-z0-9]*)_(\d+)$/;function se(e){let t=oe.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===``||te.test(a))return w(e);let o=ne(a).replaceAll(`_`,` `).replace(/\s+/g,` `).trim();return w(o===``?e:o)}var ce=new WeakMap;function le(e,t){e.code(78).string(t.id).string(t.label),e.code(t.types.length);for(let n of t.types)e.string(n);e.code(t.aliases.length);for(let n of t.aliases)e.string(n);e.value(t.attrs).code(+!!t.deprecated),e.code(t.replaces.length);for(let n of t.replaces)e.string(n);e.code(t.replacedBy.length);for(let n of t.replacedBy)e.string(n)}function ue(e,t,n){e.code(69),n&&t.id!==void 0?e.code(1).string(t.id):e.code(0),e.string(t.source).string(t.predicate).string(t.target).string(t.label),e.value(t.attrs)}function de(e){let t=ce.get(e);if(t)return t;let n=new h,r=0,i=0;for(let t of e.nodes.values()){le(n.reset(),t);let[e,a]=n.digestPair();r=r+e>>>0,i=i+a>>>0}let a=e.edgeIdentity===`id`,o=0,s=0;for(let t of e.edges.values()){ue(n.reset(),t,a);let[e,r]=n.digestPair();o=o+e>>>0,s=s+r>>>0}let c=`c53:${new h().update(`kgdiff.graph.v1|${e.nodes.size}|${r}|${i}|${e.edges.size}|${o}|${s}`).digest().toString(16).padStart(14,`0`)}`;return ce.set(e,c),c}var fe=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`]),pe=Object.freeze({strategy:`auto`,threshold:.82,suggestThreshold:.6,maxCandidates:8}),me=new Set([`id`,`auto`,`similarity`]),he=new Set([`structure`,`id`]);function ge(e,t){throw new g(`invalid-input`,e,{option:t})}function _e(e,t,n){return e===void 0?t:(typeof e==`number`&&e>=0&&e<=1||ge(`${n} must be a number between 0 and 1 (got ${String(e)})`,n),e)}function ve(e,t,n){return e===void 0?[...t]:((!Array.isArray(e)||e.some(e=>typeof e!=`string`))&&ge(`${n} must be an array of strings`,n),[...new Set(e)])}function ye(e){if(e===void 0)return pe;typeof e==`object`&&e||ge(`match options must be an object`,`match`);let t=e.strategy??pe.strategy;me.has(t)||ge(`match.strategy must be 'id', 'auto' or 'similarity' (got ${String(t)})`,`match.strategy`);let n=e.maxCandidates??pe.maxCandidates;return(!Number.isInteger(n)||n<1)&&ge(`match.maxCandidates must be a positive integer (got ${String(n)})`,`match.maxCandidates`),{strategy:t,threshold:_e(e.threshold,pe.threshold,`match.threshold`),suggestThreshold:_e(e.suggestThreshold,pe.suggestThreshold,`match.suggestThreshold`),maxCandidates:n}}function be(e,t=`structure`){return e===void 0?t:(typeof e==`string`&&he.has(e)||ge(`edgeIdentity must be 'structure' or 'id' (got ${String(e)})`,`edgeIdentity`),e)}function xe(e){e===void 0||typeof e==`object`&&e||ge(`options must be an object`,`options`);let t=e??{};for(let e of[`detectMerges`,`detectSplits`])t[e]!==void 0&&typeof t[e]!=`boolean`&&ge(`${e} must be a boolean`,e);return{match:ye(t.match),edgeIdentity:be(t.edgeIdentity),hierarchyPredicates:ve(t.hierarchyPredicates,fe,`hierarchyPredicates`),detectMerges:t.detectMerges??!0,detectSplits:t.detectSplits??!0,ignoreAttrs:ve(t.ignoreAttrs,[],`ignoreAttrs`).sort()}}var Se=Object.freeze({}),Ce=new Set([`create`,`drop`,`error`]);function we(e,t){throw new g(`invalid-input`,e,t)}function Te(e){let{format:t,version:n}=e;if(typeof t==`string`&&t.startsWith(`kgdiff.`)){if(t!==`kgdiff.graph`)throw new g(`unsupported-version`,`Expected a kgdiff graph (format "kgdiff.graph"), got format "${t}"`,{format:t});if(n!==1)throw new g(`unsupported-version`,`Unsupported graph version ${String(n)}; this reader supports version 1`,{version:n})}}function Ee(e){if(typeof e==`string`)return e===``?void 0:e;if(typeof e==`number`&&Number.isFinite(e))return String(e)}function De(e,t){return t===void 0?{what:`Node "${e}"`,ref:e}:{what:`Edge ${e} → ${t}`,ref:`${e} → ${t}`}}function Oe(e,t,n,r){let{what:i,ref:a}=De(e,t);return we(`${i}: ${n} must be ${r}`,{ref:a})}function ke(e,t,n,r){if(e!=null)return typeof e!=`string`&&Oe(t,n,r,`a string`),e}function Ae(e,t,n){return e==null?x:typeof e==`string`?[e]:((!Array.isArray(e)||e.some(e=>typeof e!=`string`))&&Oe(t,void 0,n,`an array of strings`),e)}var je=1e3;function Me(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>=je)throw new g(`invalid-input`,`Attribute values may be nested at most ${je} 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=>Me(e,t+1,n)??null);let r=e.toJSON;if(typeof r==`function`)return Me(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:Me(a,t+1,n);s!==void 0&&o(i,r,s)}return i}function Ne(e,t,n,r){if(e==null)return;C(e)||Oe(t,n,`attrs`,`an object`);let i=0,a=Me(e,0,()=>i++);if(i>0){let{what:e,ref:a}=De(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 Pe(e){if(!C(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 Fe(e,t,n){let r=Ae(e.type,t,`type`),i=Ae(e.types,t,`types`),a=Ae(e.aliases,t,`aliases`),o=i.length?[...r,...i]:r,s={id:t,types:o.length?o.map(w):x,aliases:a.length?a.map(w):x,replaces:Ae(e.replaces,t,`replaces`),replacedBy:Ae(e.replacedBy,t,`replacedBy`),implicit:e.implicit===!0},c=ke(e.label,t,void 0,`label`);c&&(s.label=w(c));let l=Ne(e.attrs,t,void 0,n);l&&(s.attrs=l),e.deprecated!==void 0&&e.deprecated!==null&&(typeof e.deprecated!=`boolean`&&Oe(t,void 0,`deprecated`,`a boolean`),s.deprecated=e.deprecated);let u=Pe(e.position);return u&&(s.position=u),s}function Ie(e,t){return e===void 0?t:t===void 0?e:m(t)>m(e)?t:e}function Le(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=Ie(s(e,r),s(t,r));i!==void 0&&o(n,r,i)}return n}function Re(e,t){let n=Ie(e.label,t.label);n!==void 0&&(e.label=n);let r=Ie(e.deprecated,t.deprecated);r!==void 0&&(e.deprecated=r);let i=Ie(e.position,t.position);i&&(e.position=i);let a=Le(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 ze(e){let t=e.label??e.id,n=v(e.aliases),r=n.indexOf(t);r>=0&&n.splice(r,1);let i={id:e.id,label:t,types:e.types.length?v(e.types):x,aliases:n.length?n:x,attrs:e.attrs??Se,deprecated:e.deprecated??!1,replaces:e.replaces.length?v(e.replaces):x,replacedBy:e.replacedBy.length?v(e.replacedBy):x,implicit:e.implicit};return e.position&&(i.position=e.position),i}function Be(e){return m([e.label,e.attrs])}function Ve(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 He(e){return typeof e==`object`&&!!e&&e.nodes instanceof Map&&e.edges instanceof Map}function Ue(e,n={}){C(e)&&Te(e),C(e)&&Array.isArray(e.nodes)||we(`normalize expects a graph of the form { nodes: [...], edges: [...] }`),e.edges!==void 0&&e.edges!==null&&!Array.isArray(e.edges)&&we(`graph.edges must be an array`);let r=be(n.edgeIdentity),i=n.danglingEdges??`create`;Ce.has(i)||we(`danglingEdges must be 'create', 'drop' or 'error' (got ${String(i)})`);let a=[],o=new Map;for(let t of e.nodes){C(t)||we(`graph.nodes must contain objects`);let e=Ee(t.id);if(e===void 0){a.push({code:`empty-id`,message:`Dropped a node without an id`});continue}let n=Fe(t,e,a),r=o.get(e);r?(Re(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??[]){C(t)||we(`graph.edges must contain objects`);let e=t,n=Ee(e.source),r=Ee(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=ke(e.predicate,n,r,`predicate`)??``,u=ke(e.label,n,r,`label`),d=u===void 0?void 0:w(u);if(d===void 0&&(d=s.get(l),d===void 0&&(d=re(l),s.set(l,d))),(!o.has(n)||!o.has(r))&&(Je(n,l,r,i,o,a),i===`drop`))continue;let f=Ee(e.id),p=Ne(e.attrs,n,r,a)??Se;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,ze(t));let u=[],d=new Map,f=new Map;for(let e of c){let n=r===`id`&&e.id!==void 0,i=n?e.id:t(e.source,e.predicate,e.target),a=n?d:f,o=a.get(i);if(o)o.more?o.more.push(e):o.more=[e];else{let t={base:i,idKeyed:n,first:e};a.set(i,t),u.push(t)}}let p=r===`id`?new Set:void 0,m=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=m(n),t.edge=r;continue}let o=[],s=(e,t)=>{o.push(Ve(m(e),t))};e?(s(n,Ye([r,...i])),a.push({code:`duplicate-edge`,message:`Edge id "${n}" is used ${i.length+1} times; the declarations were merged`,ref:n})):Xe(n,[r,...i],s,a),t.edges=o}let h=new Map;for(let e of u)if(e.edge)h.set(e.edge.key,e.edge);else for(let t of e.edges??[])h.set(t.key,t);return a.sort((e,t)=>_(e.code,t.code)||_(e.ref??``,t.ref??``)||_(e.message,t.message)),Ge(e.meta,l,h,r,a)}function We(e,t){let n=new Map,r=new Map;for(let i of e.values()){if(t&&!(t.has(i.source)&&t.has(i.target)))return;b(n,i.source,i.key),b(r,i.target,i.key)}return{outgoing:n,incoming:r}}function Ge(e,t,n,r,i,{outgoing:a,incoming:o}=We(n)){for(let e of t.keys())a.has(e)||a.set(e,x),o.has(e)||o.set(e,x);return{meta:C(e)?{...e}:{},nodes:t,edges:n,outgoing:a,incoming:o,edgeIdentity:r,issues:i}}function Ke(e,t,n=e.id){let r=Ee(n);return r===void 0?void 0:ze(Fe(e,r,t))}function qe(e,n,r,i){let a=Ee(e.source),o=Ee(e.target);if(a===void 0||o===void 0)return;let s=ke(e.predicate,a,o,`predicate`)??``,c=ke(e.label,a,o,`label`),l=c===void 0?re(s):w(c),u=Ee(e.id),d=Ne(e.attrs,a,o,r)??Se,f=i??(n===`id`&&u!==void 0?u:t(a,s,o));return u===void 0?{key:f,source:a,target:o,predicate:s,label:l,attrs:d}:{key:f,id:u,source:a,target:o,predicate:s,label:l,attrs:d}}function Je(e,n,r,i,a,o){for(let s of e===r?[e]:[e,r])if(!a.has(s)){if(i===`error`)throw new g(`dangling-edge`,`Edge ${t(e,n,r)} points to the missing node "${s}"`,{source:e,predicate:n,target:r,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 Ye(e){let t=e=>m([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=Le(r,a.attrs)}return{...n,attrs:r??Se}}function Xe(e,t,n,r){let i=new Map,a=0;for(let e of t){let t=Be(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)=>_(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})}var Ze=[`label`,`types`,`aliases`,`deprecated`,`replaces`,`replacedBy`];function Qe(e){if(!C(e)||e.format!==`kgdiff.delta`)throw new g(`unsupported-version`,`Not a kgdiff delta (expected format "kgdiff.delta")`,{format:C(e)?e.format:void 0});if(e.version!==1)throw new g(`unsupported-version`,`Unsupported delta version ${String(e.version)}; this reader supports version 1`,{version:e.version});if(be(e.edgeIdentity),!C(e.base)||typeof e.base.hash!=`string`)throw new g(`invalid-input`,`delta.base must describe the base graph (with a hash)`);if(!Array.isArray(e.ops))throw new g(`invalid-input`,`delta.ops must be an array`);e.ops.forEach(rt)}var T=e=>typeof e==`string`,$e=e=>Array.isArray(e)&&e.every(T),E=(e,t)=>e===void 0||t(e);function et(e){return C(e)&&T(e.id)&&E(e.label,T)&&E(e.types,$e)&&E(e.aliases,$e)&&E(e.attrs,C)&&E(e.deprecated,e=>typeof e==`boolean`)&&E(e.replaces,$e)&&E(e.replacedBy,$e)}function tt(e){return C(e)&&T(e.source)&&T(e.target)&&E(e.id,T)&&E(e.predicate,T)&&E(e.label,T)&&E(e.attrs,C)}function nt(e,t){return e===`label`?T(t):e===`deprecated`?typeof t==`boolean`:Ze.includes(e)&&$e(t)}function rt(e,t){let n=n=>{throw new g(`invalid-input`,`delta.ops[${t}] ${n}`,{opIndex:t,op:e})};C(e)||n(`is not an op`);let r=e;switch(r.op){case`node.rekey`:T(r.from)&&T(r.to)||n(`needs string "from" and "to"`);return;case`node.remove`:case`node.add`:et(r.node)||n(`needs a valid "node" snapshot`);return;case`node.set`:T(r.id)||n(`needs a string "id"`),nt(r.field,r.from)&&nt(r.field,r.to)||n(`has values that do not fit the field ${JSON.stringify(r.field)}`);return;case`node.attr`:T(r.id)&&T(r.key)||n(`needs a string "id" and "key"`);return;case`edge.remove`:case`edge.add`:tt(r.edge)||n(`needs a valid "edge" snapshot`);return;case`edge.set`:tt(r.edge)&&r.field===`label`&&T(r.from)&&T(r.to)||n(`needs an "edge", field "label" and string "from" / "to"`);return;case`edge.attr`:tt(r.edge)&&T(r.key)||n(`needs an "edge" and a string "key"`);return;default:n(`has an unknown op ${JSON.stringify(r.op)}`)}}function it(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 at=[`rekey`,`rename`,`mergedInto`,`mergeTarget`,`splitFrom`,`splitInto`,`move`,`deprecate`,`replacement`,`types`,`aliases`,`attrs`,`retarget`,`predicate`,`label`,`collapsed`],ot=Object.freeze([]);function st(e){let t;return()=>(t??=e(),t)}function ct(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 lt(e,t,n){let r=st(()=>ct(e,e=>e.id)),i=st(()=>ct(e,e=>e.beforeId)),a=st(()=>ct(e,e=>e.afterId)),o=st(()=>ct(t,e=>e.id)),s=st(()=>ct(n,e=>e.id)),c=st(()=>{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)??ot}}function ut(e,t){let n=new Set,r=e=>{let t={added:0,removed:0,modified:0};for(let r of e){r.status!==`unchanged`&&t[r.status]++;for(let e of r.facets)n.add(e.kind)}return t};return{nodes:r(e),edges:r(t),facets:at.filter(e=>n.has(e))}}var dt=[`add`,`remove`,`merge`,`split`,`modify`,`relations`],ft=()=>({added:0,removed:0,modified:0,unchanged:0});function pt(e,t,n,r,i){let a=ft(),o=ft(),s=Object.fromEntries(at.map(e=>[e,0])),c=new Map,l=e=>{if(e.length!==0)for(let t of new Set(e.map(e=>e.kind)))s[t]++};for(let e of n){a[e.status]++,l(e.facets);let t=(e.after??e.before)?.types[0]??``;y(c,t,ft)[e.status]++}for(let e of r)o[e.status]++,l(e.facets);let u=Object.fromEntries(dt.map(e=>[e,0]));for(let e of i)u[e.kind]++;let d=e=>e.added+e.removed+e.modified,f=[...c].map(([e,t])=>({type:e,...t})).sort((e,t)=>d(t)-d(e)||_(e.type,t.type));return{nodes:a,edges:o,before:{nodes:e.nodes.size,edges:e.edges.size},after:{nodes:t.nodes.size,edges:t.edges.size},facets:s,hunks:u,byType:f,identical:d(a)+d(o)===0}}var mt={added:`only an after version`,removed:`only a before version`,unchanged:`both versions`,modified:`both versions`};function ht(e,t,n=``){throw new g(`invalid-input`,`${e} is ${t}, so it must have ${mt[t]}${n}`)}function gt(e,t,n){let{id:r,status:i,facets:a,beforeId:o,afterId:s,before:c,after:l}=e,u=`Union node "${r}"`,d=` (beforeId and before, afterId and after)`,f={before:S(t,o),after:S(n,s)},p;return i===`added`?((!l||s===void 0||c||o!==void 0)&&ht(u,i,d),p={id:r,status:i,facets:a,label:l.label,types:l.types,degree:f,afterId:s,after:l}):i===`removed`?((!c||o===void 0||l||s!==void 0)&&ht(u,i,d),p={id:r,status:i,facets:a,label:c.label,types:c.types,degree:f,beforeId:o,before:c}):(l&&c&&s!==void 0&&o!==void 0||ht(u,i,d),p={id:r,status:i,facets:a,label:l.label,types:l.types,degree:f,beforeId:o,afterId:s,before:c,after:l}),e.hunk!==void 0&&(p.hunk=e.hunk),p}function _t(e){let{id:t,source:n,target:r,predicate:i,label:a,status:o,facets:s,hierarchical:c}=e,{before:l,after:u,beforeKey:d,afterKey:f}=e,p=`Union edge ${t}`,m=e.sourceBefore!==void 0||e.targetBefore!==void 0||e.predicateBefore!==void 0,h;if(o===`added`)(!u||f===void 0||l||d!==void 0)&&ht(p,o),m&&ht(p,o,` and no before-version endpoints or predicate`),h={id:t,source:n,target:r,predicate:i,label:a,status:o,facets:s,hierarchical:c,afterKey:f,after:u};else if(o===`removed`)(!l||d===void 0||u||f!==void 0)&&ht(p,o),m&&ht(p,o,` and no before-version endpoints or predicate`),h={id:t,source:n,target:r,predicate:i,label:a,status:o,facets:s,hierarchical:c,beforeKey:d,before:l};else{u&&l&&f!==void 0&&d!==void 0||ht(p,o);let m={id:t,source:n,target:r,predicate:i,label:a,status:o,facets:s,hierarchical:c,beforeKey:d,afterKey:f,before:l,after:u};e.sourceBefore!==void 0&&(m.sourceBefore=e.sourceBefore),e.targetBefore!==void 0&&(m.targetBefore=e.targetBefore),e.predicateBefore!==void 0&&(m.predicateBefore=e.predicateBefore),h=m}return e.hunk!==void 0&&(h.hunk=e.hunk),h}function D(e){return String(Math.trunc(e)).replace(/\B(?=(\d{3})+(?!\d))/g,`,`)}function vt(e){return`${Math.round(e*100)}%`}var yt={node:[`node`,`nodes`],relation:[`relation`,`relations`],attribute:[`attribute`,`attributes`],type:[`type`,`types`],synonym:[`synonym`,`synonyms`],duplicate:[`duplicate`,`duplicates`]},bt={node:[`个`,`节点`],relation:[`条`,`关系`],attribute:[`个`,`属性`],type:[`个`,`类型`],synonym:[`个`,`别名`],duplicate:[`条`,`重复关系`]};function xt(e,t,n){let r=[];return e&&r.push(`+${D(e)}`),t&&r.push(`−${D(t)}`),n&&r.push(`~${D(n)}`),r.join(` `)}var St=(()=>{let e=e=>{let[t,n]=e.split(Et);return n===void 0?`“${e}”`:`“${t}” (${n})`},t=(e,t)=>`${D(e)} ${yt[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 ${D(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=`${D(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?`${xt(t,n,r)} ${yt[e][i===1?0:1]}`:``},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=>`${D(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:` · `}})(),Ct={en:St,"zh-CN":(()=>{let e=e=>{let[t,n]=e.split(Et);return n===void 0?`「${e}」`:`「${t}」(${n})`},t=(e,t)=>`${D(e)} ${bt[t][0]}${bt[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]}等 ${D(n)} 个节点`},r=n=>(r,i,a)=>{let o=e(r[0]??``),s=i<=1?o:i===2?`${o}和${e(r[1]??``)}`:`${o}等 ${D(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?`${bt[e][1]} ${xt(t,n,r)}`:``,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=>`${D(e)} 条关系改为指向新节点`,relationRetargeted:`关系改为指向新节点`,relationResourced:`关系改为来自新节点`,relationTypeChanged:`关系类型变更`,newRelation:`新关系`,relationRemoved:`关系已删除`,relabeled:(t,n)=>`标签${e(t)}→${e(n)}`,hierarchy:`层级关系`},separator:` · `}})()};function wt(e){return Ct[e??`en`]??St}var Tt=40,Et=`\0`;function Dt(e){let t=new Map;for(let n of e)y(t,n.name,()=>new Set).add(n.id);return e.map(e=>(t.get(e.name)?.size??0)>1?`${e.name}${Et}${e.id}`:e.name)}function Ot(e){let t=Array.from(e);return t.length>Tt?`${t.slice(0,39).join(``)}…`:e}function kt(e,t){return Ot(e.index.node(t)?.label??t)}function At(e){return Ot(e.before?.label??e.label)}function jt(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`?kt(e,r.id):At(r):t}function Mt(e,t){return e.names(t,t.length)}function O(e,t){return e.facets.find(e=>e.kind===t)}function Nt(e,t){return e.facets.find(e=>e.kind===t)}function Pt(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 Ft(e){return[e.filter(e=>e.status===`added`).length,e.filter(e=>e.status===`removed`).length,e.filter(e=>e.status===`modified`).length]}function k(e,t){return t.filter(e=>!!e).join(e.separator)}function It(e,t){let n=[],r=O(t,`attrs`);r&&n.push(e.delta(`attribute`,...Pt(r.changes)));let i=O(t,`types`);i&&n.push(e.delta(`type`,i.added.length,i.removed.length,0));let a=O(t,`aliases`);return a&&n.push(e.delta(`synonym`,a.added.length,a.removed.length,0)),n}function Lt(e,t,n){let r=O(n,`replacement`);if(!r)return[];let i=(n,r)=>Mt(e,n.map(e=>jt(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 Rt(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(vt(n)):e.note.confidence(vt(n))}function zt(e,t,n){let r=t.filter(e=>e.facets.some(e=>e.kind===`retarget`&&e.cause===n)),i=t.filter(e=>Nt(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`,...Ft(a))]}function Bt({p:e,diff:t,hunk:n,edges:r,anchor:i}){let a=((i?O(i,`mergeTarget`):void 0)?.sources??[]).map(e=>t.index.node(e)).filter(e=>e!==void 0),o=a.map(e=>O(e,`mergedInto`)).filter(e=>e!==void 0),s=Dt([{id:n.anchor,name:kt(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:k(e,[o.length?Rt(e,o):``,...zt(e,r,`merge`),a.some(e=>e.status!==`removed`)?e.note.keptDeprecated:``,...i?It(e,i):[]])}}function Vt({p:e,diff:t,hunk:n,edges:r,anchor:i}){let a=i?O(i,`splitInto`)?.targets??[]:[],o=a.map(e=>t.index.node(e)).filter(e=>e!==void 0).map(e=>O(e,`splitFrom`)).filter(e=>e!==void 0),s=Dt([{id:n.anchor,name:At(i??t.index.node(n.anchor))},...a.map(e=>({id:e,name:kt(t,e)}))]),c=e.title.split(e.quote(s[0]),e.names(s.slice(1),a.length)),l=i?.after;return{title:c,subtitle:k(e,[o.length?Rt(e,o):``,...zt(e,r,`split`),l?l.deprecated?e.note.sourceKeptDeprecated:e.note.sourceKept:``])}}function Ht({p:e,diff:t,hunk:n,nodes:r,anchor:i},a){let o=[n.anchor,...n.nodes.filter(e=>e!==n.anchor)].map(e=>kt(t,e)),s=(a?e.title.added:e.title.removed)(o,r.length,n.edges.length),c=n.context.map(e=>kt(t,e)),l=i?.types??[];return{title:s,subtitle:k(e,[l.length?e.note.typed(l.join(`, `)):``,c.length?(a?e.note.linkedTo:e.note.wasLinkedTo)(Mt(e,c)):e.note.standalone])}}function Ut({p:e,diff:t,edges:n,anchor:r}){let i=r,a=kt(t,i.id),o=O(i,`rename`),s=i.facets.filter(e=>e.kind===`move`),c=[...new Set(s.flatMap(e=>e.to))].map(e=>kt(t,e)),l=[...new Set(s.flatMap(e=>e.from))].map(e=>kt(t,e)),u=O(i,`deprecate`),d=O(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(Ot(o.from),Ot(o.to)),g=`rename`;else if(s.length)h=c.length?e.title.moved(a,Mt(e,c)):e.title.detached(a,Mt(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(vt(d.score)))),_.push(...It(e,i)),s.length&&(g===`move`?c.length&&l.length&&_.push(e.note.movedFrom(Mt(e,l))):_.push(c.length?e.note.movedUnder(Mt(e,c)):e.note.detachedFrom(Mt(e,l)))),u&&g!==`deprecate`&&_.push(u.deprecated?e.note.deprecated:e.note.restored),_.push(...Lt(e,t,i)),_.push(e.delta(`relation`,...Ft(p))),{title:h,subtitle:k(e,_)}}function Wt({p:e,diff:t,hunk:n,edges:r}){let i=kt(t,n.anchor),a=r.length===1?r[0]:void 0;if(!a){let[t,n,a]=Ft(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=>Nt(e,`retarget`)).length;return{title:s,subtitle:k(e,[e.delta(`relation`,t,n,a),c?e.note.retargeted(c):``])}}let o=Ot(a.label),s=a.facets.filter(e=>e.kind===`retarget`),c=s.length===1?s[0]:void 0,[l=``,u=``,d=``,f=``]=Dt([a.source,a.target,...c?[c.from,c.to]:[]].map(e=>({id:e,name:kt(t,e)}))),p=Nt(a,`predicate`),m=Nt(a,`label`),h=Nt(a,`attrs`),g=[m?e.note.relabeled(Ot(m.from),Ot(m.to)):``,h?e.delta(`attribute`,...Pt(h.changes)):``,a.hierarchical?e.note.hierarchy:``];if(c&&!p)return c.end===`target`?{title:e.title.pointsTo(l,o,f,d),subtitle:k(e,[e.note.relationRetargeted,...g])}:{title:e.title.comesFrom(u,o,f,d),subtitle:k(e,[e.note.relationResourced,...g])};if(p&&s.length===0){let t=Ot(a.before?.label??p.from);return{title:e.title.predicate(l,u,t,o),subtitle:k(e,[e.note.relationTypeChanged,...g])}}return a.status===`added`?{title:e.title.edgeAdded(l,o,u),subtitle:k(e,[e.note.newRelation,...g])}:a.status===`removed`?{title:e.title.edgeRemoved(l,o,u),subtitle:k(e,[e.note.relationRemoved,...g])}:{title:e.title.edgeEdited(l,o,u),subtitle:k(e,g)}}function Gt(e,t,n){let r=wt(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 g(`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 Bt(o);case`split`:return Vt(o);case`add`:return Ht(o,!0);case`remove`:return Ht(o,!1);case`modify`:return o.anchor?Ut(o):Wt(o);case`relations`:return Wt(o);default:{let t=e.kind;throw new g(`invalid-input`,`Unknown hunk kind "${String(t)}"`)}}}var Kt=e=>new Set(Object.keys(e)),qt=Kt({rekey:!0,rename:!0,mergedInto:!0,mergeTarget:!0,splitFrom:!0,splitInto:!0,move:!0,deprecate:!0,replacement:!0,types:!0,aliases:!0,attrs:!0}),Jt=Kt({retarget:!0,predicate:!0,label:!0,attrs:!0,collapsed:!0}),Yt=Kt({add:!0,remove:!0,merge:!0,split:!0,modify:!0,relations:!0}),Xt=Kt({remove:!0,restructure:!0,modify:!0,add:!0});function A(e){throw new g(`invalid-input`,e)}var Zt=e=>Array.isArray(e)&&e.every(e=>typeof e==`string`);function Qt(e,t){let n=new Map;for(let r of e)n.has(r.id)&&A(`The ${t} id "${r.id}" is used more than once`),n.set(r.id,r);return n}function $t(e,t){C(e)&&typeof e.id==`string`&&Yt.has(e.kind)&&Xt.has(e.phase)&&typeof e.anchor==`string`&&Zt(e.nodes)&&Zt(e.edges)&&Zt(e.context)&&Zt(e.requires)&&Array.isArray(e.ops)&&C(e.summary)||A(`diff.hunks[${t}] needs a string id and anchor, a known kind and phase, nodes / edges / context / requires lists of ids, ops and a summary`)}function en(e,t,n,r,i,a){(!Array.isArray(n)||n.some(e=>!C(e)||!r.has(e.kind)))&&A(`${e}: facets must be a list of known facets`),t===`unchanged`?(n.length>0&&A(`${e} is unchanged but has facets`),i!==void 0&&A(`${e} is unchanged but belongs to a hunk`)):(t===`modified`&&n.length===0&&A(`${e} is modified but has no facets`),i===void 0&&A(`${e} is ${t} but belongs to no hunk`),typeof i==`string`&&a.has(i)||A(`${e} belongs to the hunk ${JSON.stringify(i)}, which the diff does not have`))}function tn(e,t,n){let r=`Union edge ${e.id}`;for(let n of[e.source,e.target,e.sourceBefore,e.targetBefore])n!==void 0&&!t.has(n)&&A(`${r} points to "${n}", which is not a union node`);e.after&&(e.after.source!==e.source||e.after.target!==e.target)&&A(`${r}: source and target must be the endpoints of its after version`);let i=(t,n)=>e.facets.some(e=>e.kind===t&&(n===void 0||e.end===n));if(e.sourceBefore===void 0||e.sourceBefore!==e.source&&i(`retarget`,`source`)||A(`${r}: sourceBefore needs another source and a source retarget facet`),e.targetBefore===void 0||e.targetBefore!==e.target&&i(`retarget`,`target`)||A(`${r}: targetBefore needs another target and a target retarget facet`),e.predicateBefore===void 0||e.predicateBefore!==e.predicate&&i(`predicate`)||A(`${r}: predicateBefore needs another predicate and a predicate facet`),e.before){let t=n.get(e.before.source),i=n.get(e.before.target);(t!==(e.sourceBefore??e.source)||i!==(e.targetBefore??e.target))&&A(`${r}: its before version's endpoints must be sourceBefore ?? source, targetBefore ?? target`),(e.predicateBefore??e.predicate)!==e.before.predicate&&A(`${r}: its before version's predicate must be predicateBefore ?? predicate`)}}function nn(e,t,n,r){let i=new Set,a=new Set,o=new Uint8Array(e.delta.ops.length);e.hunks.forEach((e,s)=>{let c=`Hunk "${e.id}"`;e.order!==s&&A(`${c} has order ${String(e.order)} but is listed at ${s}`),t.has(e.anchor)||A(`${c} is anchored on "${e.anchor}", which is not a union node`);let l=e.nodes.map(n=>{let r=t.get(n);return(!r||r.hunk!==e.id||i.has(n))&&A(`${c} lists the node "${n}", which is not one of its own`),i.add(n),r}),u=e.edges.map(t=>{let r=n.get(t);return(!r||r.hunk!==e.id||a.has(t))&&A(`${c} lists the edge ${t}, which is not one of its own`),a.add(t),r});for(let n of e.context)t.has(n)||A(`${c} has "${n}" as context, which is not a union node`);let d=-1;for(let t of e.ops)(typeof t!=`number`||!Number.isInteger(t)||t<=d||t>=o.length)&&A(`${c}: ops must be ascending indices into delta.ops`),o[t]&&A(`delta.ops[${t}] belongs to more than one hunk`),o[t]=1,d=t;for(let t of e.requires)t!==e.id&&r.has(t)||A(`${c} requires "${t}", which is not another hunk`);m(ut(l,u))!==m(e.summary)&&A(`${c}: its summary does not match its nodes and edges`)});let s=e=>e.reduce((e,t)=>e+(t.hunk===void 0?0:1),0);i.size!==s(e.nodes)&&A(`A union node names a hunk that does not list it`),a.size!==s(e.edges)&&A(`A union edge names a hunk that does not list it`)}function rn(e){Qe(e.delta),e.delta.edgeIdentity!==e.options.edgeIdentity&&A(`The delta uses another edge identity than the diff`);let t=(e,t,n)=>{let r=n===`base`?`before`:`after`;(e.nodes!==t.nodes.size||e.edges!==t.edges.size)&&A(`delta.${n} counts other nodes / edges than the ${r} graph of the diff`),e.hash!==de(t)&&A(`delta.${n} is another graph (hash ${e.hash}) than the ${r} graph of the diff`)};t(e.delta.base,e.before,`base`),t(e.delta.target,e.after,`target`)}function an(e){let t=Qt(e.nodes,`union node`),n=Qt(e.edges,`union edge`);e.hunks.forEach((e,t)=>{$t(e,t)});let r=Qt(e.hunks,`hunk`),i=new Map;for(let t of e.nodes)en(`Union node "${t.id}"`,t.status,t.facets,qt,t.hunk,r),t.beforeId!==void 0&&i.set(t.beforeId,t.id);for(let n of e.edges)en(`Union edge ${n.id}`,n.status,n.facets,Jt,n.hunk,r),tn(n,t,i);nn(e,t,n,r),rn(e),m(pt(e.before,e.after,e.nodes,e.edges,e.hunks))!==m(e.stats)&&A(`diff.stats do not match the union elements and hunks`)}function j(e){throw new g(`invalid-input`,e)}var on=new Set([`unchanged`,`added`,`removed`,`modified`]);function sn(e){let t=e,n=t.meta;C(n)&&C(n.before)&&C(n.after)||j(`A kgdiff diff needs meta.before and meta.after objects`),C(t.options)||j(`A kgdiff diff needs an options object`);for(let e of[`nodes`,`edges`,`hunks`])Array.isArray(t[e])||j(`A kgdiff diff needs a ${e} array`);for(let e of[`matches`,`suggestions`])t[e]!==void 0&&!Array.isArray(t[e])&&j(`diff.${e} must be an array`);C(t.delta)||j(`A kgdiff diff needs a delta`),C(t.stats)||j(`A kgdiff diff needs stats`);let r=e=>e.status===`added`&&e.before!==void 0?`before`:e.status===`removed`&&e.after!==void 0?`after`:void 0;e.nodes.forEach((e,t)=>{C(e)&&typeof e.id==`string`&&on.has(e.status)||j(`diff.nodes[${t}] needs a string id and a valid status`);let n=r(e);n&&j(`diff.nodes[${t}] ("${e.id}") is ${e.status}, so it has no ${n} snapshot`)}),e.edges.forEach((e,t)=>{C(e)&&typeof e.id==`string`&&typeof e.source==`string`&&typeof e.target==`string`&&on.has(e.status)||j(`diff.edges[${t}] needs string id / source / target and a valid status`);let n=r(e);n&&j(`diff.edges[${t}] (${e.id}) is ${e.status}, so it has no ${n} snapshot`)})}function cn(e){return{...e}}function ln(e,n){if(n===`id`&&e.id!==void 0)return`i${e.id}`;let r=e.predicate??``,i=e.label??re(r);return`t${t(e.source,r,e.target)}\u0000${m([i,e.attrs??{}])}`}function un(e,t,n){if(n===`id`&&(e.id!==void 0||t.id!==void 0))return e.id===t.id;let r=t.predicate??``;return e.source===t.source&&e.target===t.target&&e.predicate===r&&e.label===(t.label??re(r))&&(t.attrs===void 0||t.attrs===null?d(e.attrs):l(e.attrs,t.attrs))}function dn(e){let n=e.edgeIdentity,r;return i=>{let a=n===`id`&&i.id!==void 0?i.id:t(i.source,i.predicate??``,i.target),o=e.edges.get(a);if(o&&un(o,i,n))return o;if(!r){r=new Map;for(let t of e.edges.values())r.set(ln(t,n),t)}return r.get(ln(i,n))}}var fn=e=>e!==`added`,pn=e=>e!==`removed`;function mn(e,t){let n=[];for(let t of e.nodes)pn(t.status)&&(t.after||j(`Union node "${t.id}" (${t.status}) has no after snapshot`),n.push(cn(t.after)));let r=[];for(let t of e.edges)pn(t.status)&&(t.after||j(`Union edge ${t.id} (${t.status}) has no after snapshot`),r.push(t.after));let i=Ue({meta:e.meta.after,nodes:n,edges:r},{edgeIdentity:t}),a=[];for(let t of e.nodes){if(!fn(t.status))continue;if(t.before){a.push(cn(t.before));continue}let e=t.afterId===void 0?void 0:i.nodes.get(t.afterId);e&&t.beforeId!==void 0||j(`Union node "${t.id}" has no before snapshot`),a.push(it({...e,id:t.beforeId}))}let o=[];for(let t of e.edges){if(!fn(t.status))continue;let e=t.before??t.after;e||j(`Union edge ${t.id} has no before snapshot`),o.push(e)}let s=Ue({meta:e.meta.before,nodes:a,edges:o},{edgeIdentity:t}),c=dn(s),l=dn(i);return{before:s,after:i,beforeEdge(e){let t=e.before??e.after;return fn(e.status)&&t?c(t):void 0},afterEdge:e=>pn(e.status)&&e.after?l(e.after):void 0}}function hn(e,t){try{return gn(e,t)}catch{return}}function gn(e,t){if(t===`structure`&&e.edges.some(e=>n(e.id)))return;let r=[],i=new Map;for(let t of e.nodes){if(!pn(t.status))continue;let e=C(t.after)?Ke(t.after,r):void 0;if(!e||i.size===i.set(e.id,e).size)return}let a=new Map;for(let t of e.nodes){if(!fn(t.status))continue;let e;if(t.before)e=C(t.before)?Ke(t.before,r):void 0;else{let n=t.afterId===void 0?void 0:i.get(t.afterId);n&&t.beforeId!==void 0&&(e=Ke(n,r,t.beforeId))}if(!e||a.size===a.set(e.id,e).size)return}let o=new Map,s=new Map,c=(e,n,i)=>{if(!C(e))return;let a=qe(e,t,r,i);return a&&un(a,e,t)&&n.size<n.set(a.key,a).size?a:void 0},l=[],u=[];for(let t of e.edges){let e;if(pn(t.status)&&(e=c(t.after,o),!e))return;let n;if(fn(t.status)){let r=t.before??t.after;if(n=c(r,s,r===t.after?e?.key:void 0),!n)return}l.push(e),u.push(n)}let d=We(o,i),f=d&&We(s,a);if(!(r.length>0||!f||!d))return{before:Ge(e.meta.before,a,s,t,[],f),after:Ge(e.meta.after,i,o,t,[],d),beforeEdge:(e,t)=>u[t],afterEdge:(e,t)=>l[t]}}function _n(e){if(!C(e)||e.format!==`kgdiff.diff`)throw new g(`unsupported-version`,`Not a kgdiff diff (expected format "kgdiff.diff")`);if(e.version!==1)throw new g(`unsupported-version`,`Unsupported diff version ${String(e.version)}; this reader supports version 1`,{version:e.version});sn(e);let t=xe(e.options),n=t.edgeIdentity,r=hn(e,n)??mn(e,n),{before:i,after:a}=r,o=e.nodes.map(e=>{let t={id:e.id,status:e.status,facets:e.facets??[]};if(e.beforeId!==void 0){t.beforeId=e.beforeId;let n=fn(e.status)?i.nodes.get(e.beforeId):void 0;n&&(t.before=n)}if(e.afterId!==void 0){t.afterId=e.afterId;let n=pn(e.status)?a.nodes.get(e.afterId):void 0;n&&(t.after=n)}return e.hunk!==void 0&&(t.hunk=e.hunk),gt(t,i,a)}),s=new Set(t.hierarchyPredicates),c=e.edges.map((e,t)=>{let n=r.beforeEdge(e,t),i=r.afterEdge(e,t),a=i??n;a||j(`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:s.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),n&&(o.beforeKey=n.key,o.before=n),i&&(o.afterKey=i.key,o.after=i),e.hunk!==void 0&&(o.hunk=e.hunk),_t(o)}),l=e.hunks,{delta:u,stats:d}=e;return an({before:i,after:a,options:t,nodes:o,edges:c,hunks:l,delta:u,stats:d}),{before:i,after:a,options:t,nodes:o,edges:c,hunks:l,matches:e.matches??[],suggestions:e.suggestions??[],delta:u,stats:d,index:lt(o,c,l)}}function vn(e){throw new g(`invalid-input`,`Packed diff: ${e}`)}function yn(e,t){let n=[],r=0,i=0;for(;r<e.length&&i<t.length;)n.push(e[r].id<t[i].id?e[r++]:t[i++]);for(;r<e.length;)n.push(e[r++]);for(;i<t.length;)n.push(t[i++]);return n}function bn(e){if(!C(e)||e.format!==`kgdiff.diff.packed`)throw new g(`unsupported-version`,`Not a packed kgdiff diff (expected format "kgdiff.diff.packed")`);if(e.version!==1)throw new g(`unsupported-version`,`Unsupported packed diff version ${String(e.version)}; this reader supports version 1`,{version:e.version});let{strings:n,unchangedNodes:r,unchangedEdges:i}=e;(!Array.isArray(n)||n.some(e=>typeof e!=`string`))&&vn(`strings must be a list of strings`),Array.isArray(r)&&r.length%2==0||vn(`unchangedNodes must be a list of (id, snapshot) pairs`),Array.isArray(i)&&i.length%3==0||vn(`unchangedEdges must be a list of (source, predicate, target) triples`),Array.isArray(e.nodes)&&Array.isArray(e.edges)||vn(`nodes and edges must be lists`);let a=(e,t)=>((typeof e!=`number`||!Number.isInteger(e)||e<0||e>=n.length)&&vn(`${t} is not an index into strings`),n[e]),o=[];for(let e=0;e<r.length;e+=2){let t=a(r[e],`unchangedNodes[${e}]`),n=r[e+1];n!==0&&(!C(n)||Object.hasOwn(n,`id`))&&vn(`unchangedNodes[${e+1}] is not a snapshot without an id`);let i=n===0?{id:t}:{id:t,...n};o.push({id:t,beforeId:t,afterId:t,after:i,status:`unchanged`})}let s=[];for(let e=0;e<i.length;e+=3){let n=a(i[e],`unchangedEdges[${e}]`),r=a(i[e+1],`unchangedEdges[${e+1}]`),o=a(i[e+2],`unchangedEdges[${e+2}]`),c=r===``?{source:n,target:o}:{source:n,target:o,predicate:r};s.push({id:t(n,r,o),source:n,target:o,after:c,status:`unchanged`})}return{format:`kgdiff.diff`,version:1,meta:e.meta,options:e.options,nodes:yn(o,e.nodes),edges:yn(s,e.edges),hunks:e.hunks,matches:e.matches,suggestions:e.suggestions,delta:e.delta,stats:e.stats}}function xn(e){return He(e)}function Sn(e){return _n(e)}function Cn(e){return bn(e)}function wn(e,t,n){return Gt(e,t,n)}var Tn={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 En(e,t){if(t!=null&&t!==!1){if(Array.isArray(t))for(let n of t)En(e,n);else e.appendChild(typeof t==`string`||typeof t==`number`?document.createTextNode(String(t)):t)}}function M(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)En(r,e);return r}function N(e,...t){e.textContent=``;for(let n of t)En(e,n)}function Dn(e,t,n,...r){let i=e.activeElement,a=i!==null&&t.contains(i),o=a?i.dataset.focusKey??``:``;if(N(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 P(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 F(e,t){e.textContent!==t&&(e.textContent=t)}function I(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">${Tn[e]}</svg>`,n.content.firstElementChild}function L(e,t,n,r={}){return M(`button`,{type:`button`,class:`icon-btn`,"aria-label":t,title:t,onclick:n,...r},I(e))}function R(e,t){P(e,`aria-label`,t),P(e,`title`,t)}var On={"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.`},kn={en:On,"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 An(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 jn(){let e=typeof navigator<`u`?navigator:void 0;for(let t of e?.languages??[e?.language??``]){let e=An(t);if(e)return e}return`en`}var Mn=new Map;function Nn(e,t){let n=Mn.get(t);return n===void 0&&(n=new Intl.NumberFormat(t),Mn.set(t,n)),n.format(e)}function Pn(e){return`${Math.round(Math.max(0,Math.min(1,e))*100)}%`}function z(e,t,n){let r=(kn[e]??kn.en)[t]??On[t];return n?r.replace(/\{(\w+)\}/g,(t,r)=>{let i=n[r];return i===void 0?t:typeof i==`number`?Nn(i,e):i}):r}function Fn(e,t,n,r){return z(e,`${t}.${new Intl.PluralRules(e).select(n)===`one`?`one`:`other`}`,{...r,n})}function In(e,t){return t===`zh-CN`?`「${e}」`:`“${e}”`}function Ln(e){return{locale:e,t:(t,n)=>z(e,t,n),plural:(t,n,r)=>Fn(e,t,n,r),num:t=>Nn(t,e),quote:t=>In(t,e)}}var Rn=[`overlay`,`swipe`,`replay`],zn=[`all`,`changes`],Bn=[`auto`,`light`,`dark`],Vn=[`default`,`colorblind`],Hn=[`full`,`none`],Un=[`auto`,`full`,`mini`,`none`],Wn=Bn;function Gn(e){return Rn.includes(e)?e:null}function Kn(e){return zn.includes(e)?e:null}var qn=`changes`;function Jn(e){return Bn.includes(e)?e:null}function Yn(e){return Vn.includes(e)?e:null}function Xn(e){return typeof e==`string`?An(e):null}function Zn(e){return Hn.includes(e)?e:null}function Qn(e){return Un.includes(e)?e:null}function $n(e){let t=typeof e==`string`&&e.trim()!==``?Number(e):e;return typeof t==`number`&&Number.isFinite(t)&&t>=0?t:null}function er(e){if(typeof e!=`object`||!e)return;let t=e,n=t.mode===qn,r=n?`overlay`:Gn(t.mode),i=Kn(t.scope)??(n&&t.scope===void 0?`changes`:null),a=Jn(t.theme),o=Yn(t.palette),s=Xn(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}:{}}}var tr=`kgdiff=`;function nr(e){try{return decodeURIComponent(e)}catch{return}}function rr(e){let t=e.startsWith(`#`)?e.slice(1):e;if(!t.startsWith(tr))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=nr(e.slice(t+1));s!==void 0&&s!==``&&(o===`hunk`?n=s:o===`mode`&&s===`changes`?(r=`overlay`,a=!0):o===`mode`?r=Gn(s)??r:o===`scope`&&(i=Kn(s)??i))}return a&&(i??=`changes`),{...n===void 0?{}:{hunk:n},...r===void 0?{}:{mode:r},...i===void 0?{}:{scope:i}}}function ir(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}`),`#${tr}${t.join(`;`)}`}var ar=new Set,or=`application/kgdiff+json`;function sr(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 cr(e){if(typeof DecompressionStream!=`function`)throw new g(`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 lr(e,t){let n,r=(t??``).trim().toLowerCase();if(r===``||r===`json`||r===`identity`)n=e;else if(r===`gzip-base64`)try{n=await cr(sr(e))}catch(e){throw e instanceof g?e:new g(`invalid-input`,`The embedded report is not valid gzip-base64: ${e.message}`)}else throw new g(`invalid-input`,`Unknown payload encoding "${t}".`);let i;try{i=JSON.parse(n)}catch(e){throw new g(`invalid-input`,`The embedded report is not valid JSON: ${e.message}`)}return ur(i)}function ur(e){if(typeof e!=`object`||!e)throw new g(`invalid-input`,`A kgdiff report payload must be an object.`);let t=e;if(t.format!==`kgdiff.report`)throw new g(`invalid-input`,`Expected format "kgdiff.report", got ${JSON.stringify(t.format)}.`);if(t.version!==1)throw new g(`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 g(`invalid-input`,"A kgdiff report needs both `diff` and `layout`.");return e}function dr(e,t){let n=e;return typeof n.getElementById==`function`?n.getElementById(t):e.querySelector(`[id="${t.replace(/["\\]/g,`\\$&`)}"]`)}function fr(e){for(let t of e.querySelectorAll(`*`))if(ar.has(t.localName))return t;return null}function pr(e,t){let n=e.getAttribute(`data-for`);return n?dr(t,n):fr(t)}async function mr(e){let t=[...e.querySelectorAll(`script[type="${or}"]`)];await Promise.all(t.map(async t=>{let n=pr(t,e);try{let e=await lr(t.textContent??``,t.getAttribute(`data-encoding`));n&&(n.payload=e)}catch(e){let t=e instanceof Error?e:new g(`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 hr=e=>({key:Symbol.for(e)}),gr=class extends Event{context;consumer;callback;constructor(e,t,n){super(`context-request`,{bubbles:!0,composed:!0}),this.context=e,this.consumer=t,this.callback=n}},_r=class extends Event{context;constructor(e){super(`context-provider`,{bubbles:!0,composed:!0}),this.context=e}},vr=new Set,yr=!1;function br(){yr||typeof document>`u`||(yr=!0,document.addEventListener(`context-request`,e=>{for(let e of vr)e.consumer.isConnected||vr.delete(e);let t=e;vr.add({context:t.context,consumer:t.consumer,via:e.composedPath()[0]??t.consumer,callback:t.callback})}),document.addEventListener(`context-provider`,e=>{let t=e.context.key;for(let e of[...vr])e.context.key===t&&(vr.delete(e),e.consumer.isConnected&&e.via.dispatchEvent(new gr(e.context,e.consumer,e.callback)))}))}function xr(e,t,n,r=null){br(),(r??e).dispatchEvent(new gr(t,e,n))}function Sr(e,t,n){br();let r=e=>{let r=e;r.context?.key===t.key&&(e.stopPropagation(),r.callback(n()))};return e.addEventListener(`context-request`,r),e.dispatchEvent(new _r(t)),()=>e.removeEventListener(`context-request`,r)}var Cr=(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},wr=Object.freeze([]),Tr=1.5;function Er(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 Dr(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 B=Math.PI*2;function V(e,t,n){return Math.min(Math.max(e,t),n)}function Or(e,t,n){let r=V((n-e)/(t-e),0,1);return r*r*(3-2*r)}function kr(e){return e<.5?4*e*e*e:1-(-2*e+2)**3/2}function Ar(e,t){return Math.round(e*t)/t}function jr(e,t){return Math.round(e*t)%2==1?.5/t:0}function H(e,t,n,r){let i=1-r;return i*i*e+2*i*r*t+r*r*n}function Mr(e,t,n,r){return 2*(1-r)*(t-e)+2*r*(n-t)}function Nr(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=H(e,n,i,.5)-c,m=H(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=H(e,n,i,o)-c,p=H(t,r,a,o)-l;s*s+p*p<u?d=o:f=o}return(d+f)/2}function Pr(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=V(l,0,1);let u=n+l*o-e,d=r+l*s-t;return u*u+d*d}function Fr(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=H(n,i,o,p),h=H(r,a,s,p),g=Pr(e,t,u,d,m,h);g<l&&(l=g),u=m,d=h}return l}function Ir(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 Lr(e,t,n,r,i,a,o,s){return e<i+o&&i<e+n&&t<a+s&&a<t+r}var Rr=1e-12;function zr(e,t,n=Math.SQRT2){let r=n*n,i=r*r,a=Math.max(e.w,Rr),o=Math.max(t.w,Rr),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 Br=Object.freeze({top:0,right:0,bottom:0,left:0}),Vr=Math.SQRT2;function Hr(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 Ur(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 Wr(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 Gr(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 Kr(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 qr(e,t,n,r,i,a){let o=[[r,n],[Br,n],[Br,Br]],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=V(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 Jr(e){return V(Math.abs(e)*620,350,1100)}function Yr(e,t,n=325){return e*Math.exp(-t/n)}function Xr(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 Zr=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(),!Xr(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=zr({x:this.x,y:this.y,w:a/this.k},{x:r.x,y:r.y,w:a/r.k},Vr),s=t.duration??Jr(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 Hr(this,this.host.size(),e)}screenToWorld(e){return Ur(this,this.host.size(),e)}viewport(){return Wr(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 qr(e,n,Kr(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=V(this.k*e,this.minK,this.maxK),a=Gr(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=V(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:V(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=V((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(kr(n));return this.apply(r.x,r.y,t.ref/r.w,`program`),!0}case`zoom`:{let n=t.last<0?16:V(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=V(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:V(e-t.last,0,64);return t.last=e,this.panNow(t.vx*n,t.vy*n,`user`),t.vx=Yr(t.vx,n),t.vy=Yr(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=V(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())}},Qr=512,$r=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/Qr,d/Qr),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}},ei=2047,ti=63,ni=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,ei)}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,ti)}};function ri(e){return Number.isFinite(e)?Math.round(V(e,0,1)*64):0}function ii(e){return ai(e)+512}function ai(e){return Number.isFinite(e)?V(Math.round(e),-512,511):0}function oi(e){return Number.isFinite(e)?Math.round(V(e,0,15.75)*4):0}function si(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 V(Math.round(r*2),0,511)}function ci(e,t){return e.z-t.z||e.seq-t.seq}var li=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 $r;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=ri(r.alpha);if(i===0||!(r.width>0)||!Number.isFinite(r.x1+r.y1+r.x2+r.y2))continue;let a=ii(r.z),o=oi(r.width),s=r.dash!==null&&r.dash.length>0?r.dash:null,c=si(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(ci);let r=e.nodes;for(let e=0;e<r.length;e++){let n=r[e];if(!n.visible)continue;let i=ri(n.alpha);if(i===0||!Number.isFinite(n.x+n.y+n.r)||n.r<0)continue;let a=ii(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?oi(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?oi(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(ci),this.decor.length>1&&this.decor.sort((e,t)=>ii(r[e].z)-ii(r[t].z)||e-t);let i=e.glyphs;for(let e=0;e<i.length;e++){let t=i[e];ri(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 ui(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 di=4.000244140625;function fi(){return{last:-1/0,intent:null}}function pi(e){let t=e/di;return t>=1&&Math.abs(t-Math.round(t))<1e-6}function mi(e){let t=Math.abs(e);return t===0?!1:pi(t)||t>=50&&Number.isInteger(t)}function hi(e,t,n){let r;return r=e.ctrlKey||e.metaKey?e.deltaMode!==0||mi(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`:mi(e.deltaY)?`notch`:`pan`:`pan`:`notch`,t.last=n,t.intent=r,r}function gi(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 _i(e,t){if(e===`pinch`)return Math.exp(-V(t,-50,50)/100);let n=Math.abs(t);return 2**(-V(pi(n)?Math.sign(t)*Math.round(n/di)*33:t,-240,240)/240)}var vi=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 yi(e,t){let n=new Map,r=new vi,i=fi(),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=hi(o,i,t.now()),c=gi(o,e.clientHeight);s===`pan`?(t.camera.interrupt(),t.camera.panNow(-c.x,-c.y)):s===`pinch`?(t.camera.interrupt(),t.camera.zoomNow(_i(`pinch`,c.y),r,a)):(t.camera.touched=!0,t.camera.zoomSmooth(_i(`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 bi=.9;function xi(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*bi,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 Si=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),xi(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}},Ci=1.2,wi=9.6,Ti=14.4;function Ei(e){if(!(e>0))return[];let t=24;for(let n=0;n<12&&t*e<wi;n++)t*=4;let n=Or(wi,Ti,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 Di=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,B)}return u.fill(),c.key=s,c.pattern=e.createPattern(l,`repeat`),c.pattern}};function Oi(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=Ei(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,Ci/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 ki=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=Ar(t.x*o+s+p*.7-2,l),g=Ar(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(),Er(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))}}}},Ai=new Map;function ji(e){if(typeof e.label==`string`&&e.label.length>0)return e.label;let t=e.count,n=Ai.get(t);return n===void 0&&(n=`+${t.toLocaleString(`en-US`)}`,Ai.size>4096&&Ai.clear(),Ai.set(t,n)),n}function Mi(e,t,n,r,i){let a=Math.ceil(r.width(n.get(11,500),ji(e)))+16;return i[0]=Ar(e.x*t.k+t.ox-a/2,t.dpr),i[1]=Ar(e.y*t.k+t.oy-10,t.dpr),i[2]=a,i[3]=20,i}var Ni=new Float64Array(4);function Pi(e,t,n,r,i,a,o){if(t.length===0)return;let s=a.get(11,500),c=jr(1,r.dpr),l=!1;for(let u=0;u<t.length;u++){let d=t[u];if(n[u]!==1)continue;Mi(d,r,a,o,Ni);let f=Ni[0],p=Ni[1],m=Ni[2],h=Ni[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(),Er(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(ji(d),f+m/2,p+h/2+.5))}}function Fi(e){return e>0?Math.min(e,1):0}function Ii(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=Fi(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=Nr(t,n,g,_,r,i,o,!1),y=Nr(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,C=!1;if(u){let e=Mr(t,g,r,x),a=Mr(n,_,i,x),o=Math.hypot(e,a);if(o>1e-6){let s=6/o;x-b>s*1.2&&(C=!0,S=x-s,d[0]=H(t,g,r,x),d[1]=H(n,_,i,x),d[2]=e/o,d[3]=a/o)}}let ee=H(t,g,r,b),w=H(n,_,i,b),te=(S-b)/2;return e.moveTo(ee,w),e.quadraticCurveTo(ee+te*Mr(t,g,r,b),w+te*Mr(n,_,i,b),H(t,g,r,S),H(n,_,i,S)),C?2:1}function Li(e,t){let n=Number.isFinite(t)?Math.min(Math.abs(t),1):0;return Math.max(6,e*.8)*(1+2*n)}function Ri(e,t,n){return e-t-n*.5}function zi(e,t,n,r,i,a){let o=Fi(a);if(o<=0)return 0;let s=Li(r,i),c=Ri(n,r,s),l=Math.PI/2;return e.moveTo(t,c+s),e.arc(t,c,s,l,l+B*o),1}function Bi(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 Vi=new Float64Array(4),U=new Float64Array(1024);function Hi(e){if(U.length<(e+1)*4){let e=new Float64Array(U.length*2);e.set(U),U=e}let t=e*4;U[t]=Vi[0],U[t+1]=Vi[1],U[t+2]=Vi[2],U[t+3]=Vi[3]}function Ui(e,t){e.globalAlpha=t.alpha,e.strokeStyle=t.color,e.lineWidth=t.width,e.setLineDash(t.dash??wr),e.lineDashOffset=t.dash?t.dashOffset:0,e.lineCap=t.dash?`butt`:`round`,e.lineJoin=`round`}function Wi(e,t,n,r){return Math.abs(n-e)+Math.abs(r-t)<1e-9}function Gi(e,t,n){return e&&!(n<t)}function Ki(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=Wi(h.x1,h.y1,h.x2,h.y2);if(x){let e=Li(b,h.curvature),t=Ri(_,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(!Ir(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||=(Ui(e,t),e.beginPath(),!0);let S;if(x)S=zi(e,g,_,b,h.curvature,h.progress);else{let t=Gi(h.arrow,h.arrowMinZoom,i),n=Math.max(h.r2*i,1)+(t?Tr:0);S=Ii(e,g,_,v,y,h.curvature,b,n,h.progress,h.fromTarget,t,Vi),S===2&&Hi(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;Dr(e,U[n],U[n+1],U[n+2],U[n+3])}e.fill()}}}var qi=Object.freeze([.001,4]),Ji={arrow:!0,dash:null,mark:!1},Yi={arrow:!1,dash:qi,mark:!0},Xi={arrow:!1,dash:null,mark:!1};function Zi(e){switch(e){case`merge-arrow`:case`split-arrow`:case`move-arrow`:case`replacement-arrow`:case`edge-ghost`:return Ji;case`suggestion`:return Yi;default:return Xi}}function Qi(e,t){return e>0&&Number.isFinite(e)?Math.max(e*t,1):0}var $i=new Float64Array(4);function ea(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=Zi(n.kind),x=n.arrow,S=typeof x==`boolean`?x:b.arrow,C=Qi(n.r1,o),ee=Qi(n.r2,o),w=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(w??wr),e.lineDashOffset=0,e.lineCap=w===null||(w[0]??0)<.5?`round`:`butt`,e.lineJoin=`round`,e.beginPath();let te=Ii(e,p,m,h,g,_,C,ee>0&&S?ee+Tr:ee,n.progress,!1,S,$i);if(e.stroke(),te===2&&(e.fillStyle=n.color,e.beginPath(),Dr(e,$i[0],$i[1],$i[2],$i[3]),e.fill()),b.mark&&n.progress>=1&&Math.hypot(h-p,g-m)>42){let[t,r]=Bi(p,m,h,g,_);e.setLineDash(wr),e.beginPath(),e.arc(t,r,7,0,B),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 ta(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,B),e.fill(),e.fillStyle=n.color,e.beginPath(),e.arc(l,u,d,0,B),e.fill())}}var na=new Map;function ra(e){let t=na.get(e);if(t!==void 0)return t;let n=ia(e.trim().toLowerCase());return na.size>512&&na.clear(),na.set(e,n),n}function ia(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:V(a,0,255),g:V(o,0,255),b:V(s,0,255),a:V(c,0,1)}:null}function aa(e,t){let n=Math.round(V(e.a*t,0,1)*1e3)/1e3;return`rgba(${Math.round(e.r)}, ${Math.round(e.g)}, ${Math.round(e.b)}, ${n})`}var oa=[[0,1],[.3,.9],[.5,.6],[.7,.28],[.86,.08],[1,0]],sa=128,ca=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(sa,sa);if(!t)return null;let n=sa/2,r=t.ctx.createRadialGradient(n,n,0,n,n,n),i=ra(e);for(let[t,n]of oa)r.addColorStop(t,i?aa(i,n):n>0?e:`rgba(0, 0, 0, 0)`);return t.ctx.fillStyle=r,t.ctx.fillRect(0,0,sa,sa),t}};function la(e,t,n,r,i,a){let{k:o,ox:s,oy:c}=r;i.glow||(e.lineWidth=2,e.setLineDash(wr));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,B),e.stroke()}}}function ua(){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 da=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(Lr(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 fa(e,t){return t.priority-e.priority||e.order-t.order}var pa=[0,1,2,3],ma=[4,2,0],ha=[4],ga={x:0,y:0};function _a(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),ga.x=s,ga.y=c,ga}function va(e,t,n){e.sort(fa);let r=0;for(let i of e){i.placed=!1;let e=i.mode===2?ha:i.mode===1?ma:pa;for(let a of e){let{x:e,y:o}=_a(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 ya=2e4;function ba(e){return Math.round(e*1.3)}var xa=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}},Sa=/[ᄀ-ᇿ⺀-鿿가-豈--]/;function Ca(e,t){let n=/(\d+(?:\.\d+)?)px/.exec(e),r=n?Number(n[1]):12,i=0;for(let e of t)i+=Sa.test(e)?r:r*.58;return i}var wa=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>ya&&(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):Ca(e,t)}},Ta=.02,Ea=new Float64Array(4);function Da(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 Oa(e,t,n){return e!==null&&e.text.length>0&&e.alpha*n*Da(e.minZoom,t)>=Ta}var ka=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,va(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}=_a(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=Aa(n,n.wP);ja(e,n,n.primary,n.textP,n.fontP,n.wP,n.hP,r,n.by,t,a,o,s)}if(n.secondary){let r=Aa(n,n.wS);ja(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=ua(),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;Mi(i,t,n.fonts,n.measurer,Ea);let a=Ea[2],o=Ea[3],s=Ea[0]+a/2,c=Ea[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<Ta)continue;let c=Oa(s.label,r,s.alpha)?s.label:null,l=Oa(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||!Oa(s.label,r,s.alpha))continue;let c=s.x1*r+i,l=s.y1*r+a,u,d;if(Wi(s.x1,s.y1,s.x2,s.y2)){let e=Math.max(s.r1*r,1),t=Li(e,s.curvature);u=c,d=Ri(l,e,t)-t}else[u,d]=Bi(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(!Oa(t.label,i,t.alpha)||t.progress<.999)continue;let[c,l]=Bi(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=ba(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=ba(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 Aa(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 ja(e,t,n,r,i,a,o,s,c,l,u,d,f){let p=n.alpha*t.alpha*Da(n.minZoom,l.k),m=Ar(s,l.dpr),h=Ar(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)):xi(e,r,i,n.color,u,n.strike,m,h,a,o,p))}var Ma=[];function Na(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=B*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 Pa(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 Fa(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);Pa(r,u,d,f)?(r.stats.nodes++,e.beginPath(),e.arc(u,d,f,0,B),e.fill(),e.setLineDash(f<3?wr:Na(t.dash,f,Ma)),e.stroke()):r.stats.culledNodes++}e.setLineDash(wr);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);Pa(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,B))):r.stats.culledNodes++}if(u&&(e.fillStyle=l,e.fill(),t.stroke!==null&&(e.strokeStyle=t.stroke,e.lineWidth=t.strokeWidth,e.setLineDash(wr),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;Pa(r,u,d,l)&&e.rect(u-l,d-l,2*l,2*l)}e.fillStyle=t.fill??t.stroke??i,e.fill()}}function Ia(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(!Pa(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(wr),e.beginPath(),e.arc(i,a,o+s.gap,0,B),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(wr),e.beginPath(),e.arc(i,a,o+3+c*(12+o*.6),0,B),e.stroke())}}function La(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];Fa(e,n,a,r,c);let u=o[t+1];if(u===void 0||u.z!==n.z)for(;l<s.length&&ai(a[s[l]].z)<=n.z;)Ia(e,a[s[l]],r,i),l++}for(;l<s.length;)Ia(e,a[s[l++]],r,i)}function Ra(){return{nodes:0,edges:0,culledNodes:0,culledEdges:0,labels:0,edgeStrokes:0,deferredLabels:0,phases:[]}}function za(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 Ba(e){return`before`in e&&`after`in e&&`split`in e}function Va(e,t,n){return Ar(V(Number.isFinite(e)?e:.5,0,1)*t,n)}var Ha=class{factory;fonts;measurer;atlas;halos;tiles;interner=new ni;dpr=0;theme;constructor(e,t,n){this.factory=e,this.theme=t,this.fonts=new xa(t),this.measurer=new wa(e(1,1)?.ctx??n),this.atlas=new Si(e),this.halos=new ca(e),this.tiles=new Di(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()}},Ua=class{res;stats=Ra();rasterBudget=160;labelsInside=!1;labels=new ka;badges=new ki;grid=new da;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;za(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&&Ba(n),p=n===null?0:f?Math.max(n.before.spotlight,n.after.spotlight):n.spotlight;if(Oi(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=Va(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),Pi(e,t.collapsed,n.pillShown,i,r,a.fonts,a.measurer),o.push(`collapsed`),Ki(e,t,n,i),o.push(`edges`),ea(e,t,n,i,r,a.fonts),o.push(`glyphs`),la(e,t,n,i,r,a.halos),o.push(`halos`),La(e,t,n,i,r),o.push(`nodes`),ta(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`)}},Wa=[],Ga=new Float64Array(4);function Ka(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,Wa);let u=-1,d=!1,f=-1/0,p=1/0;for(let t of Wa){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 qa(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(Wi(d.x1,d.y1,d.x2,d.y2)){let e=Math.max(d.r1*a,1),t=Li(e,d.curvature)/a,n=Ri(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=Pr(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=Fr(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 Ja(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)&&(Mi(c,n,a,o,Ga),r>=Ga[0]&&r<=Ga[0]+Ga[2]&&i>=Ga[1]&&i<=Ga[1]+Ga[3]))return e}return-1}function Ya(e,t,n,r,i,a,o){let s=Ka(e,t,n,r,i);if(s>=0)return{type:`node`,index:s};let c=qa(e,t,n,r,i);if(c>=0)return{type:`edge`,index:c};let l=Ja(e,t,n,r,i,a,o);return l>=0?{type:`collapsed`,index:l}:null}var Xa=new WeakMap,Za=3;function Qa(e,t){return e===t||e!==null&&t!==null&&e.type===t.type&&e.index===t.index}function $a(){return typeof window<`u`&&window.devicePixelRatio>0?window.devicePixelRatio:1}var eo=class{canvas;camera;ctx;theme;safe;grid;fixedRatio;dpr=1;width=0;height=0;frame=null;version=0;caches={main:new li,before:new li,after:new li};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 g(`invalid-input`,`createRenderer: expected 0 < minZoom ≤ maxZoom, got minZoom ${r}, maxZoom ${i}`);if(t.pixelRatio!==void 0&&!(t.pixelRatio>0))throw new g(`invalid-input`,`createRenderer: pixelRatio must be > 0, got ${t.pixelRatio}`);this.theme=t.theme,this.safe=t.safeArea??Br,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 Zr({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 Ha(n.surfaceFactory??Cr,this.theme,this.ctx),this.painter=new Ua(this.res),this.painter.labelsInside=t.labelsInside??!1,this.observeSize(),this.watchPixelRatio(),this.watchFonts(),(t.interactive??!0)&&this.cleanup.push(yi(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})),Xa.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(Ba(n)){let t=e<Va(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),Ya(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(),Xa.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){Qa(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 Ba(e)?(this.caches.before.sync(e.before,this.version,t),this.caches.after.sync(e.after,this.version,t),ui(this.caches.before.contentBounds(),this.caches.after.contentBounds())):(this.caches.main.sync(e,this.version,t),this.caches.main.contentBounds())}pixelRatio(){return V(this.fixedRatio??$a(),.25,Za)}applySize(e,t,n){let r=this.pixelRatio(),i=n!==null&&this.fixedRatio===void 0&&$a()<=Za,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: ${$a()}dppx)`),e.addEventListener(`change`,t),!this.destroyed&&this.pixelRatio()!==this.dpr&&this.resize()};e=window.matchMedia(`(resolution: ${$a()}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 to(e,t,n={}){if(!e||typeof e.appendChild!=`function`)throw new g(`invalid-input`,`createRenderer: container must be an HTMLElement`);return new eo(e,t,n)}var no=8,ro=12,io=1.5,ao=.45,oo=2.5,so=1,co=3e3,lo=.5,uo=.12,fo=50,po=.8;function mo(e,t){let n=e.family;return n===`neutral`?null:t.family[n]?.base??null}function ho(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 go=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*po&&(this.growing=!0),!1}step(e){return this.growing?(this.value+=(this.target-this.value)*(1-Math.exp(-Math.max(0,e)/fo)),Math.abs(this.target-this.value)<=this.target*.002&&(this.value=this.target,this.growing=!1),this.growing):!1}};function _o(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 vo=class{renderer;canvas;ctx;factory;width;height;theme;dpr=1;layer=null;frame=null;collapsed=[];fit=null;content=null;scale=new go;rafId=0;lastTick=-1;cleanup=[];drag=null;destroyed=!1;constructor(e,t,n,r){this.renderer=t;let i=Xa.get(t);if(!i)throw new g(`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??Cr;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=`${ro}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=Xa.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&&Xa.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=_o(ho(t,this.renderer.camera.viewport()),this.width,this.height,no).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=Xa.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<co){e.globalAlpha=uo,e.strokeStyle=s,e.lineWidth=Math.max(1,lo*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(io*i)),l=new Map;e.globalAlpha=ao,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=mo(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=oo/2*i,d=u+so*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,B)}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,B)}e.fill()}}}redraw(){let e=this.ctx;if(!e||this.destroyed)return;let t=Xa.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(),Er(e,0,0,r,i,ro),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=V(t.x*a.s+a.ox,-2,r+2),s=V(t.y*a.s+a.oy,-2,i+2),c=V((t.x+t.width)*a.s+a.ox,-2,r+2),l=V((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(),Er(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=Xa.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 yo(e,t,n={},r={}){return new vo(e,t,n,r)}var bo=240,xo;function So(e,t){return xo===void 0&&(xo=Cr(1,1)),new Co(e,{fonts:new xa(t),measurer:new wa(xo?.ctx??null),atlas:null})}var Co=class{frame;res;cache=new li;labels=new ka;badges=new ki;grid=new da;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:Ra()};constructor(e,t){this.frame=e,this.res=t,this.cache.sync(e,1,new ni)}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]-bo,e.y0=r[1]-bo,e.x1=r[2]+bo,e.y1=r[3]+bo,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 wo(e,t){return to(e,t)}function To(e,t,n){return yo(e,t,n)}var Eo=1,Do=.6,Oo=.68,ko=.56,Ao=.3,jo=.5,Mo=[[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]],No=/[\p{Mn}\p{Me}\p{Cf}\p{Cc}]/u,Po=/\s/u,Fo=/\p{Nd}/u,Io=/\p{Lu}/u;function Lo(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 Ro(e){return e===32||e===9?Ao:e<32||e===127?0:e>=48&&e<=57?Do:e>=65&&e<=90?Oo:ko}function zo(e){let t=e.codePointAt(0)??0;return t<128?Ro(t):No.test(e)||t>=127995&&t<=127999?0:t>=127462&&t<=127487?jo:Lo(t,Mo)?Eo:Po.test(e)?Ao:Fo.test(e)?Do:Io.test(e)?Oo:ko}function Bo(e,t){let n=0;for(let t=0;t<e.length;t++){let r=e.charCodeAt(t);if(r<128){n+=Ro(r);continue}let i=e.codePointAt(t)??r,a=String.fromCodePoint(i);i>65535&&t++,n+=zo(a)}return n*t}var Vo=([e],[t])=>e<t?-1:+(e>t);function Ho(e){return[...e].sort(Vo)}function W(e,t){throw new g(`invalid-input`,`layoutFromJSON: ${e}`,t)}var Uo=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Wo=e=>typeof e==`number`&&Number.isFinite(e);function Go(e,t){return Uo(e)&&[e.x,e.y,e.width,e.height].every(Wo)||W(`${t} must be a rectangle`,{where:t}),Object.freeze({x:e.x,y:e.y,width:e.width,height:e.height})}function Ko(e,t){Uo(e)||W(`${t} must be an object`,{where:t});let n=new Map;for(let[r,i]of Ho(Object.entries(e)))Wo(i)||W(`${t}["${r}"] must be a finite number`,{where:t,id:r}),n.set(r,i);return n}function qo(e){let t=e;if(Uo(t)&&t.format===`kgdiff.layout`||W(`not a kgdiff.layout document`),t.version!==1)throw new g(`unsupported-version`,`Unsupported kgdiff.layout version ${String(t.version)}`,{version:t.version});let n=t.strategy;n!==`union`&&n!==`anchored`&&W(`strategy must be union or anchored`);let r=t.scope;r!==`all`&&r!==`changes`&&W(`scope must be all or changes`);let i=t.iterations;(!Wo(i)||i<0)&&W(`iterations must be a number ≥ 0`),Uo(t.positions)||W(`positions must be an object`);let a=new Map;for(let[e,n]of Ho(Object.entries(t.positions)))Array.isArray(n)&&n.length===2&&Wo(n[0])&&Wo(n[1])||W(`positions["${e}"] must be [x, y]`,{id:e}),a.set(e,Object.freeze({x:n[0],y:n[1]}));let o=Ko(t.radii,`radii`),s=Ko(t.hidden,`hidden`);Array.isArray(t.components)||W(`components must be an array`);let c=t.components.map((e,t)=>(Uo(e)&&Array.isArray(e.nodes)&&e.nodes.every(e=>typeof e==`string`)||W(`components[${t}] must have a nodes array`,{index:t}),Object.freeze({nodes:Object.freeze([...e.nodes]),bounds:Go(e.bounds,`components[${t}].bounds`)})));return Object.freeze({positions:a,radii:o,bounds:Go(t.bounds,`bounds`),scope:r,hidden:s,components:Object.freeze(c),stats:Object.freeze({strategy:n,iterations:i,nodes:a.size,ms:0})})}function Jo(e){return Math.min(14,Math.max(4,4+2.2*Math.sqrt(Math.max(0,e))))}function Yo(e,t){return Bo(e,t)}function Xo(e){return qo(e)}var G={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},Zo=Object.freeze([3,2.5]),Qo=Object.freeze([4,3]),$o=Object.freeze([1,3]),es={glowScale:2.6,glowAlpha:.32,ringAlpha:.35,ringOffset:5,ringWidth:2},K={size:12,oldSize:11,edgeSize:10.5,offset:5,secondaryGap:14,lineHeight:1.3},q={changedLabel:.35,neutralLabel:.5,importantNeutralLabel:.35,importantThreshold:.7,smallScene:300,smallChangedLabel:.2,smallNeutralLabel:.25,edgeLabel:1.1,badge:1.2,arrow:1.2},ts=.18,J={selectedContext:.7,selectedRest:.18,replayContext:.7,replayRest:.3,filtered:.4,focusContext:.55,ghostEdge:.45,collapsedEdge:.5},ns={spotlightEnd:.18,settleStart:.82},rs={pace:1100,chapterThreshold:40,gap:160,maxStagger:.35},is=Object.freeze({x:0,y:0,width:0,height:0}),as=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=is){return this.empty?e:{x:this.minX,y:this.minY,width:this.maxX-this.minX,height:this.maxY-this.minY}}};function os(e,t,n,r,i,a){let o=Math.max(r,Yo(i,K.size)/2,a===void 0?0:Yo(a,K.oldSize)/2),s=r+K.offset+K.size*K.lineHeight+(a===void 0?0:K.secondaryGap);e.add(t-o,n-r,t+o,n+s)}function ss(e){return{x:e.x+e.width/2,y:e.y+e.height/2}}function cs(e,t){return t?e===0?0:Math.ceil(e/2)*ts*(e%2==1?1:-1):(Math.floor(e/2)+1)*ts*(e%2==0?1:-1)}function ls(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=cs(n,a);t[r]=i.a<=i.b?s:-s}}return t}function us(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=ls(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 ds(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 fs(e)}}function fs(e){throw Error(`Unexpected value ${String(e)}`)}var ps=(e,t)=>e.some(e=>e.kind===t);function ms(e){let t=e.facets;if(ps(t,`mergedInto`))return`merge-source`;if(ps(t,`mergeTarget`))return`merge-target`;if(ps(t,`splitInto`))return`split-source`;if(ps(t,`splitFrom`))return`split-target`;let n=e.status;switch(n){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 fs(n)}}function hs(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 gs(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=hs(e.facets);return t===`neutral`?`content`:t}default:return fs(t)}}function _s(e,t,n){return(t===`merge-target`||t===`split-target`)&&e.status!==`added`?hs(e.facets):n}function vs(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 ys(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 fs(t)}}function bs(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 xs=e=>`⊕ ${e}`;function Ss(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 xs(t.sources.length)}let n=e.facets.find(e=>e.kind===`attrs`);return n!==void 0&&n.kind===`attrs`?bs(n.changes):void 0}function Cs(e){let t=e.facets.find(e=>e.kind===`rename`);return t!==void 0&&t.kind===`rename`?t.from:void 0}function ws(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 Ts={r:255,g:255,b:255,a:1},Es=(e,t,n)=>Math.min(n,Math.max(t,e));function Ds(e,t){throw new g(`invalid-input`,`Unsupported color ${JSON.stringify(e)}: ${t}. Use #rgb, #rgba, #rrggbb, #rrggbbaa, rgb() or rgba().`,{color:e})}function Os(e,t){/^[0-9a-f]+$/i.test(t)||Ds(e,`not a hex color`);let n=t.length===3||t.length===4;!n&&t.length!==6&&t.length!==8&&Ds(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 ks(e,t,n){let r=t.endsWith(`%`),i=Number(r?t.slice(0,-1):t);return t!==``&&Number.isFinite(i)||Ds(e,`bad component "${t}"`),Es(r?i/100*n:i,0,n)}function As(e,t){let[n=``,r,i]=t.split(`/`);i!==void 0&&Ds(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&&Ds(e,`expected 3 or 4 components`);let[o=``,s=``,c=``,l]=a;return{r:ks(e,o,255),g:ks(e,s,255),b:ks(e,c,255),a:l===void 0?1:ks(e,l,1)}}function js(e){let t=e.trim().toLowerCase();if(t.startsWith(`#`))return Os(e,t.slice(1));if(t===`transparent`)return{r:0,g:0,b:0,a:0};let n=/^rgba?\((.*)\)$/.exec(t);return n?As(e,n[1]??``):Ds(e,`unknown syntax`)}function Ms(e,t){let n=e.a+t.a*(1-e.a);if(n===0)return{r:0,g:0,b:0,a:0};let r=(r,i)=>(r*e.a+i*t.a*(1-e.a))/n;return{r:r(e.r,t.r),g:r(e.g,t.g),b:r(e.b,t.b),a:n}}var Ns=e=>{let t=e/255;return t<=.04045?t/12.92:((t+.055)/1.055)**2.4};function Ps(e){return .2126*Ns(e.r)+.7152*Ns(e.g)+.0722*Ns(e.b)}function Fs(e,t){let n=js(t);n.a<1&&(n=Ms(n,Ts));let r=Ps(Ms(js(e),n)),i=Ps(n);return(Math.max(r,i)+.05)/(Math.min(r,i)+.05)}var Is=e=>Math.round(Es(e,0,255)).toString(16).padStart(2,`0`);function Ls(e){return e.a>=1?`#${Is(e.r)}${Is(e.g)}${Is(e.b)}`.toUpperCase():`rgba(${Math.round(Es(e.r,0,255))}, ${Math.round(Es(e.g,0,255))}, ${Math.round(Es(e.b,0,255))}, ${Math.round(Es(e.a,0,1)*1e3)/1e3})`}function Rs(e,t,n){let r=Es(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 zs(e,t){return Ls({...js(e),a:Es(t,0,1)})}function Bs(e,t){let n=js(e),r=.2126*n.r+.7152*n.g+.0722*n.b,i=Es(t,0,1);return Ls({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 Vs(e,t,n=33){let r=js(e),i=js(t),a=[];for(let e=0;e<n;e++)a.push(Ls(Rs(r,i,e/(n-1))));return a[0]=e,a[n-1]=t,Object.freeze(a)}function Hs(e,t){let n=e.length-1;return e[t<=0?0:t>=1?n:Math.round(t*n)]}var Us=class{cache=new Map;get(e,t){let n=`${e}\u0000${t}`,r=this.cache.get(n);return r===void 0&&(r=Vs(e,t),this.cache.set(n,r)),r}},Ws=`Inter, "SF Pro Text", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", system-ui, sans-serif`,Gs=`"JetBrains Mono", "SF Mono", ui-monospace, Menlo, Consolas, monospace`,Ks={fast:120,base:220,slow:420,easing:[.2,0,0,1]},qs={family:Ws,mono:Gs,size:12,weightRegular:400,weightStrong:600},Js={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`}},Ys={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 Xs(e,t){let n=n=>{let[r,i,a]=e[n];return{base:r,strong:a,soft:zs(r,t[n]),text:i}};return{added:n(`added`),removed:n(`removed`),content:n(`content`),structure:n(`structure`),identity:n(`identity`)}}var Zs={added:.16,removed:.15,content:.15,structure:.15,identity:.17},Qs={added:.11,removed:.09,content:.11,structure:.1,identity:.1},$s=Xs({added:[`#56B4E9`,`#8FD0F5`,`#8FD0F5`],removed:[`#E69F00`,`#F5C45C`,`#F5C45C`],content:[`#F0E442`,`#F5EC85`,`#F5EC85`],structure:[`#009E73`,`#3CC79E`,`#3CC79E`],identity:[`#CC79A7`,`#E0A6C6`,`#E0A6C6`]},Zs),ec=Xs({added:[`#0072B2`,`#005A8C`,`#00669F`],removed:[`#D55E00`,`#A84A00`,`#BF5400`],content:[`#9A8700`,`#6E6100`,`#847400`],structure:[`#00805C`,`#006248`,`#007152`],identity:[`#A3477F`,`#83335F`,`#933D6F`]},Qs);function tc(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`?$s:Js,glow:!0,font:qs,motion:Ks}}function nc(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`?ec:Ys,glow:!1,font:qs,motion:Ks}}function rc(e){if(typeof e==`object`&&e&&!Object.isFrozen(e)){Object.freeze(e);for(let t of Object.values(e))rc(t)}return e}var ic=new Map,ac=[`dark`,`light`],oc=[`default`,`colorblind`];function sc(e,t=`default`){if(!ac.includes(e))throw new g(`invalid-input`,`Unknown theme "${String(e)}" (expected "dark" or "light").`);if(!oc.includes(t))throw new g(`invalid-input`,`Unknown palette "${String(t)}" (expected "default" or "colorblind").`);let n=`${e}/${t}`,r=ic.get(n);return r===void 0&&(r=rc(e===`dark`?tc(t):nc(t)),ic.set(n,r)),r}var cc=[`remove`,`restructure`,`modify`,`add`],lc=(e,t,n,r)=>e<n||e===n&&t<r,uc=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;lc(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 dc(e){let t=e.length,n=e=>cc.indexOf(e),r=cc.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 uc(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 fc(e){let t=cc.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 pc={add:.85,remove:.85,modify:.8,relations:.95,merge:1.3,split:1.3},mc=e=>Math.round(e*1e3)/1e3;function hc(e,t,n){return mc(n*pc[e]*Math.min(2.2,Math.max(1,Math.sqrt(t))))}function gc(e,t){return mc(t*Math.min(4,Math.max(1.2,1.2+Math.log2(Math.max(1,e)))))}function _c(e,t){let n=new as;for(let r of t)n.addRect(e[r].bounds);return n.rect()}var vc=(e,t)=>e>t?`chapters`:`hunks`;function yc(e,t,n){let r=vc(e.length,n),i=[],a=[],o=r===`chapters`?fc(e):null,s=cc.filter(t=>e.some(e=>e.phase===t)),c=[];for(let t=0;t<e.length;t++){let n=e[t],r=o===null?cc.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=mc(l+rs.gap));let u=l;if(r===`hunks`)for(let r=0;r<s.length;r++){r>0&&(l=mc(l+rs.gap));let a=e[s[r]],o=mc(l+hc(a.kind,a.size,t));i.push({hunk:s[r],start:l,end:o,chapter:n}),l=o}else{let e=s.length,r=gc(e,t),a=rs.maxStagger*r*(e-1)/e,o=e>1?a/(e-1):0,c=r-a;for(let t=0;t<e;t++){let e=mc(u+t*o);i.push({hunk:s[t],start:e,end:mc(e+c),chapter:n})}l=mc(u+r)}a.push({phase:o,start:u,end:l,hunks:s,bounds:_c(e,s)})}return{duration:l,windows:i,chapters:a,mode:r}}function bc(e){let t=e.theme;return t!==void 0&&typeof t==`object`?t:sc(t??`dark`,e.palette??`default`)}function xc(e){let t=e.replay?.pace??rs.pace,n=e.replay?.chapterThreshold??rs.chapterThreshold;if(!(Number.isFinite(t)&&t>0))throw new g(`invalid-input`,`replay.pace must be a positive number of ms, got ${t}.`);if(!(n>=0))throw new g(`invalid-input`,`replay.chapterThreshold must be ≥ 0, got ${n}.`);return{pace:t,chapterThreshold:n}}function Sc(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 Cc(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 wc(e){let t=e.predicateLabels;return typeof t==`object`&&t&&!Array.isArray(t)?t:null}function Tc(e){let t=[wc(e.after.meta),wc(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:ws(e)};let t=e.facets.find(e=>e.kind===`predicate`),r=t?.kind===`predicate`?n(e.predicateBefore??t.from)??ws(e):void 0;return{label:n(e.predicate)??e.label,labelBefore:r}}}function Ec(e,t){if(e.kind!==`modify`)return ds(e.kind);let n=t.get(e.anchor);if(n===void 0)return`content`;let r=gs(n,ms(n));return r===`neutral`?`content`:r}function Dc(e,t,n={}){let r=bc(n),i=n.locale??`en`,{pace:a,chapterThreshold:o}=xc(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:Jo(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=dc(y);if(vc(b.length,o)===`chapters`){let e=new Int32Array(b.length);for(let t=0;t<b.length;t++)e[b[t]]=t;let t=fc(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,C=Sc(s),ee=s.map((e,n)=>{let r=ms(e),i=Cs(e),a=Ss(e,r),o;if(r===`merge-source`){let t=Cc(e,`mergedInto`);o=t===void 0?void 0:c.get(t)}else if(r===`split-target`){let t=Cc(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=gs(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:_s(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:C[n]}}),w=us(p),te=Tc(e),ne=f.map((e,t)=>{let n=vs(e),r=p[t],{label:i,labelBefore:a}=te(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:ys(e,n),label:i,...a!==void 0&&a!==i?{labelBefore:a}:{},curvature:w.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}}),re=new as;for(let e of ee)os(re,e.x,e.y,e.r,e.label,e.labelBefore);let ie=re.rect(),ae=ss(ie),oe=(e,t)=>{let n=[];for(let r of e){let e=t.get(r);e!==void 0&&n.push(e)}return n},se=new Map;for(let e of ne)se.set(e.id,e.index);let ce=b.map((t,n)=>{let r=e.hunks[t],a=oe(r.nodes,c),o=oe(r.context,c),s=new as;for(let e of[...a,...o]){let t=ee[e];os(s,t.x,t.y,t.r,t.label,t.labelBefore)}let u=wn(r,e,i);return{index:n,id:r.id,kind:r.kind,phase:r.phase,family:Ec(r,l),title:u.title,subtitle:u.subtitle,anchor:c.get(r.anchor)??-1,nodes:a,edges:oe(r.edges,se),context:o,bounds:s.rect({x:ae.x,y:ae.y,width:0,height:0})}}),le=[];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&&le.push({before:e,after:n,score:t.score})}let ue=new Int32Array(b.length);for(let e=0;e<b.length;e++)ue[b[e]]=e;let de=yc(ce.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=>ue[e])}}),a,o),fe=new Map;for(let e of ce)fe.set(e.id,e.index);return{nodes:ee,edges:ne,hunks:ce,suggestions:le,bounds:ie,stats:e.stats,timeline:de,theme:r,locale:i,meta:{before:e.before.meta,after:e.after.meta},nodeIndex:c,edgeIndex:se,hunkIndex:fe}}var Oc=new WeakMap;function kc(e){let t=Oc.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 Oc.set(e,c),c}var Ac=new Map;function jc(e,t,n){let r=Ac.get(n);r===void 0&&(r=new Intl.NumberFormat(n),Ac.set(n,r));let i=r.format(e);return n===`zh-CN`?t?`+${i} 个未变节点`:`+${i} 个隐藏节点`:t?`+${i} unchanged`:`+${i} hidden`}var Mc=28;function Nc(e,t={}){let n=t.hops??1;if(!(Number.isFinite(n)&&n>=0))throw new g(`invalid-input`,`computeFocus: hops must be a finite number ≥ 0, got ${n}.`);let r=t.hubDegree??40;if(!(r>=0))throw new g(`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 g(`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}=kc(e),l=new Uint8Array(a),u=new Uint8Array(a),d=new Int32Array(a).fill(-1),f=new Int32Array(a),p=0,m=0,h=(e,t)=>{e<0||e>=a||d[e]!==-1||(d[e]=t,l[e]=1,f[m++]=e)},_=[];if(i!==void 0){let t=e.hunks[i];for(let e of t?.nodes??[])u[e]=1,h(e,0);for(let e of t?.edges??[])_.push(e)}else{for(let t of e.nodes)t.status!==`unchanged`&&(u[t.index]=1,h(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&&(h(n.s,1),h(n.t,1),h(n.sb,1),h(n.tb,1))}let v=Math.floor(n),y=new Uint8Array(a);for(;p<m;){let t=f[p++],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++)h(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:Pc(e,l,y,s,c)}}function Pc(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+Mc;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:jc(o,!n.changed,e.locale)})}return m.sort((e,t)=>e.id<t.id?-1:+(e.id>t.id)),m}var Fc=.06,Ic=16,Lc=160;function Rc(e,t){let n=e.bounds;if(t!==void 0&&t.length>0){let r=new as;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(Ic,Fc*Math.max(n.width,n.height)),i=Math.max(Lc,n.width+2*r),a=Math.max(Lc,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 Y={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 zc(e,t,n){let r=n+(t>1?Y.travelStagger*e/(t-1):Y.travelStagger/2);return[r,r+Y.travel]}function Bc(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]=zc(n,f.length,0);r?.flow!==void 0&&!r.presentAfter?l(t,4,i,a):d(t).hidden?l(t,2,Y.removeShrink[0],Y.removeShrink[1],Y.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]=zc(t,p.length,Y.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`?Y.popAfterArrival:Y.pop;l(t,3,e,n,Math.min(1,n-.05))}else s.hidden?i===`split`?l(t,2,Y.splitSourceShrink[0],Y.splitSourceShrink[1],Y.splitSourceFade[0]):l(t,2,Y.removeShrink[0],Y.removeShrink[1],Y.removeGhostFade[0]):n.role===`merge-target`?(l(t,1,Y.mergeTargetFade[0],Y.mergeTargetFade[1]),u(t,Y.mergeFlash)):n.role===`split-source`?(l(t,1,Y.splitSourceStay[0],Y.splitSourceStay[1]),u(t,Y.mergeFlash)):(l(t,1,Y.modifyFade[0],Y.modifyFade[1]),s.ring!==null&&u(t,Y.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]=Y.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(Y.mergeFlash[0]),s[t]=Float64Array.from(r),c[t]=r.map((e,t)=>t===r.length-1?n.badge:xs(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?Y.growBetweenNew:i===`add`&&(e||n)?Y.growFromExisting:i===`merge`||i===`split`?Y.growAfterArrival:Y.growOther,e&&!n);break}case`removed`:_(t,2,Y.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,Y.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,Y.retract,g(r.s)&&!g(r.t)):_(t,7,Y.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,Y.swing,!1,e):_(t,7,Y.swap);break}case`modified`:_(t,6,Y.edgeFade);break;case`unchanged`:break;default:fs(r.role)}s.hidden&&c.hidden&&(o.eKind[t]=0)}}return o}var Vc=e=>Math.min(1,Math.max(0,e)),Hc=(e,t,n)=>e+(t-e)*n,X=(e,t,n)=>{if(n<=t)return+(e>=n);let r=(e-t)/(n-t);return Math.min(1,Math.max(0,r))},Uc=e=>e<=0||e>=1?0:Math.sin(Math.PI*e);function Wc(e,t,n,r){if(!(e>=0&&e<=1&&n>=0&&n<=1))throw new g(`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,p=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(p(e))}var Gc=Wc(.2,0,0,1),Kc=1024,qc=new Float64Array(1026);for(let e=0;e<=Kc;e++)qc[e]=Gc(e/Kc);qc[1025]=1;var Z=e=>{if(!(e>0))return 0;if(e>=1)return 1;let t=e*Kc,n=t|0,r=qc[n];return r+(qc[n+1]-r)*(t-n)},Jc=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},Yc=(e,t=1.5)=>{let n=Math.min(1,Math.max(0,e))-1;return 1+(t+1)*n*n*n+t*n*n},Xc=[`added`,`removed`,`content`,`structure`,`identity`,`neutral`];function Zc(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 fs(e)}}var Qc=new WeakMap;function $c(e){let t=Qc.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:Bs(n.content.base,.6),deprecatedStroke:Bs(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?es.glowScale:1,haloAlpha:e.glow?es.glowAlpha:es.ringAlpha,weightRegular:e.font.weightRegular,weightStrong:e.font.weightStrong,ramps:new Us};return Qc.set(e,i),i}function el(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 tl=el({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 nl(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 rl=nl({hidden:!0,family:5,before:!1,color:``,width:0,alpha:0,dash:null,arrow:!1,label:0,labelColor:``,strike:!1,changed:!1,z:0}),il=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=el(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:Zo,z:1};case`deprecated`:return{...i,family:2,fill:r.deprecatedFill,stroke:r.deprecatedStroke,ring:r.deprecatedFill,strike:!0};default:return fs(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=nl(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:G.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:G.neutralEdge,labelColor:a.neutralLabel,changed:!1,z:0};case`solid`:return o;case`dashed`:return{...o,dash:Qo,z:1};case`collapsed`:return{...o,dash:Qo,alpha:J.collapsedEdge,z:1};default:return fs(e)}}};function al(e,t){let n=Zc(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,tl,t]}case`removed`:return[e.node(`ghost`,1,{strike:!0,badge:!0}),e.node(`solid`,1),tl];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):tl];case`merge-target`:case`split-target`:{let n=Zc(t.familyBefore),i=t.presentBefore?n===5?e.node(`neutral`,5):e.node(`ringed`,n,{labelBefore:!0}):tl;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}):tl];default:return fs(t.role)}}function ol(e,t){let n=Zc(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,rl,t]}case`removed`:return[e.edge(`dashed`,1,!1,1,!0),e.edge(`solid`,1,!1,1),rl];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),rl];default:return fs(t.role)}}var sl=0,cl=1,ll=2,ul=3,Q=ns.spotlightEnd,dl=ns.settleStart,fl=dl-Q,pl=[`added`,`removed`,`content`,`structure`,`identity`],ml=Object.freeze([]),hl=0,gl=1,_l=2,vl=3,yl=4,bl=()=>({text:``,color:``,alpha:0,size:0,weight:400,strike:!1,priority:0,minZoom:0,offset:0}),xl=()=>({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}),Sl=()=>({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}),Cl=()=>({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 wl(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 Tl(e){e.visible=!1,e.alpha=0,e.label=null}var El=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=sl;famMask=0;reduced=!1;curChanged=!1;curFamily=5;u=0;tau=0;time=0;emph=1;restLabels=1;lodChanged=q.changedLabel;lodNeutral=q.neutralLabel;lodImportant=q.importantNeutralLabel;countedFocus=null;focusCount=0;px=0;py=0;pools=new WeakMap;constructor(e){this.scene=e,this.t=$c(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 il(this.t);this.nStyles=e.nodes.map(e=>al(i,e)),this.eStyles=e.edges.map(e=>ol(i,e));let a=t=>{let n=t>=0?e.hunks[t]:void 0;return n===void 0?5:Zc(n.family)};this.nFam=Uint8Array.from(e.nodes,e=>Zc(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=>Zc(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=us(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=>Zc(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=Bc(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===gl&&u.push(t),e.role!==yl&&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:G.glyph,dash:null,curvature:Y.arc,clearA:4,clearB:4,label:null});for(let t of e.nodes)t.flow!==void 0&&(t.role===`merge-source`?r.push(i(hl,`merge-arrow`,t.index,t.flow,t.index,t.hunk)):t.role===`split-target`?r.push(i(hl,`split-arrow`,t.flow,t.index,t.index,t.hunk)):t.role===`deprecated`&&r.push(i(gl,`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:_l,kind:`edge-ghost`,a:n.sb,b:n.tb,edge:n.index,node:-1,hunk:n.hunk,family:Zc(n.family),color:t.edge[e],alpha:J.ghostEdge,width:G.changedEdge,dash:Qo,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:vl,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:G.pivot,dash:null,curvature:0,clearA:0,clearB:0,label:null})}for(let n of e.suggestions)r.push({role:yl,kind:`suggestion`,a:n.before,b:n.after,edge:-1,node:-1,hunk:-1,family:4,color:t.base[4],alpha:.85,width:G.suggestion,dash:$o,curvature:.12,clearA:2,clearB:2,label:`?`});return n}newFrame(){return{nodes:[],edges:[],glyphs:[],collapsed:ml,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,bl),secondaries:n(this.N,bl),badges:n(this.N,()=>({text:``,color:``,background:``,minZoom:0})),edgeLabels:n(this.M,bl),glyphs:n(this.glyphs.length,Cl),glyphLabels:n(this.glyphs.length,bl)},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]=xl());for(let t=0;t<this.M;t++)e.edges[t]===void 0&&(e.edges[t]=Sl());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?ml:e.focus.collapsed,n.spotlight=this.layer===ul?this.env:this.selHunk>=0?this.emph:0,this.view=null,n}begin(e){switch(this.view=e,e.layer){case`union`:this.layer=sl;break;case`before`:this.layer=cl;break;case`after`:this.layer=ll;break;case`replay`:this.layer=ul;break;default:throw new g(`invalid-input`,`Unknown layer "${String(e.layer)}".`)}let t=0;if(e.families.size>0)for(let n=0;n<pl.length;n++)e.families.has(pl[n])&&(t|=1<<n);this.famMask=t,this.reduced=e.reducedMotion;let n=e.emphasis;this.emph=Number.isFinite(n)?Vc(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 g(`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))<=q.smallScene;this.lodChanged=i?q.smallChangedLabel:q.changedLabel,this.lodNeutral=i?q.smallNeutralLabel:q.neutralLabel,this.lodImportant=i?q.smallNeutralLabel:q.importantNeutralLabel,this.updateSelection(e.selectedHunk>=0&&e.selectedHunk<this.H?e.selectedHunk:-1),this.env=0,this.layer===ul&&(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<Q?Z(e/Q):e>dl?Z((1-e)/(1-dl)):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:Q*(i[s]-r[s]);this.env=Z(Vc(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]<Q&&!this.reduced,u=l?this.hP[e]/Q: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===ul?this.levelGen[e]===this.gen?this.level[e]:0:this.selNode[e]}spotlight(e){return this.layer===ul?this.env<=0||e===2?1:Hc(1,e===1?J.replayContext:J.replayRest,this.env):this.selHunk<0||e===2?1:Hc(1,e===1?J.selectedContext:J.selectedRest,this.emph)}fadesRestLabels(e){return this.layer!==ul&&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=Xc[this.nFam[e]],t.pulse=0,t.strokeWidth=G.node;let r=this.nStyles[e],i;if(this.layer!==ul)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[cl],n);else if(o===2)i=this.applyNode(t,e,r[ll],n);else{let o=this.hP[a];o<Q?i=this.applyNode(t,e,r[cl],n):o>=dl?i=this.applyNode(t,e,r[ll],n):(this.u=(o-Q)/fl,i=this.animateNode(t,e,r,n))}i&&this.pulseGen[e]===this.gen&&(t.pulse=this.pulseVal[e])}i?this.modulateNode(t,e,n):wl(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=Xc[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=G.ring,i.gap=G.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=K.size,o.weight=n.labelWeight,o.strike=n.strike,o.offset=K.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=K.oldSize,n.weight=i.weightRegular,n.strike=!0,n.offset=K.offset+K.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[cl],c=n[ll],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-Z(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=Z(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=Z(l?o:X(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=Hs(f,u));let p=this.strokeRamp[t]??null;p!==null&&u>0&&u<1&&(e.stroke=Hs(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:Hs(i,u):r.ring??n.ring??``,m.width=G.ring,m.gap=G.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=Uc(X(o,a.nFlashA[t],a.nFlashB[t]));m.width=G.ring+G.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:Z(X(o,Y.labelOut[0],Y.labelOut[1])),c=l?u:Z(X(o,Y.labelIn[0],Y.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=K.offset+(l?0:Y.labelSlide*(1-c)),e.label=d;let f=i.secondaries[t];f.text=s,f.color=n.labelColor,f.size=K.size,f.weight=n.labelWeight,f.strike=!1,f.alpha=1-a,f.offset=K.offset-(l?0:Y.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=Z(X(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:Hs(r,a),e.dash=Zo,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-Z(X(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-Y.arc*(s-a),u=(a+s)/2+Y.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=Jc(X(r,a,o)),this.arcPoint(t,i),e.x=this.px,e.y=this.py,e.z=3,e.alpha=1-X(r,o,o+Y.arrivalFade),e.label!==null&&(e.label.alpha=1-X(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=X(r,n.nA[t],n.nB[t]);if(e.r=i>0?this.nr[t]*Yc(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=Z(X(r,a,Math.min(1,a+Y.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=Jc(X(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=X(r,a,a+.1),e.halo!==null&&(e.halo.radius=e.r*this.t.haloScale);let c=Z(X(r,o-.05,Math.min(1,o+Y.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){wl(e);return}o.context[t]===1&&(a*=J.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*=J.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=G.hoveredNode,e.stroke=s?i.strong[c]:i.secondary,e.z=4),m){let r=n.rings[t];r.color=i.accent,r.width=G.hoveredNode,r.gap=G.ringGap,r.alpha=1,e.ring=r,e.z=4}e.alpha*=a;let h=this.nImp[t],g=s?this.lodChanged:h>=q.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:q.badge)}resolveEdge(e,t,n,r){let i=this.eStyles[e],a;if(this.layer!==ul)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[cl],n,r);else if(s===2)a=this.applyEdge(t,e,i[ll],n,r);else{let s=this.hP[o];s<Q?a=this.applyEdge(t,e,i[cl],n,r):s>=dl?a=this.applyEdge(t,e,i[ll],n,r):(this.u=(s-Q)/fl,a=this.animateEdge(t,e,i,n,r))}}a?this.modulateEdge(t,e,r):Tl(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:q.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=K.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[cl],c=n[ll],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*=Z(o),e.alpha>0;let n=Z(X(o,l,u));return n<=0?!1:(e.progress=n,e.fromTarget=a.eFromTarget[t]===1,e.label!==null&&(e.label.alpha=Z(X(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-Z(o),e.alpha>0;let n=Z(X(o,l,u));return n>=1?!1:(e.progress=1-n,e.fromTarget=a.eFromTarget[t]===1,e.label!==null&&(e.label.alpha=1-X(o,l,l+.1)),!0)}case 3:return this.applyEdge(e,t,c,r,i)?d?(e.alpha*=Z(o),e.alpha>0):(this.tau=Jc(X(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-Z(o)}else{if(!this.applyEdge(e,t,c,r,i))return!1;e.alpha*=Z(o)}return e.alpha>0}return o<u||c.hidden?this.applyEdge(e,t,s,r,i)?(e.alpha*=1-X(o,u,u+Y.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*=Z(o)),e.alpha>0):!1;case 6:{let n=Z(X(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+=Uc(n)),!0):!1}case 7:return this.applyEdge(e,t,c,r,i)?(e.alpha*=Z(d?o:X(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=Hc(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=Hc(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=Hc(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){Tl(e);return}this.eUnchanged[t]===1&&(c.context[i]===1||c.context[a]===1)&&(s*=J.focusContext)}let l=this.curChanged;this.filtered(this.eFam[t],this.eHunkFam[t])&&(l=!1,e.color=o.edge[5],e.width=G.neutralEdge,e.arrowMinZoom=q.arrow,e.label!==null&&(e.label.color=o.neutralLabel),s*=J.filtered);let u;u=this.layer===ul?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?q.edgeLabel:0,m=l?.9:.4;if(d&&(e.width<G.selectedEdge&&(e.width+=(G.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,G.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=K.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===ul){let t=e.hunk;if(t<0)return!1;let n=this.hState[t],r=this.hP[t],i=n===1&&r>=Q&&r<dl,a=i?(r-Q)/fl:0,d=this.c;switch(e.role){case hl:{if(!i||this.reduced)return!1;let t=d.nA[e.node],n=d.nB[e.node];if(s=Jc(X(a,t,n)),o*=.6*(1-X(a,n+.05,1)),s<=0||o<=0)return!1;break}case gl:if(n===0||n===1&&r<Q||i&&(this.reduced?o*=Z(a):s=Z(X(a,.4,.9)),s<=0||o<=0))return!1;break;case _l:{if(!i)return!1;let t=d.eKind[e.edge];if(t===3&&!this.reduced)o*=1-Z(X(a,Y.ghostFade[0],Y.ghostFade[1]));else if(t===7||t===3||this.reduced){let t=this.eStyles[e.edge][cl];c=t.color,l=t.dash,u=t.width,o=1-Z(this.reduced?a:X(a,d.eA[e.edge],d.eB[e.edge]))}else return!1;if(o<=0)return!1;break}case vl:if(!i||this.reduced||d.eKind[e.edge]!==3||(o*=1-X(a,Y.pivotFade[0],Y.pivotFade[1]),o<=0))return!1;break;default:return!1}}else if(e.role===yl&&!i.showSuggestions)return!1;else if(e.edge>=0&&r[e.a]?.visible!==!0)return!1;if(t.kind=e.kind,e.role===vl){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*=J.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=K.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 Dl(e){return new El(e)}var Ol=new Set;function kl(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??Ol,showSuggestions:e.showSuggestions??!0,reducedMotion:e.reducedMotion??!1,emphasis:e.emphasis??1})}var Al=8,jl=.94,Ml=6,Nl=48,Pl=Object.freeze({top:0,right:0,bottom:0,left:0});function Fl(e,t,n,r){let i=t-r.left-r.right,a=n-r.top-r.bottom;if(i<Nl||a<Nl)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 Il(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,Ml),c=s.map(e=>[e.y+e.height+Al,i-e.x+Al,a-e.y+Al,e.x+e.width+Al]),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(Fl(e,i,a,h));if(!(g>0))continue;let _=Math.hypot((p-o)/2,(r-s)/2),v=g>d/jl||g>=d*jl&&_<f-.5;(d<0||v)&&(u=h,d=Math.max(g,d),f=_)}return u}var Ll=.05,Rl=16;function zl(e,t,n,r,i){let a=i=>{let a=e(i);return a!==null&&Fl(a,t,n,r)>=i},o=i;if(!a(o)){let s=Math.min(Ll,i);if(!a(s)){let i=e(1/0);return i?{k:Fl(i,t,n,r),content:i,bounds:i}:null}let c=o;for(let e=0;e<Rl;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 Bl(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 Vl={createRenderer:wo,createMinimap:To};function Hl(){return Vl}var Ul=`KgdiffCompute`,Wl=null,Gl=null,Kl=!1;function ql(){let e=globalThis[Ul];return typeof e==`object`&&e?e:null}function Jl(){return Gl??=ql(),Gl}function Yl(){return Jl()?`ready`:Kl?`unavailable`:`unknown`}function Xl(){let e=Jl();return e?Promise.resolve(e):(Wl??=import(`@kgdiff/viewer/compute`).then(e=>(Gl=e,Kl=!1,e),e=>{throw Wl=null,Kl=!0,new g(`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)})}),Wl)}var Zl=[`remove`,`restructure`,`modify`,`add`],Ql=Object.freeze({items:[],order:[],rank:new Map,itemOf:new Map});function $l(e,t){let n=new Map(Zl.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 Zl){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 eu(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 tu(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}function nu(e){return typeof e.text==`string`}function ru(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 iu=null;function au(){return iu??=import(`@kgdiff/formats`).catch(e=>{throw iu=null,new g(`invalid-input`,z(`en`,`error.formats`),{cause:e instanceof Error?e.message:String(e)})}),iu}async function ou(e,t){if(typeof e!=`object`||!e)throw new g(`invalid-input`,`load(): \`${t}\` must be a GraphInput, a KGraph or { text, filename }.`);if(nu(e)){let{parseGraph:t}=await au(),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(xn(e))return{graph:e,meta:e.meta};if(ru(e))return{graph:e,meta:e.meta??{}};throw new g(`invalid-input`,`load(): \`${t}\` must be a GraphInput ({ nodes, edges }), a KGraph or { text, filename }.`)}function su(e){let t=e.split(/[?#]/)[0]??e;return t.slice(Math.max(t.lastIndexOf(`/`),t.lastIndexOf(`\\`))+1)||e}function cu(e){return typeof e==`string`&&e.trim()!==``?e.trim():void 0}function lu(e,t,n,r){return cu(n)??cu(e.name)??(r?su(r):void 0)??(cu(e.source)?su(e.source):void 0)??t}async function uu(e,t){if(typeof e!=`object`||!e)throw new g(`invalid-input`,`load() expects { before, after, … }.`);let{before:n,after:r}=e;if(n===void 0||r===void 0)throw new g(`invalid-input`,"load() needs both `before` and `after`.");let i=Xl();(nu(n)||nu(r))&&await t(`parse`);let a=await ou(n,`before`),o=await ou(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=cu(c.before.meta.version),d=cu(c.after.meta.version);return{diff:c,layout:l,layoutOptions:e.layout,names:{before:lu(a.meta,`before`,e.names?.before,a.filename),after:lu(o.meta,`after`,e.names?.after,o.filename)},versions:{...u?{before:u}:{},...d?{after:d}:{}},...cu(e.title)?{title:cu(e.title)}:{}}}async function du(e,t){await t(`match`);let n=Sn(e.diff.format===`kgdiff.diff.packed`?Cn(e.diff):e.diff);await t(`layout`);let r=Xo(e.layout),i=cu(n.before.meta.version),a=cu(n.after.meta.version),o=e.meta,s=er(e.view);return{diff:n,layout:r,layoutOptions:void 0,names:{before:lu(n.before.meta,`before`,o?.before?.name),after:lu(n.after.meta,`after`,o?.after?.name)},versions:{...i?{before:i}:{},...a?{after:a}:{}},...cu(o?.title)?{title:cu(o?.title)}:{},...s?{view:s}:{}}}var fu=[.5,1,2,4],pu=.5,mu=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=fu.find(t=>t===e);t!==void 0&&(this.#t=t)}cycleSpeed(){let e=fu.indexOf(this.#t);return this.#t=fu[(e+1)%fu.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+pu);this.#e=e??this.duration}else{let e=0;for(let n of this.#r)if(n<t-pu)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}},hu=`kgdiff:review:`;function gu(e,t){return`${hu}${e}→${t}`}function _u(){try{return typeof localStorage<`u`?localStorage:null}catch{return null}}var vu=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`});var t=e=>({key:Symbol.for(e)}),n=class extends Event{context;consumer;callback;constructor(e,t,n){super(`context-request`,{bubbles:!0,composed:!0}),this.context=e,this.consumer=t,this.callback=n}},r=class extends Event{context;constructor(e){super(`context-provider`,{bubbles:!0,composed:!0}),this.context=e}},i=new Set,a=!1;function o(){a||typeof document>`u`||(a=!0,document.addEventListener(`context-request`,e=>{for(let e of i)e.consumer.isConnected||i.delete(e);let t=e;i.add({context:t.context,consumer:t.consumer,via:e.composedPath()[0]??t.consumer,callback:t.callback})}),document.addEventListener(`context-provider`,e=>{let t=e.context.key;for(let e of[...i])e.context.key===t&&(i.delete(e),e.consumer.isConnected&&e.via.dispatchEvent(new n(e.context,e.consumer,e.callback)))}))}function s(e,t,r,i=null){o(),(i??e).dispatchEvent(new n(t,e,r))}function c(e,t,n){o();let i=e=>{let r=e;r.context?.key===t.key&&(e.stopPropagation(),r.callback(n()))};return e.addEventListener(`context-request`,i),e.dispatchEvent(new r(t)),()=>e.removeEventListener(`context-request`,i)}function l(e,t,n){return JSON.stringify([e,t,n])}function u(e){return e.charCodeAt(e.length-1)!==93}function d(e){return Array.isArray(e)}function f(e,t){if(e===t)return!0;if(e===void 0||t===void 0||e===null||t===null)return!1;if(typeof e!=`object`||typeof t!=`object`)return typeof e==`number`&&typeof t==`number`&&Number.isNaN(e)&&Number.isNaN(t);if(d(e)){if(!d(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!f(e[n],t[n]))return!1;return!0}return!d(t)&&_(e,t)}function p(){return{}}function m(e,t,n){t===`__proto__`?Object.defineProperty(e,t,{value:n,enumerable:!0,writable:!0,configurable:!0}):e[t]=n}function h(e,t){return Object.hasOwn(e,t)?e[t]:void 0}function g(e){return Object.keys(e).filter(t=>e[t]!==void 0)}function _(e,t,n){if(e===t)return!0;let r=0;for(let i of Object.keys(e)){let a=e[i];if(!(a===void 0||n?.has(i))&&(r++,!f(a,h(t,i))))return!1}let i=0;for(let e of Object.keys(t))t[e]!==void 0&&!n?.has(e)&&i++;return r===i}function v(e){return g(e).sort()}function y(e){for(let t of Object.keys(e))if(e[t]!==void 0)return!1;return!0}function b(e){return typeof e!=`object`||!e?e:d(e)?e.map(b):x(e)}function x(e){let t=p();for(let n of v(e))m(t,n,b(e[n]));return t}function S(e){return JSON.stringify(b(e))}var ee=class{seed;h1=0;h2=0;constructor(e=0){this.seed=e,this.reset()}reset(){return this.h1=3735928559^this.seed,this.h2=1103547991^this.seed,this}code(e){return this.h1=Math.imul(this.h1^e,2654435761),this.h2=Math.imul(this.h2^e,1597334677),this}update(e){let t=this.h1,n=this.h2;for(let r=0;r<e.length;r++){let i=e.charCodeAt(r);t=Math.imul(t^i,2654435761),n=Math.imul(n^i,1597334677)}return this.h1=t,this.h2=n,this}string(e){return this.code(e.length&65535).code(e.length>>>16).update(e)}value(e){if(e===void 0)return this.code(117);if(e===null)return this.code(110);switch(typeof e){case`boolean`:return this.code(e?116:102);case`number`:return this.code(100).string(String(e));case`string`:return this.code(115).string(e)}if(d(e)){this.code(97).code(e.length&65535).code(e.length>>>16);for(let t of e)this.value(t);return this}let t=Object.keys(e);if(t.length===0)return this.code(111).code(0).code(0);let n=t.length===1&&e[t[0]]!==void 0?t:v(e);this.code(111).code(n.length&65535).code(n.length>>>16);for(let t of n)this.string(t).value(e[t]);return this}digestPair(){let e=this.h1,t=this.h2;return e=Math.imul(e^e>>>16,2246822507),e^=Math.imul(t^t>>>13,3266489909),t=Math.imul(t^t>>>16,2246822507),t^=Math.imul(e^e>>>13,3266489909),[e>>>0,t>>>0]}digest(){let[e,t]=this.digestPair();return 4294967296*(2097151&t)+e}},C=class extends Error{code;details;name=`KgdiffError`;constructor(e,t,n){super(t),this.code=e,this.details=n}};function te(e,t){return e<t?-1:+(e>t)}function ne(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 re(e,t,n){let r=e.get(t);return r===void 0&&(r=n(),e.set(t,r)),r}function ie(e,t,n){let r=e.get(t);r?r.push(n):e.set(t,[n])}var w=Object.freeze([]);function ae(e,t){return t===void 0?0:(e.outgoing.get(t)?.length??0)+(e.incoming.get(t)?.length??0)}function T(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var oe=/^[\x20-\x7e]*$/;function se(e){return oe.test(e)?e:e.normalize(`NFC`)}var ce=/^\d+$/;function le(e){if(!e.includes(`%`))return e;try{return decodeURIComponent(e)}catch{return e}}function ue(e){let t=de.get(e);return t===void 0&&(de.size>=fe&&de.clear(),t=me(e),de.set(e,t)),t}var de=new Map,fe=4096,pe=/^https?:\/\/purl\.obolibrary\.org\/obo\/([A-Za-z][A-Za-z0-9]*)_(\d+)$/;function me(e){let t=pe.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===``||ce.test(a))return se(e);let o=le(a).replaceAll(`_`,` `).replace(/\s+/g,` `).trim();return se(o===``?e:o)}var he=new WeakMap;function ge(e,t){e.code(78).string(t.id).string(t.label),e.code(t.types.length);for(let n of t.types)e.string(n);e.code(t.aliases.length);for(let n of t.aliases)e.string(n);e.value(t.attrs).code(+!!t.deprecated),e.code(t.replaces.length);for(let n of t.replaces)e.string(n);e.code(t.replacedBy.length);for(let n of t.replacedBy)e.string(n)}function _e(e,t,n){e.code(69),n&&t.id!==void 0?e.code(1).string(t.id):e.code(0),e.string(t.source).string(t.predicate).string(t.target).string(t.label),e.value(t.attrs)}function ve(e){let t=he.get(e);if(t)return t;let n=new ee,r=0,i=0;for(let t of e.nodes.values()){ge(n.reset(),t);let[e,a]=n.digestPair();r=r+e>>>0,i=i+a>>>0}let a=e.edgeIdentity===`id`,o=0,s=0;for(let t of e.edges.values()){_e(n.reset(),t,a);let[e,r]=n.digestPair();o=o+e>>>0,s=s+r>>>0}let c=`c53:${new ee().update(`kgdiff.graph.v1|${e.nodes.size}|${r}|${i}|${e.edges.size}|${o}|${s}`).digest().toString(16).padStart(14,`0`)}`;return he.set(e,c),c}var ye=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`]),be=Object.freeze({strategy:`auto`,threshold:.82,suggestThreshold:.6,maxCandidates:8}),xe=new Set([`id`,`auto`,`similarity`]),Se=new Set([`structure`,`id`]);function Ce(e,t){throw new C(`invalid-input`,e,{option:t})}function we(e,t,n){return e===void 0?t:(typeof e==`number`&&e>=0&&e<=1||Ce(`${n} must be a number between 0 and 1 (got ${String(e)})`,n),e)}function Te(e,t,n){return e===void 0?[...t]:((!Array.isArray(e)||e.some(e=>typeof e!=`string`))&&Ce(`${n} must be an array of strings`,n),[...new Set(e)])}function Ee(e){if(e===void 0)return be;typeof e==`object`&&e||Ce(`match options must be an object`,`match`);let t=e.strategy??be.strategy;xe.has(t)||Ce(`match.strategy must be 'id', 'auto' or 'similarity' (got ${String(t)})`,`match.strategy`);let n=e.maxCandidates??be.maxCandidates;return(!Number.isInteger(n)||n<1)&&Ce(`match.maxCandidates must be a positive integer (got ${String(n)})`,`match.maxCandidates`),{strategy:t,threshold:we(e.threshold,be.threshold,`match.threshold`),suggestThreshold:we(e.suggestThreshold,be.suggestThreshold,`match.suggestThreshold`),maxCandidates:n}}function De(e,t=`structure`){return e===void 0?t:(typeof e==`string`&&Se.has(e)||Ce(`edgeIdentity must be 'structure' or 'id' (got ${String(e)})`,`edgeIdentity`),e)}function Oe(e){e===void 0||typeof e==`object`&&e||Ce(`options must be an object`,`options`);let t=e??{};for(let e of[`detectMerges`,`detectSplits`])t[e]!==void 0&&typeof t[e]!=`boolean`&&Ce(`${e} must be a boolean`,e);return{match:Ee(t.match),edgeIdentity:De(t.edgeIdentity),hierarchyPredicates:Te(t.hierarchyPredicates,ye,`hierarchyPredicates`),detectMerges:t.detectMerges??!0,detectSplits:t.detectSplits??!0,ignoreAttrs:Te(t.ignoreAttrs,[],`ignoreAttrs`).sort()}}var ke=Object.freeze({}),Ae=new Set([`create`,`drop`,`error`]);function je(e,t){throw new C(`invalid-input`,e,t)}function Me(e){let{format:t,version:n}=e;if(typeof t==`string`&&t.startsWith(`kgdiff.`)){if(t!==`kgdiff.graph`)throw new C(`unsupported-version`,`Expected a kgdiff graph (format "kgdiff.graph"), got format "${t}"`,{format:t});if(n!==1)throw new C(`unsupported-version`,`Unsupported graph version ${String(n)}; this reader supports version 1`,{version:n})}}function Ne(e){if(typeof e==`string`)return e===``?void 0:e;if(typeof e==`number`&&Number.isFinite(e))return String(e)}function Pe(e,t){return t===void 0?{what:`Node "${e}"`,ref:e}:{what:`Edge ${e} → ${t}`,ref:`${e} → ${t}`}}function Fe(e,t,n,r){let{what:i,ref:a}=Pe(e,t);return je(`${i}: ${n} must be ${r}`,{ref:a})}function Ie(e,t,n,r){if(e!=null)return typeof e!=`string`&&Fe(t,n,r,`a string`),e}function Le(e,t,n){return e==null?w:typeof e==`string`?[e]:((!Array.isArray(e)||e.some(e=>typeof e!=`string`))&&Fe(t,void 0,n,`an array of strings`),e)}var Re=1e3;function ze(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>=Re)throw new C(`invalid-input`,`Attribute values may be nested at most ${Re} 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=>ze(e,t+1,n)??null);let r=e.toJSON;if(typeof r==`function`)return ze(r.call(e),t+1,n);let i=p();for(let r of Object.keys(e)){let a=e[r],o=typeof a==`string`||typeof a==`boolean`||typeof a==`number`&&Number.isFinite(a)?a:ze(a,t+1,n);o!==void 0&&m(i,r,o)}return i}function Be(e,t,n,r){if(e==null)return;T(e)||Fe(t,n,`attrs`,`an object`);let i=0,a=ze(e,0,()=>i++);if(i>0){let{what:e,ref:a}=Pe(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 Ve(e){if(!T(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 He(e,t,n){let r=Le(e.type,t,`type`),i=Le(e.types,t,`types`),a=Le(e.aliases,t,`aliases`),o=i.length?[...r,...i]:r,s={id:t,types:o.length?o.map(se):w,aliases:a.length?a.map(se):w,replaces:Le(e.replaces,t,`replaces`),replacedBy:Le(e.replacedBy,t,`replacedBy`),implicit:e.implicit===!0},c=Ie(e.label,t,void 0,`label`);c&&(s.label=se(c));let l=Be(e.attrs,t,void 0,n);l&&(s.attrs=l),e.deprecated!==void 0&&e.deprecated!==null&&(typeof e.deprecated!=`boolean`&&Fe(t,void 0,`deprecated`,`a boolean`),s.deprecated=e.deprecated);let u=Ve(e.position);return u&&(s.position=u),s}function Ue(e,t){return e===void 0?t:t===void 0?e:S(t)>S(e)?t:e}function We(e,t){if(!e||!t)return e??t;let n=p();for(let r of new Set([...Object.keys(e),...Object.keys(t)])){let i=Ue(h(e,r),h(t,r));i!==void 0&&m(n,r,i)}return n}function Ge(e,t){let n=Ue(e.label,t.label);n!==void 0&&(e.label=n);let r=Ue(e.deprecated,t.deprecated);r!==void 0&&(e.deprecated=r);let i=Ue(e.position,t.position);i&&(e.position=i);let a=We(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 Ke(e){let t=e.label??e.id,n=ne(e.aliases),r=n.indexOf(t);r>=0&&n.splice(r,1);let i={id:e.id,label:t,types:e.types.length?ne(e.types):w,aliases:n.length?n:w,attrs:e.attrs??ke,deprecated:e.deprecated??!1,replaces:e.replaces.length?ne(e.replaces):w,replacedBy:e.replacedBy.length?ne(e.replacedBy):w,implicit:e.implicit};return e.position&&(i.position=e.position),i}function qe(e){return S([e.label,e.attrs])}function Je(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 Ye(e){return typeof e==`object`&&!!e&&e.nodes instanceof Map&&e.edges instanceof Map}function Xe(e,t={}){T(e)&&Me(e),T(e)&&Array.isArray(e.nodes)||je(`normalize expects a graph of the form { nodes: [...], edges: [...] }`),e.edges!==void 0&&e.edges!==null&&!Array.isArray(e.edges)&&je(`graph.edges must be an array`);let n=De(t.edgeIdentity),r=t.danglingEdges??`create`;Ae.has(r)||je(`danglingEdges must be 'create', 'drop' or 'error' (got ${String(r)})`);let i=[],a=new Map;for(let t of e.nodes){T(t)||je(`graph.nodes must contain objects`);let e=Ne(t.id);if(e===void 0){i.push({code:`empty-id`,message:`Dropped a node without an id`});continue}let n=He(t,e,i),r=a.get(e);r?(Ge(r,n),i.push({code:`duplicate-node`,message:`Node "${e}" is declared more than once; the declarations were merged`,ref:e})):a.set(e,n)}let o=new Map,s=[];for(let t of e.edges??[]){T(t)||je(`graph.edges must contain objects`);let e=t,n=Ne(e.source),c=Ne(e.target);if(n===void 0||c===void 0){i.push({code:`empty-id`,message:`Dropped an edge with an empty endpoint`});continue}let l=Ie(e.predicate,n,c,`predicate`)??``,u=Ie(e.label,n,c,`label`),d=u===void 0?void 0:se(u);if(d===void 0&&(d=o.get(l),d===void 0&&(d=ue(l),o.set(l,d))),(!a.has(n)||!a.has(c))&&(tt(n,l,c,r,a,i),r===`drop`))continue;let f=Ne(e.id),p=Be(e.attrs,n,c,i)??ke;s.push(f===void 0?{key:``,source:n,target:c,predicate:l,label:d,attrs:p}:{key:``,id:f,source:n,target:c,predicate:l,label:d,attrs:p})}let c=new Map;for(let[e,t]of a)c.set(e,Ke(t));let u=[],d=new Map,f=new Map;for(let e of s){let t=n===`id`&&e.id!==void 0,r=t?e.id:l(e.source,e.predicate,e.target),i=t?d:f,a=i.get(r);if(a)a.more?a.more.push(e):a.more=[e];else{let n={base:r,idKeyed:t,first:e};i.set(r,n),u.push(n)}}let p=n===`id`?new Set:void 0,m=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:a}=t;if(!a){r.key=m(n),t.edge=r;continue}let o=[],s=(e,t)=>{o.push(Je(m(e),t))};e?(s(n,nt([r,...a])),i.push({code:`duplicate-edge`,message:`Edge id "${n}" is used ${a.length+1} times; the declarations were merged`,ref:n})):rt(n,[r,...a],s,i),t.edges=o}let h=new Map;for(let e of u)if(e.edge)h.set(e.edge.key,e.edge);else for(let t of e.edges??[])h.set(t.key,t);return i.sort((e,t)=>te(e.code,t.code)||te(e.ref??``,t.ref??``)||te(e.message,t.message)),Qe(e.meta,c,h,n,i)}function Ze(e,t){let n=new Map,r=new Map;for(let i of e.values()){if(t&&!(t.has(i.source)&&t.has(i.target)))return;ie(n,i.source,i.key),ie(r,i.target,i.key)}return{outgoing:n,incoming:r}}function Qe(e,t,n,r,i,{outgoing:a,incoming:o}=Ze(n)){for(let e of t.keys())a.has(e)||a.set(e,w),o.has(e)||o.set(e,w);return{meta:T(e)?{...e}:{},nodes:t,edges:n,outgoing:a,incoming:o,edgeIdentity:r,issues:i}}function $e(e,t,n=e.id){let r=Ne(n);return r===void 0?void 0:Ke(He(e,r,t))}function et(e,t,n,r){let i=Ne(e.source),a=Ne(e.target);if(i===void 0||a===void 0)return;let o=Ie(e.predicate,i,a,`predicate`)??``,s=Ie(e.label,i,a,`label`),c=s===void 0?ue(o):se(s),u=Ne(e.id),d=Be(e.attrs,i,a,n)??ke,f=r??(t===`id`&&u!==void 0?u:l(i,o,a));return u===void 0?{key:f,source:i,target:a,predicate:o,label:c,attrs:d}:{key:f,id:u,source:i,target:a,predicate:o,label:c,attrs:d}}function tt(e,t,n,r,i,a){for(let o of e===n?[e]:[e,n])if(!i.has(o)){if(r===`error`)throw new C(`dangling-edge`,`Edge ${l(e,t,n)} points to the missing node "${o}"`,{source:e,predicate:t,target:n,missing:o});r===`create`&&i.set(o,{id:o,types:[],aliases:[],replaces:[],replacedBy:[],implicit:!0}),a.push({code:`dangling-edge`,message:r===`create`?`Edge endpoint "${o}" is not declared; an implicit node was created`:`Dropped an edge whose endpoint "${o}" is not declared`,ref:o})}}function nt(e){let t=e=>S([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=We(r,a.attrs)}return{...n,attrs:r??ke}}function rt(e,t,n,r){let i=new Map,a=0;for(let e of t){let t=qe(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)=>te(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})}var it=[`label`,`types`,`aliases`,`deprecated`,`replaces`,`replacedBy`];function at(e){if(!T(e)||e.format!==`kgdiff.delta`)throw new C(`unsupported-version`,`Not a kgdiff delta (expected format "kgdiff.delta")`,{format:T(e)?e.format:void 0});if(e.version!==1)throw new C(`unsupported-version`,`Unsupported delta version ${String(e.version)}; this reader supports version 1`,{version:e.version});if(De(e.edgeIdentity),!T(e.base)||typeof e.base.hash!=`string`)throw new C(`invalid-input`,`delta.base must describe the base graph (with a hash)`);if(!Array.isArray(e.ops))throw new C(`invalid-input`,`delta.ops must be an array`);e.ops.forEach(ut)}var E=e=>typeof e==`string`,ot=e=>Array.isArray(e)&&e.every(E),D=(e,t)=>e===void 0||t(e);function st(e){return T(e)&&E(e.id)&&D(e.label,E)&&D(e.types,ot)&&D(e.aliases,ot)&&D(e.attrs,T)&&D(e.deprecated,e=>typeof e==`boolean`)&&D(e.replaces,ot)&&D(e.replacedBy,ot)}function ct(e){return T(e)&&E(e.source)&&E(e.target)&&D(e.id,E)&&D(e.predicate,E)&&D(e.label,E)&&D(e.attrs,T)}function lt(e,t){return e===`label`?E(t):e===`deprecated`?typeof t==`boolean`:it.includes(e)&&ot(t)}function ut(e,t){let n=n=>{throw new C(`invalid-input`,`delta.ops[${t}] ${n}`,{opIndex:t,op:e})};T(e)||n(`is not an op`);let r=e;switch(r.op){case`node.rekey`:E(r.from)&&E(r.to)||n(`needs string "from" and "to"`);return;case`node.remove`:case`node.add`:st(r.node)||n(`needs a valid "node" snapshot`);return;case`node.set`:E(r.id)||n(`needs a string "id"`),lt(r.field,r.from)&<(r.field,r.to)||n(`has values that do not fit the field ${JSON.stringify(r.field)}`);return;case`node.attr`:E(r.id)&&E(r.key)||n(`needs a string "id" and "key"`);return;case`edge.remove`:case`edge.add`:ct(r.edge)||n(`needs a valid "edge" snapshot`);return;case`edge.set`:ct(r.edge)&&r.field===`label`&&E(r.from)&&E(r.to)||n(`needs an "edge", field "label" and string "from" / "to"`);return;case`edge.attr`:ct(r.edge)&&E(r.key)||n(`needs an "edge" and a string "key"`);return;default:n(`has an unknown op ${JSON.stringify(r.op)}`)}}function dt(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 ft=[`rekey`,`rename`,`mergedInto`,`mergeTarget`,`splitFrom`,`splitInto`,`move`,`deprecate`,`replacement`,`types`,`aliases`,`attrs`,`retarget`,`predicate`,`label`,`collapsed`],pt=Object.freeze([]);function mt(e){let t;return()=>(t??=e(),t)}function ht(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 gt(e,t,n){let r=mt(()=>ht(e,e=>e.id)),i=mt(()=>ht(e,e=>e.beforeId)),a=mt(()=>ht(e,e=>e.afterId)),o=mt(()=>ht(t,e=>e.id)),s=mt(()=>ht(n,e=>e.id)),c=mt(()=>{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)??pt}}function _t(e,t){let n=new Set,r=e=>{let t={added:0,removed:0,modified:0};for(let r of e){r.status!==`unchanged`&&t[r.status]++;for(let e of r.facets)n.add(e.kind)}return t};return{nodes:r(e),edges:r(t),facets:ft.filter(e=>n.has(e))}}var vt=[`add`,`remove`,`merge`,`split`,`modify`,`relations`],yt=()=>({added:0,removed:0,modified:0,unchanged:0});function bt(e,t,n,r,i){let a=yt(),o=yt(),s=Object.fromEntries(ft.map(e=>[e,0])),c=new Map,l=e=>{if(e.length!==0)for(let t of new Set(e.map(e=>e.kind)))s[t]++};for(let e of n){a[e.status]++,l(e.facets);let t=(e.after??e.before)?.types[0]??``;re(c,t,yt)[e.status]++}for(let e of r)o[e.status]++,l(e.facets);let u=Object.fromEntries(vt.map(e=>[e,0]));for(let e of i)u[e.kind]++;let d=e=>e.added+e.removed+e.modified,f=[...c].map(([e,t])=>({type:e,...t})).sort((e,t)=>d(t)-d(e)||te(e.type,t.type));return{nodes:a,edges:o,before:{nodes:e.nodes.size,edges:e.edges.size},after:{nodes:t.nodes.size,edges:t.edges.size},facets:s,hunks:u,byType:f,identical:d(a)+d(o)===0}}var xt={added:`only an after version`,removed:`only a before version`,unchanged:`both versions`,modified:`both versions`};function St(e,t,n=``){throw new C(`invalid-input`,`${e} is ${t}, so it must have ${xt[t]}${n}`)}function Ct(e,t,n){let{id:r,status:i,facets:a,beforeId:o,afterId:s,before:c,after:l}=e,u=`Union node "${r}"`,d=` (beforeId and before, afterId and after)`,f={before:ae(t,o),after:ae(n,s)},p;return i===`added`?((!l||s===void 0||c||o!==void 0)&&St(u,i,d),p={id:r,status:i,facets:a,label:l.label,types:l.types,degree:f,afterId:s,after:l}):i===`removed`?((!c||o===void 0||l||s!==void 0)&&St(u,i,d),p={id:r,status:i,facets:a,label:c.label,types:c.types,degree:f,beforeId:o,before:c}):(l&&c&&s!==void 0&&o!==void 0||St(u,i,d),p={id:r,status:i,facets:a,label:l.label,types:l.types,degree:f,beforeId:o,afterId:s,before:c,after:l}),e.hunk!==void 0&&(p.hunk=e.hunk),p}function wt(e){let{id:t,source:n,target:r,predicate:i,label:a,status:o,facets:s,hierarchical:c}=e,{before:l,after:u,beforeKey:d,afterKey:f}=e,p=`Union edge ${t}`,m=e.sourceBefore!==void 0||e.targetBefore!==void 0||e.predicateBefore!==void 0,h;if(o===`added`)(!u||f===void 0||l||d!==void 0)&&St(p,o),m&&St(p,o,` and no before-version endpoints or predicate`),h={id:t,source:n,target:r,predicate:i,label:a,status:o,facets:s,hierarchical:c,afterKey:f,after:u};else if(o===`removed`)(!l||d===void 0||u||f!==void 0)&&St(p,o),m&&St(p,o,` and no before-version endpoints or predicate`),h={id:t,source:n,target:r,predicate:i,label:a,status:o,facets:s,hierarchical:c,beforeKey:d,before:l};else{u&&l&&f!==void 0&&d!==void 0||St(p,o);let m={id:t,source:n,target:r,predicate:i,label:a,status:o,facets:s,hierarchical:c,beforeKey:d,afterKey:f,before:l,after:u};e.sourceBefore!==void 0&&(m.sourceBefore=e.sourceBefore),e.targetBefore!==void 0&&(m.targetBefore=e.targetBefore),e.predicateBefore!==void 0&&(m.predicateBefore=e.predicateBefore),h=m}return e.hunk!==void 0&&(h.hunk=e.hunk),h}function O(e){return String(Math.trunc(e)).replace(/\B(?=(\d{3})+(?!\d))/g,`,`)}function Tt(e){return`${Math.round(e*100)}%`}var Et={node:[`node`,`nodes`],relation:[`relation`,`relations`],attribute:[`attribute`,`attributes`],type:[`type`,`types`],synonym:[`synonym`,`synonyms`],duplicate:[`duplicate`,`duplicates`]},Dt={node:[`个`,`节点`],relation:[`条`,`关系`],attribute:[`个`,`属性`],type:[`个`,`类型`],synonym:[`个`,`别名`],duplicate:[`条`,`重复关系`]};function Ot(e,t,n){let r=[];return e&&r.push(`+${O(e)}`),t&&r.push(`−${O(t)}`),n&&r.push(`~${O(n)}`),r.join(` `)}var kt=(()=>{let e=e=>{let[t,n]=e.split(Nt);return n===void 0?`“${e}”`:`“${t}” (${n})`},t=(e,t)=>`${O(e)} ${Et[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 ${O(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=`${O(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?`${Ot(t,n,r)} ${Et[e][i===1?0:1]}`:``},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=>`${O(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:` · `}})(),At={en:kt,"zh-CN":(()=>{let e=e=>{let[t,n]=e.split(Nt);return n===void 0?`「${e}」`:`「${t}」(${n})`},t=(e,t)=>`${O(e)} ${Dt[t][0]}${Dt[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]}等 ${O(n)} 个节点`},r=n=>(r,i,a)=>{let o=e(r[0]??``),s=i<=1?o:i===2?`${o}和${e(r[1]??``)}`:`${o}等 ${O(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?`${Dt[e][1]} ${Ot(t,n,r)}`:``,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=>`${O(e)} 条关系改为指向新节点`,relationRetargeted:`关系改为指向新节点`,relationResourced:`关系改为来自新节点`,relationTypeChanged:`关系类型变更`,newRelation:`新关系`,relationRemoved:`关系已删除`,relabeled:(t,n)=>`标签${e(t)}→${e(n)}`,hierarchy:`层级关系`},separator:` · `}})()};function jt(e){return At[e??`en`]??kt}var Mt=40,Nt=`\0`;function Pt(e){let t=new Map;for(let n of e)re(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 Ft(e){let t=Array.from(e);return t.length>Mt?`${t.slice(0,39).join(``)}…`:e}function It(e,t){return Ft(e.index.node(t)?.label??t)}function Lt(e){return Ft(e.before?.label??e.label)}function Rt(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`?It(e,r.id):Lt(r):t}function zt(e,t){return e.names(t,t.length)}function Bt(e,t){return e.facets.find(e=>e.kind===t)}function Vt(e,t){return e.facets.find(e=>e.kind===t)}function Ht(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 Wt(e,t){return t.filter(e=>!!e).join(e.separator)}function Gt(e,t){let n=[],r=Bt(t,`attrs`);r&&n.push(e.delta(`attribute`,...Ht(r.changes)));let i=Bt(t,`types`);i&&n.push(e.delta(`type`,i.added.length,i.removed.length,0));let a=Bt(t,`aliases`);return a&&n.push(e.delta(`synonym`,a.added.length,a.removed.length,0)),n}function Kt(e,t,n){let r=Bt(n,`replacement`);if(!r)return[];let i=(n,r)=>zt(e,n.map(e=>Rt(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 qt(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(Tt(n)):e.note.confidence(Tt(n))}function Jt(e,t,n){let r=t.filter(e=>e.facets.some(e=>e.kind===`retarget`&&e.cause===n)),i=t.filter(e=>Vt(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 Yt({p:e,diff:t,hunk:n,edges:r,anchor:i}){let a=((i?Bt(i,`mergeTarget`):void 0)?.sources??[]).map(e=>t.index.node(e)).filter(e=>e!==void 0),o=a.map(e=>Bt(e,`mergedInto`)).filter(e=>e!==void 0),s=Pt([{id:n.anchor,name:It(t,n.anchor)},...a.map(e=>({id:e.beforeId??e.id,name:Lt(e)}))]);return{title:e.title.merged(e.names(s.slice(1),a.length),e.quote(s[0])),subtitle:Wt(e,[o.length?qt(e,o):``,...Jt(e,r,`merge`),a.some(e=>e.status!==`removed`)?e.note.keptDeprecated:``,...i?Gt(e,i):[]])}}function Xt({p:e,diff:t,hunk:n,edges:r,anchor:i}){let a=i?Bt(i,`splitInto`)?.targets??[]:[],o=a.map(e=>t.index.node(e)).filter(e=>e!==void 0).map(e=>Bt(e,`splitFrom`)).filter(e=>e!==void 0),s=Pt([{id:n.anchor,name:Lt(i??t.index.node(n.anchor))},...a.map(e=>({id:e,name:It(t,e)}))]),c=e.title.split(e.quote(s[0]),e.names(s.slice(1),a.length)),l=i?.after;return{title:c,subtitle:Wt(e,[o.length?qt(e,o):``,...Jt(e,r,`split`),l?l.deprecated?e.note.sourceKeptDeprecated:e.note.sourceKept:``])}}function Zt({p:e,diff:t,hunk:n,nodes:r,anchor:i},a){let o=[n.anchor,...n.nodes.filter(e=>e!==n.anchor)].map(e=>It(t,e)),s=(a?e.title.added:e.title.removed)(o,r.length,n.edges.length),c=n.context.map(e=>It(t,e)),l=i?.types??[];return{title:s,subtitle:Wt(e,[l.length?e.note.typed(l.join(`, `)):``,c.length?(a?e.note.linkedTo:e.note.wasLinkedTo)(zt(e,c)):e.note.standalone])}}function Qt({p:e,diff:t,edges:n,anchor:r}){let i=r,a=It(t,i.id),o=Bt(i,`rename`),s=i.facets.filter(e=>e.kind===`move`),c=[...new Set(s.flatMap(e=>e.to))].map(e=>It(t,e)),l=[...new Set(s.flatMap(e=>e.from))].map(e=>It(t,e)),u=Bt(i,`deprecate`),d=Bt(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(Ft(o.from),Ft(o.to)),g=`rename`;else if(s.length)h=c.length?e.title.moved(a,zt(e,c)):e.title.detached(a,zt(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(Tt(d.score)))),_.push(...Gt(e,i)),s.length&&(g===`move`?c.length&&l.length&&_.push(e.note.movedFrom(zt(e,l))):_.push(c.length?e.note.movedUnder(zt(e,c)):e.note.detachedFrom(zt(e,l)))),u&&g!==`deprecate`&&_.push(u.deprecated?e.note.deprecated:e.note.restored),_.push(...Kt(e,t,i)),_.push(e.delta(`relation`,...Ut(p))),{title:h,subtitle:Wt(e,_)}}function $t({p:e,diff:t,hunk:n,edges:r}){let i=It(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=>Vt(e,`retarget`)).length;return{title:s,subtitle:Wt(e,[e.delta(`relation`,t,n,a),c?e.note.retargeted(c):``])}}let o=Ft(a.label),s=a.facets.filter(e=>e.kind===`retarget`),c=s.length===1?s[0]:void 0,[l=``,u=``,d=``,f=``]=Pt([a.source,a.target,...c?[c.from,c.to]:[]].map(e=>({id:e,name:It(t,e)}))),p=Vt(a,`predicate`),m=Vt(a,`label`),h=Vt(a,`attrs`),g=[m?e.note.relabeled(Ft(m.from),Ft(m.to)):``,h?e.delta(`attribute`,...Ht(h.changes)):``,a.hierarchical?e.note.hierarchy:``];if(c&&!p)return c.end===`target`?{title:e.title.pointsTo(l,o,f,d),subtitle:Wt(e,[e.note.relationRetargeted,...g])}:{title:e.title.comesFrom(u,o,f,d),subtitle:Wt(e,[e.note.relationResourced,...g])};if(p&&s.length===0){let t=Ft(a.before?.label??p.from);return{title:e.title.predicate(l,u,t,o),subtitle:Wt(e,[e.note.relationTypeChanged,...g])}}return a.status===`added`?{title:e.title.edgeAdded(l,o,u),subtitle:Wt(e,[e.note.newRelation,...g])}:a.status===`removed`?{title:e.title.edgeRemoved(l,o,u),subtitle:Wt(e,[e.note.relationRemoved,...g])}:{title:e.title.edgeEdited(l,o,u),subtitle:Wt(e,g)}}function en(e,t,n){let r=jt(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 C(`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 Yt(o);case`split`:return Xt(o);case`add`:return Zt(o,!0);case`remove`:return Zt(o,!1);case`modify`:return o.anchor?Qt(o):$t(o);case`relations`:return $t(o);default:{let t=e.kind;throw new C(`invalid-input`,`Unknown hunk kind "${String(t)}"`)}}}var tn=e=>new Set(Object.keys(e)),nn=tn({rekey:!0,rename:!0,mergedInto:!0,mergeTarget:!0,splitFrom:!0,splitInto:!0,move:!0,deprecate:!0,replacement:!0,types:!0,aliases:!0,attrs:!0}),rn=tn({retarget:!0,predicate:!0,label:!0,attrs:!0,collapsed:!0}),an=tn({add:!0,remove:!0,merge:!0,split:!0,modify:!0,relations:!0}),on=tn({remove:!0,restructure:!0,modify:!0,add:!0});function k(e){throw new C(`invalid-input`,e)}var sn=e=>Array.isArray(e)&&e.every(e=>typeof e==`string`);function cn(e,t){let n=new Map;for(let r of e)n.has(r.id)&&k(`The ${t} id "${r.id}" is used more than once`),n.set(r.id,r);return n}function ln(e,t){T(e)&&typeof e.id==`string`&&an.has(e.kind)&&on.has(e.phase)&&typeof e.anchor==`string`&&sn(e.nodes)&&sn(e.edges)&&sn(e.context)&&sn(e.requires)&&Array.isArray(e.ops)&&T(e.summary)||k(`diff.hunks[${t}] needs a string id and anchor, a known kind and phase, nodes / edges / context / requires lists of ids, ops and a summary`)}function un(e,t,n,r,i,a){(!Array.isArray(n)||n.some(e=>!T(e)||!r.has(e.kind)))&&k(`${e}: facets must be a list of known facets`),t===`unchanged`?(n.length>0&&k(`${e} is unchanged but has facets`),i!==void 0&&k(`${e} is unchanged but belongs to a hunk`)):(t===`modified`&&n.length===0&&k(`${e} is modified but has no facets`),i===void 0&&k(`${e} is ${t} but belongs to no hunk`),typeof i==`string`&&a.has(i)||k(`${e} belongs to the hunk ${JSON.stringify(i)}, which the diff does not have`))}function dn(e,t,n){let r=`Union edge ${e.id}`;for(let n of[e.source,e.target,e.sourceBefore,e.targetBefore])n!==void 0&&!t.has(n)&&k(`${r} points to "${n}", which is not a union node`);e.after&&(e.after.source!==e.source||e.after.target!==e.target)&&k(`${r}: source and target must be the endpoints of its after version`);let i=(t,n)=>e.facets.some(e=>e.kind===t&&(n===void 0||e.end===n));if(e.sourceBefore===void 0||e.sourceBefore!==e.source&&i(`retarget`,`source`)||k(`${r}: sourceBefore needs another source and a source retarget facet`),e.targetBefore===void 0||e.targetBefore!==e.target&&i(`retarget`,`target`)||k(`${r}: targetBefore needs another target and a target retarget facet`),e.predicateBefore===void 0||e.predicateBefore!==e.predicate&&i(`predicate`)||k(`${r}: predicateBefore needs another predicate and a predicate facet`),e.before){let t=n.get(e.before.source),i=n.get(e.before.target);(t!==(e.sourceBefore??e.source)||i!==(e.targetBefore??e.target))&&k(`${r}: its before version's endpoints must be sourceBefore ?? source, targetBefore ?? target`),(e.predicateBefore??e.predicate)!==e.before.predicate&&k(`${r}: its before version's predicate must be predicateBefore ?? predicate`)}}function fn(e,t,n,r){let i=new Set,a=new Set,o=new Uint8Array(e.delta.ops.length);e.hunks.forEach((e,s)=>{let c=`Hunk "${e.id}"`;e.order!==s&&k(`${c} has order ${String(e.order)} but is listed at ${s}`),t.has(e.anchor)||k(`${c} is anchored on "${e.anchor}", which is not a union node`);let l=e.nodes.map(n=>{let r=t.get(n);return(!r||r.hunk!==e.id||i.has(n))&&k(`${c} lists the node "${n}", which is not one of its own`),i.add(n),r}),u=e.edges.map(t=>{let r=n.get(t);return(!r||r.hunk!==e.id||a.has(t))&&k(`${c} lists the edge ${t}, which is not one of its own`),a.add(t),r});for(let n of e.context)t.has(n)||k(`${c} has "${n}" as context, which is not a union node`);let d=-1;for(let t of e.ops)(typeof t!=`number`||!Number.isInteger(t)||t<=d||t>=o.length)&&k(`${c}: ops must be ascending indices into delta.ops`),o[t]&&k(`delta.ops[${t}] belongs to more than one hunk`),o[t]=1,d=t;for(let t of e.requires)t!==e.id&&r.has(t)||k(`${c} requires "${t}", which is not another hunk`);S(_t(l,u))!==S(e.summary)&&k(`${c}: its summary does not match its nodes and edges`)});let s=e=>e.reduce((e,t)=>e+(t.hunk===void 0?0:1),0);i.size!==s(e.nodes)&&k(`A union node names a hunk that does not list it`),a.size!==s(e.edges)&&k(`A union edge names a hunk that does not list it`)}function pn(e){at(e.delta),e.delta.edgeIdentity!==e.options.edgeIdentity&&k(`The delta uses another edge identity than the diff`);let t=(e,t,n)=>{let r=n===`base`?`before`:`after`;(e.nodes!==t.nodes.size||e.edges!==t.edges.size)&&k(`delta.${n} counts other nodes / edges than the ${r} graph of the diff`),e.hash!==ve(t)&&k(`delta.${n} is another graph (hash ${e.hash}) than the ${r} graph of the diff`)};t(e.delta.base,e.before,`base`),t(e.delta.target,e.after,`target`)}function mn(e){let t=cn(e.nodes,`union node`),n=cn(e.edges,`union edge`);e.hunks.forEach((e,t)=>{ln(e,t)});let r=cn(e.hunks,`hunk`),i=new Map;for(let t of e.nodes)un(`Union node "${t.id}"`,t.status,t.facets,nn,t.hunk,r),t.beforeId!==void 0&&i.set(t.beforeId,t.id);for(let n of e.edges)un(`Union edge ${n.id}`,n.status,n.facets,rn,n.hunk,r),dn(n,t,i);fn(e,t,n,r),pn(e),S(bt(e.before,e.after,e.nodes,e.edges,e.hunks))!==S(e.stats)&&k(`diff.stats do not match the union elements and hunks`)}function A(e){throw new C(`invalid-input`,e)}var hn=new Set([`unchanged`,`added`,`removed`,`modified`]);function gn(e){let t=e,n=t.meta;T(n)&&T(n.before)&&T(n.after)||A(`A kgdiff diff needs meta.before and meta.after objects`),T(t.options)||A(`A kgdiff diff needs an options object`);for(let e of[`nodes`,`edges`,`hunks`])Array.isArray(t[e])||A(`A kgdiff diff needs a ${e} array`);for(let e of[`matches`,`suggestions`])t[e]!==void 0&&!Array.isArray(t[e])&&A(`diff.${e} must be an array`);T(t.delta)||A(`A kgdiff diff needs a delta`),T(t.stats)||A(`A kgdiff diff needs stats`);let r=e=>e.status===`added`&&e.before!==void 0?`before`:e.status===`removed`&&e.after!==void 0?`after`:void 0;e.nodes.forEach((e,t)=>{T(e)&&typeof e.id==`string`&&hn.has(e.status)||A(`diff.nodes[${t}] needs a string id and a valid status`);let n=r(e);n&&A(`diff.nodes[${t}] ("${e.id}") is ${e.status}, so it has no ${n} snapshot`)}),e.edges.forEach((e,t)=>{T(e)&&typeof e.id==`string`&&typeof e.source==`string`&&typeof e.target==`string`&&hn.has(e.status)||A(`diff.edges[${t}] needs string id / source / target and a valid status`);let n=r(e);n&&A(`diff.edges[${t}] (${e.id}) is ${e.status}, so it has no ${n} snapshot`)})}function _n(e){return{...e}}function vn(e,t){if(t===`id`&&e.id!==void 0)return`i${e.id}`;let n=e.predicate??``,r=e.label??ue(n);return`t${l(e.source,n,e.target)}\u0000${S([r,e.attrs??{}])}`}function yn(e,t,n){if(n===`id`&&(e.id!==void 0||t.id!==void 0))return e.id===t.id;let r=t.predicate??``;return e.source===t.source&&e.target===t.target&&e.predicate===r&&e.label===(t.label??ue(r))&&(t.attrs===void 0||t.attrs===null?y(e.attrs):_(e.attrs,t.attrs))}function bn(e){let t=e.edgeIdentity,n;return r=>{let i=t===`id`&&r.id!==void 0?r.id:l(r.source,r.predicate??``,r.target),a=e.edges.get(i);if(a&&yn(a,r,t))return a;if(!n){n=new Map;for(let r of e.edges.values())n.set(vn(r,t),r)}return n.get(vn(r,t))}}var xn=e=>e!==`added`,Sn=e=>e!==`removed`;function Cn(e,t){let n=[];for(let t of e.nodes)Sn(t.status)&&(t.after||A(`Union node "${t.id}" (${t.status}) has no after snapshot`),n.push(_n(t.after)));let r=[];for(let t of e.edges)Sn(t.status)&&(t.after||A(`Union edge ${t.id} (${t.status}) has no after snapshot`),r.push(t.after));let i=Xe({meta:e.meta.after,nodes:n,edges:r},{edgeIdentity:t}),a=[];for(let t of e.nodes){if(!xn(t.status))continue;if(t.before){a.push(_n(t.before));continue}let e=t.afterId===void 0?void 0:i.nodes.get(t.afterId);e&&t.beforeId!==void 0||A(`Union node "${t.id}" has no before snapshot`),a.push(dt({...e,id:t.beforeId}))}let o=[];for(let t of e.edges){if(!xn(t.status))continue;let e=t.before??t.after;e||A(`Union edge ${t.id} has no before snapshot`),o.push(e)}let s=Xe({meta:e.meta.before,nodes:a,edges:o},{edgeIdentity:t}),c=bn(s),l=bn(i);return{before:s,after:i,beforeEdge(e){let t=e.before??e.after;return xn(e.status)&&t?c(t):void 0},afterEdge:e=>Sn(e.status)&&e.after?l(e.after):void 0}}function wn(e,t){try{return Tn(e,t)}catch{return}}function Tn(e,t){if(t===`structure`&&e.edges.some(e=>u(e.id)))return;let n=[],r=new Map;for(let t of e.nodes){if(!Sn(t.status))continue;let e=T(t.after)?$e(t.after,n):void 0;if(!e||r.size===r.set(e.id,e).size)return}let i=new Map;for(let t of e.nodes){if(!xn(t.status))continue;let e;if(t.before)e=T(t.before)?$e(t.before,n):void 0;else{let i=t.afterId===void 0?void 0:r.get(t.afterId);i&&t.beforeId!==void 0&&(e=$e(i,n,t.beforeId))}if(!e||i.size===i.set(e.id,e).size)return}let a=new Map,o=new Map,s=(e,r,i)=>{if(!T(e))return;let a=et(e,t,n,i);return a&&yn(a,e,t)&&r.size<r.set(a.key,a).size?a:void 0},c=[],l=[];for(let t of e.edges){let e;if(Sn(t.status)&&(e=s(t.after,a),!e))return;let n;if(xn(t.status)){let r=t.before??t.after;if(n=s(r,o,r===t.after?e?.key:void 0),!n)return}c.push(e),l.push(n)}let d=Ze(a,r),f=d&&Ze(o,i);if(!(n.length>0||!f||!d))return{before:Qe(e.meta.before,i,o,t,[],f),after:Qe(e.meta.after,r,a,t,[],d),beforeEdge:(e,t)=>l[t],afterEdge:(e,t)=>c[t]}}function En(e){if(!T(e)||e.format!==`kgdiff.diff`)throw new C(`unsupported-version`,`Not a kgdiff diff (expected format "kgdiff.diff")`);if(e.version!==1)throw new C(`unsupported-version`,`Unsupported diff version ${String(e.version)}; this reader supports version 1`,{version:e.version});gn(e);let t=Oe(e.options),n=t.edgeIdentity,r=wn(e,n)??Cn(e,n),{before:i,after:a}=r,o=e.nodes.map(e=>{let t={id:e.id,status:e.status,facets:e.facets??[]};if(e.beforeId!==void 0){t.beforeId=e.beforeId;let n=xn(e.status)?i.nodes.get(e.beforeId):void 0;n&&(t.before=n)}if(e.afterId!==void 0){t.afterId=e.afterId;let n=Sn(e.status)?a.nodes.get(e.afterId):void 0;n&&(t.after=n)}return e.hunk!==void 0&&(t.hunk=e.hunk),Ct(t,i,a)}),s=new Set(t.hierarchyPredicates),c=e.edges.map((e,t)=>{let n=r.beforeEdge(e,t),i=r.afterEdge(e,t),a=i??n;a||A(`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:s.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),n&&(o.beforeKey=n.key,o.before=n),i&&(o.afterKey=i.key,o.after=i),e.hunk!==void 0&&(o.hunk=e.hunk),wt(o)}),l=e.hunks,{delta:u,stats:d}=e;return mn({before:i,after:a,options:t,nodes:o,edges:c,hunks:l,delta:u,stats:d}),{before:i,after:a,options:t,nodes:o,edges:c,hunks:l,matches:e.matches??[],suggestions:e.suggestions??[],delta:u,stats:d,index:gt(o,c,l)}}function Dn(e){throw new C(`invalid-input`,`Packed diff: ${e}`)}function On(e,t){let n=[],r=0,i=0;for(;r<e.length&&i<t.length;)n.push(e[r].id<t[i].id?e[r++]:t[i++]);for(;r<e.length;)n.push(e[r++]);for(;i<t.length;)n.push(t[i++]);return n}function kn(e){if(!T(e)||e.format!==`kgdiff.diff.packed`)throw new C(`unsupported-version`,`Not a packed kgdiff diff (expected format "kgdiff.diff.packed")`);if(e.version!==1)throw new C(`unsupported-version`,`Unsupported packed diff version ${String(e.version)}; this reader supports version 1`,{version:e.version});let{strings:t,unchangedNodes:n,unchangedEdges:r}=e;(!Array.isArray(t)||t.some(e=>typeof e!=`string`))&&Dn(`strings must be a list of strings`),Array.isArray(n)&&n.length%2==0||Dn(`unchangedNodes must be a list of (id, snapshot) pairs`),Array.isArray(r)&&r.length%3==0||Dn(`unchangedEdges must be a list of (source, predicate, target) triples`),Array.isArray(e.nodes)&&Array.isArray(e.edges)||Dn(`nodes and edges must be lists`);let i=(e,n)=>((typeof e!=`number`||!Number.isInteger(e)||e<0||e>=t.length)&&Dn(`${n} is not an index into strings`),t[e]),a=[];for(let e=0;e<n.length;e+=2){let t=i(n[e],`unchangedNodes[${e}]`),r=n[e+1];r!==0&&(!T(r)||Object.hasOwn(r,`id`))&&Dn(`unchangedNodes[${e+1}] is not a snapshot without an id`);let o=r===0?{id:t}:{id:t,...r};a.push({id:t,beforeId:t,afterId:t,after:o,status:`unchanged`})}let o=[];for(let e=0;e<r.length;e+=3){let t=i(r[e],`unchangedEdges[${e}]`),n=i(r[e+1],`unchangedEdges[${e+1}]`),a=i(r[e+2],`unchangedEdges[${e+2}]`),s=n===``?{source:t,target:a}:{source:t,target:a,predicate:n};o.push({id:l(t,n,a),source:t,target:a,after:s,status:`unchanged`})}return{format:`kgdiff.diff`,version:1,meta:e.meta,options:e.options,nodes:On(a,e.nodes),edges:On(o,e.edges),hunks:e.hunks,matches:e.matches,suggestions:e.suggestions,delta:e.delta,stats:e.stats}}function An(e){return Ye(e)}function jn(e){return En(e)}function Mn(e){return kn(e)}function Nn(e,t,n){return en(e,t,n)}var Pn=1,Fn=.6,In=.68,Ln=.56,Rn=.3,zn=.5,Bn=[[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]],Vn=/[\p{Mn}\p{Me}\p{Cf}\p{Cc}]/u,Hn=/\s/u,Un=/\p{Nd}/u,Wn=/\p{Lu}/u;function Gn(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 Kn(e){return e===32||e===9?Rn:e<32||e===127?0:e>=48&&e<=57?Fn:e>=65&&e<=90?In:Ln}function qn(e){let t=e.codePointAt(0)??0;return t<128?Kn(t):Vn.test(e)||t>=127995&&t<=127999?0:t>=127462&&t<=127487?zn:Gn(t,Bn)?Pn:Hn.test(e)?Rn:Un.test(e)?Fn:Wn.test(e)?In:Ln}function Jn(e,t){let n=0;for(let t=0;t<e.length;t++){let r=e.charCodeAt(t);if(r<128){n+=Kn(r);continue}let i=e.codePointAt(t)??r,a=String.fromCodePoint(i);i>65535&&t++,n+=qn(a)}return n*t}var Yn=([e],[t])=>e<t?-1:+(e>t);function Xn(e){return[...e].sort(Yn)}function Zn(e,t){throw new C(`invalid-input`,`layoutFromJSON: ${e}`,t)}var Qn=e=>typeof e==`object`&&!!e&&!Array.isArray(e),$n=e=>typeof e==`number`&&Number.isFinite(e);function er(e,t){return Qn(e)&&[e.x,e.y,e.width,e.height].every($n)||Zn(`${t} must be a rectangle`,{where:t}),Object.freeze({x:e.x,y:e.y,width:e.width,height:e.height})}function tr(e,t){Qn(e)||Zn(`${t} must be an object`,{where:t});let n=new Map;for(let[r,i]of Xn(Object.entries(e)))$n(i)||Zn(`${t}["${r}"] must be a finite number`,{where:t,id:r}),n.set(r,i);return n}function nr(e){let t=e;if(Qn(t)&&t.format===`kgdiff.layout`||Zn(`not a kgdiff.layout document`),t.version!==1)throw new C(`unsupported-version`,`Unsupported kgdiff.layout version ${String(t.version)}`,{version:t.version});let n=t.strategy;n!==`union`&&n!==`anchored`&&Zn(`strategy must be union or anchored`);let r=t.scope;r!==`all`&&r!==`changes`&&Zn(`scope must be all or changes`);let i=t.iterations;(!$n(i)||i<0)&&Zn(`iterations must be a number ≥ 0`),Qn(t.positions)||Zn(`positions must be an object`);let a=new Map;for(let[e,n]of Xn(Object.entries(t.positions)))Array.isArray(n)&&n.length===2&&$n(n[0])&&$n(n[1])||Zn(`positions["${e}"] must be [x, y]`,{id:e}),a.set(e,Object.freeze({x:n[0],y:n[1]}));let o=tr(t.radii,`radii`),s=tr(t.hidden,`hidden`);Array.isArray(t.components)||Zn(`components must be an array`);let c=t.components.map((e,t)=>(Qn(e)&&Array.isArray(e.nodes)&&e.nodes.every(e=>typeof e==`string`)||Zn(`components[${t}] must have a nodes array`,{index:t}),Object.freeze({nodes:Object.freeze([...e.nodes]),bounds:er(e.bounds,`components[${t}].bounds`)})));return Object.freeze({positions:a,radii:o,bounds:er(t.bounds,`bounds`),scope:r,hidden:s,components:Object.freeze(c),stats:Object.freeze({strategy:n,iterations:i,nodes:a.size,ms:0})})}function rr(e){return Math.min(14,Math.max(4,4+2.2*Math.sqrt(Math.max(0,e))))}function ir(e,t){return Jn(e,t)}function ar(e){return nr(e)}var j={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},or=Object.freeze([3,2.5]),sr=Object.freeze([4,3]),cr=Object.freeze([1,3]),lr={glowScale:2.6,glowAlpha:.32,ringAlpha:.35,ringOffset:5,ringWidth:2},M={size:12,oldSize:11,edgeSize:10.5,offset:5,secondaryGap:14,lineHeight:1.3},N={changedLabel:.35,neutralLabel:.5,importantNeutralLabel:.35,importantThreshold:.7,smallScene:300,smallChangedLabel:.2,smallNeutralLabel:.25,edgeLabel:1.1,badge:1.2,arrow:1.2},ur=.18,dr={selectedContext:.7,selectedRest:.18,replayContext:.7,replayRest:.3,filtered:.4,focusContext:.55,ghostEdge:.45,collapsedEdge:.5},fr={spotlightEnd:.18,settleStart:.82},pr={pace:1100,chapterThreshold:40,gap:160,maxStagger:.35},mr=Object.freeze({x:0,y:0,width:0,height:0}),hr=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=mr){return this.empty?e:{x:this.minX,y:this.minY,width:this.maxX-this.minX,height:this.maxY-this.minY}}};function gr(e,t,n,r,i,a){let o=Math.max(r,ir(i,M.size)/2,a===void 0?0:ir(a,M.oldSize)/2),s=r+M.offset+M.size*M.lineHeight+(a===void 0?0:M.secondaryGap);e.add(t-o,n-r,t+o,n+s)}function _r(e){return{x:e.x+e.width/2,y:e.y+e.height/2}}function vr(e,t){return t?e===0?0:Math.ceil(e/2)*ur*(e%2==1?1:-1):(Math.floor(e/2)+1)*ur*(e%2==0?1:-1)}function yr(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=vr(n,a);t[r]=i.a<=i.b?s:-s}}return t}function br(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=yr(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 xr(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 Sr(e)}}function Sr(e){throw Error(`Unexpected value ${String(e)}`)}var Cr=(e,t)=>e.some(e=>e.kind===t);function wr(e){let t=e.facets;if(Cr(t,`mergedInto`))return`merge-source`;if(Cr(t,`mergeTarget`))return`merge-target`;if(Cr(t,`splitInto`))return`split-source`;if(Cr(t,`splitFrom`))return`split-target`;let n=e.status;switch(n){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 Sr(n)}}function Tr(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 Er(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=Tr(e.facets);return t===`neutral`?`content`:t}default:return Sr(t)}}function Dr(e,t,n){return(t===`merge-target`||t===`split-target`)&&e.status!==`added`?Tr(e.facets):n}function Or(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 kr(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 Sr(t)}}function Ar(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 jr=e=>`⊕ ${e}`;function Mr(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 jr(t.sources.length)}let n=e.facets.find(e=>e.kind===`attrs`);return n!==void 0&&n.kind===`attrs`?Ar(n.changes):void 0}function Nr(e){let t=e.facets.find(e=>e.kind===`rename`);return t!==void 0&&t.kind===`rename`?t.from:void 0}function Pr(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 Fr={r:255,g:255,b:255,a:1},Ir=(e,t,n)=>Math.min(n,Math.max(t,e));function Lr(e,t){throw new C(`invalid-input`,`Unsupported color ${JSON.stringify(e)}: ${t}. Use #rgb, #rgba, #rrggbb, #rrggbbaa, rgb() or rgba().`,{color:e})}function Rr(e,t){/^[0-9a-f]+$/i.test(t)||Lr(e,`not a hex color`);let n=t.length===3||t.length===4;!n&&t.length!==6&&t.length!==8&&Lr(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 zr(e,t,n){let r=t.endsWith(`%`),i=Number(r?t.slice(0,-1):t);return t!==``&&Number.isFinite(i)||Lr(e,`bad component "${t}"`),Ir(r?i/100*n:i,0,n)}function Br(e,t){let[n=``,r,i]=t.split(`/`);i!==void 0&&Lr(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&&Lr(e,`expected 3 or 4 components`);let[o=``,s=``,c=``,l]=a;return{r:zr(e,o,255),g:zr(e,s,255),b:zr(e,c,255),a:l===void 0?1:zr(e,l,1)}}function Vr(e){let t=e.trim().toLowerCase();if(t.startsWith(`#`))return Rr(e,t.slice(1));if(t===`transparent`)return{r:0,g:0,b:0,a:0};let n=/^rgba?\((.*)\)$/.exec(t);return n?Br(e,n[1]??``):Lr(e,`unknown syntax`)}function Hr(e,t){let n=e.a+t.a*(1-e.a);if(n===0)return{r:0,g:0,b:0,a:0};let r=(r,i)=>(r*e.a+i*t.a*(1-e.a))/n;return{r:r(e.r,t.r),g:r(e.g,t.g),b:r(e.b,t.b),a:n}}var Ur=e=>{let t=e/255;return t<=.04045?t/12.92:((t+.055)/1.055)**2.4};function Wr(e){return .2126*Ur(e.r)+.7152*Ur(e.g)+.0722*Ur(e.b)}function Gr(e,t){let n=Vr(t);n.a<1&&(n=Hr(n,Fr));let r=Wr(Hr(Vr(e),n)),i=Wr(n);return(Math.max(r,i)+.05)/(Math.min(r,i)+.05)}var Kr=e=>Math.round(Ir(e,0,255)).toString(16).padStart(2,`0`);function qr(e){return e.a>=1?`#${Kr(e.r)}${Kr(e.g)}${Kr(e.b)}`.toUpperCase():`rgba(${Math.round(Ir(e.r,0,255))}, ${Math.round(Ir(e.g,0,255))}, ${Math.round(Ir(e.b,0,255))}, ${Math.round(Ir(e.a,0,1)*1e3)/1e3})`}function Jr(e,t,n){let r=Ir(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 Yr(e,t){return qr({...Vr(e),a:Ir(t,0,1)})}function Xr(e,t){let n=Vr(e),r=.2126*n.r+.7152*n.g+.0722*n.b,i=Ir(t,0,1);return qr({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 Zr(e,t,n=33){let r=Vr(e),i=Vr(t),a=[];for(let e=0;e<n;e++)a.push(qr(Jr(r,i,e/(n-1))));return a[0]=e,a[n-1]=t,Object.freeze(a)}function Qr(e,t){let n=e.length-1;return e[t<=0?0:t>=1?n:Math.round(t*n)]}var $r=class{cache=new Map;get(e,t){let n=`${e}\u0000${t}`,r=this.cache.get(n);return r===void 0&&(r=Zr(e,t),this.cache.set(n,r)),r}},ei=`Inter, "SF Pro Text", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", system-ui, sans-serif`,ti=`"JetBrains Mono", "SF Mono", ui-monospace, Menlo, Consolas, monospace`,ni={fast:120,base:220,slow:420,easing:[.2,0,0,1]},ri={family:ei,mono:ti,size:12,weightRegular:400,weightStrong:600},ii={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`}},ai={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 oi(e,t){let n=n=>{let[r,i,a]=e[n];return{base:r,strong:a,soft:Yr(r,t[n]),text:i}};return{added:n(`added`),removed:n(`removed`),content:n(`content`),structure:n(`structure`),identity:n(`identity`)}}var si={added:.16,removed:.15,content:.15,structure:.15,identity:.17},ci={added:.11,removed:.09,content:.11,structure:.1,identity:.1},li=oi({added:[`#56B4E9`,`#8FD0F5`,`#8FD0F5`],removed:[`#E69F00`,`#F5C45C`,`#F5C45C`],content:[`#F0E442`,`#F5EC85`,`#F5EC85`],structure:[`#009E73`,`#3CC79E`,`#3CC79E`],identity:[`#CC79A7`,`#E0A6C6`,`#E0A6C6`]},si),ui=oi({added:[`#0072B2`,`#005A8C`,`#00669F`],removed:[`#D55E00`,`#A84A00`,`#BF5400`],content:[`#9A8700`,`#6E6100`,`#847400`],structure:[`#00805C`,`#006248`,`#007152`],identity:[`#A3477F`,`#83335F`,`#933D6F`]},ci);function di(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`?li:ii,glow:!0,font:ri,motion:ni}}function fi(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`?ui:ai,glow:!1,font:ri,motion:ni}}function pi(e){if(typeof e==`object`&&e&&!Object.isFrozen(e)){Object.freeze(e);for(let t of Object.values(e))pi(t)}return e}var mi=new Map,hi=[`dark`,`light`],gi=[`default`,`colorblind`];function _i(e,t=`default`){if(!hi.includes(e))throw new C(`invalid-input`,`Unknown theme "${String(e)}" (expected "dark" or "light").`);if(!gi.includes(t))throw new C(`invalid-input`,`Unknown palette "${String(t)}" (expected "default" or "colorblind").`);let n=`${e}/${t}`,r=mi.get(n);return r===void 0&&(r=pi(e===`dark`?di(t):fi(t)),mi.set(n,r)),r}var vi=[`remove`,`restructure`,`modify`,`add`],yi=(e,t,n,r)=>e<n||e===n&&t<r,bi=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;yi(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 xi(e){let t=e.length,n=e=>vi.indexOf(e),r=vi.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 bi(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 Si(e){let t=vi.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 Ci={add:.85,remove:.85,modify:.8,relations:.95,merge:1.3,split:1.3},wi=e=>Math.round(e*1e3)/1e3;function Ti(e,t,n){return wi(n*Ci[e]*Math.min(2.2,Math.max(1,Math.sqrt(t))))}function Ei(e,t){return wi(t*Math.min(4,Math.max(1.2,1.2+Math.log2(Math.max(1,e)))))}function Di(e,t){let n=new hr;for(let r of t)n.addRect(e[r].bounds);return n.rect()}var Oi=(e,t)=>e>t?`chapters`:`hunks`;function ki(e,t,n){let r=Oi(e.length,n),i=[],a=[],o=r===`chapters`?Si(e):null,s=vi.filter(t=>e.some(e=>e.phase===t)),c=[];for(let t=0;t<e.length;t++){let n=e[t],r=o===null?vi.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=wi(l+pr.gap));let u=l;if(r===`hunks`)for(let r=0;r<s.length;r++){r>0&&(l=wi(l+pr.gap));let a=e[s[r]],o=wi(l+Ti(a.kind,a.size,t));i.push({hunk:s[r],start:l,end:o,chapter:n}),l=o}else{let e=s.length,r=Ei(e,t),a=pr.maxStagger*r*(e-1)/e,o=e>1?a/(e-1):0,c=r-a;for(let t=0;t<e;t++){let e=wi(u+t*o);i.push({hunk:s[t],start:e,end:wi(e+c),chapter:n})}l=wi(u+r)}a.push({phase:o,start:u,end:l,hunks:s,bounds:Di(e,s)})}return{duration:l,windows:i,chapters:a,mode:r}}function Ai(e){let t=e.theme;return t!==void 0&&typeof t==`object`?t:_i(t??`dark`,e.palette??`default`)}function ji(e){let t=e.replay?.pace??pr.pace,n=e.replay?.chapterThreshold??pr.chapterThreshold;if(!(Number.isFinite(t)&&t>0))throw new C(`invalid-input`,`replay.pace must be a positive number of ms, got ${t}.`);if(!(n>=0))throw new C(`invalid-input`,`replay.chapterThreshold must be ≥ 0, got ${n}.`);return{pace:t,chapterThreshold:n}}function Mi(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 Ni(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 Pi(e){let t=e.predicateLabels;return typeof t==`object`&&t&&!Array.isArray(t)?t:null}function Fi(e){let t=[Pi(e.after.meta),Pi(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:Pr(e)};let t=e.facets.find(e=>e.kind===`predicate`),r=t?.kind===`predicate`?n(e.predicateBefore??t.from)??Pr(e):void 0;return{label:n(e.predicate)??e.label,labelBefore:r}}}function Ii(e,t){if(e.kind!==`modify`)return xr(e.kind);let n=t.get(e.anchor);if(n===void 0)return`content`;let r=Er(n,wr(n));return r===`neutral`?`content`:r}function Li(e,t,n={}){let r=Ai(n),i=n.locale??`en`,{pace:a,chapterThreshold:o}=ji(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:rr(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=xi(y);if(Oi(b.length,o)===`chapters`){let e=new Int32Array(b.length);for(let t=0;t<b.length;t++)e[b[t]]=t;let t=Si(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=Mi(s),C=s.map((e,n)=>{let r=wr(e),i=Nr(e),a=Mr(e,r),o;if(r===`merge-source`){let t=Ni(e,`mergedInto`);o=t===void 0?void 0:c.get(t)}else if(r===`split-target`){let t=Ni(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=Er(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:Dr(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]}}),te=br(p),ne=Fi(e),re=f.map((e,t)=>{let n=Or(e),r=p[t],{label:i,labelBefore:a}=ne(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:kr(e,n),label:i,...a!==void 0&&a!==i?{labelBefore:a}:{},curvature:te.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}}),ie=new hr;for(let e of C)gr(ie,e.x,e.y,e.r,e.label,e.labelBefore);let w=ie.rect(),ae=_r(w),T=(e,t)=>{let n=[];for(let r of e){let e=t.get(r);e!==void 0&&n.push(e)}return n},oe=new Map;for(let e of re)oe.set(e.id,e.index);let se=b.map((t,n)=>{let r=e.hunks[t],a=T(r.nodes,c),o=T(r.context,c),s=new hr;for(let e of[...a,...o]){let t=C[e];gr(s,t.x,t.y,t.r,t.label,t.labelBefore)}let u=Nn(r,e,i);return{index:n,id:r.id,kind:r.kind,phase:r.phase,family:Ii(r,l),title:u.title,subtitle:u.subtitle,anchor:c.get(r.anchor)??-1,nodes:a,edges:T(r.edges,oe),context:o,bounds:s.rect({x:ae.x,y:ae.y,width:0,height:0})}}),ce=[];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&&ce.push({before:e,after:n,score:t.score})}let le=new Int32Array(b.length);for(let e=0;e<b.length;e++)le[b[e]]=e;let ue=ki(se.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=>le[e])}}),a,o),de=new Map;for(let e of se)de.set(e.id,e.index);return{nodes:C,edges:re,hunks:se,suggestions:ce,bounds:w,stats:e.stats,timeline:ue,theme:r,locale:i,meta:{before:e.before.meta,after:e.after.meta},nodeIndex:c,edgeIndex:oe,hunkIndex:de}}var Ri=new WeakMap;function zi(e){let t=Ri.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 Ri.set(e,c),c}var Bi=new Map;function Vi(e,t,n){let r=Bi.get(n);r===void 0&&(r=new Intl.NumberFormat(n),Bi.set(n,r));let i=r.format(e);return n===`zh-CN`?t?`+${i} 个未变节点`:`+${i} 个隐藏节点`:t?`+${i} unchanged`:`+${i} hidden`}var Hi=28;function Ui(e,t={}){let n=t.hops??1;if(!(Number.isFinite(n)&&n>=0))throw new C(`invalid-input`,`computeFocus: hops must be a finite number ≥ 0, got ${n}.`);let r=t.hubDegree??40;if(!(r>=0))throw new C(`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 C(`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}=zi(e),l=new Uint8Array(a),u=new Uint8Array(a),d=new Int32Array(a).fill(-1),f=new Int32Array(a),p=0,m=0,h=(e,t)=>{e<0||e>=a||d[e]!==-1||(d[e]=t,l[e]=1,f[m++]=e)},g=[];if(i!==void 0){let t=e.hunks[i];for(let e of t?.nodes??[])u[e]=1,h(e,0);for(let e of t?.edges??[])g.push(e)}else{for(let t of e.nodes)t.status!==`unchanged`&&(u[t.index]=1,h(t.index,0));for(let t of e.edges)t.status!==`unchanged`&&g.push(t.index)}for(let t of g){let n=e.edges[t];n!==void 0&&(h(n.s,1),h(n.t,1),h(n.sb,1),h(n.tb,1))}let _=Math.floor(n),v=new Uint8Array(a);for(;p<m;){let t=f[p++],n=d[t];if(!(n>=_)){if((e.nodes[t]?.degree??0)>r)v[t]=1;else for(let e=s[t];e<s[t+1];e++)h(c[e],n+1)}}for(let e of t.expanded??[])e>=0&&e<a&&(l[e]=1);let y=new Uint8Array(a);for(let e=0;e<a;e++)l[e]===1&&u[e]===0&&(y[e]=1);let b=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&&(b[t]=1)}return{nodes:l,edges:b,context:y,collapsed:Wi(e,l,v,s,c)}}function Wi(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+Hi;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:Vi(o,!n.changed,e.locale)})}return m.sort((e,t)=>e.id<t.id?-1:+(e.id>t.id)),m}var Gi=.06,Ki=16,qi=160;function Ji(e,t){let n=e.bounds;if(t!==void 0&&t.length>0){let r=new hr;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(Ki,Gi*Math.max(n.width,n.height)),i=Math.max(qi,n.width+2*r),a=Math.max(qi,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 P={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 Yi(e,t,n){let r=n+(t>1?P.travelStagger*e/(t-1):P.travelStagger/2);return[r,r+P.travel]}function Xi(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]=Yi(n,f.length,0);r?.flow!==void 0&&!r.presentAfter?l(t,4,i,a):d(t).hidden?l(t,2,P.removeShrink[0],P.removeShrink[1],P.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]=Yi(t,p.length,P.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`?P.popAfterArrival:P.pop;l(t,3,e,n,Math.min(1,n-.05))}else s.hidden?i===`split`?l(t,2,P.splitSourceShrink[0],P.splitSourceShrink[1],P.splitSourceFade[0]):l(t,2,P.removeShrink[0],P.removeShrink[1],P.removeGhostFade[0]):n.role===`merge-target`?(l(t,1,P.mergeTargetFade[0],P.mergeTargetFade[1]),u(t,P.mergeFlash)):n.role===`split-source`?(l(t,1,P.splitSourceStay[0],P.splitSourceStay[1]),u(t,P.mergeFlash)):(l(t,1,P.modifyFade[0],P.modifyFade[1]),s.ring!==null&&u(t,P.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]=P.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(P.mergeFlash[0]),s[t]=Float64Array.from(r),c[t]=r.map((e,t)=>t===r.length-1?n.badge:jr(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?P.growBetweenNew:i===`add`&&(e||n)?P.growFromExisting:i===`merge`||i===`split`?P.growAfterArrival:P.growOther,e&&!n);break}case`removed`:_(t,2,P.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,P.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,P.retract,g(r.s)&&!g(r.t)):_(t,7,P.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,P.swing,!1,e):_(t,7,P.swap);break}case`modified`:_(t,6,P.edgeFade);break;case`unchanged`:break;default:Sr(r.role)}s.hidden&&c.hidden&&(o.eKind[t]=0)}}return o}var Zi=e=>Math.min(1,Math.max(0,e)),Qi=(e,t,n)=>e+(t-e)*n,F=(e,t,n)=>{if(n<=t)return+(e>=n);let r=(e-t)/(n-t);return Math.min(1,Math.max(0,r))},$i=e=>e<=0||e>=1?0:Math.sin(Math.PI*e);function ea(e,t,n,r){if(!(e>=0&&e<=1&&n>=0&&n<=1))throw new C(`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,p=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(p(e))}var ta=ea(.2,0,0,1),na=1024,ra=new Float64Array(1026);for(let e=0;e<=na;e++)ra[e]=ta(e/na);ra[1025]=1;var I=e=>{if(!(e>0))return 0;if(e>=1)return 1;let t=e*na,n=t|0,r=ra[n];return r+(ra[n+1]-r)*(t-n)},ia=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},aa=(e,t=1.5)=>{let n=Math.min(1,Math.max(0,e))-1;return 1+(t+1)*n*n*n+t*n*n},oa=[`added`,`removed`,`content`,`structure`,`identity`,`neutral`];function sa(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 Sr(e)}}var ca=new WeakMap;function la(e){let t=ca.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:Xr(n.content.base,.6),deprecatedStroke:Xr(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?lr.glowScale:1,haloAlpha:e.glow?lr.glowAlpha:lr.ringAlpha,weightRegular:e.font.weightRegular,weightStrong:e.font.weightStrong,ramps:new $r};return ca.set(e,i),i}function ua(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 da=ua({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 fa(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 pa=fa({hidden:!0,family:5,before:!1,color:``,width:0,alpha:0,dash:null,arrow:!1,label:0,labelColor:``,strike:!1,changed:!1,z:0}),ma=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=ua(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:or,z:1};case`deprecated`:return{...i,family:2,fill:r.deprecatedFill,stroke:r.deprecatedStroke,ring:r.deprecatedFill,strike:!0};default:return Sr(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=fa(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:j.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:j.neutralEdge,labelColor:a.neutralLabel,changed:!1,z:0};case`solid`:return o;case`dashed`:return{...o,dash:sr,z:1};case`collapsed`:return{...o,dash:sr,alpha:dr.collapsedEdge,z:1};default:return Sr(e)}}};function ha(e,t){let n=sa(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,da,t]}case`removed`:return[e.node(`ghost`,1,{strike:!0,badge:!0}),e.node(`solid`,1),da];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):da];case`merge-target`:case`split-target`:{let n=sa(t.familyBefore),i=t.presentBefore?n===5?e.node(`neutral`,5):e.node(`ringed`,n,{labelBefore:!0}):da;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}):da];default:return Sr(t.role)}}function ga(e,t){let n=sa(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,pa,t]}case`removed`:return[e.edge(`dashed`,1,!1,1,!0),e.edge(`solid`,1,!1,1),pa];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),pa];default:return Sr(t.role)}}var _a=0,va=1,ya=2,ba=3,L=fr.spotlightEnd,xa=fr.settleStart,Sa=xa-L,Ca=[`added`,`removed`,`content`,`structure`,`identity`],wa=Object.freeze([]),Ta=0,Ea=1,Da=2,Oa=3,ka=4,Aa=()=>({text:``,color:``,alpha:0,size:0,weight:400,strike:!1,priority:0,minZoom:0,offset:0}),ja=()=>({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}),Ma=()=>({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}),Na=()=>({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 Pa(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 Fa(e){e.visible=!1,e.alpha=0,e.label=null}var Ia=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=_a;famMask=0;reduced=!1;curChanged=!1;curFamily=5;u=0;tau=0;time=0;emph=1;restLabels=1;lodChanged=N.changedLabel;lodNeutral=N.neutralLabel;lodImportant=N.importantNeutralLabel;countedFocus=null;focusCount=0;px=0;py=0;pools=new WeakMap;constructor(e){this.scene=e,this.t=la(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 ma(this.t);this.nStyles=e.nodes.map(e=>ha(i,e)),this.eStyles=e.edges.map(e=>ga(i,e));let a=t=>{let n=t>=0?e.hunks[t]:void 0;return n===void 0?5:sa(n.family)};this.nFam=Uint8Array.from(e.nodes,e=>sa(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=>sa(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=br(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=>sa(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=Xi(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===Ea&&u.push(t),e.role!==ka&&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:j.glyph,dash:null,curvature:P.arc,clearA:4,clearB:4,label:null});for(let t of e.nodes)t.flow!==void 0&&(t.role===`merge-source`?r.push(i(Ta,`merge-arrow`,t.index,t.flow,t.index,t.hunk)):t.role===`split-target`?r.push(i(Ta,`split-arrow`,t.flow,t.index,t.index,t.hunk)):t.role===`deprecated`&&r.push(i(Ea,`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:Da,kind:`edge-ghost`,a:n.sb,b:n.tb,edge:n.index,node:-1,hunk:n.hunk,family:sa(n.family),color:t.edge[e],alpha:dr.ghostEdge,width:j.changedEdge,dash:sr,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:Oa,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:j.pivot,dash:null,curvature:0,clearA:0,clearB:0,label:null})}for(let n of e.suggestions)r.push({role:ka,kind:`suggestion`,a:n.before,b:n.after,edge:-1,node:-1,hunk:-1,family:4,color:t.base[4],alpha:.85,width:j.suggestion,dash:cr,curvature:.12,clearA:2,clearB:2,label:`?`});return n}newFrame(){return{nodes:[],edges:[],glyphs:[],collapsed:wa,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,Aa),secondaries:n(this.N,Aa),badges:n(this.N,()=>({text:``,color:``,background:``,minZoom:0})),edgeLabels:n(this.M,Aa),glyphs:n(this.glyphs.length,Na),glyphLabels:n(this.glyphs.length,Aa)},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]=ja());for(let t=0;t<this.M;t++)e.edges[t]===void 0&&(e.edges[t]=Ma());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?wa:e.focus.collapsed,n.spotlight=this.layer===ba?this.env:this.selHunk>=0?this.emph:0,this.view=null,n}begin(e){switch(this.view=e,e.layer){case`union`:this.layer=_a;break;case`before`:this.layer=va;break;case`after`:this.layer=ya;break;case`replay`:this.layer=ba;break;default:throw new C(`invalid-input`,`Unknown layer "${String(e.layer)}".`)}let t=0;if(e.families.size>0)for(let n=0;n<Ca.length;n++)e.families.has(Ca[n])&&(t|=1<<n);this.famMask=t,this.reduced=e.reducedMotion;let n=e.emphasis;this.emph=Number.isFinite(n)?Zi(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 C(`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))<=N.smallScene;this.lodChanged=i?N.smallChangedLabel:N.changedLabel,this.lodNeutral=i?N.smallNeutralLabel:N.neutralLabel,this.lodImportant=i?N.smallNeutralLabel:N.importantNeutralLabel,this.updateSelection(e.selectedHunk>=0&&e.selectedHunk<this.H?e.selectedHunk:-1),this.env=0,this.layer===ba&&(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<L?I(e/L):e>xa?I((1-e)/(1-xa)):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:L*(i[s]-r[s]);this.env=I(Zi(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]<L&&!this.reduced,u=l?this.hP[e]/L: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===ba?this.levelGen[e]===this.gen?this.level[e]:0:this.selNode[e]}spotlight(e){return this.layer===ba?this.env<=0||e===2?1:Qi(1,e===1?dr.replayContext:dr.replayRest,this.env):this.selHunk<0||e===2?1:Qi(1,e===1?dr.selectedContext:dr.selectedRest,this.emph)}fadesRestLabels(e){return this.layer!==ba&&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=oa[this.nFam[e]],t.pulse=0,t.strokeWidth=j.node;let r=this.nStyles[e],i;if(this.layer!==ba)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[va],n);else if(o===2)i=this.applyNode(t,e,r[ya],n);else{let o=this.hP[a];o<L?i=this.applyNode(t,e,r[va],n):o>=xa?i=this.applyNode(t,e,r[ya],n):(this.u=(o-L)/Sa,i=this.animateNode(t,e,r,n))}i&&this.pulseGen[e]===this.gen&&(t.pulse=this.pulseVal[e])}i?this.modulateNode(t,e,n):Pa(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=oa[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=j.ring,i.gap=j.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=M.size,o.weight=n.labelWeight,o.strike=n.strike,o.offset=M.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=M.oldSize,n.weight=i.weightRegular,n.strike=!0,n.offset=M.offset+M.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[va],c=n[ya],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-I(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=I(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=I(l?o:F(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=Qr(f,u));let p=this.strokeRamp[t]??null;p!==null&&u>0&&u<1&&(e.stroke=Qr(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:Qr(i,u):r.ring??n.ring??``,m.width=j.ring,m.gap=j.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=$i(F(o,a.nFlashA[t],a.nFlashB[t]));m.width=j.ring+j.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:I(F(o,P.labelOut[0],P.labelOut[1])),c=l?u:I(F(o,P.labelIn[0],P.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=M.offset+(l?0:P.labelSlide*(1-c)),e.label=d;let f=i.secondaries[t];f.text=s,f.color=n.labelColor,f.size=M.size,f.weight=n.labelWeight,f.strike=!1,f.alpha=1-a,f.offset=M.offset-(l?0:P.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=I(F(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:Qr(r,a),e.dash=or,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-I(F(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-P.arc*(s-a),u=(a+s)/2+P.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=ia(F(r,a,o)),this.arcPoint(t,i),e.x=this.px,e.y=this.py,e.z=3,e.alpha=1-F(r,o,o+P.arrivalFade),e.label!==null&&(e.label.alpha=1-F(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=F(r,n.nA[t],n.nB[t]);if(e.r=i>0?this.nr[t]*aa(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=I(F(r,a,Math.min(1,a+P.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=ia(F(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=F(r,a,a+.1),e.halo!==null&&(e.halo.radius=e.r*this.t.haloScale);let c=I(F(r,o-.05,Math.min(1,o+P.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){Pa(e);return}o.context[t]===1&&(a*=dr.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*=dr.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=j.hoveredNode,e.stroke=s?i.strong[c]:i.secondary,e.z=4),m){let r=n.rings[t];r.color=i.accent,r.width=j.hoveredNode,r.gap=j.ringGap,r.alpha=1,e.ring=r,e.z=4}e.alpha*=a;let h=this.nImp[t],g=s?this.lodChanged:h>=N.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:N.badge)}resolveEdge(e,t,n,r){let i=this.eStyles[e],a;if(this.layer!==ba)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[va],n,r);else if(s===2)a=this.applyEdge(t,e,i[ya],n,r);else{let s=this.hP[o];s<L?a=this.applyEdge(t,e,i[va],n,r):s>=xa?a=this.applyEdge(t,e,i[ya],n,r):(this.u=(s-L)/Sa,a=this.animateEdge(t,e,i,n,r))}}a?this.modulateEdge(t,e,r):Fa(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:N.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=M.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[va],c=n[ya],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*=I(o),e.alpha>0;let n=I(F(o,l,u));return n<=0?!1:(e.progress=n,e.fromTarget=a.eFromTarget[t]===1,e.label!==null&&(e.label.alpha=I(F(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-I(o),e.alpha>0;let n=I(F(o,l,u));return n>=1?!1:(e.progress=1-n,e.fromTarget=a.eFromTarget[t]===1,e.label!==null&&(e.label.alpha=1-F(o,l,l+.1)),!0)}case 3:return this.applyEdge(e,t,c,r,i)?d?(e.alpha*=I(o),e.alpha>0):(this.tau=ia(F(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-I(o)}else{if(!this.applyEdge(e,t,c,r,i))return!1;e.alpha*=I(o)}return e.alpha>0}return o<u||c.hidden?this.applyEdge(e,t,s,r,i)?(e.alpha*=1-F(o,u,u+P.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*=I(o)),e.alpha>0):!1;case 6:{let n=I(F(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+=$i(n)),!0):!1}case 7:return this.applyEdge(e,t,c,r,i)?(e.alpha*=I(d?o:F(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=Qi(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=Qi(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=Qi(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){Fa(e);return}this.eUnchanged[t]===1&&(c.context[i]===1||c.context[a]===1)&&(s*=dr.focusContext)}let l=this.curChanged;this.filtered(this.eFam[t],this.eHunkFam[t])&&(l=!1,e.color=o.edge[5],e.width=j.neutralEdge,e.arrowMinZoom=N.arrow,e.label!==null&&(e.label.color=o.neutralLabel),s*=dr.filtered);let u;u=this.layer===ba?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?N.edgeLabel:0,m=l?.9:.4;if(d&&(e.width<j.selectedEdge&&(e.width+=(j.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,j.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=M.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===ba){let t=e.hunk;if(t<0)return!1;let n=this.hState[t],r=this.hP[t],i=n===1&&r>=L&&r<xa,a=i?(r-L)/Sa:0,d=this.c;switch(e.role){case Ta:{if(!i||this.reduced)return!1;let t=d.nA[e.node],n=d.nB[e.node];if(s=ia(F(a,t,n)),o*=.6*(1-F(a,n+.05,1)),s<=0||o<=0)return!1;break}case Ea:if(n===0||n===1&&r<L||i&&(this.reduced?o*=I(a):s=I(F(a,.4,.9)),s<=0||o<=0))return!1;break;case Da:{if(!i)return!1;let t=d.eKind[e.edge];if(t===3&&!this.reduced)o*=1-I(F(a,P.ghostFade[0],P.ghostFade[1]));else if(t===7||t===3||this.reduced){let t=this.eStyles[e.edge][va];c=t.color,l=t.dash,u=t.width,o=1-I(this.reduced?a:F(a,d.eA[e.edge],d.eB[e.edge]))}else return!1;if(o<=0)return!1;break}case Oa:if(!i||this.reduced||d.eKind[e.edge]!==3||(o*=1-F(a,P.pivotFade[0],P.pivotFade[1]),o<=0))return!1;break;default:return!1}}else if(e.role===ka&&!i.showSuggestions)return!1;else if(e.edge>=0&&r[e.a]?.visible!==!0)return!1;if(t.kind=e.kind,e.role===Oa){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*=dr.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=M.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 La(e){return new Ia(e)}var Ra=new Set;function za(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??Ra,showSuggestions:e.showSuggestions??!0,reducedMotion:e.reducedMotion??!1,emphasis:e.emphasis??1})}var Ba=`KgdiffCompute`,Va=null,Ha=null,Ua=!1;function Wa(){let e=globalThis[Ba];return typeof e==`object`&&e?e:null}function Ga(){return Ha??=Wa(),Ha}function Ka(){return Ga()?`ready`:Ua?`unavailable`:`unknown`}function qa(){let e=Ga();return e?Promise.resolve(e):(Va??=import(`@kgdiff/viewer/compute`).then(e=>(Ha=e,Ua=!1,e),e=>{throw Va=null,Ua=!0,new C(`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)})}),Va)}var Ja={"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.searchResults":`Matching nodes`,"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`,"sidebar.resize":`Resize the sidebar`,"sidebar.split":`Resize the change list and the details`,"sidebar.splitValue":`Change list {p} of the height`,"sidebar.hideList":`Collapse the change list`,"sidebar.showList":`Expand the change list`,"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.hide":`Collapse the details`,"detail.show":`Expand the 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`,"zoom.label":`Zoom`,"stage.label":`Graph diff`,"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.`},Ya={en:Ja,"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.searchResults":`匹配的节点`,"sidebar.noResults":`没有与「{q}」匹配的节点`,"sidebar.results.one":`{n} 个节点`,"sidebar.results.other":`{n} 个节点`,"sidebar.filters":`按变更类别筛选`,"sidebar.clearFilters":`显示全部`,"sidebar.filteredEmpty":`没有符合筛选条件的变更。`,"sidebar.noChanges":`没有需要审阅的变更。`,"sidebar.sheet":`调整面板高度`,"sidebar.sheetValue":`占高度的 {p}`,"sidebar.resize":`调整侧栏宽度`,"sidebar.split":`调整变更列表与详情的高度`,"sidebar.splitValue":`变更列表占高度的 {p}`,"sidebar.hideList":`收起变更列表`,"sidebar.showList":`展开变更列表`,"review.progress":`已审阅 {done} / {total}`,"review.toggle":`已审阅`,"review.mark":`标记为已审阅`,"review.unmark":`标记为未审阅`,"review.complete":`全部变更已审阅`,"detail.label":`变更详情`,"detail.hide":`收起详情`,"detail.show":`展开详情`,"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":`全局缩略图`,"zoom.label":`缩放`,"stage.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 Xa(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 Za(){let e=typeof navigator<`u`?navigator:void 0;for(let t of e?.languages??[e?.language??``]){let e=Xa(t);if(e)return e}return`en`}var Qa=new Map;function $a(e,t){let n=Qa.get(t);return n===void 0&&(n=new Intl.NumberFormat(t),Qa.set(t,n)),n.format(e)}function eo(e){return`${Math.round(Math.max(0,Math.min(1,e))*100)}%`}function R(e,t,n){let r=(Ya[e]??Ya.en)[t]??Ja[t];return n?r.replace(/\{(\w+)\}/g,(t,r)=>{let i=n[r];return i===void 0?t:typeof i==`number`?$a(i,e):i}):r}function to(e,t,n,r){return R(e,`${t}.${new Intl.PluralRules(e).select(n)===`one`?`one`:`other`}`,{...r,n})}function no(e,t){return t===`zh-CN`?`「${e}」`:`“${e}”`}function ro(e){return{locale:e,t:(t,n)=>R(e,t,n),plural:(t,n,r)=>to(e,t,n,r),num:t=>$a(t,e),quote:t=>no(t,e)}}var io=[`remove`,`restructure`,`modify`,`add`],ao=Object.freeze({items:[],order:[],rank:new Map,itemOf:new Map});function oo(e,t){let n=new Map(io.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 io){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 so(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 co(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 lo=[`list`,`detail`,`search`,`filters`,`dock`,`transport`,`legend`,`zoom`,`minimap`,`title`,`actions`],uo=[`open`,`collapsed`,`hidden`],fo={list:`open`,detail:`open`,search:`open`,filters:`open`,dock:`open`,transport:`open`,legend:`collapsed`,zoom:`open`,minimap:`open`,title:`open`,actions:`open`},po=e=>lo.includes(e),mo=e=>uo.includes(e);function ho(e){let t={},n=[];for(let r of e.split(/[\s,]+/)){if(r===``)continue;let[e,i,...a]=r.split(`:`);a.length===0&&po(e)&&mo(i)?t[e]=i:n.push(r)}return{panels:t,invalid:n}}function go(e){if(typeof e==`string`)return ho(e);let t={},n=[];if(typeof e==`object`&&e)for(let[r,i]of Object.entries(e))po(r)&&mo(i)?t[r]=i:n.push(`${r}:${String(i)}`);else e!=null&&n.push(String(e));return{panels:t,invalid:n}}function _o(e){return lo.filter(t=>e[t]!==void 0).map(t=>`${t}:${e[t]}`).join(` `)}var vo=[`overlay`,`swipe`,`replay`],yo=[`all`,`changes`],bo=[`auto`,`light`,`dark`],xo=[`default`,`colorblind`],So=[`full`,`none`],Co=[`auto`,`full`,`mini`,`none`],wo=bo;function To(e){return vo.includes(e)?e:null}function Eo(e){return yo.includes(e)?e:null}var Do=`changes`;function Oo(e){return bo.includes(e)?e:null}function ko(e){return xo.includes(e)?e:null}function Ao(e){return typeof e==`string`?Xa(e):null}function jo(e){return So.includes(e)?e:null}function Mo(e){return Co.includes(e)?e:null}function No(e){let t=typeof e==`string`&&e.trim()!==``?Number(e):e;return typeof t==`number`&&Number.isFinite(t)&&t>=0?t:null}function Po(e,t=!1){if(typeof e!=`object`||!e)return;let n=e,r=n.mode===Do,i=r?`overlay`:To(n.mode),a=Eo(n.scope)??(r&&n.scope===void 0?`changes`:null),o=Oo(n.theme),s=ko(n.palette),c=Ao(n.locale),l=n.panels===void 0?null:go(n.panels),u=l&&Object.keys(l.panels).length>0?l.panels:null,d=[`mode`,`scope`,`theme`,`palette`,`locale`].filter(e=>n[e]!==void 0&&{mode:i,scope:a,theme:o,palette:s,locale:c}[e]===null);return l&&l.invalid.length>0&&d.push(`panels (${l.invalid.join(` `)})`),d.length>0&&!t&&typeof console<`u`&&console.warn(`[kgdiff] ignoring invalid report view preferences: ${d.join(`, `)}`),{...i?{mode:i}:{},...a?{scope:a}:{},...o?{theme:o}:{},...s?{palette:s}:{},...c?{locale:c}:{},...u?{panels:u}:{}}}function Fo(e){return typeof e.text==`string`}function Io(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 Lo=null;function Ro(){return Lo??=import(`@kgdiff/formats`).catch(e=>{throw Lo=null,new C(`invalid-input`,R(`en`,`error.formats`),{cause:e instanceof Error?e.message:String(e)})}),Lo}async function zo(e,t){if(typeof e!=`object`||!e)throw new C(`invalid-input`,`load(): \`${t}\` must be a GraphInput, a KGraph or { text, filename }.`);if(Fo(e)){let{parseGraph:t}=await Ro(),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(An(e))return{graph:e,meta:e.meta};if(Io(e))return{graph:e,meta:e.meta??{}};throw new C(`invalid-input`,`load(): \`${t}\` must be a GraphInput ({ nodes, edges }), a KGraph or { text, filename }.`)}function Bo(e){let t=e.split(/[?#]/)[0]??e;return t.slice(Math.max(t.lastIndexOf(`/`),t.lastIndexOf(`\\`))+1)||e}function z(e){return typeof e==`string`&&e.trim()!==``?e.trim():void 0}function Vo(e,t,n,r){return z(n)??z(e.name)??(r?Bo(r):void 0)??(z(e.source)?Bo(e.source):void 0)??t}async function Ho(e,t){if(typeof e!=`object`||!e)throw new C(`invalid-input`,`load() expects { before, after, … }.`);let{before:n,after:r}=e;if(n===void 0||r===void 0)throw new C(`invalid-input`,"load() needs both `before` and `after`.");let i=qa();(Fo(n)||Fo(r))&&await t(`parse`);let a=await zo(n,`before`),o=await zo(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=z(c.before.meta.version),d=z(c.after.meta.version);return{diff:c,layout:l,layoutOptions:e.layout,names:{before:Vo(a.meta,`before`,e.names?.before,a.filename),after:Vo(o.meta,`after`,e.names?.after,o.filename)},versions:{...u?{before:u}:{},...d?{after:d}:{}},...z(e.title)?{title:z(e.title)}:{}}}async function Uo(e,t){await t(`match`);let n=jn(e.diff.format===`kgdiff.diff.packed`?Mn(e.diff):e.diff);await t(`layout`);let r=ar(e.layout),i=z(n.before.meta.version),a=z(n.after.meta.version),o=e.meta,s=Po(e.view);return{diff:n,layout:r,layoutOptions:void 0,names:{before:Vo(n.before.meta,`before`,o?.before?.name),after:Vo(n.after.meta,`after`,o?.after?.name)},versions:{...i?{before:i}:{},...a?{after:a}:{}},...z(o?.title)?{title:z(o?.title)}:{},...s?{view:s}:{}}}var Wo=[.5,1,2,4],Go=.5,Ko=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=Wo.find(t=>t===e);t!==void 0&&(this.#t=t)}cycleSpeed(){let e=Wo.indexOf(this.#t);return this.#t=Wo[(e+1)%Wo.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+Go);this.#e=e??this.duration}else{let e=0;for(let n of this.#r)if(n<t-Go)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}},qo=`kgdiff:review:`;function Jo(e,t){return`${qo}${e}→${t}`}function Yo(){try{return typeof localStorage<`u`?localStorage:null}catch{return null}}var Xo=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 yu(e){return e.normalize(`NFKC`).toLowerCase()}var bu=/[\s_\-./:#|()[\]{}「」“”"'’,;]/;function xu(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(bu.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||bu.test(t[e-1]??``))&&(r+=6),a=e,i=e+1}return Math.max(1,r)}var Su=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(yu),fields:n}})}search(e,t=50){let n=yu(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=xu(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)}},Cu=new Set([`status`,`data`,`mode`,`selection`,`filters`,`search`,`review`,`replay`,`hover`,`theme`,`locale`,`focus`,`swipe`,`overview`]),wu=.35,Tu=class extends Error{},Eu=e=>1-(1-e)**3,Du=class{status=`idle`;steps=[];step=null;error=null;data=null;layout=null;scene=null;resolver=null;list=Ql;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;query=``;hits=[];hops=1;expanded=new Set;focus=null;clock=null;split=.5;emphasis=1;#e=null;#t=``;#n=null;#r=null;#i=new Set;#a=-1;#o=null;#s=0;#c=0;#l=!1;#u=``;#d=0;#f=null;#p=null;#m=NaN;#h=!1;#g=!1;#_=new Set;#v=new Set;#y=!1;#b=!1;#x;#S;constructor(e,t){this.#x=e,this.#S=t}subscribe(e){return this.#_.add(e),()=>this.#_.delete(e)}notify(...e){for(let t of e)this.#v.add(t);this.#y||(this.#y=!0,queueMicrotask(()=>this.flush()))}flush(){if(this.#y=!1,this.#v.size===0)return;let e=this.#v;this.#v=new Set;for(let t of this.#_)t(e)}addView(e){return this.#i.add(e),()=>this.#i.delete(e)}get themeName(){return this.themePreference===`auto`?this.systemDark?`dark`:`light`:this.themePreference}get theme(){let e=`${this.themeName}/${this.palette}`;return(this.#e===null||e!==this.#t)&&(this.#t=e,this.#e=this.#C()),this.#e}#C(){let e;try{e=sc(this.themeName,this.palette)}catch{e=sc(`dark`,`default`)}return this.#S.theme?.(e)??e}get diff(){return this.data?.diff??null}get hunkCount(){return this.scene?.hunks.length??0}isReviewed(e){return this.#n?.has(e)??!1}reviewState(){return this.#n?.state()??{reviewed:[],total:0}}search(e,t){let n=this.diff;return n?(this.#r??=new Su(n),this.#r.search(e,t)):[]}setQuery(e){this.query=e,this.#w(),this.notify(`search`),this.flush()}#w(){let e=this.query.trim();this.hits=e?this.search(e,50):[]}async load(e){let t=e=>typeof e==`object`&&!!e&&typeof e.text==`string`,n=t(e?.before)||t(e?.after);await this.#T(n?[`parse`,`match`,`layout`,`scene`]:[`match`,`layout`,`scene`],t=>uu(e,t))}async loadPayload(e){await this.#T([`match`,`layout`,`scene`],t=>du(e,t))}async#T(e,t){let n=++this.#d;this.pause(),this.status=`loading`,this.error=null,this.steps=e,this.step=null,this.notify(`status`);let r=async e=>{if(n!==this.#d||this.#b||(this.step=e,this.notify(`status`),this.flush(),await this.#S.yieldToPaint(),n!==this.#d||this.#b))throw new Tu};try{let e=await t(r);await r(`scene`),this.#E(e)}catch(e){if(e instanceof Tu)throw new DOMException(`Superseded by a newer load.`,`AbortError`);let t=e instanceof Error?e:new g(`invalid-input`,String(e));throw n===this.#d&&this.fail(t),t}}fail(e){this.#d++,this.clock?.pause(),this.#m=NaN,this.#g=!1,this.status=`error`,this.error=e,this.step=null,this.data=null,this.layout=null,this.scene=null,this.resolver=null,this.list=Ql,this.clock=null,this.focus=null,this.#n=null,this.#r=null,this.#w(),this.selectedHunk=this.selectedNode=this.pinnedEdge=-1,this.notify(`status`,`data`,`selection`,`filters`,`search`,`review`,`replay`,`focus`),this.#x.error(e)}#E(e){let{diff:t,layout:n,view:r}=e;this.data=e,this.layout=n,this.#r=null,this.#w(),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.#a=-1,this.emphasis=1,this.#o=null,this.hoverNode=this.hoverEdge=this.hoverGroup=-1,this.split=.5,this.clock=null,this.#u=``,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.#n=new vu(this.#S.storage,gu(t.delta.base.hash,t.delta.target.hash),t.hunks.map(e=>e.id)),this.#D(),this.status=`ready`,this.step=null,n.scope===`changes`&&Yl()===`unknown`&&Xl().then(()=>this.notify(`focus`),()=>this.notify(`focus`)),this.notify(...Cu);for(let e of this.#i)e.installed();this.#x.ready(t.stats),(this.mode!==i||this.scope!==a)&&this.#x.mode(this.mode,this.scope);let o=this.#f;this.#f=null,o===null?this.#G():this.selectHunkById(o.id,{fly:o.fly})}#D(){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=Dc(e.diff,t,{theme:this.theme,locale:this.locale});this.scene=o,this.resolver=Dl(o);let s=this.clock;this.clock=new mu(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.#a=-1,this.hoverNode=this.hoverEdge=this.hoverGroup=-1,this.list=$l(o,this.families),this.#O();for(let e of this.#i)e.sceneChanged();this.invalidate()}#O(){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=Nc(e,{hops:this.hops,expanded:t})}destroy(){this.#b=!0,this.sleep(),this.#_.clear()}invalidate(){this.#l=!0,this.#k()}sleep(){this.#s&&this.#S.cancelFrame(this.#s),this.#s=0}#k(){this.#s!==0||this.#b||(this.#s=this.#S.requestFrame(this.#A)||0)}#A=()=>{if(this.#s=0,this.#b)return;let e=this.#S.now(),t=this.#c>0?e-this.#c:0,n=!1,r=this.clock;if(r?.playing&&this.mode===`replay`&&(r.advance(t),this.#l=!0,this.notify(`replay`),this.#R(),r.playing?n=!0:r.finished&&this.#K()),!Number.isNaN(this.#m)&&!this.#h&&(e>=this.#m?this.#q():n=!0),this.#o){let t=this.#o,r=t.duration>0?Math.min(1,(e-t.start)/t.duration):1;this.emphasis=t.from+(t.to-t.from)*Eu(r),this.#l=!0,r>=1?(this.#o=null,this.#a>=0&&(this.#a=-1,this.emphasis=1)):n=!0}if(this.#l){this.#l=!1;for(let t of this.#i)t.draw(e)}n?(this.#c=e,this.#k()):this.#c=0};viewState(e){let t=this.selectedHunk>=0?this.selectedHunk:this.#a;return kl({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})}#j(e){this.reducedMotion?(this.emphasis=1,this.#o=null,this.#a=-1):(this.emphasis=e,this.#o={from:e,to:1,start:this.#S.now(),duration:this.theme.motion.base})}#M(e){this.reducedMotion||e<0?(this.#a=-1,this.#o=null,this.emphasis=1):(this.#a=e,this.#o={from:this.emphasis,to:0,start:this.#S.now(),duration:this.theme.motion.base})}#N(){for(let e of this.#i)e.drawnChanged()}get scopeLocked(){return this.layout?.scope===`changes`}setMode(e){if(e===`changes`){this.setView(`overlay`,`changes`);return}let t=Gn(e);t!==null&&this.setView(t,this.scope)}setScope(e){let t=Kn(e);t!==null&&this.setView(this.mode,t)}toggleScope(){this.scopeLocked?this.#x.announce(z(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.#m=NaN,this.#g=!1),this.#u=``,i&&this.#O(),this.#N(),this.notify(`mode`,`focus`,`replay`),this.invalidate(),this.status===`ready`){this.#x.mode(e,n);let t=[];r&&t.push(z(this.locale,`announce.mode`,{mode:z(this.locale,`mode.${e}`)})),i&&t.push(z(this.locale,n===`changes`?`scope.on`:`scope.off`)),this.#x.announce(t.join(` · `))}r&&e===`replay`&&this.#G()}}selectHunkById(e,t={}){if(e===null){this.#f=null,this.clearSelection();return}let n=this.scene;if(!n||this.status!==`ready`){this.#f={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.#a=-1,this.#j(i>=0?wu:0),this.mode===`replay`&&this.clock)){let t=this.clock.windowEnd(e);this.clock.pause(),this.#m=NaN,this.#g=!1,t!==null&&this.clock.seek(t),this.#u=``,this.notify(`replay`)}if((t.fly??!0)&&this.flyToHunk(e),this.invalidate(),!a)return;this.notify(`selection`);let o=n.hunks[e];if(!o)return;let s=r>=0?n.nodes[r]?.id??null:null;if(this.#x.select(o.id,s),i!==e){let t=this.list.rank.get(e);this.#x.announce(z(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.#M(i),t.fly&&this.flyToNode(e),this.invalidate(),this.notify(`selection`),this.#x.select(null,r.id),this.#x.announce(z(this.locale,`announce.node`,{label:r.label,status:z(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.#M(e),this.invalidate(),this.notify(`selection`),this.#x.select(null,null),this.#x.announce(z(this.locale,`announce.cleared`))}next(){this.#P(1)}prev(){this.#P(-1)}#P(e){let t=tu(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.#F(ku({x:i,y:a,width:o-i,height:s-a})),this.invalidate()}setHover(e,t,n){(e!==this.hoverNode||t!==this.hoverEdge||n!==this.hoverGroup)&&(this.hoverNode=e,this.hoverEdge=t,this.hoverGroup=n,this.notify(`hover`),this.invalidate())}clearHover(){this.setHover(-1,-1,-1)}#F(e){for(let t of this.#i)t.show(e)}#I(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.#x.announce(z(this.locale,`announce.chapter`,{phase:z(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.#x.announce(z(this.locale,`announce.change`,{i:a+1,n:r.total,title:i.title}))}#L(e){let t=this.scene;if(!t||e.length===0)return;let n=Rc(t,e);for(let e of this.#i)e.follow(n)}#R(){let e=this.scene,t=this.clock;if(!e||!t)return;let n=t.activeTarget();if(n.index<0)return;let r=`${n.kind}:${n.index}`;r!==this.#u&&(this.#u=r,this.#I(n.kind,n.index),this.#L(n.kind===`chapter`?e.timeline.chapters[n.index]?.hunks??[]:[n.index]))}#z(e){let t=this.scene;return t?.hunks[e]?Rc(t,[e]):null}#B(e){let t=this.scene?.nodes[e];return t?ku({x:t.x-t.r,y:t.y-t.r,width:2*t.r,height:2*t.r}):null}selectionBounds(){return this.selectedHunk>=0?this.#z(this.selectedHunk):this.selectedNode>=0?this.#B(this.selectedNode):null}flyToHunk(e){let t=this.#z(e);t&&this.#F(t)}flyToNode(e){let t=this.#B(e);t&&this.#F(t)}flyToSelection(){let e=this.selectionBounds();e&&this.#F(e)}toggleFamily(e){this.families.has(e)?this.families.delete(e):this.families.add(e),this.#V()}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.#V()}#V(){this.scene&&(this.list=$l(this.scene,this.families)),this.#N(),this.notify(`filters`),this.invalidate()}setHops(e){let t=Math.max(0,Math.min(2,Math.round(e)));t!==this.hops&&(this.hops=t,this.#U())}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(Ou);if(!this.canExpand(e)){r.length>0&&this.#H(r,[]);return}let i=t.id.startsWith(`near:`)?t.id.slice(5):t.id.startsWith(`component:`)?t.id.slice(10):null;this.#H(r,i===null?r:[i,...r])}nearestGroup(){let e=this.focus?.collapsed??[];if(e.length===0)return-1;let t=this.selectionBounds(),n=null;for(let e of this.#i)n??=e.viewport();let 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.#x.announce(z(this.locale,t?`focus.expandUnavailable`:`announce.nothingHidden`)):(this.expandGroup(e),this.#x.announce(z(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)||Yl()!==`unavailable`:!1}#H(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.#U(),Promise.resolve();let a=()=>{let e=Jl(),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.#D(),this.notify(`data`,`selection`,`replay`)}this.#U()};return Jl()?(a(),Promise.resolve()):Xl().then(a,()=>this.#U())}#U(){this.#O(),this.#N(),this.notify(`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.#W(e)?(t(),Promise.resolve()):this.#H([e],[]).then(t)}#W(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.#m=NaN,this.#g=!1,e.play(),this.#u=``,this.#c=0,this.notify(`replay`),this.invalidate())}pause(){this.#m=NaN,this.#g=!1,this.clock?.playing&&(this.clock.pause(),this.notify(`replay`),this.invalidate())}togglePlay(){this.clock?.playing?this.pause():this.play()}setLoop(e){let t=this.#p;this.#p=e===null?null:Number.isFinite(e)?Math.max(0,e):0,this.#p===null?this.#m=NaN:t===null&&this.#G()}get loopDelay(){return this.#p}hold(e){if(e===this.#h)return;this.#h=e;let t=this.clock;if(e){if(!t?.playing)return;t.pause(),this.#g=!0,this.notify(`replay`),this.invalidate()}else!Number.isNaN(this.#m)&&this.#p!==null&&(this.#m=this.#S.now()+this.#p,this.#k()),this.#g&&this.play()}#G(){this.#p!==null&&this.status===`ready`&&this.mode===`replay`&&this.clock&&!this.clock.playing&&Number.isNaN(this.#m)&&(this.#h?this.#g=!0:this.play())}#K(){this.#x.announce(z(this.locale,`announce.finished`));let e=this.#p!==null;e&&(this.#m=this.#S.now()+(this.#p??0)),this.#x.replayEnd(e)}#q(){this.#m=NaN;for(let e of this.#i)e.looped();this.clock?.seek(0),this.play()}seek(e){let t=this.clock;t&&(this.#m=NaN,t.seek(e),this.notify(`replay`),this.#R(),this.invalidate())}stepReplay(e){let t=this.clock;if(!t)return;t.step(e),this.#m=NaN,this.#g=!1,this.#u=``;let n=t.timeline.windows[t.position()-1];n&&(t.timeline.mode===`chapters`?this.#I(`chapter`,n.chapter):this.#I(`hunk`,n.hunk),this.#L(t.timeline.mode===`chapters`?t.timeline.chapters[n.chapter]?.hunks??[n.hunk]:[n.hunk])),this.notify(`replay`),this.invalidate()}restart(){this.clock?.seek(0),this.play()}cycleSpeed(){this.clock?.cycleSpeed(),this.notify(`replay`)}setSpeed(e){this.clock?.setSpeed(e),this.notify(`replay`)}setSplit(e){let t=Number.isFinite(e)?Math.min(1,Math.max(0,e)):.5;t!==this.split&&(this.split=t,this.notify(`swipe`),this.mode===`swipe`&&this.invalidate())}setReviewed(e,t){let n=this.#n;if(!n?.setReviewed(e,t))return;let r=n.state();this.notify(`review`),this.#x.review(e,t,r);let i=z(this.locale,`review.progress`,{done:r.reviewed.length,total:r.total});this.#x.announce(z(this.locale,t?`announce.reviewed`:`announce.unreviewed`,{progress:i}))}syncReview(e){this.#n?.reload(e)&&this.notify(`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))}#J(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.#Y(),i&&this.notify(`theme`),a&&this.notify(`locale`,`data`)}#Y(){if(this.data)this.#D();else for(let e of this.#i)e.sceneChanged()}refreshTheme(){let e=this.#C();e!==this.#e&&(this.#e=e,this.#t=`${this.themeName}/${this.palette}`,this.#Y(),this.notify(`theme`))}setThemePreference(e){this.#J(()=>{this.themePreference=Jn(e)??`auto`}),this.notify(`theme`)}setPalette(e){this.#J(()=>{this.palette=Yn(e)??`default`})}setLocale(e){this.#J(()=>{this.locale=Xn(e)??`en`})}setSystemDark(e){this.#J(()=>{this.systemDark=e})}setReducedMotion(e){this.reducedMotion=e,this.invalidate()}};function Ou(e){return e!==void 0}function ku(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 Au=1.8,ju=2.5,Mu=200;function Nu(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 Pu=class extends Du{autoFit=!1;selectOnClick=!0;overview=!0;#e=!1;#t=null;#n=null;#r=[];#i={main:null,before:null,after:null};#a=!0;#o=-1/0;#s=-1/0;#c=null;#l=null;#u=null;#d=!1;#f=!1;#p=24;#m;constructor(e,t){super(e,t),this.#m=t.now,this.addView(this)}attach(e,t){if(this.#t)return;let n=Hl(),r=n.createRenderer(e,{theme:this.theme,labelsInside:this.#e});this.#t=r,this.#u&&r.camera.set(this.#u),t&&(this.#n=n.createMinimap(t,r)),this.#r.push(r.on(`hover`,e=>this.#S(e)),r.on(`click`,({pick:e})=>this.#C(e)),r.on(`dblclick`,({pick:e})=>this.#w(e)),r.on(`camera`,({source:e})=>{e===`user`&&this.noteUserCamera(),this.#x()})),this.#a=!0,this.invalidate()}detach(){this.#t&&this.status===`ready`&&(this.#u=this.#t.camera.get()),this.sleep();for(let e of this.#r.splice(0))e();this.#n?.destroy(),this.#n=null,this.#t?.destroy(),this.#t=null}destroy(){super.destroy(),this.detach()}get camera(){return this.#t?.camera??null}setChrome(e){this.#l=e}setLabelsInside(e){this.#e=e,this.#t?.setLabelsInside(e)}layoutChanged(){if(this.#x(),this.status!==`ready`)return;if(!this.#d){this.autoFit&&!this.#f&&this.fit({animate:!1});return}let e=this.selectionBounds();if(e){if(!this.#h(e,1.8))return;this.#d=!1,this.#g(e,{animate:!1});return}let t=this.#y(),n=this.#t?.camera;t&&n&&this.#v(n,t,{animate:!1})}noteUserCamera(){this.#s=this.#m(),this.#f=!0}draw(e=this.#m()){let t=this.resolver,n=this.#t;if(!t||!n||this.status!==`ready`)return;let r=this.#i,i;if(this.mode===`swipe`)r.before=t.resolve(this.viewState(`before`),r.before??void 0),r.after=t.resolve(this.viewState(`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.viewState(e),r.main??void 0),n.setFrame(r.main),i=r.main}let a=this.mode===`replay`&&(this.clock?.playing??!1);this.#n&&(this.#a||a&&e-this.#o>=Mu)&&(this.#n.update(i),this.#a=!1,this.#o=e)}sceneChanged(){let e=this.#i;e.main=e.before=e.after=null,this.#t?.setTheme(this.scene?.theme??this.theme),this.#a=!0}installed(){this.#d=!0,this.#u=null,queueMicrotask(()=>this.layoutChanged())}drawnChanged(){this.#x(),this.#a=!0}show(e){this.#g(e)}follow(e){if(this.#m()-this.#s<2e3)return;let t=this.#_(e);!t||Nu(e,t)>=.7||this.#g(e)}looped(){this.autoFit&&this.fit()}viewport(){return this.#t?.camera.viewport()??null}#h(e,t){let n=this.#l?.();return!n||!(n.width>0)||!(n.height>0)?null:Il(e,n,24,t)}#g(e,t={}){let n=this.#t?.camera;if(!n)return;let r=this.#h(e,Au);n.flyTo(e,{...t,maxZoom:Au,...r?{padding:r}:{}})}#_(e){let t=this.#t?.camera;if(!t)return null;let n=this.#h(e,1.8)??Pl;return Bl(t.viewport(),t.get().k,n)}fit(e={}){let t=this.#t?.camera;if(!t)return Promise.resolve();let{padding:n,...r}=e;n!==void 0&&(this.#p=Number.isFinite(n)&&n>=0?n:24);let i=this.#y();return i?this.#v(t,i,r):t.fit(void 0,r)}#v(e,t,n){return this.#d=!1,this.#f=!1,e.fit(t.bounds,{...n,padding:t.insets,maxZoom:ju})}#y(){let e=this.#l?.(),t=this.resolver;if(!e||!t||!(e.width>0)||!(e.height>0))return null;let n=So(t.resolve(kl({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.#p,c=Il(i,e,s,ju),l=zl(r,a,o,c,ju);if(!l)return null;let u=Il(l.content,e,s,ju);return Fu(u,c)||(c=u,l=zl(r,a,o,c,2.5)??l),{bounds:l.bounds,insets:c}}#b(){let e=this.scene;if(!e)return null;let t=this.focus,n=this.#c;if(n&&n.scene===e&&n.focus===t)return n.rect;let r=t?Iu(e,t):Rc(e);return this.#c={scene:e,focus:t,rect:r},r}#x(){let e=this.#b(),t=this.#t?.camera.viewport(),n=!e||!t||Nu(e,t)>=.98;n!==this.overview&&(this.overview=n,this.notify(`overview`))}zoom(e){this.noteUserCamera(),this.#t?.camera.zoomBy(e>0?1.4:1/1.4)}#S(e){this.setHover(e?.type===`node`?e.index:-1,e?.type===`edge`?e.index:-1,e?.type===`collapsed`?e.index:-1)}#C(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)}}}#w(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))}};function Fu(e,t){return e.top===t.top&&e.right===t.right&&e.bottom===t.bottom&&e.left===t.left}function Iu(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?ku({x:n,y:r,width:i-n,height:a-r},160,1.12):Rc(e)}var Lu={1:`overlay`,2:`swipe`,3:`replay`},Ru=.02,zu=.1;function Bu(e,t,n=`all`){if(e.ctrlKey||e.metaKey||e.altKey)return null;let r=e.key,i=Lu[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?zu:Ru)}: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 Vu(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`}function Hu(e){return typeof requestAnimationFrame==`function`?requestAnimationFrame(e):0}function Uu(e){typeof cancelAnimationFrame==`function`&&cancelAnimationFrame(e)}function Wu(e){let t=!1,n=()=>{t||(t=!0,Uu(i),clearTimeout(r),e())},r=setTimeout(n,32),i=Hu(n)}function Gu(){return new Promise(e=>Wu(()=>setTimeout(e,0)))}var Ku=[`added`,`removed`,`content`,`structure`,`identity`],qu=`:host{all:initial;display:block;position:relative;height:100%;min-height:420px;contain:content;font-family:var(--kgdiff-font);font-size:13px;line-height:1.45;color:var(--kgdiff-text);background:var(--kgdiff-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(--kgdiff-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(--kgdiff-mono);color:var(--kgdiff-text-2);background:var(--kgdiff-kbd);box-shadow:inset 0 0 0 1px var(--kgdiff-border),inset 0 -1px 0 var(--kgdiff-border)}.scroll{overflow:auto;scrollbar-width:thin;scrollbar-color:var(--kgdiff-border-strong) transparent}.root{position:absolute;inset:0;display:flex;flex-direction:column;overflow:hidden;background:var(--kgdiff-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(--kgdiff-bg);container-type:inline-size}.stage{position:absolute;inset:0}.stage canvas{outline:none}.stage canvas:focus-visible{outline:2px solid var(--kgdiff-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(--kgdiff-text-2);transition:background var(--kgdiff-fast) var(--kgdiff-ease),color var(--kgdiff-fast) var(--kgdiff-ease)}.icon-btn:hover{background:var(--kgdiff-hover);color:var(--kgdiff-text)}.icon-btn:active{background:var(--kgdiff-press)}.icon-btn[aria-pressed="true"],.icon-btn[aria-expanded="true"]{background:var(--kgdiff-press);color:var(--kgdiff-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(--kgdiff-text);background:var(--kgdiff-hover);box-shadow:inset 0 0 0 1px var(--kgdiff-border);transition:background var(--kgdiff-fast) var(--kgdiff-ease),box-shadow var(--kgdiff-fast) var(--kgdiff-ease)}.btn:hover{background:var(--kgdiff-press);box-shadow:inset 0 0 0 1px var(--kgdiff-border-strong)}.link-btn{min-height:28px;color:var(--kgdiff-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(--kgdiff-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(--kgdiff-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(--kgdiff-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.versions .arrow{color:var(--kgdiff-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(--kgdiff-mono);color:var(--kgdiff-text-2);background:var(--kgdiff-hover);box-shadow:inset 0 0 0 1px var(--kgdiff-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(--kgdiff-hover);box-shadow:inset 0 0 0 1px var(--kgdiff-border)}.segmented .thumb{position:absolute;top:2px;bottom:2px;left:0;width:0;border-radius:7px;background:var(--kgdiff-raised);box-shadow:0 1px 2px rgba(0,0,0,0.12),inset 0 0 0 1px var(--kgdiff-border-strong);transition:transform var(--kgdiff-base) var(--kgdiff-ease),width var(--kgdiff-base) var(--kgdiff-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(--kgdiff-text-2);white-space:nowrap;transition:color var(--kgdiff-fast) var(--kgdiff-ease)}.seg:hover{color:var(--kgdiff-text)}.seg[aria-checked="true"]{color:var(--kgdiff-text)}.seg .icon{opacity:0.9}${[...Ku,`neutral`].map(e=>e===`neutral`?`[data-family="neutral"] { --fam-base: var(--kgdiff-neutral); --fam-soft: var(--kgdiff-hover); --fam-text: var(--kgdiff-text-2); }`:`[data-family="${e}"] { --fam-base: var(--kgdiff-${e}); --fam-soft: var(--kgdiff-${e}-soft); --fam-text: var(--kgdiff-${e}-text); }`).join(`
|
|
4
|
-
`)}.card{background:var(--kgdiff-overlay);border-radius:12px;box-shadow:var(--kgdiff-shadow),0 0 0 1px var(--kgdiff-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(--kgdiff-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(--kgdiff-border);animation:fade var(--kgdiff-base) var(--kgdiff-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(--kgdiff-text-3);border-radius:7px;width:100%}.legend-head:hover{color:var(--kgdiff-text-2);background:var(--kgdiff-hover)}.legend-head .icon{width:14px;height:14px;margin-left:auto;transition:transform var(--kgdiff-base) var(--kgdiff-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(--kgdiff-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(--kgdiff-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(--kgdiff-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(--kgdiff-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(--kgdiff-text-2);white-space:nowrap;transition:background var(--kgdiff-fast) var(--kgdiff-ease),color var(--kgdiff-fast) var(--kgdiff-ease),box-shadow var(--kgdiff-fast) var(--kgdiff-ease)}.scope-btn:hover{color:var(--kgdiff-text);background:var(--kgdiff-hover)}.scope-btn[aria-pressed="true"]{color:var(--kgdiff-accent-text);background:var(--kgdiff-accent-soft);box-shadow:inset 0 0 0 1px var(--kgdiff-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(--kgdiff-base) var(--kgdiff-ease)}@keyframes reveal{from{opacity:0;transform:translateX(-6px)}}.context .label{font-size:12px;font-weight:550;color:var(--kgdiff-text-3);white-space:nowrap}.context .opts{display:inline-flex;gap:2px;padding:2px;border-radius:8px;background:var(--kgdiff-hover)}.context .opt{width:28px;height:28px;border-radius:6px;font-size:12px;font-weight:600;color:var(--kgdiff-text-2);font-variant-numeric:tabular-nums}.context .opt:hover{color:var(--kgdiff-text)}.context .opt[aria-checked="true"]{background:var(--kgdiff-raised);color:var(--kgdiff-text);box-shadow:inset 0 0 0 1px var(--kgdiff-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(--kgdiff-text-2);box-shadow:inset 0 0 0 1px var(--kgdiff-border-strong);font-variant-numeric:tabular-nums}.context .expand:hover:not(:disabled){color:var(--kgdiff-text);background:var(--kgdiff-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(--kgdiff-accent);opacity:0.85;box-shadow:0 0 12px var(--kgdiff-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(--kgdiff-accent-text);background:var(--kgdiff-overlay);box-shadow:var(--kgdiff-shadow),0 0 0 1.5px var(--kgdiff-accent);backdrop-filter:blur(16px);transition:transform var(--kgdiff-fast) var(--kgdiff-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(--kgdiff-shadow),0 0 0 2px var(--kgdiff-accent),0 0 0 5px var(--kgdiff-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(--kgdiff-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(--kgdiff-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(--kgdiff-text-2);font-variant-numeric:tabular-nums;box-shadow:inset 0 0 0 1px var(--kgdiff-border)}.transport .speed:hover{color:var(--kgdiff-text);background:var(--kgdiff-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(--kgdiff-track);overflow:hidden}.scrubber .fill{position:absolute;left:0;top:0;bottom:0;width:100%;transform-origin:left;background:var(--kgdiff-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(--kgdiff-text);box-shadow:0 1px 4px rgba(0,0,0,0.35),0 0 0 3px var(--kgdiff-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(--kgdiff-text);animation:rise var(--kgdiff-base) var(--kgdiff-ease)}.finished .icon{color:var(--kgdiff-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(--kgdiff-fast) var(--kgdiff-ease)}.tooltip[data-open="true"]{opacity:1}.tooltip .t-label{font-size:13px;font-weight:600;color:var(--kgdiff-text);overflow-wrap:anywhere}.tooltip .t-old{font-size:12px;color:var(--kgdiff-text-3);text-decoration:line-through;overflow-wrap:anywhere}.tooltip .t-id{margin-top:2px;font:11px/1.4 var(--kgdiff-mono);color:var(--kgdiff-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(--kgdiff-text-2);overflow-wrap:anywhere}.tooltip .t-hint{margin-top:6px;font-size:11px;color:var(--kgdiff-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(--kgdiff-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(--kgdiff-accent-text);background:var(--kgdiff-accent-soft);margin-bottom:16px}.state-card .state-icon .icon{width:20px;height:20px}.state-card.error .state-icon{color:var(--kgdiff-removed-text);background:var(--kgdiff-removed-soft)}.state-card.ok .state-icon{color:var(--kgdiff-added-text);background:var(--kgdiff-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(--kgdiff-text-2);font-size:13px}.state-card details{margin-top:16px;font-size:12px;color:var(--kgdiff-text-2)}.state-card summary{cursor:pointer;font-weight:550;color:var(--kgdiff-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(--kgdiff-input);font:11.5px/1.5 var(--kgdiff-mono);white-space:pre-wrap;overflow-wrap:anywhere;color:var(--kgdiff-text-2);box-shadow:inset 0 0 0 1px var(--kgdiff-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(--kgdiff-text-3);transition:color var(--kgdiff-base) var(--kgdiff-ease)}.steps li[data-state="active"]{color:var(--kgdiff-text);font-weight:550}.steps li[data-state="done"]{color:var(--kgdiff-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(--kgdiff-border-strong)}.steps li[data-state="done"] .mark{background:var(--kgdiff-accent-soft);box-shadow:none;color:var(--kgdiff-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(--kgdiff-accent-soft);border-top:1.5px solid var(--kgdiff-accent);animation:spin 0.8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.skeleton-grid{position:absolute;inset:0;background-image:radial-gradient(var(--kgdiff-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(--kgdiff-panel);border-left:1px solid var(--kgdiff-border);transition:width var(--kgdiff-base) var(--kgdiff-ease),border-color var(--kgdiff-base) var(--kgdiff-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(--kgdiff-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(--kgdiff-text-2);background:var(--kgdiff-hover);box-shadow:inset 0 0 0 1px var(--kgdiff-border);font-variant-numeric:tabular-nums}.progress{margin-left:auto;display:flex;align-items:center;gap:8px;font-size:11.5px;color:var(--kgdiff-text-3);font-variant-numeric:tabular-nums}.progress .bar{width:64px;height:4px;border-radius:2px;background:var(--kgdiff-track);overflow:hidden}.progress .bar>div{height:100%;width:100%;transform-origin:left;background:var(--kgdiff-accent);border-radius:2px;transition:transform var(--kgdiff-base) var(--kgdiff-ease)}.progress[data-complete="true"]{color:var(--kgdiff-accent-text)}.search{position:relative;display:flex;align-items:center;height:32px;border-radius:8px;background:var(--kgdiff-input);box-shadow:inset 0 0 0 1px var(--kgdiff-border);transition:box-shadow var(--kgdiff-fast) var(--kgdiff-ease)}.search:focus-within{box-shadow:inset 0 0 0 1px var(--kgdiff-accent),0 0 0 3px var(--kgdiff-accent-soft)}.search>.icon{position:absolute;left:10px;color:var(--kgdiff-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(--kgdiff-text)}.search input::placeholder{color:var(--kgdiff-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(--kgdiff-text-3)}.search .clear:hover{color:var(--kgdiff-text);background:var(--kgdiff-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(--kgdiff-text-2);box-shadow:inset 0 0 0 1px var(--kgdiff-border);transition:background var(--kgdiff-fast) var(--kgdiff-ease),box-shadow var(--kgdiff-fast) var(--kgdiff-ease),color var(--kgdiff-fast) var(--kgdiff-ease)}.fchip:hover{background:var(--kgdiff-hover);color:var(--kgdiff-text)}.fchip .swatch{width:16px;height:16px;margin:0 -1px}.fchip .n{color:var(--kgdiff-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(--kgdiff-accent)}.list:focus-visible .row[aria-selected="true"]{box-shadow:inset 0 0 0 2px var(--kgdiff-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(--kgdiff-fast) var(--kgdiff-ease),box-shadow var(--kgdiff-fast) var(--kgdiff-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(--kgdiff-hover)}.row[aria-selected="true"]{background:var(--kgdiff-selected);box-shadow:inset 0 0 0 1px var(--kgdiff-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(--kgdiff-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.row .sub{font-size:12px;color:var(--kgdiff-text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-height:17px}.row[data-reviewed="true"] .title{color:var(--kgdiff-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(--kgdiff-control-border);color:transparent;transition:background var(--kgdiff-fast) var(--kgdiff-ease),box-shadow var(--kgdiff-fast) var(--kgdiff-ease),color var(--kgdiff-fast) var(--kgdiff-ease),transform var(--kgdiff-fast) var(--kgdiff-ease)}.rv .ring .icon{width:12px;height:12px}.rv:hover .ring{box-shadow:inset 0 0 0 1.5px var(--kgdiff-accent);color:var(--kgdiff-text-3)}.rv[data-pressed="true"] .ring{background:var(--kgdiff-accent);box-shadow:none;color:var(--kgdiff-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(--kgdiff-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(--kgdiff-panel);box-shadow:0 1px 0 var(--kgdiff-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(--kgdiff-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(--kgdiff-skeleton)}.skeleton-row:nth-child(even) .b{max-width:52%}.skeleton-row .g{width:20px;height:20px;border-radius:6px;background:var(--kgdiff-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(--kgdiff-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(--kgdiff-hover)}.result[aria-selected="true"]{box-shadow:inset 0 0 0 1px var(--kgdiff-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(--kgdiff-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(--kgdiff-mono);color:var(--kgdiff-text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.result mark{background:var(--kgdiff-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(--kgdiff-border);background:var(--kgdiff-panel)}.detail[data-empty="true"]{flex:none}.detail-empty{padding:16px;display:flex;align-items:center;gap:12px;color:var(--kgdiff-text-3);font-size:12.5px}.detail-empty .icon{color:var(--kgdiff-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(--kgdiff-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(--kgdiff-text-2);box-shadow:inset 0 0 0 1px var(--kgdiff-border);margin-right:4px}.rv-btn:hover{color:var(--kgdiff-text);background:var(--kgdiff-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(--kgdiff-control-border);color:transparent}.rv-btn .ring .icon{width:11px;height:11px}.rv-btn[aria-pressed="true"]{color:var(--kgdiff-accent-text);box-shadow:inset 0 0 0 1px var(--kgdiff-accent);background:var(--kgdiff-accent-soft)}.rv-btn[aria-pressed="true"] .ring{background:var(--kgdiff-accent);box-shadow:none;color:var(--kgdiff-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(--kgdiff-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(--kgdiff-text-3)}.kv dd{margin:0;min-width:0;overflow-wrap:anywhere}.id-text{font:12px/1.5 var(--kgdiff-mono);color:var(--kgdiff-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(--kgdiff-hover);box-shadow:inset 0 0 0 1px var(--kgdiff-border);overflow-wrap:anywhere}.vchip.add{color:var(--kgdiff-added-text);background:var(--kgdiff-added-soft);box-shadow:none}.vchip.del{color:var(--kgdiff-removed-text);background:var(--kgdiff-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(--kgdiff-text-2)}.pair .arr{color:var(--kgdiff-text-3)}.line{display:grid;grid-template-columns:10px minmax(0,1fr);gap:6px;align-items:baseline}.line .sign{font:600 12px/1 var(--kgdiff-mono);text-align:center}.line.old .sign{color:var(--kgdiff-removed-text)}.line.new .sign{color:var(--kgdiff-added-text)}del.hl{text-decoration:line-through;text-decoration-color:var(--kgdiff-removed);background:var(--kgdiff-removed-soft);color:var(--kgdiff-removed-text);border-radius:3px;padding:0 1px}ins.hl{text-decoration:none;background:var(--kgdiff-added-soft);color:var(--kgdiff-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(--kgdiff-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(--kgdiff-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(--kgdiff-text-2);border-radius:4px}.disclosure:hover{color:var(--kgdiff-text)}.disclosure .icon{width:12px;height:12px;transition:transform var(--kgdiff-base) var(--kgdiff-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(--kgdiff-hover)}.rel .sign{flex:none;width:12px;font:600 12px/1.5 var(--kgdiff-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(--kgdiff-text-2);white-space:nowrap}.rel .was{color:var(--kgdiff-text-3)}.rel.removed .s{text-decoration:line-through;text-decoration-color:var(--kgdiff-text-3);color:var(--kgdiff-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(--kgdiff-hover)}.node-link[aria-current="true"]{background:var(--kgdiff-hover);box-shadow:inset 0 0 0 1px var(--kgdiff-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(--kgdiff-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(--kgdiff-text-3)}.comp-row .note{color:var(--kgdiff-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(--kgdiff-text-2)}.bar-row .track{height:6px;border-radius:3px;background:var(--kgdiff-track);overflow:hidden}.bar-row .fill{height:100%;border-radius:3px;background:var(--kgdiff-identity)}.bar-row .v{text-align:right;color:var(--kgdiff-text-2);font-variant-numeric:tabular-nums}.note-line{font-size:12px;color:var(--kgdiff-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(--kgdiff-fast) var(--kgdiff-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(--kgdiff-border)}.menu-label{padding:6px 8px 4px;font-size:11px;font-weight:650;letter-spacing:0.06em;text-transform:uppercase;color:var(--kgdiff-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(--kgdiff-text);text-align:left}.menu-item:hover,.menu-item:focus-visible{background:var(--kgdiff-hover);outline:none}.menu-item .icon{color:var(--kgdiff-text-2)}.menu-item .check{margin-left:auto;color:var(--kgdiff-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(--kgdiff-scrim);animation:fade var(--kgdiff-fast) var(--kgdiff-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(--kgdiff-base) var(--kgdiff-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(--kgdiff-border);font-size:12.5px;color:var(--kgdiff-text-2)}.key-row .ks{display:inline-flex;align-items:center;gap:3px;flex:none;color:var(--kgdiff-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(--kgdiff-border);border-radius:14px 14px 0 0;margin-top:-14px;box-shadow:0 -8px 24px rgba(0,0,0,0.18);transition:height var(--kgdiff-base) var(--kgdiff-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(--kgdiff-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 Ju(e,t){let n=new((e.defaultView?.CSSStyleSheet)??CSSStyleSheet);return n.replaceSync(t),n}var Yu=new WeakMap;function Xu(e){let t=Yu.get(e);return t||(t=Ju(e,qu),Yu.set(e,t)),t}var Zu=[[`bg`,`canvas.background`],[`grid`,`canvas.grid`],[`panel`,`surface.panel`],[`raised`,`surface.raised`],[`overlay`,`surface.overlay`],[`border`,`surface.border`],[`border-strong`,`surface.borderStrong`],[`control-border`,`surface.controlBorder`],[`shadow`,`surface.shadow`],[`text`,`text.primary`],[`text-2`,`text.secondary`],[`text-3`,`text.muted`],[`accent`,`accent.base`],[`accent-strong`,`accent.strong`],[`accent-soft`,`accent.soft`],[`accent-text`,`accent.text`],[`neutral`,`neutral.node`],[`neutral-stroke`,`neutral.nodeStroke`],[`neutral-edge`,`neutral.edge`],[`neutral-label`,`neutral.label`],[`font`,`font.family`],[`mono`,`font.mono`],...Ku.flatMap(e=>[[e,`family.${e}.base`],[`${e}-strong`,`family.${e}.strong`],[`${e}-soft`,`family.${e}.soft`],[`${e}-text`,`family.${e}.text`]])],Qu=new Set([`shadow`,`font`,`mono`]);function $u(e,t){let n=e;for(let e of t.split(`.`))n=n[e];return n}function ed(e,t,n){let[r=``,...i]=t;return{...e,[r]:i.length>0?ed(e[r],i,n):n}}function td(e){let t=e.name===`dark`,n=[[`color-scheme`,t?`dark`:`light`]];for(let[t,r]of Zu)n.push([t,$u(e,r)]);return n.push([`fast`,`${e.motion.fast}ms`],[`base`,`${e.motion.base}ms`],[`slow`,`${e.motion.slow}ms`],[`ease`,`cubic-bezier(${e.motion.easing.join(`, `)})`],[`hover`,t?`rgba(255,255,255,0.045)`:`rgba(15,23,42,0.04)`],[`press`,t?`rgba(255,255,255,0.08)`:`rgba(15,23,42,0.07)`],[`input`,t?e.surface.raised:`#F3F5F8`],[`selected`,t?e.surface.raised:`#F5F7FB`],[`scrim`,t?`rgba(5,7,11,0.56)`:`rgba(15,23,42,0.18)`],[`skeleton`,t?`rgba(255,255,255,0.05)`:`rgba(15,23,42,0.05)`],[`skeleton-hi`,t?`rgba(255,255,255,0.09)`:`rgba(15,23,42,0.09)`],[`track`,t?`rgba(255,255,255,0.08)`:`rgba(15,23,42,0.08)`],[`kbd`,t?`rgba(255,255,255,0.06)`:`rgba(15,23,42,0.05)`]),n.map(([e,t])=>`${e===`color-scheme`?e:`--kgdiff-${e}`}: ${t};`).join(` `)}var nd=new WeakMap;function rd(e,t){let n=nd.get(t);n||(n=new Map,nd.set(t,n));let r=n.get(e);return r||(r=Ju(t,`:host { ${td(e)} }`),n.set(e,r)),r}var id,ad=new Set;function od(e){id??=typeof document>`u`?null:document.createElement(`canvas`).getContext(`2d`);let t=e;if(id&&(id.fillStyle=`#000`,id.fillStyle=e,t=String(id.fillStyle),id.fillStyle=`#fff`,id.fillStyle=e,String(id.fillStyle)!==t))return null;try{return Fs(t,t),t}catch{return null}}var sd=new Map;function cd(e,t){let n=[];for(let[r,i]of Zu){let a=t.getPropertyValue(`--kgdiff-${r}`).trim();if(!a||a===$u(e,i))continue;let o=Qu.has(r)?a:od(a);o===null?ad.has(a)||(ad.add(a),console.warn(`[kgdiff] --kgdiff-${r}: ${a} is not a color the canvas draws.`)):o!==$u(e,i)&&n.push([i,o])}if(n.length===0)return e;let r=`${e.name}/${e.palette}|${n.join(`|`)}`,i=sd.get(r);if(!i){let t=e;for(let[e,r]of n)t=ed(t,e.split(`.`),r);i=t,sd.size>=16&&sd.clear(),sd.set(r,i)}return i}var ld=hr(`kgdiff.viewer/1`);function ud(e){return typeof window<`u`&&typeof window.matchMedia==`function`?window.matchMedia(e):null}var dd=class{controller;live=M(`div`,{class:`sr-only`,"aria-live":`polite`,"aria-atomic":`true`});host;actions;#e;#t=[];#n=new Map;#r=!1;constructor(e,t,n,r){this.host=e,this.#e=t,this.actions=n;let i=(t,n)=>{e.dispatchEvent(new CustomEvent(t,{detail:n,bubbles:!0,composed:!0})),r?.(t)},a={ready:e=>i(`kgdiff-ready`,{stats:e}),select:(e,t)=>i(`kgdiff-select`,{hunk:e,node:t}),mode:(e,t)=>i(`kgdiff-mode`,{mode:e,scope:t}),review:(e,t,n)=>i(`kgdiff-review`,{hunk:e,reviewed:t,progress:n}),error:e=>i(`kgdiff-error`,{error:e}),announce:e=>this.announce(e),replayEnd:e=>i(`kgdiff-replay-end`,{loop:e})};this.controller=new Pu(a,{now:()=>typeof performance<`u`?performance.now():Date.now(),requestFrame:Hu,cancelFrame:Uu,yieldToPaint:Gu,storage:_u(),theme:t=>{this.#i(t);let n=e.ownerDocument.defaultView;return n?cd(t,n.getComputedStyle(e)):t}}),this.controller.subscribe(e=>this.render(e))}connect(){let e=this.controller,t=[Sr(this.host,ld,()=>this)],n=ud(`(prefers-color-scheme: light)`),r=ud(`(prefers-reduced-motion: reduce)`),i=()=>{e.setSystemDark(!(n?.matches??!1)),e.setReducedMotion(r?.matches??!1)};for(let e of[n,r])e?.addEventListener?.(`change`,i),t.push(()=>e?.removeEventListener?.(`change`,i));i(),e.refreshTheme();let a=t=>e.syncReview(t.key);return window.addEventListener(`storage`,a),t.push(()=>window.removeEventListener(`storage`,a)),()=>{for(let e of t)e()}}attach(e){return this.#t.push(e),()=>{let t=this.#t.indexOf(e);t>=0&&this.#t.splice(t,1)}}target(e,t){let n=this.#n.get(e)??[];return this.#n.set(e,n),n.push(t),()=>{let e=n.indexOf(t);e>=0&&n.splice(e,1)}}focus(e){let t=this.#n.get(e)?.at(-1);return t?.(),t!==void 0}announce(e){let t=this.live;t.textContent=``,setTimeout(()=>{t.textContent=e},30)}render(e){try{for(let t of this.#t)t.update(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)))}}#i(e){let t=this.host.ownerDocument,n=rd(e,t);this.#e.adoptedStyleSheets[1]!==n&&(this.#e.adoptedStyleSheets=[Xu(t),n])}handleKey(e){let t=e.composedPath()[0]??null;if(Vu(t))return;let n=this.controller,r=Bu(e,n.mode,n.scope);if(!r)return;let i=t;if((e.key===`Enter`||e.key===` `)&&i?.closest?.(`button, a, summary, [role="radio"], [role="menuitemradio"]`)||n.status!==`ready`&&![`help`,`theme`,`sidebar`,`escape`].includes(r.type))return;e.preventDefault();let a=this.actions;switch(r.type){case`mode`:n.setMode(r.mode);break;case`scope`:n.toggleScope();break;case`next`:n.next();break;case`prev`:n.prev();break;case`first`:n.first();break;case`last`:n.last();break;case`fly`:n.flyToSelection();break;case`escape`:n.query?(n.setQuery(``),this.focus(`search`)):n.clearSelection();break;case`play-pause`:n.togglePlay();break;case`step`:n.stepReplay(r.direction);break;case`divider`:n.setSplit(n.split+r.delta);break;case`fit`:n.fit();break;case`zoom`:n.zoom(r.direction);break;case`search`:a.focusSearch();break;case`review`:n.toggleReviewed();break;case`sidebar`:a.toggleSidebar();break;case`theme`:{let e=Wn.indexOf(n.themePreference);a.setThemePreference(Wn[(e+1)%Wn.length]);break}case`help`:a.openHelp();break;case`expand`:n.expandNearest()}}};function fd(e,t){return{...e.actions,controller:e.controller,root:t,target:(t,n)=>e.target(t,n),focus:t=>e.focus(t)}}function pd(e,t){let n={};if(xr(e,ld,r=>{n.region||(n.region=t(fd(r,e.getRootNode())),r.attach(n.region))}),!n.region)throw Error(`[kgdiff] a region found no root to bind to.`);return n.region}function md(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 hd(e){return md(e.kind,e.family)}function gd(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=>gd(e)).join(`, `):JSON.stringify(e)}function _d(e){if(!Array.isArray(e))return null;let t=[];for(let n of e){if(typeof n==`object`&&n)return null;t.push(gd(n))}return t}var vd=320;function yd(e){return e.kind===`header`?32:56}var bd=class{head;list;sticky;phases=M(`div`,{class:`sr-only`});#e;#t;#n;#r;#i;#a;#o=[];#s=new Map;#c=!1;#l;constructor(e){this.#l=e;let t=e.controller;this.#e=M(`h2`,{id:`kg-changes-title`}),this.#t=M(`span`,{class:`count-badge`}),this.#r=M(`span`),this.#i=M(`div`),this.#n=M(`div`,{class:`progress`},this.#r,M(`span`,{class:`bar`,"aria-hidden":`true`},this.#i)),this.head=M(`div`,{class:`sb-title`},this.#e,this.#t,this.#n),this.#a=M(`div`,{class:`list-inner`,role:`presentation`}),this.list=M(`div`,{class:`list scroll`,role:`listbox`,tabindex:`0`,"aria-labelledby":`kg-changes-title`,"aria-keyshortcuts":`J K X Enter Home End`},this.#a),this.list.addEventListener(`scroll`,()=>this.#m(),{passive:!0}),this.list.addEventListener(`click`,e=>this.#x(e)),this.list.addEventListener(`dblclick`,e=>{e.target.closest(`.row`)&&t.flyToSelection()}),this.sticky=M(`div`,{class:`sticky`,"aria-hidden":`true`,hidden:!0}),e.target(`list`,()=>this.list.focus({preventScroll:!0}))}update(e){let t=this.#l.tr(),n=e.has(`status`)||e.has(`data`)||e.has(`locale`);if(n){F(this.#e,t.t(`sidebar.changes`));let e=this.#l.controller.scene;F(this.#t,t.num(e?.hunks.length??0)),this.#t.hidden=!e}(n||e.has(`filters`))&&this.#f(),(n||e.has(`review`))&&(this.#d(),this.#v()),e.has(`selection`)&&(this.#v(),this.#y()),(n||e.has(`search`))&&this.#u()}#u(){let e=this.#l.controller.query.trim()!==``;this.list.hidden!==e&&(this.list.hidden=e,e?this.sticky.hidden=!0:this.#m())}#d(){let e=this.#l.tr(),t=this.#l.controller.reviewState(),n=t.reviewed.length,r=t.total;this.#n.hidden=r===0;let i=r>0&&n===r;P(this.#n,`data-complete`,String(i)),F(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})`}#f(){let e=this.#l.controller,t=this.#l.tr();N(this.phases,e.list.items.map(e=>e.kind===`header`?M(`span`,{id:`kg-phase-${e.phase}`,text:`${t.t(`phase.${e.phase}`)} (${t.num(e.count)})`}):null));for(let e of this.#s.values())e.remove();this.#s.clear();let n=e.list.items;this.#o=Array(n.length);let r=0;for(let e=0;e<n.length;e++)this.#o[e]=r,r+=yd(n[e]);this.#a.style.height=`${r+8}px`,this.#p(),this.renderWindow()}#p(){let e=this.#l.controller,t=this.#l.tr();if(this.#a.querySelector(`.list-empty, .skeleton`)?.remove(),e.status===`loading`||e.status===`idle`){let t=M(`div`,{class:`skeleton`,"aria-hidden":`true`});if(e.status===`loading`)for(let e=0;e<6;e++)t.appendChild(M(`div`,{class:`skeleton-row shimmer`},M(`span`,{class:`g`}),M(`span`,{class:`b`})));this.#a.appendChild(t);return}if(e.status!==`ready`||e.list.items.length>0)return;let n=e.families.size>0&&e.hunkCount>0;this.#a.appendChild(M(`div`,{class:`list-empty`},I(n?`search`:`check-circle`),M(`span`,{text:t.t(n?`sidebar.filteredEmpty`:`sidebar.noChanges`)}),n?M(`button`,{type:`button`,class:`btn`,text:t.t(`sidebar.clearFilters`),onclick:()=>e.setFamilies([])}):null))}#m(){this.#c||(this.#c=!0,Wu(()=>{this.#c=!1,this.renderWindow()}))}#h(e){let t=0,n=this.#o.length;for(;t<n;){let r=t+n>>1;this.#o[r]+56<=e?t=r+1:n=r}return t}renderWindow(){let e=this.#l.controller.list.items,t=this.list.scrollTop,n=this.list.clientHeight||640,r=this.#h(Math.max(0,t-vd)),i=t+n+vd,a=new Set;for(let t=r;t<e.length&&this.#o[t]<i;t++)a.add(t);for(let[e,t]of this.#s)a.has(e)||(t.remove(),this.#s.delete(e));for(let t of a){if(this.#s.has(t))continue;let n=this.#g(e[t],this.#o[t]);this.#s.set(t,n),this.#a.appendChild(n)}this.#b(t)}#g(e,t){let n=this.#l.tr(),r=this.#l.controller;if(e.kind===`header`)return M(`div`,{class:`group`,role:`presentation`,style:`top: ${t}px`},M(`span`,{text:n.t(`phase.${e.phase}`)}),M(`span`,{class:`n`,text:n.num(e.count)}));let i=r.scene?.hunks[e.hunk],a=r.isReviewed(i.id),o=M(`span`,{class:`rv`,"aria-hidden":`true`,"data-pressed":String(a),title:n.t(a?`review.unmark`:`review.mark`),"data-hunk":i.id},M(`span`,{class:`ring`},I(`check`))),s=r.list.rank.get(e.hunk)??0,c=M(`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`},M(`span`,{class:`glyph-box`,"aria-hidden":`true`,text:hd(i)}),M(`span`,{class:`txt`},M(`span`,{class:`title`,title:i.title,text:i.title}),M(`span`,{class:`sub`,text:i.subtitle})),o);return this.#_(c,i,a),c}#_(e,t,n){let r=this.#l.tr(),i=[t.title];t.subtitle&&i.push(t.subtitle),n&&i.push(r.t(`review.toggle`)),P(e,`aria-label`,i.join(`. `))}#v(){let e=this.#l.controller,t=this.#l.tr();for(let n of this.#s.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);P(n,`aria-selected`,String(r===e.selectedHunk)),P(n,`data-reviewed`,String(a));let o=n.querySelector(`.rv`);P(o,`data-pressed`,String(a)),P(o,`title`,t.t(a?`review.unmark`:`review.mark`)),this.#_(n,i,a)}let n=e.selectedHunk;P(this.list,`aria-activedescendant`,n>=0&&e.list.rank.has(n)?`kg-opt-${n}`:null)}#y(){let e=this.#l.controller,t=e.list.itemOf.get(e.selectedHunk);if(t===void 0)return;let n=this.#o[t],r=this.list.scrollTop,i=this.list.clientHeight||640,a=e.list.items[t-1]?.kind===`header`?this.#o[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.#v()}#b(e){let t=this.#l.controller.list.items,n=-1,r=-1;for(let i=0;i<t.length;i++)if(t[i]?.kind===`header`){if(this.#o[i]<=e)n=i;else{r=i;break}}if(n<0||e<=0){this.sticky.hidden=!0;return}let i=t[n],a=this.#l.tr();this.sticky.hidden=!1;let o=`${a.t(`phase.${i.phase}`)}|${i.count}`;this.sticky.dataset.key!==o&&(this.sticky.dataset.key=o,N(this.sticky,M(`div`,{class:`group`},M(`span`,{text:a.t(`phase.${i.phase}`)}),M(`span`,{class:`n`,text:a.num(i.count)}))));let s=r>=0?Math.min(0,this.#o[r]-e-32):0;this.sticky.style.transform=`translateY(${s}px)`}#x(e){let t=this.#l.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)}},xd=1024;function Sd(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=Cd(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 wd(a)}function Cd(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,xd),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 wd(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 Td(e){return e.map(e=>({op:e.op,text:e.items.join(``)}))}function Ed(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&&Dd(e,o)?(r+=s.text,i+=s.text):(a(),n.push(s))}}return a(),n}function Dd(e,t){let n=e[t+1];return n!==void 0&&n.op!==`equal`}function Od(e,t){return Ed(Td(Sd(Array.from(e),Array.from(t))))}var kd=/\s+|[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}]|[\p{L}\p{N}\p{M}_'’-]+|[^\s]/gu;function Ad(e){return e.match(kd)??[]}function jd(e,t){return Ed(Td(Sd(Ad(e),Ad(t))),2)}var Md=.5,Nd=400;function Pd(e,t){let n=0;for(let r of Sd(e,t))r.op===`equal`&&(n+=r.items.length);return 2*n/(e.length+t.length)}function Fd(e,t){let n=[];if(e.length===1&&t.length===1)n.push([1,0,0]);else if(e.length*t.length<=Nd){let r=t.map(e=>Array.from(e));e.forEach((e,t)=>{let i=Array.from(e);r.forEach((e,r)=>{let a=Pd(i,e);a>=Md&&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 Id=12,Ld=12,Rd=180,zd=60;function Bd(e,t,...n){return M(`section`,{class:`section`},M(`h3`,null,e,t===null?null:M(`span`,{class:`n`,text:String(t)})),...n)}function Vd(e){let t=M(`dl`,{class:`kv`});for(let[n,r]of e)t.append(M(`dt`,{text:n}),M(`dd`,null,...[r].flat()));return t}function Hd(e,t){let n=[];for(let r of e)r.op===`equal`?n.push(r.text):r.op===`delete`&&t===`before`?n.push(M(`del`,{class:`hl`,text:r.text})):r.op===`insert`&&t===`after`&&n.push(M(`ins`,{class:`hl`,text:r.text}));return n}function $(e,t){let n=t===`add`?`+`:t===`del`?`−`:``;return M(`span`,{class:`vchip${t===`same`?``:` ${t}`}`},n?M(`span`,{class:`sign`,"aria-hidden":`true`,text:n}):null,e)}function Ud(e,t,n=[]){return M(`div`,{class:`chips`},t.map(e=>$(e,`del`)),e.map(e=>$(e,`add`)),n.map(e=>$(e,`same`)))}function Wd(e,t,n){return M(`div`,{class:`pair`},M(`span`,{class:`b`},e),M(`span`,{class:`arr`,"aria-hidden":`true`,text:`→`}),M(`span`,{class:`sr-only`,text:n.t(`detail.changedTo`)}),M(`span`,null,t))}function Gd(e,t,n){let r=Od(e,t);return Wd(Hd(r,`before`),Hd(r,`after`),n)}function Kd(e,t){return M(`div`,{class:`line ${e}`},M(`span`,{class:`sign`,"aria-hidden":`true`,text:e===`old`?`−`:`+`}),M(`div`,null,t))}function qd(e,t,n,r=[]){let i=Fd(t,e),a=i.pairs.map(([e,t])=>Gd(e,t,n));return(i.added.length>0||i.removed.length>0||r.length>0)&&a.push(Ud(i.added,i.removed,r)),a}function Jd(e,t=`attrs`){return M(`table`,{class:t},M(`colgroup`,null,M(`col`,{class:`k`}),M(`col`)),M(`tbody`,null,e.map(([e,t])=>M(`tr`,null,M(`td`,{class:`k`,text:e}),M(`td`,null,t)))))}function Yd(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 Xd=class{el;#e;#t=!1;#n=!1;#r=!1;#i=new Set;#a=``;#o;constructor(e){this.#o=e,this.#e=M(`div`,{class:`detail-scroll scroll`,tabindex:`-1`}),this.el=M(`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();P(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){P(this.el,`data-empty`,`true`),Dn(this.#o.root,this.#e,this.#e,M(`div`,{class:`detail-empty`},I(`changes`),M(`div`,null,M(`div`,{text:t.t(`detail.empty`)}),M(`div`,{class:`sub`,text:t.t(`detail.emptyHint`)}))));return}P(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(M(`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)},M(`span`,{class:`ring`},I(`check`)),e.t(`review.toggle`)))}let i=t?n.list.rank.get(t.index):void 0,a=L(`chevron-up`,`${e.t(`detail.prev`)} (K)`,()=>n.prev(),{class:`icon-btn sm`,"data-focus-key":`prev`}),o=L(`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),M(`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=[M(`div`,{class:`d-top`},M(`span`,{class:`fam-pill`,"data-family":e.family},M(`span`,{class:`g`,"aria-hidden":`true`,text:hd(e)}),r.t(`kind.${e.kind}`)),this.#c(r,e)),M(`h2`,{class:`d-title`,text:e.title}),e.subtitle?M(`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),Dn(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){Dn(this.#o.root,this.#e,this.#e);return}let o=t.index.edgesOf(a.id),[s,c]=this.#p(a,t,n,!1,!1);Dn(this.#o.root,this.#e,this.#e,M(`div`,{class:`d-top`},M(`span`,{class:`fam-pill`,"data-family":i.family},M(`span`,{class:`g`,"aria-hidden":`true`,text:`·`}),n.t(a.status===`unchanged`?`detail.unchangedNode`:`status.${a.status}`)),this.#c(n,void 0)),M(`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,Id),s=M(`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(M(`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})}},M(`span`,{class:`sdot`,"aria-hidden":`true`}),M(`span`,{class:`lbl`,text:o?.label??e,title:o?.label??e}),M(`span`,{class:`meta`,text:o?i.t(`status.${o.status}`):``})))}return Bd(i.t(`detail.nodes`),e.length,s,e.length>Id?this.#f(i,this.#r,()=>{this.#r=!this.#r,this.#s()}):null)}#f(e,t,n){return M(`button`,{type:`button`,class:`disclosure`,"data-focus-key":`nodes-more`,"aria-expanded":String(t),onclick:n},e.t(t?`detail.showLess`:`detail.showMore`),I(`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`),[M(`div`,{class:`id-text`},Gd(t.from,t.to,n)),t.score<1?M(`div`,{class:`note-line`,text:n.t(`detail.matchScore`,{p:Pn(t.score)})}):null]]);break;case`rename`:a.push([n.t(`detail.name`),Gd(t.from,t.to,n)]);break;case`types`:case`aliases`:a.push([n.t(`detail.${t.kind}`),qd(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`),qd(t.to.map(r),t.from.map(r),n)]);break;case`deprecate`:a.push([n.t(`detail.status`),M(`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),qd(i(r.added),i(r.removed),n)])}return a.length>0?Bd(n.t(`detail.changes`),a.length,Jd(a,`attrs changes`)):null}#h(e,t,n){let r=_d(t.before),i=_d(t.after);if(r&&i){let e=new Set(r),t=new Set(i);return qd(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=gd(t.before),s=gd(t.after);if(t.before===void 0){let e=M(`ins`,{class:`hl`,text:s});return[Kd(`new`,this.#_(`${a}|a`,s,n,[e]))]}if(t.after===void 0){let e=M(`del`,{class:`hl`,text:o});return[Kd(`old`,this.#_(`${a}|b`,o,n,[e]))]}let c=typeof t.before==`string`&&typeof t.after==`string`?jd(o,s):[{op:`delete`,text:o},{op:`insert`,text:s}],l=Hd(c,`before`),u=Hd(c,`after`);return o.length+s.length<=zd&&!/\n/.test(o+s)?[Wd(l,u,n)]:[Kd(`old`,this.#_(`${a}|b`,o,n,l)),Kd(`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`),M(`span`,{class:`id-text`,text:e.afterId??e.beforeId??e.id})]),!i(`types`)&&e.types.length>0&&o.push([t.t(`detail.types`),Ud([],[],e.types)]),!i(`aliases`)&&a&&a.aliases.length>0&&o.push([t.t(`detail.aliases`),Ud([],[],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=()=>Jd(u.map(n=>[n,this.#_(`${e.id}|u|${n}`,gd(c[n]),t)]));if(!r){let e=[Bd(t.t(`detail.identity`),null,Vd(o))];return u.length>0&&e.push(Bd(t.t(`detail.attributes`),null,d())),e}return[Bd(t.t(`detail.identity`),null,Vd(o),u.length>0?M(`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),I(`chevron-down`)):null,u.length>0&&this.#t?d():null)]}#_(e,t,n,r){let i=t.length>Rd,a=this.#i.has(e),o=M(`div`,{class:`val${i&&!a?` clamped`:``}`},...r??[t]);return i?M(`div`,null,o,M(`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:Pn(t)})}`;for(let o of e.facets)switch(o.kind){case`mergedInto`:i.push(M(`div`,{class:`comp-row`},$(e.label,`del`),M(`span`,{class:`arrow`,"aria-hidden":`true`,text:`→`}),$(r(o.target),`same`),M(`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(M(`div`,{class:`comp-row`},M(`span`,{class:`note`,text:n.t(`detail.mergedFrom`)}))),o.sources.forEach((t,n)=>{i.push(M(`div`,{class:`comp-row`},$(r(t),`del`),M(`span`,{class:`arrow`,"aria-hidden":`true`,text:`→`}),$(e.label,`same`),s[n]?M(`span`,{class:`note`,text:s[n]}):null))});break}case`splitFrom`:i.push(M(`div`,{class:`comp-row`},$(r(o.source),`same`),M(`span`,{class:`arrow`,"aria-hidden":`true`,text:`→`}),$(e.label,`add`),M(`span`,{class:`note`,text:a(o.via,o.confidence)})));break;case`splitInto`:i.push(M(`div`,{class:`comp-row`},M(`span`,{class:`note`,text:n.t(`detail.splitInto`)})),M(`div`,{class:`comp-row`},$(e.label,`same`),M(`span`,{class:`arrow`,"aria-hidden":`true`,text:`→`}),o.targets.map(e=>$(r(e),`add`))))}return i.length?Bd(n.t(`detail.composition`),null,M(`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(M(`div`,{class:`note-line`,text:n.t(`detail.matchHint`)})):r&&(i.push(M(`div`,{class:`note-line`,text:n.t(`detail.matchScore`,{p:Pn(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(M(`div`,{class:`comp-row`,style:`margin-top: 8px`},M(`span`,{class:`note`,text:n.t(`detail.suggestion`)}),$(a?r(a.id):e.status===`removed`?o.after:o.before,`same`),M(`span`,{class:`note`,text:`${n.t(`detail.matchScore`,{p:Pn(o.score)})} · ${n.t(o.reason===`ambiguous`?`detail.suggestion.ambiguous`:`detail.suggestion.below`)}`})),this.#b(o.evidence,n))}return i.length?Bd(n.t(`detail.evidence`),null,...i):null}#b(e,t){return M(`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])=>M(`div`,{class:`bar-row`},M(`span`,{class:`lbl`,text:e}),M(`span`,{class:`track`,role:`meter`,"aria-label":e,"aria-valuemin":`0`,"aria-valuemax":`100`,"aria-valuenow":String(Math.round(t*100))},M(`span`,{class:`fill`,style:`display:block; width: ${Math.round(Math.max(0,Math.min(1,t))*100)}%`})),M(`span`,{class:`v`,text:Pn(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,Ld),c=M(`div`,{class:`rels`});for(let e of s)c.appendChild(this.#S(e,t,n,r,i));let l=o.length-s.length;return Bd(i.t(`detail.relations`),e.length,c,l>0||this.#n?M(`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),I(`chevron-down`)):null)}#S(e,t,n,r,i){let a=this.#o.controller,o=e=>r.index.node(e)?.label??e,s=e=>M(`span`,{class:`node`,text:o(e)}),c=e=>M(`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=M(`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(M(`span`,{class:`pred`,text:`→ ${e.label} → `}),s(e.target)),l?.end===`target`&&h.push(c(l.from))):m?(h.push(M(`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(M(`span`,{class:`was`,text:` (${i.t(`detail.was`,{x:i.quote(g)})})`})),e.facets.some(e=>e.kind===`attrs`)&&h.push(M(`span`,{class:`was`,text:` · ${i.t(`detail.edgeAttrs`)}`})),e.facets.some(e=>e.kind===`collapsed`)&&h.push(M(`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=Yd(e);return M(`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)}},M(`span`,{class:`sign`,"aria-hidden":`true`,text:_}),M(`span`,{class:`s`},...h))}};function Zd(e){let t=(e=>`var(--kgdiff-${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 Qd=class{el;#e=new Map;#t;#n;constructor(e){this.#n=e;let t=e.controller;this.el=M(`div`,{class:`filters`,role:`group`});for(let e of Ku){let n=M(`button`,{type:`button`,class:`fchip`,"data-family":e,"aria-pressed":`false`,onclick:()=>t.toggleFamily(e)},Zd(e),M(`span`,{class:`lbl`}),M(`span`,{class:`n`}));this.#e.set(e,n),this.el.appendChild(n)}this.#t=M(`button`,{type:`button`,class:`link-btn`,hidden:!0,onclick:()=>t.setFamilies([])}),this.el.appendChild(this.#t)}update(e){let t=e.has(`status`)||e.has(`data`)||e.has(`locale`);t&&this.#r(),(t||e.has(`filters`))&&this.#i()}#r(){let e=this.#n.tr(),t=this.#n.controller.scene,n=t?eu(t):null;P(this.el,`aria-label`,e.t(`sidebar.filters`)),F(this.#t,e.t(`sidebar.clearFilters`)),this.el.hidden=!t||t.hunks.length===0;for(let[t,r]of this.#e){let i=n?n[t]:0;F(r.querySelector(`.lbl`),e.t(`family.${t}`)),F(r.querySelector(`.n`),e.num(i)),r.hidden=i===0,P(r,`title`,e.t(`familyHint.${t}`))}}#i(){let e=this.#n.controller.families;for(let[t,n]of this.#e)P(n,`aria-pressed`,String(e.has(t)));this.#t.hidden=e.size===0}};function $d(){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(--kgdiff-accent-soft)" stroke="var(--kgdiff-accent)" stroke-width="1.5"/><circle cx="10" cy="10" r="2.4" fill="var(--kgdiff-accent)"/></svg>`,e.content.firstElementChild}var ef=class{el;menuButton;#e;#t;#n;#r;#i;#a;#o;constructor(e){this.#o=e,this.#e=M(`div`,{class:`brand`},$d(),M(`span`,{class:`brand-name`,text:`kgdiff`})),this.#t=M(`div`,{class:`versions`}),this.menuButton=L(`contrast`,``,()=>e.toggleMenu(),{"aria-haspopup":`menu`,"aria-expanded":`false`}),this.#i=L(`help`,``,()=>e.openHelp()),this.#a=L(`sidebar`,``,()=>e.toggleSidebar()),this.#n=M(`div`,{class:`hud-actions card`,role:`group`},this.menuButton,this.#i,this.#a),this.#r=M(`div`,{class:`hud-end`},this.#n),this.el=M(`header`,{class:`hud`},M(`div`,{class:`hud-title card`},this.#e,M(`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();P(this.#e,`title`,`kgdiff — ${t.t(`brand.tagline`)}`),P(this.#n,`aria-label`,t.t(`header.actions`)),R(this.menuButton,t.t(`action.settings`)),R(this.#i,`${t.t(`action.help`)} (?)`),R(this.#a,`${t.t(`action.sidebar`)} (\\)`),this.#s()}setSidebarState(e){P(this.#a,`aria-pressed`,String(e))}setMenuState(e){P(this.menuButton,`aria-expanded`,String(e))}#s(){let e=this.#o.controller.data;if(!e){N(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?M(`span`,{class:`tag`,title:e,text:e}):null,a=()=>M(`span`,{class:`arrow`,"aria-hidden":`true`,text:`→`});P(this.#t,`aria-label`,t.t(`header.compare`)),P(this.#t,`role`,`group`),n.before===n.after?N(this.#t,M(`span`,{class:`name`,title:e.title??n.after,text:e.title??n.after}),r.before||r.after?M(`span`,{class:`side`},i(r.before??`—`),a(),i(r.after??`—`)):null):N(this.#t,M(`span`,{class:`side`},M(`span`,{class:`name`,title:n.before,text:n.before}),i(r.before)),a(),M(`span`,{class:`side`},M(`span`,{class:`name`,title:n.after,text:n.after}),i(r.after)))}},tf=class{el;#e=null;#t;constructor(e){this.#t=e,this.el=M(`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=sc(t.themeName,e).family;return Ku.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`)}];P(this.el,`aria-label`,e.t(`action.settings`)),Dn(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 M(`div`,{class:`menu-group`,role:`group`,"aria-label":e},M(`div`,{class:`menu-label`,"aria-hidden":`true`,text:e}),t.map(e=>M(`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?I(e.icon):null,e.swatch?M(`span`,{class:`sw`,"aria-hidden":`true`},e.swatch.map(e=>M(`i`,{style:`background:${e}`}))):null,M(`span`,{text:e.label()}),I(`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()}},nf=[[[[`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`]],rf=class{el;#e=null;#t;constructor(e){this.#t=e,this.el=M(`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=>M(`span`,{class:`ks`},e.map((e,t)=>[t>0?M(`span`,{"aria-hidden":`true`,text:`/`}):null,e.map(e=>M(`kbd`,{text:e}))])),n=nf.map(([n,r])=>M(`div`,{class:`key-row`},M(`span`,{text:typeof r==`string`?e.t(r):r.map(t=>e.t(t)).join(` / `)}),t(n)));Dn(this.#t.root,this.el,null,M(`div`,{class:`dialog card`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`kg-help-title`},M(`div`,{class:`dialog-head`},M(`h2`,{id:`kg-help-title`,text:e.t(`help.title`)}),L(`close`,e.t(`help.close`),()=>this.hide(),{"data-focus-key":`close`})),M(`div`,{class:`dialog-body`},M(`div`,{class:`keys`},n))))}},af=class{box;results;input;#e;#t;#n=0;#r=``;#i;constructor(e){this.#i=e,this.input=M(`input`,{type:`search`,autocomplete:`off`,spellcheck:`false`,role:`combobox`,"aria-autocomplete":`list`,"aria-expanded":`false`,"aria-controls":`kg-results`,enterkeyhint:`go`}),this.#e=M(`kbd`,{"aria-hidden":`true`,text:`/`}),this.#t=M(`button`,{type:`button`,class:`clear`,hidden:!0,onclick:()=>this.#a(``,!0)},I(`close`)),this.input.addEventListener(`input`,()=>this.#a(this.input.value)),this.input.addEventListener(`keydown`,e=>this.#d(e)),this.input.addEventListener(`focus`,()=>this.#s()),this.input.addEventListener(`blur`,()=>this.#s()),this.results=M(`div`,{class:`results list scroll`,id:`kg-results`,role:`listbox`,hidden:!0}),this.box=M(`div`,{class:`search`},I(`search`),this.input,this.#e,this.#t),e.target(`search`,()=>{this.input.focus(),this.input.select()})}update(e){let t=e.has(`status`)||e.has(`data`)||e.has(`locale`);if(t){let e=this.#i.tr();this.input.placeholder=e.t(`sidebar.searchPlaceholder`),P(this.input,`aria-label`,e.t(`sidebar.search`)),P(this.#t,`aria-label`,e.t(`sidebar.searchClear`)),this.input.disabled=this.#i.controller.status!==`ready`}(t||e.has(`search`))&&this.#o()}#a(e,t=!1){this.#i.controller.setQuery(e),t&&this.input.focus()}#o(){let e=this.#i.controller.query;this.input.value!==e&&(this.input.value=e),e!==this.#r&&(this.#n=0),this.#r=e;let t=e.trim()!==``;this.results.hidden=!t,P(this.input,`aria-expanded`,String(t)),this.#s(),t?this.#c():N(this.results)}#s(){let e=this.#i.controller.query,t=this.#i.root.activeElement===this.input;this.#e.hidden=e!==``||t,this.#t.hidden=e===``}#c(){let e=this.#i.tr(),t=this.#i.controller,n=t.query.trim(),r=t.hits;if(r.length===0){N(this.results,M(`div`,{class:`list-empty`},I(`search`),M(`span`,{text:e.t(`sidebar.noResults`,{q:n})}))),P(this.input,`aria-activedescendant`,null);return}let i=t.scene,a=r.map((t,r)=>{let a=i?.nodeIndex.get(t.node.id),o=(a===void 0?void 0:i?.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.matched;return M(`button`,{type:`button`,class:`result`,role:`option`,id:`kg-hit-${r}`,tabindex:`-1`,"data-family":o,"aria-selected":String(r===this.#n),onclick:()=>this.#u(r),onpointermove:()=>this.#l(r)},M(`span`,{class:`sdot`,"aria-hidden":`true`}),M(`span`,{class:`txt`},M(`span`,{class:`title`},of(t.node.label,t.field===`label`?n:``)),M(`span`,{class:`sub`},of(s,t.field===`label`?``:n))),M(`span`,{class:`status`,text:e.t(`status.${t.node.status}`)}))});N(this.results,M(`div`,{class:`results-head`,text:e.plural(`sidebar.results`,r.length)}),a),P(this.input,`aria-activedescendant`,`kg-hit-${this.#n}`)}#l(e){if(!(e===this.#n||e<0||e>=this.#i.controller.hits.length)){this.#n=e;for(let t of this.results.querySelectorAll(`.result`))P(t,`aria-selected`,String(t.id===`kg-hit-${e}`));P(this.input,`aria-activedescendant`,`kg-hit-${e}`),this.results.querySelector(`#kg-hit-${e}`)?.scrollIntoView?.({block:`nearest`})}}#u(e){let t=this.#i.controller.hits[e];t&&(this.#a(``),this.#i.controller.revealNode(t.node.id),this.#i.focus(`list`))}#d(e){switch(e.key){case`ArrowDown`:e.preventDefault(),this.#l(Math.min(this.#i.controller.hits.length-1,this.#n+1));break;case`ArrowUp`:e.preventDefault(),this.#l(Math.max(0,this.#n-1));break;case`Enter`:e.preventDefault(),this.#u(this.#n);break;case`Escape`:e.preventDefault(),e.stopPropagation(),this.#i.controller.query?this.#a(``):this.#i.focus(`list`);break;default:return}}};function of(e,t){if(!t)return[e];let n=e.toLowerCase().indexOf(t.toLowerCase());return n<0?[e]:[e.slice(0,n),M(`mark`,{text:e.slice(n,n+t.length)}),e.slice(n+t.length)]}var sf=class{el;#e;#t;constructor(e,t,n,r,i){this.#t=e,this.#e=M(`div`,{class:`sheet-handle`,role:`separator`,"aria-orientation":`horizontal`,tabindex:`0`}),this.#r(),this.el=M(`aside`,{class:`sidebar`,"data-open":`true`},M(`div`,{class:`sidebar-inner`},this.#e,M(`div`,{class:`sb-head`},t.head,n.box,r.el),M(`div`,{class:`list-wrap`},t.sticky,t.list,n.results,t.phases),i.el))}setOpen(e){P(this.el,`data-open`,String(e)),this.el.inert=!e}update(e){if(e.has(`status`)||e.has(`data`)||e.has(`locale`)){let e=this.#t();P(this.el,`aria-label`,e.t(`sidebar.label`)),P(this.#e,`aria-label`,e.t(`sidebar.sheet`))}}#n(e,t){let n=e=>Math.round(100*e/Math.max(1,t));P(this.#e,`aria-valuemin`,String(n(120))),P(this.#e,`aria-valuemax`,String(n(t-96))),P(this.#e,`aria-valuenow`,String(n(e))),P(this.#e,`aria-valuetext`,this.#t().t(`sidebar.sheetValue`,{p:`${n(e)}%`}))}syncSheet(){let e=this.el.parentElement?.clientHeight??0;e>0&&this.#n(this.el.getBoundingClientRect().height,e)}#r(){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.#n(r,n)};this.#e.addEventListener(`pointerdown`,t=>{e={y:t.clientY,h:this.el.getBoundingClientRect().height,id:t.pointerId},this.#e.setPointerCapture?.(t.pointerId),this.el.classList.add(`dragging`)}),this.#e.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.#e.addEventListener(`pointerup`,r),this.#e.addEventListener(`pointercancel`,r),this.#e.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))})}},cf=[{mode:`overlay`,icon:`overlay`,key:`1`},{mode:`swipe`,icon:`swipe`,key:`2`},{mode:`replay`,icon:`replay`,key:`3`}],lf=class{el;#e;#t;#n=new Map;#r;#i;#a;#o=[];#s;#c;constructor(e){this.#c=e;let t=e.controller;this.#t=M(`span`,{class:`thumb`,"aria-hidden":`true`}),this.#e=M(`div`,{class:`segmented`,role:`radiogroup`},this.#t);for(let t of cf){let n=M(`button`,{type:`button`,class:`seg`,role:`radio`,"data-mode":t.mode,onclick:()=>e.setMode(t.mode)},I(t.icon),M(`span`,{class:`lbl`}));this.#n.set(t.mode,n),this.#e.appendChild(n)}this.#e.addEventListener(`keydown`,e=>this.#f(e)),this.#r=M(`button`,{type:`button`,class:`scope-btn`,"aria-pressed":`false`,"aria-keyshortcuts":`4`,onclick:()=>e.toggleScope()},I(`changes`),M(`span`,{class:`lbl`})),this.#a=M(`span`,{class:`opts`,role:`radiogroup`});for(let e=0;e<=2;e++){let n=M(`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=M(`button`,{type:`button`,class:`expand`,onclick:()=>t.expandNearest()},I(`plus`),M(`span`,{class:`n`})),this.#i=M(`div`,{class:`context`,hidden:!0},M(`span`,{class:`label`}),this.#a,this.#s),this.el=M(`div`,{class:`dock-bar card`,role:`group`},this.#e,M(`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();P(this.el,`aria-label`,e.t(`dock.label`)),P(this.#e,`aria-label`,e.t(`mode.label`));for(let t of cf){let n=this.#n.get(t.mode),r=e.t(`mode.${t.mode}`);F(n.querySelector(`.lbl`),r),P(n,`title`,`${r} (${t.key})`),P(n,`aria-label`,r)}F(this.#r.querySelector(`.lbl`),e.t(`mode.changes`)),P(this.#r,`aria-label`,e.t(`mode.changes`)),F(this.#i.querySelector(`.label`),e.t(`focus.context`)),P(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;P(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(P(this.#r,`aria-pressed`,String(n)),P(this.#r,`aria-disabled`,r?`true`:null),P(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)=>{P(n,`aria-checked`,String(r===e.hops)),n.tabIndex=r===e.hops?0:-1,P(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,F(this.#s.querySelector(`.n`),t.num(i.count)),R(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=cf[(cf.findIndex(e=>e.mode===this.#c.controller.mode)+(e.key===`ArrowRight`?1:cf.length-1))%cf.length];t&&(this.#c.setMode(t.mode),this.#n.get(t.mode)?.focus())}},uf=1e3,df=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=M(`div`,{class:`stage`}),this.#t=M(`div`,{class:`sr-only`}),this.#n=M(`div`,{class:`caption card`,"aria-hidden":`true`,"data-empty":`true`}),this.#a=L(`skip-back`,``,()=>t.stepReplay(-1),{class:`icon-btn`}),this.#i=L(`play`,``,()=>t.togglePlay(),{class:`icon-btn play`}),this.#o=L(`skip-forward`,``,()=>t.stepReplay(1),{class:`icon-btn`}),this.#c=M(`div`,{class:`fill`}),this.#l=M(`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 ${uf} 14`),this.#u.setAttribute(`preserveAspectRatio`,`none`),this.#u.setAttribute(`aria-hidden`,`true`),this.#d=M(`div`,{class:`scrub-tip card`,hidden:!0}),this.#s=M(`div`,{class:`scrubber`,role:`slider`,tabindex:`0`,"aria-valuemin":`0`},M(`div`,{class:`track`},this.#c),this.#u,this.#l,this.#d),this.#U(),this.#f=M(`span`,{class:`pos`,"aria-hidden":`true`}),this.#p=M(`button`,{type:`button`,class:`speed`,onclick:()=>t.cycleSpeed()}),this.#r=M(`div`,{class:`transport card`,role:`toolbar`},this.#a,this.#i,this.#o,this.#s,this.#f,this.#p),this.#m=M(`div`,{class:`finished card`,role:`status`,hidden:!0}),this.#_=M(`div`,{class:`side-chip before chip card`}),this.#v=M(`div`,{class:`side-chip after chip card`}),this.#g=M(`div`,{class:`divider`,role:`slider`,tabindex:`0`,"aria-valuemin":`0`,"aria-valuemax":`100`,"aria-orientation":`horizontal`},M(`span`,{class:`handle`,"aria-hidden":`true`},I(`chevron-left`),I(`chevron-right`))),this.#K(),this.#h=M(`div`,{class:`swipe`,hidden:!0},this.#_,this.#v,this.#g),this.dock=new lf(e),this.#y=M(`div`,{class:`dock`},this.#m,this.#n,this.#r,this.dock.el),this.#x=M(`button`,{type:`button`,class:`legend-head`,"aria-expanded":`false`,onclick:()=>this.#I(!this.#N)},M(`span`,{class:`lbl`}),I(`chevron-down`)),this.#S=M(`div`,{class:`legend-body`,id:`kg-legend`}),P(this.#x,`aria-controls`,`kg-legend`),this.#b=M(`div`,{class:`legend card float bottom-left`,"data-open":`false`},this.#x,this.#S),this.#C=M(`div`,{class:`mini-legend float bottom-left`,role:`list`}),this.#w=L(`plus`,``,()=>t.zoom(1)),this.#T=L(`minus`,``,()=>t.zoom(-1)),this.#E=L(`fit`,``,()=>void t.fit()),this.minimapHost=M(`div`,{class:`minimap-host`}),this.#O=M(`div`,{class:`zoom-bar card`,role:`toolbar`},this.#w,this.#T,this.#E),this.#D=M(`div`,{class:`map-cluster float bottom-right`},this.#O,this.minimapHost),this.tooltip=M(`div`,{class:`tooltip card`,role:`tooltip`,"data-open":`false`}),this.#k=M(`div`,{class:`state`,hidden:!0}),this.#e=M(`div`,{class:`chrome`},this.#h,this.#b,this.#C,this.#D,this.#y,this.tooltip),this.el=M(`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,P(this.#b,`data-open`,String(e)),P(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`))&&P(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){R(this.#a,`${e.t(`detail.prev`)} (←)`),R(this.#o,`${e.t(`detail.next`)} (→)`),P(this.#r,`aria-label`,e.t(`replay.label`)),P(this.#s,`aria-label`,e.t(`replay.scrubber`)),F(this.#_,e.t(`detail.before`)),F(this.#v,e.t(`detail.after`)),P(this.#g,`aria-label`,e.t(`swipe.divider`)),F(this.#x.querySelector(`.lbl`),e.t(`legend.title`)),P(this.#x,`aria-label`,e.t(`legend.toggle`)),R(this.#w,`${e.t(`action.zoomIn`)} (+)`),R(this.#T,`${e.t(`action.zoomOut`)} (−)`),R(this.#E,`${e.t(`action.fit`)} (F)`),P(this.minimapHost,`aria-label`,e.t(`minimap.label`)),P(this.minimapHost,`title`,e.t(`minimap.label`));let t=[...Ku,`neutral`];N(this.#S,t.map(t=>M(`div`,{class:`legend-row`,"data-family":t,title:e.t(`familyHint.${t}`)},Zd(t),M(`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`),P(this.#C,`aria-label`,e.t(`legend.title`)),N(this.#C,[...Ku,`neutral`].filter(e=>n.has(e)).map(t=>M(`span`,{class:`mini-item`,role:`listitem`,"data-family":t,title:e.t(`familyHint.${t}`)},M(`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&&P(n,`aria-label`,r),F(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;F(this.#f,e.t(`replay.position`,{i:a,n:o})),P(this.#s,`aria-valuemax`,String(Math.round(n.duration))),P(this.#s,`aria-valuenow`,String(Math.round(n.t))),P(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),N(this.#i,I(s?`pause`:`play`))),R(this.#i,c),F(this.#p,`${n.speed}×`),R(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=[M(`span`,{class:`glyph-box`,"data-family":n?.family??`neutral`,text:n?hd(n):`·`}),M(`span`,{class:`text`,text:e.t(`phase.${i.phase}`)}),M(`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=[M(`span`,{class:`glyph-box`,"data-family":t.family,text:hd(t)}),M(`span`,{class:`text`,text:t.title,title:t.title}),M(`span`,{class:`count`,text:`${a} / ${o}`})])}}this.#n.dataset.key!==l&&(this.#n.dataset.key=l,P(this.#n,`data-empty`,String(l===``)),N(this.#n,...u));let d=n.finished;this.#m.hidden=!d,this.#n.hidden=d,d&&this.#m.childElementCount===0?N(this.#m,I(`check-circle`),M(`span`,{text:e.t(`replay.finished`)}),M(`button`,{type:`button`,class:`btn`,onclick:()=>t.restart()},I(`restart`),e.t(`replay.restart`))):!d&&this.#m.childElementCount>0&&Dn(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*uf).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(--kgdiff-${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,N(this.#d,M(`span`,{class:`glyph-box`,"data-family":s.family,text:hd(s)}),M(`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}%`,P(this.#g,`aria-valuenow`,String(Math.round(t))),P(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){P(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(M(`div`,{class:`t-label`,text:o.label}),o.labelBefore?M(`div`,{class:`t-old`,text:o.labelBefore}):null,M(`div`,{class:`t-id`,text:l&&l.kind===`rekey`?`${l.from} → ${l.to}`:o.id}),M(`div`,{class:`t-status`,"data-family":a},M(`span`,{class:`dot`}),o.status===`unchanged`?e.t(`status.unchanged`):`${e.t(`status.${o.status}`)} · ${e.t(`family.${a}`)}`),M(`div`,{class:`t-sum`,text:c?c.title:e.plural(`tooltip.relations`,u)}),M(`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(M(`div`,{class:`t-label`,text:`${o} —${r.label}→ ${s}`}),r.labelBefore?M(`div`,{class:`t-old`,text:r.labelBefore}):null,M(`div`,{class:`t-status`,"data-family":a},M(`span`,{class:`dot`}),e.t(`status.${r.status}`)),c?M(`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(M(`div`,{class:`t-label`,text:n.label}),M(`div`,{class:`t-hint`,text:e.t(t.canExpand(t.hoverGroup)?`focus.expand`:`focus.expandUnavailable`)}))}i.length===0?P(this.tooltip,`data-open`,`false`):(N(this.tooltip,...i),P(this.tooltip,`data-open`,`true`),this.#J())}#J(){let e=this.#A;if(!e){P(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,N(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;N(this.#k,M(`div`,{class:`skeleton-grid`,"aria-hidden":`true`}),M(`div`,{class:`state-card card`,role:`status`,"aria-live":`polite`},M(`h2`,{text:e.t(`state.loading`)}),M(`ol`,{class:`steps`},t.steps.map((t,r)=>M(`li`,{"data-state":r<n?`done`:r===n?`active`:`pending`},M(`span`,{class:`mark`,"aria-hidden":`true`},r<n?I(`check`):null),M(`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 g?n.code:n?.name,i=[r?`[${r}]`:``,n?.message??``,n?.stack??``].filter(Boolean).join(`
|
|
5
|
-
`);N(this.#k,M(`div`,{class:`state-card card error`,role:`alert`},M(`div`,{class:`state-icon`},I(`alert`)),M(`h2`,{text:e.t(`state.error.title`)}),M(`p`,{text:n?.message??``}),M(`details`,null,M(`summary`,{text:e.t(`state.error.details`)}),M(`pre`,{text:i}))))}else t.status===`ready`&&n?.identical?N(this.#k,M(`div`,{class:`state-card card ok`,role:`status`},M(`div`,{class:`state-icon`},I(`check-circle`)),M(`h2`,{text:e.t(`state.identical.title`)}),M(`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`),N(this.#k,M(`div`,{class:`state-card`},M(`div`,{class:`state-icon`},I(`overlay`)),M(`h2`,{text:e.t(`state.empty.title`)}),M(`p`,{text:e.t(`state.empty.body`)}))))}}},ff=1100,pf=[`mode`,`scope`,`theme`,`palette`,`locale`,`sidebar`,`sync-hash`,`chrome`,`legend`,`loop`,`loop-delay`,`pause-on-hover`],mf=[`mode`,`scope`,`theme`,`palette`,`locale`,`chrome`,`legend`,`loop`,`loopDelay`,`pauseOnHover`,`payload`],hf=new Set([`ArrowUp`,`ArrowDown`,`ArrowLeft`,`ArrowRight`,`Home`,`End`,`PageUp`,`PageDown`,` `,`Spacebar`]),gf=[];function _f(e){if(typeof e==`object`&&e&&!Object.isFrozen(e)){for(let t of Object.values(e))_f(t);Object.freeze(e)}return e}var vf=class extends HTMLElement{static get observedAttributes(){return pf}controller;#e;#t;#n=null;#r=null;#i=!1;#a=!1;#o=[];#s=``;#c=!1;#l=!1;constructor(){super(),this.#e=this.attachShadow({mode:`open`}),this.#t=new dd(this,this.#e,this.#g(),e=>{(e===`kgdiff-select`||e===`kgdiff-mode`)&&this.#T()}),this.controller=this.#t.controller,this.controller.locale=Xn(this.getAttribute(`locale`))??jn(),this.#t.attach({update:e=>this.#v(e)})}connectedCallback(){if(!this.#c){this.#c=!0;for(let e of mf)if(Object.hasOwn(this,e)){let t=this[e];delete this[e],this[e]=t}}this.#o.push(this.#t.connect()),this.#n||this.#_(),gf.push(this);let e=this.#n;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.#S();let n=e=>this.#C(e);document.addEventListener(`keydown`,n),this.#o.push(()=>document.removeEventListener(`keydown`,n));let r=()=>this.#w();window.addEventListener(`hashchange`,r),this.#o.push(()=>window.removeEventListener(`hashchange`,r)),this.controller.setChrome(()=>e.stage.chromeLayout()),document.fonts?.ready?.then(()=>this.#n?.stage.layout()).catch(()=>void 0),this.#w(),this.#t.render(Cu)}disconnectedCallback(){let e=gf.indexOf(this);e>=0&&gf.splice(e,1);for(let e of this.#o.splice(0))e();this.controller.detach(),this.#l=!1,this.#h()}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.#p();break;case`sync-hash`:n!==null&&this.#w();break;case`chrome`:case`legend`:this.#m();break;case`loop`:case`loop-delay`:this.controller.setLoop(this.loop?this.loopDelay:null),this.#h();break;case`pause-on-hover`:this.#h()}}#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=Gn(t);r.setMode(e??`overlay`),a=e;break}case`scope`:{let e=Kn(t);r.setScope(e??`all`),a=e===null?null:r.scope;break}case`theme`:{let e=Jn(t);r.setThemePreference(e??`auto`),a=e;break}case`palette`:{let e=Yn(t);r.setPalette(e??`default`),a=e;break}case`locale`:{let e=Xn(t);r.setLocale(e??jn()),a=e;break}default:return}a===null?r.explicit.delete(e):r.explicit.add(e),(n||i)&&this.#d(e,a),i&&this.#d(`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 Zn(this.getAttribute(`chrome`))??`full`}set chrome(e){this.#d(`chrome`,Zn(e)===`none`?`none`:null),this.#m()}get legend(){return Qn(this.getAttribute(`legend`))??`auto`}set legend(e){let t=Qn(e);this.#d(`legend`,t===`auto`?null:t),this.#m()}get loop(){return this.hasAttribute(`loop`)}set loop(e){this.toggleAttribute(`loop`,!!e)}get loopDelay(){return $n(this.getAttribute(`loop-delay`))??1200}set loopDelay(e){let t=$n(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.#r}set payload(e){if(this.#r=e,e==null)return;let t;try{t=ur(e)}catch(e){this.controller.fail(e);return}this.controller.loadPayload(t).catch(()=>{})}load(e){return this.#r=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 g(`invalid-input`,z(`en`,`error.notLoaded`));return _f(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){if(this.getAttribute(e)!==t){this.#i=!0;try{t===null?this.removeAttribute(e):this.setAttribute(e,t)}finally{this.#i=!1}}}get#f(){return this.getAttribute(`sidebar`)!==`closed`}#p(){let e=this.#n;e&&(e.sidebar.setOpen(this.#f),e.header.setSidebarState(this.#f))}#m(){let e=this.chrome===`none`,t=this.controller;t.autoFit=e,t.selectOnClick=!e,t.setLabelsInside(e);let n=this.#n;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.#b(!1))}#h(){this.controller.hold(this.#l&&this.loop&&this.pauseOnHover)}#g(){return{tr:()=>Ln(this.controller.locale),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.#y(e),sidebarOpen:()=>this.#f,toggleMenu:e=>this.#b(e),openHelp:()=>this.#n?.help.show(),focusSearch:()=>this.#x()}}#_(){let e=M(`div`,{class:`root`});this.#e.append(e);let t=pd(e,e=>new ef(e)),n=pd(e,e=>new bd(e)),r=pd(e,e=>new af(e)),i=pd(e,e=>new Qd(e)),a=pd(e,e=>new Xd(e)),o=pd(e,e=>new df(e)),s=fd(this.#t,this.#e),c=new tf(s),l=new rf(s),u=new sf(s.tr,n,r,i,a);t.attachMenu(c.el),o.el.appendChild(t.el),e.append(M(`div`,{class:`body`},o.el,u.el),l.el,this.#t.live),this.#n={root:e,header:t,stage:o,list:n,sidebar:u,menu:c,help:l},e.addEventListener(`pointerdown`,e=>{if(!c.open)return;let n=e.composedPath();!n.includes(c.el)&&!n.includes(t.menuButton)&&this.#b(!1)});let d=e=>t=>{t.pointerType!==`touch`&&(this.#l=e,this.#h())};o.el.addEventListener(`pointerenter`,d(!0)),o.el.addEventListener(`pointerleave`,d(!1)),this.#p(),this.#m()}#v(e){let t=this.#n,n=this.controller;e.has(`mode`)&&(this.#d(`mode`,n.mode),this.#d(`scope`,n.scope)),e.has(`theme`)&&this.#d(`theme`,n.themePreference===`auto`&&!this.hasAttribute(`theme`)?null:n.themePreference),t&&((e.has(`theme`)||e.has(`status`))&&(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.sidebar.update(e),(e.has(`mode`)||e.has(`status`))&&(t.root.dataset.mode=n.mode,t.root.dataset.scope=n.scope))}#y(e){let t=e??!this.#f;this.#d(`sidebar`,t?`open`:`closed`),this.#p()}#b(e){let t=this.#n;if(!t)return;let n=e??!t.menu.open;n?t.menu.show(t.header.menuButton):t.menu.hide(!1),t.header.setMenuState(n)}#x(){this.#f||this.#y(!0),this.#t.focus(`search`)}#S(){if(typeof ResizeObserver!=`function`)return;let e=new ResizeObserver(()=>{let e=this.#n;if(!e)return;let t=this.clientWidth,n=t>0&&t<760;e.root.dataset.narrow=String(t>0&&t<ff),n!==this.#a&&(this.#a=n,e.root.dataset.compact=String(n)),e.stage.layout(),e.list.renderWindow(),n&&e.sidebar.syncSheet(),this.controller.layoutChanged()});e.observe(this),this.#n&&e.observe(this.#n.stage.el),this.#o.push(()=>e.disconnect())}#C(e){if(e.defaultPrevented||e.isComposing)return;let t=this.#n;if(t&&this.chrome!==`none`){if(!e.composedPath().includes(this)){if(!this.hasAttribute(`global-shortcuts`)||hf.has(e.key))return;let t=document.activeElement;if(t&&t!==document.body&&t!==document.documentElement||gf.find(e=>e.hasAttribute(`global-shortcuts`))!==this)return}t.help.open||t.menu.open?e.key===`Escape`&&(e.preventDefault(),t.help.hide(),this.#b(!1)):this.#t.handleKey(e)}}#w(){if(!this.hasAttribute(`sync-hash`)||typeof location>`u`||location.hash===this.#s)return;let e=rr(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})}}#T(){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=ir({...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}}}},yf=`application/kgdiff+json`,bf=!1;function xf(e=`kgdiff-viewer`){if(typeof customElements>`u`)return;let t=e.toLowerCase();if(customElements.get(t)===void 0){let e=bf?class extends vf{}:vf;customElements.define(t,e),bf=!0}ar.add(t)}function Sf(e){let t=e??(typeof document<`u`?document:void 0);return t?mr(t):Promise.resolve()}xf();function Cf(){Sf().catch(e=>console.error(`[kgdiff]`,e))}return typeof document<`u`&&(document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,Cf,{once:!0}):Cf()),e.COMPUTE_GLOBAL=Ul,e.PAYLOAD_SCRIPT_TYPE=yf,e.defineViewer=xf,e.hydrateEmbeddedPayloads=Sf,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 Zo(e){return e.normalize(`NFKC`).toLowerCase()}var Qo=/[\s_\-./:#|()[\]{}「」“”"'’,;]/;function $o(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(Qo.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||Qo.test(t[e-1]??``))&&(r+=6),a=e,i=e+1}return Math.max(1,r)}var es=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(Zo),fields:n}})}search(e,t=50){let n=Zo(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=$o(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)}},ts=new Set([`status`,`data`,`mode`,`selection`,`filters`,`search`,`review`,`replay`,`hover`,`theme`,`locale`,`focus`,`swipe`,`overview`]),ns=.35,rs=class extends Error{},is=e=>1-(1-e)**3,as=class{status=`idle`;steps=[];step=null;error=null;data=null;layout=null;scene=null;resolver=null;list=ao;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;query=``;hits=[];hops=1;expanded=new Set;focus=null;clock=null;split=.5;emphasis=1;#e=null;#t=``;#n=null;#r=null;#i=new Set;#a=-1;#o=null;#s=0;#c=0;#l=!1;#u=``;#d=0;#f=null;#p=null;#m=NaN;#h=!1;#g=!1;#_=new Set;#v=new Set;#y=!1;#b=!1;#x;#S;constructor(e,t){this.#x=e,this.#S=t}subscribe(e){return this.#_.add(e),()=>this.#_.delete(e)}notify(...e){for(let t of e)this.#v.add(t);this.#y||(this.#y=!0,queueMicrotask(()=>this.flush()))}flush(){if(this.#y=!1,this.#v.size===0)return;let e=this.#v;this.#v=new Set;for(let t of this.#_)t(e)}addView(e){return this.#i.add(e),()=>this.#i.delete(e)}now(){return this.#S.now()}fit(e){return Promise.all([...this.#i].map(t=>t.fit?.(e))).then(()=>void 0)}zoom(e){for(let t of this.#i)t.zoom?.(e)}get themeName(){return this.themePreference===`auto`?this.systemDark?`dark`:`light`:this.themePreference}get theme(){let e=`${this.themeName}/${this.palette}`;return(this.#e===null||e!==this.#t)&&(this.#t=e,this.#e=this.#C()),this.#e}#C(){let e;try{e=_i(this.themeName,this.palette)}catch{e=_i(`dark`,`default`)}return this.#S.theme?.(e)??e}get diff(){return this.data?.diff??null}get hunkCount(){return this.scene?.hunks.length??0}isReviewed(e){return this.#n?.has(e)??!1}reviewState(){return this.#n?.state()??{reviewed:[],total:0}}search(e,t){let n=this.diff;return n?(this.#r??=new es(n),this.#r.search(e,t)):[]}setQuery(e){this.query=e,this.#w(),this.notify(`search`),this.flush()}#w(){let e=this.query.trim();this.hits=e?this.search(e,50):[]}async load(e){let t=e=>typeof e==`object`&&!!e&&typeof e.text==`string`,n=t(e?.before)||t(e?.after);await this.#T(n?[`parse`,`match`,`layout`,`scene`]:[`match`,`layout`,`scene`],t=>Ho(e,t))}async loadPayload(e){await this.#T([`match`,`layout`,`scene`],t=>Uo(e,t))}async#T(e,t){let n=++this.#d;this.pause(),this.status=`loading`,this.error=null,this.steps=e,this.step=null,this.notify(`status`);let r=async e=>{if(n!==this.#d||this.#b||(this.step=e,this.notify(`status`),this.flush(),await this.#S.yieldToPaint(),n!==this.#d||this.#b))throw new rs};try{let e=await t(r);await r(`scene`),this.#E(e)}catch(e){if(e instanceof rs)throw new DOMException(`Superseded by a newer load.`,`AbortError`);let t=e instanceof Error?e:new C(`invalid-input`,String(e));throw n===this.#d&&this.fail(t),t}}fail(e){this.#d++,this.clock?.pause(),this.#m=NaN,this.#g=!1,this.status=`error`,this.error=e,this.step=null,this.data=null,this.layout=null,this.scene=null,this.resolver=null,this.list=ao,this.clock=null,this.focus=null,this.#n=null,this.#r=null,this.#w(),this.selectedHunk=this.selectedNode=this.pinnedEdge=-1,this.notify(`status`,`data`,`selection`,`filters`,`search`,`review`,`replay`,`focus`),this.#x.error(e)}#E(e){let{diff:t,layout:n,view:r}=e;this.data=e,this.layout=n,this.#r=null,this.#w(),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.#a=-1,this.emphasis=1,this.#o=null,this.hoverNode=this.hoverEdge=this.hoverGroup=-1,this.split=.5,this.clock=null,this.#u=``,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.#n=new Xo(this.#S.storage,Jo(t.delta.base.hash,t.delta.target.hash),t.hunks.map(e=>e.id)),this.#D(),this.status=`ready`,this.step=null,n.scope===`changes`&&Ka()===`unknown`&&qa().then(()=>this.notify(`focus`),()=>this.notify(`focus`)),this.notify(...ts);for(let e of this.#i)e.installed();this.#x.ready(t.stats),(this.mode!==i||this.scope!==a)&&this.#x.mode(this.mode,this.scope);let o=this.#f;this.#f=null,o===null?this.#G():this.selectHunkById(o.id,{fly:o.fly})}#D(){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=Li(e.diff,t,{theme:this.theme,locale:this.locale});this.scene=o,this.resolver=La(o);let s=this.clock;this.clock=new Ko(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.#a=-1,this.hoverNode=this.hoverEdge=this.hoverGroup=-1,this.list=oo(o,this.families),this.#O();for(let e of this.#i)e.sceneChanged();this.invalidate()}#O(){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=Ui(e,{hops:this.hops,expanded:t})}destroy(){this.#b=!0,this.sleep(),this.#_.clear()}invalidate(){this.#l=!0,this.#k()}sleep(){this.#s&&this.#S.cancelFrame(this.#s),this.#s=0}#k(){this.#s!==0||this.#b||(this.#s=this.#S.requestFrame(this.#A)||0)}#A=()=>{if(this.#s=0,this.#b)return;let e=this.#S.now(),t=this.#c>0?e-this.#c:0,n=!1,r=this.clock;if(r?.playing&&this.mode===`replay`&&(r.advance(t),this.#l=!0,this.notify(`replay`),this.#R(),r.playing?n=!0:r.finished&&this.#K()),!Number.isNaN(this.#m)&&!this.#h&&(e>=this.#m?this.#q():n=!0),this.#o){let t=this.#o,r=t.duration>0?Math.min(1,(e-t.start)/t.duration):1;this.emphasis=t.from+(t.to-t.from)*is(r),this.#l=!0,r>=1?(this.#o=null,this.#a>=0&&(this.#a=-1,this.emphasis=1)):n=!0}if(this.#l){this.#l=!1;for(let t of this.#i)t.draw(e)}n?(this.#c=e,this.#k()):this.#c=0};viewState(e){let t=this.selectedHunk>=0?this.selectedHunk:this.#a;return za({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})}#j(e){this.reducedMotion?(this.emphasis=1,this.#o=null,this.#a=-1):(this.emphasis=e,this.#o={from:e,to:1,start:this.#S.now(),duration:this.theme.motion.base})}#M(e){this.reducedMotion||e<0?(this.#a=-1,this.#o=null,this.emphasis=1):(this.#a=e,this.#o={from:this.emphasis,to:0,start:this.#S.now(),duration:this.theme.motion.base})}#N(){for(let e of this.#i)e.drawnChanged()}get scopeLocked(){return this.layout?.scope===`changes`}setMode(e){if(e===`changes`){this.setView(`overlay`,`changes`);return}let t=To(e);t!==null&&this.setView(t,this.scope)}setScope(e){let t=Eo(e);t!==null&&this.setView(this.mode,t)}toggleScope(){this.scopeLocked?this.#x.announce(R(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.#m=NaN,this.#g=!1),this.#u=``,i&&this.#O(),this.#N(),this.notify(`mode`,`focus`,`replay`),this.invalidate(),this.status===`ready`){this.#x.mode(e,n);let t=[];r&&t.push(R(this.locale,`announce.mode`,{mode:R(this.locale,`mode.${e}`)})),i&&t.push(R(this.locale,n===`changes`?`scope.on`:`scope.off`)),this.#x.announce(t.join(` · `))}r&&e===`replay`&&this.#G()}}selectHunkById(e,t={}){if(e===null){this.#f=null,this.clearSelection();return}let n=this.scene;if(!n||this.status!==`ready`){this.#f={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.#a=-1,this.#j(i>=0?ns:0),this.mode===`replay`&&this.clock)){let t=this.clock.windowEnd(e);this.clock.pause(),this.#m=NaN,this.#g=!1,t!==null&&this.clock.seek(t),this.#u=``,this.notify(`replay`)}if((t.fly??!0)&&this.flyToHunk(e),this.invalidate(),!a)return;this.notify(`selection`);let o=n.hunks[e];if(!o)return;let s=r>=0?n.nodes[r]?.id??null:null;if(this.#x.select(o.id,s),i!==e){let t=this.list.rank.get(e);this.#x.announce(R(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.#M(i),t.fly&&this.flyToNode(e),this.invalidate(),this.notify(`selection`),this.#x.select(null,r.id),this.#x.announce(R(this.locale,`announce.node`,{label:r.label,status:R(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.#M(e),this.invalidate(),this.notify(`selection`),this.#x.select(null,null),this.#x.announce(R(this.locale,`announce.cleared`))}next(){this.#P(1)}prev(){this.#P(-1)}#P(e){let t=co(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.#F(ss({x:i,y:a,width:o-i,height:s-a})),this.invalidate()}setHover(e,t,n){(e!==this.hoverNode||t!==this.hoverEdge||n!==this.hoverGroup)&&(this.hoverNode=e,this.hoverEdge=t,this.hoverGroup=n,this.notify(`hover`),this.invalidate())}clearHover(){this.setHover(-1,-1,-1)}#F(e){for(let t of this.#i)t.show(e)}#I(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.#x.announce(R(this.locale,`announce.chapter`,{phase:R(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.#x.announce(R(this.locale,`announce.change`,{i:a+1,n:r.total,title:i.title}))}#L(e){let t=this.scene;if(!t||e.length===0)return;let n=Ji(t,e);for(let e of this.#i)e.follow(n)}#R(){let e=this.scene,t=this.clock;if(!e||!t)return;let n=t.activeTarget();if(n.index<0)return;let r=`${n.kind}:${n.index}`;r!==this.#u&&(this.#u=r,this.#I(n.kind,n.index),this.#L(n.kind===`chapter`?e.timeline.chapters[n.index]?.hunks??[]:[n.index]))}#z(e){let t=this.scene;return t?.hunks[e]?Ji(t,[e]):null}#B(e){let t=this.scene?.nodes[e];return t?ss({x:t.x-t.r,y:t.y-t.r,width:2*t.r,height:2*t.r}):null}selectionBounds(){return this.selectedHunk>=0?this.#z(this.selectedHunk):this.selectedNode>=0?this.#B(this.selectedNode):null}flyToHunk(e){let t=this.#z(e);t&&this.#F(t)}flyToNode(e){let t=this.#B(e);t&&this.#F(t)}flyToSelection(){let e=this.selectionBounds();e&&this.#F(e)}toggleFamily(e){this.families.has(e)?this.families.delete(e):this.families.add(e),this.#V()}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.#V()}#V(){this.scene&&(this.list=oo(this.scene,this.families)),this.#N(),this.notify(`filters`),this.invalidate()}setHops(e){let t=Math.max(0,Math.min(2,Math.round(e)));t!==this.hops&&(this.hops=t,this.#U())}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(os);if(!this.canExpand(e)){r.length>0&&this.#H(r,[]);return}let i=t.id.startsWith(`near:`)?t.id.slice(5):t.id.startsWith(`component:`)?t.id.slice(10):null;this.#H(r,i===null?r:[i,...r])}nearestGroup(){let e=this.focus?.collapsed??[];if(e.length===0)return-1;let t=this.selectionBounds(),n=null;for(let e of this.#i)n??=e.viewport();let 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.#x.announce(R(this.locale,t?`focus.expandUnavailable`:`announce.nothingHidden`)):(this.expandGroup(e),this.#x.announce(R(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)||Ka()!==`unavailable`:!1}#H(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.#U(),Promise.resolve();let a=()=>{let e=Ga(),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.#D(),this.notify(`data`,`selection`,`replay`)}this.#U()};return Ga()?(a(),Promise.resolve()):qa().then(a,()=>this.#U())}#U(){this.#O(),this.#N(),this.notify(`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.#W(e)?(t(),Promise.resolve()):this.#H([e],[]).then(t)}#W(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.#m=NaN,this.#g=!1,e.play(),this.#u=``,this.#c=0,this.notify(`replay`),this.invalidate())}pause(){this.#m=NaN,this.#g=!1,this.clock?.playing&&(this.clock.pause(),this.notify(`replay`),this.invalidate())}togglePlay(){this.clock?.playing?this.pause():this.play()}setLoop(e){let t=this.#p;this.#p=e===null?null:Number.isFinite(e)?Math.max(0,e):0,this.#p===null?this.#m=NaN:t===null&&this.#G()}get loopDelay(){return this.#p}hold(e){if(e===this.#h)return;this.#h=e;let t=this.clock;if(e){if(!t?.playing)return;t.pause(),this.#g=!0,this.notify(`replay`),this.invalidate()}else!Number.isNaN(this.#m)&&this.#p!==null&&(this.#m=this.#S.now()+this.#p,this.#k()),this.#g&&this.play()}#G(){this.#p!==null&&this.status===`ready`&&this.mode===`replay`&&this.clock&&!this.clock.playing&&Number.isNaN(this.#m)&&(this.#h?this.#g=!0:this.play())}#K(){this.#x.announce(R(this.locale,`announce.finished`));let e=this.#p!==null;e&&(this.#m=this.#S.now()+(this.#p??0)),this.#x.replayEnd(e)}#q(){this.#m=NaN;for(let e of this.#i)e.looped();this.clock?.seek(0),this.play()}seek(e){let t=this.clock;t&&(this.#m=NaN,t.seek(e),this.notify(`replay`),this.#R(),this.invalidate())}stepReplay(e){let t=this.clock;if(!t)return;t.step(e),this.#m=NaN,this.#g=!1,this.#u=``;let n=t.timeline.windows[t.position()-1];n&&(t.timeline.mode===`chapters`?this.#I(`chapter`,n.chapter):this.#I(`hunk`,n.hunk),this.#L(t.timeline.mode===`chapters`?t.timeline.chapters[n.chapter]?.hunks??[n.hunk]:[n.hunk])),this.notify(`replay`),this.invalidate()}restart(){this.clock?.seek(0),this.play()}cycleSpeed(){this.clock?.cycleSpeed(),this.notify(`replay`)}setSpeed(e){this.clock?.setSpeed(e),this.notify(`replay`)}setSplit(e){let t=Number.isFinite(e)?Math.min(1,Math.max(0,e)):.5;t!==this.split&&(this.split=t,this.notify(`swipe`),this.mode===`swipe`&&this.invalidate())}setReviewed(e,t){let n=this.#n;if(!n?.setReviewed(e,t))return;let r=n.state();this.notify(`review`),this.#x.review(e,t,r);let i=R(this.locale,`review.progress`,{done:r.reviewed.length,total:r.total});this.#x.announce(R(this.locale,t?`announce.reviewed`:`announce.unreviewed`,{progress:i}))}syncReview(e){this.#n?.reload(e)&&this.notify(`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))}#J(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.#Y(),i&&this.notify(`theme`),a&&this.notify(`locale`,`data`)}#Y(){if(this.data)this.#D();else for(let e of this.#i)e.sceneChanged()}refreshTheme(){let e=this.#C();e!==this.#e&&(this.#e=e,this.#t=`${this.themeName}/${this.palette}`,this.#Y(),this.notify(`theme`))}setThemePreference(e){this.#J(()=>{this.themePreference=Oo(e)??`auto`}),this.notify(`theme`)}setPalette(e){this.#J(()=>{this.palette=ko(e)??`default`})}setLocale(e){this.#J(()=>{this.locale=Ao(e)??`en`})}setSystemDark(e){this.#J(()=>{this.systemDark=e})}setReducedMotion(e){this.reducedMotion=e,this.invalidate()}};function os(e){return e!==void 0}function ss(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 cs=(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},ls=Object.freeze([]),us=1.5;function ds(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 fs(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 B=Math.PI*2;function V(e,t,n){return Math.min(Math.max(e,t),n)}function ps(e,t,n){let r=V((n-e)/(t-e),0,1);return r*r*(3-2*r)}function ms(e){return e<.5?4*e*e*e:1-(-2*e+2)**3/2}function hs(e,t){return Math.round(e*t)/t}function gs(e,t){return Math.round(e*t)%2==1?.5/t:0}function H(e,t,n,r){let i=1-r;return i*i*e+2*i*r*t+r*r*n}function _s(e,t,n,r){return 2*(1-r)*(t-e)+2*r*(n-t)}function vs(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=H(e,n,i,.5)-c,m=H(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=H(e,n,i,o)-c,p=H(t,r,a,o)-l;s*s+p*p<u?d=o:f=o}return(d+f)/2}function ys(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=V(l,0,1);let u=n+l*o-e,d=r+l*s-t;return u*u+d*d}function bs(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=H(n,i,o,p),h=H(r,a,s,p),g=ys(e,t,u,d,m,h);g<l&&(l=g),u=m,d=h}return l}function xs(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 Ss(e,t,n,r,i,a,o,s){return e<i+o&&i<e+n&&t<a+s&&a<t+r}var Cs=1e-12;function ws(e,t,n=Math.SQRT2){let r=n*n,i=r*r,a=Math.max(e.w,Cs),o=Math.max(t.w,Cs),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 Ts=Object.freeze({top:0,right:0,bottom:0,left:0}),Es=Math.SQRT2;function Ds(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 Os(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 ks(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 As(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 js(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 Ms(e,t,n,r,i,a){let o=[[r,n],[Ts,n],[Ts,Ts]],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=V(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 Ns(e){return V(Math.abs(e)*620,350,1100)}function Ps(e,t,n=325){return e*Math.exp(-t/n)}function Fs(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 Is=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(),!Fs(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=ws({x:this.x,y:this.y,w:a/this.k},{x:r.x,y:r.y,w:a/r.k},Es),s=t.duration??Ns(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 Ds(this,this.host.size(),e)}screenToWorld(e){return Os(this,this.host.size(),e)}viewport(){return ks(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 Ms(e,n,js(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=V(this.k*e,this.minK,this.maxK),a=As(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=V(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:V(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=V((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(ms(n));return this.apply(r.x,r.y,t.ref/r.w,`program`),!0}case`zoom`:{let n=t.last<0?16:V(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=V(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:V(e-t.last,0,64);return t.last=e,this.panNow(t.vx*n,t.vy*n,`user`),t.vx=Ps(t.vx,n),t.vy=Ps(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=V(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())}},Ls=512,Rs=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/Ls,d/Ls),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}},zs=2047,Bs=63,Vs=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,zs)}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,Bs)}};function Hs(e){return Number.isFinite(e)?Math.round(V(e,0,1)*64):0}function Us(e){return Ws(e)+512}function Ws(e){return Number.isFinite(e)?V(Math.round(e),-512,511):0}function Gs(e){return Number.isFinite(e)?Math.round(V(e,0,15.75)*4):0}function Ks(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 V(Math.round(r*2),0,511)}function qs(e,t){return e.z-t.z||e.seq-t.seq}var Js=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 Rs;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=Hs(r.alpha);if(i===0||!(r.width>0)||!Number.isFinite(r.x1+r.y1+r.x2+r.y2))continue;let a=Us(r.z),o=Gs(r.width),s=r.dash!==null&&r.dash.length>0?r.dash:null,c=Ks(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(qs);let r=e.nodes;for(let e=0;e<r.length;e++){let n=r[e];if(!n.visible)continue;let i=Hs(n.alpha);if(i===0||!Number.isFinite(n.x+n.y+n.r)||n.r<0)continue;let a=Us(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?Gs(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?Gs(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(qs),this.decor.length>1&&this.decor.sort((e,t)=>Us(r[e].z)-Us(r[t].z)||e-t);let i=e.glyphs;for(let e=0;e<i.length;e++){let t=i[e];Hs(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 Ys(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 Xs=4.000244140625;function Zs(){return{last:-1/0,intent:null}}function Qs(e){let t=e/Xs;return t>=1&&Math.abs(t-Math.round(t))<1e-6}function $s(e){let t=Math.abs(e);return t===0?!1:Qs(t)||t>=50&&Number.isInteger(t)}function ec(e,t,n){let r;return r=e.ctrlKey||e.metaKey?e.deltaMode!==0||$s(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`:$s(e.deltaY)?`notch`:`pan`:`pan`:`notch`,t.last=n,t.intent=r,r}function tc(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 nc(e,t){if(e===`pinch`)return Math.exp(-V(t,-50,50)/100);let n=Math.abs(t);return 2**(-V(Qs(n)?Math.sign(t)*Math.round(n/Xs)*33:t,-240,240)/240)}var rc=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 ic(e,t){let n=new Map,r=new rc,i=Zs(),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=ec(o,i,t.now()),c=tc(o,e.clientHeight);s===`pan`?(t.camera.interrupt(),t.camera.panNow(-c.x,-c.y)):s===`pinch`?(t.camera.interrupt(),t.camera.zoomNow(nc(`pinch`,c.y),r,a)):(t.camera.touched=!0,t.camera.zoomSmooth(nc(`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 ac=.9;function oc(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*ac,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 sc=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),oc(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}},cc=1.2,lc=9.6,uc=14.4;function dc(e){if(!(e>0))return[];let t=24;for(let n=0;n<12&&t*e<lc;n++)t*=4;let n=ps(lc,uc,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 fc=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,B)}return u.fill(),c.key=s,c.pattern=e.createPattern(l,`repeat`),c.pattern}};function pc(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=dc(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,cc/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 mc=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=hs(t.x*o+s+p*.7-2,l),g=hs(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(),ds(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))}}}},hc=new Map;function gc(e){if(typeof e.label==`string`&&e.label.length>0)return e.label;let t=e.count,n=hc.get(t);return n===void 0&&(n=`+${t.toLocaleString(`en-US`)}`,hc.size>4096&&hc.clear(),hc.set(t,n)),n}function _c(e,t,n,r,i){let a=Math.ceil(r.width(n.get(11,500),gc(e)))+16;return i[0]=hs(e.x*t.k+t.ox-a/2,t.dpr),i[1]=hs(e.y*t.k+t.oy-10,t.dpr),i[2]=a,i[3]=20,i}var vc=new Float64Array(4);function yc(e,t,n,r,i,a,o){if(t.length===0)return;let s=a.get(11,500),c=gs(1,r.dpr),l=!1;for(let u=0;u<t.length;u++){let d=t[u];if(n[u]!==1)continue;_c(d,r,a,o,vc);let f=vc[0],p=vc[1],m=vc[2],h=vc[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(),ds(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(gc(d),f+m/2,p+h/2+.5))}}function bc(e){return e>0?Math.min(e,1):0}function xc(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=bc(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=vs(t,n,g,_,r,i,o,!1),y=vs(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=_s(t,g,r,x),a=_s(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]=H(t,g,r,x),d[1]=H(n,_,i,x),d[2]=e/o,d[3]=a/o)}}let C=H(t,g,r,b),te=H(n,_,i,b),ne=(S-b)/2;return e.moveTo(C,te),e.quadraticCurveTo(C+ne*_s(t,g,r,b),te+ne*_s(n,_,i,b),H(t,g,r,S),H(n,_,i,S)),ee?2:1}function Sc(e,t){let n=Number.isFinite(t)?Math.min(Math.abs(t),1):0;return Math.max(6,e*.8)*(1+2*n)}function Cc(e,t,n){return e-t-n*.5}function wc(e,t,n,r,i,a){let o=bc(a);if(o<=0)return 0;let s=Sc(r,i),c=Cc(n,r,s),l=Math.PI/2;return e.moveTo(t,c+s),e.arc(t,c,s,l,l+B*o),1}function Tc(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 Ec=new Float64Array(4),U=new Float64Array(1024);function Dc(e){if(U.length<(e+1)*4){let e=new Float64Array(U.length*2);e.set(U),U=e}let t=e*4;U[t]=Ec[0],U[t+1]=Ec[1],U[t+2]=Ec[2],U[t+3]=Ec[3]}function Oc(e,t){e.globalAlpha=t.alpha,e.strokeStyle=t.color,e.lineWidth=t.width,e.setLineDash(t.dash??ls),e.lineDashOffset=t.dash?t.dashOffset:0,e.lineCap=t.dash?`butt`:`round`,e.lineJoin=`round`}function kc(e,t,n,r){return Math.abs(n-e)+Math.abs(r-t)<1e-9}function Ac(e,t,n){return e&&!(n<t)}function jc(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=kc(h.x1,h.y1,h.x2,h.y2);if(x){let e=Sc(b,h.curvature),t=Cc(_,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(!xs(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||=(Oc(e,t),e.beginPath(),!0);let S;if(x)S=wc(e,g,_,b,h.curvature,h.progress);else{let t=Ac(h.arrow,h.arrowMinZoom,i),n=Math.max(h.r2*i,1)+(t?us:0);S=xc(e,g,_,v,y,h.curvature,b,n,h.progress,h.fromTarget,t,Ec),S===2&&Dc(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;fs(e,U[n],U[n+1],U[n+2],U[n+3])}e.fill()}}}var Mc=Object.freeze([.001,4]),Nc={arrow:!0,dash:null,mark:!1},Pc={arrow:!1,dash:Mc,mark:!0},Fc={arrow:!1,dash:null,mark:!1};function Ic(e){switch(e){case`merge-arrow`:case`split-arrow`:case`move-arrow`:case`replacement-arrow`:case`edge-ghost`:return Nc;case`suggestion`:return Pc;default:return Fc}}function Lc(e,t){return e>0&&Number.isFinite(e)?Math.max(e*t,1):0}var Rc=new Float64Array(4);function zc(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=Ic(n.kind),x=n.arrow,S=typeof x==`boolean`?x:b.arrow,ee=Lc(n.r1,o),C=Lc(n.r2,o),te=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(te??ls),e.lineDashOffset=0,e.lineCap=te===null||(te[0]??0)<.5?`round`:`butt`,e.lineJoin=`round`,e.beginPath();let ne=xc(e,p,m,h,g,_,ee,C>0&&S?C+us:C,n.progress,!1,S,Rc);if(e.stroke(),ne===2&&(e.fillStyle=n.color,e.beginPath(),fs(e,Rc[0],Rc[1],Rc[2],Rc[3]),e.fill()),b.mark&&n.progress>=1&&Math.hypot(h-p,g-m)>42){let[t,r]=Tc(p,m,h,g,_);e.setLineDash(ls),e.beginPath(),e.arc(t,r,7,0,B),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 Bc(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,B),e.fill(),e.fillStyle=n.color,e.beginPath(),e.arc(l,u,d,0,B),e.fill())}}var Vc=new Map;function Hc(e){let t=Vc.get(e);if(t!==void 0)return t;let n=Uc(e.trim().toLowerCase());return Vc.size>512&&Vc.clear(),Vc.set(e,n),n}function Uc(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:V(a,0,255),g:V(o,0,255),b:V(s,0,255),a:V(c,0,1)}:null}function Wc(e,t){let n=Math.round(V(e.a*t,0,1)*1e3)/1e3;return`rgba(${Math.round(e.r)}, ${Math.round(e.g)}, ${Math.round(e.b)}, ${n})`}var Gc=[[0,1],[.3,.9],[.5,.6],[.7,.28],[.86,.08],[1,0]],Kc=128,qc=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(Kc,Kc);if(!t)return null;let n=Kc/2,r=t.ctx.createRadialGradient(n,n,0,n,n,n),i=Hc(e);for(let[t,n]of Gc)r.addColorStop(t,i?Wc(i,n):n>0?e:`rgba(0, 0, 0, 0)`);return t.ctx.fillStyle=r,t.ctx.fillRect(0,0,Kc,Kc),t}};function Jc(e,t,n,r,i,a){let{k:o,ox:s,oy:c}=r;i.glow||(e.lineWidth=2,e.setLineDash(ls));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,B),e.stroke()}}}function Yc(){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 Xc=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(Ss(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 Zc(e,t){return t.priority-e.priority||e.order-t.order}var Qc=[0,1,2,3],$c=[4,2,0],el=[4],tl={x:0,y:0};function nl(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),tl.x=s,tl.y=c,tl}function rl(e,t,n){e.sort(Zc);let r=0;for(let i of e){i.placed=!1;let e=i.mode===2?el:i.mode===1?$c:Qc;for(let a of e){let{x:e,y:o}=nl(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 il=2e4;function al(e){return Math.round(e*1.3)}var ol=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}},sl=/[ᄀ-ᇿ⺀-鿿가-豈--]/;function cl(e,t){let n=/(\d+(?:\.\d+)?)px/.exec(e),r=n?Number(n[1]):12,i=0;for(let e of t)i+=sl.test(e)?r:r*.58;return i}var ll=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>il&&(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):cl(e,t)}},ul=.02,dl=new Float64Array(4);function fl(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 pl(e,t,n){return e!==null&&e.text.length>0&&e.alpha*n*fl(e.minZoom,t)>=ul}var ml=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,rl(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}=nl(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=hl(n,n.wP);gl(e,n,n.primary,n.textP,n.fontP,n.wP,n.hP,r,n.by,t,a,o,s)}if(n.secondary){let r=hl(n,n.wS);gl(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=Yc(),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;_c(i,t,n.fonts,n.measurer,dl);let a=dl[2],o=dl[3],s=dl[0]+a/2,c=dl[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<ul)continue;let c=pl(s.label,r,s.alpha)?s.label:null,l=pl(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||!pl(s.label,r,s.alpha))continue;let c=s.x1*r+i,l=s.y1*r+a,u,d;if(kc(s.x1,s.y1,s.x2,s.y2)){let e=Math.max(s.r1*r,1),t=Sc(e,s.curvature);u=c,d=Cc(l,e,t)-t}else[u,d]=Tc(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(!pl(t.label,i,t.alpha)||t.progress<.999)continue;let[c,l]=Tc(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=al(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=al(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 hl(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 gl(e,t,n,r,i,a,o,s,c,l,u,d,f){let p=n.alpha*t.alpha*fl(n.minZoom,l.k),m=hs(s,l.dpr),h=hs(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)):oc(e,r,i,n.color,u,n.strike,m,h,a,o,p))}var _l=[];function vl(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=B*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 yl(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 bl(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);yl(r,u,d,f)?(r.stats.nodes++,e.beginPath(),e.arc(u,d,f,0,B),e.fill(),e.setLineDash(f<3?ls:vl(t.dash,f,_l)),e.stroke()):r.stats.culledNodes++}e.setLineDash(ls);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);yl(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,B))):r.stats.culledNodes++}if(u&&(e.fillStyle=l,e.fill(),t.stroke!==null&&(e.strokeStyle=t.stroke,e.lineWidth=t.strokeWidth,e.setLineDash(ls),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;yl(r,u,d,l)&&e.rect(u-l,d-l,2*l,2*l)}e.fillStyle=t.fill??t.stroke??i,e.fill()}}function xl(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(!yl(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(ls),e.beginPath(),e.arc(i,a,o+s.gap,0,B),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(ls),e.beginPath(),e.arc(i,a,o+3+c*(12+o*.6),0,B),e.stroke())}}function Sl(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];bl(e,n,a,r,c);let u=o[t+1];if(u===void 0||u.z!==n.z)for(;l<s.length&&Ws(a[s[l]].z)<=n.z;)xl(e,a[s[l]],r,i),l++}for(;l<s.length;)xl(e,a[s[l++]],r,i)}function Cl(){return{nodes:0,edges:0,culledNodes:0,culledEdges:0,labels:0,edgeStrokes:0,deferredLabels:0,phases:[]}}function wl(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 Tl(e){return`before`in e&&`after`in e&&`split`in e}function El(e,t,n){return hs(V(Number.isFinite(e)?e:.5,0,1)*t,n)}var Dl=class{factory;fonts;measurer;atlas;halos;tiles;interner=new Vs;dpr=0;theme;constructor(e,t,n){this.factory=e,this.theme=t,this.fonts=new ol(t),this.measurer=new ll(e(1,1)?.ctx??n),this.atlas=new sc(e),this.halos=new qc(e),this.tiles=new fc(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()}},Ol=class{res;stats=Cl();rasterBudget=160;labelsInside=!1;labels=new ml;badges=new mc;grid=new Xc;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;wl(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&&Tl(n),p=n===null?0:f?Math.max(n.before.spotlight,n.after.spotlight):n.spotlight;if(pc(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=El(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),yc(e,t.collapsed,n.pillShown,i,r,a.fonts,a.measurer),o.push(`collapsed`),jc(e,t,n,i),o.push(`edges`),zc(e,t,n,i,r,a.fonts),o.push(`glyphs`),Jc(e,t,n,i,r,a.halos),o.push(`halos`),Sl(e,t,n,i,r),o.push(`nodes`),Bc(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`)}},kl=[],Al=new Float64Array(4);function jl(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,kl);let u=-1,d=!1,f=-1/0,p=1/0;for(let t of kl){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 Ml(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(kc(d.x1,d.y1,d.x2,d.y2)){let e=Math.max(d.r1*a,1),t=Sc(e,d.curvature)/a,n=Cc(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=ys(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=bs(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 Nl(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)&&(_c(c,n,a,o,Al),r>=Al[0]&&r<=Al[0]+Al[2]&&i>=Al[1]&&i<=Al[1]+Al[3]))return e}return-1}function Pl(e,t,n,r,i,a,o){let s=jl(e,t,n,r,i);if(s>=0)return{type:`node`,index:s};let c=Ml(e,t,n,r,i);if(c>=0)return{type:`edge`,index:c};let l=Nl(e,t,n,r,i,a,o);return l>=0?{type:`collapsed`,index:l}:null}var Fl=new WeakMap,Il=3;function Ll(e,t){return e===t||e!==null&&t!==null&&e.type===t.type&&e.index===t.index}function Rl(){return typeof window<`u`&&window.devicePixelRatio>0?window.devicePixelRatio:1}var zl=class{canvas;camera;ctx;theme;safe;grid;fixedRatio;dpr=1;width=0;height=0;frame=null;version=0;caches={main:new Js,before:new Js,after:new Js};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 C(`invalid-input`,`createRenderer: expected 0 < minZoom ≤ maxZoom, got minZoom ${r}, maxZoom ${i}`);if(t.pixelRatio!==void 0&&!(t.pixelRatio>0))throw new C(`invalid-input`,`createRenderer: pixelRatio must be > 0, got ${t.pixelRatio}`);this.theme=t.theme,this.safe=t.safeArea??Ts,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 Is({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 Dl(n.surfaceFactory??cs,this.theme,this.ctx),this.painter=new Ol(this.res),this.painter.labelsInside=t.labelsInside??!1,this.observeSize(),this.watchPixelRatio(),this.watchFonts(),(t.interactive??!0)&&this.cleanup.push(ic(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})),Fl.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(Tl(n)){let t=e<El(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),Pl(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(),Fl.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){Ll(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 Tl(e)?(this.caches.before.sync(e.before,this.version,t),this.caches.after.sync(e.after,this.version,t),Ys(this.caches.before.contentBounds(),this.caches.after.contentBounds())):(this.caches.main.sync(e,this.version,t),this.caches.main.contentBounds())}pixelRatio(){return V(this.fixedRatio??Rl(),.25,Il)}applySize(e,t,n){let r=this.pixelRatio(),i=n!==null&&this.fixedRatio===void 0&&Rl()<=Il,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: ${Rl()}dppx)`),e.addEventListener(`change`,t),!this.destroyed&&this.pixelRatio()!==this.dpr&&this.resize()};e=window.matchMedia(`(resolution: ${Rl()}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 Bl(e,t,n={}){if(!e||typeof e.appendChild!=`function`)throw new C(`invalid-input`,`createRenderer: container must be an HTMLElement`);return new zl(e,t,n)}var Vl=8,Hl=12,Ul=1.5,Wl=.45,Gl=2.5,Kl=1,ql=3e3,Jl=.5,Yl=.12,Xl=50,Zl=.8;function Ql(e,t){let n=e.family;return n===`neutral`?null:t.family[n]?.base??null}function $l(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 eu=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*Zl&&(this.growing=!0),!1}step(e){return this.growing?(this.value+=(this.target-this.value)*(1-Math.exp(-Math.max(0,e)/Xl)),Math.abs(this.target-this.value)<=this.target*.002&&(this.value=this.target,this.growing=!1),this.growing):!1}};function tu(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 nu=class{renderer;canvas;ctx;factory;width;height;theme;dpr=1;layer=null;frame=null;collapsed=[];fit=null;content=null;scale=new eu;rafId=0;lastTick=-1;cleanup=[];drag=null;destroyed=!1;constructor(e,t,n,r){this.renderer=t;let i=Fl.get(t);if(!i)throw new C(`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??cs;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=`${Hl}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=Fl.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&&Fl.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=tu($l(t,this.renderer.camera.viewport()),this.width,this.height,Vl).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=Fl.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<ql){e.globalAlpha=Yl,e.strokeStyle=s,e.lineWidth=Math.max(1,Jl*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(Ul*i)),l=new Map;e.globalAlpha=Wl,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=Ql(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=Gl/2*i,d=u+Kl*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,B)}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,B)}e.fill()}}}redraw(){let e=this.ctx;if(!e||this.destroyed)return;let t=Fl.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(),ds(e,0,0,r,i,Hl),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=V(t.x*a.s+a.ox,-2,r+2),s=V(t.y*a.s+a.oy,-2,i+2),c=V((t.x+t.width)*a.s+a.ox,-2,r+2),l=V((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(),ds(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=Fl.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 ru(e,t,n={},r={}){return new nu(e,t,n,r)}var iu=240,au;function ou(e,t){return au===void 0&&(au=cs(1,1)),new su(e,{fonts:new ol(t),measurer:new ll(au?.ctx??null),atlas:null})}var su=class{frame;res;cache=new Js;labels=new ml;badges=new mc;grid=new Xc;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:Cl()};constructor(e,t){this.frame=e,this.res=t,this.cache.sync(e,1,new Vs)}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]-iu,e.y0=r[1]-iu,e.x1=r[2]+iu,e.y1=r[3]+iu,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 cu(e,t){return Bl(e,t)}function lu(e,t,n){return ru(e,t,n)}var uu=8,du=.94,fu=6,pu=48,mu=Object.freeze({top:0,right:0,bottom:0,left:0});function hu(e,t,n,r){let i=t-r.left-r.right,a=n-r.top-r.bottom;if(i<pu||a<pu)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 gu(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,fu),c=s.map(e=>[e.y+e.height+uu,i-e.x+uu,a-e.y+uu,e.x+e.width+uu]),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(hu(e,i,a,h));if(!(g>0))continue;let _=Math.hypot((p-o)/2,(r-s)/2),v=g>d/du||g>=d*du&&_<f-.5;(d<0||v)&&(u=h,d=Math.max(g,d),f=_)}return u}var _u=.05,vu=16;function yu(e,t,n,r,i){let a=i=>{let a=e(i);return a!==null&&hu(a,t,n,r)>=i},o=i;if(!a(o)){let s=Math.min(_u,i);if(!a(s)){let i=e(1/0);return i?{k:hu(i,t,n,r),content:i,bounds:i}:null}let c=o;for(let e=0;e<vu;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 bu(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 xu={createRenderer:cu,createMinimap:lu};function Su(){return xu}var Cu=1.8,wu=2.5,Tu=200;function Eu(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 Du=class{autoFit=!1;selectOnClick=!0;overview=!0;#e;#t=null;#n=!1;#r=null;#i=new Map;#a=[];#o={main:null,before:null,after:null};#s=!0;#c=-1/0;#l=-1/0;#u=null;#d=null;#f=null;#p=!1;#m=!1;#h=24;constructor(e){this.#e=e,this.#p=e.status===`ready`}attach(e,t){if(this.#r)return;let n=this.#e,r=Su(),i=r.createRenderer(e,{theme:n.theme,labelsInside:this.#n});this.#r=i,this.#f&&i.camera.set(this.#f),t&&!this.#i.has(t)&&this.#i.set(t,null);for(let e of this.#i.keys())this.#i.set(e,r.createMinimap(e,i));this.#a.push(i.on(`hover`,e=>this.#C(e)),i.on(`click`,({pick:e})=>this.#w(e)),i.on(`dblclick`,({pick:e})=>this.#T(e)),i.on(`camera`,({source:e})=>{e===`user`&&this.noteUserCamera(),this.#S()})),this.#s=!0,n.invalidate()}detach(){this.#r&&this.#e.status===`ready`&&(this.#f=this.#r.camera.get());for(let e of this.#a.splice(0))e();for(let[e,t]of this.#i)t?.destroy(),this.#i.set(e,null);this.#r?.destroy(),this.#r=null}addMinimap(e){if(!this.#i.has(e)){let t=this.#r;this.#i.set(e,t?Su().createMinimap(e,t):null),this.#s=!0,this.#e.invalidate()}return()=>{this.#i.get(e)?.destroy(),this.#i.delete(e)}}get camera(){return this.#r?.camera??null}get version(){return this.#t}set version(e){e!==this.#t&&(this.#t=e,this.#s=!0,this.#e.invalidate())}setChrome(e){this.#d=e}setLabelsInside(e){this.#n=e,this.#r?.setLabelsInside(e)}layoutChanged(){if(this.#S(),this.#e.status!==`ready`)return;if(!this.#p){this.autoFit&&!this.#m&&this.fit({animate:!1});return}let e=this.#e.selectionBounds();if(e){if(!this.#g(e,1.8))return;this.#p=!1,this.#_(e,{animate:!1});return}let t=this.#b(),n=this.#r?.camera;t&&n&&this.#y(n,t,{animate:!1})}noteUserCamera(){this.#l=this.#e.now(),this.#m=!0}draw(e=this.#e.now()){let t=this.#e,n=t.resolver,r=this.#r;if(!n||!r||t.status!==`ready`)return;let i=this.#o,a,o=this.#t;if(o)i.main=n.resolve(t.viewState(o),i.main??void 0),r.setFrame(i.main),a=i.main;else if(t.mode===`swipe`)i.before=n.resolve(t.viewState(`before`),i.before??void 0),i.after=n.resolve(t.viewState(`after`),i.after??void 0),r.setFrame({split:t.split,before:i.before,after:i.after}),a=i.after;else{let e=t.mode===`replay`?`replay`:`union`;i.main=n.resolve(t.viewState(e),i.main??void 0),r.setFrame(i.main),a=i.main}let s=!o&&t.mode===`replay`&&(t.clock?.playing??!1);if(this.#i.size>0&&(this.#s||s&&e-this.#c>=Tu)){for(let e of this.#i.values())e?.update(a);this.#s=!1,this.#c=e}}sceneChanged(){let e=this.#o;e.main=e.before=e.after=null,this.#r?.setTheme(this.#e.scene?.theme??this.#e.theme),this.#s=!0}installed(){this.#p=!0,this.#f=null,queueMicrotask(()=>this.layoutChanged())}drawnChanged(){this.#S(),this.#s=!0}show(e){this.#_(e)}follow(e){if(this.#e.now()-this.#l<2e3)return;let t=this.#v(e);!t||Eu(e,t)>=.7||this.#_(e)}looped(){this.autoFit&&this.fit()}viewport(){return this.#r?.camera.viewport()??null}#g(e,t){let n=this.#d?.();return!n||!(n.width>0)||!(n.height>0)?null:gu(e,n,24,t)}#_(e,t={}){let n=this.#r?.camera;if(!n)return;let r=this.#g(e,Cu);n.flyTo(e,{...t,maxZoom:Cu,...r?{padding:r}:{}})}#v(e){let t=this.#r?.camera;if(!t)return null;let n=this.#g(e,1.8)??mu;return bu(t.viewport(),t.get().k,n)}fit(e={}){let t=this.#r?.camera;if(!t)return Promise.resolve();let{padding:n,...r}=e;n!==void 0&&(this.#h=Number.isFinite(n)&&n>=0?n:24);let i=this.#b();return i?this.#y(t,i,r):t.fit(void 0,r)}#y(e,t,n){return this.#p=!1,this.#m=!1,e.fit(t.bounds,{...n,padding:t.insets,maxZoom:wu})}#b(){let e=this.#e,t=this.#d?.(),n=e.resolver;if(!t||!n||!(t.width>0)||!(t.height>0))return null;let r=ou(n.resolve(za({layer:`union`,focus:e.focus,families:e.families,reducedMotion:e.reducedMotion})),e.theme),i=e=>r.at(e),a=i(1/0);if(!a)return null;let{width:o,height:s}=t,c=this.#h,l=gu(a,t,c,wu),u=yu(i,o,s,l,wu);if(!u)return null;let d=gu(u.content,t,c,wu);return Ou(d,l)||(l=d,u=yu(i,o,s,l,2.5)??u),{bounds:u.bounds,insets:l}}#x(){let e=this.#e.scene;if(!e)return null;let t=this.#e.focus,n=this.#u;if(n&&n.scene===e&&n.focus===t)return n.rect;let r=t?ku(e,t):Ji(e);return this.#u={scene:e,focus:t,rect:r},r}#S(){let e=this.#x(),t=this.#r?.camera.viewport(),n=!e||!t||Eu(e,t)>=.98;n!==this.overview&&(this.overview=n,this.#e.notify(`overview`))}zoom(e){this.noteUserCamera(),this.#r?.camera.zoomBy(e>0?1.4:1/1.4)}#C(e){this.#e.setHover(e?.type===`node`?e.index:-1,e?.type===`edge`?e.index:-1,e?.type===`collapsed`?e.index:-1)}#w(e){if(!this.selectOnClick)return;let t=this.#e;if(!e)t.clearSelection();else switch(e.type){case`node`:t.selectNode(e.index,{fly:!1});break;case`edge`:{let n=t.scene?.edges[e.index];n&&n.hunk>=0&&t.selectHunk(n.hunk,{fly:!1}),t.pinnedEdge=e.index,t.invalidate();break}case`collapsed`:t.expandGroup(e.index)}}#T(e){if(!this.selectOnClick||e?.type!==`node`)return;let t=this.#e,n=t.scene?.nodes[e.index];n&&(n.hunk>=0?t.flyToHunk(n.hunk):t.flyToNode(e.index))}};function Ou(e,t){return e.top===t.top&&e.right===t.right&&e.bottom===t.bottom&&e.left===t.left}function ku(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?ss({x:n,y:r,width:i-n,height:a-r},160,1.12):Ji(e)}var Au=class extends as{view;constructor(e,t){super(e,t),this.view=new Du(this),this.addView(this.view)}get autoFit(){return this.view.autoFit}set autoFit(e){this.view.autoFit=e}get selectOnClick(){return this.view.selectOnClick}set selectOnClick(e){this.view.selectOnClick=e}get overview(){return this.view.overview}get camera(){return this.view.camera}attach(e,t){this.view.attach(e,t)}detach(){this.view.detach(),this.sleep()}destroy(){super.destroy(),this.view.detach()}setChrome(e){this.view.setChrome(e)}setLabelsInside(e){this.view.setLabelsInside(e)}layoutChanged(){this.view.layoutChanged()}noteUserCamera(){this.view.noteUserCamera()}},ju={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"/>`,filter:`<path d="M2.5 3.25h11L9.25 8.5v3.75l-2.5 1.25v-5Z"/>`,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 Mu(e,t){if(t!=null&&t!==!1){if(Array.isArray(t))for(let n of t)Mu(e,n);else e.appendChild(typeof t==`string`||typeof t==`number`?document.createTextNode(String(t)):t)}}function W(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)Mu(r,e);return r}function G(e,...t){e.textContent=``;for(let n of t)Mu(e,n)}function Nu(e,t,n,...r){let i=e.activeElement,a=i!==null&&t.contains(i),o=a?i.dataset.focusKey??``:``;if(G(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 K(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 q(e,t){e.textContent!==t&&(e.textContent=t)}function J(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">${ju[e]}</svg>`,n.content.firstElementChild}function Y(e,t,n,r={}){return W(`button`,{type:`button`,class:`icon-btn`,"aria-label":t,title:t,onclick:n,...r},J(e))}function X(e,t){K(e,`aria-label`,t),K(e,`title`,t)}function Pu(e){if(!e.isConnected)return!1;for(let t=e;t;){if(t.hidden||t.inert)return!1;t=t.parentElement??t.getRootNode().host??null}return!0}function Fu(e,t,n){let r=e.activeElement;if(!r||!t.contains(r))return;let i=n();i&&!t.contains(i)?i.focus({preventScroll:!0}):r.blur()}var Iu=t(`kgdiff.stage/1`),Lu=`kgdiff:viewer`,Ru={panels:{}},zu=(e,t,n)=>typeof e==`number`&&Number.isFinite(e)&&e>=t&&e<=n?e:void 0;function Bu(e,t=Lu){if(!e)return Ru;try{let n=e.getItem(t);if(!n)return Ru;let r=JSON.parse(n);if(typeof r!=`object`||!r)return Ru;let i=r,a=zu(i.sidebarWidth,0,1e4),o=zu(i.detailShare,0,1),s=Oo(i.theme),c=ko(i.palette),l=Ao(i.locale);return{panels:go(i.panels).panels,...a===void 0?{}:{sidebarWidth:a},...o===void 0?{}:{detailShare:o},...s?{theme:s}:{},...c?{palette:c}:{},...l?{locale:l}:{}}}catch{return Ru}}function Vu(e,t,n=Lu){if(e)try{e.setItem(n,JSON.stringify({v:1,...t}))}catch{}}var Hu=[`list`,`detail`,`search`,`filters`];function Uu(e,t,n){let r={};if(n===`none`){for(let e of lo)e!==`legend`&&(r[e]=`hidden`);return r}if(e===`closed`||e===`open`)for(let t of Hu)r[t]=e===`open`?`open`:`collapsed`;return t===`compact`&&(r.title=`hidden`),r}function Wu(e){let t={...fo};for(let n of lo)for(let r of e){let e=r[n];if(e!==void 0){t[n]=e;break}}return t}function Gu(e,t){return lo.every(n=>e[n]===t[n])}var Ku=t(`kgdiff.viewer/1`),qu=new WeakSet;function Ju(e,t){qu.add(t),e.forwardKey(t)}function Yu(e){return qu.has(e)}function Xu(e,t){return{...e.actions,controller:e.controller,root:t,target:(t,n,r)=>e.target(t,n,r),focus:t=>e.focus(t),keymap:()=>e.keymap}}function Zu(e,t){let n={};if(s(e,Ku,r=>{n.region||(n.region=t(Xu(r,e.getRootNode())),r.attach(n.region))}),!n.region)throw Error(`[kgdiff] a region found no root to bind to.`);return n.region}var Qu=.02,$u=.1,ed={1:`overlay`,2:`swipe`,3:`replay`,4:`scope`,j:`next`,ArrowDown:`next`,k:`prev`,ArrowUp:`prev`,Home:`first`,End:`last`,Enter:`fly`,Escape:`escape`," ":`play-pause`,Spacebar:`play-pause`,ArrowLeft:`left`,ArrowRight:`right`,f:`fit`,"+":`zoom-in`,"=":`zoom-in`,"-":`zoom-out`,_:`zoom-out`,"−":`zoom-out`,"/":`search`,x:`review`,"\\":`sidebar`,t:`theme`,e:`expand`,"?":`help`},td=new Set(Object.values(ed).filter(e=>e!==null));function nd(e,t,n,r){switch(e){case`overlay`:case`swipe`:case`replay`:return{type:`mode`,mode:e};case`scope`:return{type:`scope`};case`expand`:return r===`changes`?{type:`expand`}:null;case`play-pause`:return n===`replay`?{type:`play-pause`}:null;case`left`:case`right`:{let r=e===`right`?1:-1;return n===`replay`?{type:`step`,direction:r}:n===`swipe`?{type:`divider`,delta:r*(t.shiftKey?$u:Qu)}:null}case`zoom-in`:case`zoom-out`:return{type:`zoom`,direction:e===`zoom-in`?1:-1};default:return{type:e}}}function rd(e,t){if(Object.hasOwn(e,t))return e[t];let n=t.toLowerCase(),r=t===n?t.toUpperCase():n;return t.length===1&&r!==t&&Object.hasOwn(e,r)?e[r]:void 0}function id(e,t,n=`all`,r=null){if(e.ctrlKey||e.metaKey||e.altKey)return null;let i=r===null?void 0:rd(r,e.key),a=i===void 0?rd(ed,e.key):i;return a?nd(a,e,t,n):null}var ad={"=":`+`,_:`-`,"−":`-`,Spacebar:` `};function od(e){let t=new Set([...Object.keys(ed),...Object.keys(e??{})]),n=t=>{let n=e===null?void 0:rd(e,t);return n===void 0?rd(ed,t):n},r=new Map;for(let e of t){let i=n(e);if(!i)continue;let a=e.toLowerCase();if(e.length===1&&e!==a&&t.has(a)&&n(a)===i)continue;let o=ad[e];if(o!==void 0&&n(o)===i)continue;let s=r.get(i)??[];s.push(e),r.set(i,s)}return r}var sd={Space:` `};function cd(e){let t=[],n={},r=(e,r,i)=>{let a=sd[e]??e;a===``||!(r===null||r===`none`||td.has(r))?t.push(i):n[a]=r===null||r===`none`?null:r};if(typeof e==`string`)for(let n of e.split(/\s+/)){if(n===``)continue;let e=n.lastIndexOf(`:`);e<=0?t.push(n):r(n.slice(0,e),n.slice(e+1),n)}else if(typeof e==`object`&&e)for(let[t,n]of Object.entries(e))r(t,n,`${t}:${String(n)}`);else return{keymap:null,invalid:t};return{keymap:Object.keys(n).length>0?n:null,invalid:t}}function ld(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`}function ud(e){return typeof requestAnimationFrame==`function`?requestAnimationFrame(e):0}function dd(e){typeof cancelAnimationFrame==`function`&&cancelAnimationFrame(e)}function fd(e){let t=!1,n=()=>{t||(t=!0,dd(i),clearTimeout(r),e())},r=setTimeout(n,32),i=ud(n)}function pd(){return new Promise(e=>fd(()=>setTimeout(e,0)))}var md=[`added`,`removed`,`content`,`structure`,`identity`],hd=`:host{all:initial;display:block;position:relative;height:100%;min-height:420px;contain:content;font-family:var(--kgdiff-font);font-size:13px;line-height:1.45;color:var(--kgdiff-text);background:var(--kgdiff-background);-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(--kgdiff-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(--kgdiff-font-mono);color:var(--kgdiff-text-secondary);background:var(--kgdiff-kbd);box-shadow:inset 0 0 0 1px var(--kgdiff-border),inset 0 -1px 0 var(--kgdiff-border)}.scroll{overflow:auto;scrollbar-width:thin;scrollbar-color:var(--kgdiff-border-strong) transparent}.root{position:absolute;inset:0;display:flex;flex-direction:column;overflow:hidden;background:var(--kgdiff-background)}.body{position:relative;flex:1;min-height:0;display:flex;container-type:inline-size}.stage-wrap{position:relative;flex:1;min-width:0;min-height:0;overflow:hidden;background:var(--kgdiff-background);container-type:inline-size}.stage{position:absolute;inset:0}.stage canvas{outline:none}.stage canvas:focus-visible{outline:2px solid var(--kgdiff-accent);outline-offset:-2px}.chrome{position:absolute;inset:0;pointer-events:none}.chrome>*{pointer-events:auto}.chrome[data-ready="false"]>:not(.corner,.dock),.chrome[data-ready="false"] .corner>:not(slot),.chrome[data-ready="false"] .dock>:not(slot){display:none !important}.corner{position:absolute;z-index:2;display:flex;flex-direction:column;gap:8px;max-width:calc(50% - 24px);pointer-events:none}.corner>*{pointer-events:auto}.corner.top-start{top:12px;left:12px;align-items:flex-start}.corner.top-end{top:12px;right:12px;align-items:flex-end}.corner.bottom-start{bottom:16px;left:16px;align-items:flex-start}.corner.bottom-end{bottom:16px;right:16px;align-items:flex-end}.corner>.float{position:static}::slotted(kgdiff-minimap:state(overview)){display:none}.stage-wrap[data-hud~="title"] .corner.top-start,.stage-wrap[data-hud~="actions"] .corner.top-end{top:64px}.icon-btn{display:inline-flex;align-items:center;justify-content:center;flex:none;width:32px;height:32px;border-radius:8px;color:var(--kgdiff-text-secondary);transition:background var(--kgdiff-fast) var(--kgdiff-ease),color var(--kgdiff-fast) var(--kgdiff-ease)}.icon-btn:hover{background:var(--kgdiff-hover);color:var(--kgdiff-text)}.icon-btn:active{background:var(--kgdiff-press)}.icon-btn[aria-pressed="true"],.icon-btn[aria-expanded="true"]{background:var(--kgdiff-press);color:var(--kgdiff-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(--kgdiff-text);background:var(--kgdiff-hover);box-shadow:inset 0 0 0 1px var(--kgdiff-border);transition:background var(--kgdiff-fast) var(--kgdiff-ease),box-shadow var(--kgdiff-fast) var(--kgdiff-ease)}.btn:hover{background:var(--kgdiff-press);box-shadow:inset 0 0 0 1px var(--kgdiff-border-strong)}.link-btn{min-height:28px;color:var(--kgdiff-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-title[data-titled="false"] .header-sep{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(--kgdiff-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(--kgdiff-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(--kgdiff-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.versions .arrow{color:var(--kgdiff-text-muted);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(--kgdiff-font-mono);color:var(--kgdiff-text-secondary);background:var(--kgdiff-hover);box-shadow:inset 0 0 0 1px var(--kgdiff-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(--kgdiff-hover);box-shadow:inset 0 0 0 1px var(--kgdiff-border)}.segmented .thumb{position:absolute;top:2px;bottom:2px;left:0;width:0;border-radius:7px;background:var(--kgdiff-raised);box-shadow:0 1px 2px rgba(0,0,0,0.12),inset 0 0 0 1px var(--kgdiff-border-strong);transition:transform var(--kgdiff-base) var(--kgdiff-ease),width var(--kgdiff-base) var(--kgdiff-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(--kgdiff-text-secondary);white-space:nowrap;transition:color var(--kgdiff-fast) var(--kgdiff-ease)}.seg:hover{color:var(--kgdiff-text)}.seg[aria-checked="true"]{color:var(--kgdiff-text)}.seg .icon{opacity:0.9}${[...md,`neutral`].map(e=>e===`neutral`?`[data-family="neutral"] { --fam-base: var(--kgdiff-neutral); --fam-soft: var(--kgdiff-hover); --fam-text: var(--kgdiff-text-secondary); }`:`[data-family="${e}"] { --fam-base: var(--kgdiff-${e}); --fam-soft: var(--kgdiff-${e}-soft); --fam-text: var(--kgdiff-${e}-text); }`).join(`
|
|
4
|
+
`)}.card{background:var(--kgdiff-overlay);border-radius:12px;box-shadow:var(--kgdiff-shadow),0 0 0 1px var(--kgdiff-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(--kgdiff-text-secondary);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(--kgdiff-border);animation:fade var(--kgdiff-base) var(--kgdiff-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(--kgdiff-text-muted);border-radius:7px;width:100%}.legend-head:hover{color:var(--kgdiff-text-secondary);background:var(--kgdiff-hover)}.legend-head .icon{width:14px;height:14px;margin-left:auto;transition:transform var(--kgdiff-base) var(--kgdiff-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(--kgdiff-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(--kgdiff-text-secondary)}.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(--kgdiff-text-muted);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(--kgdiff-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(--kgdiff-text-secondary);white-space:nowrap;transition:background var(--kgdiff-fast) var(--kgdiff-ease),color var(--kgdiff-fast) var(--kgdiff-ease),box-shadow var(--kgdiff-fast) var(--kgdiff-ease)}.scope-btn:hover{color:var(--kgdiff-text);background:var(--kgdiff-hover)}.scope-btn[aria-pressed="true"]{color:var(--kgdiff-accent-text);background:var(--kgdiff-accent-soft);box-shadow:inset 0 0 0 1px var(--kgdiff-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(--kgdiff-base) var(--kgdiff-ease)}@keyframes reveal{from{opacity:0;transform:translateX(-6px)}}.context .label{font-size:12px;font-weight:550;color:var(--kgdiff-text-muted);white-space:nowrap}.context .opts{display:inline-flex;gap:2px;padding:2px;border-radius:8px;background:var(--kgdiff-hover)}.context .opt{width:28px;height:28px;border-radius:6px;font-size:12px;font-weight:600;color:var(--kgdiff-text-secondary);font-variant-numeric:tabular-nums}.context .opt:hover{color:var(--kgdiff-text)}.context .opt[aria-checked="true"]{background:var(--kgdiff-raised);color:var(--kgdiff-text);box-shadow:inset 0 0 0 1px var(--kgdiff-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(--kgdiff-text-secondary);box-shadow:inset 0 0 0 1px var(--kgdiff-border-strong);font-variant-numeric:tabular-nums}.context .expand:hover:not(:disabled){color:var(--kgdiff-text);background:var(--kgdiff-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(--kgdiff-accent);opacity:0.85;box-shadow:0 0 12px var(--kgdiff-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(--kgdiff-accent-text);background:var(--kgdiff-overlay);box-shadow:var(--kgdiff-shadow),0 0 0 1.5px var(--kgdiff-accent);backdrop-filter:blur(16px);transition:transform var(--kgdiff-fast) var(--kgdiff-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(--kgdiff-shadow),0 0 0 2px var(--kgdiff-accent),0 0 0 5px var(--kgdiff-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(--kgdiff-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(--kgdiff-text-secondary);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(--kgdiff-text-secondary);font-variant-numeric:tabular-nums;box-shadow:inset 0 0 0 1px var(--kgdiff-border)}.transport .speed:hover{color:var(--kgdiff-text);background:var(--kgdiff-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(--kgdiff-track);overflow:hidden}.scrubber .fill{position:absolute;left:0;top:0;bottom:0;width:100%;transform-origin:left;background:var(--kgdiff-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(--kgdiff-text);box-shadow:0 1px 4px rgba(0,0,0,0.35),0 0 0 3px var(--kgdiff-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(--kgdiff-text);animation:rise var(--kgdiff-base) var(--kgdiff-ease)}.finished .icon{color:var(--kgdiff-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(--kgdiff-fast) var(--kgdiff-ease)}.tooltip[data-open="true"]{opacity:1}.tooltip .t-label{font-size:13px;font-weight:600;color:var(--kgdiff-text);overflow-wrap:anywhere}.tooltip .t-old{font-size:12px;color:var(--kgdiff-text-muted);text-decoration:line-through;overflow-wrap:anywhere}.tooltip .t-id{margin-top:2px;font:11px/1.4 var(--kgdiff-font-mono);color:var(--kgdiff-text-muted);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(--kgdiff-text-secondary);overflow-wrap:anywhere}.tooltip .t-hint{margin-top:6px;font-size:11px;color:var(--kgdiff-text-muted)}.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(--kgdiff-background)}.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(--kgdiff-accent-text);background:var(--kgdiff-accent-soft);margin-bottom:16px}.state-card .state-icon .icon{width:20px;height:20px}.state-card.error .state-icon{color:var(--kgdiff-removed-text);background:var(--kgdiff-removed-soft)}.state-card.ok .state-icon{color:var(--kgdiff-added-text);background:var(--kgdiff-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(--kgdiff-text-secondary);font-size:13px}.state-card details{margin-top:16px;font-size:12px;color:var(--kgdiff-text-secondary)}.state-card summary{cursor:pointer;font-weight:550;color:var(--kgdiff-text-secondary);border-radius:4px;width:max-content}.state-card pre{margin:8px 0 0;max-height:200px;padding:10px 12px;border-radius:8px;background:var(--kgdiff-input);font:11.5px/1.5 var(--kgdiff-font-mono);white-space:pre-wrap;overflow-wrap:anywhere;color:var(--kgdiff-text-secondary);box-shadow:inset 0 0 0 1px var(--kgdiff-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(--kgdiff-text-muted);transition:color var(--kgdiff-base) var(--kgdiff-ease)}.steps li[data-state="active"]{color:var(--kgdiff-text);font-weight:550}.steps li[data-state="done"]{color:var(--kgdiff-text-secondary)}.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(--kgdiff-border-strong)}.steps li[data-state="done"] .mark{background:var(--kgdiff-accent-soft);box-shadow:none;color:var(--kgdiff-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(--kgdiff-accent-soft);border-top:1.5px solid var(--kgdiff-accent);animation:spin 0.8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.skeleton-grid{position:absolute;inset:0;background-image:radial-gradient(var(--kgdiff-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{--sb-w:min(var(--sidebar-w,360px),max(280px,100cqw - 320px));position:relative;z-index:2;flex:none;width:var(--sb-w);display:flex;overflow:hidden;background:var(--kgdiff-panel);border-left:1px solid var(--kgdiff-border);transition:width var(--kgdiff-base) var(--kgdiff-ease),border-color var(--kgdiff-base) var(--kgdiff-ease)}.sidebar.dragging{transition:none}.sidebar[data-open="false"]{width:0;border-left-color:transparent}.sidebar-inner{width:var(--sb-w);flex:none;display:flex;flex-direction:column;min-height:0}.sheet-handle{display:none}.sb-resize{position:absolute;z-index:3;top:0;bottom:0;left:0;width:6px;cursor:ew-resize;touch-action:none}.sb-split{position:relative;z-index:1;flex:none;height:0;cursor:ns-resize;touch-action:none}.sb-split::before{content:"";position:absolute;left:0;right:0;top:-4px;height:8px}.sb-resize:hover,.sb-resize:focus-visible,.sidebar.dragging .sb-resize{box-shadow:inset 2px 0 0 var(--kgdiff-accent)}.sb-split:hover::after,.sb-split:focus-visible::after{content:"";position:absolute;left:0;right:0;top:-1px;height:2px;background:var(--kgdiff-accent)}.sb-resize:focus-visible,.sb-split:focus-visible{outline:none}.sb-head{flex:none;padding:12px 12px 8px;display:grid;gap:10px;border-bottom:1px solid var(--kgdiff-border)}.sb-row{display:flex;align-items:center;gap:2px;min-width:0}.sb-row>.sb-title{flex:1;min-width:0}.sb-row>.icon-btn{width:24px;height:24px;border-radius:6px}.list-toggle .icon{transition:transform var(--kgdiff-base) var(--kgdiff-ease)}.list-toggle[aria-expanded="false"] .icon{transform:rotate(180deg)}.filters-btn[data-active="true"]{color:var(--kgdiff-accent-text)}.filters-wrap:has(>.filters[hidden]){display:none}.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(--kgdiff-text-secondary);background:var(--kgdiff-hover);box-shadow:inset 0 0 0 1px var(--kgdiff-border);font-variant-numeric:tabular-nums}.progress{margin-left:auto;display:flex;align-items:center;gap:8px;font-size:11.5px;color:var(--kgdiff-text-muted);font-variant-numeric:tabular-nums}.progress .bar{width:64px;height:4px;border-radius:2px;background:var(--kgdiff-track);overflow:hidden}.progress .bar>div{height:100%;width:100%;transform-origin:left;background:var(--kgdiff-accent);border-radius:2px;transition:transform var(--kgdiff-base) var(--kgdiff-ease)}.progress[data-complete="true"]{color:var(--kgdiff-accent-text)}.search{position:relative;display:flex;align-items:center;height:32px;border-radius:8px;background:var(--kgdiff-input);box-shadow:inset 0 0 0 1px var(--kgdiff-border);transition:box-shadow var(--kgdiff-fast) var(--kgdiff-ease)}.search:focus-within{box-shadow:inset 0 0 0 1px var(--kgdiff-accent),0 0 0 3px var(--kgdiff-accent-soft)}.search>.icon{position:absolute;left:10px;color:var(--kgdiff-text-muted);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(--kgdiff-text)}.search input::placeholder{color:var(--kgdiff-text-muted)}.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(--kgdiff-text-muted)}.search .clear:hover{color:var(--kgdiff-text);background:var(--kgdiff-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(--kgdiff-text-secondary);box-shadow:inset 0 0 0 1px var(--kgdiff-border);transition:background var(--kgdiff-fast) var(--kgdiff-ease),box-shadow var(--kgdiff-fast) var(--kgdiff-ease),color var(--kgdiff-fast) var(--kgdiff-ease)}.fchip:hover{background:var(--kgdiff-hover);color:var(--kgdiff-text)}.fchip .swatch{width:16px;height:16px;margin:0 -1px}.fchip .n{color:var(--kgdiff-text-muted);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(--kgdiff-accent)}.list:focus-visible .row[aria-selected="true"]{box-shadow:inset 0 0 0 2px var(--kgdiff-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(--kgdiff-fast) var(--kgdiff-ease),box-shadow var(--kgdiff-fast) var(--kgdiff-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(--kgdiff-hover)}.row[aria-selected="true"]{background:var(--kgdiff-selected);box-shadow:inset 0 0 0 1px var(--kgdiff-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(--kgdiff-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.row .sub{font-size:12px;color:var(--kgdiff-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-height:17px}.row[data-reviewed="true"] .title{color:var(--kgdiff-text-secondary)}.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(--kgdiff-control-border);color:transparent;transition:background var(--kgdiff-fast) var(--kgdiff-ease),box-shadow var(--kgdiff-fast) var(--kgdiff-ease),color var(--kgdiff-fast) var(--kgdiff-ease),transform var(--kgdiff-fast) var(--kgdiff-ease)}.rv .ring .icon{width:12px;height:12px}.rv:hover .ring{box-shadow:inset 0 0 0 1.5px var(--kgdiff-accent);color:var(--kgdiff-text-muted)}.rv[data-pressed="true"] .ring{background:var(--kgdiff-accent);box-shadow:none;color:var(--kgdiff-background)}.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(--kgdiff-text-muted)}.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(--kgdiff-panel);box-shadow:0 1px 0 var(--kgdiff-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(--kgdiff-text-muted);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(--kgdiff-skeleton)}.skeleton-row:nth-child(even) .b{max-width:52%}.skeleton-row .g{width:20px;height:20px;border-radius:6px;background:var(--kgdiff-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(--kgdiff-text-muted)}.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(--kgdiff-hover)}.result[aria-selected="true"]{box-shadow:inset 0 0 0 1px var(--kgdiff-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(--kgdiff-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(--kgdiff-font-mono);color:var(--kgdiff-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.result mark{background:var(--kgdiff-accent-soft);color:inherit;border-radius:3px;padding:0 1px}.result .status{font-size:11.5px;color:var(--fam-text);flex:none}.detail-wrap{flex:0 1 auto;max-height:58%;min-height:0;display:flex;flex-direction:column;border-top:1px solid var(--kgdiff-border);background:var(--kgdiff-panel)}.detail-wrap:has(>.detail[hidden]){display:none}.detail-wrap[data-state="collapsed"]{flex:none}.detail-wrap[data-state="collapsed"]>.detail{display:none}.sidebar[data-list="folded"] .detail-wrap{flex:1 1 auto;max-height:none}.sidebar[data-split] .detail-wrap:not([data-state="collapsed"]){flex:none;height:calc(var(--detail-share) * 100%);max-height:none}.detail-bar{flex:none;display:flex;align-items:center;gap:8px;width:100%;height:30px;padding:0 10px 0 16px;font-size:11px;font-weight:650;letter-spacing:0.06em;text-transform:uppercase;color:var(--kgdiff-text-muted)}.detail-bar:hover{color:var(--kgdiff-text-secondary);background:var(--kgdiff-hover)}.detail-bar .icon{width:14px;height:14px;margin-left:auto;transition:transform var(--kgdiff-base) var(--kgdiff-ease)}.detail-bar[aria-expanded="false"] .icon{transform:rotate(180deg)}.detail{flex:0 1 auto;min-height:0;display:flex;flex-direction:column;background:var(--kgdiff-panel)}.detail-wrap>.detail:not([data-empty="true"]){flex:1 1 auto}.detail[data-empty="true"]{flex:none}.detail-empty{padding:16px;display:flex;align-items:center;gap:12px;color:var(--kgdiff-text-muted);font-size:12.5px}.detail-empty .icon{color:var(--kgdiff-text-muted)}.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(--kgdiff-text-secondary);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(--kgdiff-text-secondary);box-shadow:inset 0 0 0 1px var(--kgdiff-border);margin-right:4px}.rv-btn:hover{color:var(--kgdiff-text);background:var(--kgdiff-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(--kgdiff-control-border);color:transparent}.rv-btn .ring .icon{width:11px;height:11px}.rv-btn[aria-pressed="true"]{color:var(--kgdiff-accent-text);box-shadow:inset 0 0 0 1px var(--kgdiff-accent);background:var(--kgdiff-accent-soft)}.rv-btn[aria-pressed="true"] .ring{background:var(--kgdiff-accent);box-shadow:none;color:var(--kgdiff-background)}.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(--kgdiff-text-muted);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(--kgdiff-text-muted)}.kv dd{margin:0;min-width:0;overflow-wrap:anywhere}.id-text{font:12px/1.5 var(--kgdiff-font-mono);color:var(--kgdiff-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(--kgdiff-hover);box-shadow:inset 0 0 0 1px var(--kgdiff-border);overflow-wrap:anywhere}.vchip.add{color:var(--kgdiff-added-text);background:var(--kgdiff-added-soft);box-shadow:none}.vchip.del{color:var(--kgdiff-removed-text);background:var(--kgdiff-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(--kgdiff-text-secondary)}.pair .arr{color:var(--kgdiff-text-muted)}.line{display:grid;grid-template-columns:10px minmax(0,1fr);gap:6px;align-items:baseline}.line .sign{font:600 12px/1 var(--kgdiff-font-mono);text-align:center}.line.old .sign{color:var(--kgdiff-removed-text)}.line.new .sign{color:var(--kgdiff-added-text)}del.hl{text-decoration:line-through;text-decoration-color:var(--kgdiff-removed);background:var(--kgdiff-removed-soft);color:var(--kgdiff-removed-text);border-radius:3px;padding:0 1px}ins.hl{text-decoration:none;background:var(--kgdiff-added-soft);color:var(--kgdiff-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(--kgdiff-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(--kgdiff-text-secondary)}.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(--kgdiff-text-secondary);border-radius:4px}.disclosure:hover{color:var(--kgdiff-text)}.disclosure .icon{width:12px;height:12px;transition:transform var(--kgdiff-base) var(--kgdiff-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(--kgdiff-hover)}.rel .sign{flex:none;width:12px;font:600 12px/1.5 var(--kgdiff-font-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(--kgdiff-text-secondary);white-space:nowrap}.rel .was{color:var(--kgdiff-text-muted)}.rel.removed .s{text-decoration:line-through;text-decoration-color:var(--kgdiff-text-muted);color:var(--kgdiff-text-secondary)}.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(--kgdiff-hover)}.node-link[aria-current="true"]{background:var(--kgdiff-hover);box-shadow:inset 0 0 0 1px var(--kgdiff-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(--kgdiff-text-muted);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(--kgdiff-text-muted)}.comp-row .note{color:var(--kgdiff-text-muted);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(--kgdiff-text-secondary)}.bar-row .track{height:6px;border-radius:3px;background:var(--kgdiff-track);overflow:hidden}.bar-row .fill{height:100%;border-radius:3px;background:var(--kgdiff-identity)}.bar-row .v{text-align:right;color:var(--kgdiff-text-secondary);font-variant-numeric:tabular-nums}.note-line{font-size:12px;color:var(--kgdiff-text-muted);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(--kgdiff-fast) var(--kgdiff-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(--kgdiff-border)}.menu-label{padding:6px 8px 4px;font-size:11px;font-weight:650;letter-spacing:0.06em;text-transform:uppercase;color:var(--kgdiff-text-muted)}.menu-item{display:flex;align-items:center;gap:8px;width:100%;height:32px;padding:0 8px;border-radius:7px;font-size:13px;color:var(--kgdiff-text);text-align:left}.menu-item:hover,.menu-item:focus-visible{background:var(--kgdiff-hover);outline:none}.menu-item .icon{color:var(--kgdiff-text-secondary)}.menu-item .check{margin-left:auto;color:var(--kgdiff-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(--kgdiff-scrim);animation:fade var(--kgdiff-fast) var(--kgdiff-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(--kgdiff-base) var(--kgdiff-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(--kgdiff-border);font-size:12.5px;color:var(--kgdiff-text-secondary)}.key-row .ks{display:inline-flex;align-items:center;gap:3px;flex:none;color:var(--kgdiff-text-muted);font-size:11px}[data-panel="hidden"],[data-panel="collapsed"]:not(.legend,.mini-legend){display:none !important}.root[data-chrome="none"] .caption,.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(--kgdiff-border);border-radius:14px 14px 0 0;margin-top:-14px;box-shadow:0 -8px 24px rgba(0,0,0,0.18);transition:height var(--kgdiff-base) var(--kgdiff-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"] .sb-resize{display:none}.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(--kgdiff-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{position:fixed;top:64px;bottom:auto;right:12px}.root[data-compact="true"] .corner.top-end{top:174px}.root[data-compact="true"] .corner.bottom-start,.root[data-compact="true"] .corner.bottom-end{bottom:82px}.root[data-compact="true"][data-mode="replay"] .corner.bottom-start,.root[data-compact="true"][data-mode="replay"] .corner.bottom-end{bottom:134px}.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-wrap{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}}`,Z=`all: initial; font-family: var(--kgdiff-font); font-size: 13px; line-height: 1.45; color: var(--kgdiff-text); -webkit-font-smoothing: antialiased;`,gd={root:`:host{display:contents}[hidden]{display:none !important}.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}`,stage:`:host{${Z}display:block;position:relative;height:100%;min-height:240px;contain:content;background:var(--kgdiff-background)}:host([hidden]){display:none}.stage-wrap{position:absolute;inset:0}`,"change-list":`:host{${Z}display:flex;flex-direction:column;min-height:0;background:var(--kgdiff-panel)}:host([hidden]){display:none}.change-list{flex:1;min-height:0;display:flex;flex-direction:column}`,"change-detail":`:host{${Z}display:flex;flex-direction:column;min-height:0;background:var(--kgdiff-panel)}:host([hidden]){display:none}.detail{flex:1 1 auto}`,search:`:host{${Z}display:block;position:relative}:host([hidden]){display:none}.results{position:absolute;top:calc(100% + 6px);left:0;right:0;z-index:10;max-height:min(60vh,420px);border-radius:12px;background:var(--kgdiff-raised);box-shadow:var(--kgdiff-shadow),0 0 0 1px var(--kgdiff-border)}`,filters:`:host{${Z}display:block}:host([hidden]){display:none}`,"view-dock":`:host{${Z}display:inline-block;max-width:100%;container-type:inline-size}:host([hidden]){display:none}`,transport:`:host{${Z}display:block;width:min(600px,100%)}:host([hidden]){display:none}.stack{display:flex;flex-direction:column;align-items:center;gap:8px}.transport{width:100%;min-width:0}`,legend:`:host{${Z}display:inline-block}:host([hidden]){display:none}.legend.float,.mini-legend.float{position:static}.mini-legend{display:flex;flex-wrap:wrap;align-items:center;gap:2px 12px;font-size:11px;line-height:16px;color:var(--kgdiff-text-secondary)}`,zoom:`:host{${Z}display:inline-block}:host([hidden]){display:none}`,minimap:`:host{${Z}display:block;position:relative;width:184px;height:128px}:host([hidden]){display:none}.minimap-host{width:100%;height:100%}`,title:`:host{${Z}display:inline-block;max-width:100%}:host([hidden]){display:none}.hud-title{position:static;max-width:none}`,actions:`:host{${Z}display:inline-block;position:relative}:host([hidden]){display:none}.hud-end{position:relative;top:auto;right:auto}.overlay-scrim{position:fixed;z-index:1000}`},_d=new WeakMap;function vd(e,t){let n=_d.get(e);n||(n=new Map,_d.set(e,n));let r=n.get(t);return r||(r=yd(e,gd[t]),n.set(t,r)),r}function yd(e,t){let n=new((e.defaultView?.CSSStyleSheet)??CSSStyleSheet);return n.replaceSync(t),n}var bd=new WeakMap;function xd(e){let t=bd.get(e);return t||(t=yd(e,hd),bd.set(e,t)),t}var Sd=[[`background`,`canvas.background`],[`grid`,`canvas.grid`],[`panel`,`surface.panel`],[`raised`,`surface.raised`],[`overlay`,`surface.overlay`],[`border`,`surface.border`],[`border-strong`,`surface.borderStrong`],[`control-border`,`surface.controlBorder`],[`shadow`,`surface.shadow`],[`text`,`text.primary`],[`text-secondary`,`text.secondary`],[`text-muted`,`text.muted`],[`accent`,`accent.base`],[`accent-strong`,`accent.strong`],[`accent-soft`,`accent.soft`],[`accent-text`,`accent.text`],[`neutral`,`neutral.node`],[`neutral-stroke`,`neutral.nodeStroke`],[`neutral-edge`,`neutral.edge`],[`neutral-label`,`neutral.label`],[`font`,`font.family`],[`font-mono`,`font.mono`],...md.flatMap(e=>[[e,`family.${e}.base`],[`${e}-strong`,`family.${e}.strong`],[`${e}-soft`,`family.${e}.soft`],[`${e}-text`,`family.${e}.text`]])],Cd=new Set([`shadow`,`font`,`font-mono`]);function wd(e,t){let n=e;for(let e of t.split(`.`))n=n[e];return n}function Td(e,t,n){let[r=``,...i]=t;return{...e,[r]:i.length>0?Td(e[r],i,n):n}}function Ed(e){let t=e.name===`dark`,n=[[`color-scheme`,t?`dark`:`light`]];for(let[t,r]of Sd)n.push([t,wd(e,r)]);return n.push([`fast`,`${e.motion.fast}ms`],[`base`,`${e.motion.base}ms`],[`slow`,`${e.motion.slow}ms`],[`ease`,`cubic-bezier(${e.motion.easing.join(`, `)})`],[`hover`,t?`rgba(255,255,255,0.045)`:`rgba(15,23,42,0.04)`],[`press`,t?`rgba(255,255,255,0.08)`:`rgba(15,23,42,0.07)`],[`input`,t?e.surface.raised:`#F3F5F8`],[`selected`,t?e.surface.raised:`#F5F7FB`],[`scrim`,t?`rgba(5,7,11,0.56)`:`rgba(15,23,42,0.18)`],[`skeleton`,t?`rgba(255,255,255,0.05)`:`rgba(15,23,42,0.05)`],[`skeleton-hi`,t?`rgba(255,255,255,0.09)`:`rgba(15,23,42,0.09)`],[`track`,t?`rgba(255,255,255,0.08)`:`rgba(15,23,42,0.08)`],[`kbd`,t?`rgba(255,255,255,0.06)`:`rgba(15,23,42,0.05)`]),n.map(([e,t])=>`${e===`color-scheme`?e:`--kgdiff-${e}`}: ${t};`).join(` `)}var Dd=new WeakMap;function Od(e,t){let n=Dd.get(t);n||(n=new Map,Dd.set(t,n));let r=n.get(e);return r||(r=yd(t,`:host { ${Ed(e)} }`),n.set(e,r)),r}var kd,Ad=new Set;function jd(e){kd??=typeof document>`u`?null:document.createElement(`canvas`).getContext(`2d`);let t=e;if(kd&&(kd.fillStyle=`#000`,kd.fillStyle=e,t=String(kd.fillStyle),kd.fillStyle=`#fff`,kd.fillStyle=e,String(kd.fillStyle)!==t))return null;try{return Gr(t,t),t}catch{return null}}var Md=new Map;function Nd(e,t){let n=[];for(let[r,i]of Sd){let a=t.getPropertyValue(`--kgdiff-${r}`).trim();if(!a||a===wd(e,i))continue;let o=Cd.has(r)?a:jd(a);o===null?Ad.has(a)||(Ad.add(a),console.warn(`[kgdiff] --kgdiff-${r}: ${a} is not a color the canvas draws.`)):o!==wd(e,i)&&n.push([i,o])}if(n.length===0)return e;let r=`${e.name}/${e.palette}|${n.join(`|`)}`,i=Md.get(r);if(!i){let t=e;for(let[e,r]of n)t=Td(t,e.split(`.`),r);i=t,Md.size>=16&&Md.clear(),Md.set(r,i)}return i}var Pd=new WeakSet;function Fd(e){return Pd.has(e)}var Id=new Set([`next`,`prev`,`first`,`last`,`fly`]);function Ld(e){return typeof window<`u`&&typeof window.matchMedia==`function`?window.matchMedia(e):null}var Rd=class{controller;live=W(`div`,{class:`sr-only`,"aria-live":`polite`,"aria-atomic":`true`});host;actions;#e;#t=[];#n=new Map;#r;#i=!1;#a=null;keymap=null;shortcutsOff=!1;constructor(e,t,n,r,i={}){this.host=e,this.#e=t,this.actions=n,this.#r=i,Pd.add(e);let a=(t,n)=>{e.dispatchEvent(new CustomEvent(t,{detail:n,bubbles:!0,composed:!0})),r?.(t)},o={ready:e=>a(`kgdiff-ready`,{stats:e}),select:(e,t)=>a(`kgdiff-select`,{hunk:e,node:t}),mode:(e,t)=>a(`kgdiff-mode`,{mode:e,scope:t}),review:(e,t,n)=>a(`kgdiff-review`,{hunk:e,reviewed:t,progress:n}),error:e=>a(`kgdiff-error`,{error:e}),announce:e=>this.announce(e),replayEnd:e=>a(`kgdiff-replay-end`,{loop:e})},s={now:()=>typeof performance<`u`?performance.now():Date.now(),requestFrame:ud,cancelFrame:dd,yieldToPaint:pd,storage:Yo(),theme:t=>{this.#o(t);let n=e.ownerDocument.defaultView;return n?Nd(t,n.getComputedStyle(e)):t}};this.controller=i.session?i.session(o,s):new as(o,s),this.controller.subscribe(e=>this.render(e))}connect(){let e=this.controller,t=[c(this.host,Ku,()=>this)],n=Ld(`(prefers-color-scheme: light)`),r=Ld(`(prefers-reduced-motion: reduce)`),i=()=>{e.setSystemDark(!(n?.matches??!1)),e.setReducedMotion(r?.matches??!1)};for(let e of[n,r])e?.addEventListener?.(`change`,i),t.push(()=>e?.removeEventListener?.(`change`,i));i(),e.refreshTheme();let a=t=>e.syncReview(t.key);return window.addEventListener(`storage`,a),t.push(()=>window.removeEventListener(`storage`,a)),()=>{for(let e of t)e()}}attach(e){return this.#t.push(e),()=>{let t=this.#t.indexOf(e);t>=0&&this.#t.splice(t,1)}}target(e,t,n){let r=this.#n.get(e)??[];this.#n.set(e,r);let i={focus:t,available:n??(()=>!0)};return r.push(i),()=>{let e=r.indexOf(i);e>=0&&r.splice(e,1)}}focus(e){let t=this.#n.get(e)??[];for(let e=t.length-1;e>=0;e--){let n=t[e];if(n.available())return n.focus(),!0}return!1}announce(e){let t=this.live;t.textContent=``,setTimeout(()=>{t.textContent=e},30)}render(e){try{for(let t of this.#t)t.update(e);this.#i=!1}catch(e){if(console.error(`[kgdiff] render failed:`,e),this.#i)return;this.#i=!0;let t=this.controller;t.explicit.clear(),t.setThemePreference(`auto`),t.setPalette(`default`),t.fail(e instanceof Error?e:Error(String(e)))}}#o(e){this.#a=e;let t=this.host.ownerDocument,n=Od(e,t);if(this.#e.adoptedStyleSheets.at(-1)!==n){let e=this.#r.sheets?.(t)??[xd(t)];this.#e.adoptedStyleSheets=[...e,n]}}tokens(e){return this.#a||this.controller.theme,Od(this.#a??this.controller.theme,e)}forwardKey(e){this.#r.key?this.#r.key(e):this.handleKey(e)}hover(e){this.#r.hover?.(e)}handleKey(e){let t=e.composedPath()[0]??null;if(ld(t))return;let n=this.controller,r=id(e,n.mode,n.scope,this.keymap);if(!r||this.shortcutsOff&&!(Id.has(r.type)&&t?.closest?.(`[role="listbox"]`)))return;let i=t;if((e.key===`Enter`||e.key===` `)&&i?.closest?.(`button, a, summary, [role="radio"], [role="menuitemradio"]`)||n.status!==`ready`&&![`help`,`theme`,`sidebar`,`escape`].includes(r.type))return;e.preventDefault();let a=this.actions;switch(r.type){case`mode`:n.setMode(r.mode);break;case`scope`:n.toggleScope();break;case`next`:n.next();break;case`prev`:n.prev();break;case`first`:n.first();break;case`last`:n.last();break;case`fly`:n.flyToSelection();break;case`escape`:n.query?(n.setQuery(``),this.focus(`search`)):n.clearSelection();break;case`play-pause`:n.togglePlay();break;case`step`:n.stepReplay(r.direction);break;case`divider`:n.setSplit(n.split+r.delta);break;case`fit`:n.fit();break;case`zoom`:n.zoom(r.direction);break;case`search`:a.focusSearch();break;case`review`:n.toggleReviewed();break;case`sidebar`:a.toggleSidebar();break;case`theme`:{let e=wo.indexOf(n.themePreference);a.setThemePreference(wo[(e+1)%wo.length]);break}case`help`:a.openHelp();break;case`expand`:n.expandNearest()}}},zd=`kgdiff=`;function Bd(e){try{return decodeURIComponent(e)}catch{return}}function Vd(e){let t=e.startsWith(`#`)?e.slice(1):e;if(!t.startsWith(zd))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=Bd(e.slice(t+1));s!==void 0&&s!==``&&(o===`hunk`?n=s:o===`mode`&&s===`changes`?(r=`overlay`,a=!0):o===`mode`?r=To(s)??r:o===`scope`&&(i=Eo(s)??i))}return a&&(i??=`changes`),{...n===void 0?{}:{hunk:n},...r===void 0?{}:{mode:r},...i===void 0?{}:{scope:i}}}function Hd(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}`),`#${zd}${t.join(`;`)}`}var Ud=new Set,Wd=`application/kgdiff+json`;function Gd(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 Kd(e){if(typeof DecompressionStream!=`function`)throw new C(`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 qd(e,t){let n,r=(t??``).trim().toLowerCase();if(r===``||r===`json`||r===`identity`)n=e;else if(r===`gzip-base64`)try{n=await Kd(Gd(e))}catch(e){throw e instanceof C?e:new C(`invalid-input`,`The embedded report is not valid gzip-base64: ${e.message}`)}else throw new C(`invalid-input`,`Unknown payload encoding "${t}".`);let i;try{i=JSON.parse(n)}catch(e){throw new C(`invalid-input`,`The embedded report is not valid JSON: ${e.message}`)}return Jd(i)}function Jd(e){if(typeof e!=`object`||!e)throw new C(`invalid-input`,`A kgdiff report payload must be an object.`);let t=e;if(t.format!==`kgdiff.report`)throw new C(`invalid-input`,`Expected format "kgdiff.report", got ${JSON.stringify(t.format)}.`);if(t.version!==1)throw new C(`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 C(`invalid-input`,"A kgdiff report needs both `diff` and `layout`.");return e}function Yd(e,t){let n=e;return typeof n.getElementById==`function`?n.getElementById(t):e.querySelector(`[id="${t.replace(/["\\]/g,`\\$&`)}"]`)}function Xd(e){for(let t of e.querySelectorAll(`*`))if(Ud.has(t.localName))return t;return null}function Zd(e,t){let n=e.getAttribute(`data-for`);return n?Yd(t,n):Xd(t)}async function Qd(e){let t=[...e.querySelectorAll(`script[type="${Wd}"]`)];await Promise.all(t.map(async t=>{let n=Zd(t,e);try{let e=await qd(t.textContent??``,t.getAttribute(`data-encoding`));n&&(n.payload=e)}catch(e){let t=e instanceof Error?e:new C(`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 $d=[`mode`,`scope`,`theme`,`palette`,`locale`,`sync-hash`,`loop`,`loop-delay`,`pause-on-hover`,`shortcuts`,`keymap`],ef=[`scoped`,`global`,`none`],tf=[`mode`,`scope`,`theme`,`palette`,`locale`,`loop`,`loopDelay`,`pauseOnHover`,`payload`,`shortcuts`,`keymap`],nf=new Set([`ArrowUp`,`ArrowDown`,`ArrowLeft`,`ArrowRight`,`Home`,`End`,`PageUp`,`PageDown`,` `,`Spacebar`]),rf=[];function af(e){if(typeof e==`object`&&e&&!Object.isFrozen(e)){for(let t of Object.values(e))af(t);Object.freeze(e)}return e}var of=class extends HTMLElement{controller;root;shadow;#e=null;#t=!1;#n=[];#r=``;#i=!1;#a=!1;constructor(){super(),this.shadow=this.attachShadow({mode:`open`}),this.root=new Rd(this,this.shadow,this.actions(),e=>{(e===`kgdiff-select`||e===`kgdiff-mode`)&&this.#d()},{session:(e,t)=>this.createSession(e,t),sheets:e=>this.sheets(e),key:e=>this.#l(e),hover:e=>this.pointerOver(e)}),this.controller=this.root.controller,this.controller.locale=Ao(this.getAttribute(`locale`))??Za()}attributeChanged(e,t,n){}upgradedProperties(){return[]}keysEnabled(){return!0}interceptKey(e){return!1}connectedCallback(){if(!this.#i){this.#i=!0;for(let e of[...tf,...this.upgradedProperties()])if(Object.hasOwn(this,e)){let t=this[e];delete this[e],this[e]=t}}this.#n.push(this.root.connect()),this.connected(),rf.push(this);let e=e=>this.#c(e);document.addEventListener(`keydown`,e),this.#n.push(()=>document.removeEventListener(`keydown`,e));let t=()=>this.#u();window.addEventListener(`hashchange`,t),this.#n.push(()=>window.removeEventListener(`hashchange`,t)),this.#u(),this.root.render(ts)}disconnectedCallback(){let e=rf.indexOf(this);e>=0&&rf.splice(e,1);for(let e of this.#n.splice(0))e();this.disconnected(),this.#a=!1,this.#s()}attributeChangedCallback(e,t,n){if(!this.#t)switch(e){case`mode`:case`scope`:case`theme`:case`palette`:case`locale`:this.applyPreference(e,n,!1);break;case`sync-hash`:n!==null&&this.#u();break;case`loop`:case`loop-delay`:this.controller.setLoop(this.loop?this.loopDelay:null),this.#s();break;case`pause-on-hover`:this.#s();break;case`shortcuts`:this.root.shortcutsOff=this.shortcuts===`none`;break;case`keymap`:this.#o(n);break;default:this.attributeChanged(e,n,t)}}applyPreference(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=To(t);r.setMode(e??`overlay`),a=e;break}case`scope`:{let e=Eo(t);r.setScope(e??`all`),a=e===null?null:r.scope;break}case`theme`:{let e=Oo(t);r.setThemePreference(e??`auto`),a=e;break}case`palette`:{let e=ko(t);r.setPalette(e??`default`),a=e;break}case`locale`:{let e=Ao(t);r.setLocale(e??Za()),a=e;break}default:return}a===null?r.explicit.delete(e):r.explicit.add(e),(n||i)&&this.reflect(e,a),i&&this.reflect(`scope`,r.scope)}get mode(){return this.controller.mode}set mode(e){this.applyPreference(`mode`,e,!0)}get scope(){return this.controller.scope}set scope(e){this.applyPreference(`scope`,e,!0)}get theme(){return this.controller.themePreference}set theme(e){this.applyPreference(`theme`,e,!0)}get palette(){return this.controller.palette}set palette(e){this.applyPreference(`palette`,e,!0)}get locale(){return this.controller.locale}set locale(e){this.applyPreference(`locale`,e,!0)}get loop(){return this.hasAttribute(`loop`)}set loop(e){this.toggleAttribute(`loop`,!!e)}get loopDelay(){return No(this.getAttribute(`loop-delay`))??1200}set loopDelay(e){let t=No(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 shortcuts(){let e=this.getAttribute(`shortcuts`);return e!==null&&ef.includes(e)?e:this.hasAttribute(`global-shortcuts`)?`global`:`scoped`}set shortcuts(e){ef.includes(e)?this.setAttribute(`shortcuts`,e):this.removeAttribute(`shortcuts`)}get keymap(){return this.root.keymap}set keymap(e){this.#o(e)}#o(e){let{keymap:t,invalid:n}=cd(e);n.length>0&&console.warn(`[kgdiff] ignoring invalid keymap: ${n.join(` `)}`),this.root.keymap=t}get payload(){return this.#e}set payload(e){if(this.#e=e,e==null)return;let t;try{t=Jd(e)}catch(e){this.controller.fail(e);return}let n=Po(t.view,!0),r=this.controller;n?.theme&&!r.explicit.has(`theme`)&&r.setThemePreference(n.theme),n?.palette&&!r.explicit.has(`palette`)&&r.setPalette(n.palette),n?.locale&&!r.explicit.has(`locale`)&&r.setLocale(n.locale),this.payloadSet(t),this.controller.loadPayload(t).catch(()=>{})}payloadSet(e){}load(e){return this.#e=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 C(`invalid-input`,R(`en`,`error.notLoaded`));return af(structuredClone(e.delta))}reviewState(){return this.controller.reviewState()}setReviewed(e,t){this.controller.setReviewed(e,t)}showError(e){this.controller.fail(e)}refreshTheme(){this.controller.refreshTheme()}reflect(e,t){if(this.getAttribute(e)!==t){this.#t=!0;try{t===null?this.removeAttribute(e):this.setAttribute(e,t)}finally{this.#t=!1}}}baseActions(){return{tr:()=>ro(this.controller.locale),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}}}pointerOver(e){this.#a=e,this.#s()}#s(){this.controller.hold(this.#a&&this.loop&&this.pauseOnHover)}reflectSession(e){let t=this.controller;e.has(`mode`)&&(this.reflect(`mode`,t.mode),this.reflect(`scope`,t.scope)),e.has(`theme`)&&this.reflect(`theme`,t.themePreference===`auto`&&!this.hasAttribute(`theme`)?null:t.themePreference)}#c(e){if(Yu(e))return;let t=e.composedPath().find(Fd);if(t===void 0||t===this){if(t===void 0){if(this.shortcuts!==`global`||nf.has(e.key))return;let t=document.activeElement;if(t&&t!==document.body&&t!==document.documentElement||rf.find(e=>e.shortcuts===`global`)!==this)return}this.#l(e)}}#l(e){e.defaultPrevented||e.isComposing||!this.keysEnabled()||this.interceptKey(e)||this.root.handleKey(e)}#u(){if(!this.hasAttribute(`sync-hash`)||typeof location>`u`||location.hash===this.#r)return;let e=Vd(location.hash);if(this.#r=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})}}#d(){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=Hd({...t===void 0?{}:{hunk:t},mode:e.mode,scope:e.scope});if(n!==location.hash){this.#r=n;try{history.replaceState(history.state,``,n)}catch{location.hash=n}}}};function sf(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 cf(e){return sf(e.kind,e.family)}function lf(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=>lf(e)).join(`, `):JSON.stringify(e)}function uf(e){if(!Array.isArray(e))return null;let t=[];for(let n of e){if(typeof n==`object`&&n)return null;t.push(lf(n))}return t}var df=320;function ff(e){return e.kind===`header`?32:56}var pf=class{head;list;sticky;phases=W(`div`,{class:`sr-only`});#e;#t;#n;#r;#i;#a;#o=[];#s=new Map;#c=!1;#l;constructor(e){this.#l=e;let t=e.controller;this.#e=W(`h2`,{id:`kg-changes-title`}),this.#t=W(`span`,{class:`count-badge`}),this.#r=W(`span`),this.#i=W(`div`),this.#n=W(`div`,{class:`progress`},this.#r,W(`span`,{class:`bar`,"aria-hidden":`true`},this.#i)),this.head=W(`div`,{class:`sb-title`},this.#e,this.#t,this.#n),this.#a=W(`div`,{class:`list-inner`,role:`presentation`}),this.list=W(`div`,{class:`list scroll`,role:`listbox`,tabindex:`0`,"aria-labelledby":`kg-changes-title`,"aria-keyshortcuts":`J K X Enter Home End`},this.#a),this.list.addEventListener(`scroll`,()=>this.#m(),{passive:!0}),this.list.addEventListener(`click`,e=>this.#x(e)),this.list.addEventListener(`dblclick`,e=>{e.target.closest(`.row`)&&t.flyToSelection()}),this.sticky=W(`div`,{class:`sticky`,"aria-hidden":`true`,hidden:!0}),e.target(`list`,()=>this.list.focus({preventScroll:!0}),()=>Pu(this.list))}update(e){let t=this.#l.tr(),n=e.has(`status`)||e.has(`data`)||e.has(`locale`);if(n){q(this.#e,t.t(`sidebar.changes`));let e=this.#l.controller.scene;q(this.#t,t.num(e?.hunks.length??0)),this.#t.hidden=!e}(n||e.has(`filters`))&&this.#f(),(n||e.has(`review`))&&(this.#d(),this.#v()),e.has(`selection`)&&(this.#v(),this.#y()),(n||e.has(`search`))&&this.#u()}#u(){let e=this.#l.controller.query.trim()!==``;this.list.hidden!==e&&(this.list.hidden=e,e?this.sticky.hidden=!0:this.#m())}#d(){let e=this.#l.tr(),t=this.#l.controller.reviewState(),n=t.reviewed.length,r=t.total;this.#n.hidden=r===0;let i=r>0&&n===r;K(this.#n,`data-complete`,String(i)),q(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})`}#f(){let e=this.#l.controller,t=this.#l.tr();G(this.phases,e.list.items.map(e=>e.kind===`header`?W(`span`,{id:`kg-phase-${e.phase}`,text:`${t.t(`phase.${e.phase}`)} (${t.num(e.count)})`}):null));for(let e of this.#s.values())e.remove();this.#s.clear();let n=e.list.items;this.#o=Array(n.length);let r=0;for(let e=0;e<n.length;e++)this.#o[e]=r,r+=ff(n[e]);this.#a.style.height=`${r+8}px`,this.#p(),this.renderWindow()}#p(){let e=this.#l.controller,t=this.#l.tr();if(this.#a.querySelector(`.list-empty, .skeleton`)?.remove(),e.status===`loading`||e.status===`idle`){let t=W(`div`,{class:`skeleton`,"aria-hidden":`true`});if(e.status===`loading`)for(let e=0;e<6;e++)t.appendChild(W(`div`,{class:`skeleton-row shimmer`},W(`span`,{class:`g`}),W(`span`,{class:`b`})));this.#a.appendChild(t);return}if(e.status!==`ready`||e.list.items.length>0)return;let n=e.families.size>0&&e.hunkCount>0;this.#a.appendChild(W(`div`,{class:`list-empty`},J(n?`search`:`check-circle`),W(`span`,{text:t.t(n?`sidebar.filteredEmpty`:`sidebar.noChanges`)}),n?W(`button`,{type:`button`,class:`btn`,text:t.t(`sidebar.clearFilters`),onclick:()=>e.setFamilies([])}):null))}#m(){this.#c||(this.#c=!0,fd(()=>{this.#c=!1,this.renderWindow()}))}#h(e){let t=0,n=this.#o.length;for(;t<n;){let r=t+n>>1;this.#o[r]+56<=e?t=r+1:n=r}return t}renderWindow(){let e=this.#l.controller.list.items,t=this.list.scrollTop,n=this.list.clientHeight||640,r=this.#h(Math.max(0,t-df)),i=t+n+df,a=new Set;for(let t=r;t<e.length&&this.#o[t]<i;t++)a.add(t);for(let[e,t]of this.#s)a.has(e)||(t.remove(),this.#s.delete(e));for(let t of a){if(this.#s.has(t))continue;let n=this.#g(e[t],this.#o[t]);this.#s.set(t,n),this.#a.appendChild(n)}this.#b(t)}#g(e,t){let n=this.#l.tr(),r=this.#l.controller;if(e.kind===`header`)return W(`div`,{class:`group`,role:`presentation`,style:`top: ${t}px`},W(`span`,{text:n.t(`phase.${e.phase}`)}),W(`span`,{class:`n`,text:n.num(e.count)}));let i=r.scene?.hunks[e.hunk],a=r.isReviewed(i.id),o=W(`span`,{class:`rv`,"aria-hidden":`true`,"data-pressed":String(a),title:n.t(a?`review.unmark`:`review.mark`),"data-hunk":i.id},W(`span`,{class:`ring`},J(`check`))),s=r.list.rank.get(e.hunk)??0,c=W(`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`},W(`span`,{class:`glyph-box`,"aria-hidden":`true`,text:cf(i)}),W(`span`,{class:`txt`},W(`span`,{class:`title`,title:i.title,text:i.title}),W(`span`,{class:`sub`,text:i.subtitle})),o);return this.#_(c,i,a),c}#_(e,t,n){let r=this.#l.tr(),i=[t.title];t.subtitle&&i.push(t.subtitle),n&&i.push(r.t(`review.toggle`)),K(e,`aria-label`,i.join(`. `))}#v(){let e=this.#l.controller,t=this.#l.tr();for(let n of this.#s.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);K(n,`aria-selected`,String(r===e.selectedHunk)),K(n,`data-reviewed`,String(a));let o=n.querySelector(`.rv`);K(o,`data-pressed`,String(a)),K(o,`title`,t.t(a?`review.unmark`:`review.mark`)),this.#_(n,i,a)}let n=e.selectedHunk;K(this.list,`aria-activedescendant`,n>=0&&e.list.rank.has(n)?`kg-opt-${n}`:null)}#y(){let e=this.#l.controller,t=e.list.itemOf.get(e.selectedHunk);if(t===void 0)return;let n=this.#o[t],r=this.list.scrollTop,i=this.list.clientHeight||640,a=e.list.items[t-1]?.kind===`header`?this.#o[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.#v()}#b(e){let t=this.#l.controller.list.items,n=-1,r=-1;for(let i=0;i<t.length;i++)if(t[i]?.kind===`header`){if(this.#o[i]<=e)n=i;else{r=i;break}}if(n<0||e<=0){this.sticky.hidden=!0;return}let i=t[n],a=this.#l.tr();this.sticky.hidden=!1;let o=`${a.t(`phase.${i.phase}`)}|${i.count}`;this.sticky.dataset.key!==o&&(this.sticky.dataset.key=o,G(this.sticky,W(`div`,{class:`group`},W(`span`,{text:a.t(`phase.${i.phase}`)}),W(`span`,{class:`n`,text:a.num(i.count)}))));let s=r>=0?Math.min(0,this.#o[r]-e-32):0;this.sticky.style.transform=`translateY(${s}px)`}#x(e){let t=this.#l.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)}},mf=1024;function hf(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=gf(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 _f(a)}function gf(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,mf),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 _f(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 vf(e){return e.map(e=>({op:e.op,text:e.items.join(``)}))}function yf(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&&bf(e,o)?(r+=s.text,i+=s.text):(a(),n.push(s))}}return a(),n}function bf(e,t){let n=e[t+1];return n!==void 0&&n.op!==`equal`}function xf(e,t){return yf(vf(hf(Array.from(e),Array.from(t))))}var Sf=/\s+|[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}]|[\p{L}\p{N}\p{M}_'’-]+|[^\s]/gu;function Cf(e){return e.match(Sf)??[]}function wf(e,t){return yf(vf(hf(Cf(e),Cf(t))),2)}var Tf=.5,Ef=400;function Df(e,t){let n=0;for(let r of hf(e,t))r.op===`equal`&&(n+=r.items.length);return 2*n/(e.length+t.length)}function Of(e,t){let n=[];if(e.length===1&&t.length===1)n.push([1,0,0]);else if(e.length*t.length<=Ef){let r=t.map(e=>Array.from(e));e.forEach((e,t)=>{let i=Array.from(e);r.forEach((e,r)=>{let a=Df(i,e);a>=Tf&&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 kf=12,Af=12,jf=180,Mf=60;function Nf(e,t,...n){return W(`section`,{class:`section`},W(`h3`,null,e,t===null?null:W(`span`,{class:`n`,text:String(t)})),...n)}function Pf(e){let t=W(`dl`,{class:`kv`});for(let[n,r]of e)t.append(W(`dt`,{text:n}),W(`dd`,null,...[r].flat()));return t}function Ff(e,t){let n=[];for(let r of e)r.op===`equal`?n.push(r.text):r.op===`delete`&&t===`before`?n.push(W(`del`,{class:`hl`,text:r.text})):r.op===`insert`&&t===`after`&&n.push(W(`ins`,{class:`hl`,text:r.text}));return n}function Q(e,t){let n=t===`add`?`+`:t===`del`?`−`:``;return W(`span`,{class:`vchip${t===`same`?``:` ${t}`}`},n?W(`span`,{class:`sign`,"aria-hidden":`true`,text:n}):null,e)}function If(e,t,n=[]){return W(`div`,{class:`chips`},t.map(e=>Q(e,`del`)),e.map(e=>Q(e,`add`)),n.map(e=>Q(e,`same`)))}function Lf(e,t,n){return W(`div`,{class:`pair`},W(`span`,{class:`b`},e),W(`span`,{class:`arr`,"aria-hidden":`true`,text:`→`}),W(`span`,{class:`sr-only`,text:n.t(`detail.changedTo`)}),W(`span`,null,t))}function Rf(e,t,n){let r=xf(e,t);return Lf(Ff(r,`before`),Ff(r,`after`),n)}function zf(e,t){return W(`div`,{class:`line ${e}`},W(`span`,{class:`sign`,"aria-hidden":`true`,text:e===`old`?`−`:`+`}),W(`div`,null,t))}function Bf(e,t,n,r=[]){let i=Of(t,e),a=i.pairs.map(([e,t])=>Rf(e,t,n));return(i.added.length>0||i.removed.length>0||r.length>0)&&a.push(If(i.added,i.removed,r)),a}function Vf(e,t=`attrs`){return W(`table`,{class:t},W(`colgroup`,null,W(`col`,{class:`k`}),W(`col`)),W(`tbody`,null,e.map(([e,t])=>W(`tr`,null,W(`td`,{class:`k`,text:e}),W(`td`,null,t)))))}function Hf(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 Uf=class{el;#e;#t=!1;#n=!1;#r=!1;#i=new Set;#a=``;#o;constructor(e){this.#o=e,this.#e=W(`div`,{class:`detail-scroll scroll`,tabindex:`-1`}),this.el=W(`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();K(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){K(this.el,`data-empty`,`true`),Nu(this.#o.root,this.#e,this.#e,W(`div`,{class:`detail-empty`},J(`changes`),W(`div`,null,W(`div`,{text:t.t(`detail.empty`)}),W(`div`,{class:`sub`,text:t.t(`detail.emptyHint`)}))));return}K(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(W(`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)},W(`span`,{class:`ring`},J(`check`)),e.t(`review.toggle`)))}let i=t?n.list.rank.get(t.index):void 0,a=Y(`chevron-up`,`${e.t(`detail.prev`)} (K)`,()=>n.prev(),{class:`icon-btn sm`,"data-focus-key":`prev`}),o=Y(`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),W(`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=[W(`div`,{class:`d-top`},W(`span`,{class:`fam-pill`,"data-family":e.family},W(`span`,{class:`g`,"aria-hidden":`true`,text:cf(e)}),r.t(`kind.${e.kind}`)),this.#c(r,e)),W(`h2`,{class:`d-title`,text:e.title}),e.subtitle?W(`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),Nu(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){Nu(this.#o.root,this.#e,this.#e);return}let o=t.index.edgesOf(a.id),[s,c]=this.#p(a,t,n,!1,!1);Nu(this.#o.root,this.#e,this.#e,W(`div`,{class:`d-top`},W(`span`,{class:`fam-pill`,"data-family":i.family},W(`span`,{class:`g`,"aria-hidden":`true`,text:`·`}),n.t(a.status===`unchanged`?`detail.unchangedNode`:`status.${a.status}`)),this.#c(n,void 0)),W(`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,kf),s=W(`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(W(`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})}},W(`span`,{class:`sdot`,"aria-hidden":`true`}),W(`span`,{class:`lbl`,text:o?.label??e,title:o?.label??e}),W(`span`,{class:`meta`,text:o?i.t(`status.${o.status}`):``})))}return Nf(i.t(`detail.nodes`),e.length,s,e.length>kf?this.#f(i,this.#r,()=>{this.#r=!this.#r,this.#s()}):null)}#f(e,t,n){return W(`button`,{type:`button`,class:`disclosure`,"data-focus-key":`nodes-more`,"aria-expanded":String(t),onclick:n},e.t(t?`detail.showLess`:`detail.showMore`),J(`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`),[W(`div`,{class:`id-text`},Rf(t.from,t.to,n)),t.score<1?W(`div`,{class:`note-line`,text:n.t(`detail.matchScore`,{p:eo(t.score)})}):null]]);break;case`rename`:a.push([n.t(`detail.name`),Rf(t.from,t.to,n)]);break;case`types`:case`aliases`:a.push([n.t(`detail.${t.kind}`),Bf(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`),Bf(t.to.map(r),t.from.map(r),n)]);break;case`deprecate`:a.push([n.t(`detail.status`),W(`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),Bf(i(r.added),i(r.removed),n)])}return a.length>0?Nf(n.t(`detail.changes`),a.length,Vf(a,`attrs changes`)):null}#h(e,t,n){let r=uf(t.before),i=uf(t.after);if(r&&i){let e=new Set(r),t=new Set(i);return Bf(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=lf(t.before),s=lf(t.after);if(t.before===void 0){let e=W(`ins`,{class:`hl`,text:s});return[zf(`new`,this.#_(`${a}|a`,s,n,[e]))]}if(t.after===void 0){let e=W(`del`,{class:`hl`,text:o});return[zf(`old`,this.#_(`${a}|b`,o,n,[e]))]}let c=typeof t.before==`string`&&typeof t.after==`string`?wf(o,s):[{op:`delete`,text:o},{op:`insert`,text:s}],l=Ff(c,`before`),u=Ff(c,`after`);return o.length+s.length<=Mf&&!/\n/.test(o+s)?[Lf(l,u,n)]:[zf(`old`,this.#_(`${a}|b`,o,n,l)),zf(`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`),W(`span`,{class:`id-text`,text:e.afterId??e.beforeId??e.id})]),!i(`types`)&&e.types.length>0&&o.push([t.t(`detail.types`),If([],[],e.types)]),!i(`aliases`)&&a&&a.aliases.length>0&&o.push([t.t(`detail.aliases`),If([],[],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=()=>Vf(u.map(n=>[n,this.#_(`${e.id}|u|${n}`,lf(c[n]),t)]));if(!r){let e=[Nf(t.t(`detail.identity`),null,Pf(o))];return u.length>0&&e.push(Nf(t.t(`detail.attributes`),null,d())),e}return[Nf(t.t(`detail.identity`),null,Pf(o),u.length>0?W(`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),J(`chevron-down`)):null,u.length>0&&this.#t?d():null)]}#_(e,t,n,r){let i=t.length>jf,a=this.#i.has(e),o=W(`div`,{class:`val${i&&!a?` clamped`:``}`},...r??[t]);return i?W(`div`,null,o,W(`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:eo(t)})}`;for(let o of e.facets)switch(o.kind){case`mergedInto`:i.push(W(`div`,{class:`comp-row`},Q(e.label,`del`),W(`span`,{class:`arrow`,"aria-hidden":`true`,text:`→`}),Q(r(o.target),`same`),W(`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(W(`div`,{class:`comp-row`},W(`span`,{class:`note`,text:n.t(`detail.mergedFrom`)}))),o.sources.forEach((t,n)=>{i.push(W(`div`,{class:`comp-row`},Q(r(t),`del`),W(`span`,{class:`arrow`,"aria-hidden":`true`,text:`→`}),Q(e.label,`same`),s[n]?W(`span`,{class:`note`,text:s[n]}):null))});break}case`splitFrom`:i.push(W(`div`,{class:`comp-row`},Q(r(o.source),`same`),W(`span`,{class:`arrow`,"aria-hidden":`true`,text:`→`}),Q(e.label,`add`),W(`span`,{class:`note`,text:a(o.via,o.confidence)})));break;case`splitInto`:i.push(W(`div`,{class:`comp-row`},W(`span`,{class:`note`,text:n.t(`detail.splitInto`)})),W(`div`,{class:`comp-row`},Q(e.label,`same`),W(`span`,{class:`arrow`,"aria-hidden":`true`,text:`→`}),o.targets.map(e=>Q(r(e),`add`))))}return i.length?Nf(n.t(`detail.composition`),null,W(`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(W(`div`,{class:`note-line`,text:n.t(`detail.matchHint`)})):r&&(i.push(W(`div`,{class:`note-line`,text:n.t(`detail.matchScore`,{p:eo(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(W(`div`,{class:`comp-row`,style:`margin-top: 8px`},W(`span`,{class:`note`,text:n.t(`detail.suggestion`)}),Q(a?r(a.id):e.status===`removed`?o.after:o.before,`same`),W(`span`,{class:`note`,text:`${n.t(`detail.matchScore`,{p:eo(o.score)})} · ${n.t(o.reason===`ambiguous`?`detail.suggestion.ambiguous`:`detail.suggestion.below`)}`})),this.#b(o.evidence,n))}return i.length?Nf(n.t(`detail.evidence`),null,...i):null}#b(e,t){return W(`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])=>W(`div`,{class:`bar-row`},W(`span`,{class:`lbl`,text:e}),W(`span`,{class:`track`,role:`meter`,"aria-label":e,"aria-valuemin":`0`,"aria-valuemax":`100`,"aria-valuenow":String(Math.round(t*100))},W(`span`,{class:`fill`,style:`display:block; width: ${Math.round(Math.max(0,Math.min(1,t))*100)}%`})),W(`span`,{class:`v`,text:eo(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,Af),c=W(`div`,{class:`rels`});for(let e of s)c.appendChild(this.#S(e,t,n,r,i));let l=o.length-s.length;return Nf(i.t(`detail.relations`),e.length,c,l>0||this.#n?W(`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),J(`chevron-down`)):null)}#S(e,t,n,r,i){let a=this.#o.controller,o=e=>r.index.node(e)?.label??e,s=e=>W(`span`,{class:`node`,text:o(e)}),c=e=>W(`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=W(`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(W(`span`,{class:`pred`,text:`→ ${e.label} → `}),s(e.target)),l?.end===`target`&&h.push(c(l.from))):m?(h.push(W(`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(W(`span`,{class:`was`,text:` (${i.t(`detail.was`,{x:i.quote(g)})})`})),e.facets.some(e=>e.kind===`attrs`)&&h.push(W(`span`,{class:`was`,text:` · ${i.t(`detail.edgeAttrs`)}`})),e.facets.some(e=>e.kind===`collapsed`)&&h.push(W(`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=Hf(e);return W(`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)}},W(`span`,{class:`sign`,"aria-hidden":`true`,text:_}),W(`span`,{class:`s`},...h))}};function Wf(e){let t=(e=>`var(--kgdiff-${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 Gf=class{el;#e=new Map;#t;#n;constructor(e){this.#n=e;let t=e.controller;this.el=W(`div`,{class:`filters`,role:`group`});for(let e of md){let n=W(`button`,{type:`button`,class:`fchip`,"data-family":e,"aria-pressed":`false`,onclick:()=>t.toggleFamily(e)},Wf(e),W(`span`,{class:`lbl`}),W(`span`,{class:`n`}));this.#e.set(e,n),this.el.appendChild(n)}this.#t=W(`button`,{type:`button`,class:`link-btn`,hidden:!0,onclick:()=>t.setFamilies([])}),this.el.appendChild(this.#t)}update(e){let t=e.has(`status`)||e.has(`data`)||e.has(`locale`);t&&this.#r(),(t||e.has(`filters`))&&this.#i()}#r(){let e=this.#n.tr(),t=this.#n.controller.scene,n=t?so(t):null;K(this.el,`aria-label`,e.t(`sidebar.filters`)),q(this.#t,e.t(`sidebar.clearFilters`)),this.el.hidden=!t||t.hunks.length===0;for(let[t,r]of this.#e){let i=n?n[t]:0;q(r.querySelector(`.lbl`),e.t(`family.${t}`)),q(r.querySelector(`.n`),e.num(i)),r.hidden=i===0,K(r,`title`,e.t(`familyHint.${t}`))}}#i(){let e=this.#n.controller.families;for(let[t,n]of this.#e)K(n,`aria-pressed`,String(e.has(t)));this.#t.hidden=e.size===0}};function Kf(){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(--kgdiff-accent-soft)" stroke="var(--kgdiff-accent)" stroke-width="1.5"/><circle cx="10" cy="10" r="2.4" fill="var(--kgdiff-accent)"/></svg>`,e.content.firstElementChild}var qf=class{el;#e;#t;#n;constructor(e){this.#n=e,this.#e=W(`div`,{class:`brand`},Kf(),W(`span`,{class:`brand-name`,text:`kgdiff`})),this.#t=W(`div`,{class:`versions`}),this.el=W(`div`,{class:`hud-title card`},this.#e,W(`span`,{class:`header-sep`,"aria-hidden":`true`}),this.#t)}update(e){(e.has(`locale`)||e.has(`data`)||e.has(`status`))&&(K(this.#e,`title`,`kgdiff — ${this.#n.tr().t(`brand.tagline`)}`),this.#r())}#r(){let e=this.#n.controller.data;if(!e){G(this.#t),this.el.dataset.titled=`false`;return}this.el.dataset.titled=`true`;let t=this.#n.tr(),{names:n,versions:r}=e,i=e=>e?W(`span`,{class:`tag`,title:e,text:e}):null,a=()=>W(`span`,{class:`arrow`,"aria-hidden":`true`,text:`→`});K(this.#t,`aria-label`,t.t(`header.compare`)),K(this.#t,`role`,`group`),n.before===n.after?G(this.#t,W(`span`,{class:`name`,title:e.title??n.after,text:e.title??n.after}),r.before||r.after?W(`span`,{class:`side`},i(r.before??`—`),a(),i(r.after??`—`)):null):G(this.#t,W(`span`,{class:`side`},W(`span`,{class:`name`,title:n.before,text:n.before}),i(r.before)),a(),W(`span`,{class:`side`},W(`span`,{class:`name`,title:n.after,text:n.after}),i(r.after)))}},Jf=class{el;menuButton;sidebarButton;#e;#t;#n;constructor(e,t=!0){this.#n=e,this.menuButton=Y(`contrast`,``,()=>e.toggleMenu(),{"aria-haspopup":`menu`,"aria-expanded":`false`}),this.#t=Y(`help`,``,()=>e.openHelp()),this.sidebarButton=t?Y(`sidebar`,``,()=>e.toggleSidebar()):null,this.#e=W(`div`,{class:`hud-actions card`,role:`group`},this.menuButton,this.#t,this.sidebarButton),this.el=W(`div`,{class:`hud-end`},this.#e)}attachMenu(e){this.el.appendChild(e)}update(e){if(!(e.has(`locale`)||e.has(`data`)||e.has(`status`)))return;let t=this.#n.tr();K(this.#e,`aria-label`,t.t(`header.actions`)),X(this.menuButton,t.t(`action.settings`)),X(this.#t,`${t.t(`action.help`)} (?)`),this.sidebarButton&&X(this.sidebarButton,`${t.t(`action.sidebar`)} (\\)`)}setMenuState(e){K(this.menuButton,`aria-expanded`,String(e))}setSidebarState(e){this.sidebarButton&&K(this.sidebarButton,`aria-pressed`,String(e))}},Yf=class{el;title;actions;menuButton;sidebarButton;#e;constructor(e){this.#e=e,this.title=new qf(e),this.actions=new Jf(e),this.menuButton=this.actions.menuButton,this.sidebarButton=this.actions.sidebarButton,this.el=W(`header`,{class:`hud`},this.title.el,this.actions.el)}attachMenu(e){this.actions.attachMenu(e)}update(e){this.title.update(e),this.actions.update(e)}setSidebarState(e){this.actions.setSidebarState(e)}setPanels(e,t,n,r){K(this.title.el,`data-panel`,e);let i=this.actions.el;t!==`open`&&Fu(this.#e.root,i,r),K(i,`data-panel`,t),i.inert=t!==`open`,n||Fu(this.#e.root,this.sidebarButton,r),this.sidebarButton.hidden=!n}setMenuState(e){this.actions.setMenuState(e)}},Xf=class{el;#e=null;#t;constructor(e){this.#t=e,this.el=W(`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;K(this.el,`aria-label`,e.t(`action.settings`));let n=t=>()=>e.t(t),r=e=>{let n=_i(t.themeName,e).family;return md.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`)}];K(this.el,`aria-label`,e.t(`action.settings`)),Nu(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 W(`div`,{class:`menu-group`,role:`group`,"aria-label":e},W(`div`,{class:`menu-label`,"aria-hidden":`true`,text:e}),t.map(e=>W(`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?J(e.icon):null,e.swatch?W(`span`,{class:`sw`,"aria-hidden":`true`},e.swatch.map(e=>W(`i`,{style:`background:${e}`}))):null,W(`span`,{text:e.label()}),J(`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()}},Zf=[[[`overlay`,`swipe`,`replay`],[`mode.overlay`,`mode.swipe`,`mode.replay`]],[[`scope`],`mode.changes`],[[`next`],`detail.next`],[[`prev`],`detail.prev`],[[`first`,`last`],`help.homeEnd`],[[`fly`],`help.enter`],[[`escape`],`help.esc`],[[`play-pause`],`help.space`],[[`left`,`right`],`help.arrows`],[[`fit`],`action.fit`],[[`zoom-in`,`zoom-out`],[`action.zoomIn`,`action.zoomOut`]],[[`search`],`sidebar.search`],[[`review`],`review.mark`],[[`sidebar`],`action.sidebar`],[[`theme`],`help.theme`],[[`expand`],`help.expand`],[[`help`],`action.help`]],Qf={ArrowDown:`↓`,ArrowUp:`↑`,ArrowLeft:`←`,ArrowRight:`→`," ":`Space`,Escape:`Esc`,"-":`−`};function $f(e,t){let n=od(e),r=e=>t.has(e)?[]:(n.get(e)??[]).map(e=>Qf[e]??e),i=[];for(let[e,t]of Zf){let n=e.map(r);typeof t!=`string`&&n.some(e=>e.length!==1)?e.forEach((e,r)=>{let a=n[r]??[];a.length>0&&i.push({keys:a,label:t[r]})}):n.flat().length>0&&i.push({keys:n.flat(),label:t})}return i}var ep=class{el;#e=null;#t;#n;constructor(e,t=[]){this.#t=e,this.#n=new Set(t),this.el=W(`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=>W(`span`,{class:`ks`},e.map((e,t)=>[t>0?W(`span`,{"aria-hidden":`true`,text:`/`}):null,W(`kbd`,{text:e})])),n=$f(this.#t.keymap(),this.#n).map(({keys:n,label:r})=>W(`div`,{class:`key-row`},W(`span`,{text:typeof r==`string`?e.t(r):r.map(t=>e.t(t)).join(` / `)}),t(n)));Nu(this.#t.root,this.el,null,W(`div`,{class:`dialog card`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`kg-help-title`},W(`div`,{class:`dialog-head`},W(`h2`,{id:`kg-help-title`,text:e.t(`help.title`)}),Y(`close`,e.t(`help.close`),()=>this.hide(),{"data-focus-key":`close`})),W(`div`,{class:`dialog-body`},W(`div`,{class:`keys`},n))))}},tp=class{box;results;input;#e;#t;#n=0;#r=``;#i;constructor(e){this.#i=e,this.input=W(`input`,{type:`search`,autocomplete:`off`,spellcheck:`false`,role:`combobox`,"aria-autocomplete":`list`,"aria-expanded":`false`,"aria-controls":`kg-results`,enterkeyhint:`go`}),this.#e=W(`kbd`,{"aria-hidden":`true`,text:`/`}),this.#t=W(`button`,{type:`button`,class:`clear`,hidden:!0,onclick:()=>this.#a(``,!0)},J(`close`)),this.input.addEventListener(`input`,()=>this.#a(this.input.value)),this.input.addEventListener(`keydown`,e=>this.#d(e)),this.input.addEventListener(`focus`,()=>this.#s()),this.input.addEventListener(`blur`,()=>this.#s()),this.results=W(`div`,{class:`results list scroll`,id:`kg-results`,role:`listbox`,hidden:!0}),this.box=W(`div`,{class:`search`},J(`search`),this.input,this.#e,this.#t),e.target(`search`,()=>{this.input.focus(),this.input.select()},()=>Pu(this.input))}update(e){let t=e.has(`status`)||e.has(`data`)||e.has(`locale`);if(t){let e=this.#i.tr();this.input.placeholder=e.t(`sidebar.searchPlaceholder`),K(this.input,`aria-label`,e.t(`sidebar.search`)),K(this.#t,`aria-label`,e.t(`sidebar.searchClear`)),K(this.results,`aria-label`,e.t(`sidebar.searchResults`)),this.input.disabled=this.#i.controller.status!==`ready`}(t||e.has(`search`))&&this.#o()}#a(e,t=!1){this.#i.controller.setQuery(e),t&&this.input.focus()}#o(){let e=this.#i.controller.query;this.input.value!==e&&(this.input.value=e),e!==this.#r&&(this.#n=0),this.#r=e;let t=e.trim()!==``;this.results.hidden=!t,K(this.input,`aria-expanded`,String(t)),this.#s(),t?this.#c():G(this.results)}#s(){let e=this.#i.controller.query,t=this.#i.root.activeElement===this.input;this.#e.hidden=e!==``||t,this.#t.hidden=e===``}#c(){let e=this.#i.tr(),t=this.#i.controller,n=t.query.trim(),r=t.hits;if(r.length===0){G(this.results,W(`div`,{class:`list-empty`},J(`search`),W(`span`,{text:e.t(`sidebar.noResults`,{q:n})}))),K(this.input,`aria-activedescendant`,null);return}let i=t.scene,a=r.map((t,r)=>{let a=i?.nodeIndex.get(t.node.id),o=(a===void 0?void 0:i?.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.matched;return W(`button`,{type:`button`,class:`result`,role:`option`,id:`kg-hit-${r}`,tabindex:`-1`,"data-family":o,"aria-selected":String(r===this.#n),onclick:()=>this.#u(r),onpointermove:()=>this.#l(r)},W(`span`,{class:`sdot`,"aria-hidden":`true`}),W(`span`,{class:`txt`},W(`span`,{class:`title`},np(t.node.label,t.field===`label`?n:``)),W(`span`,{class:`sub`},np(s,t.field===`label`?``:n))),W(`span`,{class:`status`,text:e.t(`status.${t.node.status}`)}))});G(this.results,W(`div`,{class:`results-head`,text:e.plural(`sidebar.results`,r.length)}),a),K(this.input,`aria-activedescendant`,`kg-hit-${this.#n}`)}#l(e){if(!(e===this.#n||e<0||e>=this.#i.controller.hits.length)){this.#n=e;for(let t of this.results.querySelectorAll(`.result`))K(t,`aria-selected`,String(t.id===`kg-hit-${e}`));K(this.input,`aria-activedescendant`,`kg-hit-${e}`),this.results.querySelector(`#kg-hit-${e}`)?.scrollIntoView?.({block:`nearest`})}}#u(e){let t=this.#i.controller.hits[e];t&&(this.#a(``),this.#i.controller.revealNode(t.node.id),this.#i.focus(`list`))}#d(e){switch(e.key){case`ArrowDown`:e.preventDefault(),this.#l(Math.min(this.#i.controller.hits.length-1,this.#n+1));break;case`ArrowUp`:e.preventDefault(),this.#l(Math.max(0,this.#n-1));break;case`Enter`:e.preventDefault(),this.#u(this.#n);break;case`Escape`:e.preventDefault(),e.stopPropagation(),this.#i.controller.query?this.#a(``):this.#i.focus(`list`);break;default:return}}};function np(e,t){if(!t)return[e];let n=e.toLowerCase().indexOf(t.toLowerCase());return n<0?[e]:[e.slice(0,n),W(`mark`,{text:e.slice(n,n+t.length)}),e.slice(n+t.length)]}var rp=720,ip=320,ap=16,op=64,sp=.05,cp=96,lp=64,up=class{el;#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p;#m;#h;#g;#_=null;#v=360;#y=null;#b={width:360,share:null};constructor(e,t,n,r,i,a){this.#h=e,this.#g=t,this.#m=a,this.#t=W(`div`,{class:`sheet-handle`,role:`separator`,"aria-orientation":`horizontal`,tabindex:`0`}),this.#j();let o=e=>()=>{let n=this.#_?.[e]===`open`;t.setPanel(e,n?`collapsed`:`open`)};this.#s=Y(`chevron-up`,``,o(`list`),{class:`icon-btn sm list-toggle`,"aria-expanded":`true`,"aria-controls":`kg-list-wrap`}),this.#l=Y(`search`,``,()=>t.setPanel(`search`,`open`),{class:`icon-btn sm`,hidden:!0}),this.#d=Y(`filter`,``,()=>t.setPanel(`filters`,`open`),{class:`icon-btn sm filters-btn`,hidden:!0}),this.#a=n.head,this.#i=W(`div`,{class:`sb-row`},n.head,this.#l,this.#d,this.#s),this.#c=W(`div`,{class:`search-wrap`},r.box),this.#u=W(`div`,{class:`filters-wrap`,id:`kg-filters`},i.el),this.#o=W(`div`,{class:`list-wrap`,id:`kg-list-wrap`},n.sticky,n.list,r.results,n.phases),this.#r=W(`div`,{class:`sb-split`,role:`separator`,"aria-orientation":`horizontal`,"aria-valuemin":`0`,"aria-valuemax":`100`,tabindex:`0`}),this.#p=W(`button`,{type:`button`,class:`detail-bar`,"aria-expanded":`true`,"aria-controls":`kg-detail`,onclick:o(`detail`)},W(`span`,{class:`lbl`}),J(`chevron-down`)),K(a.el,`id`,`kg-detail`),this.#f=W(`div`,{class:`detail-wrap`},this.#p,a.el),this.#e=W(`div`,{class:`sidebar-inner`},this.#t,W(`div`,{class:`sb-head`},this.#i,this.#c,this.#u),this.#o,this.#r,this.#f),this.#n=W(`div`,{class:`sb-resize`,role:`separator`,"aria-orientation":`vertical`,"aria-valuemin":`280`,tabindex:`0`}),this.el=W(`aside`,{class:`sidebar`,"data-open":`true`},this.#n,this.#e),this.#E(),this.#k()}get width(){return this.#v}get detailShare(){return this.#y}setPanels(e){this.#_=e;let t=Hu.filter(t=>e[t]!==`hidden`),n=t.some(t=>e[t]===`open`),r=this.#h.root;n||Fu(r,this.el,()=>this.#g.focusOutside());let i=(e,t,n)=>{t!==`open`&&Fu(r,e,n),e.hidden=t!==`open`,e.inert=t!==`open`};i(this.#c,e.search,()=>this.#l),i(this.#u,e.filters,()=>this.#d),this.#l.hidden=e.search!==`collapsed`,this.#d.hidden=e.filters!==`collapsed`,this.#a.hidden=e.list===`hidden`,this.#s.hidden=e.list===`hidden`,K(this.#s,`aria-expanded`,String(e.list===`open`)),K(this.#f,`data-state`,e.detail),this.#f.hidden=e.detail===`hidden`,e.detail!==`open`&&Fu(r,this.#m.el,()=>this.#p),this.#m.el.inert=e.detail!==`open`,K(this.#p,`aria-expanded`,String(e.detail===`open`)),this.#x(this.#h.controller.query.trim()!==``),this.el.hidden=t.length===0,K(this.el,`data-open`,String(n)),this.el.inert=!n,this.#S()}setSizes(e,t,n=!1){n&&(this.el.classList.add(`dragging`),fd(()=>this.el.classList.remove(`dragging`))),this.#v=Math.max(280,Math.min(rp,Math.round(e))),this.#y=t===null?null:Math.max(0,Math.min(1,t)),n&&(this.#b={width:this.#v,share:this.#y}),this.el.style.setProperty(`--sidebar-w`,`${this.#v}px`),this.#y===null?(this.el.removeAttribute(`data-split`),this.el.style.removeProperty(`--detail-share`)):(K(this.el,`data-split`,`true`),this.el.style.setProperty(`--detail-share`,String(this.#y))),this.#T()}update(e){(e.has(`status`)||e.has(`data`)||e.has(`locale`))&&this.#S(),(e.has(`search`)||e.has(`status`))&&this.#x(this.#h.controller.query.trim()!==``),(e.has(`filters`)||e.has(`status`))&&K(this.#d,`data-active`,String(this.#h.controller.families.size>0))}#x(e){let t=(this.#_?.list??`open`)===`open`||e;t||Fu(this.#h.root,this.#o,()=>this.#s),this.#o.hidden=!t,this.#o.inert=!t;let n=(this.#_?.detail??`open`)===`open`;this.#r.hidden=!(t&&n),K(this.el,`data-list`,t?`open`:`folded`)}#S(){let e=this.#h.tr();K(this.el,`aria-label`,e.t(`sidebar.label`)),K(this.#t,`aria-label`,e.t(`sidebar.sheet`)),K(this.#n,`aria-label`,e.t(`sidebar.resize`)),K(this.#r,`aria-label`,e.t(`sidebar.split`));let t=this.#_?.list!==`collapsed`;X(this.#s,e.t(t?`sidebar.hideList`:`sidebar.showList`)),X(this.#l,`${e.t(`sidebar.search`)} (/)`),X(this.#d,e.t(`sidebar.filters`));let n=this.#p.querySelector(`.lbl`);n&&(n.textContent=e.t(`detail.label`)),K(this.#p,`title`,e.t(this.#_?.detail===`collapsed`?`detail.show`:`detail.hide`))}#C(){let{width:e,share:t}=this.#b;(e!==this.#v||t!==this.#y)&&(this.#b={width:this.#v,share:this.#y},this.#g.resized(this.#v,this.#y))}#w(){let e=this.el.parentElement?.clientWidth??0;return e>0?Math.max(280,Math.min(rp,e-ip)):rp}#T(){let e=this.#w();K(this.#n,`aria-valuemax`,String(e));let t=Math.min(this.#v,e);K(this.#n,`aria-valuenow`,String(t)),K(this.#n,`aria-valuetext`,`${t} px`);let n=Math.round(100*(1-(this.#y??this.#D())));K(this.#r,`aria-valuenow`,String(n)),K(this.#r,`aria-valuetext`,this.#h.tr().t(`sidebar.splitValue`,{p:`${n}%`}))}#E(){let e=null,t=(e,t)=>{let n=Math.max(280,Math.min(this.#w(),e));this.setSizes(n,this.#y),t&&this.#C()};this.#n.addEventListener(`pointerdown`,t=>{t.preventDefault(),e={x:t.clientX,w:this.el.getBoundingClientRect().width,id:t.pointerId},this.#n.setPointerCapture?.(t.pointerId),this.el.classList.add(`dragging`)}),this.#n.addEventListener(`pointermove`,n=>{e&&n.pointerId===e.id&&t(e.w+(e.x-n.clientX),!1)});let n=t=>{e&&t.pointerId===e.id&&(e=null,this.el.classList.remove(`dragging`),this.#C())};this.#n.addEventListener(`pointerup`,n),this.#n.addEventListener(`pointercancel`,n),this.#n.addEventListener(`dblclick`,()=>t(360,!0)),this.#n.addEventListener(`keydown`,e=>{let n=e.shiftKey?op:ap,r=Math.min(this.#v,this.#w()),i={ArrowLeft:r+n,ArrowRight:r-n,PageUp:r+op,PageDown:r-op,Home:280,End:this.#w()}[e.key];i!==void 0&&(e.preventDefault(),e.stopPropagation(),t(i,!0))})}#D(){let e=this.#e.clientHeight;return e>0?this.#f.getBoundingClientRect().height/e:0}#O(e){let t=this.#e.clientHeight;if(t<=0)return Math.max(.1,Math.min(.9,e));let n=this.#i.parentElement?.getBoundingClientRect().height??0,r=Math.max(lp,t-n-cp)/t;return Math.max(lp/t,Math.min(r,e))}#k(){let e=null,t=(e,t)=>{this.setSizes(this.#v,this.#O(e)),t&&this.#C()};this.#r.addEventListener(`pointerdown`,t=>{t.preventDefault(),e={y:t.clientY,share:this.#y??this.#D(),id:t.pointerId},this.#r.setPointerCapture?.(t.pointerId),this.el.classList.add(`dragging`)}),this.#r.addEventListener(`pointermove`,n=>{if(!e||n.pointerId!==e.id)return;let r=this.#e.clientHeight;r>0&&t(e.share+(e.y-n.clientY)/r,!1)});let n=t=>{e&&t.pointerId===e.id&&(e=null,this.el.classList.remove(`dragging`),this.#C())};this.#r.addEventListener(`pointerup`,n),this.#r.addEventListener(`pointercancel`,n),this.#r.addEventListener(`dblclick`,()=>{this.setSizes(this.#v,null),this.#C()}),this.#r.addEventListener(`keydown`,e=>{let n=this.#y??this.#D(),r={ArrowUp:n+sp,ArrowDown:n-sp,PageUp:n+2*sp,PageDown:n-2*sp,Home:1,End:0}[e.key];r!==void 0&&(e.preventDefault(),e.stopPropagation(),t(r,!0))})}#A(e,t){let n=e=>Math.round(100*e/Math.max(1,t));K(this.#t,`aria-valuemin`,String(n(120))),K(this.#t,`aria-valuemax`,String(n(t-96))),K(this.#t,`aria-valuenow`,String(n(e))),K(this.#t,`aria-valuetext`,this.#h.tr().t(`sidebar.sheetValue`,{p:`${n(e)}%`}))}syncSheet(){let e=this.el.parentElement?.clientHeight??0;e>0&&this.#A(this.el.getBoundingClientRect().height,e)}layout(e){e?this.syncSheet():this.#T()}#j(){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.#A(r,n)};this.#t.addEventListener(`pointerdown`,t=>{e={y:t.clientY,h:this.el.getBoundingClientRect().height,id:t.pointerId},this.#t.setPointerCapture?.(t.pointerId),this.el.classList.add(`dragging`)}),this.#t.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.#t.addEventListener(`pointerup`,r),this.#t.addEventListener(`pointercancel`,r),this.#t.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))})}},dp=[{mode:`overlay`,icon:`overlay`,key:`1`},{mode:`swipe`,icon:`swipe`,key:`2`},{mode:`replay`,icon:`replay`,key:`3`}],fp=class{el;#e;#t;#n=new Map;#r;#i;#a;#o=[];#s;#c;constructor(e){this.#c=e;let t=e.controller;this.#t=W(`span`,{class:`thumb`,"aria-hidden":`true`}),this.#e=W(`div`,{class:`segmented`,role:`radiogroup`},this.#t);for(let t of dp){let n=W(`button`,{type:`button`,class:`seg`,role:`radio`,"data-mode":t.mode,onclick:()=>e.setMode(t.mode)},J(t.icon),W(`span`,{class:`lbl`}));this.#n.set(t.mode,n),this.#e.appendChild(n)}this.#e.addEventListener(`keydown`,e=>this.#f(e)),this.#r=W(`button`,{type:`button`,class:`scope-btn`,"aria-pressed":`false`,"aria-keyshortcuts":`4`,onclick:()=>e.toggleScope()},J(`changes`),W(`span`,{class:`lbl`})),this.#a=W(`span`,{class:`opts`,role:`radiogroup`});for(let e=0;e<=2;e++){let n=W(`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=W(`button`,{type:`button`,class:`expand`,onclick:()=>t.expandNearest()},J(`plus`),W(`span`,{class:`n`})),this.#i=W(`div`,{class:`context`,hidden:!0},W(`span`,{class:`label`}),this.#a,this.#s),this.el=W(`div`,{class:`dock-bar card`,role:`group`},this.#e,W(`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();K(this.el,`aria-label`,e.t(`dock.label`)),K(this.#e,`aria-label`,e.t(`mode.label`));for(let t of dp){let n=this.#n.get(t.mode),r=e.t(`mode.${t.mode}`);q(n.querySelector(`.lbl`),r),K(n,`title`,`${r} (${t.key})`),K(n,`aria-label`,r)}q(this.#r.querySelector(`.lbl`),e.t(`mode.changes`)),K(this.#r,`aria-label`,e.t(`mode.changes`)),q(this.#i.querySelector(`.label`),e.t(`focus.context`)),K(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;K(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(K(this.#r,`aria-pressed`,String(n)),K(this.#r,`aria-disabled`,r?`true`:null),K(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)=>{K(n,`aria-checked`,String(r===e.hops)),n.tabIndex=r===e.hops?0:-1,K(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,q(this.#s.querySelector(`.n`),t.num(i.count)),X(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=dp[(dp.findIndex(e=>e.mode===this.#c.controller.mode)+(e.key===`ArrowRight`?1:dp.length-1))%dp.length];t&&(this.#c.setMode(t.mode),this.#n.get(t.mode)?.focus())}},pp=class{card;mini;#e;#t;#n=!1;#r;constructor(e,t=()=>void 0){this.#r=e,this.#e=W(`button`,{type:`button`,class:`legend-head`,"aria-expanded":`false`,onclick:()=>{this.setOpen(!this.#n),t(this.#n)}},W(`span`,{class:`lbl`}),J(`chevron-down`)),this.#t=W(`div`,{class:`legend-body`,id:`kg-legend`}),K(this.#e,`aria-controls`,`kg-legend`),this.card=W(`div`,{class:`legend card float bottom-left`,"data-open":`false`},this.#e,this.#t),this.mini=W(`div`,{class:`mini-legend float bottom-left`,role:`list`})}get open(){return this.#n}setOpen(e){this.#n=e,K(this.card,`data-open`,String(e)),K(this.#e,`aria-expanded`,String(e))}update(e){if(!(e.has(`status`)||e.has(`data`)||e.has(`locale`)))return;let t=this.#r.tr();this.#i(t),this.#a(t)}#i(e){q(this.#e.querySelector(`.lbl`),e.t(`legend.title`)),K(this.#e,`aria-label`,e.t(`legend.toggle`));let t=[...md,`neutral`];G(this.#t,t.map(t=>W(`div`,{class:`legend-row`,"data-family":t,title:e.t(`familyHint.${t}`)},Wf(t),W(`span`,{class:`name`,text:e.t(`family.${t}`)}))))}#a(e){let t=this.#r.controller.scene,n=new Set(t?.hunks.map(e=>e.family));t?.nodes.some(e=>e.status===`unchanged`)&&n.add(`neutral`),K(this.mini,`aria-label`,e.t(`legend.title`)),G(this.mini,[...md,`neutral`].filter(e=>n.has(e)).map(t=>W(`span`,{class:`mini-item`,role:`listitem`,"data-family":t,title:e.t(`familyHint.${t}`)},W(`span`,{class:`dot`,"aria-hidden":`true`}),e.t(`family.${t}`))))}},mp=1e3,hp=class{el;finished;#e;#t;#n;#r;#i;#a;#o;#s;#c;#l;#u=null;#d;constructor(e){this.#d=e;let t=e.controller;this.#t=Y(`skip-back`,``,()=>t.stepReplay(-1),{class:`icon-btn`}),this.#e=Y(`play`,``,()=>t.togglePlay(),{class:`icon-btn play`}),this.#n=Y(`skip-forward`,``,()=>t.stepReplay(1),{class:`icon-btn`}),this.#i=W(`div`,{class:`fill`}),this.#a=W(`div`,{class:`knob`}),this.#o=document.createElementNS(`http://www.w3.org/2000/svg`,`svg`),this.#o.setAttribute(`class`,`ticks`),this.#o.setAttribute(`viewBox`,`0 0 ${mp} 14`),this.#o.setAttribute(`preserveAspectRatio`,`none`),this.#o.setAttribute(`aria-hidden`,`true`),this.#s=W(`div`,{class:`scrub-tip card`,hidden:!0}),this.#r=W(`div`,{class:`scrubber`,role:`slider`,tabindex:`0`,"aria-valuemin":`0`},W(`div`,{class:`track`},this.#i),this.#o,this.#a,this.#s),this.#h(),this.#c=W(`span`,{class:`pos`,"aria-hidden":`true`}),this.#l=W(`button`,{type:`button`,class:`speed`,onclick:()=>t.cycleSpeed()}),this.el=W(`div`,{class:`transport card`,role:`toolbar`},this.#t,this.#e,this.#n,this.#r,this.#c,this.#l),this.finished=W(`div`,{class:`finished card`,hidden:!0})}update(e){let t=this.#d.tr(),n=e.has(`status`)||e.has(`data`)||e.has(`locale`);n&&this.#f(t),(n||e.has(`theme`))&&this.#m(),(n||e.has(`mode`))&&(this.el.hidden=this.#d.controller.mode!==`replay`),(n||e.has(`mode`)||e.has(`replay`))&&this.#p(t)}#f(e){X(this.#t,`${e.t(`detail.prev`)} (←)`),X(this.#n,`${e.t(`detail.next`)} (→)`),K(this.el,`aria-label`,e.t(`replay.label`)),K(this.#r,`aria-label`,e.t(`replay.scrubber`))}#p(e){let t=this.#d.controller,n=t.clock;if(t.mode!==`replay`||!n||!t.scene){this.finished.hidden=!0;return}let r=n.progress;this.#i.style.transform=`scaleX(${r})`,this.#a.style.left=`${r*100}%`;let i=n.position(),a=n.total;q(this.#c,e.t(`replay.position`,{i,n:a})),K(this.#r,`aria-valuemax`,String(Math.round(n.duration))),K(this.#r,`aria-valuenow`,String(Math.round(n.t))),K(this.#r,`aria-valuetext`,e.t(`replay.position`,{i,n:a}));let o=n.playing;this.#e.dataset.state!==String(o)&&(this.#e.dataset.state=String(o),G(this.#e,J(o?`pause`:`play`))),X(this.#e,`${e.t(o?`replay.pause`:`replay.play`)} (Space)`),q(this.#l,`${n.speed}×`),X(this.#l,e.t(`replay.speed`,{s:`${n.speed}×`})),this.#t.disabled=n.t<=0,this.#n.disabled=n.t>=n.duration;let s=n.finished;this.finished.hidden=!s,s&&this.finished.childElementCount===0?G(this.finished,J(`check-circle`),W(`span`,{text:e.t(`replay.finished`)}),W(`button`,{type:`button`,class:`btn`,onclick:()=>t.restart()},J(`restart`),e.t(`replay.restart`))):!s&&this.finished.childElementCount>0&&Nu(this.#d.root,this.finished,this.#e)}#m(){let e=this.#d.controller,t=e.clock,n=e.scene;for(;this.#o.firstChild;)this.#o.removeChild(this.#o.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*mp).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(--kgdiff-${e})`),n.setAttribute(`stroke-width`,`2`),n.setAttribute(`stroke-linecap`,`round`),n.setAttribute(`vector-effect`,`non-scaling-stroke`),this.#o.appendChild(n)}}#h(){let e=e=>{let t=this.#d.controller.clock,n=this.#r.getBoundingClientRect();return!t||n.width<=0?0:Math.max(0,Math.min(1,(e-n.left)/n.width))*t.duration};this.#r.addEventListener(`pointerdown`,t=>{this.#u=t.pointerId,this.#r.setPointerCapture?.(t.pointerId),this.#d.controller.pause(),this.#d.controller.seek(e(t.clientX))}),this.#r.addEventListener(`pointermove`,t=>{this.#u===t.pointerId&&this.#d.controller.seek(e(t.clientX)),this.#g(t.clientX,e(t.clientX))});let t=e=>{this.#u===e.pointerId&&(this.#u=null)};this.#r.addEventListener(`pointerup`,t),this.#r.addEventListener(`pointercancel`,t),this.#r.addEventListener(`pointerleave`,()=>{this.#s.hidden=!0}),this.#r.addEventListener(`keydown`,e=>{let t=this.#d.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()})}#g(e,t){let n=this.#d.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.#s.hidden=!0;return}let c=this.#r.getBoundingClientRect();this.#s.hidden=!1,this.#s.style.left=`${e-c.left}px`,this.#s.dataset.hunk!==s.id&&(this.#s.dataset.hunk=s.id,G(this.#s,W(`span`,{class:`glyph-box`,"data-family":s.family,text:cf(s)}),W(`span`,{text:s.title})))}},gp=class{el;#e;#t;#n;#r;constructor(e,t){this.#r=e,this.#e=Y(`plus`,``,()=>t()?.zoom(1)),this.#t=Y(`minus`,``,()=>t()?.zoom(-1)),this.#n=Y(`fit`,``,()=>void t()?.fit()),this.el=W(`div`,{class:`zoom-bar card`,role:`toolbar`,"aria-orientation":`vertical`},this.#e,this.#t,this.#n)}update(e){if(!(e.has(`status`)||e.has(`data`)||e.has(`locale`)))return;let t=this.#r.tr();K(this.el,`aria-label`,t.t(`zoom.label`)),X(this.#e,`${t.t(`action.zoomIn`)} (+)`),X(this.#t,`${t.t(`action.zoomOut`)} (−)`),X(this.#n,`${t.t(`action.fit`)} (F)`)}},_p={"kgdiff-view-dock":`dock`,"kgdiff-transport":`transport`,"kgdiff-legend":`legend`,"kgdiff-zoom":`zoom`,"kgdiff-minimap":`minimap`,"kgdiff-title":`title`,"kgdiff-actions":`actions`},vp=class{el;canvasHost;minimapHost;#e=null;#t=null;get view(){return this.#e}set view(e){e!==this.#e&&(this.#t?.(),this.#t=null,this.#e=e,this.#n())}#n(){let e=this.#e,t=e!==null&&!this.#x.has(`minimap`);t&&!this.#t?this.#t=e.addMinimap(this.minimapHost):!t&&this.#t&&(this.#t(),this.#t=null)}#r;#i;#a;transport;#o;#s;#c;#l;dock;#u;legend;zoom;#d;tooltip;#f;#p=null;#m=null;#h=``;#g=[];#_=new Set;#v=null;#y=W(`div`,{class:`version-chip chip card`,hidden:!0});#b=null;#x=new Set;onReplaced=null;#S=!1;#C=null;#w;constructor(e,t=!1){this.#w=e;let n=e.controller;this.canvasHost=W(`div`,{class:`stage`}),this.#i=W(`div`,{class:`sr-only`}),this.#a=W(`div`,{class:`caption card`,"aria-hidden":`true`,"data-empty":`true`}),this.transport=new hp(e),this.#c=W(`div`,{class:`side-chip before chip card`}),this.#l=W(`div`,{class:`side-chip after chip card`}),this.#s=W(`div`,{class:`divider`,role:`slider`,tabindex:`0`,"aria-valuemin":`0`,"aria-valuemax":`100`,"aria-orientation":`horizontal`},W(`span`,{class:`handle`,"aria-hidden":`true`},J(`chevron-left`),J(`chevron-right`))),this.#M(),this.#o=W(`div`,{class:`swipe`,hidden:!0},this.#c,this.#l,this.#s),this.dock=new fp(e),this.#u=W(`div`,{class:`dock`},this.transport.finished,this.#a,this.transport.el,this.dock.el),this.legend=new pp(e,t=>e.setPanel?.(`legend`,t?`open`:`collapsed`)),this.zoom=new gp(e,()=>this.view),this.minimapHost=W(`div`,{class:`minimap-host`}),this.#d=W(`div`,{class:`map-cluster float bottom-right`},this.zoom.el,this.minimapHost),this.tooltip=W(`div`,{class:`tooltip card`,role:`tooltip`,"data-open":`false`}),this.#f=W(`div`,{class:`state`,hidden:!0});let r=this.legend.card,i=this.#d,a=[];if(t){let e=e=>{let t=document.createElement(`slot`);return t.name=e,t.addEventListener(`slotchange`,()=>this.slotted()),this.#g.push(t),t};a.push(W(`div`,{class:`corner top-start`},this.#y,e(`top-start`)),W(`div`,{class:`corner top-end`},e(`top-end`))),r=W(`div`,{class:`corner bottom-start`},e(`bottom-start`),this.legend.card),i=W(`div`,{class:`corner bottom-end`},e(`bottom-end`),this.#d),this.#u.prepend(e(`bottom-center`))}this.#r=W(`div`,{class:`chrome`},...a,this.#o,r,this.legend.mini,i,this.#u,this.tooltip),this.el=W(`main`,{class:`stage-wrap`},this.canvasHost,this.#i,this.#r,this.#f),this.el.addEventListener(`pointermove`,e=>{let t=this.el.getBoundingClientRect();this.#p={x:e.clientX-t.left,y:e.clientY-t.top},this.tooltip.dataset.open===`true`&&this.#P()}),this.el.addEventListener(`pointerleave`,()=>{this.#p=null,n.clearHover()})}chromeLayout(){let e=this.el.getBoundingClientRect(),t=[],n=[this.legend.card,this.legend.mini,this.zoom.el,this.dock.el,this.transport.el,this.transport.finished,this.#c,this.#l];this.#a.dataset.empty!==`true`&&n.push(this.#a),n.push(this.#y),this.minimapHost.dataset.hidden!==`true`&&n.push(this.minimapHost);for(let e of this.el.querySelectorAll(`.hud .card`))n.push(e);for(let e of this.#g)n.push(...e.assignedElements({flatten:!0}));n.push(...this.#_);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}}registerObstacle(e){return this.#_.add(e),()=>{this.#_.delete(e)}}layout(){this.dock.layout()}slotted(){let e=new Set;for(let t of this.#g)for(let n of t.assignedElements({flatten:!0})){let t=_p[n.localName];t&&e.add(t)}if(!(e.size===this.#x.size&&[...e].every(e=>this.#x.has(e)))){this.#x.clear();for(let t of e)this.#x.add(t);this.#T(),this.#n(),this.onReplaced?.()}this.view?.layoutChanged()}replaces(e){return this.#x.has(e)}setPanels(e){this.#b=e,this.#T()}#T(){let e=this.#b,t=t=>this.#x.has(t)?`hidden`:e?.[t]??(t===`legend`?`collapsed`:`open`);if(!e&&this.#x.size===0&&this.#C===null)return;let n=()=>this.canvasHost.querySelector(`canvas`),r=(e,...t)=>{for(let r of t)e!==`open`&&Fu(this.#w.root,r,n),K(r,`data-panel`,e),r.inert=e!==`open`};r(t(`dock`),this.dock.el),r(t(`transport`),this.transport.el,this.transport.finished),r(t(`zoom`),this.zoom.el),r(t(`minimap`),this.minimapHost);let i=t(`legend`);i===`hidden`&&Fu(this.#w.root,this.legend.card,n),K(this.legend.card,`data-panel`,i),K(this.legend.mini,`data-panel`,i),this.legend.card.inert=i===`hidden`,i!==`hidden`&&i!==this.#C&&this.legend.setOpen(i===`open`),this.#C=i}setVersion(e){this.#v=e,e?this.el.dataset.version=e:delete this.el.dataset.version,this.#k(),this.#E(this.#w.tr())}#E(e){let t=this.#v,n=t?e.t(t===`before`?`detail.before`:`detail.after`):``;this.#y.hidden=t===null,t&&q(this.#y,n),this.#S&&K(this.el,`aria-label`,t?`${e.t(`stage.label`)} · ${n}`:e.t(`stage.label`))}asRegion(){this.#S=!0,this.el.setAttribute(`role`,`region`),this.#E(this.#w.tr())}setChrome(e,t){this.el.dataset.legend=e,this.el.dataset.selectable=String(t)}update(e){let t=this.#w.controller,n=this.#w.tr(),r=e.has(`status`)||e.has(`data`)||e.has(`locale`);r&&(this.#E(n),this.#D(n),this.#F(n),this.#O(n)),this.legend.update(e),this.zoom.update(e),this.transport.update(e),this.dock.update(e),(r||e.has(`mode`))&&this.#k(),(r||e.has(`overview`))&&K(this.minimapHost,`data-hidden`,String(this.view?.overview??!0)),(r||e.has(`mode`)||e.has(`replay`))&&this.#A(n),(r||e.has(`mode`)||e.has(`swipe`))&&this.#j(),(r||e.has(`hover`)||e.has(`selection`)||e.has(`focus`))&&this.#N(n),K(this.#r,`data-ready`,String(t.status===`ready`))}#D(e){q(this.#c,e.t(`detail.before`)),q(this.#l,e.t(`detail.after`)),K(this.#s,`aria-label`,e.t(`swipe.divider`)),K(this.minimapHost,`aria-label`,e.t(`minimap.label`)),K(this.minimapHost,`title`,e.t(`minimap.label`))}#O(e){let t=this.#w.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.#w.controller.hunkCount)});n&&K(n,`aria-label`,r),q(this.#i,``)}#k(){let e=this.#w.controller.mode,t=this.#v!==null;this.#a.hidden=e!==`replay`||t,this.#o.hidden=e!==`swipe`||t}#A(e){let t=this.#w.controller,n=t.clock,r=t.scene;if(t.mode!==`replay`||!n||!r)return;let i=n.position(),a=n.total,o=``,s=[];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){o=`c${t.index}`;let n=r.hunks[i.hunks[0]??-1];s=[W(`span`,{class:`glyph-box`,"data-family":n?.family??`neutral`,text:n?cf(n):`·`}),W(`span`,{class:`text`,text:e.t(`phase.${i.phase}`)}),W(`span`,{class:`count`,text:e.num(i.hunks.length)})]}}else{let e=n.activeHunk();e<0&&i>0&&(e=n.timeline.windows[i-1]?.hunk??-1);let t=e>=0?r.hunks[e]:void 0;t&&(o=`h${e}|${i}`,s=[W(`span`,{class:`glyph-box`,"data-family":t.family,text:cf(t)}),W(`span`,{class:`text`,text:t.title,title:t.title}),W(`span`,{class:`count`,text:`${i} / ${a}`})])}}this.#a.dataset.key!==o&&(this.#a.dataset.key=o,K(this.#a,`data-empty`,String(o===``)),G(this.#a,...s)),this.#v===null&&(this.#a.hidden=n.finished)}#j(){let e=this.#w.controller;if(e.mode!==`swipe`)return;let t=e.split*100;this.#s.style.left=`${t}%`,K(this.#s,`aria-valuenow`,String(Math.round(t))),K(this.#s,`aria-valuetext`,`${Math.round(t)}%`)}#M(){let e=e=>{let t=this.el.getBoundingClientRect();return t.width>0?(e-t.left)/t.width:.5};this.#s.addEventListener(`pointerdown`,e=>{e.preventDefault(),this.#m=e.pointerId,this.#s.setPointerCapture?.(e.pointerId),this.#s.classList.add(`dragging`),this.#s.focus({preventScroll:!0})}),this.#s.addEventListener(`pointermove`,t=>{this.#m===t.pointerId&&this.#w.controller.setSplit(e(t.clientX))});let t=e=>{this.#m===e.pointerId&&(this.#m=null,this.#s.classList.remove(`dragging`))};this.#s.addEventListener(`pointerup`,t),this.#s.addEventListener(`pointercancel`,t),this.#s.addEventListener(`dblclick`,()=>this.#w.controller.setSplit(.5)),this.#s.addEventListener(`keydown`,e=>{let t=this.#w.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))})}#N(e){let t=this.#w.controller,n=t.scene,r=t.diff;if(!n||!r||this.#m!==null){K(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(W(`div`,{class:`t-label`,text:o.label}),o.labelBefore?W(`div`,{class:`t-old`,text:o.labelBefore}):null,W(`div`,{class:`t-id`,text:l&&l.kind===`rekey`?`${l.from} → ${l.to}`:o.id}),W(`div`,{class:`t-status`,"data-family":a},W(`span`,{class:`dot`}),o.status===`unchanged`?e.t(`status.unchanged`):`${e.t(`status.${o.status}`)} · ${e.t(`family.${a}`)}`),W(`div`,{class:`t-sum`,text:c?c.title:e.plural(`tooltip.relations`,u)}),W(`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(W(`div`,{class:`t-label`,text:`${o} —${r.label}→ ${s}`}),r.labelBefore?W(`div`,{class:`t-old`,text:r.labelBefore}):null,W(`div`,{class:`t-status`,"data-family":a},W(`span`,{class:`dot`}),e.t(`status.${r.status}`)),c?W(`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(W(`div`,{class:`t-label`,text:n.label}),W(`div`,{class:`t-hint`,text:e.t(t.canExpand(t.hoverGroup)?`focus.expand`:`focus.expandUnavailable`)}))}i.length===0?K(this.tooltip,`data-open`,`false`):(G(this.tooltip,...i),K(this.tooltip,`data-open`,`true`),this.#P())}#P(){let e=this.#p;if(!e){K(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)`}#F(e){let t=this.#w.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.#h){if(this.#h=r,this.#f.classList.remove(`blocking`),t.status===`ready`&&!n?.identical)this.#f.hidden=!0,G(this.#f);else if(this.#f.hidden=!1,t.status===`loading`){this.#f.classList.add(`blocking`);let n=t.step?t.steps.indexOf(t.step):-1;G(this.#f,W(`div`,{class:`skeleton-grid`,"aria-hidden":`true`}),W(`div`,{class:`state-card card`,role:`status`,"aria-live":`polite`},W(`h2`,{text:e.t(`state.loading`)}),W(`ol`,{class:`steps`},t.steps.map((t,r)=>W(`li`,{"data-state":r<n?`done`:r===n?`active`:`pending`},W(`span`,{class:`mark`,"aria-hidden":`true`},r<n?J(`check`):null),W(`span`,{text:`${e.t(`step.${t}`)}${r===n?`…`:``}`}))))))}else if(t.status===`error`){this.#f.classList.add(`blocking`);let n=t.error,r=n instanceof C?n.code:n?.name,i=[r?`[${r}]`:``,n?.message??``,n?.stack??``].filter(Boolean).join(`
|
|
5
|
+
`);G(this.#f,W(`div`,{class:`state-card card error`,role:`alert`},W(`div`,{class:`state-icon`},J(`alert`)),W(`h2`,{text:e.t(`state.error.title`)}),W(`p`,{text:n?.message??``}),W(`details`,null,W(`summary`,{text:e.t(`state.error.details`)}),W(`pre`,{text:i}))))}else t.status===`ready`&&n?.identical?G(this.#f,W(`div`,{class:`state-card card ok`,role:`status`},W(`div`,{class:`state-icon`},J(`check-circle`)),W(`h2`,{text:e.t(`state.identical.title`)}),W(`p`,{text:e.t(`state.identical.body`,{nodes:e.plural(`count.nodes`,n.after.nodes),edges:e.plural(`count.edges`,n.after.edges)})}))):(this.#f.classList.add(`blocking`),G(this.#f,W(`div`,{class:`state-card`},W(`div`,{class:`state-icon`},J(`overlay`)),W(`h2`,{text:e.t(`state.empty.title`)}),W(`p`,{text:e.t(`state.empty.body`)}))))}}},yp=1100,bp=[...$d,`sidebar`,`header`,`chrome`,`legend`,`panels`,`persist`,`persist-key`];function xp(e){e.length>0&&console.warn(`[kgdiff] ignoring invalid panels: ${e.join(` `)}`)}var Sp=class extends of{static get observedAttributes(){return bp}#e=null;#t=!1;#n=[];#r={};#i={};#a={sidebar:null,header:null,chrome:null};#o={};#s={panels:{}};#c={};#l=fo;#u=null;#d=!1;#f=Yo();constructor(){super(),this.root.attach({update:e=>this.#k(e)})}connected(){this.#e||this.#D();let e=this.#e;if(!e)return;this.#d||=(this.#b(),!0),this.controller.attach(e.stage.canvasHost,null);let t=this.#w();if(t){t.tabIndex=this.chrome===`none`?-1:0;let e=()=>{this.chrome!==`none`&&t.focus({preventScroll:!0})};t.addEventListener(`pointerdown`,e),this.#n.push(()=>t.removeEventListener(`pointerdown`,e))}this.#N(),this.controller.setChrome(()=>e.stage.chromeLayout()),document.fonts?.ready?.then(()=>this.#e?.stage.layout()).catch(()=>void 0)}disconnected(){for(let e of this.#n.splice(0))e();this.controller.detach()}attributeChanged(e,t,n){switch(e){case`sidebar`:this.#g(e,t,t!==n);break;case`header`:this.#g(e,t);break;case`chrome`:this.#g(e,t),this.#E();break;case`legend`:this.#E();break;case`panels`:{let{panels:e,invalid:n}=ho(t??``);xp(n),this.#h(e);break}case`persist`:case`persist-key`:this.#d&&this.persist===`local`&&(this.#s=this.#y()),this.#p(`host`)}}upgradedProperties(){return[`chrome`,`legend`,`panels`,`persist`,`persistKey`]}sheets(e){return[xd(e)]}createSession(e,t){return new Au(e,t)}keysEnabled(){return this.#e!==null&&this.chrome!==`none`}interceptKey(e){let t=this.#e;return!t||!(t.help.open||t.menu.open)?!1:(e.key===`Escape`&&(e.preventDefault(),t.help.hide(),this.#j(!1)),!0)}payloadSet(e){this.#c=Po(e.view,!0)?.panels??{},this.#p(`host`)}load(e){return this.#c={},this.#p(`host`),super.load(e)}get chrome(){return jo(this.getAttribute(`chrome`))??`full`}set chrome(e){let t=jo(e)===`none`?`none`:null;this.reflect(`chrome`,t),this.#g(`chrome`,t),this.#E()}get legend(){return Mo(this.getAttribute(`legend`))??`auto`}set legend(e){let t=Mo(e);this.reflect(`legend`,t===`auto`?null:t),this.#E()}get panels(){return{...this.#i}}set panels(e){let{panels:t,invalid:n}=go(e);xp(n),this.reflect(`panels`,_o(t)||null),this.#h(t)}get persist(){return this.getAttribute(`persist`)===`none`?`none`:`local`}set persist(e){e===`none`?this.setAttribute(`persist`,`none`):this.removeAttribute(`persist`)}get persistKey(){return this.getAttribute(`persist-key`)||`kgdiff:viewer`}set persistKey(e){!e||e===`kgdiff:viewer`?this.removeAttribute(`persist-key`):this.setAttribute(`persist-key`,String(e))}get layout(){let e=this.#e?.sidebar;return{panels:{...this.#l},sidebarWidth:e?.width??360,detailShare:e?.detailShare??null}}#p(e){let t=this.persist===`local`?this.#s.panels:{},n=Wu([this.#r,this.#i,this.#o,t,this.#c]);Gu(n,this.#l)||(this.#l=n,this.#C(),this.#d&&this.#m(e))}#m(e){this.dispatchEvent(new CustomEvent(`kgdiff-layout`,{detail:{...this.layout,source:e},bubbles:!0,composed:!0}))}#h(e){this.#_(this.#i,e),this.#i=e,this.#p(`host`)}#g(e,t,n=!1){this.#a[e]=t;let{sidebar:r,header:i,chrome:a}=this.#a,o=Uu(r,i,a),s=this.#_(this.#o,o);if(n)for(let e of Hu)delete this.#r[e];(n||s.some(e=>Hu.includes(e)))&&(this.#u=null),this.#o=o,this.#p(`host`)}#_(e,t){let n=lo.filter(n=>e[n]!==t[n]);for(let e of n)delete this.#r[e];return n}#v(e){Object.assign(this.#r,e),this.#x({panels:{...this.#s.panels,...e}}),this.#p(`user`)}#y(){let e=Bu(this.#f,this.persistKey),t=this.controller;return e.theme&&!this.hasAttribute(`theme`)&&!t.explicit.has(`theme`)&&(t.setThemePreference(e.theme),t.explicit.add(`theme`)),e.palette&&!this.hasAttribute(`palette`)&&!t.explicit.has(`palette`)&&(t.setPalette(e.palette),t.explicit.add(`palette`)),e.locale&&!this.hasAttribute(`locale`)&&!t.explicit.has(`locale`)&&(t.setLocale(e.locale),t.explicit.add(`locale`)),this.#e?.sidebar.setSizes(e.sidebarWidth??360,e.detailShare??null,!0),e}#b(){this.persist===`local`&&(this.#s=this.#y(),this.#p(`host`))}#x(e){if(this.persist!==`local`)return;let t=Bu(this.#f,this.persistKey),n={...t,...e,panels:{...t.panels,...e.panels??{}}};this.#s={...this.#s,...e,panels:n.panels},Vu(this.#f,n,this.persistKey)}#S(e,t){this.#x({sidebarWidth:e,detailShare:t}),this.#m(`user`)}#C(){let e=this.#e;if(!e)return;let t=this.#l;e.sidebar.setPanels(t),e.stage.setPanels(t);let n=Hu.some(e=>t[e]!==`hidden`),r=e.stage.replaces(`title`)?`hidden`:t.title,i=e.stage.replaces(`actions`)?`hidden`:t.actions;e.header.setPanels(r,i,n,()=>this.#w()),e.header.setSidebarState(this.#T);let a=[r===`open`?`title`:``,i===`open`?`actions`:``];e.stage.el.dataset.hud=a.filter(Boolean).join(` `)}#w(){return this.#e?.stage.canvasHost.querySelector(`canvas`)??null}get#T(){return Hu.some(e=>this.#l[e]===`open`)}#E(){let e=this.chrome===`none`,t=this.controller;t.autoFit=e,t.selectOnClick=!e,t.setLabelsInside(e);let n=this.#e;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=this.#w();i&&(i.tabIndex=e?-1:0),e&&(n.help.hide(),this.#j(!1))}actions(){return{...this.baseActions(),setThemePreference:e=>{this.theme=e,this.#x({theme:this.theme})},setPalette:e=>{this.palette=e,this.#x({palette:this.palette})},setLocale:e=>{this.locale=e,this.#x({locale:this.locale})},toggleSidebar:e=>this.#A(e),sidebarOpen:()=>this.#T,hasSidebar:()=>Hu.some(e=>this.#l[e]!==`hidden`),toggleMenu:e=>this.#j(e),openHelp:()=>this.#e?.help.show(),focusSearch:()=>this.#M(),setPanel:(e,t)=>this.#v({[e]:t})}}#D(){let e=W(`div`,{class:`root`});this.shadow.append(e);let t=Zu(e,e=>new Yf(e)),n=Zu(e,e=>new pf(e)),r=Zu(e,e=>new tp(e)),i=Zu(e,e=>new Gf(e)),a=Zu(e,e=>new Uf(e)),o=Zu(e,e=>new vp(e,!0));o.view=this.controller.view,o.onReplaced=()=>this.#C(),this.#O(o);let s=Xu(this.root,this.shadow),c=new Xf(s),l=new ep(s),u=new up(s,{setPanel:(e,t)=>this.#v({[e]:t}),resized:(e,t)=>this.#S(e,t),focusOutside:()=>Pu(t.sidebarButton)?t.sidebarButton:this.#w()},n,r,i,a);t.attachMenu(c.el),o.el.appendChild(t.el),e.append(W(`div`,{class:`body`},o.el,u.el),l.el,this.root.live),o.slotted(),this.#e={root:e,header:t,stage:o,list:n,sidebar:u,menu:c,help:l},e.addEventListener(`pointerdown`,e=>{if(!c.open)return;let n=e.composedPath();!n.includes(c.el)&&!n.includes(t.menuButton)&&this.#j(!1)});let d=e=>t=>{t.pointerType!==`touch`&&this.pointerOver(e)};o.el.addEventListener(`pointerenter`,d(!0)),o.el.addEventListener(`pointerleave`,d(!1)),u.setSizes(360,null,!0),this.#C(),this.#E()}#O(e){let t=this.controller.view,n={stage:this,root:this.root,view:t,registerObstacle:t=>e.registerObstacle(t),watchView:e=>(e(t),()=>void 0)};c(this,Iu,()=>n)}#k(e){let t=this.#e,n=this.controller;this.reflectSession(e),t&&((e.has(`theme`)||e.has(`status`))&&(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.sidebar.update(e),(e.has(`mode`)||e.has(`status`))&&(t.root.dataset.mode=n.mode,t.root.dataset.scope=n.scope))}#A(e){let t=this.#l,n=Hu.filter(e=>t[e]!==`hidden`);if(n.length===0)return;let r=e??!this.#T;if(this.reflect(`sidebar`,r?`open`:`closed`),r===this.#T)return;let i={};if(r){let e=this.#u?.filter(e=>n.includes(e))??[];for(let t of e.length>0?e:n)i[t]=`open`;this.#u=null}else{this.#u=n.filter(e=>t[e]===`open`);for(let e of n)i[e]=`collapsed`}this.#v(i)}#j(e){let t=this.#e;if(!t)return;let n=e??!t.menu.open;n?t.menu.show(t.header.menuButton):t.menu.hide(!1),t.header.setMenuState(n)}#M(){this.root.focus(`search`)||this.#l.search!==`hidden`&&(this.#T||this.#A(!0),this.#l.search===`collapsed`&&this.#v({search:`open`}),this.root.focus(`search`))}#N(){if(typeof ResizeObserver!=`function`)return;let e=new ResizeObserver(()=>{let e=this.#e;if(!e)return;let t=this.clientWidth,n=t>0&&t<760;e.root.dataset.narrow=String(t>0&&t<yp),n!==this.#t&&(this.#t=n,e.root.dataset.compact=String(n)),e.stage.layout(),e.list.renderWindow(),e.sidebar.layout(n),this.controller.layoutChanged()});e.observe(this),this.#e&&e.observe(this.#e.stage.el),this.#n.push(()=>e.disconnect())}};function Cp(e,t){for(let n=e;n;){if(n===t)return!0;n=n.parentNode??n.host??null}return!1}function wp(e,t){return e.getRootNode().getElementById?.(t)??e.ownerDocument.getElementById(t)}function Tp(e,t,n,r){let i=!0,a=e=>{i&&(i=!1,r(e))};if(!n)return s(e,t,a),()=>{i=!1};let o=wp(e,n);if(o)return s(e,t,a,o),()=>{i=!1};let c=r=>{let i=r.composedPath()[0];r.context?.key===t.key&&i instanceof Element&&i.id===n&&(document.removeEventListener(`context-provider`,c),s(e,t,a,i))};return document.addEventListener(`context-provider`,c),()=>{i=!1,document.removeEventListener(`context-provider`,c)}}function $(e,t){typeof customElements<`u`&&customElements.get(e)===void 0&&customElements.define(e,t)}function Ep(e,t,n,r,i,a){let o=!Cp(e,r.host),s=()=>{let i=e.ownerDocument;t.adoptedStyleSheets=[xd(i),vd(i,n),...o?[r.tokens(i)]:[]]},c=()=>{for(let e of t.children)e.setAttribute(`lang`,r.controller.locale)},l={...Xu(r,t),target:(e,t,n)=>{let i=r.target(e,t,n);return a(i),i}};s();let u=i(l);if(a(r.attach({update:e=>{o&&e.has(`theme`)&&s(),(e.has(`locale`)||e.has(`status`))&&c(),u.update(e)}})),o){let t=e=>Ju(r,e);e.addEventListener(`keydown`,t),a(()=>e.removeEventListener(`keydown`,t))}c();try{u.update(ts)}catch(e){console.error(`[kgdiff] render failed:`,e)}}var Dp=class extends HTMLElement{static get observedAttributes(){return[`for`]}shadow;#e=null;#t=[];constructor(){super(),this.shadow=this.attachShadow({mode:`open`})}get context(){return this.#e}upgradedProperties(){return[`htmlFor`]}get htmlFor(){return this.getAttribute(`for`)??``}set htmlFor(e){let t=String(e);t===``?this.removeAttribute(`for`):this.setAttribute(`for`,t)}get rootElement(){return this.#e?.host??null}connectedCallback(){for(let e of this.upgradedProperties()){if(!Object.hasOwn(this,e))continue;let t=this[e];delete this[e],this[e]=t}this.#n()}disconnectedCallback(){this.#i()}attributeChangedCallback(e,t,n){e===`for`&&t!==n&&this.isConnected&&(this.#i(),this.#n())}#n(){let e=Tp(this,Ku,this.getAttribute(`for`),e=>this.#r(e));this.#t.push(e)}#r(e){this.#e=e;let t=e=>{this.#t.push(e)};Ep(this,this.shadow,this.name,e,n=>this.build(n,e,t),t)}#i(){this.#e=null;for(let e of this.#t.splice(0))e();this.shadow.replaceChildren()}};$(`kgdiff-root`,class extends of{static get observedAttributes(){return $d}#e=!1;constructor(){super(),this.root.attach({update:e=>{this.reflectSession(e),(e.has(`locale`)||e.has(`status`))&&this.root.live.setAttribute(`lang`,this.controller.locale)}})}sheets(e){return[vd(e,`root`)]}createSession(e,t){return new as(e,t)}actions(){return{...this.baseActions(),toggleSidebar:()=>void 0,sidebarOpen:()=>!1,toggleMenu:()=>void 0,openHelp:()=>{this.root.focus(`help`)},focusSearch:()=>{this.root.focus(`search`)}}}connected(){this.#e||(this.#e=!0,this.shadow.append(document.createElement(`slot`),this.root.live))}disconnected(){}});var Op=[`dock`,`transport`,`legend`,`zoom`,`minimap`],kp=[`before`,`after`];function Ap(e){return e==null||e===``?null:kp.includes(e)?e:(console.warn(`[kgdiff] <kgdiff-stage> ignoring version ${JSON.stringify(e)} (before, after)`),null)}function jp(e){let{panels:t,invalid:n}=go(e),r={};for(let[e,i]of Object.entries(t))Op.includes(e)?r[e]=i:n.push(`${e}:${i}`);return n.length>0&&console.warn(`[kgdiff] <kgdiff-stage> ignoring invalid panels: ${n.join(` `)}`),r}$(`kgdiff-stage`,class extends Dp{static get observedAttributes(){return[`for`,`panels`,`version`]}name=`stage`;#e=null;#t={};#n={};#r=!1;#i=null;#a=null;#o=new Set;#s=new Map;get panels(){return{...this.#t}}set panels(e){let t=jp(e);this.#r=!0;try{let e=_o(t);e?this.setAttribute(`panels`,e):this.removeAttribute(`panels`)}finally{this.#r=!1}this.#u(t)}get version(){return this.#i}set version(e){let t=Ap(e);this.#r=!0;try{t?this.setAttribute(`version`,t):this.removeAttribute(`version`)}finally{this.#r=!1}this.#c(t)}attributeChangedCallback(e,t,n){this.#r||(e===`panels`?this.#u(jp(n??``)):e===`version`?this.#c(Ap(n)):super.attributeChangedCallback(e,t,n))}upgradedProperties(){return[...super.upgradedProperties(),`panels`,`version`]}get view(){return this.#a}#c(e){e!==this.#i&&(this.#i=e,this.#a&&(this.#a.version=e),this.#e?.setVersion(e))}#l(e){this.#a=e;for(let t of this.#o)t(e)}#u(e){for(let t of Op)e[t]!==this.#t[t]&&delete this.#n[t];this.#t=e,this.#d()}#d(){let e={...fo,...this.#t,...this.#n};this.#e?.setPanels(e)}registerObstacle(e){return this.#s.has(e)||this.#s.set(e,this.#e?.registerObstacle(e)??(()=>void 0)),()=>{this.#s.get(e)?.(),this.#s.delete(e)}}build(e,t,n){n(c(this,Iu,()=>{let e=this;return{stage:e,get root(){return e.context},registerObstacle:t=>e.registerObstacle(t),get view(){return e.#a},watchView:t=>(e.#o.add(t),t(e.#a),()=>{e.#o.delete(t)})}}));let r=new vp({...e,setPanel:(e,t)=>{Op.includes(e)&&(this.#n[e]=t)}},!0);this.#e=r,this.#d();for(let e of this.#s.keys())this.#s.set(e,r.registerObstacle(e));n(()=>{this.#e=null}),r.setChrome(`full`,!0),r.asRegion(),this.shadow.append(r.el),r.slotted();let i=new Du(t.controller);i.version=this.#i,r.view=i,r.setVersion(this.#i),n(t.controller.addView(i)),i.attach(r.canvasHost,null),i.setChrome(()=>r.chromeLayout()),this.#l(i),n(()=>{this.#l(null),i.setChrome(null),i.detach()});let a=r.canvasHost.querySelector(`canvas`);if(a){a.tabIndex=0;let e=()=>a.focus({preventScroll:!0});a.addEventListener(`pointerdown`,e),n(()=>a.removeEventListener(`pointerdown`,e))}let o=e=>n=>{n.pointerType!==`touch`&&t.hover(e)};if(r.el.addEventListener(`pointerenter`,o(!0)),r.el.addEventListener(`pointerleave`,o(!1)),n(()=>t.hover(!1)),typeof ResizeObserver==`function`){let e=new ResizeObserver(()=>{r.layout(),i.layoutChanged()});e.observe(r.el),n(()=>e.disconnect())}return document.fonts?.ready?.then(()=>this.#e?.layout()).catch(()=>void 0),r}}),$(`kgdiff-change-list`,class extends Dp{name=`change-list`;build(e,t,n){let r=new pf(e),i=W(`div`,{class:`list-wrap`},r.sticky,r.list,r.phases);if(this.shadow.append(W(`section`,{class:`change-list`,"aria-labelledby":`kg-changes-title`},W(`div`,{class:`sb-head`},r.head),i)),typeof ResizeObserver==`function`){let e=new ResizeObserver(()=>r.renderWindow());e.observe(i),n(()=>e.disconnect())}return r}}),$(`kgdiff-change-detail`,class extends Dp{name=`change-detail`;build(e){let t=new Uf(e);return this.shadow.append(t.el),t}}),$(`kgdiff-search`,class extends Dp{name=`search`;build(e){let t=new tp(e);return this.shadow.append(t.box,t.results),t}}),$(`kgdiff-filters`,class extends Dp{name=`filters`;build(e){let t=new Gf(e);return this.shadow.append(t.el),t}}),$(`kgdiff-view-dock`,class extends Dp{name=`view-dock`;build(e,t,n){let r=new fp(e);if(this.shadow.append(r.el),typeof ResizeObserver==`function`){let e=new ResizeObserver(()=>r.layout());e.observe(this),n(()=>e.disconnect())}return r}}),$(`kgdiff-transport`,class extends Dp{name=`transport`;build(e){let t=new hp(e);return this.shadow.append(W(`div`,{class:`stack`},t.finished,t.el)),t}});var Mp=[`full`,`mini`];$(`kgdiff-legend`,class extends Dp{static get observedAttributes(){return[`for`,`variant`,`open`]}name=`legend`;#e=null;#t=!1;get variant(){let e=this.getAttribute(`variant`);return e!==null&&Mp.includes(e)?e:`full`}set variant(e){Mp.includes(e)&&e!==`full`?this.setAttribute(`variant`,e):this.removeAttribute(`variant`)}get open(){return this.hasAttribute(`open`)}set open(e){this.toggleAttribute(`open`,!!e)}attributeChangedCallback(e,t,n){e===`for`?super.attributeChangedCallback(e,t,n):e===`open`&&!this.#t?this.#e?.setOpen(this.open):e===`variant`&&this.#n()}upgradedProperties(){return[...super.upgradedProperties(),`variant`,`open`]}build(e){let t=new pp(e,e=>{this.#t=!0;try{this.toggleAttribute(`open`,e)}finally{this.#t=!1}});return this.#e=t,t.setOpen(this.open),this.#n(),{update:e=>{this.#e===t&&t.update(e)}}}#n(){let e=this.#e;if(!e||!this.isConnected)return;let t=this.variant===`mini`?e.mini:e.card;this.shadow.firstElementChild!==t&&this.shadow.replaceChildren(t)}disconnectedCallback(){super.disconnectedCallback(),this.#e=null}});var Np=class extends HTMLElement{static get observedAttributes(){return[`stage`]}shadow;#e=null;#t=[];#n=[];constructor(){super(),this.shadow=this.attachShadow({mode:`open`})}get stage(){return this.getAttribute(`stage`)??``}set stage(e){let t=String(e);t===``?this.removeAttribute(`stage`):this.setAttribute(`stage`,t)}get stageElement(){return this.#e?.stage??null}get rootElement(){return this.#e?.root?.host??null}connectedCallback(){if(Object.hasOwn(this,`stage`)){let e=this.stage;delete this.stage,this.stage=String(e)}this.#r()}disconnectedCallback(){this.#a()}attributeChangedCallback(e,t,n){e===`stage`&&t!==n&&this.isConnected&&(this.#a(),this.#r())}#r(){let e=Tp(this,Iu,this.getAttribute(`stage`),e=>{let t=e;this.#e=t,this.#t.push(t.watchView(e=>this.#i(e)))});this.#t.push(e)}#i(e){for(let e of this.#n.splice(0))e();this.shadow.replaceChildren();let t=this.#e?.root;if(!e||!t)return;let n=e=>{this.#n.push(e)};Ep(this,this.shadow,this.name,t,t=>this.build(t,e,n),n)}#a(){this.#e=null;for(let e of this.#n.splice(0))e();for(let e of this.#t.splice(0))e();this.shadow.replaceChildren()}};$(`kgdiff-zoom`,class extends Np{name=`zoom`;build(e,t){let n=new gp(e,()=>t);return this.shadow.append(n.el),n}}),$(`kgdiff-minimap`,class extends Np{name=`minimap`;#e=typeof this.attachInternals==`function`?this.attachInternals():null;#t=!1;get overview(){return this.#t}#n(e){if(e===this.#t)return;this.#t=e;let t=this.#e?.states;t&&(e?t.add(`overview`):t.delete(`overview`))}build(e,t,n){let r=W(`div`,{class:`minimap-host`});return this.shadow.append(r),n(t.addMinimap(r)),n(()=>this.#n(!1)),{update:n=>{if(n.has(`status`)||n.has(`data`)||n.has(`locale`)){let t=e.tr().t(`minimap.label`);K(r,`aria-label`,t),K(r,`title`,t)}this.#n(t.overview)}}}}),$(`kgdiff-title`,class extends Dp{name=`title`;build(e){let t=new qf(e);return this.shadow.append(t.el),t}}),$(`kgdiff-actions`,class extends Dp{name=`actions`;build(e,t,n){let r=null,i=null,a=null,o=e=>{if(!r||!a)return;let t=e??!r.open;t?r.show(a.menuButton):r.hide(!1),a.setMenuState(t)},s={...e,toggleMenu:o,openHelp:()=>i?.show()},c=e.hasSidebar;r=new Xf(s),i=new ep(s,c?[]:[`sidebar`]),a=new Jf(s,c!==void 0),a.attachMenu(r.el);let l=()=>{let t=a?.sidebarButton;t&&c&&(t.hidden=!c(),a?.setSidebarState(e.sidebarOpen()))};c&&(l(),t.host.addEventListener(`kgdiff-layout`,l),n(()=>t.host.removeEventListener(`kgdiff-layout`,l))),this.shadow.append(a.el,i.el);let u=a,d=i,f=r;e.target(`help`,()=>d.show(),()=>Pu(u.el)),f.el.addEventListener(`keydown`,()=>queueMicrotask(()=>u.setMenuState(f.open)));let p=e=>{if(!f.open)return;let t=e.composedPath();!t.includes(f.el)&&!t.includes(u.menuButton)&&o(!1)};return document.addEventListener(`pointerdown`,p),n(()=>document.removeEventListener(`pointerdown`,p)),{update:e=>{u.update(e),f.open&&(e.has(`locale`)||e.has(`theme`))&&f.render(),d.open&&e.has(`locale`)&&d.render()}}}});var Pp=`application/kgdiff+json`,Fp=!1;function Ip(e=`kgdiff-viewer`){if(typeof customElements>`u`)return;let t=e.toLowerCase();if(customElements.get(t)===void 0){let e=Fp?class extends Sp{}:Sp;customElements.define(t,e),Fp=!0}Ud.add(t)}function Lp(e){let t=e??(typeof document<`u`?document:void 0);return t?Qd(t):Promise.resolve()}Ip();function Rp(){Lp().catch(e=>console.error(`[kgdiff]`,e))}return typeof document<`u`&&(document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,Rp,{once:!0}):Rp()),e.COMPUTE_GLOBAL=Ba,e.PAYLOAD_SCRIPT_TYPE=Pp,e.defineViewer=Ip,e.hydrateEmbeddedPayloads=Lp,e})({});
|