From 05bf33de906e21b8254f52eb7afcf2cce08a74b9 Mon Sep 17 00:00:00 2001 From: saberzero1 Date: Sat, 4 Apr 2026 20:10:37 +0200 Subject: [PATCH] fix: handle WebGL context loss on navigation and strip base path for non-root domains - Wrap PixiJS app.destroy() in try/catch so cleanup completes even when WebGL context is lost during SPA navigation, preventing empty graph - Strip base path from URL-derived slugs so content index keys match on non-root deployments (e.g. user.github.io/quartz) --- dist/components/index.js | 6 ++---- dist/components/index.js.map | 2 +- dist/index.js | 6 ++---- dist/index.js.map | 2 +- src/components/scripts/graph.inline.ts | 29 ++++++++++++++++++++------ 5 files changed, 29 insertions(+), 16 deletions(-) diff --git a/dist/components/index.js b/dist/components/index.js index 8861a9c..0cece31 100644 --- a/dist/components/index.js +++ b/dist/components/index.js @@ -1,9 +1,7 @@ +import { classNames } from '@quartz-community/utils/lang'; import { jsxs, jsx } from 'preact/jsx-runtime'; // src/util/lang.ts -function classNames(...classes) { - return classes.filter(Boolean).join(" "); -} // src/i18n/locales/en-US.ts var en_US_default = { @@ -26,7 +24,7 @@ function i18n(locale) { var graph_default = ".graph > h3 {\n font-size: 1rem;\n margin: 0;\n}\n.graph > .graph-outer {\n border-radius: 5px;\n border: 1px solid var(--lightgray);\n box-sizing: border-box;\n height: 250px;\n margin: 0.5em 0;\n position: relative;\n overflow: hidden;\n}\n.graph > .graph-outer > .global-graph-icon {\n cursor: pointer;\n background: none;\n border: none;\n color: var(--dark);\n opacity: 0.5;\n width: 24px;\n height: 24px;\n position: absolute;\n padding: 0.2rem;\n margin: 0.3rem;\n top: 0;\n right: 0;\n border-radius: 4px;\n background-color: transparent;\n transition: background-color 0.5s ease;\n}\n.graph > .graph-outer > .global-graph-icon:hover {\n background-color: var(--lightgray);\n}\n.graph > .global-graph-outer {\n position: fixed;\n z-index: 9999;\n left: 0;\n top: 0;\n width: 100vw;\n height: 100%;\n backdrop-filter: blur(4px);\n display: none;\n overflow: hidden;\n}\n.graph > .global-graph-outer.active {\n display: inline-block;\n}\n.graph > .global-graph-outer > .global-graph-container {\n border: 1px solid var(--lightgray);\n background-color: var(--light);\n border-radius: 5px;\n box-sizing: border-box;\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n height: 80vh;\n width: 80vw;\n}\n@media all and (max-width: 800px) {\n .graph > .global-graph-outer > .global-graph-container {\n width: 90%;\n }\n}\n\n.graph-container {\n width: 100%;\n height: 100%;\n}"; // src/components/scripts/graph.inline.ts -var graph_inline_default = 'var Ft=Object.hasOwnProperty;var Fe,B,ce,Je,Y,ie,fe,_e,de,Mu,Pu,ju,Xe,Tu={},he=[],Ye=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,mu=Array.isArray;function z(u,e){for(var t in e)u[t]=e[t];return u}function Uu(u){u&&u.parentNode&&u.parentNode.removeChild(u)}function Lu(u,e,t,o,i){var n={type:u,props:e,key:t,ref:o,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:i??++ce,__i:-1,__u:0};return i==null&&B.vnode!=null&&B.vnode(n),n}function Du(u){return u.children}function Au(u,e){this.props=u,this.context=e}function iu(u,e){if(e==null)return u.__?iu(u.__,u.__i+1):null;for(var t;ec&&Y.sort(_e),u=Y.shift(),c=Y.length,u.__d&&(t=void 0,o=void 0,i=(o=(e=u).__v).__e,n=[],s=[],e.__P&&((t=z({},o)).__v=o.__v+1,B.vnode&&B.vnode(t),Ee(e.__P,t,o,e.__n,e.__P.namespaceURI,32&o.__u?[i]:null,n,i??iu(o),!!(32&o.__u),s),t.__v=o.__v,t.__.__k[t.__i]=t,ut(n,t,s),o.__e=o.__=null,t.__e!=i&&Ce(t)));gu.__r=0}function pe(u,e,t,o,i,n,s,c,C,D,d){var r,g,F,m,P,y,p,v=o&&o.__k||he,M=e.length;for(C=Ze(t,e,v,C,M),r=0;r0?s=u.__k[n]=Lu(s.type,s.props,s.key,s.ref?s.ref:null,s.__v):u.__k[n]=s,C=n+g,s.__=u,s.__b=u.__b+1,c=null,(D=s.__i=Qe(s,t,C,r))!=-1&&(r--,(c=t[D])&&(c.__u|=2)),c==null||c.__v==null?(D==-1&&(i>d?g--:iC?g--:g++,s.__u|=4))):u.__k[n]=null;if(r)for(n=0;n(d?1:0)){for(i=t-1,n=t+1;i>=0||n=0?i--:n++])!=null&&(2&D.__u)==0&&c==D.key&&C==D.type)return s}return-1}function le(u,e,t){e[0]=="-"?u.setProperty(e,t??""):u[e]=t==null?"":typeof t!="number"||Ye.test(e)?t:t+"px"}function Eu(u,e,t,o,i){var n,s;u:if(e=="style")if(typeof t=="string")u.style.cssText=t;else{if(typeof o=="string"&&(u.style.cssText=o=""),o)for(e in o)t&&e in t||le(u.style,e,"");if(t)for(e in t)o&&t[e]==o[e]||le(u.style,e,t[e])}else if(e[0]=="o"&&e[1]=="n")n=e!=(e=e.replace(de,"$1")),s=e.toLowerCase(),e=s in u||e=="onFocusOut"||e=="onFocusIn"?s.slice(2):e.slice(2),u.l||(u.l={}),u.l[e+n]=t,t?o?t.u=o.u:(t.u=Mu,u.addEventListener(e,n?ju:Pu,n)):u.removeEventListener(e,n?ju:Pu,n);else{if(i=="http://www.w3.org/2000/svg")e=e.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(e!="width"&&e!="height"&&e!="href"&&e!="list"&&e!="form"&&e!="tabIndex"&&e!="download"&&e!="rowSpan"&&e!="colSpan"&&e!="role"&&e!="popover"&&e in u)try{u[e]=t??"";break u}catch{}typeof t=="function"||(t==null||t===!1&&e[4]!="-"?u.removeAttribute(e):u.setAttribute(e,e=="popover"&&t==1?"":t))}}function se(u){return function(e){if(this.l){var t=this.l[e.type+u];if(e.t==null)e.t=Mu++;else if(e.t0?u:mu(u)?u.map(Ae):z({},u)}function et(u,e,t,o,i,n,s,c,C){var D,d,r,g,F,m,P,y=t.props||Tu,p=e.props,v=e.type;if(v=="svg"?i="http://www.w3.org/2000/svg":v=="math"?i="http://www.w3.org/1998/Math/MathML":i||(i="http://www.w3.org/1999/xhtml"),n!=null){for(D=0;D"u"?"":document.body?.dataset?.basepath??""}function Ou(u,e){let t=e??nt(),o=u.startsWith("/")?u:"/"+u;return t+o}function ot(u,e){return u===e||u.endsWith("/"+e)}function at(u,e){return ot(u,e)&&(u=u.slice(0,-e.length)),u}function it(u,e){return u.startsWith("/")&&(u=u.substring(1)),!e&&u.endsWith("/")&&(u=u.slice(0,-1)),u}function me(u){for(;u.firstChild;)u.removeChild(u.firstChild)}(function(){function u(t){return new Promise(function(o,i){var n=document.createElement("script");n.src=t,n.onload=o,n.onerror=i,document.head.appendChild(n)})}Promise.all([u("https://cdn.jsdelivr.net/npm/d3@7/dist/d3.min.js"),u("https://cdn.jsdelivr.net/npm/pixi.js@8/dist/pixi.js")]).then(function(){e()}).catch(function(t){console.error("[Graph] Failed to load libraries:",t)});function e(){var t=window.d3,o=window.PIXI;if(!t||!o){console.error("[Graph] Libraries not loaded");return}var i="graph-visited";function n(){return new Set(JSON.parse(localStorage.getItem(i)||"[]"))}function s(_){var b=n();b.add(_),localStorage.setItem(i,JSON.stringify(Array.from(b)))}async function c(_,b,x){var h=lu(b);h===""&&(h="index");var T=n();if(me(_),x!==void 0&&x!==d)return console.log("[Graph] Stale render, skipping"),function(){};var w=JSON.parse(_.dataset.cfg||"{}"),Fu=w.drag,Be=w.zoom,Gu=w.depth,Iu=w.scale||1,ye=w.repelForce||.5,be=w.centerForce||.3,xe=w.linkDistance||30,we=w.fontSize||.6,Se=w.opacityScale||1,ke=w.removeTags||[],Le=w.showTags,Pe=w.focusOnHover,je=w.enableRadial,Z;try{var Nu=await fetchData;Z=new Map;for(var $u in Nu)Z.set(lu($u),Nu[$u])}catch(a){return console.error("[Graph] Error loading data:",a),function(){}}var R=_.offsetWidth,O=Math.max(_.offsetHeight,250),Q=[],fu=[],zu=new Set(Z.keys());Z.forEach(function(a,l){for(var f=a.links||[],A=0;A=0)for(var _u=[h],du=new Set([h]),Hu=0;Hu<=Gu&&_u.length>0;Hu++){for(var Bu=[],yu=0;yu<_u.length;yu++){var bu=_u[yu];uu.add(bu);for(var xu=0;xu = {\n \"en-US\": enUS,\n};\n\nexport function i18n(locale: string) {\n return locales[locale] || enUS;\n}\n",".graph > h3 {\n font-size: 1rem;\n margin: 0;\n}\n.graph > .graph-outer {\n border-radius: 5px;\n border: 1px solid var(--lightgray);\n box-sizing: border-box;\n height: 250px;\n margin: 0.5em 0;\n position: relative;\n overflow: hidden;\n}\n.graph > .graph-outer > .global-graph-icon {\n cursor: pointer;\n background: none;\n border: none;\n color: var(--dark);\n opacity: 0.5;\n width: 24px;\n height: 24px;\n position: absolute;\n padding: 0.2rem;\n margin: 0.3rem;\n top: 0;\n right: 0;\n border-radius: 4px;\n background-color: transparent;\n transition: background-color 0.5s ease;\n}\n.graph > .graph-outer > .global-graph-icon:hover {\n background-color: var(--lightgray);\n}\n.graph > .global-graph-outer {\n position: fixed;\n z-index: 9999;\n left: 0;\n top: 0;\n width: 100vw;\n height: 100%;\n backdrop-filter: blur(4px);\n display: none;\n overflow: hidden;\n}\n.graph > .global-graph-outer.active {\n display: inline-block;\n}\n.graph > .global-graph-outer > .global-graph-container {\n border: 1px solid var(--lightgray);\n background-color: var(--light);\n border-radius: 5px;\n box-sizing: border-box;\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n height: 80vh;\n width: 80vw;\n}\n@media all and (max-width: 800px) {\n .graph > .global-graph-outer > .global-graph-container {\n width: 90%;\n }\n}\n\n.graph-container {\n width: 100%;\n height: 100%;\n}","var Ft=Object.hasOwnProperty;var Fe,B,ce,Je,Y,ie,fe,_e,de,Mu,Pu,ju,Xe,Tu={},he=[],Ye=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,mu=Array.isArray;function z(u,e){for(var t in e)u[t]=e[t];return u}function Uu(u){u&&u.parentNode&&u.parentNode.removeChild(u)}function Lu(u,e,t,o,i){var n={type:u,props:e,key:t,ref:o,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:i??++ce,__i:-1,__u:0};return i==null&&B.vnode!=null&&B.vnode(n),n}function Du(u){return u.children}function Au(u,e){this.props=u,this.context=e}function iu(u,e){if(e==null)return u.__?iu(u.__,u.__i+1):null;for(var t;ec&&Y.sort(_e),u=Y.shift(),c=Y.length,u.__d&&(t=void 0,o=void 0,i=(o=(e=u).__v).__e,n=[],s=[],e.__P&&((t=z({},o)).__v=o.__v+1,B.vnode&&B.vnode(t),Ee(e.__P,t,o,e.__n,e.__P.namespaceURI,32&o.__u?[i]:null,n,i??iu(o),!!(32&o.__u),s),t.__v=o.__v,t.__.__k[t.__i]=t,ut(n,t,s),o.__e=o.__=null,t.__e!=i&&Ce(t)));gu.__r=0}function pe(u,e,t,o,i,n,s,c,C,D,d){var r,g,F,m,P,y,p,v=o&&o.__k||he,M=e.length;for(C=Ze(t,e,v,C,M),r=0;r0?s=u.__k[n]=Lu(s.type,s.props,s.key,s.ref?s.ref:null,s.__v):u.__k[n]=s,C=n+g,s.__=u,s.__b=u.__b+1,c=null,(D=s.__i=Qe(s,t,C,r))!=-1&&(r--,(c=t[D])&&(c.__u|=2)),c==null||c.__v==null?(D==-1&&(i>d?g--:iC?g--:g++,s.__u|=4))):u.__k[n]=null;if(r)for(n=0;n(d?1:0)){for(i=t-1,n=t+1;i>=0||n=0?i--:n++])!=null&&(2&D.__u)==0&&c==D.key&&C==D.type)return s}return-1}function le(u,e,t){e[0]==\"-\"?u.setProperty(e,t??\"\"):u[e]=t==null?\"\":typeof t!=\"number\"||Ye.test(e)?t:t+\"px\"}function Eu(u,e,t,o,i){var n,s;u:if(e==\"style\")if(typeof t==\"string\")u.style.cssText=t;else{if(typeof o==\"string\"&&(u.style.cssText=o=\"\"),o)for(e in o)t&&e in t||le(u.style,e,\"\");if(t)for(e in t)o&&t[e]==o[e]||le(u.style,e,t[e])}else if(e[0]==\"o\"&&e[1]==\"n\")n=e!=(e=e.replace(de,\"$1\")),s=e.toLowerCase(),e=s in u||e==\"onFocusOut\"||e==\"onFocusIn\"?s.slice(2):e.slice(2),u.l||(u.l={}),u.l[e+n]=t,t?o?t.u=o.u:(t.u=Mu,u.addEventListener(e,n?ju:Pu,n)):u.removeEventListener(e,n?ju:Pu,n);else{if(i==\"http://www.w3.org/2000/svg\")e=e.replace(/xlink(H|:h)/,\"h\").replace(/sName$/,\"s\");else if(e!=\"width\"&&e!=\"height\"&&e!=\"href\"&&e!=\"list\"&&e!=\"form\"&&e!=\"tabIndex\"&&e!=\"download\"&&e!=\"rowSpan\"&&e!=\"colSpan\"&&e!=\"role\"&&e!=\"popover\"&&e in u)try{u[e]=t??\"\";break u}catch{}typeof t==\"function\"||(t==null||t===!1&&e[4]!=\"-\"?u.removeAttribute(e):u.setAttribute(e,e==\"popover\"&&t==1?\"\":t))}}function se(u){return function(e){if(this.l){var t=this.l[e.type+u];if(e.t==null)e.t=Mu++;else if(e.t0?u:mu(u)?u.map(Ae):z({},u)}function et(u,e,t,o,i,n,s,c,C){var D,d,r,g,F,m,P,y=t.props||Tu,p=e.props,v=e.type;if(v==\"svg\"?i=\"http://www.w3.org/2000/svg\":v==\"math\"?i=\"http://www.w3.org/1998/Math/MathML\":i||(i=\"http://www.w3.org/1999/xhtml\"),n!=null){for(D=0;D\"u\"?\"\":document.body?.dataset?.basepath??\"\"}function Ou(u,e){let t=e??nt(),o=u.startsWith(\"/\")?u:\"/\"+u;return t+o}function ot(u,e){return u===e||u.endsWith(\"/\"+e)}function at(u,e){return ot(u,e)&&(u=u.slice(0,-e.length)),u}function it(u,e){return u.startsWith(\"/\")&&(u=u.substring(1)),!e&&u.endsWith(\"/\")&&(u=u.slice(0,-1)),u}function me(u){for(;u.firstChild;)u.removeChild(u.firstChild)}(function(){function u(t){return new Promise(function(o,i){var n=document.createElement(\"script\");n.src=t,n.onload=o,n.onerror=i,document.head.appendChild(n)})}Promise.all([u(\"https://cdn.jsdelivr.net/npm/d3@7/dist/d3.min.js\"),u(\"https://cdn.jsdelivr.net/npm/pixi.js@8/dist/pixi.js\")]).then(function(){e()}).catch(function(t){console.error(\"[Graph] Failed to load libraries:\",t)});function e(){var t=window.d3,o=window.PIXI;if(!t||!o){console.error(\"[Graph] Libraries not loaded\");return}var i=\"graph-visited\";function n(){return new Set(JSON.parse(localStorage.getItem(i)||\"[]\"))}function s(_){var b=n();b.add(_),localStorage.setItem(i,JSON.stringify(Array.from(b)))}async function c(_,b,x){var h=lu(b);h===\"\"&&(h=\"index\");var T=n();if(me(_),x!==void 0&&x!==d)return console.log(\"[Graph] Stale render, skipping\"),function(){};var w=JSON.parse(_.dataset.cfg||\"{}\"),Fu=w.drag,Be=w.zoom,Gu=w.depth,Iu=w.scale||1,ye=w.repelForce||.5,be=w.centerForce||.3,xe=w.linkDistance||30,we=w.fontSize||.6,Se=w.opacityScale||1,ke=w.removeTags||[],Le=w.showTags,Pe=w.focusOnHover,je=w.enableRadial,Z;try{var Nu=await fetchData;Z=new Map;for(var $u in Nu)Z.set(lu($u),Nu[$u])}catch(a){return console.error(\"[Graph] Error loading data:\",a),function(){}}var R=_.offsetWidth,O=Math.max(_.offsetHeight,250),Q=[],fu=[],zu=new Set(Z.keys());Z.forEach(function(a,l){for(var f=a.links||[],A=0;A=0)for(var _u=[h],du=new Set([h]),Hu=0;Hu<=Gu&&_u.length>0;Hu++){for(var Bu=[],yu=0;yu<_u.length;yu++){var bu=_u[yu];uu.add(bu);for(var xu=0;xu;\n globalGraph?: Partial;\n}\n\nconst defaultOptions: GraphOptions = {\n localGraph: {\n drag: true,\n zoom: true,\n depth: 1,\n scale: 1.1,\n repelForce: 0.5,\n centerForce: 0.3,\n linkDistance: 30,\n fontSize: 0.6,\n opacityScale: 1,\n showTags: true,\n removeTags: [],\n focusOnHover: false,\n enableRadial: false,\n },\n globalGraph: {\n drag: true,\n zoom: true,\n depth: -1,\n scale: 0.9,\n repelForce: 0.5,\n centerForce: 0.2,\n linkDistance: 30,\n fontSize: 0.6,\n opacityScale: 1,\n showTags: true,\n removeTags: [],\n focusOnHover: true,\n enableRadial: true,\n },\n};\n\nexport default ((userOpts?: Partial) => {\n const Graph: QuartzComponent = ({ displayClass, cfg }: QuartzComponentProps) => {\n const localGraph = { ...defaultOptions.localGraph, ...userOpts?.localGraph };\n const globalGraph = { ...defaultOptions.globalGraph, ...userOpts?.globalGraph };\n\n return (\n
\n

