@kanonak-protocol/sdk 5.26.0 → 5.27.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.
Files changed (36) hide show
  1. package/dist/browser.js +1 -1
  2. package/dist/chunk-4C7ZMXQT.js +68 -0
  3. package/dist/{chunk-Q3TDDWKS.js → chunk-4VLLX3MZ.js} +1 -1
  4. package/dist/chunk-CZY6OOTM.js +1 -0
  5. package/dist/{chunk-HND3PKKR.js → chunk-KOV3AFBN.js} +1 -1
  6. package/dist/chunk-M7LXZN47.js +1 -0
  7. package/dist/chunk-NOPFCGB7.js +1 -0
  8. package/dist/{chunk-WVXOHCW2.js → chunk-RVR25FWW.js} +1 -1
  9. package/dist/{chunk-ZUWSZQAJ.js → chunk-RWN5JZPU.js} +1 -1
  10. package/dist/chunk-ZZINR6NT.js +152 -0
  11. package/dist/index.d.ts +1 -1
  12. package/dist/index.js +1 -1
  13. package/dist/kanonaks/walkDefinedKanonaks.d.ts +10 -1
  14. package/dist/look/LookRenderer.d.ts +36 -0
  15. package/dist/parsing/index.js +1 -1
  16. package/dist/reasoning/index.js +1 -1
  17. package/dist/resolution/index.js +1 -1
  18. package/dist/search/index.js +1 -1
  19. package/dist/server/index.js +18 -10
  20. package/dist/server/renderDiagnostics.d.ts +10 -0
  21. package/dist/transformations/index.js +2 -2
  22. package/dist/transformations/v3/CompiledTransformationV3.d.ts +17 -1
  23. package/dist/transformations/v3/TransformationUriConstantsV3.d.ts +5 -0
  24. package/dist/uri-helpers/UriHelpers.d.ts +10 -0
  25. package/dist/uri-helpers/index.d.ts +1 -1
  26. package/dist/uri-helpers/index.js +1 -1
  27. package/dist/validation/index.d.ts +1 -1
  28. package/dist/validation/index.js +1 -1
  29. package/dist/validation/rules/repository/TxExpressionCompilesRule.d.ts +44 -0
  30. package/dist/validation/rules/repository/index.d.ts +1 -0
  31. package/package.json +2 -2
  32. package/dist/chunk-AUXSXDZB.js +0 -152
  33. package/dist/chunk-CYXNYNE7.js +0 -63
  34. package/dist/chunk-EKSYQ6CU.js +0 -1
  35. package/dist/chunk-H6UAD2LP.js +0 -1
  36. package/dist/chunk-ITI65NHP.js +0 -1
@@ -55,6 +55,16 @@ export declare function toCanonicalUrl(uri: CanonicalUriParts): string;
55
55
  * True when a `Kanonak` is a `DefinedKanonak` whose `type` statement's
56
56
  * object URI matches the given class URI.
57
57
  */
58
+ /**
59
+ * The canonical URIs of a defined kanonak's declared type(s), whether the
60
+ * `type` statement was authored as a single reference or a list.
61
+ *
62
+ * THE one way to ask "what is this?" before a subsumption walk. Three private
63
+ * copies of this read had grown up independently (`LookRenderer`,
64
+ * `findDerivation`, `look/displayValue`); consolidating them is tracked
65
+ * separately — new code uses this.
66
+ */
67
+ export declare function typeReferenceUris(kanonak: Kanonak): KanonakUri[];
58
68
  export declare function hasType(kanonak: Kanonak, target: EntityUri): boolean;
59
69
  /**
60
70
  * Filter a list of parsed kanonaks down to `SubjectKanonak`s whose type
@@ -1,3 +1,3 @@
1
- export { uriKey, uriMatches, toCanonicalUrl, hasType, hasProperty, findSubjectsByType, findSubjectByUri, findAllResourcesByCanonicalUri, getDatatypeValue, getStringValue, getReferenceUri, getEmbeddedValue, getListValues, } from './UriHelpers.js';
1
+ export { typeReferenceUris, uriKey, uriMatches, toCanonicalUrl, hasType, hasProperty, findSubjectsByType, findSubjectByUri, findAllResourcesByCanonicalUri, getDatatypeValue, getStringValue, getReferenceUri, getEmbeddedValue, getListValues, } from './UriHelpers.js';
2
2
  export type { EntityUri, CanonicalUriParts } from './UriHelpers.js';
3
3
  export { SingleDocumentRepository } from './SingleDocumentRepository.js';
@@ -1 +1 @@
1
- import{m as a,n as b,o as c,p as d,q as e,r as f,s as g,t as h,u as i,v as j,w as k,x as l,y as m,z as n}from"../chunk-H6UAD2LP.js";import"../chunk-FUUTGGJS.js";import"../chunk-QILEJIFU.js";export{n as SingleDocumentRepository,g as findAllResourcesByCanonicalUri,f as findSubjectByUri,e as findSubjectsByType,i as getDatatypeValue,l as getEmbeddedValue,m as getListValues,k as getReferenceUri,j as getStringValue,h as hasProperty,d as hasType,c as toCanonicalUrl,a as uriKey,b as uriMatches};
1
+ import{A as o,m as a,n as b,o as c,p as d,q as e,r as f,s as g,t as h,u as i,v as j,w as k,x as l,y as m,z as n}from"../chunk-CZY6OOTM.js";import"../chunk-FUUTGGJS.js";import"../chunk-QILEJIFU.js";export{o as SingleDocumentRepository,h as findAllResourcesByCanonicalUri,g as findSubjectByUri,f as findSubjectsByType,j as getDatatypeValue,m as getEmbeddedValue,n as getListValues,l as getReferenceUri,k as getStringValue,i as hasProperty,e as hasType,c as toCanonicalUrl,d as typeReferenceUris,a as uriKey,b as uriMatches};
@@ -8,4 +8,4 @@ export { KanonakObjectValidator } from './KanonakObjectValidator.js';
8
8
  export type { IDocumentValidationRule } from './rules/document/IDocumentValidationRule.js';
9
9
  export type { IRepositoryValidationRule } from './rules/repository/IRepositoryValidationRule.js';
10
10
  export { NamespacePrefixRule, ResourceNamingRule, PropertyTypeSpecificityRule, SubjectKanonakTypeRequiredRule, PackageHeaderRule } from './rules/document/index.js';
11
- export { ImportExistenceRule, UnresolvedReferenceRule, ClassHierarchyCycleRule, PropertyHierarchyCycleRule, PropertyRangeRequiredRule, SubClassOfReferenceRule, SubPropertyOfReferenceRule, NamespaceImportCycleRule, UnresolvedPredicateRule, AmbiguousReferenceRule, PropertyRangeReferenceRule, ObjectPropertyValueValidationRule, PropertyDomainRule, PropertyKindRangeConsistencyRule, ReservedNameShadowRule, ClassDefinitionRule, EmbeddedKanonakTypeRule, MarkdownLinkRule, DisplayLensScopeRule, LookSemanticSvgPathRule, LookBandPathRule, TxExpressionPathRule, ShaclShapeRule, OwlOneOfRule, DiamondNameClashRule } from './rules/repository/index.js';
11
+ export { ImportExistenceRule, UnresolvedReferenceRule, ClassHierarchyCycleRule, PropertyHierarchyCycleRule, PropertyRangeRequiredRule, SubClassOfReferenceRule, SubPropertyOfReferenceRule, NamespaceImportCycleRule, UnresolvedPredicateRule, AmbiguousReferenceRule, PropertyRangeReferenceRule, ObjectPropertyValueValidationRule, PropertyDomainRule, PropertyKindRangeConsistencyRule, ReservedNameShadowRule, ClassDefinitionRule, EmbeddedKanonakTypeRule, MarkdownLinkRule, DisplayLensScopeRule, LookSemanticSvgPathRule, TxExpressionCompilesRule, LookBandPathRule, TxExpressionPathRule, ShaclShapeRule, OwlOneOfRule, DiamondNameClashRule } from './rules/repository/index.js';
@@ -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-CYXNYNE7.js";import"../chunk-BRCVOR7A.js";import"../chunk-AUXSXDZB.js";import"../chunk-6VIUXP4N.js";import"../chunk-ITI65NHP.js";import"../chunk-KOWDHKBN.js";import"../chunk-PEJALHXK.js";import"../chunk-EKSYQ6CU.js";import"../chunk-H6UAD2LP.js";import"../chunk-FUUTGGJS.js";import"../chunk-QILEJIFU.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,I,L as J,M as K,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-4C7ZMXQT.js";import"../chunk-BRCVOR7A.js";import"../chunk-ZZINR6NT.js";import"../chunk-6VIUXP4N.js";import"../chunk-M7LXZN47.js";import"../chunk-KOWDHKBN.js";import"../chunk-PEJALHXK.js";import"../chunk-NOPFCGB7.js";import"../chunk-CZY6OOTM.js";import"../chunk-FUUTGGJS.js";import"../chunk-QILEJIFU.js";export{u as AmbiguousReferenceRule,A as ClassDefinitionRule,n as ClassHierarchyCycleRule,J as DiamondNameClashRule,C as DisplayLensScopeRule,k as EmbeddedKanonakTypeRule,l as ImportExistenceRule,K as KanonakObjectValidator,F as LookBandPathRule,D as LookSemanticSvgPathRule,B as MarkdownLinkRule,s as NamespaceImportCycleRule,f as NamespacePrefixRule,w as ObjectPropertyValueValidationRule,c as OntologyValidationError,a as OntologyValidationResult,I 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,H as ShaclShapeRule,q as SubClassOfReferenceRule,r as SubPropertyOfReferenceRule,i as SubjectKanonakTypeRequiredRule,E as TxExpressionCompilesRule,G as TxExpressionPathRule,t as UnresolvedPredicateRule,m as UnresolvedReferenceRule,e as ValidationCache,d as ValidationContext,b as ValidationSeverity};
@@ -0,0 +1,44 @@
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
+ * Every authored `tx.Expression` must COMPILE — checked at
8
+ * `kanonak validate` time, where the author can act on it
9
+ * (kanonak-protocol/typescript#107 A1).
10
+ *
11
+ * `TransformationLoaderV3` already refuses an expression whose node class
12
+ * no runner implements, with a message naming the offending node. What was
13
+ * missing is anyone asking it before render. `math@1.0.0` extends `tx`
14
+ * exactly as designed — its classes subclass `tx.UnaryNumericOp` and reuse
15
+ * `tx.value` — so every structural rule passed it, `kanonak validate`
16
+ * reported 0 errors, and the failure only appeared as a value silently
17
+ * absent from a rendered page.
18
+ *
19
+ * This rule closes the gap by ATTEMPTING THE COMPILE rather than keeping a
20
+ * second list of node classes. The loader is the one authority on what the
21
+ * runner implements; a parallel list here would drift from it the moment a
22
+ * primitive is added (`feedback_one_canonical_way`), and drift in a
23
+ * validator is worse than no validator — it would pass authored input the
24
+ * runner then rejects.
25
+ *
26
+ * Scope: expression ROOTS only. An expression tree is compiled from its
27
+ * root, and the loader's error already carries the path to the offending
28
+ * node inside it, so compiling nested nodes independently would report one
29
+ * problem several times. A node is a root when its parent is not itself an
30
+ * expression — determined by object identity during the walk, not by
31
+ * naming the properties that carry expressions (which would be a magic-
32
+ * string list, and would miss every slot added later).
33
+ *
34
+ * Sibling rules cover the INSIDE of an expression that does compile:
35
+ * `TxExpressionPathRule` and `LookSemanticSvgPathRule` check that each
36
+ * `PropertyRead` / `Traverse` step is in scope for its context type. This
37
+ * rule is the prior question — whether the tree is a tree the runner can
38
+ * even build.
39
+ */
40
+ export declare class TxExpressionCompilesRule implements IRepositoryValidationRule {
41
+ readonly ruleName = "TxExpressionCompiles";
42
+ validateAsync(document: KanonakDocument, repository: IKanonakDocumentRepository, cache?: ValidationCache): Promise<OntologyValidationError[]>;
43
+ private toError;
44
+ }
@@ -19,6 +19,7 @@ export { EmbeddedKanonakTypeRule } from './EmbeddedKanonakTypeRule.js';
19
19
  export { MarkdownLinkRule } from './MarkdownLinkRule.js';
20
20
  export { DisplayLensScopeRule } from './DisplayLensScopeRule.js';
21
21
  export { LookSemanticSvgPathRule } from './LookSemanticSvgPathRule.js';
22
+ export { TxExpressionCompilesRule } from './TxExpressionCompilesRule.js';
22
23
  export { LookBandPathRule } from './LookBandPathRule.js';
23
24
  export { UnrenderableBandRule } from './UnrenderableBandRule.js';
24
25
  export { TxExpressionPathRule } from './TxExpressionPathRule.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kanonak-protocol/sdk",
