@kanonak-protocol/sdk 4.6.0 → 4.8.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.
@@ -0,0 +1,152 @@
1
+ import{a as Cn}from"./chunk-4NO7MHS7.js";import{a as An}from"./chunk-PEJALHXK.js";import{d as u}from"./chunk-SHDHMKMJ.js";import{a as M,c as Me,i as Vn}from"./chunk-DSHPAWJQ.js";import{a as Fn}from"./chunk-NJ3AZYQD.js";import{a as pn,b as ue,c as xn,d as w,f as Ne,g as ke,j as gn,k as qe,m as Mn,n as Nn}from"./chunk-PBNVHBS3.js";import{b as Oe,c as G,d as E,g as X,h as me,i as re,j as V,k as H,l as T}from"./chunk-T3JR2SV6.js";import{a as Tn}from"./chunk-FUUTGGJS.js";import{c as en,g as ye}from"./chunk-2ACBWC7K.js";var Te="kanonak.org",Hn="look",We="core-rdf",Et={publisher:Te,package_:Hn,name:"displayLabel"},Kt={publisher:Te,package_:Hn,name:"displaySummary"},Rt={publisher:Te,package_:We,name:"type"},Lt={publisher:Te,package_:We,name:"subClassOf"},Ot={publisher:Te,package_:We,name:"label"},Ut={publisher:Te,package_:We,name:"comment"},Pn=new Tn(Te,We,"Resource");function D(r,e){let n=Dn(r,e,Et)??Ot,t=Dn(r,e,Kt)??Ut,a=gn(e,n)??e.name,s=gn(e,t);return{label:a,summary:s}}function Dn(r,e,n){let t=qe(e,n);if(t)return t;let a=new Set,s=Bn(e,Rt);for(;s.length>0;){let o=s.shift(),i=pn(o);if(a.has(i))continue;a.add(i);let c=Ne(r,o);if(!c)continue;let l=qe(c,n);if(l)return l;s.push(...Bn(c,Lt))}if(!a.has(pn(Pn))){let o=Ne(r,Pn);if(o){let i=qe(o,n);if(i)return i}}}function Bn(r,e){let n=qe(r,e);if(n)return[n];let t=[];for(let a of Mn(r,e))a instanceof E&&t.push(a.subject);return t}function Ye(r,e={}){let n=r.replace(/\r\n/g,`
2
+ `).split(`
3
+ `),t=[],a=0;for(;a<n.length;){let s=n[a];if(s.trim()===""){a++;continue}let o=/^(\s*)```(\S*)\s*$/.exec(s);if(o){let l=o[2],d=[];for(a++;a<n.length&&!/^(\s*)```\s*$/.test(n[a]);)d.push(n[a]),a++;a++;let f=d.join(`
4
+ `),g=l&&e.highlight?e.highlight(l,f):De(f),m=l?` class="language-${Gn(l)}"`:"";t.push(`<pre class="kan-code"><code${m}>${g}</code></pre>`);continue}let i=/^(#{1,6})\s+(.*)$/.exec(s);if(i){let l=i[1].length,d=Pe(i[2].trim());t.push(`<h${l}>${d}</h${l}>`),a++;continue}if(s.includes("|")&&a+1<n.length&&zn(n[a+1])){let l=mn(s),d=It(n[a+1]);a+=2;let f=[];for(;a<n.length&&n[a].trim()!==""&&n[a].includes("|");)f.push(mn(n[a])),a++;t.push(Ct(l,d,f));continue}if(/^\s*[-*]\s+/.test(s)){let l=[];for(;a<n.length&&/^\s*[-*]\s+/.test(n[a]);){let d=[n[a].replace(/^\s*[-*]\s+/,"")];for(a++;a<n.length&&n[a].trim()!==""&&!/^\s*[-*]\s+/.test(n[a])&&!/^\s*\d+\.\s+/.test(n[a]);)d.push(n[a]),a++;a<n.length&&n[a].trim()===""&&a++,l.push(`<li>${Pe(d.join(" ").trim())}</li>`)}t.push(`<ul>
5
+ ${l.join(`
6
+ `)}
7
+ </ul>`);continue}if(/^\s*\d+\.\s+/.test(s)){let l=[];for(;a<n.length&&/^\s*\d+\.\s+/.test(n[a]);){let d=[n[a].replace(/^\s*\d+\.\s+/,"")];for(a++;a<n.length&&n[a].trim()!==""&&!/^\s*\d+\.\s+/.test(n[a])&&!/^\s*[-*]\s+/.test(n[a]);)d.push(n[a]),a++;a<n.length&&n[a].trim()===""&&a++,l.push(`<li>${Pe(d.join(" ").trim())}</li>`)}t.push(`<ol>
8
+ ${l.join(`
9
+ `)}
10
+ </ol>`);continue}let c=[s];for(a++;a<n.length&&n[a].trim()!==""&&!/^(#{1,6})\s+/.test(n[a])&&!/^(\s*)```/.test(n[a])&&!/^\s*[-*]\s+/.test(n[a])&&!/^\s*\d+\.\s+/.test(n[a])&&!(n[a].includes("|")&&a+1<n.length&&zn(n[a+1]));)c.push(n[a]),a++;t.push(`<p>${Pe(c.join(" "))}</p>`)}return t.join(`
11
+ `)}function zn(r){return r.includes("-")?/^[\s|:-]+$/.test(r):!1}function mn(r){let e=r.trim();return e.startsWith("|")&&(e=e.slice(1)),e.endsWith("|")&&(e=e.slice(0,-1)),e.split("|").map(n=>n.trim())}function It(r){return mn(r).map(e=>{let n=e.startsWith(":"),t=e.endsWith(":");return n&&t?"center":t?"right":n?"left":null})}function Ct(r,e,n){let t=o=>{let i=e[o];return i?` style="text-align:${i}"`:""},a=r.map((o,i)=>`<th${t(i)}>${Pe(o)}</th>`).join(""),s=n.map(o=>`<tr>${o.map((c,l)=>`<td${t(l)}>${Pe(c)}</td>`).join("")}</tr>`).join(`
12
+ `);return`<table>
13
+ <thead><tr>${a}</tr></thead>
14
+ <tbody>
15
+ ${s}
16
+ </tbody>
17
+ </table>`}function Pe(r){let e=De(r);return e=e.replace(/`([^`\n]+)`/g,(n,t)=>`<code>${t}</code>`),e=e.replace(/\[([^\]]+)\]\(([^)\s]+)\)/g,(n,t,a)=>`<a href="${Gn(a)}">${t}</a>`),e=e.replace(/\*\*([^*\n]+)\*\*/g,(n,t)=>`<strong>${t}</strong>`),e=e.replace(/(^|[^*])\*([^*\n]+)\*(?!\*)/g,(n,t,a)=>`${t}<em>${a}</em>`),e=e.replace(/(^|[\s(])_([^_\n]+)_(?=[\s).,;:!?]|$)/g,(n,t,a)=>`${t}<em>${a}</em>`),e}function De(r){return r.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function Gn(r){return r.replace(/"/g,"&quot;").replace(/&/g,"&amp;")}var Ft={publisher:"kanonak.org",package_:"core-rdf",name:"label"};function Ae(r){return typeof r=="object"&&r!==null&&r.kind==="raw-string"}var Ee=class extends Error{},Xe=class{constructor(e,n,t=new Map){this.resolver=e;this.catalog=n;this.fragments=t}resolver;catalog;fragments;async evaluate(e,n){switch(e.kind){case"string-literal":return e.value;case"integer-literal":return e.value;case"decimal-literal":return e.value;case"boolean-literal":return e.value;case"uri-literal":return{...e.refTo};case"var-ref":{if(!n.has(e.varName))throw new Ee(`Unbound variable "${e.varName}"`);return n.get(e.varName)}case"concat":{let t=[];for(let a of e.parts){let s=await this.evaluate(a,n);if(s!=null)if(Array.isArray(s))for(let o of s)t.push(o);else t.push(s)}return t}case"fallback":{let t=await this.evaluate(e.primary,n);return qn(t)?t:this.evaluate(e.alternate,n)}case"when":return await this.evaluate(e.condition,n)===!0?this.evaluate(e.thenBuild,n):e.elseBuild?this.evaluate(e.elseBuild,n):void 0;case"is-set":{let t=await this.evaluate(e.check,n);return qn(t)}case"property-read":{let t=await this.evaluate(e.source,n);return nn(t,e.readProp)}case"traverse":{let t=await this.evaluate(e.source,n);if(!(t instanceof Oe))return;let a=Vt(t,e.through),s=[];for(let o of a){let i=ke(this.catalog,o),c=i.length>0?i:[await this.resolver.resolveSubject(o,this.catalog)];for(let l of c){if(!l)continue;let d=new Map(n);d.set("input",l);let f=await this.evaluate(e.step,d);if(f!=null&&Ve(f)!==""){s.push(Ve(f));break}}}return s.join("")}case"uri-name":{let t=await this.evaluate(e.source,n);return Be(t)?t.name:t instanceof E?t.subject.name:t instanceof G?t.name:t instanceof M?t.name??"":void 0}case"uri-publisher":{let t=await this.evaluate(e.source,n);return kn(t)?.publisher}case"uri-package":{let t=await this.evaluate(e.source,n);return kn(t)?.package_}case"uri-version":{let t=await this.evaluate(e.source,n);return kn(t)?.version}case"subject-uri":{let t=await this.evaluate(e.source,n);if(t instanceof G){let a=t.namespace??"",s=t.name??"";return!a||!s?void 0:`${a}/${s}`}if(t instanceof E){let a=t.subject,s=a.version;return s&&typeof s.major=="number"?`${a.publisher}/${a.package_}@${s.major}.${s.minor}.${s.patch}/${a.name}`:`${a.publisher}/${a.package_}/${a.name}`}return}case"display-label":{let t=await this.resolver.resolveSubject({...e.labelTarget},this.catalog);return t?nn(t,e.labelSource):void 0}case"resolve-ref":{let t=await this.evaluate(e.source,n);return t instanceof G?t:t instanceof E?await this.resolver.resolveSubject(t.subject,this.catalog):Be(t)?await this.resolver.resolveSubject(t,this.catalog):void 0}case"normalize":{let t=await this.evaluate(e.source,n),a=t==null?"":Ve(t);return e.normKind==="trim-end"?a.replace(/[\s\r\n]+$/u,""):e.normKind==="to-upper"?a.toUpperCase():e.normKind==="to-lower"?a.toLowerCase():e.normKind==="first-char"?a.length===0?"":a.charAt(0):a}case"unescaped-string":{let t=await this.evaluate(e.source,n);return{kind:"raw-string",value:t==null?"":Ve(t)}}case"render-markdown":{let t=await this.evaluate(e.source,n);if(!(t instanceof Oe))return;let a;for(let o of t.statement){let i=bn(o);if(i&&ue(i,e.readProp)){a=o;break}}if(!(a instanceof Me)){let o=nn(t,e.readProp);return o==null?void 0:Ve(o)}let s=await this.renderMarkdownLinks(a);return e.format==="html"?Ye(s):s}case"build-ast-node":{let t={kind:e.astClass.name};for(let a of e.set){let s=await this.evaluate(a.value,n);if(s==null||Array.isArray(s)&&s.length===0)continue;let o=a.field.name;xt.has(o)&&(Array.isArray(s)&&s.every(i=>Wn(i))?s=s.map(i=>Yn(i)).join(""):Wn(s)&&(s=Yn(s))),t[o]=s}return t}case"call-fragment":{let t=this.fragments.get(e.fragmentKey);if(!t)throw new Ee(`ExpressionFragment ${e.fragmentKey} not found in registry`);return this.evaluate(t,n)}case"join":return(await this.evaluateList(e.source,n)).map(a=>a==null?"":Ve(a)).join(e.separator);case"count":return(await this.evaluateList(e.source,n)).length;case"sum":{let t=await this.evaluateList(e.source,n),a=0;for(let s of t)a+=de(s,"Sum");return a}case"min":{let t=await this.evaluateList(e.source,n);if(t.length===0)throw new Ee("Min on an empty list is undefined; guard with IsSet");let a=de(t[0],"Min");for(let s=1;s<t.length;s++){let o=de(t[s],"Min");o<a&&(a=o)}return a}case"max":{let t=await this.evaluateList(e.source,n);if(t.length===0)throw new Ee("Max on an empty list is undefined; guard with IsSet");let a=de(t[0],"Max");for(let s=1;s<t.length;s++){let o=de(t[s],"Max");o>a&&(a=o)}return a}case"average":{let t=await this.evaluateList(e.source,n);if(t.length===0)throw new Ee("Average on an empty list is undefined; guard with IsSet");let a=0;for(let s of t)a+=de(s,"Average");return a/t.length}case"for-each":{let t=await this.evaluateList(e.source,n),a=[];for(let s of t){let o=new Map(n);o.set(e.loopVar,$e(s));let i=await this.evaluate(e.emit,o);if(i!=null)if(Array.isArray(i))for(let c of i)a.push(c);else a.push(i)}return a}case"list-map":{let t=await this.evaluateList(e.source,n),a=[];for(let s of t){let o=new Map(n);o.set(e.loopVar,$e(s)),a.push(await this.evaluate(e.mapBody,o))}return a}case"filter":{let t=await this.evaluateList(e.source,n),a=[];for(let s of t){let o=new Map(n);o.set(e.loopVar,$e(s)),await this.evaluate(e.predicate,o)===!0&&a.push(s)}return a}case"partition-by":{let t=await this.evaluateList(e.source,n),a=new Map,s=[];for(let o of t){let i=new Map(n);i.set(e.loopVar,$e(o));let c=await this.evaluate(e.partitionKey,i),l=Zn(c),d=a.get(l);d||(d={kind:"Partition",key:c,members:[]},a.set(l,d),s.push(l)),d.members.push(o)}return s.map(o=>a.get(o))}case"distinct-by":{let t=await this.evaluateList(e.source,n),a=new Set,s=[];for(let o of t){let i=new Map(n);i.set(e.loopVar,$e(o));let c=await this.evaluate(e.distinctKey,i),l=Zn(c);a.has(l)||(a.add(l),s.push(o))}return s}case"all-statements":{let t=await this.evaluate(e.source,n);return t instanceof Oe?t.statement:[]}case"statement-predicate":{let t=await this.evaluate(e.source,n);if(hn(t)){let a=t.predicate;if(a instanceof E)return a}return}case"statement-value":{let t=await this.evaluate(e.source,n);return hn(t)?Pt(t):void 0}case"date-format":{let t=await this.evaluate(e.source,n),a=t==null?"":Ve(t);return a?Nt(a,e.format):""}case"add":{let t=de(await this.evaluate(e.left,n),"Add"),a=de(await this.evaluate(e.right,n),"Add");return t+a}case"subtract":{let t=de(await this.evaluate(e.left,n),"Subtract"),a=de(await this.evaluate(e.right,n),"Subtract");return t-a}case"multiply":{let t=de(await this.evaluate(e.left,n),"Multiply"),a=de(await this.evaluate(e.right,n),"Multiply");return t*a}case"divide":{let t=de(await this.evaluate(e.left,n),"Divide"),a=de(await this.evaluate(e.right,n),"Divide");if(a===0)throw new Ee("Divide by zero; guard with When");return t/a}case"reverse":{if(e.source.kind==="reverse")return this.evaluate(e.source.source,n);let t=await this.evaluateReverseIterator(e.source,n);return t!==void 0?t:[...await this.evaluateList(e.source,n)].reverse()}case"windowed-map":{let t=await this.evaluateList(e.source,n);if(t.length<e.windowSize)return[];let a=[];for(let s=0;s+e.windowSize<=t.length;s++){let o=t.slice(s,s+e.windowSize),i=new Map(n);i.set(e.windowVar,o);let c=await this.evaluate(e.windowBody,i);if(c!=null)if(Array.isArray(c))for(let l of c)a.push(l);else a.push(c)}return a}case"pairwise-map":{let t=await this.evaluateList(e.source,n);if(t.length<2)return[];let a=[];for(let s=0;s+1<t.length;s++){let o=new Map(n);o.set(e.firstVar,$e(t[s])),o.set(e.secondVar,$e(t[s+1]));let i=await this.evaluate(e.pairBody,o);if(i!=null)if(Array.isArray(i))for(let c of i)a.push(c);else a.push(i)}return a}case"scan":{let t=await this.evaluateList(e.source,n);if(t.length===0)return[];let a=await this.evaluate(e.initialState,n),s=[];for(let o of t){let i=new Map(n);i.set(e.stateVar,a),i.set(e.elementVar,$e(o));let c=await this.evaluate(e.accumulate,i);s.push(c),a=c}return s}case"list-item-at":{let t=await this.evaluateList(e.source,n),a=await this.evaluate(e.itemIndex,n);return typeof a!="number"||!Number.isInteger(a)||a<0||a>=t.length?void 0:t[a]}case"equals":{let t=await this.evaluate(e.left,n),a=await this.evaluate(e.right,n);return Xn(t,a)}case"greater-than":{let t=await this.evaluate(e.left,n),a=await this.evaluate(e.right,n);return typeof t!="number"||typeof a!="number"?!1:t>a}case"less-than":{let t=await this.evaluate(e.left,n),a=await this.evaluate(e.right,n);return typeof t!="number"||typeof a!="number"?!1:t<a}case"greater-than-or-equal":{let t=await this.evaluate(e.left,n),a=await this.evaluate(e.right,n);return typeof t!="number"||typeof a!="number"?!1:t>=a}case"less-than-or-equal":{let t=await this.evaluate(e.left,n),a=await this.evaluate(e.right,n);return typeof t!="number"||typeof a!="number"?!1:t<=a}case"not":{let t=await this.evaluate(e.operand,n);return t===!0?!1:t===!1?!0:void 0}case"and":{for(let t of e.operands)if(await this.evaluate(t,n)!==!0)return!1;return!0}case"or":{for(let t of e.operands)if(await this.evaluate(t,n)===!0)return!0;return!1}case"contains":{let t=await this.evaluateList(e.haystack,n),a=await this.evaluate(e.needle,n);for(let s of t)if(Xn(s,a))return!0;return!1}case"abs":{let t=de(await this.evaluate(e.value,n),"Abs");return Math.abs(t)}case"negate":return-de(await this.evaluate(e.value,n),"Negate");case"is-reference":{let t=await this.evaluate(e.check,n);return t instanceof E||t instanceof G}case"is-embedded":return await this.evaluate(e.check,n)instanceof M;case"is-list":{let t=await this.evaluate(e.check,n);return Array.isArray(t)}case"is-string":return typeof await this.evaluate(e.check,n)=="string";case"is-number":return typeof await this.evaluate(e.check,n)=="number";case"is-boolean":return typeof await this.evaluate(e.check,n)=="boolean";case"statement-object":{let t=await this.evaluate(e.source,n);if(!hn(t))return;let a=t;return a instanceof X||a instanceof me||a instanceof re||a instanceof V||a instanceof H||a instanceof T?a.object:void 0}case"let":{let t=await this.evaluate(e.bindValue,n),a=new Map(n);return a.set(e.bindName,t),this.evaluate(e.body,a)}case"get-statement-by-name":{let t=await this.evaluate(e.inSubject,n),a=await this.evaluate(e.byName,n);if(!(t instanceof Oe)||typeof a!="string")return;for(let s of t.statement)if(s.predicate?.subject?.name===a)return s;return}default:{let t=e;throw new Ee("Unknown expression kind")}}}async renderMarkdownLinks(e){let n=e.object,t="",a=0;for(let s of e.links){if(t+=n.slice(a,s.startOffset),s.target){let o=s.target.subject,i=s.displayText??await this.resolveLabel(o)??o.name;t+=`[${i}](${xn(o)})`}else t+=s.displayText??s.reference;a=s.endOffset}return t+=n.slice(a),t}async resolveLabel(e){let n=await this.resolver.resolveSubject(e,this.catalog);if(!n)return;let t=nn(n,Ft);return typeof t=="string"?t:void 0}async evaluateList(e,n){let t=await this.evaluate(e,n);return t==null?[]:Array.isArray(t)?t:[t]}async evaluateReverseIterator(e,n){if(e.kind==="pairwise-map"){let t=await this.evaluateList(e.source,n);if(t.length<2)return[];let a=[];for(let s=t.length-1;s>=1;s--){let o=new Map(n);o.set(e.firstVar,$e(t[s-1])),o.set(e.secondVar,$e(t[s]));let i=await this.evaluate(e.pairBody,o);if(i!=null)if(Array.isArray(i))for(let c of i)a.push(c);else a.push(i)}return a}if(e.kind==="for-each"){let t=await this.evaluateList(e.source,n),a=[];for(let s=t.length-1;s>=0;s--){let o=new Map(n);o.set(e.loopVar,$e(t[s]));let i=await this.evaluate(e.emit,o);if(i!=null)if(Array.isArray(i))for(let c of i)a.push(c);else a.push(i)}return a}if(e.kind==="list-map"){let t=await this.evaluateList(e.source,n),a=[];for(let s=t.length-1;s>=0;s--){let o=new Map(n);o.set(e.loopVar,$e(t[s])),a.push(await this.evaluate(e.mapBody,o))}return a}if(e.kind==="windowed-map"){let t=await this.evaluateList(e.source,n);if(t.length<e.windowSize)return[];let a=[];for(let s=t.length-e.windowSize;s>=0;s--){let o=t.slice(s,s+e.windowSize),i=new Map(n);i.set(e.windowVar,o);let c=await this.evaluate(e.windowBody,i);if(c!=null)if(Array.isArray(c))for(let l of c)a.push(l);else a.push(c)}return a}}};function nn(r,e){if(r instanceof Oe)return Tt(r,e);if(At(r))return ue(e,u.key)?r.key:ue(e,u.members)?r.members:void 0}function Tt(r,e){for(let n of r.statement){let t=bn(n);if(!(!t||!ue(t,e))&&(n instanceof X||n instanceof me||n instanceof re||n instanceof V||n instanceof H||n instanceof T))return n.object}}function Vt(r,e){let n=[];for(let t of r.statement){let a=bn(t);if(!(!a||!ue(a,e))){if(t instanceof V)n.push(t.object.subject);else if(t instanceof T)for(let s of t.object)s instanceof E&&n.push(s.subject)}}return n}function bn(r){return r.predicate?.subject}function Ve(r){if(r==null)return"";if(typeof r=="string")return r;if(typeof r=="number"||typeof r=="boolean")return String(r);if(Ae(r))return r.value;if(r instanceof Oe)return r.name??"";if(r instanceof E)return r.subject.name;if(Be(r))return r.name;let e=r.value;return typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):""}function $e(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)&&!(r instanceof Oe)&&!(r instanceof E)&&!(r instanceof M)&&"value"in r?r.value:r}function qn(r){return r==null?!1:typeof r=="string"||Array.isArray(r)?r.length>0:typeof r=="boolean"?r===!0:!0}function Be(r){return typeof r=="object"&&r!==null&&typeof r.publisher=="string"&&typeof r.package_=="string"&&typeof r.name=="string"}function At(r){return typeof r=="object"&&r!==null&&r.kind==="Partition"&&Array.isArray(r.members)}function de(r,e){if(typeof r=="number"&&Number.isFinite(r))return r;throw new Ee(`${e} requires numeric elements; got ${Mt(r)}`)}function kn(r){if(r instanceof G){let e=r.namespace??"",n=e.indexOf("/"),t=e.indexOf("@",n+1);return n<0||t<0?void 0:{publisher:e.substring(0,n),package_:e.substring(n+1,t),version:e.substring(t+1),name:r.name??""}}if(r instanceof E){let e=r.subject,n=e.version;return{publisher:e.publisher,package_:e.package_,version:n&&typeof n.major=="number"?`${n.major}.${n.minor}.${n.patch}`:"",name:e.name}}if(Be(r))return{publisher:r.publisher,package_:r.package_,version:"",name:r.name}}var xt=new Set(["stringValue","text","rawContent","key","propertyKey","linkLabel"]);function Wn(r){return typeof r=="string"||typeof r=="number"||typeof r=="boolean"||Ae(r)}function Yn(r){return Ae(r)?r.value:String(r)}function Mt(r){return r===void 0?"undefined":r===null?"null":Array.isArray(r)?`array(${r.length})`:typeof r}function Nt(r,e){let n=new Date(r);if(isNaN(n.getTime()))return"";let t=n.getUTCFullYear(),a=["January","February","March","April","May","June","July","August","September","October","November","December"][n.getUTCMonth()],s=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][n.getUTCMonth()],o=n.getUTCDate(),i=(c,l=2)=>String(c).padStart(l,"0");switch(e){case"iso-date":return`${t}-${i(n.getUTCMonth()+1)}-${i(o)}`;case"iso-datetime":return`${t}-${i(n.getUTCMonth()+1)}-${i(o)}T${i(n.getUTCHours())}:${i(n.getUTCMinutes())}:${i(n.getUTCSeconds())}Z`;case"short-date":return`${s} ${o}`;case"long-date":return`${a} ${o}, ${t}`;case"year":return String(t);case"month-year":return`${a} ${t}`}}function Xn(r,e){if(r==null||e===void 0||e===null)return!1;if(r===e)return!0;let n=typeof r=="object"&&"value"in r?r.value:void 0,t=typeof e=="object"&&"value"in e?e.value:void 0,a=n??r,s=t??e,o=Jn(r),i=Jn(e);return o&&i?o.publisher===i.publisher&&o.package_===i.package_&&o.name===i.name:typeof a=="string"&&typeof s=="string"||typeof a=="number"&&typeof s=="number"||typeof a=="boolean"&&typeof s=="boolean"?a===s:!1}function Jn(r){if(r instanceof E){let e=r.subject;return{publisher:e.publisher,package_:e.package_,name:e.name}}if(r instanceof G){let e=r.namespace??"",n=e.indexOf("/"),t=e.indexOf("@",n+1);if(n<0)return;let a=e.substring(0,n),s=t>=0?e.substring(n+1,t):e.substring(n+1);return{publisher:a,package_:s,name:r.name??""}}if(Be(r))return{publisher:r.publisher,package_:r.package_,name:r.name}}function hn(r){return r instanceof X||r instanceof me||r instanceof re||r instanceof V||r instanceof H||r instanceof T}function Pt(r){return r instanceof X||r instanceof me||r instanceof re?String(r.object??""):r instanceof V?r.object?.subject?.name??"":r instanceof H?"[embedded]":r instanceof T?(r.object??[]).map(n=>{if(n instanceof E)return n.subject.name;let t=n.name;if(t&&t.length>0)return t;let a=n.value;return typeof a=="string"||typeof a=="number"||typeof a=="boolean"?String(a):"[embedded]"}).join(", "):""}function Zn(r){if(r===void 0)return"\0undef";if(r===null)return"\0null";if(typeof r=="string")return`s:${r}`;if(typeof r=="number")return`n:${r}`;if(typeof r=="boolean")return`b:${r}`;if(r instanceof E){let e=r.subject;return`r:${e.publisher}/${e.package_}/${e.name}`}if(r instanceof Oe){let e=r.name??"";return`k:${r.namespace??""}/${e}`}return Be(r)?`u:${r.publisher}/${r.package_}/${r.name}`:`o:${JSON.stringify(r)}`}var q=class extends Error{constructor(n,t){super(`${n} (at ${t})`);this.path=t}path};function us(r,e){let n=r.name,t=Zt(e),a={catalog:e,depth:0};if(w(r,u.InstanceTransformation))return Dt(r,n,a,t);if(w(r,u.SetTransformation))return Bt(r,n,a,t);throw new q("Subject is not a recognized v3 transformation type \u2014 expected InstanceTransformation or SetTransformation",n)}function Dt(r,e,n,t){return{kind:"instance",name:r.name,inputPattern:rt(r,e),rule:tn(r,u.rule,`${e}.rule`,n),artifactName:tn(r,u.artifactName,`${e}.artifactName`,n),outputs:st(r,`${e}.outputs`),overrides:ot(r,`${e}.formatOverrides`,n),fragments:t}}function Bt(r,e,n,t){let a=Ie(r,u.partitionBy);return{kind:"set",name:r.name,inputPattern:rt(r,e),rule:tn(r,u.rule,`${e}.rule`,n),artifactName:tn(r,u.artifactName,`${e}.artifactName`,n),outputs:st(r,`${e}.outputs`),overrides:ot(r,`${e}.formatOverrides`,n),partitionBy:a,fragments:t}}function rt(r,e){let n=Je(r,u.inputPattern);if(!n)throw new q("inputPattern is required",e);return Ht(n,`${e}.inputPattern`)}function Ht(r,e){let n=Ie(r,u.matchesClass);if(!n)throw new q("matchesClass is required",e);let t=[];for(let o of ve(r,u.requires))if(o instanceof V)t.push($n(o.object.subject));else if(o instanceof T)for(let i of o.object)i instanceof E&&t.push($n(i.subject));let a=[],s=0;for(let o of ve(r,u.sortBy))if(o instanceof T)for(let i of o.object)i instanceof M&&a.push(Qn(i,`${e}.sortBy[${s++}]`));else o instanceof H&&a.push(Qn(o.object,`${e}.sortBy[${s++}]`));return{matchesClass:n,requires:t,sortBy:a}}function Qn(r,e){let n=Ie(r,u.byProperty);if(!n)throw new q("SortKey.byProperty is required",e);let t=Ie(r,u.order);if(!t)throw new q("SortKey.order is required",e);if(ue(t,u.ascending))return{byProperty:n,order:"ascending"};if(ue(t,u.descending))return{byProperty:n,order:"descending"};throw new q(`SortKey.order must reference tx.ascending or tx.descending; got ${t.publisher}/${t.package_}/${t.name}`,e)}function tn(r,e,n,t){let a=Je(r,e);if(!a)throw new q("expression is required",n);return Ue(a,n,t)}function Ue(r,e,n){if(w(r,u.StringLiteral))return{kind:"string-literal",value:he(r,u.stringLiteral,e)};if(w(r,u.IntegerLiteral))return{kind:"integer-literal",value:at(r,u.integerLiteral,e)};if(w(r,u.DecimalLiteral))return{kind:"decimal-literal",value:at(r,u.decimalLiteral,e)};if(w(r,u.BooleanLiteral))return{kind:"boolean-literal",value:na(r,u.booleanLiteral,e)};if(w(r,u.VarRef))return{kind:"var-ref",varName:he(r,u.varName,e)};if(w(r,u.PropertyRead))return{kind:"property-read",source:y(r,u.readSource,`${e}.readSource`,n),readProp:Ce(r,u.readProp,e,"readProp")};if(w(r,u.Traverse))return{kind:"traverse",source:y(r,u.traverseSource,`${e}.traverseSource`,n),through:Ce(r,u.through,e,"through"),step:y(r,u.step,`${e}.step`,n)};if(w(r,u.BuildAstNode))return{kind:"build-ast-node",astClass:Ce(r,u.astClass,e,"astClass"),set:Gt(r,`${e}.set`,n)};if(w(r,u.When))return{kind:"when",condition:y(r,u.condition,`${e}.condition`,n),thenBuild:y(r,u.thenBuild,`${e}.thenBuild`,n),elseBuild:zt(r,u.elseBuild,`${e}.elseBuild`,n)};if(w(r,u.Concat))return{kind:"concat",parts:vn(r,u.parts,`${e}.parts`,n)};if(w(r,u.Fallback))return{kind:"fallback",primary:y(r,u.primary,`${e}.primary`,n),alternate:y(r,u.alternate,`${e}.alternate`,n)};if(w(r,u.UriName))return{kind:"uri-name",source:y(r,u.uriNameOf,`${e}.uriNameOf`,n)};if(w(r,u.UriPublisher))return{kind:"uri-publisher",source:y(r,u.uriPublisherOf,`${e}.uriPublisherOf`,n)};if(w(r,u.UriPackage))return{kind:"uri-package",source:y(r,u.uriPackageOf,`${e}.uriPackageOf`,n)};if(w(r,u.UriVersion))return{kind:"uri-version",source:y(r,u.uriVersionOf,`${e}.uriVersionOf`,n)};if(w(r,u.SubjectUri))return{kind:"subject-uri",source:y(r,u.subjectOf,`${e}.subjectOf`,n)};if(w(r,u.UriLiteral))return{kind:"uri-literal",refTo:Ce(r,u.refTo,e,"refTo")};if(w(r,u.DisplayLabel))return{kind:"display-label",labelTarget:Ce(r,u.labelTarget,e,"labelTarget"),labelSource:Ce(r,u.labelSource,e,"labelSource")};if(w(r,u.ResolveRef))return{kind:"resolve-ref",source:y(r,u.resolveSource,`${e}.resolveSource`,n)};if(w(r,u.Normalize))return{kind:"normalize",source:y(r,u.normSource,`${e}.normSource`,n),normKind:qt(r,e)};if(w(r,u.UnescapedString))return{kind:"unescaped-string",source:y(r,u.unescapedSource,`${e}.unescapedSource`,n)};if(w(r,u.RenderMarkdown))return{kind:"render-markdown",source:y(r,u.renderSource,`${e}.renderSource`,n),readProp:Ce(r,u.renderProp,e,"renderProp"),format:Wt(r,e)};if(w(r,u.IsSet))return{kind:"is-set",check:y(r,u.checkExpr,`${e}.checkExpr`,n)};if(w(r,u.CallFragment))return Xt(r,e,n);if(w(r,u.Join))return{kind:"join",source:y(r,u.source,`${e}.source`,n),separator:he(r,u.separator,e)};if(w(r,u.Count))return{kind:"count",source:y(r,u.source,`${e}.source`,n)};if(w(r,u.Sum))return{kind:"sum",source:y(r,u.source,`${e}.source`,n)};if(w(r,u.Min))return{kind:"min",source:y(r,u.source,`${e}.source`,n)};if(w(r,u.Max))return{kind:"max",source:y(r,u.source,`${e}.source`,n)};if(w(r,u.Average))return{kind:"average",source:y(r,u.source,`${e}.source`,n)};if(w(r,u.ForEach))return{kind:"for-each",source:y(r,u.source,`${e}.source`,n),loopVar:he(r,u.loopVar,e),emit:y(r,u.emit,`${e}.emit`,n)};if(w(r,u.ListMap))return{kind:"list-map",source:y(r,u.source,`${e}.source`,n),loopVar:he(r,u.loopVar,e),mapBody:y(r,u.mapBody,`${e}.mapBody`,n)};if(w(r,u.Filter))return{kind:"filter",source:y(r,u.source,`${e}.source`,n),loopVar:he(r,u.loopVar,e),predicate:y(r,u.predicate,`${e}.predicate`,n)};if(w(r,u.PartitionBy))return{kind:"partition-by",source:y(r,u.source,`${e}.source`,n),loopVar:he(r,u.loopVar,e),partitionKey:y(r,u.partitionKey,`${e}.partitionKey`,n)};if(w(r,u.DistinctBy))return{kind:"distinct-by",source:y(r,u.source,`${e}.source`,n),loopVar:he(r,u.loopVar,e),distinctKey:y(r,u.distinctKey,`${e}.distinctKey`,n)};if(w(r,u.AllStatements))return{kind:"all-statements",source:y(r,u.statementsOf,`${e}.statementsOf`,n)};if(w(r,u.StatementPredicate))return{kind:"statement-predicate",source:y(r,u.predicateOf,`${e}.predicateOf`,n)};if(w(r,u.StatementValue))return{kind:"statement-value",source:y(r,u.valueOf,`${e}.valueOf`,n)};if(w(r,u.DateFormat))return{kind:"date-format",source:y(r,u.dateSource,`${e}.dateSource`,n),format:Yt(r,e)};if(w(r,u.Add))return{kind:"add",left:y(r,u.arithLeft,`${e}.arithLeft`,n),right:y(r,u.arithRight,`${e}.arithRight`,n)};if(w(r,u.Subtract))return{kind:"subtract",left:y(r,u.arithLeft,`${e}.arithLeft`,n),right:y(r,u.arithRight,`${e}.arithRight`,n)};if(w(r,u.Multiply))return{kind:"multiply",left:y(r,u.arithLeft,`${e}.arithLeft`,n),right:y(r,u.arithRight,`${e}.arithRight`,n)};if(w(r,u.Divide))return{kind:"divide",left:y(r,u.arithLeft,`${e}.arithLeft`,n),right:y(r,u.arithRight,`${e}.arithRight`,n)};if(w(r,u.Reverse))return{kind:"reverse",source:y(r,u.source,`${e}.source`,n)};if(w(r,u.WindowedMap)){let t=it(r,u.windowSize);if(t===void 0||!Number.isInteger(t)||t<1)throw new q("windowSize must be a positive integer",`${e}.windowSize`);return{kind:"windowed-map",source:y(r,u.source,`${e}.source`,n),windowSize:t,windowVar:he(r,u.windowVar,e),windowBody:y(r,u.windowBody,`${e}.windowBody`,n)}}if(w(r,u.PairwiseMap))return{kind:"pairwise-map",source:y(r,u.source,`${e}.source`,n),firstVar:he(r,u.firstVar,e),secondVar:he(r,u.secondVar,e),pairBody:y(r,u.pairBody,`${e}.pairBody`,n)};if(w(r,u.Scan))return{kind:"scan",source:y(r,u.source,`${e}.source`,n),initialState:y(r,u.initialState,`${e}.initialState`,n),stateVar:he(r,u.stateVar,e),elementVar:he(r,u.elementVar,e),accumulate:y(r,u.accumulate,`${e}.accumulate`,n)};if(w(r,u.ListItemAt))return{kind:"list-item-at",source:y(r,u.source,`${e}.source`,n),itemIndex:y(r,u.itemIndex,`${e}.itemIndex`,n)};if(w(r,u.Equals))return{kind:"equals",left:y(r,u.compareLeft,`${e}.compareLeft`,n),right:y(r,u.compareRight,`${e}.compareRight`,n)};if(w(r,u.GreaterThan))return{kind:"greater-than",left:y(r,u.compareLeft,`${e}.compareLeft`,n),right:y(r,u.compareRight,`${e}.compareRight`,n)};if(w(r,u.LessThan))return{kind:"less-than",left:y(r,u.compareLeft,`${e}.compareLeft`,n),right:y(r,u.compareRight,`${e}.compareRight`,n)};if(w(r,u.GreaterThanOrEqual))return{kind:"greater-than-or-equal",left:y(r,u.compareLeft,`${e}.compareLeft`,n),right:y(r,u.compareRight,`${e}.compareRight`,n)};if(w(r,u.LessThanOrEqual))return{kind:"less-than-or-equal",left:y(r,u.compareLeft,`${e}.compareLeft`,n),right:y(r,u.compareRight,`${e}.compareRight`,n)};if(w(r,u.Not))return{kind:"not",operand:y(r,u.operand,`${e}.operand`,n)};if(w(r,u.And))return{kind:"and",operands:vn(r,u.operands,`${e}.operands`,n)};if(w(r,u.Or))return{kind:"or",operands:vn(r,u.operands,`${e}.operands`,n)};if(w(r,u.Contains))return{kind:"contains",haystack:y(r,u.haystack,`${e}.haystack`,n),needle:y(r,u.needle,`${e}.needle`,n)};if(w(r,u.Abs))return{kind:"abs",value:y(r,u.value,`${e}.value`,n)};if(w(r,u.Negate))return{kind:"negate",value:y(r,u.value,`${e}.value`,n)};if(w(r,u.IsReference))return{kind:"is-reference",check:y(r,u.kindCheck,`${e}.kindCheck`,n)};if(w(r,u.IsEmbedded))return{kind:"is-embedded",check:y(r,u.kindCheck,`${e}.kindCheck`,n)};if(w(r,u.IsList))return{kind:"is-list",check:y(r,u.kindCheck,`${e}.kindCheck`,n)};if(w(r,u.IsString))return{kind:"is-string",check:y(r,u.kindCheck,`${e}.kindCheck`,n)};if(w(r,u.IsNumber))return{kind:"is-number",check:y(r,u.kindCheck,`${e}.kindCheck`,n)};if(w(r,u.IsBoolean))return{kind:"is-boolean",check:y(r,u.kindCheck,`${e}.kindCheck`,n)};if(w(r,u.StatementObject))return{kind:"statement-object",source:y(r,u.statementSource,`${e}.statementSource`,n)};if(w(r,u.Let))return{kind:"let",bindName:he(r,u.letName,e),bindValue:y(r,u.letValue,`${e}.letValue`,n),body:y(r,u.letBody,`${e}.letBody`,n)};if(w(r,u.GetStatementByName))return{kind:"get-statement-by-name",inSubject:y(r,u.inSubject,`${e}.inSubject`,n),byName:y(r,u.byName,`${e}.byName`,n)};throw new q("Expression is not of a recognized v3 type \u2014 embedded has no matching subclass of tx.Expression",e)}function y(r,e,n,t){let a=Je(r,e);if(!a)throw new q("child expression is required",n);return Ue(a,n,t)}function zt(r,e,n,t){let a=Je(r,e);if(a)return Ue(a,n,t)}function vn(r,e,n,t){let a=[],s=0;for(let o of ve(r,e))if(o instanceof T)for(let i of o.object)i instanceof M&&a.push(Ue(i,`${n}[${s++}]`,t));else o instanceof H&&a.push(Ue(o.object,`${n}[${s++}]`,t));return a}function Gt(r,e,n){let t=[],a=0;for(let s of ve(r,u.set))if(s instanceof T)for(let o of s.object)o instanceof M&&t.push(et(o,`${e}[${a++}]`,n));else s instanceof H&&t.push(et(s.object,`${e}[${a++}]`,n));return t}function et(r,e,n){return{field:Ce(r,u.field,e,"field"),value:y(r,u.bindValue,`${e}.bindValue`,n)}}function qt(r,e){let n=Ie(r,u.normKind);if(!n)throw new q("normKind is required",e);if(ue(n,u.NORM_TRIM_END))return"trim-end";if(ue(n,u.NORM_TO_UPPER))return"to-upper";if(ue(n,u.NORM_TO_LOWER))return"to-lower";if(ue(n,u.NORM_FIRST_CHAR))return"first-char";throw new q(`Unknown NormalizeKind: ${n.publisher}/${n.package_}/${n.name}`,e)}function Wt(r,e){let n=Ie(r,u.renderFormat);if(!n)throw new q("renderFormat is required",e);if(ue(n,u.RENDER_HTML))return"html";if(ue(n,u.RENDER_MARKDOWN))return"markdown";throw new q(`Unknown RenderFormat: ${n.publisher}/${n.package_}/${n.name}`,e)}var nt=new Set(["iso-date","iso-datetime","short-date","long-date","year","month-year"]);function Yt(r,e){let n=He(r,u.dateFormat);if(!n)throw new q("dateFormat is required",e);if(!nt.has(n))throw new q(`Unknown dateFormat "${n}"; supported: ${[...nt].join(", ")}`,e);return n}function Xt(r,e,n){let t=Ie(r,u.fragmentRef);if(!t)throw new q("fragmentRef is required",e);if(!Qt(n.catalog,t))throw new q(`ExpressionFragment not found: ${t.publisher}/${t.package_}/${t.name}`,e);return{kind:"call-fragment",fragmentKey:Jt(t)}}function Jt(r){return`${r.publisher}/${r.package_}/${r.name}`}function Zt(r){let e=new Map,n=[];for(let t of r){if(!(t instanceof G)||!w(t,u.ExpressionFragment))continue;let a=Je(t,u.body);if(!a)continue;let s=(t.namespace||"").split("@")[0]||"",o=s.indexOf("/");if(o<0)continue;let i=s.substring(0,o),c=s.substring(o+1),l=`${i}/${c}/${t.name}`;n.push({key:l,subject:t,bodyEmb:a,pubPkgName:`${s}/${t.name}`})}for(let t of n){let a=Ue(t.bodyEmb,`fragment(${t.pubPkgName})`,{catalog:r,depth:0});e.set(t.key,a)}return e}function Qt(r,e){for(let n of r)if(!(!(n instanceof G)||n.name!==e.name||!(n.namespace||"").startsWith(`${e.publisher}/${e.package_}@`))&&w(n,u.ExpressionFragment))return n}function st(r,e){let n=new Set;for(let t of ve(r,u.outputs))if(t instanceof V)n.add(t.object.subject.name);else if(t instanceof T)for(let a of t.object)a instanceof E&&n.add(a.subject.name);if(n.size===0)throw new q("outputs is required (at least one OutputFormat)",e);return n}function ot(r,e,n){let t=new Map,a=0;for(let s of ve(r,u.formatOverrides))if(s instanceof T){for(let o of s.object)if(o instanceof M){let[i,c]=tt(o,`${e}[${a++}]`);t.set(i,c)}}else if(s instanceof H){let[o,i]=tt(s.object,`${e}[${a++}]`);t.set(o,i)}return t}function tt(r,e){let n=Ie(r,u.formatTarget);if(!n)throw new q("formatTarget is required",e);let t=[];for(let i of ve(r,u.metadataKeys))if(i instanceof X)t.push(i.object);else if(i instanceof T)for(let c of i.object){let l=c.value;typeof l=="string"&&t.push(l)}let a=new Map;for(let i of ve(r,u.metadataRenames))if(i instanceof T){for(let c of i.object)if(c instanceof M){let l=He(c,u.fromKey),d=He(c,u.toKey);l&&d&&a.set(l,d)}}else if(i instanceof H){let c=i.object,l=He(c,u.fromKey),d=He(c,u.toKey);l&&d&&a.set(l,d)}let s=yn(r,u.trailingNewline),o=yn(r,u.omitWrapper);return[n.name,{metadataKeys:t.length>0?t:void 0,metadataRenames:a,trailingNewline:s,omitWrapper:o}]}function ea(r){return r.predicate?.subject}function ve(r,e){let n=[];for(let t of r.statement){let a=ea(t);a&&ue(a,e)&&n.push(t)}return n}function Je(r,e){for(let n of ve(r,e))if(n instanceof H)return n.object}function Ie(r,e){for(let n of ve(r,e))if(n instanceof V)return $n(n.object.subject)}function He(r,e){for(let n of ve(r,e))if(n instanceof X)return n.object}function it(r,e){for(let n of ve(r,e))if(n instanceof me)return n.object}function yn(r,e){for(let n of ve(r,e))if(n instanceof re)return n.object}function he(r,e,n){let t=He(r,e);if(t===void 0)throw new q(`${e.name} (string) is required`,n);return t}function at(r,e,n){let t=it(r,e);if(t===void 0)throw new q(`${e.name} (number) is required`,n);return t}function na(r,e,n){let t=yn(r,e);if(t===void 0)throw new q(`${e.name} (boolean) is required`,n);return t}function Ce(r,e,n,t){let a=Ie(r,e);if(!a)throw new q(`${t} (URI reference) is required`,n);return a}function $n(r){return{publisher:r.publisher,package_:r.package_,name:r.name}}var an=class{constructor(e,n,t){this.repository=e;this.parser=n;this.objectParser=t}repository;parser;objectParser;cache=new Map;async resolveSubject(e,n){let t=Ne(n,e);if(t)return t;let a=e.version,s=a&&typeof a.major=="number"?`@${a.major}.${a.minor}.${a.patch}`:"",o=`${e.publisher}/${e.package_}${s}`,i=this.cache.get(o);if(!i){let l=await this.repository.getDocumentsByNamespaceAsync(e.publisher,e.package_);if(l.length===0)return;let d=a&&typeof a.major=="number"?l.find(g=>{let m=g.metadata?.namespace_?.version;return m&&m.major===a.major&&m.minor===a.minor&&m.patch===a.patch})??l[0]:l[0],f=new Nn(d,this.repository);i=await this.objectParser.parseKanonaks(f),this.cache.set(o,i)}let c=Ne(i,e);if(c)return c;for(let l of i)if(l instanceof G&&l.name===e.name)return l}};var rn=class{byLang=new Map;constructor(e){for(let n of e){if(!n.language)continue;let t=[];for(let a of n.rules){if(!a.tokenClass||!a.pattern)continue;let s;try{s=new RegExp(a.pattern,"y")}catch{continue}t.push({tokenClass:a.tokenClass,re:s})}this.byLang.set(n.language,t)}}has(e){return this.byLang.has(e)}highlight(e,n){let t=this.byLang.get(e);return!t||t.length===0?De(n):n.split(`
18
+ `).map(a=>this.highlightLine(a,t)).join(`
19
+ `)}highlightLine(e,n){let t="",a=0;for(;a<e.length;){let s=!1;for(let o of n){o.re.lastIndex=a;let i=o.re.exec(e);if(i&&i[0].length>0){t+=`<span class="kan-tok-${o.tokenClass}">${De(i[0])}</span>`,a+=i[0].length,s=!0;break}}s||(t+=De(e[a]),a++)}return t}};var un={publisher:"kanonak.org",package_:"derivation",name:"look"},dn={publisher:"kanonak.org",package_:"derivation",name:"tokens"},Se={publisher:"kanonak.org",package_:"core-rdf",name:"Resource"},wn={publisher:"kanonak.org",package_:"core-rdf",name:"label"},ct={publisher:"kanonak.org",package_:"core-rdf",name:"comment"},ta={publisher:"kanonak.org",package_:"core-rdf",name:"range"},aa={publisher:"kanonak.org",package_:"core-rdf",name:"Class"},ra={publisher:"kanonak.org",package_:"core-owl",name:"Class"},sa={publisher:"kanonak.org",package_:"look",name:"Hero"},oa={publisher:"kanonak.org",package_:"look",name:"PropertyList"},ia={publisher:"kanonak.org",package_:"look",name:"PropertyTable"},ca={publisher:"kanonak.org",package_:"look",name:"BadgeRow"},la={publisher:"kanonak.org",package_:"look",name:"ChipRow"},ua={publisher:"kanonak.org",package_:"look",name:"ReferenceList"},da={publisher:"kanonak.org",package_:"look",name:"ReferencedBy"},fa={publisher:"kanonak.org",package_:"look",name:"Instances"},lt={publisher:"kanonak.org",package_:"look",name:"Markdown"},pa={publisher:"kanonak.org",package_:"look",name:"NavGroup"},ga={publisher:"kanonak.org",package_:"look",name:"nav"},jn={publisher:"kanonak.org",package_:"look",name:"NavLink"},ma={publisher:"kanonak.org",package_:"look",name:"footer"},ka={publisher:"kanonak.org",package_:"look",name:"text"},ha={publisher:"kanonak.org",package_:"look",name:"links"},ut={publisher:"kanonak.org",package_:"look",name:"target"},ba={publisher:"kanonak.org",package_:"look",name:"ResourceGrid"},va={publisher:"kanonak.org",package_:"look",name:"Timeline"},ya={publisher:"kanonak.org",package_:"look",name:"VersionDiff"},$a={publisher:"kanonak.org",package_:"look",name:"Figure"},wa={publisher:"kanonak.org",package_:"look",name:"Diagram"},ja={publisher:"kanonak.org",package_:"look",name:"facets"},Sa={publisher:"kanonak.org",package_:"look",name:"relation"},_a={publisher:"kanonak.org",package_:"look",name:"encode"},Ea={publisher:"kanonak.org",package_:"look",name:"cluster"},Ka={publisher:"kanonak.org",package_:"look",name:"connector"},Ra={publisher:"kanonak.org",package_:"look",name:"channels"},La={publisher:"kanonak.org",package_:"look",name:"mapPath"},Oa={publisher:"kanonak.org",package_:"look",name:"to"},Ua={publisher:"kanonak.org",package_:"look",name:"mark"},Ia={publisher:"kanonak.org",package_:"look",name:"expand"},Ca={publisher:"kanonak.org",package_:"look",name:"edges"},Fa={publisher:"kanonak.org",package_:"look",name:"nodeTier"},Ta={publisher:"kanonak.org",package_:"look",name:"diagramTier"},Va={publisher:"kanonak.org",package_:"look",name:"nodeNote"},Aa={publisher:"kanonak.org",package_:"look",name:"edgeLabel"},xa={publisher:"kanonak.org",package_:"look",name:"labelEdges"},Ma={publisher:"kanonak.org",package_:"look",name:"edgeValue"},Na={publisher:"kanonak.org",package_:"look",name:"figureTitle"},Pa={publisher:"kanonak.org",package_:"look",name:"titlePosition"},Da=`(function(){
20
+ if(window.__kanDiagramZoom)return;window.__kanDiagramZoom=1;
21
+ var TIERS=['chip','icon','card','full'];
22
+ var css='.kan-dgm-tier[hidden]{display:none}.kan-dgm-tiers{position:relative}'
23
+ +'.kan-dgm-tiers>.kan-dgm-btn{opacity:0;transition:opacity .12s}.kan-dgm-tiers:hover>.kan-dgm-btn,.kan-dgm-btn:focus{opacity:1}'
24
+ +'#kan-dgm-modal{position:fixed;inset:0;z-index:9999;display:none;background:rgba(0,0,0,.85);cursor:grab}'
25
+ +'#kan-dgm-stage{position:absolute;top:50%;left:50%}'
26
+ +'#kan-dgm-bar{position:fixed;top:14px;left:50%;transform:translateX(-50%);display:flex;gap:9px;align-items:center;font:12px sans-serif;color:#cbd5e1;background:rgba(12,18,32,.92);border:1px solid #1e293b;border-radius:999px;padding:7px 14px;user-select:none}'
27
+ +'#kan-dgm-bar .pip{width:9px;height:9px;border-radius:50%;background:#334155;cursor:pointer}'
28
+ +'#kan-dgm-bar .pip.on{background:#38bdf8}'
29
+ +'#kan-dgm-lbl{min-width:32px;text-transform:capitalize}';
30
+ var sty=document.createElement('style');sty.textContent=css;(document.head||document.documentElement).appendChild(sty);
31
+ var S={cont:null,mode:'snap',tier:1,z:1,x:0,y:0,drag:0,sx:0,sy:0,lock:0};
32
+ function el(id){return document.getElementById(id);}
33
+ function modal(){var m=el('kan-dgm-modal');if(m)return m;
34
+ m=document.createElement('div');m.id='kan-dgm-modal';
35
+ var st=document.createElement('div');st.id='kan-dgm-stage';m.appendChild(st);
36
+ var bar=document.createElement('div');bar.id='kan-dgm-bar';
37
+ var lbl=document.createElement('span');lbl.id='kan-dgm-lbl';bar.appendChild(lbl);
38
+ for(var i=0;i<4;i++){(function(i){var p=document.createElement('span');p.className='pip';p.title=TIERS[i];p.addEventListener('click',function(e){e.stopPropagation();setTier(i);});bar.appendChild(p);})(i);}
39
+ var h=document.createElement('span');h.textContent='scroll: zoom \\u00b7 drag: pan \\u00b7 esc';h.style.cssText='margin-left:6px;color:#64748b';bar.appendChild(h);
40
+ m.appendChild(bar);m.addEventListener('click',function(e){if(e.target===m)close();});document.body.appendChild(m);return m;}
41
+ function apply(){var st=el('kan-dgm-stage');if(st)st.style.transform='translate(calc(-50% + '+S.x+'px),calc(-50% + '+S.y+'px)) scale('+S.z+')';}
42
+ function updBar(){var b=el('kan-dgm-bar');if(!b)return;var geo=S.mode==='geo';var ps=b.querySelectorAll('.pip');for(var i=0;i<ps.length;i++){ps[i].style.display=geo?'none':'';ps[i].className='pip'+(i===S.tier?' on':'');}el('kan-dgm-lbl').textContent=geo?'zoom':TIERS[S.tier];}
43
+ function sizeVisible(){var c=S.cont;if(!c||S.mode==='geo')return;var svg=c.querySelector('.kan-dgm-tier:not([hidden]) svg');if(svg){var vb=(svg.getAttribute('viewBox')||'0 0 800 600').split(' ');var w=parseFloat(vb[2])||800;svg.style.width=Math.min(w,window.innerWidth*0.92)+'px';svg.style.height='auto';svg.style.display='block';}apply();}
44
+ function setTier(i){i=Math.max(0,Math.min(3,i));S.tier=i;var c=S.cont;if(!c)return;var ts=c.querySelectorAll('.kan-dgm-tier');for(var j=0;j<ts.length;j++){if(ts[j].getAttribute('data-tier')===TIERS[i])ts[j].removeAttribute('hidden');else ts[j].setAttribute('hidden','');}sizeVisible();updBar();}
45
+ function uniq(root){var seq=(window.__kanMk=(window.__kanMk||0)+1);var map={};var mk=root.querySelectorAll('marker[id]');for(var i=0;i<mk.length;i++){var o=mk[i].getAttribute('id');var n=o+'_z'+seq;map[o]=n;mk[i].setAttribute('id',n);}var all=root.querySelectorAll('[marker-end],[marker-start],[marker-mid]');for(var j=0;j<all.length;j++){(function(e){['marker-end','marker-start','marker-mid'].forEach(function(a){var v=e.getAttribute(a);if(!v)return;var mm=v.match(/url\\(#(.+?)\\)/);if(mm&&map[mm[1]])e.setAttribute(a,'url(#'+map[mm[1]]+')');});})(all[j]);}}
46
+ function open(tiersEl){modal();var st=el('kan-dgm-stage');var c=tiersEl.cloneNode(true);uniq(c);var bb=c.querySelector('.kan-dgm-btn');if(bb&&bb.parentNode)bb.parentNode.removeChild(bb);st.innerHTML='';st.appendChild(c);S.cont=c;S.x=0;S.y=0;S.z=1;
47
+ S.mode=c.getAttribute('data-geo')?'geo':'snap';
48
+ var vis=c.querySelector('.kan-dgm-tier:not([hidden])');var t=vis?vis.getAttribute('data-tier'):'icon';S.tier=Math.max(0,TIERS.indexOf(t));
49
+ el('kan-dgm-modal').style.display='block';
50
+ if(S.mode==='geo'){var bw=c.getBoundingClientRect().width||600;S.z=Math.min(1.8,(window.innerWidth*0.9)/bw);if(!(S.z>0))S.z=1;}else sizeVisible();
51
+ apply();updBar();}
52
+ function close(){var m=el('kan-dgm-modal');if(m){m.style.display='none';el('kan-dgm-stage').innerHTML='';S.cont=null;}}
53
+ document.addEventListener('wheel',function(e){var m=el('kan-dgm-modal');if(!m||m.style.display==='none')return;e.preventDefault();
54
+ if(S.mode==='geo'){S.z*=e.deltaY<0?1.15:1/1.15;S.z=Math.max(.2,Math.min(S.z,9));apply();return;}
55
+ var n=Date.now();if(n-S.lock<200)return;S.lock=n;setTier(S.tier+(e.deltaY<0?1:-1));},{passive:false});
56
+ document.addEventListener('mousedown',function(e){var m=el('kan-dgm-modal');if(!m||m.style.display==='none')return;S.drag=1;S.sx=e.clientX-S.x;S.sy=e.clientY-S.y;m.style.cursor='grabbing';});
57
+ document.addEventListener('mousemove',function(e){if(!S.drag)return;S.x=e.clientX-S.sx;S.y=e.clientY-S.sy;apply();});
58
+ document.addEventListener('mouseup',function(){S.drag=0;var m=el('kan-dgm-modal');if(m)m.style.cursor='grab';});
59
+ document.addEventListener('keydown',function(e){if(e.key==='Escape')close();});
60
+ function enhance(){var cs=document.querySelectorAll('.kan-dgm-tiers');for(var i=0;i<cs.length;i++){(function(c){if(c.__kz)return;c.__kz=1;
61
+ var b=document.createElement('button');b.type='button';b.className='kan-dgm-btn';b.textContent='\\u2922';b.setAttribute('aria-label','Open and zoom');
62
+ b.style.cssText='position:absolute;top:6px;right:6px;z-index:3;border:1px solid var(--kan-border,#333);background:var(--kan-bg-card,#111);color:var(--kan-text,#ccc);border-radius:6px;width:28px;height:28px;cursor:pointer;font-size:15px;line-height:1;padding:0';
63
+ b.addEventListener('click',function(ev){ev.preventDefault();ev.stopPropagation();open(c);});c.appendChild(b);})(cs[i]);}}
64
+ if(document.readyState!=='loading')enhance();else document.addEventListener('DOMContentLoaded',enhance);
65
+ })();`,Ze={chip:56,icon:120,card:240,full:420},Ba=["chip","icon","card","full"],Ha={56:"chip",120:"icon",240:"card",420:"full"},_e=11,za={publisher:"kanonak.org",package_:"look",name:"placement"},Ga={publisher:"kanonak.org",package_:"look",name:"width"},qa=4,Wa={publisher:"kanonak.org",package_:"look",name:"StatRow"},Ya={publisher:"kanonak.org",package_:"look",name:"Horizon"},Xa={publisher:"kanonak.org",package_:"look",name:"PackageContents"},Sn={publisher:"kanonak.org",package_:"core-kanonak",name:"Package"},Ja={publisher:"kanonak.org",package_:"core-kanonak",name:"Publisher"},Za={publisher:"kanonak.org",package_:"look",name:"FeaturedResource"},Qa={publisher:"kanonak.org",package_:"look",name:"PublisherPackages"},er={publisher:"kanonak.org",package_:"look",name:"packages"},nr={publisher:"kanonak.org",package_:"code-grammars",name:"CodeGrammar"},tr={publisher:"kanonak.org",package_:"code-grammars",name:"language"},ar={publisher:"kanonak.org",package_:"code-grammars",name:"rule"},rr={publisher:"kanonak.org",package_:"code-grammars",name:"tokenClass"},sr={publisher:"kanonak.org",package_:"code-grammars",name:"pattern"},or={publisher:"kanonak.org",package_:"look",name:"Links"},ir={publisher:"kanonak.org",package_:"link",name:"url"},cr={publisher:"kanonak.org",package_:"link",name:"links"};var lr={publisher:"kanonak.org",package_:"look",name:"Distribution"},ur={publisher:"kanonak.org",package_:"look",name:"alphaPath"},dr={publisher:"kanonak.org",package_:"look",name:"betaPath"},_n={publisher:"kanonak.org",package_:"look",name:"SectionHeading"},fr={publisher:"kanonak.org",package_:"look",name:"SectionNav"},dt={publisher:"kanonak.org",package_:"look",name:"heading"},pr={publisher:"kanonak.org",package_:"look",name:"note"},gr={publisher:"kanonak.org",package_:"look",name:"VersionDelta"},mr={publisher:"kanonak.org",package_:"look",name:"TimePlot"},kr={publisher:"kanonak.org",package_:"look",name:"Details"},hr={publisher:"kanonak.org",package_:"look",name:"EmbeddedViews"},br={publisher:"kanonak.org",package_:"look",name:"skip"},vr={publisher:"kanonak.org",package_:"derivation",name:"derivations"},yr={publisher:"kanonak.org",package_:"look",name:"laneBy"},$r={publisher:"kanonak.org",package_:"look",name:"stats"},wr={publisher:"kanonak.org",package_:"look",name:"statPath"},jr={publisher:"kanonak.org",package_:"look",name:"statLabel"},ft={publisher:"kanonak.org",package_:"look",name:"labelPath"},Sr={publisher:"kanonak.org",package_:"look",name:"badgePath"},En={publisher:"kanonak.org",package_:"look",name:"orderBy"},pt={publisher:"kanonak.org",package_:"look",name:"track"},sn={publisher:"kanonak.org",package_:"look",name:"metricPath"},Kn={publisher:"kanonak.org",package_:"look",name:"hueBy"},gt={publisher:"kanonak.org",package_:"look",name:"lowerPath"},mt={publisher:"kanonak.org",package_:"look",name:"upperPath"},_r={publisher:"kanonak.org",package_:"look",name:"axisMin"},Er={publisher:"kanonak.org",package_:"look",name:"axisMax"},Kr={publisher:"kanonak.org",package_:"look",name:"valueLabel"};var kt={publisher:"kanonak.org",package_:"look",name:"semanticSvg"},Rr={publisher:"kanonak.org",package_:"look",name:"tierChip"},Lr={publisher:"kanonak.org",package_:"look",name:"tierIcon"},Or={publisher:"kanonak.org",package_:"look",name:"tierCard"},Ur={publisher:"kanonak.org",package_:"look",name:"tierFull"},Ir={publisher:"kanonak.org",package_:"core-rdf",name:"type"},ht=6,Rn={publisher:"kanonak.org",package_:"look",name:"bands"},Cr={publisher:"kanonak.org",package_:"look",name:"title"},Fr={publisher:"kanonak.org",package_:"look",name:"eyebrow"},Tr={publisher:"kanonak.org",package_:"look",name:"subtitle"},bt={publisher:"kanonak.org",package_:"look",name:"badges"},fe={publisher:"kanonak.org",package_:"look",name:"source"},Vr={publisher:"kanonak.org",package_:"look",name:"via"},Ar={publisher:"kanonak.org",package_:"look",name:"size"},xr={publisher:"kanonak.org",package_:"look",name:"icon"},Mr={publisher:"kanonak.org",package_:"look",name:"avatar"},Nr={publisher:"kanonak.org",package_:"look",name:"contents"},Pr={publisher:"kanonak.org",package_:"look",name:"transitive"},Dr={publisher:"kanonak.org",package_:"look",name:"chips"},vt={publisher:"kanonak.org",package_:"look",name:"entries"},Br={publisher:"kanonak.org",package_:"look",name:"urlForm"},In=class{constructor(e){this.catalog=e}catalog;linkMode="single-publisher";setLinkMode(e){return this.linkMode=e,this}get publisherFirst(){return this.linkMode==="open-world"}linkBase(e){return this.publisherFirst?`/${e}`:""}resourceHref(e,n,t="="){return An.formatResourceUrl(e,t,{contextPublisher:n,...this.publisherFirst?{publisherFirst:!0}:{}})}packageHref(e,n,t){return`${this.linkBase(e)}/${n}${t?`/${t}`:""}`}publisherHref(e){return`${this.linkBase(e)}/`}_codeHighlighter;findCascadedLook(e){let n=Gr(e)?void 0:on(e);return n?{declaration:n,sourceClass:{publisher:ne(e),package_:(e.namespace||"").split("/")[1]?.split("@")[0]??"",name:e.name}}:this.lookFromTypeRefs(be(e))}lookFromTypeRefs(e){let n=new Set,t=[...e];for(;t.length>0;){let s=t.shift().subject,o=Z(s);if(n.has(o))continue;n.add(o);let i=ke(this.catalog,s);for(let c of i){let l=on(c);if(l)return{declaration:l,sourceClass:{publisher:s.publisher,package_:s.package_,name:s.name}}}for(let c of i)for(let l of Qe(c))t.push(l)}if(!n.has(Z(Se)))for(let a of ke(this.catalog,Se)){let s=on(a);if(s)return{declaration:s,sourceClass:{...Se}}}}findCascadedTokens(e){let n=this.explainCascadedTokens(e),t=new Map;for(let[a,s]of n)t.set(a,s.value);return t}explainCascadedTokens(e){let n=new Map,t=(o,i)=>{for(let[c,l]of Hr(o))n.has(c)||n.set(c,{value:l,sourceNamespace:o.namespace||"",sourceName:o.name,level:i})};t(e,"instance");let a=new Set,s=be(e);for(;s.length>0;){let o=s.shift(),i=Z(o.subject);if(a.has(i))continue;a.add(i);let c=i===Z(Se)?"resource-floor":"class",l=ke(this.catalog,o.subject);if(l.length!==0)for(let d of l){t(d,c);for(let f of Qe(d))s.push(f)}}if(!a.has(Z(Se))){let o=ke(this.catalog,Se);for(let i of o)t(i,"resource-floor")}return n}async renderSvg(e){let n=D(this.catalog,e).label,t=(n.trim().charAt(0)||"?").toUpperCase(),a=`${e.namespace??""}/${e.name}`,s=this.collectCascadedSvgTiers(e),o=new Map([["input",e],["label",n],["firstLetter",t],["uri",a],["resourceKey",e.name]]),i=await this.evaluateTier(s.tierChip,o),c=await this.evaluateTier(s.tierIcon,o),l=await this.evaluateTier(s.tierCard,o),d=await this.evaluateTier(s.tierFull,o),g=[...this.findCascadedTokens(e)].map(([m,k])=>`--kan-${m}: ${k};`).join(" ");return`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400" style="${Ke(g)}">
66
+ <style>
67
+ .tier-chip,.tier-icon,.tier-card{display:none}
68
+ .tier-full{display:block}
69
+ @media (max-width:400px){.tier-full{display:none}.tier-card{display:block}}
70
+ @media (max-width:160px){.tier-card{display:none}.tier-icon{display:block}}
71
+ @media (max-width:60px){.tier-icon{display:none}.tier-chip{display:block}}
72
+ </style>
73
+ <g class="tier-chip">${i}</g>
74
+ <g class="tier-icon">${c}</g>
75
+ <g class="tier-card">${l}</g>
76
+ <g class="tier-full">${d}</g>
77
+ </svg>`}resolverInstance;expressionResolver(){if(!this.resolverInstance){let e=new Fn,n=new Cn(e);this.resolverInstance=new an(n,e,new Vn(e))}return this.resolverInstance}async evaluateTier(e,n){if(!e)return"";let t;try{t=Ue(e,"semanticSvg-tier",{catalog:this.catalog,depth:0})}catch{return""}let a=new Xe(this.expressionResolver(),this.catalog);if(t.kind==="concat"){let o=[];for(let i of t.parts){let c=await a.evaluate(i,n);o.push($t(i.kind,c))}return o.join("")}let s=await a.evaluate(t,n);return $t(t.kind,s)}async evaluateCarrier(e,n){if(!e)return;let t;try{t=Ue(e,"look-carrier",{catalog:this.catalog,depth:0})}catch{return}let a=new Xe(this.expressionResolver(),this.catalog),s=new Map([["input",n]]),o=await a.evaluate(t,s),i=_t(o);return i===""?void 0:i}async evaluateCarrierNum(e,n){let t=await this.evaluateCarrier(e,n);return t===void 0?NaN:parseFloat(t)}readEmbeddedCarrier(e,n){let t=W(e,n);return t instanceof H&&t.object instanceof M?t.object:void 0}referenceLabel(e){let n=e.subject,t=ke(this.catalog,n);if(t.length===0){let a=ee(this.catalog,n);a&&t.push(a)}for(let a of t){let s=D(this.catalog,a);if(s.label!==a.name)return s.label}return n.name}collectCascadedSvgTiers(e){let n={},t=c=>{let l=W(c,kt);if(!(l instanceof H))return;let d=l.object,f=cn(d,Rr),g=cn(d,Lr),m=cn(d,Or),k=cn(d,Ur);n.tierChip===void 0&&f!==void 0&&(n.tierChip=f),n.tierIcon===void 0&&g!==void 0&&(n.tierIcon=g),n.tierCard===void 0&&m!==void 0&&(n.tierCard=m),n.tierFull===void 0&&k!==void 0&&(n.tierFull=k)};t(e);let a=e.namespace||"",s=a.indexOf("/");if(s>=0){let c=a.indexOf("@"),l={publisher:a.slice(0,s),package_:a.slice(s+1,c>=0?c:a.length),name:e.name};for(let d of ke(this.catalog,l))t(d)}let o=new Set,i=be(e);for(;i.length>0;){let c=i.shift(),l=Z(c.subject);if(o.has(l))continue;o.add(l);let d=ke(this.catalog,c.subject);for(let f of d){t(f);for(let g of Qe(f))i.push(g)}}if(!o.has(Z(Se)))for(let c of ke(this.catalog,Se))t(c);return n}renderStylesheet(e){let n=this.explainStylesheet(e),t=[];for(let[o,i]of n.tokens)t.push(` --kan-${o}: ${i.value};`);let a=t.length>0?`:root {
78
+ ${t.join(`
79
+ `)}
80
+ }`:":root { /* no tokens resolved */ }",s=n.baseStylesheet.css??"";return`${qr(n)}
81
+ ${a}
82
+ ${s}`}explainStylesheet(e){let n=this.explainCascadedTokens(e),t=this.explainBaseStylesheet(ne(e)),a=this.findCascadedLook(e),s=[];return t.css||(t.problem==="content-property-unresolved"?s.push(`Base stylesheet asset ${t.sourceNamespace}/base-stylesheet is in the catalog but its site.content property did not resolve \u2014 the package was likely cached without its imports block. Pages will render UNSTYLED (CSS stops at :root). Fix: re-install it from its published source: kanonak install kanonak.org/look-styles`):s.push("No look-styles package in the render catalog \u2014 pages will render UNSTYLED (CSS stops at :root). The look stack is ambient (not imported): it must be in the workspace, the global cache, or fetchable from kanonak.org by the user running the render. Fix: kanonak install kanonak.org/look-styles")),n.size===0&&s.push("No design tokens resolved \u2014 the :root block is empty. The universal token floor lives on rdfs.Resource in kanonak.org/look-tokens; that package is missing from the render catalog. Fix: kanonak install kanonak.org/look-tokens"),a||s.push(`No look (band declaration) resolved for ${e.namespace}/${e.name} \u2014 the HTML body will be an empty comment. The universal look floor lives on rdfs.Resource in kanonak.org/universal-look. Fix: kanonak install kanonak.org/universal-look`),{resource:{namespace:e.namespace||"",name:e.name},tokens:n,baseStylesheet:t,...a?{look:{sourceClass:a.sourceClass}}:{},warnings:s}}findBaseStylesheet(e){return this.explainBaseStylesheet(e).css}explainBaseStylesheet(e){let n="kanonak.org/site/content",t=f=>ye((f.namespace||"").split("@")[1]??""),a=[],s,o,i,c;for(let f of this.catalog){if(!(f instanceof G)||f.name!=="base-stylesheet")continue;let g=f.namespace||"";if(g.startsWith(`${e}/look-styles@`)){a.push(g);let m=t(f);m&&(!o||en(m,o)>0)&&(s=f,o=m)}else if(g.startsWith("kanonak.org/look-styles@")){a.push(g);let m=t(f);m&&(!c||en(m,c)>0)&&(i=f,c=m)}}let l=s??i;if(!l)return{problem:"no-look-styles-in-catalog",candidates:a};let d=l===s?"publisher-override":"universal-default";for(let f of l.statement){let g=f.predicate?.subject;if(!g)continue;if(`${g.publisher}/${g.package_}/${g.name}`===n&&f instanceof X)return{css:f.object,sourceNamespace:l.namespace||"",scope:d,candidates:a}}return{problem:"content-property-unresolved",sourceNamespace:l.namespace||"",scope:d,candidates:a}}async renderHtml(e){let n=this.findCascadedLook(e);if(!n)return`<!-- LookRenderer: no derivation.look found for ${e.namespace}/${e.name} -->`;let t=Ln(n.declaration);if(t.length===0)return"<!-- LookRenderer: look declaration has no bands -->";let a=ne(e),s=this.collectSectionHeadings(t);this.diagramScriptEmitted=!1,this.diagramArrowSeq=0;let o=[];for(let i of t){let c=ze(i);c&&R(c,_n)&&o.push('<div style="clear:both"></div>'),o.push(this.applyBandPlacement(i,await this.renderBand(i,e,a,s)))}return o.push('<div style="clear:both"></div>'),o.join(`
83
+ `)}applyBandPlacement(e,n){let t=Q(e,za);if(t!=="floatLeft"&&t!=="floatRight")return n;let a=t==="floatLeft"?"left":"right",s=Q(e,Ga),o=s&&/^\d+(\.\d+)?(%|px|rem|em)$/.test(s)?s:"42%";return`<div class="kan-band-float kan-band-${a}" style="float:${a};width:${o};margin:${a==="left"?"0 1.25rem 0.75rem 0":"0 0 0.75rem 1.25rem"}">${n}</div>`}collectSectionHeadings(e){let n=[];for(let t of e){let a=ze(t);if(!a||!R(a,_n))continue;let s=Q(t,dt);s&&n.push({slug:wt(s),label:s})}return n}publisherSubject(e){for(let t of this.catalog){if(!(t instanceof G)||ne(t)!==e||!be(t).some(s=>R(s.subject,Ja)))continue;return ke(this.catalog,{publisher:e,package_:(t.namespace||"").split("/")[1]?.split("@")[0]??"",name:t.name})[0]??t}let n=new G;return n.namespace=e,n.name=e,n.statement=[V.parse("kanonak.org/core-rdf/type","kanonak.org/core-kanonak/Publisher"),X.parse("kanonak.org/core-rdf/label",e)],n}hasDeclaredView(e){let n=this.findCascadedLook(e);return n?!(a=>a.publisher===Se.publisher&&a.package_===Se.package_&&a.name===Se.name||a.publisher===Sn.publisher&&a.package_===Sn.package_&&a.name===Sn.name)(n.sourceClass):!1}renderPackageVersionList(e,n,t){let a=ne(t),s=this.renderNavGroup(t,a),o=this.renderBreadcrumb(t,a,{bareOverview:!0}),i=n.map(l=>`<a class="kan-resource-card" href="${p(this.packageHref(a,e,l))}/"><h3 class="kan-resource-card-title">${p(l)}</h3></a>`).join(`
84
+ `),c=`<header class="kan-hero">
85
+ <span class="kan-hero-eyebrow">PACKAGE</span>
86
+ <h1 class="kan-hero-title">${p(e)}</h1>
87
+ </header>
88
+ <section class="kan-resource-grid">
89
+ ${i}
90
+ </section>`;return`<!doctype html>
91
+ <html lang="en">
92
+ <head>
93
+ <meta charset="utf-8">
94
+ <meta name="viewport" content="width=device-width, initial-scale=1">
95
+ <title>${p(e)}</title>
96
+ <link rel="stylesheet" href="${p(t.name)}.css">
97
+ </head>
98
+ <body>
99
+ ${s}
100
+ ${o}
101
+ <main class="kan-main">
102
+ ${c}
103
+ </main>
104
+ </body>
105
+ </html>
106
+ `}async renderDocument(e,n){let t=await this.renderHtml(e),a=D(this.catalog,e).label,s=n?.rootIndex?"index.css":`${e.name}.css`,o=!n?.rootIndex&&this.hasSvgDerivation(e)?`<figure class="kan-figure"><img src="${p(e.name)}.svg" alt=""></figure>
107
+ `:"",i=ne(e),c=this.renderNavGroup(e,i),l=this.renderSiteFooter(i),d=n?.rootIndex?"":this.renderBreadcrumb(e,i,n);return`<!doctype html>
108
+ <html lang="en">
109
+ <head>
110
+ <meta charset="utf-8">
111
+ <meta name="viewport" content="width=device-width, initial-scale=1">
112
+ <title>${p(a)}</title>
113
+ <link rel="stylesheet" href="${p(s)}">
114
+ </head>
115
+ <body>
116
+ ${c}
117
+ ${d}
118
+ <main class="kan-main">
119
+ ${o}${t}
120
+ </main>
121
+ ${l}
122
+ </body>
123
+ </html>
124
+ `}hasSvgDerivation(e){let n=new Set,t=be(e);for(;t.length>0;){let a=t.shift(),s=Z(a.subject);if(n.has(s))continue;n.add(s);let o=ee(this.catalog,a.subject);if(o){for(let i of o.statement)if(i instanceof T&&we(i,"kanonak.org","derivation","derivations")){for(let c of i.object??[])if(c instanceof M)for(let l of c.statement){if(!(l instanceof V)||!we(l,"kanonak.org","derivation","format")||!(l.object instanceof E))continue;let d=l.object.subject;if(d.publisher==="kanonak.org"&&d.package_==="formats"&&d.name==="svg")return!0}}for(let i of Qe(o))t.push(i)}}return!1}async renderBand(e,n,t,a=[],s=""){let o=ze(e);return o?R(o,fr)?this.renderSectionNav(a):R(o,sa)?this.renderHero(e,n,t):R(o,oa)?this.renderPropertyList(e,n,t):R(o,ia)?this.renderPropertyTable(e,n,t,s):R(o,ca)?this.renderBadgeRow(e,n,t):R(o,la)?this.renderChipRow(e,n,t):R(o,ua)?this.renderReferenceList(e,n,t):R(o,da)?this.renderReferencedBy(e,n,t):R(o,fa)?this.renderInstances(e,n,t):R(o,lt)?this.renderMarkdown(e,n,t):R(o,or)?this.renderLinks(e,n):R(o,pa)?this.renderNavGroup(n,t):R(o,ba)?this.renderResourceGrid(e,t,n):R(o,va)?this.renderTimeline(e,t):R(o,ya)?this.renderVersionDiff(e,t):R(o,$a)?this.renderFigure(e,n,t):R(o,wa)?this.renderDiagram(e,n,t):R(o,Wa)?this.renderStatRow(e,n):R(o,Ya)?this.renderHorizon(e,n,t):R(o,Xa)?this.renderPackageContents(n,t):R(o,Za)?this.renderFeaturedResource(e,t):R(o,Qa)?this.renderPublisherPackages(e,t):R(o,lr)?this.renderDistribution(e,n):R(o,_n)?this.renderSectionHeading(e):R(o,gr)?this.renderVersionDelta(e,n):R(o,mr)?this.renderTimePlot(e,n,t):R(o,kr)?this.renderDetails(e,n,t):R(o,hr)?this.renderEmbeddedViews(e,n,t,s):`<!-- LookRenderer: unsupported band ${o.publisher}/${o.package_}/${o.name} -->`:"<!-- LookRenderer: band has no rdf:type -->"}async collectTrackedSeries(e,n,t,a){let{hueBy:s,lowerPath:o,upperPath:i}=a??{},c=new Map,l=e.length;for(let d=0;d<e.length;d++){let f=e[d],g=this.readPropertyValueReferences(f,n);for(let m of g){let k=ee(this.catalog,{publisher:m.subject.publisher,package_:m.subject.package_,name:m.subject.name,...m.subject.version?{version:m.subject.version}:{}});if(!k)continue;let b=m.subject.name,h=c.get(b);h||(h={key:b,label:D(this.catalog,k).label,points:new Array(l).fill(null),...o?{lower:new Array(l).fill(null)}:{},...i?{upper:new Array(l).fill(null)}:{}},c.set(b,h));let v=await this.evaluateCarrierNum(t,k);if(Number.isFinite(v)&&(h.points[d]=v),o&&h.lower){let j=await this.evaluateCarrierNum(o,k);Number.isFinite(j)&&(h.lower[d]=j)}if(i&&h.upper){let j=await this.evaluateCarrierNum(i,k);Number.isFinite(j)&&(h.upper[d]=j)}if(s){let j=await this.evaluateCarrierNum(s,k);Number.isFinite(j)&&(h.hue=j)}h.lastSubject=k}}return[...c.values()]}hrefForSubject(e,n,t="="){let a=e.namespace||"",s=a.split("/")[1]?.split("@")[0]??"",o=a.split("@")[1]??"",i=o?ye(o):void 0;return this.resourceHref({publisher:ne(e),package_:s,name:e.name,...i?{version:i}:{}},n,t)}async renderVersionDiff(e,n){let t=B(e,fe);if(!t)return"<!-- LookRenderer.VersionDiff: no look.source -->";let a=this.readEmbeddedCarrier(e,sn),s=B(e,pt);if(!s||!a)return"<!-- LookRenderer.VersionDiff: needs look.track + look.metricPath -->";let o=B(e,En),i=this.readEmbeddedCarrier(e,Kn),c=this.findInstancesOfClass(t);if(c.length===0)return"<!-- LookRenderer.VersionDiff: no instances -->";let l=m=>o?this.readPropertyValueText(m,o)??"":"",d=c.slice().sort((m,k)=>l(m).localeCompare(l(k))),f=await this.collectTrackedSeries(d,s,a,{hueBy:i});return f.length===0?"<!-- LookRenderer.VersionDiff: no tracked series -->":`<section class="kan-vdiff">${f.map((m,k)=>{let b=m.hue!==void 0?m.hue:Math.round(k*360/f.length),h=m.points.filter(U=>U!==null);if(h.length===0)return"";let v=h[0],j=h[h.length-1],S=j-v,_;if(Math.abs(S)>=.005){let U=S>0?"up":"down",N=S>0?"\u25B2":"\u25BC";_=`<span class="kan-vdiff-delta ${U}">${S>0?"+":""}${S.toFixed(2)} ${N}</span>`}else _='<span class="kan-vdiff-delta flat">\u2014</span>';let L=m.lastSubject&&this.isLinkable(ne(m.lastSubject),n)?`<a href="${p(this.hrefForSubject(m.lastSubject,n))}">${p(m.label)}</a>`:p(m.label);return`<div class="kan-vdiff-row" style="--kan-vdiff-hue:${b}"><span class="kan-vdiff-label">${L}</span><span class="kan-vdiff-start">${v.toFixed(2)}</span>`+this.sparkline(m.points,b)+`<span class="kan-vdiff-end">${j.toFixed(2)}</span>`+_+"</div>"}).join("")}</section>`}sparkline(e,n){let o=`hsl(${n},65%,60%)`,i=e.filter(h=>h!==null);if(i.length===0)return'<svg class="kan-vdiff-spark" viewBox="0 0 132 30" xmlns="http://www.w3.org/2000/svg"></svg>';let c=Math.min(...i),d=Math.max(...i)-c,f=e.length,g=h=>f<=1?132/2:4+h/(f-1)*124,m=h=>d<1e-9?30/2:26-(h-c)/d*22,k=[],b=[];return e.forEach((h,v)=>{if(h===null)return;let j=g(v),S=m(h);k.push(`${j.toFixed(1)},${S.toFixed(1)}`),b.push(`<circle cx="${j.toFixed(1)}" cy="${S.toFixed(1)}" r="2" fill="${o}"/>`)}),`<svg class="kan-vdiff-spark" viewBox="0 0 132 30" preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg" role="img"><polyline points="${k.join(" ")}" fill="none" stroke="${o}" stroke-width="1.5" stroke-linejoin="round" stroke-linecap="round"/>`+b.join("")+"</svg>"}svgUrlForSubject(e,n,t="="){return`${this.hrefForSubject(e,n,t)}.svg`}renderFigure(e,n,t){let a=n,s=B(e,fe);if(s){let d=ee(this.catalog,s);d&&(a=d)}let o=this.svgUrlForSubject(a,t),i=D(this.catalog,a).label,c=Q(e,Ar);return`<figure class="kan-figure${c==="small"||c==="medium"||c==="large"?` kan-figure-${c}`:""}"><img class="kan-figure-img" src="${p(o)}" alt="${p(i)}" loading="lazy"/></figure>`}diagramArrowSeq=0;diagramScriptEmitted=!1;async renderDiagram(e,n,t,a=0,s=new Set){let o=this.gatherValueItems(W(e,ja)).filter(k=>k instanceof M);if(o.length===0)return"<!-- LookRenderer.Diagram: no look.facets -->";let i=[];for(let k of o){let b=B(k,Sa);if(!b){i.push("<!-- LookRenderer.Diagram: facet has no resolvable look.relation -->");continue}let h=B(k,_a),v=this.resolveFacetNodes(n,b);if(v.length===0){i.push(`<!-- LookRenderer.Diagram: relation ${b.publisher}/${b.package_}/${b.name} resolved to 0 instances -->`);continue}let j=await this.resolveFacetChannels(k,v),S=W(k,Ua),_=S instanceof H&&S.object instanceof M?S.object:void 0,L=Q(k,Fa),U=L&&Ze[L]!==void 0?Ze[L]:void 0,N=U??this.classTierSize(v),I=Ha[N??Ze.icon]??"icon",ce=this.readEmbeddedCarrier(k,Va),C=B(k,Ia),P=C?ee(this.catalog,C):void 0;if(P){i.push(await this.renderDiagramExpand(v,P,t,a,s,ce,U));continue}if(h&&R(h,Ka)){let Y=B(k,Ca),se=this.facetEdgeLabel(k,Y??b),le=this.readEmbeddedCarrier(k,Ma);i.push(await this.embedTiers(I,O=>Y?this.renderDiagramDag(v,Y,j,t,O,se,le):this.renderDiagramConnector(n,v,j,t,O,se,le)));continue}if(h&&!R(h,Ea)){i.push(`<!-- LookRenderer.Diagram: unknown encode role ${h.publisher}/${h.package_}/${h.name} -->`);continue}i.push(_?`<div class="kan-dgm-tiers" data-geo="1"><div class="kan-dgm-tier" data-tier="card">${await this.renderDiagramCluster(v,j,_,t,N)}</div></div>`:await this.embedTiers(I,Y=>this.renderDiagramCluster(v,j,void 0,t,Y)))}let c=Q(e,Na),l=Q(e,Pa),d=k=>`<div class="kan-diagram-title" style="font-weight:600;font-size:0.95rem;color:var(--kan-text);${k}">${p(c)}</div>`,f=c&&l!=="bottom"?d("margin:0 0 .5rem"):"",g=c&&l==="bottom"?d("margin:.5rem 0 0"):"",m="";return a===0&&!this.diagramScriptEmitted&&(this.diagramScriptEmitted=!0,m=`<script>${Da}</script>`),`<section class="kan-diagram">${f}${i.join("")}${g}${m}</section>`}async embedTiers(e,n){let t=[];for(let a of Ba){let s=await n(Ze[a]);t.push(`<div class="kan-dgm-tier" data-tier="${a}"${a===e?"":" hidden"}>${s}</div>`)}return`<div class="kan-dgm-tiers">${t.join("")}</div>`}async renderDiagramExpand(e,n,t,a,s,o,i){let c=[];for(let l of e){let d=`${l.namespace??""}/${l.name}`,f=await this.diagramNodeRow(l,t,i??56,o),m=a<qa&&!s.has(d)?await this.renderDiagram(n,l,t,a+1,new Set([...s,d])):"",k=m?`<div style="margin-left:30px;border-left:2px solid var(--kan-border);padding-left:14px;margin-top:6px">${m}</div>`:"";c.push(`<div class="kan-diagram-node" style="margin:6px 0">${f}${k}</div>`)}return`<figure class="kan-diagram-figure"><div class="kan-diagram-tree">${c.join("")}</div></figure>`}async diagramNodeRow(e,n,t=56,a){let s=this.hrefForSubject(e,n),o=this.svgUrlForSubject(e,n),i=D(this.catalog,e).label,c=a?await this.evaluateCarrier(a,e):void 0,l=c!==void 0?`<span class="kan-diagram-node-note" style="display:block;font-size:0.8em;color:var(--kan-text-dim)">${p(c)}</span>`:"";return`<a href="${p(s)}" style="display:inline-flex;align-items:center;gap:10px;text-decoration:none"><img src="${p(o)}" width="${t}" height="${t}" alt="" loading="lazy"/><span><span class="kan-diagram-node-label">${p(i)}</span>${l}</span></a>`}classTierSize(e){let n;for(let t of e)for(let a of be(t)){let s=ee(this.catalog,a.subject);if(!s)continue;let o=Q(s,Ta),i=o?Ze[o]:void 0;i!==void 0&&(n=n===void 0?i:Math.max(n,i))}return n}resolveFacetNodes(e,n){let t=[];for(let a of this.readPropertyValueReferences(e,n)){let s=a.subject,o=ee(this.catalog,{publisher:s.publisher,package_:s.package_,name:s.name,...s.version?{version:s.version}:{}});o&&t.push(o)}return t}async resolveFacetChannels(e,n){let t=this.gatherValueItems(W(e,Ra)).filter(s=>s instanceof M),a=[];for(let s of t){let o=this.readEmbeddedCarrier(s,La),i=Q(s,Oa);if(!o||!i)continue;let c=[];for(let k of n){let b=await this.evaluateCarrierNum(o,k);c.push(Number.isFinite(b)?b:NaN)}let l=c.filter(k=>Number.isFinite(k)),d=l.length?Math.min(...l):0,g=(l.length?Math.max(...l):0)-d,m=c.map(k=>Number.isFinite(k)&&g>0?(k-d)/g:.5);a.push({to:i,norm:m})}return a}facetEdgeLabel(e,n){let t=Q(e,Aa);if(t)return t;if(zr(e,xa)&&n){let s=ee(this.catalog,n);if(s)return D(this.catalog,s).label}}async edgeText(e,n,t){let a=t&&n?await this.evaluateCarrier(t,n):void 0,s=[e,a].filter(o=>!!o);return s.length?s.join(" "):void 0}edgeLabelEl(e,n,t){return`<text x="${e.toFixed(1)}" y="${n.toFixed(1)}" text-anchor="middle" class="kan-diagram-edge-label" style="font-size:11px;paint-order:stroke;stroke:var(--kan-bg);stroke-width:3px;fill:var(--kan-text-dim)">${p(t)}</text>`}async renderDiagramCluster(e,n,t,a,s){let o=s??132,i=18,c=18,l=n.find(b=>b.to==="opacity");if(t){let b=[];for(let h=0;h<e.length;h++){let v=e[h],j=await this.renderBand(t,v,a),S=this.hrefForSubject(v,a),_=D(this.catalog,v).label,L=l?`opacity:${(.4+l.norm[h]*.6).toFixed(2)};`:"";b.push(`<a class="kan-diagram-mark" href="${p(S)}" style="display:block;text-decoration:none;${L}">${j}<span class="kan-diagram-mark-label">${p(_)}</span></a>`)}return`<figure class="kan-diagram-figure"><div class="kan-diagram-marks" style="display:flex;flex-wrap:wrap;gap:18px;align-items:flex-start">${b.join("")}</div></figure>`}let d=Math.min(e.length,4),f=Math.ceil(e.length/d),g=c*2+d*o+(d-1)*i,m=c*2+f*o+(f-1)*i,k=e.map((b,h)=>{let v=h%d,j=Math.floor(h/d),S=c+v*(o+i),_=c+j*(o+i),L=l?.4+l.norm[h]*.6:1;return this.diagramTile(b,S,_,o,a,L)}).join("");return`<figure class="kan-diagram-figure"><svg class="kan-diagram-svg" viewBox="0 0 ${g} ${m}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">${k}</svg></figure>`}async renderDiagramConnector(e,n,t,a,s,o,i){let c=s??120,l=24,d=130,f=18,g=t.find(C=>C.to==="thickness"),m=t.find(C=>C.to==="opacity"),k=n.length,b=k*c+(k-1)*l,h=f*2+b,v=f*2+c+d+c,j=f,S=f+(b-c)/2,_=f+c+d,L=`kan-arrow-${this.diagramArrowSeq++}`,U=[],N=[],I=[];for(let C=0;C<n.length;C++){let P=n[C],Y=f+C*(c+l),se=j+c,le=S+c/2,O=_-_e,J=Y+c/2,F=(se+_)/2,$=g?1.5+g.norm[C]*5.5:2,x=m?.4+m.norm[C]*.6:1,z=m?` stroke-opacity="${x.toFixed(2)}"`:"";U.push(`<path d="M${se.toFixed(1)},${le.toFixed(1)} C${F.toFixed(1)},${le.toFixed(1)} ${F.toFixed(1)},${J.toFixed(1)} ${O.toFixed(1)},${J.toFixed(1)}" class="kan-diagram-edge" fill="none" stroke="var(--kan-border)" stroke-width="${$.toFixed(1)}"${z} marker-end="url(#${L})"/>`);let K=await this.edgeText(o,P,i);K&&N.push(this.edgeLabelEl((se+_)/2,(le+J)/2-5,K)),I.push(this.diagramTile(P,_,Y,c,a,m?x:1))}let ce=this.diagramTile(e,j,S,c,a);return`<figure class="kan-diagram-figure"><svg class="kan-diagram-svg" viewBox="0 0 ${v.toFixed(0)} ${h.toFixed(0)}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">${this.arrowMarkerDef(L,"var(--kan-border)")}${U.join("")}${N.join("")}${ce}${I.join("")}</svg></figure>`}arrowMarkerDef(e,n){return`<defs><marker id="${e}" viewBox="0 0 ${_e} ${_e}" refX="0" refY="${(_e/2).toFixed(1)}" markerWidth="${_e}" markerHeight="${_e}" markerUnits="userSpaceOnUse" orient="auto"><path d="M0,1 L${_e},${(_e/2).toFixed(1)} L0,${_e-1}" fill="${n}"/></marker></defs>`}async renderDiagramDag(e,n,t,a,s,o,i){let c=s??110,l=110,d=22,f=18,g=new Map(e.map(($,x)=>[$.name,x])),m=new Set(e.map($=>$.name)),k=new Map(e.map($=>[$.name,[]])),b=new Map(e.map($=>[$.name,[]]));for(let $ of e)for(let x of this.readPropertyValueReferences($,n)){let z=x.subject.name;z!==$.name&&m.has(z)&&(k.get($.name).push(z),b.get(z).push($.name))}let h=new Map,v=new Set,j=$=>{let x=h.get($);if(x!==void 0)return x;if(v.has($))return 0;v.add($);let z=0;for(let K of b.get($)??[])z=Math.max(z,j(K)+1);return v.delete($),h.set($,z),z};for(let $ of e)j($.name);let S=Math.min(...h.values());if(S>0)for(let $ of[...h.keys()])h.set($,h.get($)-S);let _=Math.max(0,...h.values()),L=Array.from({length:_+1},()=>[]);for(let $ of e)L[h.get($.name)].push($);let U=Math.max(1,...L.map($=>$.length)),N=!1;for(let[$,x]of k)for(let z of x)h.get(z)<=h.get($)&&(N=!0);let I=N?84:0,ce=U*c+(U-1)*d,C=f*2+(_+1)*c+_*l,P=f*2+I+ce,Y=new Map;L.forEach(($,x)=>{let z=$.length*c+($.length-1)*d,K=f+I+(ce-z)/2;$.forEach((A,pe)=>Y.set(A.name,{x:f+x*(c+l),y:K+pe*(c+d)}))});let se=t.find($=>$.to==="thickness"),le=`kan-arrow-${this.diagramArrowSeq++}`,O=[],J=[];for(let[$,x]of k){let z=Y.get($);for(let K of x){let A=Y.get(K),pe=A.x>=z.x,ge=se?1.5+se.norm[g.get($)]*4.5:2,te,oe,ie;if(pe){let ae=z.x+c,Fe=z.y+c/2,Le=A.x-_e,Ge=A.y+c/2,xe=(ae+Le)/2;te=`M${ae.toFixed(1)},${Fe.toFixed(1)} C${xe.toFixed(1)},${Fe.toFixed(1)} ${xe.toFixed(1)},${Ge.toFixed(1)} ${Le.toFixed(1)},${Ge.toFixed(1)}`,oe=(ae+Le)/2,ie=(Fe+Ge)/2-5}else{let ae=z.x+c/2,Fe=z.y,Le=A.x+c/2,Ge=A.y-_e,xe=f+I*.2;te=`M${ae.toFixed(1)},${Fe.toFixed(1)} C${ae.toFixed(1)},${xe.toFixed(1)} ${Le.toFixed(1)},${xe.toFixed(1)} ${Le.toFixed(1)},${Ge.toFixed(1)}`,oe=(ae+Le)/2,ie=xe+4}let Re=pe?"":' stroke-dasharray="6 4"';O.push(`<path d="${te}" class="kan-diagram-edge" fill="none" stroke="var(--kan-accent)" stroke-width="${ge.toFixed(1)}" stroke-opacity="0.75"${Re} marker-end="url(#${le})"/>`);let je=await this.edgeText(o,e[g.get($)],i);je&&J.push(this.edgeLabelEl(oe,ie,je))}}let F=e.map($=>{let x=Y.get($.name);return this.diagramTile($,x.x,x.y,c,a)}).join("");return`<figure class="kan-diagram-figure"><svg class="kan-diagram-svg" viewBox="0 0 ${C.toFixed(0)} ${P.toFixed(0)}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">${this.arrowMarkerDef(le,"var(--kan-accent)")}${O.join("")}${J.join("")}${F}</svg></figure>`}diagramTile(e,n,t,a,s,o=1){let i=this.hrefForSubject(e,s),c=this.svgUrlForSubject(e,s),l=D(this.catalog,e).label,d=o<1?` opacity="${o.toFixed(2)}"`:"";return`<a href="${p(i)}"><image href="${p(c)}" x="${n}" y="${t}" width="${a}" height="${a}"${d}><title>${p(l)}</title></image></a>`}async renderStatRow(e,n){let t=W(e,$r),a=this.gatherValueItems(t).filter(o=>o instanceof M);if(a.length===0)return"<!-- LookRenderer.StatRow: no look.stats -->";let s=[];for(let o of a){let i=this.readEmbeddedCarrier(o,wr);if(!i)continue;let c=await this.evaluateCarrier(i,n);if(c===void 0)continue;let l=Q(o,jr)??"";s.push('<div class="kan-stat">'+(l?`<span class="kan-stat-label">${p(l)}</span>`:"")+`<span class="kan-stat-val">${p(c)}</span></div>`)}return s.length===0?"":`<div class="kan-stat-row">${s.join("")}</div>`}renderHorizon(e,n,t){let a=B(e,fe);if(!a)return"<!-- LookRenderer.Horizon: no look.source -->";let s=this.gatherValueItems(W(n,a)).filter(i=>i instanceof M);return s.length===0?"":`<section class="kan-horizon">${s.map(i=>this.renderConditionNode(i,t,0)).join("")}</section>`}renderConditionNode(e,n,t){let a=ze(e),s=a?this.readLabelForUri({publisher:a.publisher,package_:a.package_,name:a.name})??a.name:"Condition",o=[],i=[];for(let g of e.statement){let m=g.predicate?.subject;if(!m||m.name==="type")continue;let k=this.readLabelForUri({publisher:m.publisher,package_:m.package_,name:m.name})??m.name;if(g instanceof X||g instanceof me||g instanceof re)o.push(`<div class="kan-cond-field"><span class="kan-cond-key">${p(k)}</span><span class="kan-cond-v">${p(String(g.object))}</span></div>`);else if(g instanceof V&&g.object instanceof E){let b=g.object.subject,h=this.readLabelForUri({publisher:b.publisher,package_:b.package_,name:b.name})??b.name;o.push(`<div class="kan-cond-field"><span class="kan-cond-key">${p(k)}</span><span class="kan-cond-v">${p(h)}</span></div>`)}else if(g instanceof H)i.push(this.renderConditionNode(g.object,n,t+1));else if(g instanceof T)for(let b of g.object??[])b instanceof M&&i.push(this.renderConditionNode(b,n,t+1))}let c=o.length?`<div class="kan-cond-fields">${o.join("")}</div>`:"",l=i.length?`<div class="kan-cond-children">${i.join("")}</div>`:"",d=i.length>0,f=d?`<span class="kan-cond-op">${p(s)}</span>`:`<div class="kan-cond-type">${p(s)}</div>`;return`<div class="kan-cond ${d?"kan-cond-branch":"kan-cond-leaf"}">${f}${c}${l}</div>`}renderSectionHeading(e){let n=e,t=Q(n,dt);if(!t)return"<!-- LookRenderer.SectionHeading: no look.heading -->";let a=Q(n,pr);return`<div class="kan-section" id="${wt(t)}"><h2 class="kan-section-title">${p(t)}</h2>`+(a?`<p class="kan-section-note">${p(a)}</p>`:"")+"</div>"}renderSectionNav(e){return e.length===0?"<!-- LookRenderer.SectionNav: no section headings in this view -->":`<nav class="kan-section-nav" aria-label="On this page">${e.map(t=>`<a class="kan-section-nav-link" href="#${p(t.slug)}">${p(t.label)}</a>`).join("")}</nav>`}async renderVersionDelta(e,n){let t=this.readEmbeddedCarrier(e,sn);if(!t)return"<!-- LookRenderer.VersionDelta: no look.metricPath -->";let a=async C=>{let P=await this.evaluateCarrierNum(t,C);return Number.isFinite(P)?P:void 0},s=await a(n);if(s===void 0)return"";let o=C=>ye((C.namespace||"").split("@")[1]??"")??{major:0,minor:0,patch:0},i=(C,P)=>C.major-P.major||C.minor-P.minor||C.patch-P.patch,c={publisher:ne(n),package_:(n.namespace||"").split("/")[1]?.split("@")[0]??"",name:n.name},l=o(n),d,f;for(let C of ke(this.catalog,c)){let P=o(C);i(P,l)<0&&(!f||i(P,f)>0)&&(d=C,f=P)}if(!d||!f)return'<div class="kan-delta kan-delta-first">First tracked in this version</div>';let g=await a(d);if(g===void 0)return"";let m=s-g,k=Math.abs(m)<.005?"flat":m>0?"up":"down",b=k==="up"?"\u25B2":k==="down"?"\u25BC":"\u2014",h=k==="up"?"#34d399":k==="down"?"#f87171":"var(--kan-text-faint)",v=`${f.major}.${f.minor}.${f.patch}`,j=320,S=46,_=14,L=30,U=C=>_+Math.min(1,Math.max(0,C))*(j-2*_),N=U(g),I=U(s),ce=`<svg class="kan-delta-track" viewBox="0 0 ${j} ${S}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img"><line x1="${_}" y1="${L}" x2="${j-_}" y2="${L}" class="kan-delta-base"/><line x1="${N.toFixed(1)}" y1="${L}" x2="${I.toFixed(1)}" y2="${L}" stroke="${h}" stroke-width="3"/><circle cx="${N.toFixed(1)}" cy="${L}" r="4" class="kan-delta-prev"/><circle cx="${I.toFixed(1)}" cy="${L}" r="5.5" fill="${h}"/><text x="${N.toFixed(1)}" y="${L-9}" text-anchor="middle" class="kan-delta-tick kan-delta-tick-prev">${g.toFixed(2)}</text><text x="${I.toFixed(1)}" y="${L+17}" text-anchor="middle" class="kan-delta-tick">${s.toFixed(2)}</text></svg>`;return`<div class="kan-delta"><div class="kan-delta-head"><span class="kan-delta-vs">vs ${p(v)}</span><span class="kan-delta-badge ${k}">${m>0?"+":""}${m.toFixed(2)} ${b}</span></div>`+ce+"</div>"}async renderTimePlot(e,n,t){let a=B(e,fe),s=B(e,En);if(!a||!s)return"<!-- LookRenderer.TimePlot: needs look.source + look.orderBy -->";let o=this.readEmbeddedCarrier(e,yr),i=this.readEmbeddedCarrier(e,ft),c=[];for(let O of this.readPropertyValueReferences(n,a)){let J=ee(this.catalog,{publisher:O.subject.publisher,package_:O.subject.package_,name:O.subject.name,...O.subject.version?{version:O.subject.version}:{}});if(!J)continue;let F=this.readPropertyValueText(J,s)??"",$=Date.parse(F);if(!Number.isFinite($))continue;let x=o?await this.evaluateCarrier(o,J)??"":"",z=(i?await this.evaluateCarrier(i,J):void 0)??D(this.catalog,J).label;c.push({t:$,dateStr:F,lane:x,label:z,href:this.hrefForSubject(J,t),linkable:this.isLinkable(ne(J),t)})}if(c.length===0)return"<!-- LookRenderer.TimePlot: no dated points -->";let l=[];for(let O of c)l.includes(O.lane)||l.push(O.lane);let d=Math.min(...c.map(O=>O.t)),f=Math.max(...c.map(O=>O.t));f===d&&(f=d+1);let g=l.some(O=>O),m=720,k=g?96:16,b=18,h=12,v=24,j=36,S=h+l.length*j+v,_=k,L=m-b,U=L-_,N=O=>_+(O-d)/(f-d)*U,I=O=>h+O*j+j/2,ce=O=>Math.round(O*360/Math.max(1,l.length)),C=[];l.forEach((O,J)=>{let F=I(J);C.push(`<line x1="${_}" y1="${F.toFixed(1)}" x2="${L}" y2="${F.toFixed(1)}" class="kan-plot-guide"/>`),O&&C.push(`<text x="${(k-8).toFixed(1)}" y="${(F+4).toFixed(1)}" text-anchor="end" class="kan-plot-lane">${Ke(O)}</text>`)});let P={},Y=[];for(let O of c){let J=l.indexOf(O.lane),$=((P[O.lane]=(P[O.lane]??0)+1)%3-1)*7,x=N(O.t),z=I(J)+$,K=`${ln(O.dateStr)} \xB7 ${O.label}`,A=`<circle cx="${x.toFixed(1)}" cy="${z.toFixed(1)}" r="5" fill="hsl(${ce(J)},65%,60%)" class="kan-plot-pt"><title>${Ke(K)}</title></circle>`;Y.push(O.linkable?`<a href="${p(O.href)}" class="kan-plot-link">${A}</a>`:A)}let se=`<text x="${_}" y="${(S-6).toFixed(1)}" text-anchor="start" class="kan-plot-axis">${Ke(ln(new Date(d).toISOString()))}</text><text x="${L}" y="${(S-6).toFixed(1)}" text-anchor="end" class="kan-plot-axis">${Ke(ln(new Date(f).toISOString()))}</text>`;return`<section class="kan-plot">${`<svg class="kan-plot-svg" viewBox="0 0 ${m} ${S}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">`+C.join("")+Y.join("")+se+"</svg>"}</section>`}renderDetails(e,n,t){let a=On(e,br),s=this.detailRows(n,t,a);return s?`<dl class="kan-details">${s}</dl>`:"<!-- LookRenderer.Details: no properties -->"}detailRows(e,n,t){let a=[];for(let s of e.statement){let o=s.predicate?.subject;if(!o||this.isMetaPredicate(o)||t.some(l=>R(l,o)))continue;let i=this.readLabelForUri({publisher:o.publisher,package_:o.package_,name:o.name})??o.name,c=this.detailValue(s,n,t);c&&a.push(`<dt class="kan-details-key">${p(i)}</dt><dd class="kan-details-val">${c}</dd>`)}return a.join("")}detailValue(e,n,t){if(e instanceof X)return St(e.object);if(e instanceof me||e instanceof re)return p(String(e.object));if(e instanceof V&&e.object instanceof E)return this.detailReferenceLink(e.object,n);if(e instanceof H)return this.detailEmbedded(e.object,n,t);if(e instanceof T){let a=e.object??[];return a.length>0&&a.every(s=>s instanceof M)?a.map(s=>this.detailEmbedded(s,n,t)).join(""):a.map(s=>s instanceof E?this.detailReferenceLink(s,n):s instanceof M?this.detailEmbedded(s,n,t):p(String(s))).filter(s=>s).join(", ")}return""}detailReferenceLink(e,n){let t=this.readLabelForUri({publisher:e.subject.publisher,package_:e.subject.package_,name:e.subject.name})??e.subject.name;if(!this.isLinkable(e.subject.publisher,n))return`<span class="kan-link-plain">${p(t)}</span>`;let a=this.urlForReference(e,void 0,n);return`<img class="kan-md-chip" src="${p(`${a}.svg`)}" alt="" loading="lazy"><a class="kan-link" href="${p(a)}">${p(t)}</a>`}detailEmbedded(e,n,t){let a=ze(e),s=a?this.readLabelForUri({publisher:a.publisher,package_:a.package_,name:a.name})??a.name:"",o=this.detailRows(e,n,t);return'<div class="kan-details-embed">'+(s?`<span class="kan-details-type">${p(s)}</span>`:"")+(o?`<dl class="kan-details">${o}</dl>`:"")+"</div>"}rangeTypeRefs(e){let n=ee(this.catalog,e);if(!n)return[];let t=W(n,ta);return t instanceof V&&t.object instanceof E?[t.object]:[]}async renderEmbeddedViews(e,n,t,a=""){let s=B(e,fe);if(!s)return"<!-- LookRenderer: EmbeddedViews missing look.source -->";let o=this.gatherValueItems(W(n,s)).filter(m=>m instanceof M);if(o.length===0)return"";let i=a?`${a}.${s.name}`:s.name,c=W(e,Nr),l=c instanceof re?c.object===!0:c instanceof X&&c.object==="true",d=[],f=[];for(let m of o){let k=m,b=m.name?`${i}.${m.name}`:"";if(l&&b){let U=D(this.catalog,k).label||m.name||b;d.push(`<a class="kan-section-nav-link" href="#${p(b)}">${p(U)}</a>`)}let h=be(k),v=h.length>0?h:this.rangeTypeRefs(s),j=on(k)?this.findCascadedLook(k):this.lookFromTypeRefs(v),S="";if(j){let U=[];for(let N of Ln(j.declaration))U.push(await this.renderBand(N,k,t,[],b));S=U.join(`
125
+ `)}else{let U=this.detailRows(m,t,[]);S=U?`<dl class="kan-details">${U}</dl>`:""}let _=b?` id="${p(b)}"`:"",L=b?this.anchorLink(b):"";f.push(`<section class="kan-embedded-view"${_}>${L}${S}</section>`)}return`<div class="kan-embedded-views">${d.length>0?`<nav class="kan-section-nav" aria-label="On this page">${d.join("")}</nav>
126
+ `:""}${f.join(`
127
+ `)}</div>`}anchorLink(e){return`<a class="kan-anchor" href="#${p(e)}" title="${p(e)}" aria-label="Link to this resource">#</a>`}isMetaPredicate(e){return R(e,Ir)||R(e,wn)||R(e,ct)||R(e,un)||R(e,dn)||R(e,vr)||R(e,kt)||R(e,cr)}renderPackageContents(e,n){let t=e.namespace||"";if(!t)return"";let a=this.catalog.filter(o=>o instanceof G&&o.namespace===t&&o.name!==e.name);return a.length===0?`<!-- LookRenderer.PackageContents: no members in ${t} -->`:(a.sort((o,i)=>{let c=D(this.catalog,o).label,l=D(this.catalog,i).label;return c.localeCompare(l)}),`<section class="kan-pkg-grid">${a.map(o=>{let i=D(this.catalog,o),c=i.label,l=i.summary,d=l?Un(l,160):"",f=this.hrefForSubject(o,n),g=this.svgUrlForSubject(o,n);return`<a class="kan-pkg-card" href="${p(f)}"><img class="kan-pkg-card-svg" src="${p(g)}" alt="" loading="lazy"/><span class="kan-pkg-card-body"><span class="kan-pkg-card-title">${p(c)}</span>`+(d?`<span class="kan-pkg-card-comment">${p(d)}</span>`:"")+"</span></a>"}).join("")}</section>`)}renderReferencedBy(e,n,t){let a=B(e,Vr),s={publisher:ne(n),package_:(n.namespace||"").split("/")[1]?.split("@")[0]??"",name:n.name},o=Z(s),i=g=>ye((g.namespace||"").split("@")[1]??"")??{major:0,minor:0,patch:0},c=(g,m)=>g.major-m.major||g.minor-m.minor||g.patch-m.patch,l=new Map;for(let g of this.catalog){if(!(g instanceof G))continue;let m=Z({publisher:ne(g),package_:(g.namespace||"").split("/")[1]?.split("@")[0]??"",name:g.name});if(m!==o)for(let k of g.statement){let b=k.predicate?.subject;if(!b||b.name==="type"||a&&Z(b)!==Z(a))continue;let h=[];if(k instanceof V&&k.object instanceof E)h.push(k.object);else if(k instanceof T)for(let _ of k.object??[])_ instanceof E&&h.push(_);if(!h.some(_=>Z(_.subject)===o))continue;let v=Z(b),j=l.get(v);j||(j={label:this.readLabelForUri(b)??b.name,best:new Map},l.set(v,j));let S=j.best.get(m);(!S||c(i(g),i(S))>0)&&j.best.set(m,g)}}return l.size===0?"<!-- LookRenderer.ReferencedBy: no incoming references -->":`<div class="kan-section"><h2 class="kan-section-title">Referenced by</h2></div>${[...l.values()].sort((g,m)=>g.label.localeCompare(m.label)).map(g=>{let k=[...g.best.values()].sort((b,h)=>D(this.catalog,b).label.localeCompare(D(this.catalog,h).label)).map(b=>this.resourceCard(b,t,n.namespace??void 0)).join("");return`<div class="kan-rel-group"><h3 class="kan-rel-prop"><span class="kan-rel-dir" title="incoming \u2014 references this resource">\u2190</span> ${p(g.label)}</h3><section class="kan-pkg-grid">${k}</section></div>`}).join("")}`}resourceCard(e,n,t){let a=D(this.catalog,e),s=a.summary?Un(a.summary,160):"",o=be(e).map(h=>this.readLabelForUri({publisher:h.subject.publisher,package_:h.subject.package_,name:h.subject.name})??h.subject.name),c='<span class="kan-pkg-card-body">'+(o.length>0?`<span class="kan-card-types">${o.map(h=>`<span class="kan-card-type">${p(h)}</span>`).join("")}</span>`:"")+`<span class="kan-pkg-card-title">${p(a.label)}</span>`+(s?`<span class="kan-pkg-card-comment">${p(s)}</span>`:"")+"</span>",l=this.isLinkable(ne(e),n),d=l?`<a class="kan-pkg-card-link" href="${p(this.hrefForSubject(e,n))}"><img class="kan-pkg-card-svg" src="${p(this.svgUrlForSubject(e,n))}" alt="" loading="lazy"/>`+c+"</a>":`<span class="kan-pkg-card-link">${c}</span>`,f=e.namespace||"",g=f.split("/")[0]??"",[m,k]=(f.split("/")[1]??"").split("@"),b="";if(m&&f!==t){let h=k?`<span class="kan-card-at">@</span><span class="kan-card-ver">${p(k)}</span>`:"";if(l){let v=`<span class="kan-card-pkg">${p(m)}</span>${h}`;b=`<a class="kan-pkg-card-foot" href="${p(this.packageHref(g,m,k||void 0))}" title="${p(k?`${m}@${k}`:m)}">${v}</a>`}else{let v=`<span class="kan-card-pub">${p(g)}/</span><span class="kan-card-pkg">${p(m)}</span>${h}`;b=`<span class="kan-pkg-card-foot" title="${p(k?`${g}/${m}@${k}`:`${g}/${m}`)}">${v}</span>`}}return`<div class="kan-pkg-card kan-pkg-card--foot">${d}${b}</div>`}renderInstances(e,n,t){let a={publisher:ne(n),package_:(n.namespace||"").split("/")[1]?.split("@")[0]??"",name:n.name},s=W(e,Pr),o=s instanceof re?s.object===!0:s instanceof X&&s.object==="true",i=o?this.subclassClosure(a):new Set([Z(a)]),c=v=>ye((v.namespace||"").split("@")[1]??"")??{major:0,minor:0,patch:0},l=(v,j)=>v.major-j.major||v.minor-j.minor||v.patch-j.patch,d=new Map;for(let v of this.catalog){if(!(v instanceof G)||!be(v).some(L=>i.has(Z(L.subject))))continue;let S=Z({publisher:ne(v),package_:(v.namespace||"").split("/")[1]?.split("@")[0]??"",name:v.name}),_=d.get(S);(!_||l(c(v),c(_))>0)&&d.set(S,v)}let f=[...d.values()];if(f.length===0)return"<!-- LookRenderer.Instances: none -->";f.sort((v,j)=>D(this.catalog,v).label.localeCompare(D(this.catalog,j).label));let g=48,m=f.slice(0,g),k=m.map(v=>this.resourceCard(v,t,n.namespace??void 0)),b=f.length>g?` <span class="kan-count">${m.length} of ${f.length}</span>`:` <span class="kan-count">${f.length}</span>`;return`<div class="kan-section"><h2 class="kan-section-title">${o?"Instances (including subtypes)":"Instances"}${b}</h2></div><section class="kan-pkg-grid">${k.join("")}</section>`}subclassClosure(e){let n=new Set([Z(e)]),t=!0;for(;t;){t=!1;for(let a of this.catalog){if(!(a instanceof G))continue;let s=Z({publisher:ne(a),package_:(a.namespace||"").split("/")[1]?.split("@")[0]??"",name:a.name});if(!n.has(s)){for(let o of Qe(a))if(n.has(Z(o.subject))){n.add(s),t=!0;break}}}}return n}referencesTarget(e,n,t){for(let a of e.statement){let s=a.predicate?.subject;if(s?.name==="type"||t&&!(s&&Z(s)===Z(t)))continue;let o=[];if(a instanceof V&&a.object instanceof E)o.push(a.object);else if(a instanceof T)for(let i of a.object??[])i instanceof E&&o.push(i);for(let i of o)if(Z(i.subject)===n)return!0}return!1}async renderFeaturedResource(e,n){let t=B(e,fe);if(!t)return"<!-- LookRenderer.FeaturedResource: no look.source -->";let a=ke(this.catalog,t),s=l=>ye((l.namespace||"").split("@")[1]??"")??{major:0,minor:0,patch:0},o=a.length>0?a.slice().sort((l,d)=>{let f=s(l),g=s(d);return g.major-f.major||g.minor-f.minor||g.patch-f.patch})[0]:ee(this.catalog,t);if(!o)return`<!-- LookRenderer.FeaturedResource: ${t.publisher}/${t.package_}/${t.name} not found -->`;let i=await this.renderHtml(o),c=this.hrefForSubject(o,n);return`<section class="kan-featured"><a class="kan-featured-permalink" href="${p(c)}">View full resource \u2192</a>`+i+"</section>"}async renderDistribution(e,n){let t=async F=>{let $=this.readEmbeddedCarrier(e,F);if(!$)return;let x=await this.evaluateCarrierNum($,n);return Number.isFinite(x)?x:void 0},a=await t(ur),s=await t(dr);if(a===void 0||s===void 0||a<=0||s<=0)return"<!-- LookRenderer.Distribution: needs resolvable alphaPath + betaPath (> 0) -->";let o=await t(sn)??a/(a+s),i=await t(gt),c=await t(mt),l=await t(Kn),d=l!==void 0?`hsl(${l},65%,60%)`:"var(--kan-accent)",f=F=>Number.isInteger(F)?String(F):F.toFixed(1),g=280,m=168,k={top:14,right:14,bottom:24,left:14},b=g-k.left-k.right,h=m-k.top-k.bottom,v=120,j=1e-4,S=[],_=[],L=0;for(let F=0;F<=v;F++){let $=F/v;$<j?$=j:$>1-j&&($=1-j);let x=Math.exp((a-1)*Math.log($)+(s-1)*Math.log(1-$));S.push($),_.push(x),x>L&&(L=x)}let U=F=>k.left+Math.min(1,Math.max(0,F))*b,N=F=>k.top+(1-(L>0?F/L:0))*h,I=k.top+h,ce=S.map((F,$)=>`${U(F).toFixed(1)},${N(_[$]).toFixed(1)}`),C=`M${U(0).toFixed(1)},${I.toFixed(1)} L${ce.join(" L")} L${U(1).toFixed(1)},${I.toFixed(1)} Z`,P="";if(i!==void 0&&c!==void 0&&c>i){let F=[`${U(i).toFixed(1)},${I.toFixed(1)}`];for(let $=0;$<=v;$++)S[$]>=i&&S[$]<=c&&F.push(`${U(S[$]).toFixed(1)},${N(_[$]).toFixed(1)}`);F.push(`${U(c).toFixed(1)},${I.toFixed(1)}`),P=`<path d="M${F.join(" L")} Z" fill="${d}" fill-opacity="0.3"/>`}let Y=U(o),se=`<line x1="${Y.toFixed(1)}" y1="${k.top.toFixed(1)}" x2="${Y.toFixed(1)}" y2="${I.toFixed(1)}" stroke="${d}" stroke-width="1.5" stroke-dasharray="3 3"/><text x="${Y.toFixed(1)}" y="${(k.top-3).toFixed(1)}" text-anchor="middle" class="kan-dist-mean">\u03BC ${o.toFixed(2)}</text>`,le=`<text x="${U(0).toFixed(1)}" y="${(I+15).toFixed(1)}" text-anchor="start" class="kan-dist-axis">0</text><text x="${U(1).toFixed(1)}" y="${(I+15).toFixed(1)}" text-anchor="end" class="kan-dist-axis">1</text>`,O=`<svg class="kan-dist-svg" viewBox="0 0 ${g} ${m}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img"><line x1="${k.left}" y1="${I.toFixed(1)}" x2="${(g-k.right).toFixed(1)}" y2="${I.toFixed(1)}" class="kan-dist-base"/><path d="${C}" fill="${d}" fill-opacity="0.12"/>`+P+`<polyline points="${ce.join(" ")}" fill="none" stroke="${d}" stroke-width="2"/>`+se+le+"</svg>",J=i!==void 0&&c!==void 0?` \xB7 95% CI [${i.toFixed(2)}\u2013${c.toFixed(2)}]`:"";return`<figure class="kan-dist">${O}<figcaption class="kan-dist-caption">Beta(${f(a)}, ${f(s)})${J}</figcaption></figure>`}renderPublisherPackages(e,n){let t=new Map;for(let c of this.catalog){if(!(c instanceof G)||ne(c)!==n)continue;let l=(c.namespace||"").split("/")[1]?.split("@")[0]??"";if(!l||c.name!==l)continue;let d=t.get(l),f=ye((c.namespace||"").split("@")[1]??""),g=d?ye((d.namespace||"").split("@")[1]??""):void 0;(!d||f&&(!g||en(f,g)>0))&&t.set(l,c)}let a,s=W(e,er),o=s instanceof T?s.object??[]:s instanceof V&&s.object instanceof E?[s.object]:[];if(o.length>0){a=[];for(let c of o){if(!(c instanceof E))continue;let l=c.subject.package_,d=t.get(l);d&&a.push([l,d])}}else a=[...t.entries()].sort((c,l)=>c[0].localeCompare(l[0]));return a.length===0?"":`<section class="kan-pkg-grid">${a.map(([c,l])=>{let d=D(this.catalog,l),f=d.label,g=d.summary,m=g?Un(g,160):"",k=this.svgUrlForSubject(l,n);return`<a class="kan-pkg-card" href="${p(this.packageHref(n,c))}"><img class="kan-pkg-card-svg" src="${p(k)}" alt="" loading="lazy"/><span class="kan-pkg-card-body"><span class="kan-pkg-card-title">${p(f)}</span>`+(m?`<span class="kan-pkg-card-comment">${p(m)}</span>`:"")+"</span></a>"}).join("")}</section>`}async renderTimeline(e,n){let t=B(e,fe);if(!t)return"<!-- LookRenderer.Timeline: no look.source -->";let a=B(e,En),s=this.findInstancesOfClass(t);if(s.length===0)return"<!-- LookRenderer.Timeline: no instances -->";let o=f=>a?this.readPropertyValueText(f,a)??"":"",i=s.slice().sort((f,g)=>o(f).localeCompare(o(g))),c=B(e,pt),l=this.readEmbeddedCarrier(e,sn);return c&&l?this.renderTrajectoryChart(i,c,l,e,n,o):`<section class="kan-timeline"><ol>
128
+ ${i.map(f=>{let g=f.namespace||"",m=g.split("/")[1]?.split("@")[0]??"",k=g.split("@")[1]??"",b=k?ye(k):void 0,h=this.resourceHref({publisher:ne(f),package_:m,name:f.name,...b?{version:b}:{}},n),v=o(f),j=v?`<span class="kan-timeline-date">${p(v)}</span>`:"",S=k||f.name;return`<li class="kan-timeline-node"><a href="${p(h)}"><span class="kan-timeline-key">${p(S)}</span>${j}</a></li>`}).join(`
129
+ `)}
130
+ </ol></section>`}async renderTrajectoryChart(e,n,t,a,s,o){let i=a,c=this.readEmbeddedCarrier(a,Kn),l=this.readEmbeddedCarrier(a,gt),d=this.readEmbeddedCarrier(a,mt),f=Q(i,Kr),g=yt(i,_r),m=yt(i,Er),k=e.length,b=await this.collectTrackedSeries(e,n,t,{hueBy:c,lowerPath:l,upperPath:d});if(b.length===0)return"<!-- LookRenderer.Timeline: no tracked series -->";let h=[];for(let K of b){for(let A of K.points)A!==null&&h.push(A);for(let A of K.lower??[])A!==null&&h.push(A);for(let A of K.upper??[])A!==null&&h.push(A)}if(h.length===0)return"<!-- LookRenderer.Timeline: no metric values -->";let v=Math.min(...h),j=Math.max(...h);j-v<1e-9&&(v-=.5,j+=.5);let S=(j-v)*.08,_=g!==void 0?g:v-S,L=m!==void 0?m:j+S;L-_<1e-9&&(L=_+1);let U=1e3,N=440,I={top:28,right:24,bottom:56,left:52},ce=U-I.left-I.right,C=N-I.top-I.bottom,P=K=>k<=1?I.left+ce/2:I.left+K/(k-1)*ce,Y=K=>I.top+(1-(K-_)/(L-_))*C,se=(K,A)=>K.hue!==void 0?K.hue:Math.round(A*360/b.length),le=[];for(let K=0;K<5;K++){let A=_+K*(L-_)/4,pe=Y(A);le.push(`<line x1="${I.left}" y1="${pe.toFixed(1)}" x2="${(U-I.right).toFixed(1)}" y2="${pe.toFixed(1)}" class="kan-fan-grid"/>`),le.push(`<text x="${(I.left-8).toFixed(1)}" y="${(pe+4).toFixed(1)}" class="kan-fan-axis" text-anchor="end">${A.toFixed(2)}</text>`)}let O=[];e.forEach((K,A)=>{let pe=this.hrefForSubject(K,s),ge=(K.namespace||"").split("@")[1]??"",te=P(A),oe=ln(o(K));O.push(`<a href="${p(pe)}" class="kan-fan-xtick"><line x1="${te.toFixed(1)}" y1="${I.top}" x2="${te.toFixed(1)}" y2="${(N-I.bottom).toFixed(1)}" class="kan-fan-vline"/><text x="${te.toFixed(1)}" y="${(N-I.bottom+20).toFixed(1)}" class="kan-fan-xlabel" text-anchor="middle">${Ke(ge||K.name)}</text>`+(oe?`<text x="${te.toFixed(1)}" y="${(N-I.bottom+36).toFixed(1)}" class="kan-fan-xdate" text-anchor="middle">${Ke(oe)}</text>`:"")+"</a>")});let J=[];b.forEach((K,A)=>{if(!K.lower||!K.upper)return;let pe=se(K,A),ge=[],te=[];for(let ie=0;ie<k;ie++){let Re=K.upper[ie],je=K.lower[ie];Re==null||je===null||je===void 0||(ge.push(`${P(ie).toFixed(1)},${Y(Re).toFixed(1)}`),te.unshift(`${P(ie).toFixed(1)},${Y(je).toFixed(1)}`))}let oe=ge.concat(te);oe.length<3||J.push(`<polygon class="kan-fan-band" points="${oe.join(" ")}" fill="hsl(${pe},65%,60%)"/>`)});let F=[];b.forEach((K,A)=>{let ge=`hsl(${se(K,A)},65%,60%)`,te=[],oe=[];K.points.forEach((ie,Re)=>{if(ie===null)return;let je=P(Re),ae=Y(ie);te.push(`${je.toFixed(1)},${ae.toFixed(1)}`),oe.push(`<circle cx="${je.toFixed(1)}" cy="${ae.toFixed(1)}" r="3.5" fill="${ge}"/>`)}),te.length!==0&&F.push(`<g class="kan-fan-series" data-series="${p(K.key)}"><polyline points="${te.join(" ")}" fill="none" stroke="${ge}" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/>`+oe.join("")+"</g>")});let $=`<svg class="kan-fan-svg" viewBox="0 0 ${U} ${N}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">`+le.join("")+O.join("")+J.join("")+F.join("")+"</svg>",x=f?`${p(f)}=`:"",z=b.map((K,A)=>{let pe=se(K,A),ge=K.points.filter(ae=>ae!==null),te=ge.length?ge[0]:void 0,oe=ge.length?ge[ge.length-1]:void 0,ie="";if(oe!==void 0&&te!==void 0){let ae=oe-te;if(Math.abs(ae)>=.005){let Fe=ae>0?"up":"down",Le=ae>0?"\u25B2":"\u25BC";ie=` <span class="kan-fan-delta ${Fe}">${ae>0?"+":""}${ae.toFixed(2)} ${Le}</span>`}else ie=' <span class="kan-fan-delta flat">\u2014</span>'}let Re=oe!==void 0?`${x}${oe.toFixed(2)}`:"\u2014",je=K.lastSubject&&this.isLinkable(ne(K.lastSubject),s)?`<a href="${p(this.hrefForSubject(K.lastSubject,s))}">${p(K.label)}</a>`:p(K.label);return`<div class="kan-fan-legend-item" style="--kan-fan-hue:${pe}"><span class="kan-fan-swatch"></span><span class="kan-fan-legend-label">${je}</span><span class="kan-fan-legend-cur">${Re}${ie}</span></div>`});return`<section class="kan-fan"><div class="kan-fan-chart">${$}</div><div class="kan-fan-legend">${z.join("")}</div></section>`}renderResourceGrid(e,n,t){let a=B(e,fe);if(!a)return"<!-- LookRenderer.ResourceGrid: no look.source -->";let s=ee(this.catalog,a),o=s?be(s).some(l=>{let d=l.subject.name;return d==="ObjectProperty"||d==="DatatypeProperty"||d==="Property"}):!1,i=[];if(o&&t){let l=this.readPropertyValueReferences(t,a);for(let d of l){let f=ee(this.catalog,{publisher:d.subject.publisher,package_:d.subject.package_,name:d.subject.name,...d.subject.version?{version:d.subject.version}:{}});f&&i.push(f)}}else i=this.findInstancesOfClass(a);if(i.length===0)return`<!-- LookRenderer.ResourceGrid: no resources for ${a.publisher}/${a.package_}/${a.name} -->`;let c=[];for(let l of i){let d=D(this.catalog,l),f=d.label,g=d.summary,m=l.namespace||"",k=m.split("/")[1]?.split("@")[0]??"",b=m.split("@")[1]??"",h=b?ye(b):void 0,v=this.resourceHref({publisher:ne(l),package_:k,name:l.name,...h?{version:h}:{}},n),j=g?`<p class="kan-resource-card-subtitle">${p(g)}</p>`:"",S=`<h3 class="kan-resource-card-title">${p(f)}</h3>${j}`;c.push(this.isLinkable(ne(l),n)?`<a class="kan-resource-card" href="${p(v)}">${S}</a>`:`<span class="kan-resource-card">${S}</span>`)}return`<section class="kan-resource-grid">
131
+ ${c.join(`
132
+ `)}
133
+ </section>`}findInstancesOfClass(e){let n=[];for(let t of this.catalog){if(!(t instanceof G))continue;be(t).map(o=>o.subject).some(o=>o.publisher===e.publisher&&o.package_===e.package_&&o.name===e.name)&&n.push(t)}return n}renderBreadcrumb(e,n,t){let s=(e.namespace||"").split("/");if(s.length<2)return"";let o=s[0],i=s[1]??"",c=i.split("@")[0]??"",l=i.split("@")[1]??"";if(!o||!c)return"";if(t?.bareOverview)return`<nav class="kan-breadcrumb"><ol>
134
+ <li><a href="${p(this.publisherHref(o))}">${p(o)}</a></li>
135
+ <li aria-current="page">${p(c)}</li>
136
+ </ol></nav>`;let d=e.name,g=!!ee(this.catalog,{publisher:o,package_:c,name:c}),m=l?`${c}@${l}`:c,k=this.resourceHref({publisher:o,package_:c,name:c,...l?{version:ye(l)}:{}},o),b=e.name===c,h=[];return h.push(`<li><a href="${p(this.publisherHref(o))}">${p(o)}</a></li>`),b?h.push(`<li aria-current="page">${p(m)}</li>`):(h.push(g?`<li><a href="${p(k)}">${p(m)}</a></li>`:`<li>${p(m)}</li>`),h.push(`<li aria-current="page">${p(d)}</li>`)),`<nav class="kan-breadcrumb"><ol>
137
+ ${h.join(`
138
+ `)}
139
+ </ol></nav>`}renderNavGroup(e,n){let t=W(this.publisherSubject(n),ga),a=t instanceof T?t.object??[]:t instanceof V&&t.object instanceof E?[t.object]:[];if(a.length===0)return"";let s=[];for(let o of a){if(!(o instanceof E))continue;let i=ee(this.catalog,{publisher:o.subject.publisher,package_:o.subject.package_,name:o.subject.name}),{href:c,label:l}=this.resolveNavEntry(o,i,n),d=this.hrefForSubject(e,n),f=c===d?' aria-current="page"':"";s.push(`<li><a class="kan-nav-link" href="${p(c)}"${f}>${p(l)}</a></li>`)}return`<nav class="kan-site-nav"><ul>
140
+ ${s.join(`
141
+ `)}
142
+ </ul></nav>`}renderSiteFooter(e){let n=W(this.publisherSubject(e),ma),t;if(n instanceof H?t=n.object:n instanceof V&&n.object instanceof E&&(t=ee(this.catalog,{publisher:n.object.subject.publisher,package_:n.object.subject.package_,name:n.object.subject.name})),!t)return"";let a=Q(t,ka),s=W(t,ha),o=s instanceof T?s.object??[]:s instanceof V&&s.object instanceof E?[s.object]:[],i=[];for(let l of o){if(!(l instanceof E))continue;let d=ee(this.catalog,{publisher:l.subject.publisher,package_:l.subject.package_,name:l.subject.name}),{href:f,label:g}=this.resolveNavEntry(l,d,e);i.push(`<a class="kan-footer-link" href="${p(f)}">${p(g)}</a>`)}if(!a&&i.length===0)return"";let c=[];return i.length>0&&c.push(`<div class="kan-footer-links">${i.join("")}</div>`),a&&c.push(`<p class="kan-footer-text">${p(a)}</p>`),`<footer class="kan-site-footer">${c.join(`
143
+ `)}</footer>`}resolveNavEntry(e,n,t){if(n&&be(n).map(c=>c.subject).some(c=>c.publisher===jn.publisher&&c.package_===jn.package_&&c.name===jn.name)){let c=Q(n,wn),l=W(n,ut);if(l instanceof V&&l.object instanceof E){let d=l.object,f=this.readLabelForUri({publisher:d.subject.publisher,package_:d.subject.package_,name:d.subject.name});return{href:this.urlForReference(d,ut,t),label:c??f??d.subject.name}}}let a=this.resourceHref({publisher:e.subject.publisher,package_:e.subject.package_,...e.subject.version?{version:e.subject.version}:{},name:e.subject.name},t,"*"),s=n?D(this.catalog,n).label:e.subject.name;return{href:a,label:s}}codeHighlighter(){return this._codeHighlighter||(this._codeHighlighter=new rn(this.collectGrammars())),this._codeHighlighter}collectGrammars(){let e=[];for(let n of this.catalog){if(!(n instanceof G)||!be(n).some(i=>R(i.subject,nr)))continue;let t=Q(n,tr);if(!t)continue;let a=W(n,ar),s=a instanceof T?a.object??[]:[],o=[];for(let i of s){if(!(i instanceof M))continue;let c=B(i,rr),l=Q(i,sr);!c||!l||o.push({tokenClass:c.name,pattern:l})}e.push({language:t,rules:o})}return e}renderLinks(e,n){let t=B(e,fe);if(!t)return"";let a=W(n,t),s=[];a instanceof T?s=a.object??[]:a instanceof H?s=[a.object]:a instanceof V&&a.object instanceof E&&(s=[a.object]);let o=[];for(let i of s){let c;if(i instanceof M?c=i:i instanceof E&&(c=ee(this.catalog,{publisher:i.subject.publisher,package_:i.subject.package_,name:i.subject.name})),!c)continue;let l=Q(c,ir);if(!l)continue;let d=Q(c,wn)??l,f=Q(c,ct),g=f?` title="${p(f)}"`:"";o.push(`<a class="kan-extlink" href="${p(l)}"${g} target="_blank" rel="noopener noreferrer">${p(d)}</a>`)}return o.length===0?"":`<section class="kan-extlink-row">${o.join("")}</section>`}renderMarkdown(e,n,t){let a=B(e,fe);if(!a)return"<!-- LookRenderer.Markdown: no look.source -->";let s=W(n,a),o=new Map,i;if(s instanceof Me?i=this.resolveMarkdownLinks(s,t,o):s instanceof X?i=s.object:i=this.readPropertyValueText(n,a),!i)return"";let c=this.codeHighlighter(),l=Ye(i,{highlight:(d,f)=>c.highlight(d,f)});for(let[d,f]of o){let g=new RegExp('(<a href="'+jt(d)+'">)([^<]*)(</a>)',"g");l=l.replace(g,`$1<img class="kan-md-chip" src="${p(f)}" alt="" loading="lazy">$2$3`)}return`<section class="kan-markdown">
144
+ ${l}
145
+ </section>`}resolveMarkdownLinks(e,n,t){let a=e.object,s=[...e.links].sort((o,i)=>i.startOffset-o.startOffset);for(let o of s){let i;if(o.target&&this.isLinkable(o.target.subject.publisher,n)){let c=o.target.subject,l=(o.displayText??this.readLabelForUri({publisher:c.publisher,package_:c.package_,name:c.name})??o.reference).replace(/[[\]]/g,""),d=this.resourceHref({publisher:c.publisher,package_:c.package_,name:c.name,...c.version?{version:c.version}:{}},n);t&&t.set(d,`${d}.svg`),i=`[${l}](${d})`}else if(o.target){let c=o.target.subject;i=(o.displayText??this.readLabelForUri({publisher:c.publisher,package_:c.package_,name:c.name})??o.reference).replace(/[[\]]/g,"")}else i=o.displayText??o.reference;a=a.slice(0,o.startOffset)+i+a.slice(o.endOffset)}return a}renderRawMarkdown(e){let n=this.findCascadedLook(e);if(!n)return;let t=Ln(n.declaration),a=[];for(let s of t){let o=ze(s);if(!o||!R(o,lt))continue;let i=B(s,fe);if(!i)continue;let c=this.readPropertyValueText(e,i);c&&a.push(c)}return a.length>0?a.join(`
146
+
147
+ `):void 0}renderHero(e,n,t){let a=b=>{let h=W(e,b);return h instanceof re?h.object===!0:h instanceof X&&h.object==="true"},s=a(Mr),o=!s&&a(xr),i=s||o,l=[`<header class="${s?"kan-hero kan-hero-has-avatar":o?"kan-hero kan-hero-has-icon":"kan-hero"}">`];if(i){let b=this.svgUrlForSubject(n,t),h=s?"kan-hero-avatar":"kan-hero-icon";l.push(`<img class="${h}" src="${p(b)}" alt="" loading="lazy"/>`),l.push('<div class="kan-hero-text">')}let d=B(e,Fr);if(d){let b=this.readPropertyValueText(n,d);b&&l.push(`<span class="kan-hero-eyebrow">${p(fn(b)??b)}</span>`)}let f=B(e,Cr),g="";f&&(g=this.readPropertyValueText(n,f)??""),g||(g=D(this.catalog,n).label),l.push(`<h1 class="kan-hero-title">${p(fn(g)??g)}</h1>`);let m=B(e,Tr);if(m){let b=this.readPropertyValueText(n,m);b&&l.push(`<p class="kan-hero-subtitle">${p(fn(b)??b)}</p>`)}let k=B(e,bt);if(k){let b=this.readPropertyValueReferences(n,k);if(b.length>0){let h=b.map(v=>this.renderBadge(v,bt,t)).join("");l.push(`<div class="kan-hero-badges">${h}</div>`)}}return i&&l.push("</div>"),l.push("</header>"),l.join(`
148
+ `)}renderPropertyList(e,n,t){let a=B(e,fe);if(!a)return"<!-- LookRenderer: PropertyList missing look.source -->";let s=this.readLabelForUri(a)??a.name,o=W(n,a),i=this.gatherValueItems(o),c=i.length>0?i.map(l=>`<li>${this.renderInlineValue(l,fe,t)}</li>`).join(""):'<li class="kan-empty">(no values)</li>';return['<section class="kan-property-list">',`<h3 class="kan-property-list-title">${p(s)}</h3>`,`<ul class="kan-property-list-items">${c}</ul>`,"</section>"].join(`
149
+ `)}renderPropertyTable(e,n,t,a=""){let s=B(e,fe);if(!s)return"<!-- LookRenderer: PropertyTable missing look.source -->";let o=this.gatherValueItems(W(n,s)).filter(l=>l instanceof M);if(o.length===0)return"";let i=this.readLabelForUri(s)??s.name,c=a?`${a}.${s.name}`:s.name;return this.renderEmbeddedTable(o,t,i,c)}renderEmbeddedTable(e,n,t,a){let s=[],o=new Set;for(let b of e)for(let h of b.statement){let v=h.predicate?.subject;if(!v||this.isMetaPredicate(v))continue;let j=`${v.publisher}/${v.package_}/${v.name}`;o.has(j)||(o.add(j),s.push({uri:{publisher:v.publisher,package_:v.package_,name:v.name},label:this.readLabelForUri(v)??v.name}))}if(s.length===0)return"";let i=e.map(b=>D(this.catalog,b).label),c=e.some((b,h)=>i[h]!==""&&i[h]!==b.name),l=!!a,d=(l?'<th class="kan-anchor-col"></th>':"")+(c?"<th></th>":"")+s.map(b=>`<th>${p(b.label)}</th>`).join(""),f=e.map((b,h)=>{let v=l&&b.name?`${a}.${b.name}`:"",j=v?` id="${p(v)}"`:"",S=l?`<td class="kan-anchor-col">${v?this.anchorLink(v):""}</td>`:"",_=c?`<th scope="row">${p(i[h]??"")}</th>`:"",L=s.map(U=>{let N=W(b,U.uri);return`<td>${N?this.tableCellValue(N,n):""}</td>`}).join("");return`<tr${j}>${S}${_}${L}</tr>`}).join(""),g=l&&a?` id="${p(a)}"`:"",m=l&&a?this.anchorLink(a):"",k=t?`<caption>${p(t)}${m}</caption>`:"";return`<table class="kan-property-table"${g}>${k}<thead><tr>${d}</tr></thead><tbody>${f}</tbody></table>`}tableCellValue(e,n){if(e instanceof Me)return this.statementToMarkdownHtml(e,n);if(e instanceof X)return St(e.object);if(e instanceof me||e instanceof re)return p(String(e.object));if(e instanceof V&&e.object instanceof E)return this.detailReferenceLink(e.object,n);if(e instanceof H)return this.renderEmbeddedTable([e.object],n);if(e instanceof T){let t=e.object??[],a=t.filter(s=>s instanceof M);return a.length>0&&a.length===t.length?this.renderEmbeddedTable(a,n):t.map(s=>s instanceof E?this.detailReferenceLink(s,n):s instanceof M?this.renderEmbeddedTable([s],n):p(String(s))).filter(s=>s).join(", ")}return""}statementToMarkdownHtml(e,n){let t=new Map,a;if(e instanceof Me?a=this.resolveMarkdownLinks(e,n,t):e instanceof X&&(a=e.object),!a)return"";let s=this.codeHighlighter(),o=Ye(a,{highlight:(i,c)=>s.highlight(i,c)});for(let[i,c]of t){let l=new RegExp('(<a href="'+jt(i)+'">)([^<]*)(</a>)',"g");o=o.replace(l,`$1<img class="kan-md-chip" src="${p(c)}" alt="" loading="lazy">$2$3`)}return o}renderBadgeRow(e,n,t){let a=B(e,fe);if(!a)return"<!-- LookRenderer: BadgeRow missing look.source -->";let s=this.readPropertyValueReferences(n,a);return s.length===0?"":`<div class="kan-badge-row">${s.map(i=>this.renderBadge(i,fe,t)).join("")}</div>`}renderChipRow(e,n,t){let a=On(e,Dr);if(a.length===0)return"<!-- LookRenderer: ChipRow has no look.chips -->";let s=[];for(let o of a){let i=W(n,o);if(!i)continue;let c=this.readLabelForUri(o)??o.name,l=this.renderStatementInlineValue(i,o,t);l&&s.push(`<span class="kan-chip"><span class="kan-chip-key">${p(c)}</span> <span class="kan-chip-val">${l}</span></span>`)}return s.length===0?"":`<div class="kan-chip-row">${s.join("")}</div>`}async renderReferenceList(e,n,t){let a=On(e,vt);if(a.length===0)return"<!-- LookRenderer: ReferenceList has no look.entries -->";let s=this.readEmbeddedCarrier(e,ft),o=this.readEmbeddedCarrier(e,Sr),i=[];for(let c of a){let l=this.readPropertyValueReferences(n,c);if(l.length===0)continue;let d=this.readLabelForUri(c)??c.name;if(s){let f=[];for(let m of l)f.push(await this.renderDetailRow(m,s,o,t));let g=f.filter(m=>m).join("");g&&i.push(`<dt>${p(d)}</dt><dd><ul class="kan-ref-rows">${g}</ul></dd>`)}else{let f=l.map(g=>this.renderReferenceLink(g,vt,t)).join(", ");i.push(`<dt>${p(d)}</dt><dd>${f}</dd>`)}}return i.length===0?"":`<dl class="kan-reference-list">${i.join("")}</dl>`}async renderDetailRow(e,n,t,a){let s=ee(this.catalog,{publisher:e.subject.publisher,package_:e.subject.package_,name:e.subject.name,...e.subject.version?{version:e.subject.version}:{}});if(!s)return"";let o=await this.evaluateCarrier(n,s)??D(this.catalog,s).label,i="";if(t){let f=await this.evaluateCarrier(t,s);f&&(i=`<span class="kan-ref-badge">${p(f)}</span>`)}let c=`<span class="kan-ref-text">${p(o)}</span>${i}`;if(!this.isLinkable(ne(s),a))return`<li class="kan-ref-row"><span class="kan-ref-rowlink">${c}</span></li>`;let l=this.hrefForSubject(s,a),d=this.svgUrlForSubject(s,a);return`<li class="kan-ref-row"><a class="kan-ref-rowlink" href="${p(l)}"><img class="kan-ref-icon" src="${p(d)}" alt="" loading="lazy"/>`+c+"</a></li>"}readPropertyValueText(e,n){let t=W(e,n);if(t){if(t instanceof X)return t.object;if(t instanceof V){let a=t.object;return this.readLabelForUri({publisher:a.subject.publisher,package_:a.subject.package_,name:a.subject.name})??a.subject.name}if(t instanceof H)return this.readEmbeddedText(t.object,0)||void 0;if(t instanceof T)return(t.object??[]).map(s=>s instanceof E?this.readLabelForUri({publisher:s.subject.publisher,package_:s.subject.package_,name:s.subject.name})??s.subject.name:s instanceof M?this.readEmbeddedText(s,0):String(s)).filter(s=>s).join(", ")}}readEmbeddedText(e,n){if(n>=ht)return"\u2026";let t=[];for(let a of e.statement)if(a.predicate?.subject?.name!=="type")if(a instanceof X)t.push(a.object);else if(a instanceof me||a instanceof re)t.push(String(a.object));else if(a instanceof V){let o=a.object;t.push(this.readLabelForUri({publisher:o.subject.publisher,package_:o.subject.package_,name:o.subject.name})??o.subject.name)}else a instanceof H&&t.push(this.readEmbeddedText(a.object,n+1));return t.filter(a=>a).join(", ")}readPropertyValueReferences(e,n){let t=W(e,n);if(!t)return[];if(t instanceof V)return[t.object];if(t instanceof T){let a=[];for(let s of t.object??[])s instanceof E&&a.push(s);return a}return[]}gatherValueItems(e){return e?e instanceof T?e.object??[]:e instanceof V?[e.object]:e instanceof H?[e.object]:e instanceof X?[e.object]:e instanceof me||e instanceof re?[e.object]:[]:[]}renderInlineValue(e,n,t,a=0){return e instanceof E?this.renderReferenceLink(e,n,t):e instanceof M?this.renderEmbeddedInline(e,t,a):typeof e=="string"?p(e):typeof e=="number"||typeof e=="boolean"?p(String(e)):""}renderStatementInlineValue(e,n,t,a=0){return e instanceof X?p(e.object):e instanceof me||e instanceof re?p(String(e.object)):e instanceof V?this.renderReferenceLink(e.object,n,t):e instanceof H?this.renderEmbeddedInline(e.object,t,a):e instanceof T?(e.object??[]).map(o=>this.renderInlineValue(o,n,t,a)).filter(o=>o).join(", "):""}renderEmbeddedInline(e,n,t=0){if(t>=ht)return"\u2026";let a=[];for(let s of e.statement){let o=s.predicate?.subject;if(!o||o.name==="type")continue;let i=this.readLabelForUri({publisher:o.publisher,package_:o.package_,name:o.name})??o.name,c=this.renderStatementInlineValue(s,o,n,t+1);c&&a.push(`<dt>${p(i)}</dt><dd>${c}</dd>`)}return a.length?`<dl class="kan-embedded">${a.join("")}</dl>`:""}renderReferenceLink(e,n,t){let a=this.readLabelForUri({publisher:e.subject.publisher,package_:e.subject.package_,name:e.subject.name})??e.subject.name;if(!this.isLinkable(e.subject.publisher,t))return`<span class="kan-link-plain">${p(a)}</span>`;let s=this.urlForReference(e,n,t);return`<a class="kan-link" href="${p(s)}">${p(a)}</a>`}isLinkable(e,n){return this.publisherFirst||e===n}renderBadge(e,n,t){let a=this.readLabelForUri({publisher:e.subject.publisher,package_:e.subject.package_,name:e.subject.name})??e.subject.name,s=this.readCommentForUri({publisher:e.subject.publisher,package_:e.subject.package_,name:e.subject.name}),o=s?` title="${p(s)}"`:"";if(!this.isLinkable(e.subject.publisher,t))return`<span class="kan-badge"${o}>${p(a)}</span>`;let i=this.urlForReference(e,n,t);return`<a class="kan-badge" href="${p(i)}"${o}>${p(a)}</a>`}urlForReference(e,n,t){let a=n?this.getUrlFormForProperty(n):"=";return this.resourceHref({publisher:e.subject.publisher,package_:e.subject.package_,...e.subject.version?{version:e.subject.version}:{},name:e.subject.name},t,a)}getUrlFormForProperty(e){let n=ee(this.catalog,e);if(!n)return"=";let t=Q(n,Br);return t==="*"||t==="^"||t==="~"||t==="="?t:"="}readLabelForUri(e){let n=ee(this.catalog,e);if(n)return D(this.catalog,n).label}readCommentForUri(e){let n=ee(this.catalog,e);if(n)return D(this.catalog,n).summary}};function Hr(r){let e=new Map;for(let n of r.statement){if(!(n instanceof H)||!we(n,dn.publisher,dn.package_,dn.name))continue;let t=n.object;for(let a of t.statement){if(!(a instanceof X))continue;let s=a.predicate?.subject?.name;if(!s)continue;let o=a.object;e.has(s)||e.set(s,o)}}return e}function on(r){for(let e of r.statement)if(e instanceof H&&we(e,un.publisher,un.package_,un.name))return e.object}function Ln(r){for(let e of r.statement){if(!(e instanceof T)||!we(e,Rn.publisher,Rn.package_,Rn.name))continue;let n=[];for(let t of e.object??[])t instanceof M&&n.push(t);return n}return[]}function ze(r){for(let e of r.statement)if(e instanceof V&&e.predicate?.subject?.name==="type"&&e.object instanceof E){let n=e.object.subject;return{publisher:n.publisher,package_:n.package_,name:n.name}}}function B(r,e){for(let n of r.statement)if(n instanceof V&&we(n,e.publisher,e.package_,e.name)&&n.object instanceof E){let t=n.object.subject;return{publisher:t.publisher,package_:t.package_,name:t.name}}}function On(r,e){for(let n of r.statement){if(!(n instanceof T)||!we(n,e.publisher,e.package_,e.name))continue;let t=[];for(let a of n.object??[])a instanceof E&&t.push({publisher:a.subject.publisher,package_:a.subject.package_,name:a.subject.name});return t}return[]}function W(r,e){for(let n of r.statement)if(we(n,e.publisher,e.package_,e.name))return n}function Q(r,e){for(let n of r.statement)if(n instanceof X&&we(n,e.publisher,e.package_,e.name))return n.object}function cn(r,e){for(let n of r.statement)if(n instanceof H&&we(n,e.publisher,e.package_,e.name))return n.object}function yt(r,e){for(let n of r.statement)if(n instanceof me&&we(n,e.publisher,e.package_,e.name))return n.object}function zr(r,e){for(let n of r.statement)if(n instanceof re&&we(n,e.publisher,e.package_,e.name))return n.object===!0;return!1}function Gr(r){for(let e of be(r))if(R(e.subject,aa)||R(e.subject,ra))return!0;return!1}function be(r){let e=[];for(let n of r.statement)if(n instanceof V){if(n.predicate?.subject?.name!=="type")continue;n.object instanceof E&&e.push(n.object)}else if(n instanceof T){if(n.predicate?.subject?.name!=="type")continue;for(let t of n.object??[])t instanceof E&&e.push(t)}return e}function Qe(r){let e=[];for(let n of r.statement)if(n instanceof V){if(n.predicate?.subject?.name!=="subClassOf")continue;n.object instanceof E&&e.push(n.object)}else if(n instanceof T){if(n.predicate?.subject?.name!=="subClassOf")continue;for(let t of n.object??[])t instanceof E&&e.push(t)}return e}function ee(r,e){let n="version"in e?e.version:void 0;if(n){let t=`${e.publisher}/${e.package_}@${n.major}.${n.minor}.${n.patch}`;for(let a of r)if(a instanceof G&&a.name===e.name&&a.namespace===t)return a}for(let t of r){if(!(t instanceof G)||t.name!==e.name)continue;if((t.namespace||"").startsWith(`${e.publisher}/${e.package_}@`))return t}}function we(r,e,n,t){let a=r.predicate?.subject;return a?a.publisher===e&&a.package_===n&&a.name===t:!1}function R(r,e){return r.publisher===e.publisher&&r.package_===e.package_&&r.name===e.name}function Z(r){return`${r.publisher}/${r.package_}/${r.name}`}function qr(r){let e=s=>s.replace(/\*\//g,"* /"),n=[];n.push(` * kanonak stylesheet \u2014 ${e(r.resource.namespace)}/${e(r.resource.name)}`),n.push(" *");let t=new Map;for(let s of r.tokens.values()){let o=`${s.sourceNamespace} ${s.sourceName}`,i=t.get(o)??{count:0,level:s.level};i.count+=1,t.set(o,i)}if(t.size===0)n.push(" * :root tokens: NONE resolved");else{n.push(` * :root tokens (${r.tokens.size}):`);for(let[s,{count:o,level:i}]of t)n.push(` * ${o} from ${e(s)} (${i})`)}let a=r.baseStylesheet;if(a.css!==void 0)n.push(` * base CSS: ${e(a.sourceNamespace??"")}/base-stylesheet (${a.css.length} bytes, ${a.scope})`);else{n.push(" *"),n.push(" * !! WARNING: NO BASE STYLESHEET \u2014 this file contains only :root tokens."),n.push(" * !! Pages will appear UNSTYLED.");for(let s of r.warnings)n.push(` * !! ${e(s)}`);n.push(" * !! Full diagnostics: /.well-known/kanonak-render")}if(r.look){let s=r.look.sourceClass;n.push(` * look: ${e(s.publisher)}/${e(s.package_)}/${e(s.name)}`)}return`/*
150
+ ${n.join(`
151
+ `)}
152
+ */`}function ne(r){let e=r.namespace||"",n=e.indexOf("/");return n>=0?e.substring(0,n):e}function p(r){return r.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function Ke(r){return r.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function $t(r,e){return e==null?"":Ae(e)?e.value:r==="string-literal"?typeof e=="string"?e:String(e):Array.isArray(e)?e.map(n=>Ae(n)?n.value:Ke(typeof n=="string"?n:String(n))).join(""):Ke(typeof e=="string"?e:String(e))}function _t(r){if(r==null)return"";if(typeof r=="string")return r;if(typeof r=="number"||typeof r=="boolean")return String(r);if(Ae(r))return r.value;if(Array.isArray(r))return r.map(_t).filter(n=>n!=="").join(", ");if(r instanceof E)return r.subject.name;if(r instanceof G||r instanceof M)return r.name??"";let e=r.value;return typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):""}function Un(r,e){return r.length<=e?r:r.slice(0,e).replace(/\s+\S*$/,"")+"\u2026"}function wt(r){return r.toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function jt(r){return r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function St(r){let e=fn(r);return p(e||r)}function fn(r){let e=/^(\d{4})-(\d{2})-(\d{2})([T ]\d{2}:\d{2}(?::\d{2})?(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})?)?$/.exec(r.trim());if(!e)return;let n=Date.parse(r);if(!Number.isFinite(n))return;let t=new Date(n),s=`${["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][t.getUTCMonth()]} ${t.getUTCDate()}, ${t.getUTCFullYear()}`;if(!e[4])return s;let o=t.getUTCHours(),i=(o+11)%12+1,c=o>=12?"PM":"AM";return`${s} \xB7 ${i}:${String(t.getUTCMinutes()).padStart(2,"0")} ${c} UTC`}function ln(r){if(!r)return"";let e=/^(\d{4})-(\d{2})-(\d{2})/.exec(r);return e?`${["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][parseInt(e[2],10)-1]??e[2]} ${parseInt(e[3],10)}`:r}export{D as a,Ye as b,Ae as c,Ee as d,Xe as e,q as f,us as g,Ue as h,an as i,In as j};
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import{a as Pn,b as wn,c as Sn,d as Cn,e as be}from"./chunk-RWEGPZ23.js";import{a as yr,c as Ce,e as He,h as ze,i as We,j as gr}from"./chunk-XRXCYM3U.js";import{a as hn,b as kn,c as bn,d as W,e as G,f as l,g as hr}from"./chunk-KGWDV7FW.js";import{a as fr}from"./chunk-NV63IOB7.js";import"./chunk-QHABFCRC.js";import{a as zt,b as Wt,c as Gt,d as Jt,e as qt,f as en,g as tn,h as nn,i as rn}from"./chunk-MPBNEKCQ.js";import{b as Yt,c as Zt,d as Qt}from"./chunk-F26XWM5K.js";import{a as Ht}from"./chunk-4NO7MHS7.js";import{a as En,b as xn,c as In,d as vn}from"./chunk-RYOZTXI7.js";import{a as Kn,b as Dn}from"./chunk-PEUTCG3B.js";import{a as jn}from"./chunk-PEJALHXK.js";import{a as Xt}from"./chunk-SC5M74NM.js";import{A as lr,B as ur,C as pr,D as dr,M as mr,a as Nn,b as Tn,c as Ln,d as _n,e as Un,f as Fn,g as Mn,h as Hn,i as zn,j as Wn,k as Gn,l as Jn,m as qn,n as Yn,o as Zn,p as Xn,q as Qn,r as er,s as tr,t as nr,u as rr,v as or,w as ar,x as ir,y as sr,z as cr}from"./chunk-IZRPJCQW.js";import"./chunk-SHDHMKMJ.js";import{a as y,b as C,c as sn,d as Fe,e as v,f as ke,g as fn,h as yn,i as $}from"./chunk-DSHPAWJQ.js";import{a as S}from"./chunk-NJ3AZYQD.js";import{a as gn,b as Pe,c as $n,d as h,e as An,f as Vn,g as Bn,h as On}from"./chunk-UK2OIPAB.js";import{f as z,k as j,l as we,m as Se,n as Me}from"./chunk-PBNVHBS3.js";import{b as cn,c as ln,d as K,e as un,f as pn,h as dn,j as mn}from"./chunk-VKTFLHCW.js";import{a as on,b as fe,c as f,d as p,e as an,f as ye,g as R,h as ge,i as he,j as E,k as x,l as I}from"./chunk-T3JR2SV6.js";import{a as H}from"./chunk-FUUTGGJS.js";import{a as Nt,b as me,c as M,d as Tt,e as k,f as Lt,g as _t,h as Ut,i as Ft,j as Mt}from"./chunk-2ACBWC7K.js";import{a as Rn}from"./chunk-ODIECDN7.js";import{VersionOperator as Ni}from"@kanonak-protocol/types/document/models/enums";import{existsSync as Or,readFileSync as Dr}from"fs";import{homedir as Nr}from"os";import{join as Tr}from"path";import{execFile as kr}from"child_process";import{promisify as br}from"util";var J=br(kr),q="kanonak",Y="/usr/bin/security",A=class{async get(e){let t=l(e);try{let{stdout:r}=await J(Y,["find-generic-password","-s",q,"-a",t,"-w"],{timeout:1e4});try{return JSON.parse(r.trim())}catch{throw new Error(`Stored credential for '${t}' is corrupted (not valid JSON).
1
+ import{a as Pn,b as wn,c as Sn,d as Cn,e as be}from"./chunk-RWEGPZ23.js";import{a as yr,c as Ce,e as He,h as ze,i as We,j as gr}from"./chunk-OOR5SVNQ.js";import{a as hn,b as kn,c as bn,d as W,e as G,f as l,g as hr}from"./chunk-KGWDV7FW.js";import{a as fr}from"./chunk-NV63IOB7.js";import"./chunk-QHABFCRC.js";import{a as zt,b as Wt,c as Gt,d as Jt,e as qt,f as en,g as tn,h as nn,i as rn}from"./chunk-MPBNEKCQ.js";import{b as Yt,c as Zt,d as Qt}from"./chunk-F26XWM5K.js";import{a as Ht}from"./chunk-4NO7MHS7.js";import{a as En,b as xn,c as In,d as vn}from"./chunk-RYOZTXI7.js";import{a as Kn,b as Dn}from"./chunk-PEUTCG3B.js";import{a as jn}from"./chunk-PEJALHXK.js";import{a as Xt}from"./chunk-SC5M74NM.js";import{A as lr,B as ur,C as pr,D as dr,M as mr,a as Nn,b as Tn,c as Ln,d as _n,e as Un,f as Fn,g as Mn,h as Hn,i as zn,j as Wn,k as Gn,l as Jn,m as qn,n as Yn,o as Zn,p as Xn,q as Qn,r as er,s as tr,t as nr,u as rr,v as or,w as ar,x as ir,y as sr,z as cr}from"./chunk-IZRPJCQW.js";import"./chunk-SHDHMKMJ.js";import{a as y,b as C,c as sn,d as Fe,e as v,f as ke,g as fn,h as yn,i as $}from"./chunk-DSHPAWJQ.js";import{a as S}from"./chunk-NJ3AZYQD.js";import{a as gn,b as Pe,c as $n,d as h,e as An,f as Vn,g as Bn,h as On}from"./chunk-UK2OIPAB.js";import{f as z,k as j,l as we,m as Se,n as Me}from"./chunk-PBNVHBS3.js";import{b as cn,c as ln,d as K,e as un,f as pn,h as dn,j as mn}from"./chunk-VKTFLHCW.js";import{a as on,b as fe,c as f,d as p,e as an,f as ye,g as R,h as ge,i as he,j as E,k as x,l as I}from"./chunk-T3JR2SV6.js";import{a as H}from"./chunk-FUUTGGJS.js";import{a as Nt,b as me,c as M,d as Tt,e as k,f as Lt,g as _t,h as Ut,i as Ft,j as Mt}from"./chunk-2ACBWC7K.js";import{a as Rn}from"./chunk-ODIECDN7.js";import{VersionOperator as Ni}from"@kanonak-protocol/types/document/models/enums";import{existsSync as Or,readFileSync as Dr}from"fs";import{homedir as Nr}from"os";import{join as Tr}from"path";import{execFile as kr}from"child_process";import{promisify as br}from"util";var J=br(kr),q="kanonak",Y="/usr/bin/security",A=class{async get(e){let t=l(e);try{let{stdout:r}=await J(Y,["find-generic-password","-s",q,"-a",t,"-w"],{timeout:1e4});try{return JSON.parse(r.trim())}catch{throw new Error(`Stored credential for '${t}' is corrupted (not valid JSON).
2
2
  Run 'kanonak logout ${t}' then 'kanonak login ${t}' to fix.`)}}catch(r){if(Ge(r,44))return null;throw new Error(`macOS Keychain read failed for '${t}': ${Z(r)}
3
3
  The Keychain may be locked or inaccessible.
4
4
  Try unlocking it via Keychain Access.app or running 'security unlock-keychain'.`)}}async store(e,t){let r=l(e),o=JSON.stringify(t);try{await J(Y,["add-generic-password","-s",q,"-a",r,"-U","-w",o],{timeout:1e4})}catch(a){throw new Error(`macOS Keychain write failed for '${r}': ${Z(a)}
@@ -37,6 +37,61 @@ export interface ResolvedLook {
37
37
  /** The class in the hierarchy where the declaration was found. */
38
38
  sourceClass: Uri;
39
39
  }
40
+ /** Where one resolved `--kan-*` token value came from. */
41
+ export interface TokenProvenance {
42
+ /** The resolved token value. */
43
+ readonly value: string;
44
+ /** Namespace (`publisher/pkg@ver`) of the subject that declared it. */
45
+ readonly sourceNamespace: string;
46
+ /** Name of the declaring subject (the instance itself, a class, or `Resource`). */
47
+ readonly sourceName: string;
48
+ /** Which cascade level supplied it. */
49
+ readonly level: 'instance' | 'class' | 'resource-floor';
50
+ }
51
+ /**
52
+ * The base stylesheet (everything after the `:root` token block) and where it
53
+ * came from — or, when absent, exactly why. The two failure modes are distinct
54
+ * because they have different fixes:
55
+ *
56
+ * - `no-look-styles-in-catalog`: no `look-styles` package reached the render
57
+ * catalog at all (not in workspace/cache, and the ambient fetch failed).
58
+ * Fix: install `kanonak.org/look-styles` into the cache of the machine/user
59
+ * running the render.
60
+ * - `content-property-unresolved`: a `base-stylesheet` asset IS in the catalog
61
+ * but its `site.content` property did not resolve (typically the package was
62
+ * cached without its imports block, so the property reference can't bind).
63
+ * Fix: re-install the package from its raw published source.
64
+ */
65
+ export interface BaseStylesheetStatus {
66
+ /** The CSS text, when fully resolved. */
67
+ readonly css?: string;
68
+ /** Namespace (`publisher/look-styles@ver`) of the chosen asset. */
69
+ readonly sourceNamespace?: string;
70
+ /** Publisher's own look-styles, or the kanonak.org universal default. */
71
+ readonly scope?: 'publisher-override' | 'universal-default';
72
+ /** Why `css` is undefined. */
73
+ readonly problem?: 'no-look-styles-in-catalog' | 'content-property-unresolved';
74
+ /** Every `base-stylesheet` asset namespace considered (all versions found). */
75
+ readonly candidates: readonly string[];
76
+ }
77
+ /** The full structured explanation behind one resource's rendered stylesheet. */
78
+ export interface StylesheetExplanation {
79
+ /** The resource being explained. */
80
+ readonly resource: {
81
+ readonly namespace: string;
82
+ readonly name: string;
83
+ };
84
+ /** Each `:root` `--kan-*` token and where it cascaded from. */
85
+ readonly tokens: ReadonlyMap<string, TokenProvenance>;
86
+ /** The base stylesheet status (everything after `:root`). */
87
+ readonly baseStylesheet: BaseStylesheetStatus;
88
+ /** The look (band declaration) styling the HTML body, when one resolves. */
89
+ readonly look?: {
90
+ readonly sourceClass: Uri;
91
+ };
92
+ /** Human-readable warnings: condition, consequence, and fix. */
93
+ readonly warnings: readonly string[];
94
+ }
40
95
  export declare class LookRenderer {
41
96
  private readonly catalog;
42
97
  constructor(catalog: Kanonak[]);
@@ -110,6 +165,15 @@ export declare class LookRenderer {
110
165
  * full URI), assumed globally unique by convention.
111
166
  */
112
167
  findCascadedTokens(instance: SubjectKanonak): Map<string, string>;
168
+ /**
169
+ * The token cascade with provenance: same walk as
170
+ * {@link findCascadedTokens} (which delegates here — ONE cascade
171
+ * implementation), but each resolved token records WHICH subject declared
172
+ * it and at which cascade level. This is what makes the `:root` block
173
+ * explainable instead of magic: the CSS provenance header, the serve
174
+ * diagnostics endpoint, and startup logging all read from this.
175
+ */
176
+ explainCascadedTokens(instance: SubjectKanonak): Map<string, TokenProvenance>;
113
177
  /**
114
178
  * Render the stylesheet for an instance — a CSS string with the
115
179
  * cascaded tokens as `--kan-*` custom properties on `:root`, plus
@@ -197,6 +261,15 @@ export declare class LookRenderer {
197
261
  */
198
262
  private collectCascadedSvgTiers;
199
263
  renderStylesheet(instance: SubjectKanonak): string;
264
+ /**
265
+ * The full structured explanation behind {@link renderStylesheet}'s output
266
+ * for one resource: every token with its cascade source, the base
267
+ * stylesheet's provenance (or the precise reason it's missing), the look
268
+ * that styles the body, and derived warnings. `renderStylesheet` is a pure
269
+ * formatting of this — so what the page gets and what the diagnostics say
270
+ * can never disagree.
271
+ */
272
+ explainStylesheet(instance: SubjectKanonak): StylesheetExplanation;
200
273
  /**
201
274
  * Find the publisher-appropriate `base-stylesheet` Asset in the catalog
202
275
  * and return its CSS content. Prefers an Asset published by
@@ -206,6 +279,14 @@ export declare class LookRenderer {
206
279
  * to an empty string and emit only the token cascade.
207
280
  */
208
281
  private findBaseStylesheet;
282
+ /**
283
+ * The base-stylesheet lookup with provenance: same selection as
284
+ * {@link findBaseStylesheet} (which delegates here — ONE lookup
285
+ * implementation), but reporting WHICH asset was chosen, which were
286
+ * considered, and — when nothing usable was found — exactly why, so the
287
+ * "CSS stops at :root" failure mode is diagnosable instead of silent.
288
+ */
289
+ explainBaseStylesheet(contextPublisher: string): BaseStylesheetStatus;
209
290
  /**
210
291
  * Render the instance as body-only HTML using its cascaded look.
211
292
  */
@@ -1,2 +1,2 @@
1
- export { LookRenderer, type ResolvedLook } from './LookRenderer.js';
1
+ export { LookRenderer, type ResolvedLook, type TokenProvenance, type BaseStylesheetStatus, type StylesheetExplanation, } from './LookRenderer.js';
2
2
  export { resolveDisplayValue, type DisplayValue } from './displayValue.js';