{i18n(cfg.locale ?? \"en-US\").components.graph.title}

\n
\n
\n \n
\n
\n
\n
\n
\n );\n };\n\n Graph.css = style;\n Graph.afterDOMLoaded = script;\n\n return Graph;\n}) satisfies QuartzComponentConstructor;\n"]} \ No newline at end of file +{"version":3,"sources":["../../src/i18n/locales/en-US.ts","../../src/i18n/index.ts","../../src/components/styles/graph.scss","../../src/components/scripts/graph.inline.ts","../../src/components/Graph.tsx"],"names":[],"mappings":";;;;;;AAAA,IAAO,aAAA,GAAQ;AAAA,EACb,UAAA,EAAY;AAAA,IACV,KAAA,EAAO;AAAA,MACL,KAAA,EAAO;AAAA;AACT;AAEJ,CAAA;;;ACJA,IAAM,OAAA,GAAuC;AAAA,EAC3C,OAAA,EAAS;AACX,CAAA;AAEO,SAAS,KAAK,MAAA,EAAgB;AACnC,EAAA,OAAO,OAAA,CAAQ,MAAM,CAAA,IAAK,aAAA;AAC5B;;;ACRA,IAAA,aAAA,GAAA,q7CAAA;;;ACAA,IAAA,oBAAA,GAAA,0snBAAA;ACgCA,IAAM,cAAA,GAA+B;AAAA,EACnC,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,KAAA,EAAO,CAAA;AAAA,IACP,KAAA,EAAO,GAAA;AAAA,IACP,UAAA,EAAY,GAAA;AAAA,IACZ,WAAA,EAAa,GAAA;AAAA,IACb,YAAA,EAAc,EAAA;AAAA,IACd,QAAA,EAAU,GAAA;AAAA,IACV,YAAA,EAAc,CAAA;AAAA,IACd,QAAA,EAAU,IAAA;AAAA,IACV,YAAY,EAAC;AAAA,IACb,YAAA,EAAc,KAAA;AAAA,IACd,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,IAAA;AAAA,IACN,IAAA,EAAM,IAAA;AAAA,IACN,KAAA,EAAO,EAAA;AAAA,IACP,KAAA,EAAO,GAAA;AAAA,IACP,UAAA,EAAY,GAAA;AAAA,IACZ,WAAA,EAAa,GAAA;AAAA,IACb,YAAA,EAAc,EAAA;AAAA,IACd,QAAA,EAAU,GAAA;AAAA,IACV,YAAA,EAAc,CAAA;AAAA,IACd,QAAA,EAAU,IAAA;AAAA,IACV,YAAY,EAAC;AAAA,IACb,YAAA,EAAc,IAAA;AAAA,IACd,YAAA,EAAc;AAAA;AAElB,CAAA;AAEA,IAAO,aAAA,IAAS,CAAC,QAAA,KAAqC;AACpD,EAAA,MAAM,KAAA,GAAyB,CAAC,EAAE,YAAA,EAAc,KAAI,KAA4B;AAC9E,IAAA,MAAM,aAAa,EAAE,GAAG,eAAe,UAAA,EAAY,GAAG,UAAU,UAAA,EAAW;AAC3E,IAAA,MAAM,cAAc,EAAE,GAAG,eAAe,WAAA,EAAa,GAAG,UAAU,WAAA,EAAY;AAE9E,IAAA,4BACG,KAAA,EAAA,EAAI,KAAA,EAAO,UAAA,CAAW,YAAA,EAAc,OAAO,CAAA,EAC1C,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,IAAA,EAAA,EAAI,eAAK,GAAA,CAAI,MAAA,IAAU,OAAO,CAAA,CAAE,UAAA,CAAW,MAAM,KAAA,EAAM,CAAA;AAAA,sBACxD,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,aAAA,EACT,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,SAAI,KAAA,EAAM,iBAAA,EAAkB,YAAU,IAAA,CAAK,SAAA,CAAU,UAAU,CAAA,EAAG,CAAA;AAAA,wBACnE,GAAA,CAAC,QAAA,EAAA,EAAO,KAAA,EAAM,mBAAA,EAAoB,cAAW,cAAA,EAC3C,QAAA,kBAAA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,KAAA;AAAA,YACR,KAAA,EAAM,4BAAA;AAAA,YACN,UAAA,EAAW,8BAAA;AAAA,YACX,CAAA,EAAE,KAAA;AAAA,YACF,CAAA,EAAE,KAAA;AAAA,YACF,OAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAK,cAAA;AAAA,YACL,QAAA,EAAS,UAAA;AAAA,YAET,QAAA,kBAAA,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,CAAA,EAAE;AAAA;AAAA;AAWJ;AAAA,SACF,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBACA,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,oBAAA,EACT,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,wBAAA,EAAyB,UAAA,EAAU,IAAA,CAAK,SAAA,CAAU,WAAW,GAAG,CAAA,EAC7E;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ,CAAA;AAEA,EAAA,KAAA,CAAM,GAAA,GAAM,aAAA;AACZ,EAAA,KAAA,CAAM,cAAA,GAAiB,oBAAA;AAEvB,EAAA,OAAO,KAAA;AACT,CAAA","file":"index.js","sourcesContent":["export default {\n components: {\n graph: {\n title: \"Graph View\",\n },\n },\n};\n","import enUS from \"./locales/en-US\";\n\nconst locales: Record = {\n \"en-US\": enUS,\n};\n\nexport function i18n(locale: string) {\n return locales[locale] || enUS;\n}\n",".graph > h3 {\n font-size: 1rem;\n margin: 0;\n}\n.graph > .graph-outer {\n border-radius: 5px;\n border: 1px solid var(--lightgray);\n box-sizing: border-box;\n height: 250px;\n margin: 0.5em 0;\n position: relative;\n overflow: hidden;\n}\n.graph > .graph-outer > .global-graph-icon {\n cursor: pointer;\n background: none;\n border: none;\n color: var(--dark);\n opacity: 0.5;\n width: 24px;\n height: 24px;\n position: absolute;\n padding: 0.2rem;\n margin: 0.3rem;\n top: 0;\n right: 0;\n border-radius: 4px;\n background-color: transparent;\n transition: background-color 0.5s ease;\n}\n.graph > .graph-outer > .global-graph-icon:hover {\n background-color: var(--lightgray);\n}\n.graph > .global-graph-outer {\n position: fixed;\n z-index: 9999;\n left: 0;\n top: 0;\n width: 100vw;\n height: 100%;\n backdrop-filter: blur(4px);\n display: none;\n overflow: hidden;\n}\n.graph > .global-graph-outer.active {\n display: inline-block;\n}\n.graph > .global-graph-outer > .global-graph-container {\n border: 1px solid var(--lightgray);\n background-color: var(--light);\n border-radius: 5px;\n box-sizing: border-box;\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n height: 80vh;\n width: 80vw;\n}\n@media all and (max-width: 800px) {\n .graph > .global-graph-outer > .global-graph-container {\n width: 90%;\n }\n}\n\n.graph-container {\n width: 100%;\n height: 100%;\n}","var ct=Object.hasOwnProperty;var ce,y,fe,Ye,Y,De,_e,de,he,Mu,Pu,ju,Ze,Tu={},pe=[],Qe=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,mu=Array.isArray;function z(u,e){for(var t in e)u[t]=e[t];return u}function Uu(u){u&&u.parentNode&&u.parentNode.removeChild(u)}function Lu(u,e,t,n,o){var a={type:u,props:e,key:t,ref:n,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:o??++fe,__i:-1,__u:0};return o==null&&y.vnode!=null&&y.vnode(a),a}function Du(u){return u.children}function Au(u,e){this.props=u,this.context=e}function iu(u,e){if(e==null)return u.__?iu(u.__,u.__i+1):null;for(var t;eF&&Y.sort(de),u=Y.shift(),F=Y.length,u.__d&&(t=void 0,n=void 0,o=(n=(e=u).__v).__e,a=[],s=[],e.__P&&((t=z({},n)).__v=n.__v+1,y.vnode&&y.vnode(t),Ae(e.__P,t,n,e.__n,e.__P.namespaceURI,32&n.__u?[o]:null,a,o??iu(n),!!(32&n.__u),s),t.__v=n.__v,t.__.__k[t.__i]=t,tt(a,t,s),n.__e=n.__=null,t.__e!=o&&Ce(t)));gu.__r=0}function ve(u,e,t,n,o,a,s,F,v,D,d){var r,B,f,m,P,b,p,h=n&&n.__k||pe,M=e.length;for(v=ut(t,e,h,v,M),r=0;r0?s=u.__k[a]=Lu(s.type,s.props,s.key,s.ref?s.ref:null,s.__v):u.__k[a]=s,v=a+B,s.__=u,s.__b=u.__b+1,F=null,(D=s.__i=et(s,t,v,r))!=-1&&(r--,(F=t[D])&&(F.__u|=2)),F==null||F.__v==null?(D==-1&&(o>d?B--:ov?B--:B++,s.__u|=4))):u.__k[a]=null;if(r)for(a=0;a(d?1:0)){for(o=t-1,a=t+1;o>=0||a=0?o--:a++])!=null&&(2&D.__u)==0&&F==D.key&&v==D.type)return s}return-1}function se(u,e,t){e[0]==\"-\"?u.setProperty(e,t??\"\"):u[e]=t==null?\"\":typeof t!=\"number\"||Qe.test(e)?t:t+\"px\"}function Eu(u,e,t,n,o){var a,s;u:if(e==\"style\")if(typeof t==\"string\")u.style.cssText=t;else{if(typeof n==\"string\"&&(u.style.cssText=n=\"\"),n)for(e in n)t&&e in t||se(u.style,e,\"\");if(t)for(e in t)n&&t[e]==n[e]||se(u.style,e,t[e])}else if(e[0]==\"o\"&&e[1]==\"n\")a=e!=(e=e.replace(he,\"$1\")),s=e.toLowerCase(),e=s in u||e==\"onFocusOut\"||e==\"onFocusIn\"?s.slice(2):e.slice(2),u.l||(u.l={}),u.l[e+a]=t,t?n?t.u=n.u:(t.u=Mu,u.addEventListener(e,a?ju:Pu,a)):u.removeEventListener(e,a?ju:Pu,a);else{if(o==\"http://www.w3.org/2000/svg\")e=e.replace(/xlink(H|:h)/,\"h\").replace(/sName$/,\"s\");else if(e!=\"width\"&&e!=\"height\"&&e!=\"href\"&&e!=\"list\"&&e!=\"form\"&&e!=\"tabIndex\"&&e!=\"download\"&&e!=\"rowSpan\"&&e!=\"colSpan\"&&e!=\"role\"&&e!=\"popover\"&&e in u)try{u[e]=t??\"\";break u}catch{}typeof t==\"function\"||(t==null||t===!1&&e[4]!=\"-\"?u.removeAttribute(e):u.setAttribute(e,e==\"popover\"&&t==1?\"\":t))}}function Fe(u){return function(e){if(this.l){var t=this.l[e.type+u];if(e.t==null)e.t=Mu++;else if(e.t0?u:mu(u)?u.map(ge):z({},u)}function rt(u,e,t,n,o,a,s,F,v){var D,d,r,B,f,m,P,b=t.props||Tu,p=e.props,h=e.type;if(h==\"svg\"?o=\"http://www.w3.org/2000/svg\":h==\"math\"?o=\"http://www.w3.org/1998/Math/MathML\":o||(o=\"http://www.w3.org/1999/xhtml\"),a!=null){for(D=0;D\"u\"?\"\":document.body?.dataset?.basepath??\"\"}function Ou(u,e){let t=e??Gu(),n=u.startsWith(\"/\")?u:\"/\"+u;return t+n}function at(u,e){return u===e||u.endsWith(\"/\"+e)}function it(u,e){return at(u,e)&&(u=u.slice(0,-e.length)),u}function Dt(u,e){return u.startsWith(\"/\")&&(u=u.substring(1)),!e&&u.endsWith(\"/\")&&(u=u.slice(0,-1)),u}function ye(u){for(;u.firstChild;)u.removeChild(u.firstChild)}(function(){function u(){var n=Be(),o=Gu();return o&&n.startsWith(o.replace(/^\\//,\"\"))&&(n=n.slice(o.replace(/^\\//,\"\").length),n.startsWith(\"/\")&&(n=n.slice(1))),n}function e(n){return new Promise(function(o,a){var s=document.createElement(\"script\");s.src=n,s.onload=o,s.onerror=a,document.head.appendChild(s)})}Promise.all([e(\"https://cdn.jsdelivr.net/npm/d3@7/dist/d3.min.js\"),e(\"https://cdn.jsdelivr.net/npm/pixi.js@8/dist/pixi.js\")]).then(function(){t()}).catch(function(n){console.error(\"[Graph] Failed to load libraries:\",n)});function t(){var n=window.d3,o=window.PIXI;if(!n||!o){console.error(\"[Graph] Libraries not loaded\");return}var a=\"graph-visited\";function s(){return new Set(JSON.parse(localStorage.getItem(a)||\"[]\"))}function F(_){var w=s();w.add(_),localStorage.setItem(a,JSON.stringify(Array.from(w)))}async function v(_,w,A){var E=lu(w);E===\"\"&&(E=\"index\");var V=s();if(ye(_),A!==void 0&&A!==r)return console.log(\"[Graph] Stale render, skipping\"),function(){};var x=JSON.parse(_.dataset.cfg||\"{}\"),su=x.drag,be=x.zoom,Iu=x.depth,Nu=x.scale||1,xe=x.repelForce||.5,we=x.centerForce||.3,Se=x.linkDistance||30,ke=x.fontSize||.6,Le=x.opacityScale||1,Pe=x.removeTags||[],je=x.showTags,Te=x.focusOnHover,We=x.enableRadial,Z;try{var $u=await fetchData;Z=new Map;for(var zu in $u)Z.set(lu(zu),$u[zu])}catch(i){return console.error(\"[Graph] Error loading data:\",i),function(){}}var R=_.offsetWidth,G=Math.max(_.offsetHeight,250),Q=[],fu=[],Hu=new Set(Z.keys());Z.forEach(function(i,l){for(var c=i.links||[],g=0;g=0)for(var _u=[E],du=new Set([E]),Vu=0;Vu<=Iu&&_u.length>0;Vu++){for(var Bu=[],yu=0;yu<_u.length;yu++){var bu=_u[yu];uu.add(bu);for(var xu=0;xu;\n globalGraph?: Partial;\n}\n\nconst defaultOptions: GraphOptions = {\n localGraph: {\n drag: true,\n zoom: true,\n depth: 1,\n scale: 1.1,\n repelForce: 0.5,\n centerForce: 0.3,\n linkDistance: 30,\n fontSize: 0.6,\n opacityScale: 1,\n showTags: true,\n removeTags: [],\n focusOnHover: false,\n enableRadial: false,\n },\n globalGraph: {\n drag: true,\n zoom: true,\n depth: -1,\n scale: 0.9,\n repelForce: 0.5,\n centerForce: 0.2,\n linkDistance: 30,\n fontSize: 0.6,\n opacityScale: 1,\n showTags: true,\n removeTags: [],\n focusOnHover: true,\n enableRadial: true,\n },\n};\n\nexport default ((userOpts?: Partial) => {\n const Graph: QuartzComponent = ({ displayClass, cfg }: QuartzComponentProps) => {\n const localGraph = { ...defaultOptions.localGraph, ...userOpts?.localGraph };\n const globalGraph = { ...defaultOptions.globalGraph, ...userOpts?.globalGraph };\n\n return (\n
\n

{i18n(cfg.locale ?? \"en-US\").components.graph.title}

\n
\n
\n \n
\n
\n
\n
\n
\n );\n };\n\n Graph.css = style;\n Graph.afterDOMLoaded = script;\n\n return Graph;\n}) satisfies QuartzComponentConstructor;\n"]} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index 8861a9c..0cece31 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,9 +1,7 @@ +import { classNames } from '@quartz-community/utils/lang'; import { jsxs, jsx } from 'preact/jsx-runtime'; // src/util/lang.ts -function classNames(...classes) { - return classes.filter(Boolean).join(" "); -} // src/i18n/locales/en-US.ts var en_US_default = { @@ -26,7 +24,7 @@ function i18n(locale) { var graph_default = ".graph > h3 {\n font-size: 1rem;\n margin: 0;\n}\n.graph > .graph-outer {\n border-radius: 5px;\n border: 1px solid var(--lightgray);\n box-sizing: border-box;\n height: 250px;\n margin: 0.5em 0;\n position: relative;\n overflow: hidden;\n}\n.graph > .graph-outer > .global-graph-icon {\n cursor: pointer;\n background: none;\n border: none;\n color: var(--dark);\n opacity: 0.5;\n width: 24px;\n height: 24px;\n position: absolute;\n padding: 0.2rem;\n margin: 0.3rem;\n top: 0;\n right: 0;\n border-radius: 4px;\n background-color: transparent;\n transition: background-color 0.5s ease;\n}\n.graph > .graph-outer > .global-graph-icon:hover {\n background-color: var(--lightgray);\n}\n.graph > .global-graph-outer {\n position: fixed;\n z-index: 9999;\n left: 0;\n top: 0;\n width: 100vw;\n height: 100%;\n backdrop-filter: blur(4px);\n display: none;\n overflow: hidden;\n}\n.graph > .global-graph-outer.active {\n display: inline-block;\n}\n.graph > .global-graph-outer > .global-graph-container {\n border: 1px solid var(--lightgray);\n background-color: var(--light);\n border-radius: 5px;\n box-sizing: border-box;\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n height: 80vh;\n width: 80vw;\n}\n@media all and (max-width: 800px) {\n .graph > .global-graph-outer > .global-graph-container {\n width: 90%;\n }\n}\n\n.graph-container {\n width: 100%;\n height: 100%;\n}"; // src/components/scripts/graph.inline.ts -var graph_inline_default = 'var Ft=Object.hasOwnProperty;var Fe,B,ce,Je,Y,ie,fe,_e,de,Mu,Pu,ju,Xe,Tu={},he=[],Ye=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,mu=Array.isArray;function z(u,e){for(var t in e)u[t]=e[t];return u}function Uu(u){u&&u.parentNode&&u.parentNode.removeChild(u)}function Lu(u,e,t,o,i){var n={type:u,props:e,key:t,ref:o,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:i??++ce,__i:-1,__u:0};return i==null&&B.vnode!=null&&B.vnode(n),n}function Du(u){return u.children}function Au(u,e){this.props=u,this.context=e}function iu(u,e){if(e==null)return u.__?iu(u.__,u.__i+1):null;for(var t;ec&&Y.sort(_e),u=Y.shift(),c=Y.length,u.__d&&(t=void 0,o=void 0,i=(o=(e=u).__v).__e,n=[],s=[],e.__P&&((t=z({},o)).__v=o.__v+1,B.vnode&&B.vnode(t),Ee(e.__P,t,o,e.__n,e.__P.namespaceURI,32&o.__u?[i]:null,n,i??iu(o),!!(32&o.__u),s),t.__v=o.__v,t.__.__k[t.__i]=t,ut(n,t,s),o.__e=o.__=null,t.__e!=i&&Ce(t)));gu.__r=0}function pe(u,e,t,o,i,n,s,c,C,D,d){var r,g,F,m,P,y,p,v=o&&o.__k||he,M=e.length;for(C=Ze(t,e,v,C,M),r=0;r0?s=u.__k[n]=Lu(s.type,s.props,s.key,s.ref?s.ref:null,s.__v):u.__k[n]=s,C=n+g,s.__=u,s.__b=u.__b+1,c=null,(D=s.__i=Qe(s,t,C,r))!=-1&&(r--,(c=t[D])&&(c.__u|=2)),c==null||c.__v==null?(D==-1&&(i>d?g--:iC?g--:g++,s.__u|=4))):u.__k[n]=null;if(r)for(n=0;n(d?1:0)){for(i=t-1,n=t+1;i>=0||n=0?i--:n++])!=null&&(2&D.__u)==0&&c==D.key&&C==D.type)return s}return-1}function le(u,e,t){e[0]=="-"?u.setProperty(e,t??""):u[e]=t==null?"":typeof t!="number"||Ye.test(e)?t:t+"px"}function Eu(u,e,t,o,i){var n,s;u:if(e=="style")if(typeof t=="string")u.style.cssText=t;else{if(typeof o=="string"&&(u.style.cssText=o=""),o)for(e in o)t&&e in t||le(u.style,e,"");if(t)for(e in t)o&&t[e]==o[e]||le(u.style,e,t[e])}else if(e[0]=="o"&&e[1]=="n")n=e!=(e=e.replace(de,"$1")),s=e.toLowerCase(),e=s in u||e=="onFocusOut"||e=="onFocusIn"?s.slice(2):e.slice(2),u.l||(u.l={}),u.l[e+n]=t,t?o?t.u=o.u:(t.u=Mu,u.addEventListener(e,n?ju:Pu,n)):u.removeEventListener(e,n?ju:Pu,n);else{if(i=="http://www.w3.org/2000/svg")e=e.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(e!="width"&&e!="height"&&e!="href"&&e!="list"&&e!="form"&&e!="tabIndex"&&e!="download"&&e!="rowSpan"&&e!="colSpan"&&e!="role"&&e!="popover"&&e in u)try{u[e]=t??"";break u}catch{}typeof t=="function"||(t==null||t===!1&&e[4]!="-"?u.removeAttribute(e):u.setAttribute(e,e=="popover"&&t==1?"":t))}}function se(u){return function(e){if(this.l){var t=this.l[e.type+u];if(e.t==null)e.t=Mu++;else if(e.t0?u:mu(u)?u.map(Ae):z({},u)}function et(u,e,t,o,i,n,s,c,C){var D,d,r,g,F,m,P,y=t.props||Tu,p=e.props,v=e.type;if(v=="svg"?i="http://www.w3.org/2000/svg":v=="math"?i="http://www.w3.org/1998/Math/MathML":i||(i="http://www.w3.org/1999/xhtml"),n!=null){for(D=0;D"u"?"":document.body?.dataset?.basepath??""}function Ou(u,e){let t=e??nt(),o=u.startsWith("/")?u:"/"+u;return t+o}function ot(u,e){return u===e||u.endsWith("/"+e)}function at(u,e){return ot(u,e)&&(u=u.slice(0,-e.length)),u}function it(u,e){return u.startsWith("/")&&(u=u.substring(1)),!e&&u.endsWith("/")&&(u=u.slice(0,-1)),u}function me(u){for(;u.firstChild;)u.removeChild(u.firstChild)}(function(){function u(t){return new Promise(function(o,i){var n=document.createElement("script");n.src=t,n.onload=o,n.onerror=i,document.head.appendChild(n)})}Promise.all([u("https://cdn.jsdelivr.net/npm/d3@7/dist/d3.min.js"),u("https://cdn.jsdelivr.net/npm/pixi.js@8/dist/pixi.js")]).then(function(){e()}).catch(function(t){console.error("[Graph] Failed to load libraries:",t)});function e(){var t=window.d3,o=window.PIXI;if(!t||!o){console.error("[Graph] Libraries not loaded");return}var i="graph-visited";function n(){return new Set(JSON.parse(localStorage.getItem(i)||"[]"))}function s(_){var b=n();b.add(_),localStorage.setItem(i,JSON.stringify(Array.from(b)))}async function c(_,b,x){var h=lu(b);h===""&&(h="index");var T=n();if(me(_),x!==void 0&&x!==d)return console.log("[Graph] Stale render, skipping"),function(){};var w=JSON.parse(_.dataset.cfg||"{}"),Fu=w.drag,Be=w.zoom,Gu=w.depth,Iu=w.scale||1,ye=w.repelForce||.5,be=w.centerForce||.3,xe=w.linkDistance||30,we=w.fontSize||.6,Se=w.opacityScale||1,ke=w.removeTags||[],Le=w.showTags,Pe=w.focusOnHover,je=w.enableRadial,Z;try{var Nu=await fetchData;Z=new Map;for(var $u in Nu)Z.set(lu($u),Nu[$u])}catch(a){return console.error("[Graph] Error loading data:",a),function(){}}var R=_.offsetWidth,O=Math.max(_.offsetHeight,250),Q=[],fu=[],zu=new Set(Z.keys());Z.forEach(function(a,l){for(var f=a.links||[],A=0;A=0)for(var _u=[h],du=new Set([h]),Hu=0;Hu<=Gu&&_u.length>0;Hu++){for(var Bu=[],yu=0;yu<_u.length;yu++){var bu=_u[yu];uu.add(bu);for(var xu=0;xu = {\n \"en-US\": enUS,\n};\n\nexport function i18n(locale: string) {\n return locales[locale] || enUS;\n}\n",".graph > h3 {\n font-size: 1rem;\n margin: 0;\n}\n.graph > .graph-outer {\n border-radius: 5px;\n border: 1px solid var(--lightgray);\n box-sizing: border-box;\n height: 250px;\n margin: 0.5em 0;\n position: relative;\n overflow: hidden;\n}\n.graph > .graph-outer > .global-graph-icon {\n cursor: pointer;\n background: none;\n border: none;\n color: var(--dark);\n opacity: 0.5;\n width: 24px;\n height: 24px;\n position: absolute;\n padding: 0.2rem;\n margin: 0.3rem;\n top: 0;\n right: 0;\n border-radius: 4px;\n background-color: transparent;\n transition: background-color 0.5s ease;\n}\n.graph > .graph-outer > .global-graph-icon:hover {\n background-color: var(--lightgray);\n}\n.graph > .global-graph-outer {\n position: fixed;\n z-index: 9999;\n left: 0;\n top: 0;\n width: 100vw;\n height: 100%;\n backdrop-filter: blur(4px);\n display: none;\n overflow: hidden;\n}\n.graph > .global-graph-outer.active {\n display: inline-block;\n}\n.graph > .global-graph-outer > .global-graph-container {\n border: 1px solid var(--lightgray);\n background-color: var(--light);\n border-radius: 5px;\n box-sizing: border-box;\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n height: 80vh;\n width: 80vw;\n}\n@media all and (max-width: 800px) {\n .graph > .global-graph-outer > .global-graph-container {\n width: 90%;\n }\n}\n\n.graph-container {\n width: 100%;\n height: 100%;\n}","var Ft=Object.hasOwnProperty;var Fe,B,ce,Je,Y,ie,fe,_e,de,Mu,Pu,ju,Xe,Tu={},he=[],Ye=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,mu=Array.isArray;function z(u,e){for(var t in e)u[t]=e[t];return u}function Uu(u){u&&u.parentNode&&u.parentNode.removeChild(u)}function Lu(u,e,t,o,i){var n={type:u,props:e,key:t,ref:o,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:i??++ce,__i:-1,__u:0};return i==null&&B.vnode!=null&&B.vnode(n),n}function Du(u){return u.children}function Au(u,e){this.props=u,this.context=e}function iu(u,e){if(e==null)return u.__?iu(u.__,u.__i+1):null;for(var t;ec&&Y.sort(_e),u=Y.shift(),c=Y.length,u.__d&&(t=void 0,o=void 0,i=(o=(e=u).__v).__e,n=[],s=[],e.__P&&((t=z({},o)).__v=o.__v+1,B.vnode&&B.vnode(t),Ee(e.__P,t,o,e.__n,e.__P.namespaceURI,32&o.__u?[i]:null,n,i??iu(o),!!(32&o.__u),s),t.__v=o.__v,t.__.__k[t.__i]=t,ut(n,t,s),o.__e=o.__=null,t.__e!=i&&Ce(t)));gu.__r=0}function pe(u,e,t,o,i,n,s,c,C,D,d){var r,g,F,m,P,y,p,v=o&&o.__k||he,M=e.length;for(C=Ze(t,e,v,C,M),r=0;r0?s=u.__k[n]=Lu(s.type,s.props,s.key,s.ref?s.ref:null,s.__v):u.__k[n]=s,C=n+g,s.__=u,s.__b=u.__b+1,c=null,(D=s.__i=Qe(s,t,C,r))!=-1&&(r--,(c=t[D])&&(c.__u|=2)),c==null||c.__v==null?(D==-1&&(i>d?g--:iC?g--:g++,s.__u|=4))):u.__k[n]=null;if(r)for(n=0;n(d?1:0)){for(i=t-1,n=t+1;i>=0||n=0?i--:n++])!=null&&(2&D.__u)==0&&c==D.key&&C==D.type)return s}return-1}function le(u,e,t){e[0]==\"-\"?u.setProperty(e,t??\"\"):u[e]=t==null?\"\":typeof t!=\"number\"||Ye.test(e)?t:t+\"px\"}function Eu(u,e,t,o,i){var n,s;u:if(e==\"style\")if(typeof t==\"string\")u.style.cssText=t;else{if(typeof o==\"string\"&&(u.style.cssText=o=\"\"),o)for(e in o)t&&e in t||le(u.style,e,\"\");if(t)for(e in t)o&&t[e]==o[e]||le(u.style,e,t[e])}else if(e[0]==\"o\"&&e[1]==\"n\")n=e!=(e=e.replace(de,\"$1\")),s=e.toLowerCase(),e=s in u||e==\"onFocusOut\"||e==\"onFocusIn\"?s.slice(2):e.slice(2),u.l||(u.l={}),u.l[e+n]=t,t?o?t.u=o.u:(t.u=Mu,u.addEventListener(e,n?ju:Pu,n)):u.removeEventListener(e,n?ju:Pu,n);else{if(i==\"http://www.w3.org/2000/svg\")e=e.replace(/xlink(H|:h)/,\"h\").replace(/sName$/,\"s\");else if(e!=\"width\"&&e!=\"height\"&&e!=\"href\"&&e!=\"list\"&&e!=\"form\"&&e!=\"tabIndex\"&&e!=\"download\"&&e!=\"rowSpan\"&&e!=\"colSpan\"&&e!=\"role\"&&e!=\"popover\"&&e in u)try{u[e]=t??\"\";break u}catch{}typeof t==\"function\"||(t==null||t===!1&&e[4]!=\"-\"?u.removeAttribute(e):u.setAttribute(e,e==\"popover\"&&t==1?\"\":t))}}function se(u){return function(e){if(this.l){var t=this.l[e.type+u];if(e.t==null)e.t=Mu++;else if(e.t0?u:mu(u)?u.map(Ae):z({},u)}function et(u,e,t,o,i,n,s,c,C){var D,d,r,g,F,m,P,y=t.props||Tu,p=e.props,v=e.type;if(v==\"svg\"?i=\"http://www.w3.org/2000/svg\":v==\"math\"?i=\"http://www.w3.org/1998/Math/MathML\":i||(i=\"http://www.w3.org/1999/xhtml\"),n!=null){for(D=0;D\"u\"?\"\":document.body?.dataset?.basepath??\"\"}function Ou(u,e){let t=e??nt(),o=u.startsWith(\"/\")?u:\"/\"+u;return t+o}function ot(u,e){return u===e||u.endsWith(\"/\"+e)}function at(u,e){return ot(u,e)&&(u=u.slice(0,-e.length)),u}function it(u,e){return u.startsWith(\"/\")&&(u=u.substring(1)),!e&&u.endsWith(\"/\")&&(u=u.slice(0,-1)),u}function me(u){for(;u.firstChild;)u.removeChild(u.firstChild)}(function(){function u(t){return new Promise(function(o,i){var n=document.createElement(\"script\");n.src=t,n.onload=o,n.onerror=i,document.head.appendChild(n)})}Promise.all([u(\"https://cdn.jsdelivr.net/npm/d3@7/dist/d3.min.js\"),u(\"https://cdn.jsdelivr.net/npm/pixi.js@8/dist/pixi.js\")]).then(function(){e()}).catch(function(t){console.error(\"[Graph] Failed to load libraries:\",t)});function e(){var t=window.d3,o=window.PIXI;if(!t||!o){console.error(\"[Graph] Libraries not loaded\");return}var i=\"graph-visited\";function n(){return new Set(JSON.parse(localStorage.getItem(i)||\"[]\"))}function s(_){var b=n();b.add(_),localStorage.setItem(i,JSON.stringify(Array.from(b)))}async function c(_,b,x){var h=lu(b);h===\"\"&&(h=\"index\");var T=n();if(me(_),x!==void 0&&x!==d)return console.log(\"[Graph] Stale render, skipping\"),function(){};var w=JSON.parse(_.dataset.cfg||\"{}\"),Fu=w.drag,Be=w.zoom,Gu=w.depth,Iu=w.scale||1,ye=w.repelForce||.5,be=w.centerForce||.3,xe=w.linkDistance||30,we=w.fontSize||.6,Se=w.opacityScale||1,ke=w.removeTags||[],Le=w.showTags,Pe=w.focusOnHover,je=w.enableRadial,Z;try{var Nu=await fetchData;Z=new Map;for(var $u in Nu)Z.set(lu($u),Nu[$u])}catch(a){return console.error(\"[Graph] Error loading data:\",a),function(){}}var R=_.offsetWidth,O=Math.max(_.offsetHeight,250),Q=[],fu=[],zu=new Set(Z.keys());Z.forEach(function(a,l){for(var f=a.links||[],A=0;A=0)for(var _u=[h],du=new Set([h]),Hu=0;Hu<=Gu&&_u.length>0;Hu++){for(var Bu=[],yu=0;yu<_u.length;yu++){var bu=_u[yu];uu.add(bu);for(var xu=0;xu;\n globalGraph?: Partial;\n}\n\nconst defaultOptions: GraphOptions = {\n localGraph: {\n drag: true,\n zoom: true,\n depth: 1,\n scale: 1.1,\n repelForce: 0.5,\n centerForce: 0.3,\n linkDistance: 30,\n fontSize: 0.6,\n opacityScale: 1,\n showTags: true,\n removeTags: [],\n focusOnHover: false,\n enableRadial: false,\n },\n globalGraph: {\n drag: true,\n zoom: true,\n depth: -1,\n scale: 0.9,\n repelForce: 0.5,\n centerForce: 0.2,\n linkDistance: 30,\n fontSize: 0.6,\n opacityScale: 1,\n showTags: true,\n removeTags: [],\n focusOnHover: true,\n enableRadial: true,\n },\n};\n\nexport default ((userOpts?: Partial) => {\n const Graph: QuartzComponent = ({ displayClass, cfg }: QuartzComponentProps) => {\n const localGraph = { ...defaultOptions.localGraph, ...userOpts?.localGraph };\n const globalGraph = { ...defaultOptions.globalGraph, ...userOpts?.globalGraph };\n\n return (\n
\n

{i18n(cfg.locale ?? \"en-US\").components.graph.title}

\n
\n
\n \n
\n
\n
\n
\n
\n );\n };\n\n Graph.css = style;\n Graph.afterDOMLoaded = script;\n\n return Graph;\n}) satisfies QuartzComponentConstructor;\n"]} \ No newline at end of file +{"version":3,"sources":["../src/i18n/locales/en-US.ts","../src/i18n/index.ts","../src/components/styles/graph.scss","../src/components/scripts/graph.inline.ts","../src/components/Graph.tsx"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["export default {\n components: {\n graph: {\n title: \"Graph View\",\n },\n },\n};\n","import enUS from \"./locales/en-US\";\n\nconst locales: Record = {\n \"en-US\": enUS,\n};\n\nexport function i18n(locale: string) {\n return locales[locale] || enUS;\n}\n",".graph > h3 {\n font-size: 1rem;\n margin: 0;\n}\n.graph > .graph-outer {\n border-radius: 5px;\n border: 1px solid var(--lightgray);\n box-sizing: border-box;\n height: 250px;\n margin: 0.5em 0;\n position: relative;\n overflow: hidden;\n}\n.graph > .graph-outer > .global-graph-icon {\n cursor: pointer;\n background: none;\n border: none;\n color: var(--dark);\n opacity: 0.5;\n width: 24px;\n height: 24px;\n position: absolute;\n padding: 0.2rem;\n margin: 0.3rem;\n top: 0;\n right: 0;\n border-radius: 4px;\n background-color: transparent;\n transition: background-color 0.5s ease;\n}\n.graph > .graph-outer > .global-graph-icon:hover {\n background-color: var(--lightgray);\n}\n.graph > .global-graph-outer {\n position: fixed;\n z-index: 9999;\n left: 0;\n top: 0;\n width: 100vw;\n height: 100%;\n backdrop-filter: blur(4px);\n display: none;\n overflow: hidden;\n}\n.graph > .global-graph-outer.active {\n display: inline-block;\n}\n.graph > .global-graph-outer > .global-graph-container {\n border: 1px solid var(--lightgray);\n background-color: var(--light);\n border-radius: 5px;\n box-sizing: border-box;\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n height: 80vh;\n width: 80vw;\n}\n@media all and (max-width: 800px) {\n .graph > .global-graph-outer > .global-graph-container {\n width: 90%;\n }\n}\n\n.graph-container {\n width: 100%;\n height: 100%;\n}","var ct=Object.hasOwnProperty;var ce,y,fe,Ye,Y,De,_e,de,he,Mu,Pu,ju,Ze,Tu={},pe=[],Qe=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,mu=Array.isArray;function z(u,e){for(var t in e)u[t]=e[t];return u}function Uu(u){u&&u.parentNode&&u.parentNode.removeChild(u)}function Lu(u,e,t,n,o){var a={type:u,props:e,key:t,ref:n,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:o??++fe,__i:-1,__u:0};return o==null&&y.vnode!=null&&y.vnode(a),a}function Du(u){return u.children}function Au(u,e){this.props=u,this.context=e}function iu(u,e){if(e==null)return u.__?iu(u.__,u.__i+1):null;for(var t;eF&&Y.sort(de),u=Y.shift(),F=Y.length,u.__d&&(t=void 0,n=void 0,o=(n=(e=u).__v).__e,a=[],s=[],e.__P&&((t=z({},n)).__v=n.__v+1,y.vnode&&y.vnode(t),Ae(e.__P,t,n,e.__n,e.__P.namespaceURI,32&n.__u?[o]:null,a,o??iu(n),!!(32&n.__u),s),t.__v=n.__v,t.__.__k[t.__i]=t,tt(a,t,s),n.__e=n.__=null,t.__e!=o&&Ce(t)));gu.__r=0}function ve(u,e,t,n,o,a,s,F,v,D,d){var r,B,f,m,P,b,p,h=n&&n.__k||pe,M=e.length;for(v=ut(t,e,h,v,M),r=0;r0?s=u.__k[a]=Lu(s.type,s.props,s.key,s.ref?s.ref:null,s.__v):u.__k[a]=s,v=a+B,s.__=u,s.__b=u.__b+1,F=null,(D=s.__i=et(s,t,v,r))!=-1&&(r--,(F=t[D])&&(F.__u|=2)),F==null||F.__v==null?(D==-1&&(o>d?B--:ov?B--:B++,s.__u|=4))):u.__k[a]=null;if(r)for(a=0;a(d?1:0)){for(o=t-1,a=t+1;o>=0||a=0?o--:a++])!=null&&(2&D.__u)==0&&F==D.key&&v==D.type)return s}return-1}function se(u,e,t){e[0]==\"-\"?u.setProperty(e,t??\"\"):u[e]=t==null?\"\":typeof t!=\"number\"||Qe.test(e)?t:t+\"px\"}function Eu(u,e,t,n,o){var a,s;u:if(e==\"style\")if(typeof t==\"string\")u.style.cssText=t;else{if(typeof n==\"string\"&&(u.style.cssText=n=\"\"),n)for(e in n)t&&e in t||se(u.style,e,\"\");if(t)for(e in t)n&&t[e]==n[e]||se(u.style,e,t[e])}else if(e[0]==\"o\"&&e[1]==\"n\")a=e!=(e=e.replace(he,\"$1\")),s=e.toLowerCase(),e=s in u||e==\"onFocusOut\"||e==\"onFocusIn\"?s.slice(2):e.slice(2),u.l||(u.l={}),u.l[e+a]=t,t?n?t.u=n.u:(t.u=Mu,u.addEventListener(e,a?ju:Pu,a)):u.removeEventListener(e,a?ju:Pu,a);else{if(o==\"http://www.w3.org/2000/svg\")e=e.replace(/xlink(H|:h)/,\"h\").replace(/sName$/,\"s\");else if(e!=\"width\"&&e!=\"height\"&&e!=\"href\"&&e!=\"list\"&&e!=\"form\"&&e!=\"tabIndex\"&&e!=\"download\"&&e!=\"rowSpan\"&&e!=\"colSpan\"&&e!=\"role\"&&e!=\"popover\"&&e in u)try{u[e]=t??\"\";break u}catch{}typeof t==\"function\"||(t==null||t===!1&&e[4]!=\"-\"?u.removeAttribute(e):u.setAttribute(e,e==\"popover\"&&t==1?\"\":t))}}function Fe(u){return function(e){if(this.l){var t=this.l[e.type+u];if(e.t==null)e.t=Mu++;else if(e.t0?u:mu(u)?u.map(ge):z({},u)}function rt(u,e,t,n,o,a,s,F,v){var D,d,r,B,f,m,P,b=t.props||Tu,p=e.props,h=e.type;if(h==\"svg\"?o=\"http://www.w3.org/2000/svg\":h==\"math\"?o=\"http://www.w3.org/1998/Math/MathML\":o||(o=\"http://www.w3.org/1999/xhtml\"),a!=null){for(D=0;D\"u\"?\"\":document.body?.dataset?.basepath??\"\"}function Ou(u,e){let t=e??Gu(),n=u.startsWith(\"/\")?u:\"/\"+u;return t+n}function at(u,e){return u===e||u.endsWith(\"/\"+e)}function it(u,e){return at(u,e)&&(u=u.slice(0,-e.length)),u}function Dt(u,e){return u.startsWith(\"/\")&&(u=u.substring(1)),!e&&u.endsWith(\"/\")&&(u=u.slice(0,-1)),u}function ye(u){for(;u.firstChild;)u.removeChild(u.firstChild)}(function(){function u(){var n=Be(),o=Gu();return o&&n.startsWith(o.replace(/^\\//,\"\"))&&(n=n.slice(o.replace(/^\\//,\"\").length),n.startsWith(\"/\")&&(n=n.slice(1))),n}function e(n){return new Promise(function(o,a){var s=document.createElement(\"script\");s.src=n,s.onload=o,s.onerror=a,document.head.appendChild(s)})}Promise.all([e(\"https://cdn.jsdelivr.net/npm/d3@7/dist/d3.min.js\"),e(\"https://cdn.jsdelivr.net/npm/pixi.js@8/dist/pixi.js\")]).then(function(){t()}).catch(function(n){console.error(\"[Graph] Failed to load libraries:\",n)});function t(){var n=window.d3,o=window.PIXI;if(!n||!o){console.error(\"[Graph] Libraries not loaded\");return}var a=\"graph-visited\";function s(){return new Set(JSON.parse(localStorage.getItem(a)||\"[]\"))}function F(_){var w=s();w.add(_),localStorage.setItem(a,JSON.stringify(Array.from(w)))}async function v(_,w,A){var E=lu(w);E===\"\"&&(E=\"index\");var V=s();if(ye(_),A!==void 0&&A!==r)return console.log(\"[Graph] Stale render, skipping\"),function(){};var x=JSON.parse(_.dataset.cfg||\"{}\"),su=x.drag,be=x.zoom,Iu=x.depth,Nu=x.scale||1,xe=x.repelForce||.5,we=x.centerForce||.3,Se=x.linkDistance||30,ke=x.fontSize||.6,Le=x.opacityScale||1,Pe=x.removeTags||[],je=x.showTags,Te=x.focusOnHover,We=x.enableRadial,Z;try{var $u=await fetchData;Z=new Map;for(var zu in $u)Z.set(lu(zu),$u[zu])}catch(i){return console.error(\"[Graph] Error loading data:\",i),function(){}}var R=_.offsetWidth,G=Math.max(_.offsetHeight,250),Q=[],fu=[],Hu=new Set(Z.keys());Z.forEach(function(i,l){for(var c=i.links||[],g=0;g=0)for(var _u=[E],du=new Set([E]),Vu=0;Vu<=Iu&&_u.length>0;Vu++){for(var Bu=[],yu=0;yu<_u.length;yu++){var bu=_u[yu];uu.add(bu);for(var xu=0;xu;\n globalGraph?: Partial;\n}\n\nconst defaultOptions: GraphOptions = {\n localGraph: {\n drag: true,\n zoom: true,\n depth: 1,\n scale: 1.1,\n repelForce: 0.5,\n centerForce: 0.3,\n linkDistance: 30,\n fontSize: 0.6,\n opacityScale: 1,\n showTags: true,\n removeTags: [],\n focusOnHover: false,\n enableRadial: false,\n },\n globalGraph: {\n drag: true,\n zoom: true,\n depth: -1,\n scale: 0.9,\n repelForce: 0.5,\n centerForce: 0.2,\n linkDistance: 30,\n fontSize: 0.6,\n opacityScale: 1,\n showTags: true,\n removeTags: [],\n focusOnHover: true,\n enableRadial: true,\n },\n};\n\nexport default ((userOpts?: Partial) => {\n const Graph: QuartzComponent = ({ displayClass, cfg }: QuartzComponentProps) => {\n const localGraph = { ...defaultOptions.localGraph, ...userOpts?.localGraph };\n const globalGraph = { ...defaultOptions.globalGraph, ...userOpts?.globalGraph };\n\n return (\n
\n

{i18n(cfg.locale ?? \"en-US\").components.graph.title}

\n
\n
\n \n
\n
\n
\n
\n
\n );\n };\n\n Graph.css = style;\n Graph.afterDOMLoaded = script;\n\n return Graph;\n}) satisfies QuartzComponentConstructor;\n"]} \ No newline at end of file diff --git a/src/components/scripts/graph.inline.ts b/src/components/scripts/graph.inline.ts index 7c43942..fe90640 100644 --- a/src/components/scripts/graph.inline.ts +++ b/src/components/scripts/graph.inline.ts @@ -1,12 +1,23 @@ // @ts-nocheck import { removeAllChildren, + getBasePath, getFullSlugFromUrl, simplifySlug, resolveBasePath, } from "@quartz-community/utils"; (function () { + function getSlugFromUrl() { + var slug = getFullSlugFromUrl(); + var base = getBasePath(); + if (base && slug.startsWith(base.replace(/^\//, ""))) { + slug = slug.slice(base.replace(/^\//, "").length); + if (slug.startsWith("/")) slug = slug.slice(1); + } + return slug; + } + function loadScript(src) { return new Promise(function (resolve, reject) { var script = document.createElement("script"); @@ -579,7 +590,13 @@ import { return function () { stopAnimation = true; simulation.stop(); - app.destroy(true); + try { + app.destroy(true); + } catch (e) { + // PixiJS may throw if WebGL context was already lost (e.g. during SPA navigation). + // Swallow the error so cleanup completes and the graph can re-render. + console.warn("[Graph] PixiJS destroy failed (WebGL context likely lost):", e); + } }; } @@ -629,7 +646,7 @@ import { function showGlobalGraph() { cleanupGlobal(); - var currentSlug = getFullSlugFromUrl(); + var currentSlug = getSlugFromUrl(); for (var i = 0; i < globalContainers.length; i++) { var container = globalContainers[i]; container.classList.add("active"); @@ -664,7 +681,7 @@ import { function renderLocal() { cleanupLocal(); var thisGeneration = ++currentRenderGeneration; - var slug = getFullSlugFromUrl(); + var slug = getSlugFromUrl(); addToVisited(slug); var localContainers = document.querySelectorAll(".graph-container"); @@ -684,7 +701,7 @@ import { } function handleNav(e) { - var slug = e.detail ? e.detail.url : getFullSlugFromUrl(); + var slug = e.detail ? e.detail.url : getSlugFromUrl(); addToVisited(simplifySlug(slug)); renderLocal(); @@ -744,10 +761,10 @@ import { if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", function () { - handleNav({ detail: { url: getFullSlugFromUrl() } }); + handleNav({ detail: { url: getSlugFromUrl() } }); }); } else { - handleNav({ detail: { url: getFullSlugFromUrl() } }); + handleNav({ detail: { url: getSlugFromUrl() } }); } document.addEventListener("nav", handleNav); document.addEventListener("render", handleNav);