3
- "version": "5.26.0",
3
+ "version": "5.27.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.26.0",
129
+ "@kanonak-protocol/types": "^5.27.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 Fn}from"./chunk-6VIUXP4N.js";import{a as V,c as Fe,h as u,m as Hn}from"./chunk-ITI65NHP.js";import{a as xn}from"./chunk-KOWDHKBN.js";import{a as zn}from"./chunk-PEJALHXK.js";import{ga as Nn,ha as Dn,ia as Bn}from"./chunk-EKSYQ6CU.js";import{b as je,c as q,d as j,g as W,h as ie,i as ae,j as x,k as H,l as I,m as mn,n as fe,o as Pn,p as w,r as Me,s as he,v as hn,w as qe,y as An,z as Mn}from"./chunk-H6UAD2LP.js";import{a as Vn}from"./chunk-FUUTGGJS.js";import{c as en,e as nn,g as Tn}from"./chunk-QILEJIFU.js";var xe="kanonak.org",Yn="look",We="core-rdf",Tt={publisher:xe,package_:Yn,name:"displayLabel"},Ft={publisher:xe,package_:Yn,name:"displaySummary"},xt={publisher:xe,package_:We,name:"type"},Vt={publisher:xe,package_:We,name:"subClassOf"},Pt={publisher:xe,package_:We,name:"label"},At={publisher:xe,package_:We,name:"comment"},Gn=new Vn(xe,We,"Resource");function N(r,e){let n=qn(r,e,Tt)??Pt,t=qn(r,e,Ft)??At,a=hn(e,n)??e.name,s=hn(e,t);return{label:a,summary:s}}function qn(r,e,n){let t=qe(e,n);if(t)return t;let a=new Set,s=Wn(e,xt);for(;s.length>0;){let o=s.shift(),i=mn(o);if(a.has(i))continue;a.add(i);let c=Me(r,o);if(!c)continue;let l=qe(c,n);if(l)return l;s.push(...Wn(c,Vt))}if(!a.has(mn(Gn))){let o=Me(r,Gn);if(o){let i=qe(o,n);if(i)return i}}}function Wn(r,e){let n=qe(r,e);if(n)return[n];let t=[];for(let a of An(r,e))a instanceof j&&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
- `),p=l&&e.highlight?e.highlight(l,f):De(f),m=l?` class="language-${Jn(l)}"`:"";t.push(`<pre class="kan-code"><code${m}>${p}</code></pre>`);continue}let i=/^(#{1,6})\s+(.*)$/.exec(s);if(i){let l=i[1].length,d=Ne(i[2].trim());t.push(`<h${l}>${d}</h${l}>`),a++;continue}if(s.includes("|")&&a+1<n.length&&Xn(n[a+1])){let l=bn(s),d=Mt(n[a+1]);a+=2;let f=[];for(;a<n.length&&n[a].trim()!==""&&n[a].includes("|");)f.push(bn(n[a])),a++;t.push(Nt(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>${Ne(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>${Ne(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&&Xn(n[a+1]));)c.push(n[a]),a++;t.push(`<p>${Ne(c.join(" "))}</p>`)}return t.join(`
11
- `)}function Xn(r){return r.includes("-")?/^[\s|:-]+$/.test(r):!1}function bn(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 Mt(r){return bn(r).map(e=>{let n=e.startsWith(":"),t=e.endsWith(":");return n&&t?"center":t?"right":n?"left":null})}function Nt(r,e,n){let t=o=>{let i=e[o];return i?` style="text-align:${i}"`:""},a=r.map((o,i)=>`<th${t(i)}>${Ne(o)}</th>`).join(""),s=n.map(o=>`<tr>${o.map((c,l)=>`<td${t(l)}>${Ne(c)}</td>`).join("")}</tr>`).join(`
12
- `);return`<table>
13
- <thead><tr>${a}</tr></thead>
14
- <tbody>
15
- ${s}
16
- </tbody>
17
- </table>`}function Ne(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="${Jn(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 Jn(r){return r.replace(/"/g,"&quot;").replace(/&/g,"&amp;")}var Dt={publisher:"kanonak.org",package_:"core-rdf",name:"label"};function Pe(r){return typeof r=="object"&&r!==null&&r.kind==="raw-string"}var Ke=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 Ke(`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 Zn(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 Zn(t)}case"property-read":{let t=await this.evaluate(e.source,n);return tn(t,e.readProp)}case"traverse":{let t=await this.evaluate(e.source,n);if(!(t instanceof je))return;let a=Ht(t,e.through),s=[];for(let o of a){let i=he(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 j?t.subject.name:t instanceof q?t.name:t instanceof V?t.name??"":void 0}case"uri-publisher":{let t=await this.evaluate(e.source,n);return vn(t)?.publisher}case"uri-package":{let t=await this.evaluate(e.source,n);return vn(t)?.package_}case"uri-version":{let t=await this.evaluate(e.source,n);return vn(t)?.version}case"subject-uri":{let t=await this.evaluate(e.source,n);if(t instanceof q){let a=t.namespace??"",s=t.name??"";return!a||!s?void 0:`${a}/${s}`}if(t instanceof j){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?tn(t,e.labelSource):void 0}case"resolve-ref":{let t=await this.evaluate(e.source,n);return t instanceof q?t:t instanceof j?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 je))return;let a;for(let o of t.statement){let i=$n(o);if(i&&fe(i,e.readProp)){a=o;break}}if(!(a instanceof Fe)){let o=tn(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;Gt.has(o)&&(Array.isArray(s)&&s.every(i=>Qn(i))?s=s.map(i=>et(i)).join(""):Qn(s)&&(s=et(s))),t[o]=s}return t}case"call-fragment":{let t=this.fragments.get(e.fragmentKey);if(!t)throw new Ke(`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+=pe(s,"Sum");return a}case"min":{let t=await this.evaluateList(e.source,n);if(t.length===0)throw new Ke("Min on an empty list is undefined; guard with IsSet");let a=pe(t[0],"Min");for(let s=1;s<t.length;s++){let o=pe(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 Ke("Max on an empty list is undefined; guard with IsSet");let a=pe(t[0],"Max");for(let s=1;s<t.length;s++){let o=pe(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 Ke("Average on an empty list is undefined; guard with IsSet");let a=0;for(let s of t)a+=pe(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,ye(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,ye(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,ye(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,ye(o));let c=await this.evaluate(e.partitionKey,i),l=at(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,ye(o));let c=await this.evaluate(e.distinctKey,i),l=at(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 je?t.statement:[]}case"statement-predicate":{let t=await this.evaluate(e.source,n);if(yn(t)){let a=t.predicate;if(a instanceof j)return a}return}case"statement-value":{let t=await this.evaluate(e.source,n);return yn(t)?Yt(t):void 0}case"date-format":{let t=await this.evaluate(e.source,n),a=t==null?"":Ve(t);return a?Wt(a,e.format):""}case"add":{let t=pe(await this.evaluate(e.left,n),"Add"),a=pe(await this.evaluate(e.right,n),"Add");return t+a}case"subtract":{let t=pe(await this.evaluate(e.left,n),"Subtract"),a=pe(await this.evaluate(e.right,n),"Subtract");return t-a}case"multiply":{let t=pe(await this.evaluate(e.left,n),"Multiply"),a=pe(await this.evaluate(e.right,n),"Multiply");return t*a}case"divide":{let t=pe(await this.evaluate(e.left,n),"Divide"),a=pe(await this.evaluate(e.right,n),"Divide");if(a===0)throw new Ke("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,ye(t[s])),o.set(e.secondVar,ye(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,ye(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 nt(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(nt(s,a))return!0;return!1}case"abs":{let t=pe(await this.evaluate(e.value,n),"Abs");return Math.abs(t)}case"negate":return-pe(await this.evaluate(e.value,n),"Negate");case"is-reference":{let t=await this.evaluate(e.check,n);return t instanceof j||t instanceof q}case"is-embedded":return await this.evaluate(e.check,n)instanceof V;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(!yn(t))return;let a=t;return a instanceof W||a instanceof ie||a instanceof ae||a instanceof x||a instanceof H||a instanceof I?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 je)||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 Ke("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}](${Pn(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=tn(n,Dt);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,ye(t[s-1])),o.set(e.secondVar,ye(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,ye(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,ye(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 tn(r,e){if(r instanceof je)return Bt(r,e);if(zt(r))return fe(e,u.key)?r.key:fe(e,u.members)?r.members:void 0}function Bt(r,e){for(let n of r.statement){let t=$n(n);if(!(!t||!fe(t,e))&&(n instanceof W||n instanceof ie||n instanceof ae||n instanceof x||n instanceof H||n instanceof I))return n.object}}function Ht(r,e){let n=[];for(let t of r.statement){let a=$n(t);if(!(!a||!fe(a,e))){if(t instanceof x)n.push(t.object.subject);else if(t instanceof I)for(let s of t.object)s instanceof j&&n.push(s.subject)}}return n}function $n(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(Pe(r))return r.value;if(r instanceof je)return r.name??"";if(r instanceof j)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 ye(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)&&!(r instanceof je)&&!(r instanceof j)&&!(r instanceof V)&&"value"in r?r.value:r}function Zn(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 zt(r){return typeof r=="object"&&r!==null&&r.kind==="Partition"&&Array.isArray(r.members)}function pe(r,e){if(typeof r=="number"&&Number.isFinite(r))return r;throw new Ke(`${e} requires numeric elements; got ${qt(r)}`)}function vn(r){if(r instanceof q){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 j){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 Gt=new Set(["stringValue","text","rawContent","key","propertyKey","linkLabel"]);function Qn(r){return typeof r=="string"||typeof r=="number"||typeof r=="boolean"||Pe(r)}function et(r){return Pe(r)?r.value:String(r)}function qt(r){return r===void 0?"undefined":r===null?"null":Array.isArray(r)?`array(${r.length})`:typeof r}function Wt(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 nt(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=tt(r),i=tt(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 tt(r){if(r instanceof j){let e=r.subject;return{publisher:e.publisher,package_:e.package_,name:e.name}}if(r instanceof q){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 yn(r){return r instanceof W||r instanceof ie||r instanceof ae||r instanceof x||r instanceof H||r instanceof I}function Yt(r){return r instanceof W||r instanceof ie||r instanceof ae?String(r.object??""):r instanceof x?r.object?.subject?.name??"":r instanceof H?"[embedded]":r instanceof I?(r.object??[]).map(n=>{if(n instanceof j)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 at(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 j){let e=r.subject;return`r:${e.publisher}/${e.package_}/${e.name}`}if(r instanceof je){let e=r.name??"";return`k:${r.namespace??""}/${e}`}return Be(r)?`u:${r.publisher}/${r.package_}/${r.name}`:`o:${JSON.stringify(r)}`}var X=class extends Error{constructor(n,t){super(`${n} (at ${t})`);this.path=t}path};function Ys(r,e){let n=r.name,t=oa(e),a={catalog:e,depth:0};if(w(r,u.InstanceTransformation))return Xt(r,n,a,t);if(w(r,u.SetTransformation))return Jt(r,n,a,t);throw new X("Subject is not a recognized v3 transformation type \u2014 expected InstanceTransformation or SetTransformation",n)}function Xt(r,e,n,t){return{kind:"instance",name:r.name,inputPattern:lt(r,e),rule:an(r,u.rule,`${e}.rule`,n),artifactName:an(r,u.artifactName,`${e}.artifactName`,n),outputs:ut(r,`${e}.outputs`),overrides:dt(r,`${e}.formatOverrides`,n),fragments:t}}function Jt(r,e,n,t){let a=Ue(r,u.partitionBy);return{kind:"set",name:r.name,inputPattern:lt(r,e),rule:an(r,u.rule,`${e}.rule`,n),artifactName:an(r,u.artifactName,`${e}.artifactName`,n),outputs:ut(r,`${e}.outputs`),overrides:dt(r,`${e}.formatOverrides`,n),partitionBy:a,fragments:t}}function lt(r,e){let n=Je(r,u.inputPattern);if(!n)throw new X("inputPattern is required",e);return Zt(n,`${e}.inputPattern`)}function Zt(r,e){let n=Ue(r,u.matchesClass);if(!n)throw new X("matchesClass is required",e);let t=[];for(let o of ve(r,u.requires))if(o instanceof x)t.push(_n(o.object.subject));else if(o instanceof I)for(let i of o.object)i instanceof j&&t.push(_n(i.subject));let a=[],s=0;for(let o of ve(r,u.sortBy))if(o instanceof I)for(let i of o.object)i instanceof V&&a.push(rt(i,`${e}.sortBy[${s++}]`));else o instanceof H&&a.push(rt(o.object,`${e}.sortBy[${s++}]`));return{matchesClass:n,requires:t,sortBy:a}}function rt(r,e){let n=Ue(r,u.byProperty);if(!n)throw new X("SortKey.byProperty is required",e);let t=Ue(r,u.order);if(!t)throw new X("SortKey.order is required",e);if(fe(t,u.ascending))return{byProperty:n,order:"ascending"};if(fe(t,u.descending))return{byProperty:n,order:"descending"};throw new X(`SortKey.order must reference tx.ascending or tx.descending; got ${t.publisher}/${t.package_}/${t.name}`,e)}function an(r,e,n,t){let a=Je(r,e);if(!a)throw new X("expression is required",n);return Oe(a,n,t)}function Oe(r,e,n){if(w(r,u.StringLiteral))return{kind:"string-literal",value:be(r,u.stringLiteral,e)};if(w(r,u.IntegerLiteral))return{kind:"integer-literal",value:ct(r,u.integerLiteral,e)};if(w(r,u.DecimalLiteral))return{kind:"decimal-literal",value:ct(r,u.decimalLiteral,e)};if(w(r,u.BooleanLiteral))return{kind:"boolean-literal",value:la(r,u.booleanLiteral,e)};if(w(r,u.VarRef))return{kind:"var-ref",varName:be(r,u.varName,e)};if(w(r,u.PropertyRead))return{kind:"property-read",source:y(r,u.readSource,`${e}.readSource`,n),readProp:Ie(r,u.readProp,e,"readProp")};if(w(r,u.Traverse))return{kind:"traverse",source:y(r,u.traverseSource,`${e}.traverseSource`,n),through:Ie(r,u.through,e,"through"),step:y(r,u.step,`${e}.step`,n)};if(w(r,u.BuildAstNode))return{kind:"build-ast-node",astClass:Ie(r,u.astClass,e,"astClass"),set:ea(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:Qt(r,u.elseBuild,`${e}.elseBuild`,n)};if(w(r,u.Concat))return{kind:"concat",parts:Sn(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:Ie(r,u.refTo,e,"refTo")};if(w(r,u.DisplayLabel))return{kind:"display-label",labelTarget:Ie(r,u.labelTarget,e,"labelTarget"),labelSource:Ie(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:na(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:Ie(r,u.renderProp,e,"renderProp"),format:ta(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 ra(r,e,n);if(w(r,u.Join))return{kind:"join",source:y(r,u.source,`${e}.source`,n),separator:be(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:be(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:be(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:be(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:be(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:be(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:aa(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=ft(r,u.windowSize);if(t===void 0||!Number.isInteger(t)||t<1)throw new X("windowSize must be a positive integer",`${e}.windowSize`);return{kind:"windowed-map",source:y(r,u.source,`${e}.source`,n),windowSize:t,windowVar:be(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:be(r,u.firstVar,e),secondVar:be(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:be(r,u.stateVar,e),elementVar:be(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:Sn(r,u.operands,`${e}.operands`,n)};if(w(r,u.Or))return{kind:"or",operands:Sn(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:be(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 X("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 X("child expression is required",n);return Oe(a,n,t)}function Qt(r,e,n,t){let a=Je(r,e);if(a)return Oe(a,n,t)}function Sn(r,e,n,t){let a=[],s=0;for(let o of ve(r,e))if(o instanceof I)for(let i of o.object)i instanceof V&&a.push(Oe(i,`${n}[${s++}]`,t));else o instanceof H&&a.push(Oe(o.object,`${n}[${s++}]`,t));return a}function ea(r,e,n){let t=[],a=0;for(let s of ve(r,u.set))if(s instanceof I)for(let o of s.object)o instanceof V&&t.push(st(o,`${e}[${a++}]`,n));else s instanceof H&&t.push(st(s.object,`${e}[${a++}]`,n));return t}function st(r,e,n){return{field:Ie(r,u.field,e,"field"),value:y(r,u.bindValue,`${e}.bindValue`,n)}}function na(r,e){let n=Ue(r,u.normKind);if(!n)throw new X("normKind is required",e);if(fe(n,u.NORM_TRIM_END))return"trim-end";if(fe(n,u.NORM_TO_UPPER))return"to-upper";if(fe(n,u.NORM_TO_LOWER))return"to-lower";if(fe(n,u.NORM_FIRST_CHAR))return"first-char";throw new X(`Unknown NormalizeKind: ${n.publisher}/${n.package_}/${n.name}`,e)}function ta(r,e){let n=Ue(r,u.renderFormat);if(!n)throw new X("renderFormat is required",e);if(fe(n,u.RENDER_HTML))return"html";if(fe(n,u.RENDER_MARKDOWN))return"markdown";throw new X(`Unknown RenderFormat: ${n.publisher}/${n.package_}/${n.name}`,e)}var ot=new Set(["iso-date","iso-datetime","short-date","long-date","year","month-year"]);function aa(r,e){let n=He(r,u.dateFormat);if(!n)throw new X("dateFormat is required",e);if(!ot.has(n))throw new X(`Unknown dateFormat "${n}"; supported: ${[...ot].join(", ")}`,e);return n}function ra(r,e,n){let t=Ue(r,u.fragmentRef);if(!t)throw new X("fragmentRef is required",e);if(!ia(n.catalog,t))throw new X(`ExpressionFragment not found: ${t.publisher}/${t.package_}/${t.name}`,e);return{kind:"call-fragment",fragmentKey:sa(t)}}function sa(r){return`${r.publisher}/${r.package_}/${r.name}`}function oa(r){let e=new Map,n=[];for(let t of r){if(!(t instanceof q)||!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=Oe(t.bodyEmb,`fragment(${t.pubPkgName})`,{catalog:r,depth:0});e.set(t.key,a)}return e}function ia(r,e){for(let n of r)if(!(!(n instanceof q)||n.name!==e.name||!(n.namespace||"").startsWith(`${e.publisher}/${e.package_}@`))&&w(n,u.ExpressionFragment))return n}function ut(r,e){let n=new Set;for(let t of ve(r,u.outputs))if(t instanceof x)n.add(t.object.subject.name);else if(t instanceof I)for(let a of t.object)a instanceof j&&n.add(a.subject.name);if(n.size===0)throw new X("outputs is required (at least one OutputFormat)",e);return n}function dt(r,e,n){let t=new Map,a=0;for(let s of ve(r,u.formatOverrides))if(s instanceof I){for(let o of s.object)if(o instanceof V){let[i,c]=it(o,`${e}[${a++}]`);t.set(i,c)}}else if(s instanceof H){let[o,i]=it(s.object,`${e}[${a++}]`);t.set(o,i)}return t}function it(r,e){let n=Ue(r,u.formatTarget);if(!n)throw new X("formatTarget is required",e);let t=[];for(let i of ve(r,u.metadataKeys))if(i instanceof W)t.push(i.object);else if(i instanceof I)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 I){for(let c of i.object)if(c instanceof V){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=wn(r,u.trailingNewline),o=wn(r,u.omitWrapper);return[n.name,{metadataKeys:t.length>0?t:void 0,metadataRenames:a,trailingNewline:s,omitWrapper:o}]}function ca(r){return r.predicate?.subject}function ve(r,e){let n=[];for(let t of r.statement){let a=ca(t);a&&fe(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 Ue(r,e){for(let n of ve(r,e))if(n instanceof x)return _n(n.object.subject)}function He(r,e){for(let n of ve(r,e))if(n instanceof W)return n.object}function ft(r,e){for(let n of ve(r,e))if(n instanceof ie)return n.object}function wn(r,e){for(let n of ve(r,e))if(n instanceof ae)return n.object}function be(r,e,n){let t=He(r,e);if(t===void 0)throw new X(`${e.name} (string) is required`,n);return t}function ct(r,e,n){let t=ft(r,e);if(t===void 0)throw new X(`${e.name} (number) is required`,n);return t}function la(r,e,n){let t=wn(r,e);if(t===void 0)throw new X(`${e.name} (boolean) is required`,n);return t}function Ie(r,e,n,t){let a=Ue(r,e);if(!a)throw new X(`${t} (URI reference) is required`,n);return a}function _n(r){return{publisher:r.publisher,package_:r.package_,name:r.name}}var rn=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=Me(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(p=>{let m=p.metadata?.namespace_?.version;return m&&m.major===a.major&&m.minor===a.minor&&m.patch===a.patch})??l[0]:l[0],f=new Mn(d,this.repository);i=await this.objectParser.parseKanonaks(f),this.cache.set(o,i)}let c=Me(i,e);if(c)return c;for(let l of i)if(l instanceof q&&l.name===e.name)return l}};var sn=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 fn={publisher:"kanonak.org",package_:"derivation",name:"look"},pn={publisher:"kanonak.org",package_:"derivation",name:"tokens"},we={publisher:"kanonak.org",package_:"core-rdf",name:"Resource"},jn={publisher:"kanonak.org",package_:"core-rdf",name:"label"},pt={publisher:"kanonak.org",package_:"core-rdf",name:"comment"},ua={publisher:"kanonak.org",package_:"core-rdf",name:"range"},da={publisher:"kanonak.org",package_:"core-rdf",name:"Class"},fa={publisher:"kanonak.org",package_:"core-owl",name:"Class"},pa={publisher:"kanonak.org",package_:"look",name:"Hero"},ga={publisher:"kanonak.org",package_:"look",name:"PropertyList"},ka={publisher:"kanonak.org",package_:"look",name:"PropertyTable"},ma={publisher:"kanonak.org",package_:"look",name:"BadgeRow"},ha={publisher:"kanonak.org",package_:"look",name:"ChipRow"},ba={publisher:"kanonak.org",package_:"look",name:"ReferenceList"},va={publisher:"kanonak.org",package_:"look",name:"ReferencedBy"},ya={publisher:"kanonak.org",package_:"look",name:"Instances"},gt={publisher:"kanonak.org",package_:"look",name:"Markdown"},$a={publisher:"kanonak.org",package_:"look",name:"NavGroup"},Sa={publisher:"kanonak.org",package_:"look",name:"nav"},Kn={publisher:"kanonak.org",package_:"look",name:"NavLink"},wa={publisher:"kanonak.org",package_:"look",name:"footer"},_a={publisher:"kanonak.org",package_:"look",name:"text"},ja={publisher:"kanonak.org",package_:"look",name:"links"},kt={publisher:"kanonak.org",package_:"look",name:"target"},Ka={publisher:"kanonak.org",package_:"look",name:"ResourceGrid"},Ra={publisher:"kanonak.org",package_:"look",name:"Timeline"},Ea={publisher:"kanonak.org",package_:"look",name:"VersionDiff"},La={publisher:"kanonak.org",package_:"look",name:"Figure"},Oa={publisher:"kanonak.org",package_:"look",name:"Diagram"},Ua={publisher:"kanonak.org",package_:"look",name:"facets"},Ca={publisher:"kanonak.org",package_:"look",name:"relation"},Ia={publisher:"kanonak.org",package_:"look",name:"encode"},Ta={publisher:"kanonak.org",package_:"look",name:"cluster"},Fa={publisher:"kanonak.org",package_:"look",name:"connector"},xa={publisher:"kanonak.org",package_:"look",name:"channels"},Va={publisher:"kanonak.org",package_:"look",name:"mapPath"},Pa={publisher:"kanonak.org",package_:"look",name:"to"},Aa={publisher:"kanonak.org",package_:"look",name:"mark"},Ma={publisher:"kanonak.org",package_:"look",name:"expand"},Na={publisher:"kanonak.org",package_:"look",name:"edges"},Da={publisher:"kanonak.org",package_:"look",name:"nodeTier"},Ba={publisher:"kanonak.org",package_:"look",name:"diagramTier"},Ha={publisher:"kanonak.org",package_:"look",name:"nodeNote"},za={publisher:"kanonak.org",package_:"look",name:"edgeLabel"},Ga={publisher:"kanonak.org",package_:"look",name:"labelEdges"},qa={publisher:"kanonak.org",package_:"look",name:"edgeValue"},Wa={publisher:"kanonak.org",package_:"look",name:"figureTitle"},Ya={publisher:"kanonak.org",package_:"look",name:"titlePosition"},Xa=`(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},Ja=["chip","icon","card","full"],Za={56:"chip",120:"icon",240:"card",420:"full"},_e=11,Qa={publisher:"kanonak.org",package_:"look",name:"placement"},er={publisher:"kanonak.org",package_:"look",name:"width"},nr=4,tr={publisher:"kanonak.org",package_:"look",name:"StatRow"},ar={publisher:"kanonak.org",package_:"look",name:"Horizon"},rr={publisher:"kanonak.org",package_:"look",name:"PackageContents"},Rn={publisher:"kanonak.org",package_:"core-kanonak",name:"Package"},sr={publisher:"kanonak.org",package_:"core-kanonak",name:"Publisher"},or={publisher:"kanonak.org",package_:"look",name:"FeaturedResource"},ir={publisher:"kanonak.org",package_:"look",name:"PublisherPackages"},cr={publisher:"kanonak.org",package_:"look",name:"packages"},lr={publisher:"kanonak.org",package_:"code-grammars",name:"CodeGrammar"},ur={publisher:"kanonak.org",package_:"code-grammars",name:"language"},dr={publisher:"kanonak.org",package_:"code-grammars",name:"rule"},fr={publisher:"kanonak.org",package_:"code-grammars",name:"tokenClass"},pr={publisher:"kanonak.org",package_:"code-grammars",name:"pattern"},gr={publisher:"kanonak.org",package_:"look",name:"Links"},kr={publisher:"kanonak.org",package_:"link",name:"url"},mr={publisher:"kanonak.org",package_:"link",name:"links"};var hr={publisher:"kanonak.org",package_:"look",name:"Distribution"},br={publisher:"kanonak.org",package_:"look",name:"alphaPath"},vr={publisher:"kanonak.org",package_:"look",name:"betaPath"},En={publisher:"kanonak.org",package_:"look",name:"SectionHeading"},yr={publisher:"kanonak.org",package_:"look",name:"SectionNav"},mt={publisher:"kanonak.org",package_:"look",name:"heading"},$r={publisher:"kanonak.org",package_:"look",name:"note"},Sr={publisher:"kanonak.org",package_:"look",name:"VersionDelta"},wr={publisher:"kanonak.org",package_:"look",name:"TimePlot"},_r={publisher:"kanonak.org",package_:"look",name:"Details"},jr={publisher:"kanonak.org",package_:"look",name:"EmbeddedViews"},Kr={publisher:"kanonak.org",package_:"look",name:"ResourceCount"},Rr={publisher:"kanonak.org",package_:"look",name:"counts"},Er={publisher:"kanonak.org",package_:"look",name:"skip"},Lr={publisher:"kanonak.org",package_:"derivation",name:"derivations"},Or={publisher:"kanonak.org",package_:"look",name:"laneBy"},Ur={publisher:"kanonak.org",package_:"look",name:"stats"},Cr={publisher:"kanonak.org",package_:"look",name:"statPath"},Ir={publisher:"kanonak.org",package_:"look",name:"statLabel"},ht={publisher:"kanonak.org",package_:"look",name:"labelPath"},Tr={publisher:"kanonak.org",package_:"look",name:"badgePath"},bt={publisher:"kanonak.org",package_:"look",name:"BarMeter"},Fr={publisher:"kanonak.org",package_:"look",name:"cellAs"},xr={publisher:"kanonak.org",package_:"look",name:"variants"},Vr={publisher:"kanonak.org",package_:"look",name:"when"},Pr={publisher:"kanonak.org",package_:"look",name:"property"},vt={publisher:"kanonak.org",package_:"look",name:"equals"},Ar={publisher:"kanonak.org",package_:"look",name:"ResourceQuery"},Mr={publisher:"kanonak.org",package_:"look",name:"ofClass"},Nr={publisher:"kanonak.org",package_:"look",name:"direction"},Dr={publisher:"kanonak.org",package_:"look",name:"limit"},on={publisher:"kanonak.org",package_:"look",name:"orderBy"},yt={publisher:"kanonak.org",package_:"look",name:"track"},Qe={publisher:"kanonak.org",package_:"look",name:"metricPath"},Ln={publisher:"kanonak.org",package_:"look",name:"hueBy"},$t={publisher:"kanonak.org",package_:"look",name:"lowerPath"},St={publisher:"kanonak.org",package_:"look",name:"upperPath"},Br={publisher:"kanonak.org",package_:"look",name:"axisMin"},Hr={publisher:"kanonak.org",package_:"look",name:"axisMax"},zr={publisher:"kanonak.org",package_:"look",name:"valueLabel"};var wt={publisher:"kanonak.org",package_:"look",name:"semanticSvg"},Gr={publisher:"kanonak.org",package_:"look",name:"tierChip"},qr={publisher:"kanonak.org",package_:"look",name:"tierIcon"},Wr={publisher:"kanonak.org",package_:"look",name:"tierCard"},Yr={publisher:"kanonak.org",package_:"look",name:"tierFull"},Ce={publisher:"kanonak.org",package_:"core-rdf",name:"type"},_t={publisher:"kanonak.org",package_:"core-rdf",name:"subClassOf"},jt=6,On={publisher:"kanonak.org",package_:"look",name:"bands"},Xr={publisher:"kanonak.org",package_:"look",name:"title"},Jr={publisher:"kanonak.org",package_:"look",name:"eyebrow"},Zr={publisher:"kanonak.org",package_:"look",name:"subtitle"},Kt={publisher:"kanonak.org",package_:"look",name:"badges"},se={publisher:"kanonak.org",package_:"look",name:"source"},Qr={publisher:"kanonak.org",package_:"look",name:"via"},es={publisher:"kanonak.org",package_:"look",name:"size"},ns={publisher:"kanonak.org",package_:"look",name:"icon"},ts={publisher:"kanonak.org",package_:"look",name:"avatar"},as={publisher:"kanonak.org",package_:"look",name:"contents"},rs={publisher:"kanonak.org",package_:"look",name:"transitive"},ss={publisher:"kanonak.org",package_:"look",name:"chips"},Rt={publisher:"kanonak.org",package_:"look",name:"entries"},os={publisher:"kanonak.org",package_:"look",name:"urlForm"},kn=class r{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 zn.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=ls(e)?void 0:cn(e);return n?{declaration:n,sourceClass:{publisher:ne(e),package_:this.uriOf(e).package_,name:e.name}}:this.lookFromTypeRefs(me(e))}lookFromTypeRefs(e){let n=new Set,t=[...e];for(;t.length>0;){let s=t.shift().subject,o=Y(s);if(n.has(o))continue;n.add(o);let i=he(this.catalog,s);for(let c of i){let l=cn(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 un(c))t.push(l)}if(!n.has(Y(we)))for(let a of he(this.catalog,we)){let s=cn(a);if(s)return{declaration:s,sourceClass:{...we}}}}matchingVariants(e){let n=this.findCascadedLook(e);if(!n)return[];let t=this.gatherValueItems(z(n.declaration,xr)).filter(i=>i instanceof V);if(t.length===0)return[];let a=Z(this.catalog,n.sourceClass),s={namespace:a?.namespace??"",name:a?.name??n.sourceClass.name},o=[];for(let i of t){let c=this.readEmbeddedCarrier(i,Vr);if(!c)continue;let l=T(c,Pr);if(!l)continue;let d=T(c,vt);if(d){let p=z(e,l);this.gatherValueItems(p).filter(h=>h instanceof j).some(h=>Y(h.subject)===Y(d))&&o.push({variant:i,declaredBy:s});continue}let f=ee(c,vt);f!==void 0&&this.readPropertyValueText(e,l)===f&&o.push({variant:i,declaredBy:s})}return o}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=(i,c,l)=>{for(let[d,f]of is(i))n.has(d)||n.set(d,{value:f,sourceNamespace:l?.namespace??i.namespace??"",sourceName:l?.name??i.name,level:c})};t(e,"instance");for(let{variant:i,declaredBy:c}of this.matchingVariants(e))t(i,"variant",c);let a=new Set,s=me(e);for(;s.length>0;){let i=s.shift(),c=Y(i.subject);if(a.has(c))continue;a.add(c);let l=c===Y(we)?"resource-floor":"class",d=he(this.catalog,i.subject);if(d.length!==0)for(let f of d){t(f,l);for(let p of un(f))s.push(p)}}let o=ne(e);if(o){let i=this.publisherSubject(o);i!==e&&t(i,"publisher")}if(!a.has(Y(we))){let i=he(this.catalog,we);for(let c of i)t(c,"resource-floor")}return n}async renderSvg(e){let n=N(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),p=[...this.findCascadedTokens(e)].map(([m,h])=>`--kan-${m}: ${h};`).join(" ");return`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400" style="${Re(p)}">
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 xn,n=new Fn(e);this.resolverInstance=new rn(n,e,new Hn(e))}return this.resolverInstance}async evaluateTier(e,n){if(!e)return"";let t;try{t=Oe(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(Lt(i.kind,c))}return o.join("")}let s=await a.evaluate(t,n);return Lt(t.kind,s)}async evaluateCarrier(e,n){if(!e)return;let t;try{t=Oe(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=It(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=z(e,n);return t instanceof H&&t.object instanceof V?t.object:void 0}referenceLabel(e){let n=e.subject,t=he(this.catalog,n);if(t.length===0){let a=Z(this.catalog,n);a&&t.push(a)}for(let a of t){let s=N(this.catalog,a);if(s.label!==a.name)return s.label}return n.name}collectCascadedSvgTiers(e){let n={},t=c=>{let l=z(c,wt);if(!(l instanceof H))return;let d=l.object,f=ln(d,Gr),p=ln(d,qr),m=ln(d,Wr),h=ln(d,Yr);n.tierChip===void 0&&f!==void 0&&(n.tierChip=f),n.tierIcon===void 0&&p!==void 0&&(n.tierIcon=p),n.tierCard===void 0&&m!==void 0&&(n.tierCard=m),n.tierFull===void 0&&h!==void 0&&(n.tierFull=h)};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 he(this.catalog,l))t(d)}let o=new Set,i=me(e);for(;i.length>0;){let c=i.shift(),l=Y(c.subject);if(o.has(l))continue;o.add(l);let d=he(this.catalog,c.subject);for(let f of d){t(f);for(let p of un(f))i.push(p)}}if(!o.has(Y(we)))for(let c of he(this.catalog,we))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`${us(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=>this.uriOf(f).version??null,a=[],s,o,i,c;for(let f of this.catalog){if(!(f instanceof q)||f.name!=="base-stylesheet")continue;let p=f.namespace||"";if(p.startsWith(`${e}/look-styles@`)){a.push(p);let m=t(f);m&&(!o||en(m,o)>0)&&(s=f,o=m)}else if(p.startsWith("kanonak.org/look-styles@")){a.push(p);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 p=f.predicate?.subject;if(!p)continue;if(`${p.publisher}/${p.package_}/${p.name}`===n&&f instanceof W)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=Un(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&&M(c,En)&&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=ee(e,Qa);if(t!=="floatLeft"&&t!=="floatRight")return n;let a=t==="floatLeft"?"left":"right",s=ee(e,er),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||!M(a,En))continue;let s=ee(t,mt);s&&n.push({slug:Ot(s),label:s})}return n}publisherSubject(e){for(let t of this.catalog){if(!(t instanceof q)||ne(t)!==e||!me(t).some(s=>M(s.subject,sr)))continue;return he(this.catalog,{publisher:e,package_:this.uriOf(t).package_,name:t.name})[0]??t}let n=new q;return n.namespace=e,n.name=e,n.statement=[x.parse("kanonak.org/core-rdf/type","kanonak.org/core-kanonak/Publisher"),W.parse("kanonak.org/core-rdf/label",e)],n}hasDeclaredView(e){let n=this.findCascadedLook(e);return n?!(a=>a.publisher===we.publisher&&a.package_===we.package_&&a.name===we.name||a.publisher===Rn.publisher&&a.package_===Rn.package_&&a.name===Rn.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="${g(this.packageHref(a,e,l))}/"><h3 class="kan-resource-card-title">${g(l)}</h3></a>`).join(`
84
- `),c=`<header class="kan-hero">
85
- <span class="kan-hero-eyebrow">PACKAGE</span>
86
- <h1 class="kan-hero-title">${g(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>${g(e)}</title>
96
- <link rel="stylesheet" href="${g(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=N(this.catalog,e).label,s=n?.rootIndex?"index.css":`${e.name}.css`,o=!n?.rootIndex&&this.hasSvgDerivation(e)?`<figure class="kan-figure"><img src="${g(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>${g(a)}</title>
113
- <link rel="stylesheet" href="${g(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=me(e);for(;t.length>0;){let a=t.shift(),s=Y(a.subject);if(n.has(s))continue;n.add(s);let o=Z(this.catalog,a.subject);if(o){for(let i of o.statement)if(i instanceof I&&$e(i,"kanonak.org","derivation","derivations")){for(let c of i.object??[])if(c instanceof V)for(let l of c.statement){if(!(l instanceof x)||!$e(l,"kanonak.org","derivation","format")||!(l.object instanceof j))continue;let d=l.object.subject;if(d.publisher==="kanonak.org"&&d.package_==="formats"&&d.name==="svg")return!0}}for(let i of un(o))t.push(i)}}return!1}static BAND_DISPATCH=[[yr,(e,n)=>e.renderSectionNav(n.sections)],[pa,(e,n)=>e.renderHero(n.band,n.instance,n.contextPublisher)],[ga,(e,n)=>e.renderPropertyList(n.band,n.instance,n.contextPublisher)],[ka,(e,n)=>e.renderPropertyTable(n.band,n.instance,n.contextPublisher,n.pathPrefix)],[ma,(e,n)=>e.renderBadgeRow(n.band,n.instance,n.contextPublisher)],[ha,(e,n)=>e.renderChipRow(n.band,n.instance,n.contextPublisher)],[ba,(e,n)=>e.renderReferenceList(n.band,n.instance,n.contextPublisher)],[va,(e,n)=>e.renderReferencedBy(n.band,n.instance,n.contextPublisher)],[ya,(e,n)=>e.renderInstances(n.band,n.instance,n.contextPublisher)],[gt,(e,n)=>e.renderMarkdown(n.band,n.instance,n.contextPublisher)],[gr,(e,n)=>e.renderLinks(n.band,n.instance)],[$a,(e,n)=>e.renderNavGroup(n.instance,n.contextPublisher)],[Ka,(e,n)=>e.renderResourceGrid(n.band,n.contextPublisher,n.instance)],[Ra,(e,n)=>e.renderTimeline(n.band,n.contextPublisher)],[Ea,(e,n)=>e.renderVersionDiff(n.band,n.contextPublisher)],[La,(e,n)=>e.renderFigure(n.band,n.instance,n.contextPublisher)],[Oa,(e,n)=>e.renderDiagram(n.band,n.instance,n.contextPublisher)],[tr,(e,n)=>e.renderStatRow(n.band,n.instance)],[ar,(e,n)=>e.renderHorizon(n.band,n.instance,n.contextPublisher)],[rr,(e,n)=>e.renderPackageContents(n.instance,n.contextPublisher)],[or,(e,n)=>e.renderFeaturedResource(n.band,n.contextPublisher)],[ir,(e,n)=>e.renderPublisherPackages(n.band,n.contextPublisher)],[hr,(e,n)=>e.renderDistribution(n.band,n.instance)],[En,(e,n)=>e.renderSectionHeading(n.band)],[Sr,(e,n)=>e.renderVersionDelta(n.band,n.instance)],[wr,(e,n)=>e.renderTimePlot(n.band,n.instance,n.contextPublisher)],[_r,(e,n)=>e.renderDetails(n.band,n.instance,n.contextPublisher)],[jr,(e,n)=>e.renderEmbeddedViews(n.band,n.instance,n.contextPublisher,n.pathPrefix)],[Kr,(e,n)=>e.renderResourceCount(n.band,n.contextPublisher)],[bt,(e,n)=>e.renderBarMeter(n.band,n.instance)]];static bandDispatchUris(){return r.BAND_DISPATCH.map(([e])=>e)}uriOf(e){let n=Nn(e);return n?{publisher:n.publisher,package_:n.package_,name:n.name,...n.version?{version:n.version}:{}}:{publisher:ne(e),package_:"",name:e.name}}async renderBand(e,n,t,a=[],s=""){let o=ze(e);if(!o)return"<!-- LookRenderer: band has no rdf:type -->";let i={band:e,instance:n,contextPublisher:t,sections:a,pathPrefix:s};for(let[c,l]of r.BAND_DISPATCH)if(M(o,c))return l(this,i);return`<!-- LookRenderer: unsupported band ${o.publisher}/${o.package_}/${o.name} -->`}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],p=this.readPropertyValueReferences(f,n);for(let m of p){let h=Z(this.catalog,{publisher:m.subject.publisher,package_:m.subject.package_,name:m.subject.name,...m.subject.version?{version:m.subject.version}:{}});if(!h)continue;let b=m.subject.name,k=c.get(b);k||(k={key:b,label:N(this.catalog,h).label,points:new Array(l).fill(null),...o?{lower:new Array(l).fill(null)}:{},...i?{upper:new Array(l).fill(null)}:{}},c.set(b,k));let $=await this.evaluateCarrierNum(t,h);if(Number.isFinite($)&&(k.points[d]=$),o&&k.lower){let v=await this.evaluateCarrierNum(o,h);Number.isFinite(v)&&(k.lower[d]=v)}if(i&&k.upper){let v=await this.evaluateCarrierNum(i,h);Number.isFinite(v)&&(k.upper[d]=v)}if(s){let v=await this.evaluateCarrierNum(s,h);Number.isFinite(v)&&(k.hue=v)}k.lastSubject=h}}return[...c.values()]}hrefForSubject(e,n,t="="){let a=this.uriOf(e),s=a.package_,o=a.version;return this.resourceHref({publisher:ne(e),package_:s,name:e.name,...o?{version:o}:{}},n,t)}async renderVersionDiff(e,n){let t=T(e,se);if(!t)return"<!-- LookRenderer.VersionDiff: no look.source -->";let a=this.readEmbeddedCarrier(e,Qe),s=T(e,yt);if(!s||!a)return"<!-- LookRenderer.VersionDiff: needs look.track + look.metricPath -->";let o=T(e,on),i=this.readEmbeddedCarrier(e,Ln),c=this.findInstancesOfClass(t,this.readTransitive(e));if(c.length===0)return"<!-- LookRenderer.VersionDiff: no instances -->";let l=m=>o?this.readPropertyValueText(m,o)??"":"",d=c.slice().sort((m,h)=>l(m).localeCompare(l(h))),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,h)=>{let b=m.hue!==void 0?m.hue:Math.round(h*360/f.length),k=m.points.filter(U=>U!==null);if(k.length===0)return"";let $=k[0],v=k[k.length-1],_=v-$,K;if(Math.abs(_)>=.005){let U=_>0?"up":"down",D=_>0?"\u25B2":"\u25BC";K=`<span class="kan-vdiff-delta ${U}">${_>0?"+":""}${_.toFixed(2)} ${D}</span>`}else K='<span class="kan-vdiff-delta flat">\u2014</span>';let O=m.lastSubject&&this.isLinkable(ne(m.lastSubject),n)?`<a href="${g(this.hrefForSubject(m.lastSubject,n))}">${g(m.label)}</a>`:g(m.label);return`<div class="kan-vdiff-row" style="--kan-vdiff-hue:${b}"><span class="kan-vdiff-label">${O}</span><span class="kan-vdiff-start">${$.toFixed(2)}</span>`+this.sparkline(m.points,b)+`<span class="kan-vdiff-end">${v.toFixed(2)}</span>`+K+"</div>"}).join("")}</section>`}sparkline(e,n){let o=`hsl(${n},65%,60%)`,i=e.filter(k=>k!==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,p=k=>f<=1?132/2:4+k/(f-1)*124,m=k=>d<1e-9?30/2:26-(k-c)/d*22,h=[],b=[];return e.forEach((k,$)=>{if(k===null)return;let v=p($),_=m(k);h.push(`${v.toFixed(1)},${_.toFixed(1)}`),b.push(`<circle cx="${v.toFixed(1)}" cy="${_.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="${h.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=T(e,se);if(s){let d=Z(this.catalog,s);d&&(a=d)}let o=this.svgUrlForSubject(a,t),i=N(this.catalog,a).label,c=ee(e,es);return`<figure class="kan-figure${c==="small"||c==="medium"||c==="large"?` kan-figure-${c}`:""}"><img class="kan-figure-img" src="${g(o)}" alt="${g(i)}" loading="lazy"/></figure>`}diagramArrowSeq=0;diagramScriptEmitted=!1;async renderDiagram(e,n,t,a=0,s=new Set){let o=this.gatherValueItems(z(e,Ua)).filter(h=>h instanceof V);if(o.length===0)return"<!-- LookRenderer.Diagram: no look.facets -->";let i=[];for(let h of o){let b=T(h,Ca);if(!b){i.push("<!-- LookRenderer.Diagram: facet has no resolvable look.relation -->");continue}let k=T(h,Ia),$=this.resolveFacetNodes(n,b);if($.length===0){i.push(`<!-- LookRenderer.Diagram: relation ${b.publisher}/${b.package_}/${b.name} resolved to 0 instances -->`);continue}let v=await this.resolveFacetChannels(h,$),_=z(h,Aa),K=_ instanceof H&&_.object instanceof V?_.object:void 0,O=ee(h,Da),U=O&&Ze[O]!==void 0?Ze[O]:void 0,D=U??this.classTierSize($),L=Za[D??Ze.icon]??"icon",le=this.readEmbeddedCarrier(h,Ha),C=T(h,Ma),B=C?Z(this.catalog,C):void 0;if(B){i.push(await this.renderDiagramExpand($,B,t,a,s,le,U));continue}if(k&&M(k,Fa)){let J=T(h,Na),ce=this.facetEdgeLabel(h,J??b),ue=this.readEmbeddedCarrier(h,qa);i.push(await this.embedTiers(L,E=>J?this.renderDiagramDag($,J,v,t,E,ce,ue):this.renderDiagramConnector(n,$,v,t,E,ce,ue)));continue}if(k&&!M(k,Ta)){i.push(`<!-- LookRenderer.Diagram: unknown encode role ${k.publisher}/${k.package_}/${k.name} -->`);continue}i.push(K?`<div class="kan-dgm-tiers" data-geo="1"><div class="kan-dgm-tier" data-tier="card">${await this.renderDiagramCluster($,v,K,t,D)}</div></div>`:await this.embedTiers(L,J=>this.renderDiagramCluster($,v,void 0,t,J)))}let c=ee(e,Wa),l=ee(e,Ya),d=h=>`<div class="kan-diagram-title" style="font-weight:600;font-size:0.95rem;color:var(--kan-text);${h}">${g(c)}</div>`,f=c&&l!=="bottom"?d("margin:0 0 .5rem"):"",p=c&&l==="bottom"?d("margin:.5rem 0 0"):"",m="";return a===0&&!this.diagramScriptEmitted&&(this.diagramScriptEmitted=!0,m=`<script>${Xa}</script>`),`<section class="kan-diagram">${f}${i.join("")}${p}${m}</section>`}async embedTiers(e,n){let t=[];for(let a of Ja){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<nr&&!s.has(d)?await this.renderDiagram(n,l,t,a+1,new Set([...s,d])):"",h=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}${h}</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=N(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)">${g(c)}</span>`:"";return`<a href="${g(s)}" style="display:inline-flex;align-items:center;gap:10px;text-decoration:none"><img src="${g(o)}" width="${t}" height="${t}" alt="" loading="lazy"/><span><span class="kan-diagram-node-label">${g(i)}</span>${l}</span></a>`}classTierSize(e){let n;for(let t of e)for(let a of me(t)){let s=Z(this.catalog,a.subject);if(!s)continue;let o=ee(s,Ba),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=Z(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(z(e,xa)).filter(s=>s instanceof V),a=[];for(let s of t){let o=this.readEmbeddedCarrier(s,Va),i=ee(s,Pa);if(!o||!i)continue;let c=[];for(let h of n){let b=await this.evaluateCarrierNum(o,h);c.push(Number.isFinite(b)?b:NaN)}let l=c.filter(h=>Number.isFinite(h)),d=l.length?Math.min(...l):0,p=(l.length?Math.max(...l):0)-d,m=c.map(h=>Number.isFinite(h)&&p>0?(h-d)/p:.5);a.push({to:i,norm:m})}return a}facetEdgeLabel(e,n){let t=ee(e,za);if(t)return t;if(cs(e,Ga)&&n){let s=Z(this.catalog,n);if(s)return N(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)">${g(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 k=0;k<e.length;k++){let $=e[k],v=await this.renderBand(t,$,a),_=this.hrefForSubject($,a),K=N(this.catalog,$).label,O=l?`opacity:${(.4+l.norm[k]*.6).toFixed(2)};`:"";b.push(`<a class="kan-diagram-mark" href="${g(_)}" style="display:block;text-decoration:none;${O}">${v}<span class="kan-diagram-mark-label">${g(K)}</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),p=c*2+d*o+(d-1)*i,m=c*2+f*o+(f-1)*i,h=e.map((b,k)=>{let $=k%d,v=Math.floor(k/d),_=c+$*(o+i),K=c+v*(o+i),O=l?.4+l.norm[k]*.6:1;return this.diagramTile(b,_,K,o,a,O)}).join("");return`<figure class="kan-diagram-figure"><svg class="kan-diagram-svg" viewBox="0 0 ${p} ${m}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">${h}</svg></figure>`}async renderDiagramConnector(e,n,t,a,s,o,i){let c=s??120,l=24,d=130,f=18,p=t.find(C=>C.to==="thickness"),m=t.find(C=>C.to==="opacity"),h=n.length,b=h*c+(h-1)*l,k=f*2+b,$=f*2+c+d+c,v=f,_=f+(b-c)/2,K=f+c+d,O=`kan-arrow-${this.diagramArrowSeq++}`,U=[],D=[],L=[];for(let C=0;C<n.length;C++){let B=n[C],J=f+C*(c+l),ce=v+c,ue=_+c/2,E=K-_e,Q=J+c/2,F=(ce+K)/2,S=p?1.5+p.norm[C]*5.5:2,A=m?.4+m.norm[C]*.6:1,G=m?` stroke-opacity="${A.toFixed(2)}"`:"";U.push(`<path d="M${ce.toFixed(1)},${ue.toFixed(1)} C${F.toFixed(1)},${ue.toFixed(1)} ${F.toFixed(1)},${Q.toFixed(1)} ${E.toFixed(1)},${Q.toFixed(1)}" class="kan-diagram-edge" fill="none" stroke="var(--kan-border)" stroke-width="${S.toFixed(1)}"${G} marker-end="url(#${O})"/>`);let R=await this.edgeText(o,B,i);R&&D.push(this.edgeLabelEl((ce+K)/2,(ue+Q)/2-5,R)),L.push(this.diagramTile(B,K,J,c,a,m?A:1))}let le=this.diagramTile(e,v,_,c,a);return`<figure class="kan-diagram-figure"><svg class="kan-diagram-svg" viewBox="0 0 ${$.toFixed(0)} ${k.toFixed(0)}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">${this.arrowMarkerDef(O,"var(--kan-border)")}${U.join("")}${D.join("")}${le}${L.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,p=new Map(e.map((S,A)=>[S.name,A])),m=new Set(e.map(S=>S.name)),h=new Map(e.map(S=>[S.name,[]])),b=new Map(e.map(S=>[S.name,[]]));for(let S of e)for(let A of this.readPropertyValueReferences(S,n)){let G=A.subject.name;G!==S.name&&m.has(G)&&(h.get(S.name).push(G),b.get(G).push(S.name))}let k=new Map,$=new Set,v=S=>{let A=k.get(S);if(A!==void 0)return A;if($.has(S))return 0;$.add(S);let G=0;for(let R of b.get(S)??[])G=Math.max(G,v(R)+1);return $.delete(S),k.set(S,G),G};for(let S of e)v(S.name);let _=Math.min(...k.values());if(_>0)for(let S of[...k.keys()])k.set(S,k.get(S)-_);let K=Math.max(0,...k.values()),O=Array.from({length:K+1},()=>[]);for(let S of e)O[k.get(S.name)].push(S);let U=Math.max(1,...O.map(S=>S.length)),D=!1;for(let[S,A]of h)for(let G of A)k.get(G)<=k.get(S)&&(D=!0);let L=D?84:0,le=U*c+(U-1)*d,C=f*2+(K+1)*c+K*l,B=f*2+L+le,J=new Map;O.forEach((S,A)=>{let G=S.length*c+(S.length-1)*d,R=f+L+(le-G)/2;S.forEach((P,ge)=>J.set(P.name,{x:f+A*(c+l),y:R+ge*(c+d)}))});let ce=t.find(S=>S.to==="thickness"),ue=`kan-arrow-${this.diagramArrowSeq++}`,E=[],Q=[];for(let[S,A]of h){let G=J.get(S);for(let R of A){let P=J.get(R),ge=P.x>=G.x,de=ce?1.5+ce.norm[p.get(S)]*4.5:2,ke,re,te;if(ge){let oe=G.x+c,Te=G.y+c/2,Le=P.x-_e,Ge=P.y+c/2,Ae=(oe+Le)/2;ke=`M${oe.toFixed(1)},${Te.toFixed(1)} C${Ae.toFixed(1)},${Te.toFixed(1)} ${Ae.toFixed(1)},${Ge.toFixed(1)} ${Le.toFixed(1)},${Ge.toFixed(1)}`,re=(oe+Le)/2,te=(Te+Ge)/2-5}else{let oe=G.x+c/2,Te=G.y,Le=P.x+c/2,Ge=P.y-_e,Ae=f+L*.2;ke=`M${oe.toFixed(1)},${Te.toFixed(1)} C${oe.toFixed(1)},${Ae.toFixed(1)} ${Le.toFixed(1)},${Ae.toFixed(1)} ${Le.toFixed(1)},${Ge.toFixed(1)}`,re=(oe+Le)/2,te=Ae+4}let Ee=ge?"":' stroke-dasharray="6 4"';E.push(`<path d="${ke}" class="kan-diagram-edge" fill="none" stroke="var(--kan-accent)" stroke-width="${de.toFixed(1)}" stroke-opacity="0.75"${Ee} marker-end="url(#${ue})"/>`);let Se=await this.edgeText(o,e[p.get(S)],i);Se&&Q.push(this.edgeLabelEl(re,te,Se))}}let F=e.map(S=>{let A=J.get(S.name);return this.diagramTile(S,A.x,A.y,c,a)}).join("");return`<figure class="kan-diagram-figure"><svg class="kan-diagram-svg" viewBox="0 0 ${C.toFixed(0)} ${B.toFixed(0)}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">${this.arrowMarkerDef(ue,"var(--kan-accent)")}${E.join("")}${Q.join("")}${F}</svg></figure>`}diagramTile(e,n,t,a,s,o=1){let i=this.hrefForSubject(e,s),c=this.svgUrlForSubject(e,s),l=N(this.catalog,e).label,d=o<1?` opacity="${o.toFixed(2)}"`:"";return`<a href="${g(i)}"><image href="${g(c)}" x="${n}" y="${t}" width="${a}" height="${a}"${d}><title>${g(l)}</title></image></a>`}async renderStatRow(e,n){let t=z(e,Ur),a=this.gatherValueItems(t).filter(o=>o instanceof V);if(a.length===0)return"<!-- LookRenderer.StatRow: no look.stats -->";let s=[];for(let o of a){let i=this.readEmbeddedCarrier(o,Cr);if(!i)continue;let c=await this.evaluateCarrier(i,n);if(c===void 0)continue;let l=ee(o,Ir)??"";s.push('<div class="kan-stat">'+(l?`<span class="kan-stat-label">${g(l)}</span>`:"")+`<span class="kan-stat-val">${g(c)}</span></div>`)}return s.length===0?"":`<div class="kan-stat-row">${s.join("")}</div>`}barMarkup(e){let n=Number(e);if(!Number.isFinite(n))return g(e);let t=Math.max(0,Math.min(1,n))*100;return`<span class="kan-bar-meter" role="img" aria-label="${g(e)}"><span class="kan-bar-fill" style="width:${t.toFixed(1)}%"></span></span><span class="kan-bar-value">${g(e)}</span>`}async renderBarMeter(e,n){let t=this.readEmbeddedCarrier(e,Qe);if(!t)return"<!-- LookRenderer.BarMeter: no look.metricPath -->";let a=await this.evaluateCarrier(t,n);return a===void 0?"":`<div class="kan-bar-row">${this.barMarkup(a)}</div>`}renderResourceCount(e,n){let t=z(e,Rr),a=this.gatherValueItems(t).filter(i=>i instanceof V);if(a.length===0)return"<!-- LookRenderer.ResourceCount: no look.counts -->";let s=this.readTransitive(e),o=[];for(let i of a){let c=T(i,se);if(!c)continue;let l=Z(this.catalog,c);if(!l)continue;let d=N(this.catalog,l).label,f=this.findInstancesOfClass(c,s).length,p=this.hrefForSubject(l,n);o.push(`<a class="kan-count" href="${g(p)}"><span class="kan-count-val">${f}</span><span class="kan-count-label">${g(d)}</span></a>`)}return o.length===0?"":`<div class="kan-count-row">${o.join("")}</div>`}renderHorizon(e,n,t){let a=T(e,se);if(!a)return"<!-- LookRenderer.Horizon: no look.source -->";let s=this.gatherValueItems(z(n,a)).filter(i=>i instanceof V);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 p of e.statement){let m=p.predicate?.subject;if(!m||M(m,Ce))continue;let h=this.readLabelForUri({publisher:m.publisher,package_:m.package_,name:m.name})??m.name;if(p instanceof W||p instanceof ie||p instanceof ae)o.push(`<div class="kan-cond-field"><span class="kan-cond-key">${g(h)}</span><span class="kan-cond-v">${g(String(p.object))}</span></div>`);else if(p instanceof x&&p.object instanceof j){let b=p.object.subject,k=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">${g(h)}</span><span class="kan-cond-v">${g(k)}</span></div>`)}else if(p instanceof H)i.push(this.renderConditionNode(p.object,n,t+1));else if(p instanceof I)for(let b of p.object??[])b instanceof V&&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">${g(s)}</span>`:`<div class="kan-cond-type">${g(s)}</div>`;return`<div class="kan-cond ${d?"kan-cond-branch":"kan-cond-leaf"}">${f}${c}${l}</div>`}renderSectionHeading(e){let n=e,t=ee(n,mt);if(!t)return"<!-- LookRenderer.SectionHeading: no look.heading -->";let a=ee(n,$r);return`<div class="kan-section" id="${Ot(t)}"><h2 class="kan-section-title">${g(t)}</h2>`+(a?`<p class="kan-section-note">${g(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="#${g(t.slug)}">${g(t.label)}</a>`).join("")}</nav>`}async renderVersionDelta(e,n){let t=this.readEmbeddedCarrier(e,Qe);if(!t)return"<!-- LookRenderer.VersionDelta: no look.metricPath -->";let a=async C=>{let B=await this.evaluateCarrierNum(t,C);return Number.isFinite(B)?B:void 0},s=await a(n);if(s===void 0)return"";let o=C=>this.uriOf(C).version??{major:0,minor:0,patch:0},i=(C,B)=>C.major-B.major||C.minor-B.minor||C.patch-B.patch,c={publisher:ne(n),package_:this.uriOf(n).package_,name:n.name},l=o(n),d,f;for(let C of he(this.catalog,c)){let B=o(C);i(B,l)<0&&(!f||i(B,f)>0)&&(d=C,f=B)}if(!d||!f)return'<div class="kan-delta kan-delta-first">First tracked in this version</div>';let p=await a(d);if(p===void 0)return"";let m=s-p,h=Math.abs(m)<.005?"flat":m>0?"up":"down",b=h==="up"?"\u25B2":h==="down"?"\u25BC":"\u2014",k=h==="up"?"#34d399":h==="down"?"#f87171":"var(--kan-text-faint)",$=`${f.major}.${f.minor}.${f.patch}`,v=320,_=46,K=14,O=30,U=C=>K+Math.min(1,Math.max(0,C))*(v-2*K),D=U(p),L=U(s),le=`<svg class="kan-delta-track" viewBox="0 0 ${v} ${_}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img"><line x1="${K}" y1="${O}" x2="${v-K}" y2="${O}" class="kan-delta-base"/><line x1="${D.toFixed(1)}" y1="${O}" x2="${L.toFixed(1)}" y2="${O}" stroke="${k}" stroke-width="3"/><circle cx="${D.toFixed(1)}" cy="${O}" r="4" class="kan-delta-prev"/><circle cx="${L.toFixed(1)}" cy="${O}" r="5.5" fill="${k}"/><text x="${D.toFixed(1)}" y="${O-9}" text-anchor="middle" class="kan-delta-tick kan-delta-tick-prev">${p.toFixed(2)}</text><text x="${L.toFixed(1)}" y="${O+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 ${g($)}</span><span class="kan-delta-badge ${h}">${m>0?"+":""}${m.toFixed(2)} ${b}</span></div>`+le+"</div>"}async renderTimePlot(e,n,t){let a=T(e,se),s=T(e,on);if(!a||!s)return"<!-- LookRenderer.TimePlot: needs look.source + look.orderBy -->";let o=this.readEmbeddedCarrier(e,Or),i=this.readEmbeddedCarrier(e,ht),c=[];for(let E of this.readPropertyValueReferences(n,a)){let Q=Z(this.catalog,{publisher:E.subject.publisher,package_:E.subject.package_,name:E.subject.name,...E.subject.version?{version:E.subject.version}:{}});if(!Q)continue;let F=this.readPropertyValueText(Q,s)??"",S=Date.parse(F);if(!Number.isFinite(S))continue;let A=o?await this.evaluateCarrier(o,Q)??"":"",G=(i?await this.evaluateCarrier(i,Q):void 0)??N(this.catalog,Q).label;c.push({t:S,dateStr:F,lane:A,label:G,href:this.hrefForSubject(Q,t),linkable:this.isLinkable(ne(Q),t)})}if(c.length===0)return"<!-- LookRenderer.TimePlot: no dated points -->";let l=[];for(let E of c)l.includes(E.lane)||l.push(E.lane);let d=Math.min(...c.map(E=>E.t)),f=Math.max(...c.map(E=>E.t));f===d&&(f=d+1);let p=l.some(E=>E),m=720,h=p?96:16,b=18,k=12,$=24,v=36,_=k+l.length*v+$,K=h,O=m-b,U=O-K,D=E=>K+(E-d)/(f-d)*U,L=E=>k+E*v+v/2,le=E=>Math.round(E*360/Math.max(1,l.length)),C=[];l.forEach((E,Q)=>{let F=L(Q);C.push(`<line x1="${K}" y1="${F.toFixed(1)}" x2="${O}" y2="${F.toFixed(1)}" class="kan-plot-guide"/>`),E&&C.push(`<text x="${(h-8).toFixed(1)}" y="${(F+4).toFixed(1)}" text-anchor="end" class="kan-plot-lane">${Re(E)}</text>`)});let B={},J=[];for(let E of c){let Q=l.indexOf(E.lane),S=((B[E.lane]=(B[E.lane]??0)+1)%3-1)*7,A=D(E.t),G=L(Q)+S,R=`${dn(E.dateStr)} \xB7 ${E.label}`,P=`<circle cx="${A.toFixed(1)}" cy="${G.toFixed(1)}" r="5" fill="hsl(${le(Q)},65%,60%)" class="kan-plot-pt"><title>${Re(R)}</title></circle>`;J.push(E.linkable?`<a href="${g(E.href)}" class="kan-plot-link">${P}</a>`:P)}let ce=`<text x="${K}" y="${(_-6).toFixed(1)}" text-anchor="start" class="kan-plot-axis">${Re(dn(new Date(d).toISOString()))}</text><text x="${O}" y="${(_-6).toFixed(1)}" text-anchor="end" class="kan-plot-axis">${Re(dn(new Date(f).toISOString()))}</text>`;return`<section class="kan-plot">${`<svg class="kan-plot-svg" viewBox="0 0 ${m} ${_}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">`+C.join("")+J.join("")+ce+"</svg>"}</section>`}renderDetails(e,n,t){let a=Cn(e,Er),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=>M(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">${g(i)}</dt><dd class="kan-details-val">${c}</dd>`)}return a.join("")}detailValue(e,n,t){if(e instanceof W)return Ct(e.object);if(e instanceof ie||e instanceof ae)return g(String(e.object));if(e instanceof x&&e.object instanceof j)return this.detailReferenceLink(e.object,n);if(e instanceof H)return this.detailEmbedded(e.object,n,t);if(e instanceof I){let a=e.object??[];return a.length>0&&a.every(s=>s instanceof V)?a.map(s=>this.detailEmbedded(s,n,t)).join(""):a.map(s=>s instanceof j?this.detailReferenceLink(s,n):s instanceof V?this.detailEmbedded(s,n,t):g(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">${g(t)}</span>`;let a=this.urlForReference(e,void 0,n);return`<img class="kan-md-chip" src="${g(`${a}.svg`)}" alt="" loading="lazy"><a class="kan-link" href="${g(a)}">${g(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">${g(s)}</span>`:"")+(o?`<dl class="kan-details">${o}</dl>`:"")+"</div>"}rangeTypeRefs(e){let n=Z(this.catalog,e);if(!n)return[];let t=z(n,ua);return t instanceof x&&t.object instanceof j?[t.object]:[]}async renderEmbeddedViews(e,n,t,a=""){let s=T(e,se);if(!s)return"<!-- LookRenderer: EmbeddedViews missing look.source -->";let o=this.gatherValueItems(z(n,s)).filter(m=>m instanceof V);if(o.length===0)return"";let i=a?`${a}.${s.name}`:s.name,c=z(e,as),l=c instanceof ae?c.object===!0:c instanceof W&&c.object==="true",d=[],f=[];for(let m of o){let h=m,b=m.name?`${i}.${m.name}`:"";if(l&&b){let U=N(this.catalog,h).label||m.name||b;d.push(`<a class="kan-section-nav-link" href="#${g(b)}">${g(U)}</a>`)}let k=me(h),$=k.length>0?k:this.rangeTypeRefs(s),v=cn(h)?this.findCascadedLook(h):this.lookFromTypeRefs($),_="";if(v){let U=[];for(let D of Un(v.declaration))U.push(await this.renderBand(D,h,t,[],b));_=U.join(`
125
- `)}else{let U=this.detailRows(m,t,[]);_=U?`<dl class="kan-details">${U}</dl>`:""}let K=b?` id="${g(b)}"`:"",O=b?this.anchorLink(b):"";f.push(`<section class="kan-embedded-view"${K}>${O}${_}</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="#${g(e)}" title="${g(e)}" aria-label="Link to this resource">#</a>`}isMetaPredicate(e){return M(e,Ce)||M(e,jn)||M(e,pt)||M(e,fn)||M(e,pn)||M(e,Lr)||M(e,wt)||M(e,mr)}renderPackageContents(e,n){let t=e.namespace||"";if(!t)return"";let a=this.catalog.filter(o=>o instanceof q&&o.namespace===t&&o.name!==e.name);return a.length===0?`<!-- LookRenderer.PackageContents: no members in ${t} -->`:(a.sort((o,i)=>{let c=N(this.catalog,o).label,l=N(this.catalog,i).label;return c.localeCompare(l)}),`<section class="kan-pkg-grid">${a.map(o=>{let i=N(this.catalog,o),c=i.label,l=i.summary,d=l?In(l,160):"",f=this.hrefForSubject(o,n),p=this.svgUrlForSubject(o,n);return`<a class="kan-pkg-card" href="${g(f)}"><img class="kan-pkg-card-svg" src="${g(p)}" alt="" loading="lazy"/><span class="kan-pkg-card-body"><span class="kan-pkg-card-title">${g(c)}</span>`+(d?`<span class="kan-pkg-card-comment">${g(d)}</span>`:"")+"</span></a>"}).join("")}</section>`)}renderReferencedBy(e,n,t){let a=T(e,Qr),s={publisher:ne(n),package_:this.uriOf(n).package_,name:n.name},o=Y(s),i=p=>this.uriOf(p).version??{major:0,minor:0,patch:0},c=(p,m)=>p.major-m.major||p.minor-m.minor||p.patch-m.patch,l=new Map;for(let p of this.catalog){if(!(p instanceof q))continue;let m=Y({publisher:ne(p),package_:this.uriOf(p).package_,name:p.name});if(m!==o)for(let h of p.statement){let b=h.predicate?.subject;if(!b||M(b,Ce)||a&&Y(b)!==Y(a))continue;let k=[];if(h instanceof x&&h.object instanceof j)k.push(h.object);else if(h instanceof I)for(let K of h.object??[])K instanceof j&&k.push(K);if(!k.some(K=>Y(K.subject)===o))continue;let $=Y(b),v=l.get($);v||(v={label:this.readLabelForUri(b)??b.name,best:new Map},l.set($,v));let _=v.best.get(m);(!_||c(i(p),i(_))>0)&&v.best.set(m,p)}}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((p,m)=>p.label.localeCompare(m.label)).map(p=>{let h=[...p.best.values()].sort((b,k)=>N(this.catalog,b).label.localeCompare(N(this.catalog,k).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> ${g(p.label)}</h3><section class="kan-pkg-grid">${h}</section></div>`}).join("")}`}resourceCard(e,n,t){let a=N(this.catalog,e),s=a.summary?In(a.summary,160):"",o=me(e).map($=>this.readLabelForUri({publisher:$.subject.publisher,package_:$.subject.package_,name:$.subject.name})??$.subject.name),c='<span class="kan-pkg-card-body">'+(o.length>0?`<span class="kan-card-types">${o.map($=>`<span class="kan-card-type">${g($)}</span>`).join("")}</span>`:"")+`<span class="kan-pkg-card-title">${g(a.label)}</span>`+(s?`<span class="kan-pkg-card-comment">${g(s)}</span>`:"")+"</span>",l=this.isLinkable(ne(e),n),d=l?`<a class="kan-pkg-card-link" href="${g(this.hrefForSubject(e,n))}"><img class="kan-pkg-card-svg" src="${g(this.svgUrlForSubject(e,n))}" alt="" loading="lazy"/>`+c+"</a>":`<span class="kan-pkg-card-link">${c}</span>`,f=e.namespace||"",p=this.uriOf(e),m=p.publisher,h=p.package_,b=p.version?nn(p.version):"",k="";if(h&&f!==t){let $=b?`<span class="kan-card-at">@</span><span class="kan-card-ver">${g(b)}</span>`:"";if(l){let v=`<span class="kan-card-pkg">${g(h)}</span>${$}`;k=`<a class="kan-pkg-card-foot" href="${g(this.packageHref(m,h,b||void 0))}" title="${g(b?`${h}@${b}`:h)}">${v}</a>`}else{let v=`<span class="kan-card-pub">${g(m)}/</span><span class="kan-card-pkg">${g(h)}</span>${$}`;k=`<span class="kan-pkg-card-foot" title="${g(b?`${m}/${h}@${b}`:`${m}/${h}`)}">${v}</span>`}}return`<div class="kan-pkg-card kan-pkg-card--foot">${d}${k}</div>`}renderInstances(e,n,t){let a={publisher:ne(n),package_:this.uriOf(n).package_,name:n.name},s=this.readTransitive(e),o=s?this.descendantTypeKeys(a):new Set([Y(a)]),i=k=>this.uriOf(k).version??{major:0,minor:0,patch:0},c=(k,$)=>k.major-$.major||k.minor-$.minor||k.patch-$.patch,l=new Map;for(let k of this.catalog){if(!(k instanceof q)||!me(k).some(K=>o.has(Y(K.subject))))continue;let v=Y({publisher:ne(k),package_:this.uriOf(k).package_,name:k.name}),_=l.get(v);(!_||c(i(k),i(_))>0)&&l.set(v,k)}let d=[...l.values()];if(d.length===0)return"<!-- LookRenderer.Instances: none -->";d.sort((k,$)=>N(this.catalog,k).label.localeCompare(N(this.catalog,$).label));let f=48,p=d.slice(0,f),m=p.map(k=>this.resourceCard(k,t,n.namespace??void 0)),h=d.length>f?` <span class="kan-count">${p.length} of ${d.length}</span>`:` <span class="kan-count">${d.length}</span>`;return`<div class="kan-section"><h2 class="kan-section-title">${s?"Instances (including subtypes)":"Instances"}${h}</h2></div><section class="kan-pkg-grid">${m.join("")}</section>`}descendantTypeKeys(e){let n=Y(e),t=new Set([n]),a=new Set;for(let s of this.catalog)if(s instanceof q)for(let o of me(s)){let i=o.subject,c=Y(i);a.has(c)||(a.add(c),Dn(this.catalog,i).some(l=>Y(l)===n)&&t.add(c))}return t}referencesTarget(e,n,t){for(let a of e.statement){let s=a.predicate?.subject;if(s&&M(s,Ce)||t&&!(s&&Y(s)===Y(t)))continue;let o=[];if(a instanceof x&&a.object instanceof j)o.push(a.object);else if(a instanceof I)for(let i of a.object??[])i instanceof j&&o.push(i);for(let i of o)if(Y(i.subject)===n)return!0}return!1}async renderFeaturedResource(e,n){let t=T(e,se);if(!t)return"<!-- LookRenderer.FeaturedResource: no look.source -->";let a=he(this.catalog,t),s=l=>this.uriOf(l).version??{major:0,minor:0,patch:0},o=a.length>0?a.slice().sort((l,d)=>{let f=s(l),p=s(d);return p.major-f.major||p.minor-f.minor||p.patch-f.patch})[0]:Z(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="${g(c)}">View full resource \u2192</a>`+i+"</section>"}async renderDistribution(e,n){let t=async F=>{let S=this.readEmbeddedCarrier(e,F);if(!S)return;let A=await this.evaluateCarrierNum(S,n);return Number.isFinite(A)?A:void 0},a=await t(br),s=await t(vr);if(a===void 0||s===void 0||a<=0||s<=0)return"<!-- LookRenderer.Distribution: needs resolvable alphaPath + betaPath (> 0) -->";let o=await t(Qe)??a/(a+s),i=await t($t),c=await t(St),l=await t(Ln),d=l!==void 0?`hsl(${l},65%,60%)`:"var(--kan-accent)",f=F=>Number.isInteger(F)?String(F):F.toFixed(1),p=280,m=168,h={top:14,right:14,bottom:24,left:14},b=p-h.left-h.right,k=m-h.top-h.bottom,$=120,v=1e-4,_=[],K=[],O=0;for(let F=0;F<=$;F++){let S=F/$;S<v?S=v:S>1-v&&(S=1-v);let A=Math.exp((a-1)*Math.log(S)+(s-1)*Math.log(1-S));_.push(S),K.push(A),A>O&&(O=A)}let U=F=>h.left+Math.min(1,Math.max(0,F))*b,D=F=>h.top+(1-(O>0?F/O:0))*k,L=h.top+k,le=_.map((F,S)=>`${U(F).toFixed(1)},${D(K[S]).toFixed(1)}`),C=`M${U(0).toFixed(1)},${L.toFixed(1)} L${le.join(" L")} L${U(1).toFixed(1)},${L.toFixed(1)} Z`,B="";if(i!==void 0&&c!==void 0&&c>i){let F=[`${U(i).toFixed(1)},${L.toFixed(1)}`];for(let S=0;S<=$;S++)_[S]>=i&&_[S]<=c&&F.push(`${U(_[S]).toFixed(1)},${D(K[S]).toFixed(1)}`);F.push(`${U(c).toFixed(1)},${L.toFixed(1)}`),B=`<path d="M${F.join(" L")} Z" fill="${d}" fill-opacity="0.3"/>`}let J=U(o),ce=`<line x1="${J.toFixed(1)}" y1="${h.top.toFixed(1)}" x2="${J.toFixed(1)}" y2="${L.toFixed(1)}" stroke="${d}" stroke-width="1.5" stroke-dasharray="3 3"/><text x="${J.toFixed(1)}" y="${(h.top-3).toFixed(1)}" text-anchor="middle" class="kan-dist-mean">\u03BC ${o.toFixed(2)}</text>`,ue=`<text x="${U(0).toFixed(1)}" y="${(L+15).toFixed(1)}" text-anchor="start" class="kan-dist-axis">0</text><text x="${U(1).toFixed(1)}" y="${(L+15).toFixed(1)}" text-anchor="end" class="kan-dist-axis">1</text>`,E=`<svg class="kan-dist-svg" viewBox="0 0 ${p} ${m}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img"><line x1="${h.left}" y1="${L.toFixed(1)}" x2="${(p-h.right).toFixed(1)}" y2="${L.toFixed(1)}" class="kan-dist-base"/><path d="${C}" fill="${d}" fill-opacity="0.12"/>`+B+`<polyline points="${le.join(" ")}" fill="none" stroke="${d}" stroke-width="2"/>`+ce+ue+"</svg>",Q=i!==void 0&&c!==void 0?` \xB7 95% CI [${i.toFixed(2)}\u2013${c.toFixed(2)}]`:"";return`<figure class="kan-dist">${E}<figcaption class="kan-dist-caption">Beta(${f(a)}, ${f(s)})${Q}</figcaption></figure>`}renderPublisherPackages(e,n){let t=new Map;for(let c of this.catalog){if(!(c instanceof q)||ne(c)!==n)continue;let l=this.uriOf(c).package_;if(!l||c.name!==l)continue;let d=t.get(l),f=this.uriOf(c).version,p=d?this.uriOf(d).version:void 0;(!d||f&&(!p||en(f,p)>0))&&t.set(l,c)}let a,s=z(e,cr),o=s instanceof I?s.object??[]:s instanceof x&&s.object instanceof j?[s.object]:[];if(o.length>0){a=[];for(let c of o){if(!(c instanceof j))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=N(this.catalog,l),f=d.label,p=d.summary,m=p?In(p,160):"",h=this.svgUrlForSubject(l,n);return`<a class="kan-pkg-card" href="${g(this.packageHref(n,c))}"><img class="kan-pkg-card-svg" src="${g(h)}" alt="" loading="lazy"/><span class="kan-pkg-card-body"><span class="kan-pkg-card-title">${g(f)}</span>`+(m?`<span class="kan-pkg-card-comment">${g(m)}</span>`:"")+"</span></a>"}).join("")}</section>`}async renderTimeline(e,n){let t=T(e,se);if(!t)return"<!-- LookRenderer.Timeline: no look.source -->";let a=T(e,on),s=this.findInstancesOfClass(t,this.readTransitive(e));if(s.length===0)return"<!-- LookRenderer.Timeline: no instances -->";let o=f=>a?this.readPropertyValueText(f,a)??"":"",i=s.slice().sort((f,p)=>o(f).localeCompare(o(p))),c=T(e,yt),l=this.readEmbeddedCarrier(e,Qe);return c&&l?this.renderTrajectoryChart(i,c,l,e,n,o):`<section class="kan-timeline"><ol>
128
- ${i.map(f=>{let p=this.uriOf(f),m=p.package_,h=p.version,b=this.resourceHref({publisher:ne(f),package_:m,name:f.name,...h?{version:h}:{}},n),k=o(f),$=k?`<span class="kan-timeline-date">${g(k)}</span>`:"",v=h?nn(h):f.name;return`<li class="kan-timeline-node"><a href="${g(b)}"><span class="kan-timeline-key">${g(v)}</span>${$}</a></li>`}).join(`
129
- `)}
130
- </ol></section>`}async renderTrajectoryChart(e,n,t,a,s,o){let i=a,c=this.readEmbeddedCarrier(a,Ln),l=this.readEmbeddedCarrier(a,$t),d=this.readEmbeddedCarrier(a,St),f=ee(i,zr),p=Et(i,Br),m=Et(i,Hr),h=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 k=[];for(let R of b){for(let P of R.points)P!==null&&k.push(P);for(let P of R.lower??[])P!==null&&k.push(P);for(let P of R.upper??[])P!==null&&k.push(P)}if(k.length===0)return"<!-- LookRenderer.Timeline: no metric values -->";let $=Math.min(...k),v=Math.max(...k);v-$<1e-9&&($-=.5,v+=.5);let _=(v-$)*.08,K=p!==void 0?p:$-_,O=m!==void 0?m:v+_;O-K<1e-9&&(O=K+1);let U=1e3,D=440,L={top:28,right:24,bottom:56,left:52},le=U-L.left-L.right,C=D-L.top-L.bottom,B=R=>h<=1?L.left+le/2:L.left+R/(h-1)*le,J=R=>L.top+(1-(R-K)/(O-K))*C,ce=(R,P)=>R.hue!==void 0?R.hue:Math.round(P*360/b.length),ue=[];for(let R=0;R<5;R++){let P=K+R*(O-K)/4,ge=J(P);ue.push(`<line x1="${L.left}" y1="${ge.toFixed(1)}" x2="${(U-L.right).toFixed(1)}" y2="${ge.toFixed(1)}" class="kan-fan-grid"/>`),ue.push(`<text x="${(L.left-8).toFixed(1)}" y="${(ge+4).toFixed(1)}" class="kan-fan-axis" text-anchor="end">${P.toFixed(2)}</text>`)}let E=[];e.forEach((R,P)=>{let ge=this.hrefForSubject(R,s),de=this.uriOf(R).version,ke=de?nn(de):"",re=B(P),te=dn(o(R));E.push(`<a href="${g(ge)}" class="kan-fan-xtick"><line x1="${re.toFixed(1)}" y1="${L.top}" x2="${re.toFixed(1)}" y2="${(D-L.bottom).toFixed(1)}" class="kan-fan-vline"/><text x="${re.toFixed(1)}" y="${(D-L.bottom+20).toFixed(1)}" class="kan-fan-xlabel" text-anchor="middle">${Re(ke||R.name)}</text>`+(te?`<text x="${re.toFixed(1)}" y="${(D-L.bottom+36).toFixed(1)}" class="kan-fan-xdate" text-anchor="middle">${Re(te)}</text>`:"")+"</a>")});let Q=[];b.forEach((R,P)=>{if(!R.lower||!R.upper)return;let ge=ce(R,P),de=[],ke=[];for(let te=0;te<h;te++){let Ee=R.upper[te],Se=R.lower[te];Ee==null||Se===null||Se===void 0||(de.push(`${B(te).toFixed(1)},${J(Ee).toFixed(1)}`),ke.unshift(`${B(te).toFixed(1)},${J(Se).toFixed(1)}`))}let re=de.concat(ke);re.length<3||Q.push(`<polygon class="kan-fan-band" points="${re.join(" ")}" fill="hsl(${ge},65%,60%)"/>`)});let F=[];b.forEach((R,P)=>{let de=`hsl(${ce(R,P)},65%,60%)`,ke=[],re=[];R.points.forEach((te,Ee)=>{if(te===null)return;let Se=B(Ee),oe=J(te);ke.push(`${Se.toFixed(1)},${oe.toFixed(1)}`),re.push(`<circle cx="${Se.toFixed(1)}" cy="${oe.toFixed(1)}" r="3.5" fill="${de}"/>`)}),ke.length!==0&&F.push(`<g class="kan-fan-series" data-series="${g(R.key)}"><polyline points="${ke.join(" ")}" fill="none" stroke="${de}" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/>`+re.join("")+"</g>")});let S=`<svg class="kan-fan-svg" viewBox="0 0 ${U} ${D}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">`+ue.join("")+E.join("")+Q.join("")+F.join("")+"</svg>",A=f?`${g(f)}=`:"",G=b.map((R,P)=>{let ge=ce(R,P),de=R.points.filter(oe=>oe!==null),ke=de.length?de[0]:void 0,re=de.length?de[de.length-1]:void 0,te="";if(re!==void 0&&ke!==void 0){let oe=re-ke;if(Math.abs(oe)>=.005){let Te=oe>0?"up":"down",Le=oe>0?"\u25B2":"\u25BC";te=` <span class="kan-fan-delta ${Te}">${oe>0?"+":""}${oe.toFixed(2)} ${Le}</span>`}else te=' <span class="kan-fan-delta flat">\u2014</span>'}let Ee=re!==void 0?`${A}${re.toFixed(2)}`:"\u2014",Se=R.lastSubject&&this.isLinkable(ne(R.lastSubject),s)?`<a href="${g(this.hrefForSubject(R.lastSubject,s))}">${g(R.label)}</a>`:g(R.label);return`<div class="kan-fan-legend-item" style="--kan-fan-hue:${ge}"><span class="kan-fan-swatch"></span><span class="kan-fan-legend-label">${Se}</span><span class="kan-fan-legend-cur">${Ee}${te}</span></div>`});return`<section class="kan-fan"><div class="kan-fan-chart">${S}</div><div class="kan-fan-legend">${G.join("")}</div></section>`}resolveResourceQuery(e){let n=i=>{let c=T(i,Mr);if(!c)return;let l=T(i,on),d=ee(i,Nr),f=this.readPropertyValueText(i,Dr),p=f!==void 0?Number(f):NaN;return{ofClass:c,...l?{orderBy:l}:{},descending:d==="descending",...Number.isInteger(p)&&p>0?{limit:p}:{}}},t=this.readEmbeddedCarrier(e,se);if(t)return n(t);let a=T(e,se);if(!a)return;let s=Z(this.catalog,a);return(s?me(s).some(i=>M(i.subject,Ar)):!1)&&s?n(s):{ofClass:a,descending:!1}}applyQueryShape(e,n){let t=e;if(n.orderBy){let a=s=>this.readPropertyValueText(s,n.orderBy)??"";t=t.slice().sort((s,o)=>a(s).localeCompare(a(o))),n.descending&&t.reverse()}return n.limit!==void 0&&(t=t.slice(0,n.limit)),t}renderResourceGrid(e,n,t){let a=this.resolveResourceQuery(e),s=T(e,se)??a?.ofClass;if(!s)return"<!-- LookRenderer.ResourceGrid: no look.source -->";let o=Z(this.catalog,s),i=o?Bn(this.catalog,o)!==void 0:!1,c=[];if(i&&t){let d=this.readPropertyValueReferences(t,s);for(let f of d){let p=Z(this.catalog,{publisher:f.subject.publisher,package_:f.subject.package_,name:f.subject.name,...f.subject.version?{version:f.subject.version}:{}});p&&c.push(p)}}else a?c=this.applyQueryShape(this.findInstancesOfClass(a.ofClass,this.readTransitive(e)),a):c=this.findInstancesOfClass(s,this.readTransitive(e));if(c.length===0)return`<!-- LookRenderer.ResourceGrid: no resources for ${s.publisher}/${s.package_}/${s.name} -->`;let l=[];for(let d of c){let f=N(this.catalog,d),p=f.label,m=f.summary,h=this.uriOf(d),b=h.package_,k=h.version,$=this.resourceHref({publisher:ne(d),package_:b,name:d.name,...k?{version:k}:{}},n),v=m?`<p class="kan-resource-card-subtitle">${g(m)}</p>`:"",_=`<h3 class="kan-resource-card-title">${g(p)}</h3>${v}`;l.push(this.isLinkable(ne(d),n)?`<a class="kan-resource-card" href="${g($)}">${_}</a>`:`<span class="kan-resource-card">${_}</span>`)}return`<section class="kan-resource-grid">
131
- ${l.join(`
132
- `)}
133
- </section>`}readTransitive(e){let n=z(e,rs);return n instanceof ae?n.object===!0:n instanceof W&&n.object==="true"}findInstancesOfClass(e,n=!1){let t=n?this.descendantTypeKeys(e):new Set([Y(e)]),a=[];for(let s of this.catalog)s instanceof q&&me(s).some(o=>t.has(Y(o.subject)))&&a.push(s);return a}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="${g(this.publisherHref(o))}">${g(o)}</a></li>
135
- <li aria-current="page">${g(c)}</li>
136
- </ol></nav>`;let d=e.name,p=!!Z(this.catalog,{publisher:o,package_:c,name:c}),m=l?`${c}@${l}`:c,h=this.resourceHref({publisher:o,package_:c,name:c,...l?{version:Tn(l)}:{}},o),b=e.name===c,k=[];return k.push(`<li><a href="${g(this.publisherHref(o))}">${g(o)}</a></li>`),b?k.push(`<li aria-current="page">${g(m)}</li>`):(k.push(p?`<li><a href="${g(h)}">${g(m)}</a></li>`:`<li>${g(m)}</li>`),k.push(`<li aria-current="page">${g(d)}</li>`)),`<nav class="kan-breadcrumb"><ol>
137
- ${k.join(`
138
- `)}
139
- </ol></nav>`}renderNavGroup(e,n){let t=z(this.publisherSubject(n),Sa),a=t instanceof I?t.object??[]:t instanceof x&&t.object instanceof j?[t.object]:[];if(a.length===0)return"";let s=[];for(let o of a){if(!(o instanceof j))continue;let i=Z(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="${g(c)}"${f}>${g(l)}</a></li>`)}return`<nav class="kan-site-nav"><ul>
140
- ${s.join(`
141
- `)}
142
- </ul></nav>`}renderSiteFooter(e){let n=z(this.publisherSubject(e),wa),t;if(n instanceof H?t=n.object:n instanceof x&&n.object instanceof j&&(t=Z(this.catalog,{publisher:n.object.subject.publisher,package_:n.object.subject.package_,name:n.object.subject.name})),!t)return"";let a=ee(t,_a),s=z(t,ja),o=s instanceof I?s.object??[]:s instanceof x&&s.object instanceof j?[s.object]:[],i=[];for(let l of o){if(!(l instanceof j))continue;let d=Z(this.catalog,{publisher:l.subject.publisher,package_:l.subject.package_,name:l.subject.name}),{href:f,label:p}=this.resolveNavEntry(l,d,e);i.push(`<a class="kan-footer-link" href="${g(f)}">${g(p)}</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">${g(a)}</p>`),`<footer class="kan-site-footer">${c.join(`
143
- `)}</footer>`}resolveNavEntry(e,n,t){if(n&&me(n).map(c=>c.subject).some(c=>c.publisher===Kn.publisher&&c.package_===Kn.package_&&c.name===Kn.name)){let c=ee(n,jn),l=z(n,kt);if(l instanceof x&&l.object instanceof j){let d=l.object,f=this.readLabelForUri({publisher:d.subject.publisher,package_:d.subject.package_,name:d.subject.name});return{href:this.urlForReference(d,kt,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?N(this.catalog,n).label:e.subject.name;return{href:a,label:s}}codeHighlighter(){return this._codeHighlighter||(this._codeHighlighter=new sn(this.collectGrammars())),this._codeHighlighter}collectGrammars(){let e=[];for(let n of this.catalog){if(!(n instanceof q)||!me(n).some(i=>M(i.subject,lr)))continue;let t=ee(n,ur);if(!t)continue;let a=z(n,dr),s=a instanceof I?a.object??[]:[],o=[];for(let i of s){if(!(i instanceof V))continue;let c=T(i,fr),l=ee(i,pr);!c||!l||o.push({tokenClass:c.name,pattern:l})}e.push({language:t,rules:o})}return e}renderLinks(e,n){let t=T(e,se);if(!t)return"";let a=z(n,t),s=[];a instanceof I?s=a.object??[]:a instanceof H?s=[a.object]:a instanceof x&&a.object instanceof j&&(s=[a.object]);let o=[];for(let i of s){let c;if(i instanceof V?c=i:i instanceof j&&(c=Z(this.catalog,{publisher:i.subject.publisher,package_:i.subject.package_,name:i.subject.name})),!c)continue;let l=ee(c,kr);if(!l)continue;let d=ee(c,jn)??l,f=ee(c,pt),p=f?` title="${g(f)}"`:"";o.push(`<a class="kan-extlink" href="${g(l)}"${p} target="_blank" rel="noopener noreferrer">${g(d)}</a>`)}return o.length===0?"":`<section class="kan-extlink-row">${o.join("")}</section>`}renderMarkdown(e,n,t){let a=T(e,se);if(!a)return"<!-- LookRenderer.Markdown: no look.source -->";let s=z(n,a),o=new Map,i;if(s instanceof Fe?i=this.resolveMarkdownLinks(s,t,o):s instanceof W?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 p=new RegExp('(<a href="'+Ut(d)+'">)([^<]*)(</a>)',"g");l=l.replace(p,`$1<img class="kan-md-chip" src="${g(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=Un(n.declaration),a=[];for(let s of t){let o=ze(s);if(!o||!M(o,gt))continue;let i=T(s,se);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 k=z(e,b);return k instanceof ae?k.object===!0:k instanceof W&&k.object==="true"},s=a(ts),o=!s&&a(ns),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),k=s?"kan-hero-avatar":"kan-hero-icon";l.push(`<img class="${k}" src="${g(b)}" alt="" loading="lazy"/>`),l.push('<div class="kan-hero-text">')}let d=T(e,Jr);if(d){let b=this.readPropertyValueText(n,d);b&&l.push(`<span class="kan-hero-eyebrow">${g(gn(b)??b)}</span>`)}let f=T(e,Xr),p="";f&&(p=this.readPropertyValueText(n,f)??""),p||(p=N(this.catalog,n).label),l.push(`<h1 class="kan-hero-title">${g(gn(p)??p)}</h1>`);let m=T(e,Zr);if(m){let b=this.readPropertyValueText(n,m);b&&l.push(`<p class="kan-hero-subtitle">${g(gn(b)??b)}</p>`)}let h=T(e,Kt);if(h){let b=this.readPropertyValueReferences(n,h);if(b.length>0){let k=b.map($=>this.renderBadge($,Kt,t)).join("");l.push(`<div class="kan-hero-badges">${k}</div>`)}}return i&&l.push("</div>"),l.push("</header>"),l.join(`
148
- `)}renderPropertyList(e,n,t){let a=T(e,se);if(!a)return"<!-- LookRenderer: PropertyList missing look.source -->";let s=this.readLabelForUri(a)??a.name,o=z(n,a),i=this.gatherValueItems(o),c=i.length>0?i.map(l=>`<li>${this.renderInlineValue(l,se,t)}</li>`).join(""):'<li class="kan-empty">(no values)</li>';return['<section class="kan-property-list">',`<h3 class="kan-property-list-title">${g(s)}</h3>`,`<ul class="kan-property-list-items">${c}</ul>`,"</section>"].join(`
149
- `)}renderPropertyTable(e,n,t,a=""){let s=T(e,se);if(!s)return"<!-- LookRenderer: PropertyTable missing look.source -->";let o=this.gatherValueItems(z(n,s)).filter(d=>d instanceof V);if(o.length===0)return"";let i=this.readLabelForUri(s)??s.name,c=a?`${a}.${s.name}`:s.name,l=T(e,Fr);return this.renderEmbeddedTable(o,t,i,c,l)}renderEmbeddedTable(e,n,t,a,s){let o=[],i=new Set;for(let k of e)for(let $ of k.statement){let v=$.predicate?.subject;if(!v||this.isMetaPredicate(v))continue;let _=`${v.publisher}/${v.package_}/${v.name}`;i.has(_)||(i.add(_),o.push({uri:{publisher:v.publisher,package_:v.package_,name:v.name},label:this.readLabelForUri(v)??v.name}))}if(o.length===0)return"";let c=e.map(k=>N(this.catalog,k).label),l=e.some((k,$)=>c[$]!==""&&c[$]!==k.name),d=!!a,f=(d?'<th class="kan-anchor-col"></th>':"")+(l?"<th></th>":"")+o.map(k=>`<th>${g(k.label)}</th>`).join(""),p=e.map((k,$)=>{let v=d&&k.name?`${a}.${k.name}`:"",_=v?` id="${g(v)}"`:"",K=d?`<td class="kan-anchor-col">${v?this.anchorLink(v):""}</td>`:"",O=l?`<th scope="row">${g(c[$]??"")}</th>`:"",U=o.map(D=>{let L=z(k,D.uri);return L?`<td>${this.tableCellValue(L,n,s)}</td>`:"<td></td>"}).join("");return`<tr${_}>${K}${O}${U}</tr>`}).join(""),m=d&&a?` id="${g(a)}"`:"",h=d&&a?this.anchorLink(a):"",b=t?`<caption>${g(t)}${h}</caption>`:"";return`<table class="kan-property-table"${m}>${b}<thead><tr>${f}</tr></thead><tbody>${p}</tbody></table>`}tableCellValue(e,n,t){if(t&&M(t,bt)){if(e instanceof ie)return this.barMarkup(String(e.object));if(e instanceof W&&Number.isFinite(Number(e.object)))return this.barMarkup(e.object)}if(e instanceof Fe)return this.statementToMarkdownHtml(e,n);if(e instanceof W)return Ct(e.object);if(e instanceof ie||e instanceof ae)return g(String(e.object));if(e instanceof x&&e.object instanceof j)return this.detailReferenceLink(e.object,n);if(e instanceof H)return this.renderEmbeddedTable([e.object],n);if(e instanceof I){let a=e.object??[],s=a.filter(o=>o instanceof V);return s.length>0&&s.length===a.length?this.renderEmbeddedTable(s,n):a.map(o=>o instanceof j?this.detailReferenceLink(o,n):o instanceof V?this.renderEmbeddedTable([o],n):g(String(o))).filter(o=>o).join(", ")}return""}statementToMarkdownHtml(e,n){let t=new Map,a;if(e instanceof Fe?a=this.resolveMarkdownLinks(e,n,t):e instanceof W&&(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="'+Ut(i)+'">)([^<]*)(</a>)',"g");o=o.replace(l,`$1<img class="kan-md-chip" src="${g(c)}" alt="" loading="lazy">$2$3`)}return o}renderBadgeRow(e,n,t){let a=T(e,se);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,se,t)).join("")}</div>`}renderChipRow(e,n,t){let a=Cn(e,ss);if(a.length===0)return"<!-- LookRenderer: ChipRow has no look.chips -->";let s=[];for(let o of a){let i=z(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">${g(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=Cn(e,Rt);if(a.length===0)return"<!-- LookRenderer: ReferenceList has no look.entries -->";let s=this.readEmbeddedCarrier(e,ht),o=this.readEmbeddedCarrier(e,Tr),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 p=f.filter(m=>m).join("");p&&i.push(`<dt>${g(d)}</dt><dd><ul class="kan-ref-rows">${p}</ul></dd>`)}else{let f=l.map(p=>this.renderReferenceLink(p,Rt,t)).join(", ");i.push(`<dt>${g(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=Z(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)??N(this.catalog,s).label,i="";if(t){let f=await this.evaluateCarrier(t,s);f&&(i=`<span class="kan-ref-badge">${g(f)}</span>`)}let c=`<span class="kan-ref-text">${g(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="${g(l)}"><img class="kan-ref-icon" src="${g(d)}" alt="" loading="lazy"/>`+c+"</a></li>"}readPropertyValueText(e,n){let t=z(e,n);if(t){if(t instanceof W)return t.object;if(t instanceof ie||t instanceof ae)return String(t.object);if(t instanceof x){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 I)return(t.object??[]).map(s=>s instanceof j?this.readLabelForUri({publisher:s.subject.publisher,package_:s.subject.package_,name:s.subject.name})??s.subject.name:s instanceof V?this.readEmbeddedText(s,0):String(s)).filter(s=>s).join(", ")}}readEmbeddedText(e,n){if(n>=jt)return"\u2026";let t=[];for(let a of e.statement){let s=a.predicate?.subject;if(!(s&&M(s,Ce)))if(a instanceof W)t.push(a.object);else if(a instanceof ie||a instanceof ae)t.push(String(a.object));else if(a instanceof x){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=z(e,n);if(!t)return[];if(t instanceof x)return[t.object];if(t instanceof I){let a=[];for(let s of t.object??[])s instanceof j&&a.push(s);return a}return[]}gatherValueItems(e){return e?e instanceof I?e.object??[]:e instanceof x?[e.object]:e instanceof H?[e.object]:e instanceof W?[e.object]:e instanceof ie||e instanceof ae?[e.object]:[]:[]}renderInlineValue(e,n,t,a=0){return e instanceof j?this.renderReferenceLink(e,n,t):e instanceof V?this.renderEmbeddedInline(e,t,a):typeof e=="string"?g(e):typeof e=="number"||typeof e=="boolean"?g(String(e)):""}renderStatementInlineValue(e,n,t,a=0){return e instanceof W?g(e.object):e instanceof ie||e instanceof ae?g(String(e.object)):e instanceof x?this.renderReferenceLink(e.object,n,t):e instanceof H?this.renderEmbeddedInline(e.object,t,a):e instanceof I?(e.object??[]).map(o=>this.renderInlineValue(o,n,t,a)).filter(o=>o).join(", "):""}renderEmbeddedInline(e,n,t=0){if(t>=jt)return"\u2026";let a=[];for(let s of e.statement){let o=s.predicate?.subject;if(!o||M(o,Ce))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>${g(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">${g(a)}</span>`;let s=this.urlForReference(e,n,t);return`<a class="kan-link" href="${g(s)}">${g(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="${g(s)}"`:"";if(!this.isLinkable(e.subject.publisher,t))return`<span class="kan-badge"${o}>${g(a)}</span>`;let i=this.urlForReference(e,n,t);return`<a class="kan-badge" href="${g(i)}"${o}>${g(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=Z(this.catalog,e);if(!n)return"=";let t=ee(n,os);return t==="*"||t==="^"||t==="~"||t==="="?t:"="}readLabelForUri(e){let n=Z(this.catalog,e);if(n)return N(this.catalog,n).label}readCommentForUri(e){let n=Z(this.catalog,e);if(n)return N(this.catalog,n).summary}};function is(r){let e=new Map;for(let n of r.statement){if(!(n instanceof H)||!$e(n,pn.publisher,pn.package_,pn.name))continue;let t=n.object;for(let a of t.statement){if(!(a instanceof W))continue;let s=a.predicate?.subject?.name;if(!s)continue;let o=a.object;e.has(s)||e.set(s,o)}}return e}function cn(r){for(let e of r.statement)if(e instanceof H&&$e(e,fn.publisher,fn.package_,fn.name))return e.object}function Un(r){for(let e of r.statement){if(!(e instanceof I)||!$e(e,On.publisher,On.package_,On.name))continue;let n=[];for(let t of e.object??[])t instanceof V&&n.push(t);return n}return[]}function ze(r){for(let e of r.statement)if(e instanceof x&&!(!e.predicate?.subject||!M(e.predicate.subject,Ce))&&e.object instanceof j){let n=e.object.subject;return{publisher:n.publisher,package_:n.package_,name:n.name}}}function T(r,e){for(let n of r.statement)if(n instanceof x&&$e(n,e.publisher,e.package_,e.name)&&n.object instanceof j){let t=n.object.subject;return{publisher:t.publisher,package_:t.package_,name:t.name}}}function Cn(r,e){for(let n of r.statement){if(!(n instanceof I)||!$e(n,e.publisher,e.package_,e.name))continue;let t=[];for(let a of n.object??[])a instanceof j&&t.push({publisher:a.subject.publisher,package_:a.subject.package_,name:a.subject.name});return t}return[]}function z(r,e){for(let n of r.statement)if($e(n,e.publisher,e.package_,e.name))return n}function ee(r,e){for(let n of r.statement)if(n instanceof W&&$e(n,e.publisher,e.package_,e.name))return n.object}function ln(r,e){for(let n of r.statement)if(n instanceof H&&$e(n,e.publisher,e.package_,e.name))return n.object}function Et(r,e){for(let n of r.statement)if(n instanceof ie&&$e(n,e.publisher,e.package_,e.name))return n.object}function cs(r,e){for(let n of r.statement)if(n instanceof ae&&$e(n,e.publisher,e.package_,e.name))return n.object===!0;return!1}function ls(r){for(let e of me(r))if(M(e.subject,da)||M(e.subject,fa))return!0;return!1}function me(r){let e=[];for(let n of r.statement)if(n instanceof x){if(!n.predicate?.subject||!M(n.predicate.subject,Ce))continue;n.object instanceof j&&e.push(n.object)}else if(n instanceof I){if(!n.predicate?.subject||!M(n.predicate.subject,Ce))continue;for(let t of n.object??[])t instanceof j&&e.push(t)}return e}function un(r){let e=[];for(let n of r.statement)if(n instanceof x){if(!n.predicate?.subject||!M(n.predicate.subject,_t))continue;n.object instanceof j&&e.push(n.object)}else if(n instanceof I){if(!n.predicate?.subject||!M(n.predicate.subject,_t))continue;for(let t of n.object??[])t instanceof j&&e.push(t)}return e}function Z(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 q&&a.name===e.name&&a.namespace===t)return a}for(let t of r){if(!(t instanceof q)||t.name!==e.name)continue;if((t.namespace||"").startsWith(`${e.publisher}/${e.package_}@`))return t}}function $e(r,e,n,t){let a=r.predicate?.subject;return a?a.publisher===e&&a.package_===n&&a.name===t:!1}function M(r,e){return r.publisher===e.publisher&&r.package_===e.package_&&r.name===e.name}function Y(r){return`${r.publisher}/${r.package_}/${r.name}`}function us(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 g(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 Lt(r,e){return e==null?"":Pe(e)?e.value:r==="string-literal"?typeof e=="string"?e:String(e):Array.isArray(e)?e.map(n=>Pe(n)?n.value:Re(typeof n=="string"?n:String(n))).join(""):Re(typeof e=="string"?e:String(e))}function It(r){if(r==null)return"";if(typeof r=="string")return r;if(typeof r=="number"||typeof r=="boolean")return String(r);if(Pe(r))return r.value;if(Array.isArray(r))return r.map(It).filter(n=>n!=="").join(", ");if(r instanceof j)return r.subject.name;if(r instanceof q||r instanceof V)return r.name??"";let e=r.value;return typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):""}function In(r,e){return r.length<=e?r:r.slice(0,e).replace(/\s+\S*$/,"")+"\u2026"}function Ot(r){return r.toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function Ut(r){return r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Ct(r){let e=gn(r);return g(e||r)}function gn(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 dn(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}function ds(){return new Set(kn.bandDispatchUris().map(r=>`${r.publisher}/${r.package_}/${r.name}`))}export{N as a,Ye as b,Pe as c,Ke as d,Xe as e,X as f,Ys as g,Oe as h,rn as i,kn as j,ds as k};