@kanonak-protocol/sdk 5.37.0 → 6.0.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/auth/CredentialProvider.d.ts +69 -49
- package/dist/auth/ExecCredentialProvider.d.ts +55 -0
- package/dist/auth/OAuthDiscovery.d.ts +38 -10
- package/dist/auth/TokenCredentialProvider.d.ts +26 -6
- package/dist/auth/challenges.d.ts +17 -0
- package/dist/auth/credentialAnswer.d.ts +34 -0
- package/dist/auth/credentialConfig.d.ts +32 -0
- package/dist/auth/credentialedFetch.d.ts +33 -22
- package/dist/auth/index.d.ts +10 -4
- package/dist/auth/scope.d.ts +30 -0
- package/dist/browser.d.ts +4 -2
- package/dist/browser.js +1 -1
- package/dist/chunk-22DSABP6.js +1 -0
- package/dist/{chunk-HKX27KBZ.js → chunk-7F2EAT5Y.js} +1 -1
- package/dist/{chunk-LE26SEJU.js → chunk-A3HRXFVX.js} +1 -1
- package/dist/{chunk-4CXAZH3C.js → chunk-ADSDFJUO.js} +1 -1
- package/dist/{chunk-W5AOJ5SJ.js → chunk-GKIX3OD6.js} +1 -1
- package/dist/chunk-HKQTB65D.js +2 -0
- package/dist/{chunk-R4QCVB5M.js → chunk-O6SOU5Y2.js} +1 -1
- package/dist/chunk-PNBTIGX7.js +2 -0
- package/dist/{chunk-DONOB6RA.js → chunk-SBO34ENZ.js} +1 -1
- package/dist/chunk-TYVZXABI.js +155 -0
- package/dist/http/HttpError.d.ts +38 -0
- package/dist/http/kanonakFetch.d.ts +5 -2
- package/dist/index.d.ts +8 -2
- package/dist/index.js +2 -1
- package/dist/parsing/index.js +1 -1
- package/dist/producer/index.js +1 -1
- package/dist/reasoning/index.js +1 -1
- package/dist/repositories/browser.js +1 -1
- package/dist/repositories/index.js +1 -1
- package/dist/search/index.js +1 -1
- package/dist/server/index.js +5 -5
- package/dist/transformations/index.js +2 -2
- package/dist/transformations/v3/CompiledTransformationV3.d.ts +28 -27
- package/dist/transformations/v3/TransformationUriConstantsV3.d.ts +27 -0
- package/dist/validation/index.js +1 -1
- package/package.json +5 -4
- package/vectors/credential-helper-vectors.json +1039 -0
- package/dist/chunk-2WUZKSLB.js +0 -2
- package/dist/chunk-3353RWDC.js +0 -1
- package/dist/chunk-EG47OOJC.js +0 -155
- package/dist/chunk-OOYGILH4.js +0 -2
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import{a as lt}from"./chunk-6VIUXP4N.js";import{e as ke,f as u,k as Sn}from"./chunk-22DSABP6.js";import{a as ut}from"./chunk-7JBKOJB4.js";import{a as yt}from"./chunk-PEJALHXK.js";import{$ as kt,_ as gt,ma as tn,na as we,oa as an,pa as $n,ta as bt}from"./chunk-NUTHBBDZ.js";import{A as oe,B as pt,C as un,D as Ye,E as xe,F as Ue,G as mt,H as Mn,I as vn,L as ht,b as Te,c as Y,d as D,e as O,i as ae,j as he,k as ge,l as J,m as le,n as ue,o as Ne,r as H,s as re,t as dt,u as ft,v as je,w as Ee,x as _,z as Fe}from"./chunk-D4QGPMRW.js";import{a as yn}from"./chunk-FUUTGGJS.js";import{c as hn,d as it,e as bn,g as ct}from"./chunk-QILEJIFU.js";import{ExpressionError as La,evaluates as Ca,validateMatchesPattern as Ua}from"@kanonak-protocol/expression";var q=class extends Error{constructor(n,t){super(`${n} (at ${t})`);this.path=t}path};function gi(r,e){let n=r.name,t=Wa(e),a={catalog:e,depth:0};if(_(r,u.InstanceTransformation))return Oa(r,n,a,t);if(_(r,u.SetTransformation))return Ia(r,n,a,t);throw new q("Subject is not a recognized v3 transformation type \u2014 expected InstanceTransformation or SetTransformation",n)}function Oa(r,e,n,t){return{kind:"instance",name:r.name,inputPattern:Kt(r,e),rule:wn(r,u.rule,`${e}.rule`,n),artifactName:wn(r,u.artifactName,`${e}.artifactName`,n),outputs:Rt(r,`${e}.outputs`),overrides:Et(r,`${e}.formatOverrides`,n),fragments:t}}function Ia(r,e,n,t){let a=Pe(r,u.partitionBy);return{kind:"set",name:r.name,inputPattern:Kt(r,e),rule:wn(r,u.rule,`${e}.rule`,n),artifactName:wn(r,u.artifactName,`${e}.artifactName`,n),outputs:Rt(r,`${e}.outputs`),overrides:Et(r,`${e}.formatOverrides`,n),partitionBy:a,fragments:t}}function Kt(r,e){let n=xt(r,u.inputPattern);if(!n)throw new q("inputPattern is required",e);return Ta(n,`${e}.inputPattern`)}function Ta(r,e){let n=Pe(r,u.matchesClass);if(!n)throw new q("matchesClass is required",e);let t=[];for(let o of Le(r,u.requires))if(o instanceof J)t.push(Hn(o.object.subject));else if(o instanceof ue)for(let i of o.object)i instanceof O&&t.push(Hn(i.subject));let a=[],s=0;for(let o of Le(r,u.sortBy))if(o instanceof ue)for(let i of o.object)i instanceof D&&a.push(vt(i,`${e}.sortBy[${s++}]`));else o instanceof le&&a.push(vt(o.object,`${e}.sortBy[${s++}]`));return{matchesClass:n,requires:t,sortBy:a}}function vt(r,e){let n=Pe(r,u.byProperty);if(!n)throw new q("SortKey.byProperty is required",e);let t=Pe(r,u.order);if(!t)throw new q("SortKey.order is required",e);if(re(t,u.ascending))return{byProperty:n,order:"ascending"};if(re(t,u.descending))return{byProperty:n,order:"descending"};throw new q(`SortKey.order must reference tx.ascending or tx.descending; got ${t.publisher}/${t.package_}/${t.name}`,e)}function wn(r,e,n,t){let a=Gn(r,e,n,t);if(!a)throw new q("expression is required",n);return He(a,n,t)}function qn(r,e,n,t){return Ee(r,e).map((a,s,o)=>{let i=o.length>1||a.fromList?`${n}[${s}]`:n;if(a.item instanceof D)return a.item;if(a.item instanceof O){let c=Fe(t.catalog,a.item.subject);if(!c)throw new q(`references '${H(a.item.subject)}', which does not resolve in the catalog`,i);return c}throw new q(`expects a node, not the literal ${JSON.stringify(a.item.value)}`,i)})}function Gn(r,e,n,t){let a=qn(r,e,n,t);if(a.length>1)throw new q(`expects one expression, has ${a.length}`,n);return a[0]}function He(r,e,n){if(r instanceof Y){let t=we(r),a=t?H(t):`${r.namespace}/${r.name}`,s=n.visiting??new Set;if(s.has(a))throw new q(`named expressions form a cycle: ${[...s,a].join(" -> ")}`,e);return $t(r,a,{...n,visiting:new Set([...s,a])})}return $t(r,e,n)}function $t(r,e,n){if(_(r,u.StringLiteral))return{kind:"string-literal",value:be(r,u.stringLiteral,e)};if(_(r,u.IntegerLiteral))return{kind:"integer-literal",value:jt(r,u.integerLiteral,e)};if(_(r,u.DecimalLiteral))return{kind:"decimal-literal",value:jt(r,u.decimalLiteral,e)};if(_(r,u.BooleanLiteral))return{kind:"boolean-literal",value:Qa(r,u.booleanLiteral,e)};if(_(r,u.VarRef))return{kind:"var-ref",varName:be(r,u.varName,e)};if(_(r,u.PropertyRead))return{kind:"property-read",source:w(r,u.readSource,`${e}.readSource`,n),readProp:De(r,u.readProp,e,"readProp")};if(_(r,u.Traverse))return{kind:"traverse",source:w(r,u.traverseSource,`${e}.traverseSource`,n),through:De(r,u.through,e,"through"),step:w(r,u.step,`${e}.step`,n)};if(_(r,u.BuildAstNode))return{kind:"build-ast-node",astClass:De(r,u.astClass,e,"astClass"),set:Ma(r,`${e}.set`,n)};if(_(r,u.When))return{kind:"when",condition:w(r,u.condition,`${e}.condition`,n),thenBuild:w(r,u.thenBuild,`${e}.thenBuild`,n),elseBuild:Va(r,u.elseBuild,`${e}.elseBuild`,n)};if(_(r,u.Concat))return{kind:"concat",parts:Nn(r,u.parts,`${e}.parts`,n)};if(_(r,u.Fallback))return{kind:"fallback",primary:w(r,u.primary,`${e}.primary`,n),alternate:w(r,u.alternate,`${e}.alternate`,n)};if(_(r,u.UriName))return{kind:"uri-name",source:w(r,u.uriNameOf,`${e}.uriNameOf`,n)};if(_(r,u.UriPublisher))return{kind:"uri-publisher",source:w(r,u.uriPublisherOf,`${e}.uriPublisherOf`,n)};if(_(r,u.UriPackage))return{kind:"uri-package",source:w(r,u.uriPackageOf,`${e}.uriPackageOf`,n)};if(_(r,u.UriVersion))return{kind:"uri-version",source:w(r,u.uriVersionOf,`${e}.uriVersionOf`,n)};if(_(r,u.SubjectUri))return{kind:"subject-uri",source:w(r,u.subjectOf,`${e}.subjectOf`,n)};if(_(r,u.UriLiteral))return{kind:"uri-literal",refTo:De(r,u.refTo,e,"refTo")};if(_(r,u.DisplayLabel))return{kind:"display-label",labelTarget:De(r,u.labelTarget,e,"labelTarget"),labelSource:De(r,u.labelSource,e,"labelSource")};if(_(r,u.ResolveRef))return{kind:"resolve-ref",source:w(r,u.resolveSource,`${e}.resolveSource`,n)};if(_(r,u.Normalize))return{kind:"normalize",source:w(r,u.normSource,`${e}.normSource`,n),normKind:Da(r,e)};if(_(r,u.UnescapedString))return{kind:"unescaped-string",source:w(r,u.unescapedSource,`${e}.unescapedSource`,n)};if(_(r,u.RenderMarkdown))return{kind:"render-markdown",source:w(r,u.renderSource,`${e}.renderSource`,n),readProp:De(r,u.renderProp,e,"renderProp"),format:Ba(r,e)};if(_(r,u.IsSet))return{kind:"is-set",check:w(r,u.checkExpr,`${e}.checkExpr`,n)};if(_(r,u.CallFragment))return Ga(r,e,n);if(_(r,u.Join))return{kind:"join",source:w(r,u.source,`${e}.source`,n),separator:be(r,u.separator,e)};if(_(r,u.Count))return{kind:"count",source:w(r,u.source,`${e}.source`,n)};if(_(r,u.Sum))return{kind:"sum",source:w(r,u.source,`${e}.source`,n)};if(_(r,u.Min))return{kind:"min",source:w(r,u.source,`${e}.source`,n)};if(_(r,u.Max))return{kind:"max",source:w(r,u.source,`${e}.source`,n)};if(_(r,u.Average))return{kind:"average",source:w(r,u.source,`${e}.source`,n)};if(_(r,u.ForEach))return{kind:"for-each",source:w(r,u.source,`${e}.source`,n),loopVar:be(r,u.loopVar,e),emit:w(r,u.emit,`${e}.emit`,n)};if(_(r,u.ListMap))return{kind:"list-map",source:w(r,u.source,`${e}.source`,n),loopVar:be(r,u.loopVar,e),mapBody:w(r,u.mapBody,`${e}.mapBody`,n)};if(_(r,u.Filter))return{kind:"filter",source:w(r,u.source,`${e}.source`,n),loopVar:be(r,u.loopVar,e),predicate:w(r,u.predicate,`${e}.predicate`,n)};if(_(r,u.PartitionBy))return{kind:"partition-by",source:w(r,u.source,`${e}.source`,n),loopVar:be(r,u.loopVar,e),partitionKey:w(r,u.partitionKey,`${e}.partitionKey`,n)};if(_(r,u.DistinctBy))return{kind:"distinct-by",source:w(r,u.source,`${e}.source`,n),loopVar:be(r,u.loopVar,e),distinctKey:w(r,u.distinctKey,`${e}.distinctKey`,n)};if(_(r,u.AllStatements))return{kind:"all-statements",source:w(r,u.statementsOf,`${e}.statementsOf`,n)};if(_(r,u.StatementPredicate))return{kind:"statement-predicate",source:w(r,u.predicateOf,`${e}.predicateOf`,n)};if(_(r,u.StatementValue))return{kind:"statement-value",source:w(r,u.valueOf,`${e}.valueOf`,n)};if(_(r,u.DateFormat))return{kind:"date-format",source:w(r,u.dateSource,`${e}.dateSource`,n),format:qa(r,e)};if(_(r,u.NumberFormat)){let a=Dn(r,u.fractionDigits);if(a!==void 0&&(!Number.isInteger(a)||a<0||a>20))throw new q(`fractionDigits must be an integer between 0 and 20; got ${a}`,e);let s=Be(r,u.currencyCode);return{kind:"number-format",source:w(r,u.numberSource,`${e}.numberSource`,n),style:Ha(r,e),...a!==void 0?{fractionDigits:a}:{},...s!==void 0?{currencyCode:s}:{}}}let t=Aa.find(a=>_(r,a.type));if(t){let a=H(t.type);if(!Ca(a))throw new q(`${a} is a numeric operator the expression runtime does not evaluate`,e);return{kind:"numeric-op",type:a,name:t.type.name,operands:t.operands.map(s=>({name:s.name,expr:w(r,s,`${e}.${s.name}`,n)}))}}if(_(r,u.Reverse))return{kind:"reverse",source:w(r,u.source,`${e}.source`,n)};if(_(r,u.WindowedMap)){let a=Dn(r,u.windowSize);if(a===void 0||!Number.isInteger(a)||a<1)throw new q("windowSize must be a positive integer",`${e}.windowSize`);return{kind:"windowed-map",source:w(r,u.source,`${e}.source`,n),windowSize:a,windowVar:be(r,u.windowVar,e),windowBody:w(r,u.windowBody,`${e}.windowBody`,n)}}if(_(r,u.PairwiseMap))return{kind:"pairwise-map",source:w(r,u.source,`${e}.source`,n),firstVar:be(r,u.firstVar,e),secondVar:be(r,u.secondVar,e),pairBody:w(r,u.pairBody,`${e}.pairBody`,n)};if(_(r,u.Scan))return{kind:"scan",source:w(r,u.source,`${e}.source`,n),initialState:w(r,u.initialState,`${e}.initialState`,n),stateVar:be(r,u.stateVar,e),elementVar:be(r,u.elementVar,e),accumulate:w(r,u.accumulate,`${e}.accumulate`,n)};if(_(r,u.ListItemAt))return{kind:"list-item-at",source:w(r,u.source,`${e}.source`,n),itemIndex:w(r,u.itemIndex,`${e}.itemIndex`,n)};if(_(r,u.Equals))return{kind:"equals",left:w(r,u.compareLeft,`${e}.compareLeft`,n),right:w(r,u.compareRight,`${e}.compareRight`,n)};if(_(r,u.GreaterThan))return{kind:"greater-than",left:w(r,u.compareLeft,`${e}.compareLeft`,n),right:w(r,u.compareRight,`${e}.compareRight`,n)};if(_(r,u.LessThan))return{kind:"less-than",left:w(r,u.compareLeft,`${e}.compareLeft`,n),right:w(r,u.compareRight,`${e}.compareRight`,n)};if(_(r,u.GreaterThanOrEqual))return{kind:"greater-than-or-equal",left:w(r,u.compareLeft,`${e}.compareLeft`,n),right:w(r,u.compareRight,`${e}.compareRight`,n)};if(_(r,u.LessThanOrEqual))return{kind:"less-than-or-equal",left:w(r,u.compareLeft,`${e}.compareLeft`,n),right:w(r,u.compareRight,`${e}.compareRight`,n)};if(_(r,u.Not))return{kind:"not",operand:w(r,u.operand,`${e}.operand`,n)};if(_(r,u.And))return{kind:"and",operands:Nn(r,u.operands,`${e}.operands`,n)};if(_(r,u.Or))return{kind:"or",operands:Nn(r,u.operands,`${e}.operands`,n)};if(_(r,u.Contains))return{kind:"contains",haystack:w(r,u.haystack,`${e}.haystack`,n),needle:w(r,u.needle,`${e}.needle`,n)};if(_(r,u.Matches)){let a=be(r,u.pattern,e);try{Ua(a)}catch(s){throw s instanceof La?new q(s.message,`${e}.pattern`):s}return{kind:"matches",source:w(r,u.matchSource,`${e}.matchSource`,n),pattern:a}}if(_(r,u.IsReference))return{kind:"is-reference",check:w(r,u.kindCheck,`${e}.kindCheck`,n)};if(_(r,u.IsEmbedded))return{kind:"is-embedded",check:w(r,u.kindCheck,`${e}.kindCheck`,n)};if(_(r,u.IsList))return{kind:"is-list",check:w(r,u.kindCheck,`${e}.kindCheck`,n)};if(_(r,u.IsString))return{kind:"is-string",check:w(r,u.kindCheck,`${e}.kindCheck`,n)};if(_(r,u.IsNumber))return{kind:"is-number",check:w(r,u.kindCheck,`${e}.kindCheck`,n)};if(_(r,u.IsBoolean))return{kind:"is-boolean",check:w(r,u.kindCheck,`${e}.kindCheck`,n)};if(_(r,u.StatementObject))return{kind:"statement-object",source:w(r,u.statementSource,`${e}.statementSource`,n)};if(_(r,u.Let))return{kind:"let",bindName:be(r,u.letName,e),bindValue:w(r,u.letValue,`${e}.letValue`,n),body:w(r,u.letBody,`${e}.letBody`,n)};if(_(r,u.GetStatementByName))return{kind:"get-statement-by-name",inSubject:w(r,u.inSubject,`${e}.inSubject`,n),byName:w(r,u.byName,`${e}.byName`,n)};throw new q("Expression is not of a recognized v3 type \u2014 embedded has no matching subclass of tx.Expression",e)}var Fa=[u.arithLeft,u.arithRight],Pa=[u.value],Aa=[...[u.Add,u.Subtract,u.Multiply,u.Divide,ke.Power,ke.Modulo,ke.Minimum,ke.Maximum].map(r=>({type:r,operands:Fa})),...[u.Abs,u.Negate,ke.Exp,ke.Ln,ke.Log10,ke.Sqrt,ke.Floor,ke.Ceil,ke.Round,ke.Sign].map(r=>({type:r,operands:Pa})),{type:ke.Clip,operands:[ke.clipValue,ke.clipLower,ke.clipUpper]}];function w(r,e,n,t){let a=Gn(r,e,n,t);if(!a)throw new q("child expression is required",n);return He(a,n,t)}function Va(r,e,n,t){let a=Gn(r,e,n,t);if(a)return He(a,n,t)}function Nn(r,e,n,t){return qn(r,e,n,t).map((a,s)=>He(a,`${n}[${s}]`,t))}function Ma(r,e,n){return qn(r,u.set,e,n).map((t,a)=>Na(t,`${e}[${a}]`,n))}function Na(r,e,n){return{field:De(r,u.field,e,"field"),value:w(r,u.bindValue,`${e}.bindValue`,n)}}function Da(r,e){let n=Pe(r,u.normKind);if(!n)throw new q("normKind is required",e);if(re(n,u.NORM_TRIM_END))return"trim-end";if(re(n,u.NORM_TO_UPPER))return"to-upper";if(re(n,u.NORM_TO_LOWER))return"to-lower";if(re(n,u.NORM_FIRST_CHAR))return"first-char";throw new q(`Unknown NormalizeKind: ${n.publisher}/${n.package_}/${n.name}`,e)}function Ba(r,e){let n=Pe(r,u.renderFormat);if(!n)throw new q("renderFormat is required",e);if(re(n,u.RENDER_HTML))return"html";if(re(n,u.RENDER_MARKDOWN))return"markdown";throw new q(`Unknown RenderFormat: ${n.publisher}/${n.package_}/${n.name}`,e)}var St=new Set(["decimal","percent","basis-points","currency","compact"]);function Ha(r,e){let n=Be(r,u.numberStyle);if(n===void 0)throw new q("numberStyle is required",e);if(!St.has(n))throw new q(`Unknown numberStyle "${n}"; supported: ${[...St].join(", ")}`,e);return n}var wt=new Set(["iso-date","iso-datetime","short-date","long-date","year","month-year"]);function qa(r,e){let n=Be(r,u.dateFormat);if(!n)throw new q("dateFormat is required",e);if(!wt.has(n))throw new q(`Unknown dateFormat "${n}"; supported: ${[...wt].join(", ")}`,e);return n}function Ga(r,e,n){let t=Pe(r,u.fragmentRef);if(!t)throw new q("fragmentRef is required",e);if(!Ya(n.catalog,t))throw new q(`ExpressionFragment not found: ${t.publisher}/${t.package_}/${t.name}`,e);return{kind:"call-fragment",fragmentKey:za(t)}}function za(r){return`${r.publisher}/${r.package_}/${r.name}`}function Wa(r){let e=new Map,n=[];for(let t of r){if(!(t instanceof Y)||!_(t,u.ExpressionFragment))continue;let a=xt(t,u.body);if(!a)continue;let s=(t.namespace||"").split("@")[0]||"",o=s.indexOf("/");if(o<0)continue;let i=s.substring(0,o),c=s.substring(o+1),l=`${i}/${c}/${t.name}`;n.push({key:l,subject:t,bodyEmb:a,pubPkgName:`${s}/${t.name}`})}for(let t of n){let a=He(t.bodyEmb,`fragment(${t.pubPkgName})`,{catalog:r,depth:0});e.set(t.key,a)}return e}function Ya(r,e){for(let n of r)if(!(!(n instanceof Y)||n.name!==e.name||!(n.namespace||"").startsWith(`${e.publisher}/${e.package_}@`))&&_(n,u.ExpressionFragment))return n}function Rt(r,e){let n=new Set;for(let t of Le(r,u.outputs))if(t instanceof J)n.add(t.object.subject.name);else if(t instanceof ue)for(let a of t.object)a instanceof O&&n.add(a.subject.name);if(n.size===0)throw new q("outputs is required (at least one OutputFormat)",e);return n}function Et(r,e,n){let t=new Map,a=0;for(let s of Le(r,u.formatOverrides))if(s instanceof ue){for(let o of s.object)if(o instanceof D){let[i,c]=_t(o,`${e}[${a++}]`);t.set(i,c)}}else if(s instanceof le){let[o,i]=_t(s.object,`${e}[${a++}]`);t.set(o,i)}return t}function _t(r,e){let n=Pe(r,u.formatTarget);if(!n)throw new q("formatTarget is required",e);let t=[];for(let i of Le(r,u.metadataKeys))if(i instanceof ae)t.push(i.object);else if(i instanceof ue)for(let c of i.object){let l=c.value;typeof l=="string"&&t.push(l)}let a=new Map;for(let i of Le(r,u.metadataRenames))if(i instanceof ue){for(let c of i.object)if(c instanceof D){let l=Be(c,u.fromKey),d=Be(c,u.toKey);l&&d&&a.set(l,d)}}else if(i instanceof le){let c=i.object,l=Be(c,u.fromKey),d=Be(c,u.toKey);l&&d&&a.set(l,d)}let s=Bn(r,u.trailingNewline),o=Bn(r,u.omitWrapper);return[n.name,{metadataKeys:t.length>0?t:void 0,metadataRenames:a,trailingNewline:s,omitWrapper:o}]}function Xa(r){return r.predicate?.subject}function Le(r,e){let n=[];for(let t of r.statement){let a=Xa(t);a&&re(a,e)&&n.push(t)}return n}function xt(r,e){for(let n of Le(r,e))if(n instanceof le)return n.object}function Pe(r,e){for(let n of Le(r,e))if(n instanceof J)return Hn(n.object.subject)}function Be(r,e){for(let n of Le(r,e))if(n instanceof ae)return n.object}function Dn(r,e){for(let n of Le(r,e))if(n instanceof he)return n.object}function Bn(r,e){for(let n of Le(r,e))if(n instanceof ge)return n.object}function be(r,e,n){let t=Be(r,e);if(t===void 0)throw new q(`${e.name} (string) is required`,n);return t}function jt(r,e,n){let t=Dn(r,e);if(t===void 0)throw new q(`${e.name} (number) is required`,n);return t}function Qa(r,e,n){let t=Bn(r,e);if(t===void 0)throw new q(`${e.name} (boolean) is required`,n);return t}function De(r,e,n,t){let a=Pe(r,e);if(!a)throw new q(`${t} (URI reference) is required`,n);return a}function Hn(r){return{publisher:r.publisher,package_:r.package_,name:r.name}}var Xe="kanonak.org",It="look",dn="core-rdf",Tt={publisher:Xe,package_:It,name:"displayLabel"},Ft={publisher:Xe,package_:It,name:"displaySummary"},Ja={publisher:Xe,package_:dn,name:"subClassOf"},Za={publisher:Xe,package_:dn,name:"label"},er={publisher:Xe,package_:dn,name:"comment"},Lt=new yn(Xe,dn,"Resource"),nr=8;function G(r,e){return Pt(r,e,new Set)}function Pt(r,e,n){let t=Ot(r,e,Tt)??Za,a=Ot(r,e,Ft)??er,s=Ct(r,e,t,n)??e.name,o=Ct(r,e,a,n);return{label:s,summary:o}}function Ct(r,e,n,t){for(let a of e.statement){let s=a.predicate;if(!(!s?.subject||!re(s.subject,n))){if(a instanceof ae)return a.object;if(a instanceof he||a instanceof ge)return String(a.object);if(a instanceof J)return Ut(r,a.object.subject,t);if(a instanceof ue){let o=[];for(let i of a.object??[])if(i instanceof O){let c=Ut(r,i.subject,t);c&&o.push(c)}if(o.length>0)return o.join(", ")}return}}}function Ut(r,e,n){let t=H(e);if(n.has(t)||n.size>=nr)return e.name;let[a]=oe(r,e);if(!a)return e.name;let s=new Set(n);return s.add(t),Pt(r,a,s).label}function Ot(r,e,n){let t=Ue(e,n);if(t)return t;let a=new Set,s=je(e,tr);for(;s.length>0;){let o=s.shift(),i=H(o);if(a.has(i))continue;a.add(i);let c=oe(r,o);for(let l of c){let d=Ue(l,n);if(d)return d}for(let l of c)s.push(...je(l,Ja))}if(!a.has(H(Lt)))for(let o of oe(r,Lt)){let i=Ue(o,n);if(i)return i}}var tr={publisher:Xe,package_:dn,name:"type"};var ar="kanonak.org",Qe=(r,e)=>({publisher:ar,package_:r,name:e}),rr=Qe("look","source"),At=Qe("look","connectors"),sr=Qe("look","relation"),or=Qe("look","lineStyle"),ir=Qe("look","participants"),cr=Qe("core-owl","SymmetricProperty"),lr=Qe("core-owl","inverseOf"),Vt=new Set(["solid","dotted","open","thick"]);function Mt(r){return Ue(r,rr)}function Nt(r,e){let n=mt(e,At),t=n?[n]:Mn(e,At),a=[];for(let s of t){if(!(s instanceof D))continue;let o=Ue(s,sr);if(!o)continue;let i=xe(s,or),c=i!==void 0&&Vt.has(i);a.push({relation:o,subject:oe(r,o)[0],declaredStyle:c?i:void 0,invalidStyle:i!==void 0&&!c?i:void 0})}return a}function Dt(r,e){let n=[];for(let t of Mn(e,ir)){if(!(t instanceof O))continue;let a=oe(r,t.subject)[0];a&&n.push(a)}return n}function fn(r,e,n){for(let t of ft(e))if(re(t,n)||an(r,t).some(a=>re(a,n)))return!0;return!1}function Bt(r,e,n){let t=!!e.subject&&fn(r,e.subject,cr);return e.declaredStyle?{style:e.declaredStyle,undirected:t}:e.subject&&je(e.subject,lr).some(s=>n.some(o=>re(s,o.relation)))?{style:"dotted",undirected:t}:{style:"solid",undirected:t}}function zn(r,e,n){let t=Mt(n);if(!t)return _n("the band declares no look.source");let a=Nt(r,n);if(a.length===0)return _n("the band declares no look.connectors \u2014 nothing can be a message");let s=pt(e,t);if(!s)return{..._n(),sourceAbsent:!0};if(!(s instanceof Ne))return _n(`look.source ${H(t)} is not a Markdown-ranged property \u2014 the order of a sequence comes from prose [[references]]`);let o=[],i=[],c=0;for(let h of s.links){if(!h.target)continue;let b=h.target.subject,m=oe(r,b)[0];m&&($n(r,m)!==void 0?a.some(y=>re(b,y.relation))?o.push({kind:"selector",relation:b}):i.push(b):(o.push({kind:"participant",subject:m}),c++))}let l=[],d=[],f,p;for(let h of o){if(h.kind==="selector"){p=h.relation;continue}let b=h.subject;if(f){let m=p?a.filter(F=>re(p,F.relation)):a,y=we(b),v=we(f),E=[],K=[];for(let F of m){let{style:L,undirected:S}=Bt(r,F,a);y&&je(f,F.relation).some(W=>H(W)===H(y))?E.push({from:f,to:b,relation:F.relation,style:L,undirected:S}):v&&je(b,F.relation).some(W=>H(W)===H(v))&&K.push({from:b,to:f,relation:F.relation,style:L,undirected:S})}let U=E.length>0?E:K;l.push(...U),U.length===0&&Ae(f)!==Ae(b)&&d.push({prev:f,next:b,selected:p}),p=void 0}f=b}let g=new Map;for(let h of Dt(r,n))g.set(Ae(h),h);for(let h of l)g.has(Ae(h.from))||g.set(Ae(h.from),h.from),g.has(Ae(h.to))||g.set(Ae(h.to),h.to);return{messages:l,gaps:d,lifelines:[...g.values()],mentions:c,strayPropertyRefs:i,sourceAbsent:!1}}function Ae(r){return`${r.namespace}/${r.name}`}function _n(r){return{messages:[],gaps:[],lifelines:[],mentions:0,strayPropertyRefs:[],sourceAbsent:!1,...r?{problem:r}:{}}}var ur="kanonak.org",dr="core-shacl",_e=r=>({publisher:ur,package_:dr,name:r}),fr=_e("NodeShape"),pr=_e("targetClass"),mr=_e("property"),gr=_e("path"),kr=_e("minCount"),hr=_e("maxCount"),br=_e("in"),yr=_e("pattern"),vr=_e("flags"),$r=_e("minLength"),Sr=_e("maxLength"),wr=_e("minInclusive"),_r=_e("maxInclusive"),jr=_e("message");function rn(r){return typeof r=="number"?r:void 0}function Kr(r){let e={},n=rn(Ye(r,kr)),t=rn(Ye(r,hr));n!==void 0&&(e.minCount=n),t!==void 0&&(e.maxCount=t);let a=rn(Ye(r,$r)),s=rn(Ye(r,Sr));a!==void 0&&(e.minLength=a),s!==void 0&&(e.maxLength=s);let o=rn(Ye(r,wr)),i=rn(Ye(r,_r));o!==void 0&&(e.minInclusive=o),i!==void 0&&(e.maxInclusive=i);let c=xe(r,yr);if(c!==void 0){let f=xe(r,vr);e.pattern=f!==void 0?{regex:c,flags:f}:{regex:c}}let l=Ee(r,br).map(f=>f.item).filter(f=>"literal"in f).map(f=>f.value);l.length>0&&(e.enumValues=l);let d=xe(r,jr);return d!==void 0&&(e.message=d),e}function Rr(r,e){let n=[];for(let{item:t}of Ee(e,mr))if(t instanceof D)n.push(t);else if(t instanceof O){let a=Fe(r,t.subject);a&&n.push(a)}return n}function Er(r){let e=new Map;for(let n of r){if(!(n instanceof Y)||!_(n,fr))continue;let t=Ue(n,pr);if(!t)continue;let a=H(t);for(let s of Rr(r,n)){let o=Ue(s,gr);if(!o)continue;let i=Kr(s);if(xr(s,i))continue;let c={pathKey:H(o),constraints:i},l=e.get(a);l?l.push(c):e.set(a,[c])}}return e}var Ht=new WeakMap;function pn(r){let e=Ht.get(r);return e||(e=Er(r),Ht.set(r,e)),e}function xr(r,e){return un(r,gt)||un(r,kt)?Object.keys(e).every(t=>t==="message"):!1}function Lr(r,e){e.minCount!==void 0&&(r.minCount=e.minCount),e.maxCount!==void 0&&(r.maxCount=e.maxCount),e.minLength!==void 0&&(r.minLength=e.minLength),e.maxLength!==void 0&&(r.maxLength=e.maxLength),e.minInclusive!==void 0&&(r.minInclusive=e.minInclusive),e.maxInclusive!==void 0&&(r.maxInclusive=e.maxInclusive),e.pattern!==void 0&&(r.pattern=e.pattern),e.enumValues!==void 0&&(r.enumValues=e.enumValues),e.message!==void 0&&(r.message=e.message)}function qt(r,e,n){let t=H(n),a=!1,s={};for(let o=e.length-1;o>=0;o--){let i=r.get(H(e[o]));if(i)for(let c of i)c.pathKey===t&&(a=!0,Lr(s,c.constraints))}if(a)return s.cardinality=s.maxCount===1?"single":"list",s.required=(s.minCount??0)>=1,s}var Je="kanonak.org",Kn="core-rdf",Gt="core-xsd",Cr={publisher:Je,package_:Kn,name:"subClassOf"},zt={publisher:Je,package_:Kn,name:"label"},Wt={publisher:Je,package_:Kn,name:"comment"},Yt={publisher:Je,package_:"core-owl",name:"oneOf"},Xt=r=>r;function Ur(r,e,n){if(e.publisher===Je&&e.package_===Kn&&e.name==="Literal")return{kind:"datatype",uri:e};let a=Fe(r,e);if(a){let s=Xt(a);if(tn.isDatatypeType(s))return{kind:"datatype",uri:e};if(tn.isClassType(s))return{kind:"class",uri:we(a)??e,localName:a.name}}return e.publisher===Je&&e.package_===Gt?{kind:"datatype",uri:e}:n==="datatype"?{kind:"datatype",uri:e}:{kind:"class",uri:e,localName:e.name}}function Or(r,e,n){if(!e.range)throw new Error(`Property ${e.uri.publisher}/${e.uri.package_}/${e.uri.name} has no rdfs.range; every property must declare a range. Validate the ontology before introspecting it.`);let t=Ur(r,e.range,e.kind),a=e.kind==="object"?"object":e.kind==="datatype"?"datatype":t.kind==="class"?"object":"datatype";return{uri:e.uri,localName:e.uri.name,kind:a,range:t,...e.label!==void 0?{label:e.label}:{},...e.comment!==void 0?{comment:e.comment}:{},...n??{}}}var jn=r=>new yn(Je,Gt,r);function Ir(r){return typeof r=="boolean"?jn("boolean"):typeof r=="number"?Number.isInteger(r)?jn("integer"):jn("decimal"):jn("string")}function Tr(r,e,n){let t=[];for(let a of vn(e,Yt,r,H(n)))if(a.kind==="subject"||a.kind==="unresolved"){let s=a.kind==="subject"?a.node:void 0,o=(s?we(s):void 0)??a.uri,i=s?xe(s,zt):void 0,c=s?xe(s,Wt):void 0;t.push({kind:"individual",uri:o,localName:o.name,...i!==void 0?{label:i}:{},...c!==void 0?{comment:c}:{}})}else a.kind==="literal"&&t.push({kind:"literal",value:a.value,datatype:Ir(a.value)});return t}function Rn(r,e,n,t){let a=an(r,e),s=H(e);return bt(r,e).filter(i=>n?!0:i.domains.some(c=>H(c)===s)).map(i=>Or(r,i,qt(t,a,i.uri)))}async function Gi(r,e,n){let t=r.metadata?.namespace_;if(!t)throw new Error("buildOntologyModel: document has no namespace (publisher/package/version).");let a=n?.includeInherited??!1,s=Array.isArray(e)?e:await new Sn().parseKanonaks(e),o=pn(s),i=p=>p.publisher===t.publisher&&p.package_===t.package_&&!(p.version&&t.version&&!it(p.version,t.version)),c=[],l=[],d=new Set,f=!1;for(let p of s){if(!(p instanceof Y))continue;let g=we(p);if(!g||!i(g)||(f=!0,!tn.isClassType(Xt(p))))continue;let h=H(g);if(d.has(h))continue;d.add(h);let b=je(p,Cr).map(v=>({uri:v,localName:v.name})),m=xe(p,zt),y=xe(p,Wt);c.push({uri:g,localName:g.name,superClasses:b,properties:Rn(s,g,a,o),...m!==void 0?{label:m}:{},...y!==void 0?{comment:y}:{}}),un(p,Yt)&&l.push({uri:g,localName:g.name,members:Tr(s,p,g),...m!==void 0?{label:m}:{},...y!==void 0?{comment:y}:{}})}if(!f)throw new Error(`buildOntologyModel: ${t.toString()} is not in the ${Array.isArray(e)?"catalog":"repository"} \u2014 a model can only be built for a document ${Array.isArray(e)?"the catalog was parsed from":"the repository holds"}.`);return{classes:c,enums:l}}function mn(r,e={}){let n=r.replace(/\r\n/g,`
|
|
2
|
+
`).split(`
|
|
3
|
+
`),t=[],a=0;for(;a<n.length;){let s=n[a];if(s.trim()===""){a++;continue}let o=/^(\s*)```(\S*)\s*$/.exec(s);if(o){let l=o[2],d=[];for(a++;a<n.length&&!/^(\s*)```\s*$/.test(n[a]);)d.push(n[a]),a++;a++;let f=d.join(`
|
|
4
|
+
`),p=l&&e.highlight?e.highlight(l,f):on(f),g=l?` class="language-${Jt(l)}"`:"";t.push(`<pre class="kan-code"><code${g}>${p}</code></pre>`);continue}let i=/^(#{1,6})\s+(.*)$/.exec(s);if(i){let l=i[1].length,d=sn(i[2].trim());t.push(`<h${l}>${d}</h${l}>`),a++;continue}if(s.includes("|")&&a+1<n.length&&Qt(n[a+1])){let l=Wn(s),d=Fr(n[a+1]);a+=2;let f=[];for(;a<n.length&&n[a].trim()!==""&&n[a].includes("|");)f.push(Wn(n[a])),a++;t.push(Pr(l,d,f));continue}if(/^\s*[-*]\s+/.test(s)){let l=[];for(;a<n.length&&/^\s*[-*]\s+/.test(n[a]);){let d=[n[a].replace(/^\s*[-*]\s+/,"")];for(a++;a<n.length&&n[a].trim()!==""&&!/^\s*[-*]\s+/.test(n[a])&&!/^\s*\d+\.\s+/.test(n[a]);)d.push(n[a]),a++;a<n.length&&n[a].trim()===""&&a++,l.push(`<li>${sn(d.join(" ").trim())}</li>`)}t.push(`<ul>
|
|
5
|
+
${l.join(`
|
|
6
|
+
`)}
|
|
7
|
+
</ul>`);continue}if(/^\s*\d+\.\s+/.test(s)){let l=[];for(;a<n.length&&/^\s*\d+\.\s+/.test(n[a]);){let d=[n[a].replace(/^\s*\d+\.\s+/,"")];for(a++;a<n.length&&n[a].trim()!==""&&!/^\s*\d+\.\s+/.test(n[a])&&!/^\s*[-*]\s+/.test(n[a]);)d.push(n[a]),a++;a<n.length&&n[a].trim()===""&&a++,l.push(`<li>${sn(d.join(" ").trim())}</li>`)}t.push(`<ol>
|
|
8
|
+
${l.join(`
|
|
9
|
+
`)}
|
|
10
|
+
</ol>`);continue}let c=[s];for(a++;a<n.length&&n[a].trim()!==""&&!/^(#{1,6})\s+/.test(n[a])&&!/^(\s*)```/.test(n[a])&&!/^\s*[-*]\s+/.test(n[a])&&!/^\s*\d+\.\s+/.test(n[a])&&!(n[a].includes("|")&&a+1<n.length&&Qt(n[a+1]));)c.push(n[a]),a++;t.push(`<p>${sn(c.join(" "))}</p>`)}return t.join(`
|
|
11
|
+
`)}function Qt(r){return r.includes("-")?/^[\s|:-]+$/.test(r):!1}function Wn(r){let e=r.trim();return e.startsWith("|")&&(e=e.slice(1)),e.endsWith("|")&&(e=e.slice(0,-1)),e.split("|").map(n=>n.trim())}function Fr(r){return Wn(r).map(e=>{let n=e.startsWith(":"),t=e.endsWith(":");return n&&t?"center":t?"right":n?"left":null})}function Pr(r,e,n){let t=o=>{let i=e[o];return i?` style="text-align:${i}"`:""},a=r.map((o,i)=>`<th${t(i)}>${sn(o)}</th>`).join(""),s=n.map(o=>`<tr>${o.map((c,l)=>`<td${t(l)}>${sn(c)}</td>`).join("")}</tr>`).join(`
|
|
12
|
+
`);return`<table>
|
|
13
|
+
<thead><tr>${a}</tr></thead>
|
|
14
|
+
<tbody>
|
|
15
|
+
${s}
|
|
16
|
+
</tbody>
|
|
17
|
+
</table>`}function sn(r){let e=on(r);return e=e.replace(/`([^`\n]+)`/g,(n,t)=>`<code>${t}</code>`),e=e.replace(/\[([^\]]+)\]\(([^)\s]+)\)/g,(n,t,a)=>`<a href="${Jt(a)}">${t}</a>`),e=e.replace(/\*\*([^*\n]+)\*\*/g,(n,t)=>`<strong>${t}</strong>`),e=e.replace(/(^|[^*])\*([^*\n]+)\*(?!\*)/g,(n,t,a)=>`${t}<em>${a}</em>`),e=e.replace(/(^|[\s(])_([^_\n]+)_(?=[\s).,;:!?]|$)/g,(n,t,a)=>`${t}<em>${a}</em>`),e}function on(r){return r.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function Jt(r){return r.replace(/"/g,""").replace(/&/g,"&")}import{ExpressionError as Zt,evaluate as Ar,matches as Vr}from"@kanonak-protocol/expression";var Mr={publisher:"kanonak.org",package_:"core-rdf",name:"label"};function Ge(r){return typeof r=="object"&&r!==null&&r.kind==="raw-string"}var ve=class extends Error{},Nr=H(u.DecimalLiteral);function Dr(r){throw new ve(`The expression runtime asked to resolve '${r.type}' inside a numeric operator`)}var gn=class{constructor(e,n,t=new Map){this.resolver=e;this.catalog=n;this.fragments=t}resolver;catalog;fragments;async evaluate(e,n){switch(e.kind){case"string-literal":return e.value;case"integer-literal":return e.value;case"decimal-literal":return e.value;case"boolean-literal":return e.value;case"uri-literal":return{...e.refTo};case"var-ref":{if(!n.has(e.varName))throw new ve(`Unbound variable "${e.varName}"`);return n.get(e.varName)}case"concat":{let t=[];for(let a of e.parts){let s=await this.evaluate(a,n);if(s!=null)if(Array.isArray(s))for(let o of s)t.push(o);else t.push(s)}return t}case"fallback":{let t=await this.evaluate(e.primary,n);return ea(t)?t:this.evaluate(e.alternate,n)}case"when":return await this.evaluate(e.condition,n)===!0?this.evaluate(e.thenBuild,n):e.elseBuild?this.evaluate(e.elseBuild,n):void 0;case"is-set":{let t=await this.evaluate(e.check,n);return ea(t)}case"property-read":{let t=await this.evaluate(e.source,n);return En(t,e.readProp)}case"traverse":{let t=await this.evaluate(e.source,n);if(!(t instanceof Te))return;let a=Hr(t,e.through),s=[];for(let o of a){let i=oe(this.catalog,o),c=i.length>0?i:[await this.resolver.resolveSubject(o,this.catalog)];for(let l of c){if(!l)continue;let d=new Map(n);d.set("input",l);let f=await this.evaluate(e.step,d);if(f!=null&&qe(f)!==""){s.push(qe(f));break}}}return s.join("")}case"uri-name":{let t=await this.evaluate(e.source,n);return en(t)?t.name:t instanceof O?t.subject.name:t instanceof Y?t.name:t instanceof D?t.name??"":void 0}case"uri-publisher":{let t=await this.evaluate(e.source,n);return Yn(t)?.publisher}case"uri-package":{let t=await this.evaluate(e.source,n);return Yn(t)?.package_}case"uri-version":{let t=await this.evaluate(e.source,n);return Yn(t)?.version}case"subject-uri":{let t=await this.evaluate(e.source,n);if(t instanceof Y){let a=t.namespace??"",s=t.name??"";return!a||!s?void 0:`${a}/${s}`}if(t instanceof O){let a=t.subject,s=a.version;return s&&typeof s.major=="number"?`${a.publisher}/${a.package_}@${s.major}.${s.minor}.${s.patch}/${a.name}`:`${a.publisher}/${a.package_}/${a.name}`}return}case"display-label":{let t=await this.resolver.resolveSubject({...e.labelTarget},this.catalog);return t?En(t,e.labelSource):void 0}case"resolve-ref":{let t=await this.evaluate(e.source,n);return t instanceof Y?t:t instanceof O?await this.resolver.resolveSubject(t.subject,this.catalog):en(t)?await this.resolver.resolveSubject(t,this.catalog):void 0}case"normalize":{let t=await this.evaluate(e.source,n),a=t==null?"":qe(t);return e.normKind==="trim-end"?a.replace(/[\s\r\n]+$/u,""):e.normKind==="to-upper"?a.toUpperCase():e.normKind==="to-lower"?a.toLowerCase():e.normKind==="first-char"?a.length===0?"":a.charAt(0):a}case"unescaped-string":{let t=await this.evaluate(e.source,n);return{kind:"raw-string",value:t==null?"":qe(t)}}case"render-markdown":{let t=await this.evaluate(e.source,n);if(!(t instanceof Te))return;let a;for(let o of t.statement){let i=Qn(o);if(i&&re(i,e.readProp)){a=o;break}}if(!(a instanceof Ne)){let o=En(t,e.readProp);return o==null?void 0:qe(o)}let s=await this.renderMarkdownLinks(a);return e.format==="html"?mn(s):s}case"build-ast-node":{let t={kind:e.astClass.name};for(let a of e.set){let s=await this.evaluate(a.value,n);if(s==null||Array.isArray(s)&&s.length===0)continue;let o=a.field.name;Gr.has(o)&&(Array.isArray(s)&&s.every(i=>na(i))?s=s.map(i=>ta(i)).join(""):na(s)&&(s=ta(s))),t[o]=s}return t}case"call-fragment":{let t=this.fragments.get(e.fragmentKey);if(!t)throw new ve(`ExpressionFragment ${e.fragmentKey} not found in registry`);return this.evaluate(t,n)}case"join":return(await this.evaluateList(e.source,n)).map(a=>{if(Array.isArray(a))throw new ve("Join cannot stringify a nested list");return a==null?"":qe(a)}).join(e.separator);case"count":return(await this.evaluateList(e.source,n)).length;case"sum":{let t=await this.evaluateList(e.source,n),a=0;for(let s of t)a+=Ze(s,"Sum");return a}case"min":{let t=await this.evaluateList(e.source,n);if(t.length===0)throw new ve("Min on an empty list is undefined; guard with IsSet");let a=Ze(t[0],"Min");for(let s=1;s<t.length;s++){let o=Ze(t[s],"Min");o<a&&(a=o)}return a}case"max":{let t=await this.evaluateList(e.source,n);if(t.length===0)throw new ve("Max on an empty list is undefined; guard with IsSet");let a=Ze(t[0],"Max");for(let s=1;s<t.length;s++){let o=Ze(t[s],"Max");o>a&&(a=o)}return a}case"average":{let t=await this.evaluateList(e.source,n);if(t.length===0)throw new ve("Average on an empty list is undefined; guard with IsSet");let a=0;for(let s of t)a+=Ze(s,"Average");return a/t.length}case"for-each":{let t=await this.evaluateList(e.source,n),a=[];for(let s of t){let o=new Map(n);o.set(e.loopVar,ye(s));let i=await this.evaluate(e.emit,o);if(i!=null)if(Array.isArray(i))for(let c of i)a.push(c);else a.push(i)}return a}case"list-map":{let t=await this.evaluateList(e.source,n),a=[];for(let s of t){let o=new Map(n);o.set(e.loopVar,ye(s)),a.push(await this.evaluate(e.mapBody,o))}return a}case"filter":{let t=await this.evaluateList(e.source,n),a=[];for(let s of t){let o=new Map(n);o.set(e.loopVar,ye(s)),await this.evaluate(e.predicate,o)===!0&&a.push(s)}return a}case"partition-by":{let t=await this.evaluateList(e.source,n),a=new Map,s=[];for(let o of t){let i=new Map(n);i.set(e.loopVar,ye(o));let c=await this.evaluate(e.partitionKey,i),l=sa(c),d=a.get(l);d||(d={kind:"Partition",key:c,members:[]},a.set(l,d),s.push(l)),d.members.push(o)}return s.map(o=>a.get(o))}case"distinct-by":{let t=await this.evaluateList(e.source,n),a=new Set,s=[];for(let o of t){let i=new Map(n);i.set(e.loopVar,ye(o));let c=await this.evaluate(e.distinctKey,i),l=sa(c);a.has(l)||(a.add(l),s.push(o))}return s}case"all-statements":{let t=await this.evaluate(e.source,n);return t instanceof Te?t.statement:[]}case"statement-predicate":{let t=await this.evaluate(e.source,n);if(Xn(t)){let a=t.predicate;if(a instanceof O)return a}return}case"statement-value":{let t=await this.evaluate(e.source,n);return Xn(t)?Zr(t):void 0}case"date-format":{let t=await this.evaluate(e.source,n),a=t==null?"":qe(t);return a?zr(a,e.format):""}case"number-format":{let t=await this.evaluate(e.source,n),a=t==null?"":qe(t);return a.trim()?Jr(a,e.style,e.fractionDigits,e.currencyCode):""}case"numeric-op":{let t={type:e.type};for(let a of e.operands){let s=Ze(ye(await this.evaluate(a.expr,n)),e.name);t[a.name]={type:Nr,decimalLiteral:s}}try{return Ar(t,void 0,Dr)}catch(a){throw a instanceof Zt?new ve(a.message):a}}case"reverse":{if(e.source.kind==="reverse")return this.evaluate(e.source.source,n);let t=await this.evaluateReverseIterator(e.source,n);return t!==void 0?t:[...await this.evaluateList(e.source,n)].reverse()}case"windowed-map":{let t=await this.evaluateList(e.source,n);if(t.length<e.windowSize)return[];let a=[];for(let s=0;s+e.windowSize<=t.length;s++){let o=t.slice(s,s+e.windowSize),i=new Map(n);i.set(e.windowVar,o);let c=await this.evaluate(e.windowBody,i);if(c!=null)if(Array.isArray(c))for(let l of c)a.push(l);else a.push(c)}return a}case"pairwise-map":{let t=await this.evaluateList(e.source,n);if(t.length<2)return[];let a=[];for(let s=0;s+1<t.length;s++){let o=new Map(n);o.set(e.firstVar,ye(t[s])),o.set(e.secondVar,ye(t[s+1]));let i=await this.evaluate(e.pairBody,o);if(i!=null)if(Array.isArray(i))for(let c of i)a.push(c);else a.push(i)}return a}case"scan":{let t=await this.evaluateList(e.source,n);if(t.length===0)return[];let a=await this.evaluate(e.initialState,n),s=[];for(let o of t){let i=new Map(n);i.set(e.stateVar,a),i.set(e.elementVar,ye(o));let c=await this.evaluate(e.accumulate,i);s.push(c),a=c}return s}case"list-item-at":{let t=await this.evaluateList(e.source,n),a=ye(await this.evaluate(e.itemIndex,n));if(typeof a!="number"||!Number.isInteger(a)||a<0)throw new ve("ListItemAt itemIndex must be a non-negative integer");return a>=t.length?void 0:t[a]}case"equals":{let t=await this.evaluate(e.left,n),a=await this.evaluate(e.right,n);return aa(t,a)}case"greater-than":{let t=await this.evaluate(e.left,n),a=await this.evaluate(e.right,n);return typeof t!="number"||typeof a!="number"?!1:t>a}case"less-than":{let t=await this.evaluate(e.left,n),a=await this.evaluate(e.right,n);return typeof t!="number"||typeof a!="number"?!1:t<a}case"greater-than-or-equal":{let t=await this.evaluate(e.left,n),a=await this.evaluate(e.right,n);return typeof t!="number"||typeof a!="number"?!1:t>=a}case"less-than-or-equal":{let t=await this.evaluate(e.left,n),a=await this.evaluate(e.right,n);return typeof t!="number"||typeof a!="number"?!1:t<=a}case"not":{let t=await this.evaluate(e.operand,n);return t===!0?!1:t===!1?!0:void 0}case"and":{for(let t of e.operands)if(await this.evaluate(t,n)!==!0)return!1;return!0}case"or":{for(let t of e.operands)if(await this.evaluate(t,n)===!0)return!0;return!1}case"contains":{let t=await this.evaluateList(e.haystack,n),a=await this.evaluate(e.needle,n);for(let s of t)if(aa(s,a))return!0;return!1}case"matches":{let t=ye(await this.evaluate(e.source,n)),a=Ge(t)?t.value:t;if(typeof a!="string")throw new ve(`Matches requires a string matchSource; got ${oa(a)}`);try{return Vr(a,e.pattern)}catch(s){throw s instanceof Zt?new ve(s.message):s}}case"is-reference":{let t=await this.evaluate(e.check,n);return t instanceof O||t instanceof Y||en(t)}case"is-embedded":return await this.evaluate(e.check,n)instanceof D;case"is-list":{let t=await this.evaluate(e.check,n);return Array.isArray(t)}case"is-string":return typeof await this.evaluate(e.check,n)=="string";case"is-number":return typeof await this.evaluate(e.check,n)=="number";case"is-boolean":return typeof await this.evaluate(e.check,n)=="boolean";case"statement-object":{let t=await this.evaluate(e.source,n);if(!Xn(t))return;let a=t;return a instanceof ae||a instanceof he||a instanceof ge||a instanceof J||a instanceof le||a instanceof ue?a.object:void 0}case"let":{let t=await this.evaluate(e.bindValue,n),a=new Map(n);return a.set(e.bindName,t),this.evaluate(e.body,a)}case"get-statement-by-name":{let t=await this.evaluate(e.inSubject,n),a=await this.evaluate(e.byName,n);if(!(t instanceof Te)||typeof a!="string")return;for(let s of t.statement)if(s.predicate?.subject?.name===a)return s;return}default:{let t=e;throw new ve("Unknown expression kind")}}}async renderMarkdownLinks(e){let n=e.object,t="",a=0;for(let s of e.links){if(t+=n.slice(a,s.startOffset),s.target){let o=s.target.subject,i=s.displayText??await this.resolveLabel(o)??o.name;t+=`[${i}](${dt(o)})`}else t+=s.displayText??s.reference;a=s.endOffset}return t+=n.slice(a),t}async resolveLabel(e){let n=await this.resolver.resolveSubject(e,this.catalog);if(!n)return;let t=En(n,Mr);return typeof t=="string"?t:void 0}async evaluateList(e,n){let t=await this.evaluate(e,n);return t==null?[]:Array.isArray(t)?t:[t]}async evaluateReverseIterator(e,n){if(e.kind==="pairwise-map"){let t=await this.evaluateList(e.source,n);if(t.length<2)return[];let a=[];for(let s=t.length-1;s>=1;s--){let o=new Map(n);o.set(e.firstVar,ye(t[s-1])),o.set(e.secondVar,ye(t[s]));let i=await this.evaluate(e.pairBody,o);if(i!=null)if(Array.isArray(i))for(let c of i)a.push(c);else a.push(i)}return a}if(e.kind==="for-each"){let t=await this.evaluateList(e.source,n),a=[];for(let s=t.length-1;s>=0;s--){let o=new Map(n);o.set(e.loopVar,ye(t[s]));let i=await this.evaluate(e.emit,o);if(i!=null)if(Array.isArray(i))for(let c of i)a.push(c);else a.push(i)}return a}if(e.kind==="list-map"){let t=await this.evaluateList(e.source,n),a=[];for(let s=t.length-1;s>=0;s--){let o=new Map(n);o.set(e.loopVar,ye(t[s])),a.push(await this.evaluate(e.mapBody,o))}return a}if(e.kind==="windowed-map"){let t=await this.evaluateList(e.source,n);if(t.length<e.windowSize)return[];let a=[];for(let s=t.length-e.windowSize;s>=0;s--){let o=t.slice(s,s+e.windowSize),i=new Map(n);i.set(e.windowVar,o);let c=await this.evaluate(e.windowBody,i);if(c!=null)if(Array.isArray(c))for(let l of c)a.push(l);else a.push(c)}return a}}};function En(r,e){if(r instanceof Te)return Br(r,e);if(qr(r))return re(e,u.key)?r.key:re(e,u.members)?r.members:void 0}function Br(r,e){for(let n of r.statement){let t=Qn(n);if(!(!t||!re(t,e))&&(n instanceof ae||n instanceof he||n instanceof ge||n instanceof J||n instanceof le||n instanceof ue))return n.object}}function Hr(r,e){let n=[];for(let t of r.statement){let a=Qn(t);if(!(!a||!re(a,e))){if(t instanceof J)n.push(t.object.subject);else if(t instanceof ue)for(let s of t.object)s instanceof O&&n.push(s.subject)}}return n}function Qn(r){return r.predicate?.subject}function qe(r){if(r==null)return"";if(typeof r=="string")return r;if(typeof r=="number"||typeof r=="boolean")return String(r);if(Ge(r))return r.value;if(r instanceof Te)return r.name??"";if(r instanceof O)return r.subject.name;if(en(r))return r.name;let e=r.value;return typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):""}function ye(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)&&!(r instanceof Te)&&!(r instanceof O)&&!(r instanceof D)&&"value"in r?r.value:r}function ea(r){return r==null?!1:typeof r=="string"||Array.isArray(r)?r.length>0:typeof r=="boolean"?r===!0:!0}function en(r){return typeof r=="object"&&r!==null&&typeof r.publisher=="string"&&typeof r.package_=="string"&&typeof r.name=="string"}function qr(r){return typeof r=="object"&&r!==null&&r.kind==="Partition"&&Array.isArray(r.members)}function Ze(r,e){if(typeof r=="number"&&Number.isFinite(r))return r;throw new ve(`${e} requires numeric elements; got ${oa(r)}`)}function Yn(r){if(r instanceof Y){let e=r.namespace??"",n=e.indexOf("/"),t=e.indexOf("@",n+1);return n<0||t<0?void 0:{publisher:e.substring(0,n),package_:e.substring(n+1,t),version:e.substring(t+1),name:r.name??""}}if(r instanceof O){let e=r.subject,n=e.version;return{publisher:e.publisher,package_:e.package_,version:n&&typeof n.major=="number"?`${n.major}.${n.minor}.${n.patch}`:"",name:e.name}}if(en(r))return{publisher:r.publisher,package_:r.package_,version:"",name:r.name}}var Gr=new Set(["stringValue","text","rawContent","key","propertyKey","linkLabel"]);function na(r){return typeof r=="string"||typeof r=="number"||typeof r=="boolean"||Ge(r)}function ta(r){return Ge(r)?r.value:String(r)}function oa(r){return r===void 0?"undefined":r===null?"null":Array.isArray(r)?`array(${r.length})`:typeof r}function zr(r,e){let n=new Date(r);if(isNaN(n.getTime()))return"";let t=n.getUTCFullYear(),a=["January","February","March","April","May","June","July","August","September","October","November","December"][n.getUTCMonth()],s=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][n.getUTCMonth()],o=n.getUTCDate(),i=(c,l=2)=>String(c).padStart(l,"0");switch(e){case"iso-date":return`${t}-${i(n.getUTCMonth()+1)}-${i(o)}`;case"iso-datetime":return`${t}-${i(n.getUTCMonth()+1)}-${i(o)}T${i(n.getUTCHours())}:${i(n.getUTCMinutes())}:${i(n.getUTCSeconds())}Z`;case"short-date":return`${s} ${o}`;case"long-date":return`${a} ${o}, ${t}`;case"year":return String(t);case"month-year":return`${a} ${t}`}}var Wr={USD:"$",EUR:"\u20AC",GBP:"\xA3",JPY:"\xA5"},Yr={decimal:0,currency:0,compact:0,percent:2,"basis-points":4};function Xr(r,e){if(e===0)return r;let n=r.startsWith("-"),t=n?r.slice(1):r,a=t.indexOf("."),s=a===-1?t:t.slice(0,a),o=a===-1?"":t.slice(a+1),i=s+o,c=s.length+e,l;return c<=0?l=`0.${"0".repeat(-c)}${i}`:c>=i.length?l=i+"0".repeat(c-i.length):l=`${i.slice(0,c)}.${i.slice(c)}`,l=l.replace(/^0+(?=\d)/,""),n&&/[1-9]/.test(l)?`-${l}`:l}function Qr(r){let e=r.startsWith("-"),n=e?r.slice(1):r,t=n.indexOf("."),a=t===-1?n:n.slice(0,t),s=t===-1?"":n.slice(t);return`${e?"-":""}${a.replace(/\B(?=(\d{3})+(?!\d))/g,",")}${s}`}function Jr(r,e,n,t){let a=Number(r.trim());if(!Number.isFinite(a))return"";let s=/e/i.test(r.trim())?a.toFixed(20).replace(/0+$/,""):r.trim();if(e==="compact"){let i=Math.abs(a),c=[[1e12,"T"],[1e9,"B"],[1e6,"M"],[1e3,"K"]];for(let[l,d]of c)if(i>=l){let f=a/l;return`${n===void 0?String(Number(f.toFixed(1))):f.toFixed(n)}${d}`}return n===void 0?String(a):a.toFixed(n)}let o=Xr(s,Yr[e]??0);switch(n!==void 0&&(o=Number(o).toFixed(n)),e){case"percent":return`${o}%`;case"basis-points":return`${o} bp`;case"currency":{let i=(t??"USD").toUpperCase(),c=Wr[i]??`${i} `,l=o.startsWith("-");return`${l?"-":""}${c}${Qr(l?o.slice(1):o)}`}default:return o}}function aa(r,e){if(r==null||e===void 0||e===null)return!1;if(r===e)return!0;let n=typeof r=="object"&&"value"in r?r.value:void 0,t=typeof e=="object"&&"value"in e?e.value:void 0,a=n??r,s=t??e,o=ra(r),i=ra(e);return o&&i?o.publisher===i.publisher&&o.package_===i.package_&&o.name===i.name:typeof a=="string"&&typeof s=="string"||typeof a=="number"&&typeof s=="number"||typeof a=="boolean"&&typeof s=="boolean"?a===s:!1}function ra(r){if(r instanceof O){let e=r.subject;return{publisher:e.publisher,package_:e.package_,name:e.name}}if(r instanceof Y){let e=r.namespace??"",n=e.indexOf("/"),t=e.indexOf("@",n+1);if(n<0)return;let a=e.substring(0,n),s=t>=0?e.substring(n+1,t):e.substring(n+1);return{publisher:a,package_:s,name:r.name??""}}if(en(r))return{publisher:r.publisher,package_:r.package_,name:r.name}}function Xn(r){return r instanceof ae||r instanceof he||r instanceof ge||r instanceof J||r instanceof le||r instanceof ue}function Zr(r){return r instanceof ae||r instanceof he||r instanceof ge?String(r.object??""):r instanceof J?r.object?.subject?.name??"":r instanceof le?"[embedded]":r instanceof ue?(r.object??[]).map(n=>{if(n instanceof O)return n.subject.name;let t=n.name;if(t&&t.length>0)return t;let a=n.value;return typeof a=="string"||typeof a=="number"||typeof a=="boolean"?String(a):"[embedded]"}).join(", "):""}function sa(r){if(r===void 0)return"\0undef";if(r===null)return"\0null";if(typeof r=="string")return`s:${r}`;if(typeof r=="number")return`n:${r}`;if(typeof r=="boolean")return`b:${r}`;if(r instanceof O){let e=r.subject;return`r:${e.publisher}/${e.package_}/${e.name}`}if(r instanceof Te){let e=r.name??"";return`k:${r.namespace??""}/${e}`}return en(r)?`u:${r.publisher}/${r.package_}/${r.name}`:`o:${JSON.stringify(r,(e,n)=>e==="sourceKey"?void 0:n)}`}var xn=class{constructor(e,n,t){this.repository=e;this.parser=n;this.objectParser=t}repository;parser;objectParser;cache=new Map;async resolveSubject(e,n){let t=Fe(n,e);if(t)return t;let a=e.version,s=a&&typeof a.major=="number"?`@${a.major}.${a.minor}.${a.patch}`:"",o=`${e.publisher}/${e.package_}${s}`,i=this.cache.get(o);if(!i){let l=await this.repository.getDocumentsByNamespaceAsync(e.publisher,e.package_);if(l.length===0)return;let d=a&&typeof a.major=="number"?l.find(p=>{let g=p.metadata?.namespace_?.version;return g&&g.major===a.major&&g.minor===a.minor&&g.patch===a.patch})??l[0]:l[0],f=new ht(d,this.repository);i=await this.objectParser.parseKanonaks(f),this.cache.set(o,i)}let c=Fe(i,e);if(c)return c;for(let l of i)if(l instanceof Y&&l.name===e.name)return l}};var Ln=class{byLang=new Map;constructor(e){for(let n of e){if(!n.language)continue;let t=[];for(let a of n.rules){if(!a.tokenClass||!a.pattern)continue;let s;try{s=new RegExp(a.pattern,"y")}catch{continue}t.push({tokenClass:a.tokenClass,re:s})}this.byLang.set(n.language,t)}}has(e){return this.byLang.has(e)}highlight(e,n){let t=this.byLang.get(e);return!t||t.length===0?on(n):n.split(`
|
|
18
|
+
`).map(a=>this.highlightLine(a,t)).join(`
|
|
19
|
+
`)}highlightLine(e,n){let t="",a=0;for(;a<e.length;){let s=!1;for(let o of n){o.re.lastIndex=a;let i=o.re.exec(e);if(i&&i[0].length>0){t+=`<span class="kan-tok-${o.tokenClass}">${on(i[0])}</span>`,a+=i[0].length,s=!0;break}}s||(t+=on(e[a]),a++)}return t}};var Fn={publisher:"kanonak.org",package_:"derivation",name:"look"},Pn={publisher:"kanonak.org",package_:"derivation",name:"tokens"},Ce={publisher:"kanonak.org",package_:"core-rdf",name:"Resource"},Jn={publisher:"kanonak.org",package_:"core-rdf",name:"label"},ia={publisher:"kanonak.org",package_:"core-rdf",name:"comment"},es={publisher:"kanonak.org",package_:"core-rdf",name:"range"},ns={publisher:"kanonak.org",package_:"core-rdf",name:"Class"},ts={publisher:"kanonak.org",package_:"core-owl",name:"Class"},as={publisher:"kanonak.org",package_:"look",name:"Hero"},rs={publisher:"kanonak.org",package_:"look",name:"PropertyList"},ss={publisher:"kanonak.org",package_:"look",name:"PropertyTable"},os={publisher:"kanonak.org",package_:"look",name:"BadgeRow"},is={publisher:"kanonak.org",package_:"look",name:"ChipRow"},cs={publisher:"kanonak.org",package_:"look",name:"ReferenceList"},ls={publisher:"kanonak.org",package_:"look",name:"ReferencedBy"},us={publisher:"kanonak.org",package_:"look",name:"Instances"},ca={publisher:"kanonak.org",package_:"look",name:"Markdown"},ds={publisher:"kanonak.org",package_:"look",name:"NavGroup"},fs={publisher:"kanonak.org",package_:"look",name:"nav"},Zn={publisher:"kanonak.org",package_:"look",name:"NavLink"},ps={publisher:"kanonak.org",package_:"look",name:"footer"},ms={publisher:"kanonak.org",package_:"look",name:"text"},gs={publisher:"kanonak.org",package_:"look",name:"links"},la={publisher:"kanonak.org",package_:"look",name:"target"},ks={publisher:"kanonak.org",package_:"look",name:"ResourceGrid"},hs={publisher:"kanonak.org",package_:"look",name:"Timeline"},bs={publisher:"kanonak.org",package_:"look",name:"VersionDiff"},ys={publisher:"kanonak.org",package_:"look",name:"Figure"},vs={publisher:"kanonak.org",package_:"look",name:"Diagram"},$s={publisher:"kanonak.org",package_:"look",name:"facets"},Ss={publisher:"kanonak.org",package_:"look",name:"relation"},ws={publisher:"kanonak.org",package_:"look",name:"encode"},_s={publisher:"kanonak.org",package_:"look",name:"cluster"},js={publisher:"kanonak.org",package_:"look",name:"connector"},Ks={publisher:"kanonak.org",package_:"look",name:"channels"},Rs={publisher:"kanonak.org",package_:"look",name:"mapPath"},Es={publisher:"kanonak.org",package_:"look",name:"to"},xs={publisher:"kanonak.org",package_:"look",name:"mark"},Ls={publisher:"kanonak.org",package_:"look",name:"expand"},Cs={publisher:"kanonak.org",package_:"look",name:"edges"},ua={publisher:"kanonak.org",package_:"look",name:"nodeTier"},Us={publisher:"kanonak.org",package_:"look",name:"diagramTier"},Os={publisher:"kanonak.org",package_:"look",name:"nodeNote"},Is={publisher:"kanonak.org",package_:"look",name:"Sequence"},Ts={publisher:"kanonak.org",package_:"look",name:"numbered"},Fs={publisher:"kanonak.org",package_:"look",name:"EntityRelationship"},Ps={publisher:"kanonak.org",package_:"core-owl",name:"SymmetricProperty"},As={publisher:"kanonak.org",package_:"core-owl",name:"FunctionalProperty"},Vs={publisher:"kanonak.org",package_:"core-kanonak",name:"Package"},Ms={publisher:"kanonak.org",package_:"look",name:"edgeLabel"},Ns={publisher:"kanonak.org",package_:"look",name:"labelEdges"},Ds={publisher:"kanonak.org",package_:"look",name:"edgeValue"},Bs={publisher:"kanonak.org",package_:"look",name:"figureTitle"},Hs={publisher:"kanonak.org",package_:"look",name:"titlePosition"},qs=`(function(){
|
|
20
|
+
if(window.__kanDiagramZoom)return;window.__kanDiagramZoom=1;
|
|
21
|
+
var TIERS=['chip','icon','card','full'];
|
|
22
|
+
var css='.kan-dgm-tier[hidden]{display:none}.kan-dgm-tiers{position:relative}'
|
|
23
|
+
+'.kan-dgm-tiers>.kan-dgm-btn{opacity:0;transition:opacity .12s}.kan-dgm-tiers:hover>.kan-dgm-btn,.kan-dgm-btn:focus{opacity:1}'
|
|
24
|
+
+'#kan-dgm-modal{position:fixed;inset:0;z-index:9999;display:none;background:rgba(0,0,0,.85);cursor:grab}'
|
|
25
|
+
+'#kan-dgm-stage{position:absolute;top:50%;left:50%}'
|
|
26
|
+
+'#kan-dgm-bar{position:fixed;top:14px;left:50%;transform:translateX(-50%);display:flex;gap:9px;align-items:center;font:12px sans-serif;color:#cbd5e1;background:rgba(12,18,32,.92);border:1px solid #1e293b;border-radius:999px;padding:7px 14px;user-select:none}'
|
|
27
|
+
+'#kan-dgm-bar .pip{width:9px;height:9px;border-radius:50%;background:#334155;cursor:pointer}'
|
|
28
|
+
+'#kan-dgm-bar .pip.on{background:#38bdf8}'
|
|
29
|
+
+'#kan-dgm-lbl{min-width:32px;text-transform:capitalize}';
|
|
30
|
+
var sty=document.createElement('style');sty.textContent=css;(document.head||document.documentElement).appendChild(sty);
|
|
31
|
+
var S={cont:null,mode:'snap',tier:1,z:1,x:0,y:0,drag:0,sx:0,sy:0,lock:0};
|
|
32
|
+
function el(id){return document.getElementById(id);}
|
|
33
|
+
function modal(){var m=el('kan-dgm-modal');if(m)return m;
|
|
34
|
+
m=document.createElement('div');m.id='kan-dgm-modal';
|
|
35
|
+
var st=document.createElement('div');st.id='kan-dgm-stage';m.appendChild(st);
|
|
36
|
+
var bar=document.createElement('div');bar.id='kan-dgm-bar';
|
|
37
|
+
var lbl=document.createElement('span');lbl.id='kan-dgm-lbl';bar.appendChild(lbl);
|
|
38
|
+
for(var i=0;i<4;i++){(function(i){var p=document.createElement('span');p.className='pip';p.title=TIERS[i];p.addEventListener('click',function(e){e.stopPropagation();setTier(i);});bar.appendChild(p);})(i);}
|
|
39
|
+
var h=document.createElement('span');h.textContent='scroll: zoom \\u00b7 drag: pan \\u00b7 esc';h.style.cssText='margin-left:6px;color:#64748b';bar.appendChild(h);
|
|
40
|
+
m.appendChild(bar);m.addEventListener('click',function(e){if(e.target===m)close();});document.body.appendChild(m);return m;}
|
|
41
|
+
function apply(){var st=el('kan-dgm-stage');if(st)st.style.transform='translate(calc(-50% + '+S.x+'px),calc(-50% + '+S.y+'px)) scale('+S.z+')';}
|
|
42
|
+
function updBar(){var b=el('kan-dgm-bar');if(!b)return;var geo=S.mode==='geo';var ps=b.querySelectorAll('.pip');for(var i=0;i<ps.length;i++){ps[i].style.display=geo?'none':'';ps[i].className='pip'+(i===S.tier?' on':'');}el('kan-dgm-lbl').textContent=geo?'zoom':TIERS[S.tier];}
|
|
43
|
+
function sizeVisible(){var c=S.cont;if(!c||S.mode==='geo')return;var svg=c.querySelector('.kan-dgm-tier:not([hidden]) svg');if(svg){var vb=(svg.getAttribute('viewBox')||'0 0 800 600').split(' ');var w=parseFloat(vb[2])||800;svg.style.width=Math.min(w,window.innerWidth*0.92)+'px';svg.style.height='auto';svg.style.display='block';}apply();}
|
|
44
|
+
function setTier(i){i=Math.max(0,Math.min(3,i));S.tier=i;var c=S.cont;if(!c)return;var ts=c.querySelectorAll('.kan-dgm-tier');for(var j=0;j<ts.length;j++){if(ts[j].getAttribute('data-tier')===TIERS[i])ts[j].removeAttribute('hidden');else ts[j].setAttribute('hidden','');}sizeVisible();updBar();}
|
|
45
|
+
function uniq(root){var seq=(window.__kanMk=(window.__kanMk||0)+1);var map={};var mk=root.querySelectorAll('marker[id]');for(var i=0;i<mk.length;i++){var o=mk[i].getAttribute('id');var n=o+'_z'+seq;map[o]=n;mk[i].setAttribute('id',n);}var all=root.querySelectorAll('[marker-end],[marker-start],[marker-mid]');for(var j=0;j<all.length;j++){(function(e){['marker-end','marker-start','marker-mid'].forEach(function(a){var v=e.getAttribute(a);if(!v)return;var mm=v.match(/url\\(#(.+?)\\)/);if(mm&&map[mm[1]])e.setAttribute(a,'url(#'+map[mm[1]]+')');});})(all[j]);}}
|
|
46
|
+
function open(tiersEl){modal();var st=el('kan-dgm-stage');var c=tiersEl.cloneNode(true);uniq(c);var bb=c.querySelector('.kan-dgm-btn');if(bb&&bb.parentNode)bb.parentNode.removeChild(bb);st.innerHTML='';st.appendChild(c);S.cont=c;S.x=0;S.y=0;S.z=1;
|
|
47
|
+
S.mode=c.getAttribute('data-geo')?'geo':'snap';
|
|
48
|
+
var vis=c.querySelector('.kan-dgm-tier:not([hidden])');var t=vis?vis.getAttribute('data-tier'):'icon';S.tier=Math.max(0,TIERS.indexOf(t));
|
|
49
|
+
el('kan-dgm-modal').style.display='block';
|
|
50
|
+
if(S.mode==='geo'){var bw=c.getBoundingClientRect().width||600;S.z=Math.min(1.8,(window.innerWidth*0.9)/bw);if(!(S.z>0))S.z=1;}else sizeVisible();
|
|
51
|
+
apply();updBar();}
|
|
52
|
+
function close(){var m=el('kan-dgm-modal');if(m){m.style.display='none';el('kan-dgm-stage').innerHTML='';S.cont=null;}}
|
|
53
|
+
document.addEventListener('wheel',function(e){var m=el('kan-dgm-modal');if(!m||m.style.display==='none')return;e.preventDefault();
|
|
54
|
+
if(S.mode==='geo'){S.z*=e.deltaY<0?1.15:1/1.15;S.z=Math.max(.2,Math.min(S.z,9));apply();return;}
|
|
55
|
+
var n=Date.now();if(n-S.lock<200)return;S.lock=n;setTier(S.tier+(e.deltaY<0?1:-1));},{passive:false});
|
|
56
|
+
document.addEventListener('mousedown',function(e){var m=el('kan-dgm-modal');if(!m||m.style.display==='none')return;S.drag=1;S.sx=e.clientX-S.x;S.sy=e.clientY-S.y;m.style.cursor='grabbing';});
|
|
57
|
+
document.addEventListener('mousemove',function(e){if(!S.drag)return;S.x=e.clientX-S.sx;S.y=e.clientY-S.sy;apply();});
|
|
58
|
+
document.addEventListener('mouseup',function(){S.drag=0;var m=el('kan-dgm-modal');if(m)m.style.cursor='grab';});
|
|
59
|
+
document.addEventListener('keydown',function(e){if(e.key==='Escape')close();});
|
|
60
|
+
function enhance(){var cs=document.querySelectorAll('.kan-dgm-tiers');for(var i=0;i<cs.length;i++){(function(c){if(c.__kz)return;c.__kz=1;
|
|
61
|
+
var b=document.createElement('button');b.type='button';b.className='kan-dgm-btn';b.textContent='\\u2922';b.setAttribute('aria-label','Open and zoom');
|
|
62
|
+
b.style.cssText='position:absolute;top:6px;right:6px;z-index:3;border:1px solid var(--kan-border,#333);background:var(--kan-bg-card,#111);color:var(--kan-text,#ccc);border-radius:6px;width:28px;height:28px;cursor:pointer;font-size:15px;line-height:1;padding:0';
|
|
63
|
+
b.addEventListener('click',function(ev){ev.preventDefault();ev.stopPropagation();open(c);});c.appendChild(b);})(cs[i]);}}
|
|
64
|
+
if(document.readyState!=='loading')enhance();else document.addEventListener('DOMContentLoaded',enhance);
|
|
65
|
+
})();`,Ve={chip:56,icon:120,card:240,full:420},Gs=["chip","icon","card","full"],zs={56:"chip",120:"icon",240:"card",420:"full"},de=11,Ws={publisher:"kanonak.org",package_:"look",name:"placement"},Ys={publisher:"kanonak.org",package_:"look",name:"width"},Xs=4,Qs={publisher:"kanonak.org",package_:"look",name:"StatRow"},Js={publisher:"kanonak.org",package_:"look",name:"Horizon"},Zs={publisher:"kanonak.org",package_:"look",name:"PackageContents"},et={publisher:"kanonak.org",package_:"core-kanonak",name:"Package"},eo={publisher:"kanonak.org",package_:"core-kanonak",name:"Publisher"},no={publisher:"kanonak.org",package_:"look",name:"FeaturedResource"},to={publisher:"kanonak.org",package_:"look",name:"PublisherPackages"},ao={publisher:"kanonak.org",package_:"look",name:"packages"},ro={publisher:"kanonak.org",package_:"code-grammars",name:"CodeGrammar"},so={publisher:"kanonak.org",package_:"code-grammars",name:"language"},oo={publisher:"kanonak.org",package_:"code-grammars",name:"rule"},io={publisher:"kanonak.org",package_:"code-grammars",name:"tokenClass"},co={publisher:"kanonak.org",package_:"code-grammars",name:"pattern"},lo={publisher:"kanonak.org",package_:"look",name:"Links"},uo={publisher:"kanonak.org",package_:"link",name:"url"},fo={publisher:"kanonak.org",package_:"link",name:"links"};var po={publisher:"kanonak.org",package_:"look",name:"Distribution"},mo={publisher:"kanonak.org",package_:"look",name:"alphaPath"},go={publisher:"kanonak.org",package_:"look",name:"betaPath"},nt={publisher:"kanonak.org",package_:"look",name:"SectionHeading"},ko={publisher:"kanonak.org",package_:"look",name:"SectionNav"},da={publisher:"kanonak.org",package_:"look",name:"heading"},ho={publisher:"kanonak.org",package_:"look",name:"note"},bo={publisher:"kanonak.org",package_:"look",name:"VersionDelta"},yo={publisher:"kanonak.org",package_:"look",name:"TimePlot"},vo={publisher:"kanonak.org",package_:"look",name:"Details"},$o={publisher:"kanonak.org",package_:"look",name:"EmbeddedViews"},So={publisher:"kanonak.org",package_:"look",name:"ResourceCount"},wo={publisher:"kanonak.org",package_:"look",name:"counts"},_o={publisher:"kanonak.org",package_:"look",name:"skip"},fa={publisher:"kanonak.org",package_:"derivation",name:"derivations"},jo={publisher:"kanonak.org",package_:"look",name:"laneBy"},Ko={publisher:"kanonak.org",package_:"look",name:"stats"},Ro={publisher:"kanonak.org",package_:"look",name:"statPath"},Eo={publisher:"kanonak.org",package_:"look",name:"statLabel"},pa={publisher:"kanonak.org",package_:"look",name:"labelPath"},xo={publisher:"kanonak.org",package_:"look",name:"badgePath"},ma={publisher:"kanonak.org",package_:"look",name:"BarMeter"},Lo={publisher:"kanonak.org",package_:"look",name:"cellAs"},Co={publisher:"kanonak.org",package_:"look",name:"variants"},Uo={publisher:"kanonak.org",package_:"look",name:"when"},Oo={publisher:"kanonak.org",package_:"look",name:"property"},ga={publisher:"kanonak.org",package_:"look",name:"equals"},Io={publisher:"kanonak.org",package_:"look",name:"ResourceQuery"},To={publisher:"kanonak.org",package_:"look",name:"ofClass"},Fo={publisher:"kanonak.org",package_:"look",name:"direction"},Po={publisher:"kanonak.org",package_:"look",name:"limit"},Cn={publisher:"kanonak.org",package_:"look",name:"orderBy"},ka={publisher:"kanonak.org",package_:"look",name:"track"},kn={publisher:"kanonak.org",package_:"look",name:"metricPath"},tt={publisher:"kanonak.org",package_:"look",name:"hueBy"},ha={publisher:"kanonak.org",package_:"look",name:"lowerPath"},ba={publisher:"kanonak.org",package_:"look",name:"upperPath"},Ao={publisher:"kanonak.org",package_:"look",name:"axisMin"},Vo={publisher:"kanonak.org",package_:"look",name:"axisMax"},Mo={publisher:"kanonak.org",package_:"look",name:"valueLabel"};var ya={publisher:"kanonak.org",package_:"look",name:"semanticSvg"},No={publisher:"kanonak.org",package_:"look",name:"tierChip"},Do={publisher:"kanonak.org",package_:"look",name:"tierIcon"},Bo={publisher:"kanonak.org",package_:"look",name:"tierCard"},Ho={publisher:"kanonak.org",package_:"look",name:"tierFull"},ze={publisher:"kanonak.org",package_:"core-rdf",name:"type"},ot={publisher:"kanonak.org",package_:"core-rdf",name:"subClassOf"},va=6,qo={publisher:"kanonak.org",package_:"look",name:"bands"},Go={publisher:"kanonak.org",package_:"look",name:"title"},zo={publisher:"kanonak.org",package_:"look",name:"eyebrow"},Wo={publisher:"kanonak.org",package_:"look",name:"subtitle"},$a={publisher:"kanonak.org",package_:"look",name:"badges"},pe={publisher:"kanonak.org",package_:"look",name:"source"},Yo={publisher:"kanonak.org",package_:"look",name:"via"},Xo={publisher:"kanonak.org",package_:"look",name:"size"},Qo={publisher:"kanonak.org",package_:"look",name:"icon"},Jo={publisher:"kanonak.org",package_:"look",name:"avatar"},Zo={publisher:"kanonak.org",package_:"look",name:"contents"},ei={publisher:"kanonak.org",package_:"look",name:"transitive"},ni={publisher:"kanonak.org",package_:"look",name:"chips"},Sa={publisher:"kanonak.org",package_:"look",name:"entries"},ti={publisher:"kanonak.org",package_:"look",name:"urlForm"},Vn=class r{constructor(e){this.catalog=e}catalog;linkMode="single-publisher";setLinkMode(e){return this.linkMode=e,this}expressionFailureList=[];expressionFailureSeen=new Set;expressionFailures(){return this.expressionFailureList}noteExpressionFailure(e,n){let t=n instanceof Error?n.message:String(n),a=`${e}\0${t}`;this.expressionFailureSeen.has(a)||(this.expressionFailureSeen.add(a),this.expressionFailureList.push({carrier:e,reason:t}));let s=o=>o.replace(/-{2,}/g,"\u2013").replace(/-$/,"");return`<!-- LookRenderer: expression carrier "${s(e)}" did not compile: ${s(t)} Nothing is rendered for it. See /.well-known/kanonak-render (Expression carriers). -->`}get publisherFirst(){return this.linkMode==="open-world"}linkBase(e){return this.publisherFirst?`/${e}`:""}resourceHref(e,n,t="="){return yt.formatResourceUrl(e,t,{contextPublisher:n,...this.publisherFirst?{publisherFirst:!0}:{}})}packageHref(e,n,t){return`${this.linkBase(e)}/${n}${t?`/${t}`:""}`}publisherHref(e){return`${this.linkBase(e)}/`}_codeHighlighter;findCascadedLook(e){let n=si(e)?void 0:Un(e);return n?{declaration:n,sourceClass:{publisher:ie(e),package_:this.uriOf(e).package_,name:e.name}}:this.lookFromTypeRefs($e(e))}lookFromTypeRefs(e){let n=new Set,t=[...e];for(;t.length>0;){let s=t.shift().subject,o=Q(s);if(n.has(o))continue;n.add(o);let i=oe(this.catalog,s);for(let c of i){let l=Un(c);if(l)return{declaration:l,sourceClass:{publisher:s.publisher,package_:s.package_,name:s.name}}}for(let c of i)for(let l of In(c))t.push(l)}if(!n.has(Q(Ce)))for(let a of oe(this.catalog,Ce)){let s=Un(a);if(s)return{declaration:s,sourceClass:{...Ce}}}}matchingVariants(e){let n=this.findCascadedLook(e);if(!n)return[];let t=this.valueItems(n.declaration,Co).filter(i=>i instanceof D);if(t.length===0)return[];let a=ee(this.catalog,n.sourceClass),s={namespace:a?.namespace??"",name:a?.name??n.sourceClass.name},o=[];for(let i of t){let c=this.readEmbeddedCarrier(i,Uo);if(!c)continue;let l=B(c,Oo);if(!l)continue;let d=B(c,ga);if(d){this.valueItems(e,l).filter(g=>g instanceof O).some(g=>Q(g.subject)===Q(d))&&o.push({variant:i,declaredBy:s});continue}let f=Z(c,ga);f!==void 0&&this.readPropertyValueText(e,l)===f&&o.push({variant:i,declaredBy:s})}return o}findCascadedTokens(e){let n=this.explainCascadedTokens(e),t=new Map;for(let[a,s]of n)t.set(a,s.value);return t}explainCascadedTokens(e){let n=new Map,t=(i,c,l)=>{for(let[d,f]of ai(i))n.has(d)||n.set(d,{value:f,sourceNamespace:l?.namespace??i.namespace??"",sourceName:l?.name??i.name,level:c})};t(e,"instance");for(let{variant:i,declaredBy:c}of this.matchingVariants(e))t(i,"variant",c);let a=new Set,s=$e(e);for(;s.length>0;){let i=s.shift(),c=Q(i.subject);if(a.has(c))continue;a.add(c);let l=c===Q(Ce)?"resource-floor":"class",d=oe(this.catalog,i.subject);if(d.length!==0)for(let f of d){t(f,l);for(let p of In(f))s.push(p)}}let o=ie(e);if(o){let i=this.publisherSubject(o);i!==e&&t(i,"publisher")}if(!a.has(Q(Ce))){let i=oe(this.catalog,Ce);for(let c of i)t(c,"resource-floor")}return n}async renderSvg(e){let n=G(this.catalog,e).label,t=(n.trim().charAt(0)||"?").toUpperCase(),a=`${e.namespace??""}/${e.name}`,s=this.collectCascadedSvgTiers(e),o=new Map([["input",e],["label",n],["firstLetter",t],["uri",a],["resourceKey",e.name]]),i=await this.evaluateTier(s.tierChip,o),c=await this.evaluateTier(s.tierIcon,o),l=await this.evaluateTier(s.tierCard,o),d=await this.evaluateTier(s.tierFull,o),p=[...this.findCascadedTokens(e)].map(([g,h])=>`--kan-${g}: ${h};`).join(" ");return`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400" style="${Oe(p)}">
|
|
66
|
+
<style>
|
|
67
|
+
.tier-chip,.tier-icon,.tier-card{display:none}
|
|
68
|
+
.tier-full{display:block}
|
|
69
|
+
@media (max-width:400px){.tier-full{display:none}.tier-card{display:block}}
|
|
70
|
+
@media (max-width:160px){.tier-card{display:none}.tier-icon{display:block}}
|
|
71
|
+
@media (max-width:60px){.tier-icon{display:none}.tier-chip{display:block}}
|
|
72
|
+
</style>
|
|
73
|
+
<g class="tier-chip">${i}</g>
|
|
74
|
+
<g class="tier-icon">${c}</g>
|
|
75
|
+
<g class="tier-card">${l}</g>
|
|
76
|
+
<g class="tier-full">${d}</g>
|
|
77
|
+
</svg>`}resolverInstance;expressionResolver(){if(!this.resolverInstance){let e=new ut,n=new lt(e);this.resolverInstance=new xn(n,e,new Sn(e))}return this.resolverInstance}async evaluateTier(e,n){if(!e)return"";let t;try{t=He(e,"semanticSvg-tier",{catalog:this.catalog,depth:0})}catch(o){return this.noteExpressionFailure("look.semanticSvg tier",o)}let a=new gn(this.expressionResolver(),this.catalog);if(t.kind==="concat"){let o=[];for(let i of t.parts){let c=await a.evaluate(i,n);o.push(ja(i.kind,c))}return o.join("")}let s=await a.evaluate(t,n);return ja(t.kind,s)}async evaluateCarrier(e,n){if(!e)return;let t;try{t=He(e,"look-carrier",{catalog:this.catalog,depth:0})}catch(c){this.noteExpressionFailure("look band path carrier",c);return}let a=new gn(this.expressionResolver(),this.catalog),s=new Map([["input",n]]),o=await a.evaluate(t,s),i=xa(o);return i===""?void 0:i}async evaluateCarrierNum(e,n){let t=await this.evaluateCarrier(e,n);return t===void 0?NaN:parseFloat(t)}readEmbeddedCarrier(e,n){let t=Ke(e,n);return t instanceof le&&t.object instanceof D?t.object:void 0}referenceLabel(e){let n=e.subject,t=oe(this.catalog,n);if(t.length===0){let a=ee(this.catalog,n);a&&t.push(a)}for(let a of t){let s=G(this.catalog,a);if(s.label!==a.name)return s.label}return n.name}collectCascadedSvgTiers(e){let n={},t=c=>{let l=Ke(c,ya);if(!(l instanceof le))return;let d=l.object,f=On(d,No),p=On(d,Do),g=On(d,Bo),h=On(d,Ho);n.tierChip===void 0&&f!==void 0&&(n.tierChip=f),n.tierIcon===void 0&&p!==void 0&&(n.tierIcon=p),n.tierCard===void 0&&g!==void 0&&(n.tierCard=g),n.tierFull===void 0&&h!==void 0&&(n.tierFull=h)};t(e);let a=e.namespace||"",s=a.indexOf("/");if(s>=0){let c=a.indexOf("@"),l={publisher:a.slice(0,s),package_:a.slice(s+1,c>=0?c:a.length),name:e.name};for(let d of oe(this.catalog,l))t(d)}let o=new Set,i=$e(e);for(;i.length>0;){let c=i.shift(),l=Q(c.subject);if(o.has(l))continue;o.add(l);let d=oe(this.catalog,c.subject);for(let f of d){t(f);for(let p of In(f))i.push(p)}}if(!o.has(Q(Ce)))for(let c of oe(this.catalog,Ce))t(c);return n}renderStylesheet(e){let n=this.explainStylesheet(e),t=[];for(let[o,i]of n.tokens)t.push(` --kan-${o}: ${i.value};`);let a=t.length>0?`:root {
|
|
78
|
+
${t.join(`
|
|
79
|
+
`)}
|
|
80
|
+
}`:":root { /* no tokens resolved */ }",s=n.baseStylesheet.css??"";return`${oi(n)}
|
|
81
|
+
${a}
|
|
82
|
+
${s}`}explainStylesheet(e){let n=this.explainCascadedTokens(e),t=this.explainBaseStylesheet(ie(e)),a=this.findCascadedLook(e),s=[];return t.css||(t.problem==="content-property-unresolved"?s.push(`Base stylesheet asset ${t.sourceNamespace}/base-stylesheet is in the catalog but its site.content property did not resolve \u2014 the package was likely cached without its imports block. Pages will render UNSTYLED (CSS stops at :root). Fix: re-install it from its published source: kanonak install kanonak.org/look-styles`):s.push("No look-styles package in the render catalog \u2014 pages will render UNSTYLED (CSS stops at :root). The look stack is ambient (not imported): it must be in the workspace, the global cache, or fetchable from kanonak.org by the user running the render. Fix: kanonak install kanonak.org/look-styles")),n.size===0&&s.push("No design tokens resolved \u2014 the :root block is empty. The universal token floor lives on rdfs.Resource in kanonak.org/look-tokens; that package is missing from the render catalog. Fix: kanonak install kanonak.org/look-tokens"),a||s.push(`No look (band declaration) resolved for ${e.namespace}/${e.name} \u2014 the HTML body will be an empty comment. The universal look floor lives on rdfs.Resource in kanonak.org/universal-look. Fix: kanonak install kanonak.org/universal-look`),{resource:{namespace:e.namespace||"",name:e.name},tokens:n,baseStylesheet:t,...a?{look:{sourceClass:a.sourceClass}}:{},warnings:s}}findBaseStylesheet(e){return this.explainBaseStylesheet(e).css}explainBaseStylesheet(e){let n="kanonak.org/site/content",t=f=>this.uriOf(f).version??null,a=[],s,o,i,c;for(let f of this.catalog){if(!(f instanceof Y)||f.name!=="base-stylesheet")continue;let p=f.namespace||"";if(p.startsWith(`${e}/look-styles@`)){a.push(p);let g=t(f);g&&(!o||hn(g,o)>0)&&(s=f,o=g)}else if(p.startsWith("kanonak.org/look-styles@")){a.push(p);let g=t(f);g&&(!c||hn(g,c)>0)&&(i=f,c=g)}}let l=s??i;if(!l)return{problem:"no-look-styles-in-catalog",candidates:a};let d=l===s?"publisher-override":"universal-default";for(let f of l.statement){let p=f.predicate?.subject;if(!p)continue;if(`${p.publisher}/${p.package_}/${p.name}`===n&&f instanceof ae)return{css:f.object,sourceNamespace:l.namespace||"",scope:d,candidates:a}}return{problem:"content-property-unresolved",sourceNamespace:l.namespace||"",scope:d,candidates:a}}async renderHtml(e){let n=this.findCascadedLook(e);if(!n)return`<!-- LookRenderer: no derivation.look found for ${e.namespace}/${e.name} -->`;let t=at(n.declaration);if(t.length===0){let i=n.declaration.unresolvedPredicates;return i.length>0?`<!-- LookRenderer: look declaration has no bands \u2014 unresolved predicates dropped from the parse: ${i.map(l=>`${l.key} (authored by ${l.sourceDoc})`).join(", ")}. An import in the authoring document did not resolve; see the render-stack warnings (/.well-known/kanonak-render). -->`:"<!-- LookRenderer: look declaration has no bands -->"}let a=ie(e),s=this.collectSectionHeadings(t);this.diagramScriptEmitted=!1,this.diagramArrowSeq=0;let o=[];for(let i of t){let c=cn(i);c&&X(c,nt)&&o.push('<div style="clear:both"></div>'),o.push(this.applyBandPlacement(i,await this.renderBand(i,e,a,s)))}return o.push('<div style="clear:both"></div>'),o.join(`
|
|
83
|
+
`)}applyBandPlacement(e,n){let t=Z(e,Ws);if(t!=="floatLeft"&&t!=="floatRight")return n;let a=t==="floatLeft"?"left":"right",s=Z(e,Ys),o=s&&/^\d+(\.\d+)?(%|px|rem|em)$/.test(s)?s:"42%";return`<div class="kan-band-float kan-band-${a}" style="float:${a};width:${o};margin:${a==="left"?"0 1.25rem 0.75rem 0":"0 0 0.75rem 1.25rem"}">${n}</div>`}collectSectionHeadings(e){let n=[];for(let t of e){let a=cn(t);if(!a||!X(a,nt))continue;let s=Z(t,da);s&&n.push({slug:Ka(s),label:s})}return n}publisherSubject(e){for(let t of this.catalog){if(!(t instanceof Y)||ie(t)!==e||!$e(t).some(s=>X(s.subject,eo)))continue;return oe(this.catalog,{publisher:e,package_:this.uriOf(t).package_,name:t.name})[0]??t}let n=new Y;return n.namespace=e,n.name=e,n.statement=[J.parse("kanonak.org/core-rdf/type","kanonak.org/core-kanonak/Publisher"),ae.parse("kanonak.org/core-rdf/label",e)],n}hasDeclaredView(e){let n=this.findCascadedLook(e);return n?!(a=>a.publisher===Ce.publisher&&a.package_===Ce.package_&&a.name===Ce.name||a.publisher===et.publisher&&a.package_===et.package_&&a.name===et.name)(n.sourceClass):!1}renderPackageVersionList(e,n,t){let a=ie(t),s=this.renderNavGroup(t,a),o=this.renderBreadcrumb(t,a,{bareOverview:!0}),i=n.map(l=>`<a class="kan-resource-card" href="${k(this.packageHref(a,e,l))}/"><h3 class="kan-resource-card-title">${k(l)}</h3></a>`).join(`
|
|
84
|
+
`),c=`<header class="kan-hero">
|
|
85
|
+
<span class="kan-hero-eyebrow">PACKAGE</span>
|
|
86
|
+
<h1 class="kan-hero-title">${k(e)}</h1>
|
|
87
|
+
</header>
|
|
88
|
+
<section class="kan-resource-grid">
|
|
89
|
+
${i}
|
|
90
|
+
</section>`;return`<!doctype html>
|
|
91
|
+
<html lang="en">
|
|
92
|
+
<head>
|
|
93
|
+
<meta charset="utf-8">
|
|
94
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
95
|
+
<title>${k(e)}</title>
|
|
96
|
+
<link rel="stylesheet" href="${k(t.name)}.css">
|
|
97
|
+
</head>
|
|
98
|
+
<body>
|
|
99
|
+
${s}
|
|
100
|
+
${o}
|
|
101
|
+
<main class="kan-main">
|
|
102
|
+
${c}
|
|
103
|
+
</main>
|
|
104
|
+
</body>
|
|
105
|
+
</html>
|
|
106
|
+
`}async renderDocument(e,n){let t=await this.renderHtml(e),a=G(this.catalog,e).label,s=n?.rootIndex?"index.css":`${e.name}.css`,o=!n?.rootIndex&&this.hasSvgDerivation(e)?`<figure class="kan-figure"><img src="${k(e.name)}.svg" alt=""></figure>
|
|
107
|
+
`:"",i=ie(e),c=this.renderNavGroup(e,i),l=this.renderSiteFooter(i),d=n?.rootIndex?"":this.renderBreadcrumb(e,i,n);return`<!doctype html>
|
|
108
|
+
<html lang="en">
|
|
109
|
+
<head>
|
|
110
|
+
<meta charset="utf-8">
|
|
111
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
112
|
+
<title>${k(a)}</title>
|
|
113
|
+
<link rel="stylesheet" href="${k(s)}">
|
|
114
|
+
</head>
|
|
115
|
+
<body>
|
|
116
|
+
${c}
|
|
117
|
+
${d}
|
|
118
|
+
<main class="kan-main">
|
|
119
|
+
${o}${t}
|
|
120
|
+
</main>
|
|
121
|
+
${l}
|
|
122
|
+
</body>
|
|
123
|
+
</html>
|
|
124
|
+
`}hasSvgDerivation(e){let n=new Set,t=$e(e);for(;t.length>0;){let a=t.shift(),s=Q(a.subject);if(n.has(s))continue;n.add(s);let o=ee(this.catalog,a.subject);if(o){for(let i of this.valueItems(o,fa))if(i instanceof D)for(let c of i.statement){if(!(c instanceof J)||!Me(c,"kanonak.org","derivation","format")||!(c.object instanceof O))continue;let l=c.object.subject;if(l.publisher==="kanonak.org"&&l.package_==="formats"&&l.name==="svg")return!0}for(let i of In(o))t.push(i)}}return!1}static BAND_DISPATCH=[[ko,(e,n)=>e.renderSectionNav(n.sections)],[as,(e,n)=>e.renderHero(n.band,n.instance,n.contextPublisher)],[rs,(e,n)=>e.renderPropertyList(n.band,n.instance,n.contextPublisher)],[ss,(e,n)=>e.renderPropertyTable(n.band,n.instance,n.contextPublisher,n.pathPrefix)],[os,(e,n)=>e.renderBadgeRow(n.band,n.instance,n.contextPublisher)],[is,(e,n)=>e.renderChipRow(n.band,n.instance,n.contextPublisher)],[cs,(e,n)=>e.renderReferenceList(n.band,n.instance,n.contextPublisher)],[ls,(e,n)=>e.renderReferencedBy(n.band,n.instance,n.contextPublisher)],[us,(e,n)=>e.renderInstances(n.band,n.instance,n.contextPublisher)],[ca,(e,n)=>e.renderMarkdown(n.band,n.instance,n.contextPublisher)],[lo,(e,n)=>e.renderLinks(n.band,n.instance)],[ds,(e,n)=>e.renderNavGroup(n.instance,n.contextPublisher)],[ks,(e,n)=>e.renderResourceGrid(n.band,n.contextPublisher,n.instance)],[hs,(e,n)=>e.renderTimeline(n.band,n.contextPublisher)],[bs,(e,n)=>e.renderVersionDiff(n.band,n.contextPublisher)],[ys,(e,n)=>e.renderFigure(n.band,n.instance,n.contextPublisher)],[vs,(e,n)=>e.renderDiagram(n.band,n.instance,n.contextPublisher)],[Is,(e,n)=>e.renderSequence(n.band,n.instance,n.contextPublisher)],[Fs,(e,n)=>e.renderEntityRelationship(n.band,n.instance,n.contextPublisher)],[Qs,(e,n)=>e.renderStatRow(n.band,n.instance)],[Js,(e,n)=>e.renderHorizon(n.band,n.instance,n.contextPublisher)],[Zs,(e,n)=>e.renderPackageContents(n.instance,n.contextPublisher)],[no,(e,n)=>e.renderFeaturedResource(n.band,n.contextPublisher)],[to,(e,n)=>e.renderPublisherPackages(n.band,n.contextPublisher)],[po,(e,n)=>e.renderDistribution(n.band,n.instance)],[nt,(e,n)=>e.renderSectionHeading(n.band)],[bo,(e,n)=>e.renderVersionDelta(n.band,n.instance)],[yo,(e,n)=>e.renderTimePlot(n.band,n.instance,n.contextPublisher)],[vo,(e,n)=>e.renderDetails(n.band,n.instance,n.contextPublisher)],[$o,(e,n)=>e.renderEmbeddedViews(n.band,n.instance,n.contextPublisher,n.pathPrefix)],[So,(e,n)=>e.renderResourceCount(n.band,n.contextPublisher)],[ma,(e,n)=>e.renderBarMeter(n.band,n.instance)]];static bandDispatchUris(){return r.BAND_DISPATCH.map(([e])=>e)}uriOf(e){let n=we(e);return n?{publisher:n.publisher,package_:n.package_,name:n.name,...n.version?{version:n.version}:{}}:{publisher:ie(e),package_:"",name:e.name}}async renderBand(e,n,t,a=[],s=""){let o=cn(e);if(!o)return"<!-- LookRenderer: band has no rdf:type -->";let i={band:e,instance:n,contextPublisher:t,sections:a,pathPrefix:s};for(let[c,l]of r.BAND_DISPATCH)if(X(o,c))return l(this,i);return`<!-- LookRenderer: unsupported band ${o.publisher}/${o.package_}/${o.name} -->`}async collectTrackedSeries(e,n,t,a){let{hueBy:s,lowerPath:o,upperPath:i}=a??{},c=new Map,l=e.length;for(let d=0;d<e.length;d++){let f=e[d],p=this.readPropertyValueReferences(f,n);for(let g of p){let h=ee(this.catalog,{publisher:g.subject.publisher,package_:g.subject.package_,name:g.subject.name,...g.subject.version?{version:g.subject.version}:{}});if(!h)continue;let b=g.subject.name,m=c.get(b);m||(m={key:b,label:G(this.catalog,h).label,points:new Array(l).fill(null),...o?{lower:new Array(l).fill(null)}:{},...i?{upper:new Array(l).fill(null)}:{}},c.set(b,m));let y=await this.evaluateCarrierNum(t,h);if(Number.isFinite(y)&&(m.points[d]=y),o&&m.lower){let v=await this.evaluateCarrierNum(o,h);Number.isFinite(v)&&(m.lower[d]=v)}if(i&&m.upper){let v=await this.evaluateCarrierNum(i,h);Number.isFinite(v)&&(m.upper[d]=v)}if(s){let v=await this.evaluateCarrierNum(s,h);Number.isFinite(v)&&(m.hue=v)}m.lastSubject=h}}return[...c.values()]}hrefForSubject(e,n,t="="){let a=this.uriOf(e),s=a.package_,o=a.version;return this.resourceHref({publisher:ie(e),package_:s,name:e.name,...o?{version:o}:{}},n,t)}async renderVersionDiff(e,n){let t=B(e,pe);if(!t)return"<!-- LookRenderer.VersionDiff: no look.source -->";let a=this.readEmbeddedCarrier(e,kn),s=B(e,ka);if(!s||!a)return"<!-- LookRenderer.VersionDiff: needs look.track + look.metricPath -->";let o=B(e,Cn),i=this.readEmbeddedCarrier(e,tt),c=this.findInstancesOfClass(t,this.readTransitive(e));if(c.length===0)return"<!-- LookRenderer.VersionDiff: no instances -->";let l=g=>o?this.readPropertyValueText(g,o)??"":"",d=c.slice().sort((g,h)=>l(g).localeCompare(l(h))),f=await this.collectTrackedSeries(d,s,a,{hueBy:i});return f.length===0?"<!-- LookRenderer.VersionDiff: no tracked series -->":`<section class="kan-vdiff">${f.map((g,h)=>{let b=g.hue!==void 0?g.hue:Math.round(h*360/f.length),m=g.points.filter(F=>F!==null);if(m.length===0)return"";let y=m[0],v=m[m.length-1],E=v-y,K;if(Math.abs(E)>=.005){let F=E>0?"up":"down",L=E>0?"\u25B2":"\u25BC";K=`<span class="kan-vdiff-delta ${F}">${E>0?"+":""}${E.toFixed(2)} ${L}</span>`}else K='<span class="kan-vdiff-delta flat">\u2014</span>';let U=g.lastSubject&&this.isLinkable(ie(g.lastSubject),n)?`<a href="${k(this.hrefForSubject(g.lastSubject,n))}">${k(g.label)}</a>`:k(g.label);return`<div class="kan-vdiff-row" style="--kan-vdiff-hue:${b}"><span class="kan-vdiff-label">${U}</span><span class="kan-vdiff-start">${y.toFixed(2)}</span>`+this.sparkline(g.points,b)+`<span class="kan-vdiff-end">${v.toFixed(2)}</span>`+K+"</div>"}).join("")}</section>`}sparkline(e,n){let o=`hsl(${n},65%,60%)`,i=e.filter(m=>m!==null);if(i.length===0)return'<svg class="kan-vdiff-spark" viewBox="0 0 132 30" xmlns="http://www.w3.org/2000/svg"></svg>';let c=Math.min(...i),d=Math.max(...i)-c,f=e.length,p=m=>f<=1?132/2:4+m/(f-1)*124,g=m=>d<1e-9?30/2:26-(m-c)/d*22,h=[],b=[];return e.forEach((m,y)=>{if(m===null)return;let v=p(y),E=g(m);h.push(`${v.toFixed(1)},${E.toFixed(1)}`),b.push(`<circle cx="${v.toFixed(1)}" cy="${E.toFixed(1)}" r="2" fill="${o}"/>`)}),`<svg class="kan-vdiff-spark" viewBox="0 0 132 30" preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg" role="img"><polyline points="${h.join(" ")}" fill="none" stroke="${o}" stroke-width="1.5" stroke-linejoin="round" stroke-linecap="round"/>`+b.join("")+"</svg>"}svgUrlForSubject(e,n,t="="){return`${this.hrefForSubject(e,n,t)}.svg`}renderFigure(e,n,t){let a=n,s=B(e,pe);if(s){let d=ee(this.catalog,s);d&&(a=d)}let o=this.svgUrlForSubject(a,t),i=G(this.catalog,a).label,c=Z(e,Xo);return`<figure class="kan-figure${c==="small"||c==="medium"||c==="large"?` kan-figure-${c}`:""}"><img class="kan-figure-img" src="${k(o)}" alt="${k(i)}" loading="lazy"/></figure>`}diagramArrowSeq=0;diagramScriptEmitted=!1;async renderDiagram(e,n,t,a=0,s=new Set){let o=this.valueItems(e,$s).filter(h=>h instanceof D);if(o.length===0)return"<!-- LookRenderer.Diagram: no look.facets -->";let i=[];for(let h of o){let b=B(h,Ss);if(!b){i.push("<!-- LookRenderer.Diagram: facet has no resolvable look.relation -->");continue}let m=B(h,ws),y=this.resolveFacetNodes(n,b);if(y.length===0){i.push(`<!-- LookRenderer.Diagram: relation ${b.publisher}/${b.package_}/${b.name} resolved to 0 instances -->`);continue}let v=await this.resolveFacetChannels(h,y),E=Ke(h,xs),K=E instanceof le&&E.object instanceof D?E.object:void 0,U=Z(h,ua),F=U&&Ve[U]!==void 0?Ve[U]:void 0,L=F??this.classTierSize(y),S=zs[L??Ve.icon]??"icon",W=this.readEmbeddedCarrier(h,Os),P=B(h,Ls),A=P?ee(this.catalog,P):void 0;if(A){i.push(await this.renderDiagramExpand(y,A,t,a,s,W,F));continue}if(m&&X(m,js)){let x=B(h,Cs),j=this.facetEdgeLabel(h,x??b),N=this.readEmbeddedCarrier(h,Ds);i.push(await this.embedTiers(S,R=>x?this.renderDiagramDag(y,x,v,t,R,j,N):this.renderDiagramConnector(n,y,v,t,R,j,N)));continue}if(m&&!X(m,_s)){i.push(`<!-- LookRenderer.Diagram: unknown encode role ${m.publisher}/${m.package_}/${m.name} -->`);continue}i.push(K?`<div class="kan-dgm-tiers" data-geo="1"><div class="kan-dgm-tier" data-tier="card">${await this.renderDiagramCluster(y,v,K,t,L)}</div></div>`:await this.embedTiers(S,x=>this.renderDiagramCluster(y,v,void 0,t,x)))}let c=Z(e,Bs),l=Z(e,Hs),d=h=>`<div class="kan-diagram-title" style="font-weight:600;font-size:0.95rem;color:var(--kan-text);${h}">${k(c)}</div>`,f=c&&l!=="bottom"?d("margin:0 0 .5rem"):"",p=c&&l==="bottom"?d("margin:.5rem 0 0"):"",g="";return a===0&&!this.diagramScriptEmitted&&(this.diagramScriptEmitted=!0,g=`<script>${qs}</script>`),`<section class="kan-diagram">${f}${i.join("")}${p}${g}</section>`}async embedTiers(e,n){let t=[];for(let a of Gs){let s=await n(Ve[a]);t.push(`<div class="kan-dgm-tier" data-tier="${a}"${a===e?"":" hidden"}>${s}</div>`)}return`<div class="kan-dgm-tiers">${t.join("")}</div>`}async renderDiagramExpand(e,n,t,a,s,o,i){let c=[];for(let l of e){let d=`${l.namespace??""}/${l.name}`,f=await this.diagramNodeRow(l,t,i??56,o),g=a<Xs&&!s.has(d)?await this.renderDiagram(n,l,t,a+1,new Set([...s,d])):"",h=g?`<div style="margin-left:30px;border-left:2px solid var(--kan-border);padding-left:14px;margin-top:6px">${g}</div>`:"";c.push(`<div class="kan-diagram-node" style="margin:6px 0">${f}${h}</div>`)}return`<figure class="kan-diagram-figure"><div class="kan-diagram-tree">${c.join("")}</div></figure>`}async diagramNodeRow(e,n,t=56,a){let s=this.hrefForSubject(e,n),o=this.svgUrlForSubject(e,n),i=G(this.catalog,e).label,c=a?await this.evaluateCarrier(a,e):void 0,l=c!==void 0?`<span class="kan-diagram-node-note" style="display:block;font-size:0.8em;color:var(--kan-text-dim)">${k(c)}</span>`:"";return`<a href="${k(s)}" style="display:inline-flex;align-items:center;gap:10px;text-decoration:none"><img src="${k(o)}" width="${t}" height="${t}" alt="" loading="lazy"/><span><span class="kan-diagram-node-label">${k(i)}</span>${l}</span></a>`}classTierSize(e){let n;for(let t of e)for(let a of $e(t)){let s=ee(this.catalog,a.subject);if(!s)continue;let o=Z(s,Us),i=o?Ve[o]:void 0;i!==void 0&&(n=n===void 0?i:Math.max(n,i))}return n}resolveFacetNodes(e,n){let t=[];for(let a of this.readPropertyValueReferences(e,n)){let s=a.subject,o=ee(this.catalog,{publisher:s.publisher,package_:s.package_,name:s.name,...s.version?{version:s.version}:{}});o&&t.push(o)}return t}async resolveFacetChannels(e,n){let t=this.valueItems(e,Ks).filter(s=>s instanceof D),a=[];for(let s of t){let o=this.readEmbeddedCarrier(s,Rs),i=Z(s,Es);if(!o||!i)continue;let c=[];for(let h of n){let b=await this.evaluateCarrierNum(o,h);c.push(Number.isFinite(b)?b:NaN)}let l=c.filter(h=>Number.isFinite(h)),d=l.length?Math.min(...l):0,p=(l.length?Math.max(...l):0)-d,g=c.map(h=>Number.isFinite(h)&&p>0?(h-d)/p:.5);a.push({to:i,norm:g})}return a}facetEdgeLabel(e,n){let t=Z(e,Ms);if(t)return t;if(ri(e,Ns)&&n){let s=ee(this.catalog,n);if(s)return G(this.catalog,s).label}}async edgeText(e,n,t){let a=t&&n?await this.evaluateCarrier(t,n):void 0,s=[e,a].filter(o=>!!o);return s.length?s.join(" "):void 0}edgeLabelEl(e,n,t){return`<text x="${e.toFixed(1)}" y="${n.toFixed(1)}" text-anchor="middle" class="kan-diagram-edge-label" style="font-size:11px;paint-order:stroke;stroke:var(--kan-bg);stroke-width:3px;fill:var(--kan-text-dim)">${k(t)}</text>`}async renderDiagramCluster(e,n,t,a,s){let o=s??132,i=18,c=18,l=n.find(b=>b.to==="opacity");if(t){let b=[];for(let m=0;m<e.length;m++){let y=e[m],v=await this.renderBand(t,y,a),E=this.hrefForSubject(y,a),K=G(this.catalog,y).label,U=l?`opacity:${(.4+l.norm[m]*.6).toFixed(2)};`:"";b.push(`<a class="kan-diagram-mark" href="${k(E)}" style="display:block;text-decoration:none;${U}">${v}<span class="kan-diagram-mark-label">${k(K)}</span></a>`)}return`<figure class="kan-diagram-figure"><div class="kan-diagram-marks" style="display:flex;flex-wrap:wrap;gap:18px;align-items:flex-start">${b.join("")}</div></figure>`}let d=Math.min(e.length,4),f=Math.ceil(e.length/d),p=c*2+d*o+(d-1)*i,g=c*2+f*o+(f-1)*i,h=e.map((b,m)=>{let y=m%d,v=Math.floor(m/d),E=c+y*(o+i),K=c+v*(o+i),U=l?.4+l.norm[m]*.6:1;return this.diagramTile(b,E,K,o,a,U)}).join("");return`<figure class="kan-diagram-figure"><svg class="kan-diagram-svg" viewBox="0 0 ${p} ${g}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">${h}</svg></figure>`}async renderDiagramConnector(e,n,t,a,s,o,i){let c=s??120,l=24,d=130,f=18,p=t.find(P=>P.to==="thickness"),g=t.find(P=>P.to==="opacity"),h=n.length,b=h*c+(h-1)*l,m=f*2+b,y=f*2+c+d+c,v=f,E=f+(b-c)/2,K=f+c+d,U=`kan-arrow-${this.diagramArrowSeq++}`,F=[],L=[],S=[];for(let P=0;P<n.length;P++){let A=n[P],x=f+P*(c+l),j=v+c,N=E+c/2,R=K-de,I=x+c/2,T=(j+K)/2,$=p?1.5+p.norm[P]*5.5:2,V=g?.4+g.norm[P]*.6:1,z=g?` stroke-opacity="${V.toFixed(2)}"`:"";F.push(`<path d="M${j.toFixed(1)},${N.toFixed(1)} C${T.toFixed(1)},${N.toFixed(1)} ${T.toFixed(1)},${I.toFixed(1)} ${R.toFixed(1)},${I.toFixed(1)}" class="kan-diagram-edge" fill="none" stroke="var(--kan-border)" stroke-width="${$.toFixed(1)}"${z} marker-end="url(#${U})"/>`);let C=await this.edgeText(o,A,i);C&&L.push(this.edgeLabelEl((j+K)/2,(N+I)/2-5,C)),S.push(this.diagramTile(A,K,x,c,a,g?V:1))}let W=this.diagramTile(e,v,E,c,a);return`<figure class="kan-diagram-figure"><svg class="kan-diagram-svg" viewBox="0 0 ${y.toFixed(0)} ${m.toFixed(0)}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">${this.arrowMarkerDef(U,"var(--kan-border)")}${F.join("")}${L.join("")}${W}${S.join("")}</svg></figure>`}arrowMarkerDef(e,n){return`<defs><marker id="${e}" viewBox="0 0 ${de} ${de}" refX="0" refY="${(de/2).toFixed(1)}" markerWidth="${de}" markerHeight="${de}" markerUnits="userSpaceOnUse" orient="auto"><path d="M0,1 L${de},${(de/2).toFixed(1)} L0,${de-1}" fill="${n}"/></marker></defs>`}async renderDiagramDag(e,n,t,a,s,o,i){let c=s??110,l=110,d=22,f=18,p=new Map(e.map(($,V)=>[$.name,V])),g=new Set(e.map($=>$.name)),h=new Map(e.map($=>[$.name,[]])),b=new Map(e.map($=>[$.name,[]]));for(let $ of e)for(let V of this.readPropertyValueReferences($,n)){let z=V.subject.name;z!==$.name&&g.has(z)&&(h.get($.name).push(z),b.get(z).push($.name))}let m=new Map,y=new Set,v=$=>{let V=m.get($);if(V!==void 0)return V;if(y.has($))return 0;y.add($);let z=0;for(let C of b.get($)??[])z=Math.max(z,v(C)+1);return y.delete($),m.set($,z),z};for(let $ of e)v($.name);let E=Math.min(...m.values());if(E>0)for(let $ of[...m.keys()])m.set($,m.get($)-E);let K=Math.max(0,...m.values()),U=Array.from({length:K+1},()=>[]);for(let $ of e)U[m.get($.name)].push($);let F=Math.max(1,...U.map($=>$.length)),L=!1;for(let[$,V]of h)for(let z of V)m.get(z)<=m.get($)&&(L=!0);let S=L?84:0,W=F*c+(F-1)*d,P=f*2+(K+1)*c+K*l,A=f*2+S+W,x=new Map;U.forEach(($,V)=>{let z=$.length*c+($.length-1)*d,C=f+S+(W-z)/2;$.forEach((M,fe)=>x.set(M.name,{x:f+V*(c+l),y:C+fe*(c+d)}))});let j=t.find($=>$.to==="thickness"),N=`kan-arrow-${this.diagramArrowSeq++}`,R=[],I=[];for(let[$,V]of h){let z=x.get($);for(let C of V){let M=x.get(C),fe=M.x>=z.x,se=j?1.5+j.norm[p.get($)]*4.5:2,ne,ce,te;if(fe){let me=z.x+c,We=z.y+c/2,Ie=M.x-de,ln=M.y+c/2,nn=(me+Ie)/2;ne=`M${me.toFixed(1)},${We.toFixed(1)} C${nn.toFixed(1)},${We.toFixed(1)} ${nn.toFixed(1)},${ln.toFixed(1)} ${Ie.toFixed(1)},${ln.toFixed(1)}`,ce=(me+Ie)/2,te=(We+ln)/2-5}else{let me=z.x+c/2,We=z.y,Ie=M.x+c/2,ln=M.y-de,nn=f+S*.2;ne=`M${me.toFixed(1)},${We.toFixed(1)} C${me.toFixed(1)},${nn.toFixed(1)} ${Ie.toFixed(1)},${nn.toFixed(1)} ${Ie.toFixed(1)},${ln.toFixed(1)}`,ce=(me+Ie)/2,te=nn+4}let Re=fe?"":' stroke-dasharray="6 4"';R.push(`<path d="${ne}" class="kan-diagram-edge" fill="none" stroke="var(--kan-accent)" stroke-width="${se.toFixed(1)}" stroke-opacity="0.75"${Re} marker-end="url(#${N})"/>`);let Se=await this.edgeText(o,e[p.get($)],i);Se&&I.push(this.edgeLabelEl(ce,te,Se))}}let T=e.map($=>{let V=x.get($.name);return this.diagramTile($,V.x,V.y,c,a)}).join("");return`<figure class="kan-diagram-figure"><svg class="kan-diagram-svg" viewBox="0 0 ${P.toFixed(0)} ${A.toFixed(0)}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">${this.arrowMarkerDef(N,"var(--kan-accent)")}${R.join("")}${I.join("")}${T}</svg></figure>`}static SEQ_COL_GAP=70;static SEQ_ROW=46;static SEQ_PAD=20;subjectFor(e){return oe(this.catalog,e)[0]}async renderSequence(e,n,t){let a=zn(this.catalog,n,e);if(a.problem)return`<!-- LookRenderer.Sequence: ${a.problem} -->`;if(a.sourceAbsent)return`<!-- LookRenderer.Sequence: ${n.name} carries no value for the band's look.source \u2014 nothing to sequence -->`;let s=[];for(let S of a.strayPropertyRefs)s.push(`<!-- LookRenderer.Sequence: prose references property ${S.publisher}/${S.package_}/${S.name}, which is not a declared connector; ignored -->`);for(let S of a.gaps)s.push(`<!-- LookRenderer.Sequence: prose orders ${S.prev.name} then ${S.next.name}, but no declared connector holds between them in the graph \u2014 no message drawn. -->`);let{messages:o,lifelines:i}=a,c=Ae;if(i.length===0)return`${s.join(`
|
|
125
|
+
`)}
|
|
126
|
+
<!-- LookRenderer.Sequence: no messages \u2014 no consecutive prose references are joined by a declared connector -->`;let l=Z(e,ua);l!==void 0&&Ve[l]===void 0&&s.push(`<!-- LookRenderer.Sequence: look.nodeTier '${k(l)}' is not a tier (${Object.keys(Ve).join(", ")}); using the class/default size -->`);let d=(l!==void 0?Ve[l]:void 0)??this.classTierSize(i)??Ve.icon,f=d+r.SEQ_COL_GAP,p=r.SEQ_ROW,g=r.SEQ_PAD,h=Z(e,Ts)==="true",b=new Map;i.forEach((S,W)=>b.set(c(S),g+W*f+d/2));let m=g+d,y=m+p,v=y+o.length*p+g,E=g*2+(i.length-1)*f+d,K=`kan-arrow-${this.diagramArrowSeq++}`,U=`kan-arrow-open-${this.diagramArrowSeq++}`,L=[this.arrowMarkerDef(K,"var(--kan-text-dim)")+`<defs><marker id="${U}" viewBox="0 0 ${de} ${de}" refX="0" refY="${(de/2).toFixed(1)}" markerWidth="${de}" markerHeight="${de}" markerUnits="userSpaceOnUse" orient="auto"><path d="M0,1 L${de},${(de/2).toFixed(1)} L0,${de-1}" fill="none" stroke="var(--kan-text-dim)" stroke-width="1.5"/></marker></defs>`];for(let S of i){let W=b.get(c(S));L.push(`<line class="kan-seq-lifeline" x1="${W}" y1="${m}" x2="${W}" y2="${v-g}" stroke="var(--kan-border)" stroke-width="1.5" stroke-dasharray="5 5"/>`),L.push(this.diagramTile(S,W-d/2,g,d,t))}return o.forEach((S,W)=>{let P=y+W*p,A=b.get(c(S.from)),x=b.get(c(S.to)),j=this.subjectFor(S.relation),N=(h?`${W+1}. `:"")+(j?G(this.catalog,j).label:S.relation.name),R=S.style==="dotted"?' stroke-dasharray="4 4"':"",I=S.style==="thick"?3:1.5,T=S.undirected?"":` marker-end="url(#${S.style==="open"?U:K})"`,$=`kan-seq-message kan-seq-message-${S.style}${S.undirected?" kan-seq-message-undirected":""}`;if(A===x){let M=p*.55,fe=A+(S.undirected?0:de);L.push(`<path class="${$}" d="M${A},${P-M/2} H${A+34} V${P+M/2} H${fe}" fill="none" stroke="var(--kan-text-dim)" stroke-width="${I}"${R}${T}/>`),L.push(`<text class="kan-seq-message-label" x="${A+34+6}" y="${P+4}" font-size="12" fill="var(--kan-text)">${k(N)}</text>`);return}let V=x>A?1:-1,z=S.undirected?x:x-V*de;L.push(`<line class="${$}" x1="${A}" y1="${P}" x2="${z}" y2="${P}" stroke="var(--kan-text-dim)" stroke-width="${I}"${R}${T}/>`),L.push(`<text class="kan-seq-message-label" x="${((A+x)/2).toFixed(1)}" y="${P-6}" text-anchor="middle" font-size="12" fill="var(--kan-text)" style="paint-order:stroke;stroke:var(--kan-bg);stroke-width:3px">${k(N)}</text>`)}),`${s.join(`
|
|
127
|
+
`)}<figure class="kan-diagram-figure kan-seq-figure"><svg class="kan-diagram-svg kan-seq" viewBox="0 0 ${E} ${v}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">${L.join("")}</svg></figure>`}static ER_BOX_W=230;static ER_HEAD_H=30;static ER_ROW_H=20;static ER_GAP=70;static ER_PAD=24;erScope(e){let n=t=>tn.isClassType(t);if(_(e,Vs))return{classes:this.catalog.filter(a=>a instanceof Y&&a.namespace===e.namespace&&n(a))};if(n(e)){let t=we(e);if(!t)return{classes:[],reason:"the page class has no canonical URI"};let a=pn(this.catalog),s=new Map([[H(t),e]]);for(let o of Rn(this.catalog,t,!1,a)){if(o.kind!=="object"||o.range.kind!=="class")continue;let i=this.subjectFor(o.range.uri);i&&!s.has(H(o.range.uri))&&s.set(H(o.range.uri),i)}return{classes:[...s.values()]}}return{classes:[],reason:"the page instance is neither a Package nor a Class"}}erCardinalityGlyph(e,n,t,a,s){let o=[];return s===1?o.push('<line x1="-14" y1="-7" x2="-14" y2="7"/>'):o.push('<path d="M-16,-8 L0,0 L-16,8" fill="none"/>'),a>=1?o.push('<line x1="-22" y1="-7" x2="-22" y2="7"/>'):o.push('<circle cx="-24" cy="0" r="4" fill="var(--kan-bg)"/>'),`<g class="kan-er-cardinality" transform="translate(${e.toFixed(1)},${n.toFixed(1)}) rotate(${t.toFixed(1)})" stroke="var(--kan-text-dim)" stroke-width="1.5">${o.join("")}</g>`}erBorderPoint(e,n,t,a,s,o){let i=s-e,c=o-n;if(i===0&&c===0)return{x:e,y:n};let l=i===0?1/0:Math.abs(t/2/i),d=c===0?1/0:Math.abs(a/2/c),f=Math.min(l,d);return{x:e+i*f,y:n+c*f}}renderEntityRelationship(e,n,t){let{classes:a,reason:s}=this.erScope(n);if(a.length===0)return`<!-- LookRenderer.EntityRelationship: nothing to draw \u2014 ${s??"no classes in scope"} -->`;let o=pn(this.catalog),i=x=>`${x.namespace}/${x.name}`,c=new Map;for(let x of a){let j=we(x);j&&c.set(H(j),x)}let l=a.map(x=>{let j=we(x),N=j?Rn(this.catalog,j,!1,o):[];return{subject:x,label:G(this.catalog,x).label,attrs:N.filter(R=>R.kind==="datatype"),rels:N.filter(R=>R.kind==="object"&&R.range.kind==="class"&&c.has(H(R.range.uri))),supers:je(x,ot).filter(R=>c.has(H(R)))}}),d=r.ER_BOX_W,f=r.ER_HEAD_H,p=r.ER_ROW_H,g=r.ER_GAP,h=r.ER_PAD,b=Math.max(1,Math.ceil(Math.sqrt(l.length))),m=x=>f+Math.max(1,x.attrs.length)*p+8,y=[];l.forEach((x,j)=>{let N=Math.floor(j/b);y[N]=Math.max(y[N]??0,m(x))});let v=[],E=h;y.forEach((x,j)=>{v[j]=E,E+=x+g});let K=new Map;l.forEach((x,j)=>{let N=Math.floor(j/b),R=j%b,I=h+R*(d+g),T=v[N],$=m(x);K.set(i(x.subject),{x:I,y:T,w:d,h:$,cx:I+d/2,cy:T+$/2})});let U=h*2+b*d+(b-1)*g,F=E-g+h,L=[],S=[],W=[],P=`kan-er-tri-${this.diagramArrowSeq++}`,A=`<defs><marker id="${P}" viewBox="0 0 12 12" refX="11" refY="6" markerWidth="12" markerHeight="12" markerUnits="userSpaceOnUse" orient="auto"><path d="M0,0 L12,6 L0,12 Z" fill="var(--kan-bg)" stroke="var(--kan-text-dim)" stroke-width="1.5"/></marker></defs>`;for(let x of l){let j=K.get(i(x.subject));for(let N of x.rels){let R=c.get(H(N.range.uri)),I=K.get(i(R)),T=i(R)===i(x.subject),$=this.subjectFor(N.uri),V=!!$&&fn(this.catalog,$,Ps),z=!!$&&fn(this.catalog,$,As),C=N.minCount??0,M=N.maxCount??(z?1:void 0),fe=$?G(this.catalog,$).label:N.localName;if(T){let te=j.x+j.w,Re=j.y+12,Se=j.y+j.h-12;L.push(`<path class="kan-er-relationship" d="M${te},${Re} h28 V${Se} h-28" fill="none" stroke="var(--kan-text-dim)" stroke-width="1.5"/>`),V||L.push(this.erCardinalityGlyph(te,Se,180,C,M)),S.push(`<text class="kan-er-relationship-label" x="${te+32}" y="${j.cy+4}" font-size="11" fill="var(--kan-text)">${k(fe)}</text>`);continue}let se=this.erBorderPoint(j.cx,j.cy,j.w,j.h,I.cx,I.cy),ne=this.erBorderPoint(I.cx,I.cy,I.w,I.h,j.cx,j.cy);L.push(`<line class="kan-er-relationship" x1="${se.x.toFixed(1)}" y1="${se.y.toFixed(1)}" x2="${ne.x.toFixed(1)}" y2="${ne.y.toFixed(1)}" stroke="var(--kan-text-dim)" stroke-width="1.5"/>`);let ce=Math.atan2(ne.y-se.y,ne.x-se.x)*180/Math.PI;V||L.push(this.erCardinalityGlyph(ne.x,ne.y,ce,C,M)),S.push(`<text class="kan-er-relationship-label" x="${((se.x+ne.x)/2).toFixed(1)}" y="${((se.y+ne.y)/2-6).toFixed(1)}" text-anchor="middle" font-size="11" fill="var(--kan-text)" style="paint-order:stroke;stroke:var(--kan-bg);stroke-width:3px">${k(fe)}</text>`)}for(let N of x.supers){let R=c.get(H(N)),I=K.get(i(R)),T=this.erBorderPoint(j.cx,j.cy,j.w,j.h,I.cx,I.cy),$=this.erBorderPoint(I.cx,I.cy,I.w,I.h,j.cx,j.cy);L.push(`<line class="kan-er-inherits" x1="${T.x.toFixed(1)}" y1="${T.y.toFixed(1)}" x2="${$.x.toFixed(1)}" y2="${$.y.toFixed(1)}" stroke="var(--kan-text-dim)" stroke-width="1.5" marker-end="url(#${P})"/>`)}}for(let x of l){let j=K.get(i(x.subject)),N=this.hrefForSubject(x.subject,t),R=x.attrs.length===0?`<text x="${j.x+10}" y="${j.y+f+14}" font-size="11" fill="var(--kan-text-faint)" font-style="italic">no attributes</text>`:x.attrs.map((I,T)=>{let $=this.subjectFor(I.uri),V=$?G(this.catalog,$).label:I.localName,z=I.required||(I.minCount??0)>=1?" *":"";return`<text class="kan-er-attribute" x="${j.x+10}" y="${j.y+f+14+T*p}" font-size="11" fill="var(--kan-text)">${k(V)}${z}<tspan fill="var(--kan-text-dim)"> : ${k(I.range.uri.name)}</tspan></text>`}).join("");W.push(`<a href="${k(N)}"><g class="kan-er-entity"><rect x="${j.x}" y="${j.y}" width="${j.w}" height="${j.h}" rx="6" fill="var(--kan-bg-card)" stroke="var(--kan-border)" stroke-width="1.5"/><rect x="${j.x}" y="${j.y}" width="${j.w}" height="${f}" rx="6" fill="var(--kan-bg-elev)"/><text class="kan-er-entity-label" x="${j.cx}" y="${j.y+20}" text-anchor="middle" font-size="13" font-weight="600" fill="var(--kan-text)">${k(x.label)}</text><line x1="${j.x}" y1="${j.y+f}" x2="${j.x+j.w}" y2="${j.y+f}" stroke="var(--kan-border)"/>`+R+"</g></a>")}return`<figure class="kan-diagram-figure kan-er-figure"><svg class="kan-diagram-svg kan-er" viewBox="0 0 ${U} ${F}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">${A}${L.join("")}${W.join("")}${S.join("")}</svg></figure>`}diagramTile(e,n,t,a,s,o=1){let i=this.hrefForSubject(e,s),c=this.svgUrlForSubject(e,s),l=G(this.catalog,e).label,d=o<1?` opacity="${o.toFixed(2)}"`:"";return`<a href="${k(i)}"><image href="${k(c)}" x="${n}" y="${t}" width="${a}" height="${a}"${d}><title>${k(l)}</title></image></a>`}async renderStatRow(e,n){let t=this.valueItems(e,Ko).filter(s=>s instanceof D);if(t.length===0)return"<!-- LookRenderer.StatRow: no look.stats -->";let a=[];for(let s of t){let o=this.readEmbeddedCarrier(s,Ro);if(!o)continue;let i=await this.evaluateCarrier(o,n);if(i===void 0)continue;let c=Z(s,Eo)??"";a.push('<div class="kan-stat">'+(c?`<span class="kan-stat-label">${k(c)}</span>`:"")+`<span class="kan-stat-val">${k(i)}</span></div>`)}return a.length===0?"":`<div class="kan-stat-row">${a.join("")}</div>`}barMarkup(e){let n=Number(e);if(!Number.isFinite(n))return k(e);let t=Math.max(0,Math.min(1,n))*100;return`<span class="kan-bar-meter" role="img" aria-label="${k(e)}"><span class="kan-bar-fill" style="width:${t.toFixed(1)}%"></span></span><span class="kan-bar-value">${k(e)}</span>`}async renderBarMeter(e,n){let t=this.readEmbeddedCarrier(e,kn);if(!t)return"<!-- LookRenderer.BarMeter: no look.metricPath -->";let a=await this.evaluateCarrier(t,n);return a===void 0?"":`<div class="kan-bar-row">${this.barMarkup(a)}</div>`}renderResourceCount(e,n){let t=this.valueItems(e,wo).filter(o=>o instanceof D);if(t.length===0)return"<!-- LookRenderer.ResourceCount: no look.counts -->";let a=this.readTransitive(e),s=[];for(let o of t){let i=B(o,pe);if(!i)continue;let c=ee(this.catalog,i);if(!c)continue;let l=G(this.catalog,c).label,d=this.findInstancesOfClass(i,a).length,f=this.hrefForSubject(c,n);s.push(`<a class="kan-count" href="${k(f)}"><span class="kan-count-val">${d}</span><span class="kan-count-label">${k(l)}</span></a>`)}return s.length===0?"":`<div class="kan-count-row">${s.join("")}</div>`}renderHorizon(e,n,t){let a=B(e,pe);if(!a)return"<!-- LookRenderer.Horizon: no look.source -->";let s=this.valueItems(n,a).filter(i=>i instanceof D);return s.length===0?"":`<section class="kan-horizon">${s.map(i=>this.renderConditionNode(i,t,0)).join("")}</section>`}renderConditionNode(e,n,t){let a=cn(e),s=a?this.readLabelForUri({publisher:a.publisher,package_:a.package_,name:a.name})??a.name:"Condition",o=[],i=[];for(let p of e.statement){let g=p.predicate?.subject;if(!g||X(g,ze))continue;let h=this.readLabelForUri({publisher:g.publisher,package_:g.package_,name:g.name})??g.name;if(p instanceof ae||p instanceof he||p instanceof ge)o.push(`<div class="kan-cond-field"><span class="kan-cond-key">${k(h)}</span><span class="kan-cond-v">${k(String(p.object))}</span></div>`);else if(p instanceof J&&p.object instanceof O){let b=p.object.subject,m=this.readLabelForUri({publisher:b.publisher,package_:b.package_,name:b.name})??b.name;o.push(`<div class="kan-cond-field"><span class="kan-cond-key">${k(h)}</span><span class="kan-cond-v">${k(m)}</span></div>`)}else if(p instanceof le)i.push(this.renderConditionNode(p.object,n,t+1));else if(p instanceof ue)for(let b of p.object??[])b instanceof D&&i.push(this.renderConditionNode(b,n,t+1))}let c=o.length?`<div class="kan-cond-fields">${o.join("")}</div>`:"",l=i.length?`<div class="kan-cond-children">${i.join("")}</div>`:"",d=i.length>0,f=d?`<span class="kan-cond-op">${k(s)}</span>`:`<div class="kan-cond-type">${k(s)}</div>`;return`<div class="kan-cond ${d?"kan-cond-branch":"kan-cond-leaf"}">${f}${c}${l}</div>`}renderSectionHeading(e){let n=e,t=Z(n,da);if(!t)return"<!-- LookRenderer.SectionHeading: no look.heading -->";let a=Z(n,ho);return`<div class="kan-section" id="${Ka(t)}"><h2 class="kan-section-title">${k(t)}</h2>`+(a?`<p class="kan-section-note">${k(a)}</p>`:"")+"</div>"}renderSectionNav(e){return e.length===0?"<!-- LookRenderer.SectionNav: no section headings in this view -->":`<nav class="kan-section-nav" aria-label="On this page">${e.map(t=>`<a class="kan-section-nav-link" href="#${k(t.slug)}">${k(t.label)}</a>`).join("")}</nav>`}async renderVersionDelta(e,n){let t=this.readEmbeddedCarrier(e,kn);if(!t)return"<!-- LookRenderer.VersionDelta: no look.metricPath -->";let a=async P=>{let A=await this.evaluateCarrierNum(t,P);return Number.isFinite(A)?A:void 0},s=await a(n);if(s===void 0)return"";let o=P=>this.uriOf(P).version??{major:0,minor:0,patch:0},i=(P,A)=>P.major-A.major||P.minor-A.minor||P.patch-A.patch,c={publisher:ie(n),package_:this.uriOf(n).package_,name:n.name},l=o(n),d,f;for(let P of oe(this.catalog,c)){let A=o(P);i(A,l)<0&&(!f||i(A,f)>0)&&(d=P,f=A)}if(!d||!f)return'<div class="kan-delta kan-delta-first">First tracked in this version</div>';let p=await a(d);if(p===void 0)return"";let g=s-p,h=Math.abs(g)<.005?"flat":g>0?"up":"down",b=h==="up"?"\u25B2":h==="down"?"\u25BC":"\u2014",m=h==="up"?"#34d399":h==="down"?"#f87171":"var(--kan-text-faint)",y=`${f.major}.${f.minor}.${f.patch}`,v=320,E=46,K=14,U=30,F=P=>K+Math.min(1,Math.max(0,P))*(v-2*K),L=F(p),S=F(s),W=`<svg class="kan-delta-track" viewBox="0 0 ${v} ${E}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img"><line x1="${K}" y1="${U}" x2="${v-K}" y2="${U}" class="kan-delta-base"/><line x1="${L.toFixed(1)}" y1="${U}" x2="${S.toFixed(1)}" y2="${U}" stroke="${m}" stroke-width="3"/><circle cx="${L.toFixed(1)}" cy="${U}" r="4" class="kan-delta-prev"/><circle cx="${S.toFixed(1)}" cy="${U}" r="5.5" fill="${m}"/><text x="${L.toFixed(1)}" y="${U-9}" text-anchor="middle" class="kan-delta-tick kan-delta-tick-prev">${p.toFixed(2)}</text><text x="${S.toFixed(1)}" y="${U+17}" text-anchor="middle" class="kan-delta-tick">${s.toFixed(2)}</text></svg>`;return`<div class="kan-delta"><div class="kan-delta-head"><span class="kan-delta-vs">vs ${k(y)}</span><span class="kan-delta-badge ${h}">${g>0?"+":""}${g.toFixed(2)} ${b}</span></div>`+W+"</div>"}async renderTimePlot(e,n,t){let a=B(e,pe),s=B(e,Cn);if(!a||!s)return"<!-- LookRenderer.TimePlot: needs look.source + look.orderBy -->";let o=this.readEmbeddedCarrier(e,jo),i=this.readEmbeddedCarrier(e,pa),c=[];for(let R of this.readPropertyValueReferences(n,a)){let I=ee(this.catalog,{publisher:R.subject.publisher,package_:R.subject.package_,name:R.subject.name,...R.subject.version?{version:R.subject.version}:{}});if(!I)continue;let T=this.readPropertyValueText(I,s)??"",$=Date.parse(T);if(!Number.isFinite($))continue;let V=o?await this.evaluateCarrier(o,I)??"":"",z=(i?await this.evaluateCarrier(i,I):void 0)??G(this.catalog,I).label;c.push({t:$,dateStr:T,lane:V,label:z,href:this.hrefForSubject(I,t),linkable:this.isLinkable(ie(I),t)})}if(c.length===0)return"<!-- LookRenderer.TimePlot: no dated points -->";let l=[];for(let R of c)l.includes(R.lane)||l.push(R.lane);let d=Math.min(...c.map(R=>R.t)),f=Math.max(...c.map(R=>R.t));f===d&&(f=d+1);let p=l.some(R=>R),g=720,h=p?96:16,b=18,m=12,y=24,v=36,E=m+l.length*v+y,K=h,U=g-b,F=U-K,L=R=>K+(R-d)/(f-d)*F,S=R=>m+R*v+v/2,W=R=>Math.round(R*360/Math.max(1,l.length)),P=[];l.forEach((R,I)=>{let T=S(I);P.push(`<line x1="${K}" y1="${T.toFixed(1)}" x2="${U}" y2="${T.toFixed(1)}" class="kan-plot-guide"/>`),R&&P.push(`<text x="${(h-8).toFixed(1)}" y="${(T+4).toFixed(1)}" text-anchor="end" class="kan-plot-lane">${Oe(R)}</text>`)});let A={},x=[];for(let R of c){let I=l.indexOf(R.lane),$=((A[R.lane]=(A[R.lane]??0)+1)%3-1)*7,V=L(R.t),z=S(I)+$,C=`${Tn(R.dateStr)} \xB7 ${R.label}`,M=`<circle cx="${V.toFixed(1)}" cy="${z.toFixed(1)}" r="5" fill="hsl(${W(I)},65%,60%)" class="kan-plot-pt"><title>${Oe(C)}</title></circle>`;x.push(R.linkable?`<a href="${k(R.href)}" class="kan-plot-link">${M}</a>`:M)}let j=`<text x="${K}" y="${(E-6).toFixed(1)}" text-anchor="start" class="kan-plot-axis">${Oe(Tn(new Date(d).toISOString()))}</text><text x="${U}" y="${(E-6).toFixed(1)}" text-anchor="end" class="kan-plot-axis">${Oe(Tn(new Date(f).toISOString()))}</text>`;return`<section class="kan-plot">${`<svg class="kan-plot-svg" viewBox="0 0 ${g} ${E}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">`+P.join("")+x.join("")+j+"</svg>"}</section>`}renderDetails(e,n,t){let a=rt(e,_o),s=this.detailRows(n,t,a);return s?`<dl class="kan-details">${s}</dl>`:"<!-- LookRenderer.Details: no properties -->"}detailRows(e,n,t){let a=[];for(let s of wa(e)){if(this.isMetaPredicate(s)||t.some(c=>X(c,s)))continue;let o=this.readLabelForUri({publisher:s.publisher,package_:s.package_,name:s.name})??s.name,i=this.detailValue(e,s,n,t);i&&a.push(`<dt class="kan-details-key">${k(o)}</dt><dd class="kan-details-val">${i}</dd>`)}return a.join("")}detailValue(e,n,t,a){let s=Ee(e,n),o=s.map(i=>"literal"in i.item?i.item.value:i.item);if(s.length===1&&!s[0].fromList){let i=o[0];return typeof i=="string"?Ea(i):typeof i=="number"||typeof i=="boolean"?k(String(i)):i instanceof O?this.detailReferenceLink(i,t):this.detailEmbedded(i,t,a)}return o.length>0&&o.every(i=>i instanceof D)?o.map(i=>this.detailEmbedded(i,t,a)).join(""):o.map(i=>i instanceof O?this.detailReferenceLink(i,t):i instanceof D?this.detailEmbedded(i,t,a):k(String(i))).filter(i=>i).join(", ")}detailReferenceLink(e,n){let t=this.readLabelForUri({publisher:e.subject.publisher,package_:e.subject.package_,name:e.subject.name})??e.subject.name;if(!this.isLinkable(e.subject.publisher,n))return`<span class="kan-link-plain">${k(t)}</span>`;let a=this.urlForReference(e,void 0,n);return`<img class="kan-md-chip" src="${k(`${a}.svg`)}" alt="" loading="lazy"><a class="kan-link" href="${k(a)}">${k(t)}</a>`}detailEmbedded(e,n,t){let a=cn(e),s=a?this.readLabelForUri({publisher:a.publisher,package_:a.package_,name:a.name})??a.name:"",o=this.detailRows(e,n,t);return'<div class="kan-details-embed">'+(s?`<span class="kan-details-type">${k(s)}</span>`:"")+(o?`<dl class="kan-details">${o}</dl>`:"")+"</div>"}rangeTypeRefs(e){let n=ee(this.catalog,e);if(!n)return[];let t=Ke(n,es);return t instanceof J&&t.object instanceof O?[t.object]:[]}async renderEmbeddedViews(e,n,t,a=""){let s=B(e,pe);if(!s)return"<!-- LookRenderer: EmbeddedViews missing look.source -->";let o=vn(n,s,this.catalog,a?`#${a}`:"").filter(p=>p.kind==="embedded");if(o.length===0)return"";let i=Ke(e,Zo),c=i instanceof ge?i.object===!0:i instanceof ae&&i.object==="true",l=[],d=[];for(let p of o){let g=p.node,h=g,b=p.address.slice(1),m=g.name?b:"";if(c&&m){let L=G(this.catalog,h).label||g.name||m;l.push(`<a class="kan-section-nav-link" href="#${k(m)}">${k(L)}</a>`)}let y=$e(h),v=y.length>0?y:this.rangeTypeRefs(s),E=Un(h)?this.findCascadedLook(h):this.lookFromTypeRefs(v),K="";if(E){let L=[];for(let S of at(E.declaration))L.push(await this.renderBand(S,h,t,[],b));K=L.join(`
|
|
128
|
+
`)}else{let L=this.detailRows(g,t,[]);K=L?`<dl class="kan-details">${L}</dl>`:""}let U=m?` id="${k(m)}"`:"",F=m?this.anchorLink(m):"";d.push(`<section class="kan-embedded-view"${U}>${F}${K}</section>`)}return`<div class="kan-embedded-views">${l.length>0?`<nav class="kan-section-nav" aria-label="On this page">${l.join("")}</nav>
|
|
129
|
+
`:""}${d.join(`
|
|
130
|
+
`)}</div>`}anchorLink(e){return`<a class="kan-anchor" href="#${k(e)}" title="${k(e)}" aria-label="Link to this resource">#</a>`}isMetaPredicate(e){return X(e,ze)||X(e,Jn)||X(e,ia)||X(e,Fn)||X(e,Pn)||X(e,fa)||X(e,ya)||X(e,fo)}renderPackageContents(e,n){let t=e.namespace||"";if(!t)return"";let a=this.catalog.filter(o=>o instanceof Y&&o.namespace===t&&o.name!==e.name);return a.length===0?`<!-- LookRenderer.PackageContents: no members in ${t} -->`:(a.sort((o,i)=>{let c=G(this.catalog,o).label,l=G(this.catalog,i).label;return c.localeCompare(l)}),`<section class="kan-pkg-grid">${a.map(o=>{let i=G(this.catalog,o),c=i.label,l=i.summary,d=l?st(l,160):"",f=this.hrefForSubject(o,n),p=this.svgUrlForSubject(o,n);return`<a class="kan-pkg-card" href="${k(f)}"><img class="kan-pkg-card-svg" src="${k(p)}" alt="" loading="lazy"/><span class="kan-pkg-card-body"><span class="kan-pkg-card-title">${k(c)}</span>`+(d?`<span class="kan-pkg-card-comment">${k(d)}</span>`:"")+"</span></a>"}).join("")}</section>`)}renderReferencedBy(e,n,t){let a=B(e,Yo),s={publisher:ie(n),package_:this.uriOf(n).package_,name:n.name},o=Q(s),i=p=>this.uriOf(p).version??{major:0,minor:0,patch:0},c=(p,g)=>p.major-g.major||p.minor-g.minor||p.patch-g.patch,l=new Map;for(let p of this.catalog){if(!(p instanceof Y))continue;let g=Q({publisher:ie(p),package_:this.uriOf(p).package_,name:p.name});if(g!==o)for(let h of p.statement){let b=h.predicate?.subject;if(!b||X(b,ze)||a&&Q(b)!==Q(a))continue;let m=[];if(h instanceof J&&h.object instanceof O)m.push(h.object);else if(h instanceof ue)for(let K of h.object??[])K instanceof O&&m.push(K);if(!m.some(K=>Q(K.subject)===o))continue;let y=Q(b),v=l.get(y);v||(v={label:this.readLabelForUri(b)??b.name,best:new Map},l.set(y,v));let E=v.best.get(g);(!E||c(i(p),i(E))>0)&&v.best.set(g,p)}}return l.size===0?"<!-- LookRenderer.ReferencedBy: no incoming references -->":`<div class="kan-section"><h2 class="kan-section-title">Referenced by</h2></div>${[...l.values()].sort((p,g)=>p.label.localeCompare(g.label)).map(p=>{let h=[...p.best.values()].sort((b,m)=>G(this.catalog,b).label.localeCompare(G(this.catalog,m).label)).map(b=>this.resourceCard(b,t,n.namespace??void 0)).join("");return`<div class="kan-rel-group"><h3 class="kan-rel-prop"><span class="kan-rel-dir" title="incoming \u2014 references this resource">\u2190</span> ${k(p.label)}</h3><section class="kan-pkg-grid">${h}</section></div>`}).join("")}`}resourceCard(e,n,t){let a=G(this.catalog,e),s=a.summary?st(a.summary,160):"",o=$e(e).map(y=>this.readLabelForUri({publisher:y.subject.publisher,package_:y.subject.package_,name:y.subject.name})??y.subject.name),c='<span class="kan-pkg-card-body">'+(o.length>0?`<span class="kan-card-types">${o.map(y=>`<span class="kan-card-type">${k(y)}</span>`).join("")}</span>`:"")+`<span class="kan-pkg-card-title">${k(a.label)}</span>`+(s?`<span class="kan-pkg-card-comment">${k(s)}</span>`:"")+"</span>",l=this.isLinkable(ie(e),n),d=l?`<a class="kan-pkg-card-link" href="${k(this.hrefForSubject(e,n))}"><img class="kan-pkg-card-svg" src="${k(this.svgUrlForSubject(e,n))}" alt="" loading="lazy"/>`+c+"</a>":`<span class="kan-pkg-card-link">${c}</span>`,f=e.namespace||"",p=this.uriOf(e),g=p.publisher,h=p.package_,b=p.version?bn(p.version):"",m="";if(h&&f!==t){let y=b?`<span class="kan-card-at">@</span><span class="kan-card-ver">${k(b)}</span>`:"";if(l){let v=`<span class="kan-card-pkg">${k(h)}</span>${y}`;m=`<a class="kan-pkg-card-foot" href="${k(this.packageHref(g,h,b||void 0))}" title="${k(b?`${h}@${b}`:h)}">${v}</a>`}else{let v=`<span class="kan-card-pub">${k(g)}/</span><span class="kan-card-pkg">${k(h)}</span>${y}`;m=`<span class="kan-pkg-card-foot" title="${k(b?`${g}/${h}@${b}`:`${g}/${h}`)}">${v}</span>`}}return`<div class="kan-pkg-card kan-pkg-card--foot">${d}${m}</div>`}renderInstances(e,n,t){let a={publisher:ie(n),package_:this.uriOf(n).package_,name:n.name},s=this.readTransitive(e),o=s?this.descendantTypeKeys(a):new Set([Q(a)]),i=m=>this.uriOf(m).version??{major:0,minor:0,patch:0},c=(m,y)=>m.major-y.major||m.minor-y.minor||m.patch-y.patch,l=new Map;for(let m of this.catalog){if(!(m instanceof Y)||!$e(m).some(K=>o.has(Q(K.subject))))continue;let v=Q({publisher:ie(m),package_:this.uriOf(m).package_,name:m.name}),E=l.get(v);(!E||c(i(m),i(E))>0)&&l.set(v,m)}let d=[...l.values()];if(d.length===0)return"<!-- LookRenderer.Instances: none -->";d.sort((m,y)=>G(this.catalog,m).label.localeCompare(G(this.catalog,y).label));let f=48,p=d.slice(0,f),g=p.map(m=>this.resourceCard(m,t,n.namespace??void 0)),h=d.length>f?` <span class="kan-count">${p.length} of ${d.length}</span>`:` <span class="kan-count">${d.length}</span>`;return`<div class="kan-section"><h2 class="kan-section-title">${s?"Instances (including subtypes)":"Instances"}${h}</h2></div><section class="kan-pkg-grid">${g.join("")}</section>`}descendantTypeKeys(e){let n=Q(e),t=new Set([n]),a=new Set;for(let s of this.catalog)if(s instanceof Y)for(let o of $e(s)){let i=o.subject,c=Q(i);a.has(c)||(a.add(c),an(this.catalog,i).some(l=>Q(l)===n)&&t.add(c))}return t}referencesTarget(e,n,t){for(let a of e.statement){let s=a.predicate?.subject;if(s&&X(s,ze)||t&&!(s&&Q(s)===Q(t)))continue;let o=[];if(a instanceof J&&a.object instanceof O)o.push(a.object);else if(a instanceof ue)for(let i of a.object??[])i instanceof O&&o.push(i);for(let i of o)if(Q(i.subject)===n)return!0}return!1}async renderFeaturedResource(e,n){let t=B(e,pe);if(!t)return"<!-- LookRenderer.FeaturedResource: no look.source -->";let a=oe(this.catalog,t),s=l=>this.uriOf(l).version??{major:0,minor:0,patch:0},o=a.length>0?a.slice().sort((l,d)=>{let f=s(l),p=s(d);return p.major-f.major||p.minor-f.minor||p.patch-f.patch})[0]:ee(this.catalog,t);if(!o)return`<!-- LookRenderer.FeaturedResource: ${t.publisher}/${t.package_}/${t.name} not found -->`;let i=await this.renderHtml(o),c=this.hrefForSubject(o,n);return`<section class="kan-featured"><a class="kan-featured-permalink" href="${k(c)}">View full resource \u2192</a>`+i+"</section>"}async renderDistribution(e,n){let t=async T=>{let $=this.readEmbeddedCarrier(e,T);if(!$)return;let V=await this.evaluateCarrierNum($,n);return Number.isFinite(V)?V:void 0},a=await t(mo),s=await t(go);if(a===void 0||s===void 0||a<=0||s<=0)return"<!-- LookRenderer.Distribution: needs resolvable alphaPath + betaPath (> 0) -->";let o=await t(kn)??a/(a+s),i=await t(ha),c=await t(ba),l=await t(tt),d=l!==void 0?`hsl(${l},65%,60%)`:"var(--kan-accent)",f=T=>Number.isInteger(T)?String(T):T.toFixed(1),p=280,g=168,h={top:14,right:14,bottom:24,left:14},b=p-h.left-h.right,m=g-h.top-h.bottom,y=120,v=1e-4,E=[],K=[],U=0;for(let T=0;T<=y;T++){let $=T/y;$<v?$=v:$>1-v&&($=1-v);let V=Math.exp((a-1)*Math.log($)+(s-1)*Math.log(1-$));E.push($),K.push(V),V>U&&(U=V)}let F=T=>h.left+Math.min(1,Math.max(0,T))*b,L=T=>h.top+(1-(U>0?T/U:0))*m,S=h.top+m,W=E.map((T,$)=>`${F(T).toFixed(1)},${L(K[$]).toFixed(1)}`),P=`M${F(0).toFixed(1)},${S.toFixed(1)} L${W.join(" L")} L${F(1).toFixed(1)},${S.toFixed(1)} Z`,A="";if(i!==void 0&&c!==void 0&&c>i){let T=[`${F(i).toFixed(1)},${S.toFixed(1)}`];for(let $=0;$<=y;$++)E[$]>=i&&E[$]<=c&&T.push(`${F(E[$]).toFixed(1)},${L(K[$]).toFixed(1)}`);T.push(`${F(c).toFixed(1)},${S.toFixed(1)}`),A=`<path d="M${T.join(" L")} Z" fill="${d}" fill-opacity="0.3"/>`}let x=F(o),j=`<line x1="${x.toFixed(1)}" y1="${h.top.toFixed(1)}" x2="${x.toFixed(1)}" y2="${S.toFixed(1)}" stroke="${d}" stroke-width="1.5" stroke-dasharray="3 3"/><text x="${x.toFixed(1)}" y="${(h.top-3).toFixed(1)}" text-anchor="middle" class="kan-dist-mean">\u03BC ${o.toFixed(2)}</text>`,N=`<text x="${F(0).toFixed(1)}" y="${(S+15).toFixed(1)}" text-anchor="start" class="kan-dist-axis">0</text><text x="${F(1).toFixed(1)}" y="${(S+15).toFixed(1)}" text-anchor="end" class="kan-dist-axis">1</text>`,R=`<svg class="kan-dist-svg" viewBox="0 0 ${p} ${g}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img"><line x1="${h.left}" y1="${S.toFixed(1)}" x2="${(p-h.right).toFixed(1)}" y2="${S.toFixed(1)}" class="kan-dist-base"/><path d="${P}" fill="${d}" fill-opacity="0.12"/>`+A+`<polyline points="${W.join(" ")}" fill="none" stroke="${d}" stroke-width="2"/>`+j+N+"</svg>",I=i!==void 0&&c!==void 0?` \xB7 95% CI [${i.toFixed(2)}\u2013${c.toFixed(2)}]`:"";return`<figure class="kan-dist">${R}<figcaption class="kan-dist-caption">Beta(${f(a)}, ${f(s)})${I}</figcaption></figure>`}renderPublisherPackages(e,n){let t=new Map;for(let i of this.catalog){if(!(i instanceof Y)||ie(i)!==n)continue;let c=this.uriOf(i).package_;if(!c||i.name!==c)continue;let l=t.get(c),d=this.uriOf(i).version,f=l?this.uriOf(l).version:void 0;(!l||d&&(!f||hn(d,f)>0))&&t.set(c,i)}let a,s=this.valueItems(e,ao);if(s.length>0){a=[];for(let i of s){if(!(i instanceof O))continue;let c=i.subject.package_,l=t.get(c);l&&a.push([c,l])}}else a=[...t.entries()].sort((i,c)=>i[0].localeCompare(c[0]));return a.length===0?"":`<section class="kan-pkg-grid">${a.map(([i,c])=>{let l=G(this.catalog,c),d=l.label,f=l.summary,p=f?st(f,160):"",g=this.svgUrlForSubject(c,n);return`<a class="kan-pkg-card" href="${k(this.packageHref(n,i))}"><img class="kan-pkg-card-svg" src="${k(g)}" alt="" loading="lazy"/><span class="kan-pkg-card-body"><span class="kan-pkg-card-title">${k(d)}</span>`+(p?`<span class="kan-pkg-card-comment">${k(p)}</span>`:"")+"</span></a>"}).join("")}</section>`}async renderTimeline(e,n){let t=B(e,pe);if(!t)return"<!-- LookRenderer.Timeline: no look.source -->";let a=B(e,Cn),s=this.findInstancesOfClass(t,this.readTransitive(e));if(s.length===0)return"<!-- LookRenderer.Timeline: no instances -->";let o=f=>a?this.readPropertyValueText(f,a)??"":"",i=s.slice().sort((f,p)=>o(f).localeCompare(o(p))),c=B(e,ka),l=this.readEmbeddedCarrier(e,kn);return c&&l?this.renderTrajectoryChart(i,c,l,e,n,o):`<section class="kan-timeline"><ol>
|
|
131
|
+
${i.map(f=>{let p=this.uriOf(f),g=p.package_,h=p.version,b=this.resourceHref({publisher:ie(f),package_:g,name:f.name,...h?{version:h}:{}},n),m=o(f),y=m?`<span class="kan-timeline-date">${k(m)}</span>`:"",v=h?bn(h):f.name;return`<li class="kan-timeline-node"><a href="${k(b)}"><span class="kan-timeline-key">${k(v)}</span>${y}</a></li>`}).join(`
|
|
132
|
+
`)}
|
|
133
|
+
</ol></section>`}async renderTrajectoryChart(e,n,t,a,s,o){let i=a,c=this.readEmbeddedCarrier(a,tt),l=this.readEmbeddedCarrier(a,ha),d=this.readEmbeddedCarrier(a,ba),f=Z(i,Mo),p=_a(i,Ao),g=_a(i,Vo),h=e.length,b=await this.collectTrackedSeries(e,n,t,{hueBy:c,lowerPath:l,upperPath:d});if(b.length===0)return"<!-- LookRenderer.Timeline: no tracked series -->";let m=[];for(let C of b){for(let M of C.points)M!==null&&m.push(M);for(let M of C.lower??[])M!==null&&m.push(M);for(let M of C.upper??[])M!==null&&m.push(M)}if(m.length===0)return"<!-- LookRenderer.Timeline: no metric values -->";let y=Math.min(...m),v=Math.max(...m);v-y<1e-9&&(y-=.5,v+=.5);let E=(v-y)*.08,K=p!==void 0?p:y-E,U=g!==void 0?g:v+E;U-K<1e-9&&(U=K+1);let F=1e3,L=440,S={top:28,right:24,bottom:56,left:52},W=F-S.left-S.right,P=L-S.top-S.bottom,A=C=>h<=1?S.left+W/2:S.left+C/(h-1)*W,x=C=>S.top+(1-(C-K)/(U-K))*P,j=(C,M)=>C.hue!==void 0?C.hue:Math.round(M*360/b.length),N=[];for(let C=0;C<5;C++){let M=K+C*(U-K)/4,fe=x(M);N.push(`<line x1="${S.left}" y1="${fe.toFixed(1)}" x2="${(F-S.right).toFixed(1)}" y2="${fe.toFixed(1)}" class="kan-fan-grid"/>`),N.push(`<text x="${(S.left-8).toFixed(1)}" y="${(fe+4).toFixed(1)}" class="kan-fan-axis" text-anchor="end">${M.toFixed(2)}</text>`)}let R=[];e.forEach((C,M)=>{let fe=this.hrefForSubject(C,s),se=this.uriOf(C).version,ne=se?bn(se):"",ce=A(M),te=Tn(o(C));R.push(`<a href="${k(fe)}" class="kan-fan-xtick"><line x1="${ce.toFixed(1)}" y1="${S.top}" x2="${ce.toFixed(1)}" y2="${(L-S.bottom).toFixed(1)}" class="kan-fan-vline"/><text x="${ce.toFixed(1)}" y="${(L-S.bottom+20).toFixed(1)}" class="kan-fan-xlabel" text-anchor="middle">${Oe(ne||C.name)}</text>`+(te?`<text x="${ce.toFixed(1)}" y="${(L-S.bottom+36).toFixed(1)}" class="kan-fan-xdate" text-anchor="middle">${Oe(te)}</text>`:"")+"</a>")});let I=[];b.forEach((C,M)=>{if(!C.lower||!C.upper)return;let fe=j(C,M),se=[],ne=[];for(let te=0;te<h;te++){let Re=C.upper[te],Se=C.lower[te];Re==null||Se===null||Se===void 0||(se.push(`${A(te).toFixed(1)},${x(Re).toFixed(1)}`),ne.unshift(`${A(te).toFixed(1)},${x(Se).toFixed(1)}`))}let ce=se.concat(ne);ce.length<3||I.push(`<polygon class="kan-fan-band" points="${ce.join(" ")}" fill="hsl(${fe},65%,60%)"/>`)});let T=[];b.forEach((C,M)=>{let se=`hsl(${j(C,M)},65%,60%)`,ne=[],ce=[];C.points.forEach((te,Re)=>{if(te===null)return;let Se=A(Re),me=x(te);ne.push(`${Se.toFixed(1)},${me.toFixed(1)}`),ce.push(`<circle cx="${Se.toFixed(1)}" cy="${me.toFixed(1)}" r="3.5" fill="${se}"/>`)}),ne.length!==0&&T.push(`<g class="kan-fan-series" data-series="${k(C.key)}"><polyline points="${ne.join(" ")}" fill="none" stroke="${se}" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/>`+ce.join("")+"</g>")});let $=`<svg class="kan-fan-svg" viewBox="0 0 ${F} ${L}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">`+N.join("")+R.join("")+I.join("")+T.join("")+"</svg>",V=f?`${k(f)}=`:"",z=b.map((C,M)=>{let fe=j(C,M),se=C.points.filter(me=>me!==null),ne=se.length?se[0]:void 0,ce=se.length?se[se.length-1]:void 0,te="";if(ce!==void 0&&ne!==void 0){let me=ce-ne;if(Math.abs(me)>=.005){let We=me>0?"up":"down",Ie=me>0?"\u25B2":"\u25BC";te=` <span class="kan-fan-delta ${We}">${me>0?"+":""}${me.toFixed(2)} ${Ie}</span>`}else te=' <span class="kan-fan-delta flat">\u2014</span>'}let Re=ce!==void 0?`${V}${ce.toFixed(2)}`:"\u2014",Se=C.lastSubject&&this.isLinkable(ie(C.lastSubject),s)?`<a href="${k(this.hrefForSubject(C.lastSubject,s))}">${k(C.label)}</a>`:k(C.label);return`<div class="kan-fan-legend-item" style="--kan-fan-hue:${fe}"><span class="kan-fan-swatch"></span><span class="kan-fan-legend-label">${Se}</span><span class="kan-fan-legend-cur">${Re}${te}</span></div>`});return`<section class="kan-fan"><div class="kan-fan-chart">${$}</div><div class="kan-fan-legend">${z.join("")}</div></section>`}resolveResourceQuery(e){let n=i=>{let c=B(i,To);if(!c)return;let l=B(i,Cn),d=Z(i,Fo),f=this.readPropertyValueText(i,Po),p=f!==void 0?Number(f):NaN;return{ofClass:c,...l?{orderBy:l}:{},descending:d==="descending",...Number.isInteger(p)&&p>0?{limit:p}:{}}},t=this.readEmbeddedCarrier(e,pe);if(t)return n(t);let a=B(e,pe);if(!a)return;let s=ee(this.catalog,a);return(s?$e(s).some(i=>X(i.subject,Io)):!1)&&s?n(s):{ofClass:a,descending:!1}}applyQueryShape(e,n){let t=e;if(n.orderBy){let a=s=>this.readPropertyValueText(s,n.orderBy)??"";t=t.slice().sort((s,o)=>a(s).localeCompare(a(o))),n.descending&&t.reverse()}return n.limit!==void 0&&(t=t.slice(0,n.limit)),t}renderResourceGrid(e,n,t){let a=this.resolveResourceQuery(e),s=B(e,pe)??a?.ofClass;if(!s)return"<!-- LookRenderer.ResourceGrid: no look.source -->";let o=ee(this.catalog,s),i=o?$n(this.catalog,o)!==void 0:!1,c=[];if(i&&t){let d=this.readPropertyValueReferences(t,s);for(let f of d){let p=ee(this.catalog,{publisher:f.subject.publisher,package_:f.subject.package_,name:f.subject.name,...f.subject.version?{version:f.subject.version}:{}});p&&c.push(p)}}else a?c=this.applyQueryShape(this.findInstancesOfClass(a.ofClass,this.readTransitive(e)),a):c=this.findInstancesOfClass(s,this.readTransitive(e));if(c.length===0)return`<!-- LookRenderer.ResourceGrid: no resources for ${s.publisher}/${s.package_}/${s.name} -->`;let l=[];for(let d of c){let f=G(this.catalog,d),p=f.label,g=f.summary,h=this.uriOf(d),b=h.package_,m=h.version,y=this.resourceHref({publisher:ie(d),package_:b,name:d.name,...m?{version:m}:{}},n),v=g?`<p class="kan-resource-card-subtitle">${k(g)}</p>`:"",E=`<h3 class="kan-resource-card-title">${k(p)}</h3>${v}`;l.push(this.isLinkable(ie(d),n)?`<a class="kan-resource-card" href="${k(y)}">${E}</a>`:`<span class="kan-resource-card">${E}</span>`)}return`<section class="kan-resource-grid">
|
|
134
|
+
${l.join(`
|
|
135
|
+
`)}
|
|
136
|
+
</section>`}readTransitive(e){let n=Ke(e,ei);return n instanceof ge?n.object===!0:n instanceof ae&&n.object==="true"}findInstancesOfClass(e,n=!1){let t=n?this.descendantTypeKeys(e):new Set([Q(e)]),a=[];for(let s of this.catalog)s instanceof Y&&$e(s).some(o=>t.has(Q(o.subject)))&&a.push(s);return a}renderBreadcrumb(e,n,t){let s=(e.namespace||"").split("/");if(s.length<2)return"";let o=s[0],i=s[1]??"",c=i.split("@")[0]??"",l=i.split("@")[1]??"";if(!o||!c)return"";if(t?.bareOverview)return`<nav class="kan-breadcrumb"><ol>
|
|
137
|
+
<li><a href="${k(this.publisherHref(o))}">${k(o)}</a></li>
|
|
138
|
+
<li aria-current="page">${k(c)}</li>
|
|
139
|
+
</ol></nav>`;let d=e.name,p=!!ee(this.catalog,{publisher:o,package_:c,name:c}),g=l?`${c}@${l}`:c,h=this.resourceHref({publisher:o,package_:c,name:c,...l?{version:ct(l)}:{}},o),b=e.name===c,m=[];return m.push(`<li><a href="${k(this.publisherHref(o))}">${k(o)}</a></li>`),b?m.push(`<li aria-current="page">${k(g)}</li>`):(m.push(p?`<li><a href="${k(h)}">${k(g)}</a></li>`:`<li>${k(g)}</li>`),m.push(`<li aria-current="page">${k(d)}</li>`)),`<nav class="kan-breadcrumb"><ol>
|
|
140
|
+
${m.join(`
|
|
141
|
+
`)}
|
|
142
|
+
</ol></nav>`}renderNavGroup(e,n){let t=this.valueItems(this.publisherSubject(n),fs);if(t.length===0)return"";let a=[];for(let s of t){if(!(s instanceof O))continue;let o=ee(this.catalog,{publisher:s.subject.publisher,package_:s.subject.package_,name:s.subject.name}),{href:i,label:c}=this.resolveNavEntry(s,o,n),l=this.hrefForSubject(e,n),d=i===l?' aria-current="page"':"";a.push(`<li><a class="kan-nav-link" href="${k(i)}"${d}>${k(c)}</a></li>`)}return`<nav class="kan-site-nav"><ul>
|
|
143
|
+
${a.join(`
|
|
144
|
+
`)}
|
|
145
|
+
</ul></nav>`}renderSiteFooter(e){let n=Ke(this.publisherSubject(e),ps),t;if(n instanceof le?t=n.object:n instanceof J&&n.object instanceof O&&(t=ee(this.catalog,{publisher:n.object.subject.publisher,package_:n.object.subject.package_,name:n.object.subject.name})),!t)return"";let a=Z(t,ms),s=this.valueItems(t,gs),o=[];for(let c of s){if(!(c instanceof O))continue;let l=ee(this.catalog,{publisher:c.subject.publisher,package_:c.subject.package_,name:c.subject.name}),{href:d,label:f}=this.resolveNavEntry(c,l,e);o.push(`<a class="kan-footer-link" href="${k(d)}">${k(f)}</a>`)}if(!a&&o.length===0)return"";let i=[];return o.length>0&&i.push(`<div class="kan-footer-links">${o.join("")}</div>`),a&&i.push(`<p class="kan-footer-text">${k(a)}</p>`),`<footer class="kan-site-footer">${i.join(`
|
|
146
|
+
`)}</footer>`}resolveNavEntry(e,n,t){if(n&&$e(n).map(c=>c.subject).some(c=>c.publisher===Zn.publisher&&c.package_===Zn.package_&&c.name===Zn.name)){let c=Z(n,Jn),l=Ke(n,la);if(l instanceof J&&l.object instanceof O){let d=l.object,f=this.readLabelForUri({publisher:d.subject.publisher,package_:d.subject.package_,name:d.subject.name});return{href:this.urlForReference(d,la,t),label:c??f??d.subject.name}}}let a=this.resourceHref({publisher:e.subject.publisher,package_:e.subject.package_,...e.subject.version?{version:e.subject.version}:{},name:e.subject.name},t,"*"),s=n?G(this.catalog,n).label:e.subject.name;return{href:a,label:s}}codeHighlighter(){return this._codeHighlighter||(this._codeHighlighter=new Ln(this.collectGrammars())),this._codeHighlighter}collectGrammars(){let e=[];for(let n of this.catalog){if(!(n instanceof Y)||!$e(n).some(o=>X(o.subject,ro)))continue;let t=Z(n,so);if(!t)continue;let a=this.valueItems(n,oo),s=[];for(let o of a){if(!(o instanceof D))continue;let i=B(o,io),c=Z(o,co);!i||!c||s.push({tokenClass:i.name,pattern:c})}e.push({language:t,rules:s})}return e}renderLinks(e,n){let t=B(e,pe);if(!t)return"";let a=this.valueItems(n,t),s=[];for(let o of a){let i;if(o instanceof D?i=o:o instanceof O&&(i=ee(this.catalog,{publisher:o.subject.publisher,package_:o.subject.package_,name:o.subject.name})),!i)continue;let c=Z(i,uo);if(!c)continue;let l=Z(i,Jn)??c,d=Z(i,ia),f=d?` title="${k(d)}"`:"";s.push(`<a class="kan-extlink" href="${k(c)}"${f} target="_blank" rel="noopener noreferrer">${k(l)}</a>`)}return s.length===0?"":`<section class="kan-extlink-row">${s.join("")}</section>`}renderMarkdown(e,n,t){let a=B(e,pe);if(!a)return"<!-- LookRenderer.Markdown: no look.source -->";let s=Ke(n,a),o=new Map,i;if(s instanceof Ne?i=this.resolveMarkdownLinks(s,t,o):s instanceof ae?i=s.object:i=this.readPropertyValueText(n,a),!i)return"";let c=this.codeHighlighter(),l=mn(i,{highlight:(d,f)=>c.highlight(d,f)});for(let[d,f]of o){let p=new RegExp('(<a href="'+Ra(d)+'">)([^<]*)(</a>)',"g");l=l.replace(p,`$1<img class="kan-md-chip" src="${k(f)}" alt="" loading="lazy">$2$3`)}return`<section class="kan-markdown">
|
|
147
|
+
${l}
|
|
148
|
+
</section>`}resolveMarkdownLinks(e,n,t){let a=e.object,s=[...e.links].sort((o,i)=>i.startOffset-o.startOffset);for(let o of s){let i;if(o.target&&this.isLinkable(o.target.subject.publisher,n)){let c=o.target.subject,l=(o.displayText??this.readLabelForUri({publisher:c.publisher,package_:c.package_,name:c.name})??o.reference).replace(/[[\]]/g,""),d=this.resourceHref({publisher:c.publisher,package_:c.package_,name:c.name,...c.version?{version:c.version}:{}},n);t&&t.set(d,`${d}.svg`),i=`[${l}](${d})`}else if(o.target){let c=o.target.subject;i=(o.displayText??this.readLabelForUri({publisher:c.publisher,package_:c.package_,name:c.name})??o.reference).replace(/[[\]]/g,"")}else i=o.displayText??o.reference;a=a.slice(0,o.startOffset)+i+a.slice(o.endOffset)}return a}renderRawMarkdown(e){let n=this.findCascadedLook(e);if(!n)return;let t=at(n.declaration),a=[];for(let s of t){let o=cn(s);if(!o||!X(o,ca))continue;let i=B(s,pe);if(!i)continue;let c=this.readPropertyValueText(e,i);c&&a.push(c)}return a.length>0?a.join(`
|
|
149
|
+
|
|
150
|
+
`):void 0}renderHero(e,n,t){let a=b=>{let m=Ke(e,b);return m instanceof ge?m.object===!0:m instanceof ae&&m.object==="true"},s=a(Jo),o=!s&&a(Qo),i=s||o,l=[`<header class="${s?"kan-hero kan-hero-has-avatar":o?"kan-hero kan-hero-has-icon":"kan-hero"}">`];if(i){let b=this.svgUrlForSubject(n,t),m=s?"kan-hero-avatar":"kan-hero-icon";l.push(`<img class="${m}" src="${k(b)}" alt="" loading="lazy"/>`),l.push('<div class="kan-hero-text">')}let d=B(e,zo);if(d){let b=this.readPropertyValueText(n,d);b&&l.push(`<span class="kan-hero-eyebrow">${k(An(b)??b)}</span>`)}let f=B(e,Go),p="";f&&(p=this.readPropertyValueText(n,f)??""),p||(p=G(this.catalog,n).label),l.push(`<h1 class="kan-hero-title">${k(An(p)??p)}</h1>`);let g=B(e,Wo);if(g){let b=this.readPropertyValueText(n,g);b&&l.push(`<p class="kan-hero-subtitle">${k(An(b)??b)}</p>`)}let h=B(e,$a);if(h){let b=this.readPropertyValueReferences(n,h);if(b.length>0){let m=b.map(y=>this.renderBadge(y,$a,t)).join("");l.push(`<div class="kan-hero-badges">${m}</div>`)}}return i&&l.push("</div>"),l.push("</header>"),l.join(`
|
|
151
|
+
`)}renderPropertyList(e,n,t){let a=B(e,pe);if(!a)return"<!-- LookRenderer: PropertyList missing look.source -->";let s=this.readLabelForUri(a)??a.name,o=this.valueItems(n,a),i=o.length>0?o.map(c=>`<li>${this.renderInlineValue(c,pe,t)}</li>`).join(""):'<li class="kan-empty">(no values)</li>';return['<section class="kan-property-list">',`<h3 class="kan-property-list-title">${k(s)}</h3>`,`<ul class="kan-property-list-items">${i}</ul>`,"</section>"].join(`
|
|
152
|
+
`)}renderPropertyTable(e,n,t,a=""){let s=B(e,pe);if(!s)return"<!-- LookRenderer: PropertyTable missing look.source -->";let o=this.valueItems(n,s).filter(d=>d instanceof D);if(o.length===0)return"";let i=this.readLabelForUri(s)??s.name,c=a?`${a}.${s.name}`:s.name,l=B(e,Lo);return this.renderEmbeddedTable(o,t,i,c,l)}renderEmbeddedTable(e,n,t,a,s){let o=[],i=new Set;for(let m of e)for(let y of m.statement){let v=y.predicate?.subject;if(!v||this.isMetaPredicate(v))continue;let E=`${v.publisher}/${v.package_}/${v.name}`;i.has(E)||(i.add(E),o.push({uri:{publisher:v.publisher,package_:v.package_,name:v.name},label:this.readLabelForUri(v)??v.name}))}if(o.length===0)return"";let c=e.map(m=>G(this.catalog,m).label),l=e.some((m,y)=>c[y]!==""&&c[y]!==m.name),d=!!a,f=(d?'<th class="kan-anchor-col"></th>':"")+(l?"<th></th>":"")+o.map(m=>`<th>${k(m.label)}</th>`).join(""),p=e.map((m,y)=>{let v=d&&m.name?`${a}.${m.name}`:"",E=v?` id="${k(v)}"`:"",K=d?`<td class="kan-anchor-col">${v?this.anchorLink(v):""}</td>`:"",U=l?`<th scope="row">${k(c[y]??"")}</th>`:"",F=o.map(L=>{let S=Ke(m,L.uri);return S?`<td>${this.tableCellValue(S,n,s)}</td>`:"<td></td>"}).join("");return`<tr${E}>${K}${U}${F}</tr>`}).join(""),g=d&&a?` id="${k(a)}"`:"",h=d&&a?this.anchorLink(a):"",b=t?`<caption>${k(t)}${h}</caption>`:"";return`<table class="kan-property-table"${g}>${b}<thead><tr>${f}</tr></thead><tbody>${p}</tbody></table>`}tableCellValue(e,n,t){if(t&&X(t,ma)){if(e instanceof he)return this.barMarkup(String(e.object));if(e instanceof ae&&Number.isFinite(Number(e.object)))return this.barMarkup(e.object)}if(e instanceof Ne)return this.statementToMarkdownHtml(e,n);if(e instanceof ae)return Ea(e.object);if(e instanceof he||e instanceof ge)return k(String(e.object));if(e instanceof J&&e.object instanceof O)return this.detailReferenceLink(e.object,n);if(e instanceof le)return this.renderEmbeddedTable([e.object],n);if(e instanceof ue){let a=e.object??[],s=a.filter(o=>o instanceof D);return s.length>0&&s.length===a.length?this.renderEmbeddedTable(s,n):a.map(o=>o instanceof O?this.detailReferenceLink(o,n):o instanceof D?this.renderEmbeddedTable([o],n):k(String(o))).filter(o=>o).join(", ")}return""}statementToMarkdownHtml(e,n){let t=new Map,a;if(e instanceof Ne?a=this.resolveMarkdownLinks(e,n,t):e instanceof ae&&(a=e.object),!a)return"";let s=this.codeHighlighter(),o=mn(a,{highlight:(i,c)=>s.highlight(i,c)});for(let[i,c]of t){let l=new RegExp('(<a href="'+Ra(i)+'">)([^<]*)(</a>)',"g");o=o.replace(l,`$1<img class="kan-md-chip" src="${k(c)}" alt="" loading="lazy">$2$3`)}return o}renderBadgeRow(e,n,t){let a=B(e,pe);if(!a)return"<!-- LookRenderer: BadgeRow missing look.source -->";let s=this.readPropertyValueReferences(n,a);return s.length===0?"":`<div class="kan-badge-row">${s.map(i=>this.renderBadge(i,pe,t)).join("")}</div>`}renderChipRow(e,n,t){let a=rt(e,ni);if(a.length===0)return"<!-- LookRenderer: ChipRow has no look.chips -->";let s=[];for(let o of a){let i=this.readLabelForUri(o)??o.name,c=this.renderValuesInline(n,o,o,t);c&&s.push(`<span class="kan-chip"><span class="kan-chip-key">${k(i)}</span> <span class="kan-chip-val">${c}</span></span>`)}return s.length===0?"":`<div class="kan-chip-row">${s.join("")}</div>`}async renderReferenceList(e,n,t){let a=rt(e,Sa);if(a.length===0)return"<!-- LookRenderer: ReferenceList has no look.entries -->";let s=this.readEmbeddedCarrier(e,pa),o=this.readEmbeddedCarrier(e,xo),i=[];for(let c of a){let l=this.readPropertyValueReferences(n,c);if(l.length===0)continue;let d=this.readLabelForUri(c)??c.name;if(s){let f=[];for(let g of l)f.push(await this.renderDetailRow(g,s,o,t));let p=f.filter(g=>g).join("");p&&i.push(`<dt>${k(d)}</dt><dd><ul class="kan-ref-rows">${p}</ul></dd>`)}else{let f=l.map(p=>this.renderReferenceLink(p,Sa,t)).join(", ");i.push(`<dt>${k(d)}</dt><dd>${f}</dd>`)}}return i.length===0?"":`<dl class="kan-reference-list">${i.join("")}</dl>`}async renderDetailRow(e,n,t,a){let s=ee(this.catalog,{publisher:e.subject.publisher,package_:e.subject.package_,name:e.subject.name,...e.subject.version?{version:e.subject.version}:{}});if(!s)return"";let o=await this.evaluateCarrier(n,s)??G(this.catalog,s).label,i="";if(t){let f=await this.evaluateCarrier(t,s);f&&(i=`<span class="kan-ref-badge">${k(f)}</span>`)}let c=`<span class="kan-ref-text">${k(o)}</span>${i}`;if(!this.isLinkable(ie(s),a))return`<li class="kan-ref-row"><span class="kan-ref-rowlink">${c}</span></li>`;let l=this.hrefForSubject(s,a),d=this.svgUrlForSubject(s,a);return`<li class="kan-ref-row"><a class="kan-ref-rowlink" href="${k(l)}"><img class="kan-ref-icon" src="${k(d)}" alt="" loading="lazy"/>`+c+"</a></li>"}readPropertyValueText(e,n){let t=Ee(e,n);if(t.length===0)return Ke(e,n)?"":void 0;let a=o=>o instanceof O?this.readLabelForUri({publisher:o.subject.publisher,package_:o.subject.package_,name:o.subject.name})??o.subject.name:o instanceof D?this.readEmbeddedText(o,0):String(o),s=t.map(o=>"literal"in o.item?o.item.value:o.item);if(t.length===1&&!t[0].fromList){let o=s[0];return o instanceof D?this.readEmbeddedText(o,0)||void 0:a(o)}return s.map(a).filter(o=>o).join(", ")}readEmbeddedText(e,n){if(n>=va)return"\u2026";let t=[];for(let a of e.statement){let s=a.predicate?.subject;if(!(s&&X(s,ze)))if(a instanceof ae)t.push(a.object);else if(a instanceof he||a instanceof ge)t.push(String(a.object));else if(a instanceof J){let o=a.object;t.push(this.readLabelForUri({publisher:o.subject.publisher,package_:o.subject.package_,name:o.subject.name})??o.subject.name)}else a instanceof le&&t.push(this.readEmbeddedText(a.object,n+1))}return t.filter(a=>a).join(", ")}readPropertyValueReferences(e,n){return this.valueItems(e,n).filter(t=>t instanceof O)}valueItems(e,n){return Ee(e,n).map(t=>"literal"in t.item?t.item.value:t.item)}renderInlineValue(e,n,t,a=0){return e instanceof O?this.renderReferenceLink(e,n,t):e instanceof D?this.renderEmbeddedInline(e,t,a):typeof e=="string"?k(e):typeof e=="number"||typeof e=="boolean"?k(String(e)):""}renderValuesInline(e,n,t,a,s=0){return this.valueItems(e,n).map(o=>this.renderInlineValue(o,t,a,s)).filter(o=>o).join(", ")}renderEmbeddedInline(e,n,t=0){if(t>=va)return"\u2026";let a=[];for(let s of wa(e)){if(X(s,ze))continue;let o=this.readLabelForUri({publisher:s.publisher,package_:s.package_,name:s.name})??s.name,i=this.renderValuesInline(e,s,s,n,t+1);i&&a.push(`<dt>${k(o)}</dt><dd>${i}</dd>`)}return a.length?`<dl class="kan-embedded">${a.join("")}</dl>`:""}renderReferenceLink(e,n,t){let a=this.readLabelForUri({publisher:e.subject.publisher,package_:e.subject.package_,name:e.subject.name})??e.subject.name;if(!this.isLinkable(e.subject.publisher,t))return`<span class="kan-link-plain">${k(a)}</span>`;let s=this.urlForReference(e,n,t);return`<a class="kan-link" href="${k(s)}">${k(a)}</a>`}isLinkable(e,n){return this.publisherFirst||e===n}renderBadge(e,n,t){let a=this.readLabelForUri({publisher:e.subject.publisher,package_:e.subject.package_,name:e.subject.name})??e.subject.name,s=this.readCommentForUri({publisher:e.subject.publisher,package_:e.subject.package_,name:e.subject.name}),o=s?` title="${k(s)}"`:"";if(!this.isLinkable(e.subject.publisher,t))return`<span class="kan-badge"${o}>${k(a)}</span>`;let i=this.urlForReference(e,n,t);return`<a class="kan-badge" href="${k(i)}"${o}>${k(a)}</a>`}urlForReference(e,n,t){let a=n?this.getUrlFormForProperty(n):"=";return this.resourceHref({publisher:e.subject.publisher,package_:e.subject.package_,...e.subject.version?{version:e.subject.version}:{},name:e.subject.name},t,a)}getUrlFormForProperty(e){let n=ee(this.catalog,e);if(!n)return"=";let t=Z(n,ti);return t==="*"||t==="^"||t==="~"||t==="="?t:"="}readLabelForUri(e){let n=ee(this.catalog,e);if(n)return G(this.catalog,n).label}readCommentForUri(e){let n=ee(this.catalog,e);if(n)return G(this.catalog,n).summary}};function ai(r){let e=new Map;for(let n of r.statement){if(!(n instanceof le)||!Me(n,Pn.publisher,Pn.package_,Pn.name))continue;let t=n.object;for(let a of t.statement){if(!(a instanceof ae))continue;let s=a.predicate?.subject?.name;if(!s)continue;let o=a.object;e.has(s)||e.set(s,o)}}return e}function Un(r){for(let e of r.statement)if(e instanceof le&&Me(e,Fn.publisher,Fn.package_,Fn.name))return e.object}function at(r){return Ee(r,qo).map(e=>e.item).filter(e=>e instanceof D)}function cn(r){for(let e of r.statement)if(e instanceof J&&!(!e.predicate?.subject||!X(e.predicate.subject,ze))&&e.object instanceof O){let n=e.object.subject;return{publisher:n.publisher,package_:n.package_,name:n.name}}}function B(r,e){for(let n of r.statement)if(n instanceof J&&Me(n,e.publisher,e.package_,e.name)&&n.object instanceof O){let t=n.object.subject;return{publisher:t.publisher,package_:t.package_,name:t.name}}}function rt(r,e){return je(r,e).map(n=>({publisher:n.publisher,package_:n.package_,name:n.name}))}function wa(r){let e=new Map;for(let n of r.statement){let t=n.predicate?.subject;if(!t)continue;let a=`${t.publisher}/${t.package_}/${t.name}`;e.has(a)||e.set(a,{publisher:t.publisher,package_:t.package_,name:t.name})}return[...e.values()]}function Ke(r,e){for(let n of r.statement)if(Me(n,e.publisher,e.package_,e.name))return n}function Z(r,e){for(let n of r.statement)if(n instanceof ae&&Me(n,e.publisher,e.package_,e.name))return n.object}function On(r,e){for(let n of r.statement)if(n instanceof le&&Me(n,e.publisher,e.package_,e.name))return n.object}function _a(r,e){for(let n of r.statement)if(n instanceof he&&Me(n,e.publisher,e.package_,e.name))return n.object}function ri(r,e){for(let n of r.statement)if(n instanceof ge&&Me(n,e.publisher,e.package_,e.name))return n.object===!0;return!1}function si(r){for(let e of $e(r))if(X(e.subject,ns)||X(e.subject,ts))return!0;return!1}function $e(r){return Ee(r,ze).map(e=>e.item).filter(e=>e instanceof O)}function In(r){let e=[];for(let n of r.statement)if(n instanceof J){if(!n.predicate?.subject||!X(n.predicate.subject,ot))continue;n.object instanceof O&&e.push(n.object)}else if(n instanceof ue){if(!n.predicate?.subject||!X(n.predicate.subject,ot))continue;for(let t of n.object??[])t instanceof O&&e.push(t)}return e}function ee(r,e){let n="version"in e?e.version:void 0;if(n){let t=`${e.publisher}/${e.package_}@${n.major}.${n.minor}.${n.patch}`;for(let a of r)if(a instanceof Y&&a.name===e.name&&a.namespace===t)return a}for(let t of r){if(!(t instanceof Y)||t.name!==e.name)continue;if((t.namespace||"").startsWith(`${e.publisher}/${e.package_}@`))return t}}function Me(r,e,n,t){let a=r.predicate?.subject;return a?a.publisher===e&&a.package_===n&&a.name===t:!1}function X(r,e){return r.publisher===e.publisher&&r.package_===e.package_&&r.name===e.name}function Q(r){return`${r.publisher}/${r.package_}/${r.name}`}function oi(r){let e=s=>s.replace(/\*\//g,"* /"),n=[];n.push(` * kanonak stylesheet \u2014 ${e(r.resource.namespace)}/${e(r.resource.name)}`),n.push(" *");let t=new Map;for(let s of r.tokens.values()){let o=`${s.sourceNamespace} ${s.sourceName}`,i=t.get(o)??{count:0,level:s.level};i.count+=1,t.set(o,i)}if(t.size===0)n.push(" * :root tokens: NONE resolved");else{n.push(` * :root tokens (${r.tokens.size}):`);for(let[s,{count:o,level:i}]of t)n.push(` * ${o} from ${e(s)} (${i})`)}let a=r.baseStylesheet;if(a.css!==void 0)n.push(` * base CSS: ${e(a.sourceNamespace??"")}/base-stylesheet (${a.css.length} bytes, ${a.scope})`);else{n.push(" *"),n.push(" * !! WARNING: NO BASE STYLESHEET \u2014 this file contains only :root tokens."),n.push(" * !! Pages will appear UNSTYLED.");for(let s of r.warnings)n.push(` * !! ${e(s)}`);n.push(" * !! Full diagnostics: /.well-known/kanonak-render")}if(r.look){let s=r.look.sourceClass;n.push(` * look: ${e(s.publisher)}/${e(s.package_)}/${e(s.name)}`)}return`/*
|
|
153
|
+
${n.join(`
|
|
154
|
+
`)}
|
|
155
|
+
*/`}function ie(r){let e=r.namespace||"",n=e.indexOf("/");return n>=0?e.substring(0,n):e}function k(r){return r.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function Oe(r){return r.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function ja(r,e){return e==null?"":Ge(e)?e.value:r==="string-literal"?typeof e=="string"?e:String(e):Array.isArray(e)?e.map(n=>Ge(n)?n.value:Oe(typeof n=="string"?n:String(n))).join(""):Oe(typeof e=="string"?e:String(e))}function xa(r){if(r==null)return"";if(typeof r=="string")return r;if(typeof r=="number"||typeof r=="boolean")return String(r);if(Ge(r))return r.value;if(Array.isArray(r))return r.map(xa).filter(n=>n!=="").join(", ");if(r instanceof O)return r.subject.name;if(r instanceof Y||r instanceof D)return r.name??"";let e=r.value;return typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):""}function st(r,e){return r.length<=e?r:r.slice(0,e).replace(/\s+\S*$/,"")+"\u2026"}function Ka(r){return r.toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function Ra(r){return r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Ea(r){let e=An(r);return k(e||r)}function An(r){let e=/^(\d{4})-(\d{2})-(\d{2})([T ]\d{2}:\d{2}(?::\d{2})?(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})?)?$/.exec(r.trim());if(!e)return;let n=Date.parse(r);if(!Number.isFinite(n))return;let t=new Date(n),s=`${["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][t.getUTCMonth()]} ${t.getUTCDate()}, ${t.getUTCFullYear()}`;if(!e[4])return s;let o=t.getUTCHours(),i=(o+11)%12+1,c=o>=12?"PM":"AM";return`${s} \xB7 ${i}:${String(t.getUTCMinutes()).padStart(2,"0")} ${c} UTC`}function Tn(r){if(!r)return"";let e=/^(\d{4})-(\d{2})-(\d{2})/.exec(r);return e?`${["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][parseInt(e[2],10)-1]??e[2]} ${parseInt(e[3],10)}`:r}function ii(){return new Set(Vn.bandDispatchUris().map(r=>`${r.publisher}/${r.package_}/${r.name}`))}export{q as a,gi as b,He as c,Tt as d,Ft as e,G as f,Vt as g,Mt as h,Nt as i,zn as j,pn as k,qt as l,Gi as m,mn as n,Ge as o,ve as p,gn as q,xn as r,Ve as s,Vn as t,ii as u};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* THE error for an HTTP response the SDK could not use. Every "failed to fetch"
|
|
3
|
+
* site builds it with {@link httpError}, so the message always carries what the
|
|
4
|
+
* server said about the refusal: its RFC 9457 problem details, or a bounded
|
|
5
|
+
* excerpt of a plain-text body, and its `Retry-After`. A server that refuses for
|
|
6
|
+
* a reason backoff cannot fix (a policy, a required step) explains itself there.
|
|
7
|
+
*/
|
|
8
|
+
/** RFC 9457 problem details (`application/problem+json`): the members we surface. */
|
|
9
|
+
export interface ProblemDetails {
|
|
10
|
+
type?: string;
|
|
11
|
+
title?: string;
|
|
12
|
+
status?: number;
|
|
13
|
+
detail?: string;
|
|
14
|
+
instance?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare class KanonakHttpError extends Error {
|
|
17
|
+
readonly url: string;
|
|
18
|
+
readonly status: number;
|
|
19
|
+
readonly problem?: ProblemDetails | undefined;
|
|
20
|
+
/** The server's `Retry-After`, in seconds, when it sent one. */
|
|
21
|
+
readonly retryAfterSeconds?: number | undefined;
|
|
22
|
+
constructor(message: string, url: string, status: number, problem?: ProblemDetails | undefined,
|
|
23
|
+
/** The server's `Retry-After`, in seconds, when it sent one. */
|
|
24
|
+
retryAfterSeconds?: number | undefined);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Build the error for `response` to a request for `url`. `what` names the thing
|
|
28
|
+
* being fetched ("Kanonak package", "publisher lock"). Reads the body, so call
|
|
29
|
+
* it only for a response the caller will not otherwise consume.
|
|
30
|
+
*/
|
|
31
|
+
export declare function httpError(what: string, url: string, response: Response): Promise<KanonakHttpError>;
|
|
32
|
+
/**
|
|
33
|
+
* `(status text): what the server said [retry-after]` for a response: the status,
|
|
34
|
+
* its problem details or body excerpt, and its `Retry-After`. Reads the body.
|
|
35
|
+
*/
|
|
36
|
+
export declare function describeResponse(response: Response): Promise<string>;
|
|
37
|
+
/** `Retry-After` (delta-seconds or HTTP-date) as whole seconds from now. */
|
|
38
|
+
export declare function retryAfterSecondsOf(header: string | null): number | undefined;
|
|
@@ -59,8 +59,11 @@ export declare function assertHttpsUrl(url: string | URL): void;
|
|
|
59
59
|
* a rate-limited or struggling origin (e.g. kanonak.org) is backed off rather
|
|
60
60
|
* than hammered. Retries are bounded ({@link MAX_RETRIES}); a non-retryable
|
|
61
61
|
* status (200/404/302/4xx) returns immediately, and a final 429/5xx is returned
|
|
62
|
-
* to the caller to handle.
|
|
63
|
-
*
|
|
62
|
+
* to the caller to handle. A `Retry-After` longer than one backoff step
|
|
63
|
+
* ({@link BACKOFF_CAP_MS}) is returned at once too: retrying sooner than the
|
|
64
|
+
* server asked would ignore it, and waiting that long silently would hang the
|
|
65
|
+
* caller. The caller's {@link httpError} then says what the server asked for.
|
|
66
|
+
* The {@link setKanonakFetchRetries} seam disables the waits in tests.
|
|
64
67
|
*/
|
|
65
68
|
export declare function kanonakFetch(input: string | URL, init?: RequestInit): Promise<Response>;
|
|
66
69
|
/**
|