@kanonak-protocol/sdk 5.20.0 → 5.22.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.
@@ -1 +1 @@
1
- import{A,B,C,D,E,F,G,H,K as I,L as J,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}from"../chunk-UYSEO3OT.js";import"../chunk-M443OYKT.js";import"../chunk-V6KIDED2.js";import"../chunk-NJ3AZYQD.js";import"../chunk-SVUMCLK5.js";import"../chunk-YW6P24RF.js";import"../chunk-FUUTGGJS.js";import"../chunk-2ACBWC7K.js";export{u as AmbiguousReferenceRule,A as ClassDefinitionRule,n as ClassHierarchyCycleRule,I as DiamondNameClashRule,C as DisplayLensScopeRule,k as EmbeddedKanonakTypeRule,l as ImportExistenceRule,J as KanonakObjectValidator,E as LookBandPathRule,D as LookSemanticSvgPathRule,B as MarkdownLinkRule,s as NamespaceImportCycleRule,f as NamespacePrefixRule,w as ObjectPropertyValueValidationRule,c as OntologyValidationError,a as OntologyValidationResult,H as OwlOneOfRule,j as PackageHeaderRule,x as PropertyDomainRule,o as PropertyHierarchyCycleRule,y as PropertyKindRangeConsistencyRule,v as PropertyRangeReferenceRule,p as PropertyRangeRequiredRule,h as PropertyTypeSpecificityRule,z as ReservedNameShadowRule,g as ResourceNamingRule,G as ShaclShapeRule,q as SubClassOfReferenceRule,r as SubPropertyOfReferenceRule,i as SubjectKanonakTypeRequiredRule,F as TxExpressionPathRule,t as UnresolvedPredicateRule,m as UnresolvedReferenceRule,e as ValidationCache,d as ValidationContext,b as ValidationSeverity};
1
+ import{A,B,C,D,E,F,G,H,K as I,L as J,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}from"../chunk-AB42RUYY.js";import"../chunk-M443OYKT.js";import"../chunk-SYNN77GG.js";import"../chunk-4NO7MHS7.js";import"../chunk-V6KIDED2.js";import"../chunk-NJ3AZYQD.js";import"../chunk-PEJALHXK.js";import"../chunk-SVUMCLK5.js";import"../chunk-YW6P24RF.js";import"../chunk-FUUTGGJS.js";import"../chunk-2ACBWC7K.js";export{u as AmbiguousReferenceRule,A as ClassDefinitionRule,n as ClassHierarchyCycleRule,I as DiamondNameClashRule,C as DisplayLensScopeRule,k as EmbeddedKanonakTypeRule,l as ImportExistenceRule,J as KanonakObjectValidator,E as LookBandPathRule,D as LookSemanticSvgPathRule,B as MarkdownLinkRule,s as NamespaceImportCycleRule,f as NamespacePrefixRule,w as ObjectPropertyValueValidationRule,c as OntologyValidationError,a as OntologyValidationResult,H as OwlOneOfRule,j as PackageHeaderRule,x as PropertyDomainRule,o as PropertyHierarchyCycleRule,y as PropertyKindRangeConsistencyRule,v as PropertyRangeReferenceRule,p as PropertyRangeRequiredRule,h as PropertyTypeSpecificityRule,z as ReservedNameShadowRule,g as ResourceNamingRule,G as ShaclShapeRule,q as SubClassOfReferenceRule,r as SubPropertyOfReferenceRule,i as SubjectKanonakTypeRequiredRule,F as TxExpressionPathRule,t as UnresolvedPredicateRule,m as UnresolvedReferenceRule,e as ValidationCache,d as ValidationContext,b as ValidationSeverity};
@@ -0,0 +1,33 @@
1
+ import type { IKanonakDocumentRepository } from '@kanonak-protocol/types/document/models';
2
+ import type { KanonakDocument } from '@kanonak-protocol/types/document/models/types';
3
+ import { OntologyValidationError } from '../../OntologyValidationError.js';
4
+ import type { IRepositoryValidationRule } from './IRepositoryValidationRule.js';
5
+ import type { ValidationCache } from '../../ValidationCache.js';
6
+ /**
7
+ * Warn when a look declares a band the renderer cannot honour.
8
+ *
9
+ * The gap this closes (kanonak-protocol/typescript#100): a band valid against
10
+ * the look vocabulary but absent from the renderer's dispatch validates clean,
11
+ * then renders as an HTML comment — which a browser does not display. The page
12
+ * silently loses that region, and the only evidence is in the page source.
13
+ *
14
+ * The renderer's dispatch table is the source of truth, exported as
15
+ * `supportedBandKeys()`, so this rule cannot drift from what actually renders:
16
+ * implementing a band makes it acceptable here automatically, and removing one
17
+ * makes it warn.
18
+ *
19
+ * A WARNING rather than an error. The declaration is legitimate against the
20
+ * vocabulary, the ontology is not wrong, and a publisher may reasonably author
21
+ * ahead of the renderer — but they should be told, at author time, rather than
22
+ * discovering it by reading rendered HTML.
23
+ */
24
+ export declare class UnrenderableBandRule implements IRepositoryValidationRule {
25
+ readonly ruleName = "UnrenderableBand";
26
+ validateAsync(document: KanonakDocument, repository: IKanonakDocumentRepository, cache?: ValidationCache): Promise<OntologyValidationError[]>;
27
+ /**
28
+ * The band's declared type URI, read through the object model's own
29
+ * reference reader rather than by walking statements here — one way to ask
30
+ * this question, and it already handles the shapes a `type` can take.
31
+ */
32
+ private typeOf;
33
+ }
@@ -20,6 +20,7 @@ export { MarkdownLinkRule } from './MarkdownLinkRule.js';
20
20
  export { DisplayLensScopeRule } from './DisplayLensScopeRule.js';
