@kanonak-protocol/sdk 3.41.0 → 3.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,116 @@
1
+ import{a as fe}from"./chunk-NIGFQYVA.js";import{a as ne,c as Ae}from"./chunk-FMYLEPMC.js";import{c as ee,d as A,g as J,h as me,i as je,j as M,k as ce,l as z}from"./chunk-W6T7MOKY.js";function Ne(d){let e=d.replace(/\r\n/g,`
2
+ `).split(`
3
+ `),t=[],n=0;for(;n<e.length;){let s=e[n];if(s.trim()===""){n++;continue}let o=/^(\s*)```(\S*)\s*$/.exec(s);if(o){let i=o[2],c=[];for(n++;n<e.length&&!/^(\s*)```\s*$/.test(e[n]);)c.push(e[n]),n++;n++;let l=Me(c.join(`
4
+ `)),p=i?` class="language-${Ve(i)}"`:"";t.push(`<pre><code${p}>${l}</code></pre>`);continue}let a=/^(#{1,6})\s+(.*)$/.exec(s);if(a){let i=a[1].length,c=ge(a[2].trim());t.push(`<h${i}>${c}</h${i}>`),n++;continue}if(s.includes("|")&&n+1<e.length&&Ce(e[n+1])){let i=we(s),c=an(e[n+1]);n+=2;let l=[];for(;n<e.length&&e[n].trim()!==""&&e[n].includes("|");)l.push(we(e[n])),n++;t.push(rn(i,c,l));continue}if(/^\s*[-*]\s+/.test(s)){let i=[];for(;n<e.length&&/^\s*[-*]\s+/.test(e[n]);){let c=[e[n].replace(/^\s*[-*]\s+/,"")];for(n++;n<e.length&&e[n].trim()!==""&&!/^\s*[-*]\s+/.test(e[n])&&!/^\s*\d+\.\s+/.test(e[n]);)c.push(e[n]),n++;n<e.length&&e[n].trim()===""&&n++,i.push(`<li>${ge(c.join(" ").trim())}</li>`)}t.push(`<ul>
5
+ ${i.join(`
6
+ `)}
7
+ </ul>`);continue}if(/^\s*\d+\.\s+/.test(s)){let i=[];for(;n<e.length&&/^\s*\d+\.\s+/.test(e[n]);){let c=[e[n].replace(/^\s*\d+\.\s+/,"")];for(n++;n<e.length&&e[n].trim()!==""&&!/^\s*\d+\.\s+/.test(e[n])&&!/^\s*[-*]\s+/.test(e[n]);)c.push(e[n]),n++;n<e.length&&e[n].trim()===""&&n++,i.push(`<li>${ge(c.join(" ").trim())}</li>`)}t.push(`<ol>
8
+ ${i.join(`
9
+ `)}
10
+ </ol>`);continue}let r=[s];for(n++;n<e.length&&e[n].trim()!==""&&!/^(#{1,6})\s+/.test(e[n])&&!/^(\s*)```/.test(e[n])&&!/^\s*[-*]\s+/.test(e[n])&&!/^\s*\d+\.\s+/.test(e[n])&&!(e[n].includes("|")&&n+1<e.length&&Ce(e[n+1]));)r.push(e[n]),n++;t.push(`<p>${ge(r.join(" "))}</p>`)}return t.join(`
11
+ `)}function Ce(d){return d.includes("-")?/^[\s|:-]+$/.test(d):!1}function we(d){let e=d.trim();return e.startsWith("|")&&(e=e.slice(1)),e.endsWith("|")&&(e=e.slice(0,-1)),e.split("|").map(t=>t.trim())}function an(d){return we(d).map(e=>{let t=e.startsWith(":"),n=e.endsWith(":");return t&&n?"center":n?"right":t?"left":null})}function rn(d,e,t){let n=a=>{let r=e[a];return r?` style="text-align:${r}"`:""},s=d.map((a,r)=>`<th${n(r)}>${ge(a)}</th>`).join(""),o=t.map(a=>`<tr>${a.map((i,c)=>`<td${n(c)}>${ge(i)}</td>`).join("")}</tr>`).join(`
12
+ `);return`<table>
13
+ <thead><tr>${s}</tr></thead>
14
+ <tbody>
15
+ ${o}
16
+ </tbody>
17
+ </table>`}function ge(d){let e=Me(d);return e=e.replace(/`([^`\n]+)`/g,(t,n)=>`<code>${n}</code>`),e=e.replace(/\[([^\]]+)\]\(([^)\s]+)\)/g,(t,n,s)=>`<a href="${Ve(s)}">${n}</a>`),e=e.replace(/\*\*([^*\n]+)\*\*/g,(t,n)=>`<strong>${n}</strong>`),e=e.replace(/(^|[^*])\*([^*\n]+)\*(?!\*)/g,(t,n,s)=>`${n}<em>${s}</em>`),e=e.replace(/(^|[\s(])_([^_\n]+)_(?=[\s).,;:!?]|$)/g,(t,n,s)=>`${n}<em>${s}</em>`),e}function Me(d){return d.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function Ve(d){return d.replace(/"/g,"&quot;").replace(/&/g,"&amp;")}var ye={publisher:"kanonak.org",package_:"derivation",name:"look"},xe={publisher:"kanonak.org",package_:"derivation",name:"tokens"},te={publisher:"kanonak.org",package_:"core-rdf",name:"Resource"},N={publisher:"kanonak.org",package_:"core-rdf",name:"label"},be={publisher:"kanonak.org",package_:"core-rdf",name:"comment"},on={publisher:"kanonak.org",package_:"look",name:"Hero"},cn={publisher:"kanonak.org",package_:"look",name:"PropertyList"},ln={publisher:"kanonak.org",package_:"look",name:"BadgeRow"},un={publisher:"kanonak.org",package_:"look",name:"ChipRow"},dn={publisher:"kanonak.org",package_:"look",name:"ReferenceList"},He={publisher:"kanonak.org",package_:"look",name:"Markdown"},_e={publisher:"kanonak.org",package_:"look",name:"NavGroup"},Oe={publisher:"kanonak.org",package_:"look",name:"NavLink"},Be={publisher:"kanonak.org",package_:"look",name:"target"},pn={publisher:"kanonak.org",package_:"look",name:"ResourceGrid"},fn={publisher:"kanonak.org",package_:"look",name:"Timeline"},kn={publisher:"kanonak.org",package_:"look",name:"VersionDiff"},gn={publisher:"kanonak.org",package_:"look",name:"Figure"},hn={publisher:"kanonak.org",package_:"look",name:"StatRow"},mn={publisher:"kanonak.org",package_:"look",name:"Horizon"},bn={publisher:"kanonak.org",package_:"look",name:"PackageContents"},Le={publisher:"kanonak.org",package_:"core-kanonak",name:"Package"},$n={publisher:"kanonak.org",package_:"look",name:"FeaturedResource"},jn={publisher:"kanonak.org",package_:"look",name:"PublisherPackages"},_n={publisher:"kanonak.org",package_:"look",name:"PublisherView"},vn={publisher:"kanonak.org",package_:"look",name:"Distribution"},Rn={publisher:"kanonak.org",package_:"look",name:"alphaPath"},Sn={publisher:"kanonak.org",package_:"look",name:"betaPath"},Kn={publisher:"kanonak.org",package_:"look",name:"SectionHeading"},yn={publisher:"kanonak.org",package_:"look",name:"heading"},xn={publisher:"kanonak.org",package_:"look",name:"note"},Ln={publisher:"kanonak.org",package_:"look",name:"VersionDelta"},wn={publisher:"kanonak.org",package_:"look",name:"TimePlot"},On={publisher:"kanonak.org",package_:"look",name:"Details"},Fn={publisher:"kanonak.org",package_:"derivation",name:"derivations"},In={publisher:"kanonak.org",package_:"look",name:"laneBy"},Un={publisher:"kanonak.org",package_:"look",name:"stats"},En={publisher:"kanonak.org",package_:"look",name:"statPath"},Pn={publisher:"kanonak.org",package_:"look",name:"statLabel"},De={publisher:"kanonak.org",package_:"look",name:"labelPath"},Tn={publisher:"kanonak.org",package_:"look",name:"badgePath"},Fe={publisher:"kanonak.org",package_:"look",name:"orderBy"},Ge={publisher:"kanonak.org",package_:"look",name:"track"},ve={publisher:"kanonak.org",package_:"look",name:"metricPath"},Ie={publisher:"kanonak.org",package_:"look",name:"hueBy"},We={publisher:"kanonak.org",package_:"look",name:"lowerPath"},ze={publisher:"kanonak.org",package_:"look",name:"upperPath"},An={publisher:"kanonak.org",package_:"look",name:"axisMin"},Cn={publisher:"kanonak.org",package_:"look",name:"axisMax"},Nn={publisher:"kanonak.org",package_:"look",name:"valueLabel"};var Ye={publisher:"kanonak.org",package_:"look",name:"semanticSvg"},Mn={publisher:"kanonak.org",package_:"look",name:"tierChip"},Vn={publisher:"kanonak.org",package_:"look",name:"tierIcon"},Hn={publisher:"kanonak.org",package_:"look",name:"tierCard"},Bn={publisher:"kanonak.org",package_:"look",name:"tierFull"},Dn={publisher:"kanonak.org",package_:"core-rdf",name:"type"},Ue={publisher:"kanonak.org",package_:"look",name:"bands"},Gn={publisher:"kanonak.org",package_:"look",name:"title"},Wn={publisher:"kanonak.org",package_:"look",name:"eyebrow"},zn={publisher:"kanonak.org",package_:"look",name:"subtitle"},qe={publisher:"kanonak.org",package_:"look",name:"badges"},Y={publisher:"kanonak.org",package_:"look",name:"source"},Yn={publisher:"kanonak.org",package_:"look",name:"chips"},Ee={publisher:"kanonak.org",package_:"look",name:"entries"},qn={publisher:"kanonak.org",package_:"look",name:"urlForm"},Te=class{constructor(e){this.catalog=e}catalog;findCascadedLook(e){let t=Re(e);if(t)return{declaration:t,sourceClass:{publisher:X(e),package_:(e.namespace||"").split("/")[1]?.split("@")[0]??"",name:e.name}};let n=new Set,s=le(e);for(;s.length>0;){let o=s.shift(),a=Jn(o.subject),r=ke(a);if(n.has(r))continue;n.add(r);let i=ue(this.catalog,a);for(let c of i){let l=Re(c);if(l)return{declaration:l,sourceClass:{publisher:a.publisher,package_:a.package_,name:a.name}}}for(let c of i)for(let l of Se(c))s.push(l)}if(!n.has(ke(te)))for(let o of ue(this.catalog,te)){let a=Re(o);if(a)return{declaration:a,sourceClass:{...te}}}}findCascadedTokens(e){let t=new Map;for(let[o,a]of Pe(e))t.has(o)||t.set(o,a);let n=new Set,s=le(e);for(;s.length>0;){let o=s.shift(),a=ke(o.subject);if(n.has(a))continue;n.add(a);let r=ue(this.catalog,o.subject);if(r.length!==0)for(let i of r){for(let[c,l]of Pe(i))t.has(c)||t.set(c,l);for(let c of Se(i))s.push(c)}}if(!n.has(ke(te))){let o=ue(this.catalog,te);for(let a of o)for(let[r,i]of Pe(a))t.has(r)||t.set(r,i)}return t}renderSvg(e){let t=$(e,N)??e.name,n=(t.trim().charAt(0)||"?").toUpperCase(),s=`${e.namespace??""}/${e.name}`,o={label:t,firstLetter:n,uri:s},a=this.collectCascadedSvgTiers(e),r=h=>this.applyPlaceholders(h,e,o),i=r(a.tierChip??""),c=r(a.tierIcon??""),l=r(a.tierCard??""),p=r(a.tierFull??""),g=[...this.findCascadedTokens(e)].map(([h,k])=>`--kan-${h}: ${k};`).join(" ");return`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400" width="400" height="400" style="${re(g)}">
18
+ <style>
19
+ .tier-chip,.tier-icon,.tier-card{display:none}
20
+ .tier-full{display:block}
21
+ @media (max-width:400px){.tier-full{display:none}.tier-card{display:block}}
22
+ @media (max-width:160px){.tier-card{display:none}.tier-icon{display:block}}
23
+ @media (max-width:60px){.tier-icon{display:none}.tier-chip{display:block}}
24
+ </style>
25
+ <g class="tier-chip">${i}</g>
26
+ <g class="tier-icon">${c}</g>
27
+ <g class="tier-card">${l}</g>
28
+ <g class="tier-full">${p}</g>
29
+ </svg>`}applyPlaceholders(e,t,n){return e.replace(/\{\{([^}]+)\}\}/g,(s,o)=>{let a=o.trim();if(n[a]!==void 0)return re(n[a]);let r=this.resolvePath(t,a);return r===void 0?`{{${a}}}`:re(r)})}resolvePath(e,t){let n=t.split("/").map(r=>r.trim()).filter(r=>r.length>0);if(n.length===0)return;let s=e;for(let r=0;r<n.length-1;r++){if(!s)return;let i=Qe(n[r]),c=en(s,i);if(!c)return;if(c instanceof M&&c.object instanceof A){let l=V(this.catalog,c.object.subject);if(!l)return;s=l}else if(c instanceof ce)s=c.object;else return}if(!s)return;let o=Qe(n[n.length-1]),a=en(s,o);if(a){if(a instanceof J||a instanceof me||a instanceof je)return String(a.object);if(a instanceof M&&a.object instanceof A){let r=a.object,i=V(this.catalog,r.subject);return i?$(i,N)??r.subject.name:r.subject.name}}}collectCascadedSvgTiers(e){let t={},n=a=>{let r=se(a,Ye);if(!(r instanceof ce))return;let i=r.object,c=$(i,Mn),l=$(i,Vn),p=$(i,Hn),f=$(i,Bn);t.tierChip===void 0&&c!==void 0&&(t.tierChip=c),t.tierIcon===void 0&&l!==void 0&&(t.tierIcon=l),t.tierCard===void 0&&p!==void 0&&(t.tierCard=p),t.tierFull===void 0&&f!==void 0&&(t.tierFull=f)};n(e);let s=new Set,o=le(e);for(;o.length>0;){let a=o.shift(),r=ke(a.subject);if(s.has(r))continue;s.add(r);let i=ue(this.catalog,a.subject);for(let c of i){n(c);for(let l of Se(c))o.push(l)}}if(!s.has(ke(te)))for(let a of ue(this.catalog,te))n(a);return t}renderStylesheet(e){let t=this.findCascadedTokens(e),n=[];for(let[a,r]of t)n.push(` --kan-${a}: ${r};`);let s=n.length>0?`:root {
30
+ ${n.join(`
31
+ `)}
32
+ }`:":root { /* no tokens resolved */ }",o=this.findBaseStylesheet(X(e))??"";return`${s}
33
+ ${o}`}findBaseStylesheet(e){let t="kanonak.org/site/content",n,s;for(let a of this.catalog){if(!(a instanceof ee)||a.name!=="base-stylesheet")continue;let r=a.namespace||"";r.startsWith(`${e}/look-styles@`)?n=a:r.startsWith("kanonak.org/look-styles@")&&(s=a)}let o=n??s;if(o)for(let a of o.statement){let r=a.predicate?.subject;if(!r)continue;if(`${r.publisher}/${r.package_}/${r.name}`===t&&a instanceof J)return a.object}}renderHtml(e){let t=this.findCascadedLook(e);if(!t)return`<!-- LookRenderer: no derivation.look found for ${e.namespace}/${e.name} -->`;let n=Je(t.declaration);if(n.length===0)return"<!-- LookRenderer: look declaration has no bands -->";let s=X(e),o=[];for(let a of n)o.push(this.renderBand(a,e,s));return o.join(`
34
+ `)}renderPublisherIndex(e,t,n){let s=n?this.renderNavGroup(n,e):"",o=t.map(r=>{let i=r.comment?`<p class="kan-resource-card-subtitle">${u(r.comment)}</p>`:"";return`<a class="kan-resource-card" href="${u(r.href)}"><h3 class="kan-resource-card-title">${u(r.label)}</h3>${i}</a>`}).join(`
35
+ `),a=`<header class="kan-hero">
36
+ <h1 class="kan-hero-title">${u(e)}</h1>
37
+ </header>
38
+ <section class="kan-resource-grid">
39
+ ${o}
40
+ </section>`;return`<!doctype html>
41
+ <html lang="en">
42
+ <head>
43
+ <meta charset="utf-8">
44
+ <meta name="viewport" content="width=device-width, initial-scale=1">
45
+ <title>${u(e)}</title>
46
+ <link rel="stylesheet" href="index.css">
47
+ </head>
48
+ <body>
49
+ ${s}
50
+ <main class="kan-main">
51
+ ${a}
52
+ </main>
53
+ </body>
54
+ </html>
55
+ `}renderPublisherIndexStylesheet(e){return e?this.renderStylesheet(e):""}hasDeclaredView(e){let t=this.findCascadedLook(e);return t?!(s=>s.publisher===te.publisher&&s.package_===te.package_&&s.name===te.name||s.publisher===Le.publisher&&s.package_===Le.package_&&s.name===Le.name)(t.sourceClass):!1}renderPackageVersionList(e,t,n){let s=X(n),o=this.renderNavGroup(n,s),a=this.renderBreadcrumb(n,s,{bareOverview:!0}),r=t.map(c=>`<a class="kan-resource-card" href="/${u(e)}/${u(c)}/"><h3 class="kan-resource-card-title">${u(c)}</h3></a>`).join(`
56
+ `),i=`<header class="kan-hero">
57
+ <span class="kan-hero-eyebrow">PACKAGE</span>
58
+ <h1 class="kan-hero-title">${u(e)}</h1>
59
+ </header>
60
+ <section class="kan-resource-grid">
61
+ ${r}
62
+ </section>`;return`<!doctype html>
63
+ <html lang="en">
64
+ <head>
65
+ <meta charset="utf-8">
66
+ <meta name="viewport" content="width=device-width, initial-scale=1">
67
+ <title>${u(e)}</title>
68
+ <link rel="stylesheet" href="${u(n.name)}.css">
69
+ </head>
70
+ <body>
71
+ ${o}
72
+ ${a}
73
+ <main class="kan-main">
74
+ ${i}
75
+ </main>
76
+ </body>
77
+ </html>
78
+ `}renderDocument(e,t){let n=this.renderHtml(e),s=this.readPropertyValueText(e,N)??e.name,o=t?.rootIndex?"index.css":`${e.name}.css`,a=!t?.rootIndex&&this.hasSvgDerivation(e)?`<figure class="kan-figure"><img src="${u(e.name)}.svg" alt=""></figure>
79
+ `:"",r=X(e),i=this.renderNavGroup(e,r),c=t?.rootIndex?"":this.renderBreadcrumb(e,r,t);return`<!doctype html>
80
+ <html lang="en">
81
+ <head>
82
+ <meta charset="utf-8">
83
+ <meta name="viewport" content="width=device-width, initial-scale=1">
84
+ <title>${u(s)}</title>
85
+ <link rel="stylesheet" href="${u(o)}">
86
+ </head>
87
+ <body>
88
+ ${i}
89
+ ${c}
90
+ <main class="kan-main">
91
+ ${a}${n}
92
+ </main>
93
+ </body>
94
+ </html>
95
+ `}hasSvgDerivation(e){let t=new Set,n=le(e);for(;n.length>0;){let s=n.shift(),o=ke(s.subject);if(t.has(o))continue;t.add(o);let a=V(this.catalog,s.subject);if(a){for(let r of a.statement)if(r instanceof z&&ae(r,"kanonak.org","derivation","derivations")){for(let i of r.object??[])if(i instanceof ne)for(let c of i.statement){if(!(c instanceof M)||!ae(c,"kanonak.org","derivation","format")||!(c.object instanceof A))continue;let l=c.object.subject;if(l.publisher==="kanonak.org"&&l.package_==="formats"&&l.name==="svg")return!0}}for(let r of Se(a))n.push(r)}}return!1}renderBand(e,t,n){let s=$e(e);return s?R(s,on)?this.renderHero(e,t,n):R(s,cn)?this.renderPropertyList(e,t,n):R(s,ln)?this.renderBadgeRow(e,t,n):R(s,un)?this.renderChipRow(e,t,n):R(s,dn)?this.renderReferenceList(e,t,n):R(s,He)?this.renderMarkdown(e,t,n):R(s,_e)?this.renderNavGroup(t,n):R(s,pn)?this.renderResourceGrid(e,n,t):R(s,fn)?this.renderTimeline(e,n):R(s,kn)?this.renderVersionDiff(e,n):R(s,gn)?this.renderFigure(e,t,n):R(s,hn)?this.renderStatRow(e,t):R(s,mn)?this.renderHorizon(e,t,n):R(s,bn)?this.renderPackageContents(t,n):R(s,$n)?this.renderFeaturedResource(e,n):R(s,jn)?this.renderPublisherPackages(n):R(s,vn)?this.renderDistribution(e,t):R(s,Kn)?this.renderSectionHeading(e):R(s,Ln)?this.renderVersionDelta(e,t):R(s,wn)?this.renderTimePlot(e,t,n):R(s,On)?this.renderDetails(t,n):`<!-- LookRenderer: unsupported band ${s.publisher}/${s.package_}/${s.name} -->`:"<!-- LookRenderer: band has no rdf:type -->"}collectTrackedSeries(e,t,n,s){let{hueBy:o,lowerPath:a,upperPath:r}=s??{},i=new Map,c=e.length,l=(p,f)=>{let g=this.resolvePath(p,f);return g===void 0?NaN:parseFloat(g)};return e.forEach((p,f)=>{let g=this.readPropertyValueReferences(p,t);for(let h of g){let k=V(this.catalog,{publisher:h.subject.publisher,package_:h.subject.package_,name:h.subject.name,...h.subject.version?{version:h.subject.version}:{}});if(!k)continue;let m=h.subject.name,v=i.get(m);v||(v={key:m,label:$(k,N)??m,points:new Array(c).fill(null),...a?{lower:new Array(c).fill(null)}:{},...r?{upper:new Array(c).fill(null)}:{}},i.set(m,v));let x=l(k,n);if(Number.isFinite(x)&&(v.points[f]=x),a&&v.lower){let _=l(k,a);Number.isFinite(_)&&(v.lower[f]=_)}if(r&&v.upper){let _=l(k,r);Number.isFinite(_)&&(v.upper[f]=_)}if(o){let _=l(k,o);Number.isFinite(_)&&(v.hue=_)}v.lastSubject=k}}),[...i.values()]}hrefForSubject(e,t,n="="){let s=e.namespace||"",o=s.split("/")[1]?.split("@")[0]??"",a=s.split("@")[1]??"",r=a?this.parseVersion(a):void 0;return fe.formatResourceUrl({publisher:X(e),package_:o,name:e.name,...r?{version:r}:{}},n,{contextPublisher:t})}renderVersionDiff(e,t){let n=P(e,Y);if(!n)return"<!-- LookRenderer.VersionDiff: no look.source -->";let s=$(e,ve),o=P(e,Ge);if(!o||!s)return"<!-- LookRenderer.VersionDiff: needs look.track + look.metricPath -->";let a=P(e,Fe),r=$(e,Ie),i=this.findInstancesOfClass(n);if(i.length===0)return"<!-- LookRenderer.VersionDiff: no instances -->";let c=g=>a?this.readPropertyValueText(g,a)??"":"",l=i.slice().sort((g,h)=>c(g).localeCompare(c(h))),p=this.collectTrackedSeries(l,o,s,{hueBy:r});return p.length===0?"<!-- LookRenderer.VersionDiff: no tracked series -->":`<section class="kan-vdiff">${p.map((g,h)=>{let k=g.hue!==void 0?g.hue:Math.round(h*360/p.length),m=g.points.filter(y=>y!==null);if(m.length===0)return"";let v=m[0],x=m[m.length-1],_=x-v,F;if(Math.abs(_)>=.005){let y=_>0?"up":"down",I=_>0?"\u25B2":"\u25BC";F=`<span class="kan-vdiff-delta ${y}">${_>0?"+":""}${_.toFixed(2)} ${I}</span>`}else F='<span class="kan-vdiff-delta flat">\u2014</span>';let E=g.lastSubject?`<a href="${u(this.hrefForSubject(g.lastSubject,t))}">${u(g.label)}</a>`:u(g.label);return`<div class="kan-vdiff-row" style="--kan-vdiff-hue:${k}"><span class="kan-vdiff-label">${E}</span><span class="kan-vdiff-start">${v.toFixed(2)}</span>`+this.sparkline(g.points,k)+`<span class="kan-vdiff-end">${x.toFixed(2)}</span>`+F+"</div>"}).join("")}</section>`}sparkline(e,t){let a=`hsl(${t},65%,60%)`,r=e.filter(m=>m!==null);if(r.length===0)return'<svg class="kan-vdiff-spark" viewBox="0 0 132 30" xmlns="http://www.w3.org/2000/svg"></svg>';let i=Math.min(...r),l=Math.max(...r)-i,p=e.length,f=m=>p<=1?132/2:4+m/(p-1)*124,g=m=>l<1e-9?30/2:26-(m-i)/l*22,h=[],k=[];return e.forEach((m,v)=>{if(m===null)return;let x=f(v),_=g(m);h.push(`${x.toFixed(1)},${_.toFixed(1)}`),k.push(`<circle cx="${x.toFixed(1)}" cy="${_.toFixed(1)}" r="2" fill="${a}"/>`)}),`<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="${a}" stroke-width="1.5" stroke-linejoin="round" stroke-linecap="round"/>`+k.join("")+"</svg>"}svgUrlForSubject(e,t,n="="){return`${this.hrefForSubject(e,t,n)}.svg`}renderFigure(e,t,n){let s=t,o=P(e,Y);if(o){let i=V(this.catalog,o);i&&(s=i)}let a=this.svgUrlForSubject(s,n),r=$(s,N)??s.name;return`<figure class="kan-figure"><img class="kan-figure-img" src="${u(a)}" alt="${u(r)}" loading="lazy"/></figure>`}renderStatRow(e,t){let n=se(e,Un),s=this.gatherValueItems(n).filter(a=>a instanceof ne);if(s.length===0)return"<!-- LookRenderer.StatRow: no look.stats -->";let o=[];for(let a of s){let r=$(a,En);if(!r)continue;let i=this.resolvePath(t,r);if(i===void 0)continue;let c=$(a,Pn)??"";o.push('<div class="kan-stat">'+(c?`<span class="kan-stat-label">${u(c)}</span>`:"")+`<span class="kan-stat-val">${u(i)}</span></div>`)}return o.length===0?"":`<div class="kan-stat-row">${o.join("")}</div>`}renderHorizon(e,t,n){let s=P(e,Y);if(!s)return"<!-- LookRenderer.Horizon: no look.source -->";let o=this.gatherValueItems(se(t,s)).filter(r=>r instanceof ne);return o.length===0?"":`<section class="kan-horizon">${o.map(r=>this.renderConditionNode(r,n,0)).join("")}</section>`}renderConditionNode(e,t,n){let s=$e(e),o=s?this.readLabelForUri({publisher:s.publisher,package_:s.package_,name:s.name})??s.name:"Condition",a=[],r=[];for(let f of e.statement){let g=f.predicate?.subject;if(!g||g.name==="type")continue;let h=this.readLabelForUri({publisher:g.publisher,package_:g.package_,name:g.name})??g.name;if(f instanceof J||f instanceof me||f instanceof je)a.push(`<div class="kan-cond-field"><span class="kan-cond-key">${u(h)}</span><span class="kan-cond-v">${u(String(f.object))}</span></div>`);else if(f instanceof M&&f.object instanceof A){let k=f.object.subject,m=this.readLabelForUri({publisher:k.publisher,package_:k.package_,name:k.name})??k.name;a.push(`<div class="kan-cond-field"><span class="kan-cond-key">${u(h)}</span><span class="kan-cond-v">${u(m)}</span></div>`)}else if(f instanceof ce)r.push(this.renderConditionNode(f.object,t,n+1));else if(f instanceof z)for(let k of f.object??[])k instanceof ne&&r.push(this.renderConditionNode(k,t,n+1))}let i=a.length?`<div class="kan-cond-fields">${a.join("")}</div>`:"",c=r.length?`<div class="kan-cond-children">${r.join("")}</div>`:"",l=r.length>0,p=l?`<span class="kan-cond-op">${u(o)}</span>`:`<div class="kan-cond-type">${u(o)}</div>`;return`<div class="kan-cond ${l?"kan-cond-branch":"kan-cond-leaf"}">${p}${i}${c}</div>`}renderSectionHeading(e){let t=e,n=$(t,yn);if(!n)return"<!-- LookRenderer.SectionHeading: no look.heading -->";let s=$(t,xn);return`<div class="kan-section"><h2 class="kan-section-title">${u(n)}</h2>`+(s?`<p class="kan-section-note">${u(s)}</p>`:"")+"</div>"}renderVersionDelta(e,t){let s=$(e,ve);if(!s)return"<!-- LookRenderer.VersionDelta: no look.metricPath -->";let o=w=>{let U=this.resolvePath(w,s),B=U===void 0?NaN:parseFloat(U);return Number.isFinite(B)?B:void 0},a=o(t);if(a===void 0)return"";let r=w=>this.parseVersion((w.namespace||"").split("@")[1]??"")??{major:0,minor:0,patch:0},i=(w,U)=>w.major-U.major||w.minor-U.minor||w.patch-U.patch,c={publisher:X(t),package_:(t.namespace||"").split("/")[1]?.split("@")[0]??"",name:t.name},l=r(t),p,f;for(let w of ue(this.catalog,c)){let U=r(w);i(U,l)<0&&(!f||i(U,f)>0)&&(p=w,f=U)}if(!p||!f)return'<div class="kan-delta kan-delta-first">First tracked in this version</div>';let g=o(p);if(g===void 0)return"";let h=a-g,k=Math.abs(h)<.005?"flat":h>0?"up":"down",m=k==="up"?"\u25B2":k==="down"?"\u25BC":"\u2014",v=k==="up"?"#34d399":k==="down"?"#f87171":"var(--kan-text-faint)",x=`${f.major}.${f.minor}.${f.patch}`,_=320,F=46,E=14,y=30,I=w=>E+Math.min(1,Math.max(0,w))*(_-2*E),L=I(g),T=I(a),oe=`<svg class="kan-delta-track" viewBox="0 0 ${_} ${F}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img"><line x1="${E}" y1="${y}" x2="${_-E}" y2="${y}" class="kan-delta-base"/><line x1="${L.toFixed(1)}" y1="${y}" x2="${T.toFixed(1)}" y2="${y}" stroke="${v}" stroke-width="3"/><circle cx="${L.toFixed(1)}" cy="${y}" r="4" class="kan-delta-prev"/><circle cx="${T.toFixed(1)}" cy="${y}" r="5.5" fill="${v}"/><text x="${L.toFixed(1)}" y="${y-9}" text-anchor="middle" class="kan-delta-tick kan-delta-tick-prev">${g.toFixed(2)}</text><text x="${T.toFixed(1)}" y="${y+17}" text-anchor="middle" class="kan-delta-tick">${a.toFixed(2)}</text></svg>`;return`<div class="kan-delta"><div class="kan-delta-head"><span class="kan-delta-vs">vs ${u(x)}</span><span class="kan-delta-badge ${k}">${h>0?"+":""}${h.toFixed(2)} ${m}</span></div>`+oe+"</div>"}renderTimePlot(e,t,n){let s=P(e,Y),o=P(e,Fe);if(!s||!o)return"<!-- LookRenderer.TimePlot: needs look.source + look.orderBy -->";let a=e,r=$(a,In),i=$(a,De),c=[];for(let j of this.readPropertyValueReferences(t,s)){let C=V(this.catalog,{publisher:j.subject.publisher,package_:j.subject.package_,name:j.subject.name,...j.subject.version?{version:j.subject.version}:{}});if(!C)continue;let S=this.readPropertyValueText(C,o)??"",K=Date.parse(S);if(!Number.isFinite(K))continue;let q=r?this.resolvePath(C,r)??"":"",b=(i?this.resolvePath(C,i):void 0)??$(C,N)??C.name;c.push({t:K,dateStr:S,lane:q,label:b,href:this.hrefForSubject(C,n)})}if(c.length===0)return"<!-- LookRenderer.TimePlot: no dated points -->";let l=[];for(let j of c)l.includes(j.lane)||l.push(j.lane);let p=Math.min(...c.map(j=>j.t)),f=Math.max(...c.map(j=>j.t));f===p&&(f=p+1);let g=l.some(j=>j),h=720,k=g?96:16,m=18,v=12,x=24,_=36,F=v+l.length*_+x,E=k,y=h-m,I=y-E,L=j=>E+(j-p)/(f-p)*I,T=j=>v+j*_+_/2,oe=j=>Math.round(j*360/Math.max(1,l.length)),w=[];l.forEach((j,C)=>{let S=T(C);w.push(`<line x1="${E}" y1="${S.toFixed(1)}" x2="${y}" y2="${S.toFixed(1)}" class="kan-plot-guide"/>`),j&&w.push(`<text x="${(k-8).toFixed(1)}" y="${(S+4).toFixed(1)}" text-anchor="end" class="kan-plot-lane">${re(j)}</text>`)});let U={},B=[];for(let j of c){let C=l.indexOf(j.lane),K=((U[j.lane]=(U[j.lane]??0)+1)%3-1)*7,q=L(j.t),b=T(C)+K,O=`${Ke(j.dateStr)} \xB7 ${j.label}`;B.push(`<a href="${u(j.href)}" class="kan-plot-link"><circle cx="${q.toFixed(1)}" cy="${b.toFixed(1)}" r="5" fill="hsl(${oe(C)},65%,60%)" class="kan-plot-pt"><title>${re(O)}</title></circle></a>`)}let de=`<text x="${E}" y="${(F-6).toFixed(1)}" text-anchor="start" class="kan-plot-axis">${re(Ke(new Date(p).toISOString()))}</text><text x="${y}" y="${(F-6).toFixed(1)}" text-anchor="end" class="kan-plot-axis">${re(Ke(new Date(f).toISOString()))}</text>`;return`<section class="kan-plot">${`<svg class="kan-plot-svg" viewBox="0 0 ${h} ${F}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">`+w.join("")+B.join("")+de+"</svg>"}</section>`}renderDetails(e,t){let n=this.detailRows(e,t);return n?`<dl class="kan-details">${n}</dl>`:"<!-- LookRenderer.Details: no properties -->"}detailRows(e,t){let n=[];for(let s of e.statement){let o=s.predicate?.subject;if(!o||this.isMetaPredicate(o))continue;let a=this.readLabelForUri({publisher:o.publisher,package_:o.package_,name:o.name})??o.name,r=this.detailValue(s,t);r&&n.push(`<dt class="kan-details-key">${u(a)}</dt><dd class="kan-details-val">${r}</dd>`)}return n.join("")}detailValue(e,t){if(e instanceof J)return Zn(e.object);if(e instanceof me||e instanceof je)return u(String(e.object));if(e instanceof M&&e.object instanceof A)return this.renderReferenceLink(e.object,void 0,t);if(e instanceof ce)return this.detailEmbedded(e.object,t);if(e instanceof z){let n=e.object??[];return n.length>0&&n.every(s=>s instanceof ne)?n.map(s=>this.detailEmbedded(s,t)).join(""):n.map(s=>s instanceof A?this.renderReferenceLink(s,void 0,t):s instanceof ne?this.detailEmbedded(s,t):u(String(s))).filter(s=>s).join(", ")}return""}detailEmbedded(e,t){let n=$e(e),s=n?this.readLabelForUri({publisher:n.publisher,package_:n.package_,name:n.name})??n.name:"",o=this.detailRows(e,t);return'<div class="kan-details-embed">'+(s?`<span class="kan-details-type">${u(s)}</span>`:"")+(o?`<dl class="kan-details">${o}</dl>`:"")+"</div>"}isMetaPredicate(e){return R(e,Dn)||R(e,N)||R(e,be)||R(e,ye)||R(e,xe)||R(e,Fn)||R(e,Ye)}renderPackageContents(e,t){let n=e.namespace||"";if(!n)return"";let s=this.catalog.filter(a=>a instanceof ee&&a.namespace===n&&a.name!==e.name);return s.length===0?`<!-- LookRenderer.PackageContents: no members in ${n} -->`:(s.sort((a,r)=>{let i=$(a,N)??a.name,c=$(r,N)??r.name;return i.localeCompare(c)}),`<section class="kan-pkg-grid">${s.map(a=>{let r=$(a,N)??a.name,i=$(a,be),c=i?nn(i,160):"",l=this.hrefForSubject(a,t),p=this.svgUrlForSubject(a,t);return`<a class="kan-pkg-card" href="${u(l)}"><img class="kan-pkg-card-svg" src="${u(p)}" alt="" loading="lazy"/><span class="kan-pkg-card-body"><span class="kan-pkg-card-title">${u(r)}</span>`+(c?`<span class="kan-pkg-card-comment">${u(c)}</span>`:"")+"</span></a>"}).join("")}</section>`)}renderFeaturedResource(e,t){let n=P(e,Y);if(!n)return"<!-- LookRenderer.FeaturedResource: no look.source -->";let s=ue(this.catalog,n),o=c=>this.parseVersion((c.namespace||"").split("@")[1]??"")??{major:0,minor:0,patch:0},a=s.length>0?s.slice().sort((c,l)=>{let p=o(c),f=o(l);return f.major-p.major||f.minor-p.minor||f.patch-p.patch})[0]:V(this.catalog,n);if(!a)return`<!-- LookRenderer.FeaturedResource: ${n.publisher}/${n.package_}/${n.name} not found -->`;let r=this.renderHtml(a),i=this.hrefForSubject(a,t);return`<section class="kan-featured"><a class="kan-featured-permalink" href="${u(i)}">View full resource \u2192</a>`+r+"</section>"}renderDistribution(e,t){let n=e,s=S=>{let K=$(n,S);if(!K)return;let q=this.resolvePath(t,K),b=q===void 0?NaN:parseFloat(q);return Number.isFinite(b)?b:void 0},o=s(Rn),a=s(Sn);if(o===void 0||a===void 0||o<=0||a<=0)return"<!-- LookRenderer.Distribution: needs resolvable alphaPath + betaPath (> 0) -->";let r=s(ve)??o/(o+a),i=s(We),c=s(ze),l=s(Ie),p=l!==void 0?`hsl(${l},65%,60%)`:"var(--kan-accent)",f=S=>Number.isInteger(S)?String(S):S.toFixed(1),g=280,h=168,k={top:14,right:14,bottom:24,left:14},m=g-k.left-k.right,v=h-k.top-k.bottom,x=120,_=1e-4,F=[],E=[],y=0;for(let S=0;S<=x;S++){let K=S/x;K<_?K=_:K>1-_&&(K=1-_);let q=Math.exp((o-1)*Math.log(K)+(a-1)*Math.log(1-K));F.push(K),E.push(q),q>y&&(y=q)}let I=S=>k.left+Math.min(1,Math.max(0,S))*m,L=S=>k.top+(1-(y>0?S/y:0))*v,T=k.top+v,oe=F.map((S,K)=>`${I(S).toFixed(1)},${L(E[K]).toFixed(1)}`),w=`M${I(0).toFixed(1)},${T.toFixed(1)} L${oe.join(" L")} L${I(1).toFixed(1)},${T.toFixed(1)} Z`,U="";if(i!==void 0&&c!==void 0&&c>i){let S=[`${I(i).toFixed(1)},${T.toFixed(1)}`];for(let K=0;K<=x;K++)F[K]>=i&&F[K]<=c&&S.push(`${I(F[K]).toFixed(1)},${L(E[K]).toFixed(1)}`);S.push(`${I(c).toFixed(1)},${T.toFixed(1)}`),U=`<path d="M${S.join(" L")} Z" fill="${p}" fill-opacity="0.3"/>`}let B=I(r),de=`<line x1="${B.toFixed(1)}" y1="${k.top.toFixed(1)}" x2="${B.toFixed(1)}" y2="${T.toFixed(1)}" stroke="${p}" stroke-width="1.5" stroke-dasharray="3 3"/><text x="${B.toFixed(1)}" y="${(k.top-3).toFixed(1)}" text-anchor="middle" class="kan-dist-mean">\u03BC ${r.toFixed(2)}</text>`,he=`<text x="${I(0).toFixed(1)}" y="${(T+15).toFixed(1)}" text-anchor="start" class="kan-dist-axis">0</text><text x="${I(1).toFixed(1)}" y="${(T+15).toFixed(1)}" text-anchor="end" class="kan-dist-axis">1</text>`,j=`<svg class="kan-dist-svg" viewBox="0 0 ${g} ${h}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img"><line x1="${k.left}" y1="${T.toFixed(1)}" x2="${(g-k.right).toFixed(1)}" y2="${T.toFixed(1)}" class="kan-dist-base"/><path d="${w}" fill="${p}" fill-opacity="0.12"/>`+U+`<polyline points="${oe.join(" ")}" fill="none" stroke="${p}" stroke-width="2"/>`+de+he+"</svg>",C=i!==void 0&&c!==void 0?` \xB7 95% CI [${i.toFixed(2)}\u2013${c.toFixed(2)}]`:"";return`<figure class="kan-dist">${j}<figcaption class="kan-dist-caption">Beta(${f(o)}, ${f(a)})${C}</figcaption></figure>`}renderPublisherPackages(e){let t=new Map,n=r=>this.parseVersion((r.namespace||"").split("@")[1]??"")??{major:0,minor:0,patch:0},s=(r,i)=>r.major>i.major||r.major===i.major&&(r.minor>i.minor||r.minor===i.minor&&r.patch>i.patch);for(let r of this.catalog){if(!(r instanceof ee)||X(r)!==e)continue;let i=(r.namespace||"").split("/")[1]?.split("@")[0]??"";if(!i||r.name!==i)continue;let c=t.get(i);(!c||s(n(r),n(c)))&&t.set(i,r)}let o=[...t.entries()].sort((r,i)=>r[0].localeCompare(i[0]));return o.length===0?"":`<section class="kan-pkg-grid">${o.map(([r,i])=>{let c=$(i,N)??r,l=$(i,be),p=l?nn(l,160):"",f=this.svgUrlForSubject(i,e);return`<a class="kan-pkg-card" href="/${u(r)}"><img class="kan-pkg-card-svg" src="${u(f)}" alt="" loading="lazy"/><span class="kan-pkg-card-body"><span class="kan-pkg-card-title">${u(c)}</span>`+(p?`<span class="kan-pkg-card-comment">${u(p)}</span>`:"")+"</span></a>"}).join("")}</section>`}findPublisherRootView(e){for(let t of this.catalog){if(!(t instanceof ee)||X(t)!==e)continue;let n=Re(t);if(!n)continue;let s=$e(n);if(s&&R(s,_n))return t}}renderTimeline(e,t){let n=P(e,Y);if(!n)return"<!-- LookRenderer.Timeline: no look.source -->";let s=P(e,Fe),o=this.findInstancesOfClass(n);if(o.length===0)return"<!-- LookRenderer.Timeline: no instances -->";let a=p=>s?this.readPropertyValueText(p,s)??"":"",r=o.slice().sort((p,f)=>a(p).localeCompare(a(f))),i=P(e,Ge),c=$(e,ve);return i&&c?this.renderTrajectoryChart(r,i,c,e,t,a):`<section class="kan-timeline"><ol>
96
+ ${r.map(p=>{let f=p.namespace||"",g=f.split("/")[1]?.split("@")[0]??"",h=f.split("@")[1]??"",k=h?this.parseVersion(h):void 0,m=fe.formatResourceUrl({publisher:X(p),package_:g,name:p.name,...k?{version:k}:{}},"=",{contextPublisher:t}),v=a(p),x=v?`<span class="kan-timeline-date">${u(v)}</span>`:"",_=h||p.name;return`<li class="kan-timeline-node"><a href="${u(m)}"><span class="kan-timeline-key">${u(_)}</span>${x}</a></li>`}).join(`
97
+ `)}
98
+ </ol></section>`}renderTrajectoryChart(e,t,n,s,o,a){let r=s,i=$(r,Ie),c=$(r,We),l=$(r,ze),p=$(r,Nn),f=Ze(r,An),g=Ze(r,Cn),h=e.length,k=this.collectTrackedSeries(e,t,n,{hueBy:i,lowerPath:c,upperPath:l});if(k.length===0)return"<!-- LookRenderer.Timeline: no tracked series -->";let m=[];for(let b of k){for(let O of b.points)O!==null&&m.push(O);for(let O of b.lower??[])O!==null&&m.push(O);for(let O of b.upper??[])O!==null&&m.push(O)}if(m.length===0)return"<!-- LookRenderer.Timeline: no metric values -->";let v=Math.min(...m),x=Math.max(...m);x-v<1e-9&&(v-=.5,x+=.5);let _=(x-v)*.08,F=f!==void 0?f:v-_,E=g!==void 0?g:x+_;E-F<1e-9&&(E=F+1);let y=1e3,I=440,L={top:28,right:24,bottom:56,left:52},T=y-L.left-L.right,oe=I-L.top-L.bottom,w=b=>h<=1?L.left+T/2:L.left+b/(h-1)*T,U=b=>L.top+(1-(b-F)/(E-F))*oe,B=(b,O)=>b.hue!==void 0?b.hue:Math.round(O*360/k.length),de=[];for(let b=0;b<5;b++){let O=F+b*(E-F)/4,Z=U(O);de.push(`<line x1="${L.left}" y1="${Z.toFixed(1)}" x2="${(y-L.right).toFixed(1)}" y2="${Z.toFixed(1)}" class="kan-fan-grid"/>`),de.push(`<text x="${(L.left-8).toFixed(1)}" y="${(Z+4).toFixed(1)}" class="kan-fan-axis" text-anchor="end">${O.toFixed(2)}</text>`)}let he=[];e.forEach((b,O)=>{let Z=this.hrefForSubject(b,o),D=(b.namespace||"").split("@")[1]??"",H=w(O),G=Ke(a(b));he.push(`<a href="${u(Z)}" class="kan-fan-xtick"><line x1="${H.toFixed(1)}" y1="${L.top}" x2="${H.toFixed(1)}" y2="${(I-L.bottom).toFixed(1)}" class="kan-fan-vline"/><text x="${H.toFixed(1)}" y="${(I-L.bottom+20).toFixed(1)}" class="kan-fan-xlabel" text-anchor="middle">${re(D||b.name)}</text>`+(G?`<text x="${H.toFixed(1)}" y="${(I-L.bottom+36).toFixed(1)}" class="kan-fan-xdate" text-anchor="middle">${re(G)}</text>`:"")+"</a>")});let j=[];k.forEach((b,O)=>{if(!b.lower||!b.upper)return;let Z=B(b,O),D=[],H=[];for(let W=0;W<h;W++){let pe=b.upper[W],ie=b.lower[W];pe==null||ie===null||ie===void 0||(D.push(`${w(W).toFixed(1)},${U(pe).toFixed(1)}`),H.unshift(`${w(W).toFixed(1)},${U(ie).toFixed(1)}`))}let G=D.concat(H);G.length<3||j.push(`<polygon class="kan-fan-band" points="${G.join(" ")}" fill="hsl(${Z},65%,60%)"/>`)});let C=[];k.forEach((b,O)=>{let D=`hsl(${B(b,O)},65%,60%)`,H=[],G=[];b.points.forEach((W,pe)=>{if(W===null)return;let ie=w(pe),Q=U(W);H.push(`${ie.toFixed(1)},${Q.toFixed(1)}`),G.push(`<circle cx="${ie.toFixed(1)}" cy="${Q.toFixed(1)}" r="3.5" fill="${D}"/>`)}),H.length!==0&&C.push(`<g class="kan-fan-series" data-series="${u(b.key)}"><polyline points="${H.join(" ")}" fill="none" stroke="${D}" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/>`+G.join("")+"</g>")});let S=`<svg class="kan-fan-svg" viewBox="0 0 ${y} ${I}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">`+de.join("")+he.join("")+j.join("")+C.join("")+"</svg>",K=p?`${u(p)}=`:"",q=k.map((b,O)=>{let Z=B(b,O),D=b.points.filter(Q=>Q!==null),H=D.length?D[0]:void 0,G=D.length?D[D.length-1]:void 0,W="";if(G!==void 0&&H!==void 0){let Q=G-H;if(Math.abs(Q)>=.005){let tn=Q>0?"up":"down",sn=Q>0?"\u25B2":"\u25BC";W=` <span class="kan-fan-delta ${tn}">${Q>0?"+":""}${Q.toFixed(2)} ${sn}</span>`}else W=' <span class="kan-fan-delta flat">\u2014</span>'}let pe=G!==void 0?`${K}${G.toFixed(2)}`:"\u2014",ie=b.lastSubject?`<a href="${u(this.hrefForSubject(b.lastSubject,o))}">${u(b.label)}</a>`:u(b.label);return`<div class="kan-fan-legend-item" style="--kan-fan-hue:${Z}"><span class="kan-fan-swatch"></span><span class="kan-fan-legend-label">${ie}</span><span class="kan-fan-legend-cur">${pe}${W}</span></div>`});return`<section class="kan-fan"><div class="kan-fan-chart">${S}</div><div class="kan-fan-legend">${q.join("")}</div></section>`}renderResourceGrid(e,t,n){let s=P(e,Y);if(!s)return"<!-- LookRenderer.ResourceGrid: no look.source -->";let o=V(this.catalog,s),a=o?le(o).some(c=>{let l=c.subject.name;return l==="ObjectProperty"||l==="DatatypeProperty"||l==="Property"}):!1,r=[];if(a&&n){let c=this.readPropertyValueReferences(n,s);for(let l of c){let p=V(this.catalog,{publisher:l.subject.publisher,package_:l.subject.package_,name:l.subject.name,...l.subject.version?{version:l.subject.version}:{}});p&&r.push(p)}}else r=this.findInstancesOfClass(s);if(r.length===0)return`<!-- LookRenderer.ResourceGrid: no resources for ${s.publisher}/${s.package_}/${s.name} -->`;let i=[];for(let c of r){let l=$(c,N)??c.name,p=$(c,be),f=c.namespace||"",g=f.split("/")[1]?.split("@")[0]??"",h=f.split("@")[1]??"",k=h?this.parseVersion(h):void 0,m=fe.formatResourceUrl({publisher:X(c),package_:g,name:c.name,...k?{version:k}:{}},"=",{contextPublisher:t}),v=p?`<p class="kan-resource-card-subtitle">${u(p)}</p>`:"";i.push(`<a class="kan-resource-card" href="${u(m)}"><h3 class="kan-resource-card-title">${u(l)}</h3>${v}</a>`)}return`<section class="kan-resource-grid">
99
+ ${i.join(`
100
+ `)}
101
+ </section>`}parseVersion(e){let t=e.split(".").map(Number);if(!(t.length!==3||t.some(n=>Number.isNaN(n))))return{major:t[0],minor:t[1],patch:t[2]}}findInstancesOfClass(e){let t=[];for(let n of this.catalog){if(!(n instanceof ee))continue;le(n).map(a=>a.subject).some(a=>a.publisher===e.publisher&&a.package_===e.package_&&a.name===e.name)&&t.push(n)}return t}renderBreadcrumb(e,t,n){let o=(e.namespace||"").split("/");if(o.length<2)return"";let a=o[0],r=o[1]??"",i=r.split("@")[0]??"",c=r.split("@")[1]??"";if(!a||!i)return"";if(n?.bareOverview)return`<nav class="kan-breadcrumb"><ol>
102
+ <li><a href="/">${u(a)}</a></li>
103
+ <li aria-current="page">${u(i)}</li>
104
+ </ol></nav>`;let l=e.name,f=!!V(this.catalog,{publisher:a,package_:i,name:i}),g=c?`${i}@${c}`:i,h=c?`/${i}/${c}/${i}`:`/${i}/${i}`,k=e.name===i,m=[];return m.push(`<li><a href="/">${u(a)}</a></li>`),k?m.push(`<li aria-current="page">${u(g)}</li>`):(m.push(f?`<li><a href="${u(h)}">${u(g)}</a></li>`:`<li>${u(g)}</li>`),m.push(`<li aria-current="page">${u(l)}</li>`)),`<nav class="kan-breadcrumb"><ol>
105
+ ${m.join(`
106
+ `)}
107
+ </ol></nav>`}renderNavGroup(e,t){let n=this.findNavGroupForPublisher(t);if(!n)return"";let s=se(n,Ee);if(!(s instanceof z))return"";let o=s.object??[];if(o.length===0)return"";let a=[];for(let r of o){if(!(r instanceof A))continue;let i=V(this.catalog,{publisher:r.subject.publisher,package_:r.subject.package_,name:r.subject.name}),{href:c,label:l}=this.resolveNavEntry(r,i,t),p=`/${e.namespace?.split("/")[1]?.split("@")[0]}/${(e.namespace||"").split("@")[1]}/${e.name}`,f=c===p?' aria-current="page"':"";a.push(`<li><a class="kan-nav-link" href="${u(c)}"${f}>${u(l)}</a></li>`)}return`<nav class="kan-site-nav"><ul>
108
+ ${a.join(`
109
+ `)}
110
+ </ul></nav>`}resolveNavEntry(e,t,n){if(t&&le(t).map(i=>i.subject).some(i=>i.publisher===Oe.publisher&&i.package_===Oe.package_&&i.name===Oe.name)){let i=$(t,N),c=se(t,Be);if(c instanceof M&&c.object instanceof A){let l=c.object,p=this.readLabelForUri({publisher:l.subject.publisher,package_:l.subject.package_,name:l.subject.name});return{href:this.urlForReference(l,Be,n),label:i??p??l.subject.name}}}let s=fe.formatResourceUrl({publisher:e.subject.publisher,package_:e.subject.package_,...e.subject.version?{version:e.subject.version}:{},name:e.subject.name},"*",{contextPublisher:n}),o=t?$(t,N)??e.subject.name:e.subject.name;return{href:s,label:o}}findNavGroupForPublisher(e){for(let t of this.catalog){if(!(t instanceof ee)||!(t.namespace||"").startsWith(`${e}/`))continue;if(le(t).map(a=>a.subject).some(a=>a.publisher===_e.publisher&&a.package_===_e.package_&&a.name===_e.name))return t}}renderMarkdown(e,t,n){let s=P(e,Y);if(!s)return"<!-- LookRenderer.Markdown: no look.source -->";let o=se(t,s),a=new Map,r;if(o instanceof Ae?r=this.resolveMarkdownLinks(o,n,a):o instanceof J?r=o.object:r=this.readPropertyValueText(t,s),!r)return"";let i=Ne(r);for(let[c,l]of a){let p=new RegExp('(<a href="'+Xn(c)+'">)([^<]*)(</a>)',"g");i=i.replace(p,`$1<img class="kan-md-chip" src="${u(l)}" alt="" loading="lazy">$2$3`)}return`<section class="kan-markdown">
111
+ ${i}
112
+ </section>`}resolveMarkdownLinks(e,t,n){let s=e.object,o=[...e.links].sort((a,r)=>r.startOffset-a.startOffset);for(let a of o){let r;if(a.target){let i=a.target.subject,c=(a.displayText??this.readLabelForUri({publisher:i.publisher,package_:i.package_,name:i.name})??a.reference).replace(/[[\]]/g,""),l=fe.formatResourceUrl({publisher:i.publisher,package_:i.package_,name:i.name,...i.version?{version:i.version}:{}},"=",{contextPublisher:t});n&&n.set(l,`${l}.svg`),r=`[${c}](${l})`}else r=a.displayText??a.reference;s=s.slice(0,a.startOffset)+r+s.slice(a.endOffset)}return s}renderRawMarkdown(e){let t=this.findCascadedLook(e);if(!t)return;let n=Je(t.declaration),s=[];for(let o of n){let a=$e(o);if(!a||!R(a,He))continue;let r=P(o,Y);if(!r)continue;let i=this.readPropertyValueText(e,r);i&&s.push(i)}return s.length>0?s.join(`
113
+
114
+ `):void 0}renderHero(e,t,n){let s=['<header class="kan-hero">'],o=P(e,Wn);if(o){let l=this.readPropertyValueText(t,o);l&&s.push(`<span class="kan-hero-eyebrow">${u(l)}</span>`)}let a=P(e,Gn),r="";a&&(r=this.readPropertyValueText(t,a)??""),r||(r=t.name),s.push(`<h1 class="kan-hero-title">${u(r)}</h1>`);let i=P(e,zn);if(i){let l=this.readPropertyValueText(t,i);l&&s.push(`<p class="kan-hero-subtitle">${u(l)}</p>`)}let c=P(e,qe);if(c){let l=this.readPropertyValueReferences(t,c);if(l.length>0){let p=l.map(f=>this.renderBadge(f,qe,n)).join("");s.push(`<div class="kan-hero-badges">${p}</div>`)}}return s.push("</header>"),s.join(`
115
+ `)}renderPropertyList(e,t,n){let s=P(e,Y);if(!s)return"<!-- LookRenderer: PropertyList missing look.source -->";let o=this.readLabelForUri(s)??s.name,a=se(t,s),r=this.gatherValueItems(a),i=r.length>0?r.map(c=>`<li>${this.renderInlineValue(c,Y,n)}</li>`).join(""):'<li class="kan-empty">(no values)</li>';return['<section class="kan-property-list">',`<h3 class="kan-property-list-title">${u(o)}</h3>`,`<ul class="kan-property-list-items">${i}</ul>`,"</section>"].join(`
116
+ `)}renderBadgeRow(e,t,n){let s=P(e,Y);if(!s)return"<!-- LookRenderer: BadgeRow missing look.source -->";let o=this.readPropertyValueReferences(t,s);return o.length===0?"":`<div class="kan-badge-row">${o.map(r=>this.renderBadge(r,Y,n)).join("")}</div>`}renderChipRow(e,t,n){let s=Xe(e,Yn);if(s.length===0)return"<!-- LookRenderer: ChipRow has no look.chips -->";let o=[];for(let a of s){let r=se(t,a);if(!r)continue;let i=this.readLabelForUri(a)??a.name,c=this.renderStatementInlineValue(r,a,n);c&&o.push(`<span class="kan-chip"><span class="kan-chip-key">${u(i)}</span> <span class="kan-chip-val">${c}</span></span>`)}return o.length===0?"":`<div class="kan-chip-row">${o.join("")}</div>`}renderReferenceList(e,t,n){let s=Xe(e,Ee);if(s.length===0)return"<!-- LookRenderer: ReferenceList has no look.entries -->";let o=$(e,De),a=$(e,Tn),r=[];for(let i of s){let c=this.readPropertyValueReferences(t,i);if(c.length===0)continue;let l=this.readLabelForUri(i)??i.name;if(o){let p=c.map(f=>this.renderDetailRow(f,o,a,n)).filter(f=>f).join("");p&&r.push(`<dt>${u(l)}</dt><dd><ul class="kan-ref-rows">${p}</ul></dd>`)}else{let p=c.map(f=>this.renderReferenceLink(f,Ee,n)).join(", ");r.push(`<dt>${u(l)}</dt><dd>${p}</dd>`)}}return r.length===0?"":`<dl class="kan-reference-list">${r.join("")}</dl>`}renderDetailRow(e,t,n,s){let o=V(this.catalog,{publisher:e.subject.publisher,package_:e.subject.package_,name:e.subject.name,...e.subject.version?{version:e.subject.version}:{}});if(!o)return"";let a=this.resolvePath(o,t)??$(o,N)??o.name,r=this.hrefForSubject(o,s),i=this.svgUrlForSubject(o,s),c="";if(n){let l=this.resolvePath(o,n);l&&(c=`<span class="kan-ref-badge">${u(l)}</span>`)}return`<li class="kan-ref-row"><a class="kan-ref-rowlink" href="${u(r)}"><img class="kan-ref-icon" src="${u(i)}" alt="" loading="lazy"/><span class="kan-ref-text">${u(a)}</span>${c}</a></li>`}readPropertyValueText(e,t){let n=se(e,t);if(n){if(n instanceof J)return n.object;if(n instanceof M){let s=n.object;return this.readLabelForUri({publisher:s.subject.publisher,package_:s.subject.package_,name:s.subject.name})??s.subject.name}if(n instanceof z)return(n.object??[]).map(o=>o instanceof A?this.readLabelForUri({publisher:o.subject.publisher,package_:o.subject.package_,name:o.subject.name})??o.subject.name:o instanceof ne?o.name??"":String(o)).filter(o=>o).join(", ")}}readPropertyValueReferences(e,t){let n=se(e,t);if(!n)return[];if(n instanceof M)return[n.object];if(n instanceof z){let s=[];for(let o of n.object??[])o instanceof A&&s.push(o);return s}return[]}gatherValueItems(e){return e?e instanceof z?e.object??[]:e instanceof M?[e.object]:e instanceof ce?[e.object]:e instanceof J?[e.object]:[]:[]}renderInlineValue(e,t,n){return e instanceof A?this.renderReferenceLink(e,t,n):e instanceof ne?u(e.name??"(embedded)"):typeof e=="string"?u(e):typeof e=="number"||typeof e=="boolean"?u(String(e)):""}renderStatementInlineValue(e,t,n){return e instanceof J?u(e.object):e instanceof M?this.renderReferenceLink(e.object,t,n):e instanceof z?(e.object??[]).map(o=>this.renderInlineValue(o,t,n)).filter(o=>o).join(", "):""}renderReferenceLink(e,t,n){let s=this.readLabelForUri({publisher:e.subject.publisher,package_:e.subject.package_,name:e.subject.name})??e.subject.name,o=this.urlForReference(e,t,n);return`<a class="kan-link" href="${u(o)}">${u(s)}</a>`}renderBadge(e,t,n){let s=this.readLabelForUri({publisher:e.subject.publisher,package_:e.subject.package_,name:e.subject.name})??e.subject.name,o=this.readCommentForUri({publisher:e.subject.publisher,package_:e.subject.package_,name:e.subject.name}),a=this.urlForReference(e,t,n),r=o?` title="${u(o)}"`:"";return`<a class="kan-badge" href="${u(a)}"${r}>${u(s)}</a>`}urlForReference(e,t,n){let s=t?this.getUrlFormForProperty(t):"=";return fe.formatResourceUrl({publisher:e.subject.publisher,package_:e.subject.package_,...e.subject.version?{version:e.subject.version}:{},name:e.subject.name},s,{contextPublisher:n})}getUrlFormForProperty(e){let t=V(this.catalog,e);if(!t)return"=";let n=$(t,qn);return n==="*"||n==="^"||n==="~"||n==="="?n:"="}readLabelForUri(e){let t=V(this.catalog,e);if(t)return $(t,N)}readCommentForUri(e){let t=V(this.catalog,e);if(t)return $(t,be)}};function Pe(d){let e=new Map;for(let t of d.statement){if(!(t instanceof ce)||!ae(t,xe.publisher,xe.package_,xe.name))continue;let n=t.object;for(let s of n.statement){if(!(s instanceof J))continue;let o=s.predicate?.subject?.name;if(!o)continue;let a=s.object;e.has(o)||e.set(o,a)}}return e}function Re(d){for(let e of d.statement)if(e instanceof ce&&ae(e,ye.publisher,ye.package_,ye.name))return e.object}function Je(d){for(let e of d.statement){if(!(e instanceof z)||!ae(e,Ue.publisher,Ue.package_,Ue.name))continue;let t=[];for(let n of e.object??[])n instanceof ne&&t.push(n);return t}return[]}function $e(d){for(let e of d.statement)if(e instanceof M&&e.predicate?.subject?.name==="type"&&e.object instanceof A){let t=e.object.subject;return{publisher:t.publisher,package_:t.package_,name:t.name}}}function P(d,e){for(let t of d.statement)if(t instanceof M&&ae(t,e.publisher,e.package_,e.name)&&t.object instanceof A){let n=t.object.subject;return{publisher:n.publisher,package_:n.package_,name:n.name}}}function Xe(d,e){for(let t of d.statement){if(!(t instanceof z)||!ae(t,e.publisher,e.package_,e.name))continue;let n=[];for(let s of t.object??[])s instanceof A&&n.push({publisher:s.subject.publisher,package_:s.subject.package_,name:s.subject.name});return n}return[]}function se(d,e){for(let t of d.statement)if(ae(t,e.publisher,e.package_,e.name))return t}function $(d,e){for(let t of d.statement)if(t instanceof J&&ae(t,e.publisher,e.package_,e.name))return t.object}function Ze(d,e){for(let t of d.statement)if(t instanceof me&&ae(t,e.publisher,e.package_,e.name))return t.object}function le(d){let e=[];for(let t of d.statement)if(t instanceof M){if(t.predicate?.subject?.name!=="type")continue;t.object instanceof A&&e.push(t.object)}else if(t instanceof z){if(t.predicate?.subject?.name!=="type")continue;for(let n of t.object??[])n instanceof A&&e.push(n)}return e}function Se(d){let e=[];for(let t of d.statement)if(t instanceof M){if(t.predicate?.subject?.name!=="subClassOf")continue;t.object instanceof A&&e.push(t.object)}else if(t instanceof z){if(t.predicate?.subject?.name!=="subClassOf")continue;for(let n of t.object??[])n instanceof A&&e.push(n)}return e}function ue(d,e){let t=[];for(let n of d){if(!(n instanceof ee)||n.name!==e.name)continue;(n.namespace||"").startsWith(`${e.publisher}/${e.package_}@`)&&t.push(n)}return t}function V(d,e){let t="version"in e?e.version:void 0;if(t){let n=`${e.publisher}/${e.package_}@${t.major}.${t.minor}.${t.patch}`;for(let s of d)if(s instanceof ee&&s.name===e.name&&s.namespace===n)return s}for(let n of d){if(!(n instanceof ee)||n.name!==e.name)continue;if((n.namespace||"").startsWith(`${e.publisher}/${e.package_}@`))return n}}function ae(d,e,t,n){let s=d.predicate?.subject;return s?s.publisher===e&&s.package_===t&&s.name===n:!1}function R(d,e){return d.publisher===e.publisher&&d.package_===e.package_&&d.name===e.name}function ke(d){return`${d.publisher}/${d.package_}/${d.name}`}function Jn(d){return d.name==="Package"?{...Le}:d}function X(d){let e=d.namespace||"",t=e.indexOf("/");return t>=0?e.substring(0,t):e}function u(d){return d.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function Qe(d){let e=d.lastIndexOf(".");return e>=0?d.substring(e+1):d}function en(d,e){for(let t of d.statement)if(t.predicate?.subject?.name===e)return t}function re(d){return d.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function nn(d,e){return d.length<=e?d:d.slice(0,e).replace(/\s+\S*$/,"")+"\u2026"}function Xn(d){return d.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Zn(d){if(/^https?:\/\//i.test(d)){let e=d;try{e=new URL(d).hostname.replace(/^www\./,"")}catch{}return`<a class="kan-link" href="${u(d)}" target="_blank" rel="noopener">${u(e)} \u2197</a>`}return u(d)}function Ke(d){if(!d)return"";let e=/^(\d{4})-(\d{2})-(\d{2})/.exec(d);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)}`:d}export{Ne as a,Te as b};
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import{a as et,b as tt,c as rt,d as nt,e as ot,f as at,g as it,h as st,i as ct,j as lt}from"./chunk-IOJMTW4T.js";import{b as Xt}from"./chunk-DOAMDBQC.js";import{a as Xe,b as Ze,c as Qe,d as b,e as S,f as i}from"./chunk-RCI34BYO.js";import{a as Yt}from"./chunk-BFZZ6YGX.js";import{a as Te,b as je,c as Le,d as Fe,e as Ne}from"./chunk-5AH6GIPO.js";import{a as Be,b as De,c as Oe,d as Ae}from"./chunk-VQFL5C7Q.js";import{a as ut,b as pt,c as mt,d as ft}from"./chunk-NIJV5UYW.js";import{a as Ye,b as yt,c as gt,d as ht,e as bt}from"./chunk-4TJZIM7A.js";import{a as kt}from"./chunk-NIGFQYVA.js";import{A as Gt,B as Wt,C as Jt,D as qt,a as St,b as Ct,c as Pt,d as Rt,e as wt,f as xt,g as $t,h as vt,i as Et,j as Kt,k as Bt,l as It,m as Tt,n as jt,o as Lt,p as Ft,q as Nt,r as Dt,s as Ot,t as At,u as Ut,v as Mt,w as Vt,x as Ht,y as _t,z as zt}from"./chunk-SKTXJV4T.js";import"./chunk-FJ35VIV6.js";import{a as F,b as D,c as _e,d as We,e as Je,f as qe}from"./chunk-FMYLEPMC.js";import{a as Ue,b as j,c as L,d as N,e as Ve,f as He,g as O,h as A,i as U,j as M,k as V,l as H}from"./chunk-W6T7MOKY.js";import{a as Ie}from"./chunk-7CUTGGH3.js";import{a as Pe,b as Re,c as we,d as xe,e as $e,f as ve,g as Ee,h as Ke}from"./chunk-FQHALFRR.js";import{b as ze,c as Ge}from"./chunk-HEMBMX7T.js";import{a as Me}from"./chunk-FUUTGGJS.js";import{a as dt}from"./chunk-ODIECDN7.js";import{VersionOperator as io}from"@kanonak-protocol/types/document/models/enums";import{existsSync as yr,readFileSync as gr}from"fs";import{homedir as hr}from"os";import{join as kr}from"path";import{execFile as Zt}from"child_process";import{promisify as Qt}from"util";var C=Qt(Zt),P="kanonak",R="/usr/bin/security",p=class{async get(e){let r=i(e);try{let{stdout:n}=await C(R,["find-generic-password","-s",P,"-a",r,"-w"],{timeout:1e4});try{return JSON.parse(n.trim())}catch{throw new Error(`Stored credential for '${r}' is corrupted (not valid JSON).
1
+ import{a as et,b as tt,c as rt,d as nt,e as ot,f as at,g as it,h as st,i as ct,j as lt}from"./chunk-IOJMTW4T.js";import{b as Xt}from"./chunk-TSZRJZ4P.js";import{a as Xe,b as Ze,c as Qe,d as b,e as S,f as i}from"./chunk-RCI34BYO.js";import{a as Yt}from"./chunk-BFZZ6YGX.js";import{a as Te,b as je,c as Le,d as Fe,e as Ne}from"./chunk-5AH6GIPO.js";import{a as Be,b as De,c as Oe,d as Ae}from"./chunk-VQFL5C7Q.js";import{a as ut,b as pt,c as mt,d as ft}from"./chunk-NIJV5UYW.js";import{a as Ye,b as yt,c as gt,d as ht,e as bt}from"./chunk-4TJZIM7A.js";import{a as kt}from"./chunk-NIGFQYVA.js";import{A as Gt,B as Wt,C as Jt,D as qt,a as St,b as Ct,c as Pt,d as Rt,e as wt,f as xt,g as $t,h as vt,i as Et,j as Kt,k as Bt,l as It,m as Tt,n as jt,o as Lt,p as Ft,q as Nt,r as Dt,s as Ot,t as At,u as Ut,v as Mt,w as Vt,x as Ht,y as _t,z as zt}from"./chunk-SKTXJV4T.js";import"./chunk-FJ35VIV6.js";import{a as F,b as D,c as _e,d as We,e as Je,f as qe}from"./chunk-FMYLEPMC.js";import{a as Ue,b as j,c as L,d as N,e as Ve,f as He,g as O,h as A,i as U,j as M,k as V,l as H}from"./chunk-W6T7MOKY.js";import{a as Ie}from"./chunk-7CUTGGH3.js";import{a as Pe,b as Re,c as we,d as xe,e as $e,f as ve,g as Ee,h as Ke}from"./chunk-FQHALFRR.js";import{b as ze,c as Ge}from"./chunk-HEMBMX7T.js";import{a as Me}from"./chunk-FUUTGGJS.js";import{a as dt}from"./chunk-ODIECDN7.js";import{VersionOperator as io}from"@kanonak-protocol/types/document/models/enums";import{existsSync as yr,readFileSync as gr}from"fs";import{homedir as hr}from"os";import{join as kr}from"path";import{execFile as Zt}from"child_process";import{promisify as Qt}from"util";var C=Qt(Zt),P="kanonak",R="/usr/bin/security",p=class{async get(e){let r=i(e);try{let{stdout:n}=await C(R,["find-generic-password","-s",P,"-a",r,"-w"],{timeout:1e4});try{return JSON.parse(n.trim())}catch{throw new Error(`Stored credential for '${r}' is corrupted (not valid JSON).
2
2
  Run 'kanonak logout ${r}' then 'kanonak login ${r}' to fix.`)}}catch(n){if(X(n,44))return null;throw new Error(`macOS Keychain read failed for '${r}': ${w(n)}
3
3
  The Keychain may be locked or inaccessible.
4
4
  Try unlocking it via Keychain Access.app or running 'security unlock-keychain'.`)}}async store(e,r){let n=i(e),o=JSON.stringify(r);try{await C(R,["add-generic-password","-s",P,"-a",n,"-U","-w",o],{timeout:1e4})}catch(a){throw new Error(`macOS Keychain write failed for '${n}': ${w(a)}
@@ -278,6 +278,20 @@ export declare class LookRenderer {
278
278
  * "dated items × category" scatter.
279
279
  */
280
280
  private renderTimePlot;
281
+ /**
282
+ * Render a Details band — a generic, recursive property sheet for the
283
+ * instance. Walks every statement (skipping the meta ones surfaced
284
+ * elsewhere — rdf:type/label/comment and the look/derivation bindings):
285
+ * scalars render as values (URLs as external links), references as
286
+ * label-links to the target, embedded objects recurse into nested
287
+ * sheets, lists render each item. The "nice default" for any resource.
288
+ */
289
+ private renderDetails;
290
+ private detailRows;
291
+ private detailValue;
292
+ private detailEmbedded;
293
+ /** Predicates surfaced by other bands (or look-layer meta) — skipped by Details. */
294
+ private isMetaPredicate;
281
295
  /**
282
296
  * Render a PackageContents band — the default package listing. The page
283
297
  * instance is a Package self-resource; this enumerates every other
@@ -1,4 +1,4 @@
1
- import{b as E,c as F,d as f,f as M}from"../chunk-2JQMUZWN.js";import{a as X,b as ye}from"../chunk-DOAMDBQC.js";import{a as Oe}from"../chunk-BFZZ6YGX.js";import"../chunk-NIJV5UYW.js";import"../chunk-NIGFQYVA.js";import{a as Ue}from"../chunk-FJ35VIV6.js";import{a as C,c as Re,f as Ce}from"../chunk-FMYLEPMC.js";import{b as K,c as w,d as b,g as L,h as U,i as O,j,k as T,l as S}from"../chunk-W6T7MOKY.js";import{a as Le}from"../chunk-7CUTGGH3.js";import"../chunk-HEMBMX7T.js";import"../chunk-FUUTGGJS.js";var gt="kanonak.org",yt="document-ast",m=t=>({publisher:gt,package_:yt,name:t}),k={Document:m("Document"),Block:m("Block"),Inline:m("Inline"),StructuredValue:m("StructuredValue"),Heading:m("Heading"),Paragraph:m("Paragraph"),RawBlock:m("RawBlock"),Text:m("Text"),StructuredMap:m("StructuredMap"),StructuredEntry:m("StructuredEntry"),StructuredList:m("StructuredList"),StringScalar:m("StringScalar"),IntegerScalar:m("IntegerScalar"),EscapeHint:m("EscapeHint"),MediaType:m("MediaType"),metadata:m("metadata"),children:m("children"),level:m("level"),inlines:m("inlines"),text:m("text"),entries:m("entries"),key:m("key"),value:m("value"),escapeHint:m("escapeHint"),items:m("items"),stringValue:m("stringValue"),integerValue:m("integerValue"),rawContent:m("rawContent"),mediaType:m("mediaType"),mimeType:m("mimeType"),ESC_RAW:m("esc-raw"),ESC_YAML_SAFE:m("esc-yaml-safe"),ESC_TOML_STRING:m("esc-toml-string"),ESC_TOML_MULTILINE:m("esc-toml-multiline"),ESC_JSON:m("esc-json"),ESC_DYNAMODB_BOOL:m("esc-dynamodb-bool"),ESC_DYNAMODB_NUMBER:m("esc-dynamodb-number"),ESC_DYNAMODB_NULL:m("esc-dynamodb-null"),TEXT_PLAIN:m("text-plain"),TEXT_MARKDOWN:m("text-markdown"),TEXT_HTML:m("text-html"),TEXT_CSS:m("text-css"),APPLICATION_JSON:m("application-json"),TEXT_YAML:m("text-yaml"),IMAGE_SVG_XML:m("image-svg-xml"),ResourceLink:m("ResourceLink"),target:m("target"),linkLabel:m("linkLabel"),PropertyList:m("PropertyList"),propertyEntries:m("propertyEntries"),PropertyEntry:m("PropertyEntry"),propertyKey:m("propertyKey"),propertyValue:m("propertyValue"),Table:m("Table"),tableColumnLabels:m("tableColumnLabels"),tableRows:m("tableRows"),TableRow:m("TableRow"),tableCells:m("tableCells")};function Ne(t,e){return t.publisher===e.publisher&&t.package_===e.package_&&t.name===e.name}var Y=class{backendUri="kanonak.org/transformations/markdown-with-frontmatter";render(e,n){let r=kt(e.metadata,n),a=wt(e.children),u=["---",...r,"---","",a].join(`
1
+ import{b as E,c as F,d as f,f as M}from"../chunk-2JQMUZWN.js";import{a as X,b as ye}from"../chunk-TSZRJZ4P.js";import{a as Oe}from"../chunk-BFZZ6YGX.js";import"../chunk-NIJV5UYW.js";import"../chunk-NIGFQYVA.js";import{a as Ue}from"../chunk-FJ35VIV6.js";import{a as C,c as Re,f as Ce}from"../chunk-FMYLEPMC.js";import{b as K,c as w,d as b,g as L,h as U,i as O,j,k as T,l as S}from"../chunk-W6T7MOKY.js";import{a as Le}from"../chunk-7CUTGGH3.js";import"../chunk-HEMBMX7T.js";import"../chunk-FUUTGGJS.js";var gt="kanonak.org",yt="document-ast",m=t=>({publisher:gt,package_:yt,name:t}),k={Document:m("Document"),Block:m("Block"),Inline:m("Inline"),StructuredValue:m("StructuredValue"),Heading:m("Heading"),Paragraph:m("Paragraph"),RawBlock:m("RawBlock"),Text:m("Text"),StructuredMap:m("StructuredMap"),StructuredEntry:m("StructuredEntry"),StructuredList:m("StructuredList"),StringScalar:m("StringScalar"),IntegerScalar:m("IntegerScalar"),EscapeHint:m("EscapeHint"),MediaType:m("MediaType"),metadata:m("metadata"),children:m("children"),level:m("level"),inlines:m("inlines"),text:m("text"),entries:m("entries"),key:m("key"),value:m("value"),escapeHint:m("escapeHint"),items:m("items"),stringValue:m("stringValue"),integerValue:m("integerValue"),rawContent:m("rawContent"),mediaType:m("mediaType"),mimeType:m("mimeType"),ESC_RAW:m("esc-raw"),ESC_YAML_SAFE:m("esc-yaml-safe"),ESC_TOML_STRING:m("esc-toml-string"),ESC_TOML_MULTILINE:m("esc-toml-multiline"),ESC_JSON:m("esc-json"),ESC_DYNAMODB_BOOL:m("esc-dynamodb-bool"),ESC_DYNAMODB_NUMBER:m("esc-dynamodb-number"),ESC_DYNAMODB_NULL:m("esc-dynamodb-null"),TEXT_PLAIN:m("text-plain"),TEXT_MARKDOWN:m("text-markdown"),TEXT_HTML:m("text-html"),TEXT_CSS:m("text-css"),APPLICATION_JSON:m("application-json"),TEXT_YAML:m("text-yaml"),IMAGE_SVG_XML:m("image-svg-xml"),ResourceLink:m("ResourceLink"),target:m("target"),linkLabel:m("linkLabel"),PropertyList:m("PropertyList"),propertyEntries:m("propertyEntries"),PropertyEntry:m("PropertyEntry"),propertyKey:m("propertyKey"),propertyValue:m("propertyValue"),Table:m("Table"),tableColumnLabels:m("tableColumnLabels"),tableRows:m("tableRows"),TableRow:m("TableRow"),tableCells:m("tableCells")};function Ne(t,e){return t.publisher===e.publisher&&t.package_===e.package_&&t.name===e.name}var Y=class{backendUri="kanonak.org/transformations/markdown-with-frontmatter";render(e,n){let r=kt(e.metadata,n),a=wt(e.children),u=["---",...r,"---","",a].join(`
2
2
  `);return n?.trailingNewline&&(u.endsWith(`
3
3
  `)||(u+=`
4
4
  `)),u}};function kt(t,e){if(!t)return[];let n=new Map;for(let c of t.entries)n.set(ue(c.key),c);let r=new Map;if(e?.metadataRenames)for(let[c,l]of e.metadataRenames)r.set(ue(c),l);let i=(e?.metadataKeys??t.entries.map(c=>c.key)).map(ue),u=[];for(let c of i){let l=n.get(c);if(!l)continue;let p=r.get(c),y=ue(p??c),h=Ie(l.value,l.escapeHint);h!==void 0&&u.push(`${y}: ${h}`)}return u}function ue(t){let e=t.lastIndexOf(".");return e===-1?t:t.substring(e+1)||t}function Ie(t,e){switch(t.kind){case"StringScalar":return ht(t.stringValue,e);case"IntegerScalar":return String(t.integerValue);case"StructuredList":{let n=[];for(let r of t.items){let a=Ie(r,e);a!==void 0&&n.push(a)}return n.join(", ")}case"StructuredMap":return;default:return}}function ht(t,e){return!e||Ne(e,k.ESC_RAW)?t:Ne(e,k.ESC_YAML_SAFE)?bt(t):t}function bt(t){return t.includes(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kanonak-protocol/sdk",
3
- "version": "3.41.0",
3
+ "version": "3.43.0",
4
4
  "description": "Kanonak Protocol SDK - Document repository and parsing implementations for TypeScript",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -113,7 +113,7 @@
113
113
  "yaml-parser"
114
114
  ],
115
115
  "dependencies": {
116
- "@kanonak-protocol/types": "^3.41.0",
116
+ "@kanonak-protocol/types": "^3.43.0",
117
117
  "ignore": "^7.0.5",
118
118
  "js-yaml": "^4.1.0",
119
119
  "yaml": "^2.7.0"
@@ -1,116 +0,0 @@
1
- import{a as fe}from"./chunk-NIGFQYVA.js";import{a as ce,c as Ae}from"./chunk-FMYLEPMC.js";import{c as ne,d as A,g as te,h as me,i as Ke,j as H,k as pe,l as J}from"./chunk-W6T7MOKY.js";function Ne(d){let e=d.replace(/\r\n/g,`
2
- `).split(`
3
- `),t=[],n=0;for(;n<e.length;){let s=e[n];if(s.trim()===""){n++;continue}let o=/^(\s*)```(\S*)\s*$/.exec(s);if(o){let i=o[2],c=[];for(n++;n<e.length&&!/^(\s*)```\s*$/.test(e[n]);)c.push(e[n]),n++;n++;let l=Me(c.join(`
4
- `)),p=i?` class="language-${Ve(i)}"`:"";t.push(`<pre><code${p}>${l}</code></pre>`);continue}let a=/^(#{1,6})\s+(.*)$/.exec(s);if(a){let i=a[1].length,c=he(a[2].trim());t.push(`<h${i}>${c}</h${i}>`),n++;continue}if(s.includes("|")&&n+1<e.length&&Ce(e[n+1])){let i=ye(s),c=sn(e[n+1]);n+=2;let l=[];for(;n<e.length&&e[n].trim()!==""&&e[n].includes("|");)l.push(ye(e[n])),n++;t.push(an(i,c,l));continue}if(/^\s*[-*]\s+/.test(s)){let i=[];for(;n<e.length&&/^\s*[-*]\s+/.test(e[n]);){let c=[e[n].replace(/^\s*[-*]\s+/,"")];for(n++;n<e.length&&e[n].trim()!==""&&!/^\s*[-*]\s+/.test(e[n])&&!/^\s*\d+\.\s+/.test(e[n]);)c.push(e[n]),n++;n<e.length&&e[n].trim()===""&&n++,i.push(`<li>${he(c.join(" ").trim())}</li>`)}t.push(`<ul>
5
- ${i.join(`
6
- `)}
7
- </ul>`);continue}if(/^\s*\d+\.\s+/.test(s)){let i=[];for(;n<e.length&&/^\s*\d+\.\s+/.test(e[n]);){let c=[e[n].replace(/^\s*\d+\.\s+/,"")];for(n++;n<e.length&&e[n].trim()!==""&&!/^\s*\d+\.\s+/.test(e[n])&&!/^\s*[-*]\s+/.test(e[n]);)c.push(e[n]),n++;n<e.length&&e[n].trim()===""&&n++,i.push(`<li>${he(c.join(" ").trim())}</li>`)}t.push(`<ol>
8
- ${i.join(`
9
- `)}
10
- </ol>`);continue}let r=[s];for(n++;n<e.length&&e[n].trim()!==""&&!/^(#{1,6})\s+/.test(e[n])&&!/^(\s*)```/.test(e[n])&&!/^\s*[-*]\s+/.test(e[n])&&!/^\s*\d+\.\s+/.test(e[n])&&!(e[n].includes("|")&&n+1<e.length&&Ce(e[n+1]));)r.push(e[n]),n++;t.push(`<p>${he(r.join(" "))}</p>`)}return t.join(`
11
- `)}function Ce(d){return d.includes("-")?/^[\s|:-]+$/.test(d):!1}function ye(d){let e=d.trim();return e.startsWith("|")&&(e=e.slice(1)),e.endsWith("|")&&(e=e.slice(0,-1)),e.split("|").map(t=>t.trim())}function sn(d){return ye(d).map(e=>{let t=e.startsWith(":"),n=e.endsWith(":");return t&&n?"center":n?"right":t?"left":null})}function an(d,e,t){let n=a=>{let r=e[a];return r?` style="text-align:${r}"`:""},s=d.map((a,r)=>`<th${n(r)}>${he(a)}</th>`).join(""),o=t.map(a=>`<tr>${a.map((i,c)=>`<td${n(c)}>${he(i)}</td>`).join("")}</tr>`).join(`
12
- `);return`<table>
13
- <thead><tr>${s}</tr></thead>
14
- <tbody>
15
- ${o}
16
- </tbody>
17
- </table>`}function he(d){let e=Me(d);return e=e.replace(/`([^`\n]+)`/g,(t,n)=>`<code>${n}</code>`),e=e.replace(/\[([^\]]+)\]\(([^)\s]+)\)/g,(t,n,s)=>`<a href="${Ve(s)}">${n}</a>`),e=e.replace(/\*\*([^*\n]+)\*\*/g,(t,n)=>`<strong>${n}</strong>`),e=e.replace(/(^|[^*])\*([^*\n]+)\*(?!\*)/g,(t,n,s)=>`${n}<em>${s}</em>`),e=e.replace(/(^|[\s(])_([^_\n]+)_(?=[\s).,;:!?]|$)/g,(t,n,s)=>`${n}<em>${s}</em>`),e}function Me(d){return d.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function Ve(d){return d.replace(/"/g,"&quot;").replace(/&/g,"&amp;")}var Le={publisher:"kanonak.org",package_:"derivation",name:"look"},Oe={publisher:"kanonak.org",package_:"derivation",name:"tokens"},se={publisher:"kanonak.org",package_:"core-rdf",name:"Resource"},N={publisher:"kanonak.org",package_:"core-rdf",name:"label"},be={publisher:"kanonak.org",package_:"core-rdf",name:"comment"},rn={publisher:"kanonak.org",package_:"look",name:"Hero"},on={publisher:"kanonak.org",package_:"look",name:"PropertyList"},cn={publisher:"kanonak.org",package_:"look",name:"BadgeRow"},ln={publisher:"kanonak.org",package_:"look",name:"ChipRow"},un={publisher:"kanonak.org",package_:"look",name:"ReferenceList"},He={publisher:"kanonak.org",package_:"look",name:"Markdown"},$e={publisher:"kanonak.org",package_:"look",name:"NavGroup"},we={publisher:"kanonak.org",package_:"look",name:"NavLink"},Be={publisher:"kanonak.org",package_:"look",name:"target"},dn={publisher:"kanonak.org",package_:"look",name:"ResourceGrid"},pn={publisher:"kanonak.org",package_:"look",name:"Timeline"},fn={publisher:"kanonak.org",package_:"look",name:"VersionDiff"},kn={publisher:"kanonak.org",package_:"look",name:"Figure"},gn={publisher:"kanonak.org",package_:"look",name:"StatRow"},hn={publisher:"kanonak.org",package_:"look",name:"Horizon"},mn={publisher:"kanonak.org",package_:"look",name:"PackageContents"},xe={publisher:"kanonak.org",package_:"core-kanonak",name:"Package"},bn={publisher:"kanonak.org",package_:"look",name:"FeaturedResource"},$n={publisher:"kanonak.org",package_:"look",name:"PublisherPackages"},jn={publisher:"kanonak.org",package_:"look",name:"PublisherView"},_n={publisher:"kanonak.org",package_:"look",name:"Distribution"},vn={publisher:"kanonak.org",package_:"look",name:"alphaPath"},Rn={publisher:"kanonak.org",package_:"look",name:"betaPath"},Sn={publisher:"kanonak.org",package_:"look",name:"SectionHeading"},xn={publisher:"kanonak.org",package_:"look",name:"heading"},Kn={publisher:"kanonak.org",package_:"look",name:"note"},yn={publisher:"kanonak.org",package_:"look",name:"VersionDelta"},Ln={publisher:"kanonak.org",package_:"look",name:"TimePlot"},On={publisher:"kanonak.org",package_:"look",name:"laneBy"},wn={publisher:"kanonak.org",package_:"look",name:"stats"},Fn={publisher:"kanonak.org",package_:"look",name:"statPath"},Un={publisher:"kanonak.org",package_:"look",name:"statLabel"},De={publisher:"kanonak.org",package_:"look",name:"labelPath"},In={publisher:"kanonak.org",package_:"look",name:"badgePath"},Fe={publisher:"kanonak.org",package_:"look",name:"orderBy"},Ge={publisher:"kanonak.org",package_:"look",name:"track"},je={publisher:"kanonak.org",package_:"look",name:"metricPath"},Ue={publisher:"kanonak.org",package_:"look",name:"hueBy"},We={publisher:"kanonak.org",package_:"look",name:"lowerPath"},Ye={publisher:"kanonak.org",package_:"look",name:"upperPath"},Pn={publisher:"kanonak.org",package_:"look",name:"axisMin"},En={publisher:"kanonak.org",package_:"look",name:"axisMax"},Tn={publisher:"kanonak.org",package_:"look",name:"valueLabel"};var An={publisher:"kanonak.org",package_:"look",name:"semanticSvg"},Cn={publisher:"kanonak.org",package_:"look",name:"tierChip"},Nn={publisher:"kanonak.org",package_:"look",name:"tierIcon"},Mn={publisher:"kanonak.org",package_:"look",name:"tierCard"},Vn={publisher:"kanonak.org",package_:"look",name:"tierFull"};var Ie={publisher:"kanonak.org",package_:"look",name:"bands"},Hn={publisher:"kanonak.org",package_:"look",name:"title"},Bn={publisher:"kanonak.org",package_:"look",name:"eyebrow"},Dn={publisher:"kanonak.org",package_:"look",name:"subtitle"},ze={publisher:"kanonak.org",package_:"look",name:"badges"},W={publisher:"kanonak.org",package_:"look",name:"source"},Gn={publisher:"kanonak.org",package_:"look",name:"chips"},Pe={publisher:"kanonak.org",package_:"look",name:"entries"},Wn={publisher:"kanonak.org",package_:"look",name:"urlForm"},Te=class{constructor(e){this.catalog=e}catalog;findCascadedLook(e){let t=_e(e);if(t)return{declaration:t,sourceClass:{publisher:X(e),package_:(e.namespace||"").split("/")[1]?.split("@")[0]??"",name:e.name}};let n=new Set,s=le(e);for(;s.length>0;){let o=s.shift(),a=Yn(o.subject),r=ke(a);if(n.has(r))continue;n.add(r);let i=ue(this.catalog,a);for(let c of i){let l=_e(c);if(l)return{declaration:l,sourceClass:{publisher:a.publisher,package_:a.package_,name:a.name}}}for(let c of i)for(let l of Re(c))s.push(l)}if(!n.has(ke(se)))for(let o of ue(this.catalog,se)){let a=_e(o);if(a)return{declaration:a,sourceClass:{...se}}}}findCascadedTokens(e){let t=new Map;for(let[o,a]of Ee(e))t.has(o)||t.set(o,a);let n=new Set,s=le(e);for(;s.length>0;){let o=s.shift(),a=ke(o.subject);if(n.has(a))continue;n.add(a);let r=ue(this.catalog,o.subject);if(r.length!==0)for(let i of r){for(let[c,l]of Ee(i))t.has(c)||t.set(c,l);for(let c of Re(i))s.push(c)}}if(!n.has(ke(se))){let o=ue(this.catalog,se);for(let a of o)for(let[r,i]of Ee(a))t.has(r)||t.set(r,i)}return t}renderSvg(e){let t=$(e,N)??e.name,n=(t.trim().charAt(0)||"?").toUpperCase(),s=`${e.namespace??""}/${e.name}`,o={label:t,firstLetter:n,uri:s},a=this.collectCascadedSvgTiers(e),r=h=>this.applyPlaceholders(h,e,o),i=r(a.tierChip??""),c=r(a.tierIcon??""),l=r(a.tierCard??""),p=r(a.tierFull??""),g=[...this.findCascadedTokens(e)].map(([h,k])=>`--kan-${h}: ${k};`).join(" ");return`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400" width="400" height="400" style="${oe(g)}">
18
- <style>
19
- .tier-chip,.tier-icon,.tier-card{display:none}
20
- .tier-full{display:block}
21
- @media (max-width:400px){.tier-full{display:none}.tier-card{display:block}}
22
- @media (max-width:160px){.tier-card{display:none}.tier-icon{display:block}}
23
- @media (max-width:60px){.tier-icon{display:none}.tier-chip{display:block}}
24
- </style>
25
- <g class="tier-chip">${i}</g>
26
- <g class="tier-icon">${c}</g>
27
- <g class="tier-card">${l}</g>
28
- <g class="tier-full">${p}</g>
29
- </svg>`}applyPlaceholders(e,t,n){return e.replace(/\{\{([^}]+)\}\}/g,(s,o)=>{let a=o.trim();if(n[a]!==void 0)return oe(n[a]);let r=this.resolvePath(t,a);return r===void 0?`{{${a}}}`:oe(r)})}resolvePath(e,t){let n=t.split("/").map(r=>r.trim()).filter(r=>r.length>0);if(n.length===0)return;let s=e;for(let r=0;r<n.length-1;r++){if(!s)return;let i=Ze(n[r]),c=Qe(s,i);if(!c)return;if(c instanceof H&&c.object instanceof A){let l=M(this.catalog,c.object.subject);if(!l)return;s=l}else if(c instanceof pe)s=c.object;else return}if(!s)return;let o=Ze(n[n.length-1]),a=Qe(s,o);if(a){if(a instanceof te||a instanceof me||a instanceof Ke)return String(a.object);if(a instanceof H&&a.object instanceof A){let r=a.object,i=M(this.catalog,r.subject);return i?$(i,N)??r.subject.name:r.subject.name}}}collectCascadedSvgTiers(e){let t={},n=a=>{let r=ae(a,An);if(!(r instanceof pe))return;let i=r.object,c=$(i,Cn),l=$(i,Nn),p=$(i,Mn),f=$(i,Vn);t.tierChip===void 0&&c!==void 0&&(t.tierChip=c),t.tierIcon===void 0&&l!==void 0&&(t.tierIcon=l),t.tierCard===void 0&&p!==void 0&&(t.tierCard=p),t.tierFull===void 0&&f!==void 0&&(t.tierFull=f)};n(e);let s=new Set,o=le(e);for(;o.length>0;){let a=o.shift(),r=ke(a.subject);if(s.has(r))continue;s.add(r);let i=ue(this.catalog,a.subject);for(let c of i){n(c);for(let l of Re(c))o.push(l)}}if(!s.has(ke(se)))for(let a of ue(this.catalog,se))n(a);return t}renderStylesheet(e){let t=this.findCascadedTokens(e),n=[];for(let[a,r]of t)n.push(` --kan-${a}: ${r};`);let s=n.length>0?`:root {
30
- ${n.join(`
31
- `)}
32
- }`:":root { /* no tokens resolved */ }",o=this.findBaseStylesheet(X(e))??"";return`${s}
33
- ${o}`}findBaseStylesheet(e){let t="kanonak.org/site/content",n,s;for(let a of this.catalog){if(!(a instanceof ne)||a.name!=="base-stylesheet")continue;let r=a.namespace||"";r.startsWith(`${e}/look-styles@`)?n=a:r.startsWith("kanonak.org/look-styles@")&&(s=a)}let o=n??s;if(o)for(let a of o.statement){let r=a.predicate?.subject;if(!r)continue;if(`${r.publisher}/${r.package_}/${r.name}`===t&&a instanceof te)return a.object}}renderHtml(e){let t=this.findCascadedLook(e);if(!t)return`<!-- LookRenderer: no derivation.look found for ${e.namespace}/${e.name} -->`;let n=qe(t.declaration);if(n.length===0)return"<!-- LookRenderer: look declaration has no bands -->";let s=X(e),o=[];for(let a of n)o.push(this.renderBand(a,e,s));return o.join(`
34
- `)}renderPublisherIndex(e,t,n){let s=n?this.renderNavGroup(n,e):"",o=t.map(r=>{let i=r.comment?`<p class="kan-resource-card-subtitle">${u(r.comment)}</p>`:"";return`<a class="kan-resource-card" href="${u(r.href)}"><h3 class="kan-resource-card-title">${u(r.label)}</h3>${i}</a>`}).join(`
35
- `),a=`<header class="kan-hero">
36
- <h1 class="kan-hero-title">${u(e)}</h1>
37
- </header>
38
- <section class="kan-resource-grid">
39
- ${o}
40
- </section>`;return`<!doctype html>
41
- <html lang="en">
42
- <head>
43
- <meta charset="utf-8">
44
- <meta name="viewport" content="width=device-width, initial-scale=1">
45
- <title>${u(e)}</title>
46
- <link rel="stylesheet" href="index.css">
47
- </head>
48
- <body>
49
- ${s}
50
- <main class="kan-main">
51
- ${a}
52
- </main>
53
- </body>
54
- </html>
55
- `}renderPublisherIndexStylesheet(e){return e?this.renderStylesheet(e):""}hasDeclaredView(e){let t=this.findCascadedLook(e);return t?!(s=>s.publisher===se.publisher&&s.package_===se.package_&&s.name===se.name||s.publisher===xe.publisher&&s.package_===xe.package_&&s.name===xe.name)(t.sourceClass):!1}renderPackageVersionList(e,t,n){let s=X(n),o=this.renderNavGroup(n,s),a=this.renderBreadcrumb(n,s,{bareOverview:!0}),r=t.map(c=>`<a class="kan-resource-card" href="/${u(e)}/${u(c)}/"><h3 class="kan-resource-card-title">${u(c)}</h3></a>`).join(`
56
- `),i=`<header class="kan-hero">
57
- <span class="kan-hero-eyebrow">PACKAGE</span>
58
- <h1 class="kan-hero-title">${u(e)}</h1>
59
- </header>
60
- <section class="kan-resource-grid">
61
- ${r}
62
- </section>`;return`<!doctype html>
63
- <html lang="en">
64
- <head>
65
- <meta charset="utf-8">
66
- <meta name="viewport" content="width=device-width, initial-scale=1">
67
- <title>${u(e)}</title>
68
- <link rel="stylesheet" href="${u(n.name)}.css">
69
- </head>
70
- <body>
71
- ${o}
72
- ${a}
73
- <main class="kan-main">
74
- ${i}
75
- </main>
76
- </body>
77
- </html>
78
- `}renderDocument(e,t){let n=this.renderHtml(e),s=this.readPropertyValueText(e,N)??e.name,o=t?.rootIndex?"index.css":`${e.name}.css`,a=!t?.rootIndex&&this.hasSvgDerivation(e)?`<figure class="kan-figure"><img src="${u(e.name)}.svg" alt=""></figure>
79
- `:"",r=X(e),i=this.renderNavGroup(e,r),c=t?.rootIndex?"":this.renderBreadcrumb(e,r,t);return`<!doctype html>
80
- <html lang="en">
81
- <head>
82
- <meta charset="utf-8">
83
- <meta name="viewport" content="width=device-width, initial-scale=1">
84
- <title>${u(s)}</title>
85
- <link rel="stylesheet" href="${u(o)}">
86
- </head>
87
- <body>
88
- ${i}
89
- ${c}
90
- <main class="kan-main">
91
- ${a}${n}
92
- </main>
93
- </body>
94
- </html>
95
- `}hasSvgDerivation(e){let t=new Set,n=le(e);for(;n.length>0;){let s=n.shift(),o=ke(s.subject);if(t.has(o))continue;t.add(o);let a=M(this.catalog,s.subject);if(a){for(let r of a.statement)if(r instanceof J&&re(r,"kanonak.org","derivation","derivations")){for(let i of r.object??[])if(i instanceof ce)for(let c of i.statement){if(!(c instanceof H)||!re(c,"kanonak.org","derivation","format")||!(c.object instanceof A))continue;let l=c.object.subject;if(l.publisher==="kanonak.org"&&l.package_==="formats"&&l.name==="svg")return!0}}for(let r of Re(a))n.push(r)}}return!1}renderBand(e,t,n){let s=ve(e);return s?F(s,rn)?this.renderHero(e,t,n):F(s,on)?this.renderPropertyList(e,t,n):F(s,cn)?this.renderBadgeRow(e,t,n):F(s,ln)?this.renderChipRow(e,t,n):F(s,un)?this.renderReferenceList(e,t,n):F(s,He)?this.renderMarkdown(e,t,n):F(s,$e)?this.renderNavGroup(t,n):F(s,dn)?this.renderResourceGrid(e,n,t):F(s,pn)?this.renderTimeline(e,n):F(s,fn)?this.renderVersionDiff(e,n):F(s,kn)?this.renderFigure(e,t,n):F(s,gn)?this.renderStatRow(e,t):F(s,hn)?this.renderHorizon(e,t,n):F(s,mn)?this.renderPackageContents(t,n):F(s,bn)?this.renderFeaturedResource(e,n):F(s,$n)?this.renderPublisherPackages(n):F(s,_n)?this.renderDistribution(e,t):F(s,Sn)?this.renderSectionHeading(e):F(s,yn)?this.renderVersionDelta(e,t):F(s,Ln)?this.renderTimePlot(e,t):`<!-- LookRenderer: unsupported band ${s.publisher}/${s.package_}/${s.name} -->`:"<!-- LookRenderer: band has no rdf:type -->"}collectTrackedSeries(e,t,n,s){let{hueBy:o,lowerPath:a,upperPath:r}=s??{},i=new Map,c=e.length,l=(p,f)=>{let g=this.resolvePath(p,f);return g===void 0?NaN:parseFloat(g)};return e.forEach((p,f)=>{let g=this.readPropertyValueReferences(p,t);for(let h of g){let k=M(this.catalog,{publisher:h.subject.publisher,package_:h.subject.package_,name:h.subject.name,...h.subject.version?{version:h.subject.version}:{}});if(!k)continue;let m=h.subject.name,v=i.get(m);v||(v={key:m,label:$(k,N)??m,points:new Array(c).fill(null),...a?{lower:new Array(c).fill(null)}:{},...r?{upper:new Array(c).fill(null)}:{}},i.set(m,v));let S=l(k,n);if(Number.isFinite(S)&&(v.points[f]=S),a&&v.lower){let j=l(k,a);Number.isFinite(j)&&(v.lower[f]=j)}if(r&&v.upper){let j=l(k,r);Number.isFinite(j)&&(v.upper[f]=j)}if(o){let j=l(k,o);Number.isFinite(j)&&(v.hue=j)}v.lastSubject=k}}),[...i.values()]}hrefForSubject(e,t,n="="){let s=e.namespace||"",o=s.split("/")[1]?.split("@")[0]??"",a=s.split("@")[1]??"",r=a?this.parseVersion(a):void 0;return fe.formatResourceUrl({publisher:X(e),package_:o,name:e.name,...r?{version:r}:{}},n,{contextPublisher:t})}renderVersionDiff(e,t){let n=P(e,W);if(!n)return"<!-- LookRenderer.VersionDiff: no look.source -->";let s=$(e,je),o=P(e,Ge);if(!o||!s)return"<!-- LookRenderer.VersionDiff: needs look.track + look.metricPath -->";let a=P(e,Fe),r=$(e,Ue),i=this.findInstancesOfClass(n);if(i.length===0)return"<!-- LookRenderer.VersionDiff: no instances -->";let c=g=>a?this.readPropertyValueText(g,a)??"":"",l=i.slice().sort((g,h)=>c(g).localeCompare(c(h))),p=this.collectTrackedSeries(l,o,s,{hueBy:r});return p.length===0?"<!-- LookRenderer.VersionDiff: no tracked series -->":`<section class="kan-vdiff">${p.map((g,h)=>{let k=g.hue!==void 0?g.hue:Math.round(h*360/p.length),m=g.points.filter(L=>L!==null);if(m.length===0)return"";let v=m[0],S=m[m.length-1],j=S-v,y;if(Math.abs(j)>=.005){let L=j>0?"up":"down",O=j>0?"\u25B2":"\u25BC";y=`<span class="kan-vdiff-delta ${L}">${j>0?"+":""}${j.toFixed(2)} ${O}</span>`}else y='<span class="kan-vdiff-delta flat">\u2014</span>';let E=g.lastSubject?`<a href="${u(this.hrefForSubject(g.lastSubject,t))}">${u(g.label)}</a>`:u(g.label);return`<div class="kan-vdiff-row" style="--kan-vdiff-hue:${k}"><span class="kan-vdiff-label">${E}</span><span class="kan-vdiff-start">${v.toFixed(2)}</span>`+this.sparkline(g.points,k)+`<span class="kan-vdiff-end">${S.toFixed(2)}</span>`+y+"</div>"}).join("")}</section>`}sparkline(e,t){let a=`hsl(${t},65%,60%)`,r=e.filter(m=>m!==null);if(r.length===0)return'<svg class="kan-vdiff-spark" viewBox="0 0 132 30" xmlns="http://www.w3.org/2000/svg"></svg>';let i=Math.min(...r),l=Math.max(...r)-i,p=e.length,f=m=>p<=1?132/2:4+m/(p-1)*124,g=m=>l<1e-9?30/2:26-(m-i)/l*22,h=[],k=[];return e.forEach((m,v)=>{if(m===null)return;let S=f(v),j=g(m);h.push(`${S.toFixed(1)},${j.toFixed(1)}`),k.push(`<circle cx="${S.toFixed(1)}" cy="${j.toFixed(1)}" r="2" fill="${a}"/>`)}),`<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="${a}" stroke-width="1.5" stroke-linejoin="round" stroke-linecap="round"/>`+k.join("")+"</svg>"}svgUrlForSubject(e,t,n="="){return`${this.hrefForSubject(e,t,n)}.svg`}renderFigure(e,t,n){let s=t,o=P(e,W);if(o){let i=M(this.catalog,o);i&&(s=i)}let a=this.svgUrlForSubject(s,n),r=$(s,N)??s.name;return`<figure class="kan-figure"><img class="kan-figure-img" src="${u(a)}" alt="${u(r)}" loading="lazy"/></figure>`}renderStatRow(e,t){let n=ae(e,wn),s=this.gatherValueItems(n).filter(a=>a instanceof ce);if(s.length===0)return"<!-- LookRenderer.StatRow: no look.stats -->";let o=[];for(let a of s){let r=$(a,Fn);if(!r)continue;let i=this.resolvePath(t,r);if(i===void 0)continue;let c=$(a,Un)??"";o.push('<div class="kan-stat">'+(c?`<span class="kan-stat-label">${u(c)}</span>`:"")+`<span class="kan-stat-val">${u(i)}</span></div>`)}return o.length===0?"":`<div class="kan-stat-row">${o.join("")}</div>`}renderHorizon(e,t,n){let s=P(e,W);if(!s)return"<!-- LookRenderer.Horizon: no look.source -->";let o=this.gatherValueItems(ae(t,s)).filter(r=>r instanceof ce);return o.length===0?"":`<section class="kan-horizon">${o.map(r=>this.renderConditionNode(r,n,0)).join("")}</section>`}renderConditionNode(e,t,n){let s=ve(e),o=s?this.readLabelForUri({publisher:s.publisher,package_:s.package_,name:s.name})??s.name:"Condition",a=[],r=[];for(let f of e.statement){let g=f.predicate?.subject;if(!g||g.name==="type")continue;let h=this.readLabelForUri({publisher:g.publisher,package_:g.package_,name:g.name})??g.name;if(f instanceof te||f instanceof me||f instanceof Ke)a.push(`<div class="kan-cond-field"><span class="kan-cond-key">${u(h)}</span><span class="kan-cond-v">${u(String(f.object))}</span></div>`);else if(f instanceof H&&f.object instanceof A){let k=f.object.subject,m=this.readLabelForUri({publisher:k.publisher,package_:k.package_,name:k.name})??k.name;a.push(`<div class="kan-cond-field"><span class="kan-cond-key">${u(h)}</span><span class="kan-cond-v">${u(m)}</span></div>`)}else if(f instanceof pe)r.push(this.renderConditionNode(f.object,t,n+1));else if(f instanceof J)for(let k of f.object??[])k instanceof ce&&r.push(this.renderConditionNode(k,t,n+1))}let i=a.length?`<div class="kan-cond-fields">${a.join("")}</div>`:"",c=r.length?`<div class="kan-cond-children">${r.join("")}</div>`:"",l=r.length>0,p=l?`<span class="kan-cond-op">${u(o)}</span>`:`<div class="kan-cond-type">${u(o)}</div>`;return`<div class="kan-cond ${l?"kan-cond-branch":"kan-cond-leaf"}">${p}${i}${c}</div>`}renderSectionHeading(e){let t=e,n=$(t,xn);if(!n)return"<!-- LookRenderer.SectionHeading: no look.heading -->";let s=$(t,Kn);return`<div class="kan-section"><h2 class="kan-section-title">${u(n)}</h2>`+(s?`<p class="kan-section-note">${u(s)}</p>`:"")+"</div>"}renderVersionDelta(e,t){let s=$(e,je);if(!s)return"<!-- LookRenderer.VersionDelta: no look.metricPath -->";let o=w=>{let U=this.resolvePath(w,s),Y=U===void 0?NaN:parseFloat(U);return Number.isFinite(Y)?Y:void 0},a=o(t);if(a===void 0)return"";let r=w=>this.parseVersion((w.namespace||"").split("@")[1]??"")??{major:0,minor:0,patch:0},i=(w,U)=>w.major-U.major||w.minor-U.minor||w.patch-U.patch,c={publisher:X(t),package_:(t.namespace||"").split("/")[1]?.split("@")[0]??"",name:t.name},l=r(t),p,f;for(let w of ue(this.catalog,c)){let U=r(w);i(U,l)<0&&(!f||i(U,f)>0)&&(p=w,f=U)}if(!p||!f)return'<div class="kan-delta kan-delta-first">First tracked in this version</div>';let g=o(p);if(g===void 0)return"";let h=a-g,k=Math.abs(h)<.005?"flat":h>0?"up":"down",m=k==="up"?"\u25B2":k==="down"?"\u25BC":"\u2014",v=k==="up"?"#34d399":k==="down"?"#f87171":"var(--kan-text-faint)",S=`${f.major}.${f.minor}.${f.patch}`,j=320,y=46,E=14,L=30,O=w=>E+Math.min(1,Math.max(0,w))*(j-2*E),K=O(g),T=O(a),Z=`<svg class="kan-delta-track" viewBox="0 0 ${j} ${y}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img"><line x1="${E}" y1="${L}" x2="${j-E}" y2="${L}" class="kan-delta-base"/><line x1="${K.toFixed(1)}" y1="${L}" x2="${T.toFixed(1)}" y2="${L}" stroke="${v}" stroke-width="3"/><circle cx="${K.toFixed(1)}" cy="${L}" r="4" class="kan-delta-prev"/><circle cx="${T.toFixed(1)}" cy="${L}" r="5.5" fill="${v}"/><text x="${K.toFixed(1)}" y="${L-9}" text-anchor="middle" class="kan-delta-tick kan-delta-tick-prev">${g.toFixed(2)}</text><text x="${T.toFixed(1)}" y="${L+17}" text-anchor="middle" class="kan-delta-tick">${a.toFixed(2)}</text></svg>`;return`<div class="kan-delta"><div class="kan-delta-head"><span class="kan-delta-vs">vs ${u(S)}</span><span class="kan-delta-badge ${k}">${h>0?"+":""}${h.toFixed(2)} ${m}</span></div>`+Z+"</div>"}renderTimePlot(e,t){let n=P(e,W),s=P(e,Fe);if(!n||!s)return"<!-- LookRenderer.TimePlot: needs look.source + look.orderBy -->";let o=e,a=$(o,On),r=$(o,De),i=[];for(let _ of this.readPropertyValueReferences(t,n)){let C=M(this.catalog,{publisher:_.subject.publisher,package_:_.subject.package_,name:_.subject.name,..._.subject.version?{version:_.subject.version}:{}});if(!C)continue;let z=this.readPropertyValueText(C,s)??"",R=Date.parse(z);if(!Number.isFinite(R))continue;let x=a?this.resolvePath(C,a)??"":"",q=(r?this.resolvePath(C,r):void 0)??$(C,N)??C.name;i.push({t:R,dateStr:z,lane:x,label:q})}if(i.length===0)return"<!-- LookRenderer.TimePlot: no dated points -->";let c=[];for(let _ of i)c.includes(_.lane)||c.push(_.lane);let l=Math.min(...i.map(_=>_.t)),p=Math.max(...i.map(_=>_.t));p===l&&(p=l+1);let f=c.some(_=>_),g=720,h=f?96:16,k=18,m=12,v=24,S=36,j=m+c.length*S+v,y=h,E=g-k,L=E-y,O=_=>y+(_-l)/(p-l)*L,K=_=>m+_*S+S/2,T=_=>Math.round(_*360/Math.max(1,c.length)),Z=[];c.forEach((_,C)=>{let z=K(C);Z.push(`<line x1="${y}" y1="${z.toFixed(1)}" x2="${E}" y2="${z.toFixed(1)}" class="kan-plot-guide"/>`),_&&Z.push(`<text x="${(h-8).toFixed(1)}" y="${(z+4).toFixed(1)}" text-anchor="end" class="kan-plot-lane">${oe(_)}</text>`)});let w={},U=[];for(let _ of i){let C=c.indexOf(_.lane),R=((w[_.lane]=(w[_.lane]??0)+1)%3-1)*7,x=O(_.t),q=K(C)+R,b=`${Se(_.dateStr)} \xB7 ${_.label}`;U.push(`<circle cx="${x.toFixed(1)}" cy="${q.toFixed(1)}" r="5" fill="hsl(${T(C)},65%,60%)" class="kan-plot-pt"><title>${oe(b)}</title></circle>`)}let Y=`<text x="${y}" y="${(j-6).toFixed(1)}" text-anchor="start" class="kan-plot-axis">${oe(Se(new Date(l).toISOString()))}</text><text x="${E}" y="${(j-6).toFixed(1)}" text-anchor="end" class="kan-plot-axis">${oe(Se(new Date(p).toISOString()))}</text>`;return`<section class="kan-plot">${`<svg class="kan-plot-svg" viewBox="0 0 ${g} ${j}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">`+Z.join("")+U.join("")+Y+"</svg>"}</section>`}renderPackageContents(e,t){let n=e.namespace||"";if(!n)return"";let s=this.catalog.filter(a=>a instanceof ne&&a.namespace===n&&a.name!==e.name);return s.length===0?`<!-- LookRenderer.PackageContents: no members in ${n} -->`:(s.sort((a,r)=>{let i=$(a,N)??a.name,c=$(r,N)??r.name;return i.localeCompare(c)}),`<section class="kan-pkg-grid">${s.map(a=>{let r=$(a,N)??a.name,i=$(a,be),c=i?en(i,160):"",l=this.hrefForSubject(a,t),p=this.svgUrlForSubject(a,t);return`<a class="kan-pkg-card" href="${u(l)}"><img class="kan-pkg-card-svg" src="${u(p)}" alt="" loading="lazy"/><span class="kan-pkg-card-body"><span class="kan-pkg-card-title">${u(r)}</span>`+(c?`<span class="kan-pkg-card-comment">${u(c)}</span>`:"")+"</span></a>"}).join("")}</section>`)}renderFeaturedResource(e,t){let n=P(e,W);if(!n)return"<!-- LookRenderer.FeaturedResource: no look.source -->";let s=ue(this.catalog,n),o=c=>this.parseVersion((c.namespace||"").split("@")[1]??"")??{major:0,minor:0,patch:0},a=s.length>0?s.slice().sort((c,l)=>{let p=o(c),f=o(l);return f.major-p.major||f.minor-p.minor||f.patch-p.patch})[0]:M(this.catalog,n);if(!a)return`<!-- LookRenderer.FeaturedResource: ${n.publisher}/${n.package_}/${n.name} not found -->`;let r=this.renderHtml(a),i=this.hrefForSubject(a,t);return`<section class="kan-featured"><a class="kan-featured-permalink" href="${u(i)}">View full resource \u2192</a>`+r+"</section>"}renderDistribution(e,t){let n=e,s=R=>{let x=$(n,R);if(!x)return;let q=this.resolvePath(t,x),b=q===void 0?NaN:parseFloat(q);return Number.isFinite(b)?b:void 0},o=s(vn),a=s(Rn);if(o===void 0||a===void 0||o<=0||a<=0)return"<!-- LookRenderer.Distribution: needs resolvable alphaPath + betaPath (> 0) -->";let r=s(je)??o/(o+a),i=s(We),c=s(Ye),l=s(Ue),p=l!==void 0?`hsl(${l},65%,60%)`:"var(--kan-accent)",f=R=>Number.isInteger(R)?String(R):R.toFixed(1),g=280,h=168,k={top:14,right:14,bottom:24,left:14},m=g-k.left-k.right,v=h-k.top-k.bottom,S=120,j=1e-4,y=[],E=[],L=0;for(let R=0;R<=S;R++){let x=R/S;x<j?x=j:x>1-j&&(x=1-j);let q=Math.exp((o-1)*Math.log(x)+(a-1)*Math.log(1-x));y.push(x),E.push(q),q>L&&(L=q)}let O=R=>k.left+Math.min(1,Math.max(0,R))*m,K=R=>k.top+(1-(L>0?R/L:0))*v,T=k.top+v,Z=y.map((R,x)=>`${O(R).toFixed(1)},${K(E[x]).toFixed(1)}`),w=`M${O(0).toFixed(1)},${T.toFixed(1)} L${Z.join(" L")} L${O(1).toFixed(1)},${T.toFixed(1)} Z`,U="";if(i!==void 0&&c!==void 0&&c>i){let R=[`${O(i).toFixed(1)},${T.toFixed(1)}`];for(let x=0;x<=S;x++)y[x]>=i&&y[x]<=c&&R.push(`${O(y[x]).toFixed(1)},${K(E[x]).toFixed(1)}`);R.push(`${O(c).toFixed(1)},${T.toFixed(1)}`),U=`<path d="M${R.join(" L")} Z" fill="${p}" fill-opacity="0.3"/>`}let Y=O(r),ge=`<line x1="${Y.toFixed(1)}" y1="${k.top.toFixed(1)}" x2="${Y.toFixed(1)}" y2="${T.toFixed(1)}" stroke="${p}" stroke-width="1.5" stroke-dasharray="3 3"/><text x="${Y.toFixed(1)}" y="${(k.top-3).toFixed(1)}" text-anchor="middle" class="kan-dist-mean">\u03BC ${r.toFixed(2)}</text>`,_=`<text x="${O(0).toFixed(1)}" y="${(T+15).toFixed(1)}" text-anchor="start" class="kan-dist-axis">0</text><text x="${O(1).toFixed(1)}" y="${(T+15).toFixed(1)}" text-anchor="end" class="kan-dist-axis">1</text>`,C=`<svg class="kan-dist-svg" viewBox="0 0 ${g} ${h}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img"><line x1="${k.left}" y1="${T.toFixed(1)}" x2="${(g-k.right).toFixed(1)}" y2="${T.toFixed(1)}" class="kan-dist-base"/><path d="${w}" fill="${p}" fill-opacity="0.12"/>`+U+`<polyline points="${Z.join(" ")}" fill="none" stroke="${p}" stroke-width="2"/>`+ge+_+"</svg>",z=i!==void 0&&c!==void 0?` \xB7 95% CI [${i.toFixed(2)}\u2013${c.toFixed(2)}]`:"";return`<figure class="kan-dist">${C}<figcaption class="kan-dist-caption">Beta(${f(o)}, ${f(a)})${z}</figcaption></figure>`}renderPublisherPackages(e){let t=new Map,n=r=>this.parseVersion((r.namespace||"").split("@")[1]??"")??{major:0,minor:0,patch:0},s=(r,i)=>r.major>i.major||r.major===i.major&&(r.minor>i.minor||r.minor===i.minor&&r.patch>i.patch);for(let r of this.catalog){if(!(r instanceof ne)||X(r)!==e)continue;let i=(r.namespace||"").split("/")[1]?.split("@")[0]??"";if(!i||r.name!==i)continue;let c=t.get(i);(!c||s(n(r),n(c)))&&t.set(i,r)}let o=[...t.entries()].sort((r,i)=>r[0].localeCompare(i[0]));return o.length===0?"":`<section class="kan-pkg-grid">${o.map(([r,i])=>{let c=$(i,N)??r,l=$(i,be),p=l?en(l,160):"",f=this.svgUrlForSubject(i,e);return`<a class="kan-pkg-card" href="/${u(r)}"><img class="kan-pkg-card-svg" src="${u(f)}" alt="" loading="lazy"/><span class="kan-pkg-card-body"><span class="kan-pkg-card-title">${u(c)}</span>`+(p?`<span class="kan-pkg-card-comment">${u(p)}</span>`:"")+"</span></a>"}).join("")}</section>`}findPublisherRootView(e){for(let t of this.catalog){if(!(t instanceof ne)||X(t)!==e)continue;let n=_e(t);if(!n)continue;let s=ve(n);if(s&&F(s,jn))return t}}renderTimeline(e,t){let n=P(e,W);if(!n)return"<!-- LookRenderer.Timeline: no look.source -->";let s=P(e,Fe),o=this.findInstancesOfClass(n);if(o.length===0)return"<!-- LookRenderer.Timeline: no instances -->";let a=p=>s?this.readPropertyValueText(p,s)??"":"",r=o.slice().sort((p,f)=>a(p).localeCompare(a(f))),i=P(e,Ge),c=$(e,je);return i&&c?this.renderTrajectoryChart(r,i,c,e,t,a):`<section class="kan-timeline"><ol>
96
- ${r.map(p=>{let f=p.namespace||"",g=f.split("/")[1]?.split("@")[0]??"",h=f.split("@")[1]??"",k=h?this.parseVersion(h):void 0,m=fe.formatResourceUrl({publisher:X(p),package_:g,name:p.name,...k?{version:k}:{}},"=",{contextPublisher:t}),v=a(p),S=v?`<span class="kan-timeline-date">${u(v)}</span>`:"",j=h||p.name;return`<li class="kan-timeline-node"><a href="${u(m)}"><span class="kan-timeline-key">${u(j)}</span>${S}</a></li>`}).join(`
97
- `)}
98
- </ol></section>`}renderTrajectoryChart(e,t,n,s,o,a){let r=s,i=$(r,Ue),c=$(r,We),l=$(r,Ye),p=$(r,Tn),f=Xe(r,Pn),g=Xe(r,En),h=e.length,k=this.collectTrackedSeries(e,t,n,{hueBy:i,lowerPath:c,upperPath:l});if(k.length===0)return"<!-- LookRenderer.Timeline: no tracked series -->";let m=[];for(let b of k){for(let I of b.points)I!==null&&m.push(I);for(let I of b.lower??[])I!==null&&m.push(I);for(let I of b.upper??[])I!==null&&m.push(I)}if(m.length===0)return"<!-- LookRenderer.Timeline: no metric values -->";let v=Math.min(...m),S=Math.max(...m);S-v<1e-9&&(v-=.5,S+=.5);let j=(S-v)*.08,y=f!==void 0?f:v-j,E=g!==void 0?g:S+j;E-y<1e-9&&(E=y+1);let L=1e3,O=440,K={top:28,right:24,bottom:56,left:52},T=L-K.left-K.right,Z=O-K.top-K.bottom,w=b=>h<=1?K.left+T/2:K.left+b/(h-1)*T,U=b=>K.top+(1-(b-y)/(E-y))*Z,Y=(b,I)=>b.hue!==void 0?b.hue:Math.round(I*360/k.length),ge=[];for(let b=0;b<5;b++){let I=y+b*(E-y)/4,Q=U(I);ge.push(`<line x1="${K.left}" y1="${Q.toFixed(1)}" x2="${(L-K.right).toFixed(1)}" y2="${Q.toFixed(1)}" class="kan-fan-grid"/>`),ge.push(`<text x="${(K.left-8).toFixed(1)}" y="${(Q+4).toFixed(1)}" class="kan-fan-axis" text-anchor="end">${I.toFixed(2)}</text>`)}let _=[];e.forEach((b,I)=>{let Q=this.hrefForSubject(b,o),B=(b.namespace||"").split("@")[1]??"",V=w(I),D=Se(a(b));_.push(`<a href="${u(Q)}" class="kan-fan-xtick"><line x1="${V.toFixed(1)}" y1="${K.top}" x2="${V.toFixed(1)}" y2="${(O-K.bottom).toFixed(1)}" class="kan-fan-vline"/><text x="${V.toFixed(1)}" y="${(O-K.bottom+20).toFixed(1)}" class="kan-fan-xlabel" text-anchor="middle">${oe(B||b.name)}</text>`+(D?`<text x="${V.toFixed(1)}" y="${(O-K.bottom+36).toFixed(1)}" class="kan-fan-xdate" text-anchor="middle">${oe(D)}</text>`:"")+"</a>")});let C=[];k.forEach((b,I)=>{if(!b.lower||!b.upper)return;let Q=Y(b,I),B=[],V=[];for(let G=0;G<h;G++){let de=b.upper[G],ie=b.lower[G];de==null||ie===null||ie===void 0||(B.push(`${w(G).toFixed(1)},${U(de).toFixed(1)}`),V.unshift(`${w(G).toFixed(1)},${U(ie).toFixed(1)}`))}let D=B.concat(V);D.length<3||C.push(`<polygon class="kan-fan-band" points="${D.join(" ")}" fill="hsl(${Q},65%,60%)"/>`)});let z=[];k.forEach((b,I)=>{let B=`hsl(${Y(b,I)},65%,60%)`,V=[],D=[];b.points.forEach((G,de)=>{if(G===null)return;let ie=w(de),ee=U(G);V.push(`${ie.toFixed(1)},${ee.toFixed(1)}`),D.push(`<circle cx="${ie.toFixed(1)}" cy="${ee.toFixed(1)}" r="3.5" fill="${B}"/>`)}),V.length!==0&&z.push(`<g class="kan-fan-series" data-series="${u(b.key)}"><polyline points="${V.join(" ")}" fill="none" stroke="${B}" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/>`+D.join("")+"</g>")});let R=`<svg class="kan-fan-svg" viewBox="0 0 ${L} ${O}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">`+ge.join("")+_.join("")+C.join("")+z.join("")+"</svg>",x=p?`${u(p)}=`:"",q=k.map((b,I)=>{let Q=Y(b,I),B=b.points.filter(ee=>ee!==null),V=B.length?B[0]:void 0,D=B.length?B[B.length-1]:void 0,G="";if(D!==void 0&&V!==void 0){let ee=D-V;if(Math.abs(ee)>=.005){let nn=ee>0?"up":"down",tn=ee>0?"\u25B2":"\u25BC";G=` <span class="kan-fan-delta ${nn}">${ee>0?"+":""}${ee.toFixed(2)} ${tn}</span>`}else G=' <span class="kan-fan-delta flat">\u2014</span>'}let de=D!==void 0?`${x}${D.toFixed(2)}`:"\u2014",ie=b.lastSubject?`<a href="${u(this.hrefForSubject(b.lastSubject,o))}">${u(b.label)}</a>`:u(b.label);return`<div class="kan-fan-legend-item" style="--kan-fan-hue:${Q}"><span class="kan-fan-swatch"></span><span class="kan-fan-legend-label">${ie}</span><span class="kan-fan-legend-cur">${de}${G}</span></div>`});return`<section class="kan-fan"><div class="kan-fan-chart">${R}</div><div class="kan-fan-legend">${q.join("")}</div></section>`}renderResourceGrid(e,t,n){let s=P(e,W);if(!s)return"<!-- LookRenderer.ResourceGrid: no look.source -->";let o=M(this.catalog,s),a=o?le(o).some(c=>{let l=c.subject.name;return l==="ObjectProperty"||l==="DatatypeProperty"||l==="Property"}):!1,r=[];if(a&&n){let c=this.readPropertyValueReferences(n,s);for(let l of c){let p=M(this.catalog,{publisher:l.subject.publisher,package_:l.subject.package_,name:l.subject.name,...l.subject.version?{version:l.subject.version}:{}});p&&r.push(p)}}else r=this.findInstancesOfClass(s);if(r.length===0)return`<!-- LookRenderer.ResourceGrid: no resources for ${s.publisher}/${s.package_}/${s.name} -->`;let i=[];for(let c of r){let l=$(c,N)??c.name,p=$(c,be),f=c.namespace||"",g=f.split("/")[1]?.split("@")[0]??"",h=f.split("@")[1]??"",k=h?this.parseVersion(h):void 0,m=fe.formatResourceUrl({publisher:X(c),package_:g,name:c.name,...k?{version:k}:{}},"=",{contextPublisher:t}),v=p?`<p class="kan-resource-card-subtitle">${u(p)}</p>`:"";i.push(`<a class="kan-resource-card" href="${u(m)}"><h3 class="kan-resource-card-title">${u(l)}</h3>${v}</a>`)}return`<section class="kan-resource-grid">
99
- ${i.join(`
100
- `)}
101
- </section>`}parseVersion(e){let t=e.split(".").map(Number);if(!(t.length!==3||t.some(n=>Number.isNaN(n))))return{major:t[0],minor:t[1],patch:t[2]}}findInstancesOfClass(e){let t=[];for(let n of this.catalog){if(!(n instanceof ne))continue;le(n).map(a=>a.subject).some(a=>a.publisher===e.publisher&&a.package_===e.package_&&a.name===e.name)&&t.push(n)}return t}renderBreadcrumb(e,t,n){let o=(e.namespace||"").split("/");if(o.length<2)return"";let a=o[0],r=o[1]??"",i=r.split("@")[0]??"",c=r.split("@")[1]??"";if(!a||!i)return"";if(n?.bareOverview)return`<nav class="kan-breadcrumb"><ol>
102
- <li><a href="/">${u(a)}</a></li>
103
- <li aria-current="page">${u(i)}</li>
104
- </ol></nav>`;let l=e.name,f=!!M(this.catalog,{publisher:a,package_:i,name:i}),g=c?`${i}@${c}`:i,h=c?`/${i}/${c}/${i}`:`/${i}/${i}`,k=e.name===i,m=[];return m.push(`<li><a href="/">${u(a)}</a></li>`),k?m.push(`<li aria-current="page">${u(g)}</li>`):(m.push(f?`<li><a href="${u(h)}">${u(g)}</a></li>`:`<li>${u(g)}</li>`),m.push(`<li aria-current="page">${u(l)}</li>`)),`<nav class="kan-breadcrumb"><ol>
105
- ${m.join(`
106
- `)}
107
- </ol></nav>`}renderNavGroup(e,t){let n=this.findNavGroupForPublisher(t);if(!n)return"";let s=ae(n,Pe);if(!(s instanceof J))return"";let o=s.object??[];if(o.length===0)return"";let a=[];for(let r of o){if(!(r instanceof A))continue;let i=M(this.catalog,{publisher:r.subject.publisher,package_:r.subject.package_,name:r.subject.name}),{href:c,label:l}=this.resolveNavEntry(r,i,t),p=`/${e.namespace?.split("/")[1]?.split("@")[0]}/${(e.namespace||"").split("@")[1]}/${e.name}`,f=c===p?' aria-current="page"':"";a.push(`<li><a class="kan-nav-link" href="${u(c)}"${f}>${u(l)}</a></li>`)}return`<nav class="kan-site-nav"><ul>
108
- ${a.join(`
109
- `)}
110
- </ul></nav>`}resolveNavEntry(e,t,n){if(t&&le(t).map(i=>i.subject).some(i=>i.publisher===we.publisher&&i.package_===we.package_&&i.name===we.name)){let i=$(t,N),c=ae(t,Be);if(c instanceof H&&c.object instanceof A){let l=c.object,p=this.readLabelForUri({publisher:l.subject.publisher,package_:l.subject.package_,name:l.subject.name});return{href:this.urlForReference(l,Be,n),label:i??p??l.subject.name}}}let s=fe.formatResourceUrl({publisher:e.subject.publisher,package_:e.subject.package_,...e.subject.version?{version:e.subject.version}:{},name:e.subject.name},"*",{contextPublisher:n}),o=t?$(t,N)??e.subject.name:e.subject.name;return{href:s,label:o}}findNavGroupForPublisher(e){for(let t of this.catalog){if(!(t instanceof ne)||!(t.namespace||"").startsWith(`${e}/`))continue;if(le(t).map(a=>a.subject).some(a=>a.publisher===$e.publisher&&a.package_===$e.package_&&a.name===$e.name))return t}}renderMarkdown(e,t,n){let s=P(e,W);if(!s)return"<!-- LookRenderer.Markdown: no look.source -->";let o=ae(t,s),a;return o instanceof Ae?a=this.resolveMarkdownLinks(o,n):o instanceof te?a=o.object:a=this.readPropertyValueText(t,s),a?`<section class="kan-markdown">
111
- ${Ne(a)}
112
- </section>`:""}resolveMarkdownLinks(e,t){let n=e.object,s=[...e.links].sort((o,a)=>a.startOffset-o.startOffset);for(let o of s){let a;if(o.target){let r=o.target.subject,i=(o.displayText??this.readLabelForUri({publisher:r.publisher,package_:r.package_,name:r.name})??o.reference).replace(/[[\]]/g,""),c=fe.formatResourceUrl({publisher:r.publisher,package_:r.package_,name:r.name,...r.version?{version:r.version}:{}},"=",{contextPublisher:t});a=`[${i}](${c})`}else a=o.displayText??o.reference;n=n.slice(0,o.startOffset)+a+n.slice(o.endOffset)}return n}renderRawMarkdown(e){let t=this.findCascadedLook(e);if(!t)return;let n=qe(t.declaration),s=[];for(let o of n){let a=ve(o);if(!a||!F(a,He))continue;let r=P(o,W);if(!r)continue;let i=this.readPropertyValueText(e,r);i&&s.push(i)}return s.length>0?s.join(`
113
-
114
- `):void 0}renderHero(e,t,n){let s=['<header class="kan-hero">'],o=P(e,Bn);if(o){let l=this.readPropertyValueText(t,o);l&&s.push(`<span class="kan-hero-eyebrow">${u(l)}</span>`)}let a=P(e,Hn),r="";a&&(r=this.readPropertyValueText(t,a)??""),r||(r=t.name),s.push(`<h1 class="kan-hero-title">${u(r)}</h1>`);let i=P(e,Dn);if(i){let l=this.readPropertyValueText(t,i);l&&s.push(`<p class="kan-hero-subtitle">${u(l)}</p>`)}let c=P(e,ze);if(c){let l=this.readPropertyValueReferences(t,c);if(l.length>0){let p=l.map(f=>this.renderBadge(f,ze,n)).join("");s.push(`<div class="kan-hero-badges">${p}</div>`)}}return s.push("</header>"),s.join(`
115
- `)}renderPropertyList(e,t,n){let s=P(e,W);if(!s)return"<!-- LookRenderer: PropertyList missing look.source -->";let o=this.readLabelForUri(s)??s.name,a=ae(t,s),r=this.gatherValueItems(a),i=r.length>0?r.map(c=>`<li>${this.renderInlineValue(c,W,n)}</li>`).join(""):'<li class="kan-empty">(no values)</li>';return['<section class="kan-property-list">',`<h3 class="kan-property-list-title">${u(o)}</h3>`,`<ul class="kan-property-list-items">${i}</ul>`,"</section>"].join(`
116
- `)}renderBadgeRow(e,t,n){let s=P(e,W);if(!s)return"<!-- LookRenderer: BadgeRow missing look.source -->";let o=this.readPropertyValueReferences(t,s);return o.length===0?"":`<div class="kan-badge-row">${o.map(r=>this.renderBadge(r,W,n)).join("")}</div>`}renderChipRow(e,t,n){let s=Je(e,Gn);if(s.length===0)return"<!-- LookRenderer: ChipRow has no look.chips -->";let o=[];for(let a of s){let r=ae(t,a);if(!r)continue;let i=this.readLabelForUri(a)??a.name,c=this.renderStatementInlineValue(r,a,n);c&&o.push(`<span class="kan-chip"><span class="kan-chip-key">${u(i)}</span> <span class="kan-chip-val">${c}</span></span>`)}return o.length===0?"":`<div class="kan-chip-row">${o.join("")}</div>`}renderReferenceList(e,t,n){let s=Je(e,Pe);if(s.length===0)return"<!-- LookRenderer: ReferenceList has no look.entries -->";let o=$(e,De),a=$(e,In),r=[];for(let i of s){let c=this.readPropertyValueReferences(t,i);if(c.length===0)continue;let l=this.readLabelForUri(i)??i.name;if(o){let p=c.map(f=>this.renderDetailRow(f,o,a,n)).filter(f=>f).join("");p&&r.push(`<dt>${u(l)}</dt><dd><ul class="kan-ref-rows">${p}</ul></dd>`)}else{let p=c.map(f=>this.renderReferenceLink(f,Pe,n)).join(", ");r.push(`<dt>${u(l)}</dt><dd>${p}</dd>`)}}return r.length===0?"":`<dl class="kan-reference-list">${r.join("")}</dl>`}renderDetailRow(e,t,n,s){let o=M(this.catalog,{publisher:e.subject.publisher,package_:e.subject.package_,name:e.subject.name,...e.subject.version?{version:e.subject.version}:{}});if(!o)return"";let a=this.resolvePath(o,t)??$(o,N)??o.name,r=this.hrefForSubject(o,s),i=this.svgUrlForSubject(o,s),c="";if(n){let l=this.resolvePath(o,n);l&&(c=`<span class="kan-ref-badge">${u(l)}</span>`)}return`<li class="kan-ref-row"><a class="kan-ref-rowlink" href="${u(r)}"><img class="kan-ref-icon" src="${u(i)}" alt="" loading="lazy"/><span class="kan-ref-text">${u(a)}</span>${c}</a></li>`}readPropertyValueText(e,t){let n=ae(e,t);if(n){if(n instanceof te)return n.object;if(n instanceof H){let s=n.object;return this.readLabelForUri({publisher:s.subject.publisher,package_:s.subject.package_,name:s.subject.name})??s.subject.name}if(n instanceof J)return(n.object??[]).map(o=>o instanceof A?this.readLabelForUri({publisher:o.subject.publisher,package_:o.subject.package_,name:o.subject.name})??o.subject.name:o instanceof ce?o.name??"":String(o)).filter(o=>o).join(", ")}}readPropertyValueReferences(e,t){let n=ae(e,t);if(!n)return[];if(n instanceof H)return[n.object];if(n instanceof J){let s=[];for(let o of n.object??[])o instanceof A&&s.push(o);return s}return[]}gatherValueItems(e){return e?e instanceof J?e.object??[]:e instanceof H?[e.object]:e instanceof pe?[e.object]:e instanceof te?[e.object]:[]:[]}renderInlineValue(e,t,n){return e instanceof A?this.renderReferenceLink(e,t,n):e instanceof ce?u(e.name??"(embedded)"):typeof e=="string"?u(e):typeof e=="number"||typeof e=="boolean"?u(String(e)):""}renderStatementInlineValue(e,t,n){return e instanceof te?u(e.object):e instanceof H?this.renderReferenceLink(e.object,t,n):e instanceof J?(e.object??[]).map(o=>this.renderInlineValue(o,t,n)).filter(o=>o).join(", "):""}renderReferenceLink(e,t,n){let s=this.readLabelForUri({publisher:e.subject.publisher,package_:e.subject.package_,name:e.subject.name})??e.subject.name,o=this.urlForReference(e,t,n);return`<a class="kan-link" href="${u(o)}">${u(s)}</a>`}renderBadge(e,t,n){let s=this.readLabelForUri({publisher:e.subject.publisher,package_:e.subject.package_,name:e.subject.name})??e.subject.name,o=this.readCommentForUri({publisher:e.subject.publisher,package_:e.subject.package_,name:e.subject.name}),a=this.urlForReference(e,t,n),r=o?` title="${u(o)}"`:"";return`<a class="kan-badge" href="${u(a)}"${r}>${u(s)}</a>`}urlForReference(e,t,n){let s=t?this.getUrlFormForProperty(t):"=";return fe.formatResourceUrl({publisher:e.subject.publisher,package_:e.subject.package_,...e.subject.version?{version:e.subject.version}:{},name:e.subject.name},s,{contextPublisher:n})}getUrlFormForProperty(e){let t=M(this.catalog,e);if(!t)return"=";let n=$(t,Wn);return n==="*"||n==="^"||n==="~"||n==="="?n:"="}readLabelForUri(e){let t=M(this.catalog,e);if(t)return $(t,N)}readCommentForUri(e){let t=M(this.catalog,e);if(t)return $(t,be)}};function Ee(d){let e=new Map;for(let t of d.statement){if(!(t instanceof pe)||!re(t,Oe.publisher,Oe.package_,Oe.name))continue;let n=t.object;for(let s of n.statement){if(!(s instanceof te))continue;let o=s.predicate?.subject?.name;if(!o)continue;let a=s.object;e.has(o)||e.set(o,a)}}return e}function _e(d){for(let e of d.statement)if(e instanceof pe&&re(e,Le.publisher,Le.package_,Le.name))return e.object}function qe(d){for(let e of d.statement){if(!(e instanceof J)||!re(e,Ie.publisher,Ie.package_,Ie.name))continue;let t=[];for(let n of e.object??[])n instanceof ce&&t.push(n);return t}return[]}function ve(d){for(let e of d.statement)if(e instanceof H&&e.predicate?.subject?.name==="type"&&e.object instanceof A){let t=e.object.subject;return{publisher:t.publisher,package_:t.package_,name:t.name}}}function P(d,e){for(let t of d.statement)if(t instanceof H&&re(t,e.publisher,e.package_,e.name)&&t.object instanceof A){let n=t.object.subject;return{publisher:n.publisher,package_:n.package_,name:n.name}}}function Je(d,e){for(let t of d.statement){if(!(t instanceof J)||!re(t,e.publisher,e.package_,e.name))continue;let n=[];for(let s of t.object??[])s instanceof A&&n.push({publisher:s.subject.publisher,package_:s.subject.package_,name:s.subject.name});return n}return[]}function ae(d,e){for(let t of d.statement)if(re(t,e.publisher,e.package_,e.name))return t}function $(d,e){for(let t of d.statement)if(t instanceof te&&re(t,e.publisher,e.package_,e.name))return t.object}function Xe(d,e){for(let t of d.statement)if(t instanceof me&&re(t,e.publisher,e.package_,e.name))return t.object}function le(d){let e=[];for(let t of d.statement)if(t instanceof H){if(t.predicate?.subject?.name!=="type")continue;t.object instanceof A&&e.push(t.object)}else if(t instanceof J){if(t.predicate?.subject?.name!=="type")continue;for(let n of t.object??[])n instanceof A&&e.push(n)}return e}function Re(d){let e=[];for(let t of d.statement)if(t instanceof H){if(t.predicate?.subject?.name!=="subClassOf")continue;t.object instanceof A&&e.push(t.object)}else if(t instanceof J){if(t.predicate?.subject?.name!=="subClassOf")continue;for(let n of t.object??[])n instanceof A&&e.push(n)}return e}function ue(d,e){let t=[];for(let n of d){if(!(n instanceof ne)||n.name!==e.name)continue;(n.namespace||"").startsWith(`${e.publisher}/${e.package_}@`)&&t.push(n)}return t}function M(d,e){let t="version"in e?e.version:void 0;if(t){let n=`${e.publisher}/${e.package_}@${t.major}.${t.minor}.${t.patch}`;for(let s of d)if(s instanceof ne&&s.name===e.name&&s.namespace===n)return s}for(let n of d){if(!(n instanceof ne)||n.name!==e.name)continue;if((n.namespace||"").startsWith(`${e.publisher}/${e.package_}@`))return n}}function re(d,e,t,n){let s=d.predicate?.subject;return s?s.publisher===e&&s.package_===t&&s.name===n:!1}function F(d,e){return d.publisher===e.publisher&&d.package_===e.package_&&d.name===e.name}function ke(d){return`${d.publisher}/${d.package_}/${d.name}`}function Yn(d){return d.name==="Package"?{...xe}:d}function X(d){let e=d.namespace||"",t=e.indexOf("/");return t>=0?e.substring(0,t):e}function u(d){return d.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function Ze(d){let e=d.lastIndexOf(".");return e>=0?d.substring(e+1):d}function Qe(d,e){for(let t of d.statement)if(t.predicate?.subject?.name===e)return t}function oe(d){return d.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function en(d,e){return d.length<=e?d:d.slice(0,e).replace(/\s+\S*$/,"")+"\u2026"}function Se(d){if(!d)return"";let e=/^(\d{4})-(\d{2})-(\d{2})/.exec(d);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)}`:d}export{Ne as a,Te as b};