@kanonak-protocol/sdk 3.27.3 → 3.28.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.
- package/dist/chunk-7GUAN5GI.js +204 -0
- package/dist/index.js +1 -1
- package/dist/look/LookRenderer.d.ts +21 -0
- package/dist/transformations/index.js +1 -1
- package/package.json +2 -2
- package/dist/chunk-JAU6JAPI.js +0 -200
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import{a as T}from"./chunk-NIGFQYVA.js";import{a as K}from"./chunk-R2V7IXWN.js";import{c as U,d as f,g as v,j as d,k as O,l as g}from"./chunk-W6T7MOKY.js";function G(s){let e=s.replace(/\r\n/g,`
|
|
2
|
+
`).split(`
|
|
3
|
+
`),t=[],n=0;for(;n<e.length;){let r=e[n];if(r.trim()===""){n++;continue}let a=/^(\s*)```(\S*)\s*$/.exec(r);if(a){let c=a[2],u=[];for(n++;n<e.length&&!/^(\s*)```\s*$/.test(e[n]);)u.push(e[n]),n++;n++;let l=W(u.join(`
|
|
4
|
+
`)),j=c?` class="language-${z(c)}"`:"";t.push(`<pre><code${j}>${l}</code></pre>`);continue}let o=/^(#{1,6})\s+(.*)$/.exec(r);if(o){let c=o[1].length,u=_(o[2].trim());t.push(`<h${c}>${u}</h${c}>`),n++;continue}if(r.includes("|")&&n+1<e.length&&D(e[n+1])){let c=F(r),u=te(e[n+1]);n+=2;let l=[];for(;n<e.length&&e[n].trim()!==""&&e[n].includes("|");)l.push(F(e[n])),n++;t.push(re(c,u,l));continue}if(/^\s*[-*]\s+/.test(r)){let c=[];for(;n<e.length&&/^\s*[-*]\s+/.test(e[n]);){let u=[e[n].replace(/^\s*[-*]\s+/,"")];for(n++;n<e.length&&e[n].trim()!==""&&!/^\s*[-*]\s+/.test(e[n])&&!/^\s*\d+\.\s+/.test(e[n]);)u.push(e[n]),n++;n<e.length&&e[n].trim()===""&&n++,c.push(`<li>${_(u.join(" ").trim())}</li>`)}t.push(`<ul>
|
|
5
|
+
${c.join(`
|
|
6
|
+
`)}
|
|
7
|
+
</ul>`);continue}if(/^\s*\d+\.\s+/.test(r)){let c=[];for(;n<e.length&&/^\s*\d+\.\s+/.test(e[n]);){let u=[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]);)u.push(e[n]),n++;n<e.length&&e[n].trim()===""&&n++,c.push(`<li>${_(u.join(" ").trim())}</li>`)}t.push(`<ol>
|
|
8
|
+
${c.join(`
|
|
9
|
+
`)}
|
|
10
|
+
</ol>`);continue}let i=[r];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&&D(e[n+1]));)i.push(e[n]),n++;t.push(`<p>${_(i.join(" "))}</p>`)}return t.join(`
|
|
11
|
+
`)}function D(s){return s.includes("-")?/^[\s|:-]+$/.test(s):!1}function F(s){let e=s.trim();return e.startsWith("|")&&(e=e.slice(1)),e.endsWith("|")&&(e=e.slice(0,-1)),e.split("|").map(t=>t.trim())}function te(s){return F(s).map(e=>{let t=e.startsWith(":"),n=e.endsWith(":");return t&&n?"center":n?"right":t?"left":null})}function re(s,e,t){let n=o=>{let i=e[o];return i?` style="text-align:${i}"`:""},r=s.map((o,i)=>`<th${n(i)}>${_(o)}</th>`).join(""),a=t.map(o=>`<tr>${o.map((c,u)=>`<td${n(u)}>${_(c)}</td>`).join("")}</tr>`).join(`
|
|
12
|
+
`);return`<table>
|
|
13
|
+
<thead><tr>${r}</tr></thead>
|
|
14
|
+
<tbody>
|
|
15
|
+
${a}
|
|
16
|
+
</tbody>
|
|
17
|
+
</table>`}function _(s){let e=W(s);return e=e.replace(/`([^`\n]+)`/g,(t,n)=>`<code>${n}</code>`),e=e.replace(/\[([^\]]+)\]\(([^)\s]+)\)/g,(t,n,r)=>`<a href="${z(r)}">${n}</a>`),e=e.replace(/\*\*([^*\n]+)\*\*/g,(t,n)=>`<strong>${n}</strong>`),e=e.replace(/(^|[^*])\*([^*\n]+)\*(?!\*)/g,(t,n,r)=>`${n}<em>${r}</em>`),e=e.replace(/(^|[\s(])_([^_\n]+)_(?=[\s).,;:!?]|$)/g,(t,n,r)=>`${n}<em>${r}</em>`),e}function W(s){return s.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function z(s){return s.replace(/"/g,""").replace(/&/g,"&")}var P={publisher:"kanonak.org",package_:"derivation",name:"look"},N={publisher:"kanonak.org",package_:"derivation",name:"tokens"},$={publisher:"kanonak.org",package_:"core-rdf",name:"Resource"},I={publisher:"kanonak.org",package_:"core-rdf",name:"label"},ae={publisher:"kanonak.org",package_:"core-rdf",name:"comment"},oe={publisher:"kanonak.org",package_:"look",name:"Hero"},se={publisher:"kanonak.org",package_:"look",name:"PropertyList"},ie={publisher:"kanonak.org",package_:"look",name:"BadgeRow"},ce={publisher:"kanonak.org",package_:"look",name:"ChipRow"},ue={publisher:"kanonak.org",package_:"look",name:"ReferenceList"},q={publisher:"kanonak.org",package_:"look",name:"Markdown"},E={publisher:"kanonak.org",package_:"look",name:"NavGroup"},C={publisher:"kanonak.org",package_:"look",name:"NavLink"},Y={publisher:"kanonak.org",package_:"look",name:"target"},V={publisher:"kanonak.org",package_:"look",name:"bands"},le={publisher:"kanonak.org",package_:"look",name:"title"},pe={publisher:"kanonak.org",package_:"look",name:"eyebrow"},fe={publisher:"kanonak.org",package_:"look",name:"subtitle"},J={publisher:"kanonak.org",package_:"look",name:"badges"},R={publisher:"kanonak.org",package_:"look",name:"source"},de={publisher:"kanonak.org",package_:"look",name:"chips"},B={publisher:"kanonak.org",package_:"look",name:"entries"},ge={publisher:"kanonak.org",package_:"look",name:"urlForm"},M=class{constructor(e){this.catalog=e}catalog;findCascadedLook(e){let t=new Set,n=L(e);for(;n.length>0;){let r=n.shift(),a=S(r.subject);if(t.has(a))continue;t.add(a);let o=k(this.catalog,r.subject);if(!o)continue;let i=Q(o);if(i)return{declaration:i,sourceClass:{publisher:r.subject.publisher,package_:r.subject.package_,name:r.subject.name}};for(let c of A(o))n.push(c)}if(!t.has(S($))){let r=k(this.catalog,$);if(r){let a=Q(r);if(a)return{declaration:a,sourceClass:{...$}}}}}findCascadedTokens(e){let t=new Map;for(let[a,o]of H(e))t.has(a)||t.set(a,o);let n=new Set,r=L(e);for(;r.length>0;){let a=r.shift(),o=S(a.subject);if(n.has(o))continue;n.add(o);let i=k(this.catalog,a.subject);if(i){for(let[c,u]of H(i))t.has(c)||t.set(c,u);for(let c of A(i))r.push(c)}}if(!n.has(S($))){let a=k(this.catalog,$);if(a)for(let[o,i]of H(a))t.has(o)||t.set(o,i)}return t}renderStylesheet(e){let t=this.findCascadedTokens(e),n=[];for(let[a,o]of t)n.push(` --kan-${a}: ${o};`);return`${n.length>0?`:root {
|
|
18
|
+
${n.join(`
|
|
19
|
+
`)}
|
|
20
|
+
}`:":root { /* no tokens resolved */ }"}
|
|
21
|
+
${ke}`}renderHtml(e){let t=this.findCascadedLook(e);if(!t)return`<!-- LookRenderer: no derivation.look found for ${e.namespace}/${e.name} -->`;let n=X(t.declaration);if(n.length===0)return"<!-- LookRenderer: look declaration has no bands -->";let r=ne(e),a=[];for(let o of n)a.push(this.renderBand(o,e,r));return a.join(`
|
|
22
|
+
`)}renderDocument(e){let t=this.renderHtml(e),n=this.readPropertyValueText(e,I)??e.name,r=`${e.name}.css`,a=this.hasSvgDerivation(e)?`<figure class="kan-figure"><img src="${p(e.name)}.svg" alt=""></figure>
|
|
23
|
+
`:"",o=ne(e),i=this.renderNavGroup(e,o);return`<!doctype html>
|
|
24
|
+
<html lang="en">
|
|
25
|
+
<head>
|
|
26
|
+
<meta charset="utf-8">
|
|
27
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
28
|
+
<title>${p(n)}</title>
|
|
29
|
+
<link rel="stylesheet" href="${p(r)}">
|
|
30
|
+
</head>
|
|
31
|
+
<body>
|
|
32
|
+
${i}
|
|
33
|
+
<main class="kan-main">
|
|
34
|
+
${a}${t}
|
|
35
|
+
</main>
|
|
36
|
+
</body>
|
|
37
|
+
</html>
|
|
38
|
+
`}hasSvgDerivation(e){let t=new Set,n=L(e);for(;n.length>0;){let r=n.shift(),a=S(r.subject);if(t.has(a))continue;t.add(a);let o=k(this.catalog,r.subject);if(o){for(let i of o.statement)if(i instanceof g&&m(i,"kanonak.org","derivation","derivations")){for(let c of i.object??[])if(c instanceof K)for(let u of c.statement){if(!(u instanceof d)||!m(u,"kanonak.org","derivation","format")||!(u.object instanceof f))continue;let l=u.object.subject;if(l.publisher==="kanonak.org"&&l.package_==="formats"&&l.name==="svg")return!0}}for(let i of A(o))n.push(i)}}return!1}renderBand(e,t,n){let r=Z(e);return r?h(r,oe)?this.renderHero(e,t,n):h(r,se)?this.renderPropertyList(e,t,n):h(r,ie)?this.renderBadgeRow(e,t,n):h(r,ce)?this.renderChipRow(e,t,n):h(r,ue)?this.renderReferenceList(e,t,n):h(r,q)?this.renderMarkdown(e,t):h(r,E)?this.renderNavGroup(t,n):`<!-- LookRenderer: unsupported band ${r.publisher}/${r.package_}/${r.name} -->`:"<!-- LookRenderer: band has no rdf:type -->"}renderNavGroup(e,t){let n=this.findNavGroupForPublisher(t);if(!n)return"";let r=y(n,B);if(!(r instanceof g))return"";let a=r.object??[];if(a.length===0)return"";let o=[];for(let i of a){if(!(i instanceof f))continue;let c=k(this.catalog,{publisher:i.subject.publisher,package_:i.subject.package_,name:i.subject.name}),{href:u,label:l}=this.resolveNavEntry(i,c,t),j=`/${e.namespace?.split("/")[1]?.split("@")[0]}/${(e.namespace||"").split("@")[1]}/${e.name}`,w=u===j?' aria-current="page"':"";o.push(`<li><a class="kan-nav-link" href="${p(u)}"${w}>${p(l)}</a></li>`)}return`<nav class="kan-site-nav"><ul>
|
|
39
|
+
${o.join(`
|
|
40
|
+
`)}
|
|
41
|
+
</ul></nav>`}resolveNavEntry(e,t,n){if(t&&L(t).map(c=>c.subject).some(c=>c.publisher===C.publisher&&c.package_===C.package_&&c.name===C.name)){let c=x(t,I),u=y(t,Y);if(u instanceof d&&u.object instanceof f){let l=u.object,j=this.readLabelForUri({publisher:l.subject.publisher,package_:l.subject.package_,name:l.subject.name});return{href:this.urlForReference(l,Y,n),label:c??j??l.subject.name}}}let r=T.formatResourceUrl({publisher:e.subject.publisher,package_:e.subject.package_,...e.subject.version?{version:e.subject.version}:{},name:e.subject.name},"*",{contextPublisher:n}),a=t?x(t,I)??e.subject.name:e.subject.name;return{href:r,label:a}}findNavGroupForPublisher(e){for(let t of this.catalog){if(!(t instanceof U)||!(t.namespace||"").startsWith(`${e}/`))continue;if(L(t).map(o=>o.subject).some(o=>o.publisher===E.publisher&&o.package_===E.package_&&o.name===E.name))return t}}renderMarkdown(e,t){let n=b(e,R);if(!n)return"<!-- LookRenderer.Markdown: no look.source -->";let r=this.readPropertyValueText(t,n);return r?`<section class="kan-markdown">
|
|
42
|
+
${G(r)}
|
|
43
|
+
</section>`:""}renderRawMarkdown(e){let t=this.findCascadedLook(e);if(!t)return;let n=X(t.declaration),r=[];for(let a of n){let o=Z(a);if(!o||!h(o,q))continue;let i=b(a,R);if(!i)continue;let c=this.readPropertyValueText(e,i);c&&r.push(c)}return r.length>0?r.join(`
|
|
44
|
+
|
|
45
|
+
`):void 0}renderHero(e,t,n){let r=['<header class="kan-hero">'],a=b(e,pe);if(a){let l=this.readPropertyValueText(t,a);l&&r.push(`<span class="kan-hero-eyebrow">${p(l)}</span>`)}let o=b(e,le),i="";o&&(i=this.readPropertyValueText(t,o)??""),i||(i=t.name),r.push(`<h1 class="kan-hero-title">${p(i)}</h1>`);let c=b(e,fe);if(c){let l=this.readPropertyValueText(t,c);l&&r.push(`<p class="kan-hero-subtitle">${p(l)}</p>`)}let u=b(e,J);if(u){let l=this.readPropertyValueReferences(t,u);if(l.length>0){let j=l.map(w=>this.renderBadge(w,J,n)).join("");r.push(`<div class="kan-hero-badges">${j}</div>`)}}return r.push("</header>"),r.join(`
|
|
46
|
+
`)}renderPropertyList(e,t,n){let r=b(e,R);if(!r)return"<!-- LookRenderer: PropertyList missing look.source -->";let a=this.readLabelForUri(r)??r.name,o=y(t,r),i=this.gatherValueItems(o),c=i.length>0?i.map(u=>`<li>${this.renderInlineValue(u,R,n)}</li>`).join(""):'<li class="kan-empty">(no values)</li>';return['<section class="kan-property-list">',`<h3 class="kan-property-list-title">${p(a)}</h3>`,`<ul class="kan-property-list-items">${c}</ul>`,"</section>"].join(`
|
|
47
|
+
`)}renderBadgeRow(e,t,n){let r=b(e,R);if(!r)return"<!-- LookRenderer: BadgeRow missing look.source -->";let a=this.readPropertyValueReferences(t,r);return a.length===0?"":`<div class="kan-badge-row">${a.map(i=>this.renderBadge(i,R,n)).join("")}</div>`}renderChipRow(e,t,n){let r=ee(e,de);if(r.length===0)return"<!-- LookRenderer: ChipRow has no look.chips -->";let a=[];for(let o of r){let i=y(t,o);if(!i)continue;let c=this.readLabelForUri(o)??o.name,u=this.renderStatementInlineValue(i,o,n);u&&a.push(`<span class="kan-chip"><span class="kan-chip-key">${p(c)}</span> <span class="kan-chip-val">${u}</span></span>`)}return a.length===0?"":`<div class="kan-chip-row">${a.join("")}</div>`}renderReferenceList(e,t,n){let r=ee(e,B);if(r.length===0)return"<!-- LookRenderer: ReferenceList has no look.entries -->";let a=[];for(let o of r){let i=this.readPropertyValueReferences(t,o);if(i.length===0)continue;let c=this.readLabelForUri(o)??o.name,u=i.map(l=>this.renderReferenceLink(l,B,n)).join(", ");a.push(`<dt>${p(c)}</dt><dd>${u}</dd>`)}return a.length===0?"":`<dl class="kan-reference-list">${a.join("")}</dl>`}readPropertyValueText(e,t){let n=y(e,t);if(n){if(n instanceof v)return n.object;if(n instanceof d){let r=n.object;return this.readLabelForUri({publisher:r.subject.publisher,package_:r.subject.package_,name:r.subject.name})??r.subject.name}if(n instanceof g)return(n.object??[]).map(a=>a instanceof f?this.readLabelForUri({publisher:a.subject.publisher,package_:a.subject.package_,name:a.subject.name})??a.subject.name:a instanceof K?a.name??"":String(a)).filter(a=>a).join(", ")}}readPropertyValueReferences(e,t){let n=y(e,t);if(!n)return[];if(n instanceof d)return[n.object];if(n instanceof g){let r=[];for(let a of n.object??[])a instanceof f&&r.push(a);return r}return[]}gatherValueItems(e){return e?e instanceof g?e.object??[]:e instanceof d?[e.object]:e instanceof O?[e.object]:e instanceof v?[e.object]:[]:[]}renderInlineValue(e,t,n){return e instanceof f?this.renderReferenceLink(e,t,n):e instanceof K?p(e.name??"(embedded)"):typeof e=="string"?p(e):typeof e=="number"||typeof e=="boolean"?p(String(e)):""}renderStatementInlineValue(e,t,n){return e instanceof v?p(e.object):e instanceof d?this.renderReferenceLink(e.object,t,n):e instanceof g?(e.object??[]).map(a=>this.renderInlineValue(a,t,n)).filter(a=>a).join(", "):""}renderReferenceLink(e,t,n){let r=this.readLabelForUri({publisher:e.subject.publisher,package_:e.subject.package_,name:e.subject.name})??e.subject.name,a=this.urlForReference(e,t,n);return`<a class="kan-link" href="${p(a)}">${p(r)}</a>`}renderBadge(e,t,n){let r=this.readLabelForUri({publisher:e.subject.publisher,package_:e.subject.package_,name:e.subject.name})??e.subject.name,a=this.readCommentForUri({publisher:e.subject.publisher,package_:e.subject.package_,name:e.subject.name}),o=this.urlForReference(e,t,n),i=a?` title="${p(a)}"`:"";return`<a class="kan-badge" href="${p(o)}"${i}>${p(r)}</a>`}urlForReference(e,t,n){let r=t?this.getUrlFormForProperty(t):"=";return T.formatResourceUrl({publisher:e.subject.publisher,package_:e.subject.package_,...e.subject.version?{version:e.subject.version}:{},name:e.subject.name},r,{contextPublisher:n})}getUrlFormForProperty(e){let t=k(this.catalog,e);if(!t)return"=";let n=x(t,ge);return n==="*"||n==="^"||n==="~"||n==="="?n:"="}readLabelForUri(e){let t=k(this.catalog,e);if(t)return x(t,I)}readCommentForUri(e){let t=k(this.catalog,e);if(t)return x(t,ae)}};function H(s){let e=new Map;for(let t of s.statement){if(!(t instanceof O)||!m(t,N.publisher,N.package_,N.name))continue;let n=t.object;for(let r of n.statement){if(!(r instanceof v))continue;let a=r.predicate?.subject?.name;if(!a)continue;let o=r.object;e.set(a,o)}return e}return e}function Q(s){for(let e of s.statement)if(e instanceof O&&m(e,P.publisher,P.package_,P.name))return e.object}function X(s){for(let e of s.statement){if(!(e instanceof g)||!m(e,V.publisher,V.package_,V.name))continue;let t=[];for(let n of e.object??[])n instanceof K&&t.push(n);return t}return[]}function Z(s){for(let e of s.statement)if(e instanceof d&&e.predicate?.subject?.name==="type"&&e.object instanceof f){let t=e.object.subject;return{publisher:t.publisher,package_:t.package_,name:t.name}}}function b(s,e){for(let t of s.statement)if(t instanceof d&&m(t,e.publisher,e.package_,e.name)&&t.object instanceof f){let n=t.object.subject;return{publisher:n.publisher,package_:n.package_,name:n.name}}}function ee(s,e){for(let t of s.statement){if(!(t instanceof g)||!m(t,e.publisher,e.package_,e.name))continue;let n=[];for(let r of t.object??[])r instanceof f&&n.push({publisher:r.subject.publisher,package_:r.subject.package_,name:r.subject.name});return n}return[]}function y(s,e){for(let t of s.statement)if(m(t,e.publisher,e.package_,e.name))return t}function x(s,e){for(let t of s.statement)if(t instanceof v&&m(t,e.publisher,e.package_,e.name))return t.object}function L(s){let e=[];for(let t of s.statement)if(t instanceof d){if(t.predicate?.subject?.name!=="type")continue;t.object instanceof f&&e.push(t.object)}else if(t instanceof g){if(t.predicate?.subject?.name!=="type")continue;for(let n of t.object??[])n instanceof f&&e.push(n)}return e}function A(s){let e=[];for(let t of s.statement)if(t instanceof d){if(t.predicate?.subject?.name!=="subClassOf")continue;t.object instanceof f&&e.push(t.object)}else if(t instanceof g){if(t.predicate?.subject?.name!=="subClassOf")continue;for(let n of t.object??[])n instanceof f&&e.push(n)}return e}function k(s,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 r of s)if(r instanceof U&&r.name===e.name&&r.namespace===n)return r}for(let n of s){if(!(n instanceof U)||n.name!==e.name)continue;if((n.namespace||"").startsWith(`${e.publisher}/${e.package_}@`))return n}}function m(s,e,t,n){let r=s.predicate?.subject;return r?r.publisher===e&&r.package_===t&&r.name===n:!1}function h(s,e){return s.publisher===e.publisher&&s.package_===e.package_&&s.name===e.name}function S(s){return`${s.publisher}/${s.package_}/${s.name}`}function ne(s){let e=s.namespace||"",t=e.indexOf("/");return t>=0?e.substring(0,t):e}function p(s){return s.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}var ke=`
|
|
48
|
+
* { box-sizing: border-box; }
|
|
49
|
+
body {
|
|
50
|
+
background: var(--kan-bg);
|
|
51
|
+
color: var(--kan-text);
|
|
52
|
+
font-family: var(--kan-font-body);
|
|
53
|
+
line-height: var(--kan-line-height-body);
|
|
54
|
+
margin: 0;
|
|
55
|
+
}
|
|
56
|
+
a { color: var(--kan-accent); text-decoration: none; }
|
|
57
|
+
a:hover { color: var(--kan-accent-hover); text-decoration: underline; }
|
|
58
|
+
|
|
59
|
+
/* Hero band */
|
|
60
|
+
.kan-hero {
|
|
61
|
+
padding: 32px 0 24px;
|
|
62
|
+
border-bottom: 1px solid var(--kan-border);
|
|
63
|
+
margin-bottom: 32px;
|
|
64
|
+
}
|
|
65
|
+
.kan-hero-eyebrow {
|
|
66
|
+
font-family: var(--kan-font-mono);
|
|
67
|
+
font-size: 11px;
|
|
68
|
+
color: var(--kan-accent);
|
|
69
|
+
letter-spacing: 0.18em;
|
|
70
|
+
text-transform: uppercase;
|
|
71
|
+
margin-bottom: 12px;
|
|
72
|
+
display: block;
|
|
73
|
+
}
|
|
74
|
+
.kan-hero-title {
|
|
75
|
+
font-family: var(--kan-font-display);
|
|
76
|
+
font-size: 32px;
|
|
77
|
+
font-weight: 600;
|
|
78
|
+
letter-spacing: -0.015em;
|
|
79
|
+
margin: 0 0 12px;
|
|
80
|
+
line-height: var(--kan-line-height-heading);
|
|
81
|
+
color: var(--kan-text);
|
|
82
|
+
}
|
|
83
|
+
.kan-hero-subtitle {
|
|
84
|
+
font-size: 17px;
|
|
85
|
+
color: var(--kan-text-dim);
|
|
86
|
+
font-weight: 300;
|
|
87
|
+
line-height: 1.55;
|
|
88
|
+
margin: 0 0 16px;
|
|
89
|
+
}
|
|
90
|
+
.kan-hero-badges {
|
|
91
|
+
display: flex;
|
|
92
|
+
flex-wrap: wrap;
|
|
93
|
+
gap: 6px;
|
|
94
|
+
margin-top: 12px;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/* PropertyList band */
|
|
98
|
+
.kan-property-list {
|
|
99
|
+
margin: 24px 0;
|
|
100
|
+
}
|
|
101
|
+
.kan-property-list-title {
|
|
102
|
+
font-family: var(--kan-font-mono);
|
|
103
|
+
font-size: 11px;
|
|
104
|
+
letter-spacing: 0.18em;
|
|
105
|
+
text-transform: uppercase;
|
|
106
|
+
color: var(--kan-text-dim);
|
|
107
|
+
margin: 0 0 12px;
|
|
108
|
+
font-weight: 600;
|
|
109
|
+
}
|
|
110
|
+
.kan-property-list-items {
|
|
111
|
+
list-style: none;
|
|
112
|
+
padding: 0;
|
|
113
|
+
margin: 0;
|
|
114
|
+
display: flex;
|
|
115
|
+
flex-direction: column;
|
|
116
|
+
gap: 6px;
|
|
117
|
+
}
|
|
118
|
+
.kan-property-list-items > li {
|
|
119
|
+
color: var(--kan-text);
|
|
120
|
+
}
|
|
121
|
+
.kan-property-list-items > li.kan-empty {
|
|
122
|
+
color: var(--kan-text-faint);
|
|
123
|
+
font-style: italic;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/* BadgeRow band */
|
|
127
|
+
.kan-badge-row {
|
|
128
|
+
display: flex;
|
|
129
|
+
flex-wrap: wrap;
|
|
130
|
+
gap: 6px;
|
|
131
|
+
margin: 16px 0;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/* Badge (used by Hero badges + BadgeRow) */
|
|
135
|
+
.kan-badge {
|
|
136
|
+
display: inline-block;
|
|
137
|
+
padding: 2px 8px;
|
|
138
|
+
background: var(--kan-badge-bg);
|
|
139
|
+
color: var(--kan-badge-fg);
|
|
140
|
+
border-radius: var(--kan-radius-sm);
|
|
141
|
+
font-size: 11px;
|
|
142
|
+
font-weight: 500;
|
|
143
|
+
text-decoration: none;
|
|
144
|
+
letter-spacing: 0.02em;
|
|
145
|
+
}
|
|
146
|
+
.kan-badge:hover {
|
|
147
|
+
filter: brightness(1.1);
|
|
148
|
+
text-decoration: none;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/* ChipRow band */
|
|
152
|
+
.kan-chip-row {
|
|
153
|
+
display: flex;
|
|
154
|
+
flex-wrap: wrap;
|
|
155
|
+
gap: 8px;
|
|
156
|
+
margin: 16px 0;
|
|
157
|
+
}
|
|
158
|
+
.kan-chip {
|
|
159
|
+
display: inline-flex;
|
|
160
|
+
align-items: center;
|
|
161
|
+
gap: 6px;
|
|
162
|
+
padding: 5px 10px;
|
|
163
|
+
background: var(--kan-bg-card);
|
|
164
|
+
border: 1px solid var(--kan-border);
|
|
165
|
+
border-radius: var(--kan-radius-sm);
|
|
166
|
+
font-family: var(--kan-font-mono);
|
|
167
|
+
font-size: 11px;
|
|
168
|
+
text-transform: uppercase;
|
|
169
|
+
letter-spacing: 0.04em;
|
|
170
|
+
}
|
|
171
|
+
.kan-chip-key { color: var(--kan-text-faint); }
|
|
172
|
+
.kan-chip-val { color: var(--kan-text); font-weight: 500; }
|
|
173
|
+
|
|
174
|
+
/* ReferenceList band */
|
|
175
|
+
dl.kan-reference-list {
|
|
176
|
+
display: grid;
|
|
177
|
+
grid-template-columns: max-content 1fr;
|
|
178
|
+
gap: 8px 16px;
|
|
179
|
+
margin: 16px 0;
|
|
180
|
+
padding: 16px 18px;
|
|
181
|
+
background: var(--kan-bg-card);
|
|
182
|
+
border: 1px solid var(--kan-border);
|
|
183
|
+
border-radius: var(--kan-radius);
|
|
184
|
+
}
|
|
185
|
+
dl.kan-reference-list dt {
|
|
186
|
+
font-family: var(--kan-font-mono);
|
|
187
|
+
font-size: 11px;
|
|
188
|
+
text-transform: uppercase;
|
|
189
|
+
letter-spacing: 0.1em;
|
|
190
|
+
color: var(--kan-text-faint);
|
|
191
|
+
align-self: center;
|
|
192
|
+
}
|
|
193
|
+
dl.kan-reference-list dd { margin: 0; align-self: center; }
|
|
194
|
+
|
|
195
|
+
/* Link (used by reference values across bands) */
|
|
196
|
+
.kan-link {
|
|
197
|
+
color: var(--kan-accent);
|
|
198
|
+
text-decoration: none;
|
|
199
|
+
}
|
|
200
|
+
.kan-link:hover {
|
|
201
|
+
color: var(--kan-accent-hover);
|
|
202
|
+
text-decoration: underline;
|
|
203
|
+
}
|
|
204
|
+
`.trim();export{G as a,M as b};
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as Ze,b as Qe,c as et,d as tt,e as rt,f as nt,g as ot,h as at,i as it,j as st}from"./chunk-NYXIGTTH.js";import{b as Yt}from"./chunk-
|
|
1
|
+
import{a as Ze,b as Qe,c as et,d as tt,e as rt,f as nt,g as ot,h as at,i as it,j as st}from"./chunk-NYXIGTTH.js";import{b as Yt}from"./chunk-7GUAN5GI.js";import{a as qe,b as Ye,c as Xe,d as b,e as S,f as i}from"./chunk-VLBP5CHO.js";import{a as qt}from"./chunk-ROCCA4BY.js";import{a as Te,b as je,c as Le,d as Fe,e as Ne}from"./chunk-AZSZXLEH.js";import{a as Be,b as De,c as Oe,d as Ae}from"./chunk-AV4AVTI6.js";import{a as lt,b as dt,c as ut,d as pt}from"./chunk-63NJ25ZX.js";import{a as Je,b as mt,c as ft,d as yt,e as ht}from"./chunk-4TJZIM7A.js";import{a as gt}from"./chunk-NIGFQYVA.js";import{A as Mt,B as zt,C as Gt,D as Wt,E as Jt,a as kt,b as bt,c as St,d as Ct,e as Pt,f as Rt,g as wt,h as xt,i as $t,j as vt,k as Et,l as Kt,m as Bt,n as It,o as Tt,p as jt,q as Lt,r as Ft,s as Nt,t as Dt,u as Ot,v as At,w as Ut,x as Vt,y as Ht,z as _t}from"./chunk-PB2RWBJN.js";import"./chunk-FJ35VIV6.js";import{a as F,b as D,c as Me,e as We}from"./chunk-R2V7IXWN.js";import{a as Ue,b as j,c as L,d as N,e as He,f as _e,g as O,h as A,i as U,j as V,k as H,l as _}from"./chunk-W6T7MOKY.js";import{a as Ie}from"./chunk-MYITGTGJ.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-IXE5THUW.js";import{a as Ve}from"./chunk-FUUTGGJS.js";import{a as ct}from"./chunk-ODIECDN7.js";import{VersionOperator as oo}from"@kanonak-protocol/types/document/models/enums";import{existsSync as fr,readFileSync as yr}from"fs";import{homedir as gr}from"os";import{join as hr}from"path";import{execFile as Xt}from"child_process";import{promisify as Zt}from"util";var C=Zt(Xt),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)}
|
|
@@ -94,6 +94,27 @@ export declare class LookRenderer {
|
|
|
94
94
|
*/
|
|
95
95
|
private hasSvgDerivation;
|
|
96
96
|
private renderBand;
|
|
97
|
+
/**
|
|
98
|
+
* Render the publisher's site navigation. The instance is the page
|
|
99
|
+
* the band is being rendered on; the NavGroup itself is discovered
|
|
100
|
+
* by class+publisher (the first `look.NavGroup` instance in the
|
|
101
|
+
* catalog authored by `contextPublisher`). Emits a `<nav>` block
|
|
102
|
+
* with one `<a>` per `look.entries` entry — each entry may be a
|
|
103
|
+
* `look.NavLink` (use its `look.target` + `rdfs.label`) or a direct
|
|
104
|
+
* resource reference (use the target's `rdfs.label`, urlForm `*`).
|
|
105
|
+
*/
|
|
106
|
+
private renderNavGroup;
|
|
107
|
+
/**
|
|
108
|
+
* Resolve a nav entry to (href, label). NavLink resources contribute
|
|
109
|
+
* their explicit label + target; direct references read the target's
|
|
110
|
+
* rdfs.label and use urlForm "*" (latest).
|
|
111
|
+
*/
|
|
112
|
+
private resolveNavEntry;
|
|
113
|
+
/**
|
|
114
|
+
* Find the first `look.NavGroup` instance in the catalog authored by
|
|
115
|
+
* `publisher`. Returns undefined if the publisher has not declared one.
|
|
116
|
+
*/
|
|
117
|
+
private findNavGroupForPublisher;
|
|
97
118
|
/**
|
|
98
119
|
* Render a Markdown band — reads the property identified by
|
|
99
120
|
* `look.source` from the instance and pipes its string value through
|
|
@@ -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-
|
|
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-7GUAN5GI.js";import{a as Oe}from"../chunk-ROCCA4BY.js";import"../chunk-63NJ25ZX.js";import"../chunk-NIGFQYVA.js";import{a as Ue}from"../chunk-FJ35VIV6.js";import{a as C,c as Re,e as Ce}from"../chunk-R2V7IXWN.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-MYITGTGJ.js";import"../chunk-IXE5THUW.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.
|
|
3
|
+
"version": "3.28.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.
|
|
116
|
+
"@kanonak-protocol/types": "^3.28.0",
|
|
117
117
|
"ignore": "^7.0.5",
|
|
118
118
|
"js-yaml": "^4.1.0",
|
|
119
119
|
"yaml": "^2.7.0"
|
package/dist/chunk-JAU6JAPI.js
DELETED
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
import{a as B}from"./chunk-NIGFQYVA.js";import{a as v}from"./chunk-R2V7IXWN.js";import{c as L,d as p,g as j,j as d,k as x,l as g}from"./chunk-W6T7MOKY.js";function H(a){let e=a.replace(/\r\n/g,`
|
|
2
|
-
`).split(`
|
|
3
|
-
`),t=[],n=0;for(;n<e.length;){let r=e[n];if(r.trim()===""){n++;continue}let o=/^(\s*)```(\S*)\s*$/.exec(r);if(o){let c=o[2],u=[];for(n++;n<e.length&&!/^(\s*)```\s*$/.test(e[n]);)u.push(e[n]),n++;n++;let l=M(u.join(`
|
|
4
|
-
`)),S=c?` class="language-${A(c)}"`:"";t.push(`<pre><code${S}>${l}</code></pre>`);continue}let s=/^(#{1,6})\s+(.*)$/.exec(r);if(s){let c=s[1].length,u=R(s[2].trim());t.push(`<h${c}>${u}</h${c}>`),n++;continue}if(r.includes("|")&&n+1<e.length&&V(e[n+1])){let c=w(r),u=X(e[n+1]);n+=2;let l=[];for(;n<e.length&&e[n].trim()!==""&&e[n].includes("|");)l.push(w(e[n])),n++;t.push(Z(c,u,l));continue}if(/^\s*[-*]\s+/.test(r)){let c=[];for(;n<e.length&&/^\s*[-*]\s+/.test(e[n]);){let u=[e[n].replace(/^\s*[-*]\s+/,"")];for(n++;n<e.length&&e[n].trim()!==""&&!/^\s*[-*]\s+/.test(e[n])&&!/^\s*\d+\.\s+/.test(e[n]);)u.push(e[n]),n++;n<e.length&&e[n].trim()===""&&n++,c.push(`<li>${R(u.join(" ").trim())}</li>`)}t.push(`<ul>
|
|
5
|
-
${c.join(`
|
|
6
|
-
`)}
|
|
7
|
-
</ul>`);continue}if(/^\s*\d+\.\s+/.test(r)){let c=[];for(;n<e.length&&/^\s*\d+\.\s+/.test(e[n]);){let u=[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]);)u.push(e[n]),n++;n<e.length&&e[n].trim()===""&&n++,c.push(`<li>${R(u.join(" ").trim())}</li>`)}t.push(`<ol>
|
|
8
|
-
${c.join(`
|
|
9
|
-
`)}
|
|
10
|
-
</ol>`);continue}let i=[r];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&&V(e[n+1]));)i.push(e[n]),n++;t.push(`<p>${R(i.join(" "))}</p>`)}return t.join(`
|
|
11
|
-
`)}function V(a){return a.includes("-")?/^[\s|:-]+$/.test(a):!1}function w(a){let e=a.trim();return e.startsWith("|")&&(e=e.slice(1)),e.endsWith("|")&&(e=e.slice(0,-1)),e.split("|").map(t=>t.trim())}function X(a){return w(a).map(e=>{let t=e.startsWith(":"),n=e.endsWith(":");return t&&n?"center":n?"right":t?"left":null})}function Z(a,e,t){let n=s=>{let i=e[s];return i?` style="text-align:${i}"`:""},r=a.map((s,i)=>`<th${n(i)}>${R(s)}</th>`).join(""),o=t.map(s=>`<tr>${s.map((c,u)=>`<td${n(u)}>${R(c)}</td>`).join("")}</tr>`).join(`
|
|
12
|
-
`);return`<table>
|
|
13
|
-
<thead><tr>${r}</tr></thead>
|
|
14
|
-
<tbody>
|
|
15
|
-
${o}
|
|
16
|
-
</tbody>
|
|
17
|
-
</table>`}function R(a){let e=M(a);return e=e.replace(/`([^`\n]+)`/g,(t,n)=>`<code>${n}</code>`),e=e.replace(/\[([^\]]+)\]\(([^)\s]+)\)/g,(t,n,r)=>`<a href="${A(r)}">${n}</a>`),e=e.replace(/\*\*([^*\n]+)\*\*/g,(t,n)=>`<strong>${n}</strong>`),e=e.replace(/(^|[^*])\*([^*\n]+)\*(?!\*)/g,(t,n,r)=>`${n}<em>${r}</em>`),e=e.replace(/(^|[\s(])_([^_\n]+)_(?=[\s).,;:!?]|$)/g,(t,n,r)=>`${n}<em>${r}</em>`),e}function M(a){return a.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function A(a){return a.replace(/"/g,""").replace(/&/g,"&")}var U={publisher:"kanonak.org",package_:"derivation",name:"look"},O={publisher:"kanonak.org",package_:"derivation",name:"tokens"},y={publisher:"kanonak.org",package_:"core-rdf",name:"Resource"},D={publisher:"kanonak.org",package_:"core-rdf",name:"label"},ee={publisher:"kanonak.org",package_:"core-rdf",name:"comment"},ne={publisher:"kanonak.org",package_:"look",name:"Hero"},te={publisher:"kanonak.org",package_:"look",name:"PropertyList"},re={publisher:"kanonak.org",package_:"look",name:"BadgeRow"},oe={publisher:"kanonak.org",package_:"look",name:"ChipRow"},ae={publisher:"kanonak.org",package_:"look",name:"ReferenceList"},N={publisher:"kanonak.org",package_:"look",name:"Markdown"},I={publisher:"kanonak.org",package_:"look",name:"bands"},se={publisher:"kanonak.org",package_:"look",name:"title"},ie={publisher:"kanonak.org",package_:"look",name:"eyebrow"},ce={publisher:"kanonak.org",package_:"look",name:"subtitle"},W={publisher:"kanonak.org",package_:"look",name:"badges"},_={publisher:"kanonak.org",package_:"look",name:"source"},ue={publisher:"kanonak.org",package_:"look",name:"chips"},z={publisher:"kanonak.org",package_:"look",name:"entries"},le={publisher:"kanonak.org",package_:"look",name:"urlForm"},C=class{constructor(e){this.catalog=e}catalog;findCascadedLook(e){let t=new Set,n=P(e);for(;n.length>0;){let r=n.shift(),o=K(r.subject);if(t.has(o))continue;t.add(o);let s=h(this.catalog,r.subject);if(!s)continue;let i=q(s);if(i)return{declaration:i,sourceClass:{publisher:r.subject.publisher,package_:r.subject.package_,name:r.subject.name}};for(let c of F(s))n.push(c)}if(!t.has(K(y))){let r=h(this.catalog,y);if(r){let o=q(r);if(o)return{declaration:o,sourceClass:{...y}}}}}findCascadedTokens(e){let t=new Map;for(let[o,s]of E(e))t.has(o)||t.set(o,s);let n=new Set,r=P(e);for(;r.length>0;){let o=r.shift(),s=K(o.subject);if(n.has(s))continue;n.add(s);let i=h(this.catalog,o.subject);if(i){for(let[c,u]of E(i))t.has(c)||t.set(c,u);for(let c of F(i))r.push(c)}}if(!n.has(K(y))){let o=h(this.catalog,y);if(o)for(let[s,i]of E(o))t.has(s)||t.set(s,i)}return t}renderStylesheet(e){let t=this.findCascadedTokens(e),n=[];for(let[o,s]of t)n.push(` --kan-${o}: ${s};`);return`${n.length>0?`:root {
|
|
18
|
-
${n.join(`
|
|
19
|
-
`)}
|
|
20
|
-
}`:":root { /* no tokens resolved */ }"}
|
|
21
|
-
${pe}`}renderHtml(e){let t=this.findCascadedLook(e);if(!t)return`<!-- LookRenderer: no derivation.look found for ${e.namespace}/${e.name} -->`;let n=G(t.declaration);if(n.length===0)return"<!-- LookRenderer: look declaration has no bands -->";let r=fe(e),o=[];for(let s of n)o.push(this.renderBand(s,e,r));return o.join(`
|
|
22
|
-
`)}renderDocument(e){let t=this.renderHtml(e),n=this.readPropertyValueText(e,D)??e.name,r=`${e.name}.css`,o=this.hasSvgDerivation(e)?`<figure class="kan-figure"><img src="${f(e.name)}.svg" alt=""></figure>
|
|
23
|
-
`:"";return`<!doctype html>
|
|
24
|
-
<html lang="en">
|
|
25
|
-
<head>
|
|
26
|
-
<meta charset="utf-8">
|
|
27
|
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
28
|
-
<title>${f(n)}</title>
|
|
29
|
-
<link rel="stylesheet" href="${f(r)}">
|
|
30
|
-
</head>
|
|
31
|
-
<body>
|
|
32
|
-
<main class="kan-main">
|
|
33
|
-
${o}${t}
|
|
34
|
-
</main>
|
|
35
|
-
</body>
|
|
36
|
-
</html>
|
|
37
|
-
`}hasSvgDerivation(e){let t=new Set,n=P(e);for(;n.length>0;){let r=n.shift(),o=K(r.subject);if(t.has(o))continue;t.add(o);let s=h(this.catalog,r.subject);if(s){for(let i of s.statement)if(i instanceof g&&k(i,"kanonak.org","derivation","derivations")){for(let c of i.object??[])if(c instanceof v)for(let u of c.statement){if(!(u instanceof d)||!k(u,"kanonak.org","derivation","format")||!(u.object instanceof p))continue;let l=u.object.subject;if(l.publisher==="kanonak.org"&&l.package_==="formats"&&l.name==="svg")return!0}}for(let i of F(s))n.push(i)}}return!1}renderBand(e,t,n){let r=Y(e);return r?b(r,ne)?this.renderHero(e,t,n):b(r,te)?this.renderPropertyList(e,t,n):b(r,re)?this.renderBadgeRow(e,t,n):b(r,oe)?this.renderChipRow(e,t,n):b(r,ae)?this.renderReferenceList(e,t,n):b(r,N)?this.renderMarkdown(e,t):`<!-- LookRenderer: unsupported band ${r.publisher}/${r.package_}/${r.name} -->`:"<!-- LookRenderer: band has no rdf:type -->"}renderMarkdown(e,t){let n=m(e,_);if(!n)return"<!-- LookRenderer.Markdown: no look.source -->";let r=this.readPropertyValueText(t,n);return r?`<section class="kan-markdown">
|
|
38
|
-
${H(r)}
|
|
39
|
-
</section>`:""}renderRawMarkdown(e){let t=this.findCascadedLook(e);if(!t)return;let n=G(t.declaration),r=[];for(let o of n){let s=Y(o);if(!s||!b(s,N))continue;let i=m(o,_);if(!i)continue;let c=this.readPropertyValueText(e,i);c&&r.push(c)}return r.length>0?r.join(`
|
|
40
|
-
|
|
41
|
-
`):void 0}renderHero(e,t,n){let r=['<header class="kan-hero">'],o=m(e,ie);if(o){let l=this.readPropertyValueText(t,o);l&&r.push(`<span class="kan-hero-eyebrow">${f(l)}</span>`)}let s=m(e,se),i="";s&&(i=this.readPropertyValueText(t,s)??""),i||(i=t.name),r.push(`<h1 class="kan-hero-title">${f(i)}</h1>`);let c=m(e,ce);if(c){let l=this.readPropertyValueText(t,c);l&&r.push(`<p class="kan-hero-subtitle">${f(l)}</p>`)}let u=m(e,W);if(u){let l=this.readPropertyValueReferences(t,u);if(l.length>0){let S=l.map(Q=>this.renderBadge(Q,W,n)).join("");r.push(`<div class="kan-hero-badges">${S}</div>`)}}return r.push("</header>"),r.join(`
|
|
42
|
-
`)}renderPropertyList(e,t,n){let r=m(e,_);if(!r)return"<!-- LookRenderer: PropertyList missing look.source -->";let o=this.readLabelForUri(r)??r.name,s=$(t,r),i=this.gatherValueItems(s),c=i.length>0?i.map(u=>`<li>${this.renderInlineValue(u,_,n)}</li>`).join(""):'<li class="kan-empty">(no values)</li>';return['<section class="kan-property-list">',`<h3 class="kan-property-list-title">${f(o)}</h3>`,`<ul class="kan-property-list-items">${c}</ul>`,"</section>"].join(`
|
|
43
|
-
`)}renderBadgeRow(e,t,n){let r=m(e,_);if(!r)return"<!-- LookRenderer: BadgeRow missing look.source -->";let o=this.readPropertyValueReferences(t,r);return o.length===0?"":`<div class="kan-badge-row">${o.map(i=>this.renderBadge(i,_,n)).join("")}</div>`}renderChipRow(e,t,n){let r=J(e,ue);if(r.length===0)return"<!-- LookRenderer: ChipRow has no look.chips -->";let o=[];for(let s of r){let i=$(t,s);if(!i)continue;let c=this.readLabelForUri(s)??s.name,u=this.renderStatementInlineValue(i,s,n);u&&o.push(`<span class="kan-chip"><span class="kan-chip-key">${f(c)}</span> <span class="kan-chip-val">${u}</span></span>`)}return o.length===0?"":`<div class="kan-chip-row">${o.join("")}</div>`}renderReferenceList(e,t,n){let r=J(e,z);if(r.length===0)return"<!-- LookRenderer: ReferenceList has no look.entries -->";let o=[];for(let s of r){let i=this.readPropertyValueReferences(t,s);if(i.length===0)continue;let c=this.readLabelForUri(s)??s.name,u=i.map(l=>this.renderReferenceLink(l,z,n)).join(", ");o.push(`<dt>${f(c)}</dt><dd>${u}</dd>`)}return o.length===0?"":`<dl class="kan-reference-list">${o.join("")}</dl>`}readPropertyValueText(e,t){let n=$(e,t);if(n){if(n instanceof j)return n.object;if(n instanceof d){let r=n.object;return this.readLabelForUri({publisher:r.subject.publisher,package_:r.subject.package_,name:r.subject.name})??r.subject.name}if(n instanceof g)return(n.object??[]).map(o=>o instanceof p?this.readLabelForUri({publisher:o.subject.publisher,package_:o.subject.package_,name:o.subject.name})??o.subject.name:o instanceof v?o.name??"":String(o)).filter(o=>o).join(", ")}}readPropertyValueReferences(e,t){let n=$(e,t);if(!n)return[];if(n instanceof d)return[n.object];if(n instanceof g){let r=[];for(let o of n.object??[])o instanceof p&&r.push(o);return r}return[]}gatherValueItems(e){return e?e instanceof g?e.object??[]:e instanceof d?[e.object]:e instanceof x?[e.object]:e instanceof j?[e.object]:[]:[]}renderInlineValue(e,t,n){return e instanceof p?this.renderReferenceLink(e,t,n):e instanceof v?f(e.name??"(embedded)"):typeof e=="string"?f(e):typeof e=="number"||typeof e=="boolean"?f(String(e)):""}renderStatementInlineValue(e,t,n){return e instanceof j?f(e.object):e instanceof d?this.renderReferenceLink(e.object,t,n):e instanceof g?(e.object??[]).map(o=>this.renderInlineValue(o,t,n)).filter(o=>o).join(", "):""}renderReferenceLink(e,t,n){let r=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="${f(o)}">${f(r)}</a>`}renderBadge(e,t,n){let r=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}),s=this.urlForReference(e,t,n),i=o?` title="${f(o)}"`:"";return`<a class="kan-badge" href="${f(s)}"${i}>${f(r)}</a>`}urlForReference(e,t,n){let r=t?this.getUrlFormForProperty(t):"=";return B.formatResourceUrl({publisher:e.subject.publisher,package_:e.subject.package_,...e.subject.version?{version:e.subject.version}:{},name:e.subject.name},r,{contextPublisher:n})}getUrlFormForProperty(e){let t=h(this.catalog,e);if(!t)return"=";let n=T(t,le);return n==="*"||n==="^"||n==="~"||n==="="?n:"="}readLabelForUri(e){let t=h(this.catalog,e);if(t)return T(t,D)}readCommentForUri(e){let t=h(this.catalog,e);if(t)return T(t,ee)}};function E(a){let e=new Map;for(let t of a.statement){if(!(t instanceof x)||!k(t,O.publisher,O.package_,O.name))continue;let n=t.object;for(let r of n.statement){if(!(r instanceof j))continue;let o=r.predicate?.subject?.name;if(!o)continue;let s=r.object;e.set(o,s)}return e}return e}function q(a){for(let e of a.statement)if(e instanceof x&&k(e,U.publisher,U.package_,U.name))return e.object}function G(a){for(let e of a.statement){if(!(e instanceof g)||!k(e,I.publisher,I.package_,I.name))continue;let t=[];for(let n of e.object??[])n instanceof v&&t.push(n);return t}return[]}function Y(a){for(let e of a.statement)if(e instanceof d&&e.predicate?.subject?.name==="type"&&e.object instanceof p){let t=e.object.subject;return{publisher:t.publisher,package_:t.package_,name:t.name}}}function m(a,e){for(let t of a.statement)if(t instanceof d&&k(t,e.publisher,e.package_,e.name)&&t.object instanceof p){let n=t.object.subject;return{publisher:n.publisher,package_:n.package_,name:n.name}}}function J(a,e){for(let t of a.statement){if(!(t instanceof g)||!k(t,e.publisher,e.package_,e.name))continue;let n=[];for(let r of t.object??[])r instanceof p&&n.push({publisher:r.subject.publisher,package_:r.subject.package_,name:r.subject.name});return n}return[]}function $(a,e){for(let t of a.statement)if(k(t,e.publisher,e.package_,e.name))return t}function T(a,e){for(let t of a.statement)if(t instanceof j&&k(t,e.publisher,e.package_,e.name))return t.object}function P(a){let e=[];for(let t of a.statement)if(t instanceof d){if(t.predicate?.subject?.name!=="type")continue;t.object instanceof p&&e.push(t.object)}else if(t instanceof g){if(t.predicate?.subject?.name!=="type")continue;for(let n of t.object??[])n instanceof p&&e.push(n)}return e}function F(a){let e=[];for(let t of a.statement)if(t instanceof d){if(t.predicate?.subject?.name!=="subClassOf")continue;t.object instanceof p&&e.push(t.object)}else if(t instanceof g){if(t.predicate?.subject?.name!=="subClassOf")continue;for(let n of t.object??[])n instanceof p&&e.push(n)}return e}function h(a,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 r of a)if(r instanceof L&&r.name===e.name&&r.namespace===n)return r}for(let n of a){if(!(n instanceof L)||n.name!==e.name)continue;if((n.namespace||"").startsWith(`${e.publisher}/${e.package_}@`))return n}}function k(a,e,t,n){let r=a.predicate?.subject;return r?r.publisher===e&&r.package_===t&&r.name===n:!1}function b(a,e){return a.publisher===e.publisher&&a.package_===e.package_&&a.name===e.name}function K(a){return`${a.publisher}/${a.package_}/${a.name}`}function fe(a){let e=a.namespace||"",t=e.indexOf("/");return t>=0?e.substring(0,t):e}function f(a){return a.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}var pe=`
|
|
44
|
-
* { box-sizing: border-box; }
|
|
45
|
-
body {
|
|
46
|
-
background: var(--kan-bg);
|
|
47
|
-
color: var(--kan-text);
|
|
48
|
-
font-family: var(--kan-font-body);
|
|
49
|
-
line-height: var(--kan-line-height-body);
|
|
50
|
-
margin: 0;
|
|
51
|
-
}
|
|
52
|
-
a { color: var(--kan-accent); text-decoration: none; }
|
|
53
|
-
a:hover { color: var(--kan-accent-hover); text-decoration: underline; }
|
|
54
|
-
|
|
55
|
-
/* Hero band */
|
|
56
|
-
.kan-hero {
|
|
57
|
-
padding: 32px 0 24px;
|
|
58
|
-
border-bottom: 1px solid var(--kan-border);
|
|
59
|
-
margin-bottom: 32px;
|
|
60
|
-
}
|
|
61
|
-
.kan-hero-eyebrow {
|
|
62
|
-
font-family: var(--kan-font-mono);
|
|
63
|
-
font-size: 11px;
|
|
64
|
-
color: var(--kan-accent);
|
|
65
|
-
letter-spacing: 0.18em;
|
|
66
|
-
text-transform: uppercase;
|
|
67
|
-
margin-bottom: 12px;
|
|
68
|
-
display: block;
|
|
69
|
-
}
|
|
70
|
-
.kan-hero-title {
|
|
71
|
-
font-family: var(--kan-font-display);
|
|
72
|
-
font-size: 32px;
|
|
73
|
-
font-weight: 600;
|
|
74
|
-
letter-spacing: -0.015em;
|
|
75
|
-
margin: 0 0 12px;
|
|
76
|
-
line-height: var(--kan-line-height-heading);
|
|
77
|
-
color: var(--kan-text);
|
|
78
|
-
}
|
|
79
|
-
.kan-hero-subtitle {
|
|
80
|
-
font-size: 17px;
|
|
81
|
-
color: var(--kan-text-dim);
|
|
82
|
-
font-weight: 300;
|
|
83
|
-
line-height: 1.55;
|
|
84
|
-
margin: 0 0 16px;
|
|
85
|
-
}
|
|
86
|
-
.kan-hero-badges {
|
|
87
|
-
display: flex;
|
|
88
|
-
flex-wrap: wrap;
|
|
89
|
-
gap: 6px;
|
|
90
|
-
margin-top: 12px;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/* PropertyList band */
|
|
94
|
-
.kan-property-list {
|
|
95
|
-
margin: 24px 0;
|
|
96
|
-
}
|
|
97
|
-
.kan-property-list-title {
|
|
98
|
-
font-family: var(--kan-font-mono);
|
|
99
|
-
font-size: 11px;
|
|
100
|
-
letter-spacing: 0.18em;
|
|
101
|
-
text-transform: uppercase;
|
|
102
|
-
color: var(--kan-text-dim);
|
|
103
|
-
margin: 0 0 12px;
|
|
104
|
-
font-weight: 600;
|
|
105
|
-
}
|
|
106
|
-
.kan-property-list-items {
|
|
107
|
-
list-style: none;
|
|
108
|
-
padding: 0;
|
|
109
|
-
margin: 0;
|
|
110
|
-
display: flex;
|
|
111
|
-
flex-direction: column;
|
|
112
|
-
gap: 6px;
|
|
113
|
-
}
|
|
114
|
-
.kan-property-list-items > li {
|
|
115
|
-
color: var(--kan-text);
|
|
116
|
-
}
|
|
117
|
-
.kan-property-list-items > li.kan-empty {
|
|
118
|
-
color: var(--kan-text-faint);
|
|
119
|
-
font-style: italic;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/* BadgeRow band */
|
|
123
|
-
.kan-badge-row {
|
|
124
|
-
display: flex;
|
|
125
|
-
flex-wrap: wrap;
|
|
126
|
-
gap: 6px;
|
|
127
|
-
margin: 16px 0;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/* Badge (used by Hero badges + BadgeRow) */
|
|
131
|
-
.kan-badge {
|
|
132
|
-
display: inline-block;
|
|
133
|
-
padding: 2px 8px;
|
|
134
|
-
background: var(--kan-badge-bg);
|
|
135
|
-
color: var(--kan-badge-fg);
|
|
136
|
-
border-radius: var(--kan-radius-sm);
|
|
137
|
-
font-size: 11px;
|
|
138
|
-
font-weight: 500;
|
|
139
|
-
text-decoration: none;
|
|
140
|
-
letter-spacing: 0.02em;
|
|
141
|
-
}
|
|
142
|
-
.kan-badge:hover {
|
|
143
|
-
filter: brightness(1.1);
|
|
144
|
-
text-decoration: none;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
/* ChipRow band */
|
|
148
|
-
.kan-chip-row {
|
|
149
|
-
display: flex;
|
|
150
|
-
flex-wrap: wrap;
|
|
151
|
-
gap: 8px;
|
|
152
|
-
margin: 16px 0;
|
|
153
|
-
}
|
|
154
|
-
.kan-chip {
|
|
155
|
-
display: inline-flex;
|
|
156
|
-
align-items: center;
|
|
157
|
-
gap: 6px;
|
|
158
|
-
padding: 5px 10px;
|
|
159
|
-
background: var(--kan-bg-card);
|
|
160
|
-
border: 1px solid var(--kan-border);
|
|
161
|
-
border-radius: var(--kan-radius-sm);
|
|
162
|
-
font-family: var(--kan-font-mono);
|
|
163
|
-
font-size: 11px;
|
|
164
|
-
text-transform: uppercase;
|
|
165
|
-
letter-spacing: 0.04em;
|
|
166
|
-
}
|
|
167
|
-
.kan-chip-key { color: var(--kan-text-faint); }
|
|
168
|
-
.kan-chip-val { color: var(--kan-text); font-weight: 500; }
|
|
169
|
-
|
|
170
|
-
/* ReferenceList band */
|
|
171
|
-
dl.kan-reference-list {
|
|
172
|
-
display: grid;
|
|
173
|
-
grid-template-columns: max-content 1fr;
|
|
174
|
-
gap: 8px 16px;
|
|
175
|
-
margin: 16px 0;
|
|
176
|
-
padding: 16px 18px;
|
|
177
|
-
background: var(--kan-bg-card);
|
|
178
|
-
border: 1px solid var(--kan-border);
|
|
179
|
-
border-radius: var(--kan-radius);
|
|
180
|
-
}
|
|
181
|
-
dl.kan-reference-list dt {
|
|
182
|
-
font-family: var(--kan-font-mono);
|
|
183
|
-
font-size: 11px;
|
|
184
|
-
text-transform: uppercase;
|
|
185
|
-
letter-spacing: 0.1em;
|
|
186
|
-
color: var(--kan-text-faint);
|
|
187
|
-
align-self: center;
|
|
188
|
-
}
|
|
189
|
-
dl.kan-reference-list dd { margin: 0; align-self: center; }
|
|
190
|
-
|
|
191
|
-
/* Link (used by reference values across bands) */
|
|
192
|
-
.kan-link {
|
|
193
|
-
color: var(--kan-accent);
|
|
194
|
-
text-decoration: none;
|
|
195
|
-
}
|
|
196
|
-
.kan-link:hover {
|
|
197
|
-
color: var(--kan-accent-hover);
|
|
198
|
-
text-decoration: underline;
|
|
199
|
-
}
|
|
200
|
-
`.trim();export{H as a,C as b};
|