21
21
  export { LookSemanticSvgPathRule } from './LookSemanticSvgPathRule.js';
22
22
  export { LookBandPathRule } from './LookBandPathRule.js';
23
+ export { UnrenderableBandRule } from './UnrenderableBandRule.js';
23
24
  export { TxExpressionPathRule } from './TxExpressionPathRule.js';
24
25
  export { ShaclShapeRule } from './ShaclShapeRule.js';
25
26
  export { OwlOneOfRule } from './OwlOneOfRule.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kanonak-protocol/sdk",
3
- "version": "5.20.0",
3
+ "version": "5.22.0",
4
4
  "description": "TypeScript SDK for the Kanonak Protocol — parse, resolve, validate, reason over, and render .kan.yml packages.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -126,7 +126,7 @@
126
126
  ],
127
127
  "dependencies": {
128
128
  "@kanonak-protocol/canonical": "^0.1.3",
129
- "@kanonak-protocol/types": "^5.20.0",
129
+ "@kanonak-protocol/types": "^5.22.0",
130
130
  "ignore": "^7.0.5",
131
131
  "js-yaml": "^4.1.0",
132
132
  "yaml": "^2.7.0",
@@ -1,152 +0,0 @@
1
- import{a as Cn}from"./chunk-4NO7MHS7.js";import{a as Nn}from"./chunk-PEJALHXK.js";import{a as M,c as Me,h as u,m as Mn}from"./chunk-V6KIDED2.js";import{a as Fn}from"./chunk-NJ3AZYQD.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,m as pn,n as ue,o as Vn,p as w,r as Ne,s as ke,v as gn,w as qe,y as An,z as xn}from"./chunk-YW6P24RF.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"},Rt={publisher:Te,package_:Hn,name:"displaySummary"},Kt={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,Rt)??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,Kt);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 An(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}](${Vn(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 xn(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"},Ra={publisher:"kanonak.org",package_:"look",name:"connector"},Ka={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"},Rn={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"},Rr={publisher:"kanonak.org",package_:"look",name:"valueLabel"};var kt={publisher:"kanonak.org",package_:"look",name:"semanticSvg"},Kr={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,Kn={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 Nn.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="${Re(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 Mn(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,Kr),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){let i=n.declaration.unresolvedPredicates;return i.length>0?`<!-- LookRenderer: look declaration has no bands \u2014 unresolved predicates dropped from the parse: ${i.map(l=>`${l.key} (authored by ${l.sourceDoc})`).join(", ")}. An import in the authoring document did not resolve; see the render-stack warnings (/.well-known/kanonak-render). -->`:"<!-- 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&&K(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||!K(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=>K(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?K(o,fr)?this.renderSectionNav(a):K(o,sa)?this.renderHero(e,n,t):K(o,oa)?this.renderPropertyList(e,n,t):K(o,ia)?this.renderPropertyTable(e,n,t,s):K(o,ca)?this.renderBadgeRow(e,n,t):K(o,la)?this.renderChipRow(e,n,t):K(o,ua)?this.renderReferenceList(e,n,t):K(o,da)?this.renderReferencedBy(e,n,t):K(o,fa)?this.renderInstances(e,n,t):K(o,lt)?this.renderMarkdown(e,n,t):K(o,or)?this.renderLinks(e,n):K(o,pa)?this.renderNavGroup(n,t):K(o,ba)?this.renderResourceGrid(e,t,n):K(o,va)?this.renderTimeline(e,t):K(o,ya)?this.renderVersionDiff(e,t):K(o,$a)?this.renderFigure(e,n,t):K(o,wa)?this.renderDiagram(e,n,t):K(o,Wa)?this.renderStatRow(e,n):K(o,Ya)?this.renderHorizon(e,n,t):K(o,Xa)?this.renderPackageContents(n,t):K(o,Za)?this.renderFeaturedResource(e,t):K(o,Qa)?this.renderPublisherPackages(e,t):K(o,lr)?this.renderDistribution(e,n):K(o,_n)?this.renderSectionHeading(e):K(o,gr)?this.renderVersionDelta(e,n):K(o,mr)?this.renderTimePlot(e,n,t):K(o,kr)?this.renderDetails(e,n,t):K(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,Rn),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&&K(h,Ra)){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&&!K(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,Ka)).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 R=await this.edgeText(o,P,i);R&&N.push(this.edgeLabelEl((se+_)/2,(le+J)/2-5,R)),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 R of b.get($)??[])z=Math.max(z,j(R)+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,R=f+I+(ce-z)/2;$.forEach((A,pe)=>Y.set(A.name,{x:f+x*(c+l),y:R+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 R of x){let A=Y.get(R),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 Ke=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"${Ke} 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">${Re(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)+$,R=`${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>${Re(R)}</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">${Re(ln(new Date(d).toISOString()))}</text><text x="${L}" y="${(S-6).toFixed(1)}" text-anchor="end" class="kan-plot-axis">${Re(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=>K(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 K(e,Ir)||K(e,wn)||K(e,ct)||K(e,un)||K(e,dn)||K(e,vr)||K(e,kt)||K(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(Rn),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,Rn),l=this.readEmbeddedCarrier(a,gt),d=this.readEmbeddedCarrier(a,mt),f=Q(i,Rr),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 R of b){for(let A of R.points)A!==null&&h.push(A);for(let A of R.lower??[])A!==null&&h.push(A);for(let A of R.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=R=>k<=1?I.left+ce/2:I.left+R/(k-1)*ce,Y=R=>I.top+(1-(R-_)/(L-_))*C,se=(R,A)=>R.hue!==void 0?R.hue:Math.round(A*360/b.length),le=[];for(let R=0;R<5;R++){let A=_+R*(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((R,A)=>{let pe=this.hrefForSubject(R,s),ge=(R.namespace||"").split("@")[1]??"",te=P(A),oe=ln(o(R));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">${Re(ge||R.name)}</text>`+(oe?`<text x="${te.toFixed(1)}" y="${(N-I.bottom+36).toFixed(1)}" class="kan-fan-xdate" text-anchor="middle">${Re(oe)}</text>`:"")+"</a>")});let J=[];b.forEach((R,A)=>{if(!R.lower||!R.upper)return;let pe=se(R,A),ge=[],te=[];for(let ie=0;ie<k;ie++){let Ke=R.upper[ie],je=R.lower[ie];Ke==null||je===null||je===void 0||(ge.push(`${P(ie).toFixed(1)},${Y(Ke).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((R,A)=>{let ge=`hsl(${se(R,A)},65%,60%)`,te=[],oe=[];R.points.forEach((ie,Ke)=>{if(ie===null)return;let je=P(Ke),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(R.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((R,A)=>{let pe=se(R,A),ge=R.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 Ke=oe!==void 0?`${x}${oe.toFixed(2)}`:"\u2014",je=R.lastSubject&&this.isLinkable(ne(R.lastSubject),s)?`<a href="${p(this.hrefForSubject(R.lastSubject,s))}">${p(R.label)}</a>`:p(R.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">${Ke}${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=>K(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||!K(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,Kn.publisher,Kn.package_,Kn.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(K(e.subject,aa)||K(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 K(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 Re(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:Re(typeof n=="string"?n:String(n))).join(""):Re(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};
@@ -1 +0,0 @@
1
- import{a as m}from"./chunk-FUUTGGJS.js";var f=class{resourceResolver;constructor(e){this.resourceResolver=e}async buildFromNameAsync(e,r){return(await this.resourceResolver.resolveEntityAsync(e,r))?.uri??null}buildFromName(e,r,s){if(e.includes(".")){let o=e.split("."),c=o[0],p=o[1],a=this.findPackageNameForAlias(s,c);if(a){for(let i of r.values())if(i.entityName===p&&i.uri.package_===a)return i.uri}return null}let n=r.get(e);return n?n.uri:null}create(e,r,s,n){return new m(e,r,s,n)}findPackageNameForAlias(e,r){if(!e.metadata.imports)return null;for(let[s,n]of Object.entries(e.metadata.imports))for(let o of n)if(o.alias===r||!o.alias&&o.packageName===r)return o.packageName;return null}};async function R(t,e){let r=[],s=await t.getAllDocumentsAsync();for(let n of s){let o=n.metadata.namespace_;if(!o)continue;let c=o.publisher,p=o.package_,a=o.version?`${o.version.major}.${o.version.minor}.${o.version.patch}`:"0.0.0";for(let[i,u]of Object.entries(n.body)){if(!u||typeof u!="object")continue;let l=u.type;!l||typeof l!="string"||l!=="Package"&&d(l,e)&&r.push({entityName:i,entity:u,documentNamespace:`${c}/${p}@${a}`,publisher:c,package_:p,version:a})}}return r}function d(t,e){let r=y(t),s=y(e);return r===s}function y(t){let e=t.lastIndexOf(".");if(e!==-1)return t.substring(e+1);let r=t.lastIndexOf("/");return r!==-1?t.substring(r+1):t}export{f as a,R as b};
File without changes