@kanonak-protocol/sdk 5.35.0 → 5.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/dist/browser.d.ts +3 -1
  2. package/dist/browser.js +1 -1
  3. package/dist/{chunk-O35Y6QUW.js → chunk-2WUZKSLB.js} +1 -1
  4. package/dist/chunk-3353RWDC.js +1 -0
  5. package/dist/{chunk-2Y6R3K5A.js → chunk-4CXAZH3C.js} +1 -1
  6. package/dist/chunk-7JBKOJB4.js +1 -0
  7. package/dist/chunk-D2X6J77P.js +1 -0
  8. package/dist/chunk-D4QGPMRW.js +1 -0
  9. package/dist/chunk-DONOB6RA.js +1 -0
  10. package/dist/{chunk-ZYDJUGIA.js → chunk-ED35OFGD.js} +1 -1
  11. package/dist/chunk-EG47OOJC.js +155 -0
  12. package/dist/chunk-HKX27KBZ.js +1 -0
  13. package/dist/{chunk-26SO3A4B.js → chunk-LE26SEJU.js} +1 -1
  14. package/dist/chunk-NUTHBBDZ.js +1 -0
  15. package/dist/{chunk-BZ3YTI3C.js → chunk-OOYGILH4.js} +2 -2
  16. package/dist/chunk-R4QCVB5M.js +68 -0
  17. package/dist/chunk-VORVR5BZ.js +1 -0
  18. package/dist/chunk-W5AOJ5SJ.js +3 -0
  19. package/dist/index.d.ts +10 -8
  20. package/dist/index.js +1 -1
  21. package/dist/kanonaks/DefinedKanonak.d.ts +11 -0
  22. package/dist/kanonaks/LiteralKanonak.d.ts +12 -0
  23. package/dist/kanonaks/ReferenceKanonak.d.ts +2 -0
  24. package/dist/kanonaks/walkDefinedKanonaks.d.ts +23 -18
  25. package/dist/lock/LockFile.d.ts +6 -0
  26. package/dist/lock/index.d.ts +1 -1
  27. package/dist/look/displayValue.d.ts +3 -0
  28. package/dist/look/index.d.ts +1 -1
  29. package/dist/parsing/KanonakObjectParser.d.ts +8 -0
  30. package/dist/parsing/findMarkdownLinkAt.d.ts +8 -0
  31. package/dist/parsing/index.d.ts +2 -0
  32. package/dist/parsing/index.js +1 -1
  33. package/dist/parsing/sourceSymbols.d.ts +54 -0
  34. package/dist/producer/index.js +1 -1
  35. package/dist/reasoning/KanonakVocabulary.d.ts +21 -0
  36. package/dist/reasoning/index.d.ts +1 -1
  37. package/dist/reasoning/index.js +1 -1
  38. package/dist/repositories/LockAwareRepository.d.ts +1 -1
  39. package/dist/repositories/browser.js +1 -1
  40. package/dist/repositories/index.js +1 -1
  41. package/dist/resolution/ResourceTypeClassifier.d.ts +8 -1
  42. package/dist/resolution/index.d.ts +1 -0
  43. package/dist/resolution/index.js +1 -1
  44. package/dist/resolution/referenceSpelling.d.ts +14 -0
  45. package/dist/search/index.js +1 -1
  46. package/dist/server/closure.d.ts +8 -0
  47. package/dist/server/index.d.ts +1 -1
  48. package/dist/server/index.js +16 -16
  49. package/dist/server/requestRouter.d.ts +16 -0
  50. package/dist/statements/Statement.d.ts +9 -0
  51. package/dist/transformations/index.js +2 -2
  52. package/dist/transformations/v3/TransformationLoaderV3.d.ts +8 -2
  53. package/dist/uri-helpers/PropertyValues.d.ts +34 -3
  54. package/dist/uri-helpers/UriHelpers.d.ts +3 -0
  55. package/dist/uri-helpers/index.d.ts +1 -1
  56. package/dist/uri-helpers/index.js +1 -1
  57. package/dist/validation/KanonakObjectValidator.d.ts +7 -1
  58. package/dist/validation/index.js +1 -1
  59. package/dist/validation/rules/repository/MarkdownLinkRule.d.ts +1 -0
  60. package/package.json +2 -2
  61. package/dist/chunk-54D47DLS.js +0 -1
  62. package/dist/chunk-AVVLDZAZ.js +0 -68
  63. package/dist/chunk-D7QLWVPK.js +0 -155
  64. package/dist/chunk-HF5FJBS2.js +0 -1
  65. package/dist/chunk-IS3AQKB4.js +0 -1
  66. package/dist/chunk-JHQPXEMA.js +0 -1
  67. package/dist/chunk-KIBR3HAT.js +0 -1
  68. package/dist/chunk-MQBWSCNY.js +0 -1
  69. package/dist/chunk-V3DH67P3.js +0 -1
  70. package/dist/chunk-VEGFYZXG.js +0 -2
  71. package/dist/chunk-XK24CN3C.js +0 -1
@@ -1,155 +0,0 @@
1
- import{a as it}from"./chunk-6VIUXP4N.js";import{a as Ne,f as u,k as Sn}from"./chunk-JHQPXEMA.js";import{a as ct}from"./chunk-HF5FJBS2.js";import{a as ht}from"./chunk-PEJALHXK.js";import{aa as pt,ba as mt,ma as en,na as _e,oa as nn,pa as $n,ta as gt}from"./chunk-MQBWSCNY.js";import{A as We,B as Ee,C as xe,D as ft,E as Mn,F as vn,G as kt,b as Ie,c as z,d as D,e as I,i as ae,j as he,k as ke,l as J,m as oe,n as ie,o as W,p as re,q as lt,r as ut,s as we,t as Fe,u as _,w as ze,x as ce,y as dt,z as ln}from"./chunk-54D47DLS.js";import{a as yn}from"./chunk-FUUTGGJS.js";import{c as hn,d as st,e as bn,g as ot}from"./chunk-QILEJIFU.js";var Y=class extends Error{constructor(n,t){super(`${n} (at ${t})`);this.path=t}path};function Jo(r,e){let n=r.name,t=Ia(e),a={catalog:e,depth:0};if(_(r,u.InstanceTransformation))return wa(r,n,a,t);if(_(r,u.SetTransformation))return _a(r,n,a,t);throw new Y("Subject is not a recognized v3 transformation type \u2014 expected InstanceTransformation or SetTransformation",n)}function wa(r,e,n,t){return{kind:"instance",name:r.name,inputPattern:_t(r,e),rule:wn(r,u.rule,`${e}.rule`,n),artifactName:wn(r,u.artifactName,`${e}.artifactName`,n),outputs:jt(r,`${e}.outputs`),overrides:Kt(r,`${e}.formatOverrides`,n),fragments:t}}function _a(r,e,n,t){let a=Pe(r,u.partitionBy);return{kind:"set",name:r.name,inputPattern:_t(r,e),rule:wn(r,u.rule,`${e}.rule`,n),artifactName:wn(r,u.artifactName,`${e}.artifactName`,n),outputs:jt(r,`${e}.outputs`),overrides:Kt(r,`${e}.formatOverrides`,n),partitionBy:a,fragments:t}}function _t(r,e){let n=un(r,u.inputPattern);if(!n)throw new Y("inputPattern is required",e);return ja(n,`${e}.inputPattern`)}function ja(r,e){let n=Pe(r,u.matchesClass);if(!n)throw new Y("matchesClass is required",e);let t=[];for(let o of Se(r,u.requires))if(o instanceof J)t.push(Hn(o.object.subject));else if(o instanceof ie)for(let i of o.object)i instanceof I&&t.push(Hn(i.subject));let a=[],s=0;for(let o of Se(r,u.sortBy))if(o instanceof ie)for(let i of o.object)i instanceof D&&a.push(bt(i,`${e}.sortBy[${s++}]`));else o instanceof oe&&a.push(bt(o.object,`${e}.sortBy[${s++}]`));return{matchesClass:n,requires:t,sortBy:a}}function bt(r,e){let n=Pe(r,u.byProperty);if(!n)throw new Y("SortKey.byProperty is required",e);let t=Pe(r,u.order);if(!t)throw new Y("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 Y(`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=un(r,e);if(!a)throw new Y("expression is required",n);return Te(a,n,t)}function Te(r,e,n){if(_(r,u.StringLiteral))return{kind:"string-literal",value:ve(r,u.stringLiteral,e)};if(_(r,u.IntegerLiteral))return{kind:"integer-literal",value:wt(r,u.integerLiteral,e)};if(_(r,u.DecimalLiteral))return{kind:"decimal-literal",value:wt(r,u.decimalLiteral,e)};if(_(r,u.BooleanLiteral))return{kind:"boolean-literal",value:Pa(r,u.booleanLiteral,e)};if(_(r,u.VarRef))return{kind:"var-ref",varName:ve(r,u.varName,e)};if(_(r,u.PropertyRead))return{kind:"property-read",source:S(r,u.readSource,`${e}.readSource`,n),readProp:De(r,u.readProp,e,"readProp")};if(_(r,u.Traverse))return{kind:"traverse",source:S(r,u.traverseSource,`${e}.traverseSource`,n),through:De(r,u.through,e,"through"),step:S(r,u.step,`${e}.step`,n)};if(_(r,u.BuildAstNode))return{kind:"build-ast-node",astClass:De(r,u.astClass,e,"astClass"),set:Ra(r,`${e}.set`,n)};if(_(r,u.When))return{kind:"when",condition:S(r,u.condition,`${e}.condition`,n),thenBuild:S(r,u.thenBuild,`${e}.thenBuild`,n),elseBuild:Ka(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:S(r,u.primary,`${e}.primary`,n),alternate:S(r,u.alternate,`${e}.alternate`,n)};if(_(r,u.UriName))return{kind:"uri-name",source:S(r,u.uriNameOf,`${e}.uriNameOf`,n)};if(_(r,u.UriPublisher))return{kind:"uri-publisher",source:S(r,u.uriPublisherOf,`${e}.uriPublisherOf`,n)};if(_(r,u.UriPackage))return{kind:"uri-package",source:S(r,u.uriPackageOf,`${e}.uriPackageOf`,n)};if(_(r,u.UriVersion))return{kind:"uri-version",source:S(r,u.uriVersionOf,`${e}.uriVersionOf`,n)};if(_(r,u.SubjectUri))return{kind:"subject-uri",source:S(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:S(r,u.resolveSource,`${e}.resolveSource`,n)};if(_(r,u.Normalize))return{kind:"normalize",source:S(r,u.normSource,`${e}.normSource`,n),normKind:Ea(r,e)};if(_(r,u.UnescapedString))return{kind:"unescaped-string",source:S(r,u.unescapedSource,`${e}.unescapedSource`,n)};if(_(r,u.RenderMarkdown))return{kind:"render-markdown",source:S(r,u.renderSource,`${e}.renderSource`,n),readProp:De(r,u.renderProp,e,"renderProp"),format:La(r,e)};if(_(r,u.IsSet))return{kind:"is-set",check:S(r,u.checkExpr,`${e}.checkExpr`,n)};if(_(r,u.CallFragment))return Oa(r,e,n);if(_(r,u.Join))return{kind:"join",source:S(r,u.source,`${e}.source`,n),separator:ve(r,u.separator,e)};if(_(r,u.Count))return{kind:"count",source:S(r,u.source,`${e}.source`,n)};if(_(r,u.Sum))return{kind:"sum",source:S(r,u.source,`${e}.source`,n)};if(_(r,u.Min))return{kind:"min",source:S(r,u.source,`${e}.source`,n)};if(_(r,u.Max))return{kind:"max",source:S(r,u.source,`${e}.source`,n)};if(_(r,u.Average))return{kind:"average",source:S(r,u.source,`${e}.source`,n)};if(_(r,u.ForEach))return{kind:"for-each",source:S(r,u.source,`${e}.source`,n),loopVar:ve(r,u.loopVar,e),emit:S(r,u.emit,`${e}.emit`,n)};if(_(r,u.ListMap))return{kind:"list-map",source:S(r,u.source,`${e}.source`,n),loopVar:ve(r,u.loopVar,e),mapBody:S(r,u.mapBody,`${e}.mapBody`,n)};if(_(r,u.Filter))return{kind:"filter",source:S(r,u.source,`${e}.source`,n),loopVar:ve(r,u.loopVar,e),predicate:S(r,u.predicate,`${e}.predicate`,n)};if(_(r,u.PartitionBy))return{kind:"partition-by",source:S(r,u.source,`${e}.source`,n),loopVar:ve(r,u.loopVar,e),partitionKey:S(r,u.partitionKey,`${e}.partitionKey`,n)};if(_(r,u.DistinctBy))return{kind:"distinct-by",source:S(r,u.source,`${e}.source`,n),loopVar:ve(r,u.loopVar,e),distinctKey:S(r,u.distinctKey,`${e}.distinctKey`,n)};if(_(r,u.AllStatements))return{kind:"all-statements",source:S(r,u.statementsOf,`${e}.statementsOf`,n)};if(_(r,u.StatementPredicate))return{kind:"statement-predicate",source:S(r,u.predicateOf,`${e}.predicateOf`,n)};if(_(r,u.StatementValue))return{kind:"statement-value",source:S(r,u.valueOf,`${e}.valueOf`,n)};if(_(r,u.DateFormat))return{kind:"date-format",source:S(r,u.dateSource,`${e}.dateSource`,n),format:Ca(r,e)};if(_(r,u.NumberFormat)){let t=Dn(r,u.fractionDigits);if(t!==void 0&&(!Number.isInteger(t)||t<0||t>20))throw new Y(`fractionDigits must be an integer between 0 and 20; got ${t}`,e);let a=Be(r,u.currencyCode);return{kind:"number-format",source:S(r,u.numberSource,`${e}.numberSource`,n),style:xa(r,e),...t!==void 0?{fractionDigits:t}:{},...a!==void 0?{currencyCode:a}:{}}}if(_(r,u.Add))return{kind:"add",left:S(r,u.arithLeft,`${e}.arithLeft`,n),right:S(r,u.arithRight,`${e}.arithRight`,n)};if(_(r,u.Subtract))return{kind:"subtract",left:S(r,u.arithLeft,`${e}.arithLeft`,n),right:S(r,u.arithRight,`${e}.arithRight`,n)};if(_(r,u.Multiply))return{kind:"multiply",left:S(r,u.arithLeft,`${e}.arithLeft`,n),right:S(r,u.arithRight,`${e}.arithRight`,n)};if(_(r,u.Divide))return{kind:"divide",left:S(r,u.arithLeft,`${e}.arithLeft`,n),right:S(r,u.arithRight,`${e}.arithRight`,n)};if(_(r,u.Reverse))return{kind:"reverse",source:S(r,u.source,`${e}.source`,n)};if(_(r,u.WindowedMap)){let t=Dn(r,u.windowSize);if(t===void 0||!Number.isInteger(t)||t<1)throw new Y("windowSize must be a positive integer",`${e}.windowSize`);return{kind:"windowed-map",source:S(r,u.source,`${e}.source`,n),windowSize:t,windowVar:ve(r,u.windowVar,e),windowBody:S(r,u.windowBody,`${e}.windowBody`,n)}}if(_(r,u.PairwiseMap))return{kind:"pairwise-map",source:S(r,u.source,`${e}.source`,n),firstVar:ve(r,u.firstVar,e),secondVar:ve(r,u.secondVar,e),pairBody:S(r,u.pairBody,`${e}.pairBody`,n)};if(_(r,u.Scan))return{kind:"scan",source:S(r,u.source,`${e}.source`,n),initialState:S(r,u.initialState,`${e}.initialState`,n),stateVar:ve(r,u.stateVar,e),elementVar:ve(r,u.elementVar,e),accumulate:S(r,u.accumulate,`${e}.accumulate`,n)};if(_(r,u.ListItemAt))return{kind:"list-item-at",source:S(r,u.source,`${e}.source`,n),itemIndex:S(r,u.itemIndex,`${e}.itemIndex`,n)};if(_(r,u.Equals))return{kind:"equals",left:S(r,u.compareLeft,`${e}.compareLeft`,n),right:S(r,u.compareRight,`${e}.compareRight`,n)};if(_(r,u.GreaterThan))return{kind:"greater-than",left:S(r,u.compareLeft,`${e}.compareLeft`,n),right:S(r,u.compareRight,`${e}.compareRight`,n)};if(_(r,u.LessThan))return{kind:"less-than",left:S(r,u.compareLeft,`${e}.compareLeft`,n),right:S(r,u.compareRight,`${e}.compareRight`,n)};if(_(r,u.GreaterThanOrEqual))return{kind:"greater-than-or-equal",left:S(r,u.compareLeft,`${e}.compareLeft`,n),right:S(r,u.compareRight,`${e}.compareRight`,n)};if(_(r,u.LessThanOrEqual))return{kind:"less-than-or-equal",left:S(r,u.compareLeft,`${e}.compareLeft`,n),right:S(r,u.compareRight,`${e}.compareRight`,n)};if(_(r,u.Not))return{kind:"not",operand:S(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:S(r,u.haystack,`${e}.haystack`,n),needle:S(r,u.needle,`${e}.needle`,n)};if(_(r,u.Abs))return{kind:"abs",value:S(r,u.value,`${e}.value`,n)};if(_(r,u.Negate))return{kind:"negate",value:S(r,u.value,`${e}.value`,n)};if(_(r,u.IsReference))return{kind:"is-reference",check:S(r,u.kindCheck,`${e}.kindCheck`,n)};if(_(r,u.IsEmbedded))return{kind:"is-embedded",check:S(r,u.kindCheck,`${e}.kindCheck`,n)};if(_(r,u.IsList))return{kind:"is-list",check:S(r,u.kindCheck,`${e}.kindCheck`,n)};if(_(r,u.IsString))return{kind:"is-string",check:S(r,u.kindCheck,`${e}.kindCheck`,n)};if(_(r,u.IsNumber))return{kind:"is-number",check:S(r,u.kindCheck,`${e}.kindCheck`,n)};if(_(r,u.IsBoolean))return{kind:"is-boolean",check:S(r,u.kindCheck,`${e}.kindCheck`,n)};if(_(r,u.StatementObject))return{kind:"statement-object",source:S(r,u.statementSource,`${e}.statementSource`,n)};if(_(r,u.Let))return{kind:"let",bindName:ve(r,u.letName,e),bindValue:S(r,u.letValue,`${e}.letValue`,n),body:S(r,u.letBody,`${e}.letBody`,n)};if(_(r,u.GetStatementByName))return{kind:"get-statement-by-name",inSubject:S(r,u.inSubject,`${e}.inSubject`,n),byName:S(r,u.byName,`${e}.byName`,n)};throw new Y("Expression is not of a recognized v3 type \u2014 embedded has no matching subclass of tx.Expression",e)}function S(r,e,n,t){let a=un(r,e);if(!a)throw new Y("child expression is required",n);return Te(a,n,t)}function Ka(r,e,n,t){let a=un(r,e);if(a)return Te(a,n,t)}function Nn(r,e,n,t){let a=[],s=0;for(let o of Se(r,e))if(o instanceof ie)for(let i of o.object)i instanceof D&&a.push(Te(i,`${n}[${s++}]`,t));else o instanceof oe&&a.push(Te(o.object,`${n}[${s++}]`,t));return a}function Ra(r,e,n){let t=[],a=0;for(let s of Se(r,u.set))if(s instanceof ie)for(let o of s.object)o instanceof D&&t.push(yt(o,`${e}[${a++}]`,n));else s instanceof oe&&t.push(yt(s.object,`${e}[${a++}]`,n));return t}function yt(r,e,n){return{field:De(r,u.field,e,"field"),value:S(r,u.bindValue,`${e}.bindValue`,n)}}function Ea(r,e){let n=Pe(r,u.normKind);if(!n)throw new Y("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 Y(`Unknown NormalizeKind: ${n.publisher}/${n.package_}/${n.name}`,e)}function La(r,e){let n=Pe(r,u.renderFormat);if(!n)throw new Y("renderFormat is required",e);if(re(n,u.RENDER_HTML))return"html";if(re(n,u.RENDER_MARKDOWN))return"markdown";throw new Y(`Unknown RenderFormat: ${n.publisher}/${n.package_}/${n.name}`,e)}var vt=new Set(["decimal","percent","basis-points","currency","compact"]);function xa(r,e){let n=Be(r,u.numberStyle);if(n===void 0)throw new Y("numberStyle is required",e);if(!vt.has(n))throw new Y(`Unknown numberStyle "${n}"; supported: ${[...vt].join(", ")}`,e);return n}var $t=new Set(["iso-date","iso-datetime","short-date","long-date","year","month-year"]);function Ca(r,e){let n=Be(r,u.dateFormat);if(!n)throw new Y("dateFormat is required",e);if(!$t.has(n))throw new Y(`Unknown dateFormat "${n}"; supported: ${[...$t].join(", ")}`,e);return n}function Oa(r,e,n){let t=Pe(r,u.fragmentRef);if(!t)throw new Y("fragmentRef is required",e);if(!Fa(n.catalog,t))throw new Y(`ExpressionFragment not found: ${t.publisher}/${t.package_}/${t.name}`,e);return{kind:"call-fragment",fragmentKey:Ua(t)}}function Ua(r){return`${r.publisher}/${r.package_}/${r.name}`}function Ia(r){let e=new Map,n=[];for(let t of r){if(!(t instanceof z)||!_(t,u.ExpressionFragment))continue;let a=un(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=Te(t.bodyEmb,`fragment(${t.pubPkgName})`,{catalog:r,depth:0});e.set(t.key,a)}return e}function Fa(r,e){for(let n of r)if(!(!(n instanceof z)||n.name!==e.name||!(n.namespace||"").startsWith(`${e.publisher}/${e.package_}@`))&&_(n,u.ExpressionFragment))return n}function jt(r,e){let n=new Set;for(let t of Se(r,u.outputs))if(t instanceof J)n.add(t.object.subject.name);else if(t instanceof ie)for(let a of t.object)a instanceof I&&n.add(a.subject.name);if(n.size===0)throw new Y("outputs is required (at least one OutputFormat)",e);return n}function Kt(r,e,n){let t=new Map,a=0;for(let s of Se(r,u.formatOverrides))if(s instanceof ie){for(let o of s.object)if(o instanceof D){let[i,c]=St(o,`${e}[${a++}]`);t.set(i,c)}}else if(s instanceof oe){let[o,i]=St(s.object,`${e}[${a++}]`);t.set(o,i)}return t}function St(r,e){let n=Pe(r,u.formatTarget);if(!n)throw new Y("formatTarget is required",e);let t=[];for(let i of Se(r,u.metadataKeys))if(i instanceof ae)t.push(i.object);else if(i instanceof ie)for(let c of i.object){let l=c.value;typeof l=="string"&&t.push(l)}let a=new Map;for(let i of Se(r,u.metadataRenames))if(i instanceof ie){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 oe){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 Ta(r){return r.predicate?.subject}function Se(r,e){let n=[];for(let t of r.statement){let a=Ta(t);a&&re(a,e)&&n.push(t)}return n}function un(r,e){for(let n of Se(r,e))if(n instanceof oe)return n.object}function Pe(r,e){for(let n of Se(r,e))if(n instanceof J)return Hn(n.object.subject)}function Be(r,e){for(let n of Se(r,e))if(n instanceof ae)return n.object}function Dn(r,e){for(let n of Se(r,e))if(n instanceof he)return n.object}function Bn(r,e){for(let n of Se(r,e))if(n instanceof ke)return n.object}function ve(r,e,n){let t=Be(r,e);if(t===void 0)throw new Y(`${e.name} (string) is required`,n);return t}function wt(r,e,n){let t=Dn(r,e);if(t===void 0)throw new Y(`${e.name} (number) is required`,n);return t}function Pa(r,e,n){let t=Bn(r,e);if(t===void 0)throw new Y(`${e.name} (boolean) is required`,n);return t}function De(r,e,n,t){let a=Pe(r,e);if(!a)throw new Y(`${t} (URI reference) is required`,n);return a}function Hn(r){return{publisher:r.publisher,package_:r.package_,name:r.name}}var Ye="kanonak.org",Ct="look",dn="core-rdf",Va={publisher:Ye,package_:Ct,name:"displayLabel"},Aa={publisher:Ye,package_:Ct,name:"displaySummary"},Ma={publisher:Ye,package_:dn,name:"subClassOf"},Na={publisher:Ye,package_:dn,name:"label"},Da={publisher:Ye,package_:dn,name:"comment"},Rt=new yn(Ye,dn,"Resource"),Ba=8;function H(r,e){return Ot(r,e,new Set)}function Ot(r,e,n){let t=xt(r,e,Va)??Na,a=xt(r,e,Aa)??Da,s=Et(r,e,t,n)??e.name,o=Et(r,e,a,n);return{label:s,summary:o}}function Et(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 ke)return String(a.object);if(a instanceof J)return Lt(r,a.object.subject,t);if(a instanceof ie){let o=[];for(let i of a.object??[])if(i instanceof I){let c=Lt(r,i.subject,t);c&&o.push(c)}if(o.length>0)return o.join(", ")}return}}}function Lt(r,e,n){let t=W(e);if(n.has(t)||n.size>=Ba)return e.name;let[a]=ce(r,e);if(!a)return e.name;let s=new Set(n);return s.add(t),Ot(r,a,s).label}function xt(r,e,n){let t=xe(e,n);if(t)return t;let a=new Set,s=we(e,Ha);for(;s.length>0;){let o=s.shift(),i=W(o);if(a.has(i))continue;a.add(i);let c=ce(r,o);for(let l of c){let d=xe(l,n);if(d)return d}for(let l of c)s.push(...we(l,Ma))}if(!a.has(W(Rt)))for(let o of ce(r,Rt)){let i=xe(o,n);if(i)return i}}var Ha={publisher:Ye,package_:dn,name:"type"};var qa="kanonak.org",Xe=(r,e)=>({publisher:qa,package_:r,name:e}),Ga=Xe("look","source"),Ut=Xe("look","connectors"),za=Xe("look","relation"),Wa=Xe("look","lineStyle"),Ya=Xe("look","participants"),Xa=Xe("core-owl","SymmetricProperty"),Qa=Xe("core-owl","inverseOf"),It=new Set(["solid","dotted","open","thick"]);function Ft(r){return xe(r,Ga)}function Tt(r,e){let n=ft(e,Ut),t=n?[n]:Mn(e,Ut),a=[];for(let s of t){if(!(s instanceof D))continue;let o=xe(s,za);if(!o)continue;let i=Ee(s,Wa),c=i!==void 0&&It.has(i);a.push({relation:o,subject:ce(r,o)[0],declaredStyle:c?i:void 0,invalidStyle:i!==void 0&&!c?i:void 0})}return a}function Pt(r,e){let n=[];for(let t of Mn(e,Ya)){if(!(t instanceof I))continue;let a=ce(r,t.subject)[0];a&&n.push(a)}return n}function fn(r,e,n){for(let t of ut(e))if(re(t,n)||nn(r,t).some(a=>re(a,n)))return!0;return!1}function Vt(r,e,n){let t=!!e.subject&&fn(r,e.subject,Xa);return e.declaredStyle?{style:e.declaredStyle,undirected:t}:e.subject&&we(e.subject,Qa).some(s=>n.some(o=>re(s,o.relation)))?{style:"dotted",undirected:t}:{style:"solid",undirected:t}}function qn(r,e,n){let t=Ft(n);if(!t)return _n("the band declares no look.source");let a=Tt(r,n);if(a.length===0)return _n("the band declares no look.connectors \u2014 nothing can be a message");let s=dt(e,t);if(!s)return{..._n(),sourceAbsent:!0};if(!(s instanceof Ne))return _n(`look.source ${W(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=ce(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(T=>re(p,T.relation)):a,y=_e(b),v=_e(f),E=[],K=[];for(let T of m){let{style:x,undirected:w}=Vt(r,T,a);y&&we(f,T.relation).some(G=>W(G)===W(y))?E.push({from:f,to:b,relation:T.relation,style:x,undirected:w}):v&&we(b,T.relation).some(G=>W(G)===W(v))&&K.push({from:b,to:f,relation:T.relation,style:x,undirected:w})}let O=E.length>0?E:K;l.push(...O),O.length===0&&Ve(f)!==Ve(b)&&d.push({prev:f,next:b,selected:p}),p=void 0}f=b}let k=new Map;for(let h of Pt(r,n))k.set(Ve(h),h);for(let h of l)k.has(Ve(h.from))||k.set(Ve(h.from),h.from),k.has(Ve(h.to))||k.set(Ve(h.to),h.to);return{messages:l,gaps:d,lifelines:[...k.values()],mentions:c,strayPropertyRefs:i,sourceAbsent:!1}}function Ve(r){return`${r.namespace}/${r.name}`}function _n(r){return{messages:[],gaps:[],lifelines:[],mentions:0,strayPropertyRefs:[],sourceAbsent:!1,...r?{problem:r}:{}}}var Ja="kanonak.org",Za="core-shacl",$e=r=>({publisher:Ja,package_:Za,name:r}),er=$e("NodeShape"),nr=$e("targetClass"),tr=$e("property"),ar=$e("path"),rr=$e("minCount"),sr=$e("maxCount"),or=$e("in"),ir=$e("pattern"),cr=$e("flags"),lr=$e("minLength"),ur=$e("maxLength"),dr=$e("minInclusive"),fr=$e("maxInclusive"),pr=$e("message");function tn(r){return typeof r=="number"?r:void 0}function mr(r){let e={},n=tn(We(r,rr)),t=tn(We(r,sr));n!==void 0&&(e.minCount=n),t!==void 0&&(e.maxCount=t);let a=tn(We(r,lr)),s=tn(We(r,ur));a!==void 0&&(e.minLength=a),s!==void 0&&(e.maxLength=s);let o=tn(We(r,dr)),i=tn(We(r,fr));o!==void 0&&(e.minInclusive=o),i!==void 0&&(e.maxInclusive=i);let c=Ee(r,ir);if(c!==void 0){let f=Ee(r,cr);e.pattern=f!==void 0?{regex:c,flags:f}:{regex:c}}let l=Fe(r,or).map(f=>f.item).filter(f=>"literal"in f).map(f=>f.value);l.length>0&&(e.enumValues=l);let d=Ee(r,pr);return d!==void 0&&(e.message=d),e}function kr(r,e){let n=[];for(let{item:t}of Fe(e,tr))if(t instanceof D)n.push(t);else if(t instanceof I){let a=ze(r,t.subject);a&&n.push(a)}return n}function gr(r){let e=new Map;for(let n of r){if(!(n instanceof z)||!_(n,er))continue;let t=xe(n,nr);if(!t)continue;let a=W(t);for(let s of kr(r,n)){let o=xe(s,ar);if(!o)continue;let i=mr(s);if(hr(s,i))continue;let c={pathKey:W(o),constraints:i},l=e.get(a);l?l.push(c):e.set(a,[c])}}return e}var At=new WeakMap;function pn(r){let e=At.get(r);return e||(e=gr(r),At.set(r,e)),e}function hr(r,e){return ln(r,pt)||ln(r,mt)?Object.keys(e).every(t=>t==="message"):!1}function br(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 Mt(r,e,n){let t=W(n),a=!1,s={};for(let o=e.length-1;o>=0;o--){let i=r.get(W(e[o]));if(i)for(let c of i)c.pathKey===t&&(a=!0,br(s,c.constraints))}if(a)return s.cardinality=s.maxCount===1?"single":"list",s.required=(s.minCount??0)>=1,s}var Qe="kanonak.org",Kn="core-rdf",Nt="core-xsd",yr={publisher:Qe,package_:Kn,name:"subClassOf"},Dt={publisher:Qe,package_:Kn,name:"label"},Bt={publisher:Qe,package_:Kn,name:"comment"},Ht={publisher:Qe,package_:"core-owl",name:"oneOf"},qt=r=>r;function vr(r,e,n){if(e.publisher===Qe&&e.package_===Kn&&e.name==="Literal")return{kind:"datatype",uri:e};let a=ze(r,e);if(a){let s=qt(a);if(en.isDatatypeType(s))return{kind:"datatype",uri:e};if(en.isClassType(s))return{kind:"class",uri:_e(a)??e,localName:a.name}}return e.publisher===Qe&&e.package_===Nt?{kind:"datatype",uri:e}:n==="datatype"?{kind:"datatype",uri:e}:{kind:"class",uri:e,localName:e.name}}function $r(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=vr(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(Qe,Nt,r);function Sr(r){return typeof r=="boolean"?jn("boolean"):typeof r=="number"?Number.isInteger(r)?jn("integer"):jn("decimal"):jn("string")}function wr(r,e,n){let t=[];for(let a of vn(e,Ht,r,W(n)))if(a.kind==="subject"||a.kind==="unresolved"){let s=a.kind==="subject"?a.node:void 0,o=(s?_e(s):void 0)??a.uri,i=s?Ee(s,Dt):void 0,c=s?Ee(s,Bt):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:Sr(a.value)});return t}function Rn(r,e,n,t){let a=nn(r,e),s=W(e);return gt(r,e).filter(i=>n?!0:i.domains.some(c=>W(c)===s)).map(i=>$r(r,i,Mt(t,a,i.uri)))}async function Li(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&&!st(p.version,t.version)),c=[],l=[],d=new Set,f=!1;for(let p of s){if(!(p instanceof z))continue;let k=_e(p);if(!k||!i(k)||(f=!0,!en.isClassType(qt(p))))continue;let h=W(k);if(d.has(h))continue;d.add(h);let b=we(p,yr).map(v=>({uri:v,localName:v.name})),m=Ee(p,Dt),y=Ee(p,Bt);c.push({uri:k,localName:k.name,superClasses:b,properties:Rn(s,k,a,o),...m!==void 0?{label:m}:{},...y!==void 0?{comment:y}:{}}),ln(p,Ht)&&l.push({uri:k,localName:k.name,members:wr(s,p,k),...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):rn(f),k=l?` class="language-${zt(l)}"`:"";t.push(`<pre class="kan-code"><code${k}>${p}</code></pre>`);continue}let i=/^(#{1,6})\s+(.*)$/.exec(s);if(i){let l=i[1].length,d=an(i[2].trim());t.push(`<h${l}>${d}</h${l}>`),a++;continue}if(s.includes("|")&&a+1<n.length&&Gt(n[a+1])){let l=Gn(s),d=_r(n[a+1]);a+=2;let f=[];for(;a<n.length&&n[a].trim()!==""&&n[a].includes("|");)f.push(Gn(n[a])),a++;t.push(jr(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>${an(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>${an(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&&Gt(n[a+1]));)c.push(n[a]),a++;t.push(`<p>${an(c.join(" "))}</p>`)}return t.join(`
11
- `)}function Gt(r){return r.includes("-")?/^[\s|:-]+$/.test(r):!1}function Gn(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 _r(r){return Gn(r).map(e=>{let n=e.startsWith(":"),t=e.endsWith(":");return n&&t?"center":t?"right":n?"left":null})}function jr(r,e,n){let t=o=>{let i=e[o];return i?` style="text-align:${i}"`:""},a=r.map((o,i)=>`<th${t(i)}>${an(o)}</th>`).join(""),s=n.map(o=>`<tr>${o.map((c,l)=>`<td${t(l)}>${an(c)}</td>`).join("")}</tr>`).join(`
12
- `);return`<table>
13
- <thead><tr>${a}</tr></thead>
14
- <tbody>
15
- ${s}
16
- </tbody>
17
- </table>`}function an(r){let e=rn(r);return e=e.replace(/`([^`\n]+)`/g,(n,t)=>`<code>${t}</code>`),e=e.replace(/\[([^\]]+)\]\(([^)\s]+)\)/g,(n,t,a)=>`<a href="${zt(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 rn(r){return r.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function zt(r){return r.replace(/"/g,"&quot;").replace(/&/g,"&amp;")}var Kr={publisher:"kanonak.org",package_:"core-rdf",name:"label"};function Je(r){return typeof r=="object"&&r!==null&&r.kind==="raw-string"}var Ce=class extends Error{},kn=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 Ce(`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 Wt(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 Wt(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 Ie))return;let a=Er(t,e.through),s=[];for(let o of a){let i=ce(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&&He(f)!==""){s.push(He(f));break}}}return s.join("")}case"uri-name":{let t=await this.evaluate(e.source,n);return sn(t)?t.name:t instanceof I?t.subject.name:t instanceof z?t.name:t instanceof D?t.name??"":void 0}case"uri-publisher":{let t=await this.evaluate(e.source,n);return zn(t)?.publisher}case"uri-package":{let t=await this.evaluate(e.source,n);return zn(t)?.package_}case"uri-version":{let t=await this.evaluate(e.source,n);return zn(t)?.version}case"subject-uri":{let t=await this.evaluate(e.source,n);if(t instanceof z){let a=t.namespace??"",s=t.name??"";return!a||!s?void 0:`${a}/${s}`}if(t instanceof I){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 z?t:t instanceof I?await this.resolver.resolveSubject(t.subject,this.catalog):sn(t)?await this.resolver.resolveSubject(t,this.catalog):void 0}case"normalize":{let t=await this.evaluate(e.source,n),a=t==null?"":He(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?"":He(t)}}case"render-markdown":{let t=await this.evaluate(e.source,n);if(!(t instanceof Ie))return;let a;for(let o of t.statement){let i=Yn(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:He(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;xr.has(o)&&(Array.isArray(s)&&s.every(i=>Yt(i))?s=s.map(i=>Xt(i)).join(""):Yt(s)&&(s=Xt(s))),t[o]=s}return t}case"call-fragment":{let t=this.fragments.get(e.fragmentKey);if(!t)throw new Ce(`ExpressionFragment ${e.fragmentKey} not found in registry`);return this.evaluate(t,n)}case"join":return(await this.evaluateList(e.source,n)).map(a=>a==null?"":He(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+=ge(s,"Sum");return a}case"min":{let t=await this.evaluateList(e.source,n);if(t.length===0)throw new Ce("Min on an empty list is undefined; guard with IsSet");let a=ge(t[0],"Min");for(let s=1;s<t.length;s++){let o=ge(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 Ce("Max on an empty list is undefined; guard with IsSet");let a=ge(t[0],"Max");for(let s=1;s<t.length;s++){let o=ge(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 Ce("Average on an empty list is undefined; guard with IsSet");let a=0;for(let s of t)a+=ge(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,je(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,je(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,je(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,je(o));let c=await this.evaluate(e.partitionKey,i),l=Zt(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,je(o));let c=await this.evaluate(e.distinctKey,i),l=Zt(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 Ie?t.statement:[]}case"statement-predicate":{let t=await this.evaluate(e.source,n);if(Wn(t)){let a=t.predicate;if(a instanceof I)return a}return}case"statement-value":{let t=await this.evaluate(e.source,n);return Wn(t)?Vr(t):void 0}case"date-format":{let t=await this.evaluate(e.source,n),a=t==null?"":He(t);return a?Or(a,e.format):""}case"number-format":{let t=await this.evaluate(e.source,n),a=t==null?"":He(t);return a.trim()?Pr(a,e.style,e.fractionDigits,e.currencyCode):""}case"add":{let t=ge(await this.evaluate(e.left,n),"Add"),a=ge(await this.evaluate(e.right,n),"Add");return t+a}case"subtract":{let t=ge(await this.evaluate(e.left,n),"Subtract"),a=ge(await this.evaluate(e.right,n),"Subtract");return t-a}case"multiply":{let t=ge(await this.evaluate(e.left,n),"Multiply"),a=ge(await this.evaluate(e.right,n),"Multiply");return t*a}case"divide":{let t=ge(await this.evaluate(e.left,n),"Divide"),a=ge(await this.evaluate(e.right,n),"Divide");if(a===0)throw new Ce("Divide by zero; guard with When");return t/a}case"reverse":{if(e.source.kind==="reverse")return this.evaluate(e.source.source,n);let t=await this.evaluateReverseIterator(e.source,n);return t!==void 0?t:[...await this.evaluateList(e.source,n)].reverse()}case"windowed-map":{let t=await this.evaluateList(e.source,n);if(t.length<e.windowSize)return[];let a=[];for(let s=0;s+e.windowSize<=t.length;s++){let o=t.slice(s,s+e.windowSize),i=new Map(n);i.set(e.windowVar,o);let c=await this.evaluate(e.windowBody,i);if(c!=null)if(Array.isArray(c))for(let l of c)a.push(l);else a.push(c)}return a}case"pairwise-map":{let t=await this.evaluateList(e.source,n);if(t.length<2)return[];let a=[];for(let s=0;s+1<t.length;s++){let o=new Map(n);o.set(e.firstVar,je(t[s])),o.set(e.secondVar,je(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,je(o));let c=await this.evaluate(e.accumulate,i);s.push(c),a=c}return s}case"list-item-at":{let t=await this.evaluateList(e.source,n),a=await this.evaluate(e.itemIndex,n);return typeof a!="number"||!Number.isInteger(a)||a<0||a>=t.length?void 0:t[a]}case"equals":{let t=await this.evaluate(e.left,n),a=await this.evaluate(e.right,n);return Qt(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(Qt(s,a))return!0;return!1}case"abs":{let t=ge(await this.evaluate(e.value,n),"Abs");return Math.abs(t)}case"negate":return-ge(await this.evaluate(e.value,n),"Negate");case"is-reference":{let t=await this.evaluate(e.check,n);return t instanceof I||t instanceof z}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(!Wn(t))return;let a=t;return a instanceof ae||a instanceof he||a instanceof ke||a instanceof J||a instanceof oe||a instanceof ie?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 Ie)||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 Ce("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}](${lt(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,Kr);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,je(t[s-1])),o.set(e.secondVar,je(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,je(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,je(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 Ie)return Rr(r,e);if(Lr(r))return re(e,u.key)?r.key:re(e,u.members)?r.members:void 0}function Rr(r,e){for(let n of r.statement){let t=Yn(n);if(!(!t||!re(t,e))&&(n instanceof ae||n instanceof he||n instanceof ke||n instanceof J||n instanceof oe||n instanceof ie))return n.object}}function Er(r,e){let n=[];for(let t of r.statement){let a=Yn(t);if(!(!a||!re(a,e))){if(t instanceof J)n.push(t.object.subject);else if(t instanceof ie)for(let s of t.object)s instanceof I&&n.push(s.subject)}}return n}function Yn(r){return r.predicate?.subject}function He(r){if(r==null)return"";if(typeof r=="string")return r;if(typeof r=="number"||typeof r=="boolean")return String(r);if(Je(r))return r.value;if(r instanceof Ie)return r.name??"";if(r instanceof I)return r.subject.name;if(sn(r))return r.name;let e=r.value;return typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):""}function je(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)&&!(r instanceof Ie)&&!(r instanceof I)&&!(r instanceof D)&&"value"in r?r.value:r}function Wt(r){return r==null?!1:typeof r=="string"||Array.isArray(r)?r.length>0:typeof r=="boolean"?r===!0:!0}function sn(r){return typeof r=="object"&&r!==null&&typeof r.publisher=="string"&&typeof r.package_=="string"&&typeof r.name=="string"}function Lr(r){return typeof r=="object"&&r!==null&&r.kind==="Partition"&&Array.isArray(r.members)}function ge(r,e){if(typeof r=="number"&&Number.isFinite(r))return r;throw new Ce(`${e} requires numeric elements; got ${Cr(r)}`)}function zn(r){if(r instanceof z){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 I){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(sn(r))return{publisher:r.publisher,package_:r.package_,version:"",name:r.name}}var xr=new Set(["stringValue","text","rawContent","key","propertyKey","linkLabel"]);function Yt(r){return typeof r=="string"||typeof r=="number"||typeof r=="boolean"||Je(r)}function Xt(r){return Je(r)?r.value:String(r)}function Cr(r){return r===void 0?"undefined":r===null?"null":Array.isArray(r)?`array(${r.length})`:typeof r}function Or(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 Ur={USD:"$",EUR:"\u20AC",GBP:"\xA3",JPY:"\xA5"},Ir={decimal:0,currency:0,compact:0,percent:2,"basis-points":4};function Fr(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 Tr(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 Pr(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=Fr(s,Ir[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=Ur[i]??`${i} `,l=o.startsWith("-");return`${l?"-":""}${c}${Tr(l?o.slice(1):o)}`}default:return o}}function Qt(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=Jt(r),i=Jt(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 Jt(r){if(r instanceof I){let e=r.subject;return{publisher:e.publisher,package_:e.package_,name:e.name}}if(r instanceof z){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(sn(r))return{publisher:r.publisher,package_:r.package_,name:r.name}}function Wn(r){return r instanceof ae||r instanceof he||r instanceof ke||r instanceof J||r instanceof oe||r instanceof ie}function Vr(r){return r instanceof ae||r instanceof he||r instanceof ke?String(r.object??""):r instanceof J?r.object?.subject?.name??"":r instanceof oe?"[embedded]":r instanceof ie?(r.object??[]).map(n=>{if(n instanceof I)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 Zt(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 I){let e=r.subject;return`r:${e.publisher}/${e.package_}/${e.name}`}if(r instanceof Ie){let e=r.name??"";return`k:${r.namespace??""}/${e}`}return sn(r)?`u:${r.publisher}/${r.package_}/${r.name}`:`o:${JSON.stringify(r)}`}var Ln=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=ze(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 k=p.metadata?.namespace_?.version;return k&&k.major===a.major&&k.minor===a.minor&&k.patch===a.patch})??l[0]:l[0],f=new kt(d,this.repository);i=await this.objectParser.parseKanonaks(f),this.cache.set(o,i)}let c=ze(i,e);if(c)return c;for(let l of i)if(l instanceof z&&l.name===e.name)return l}};var xn=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?rn(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}">${rn(i[0])}</span>`,a+=i[0].length,s=!0;break}}s||(t+=rn(e[a]),a++)}return t}};var Tn={publisher:"kanonak.org",package_:"derivation",name:"look"},Pn={publisher:"kanonak.org",package_:"derivation",name:"tokens"},Le={publisher:"kanonak.org",package_:"core-rdf",name:"Resource"},Xn={publisher:"kanonak.org",package_:"core-rdf",name:"label"},ea={publisher:"kanonak.org",package_:"core-rdf",name:"comment"},Ar={publisher:"kanonak.org",package_:"core-rdf",name:"range"},Mr={publisher:"kanonak.org",package_:"core-rdf",name:"Class"},Nr={publisher:"kanonak.org",package_:"core-owl",name:"Class"},Dr={publisher:"kanonak.org",package_:"look",name:"Hero"},Br={publisher:"kanonak.org",package_:"look",name:"PropertyList"},Hr={publisher:"kanonak.org",package_:"look",name:"PropertyTable"},qr={publisher:"kanonak.org",package_:"look",name:"BadgeRow"},Gr={publisher:"kanonak.org",package_:"look",name:"ChipRow"},zr={publisher:"kanonak.org",package_:"look",name:"ReferenceList"},Wr={publisher:"kanonak.org",package_:"look",name:"ReferencedBy"},Yr={publisher:"kanonak.org",package_:"look",name:"Instances"},na={publisher:"kanonak.org",package_:"look",name:"Markdown"},Xr={publisher:"kanonak.org",package_:"look",name:"NavGroup"},Qr={publisher:"kanonak.org",package_:"look",name:"nav"},Qn={publisher:"kanonak.org",package_:"look",name:"NavLink"},Jr={publisher:"kanonak.org",package_:"look",name:"footer"},Zr={publisher:"kanonak.org",package_:"look",name:"text"},es={publisher:"kanonak.org",package_:"look",name:"links"},ta={publisher:"kanonak.org",package_:"look",name:"target"},ns={publisher:"kanonak.org",package_:"look",name:"ResourceGrid"},ts={publisher:"kanonak.org",package_:"look",name:"Timeline"},as={publisher:"kanonak.org",package_:"look",name:"VersionDiff"},rs={publisher:"kanonak.org",package_:"look",name:"Figure"},ss={publisher:"kanonak.org",package_:"look",name:"Diagram"},os={publisher:"kanonak.org",package_:"look",name:"facets"},is={publisher:"kanonak.org",package_:"look",name:"relation"},cs={publisher:"kanonak.org",package_:"look",name:"encode"},ls={publisher:"kanonak.org",package_:"look",name:"cluster"},us={publisher:"kanonak.org",package_:"look",name:"connector"},ds={publisher:"kanonak.org",package_:"look",name:"channels"},fs={publisher:"kanonak.org",package_:"look",name:"mapPath"},ps={publisher:"kanonak.org",package_:"look",name:"to"},ms={publisher:"kanonak.org",package_:"look",name:"mark"},ks={publisher:"kanonak.org",package_:"look",name:"expand"},gs={publisher:"kanonak.org",package_:"look",name:"edges"},aa={publisher:"kanonak.org",package_:"look",name:"nodeTier"},hs={publisher:"kanonak.org",package_:"look",name:"diagramTier"},bs={publisher:"kanonak.org",package_:"look",name:"nodeNote"},ys={publisher:"kanonak.org",package_:"look",name:"Sequence"},vs={publisher:"kanonak.org",package_:"look",name:"numbered"},$s={publisher:"kanonak.org",package_:"look",name:"EntityRelationship"},Ss={publisher:"kanonak.org",package_:"core-owl",name:"SymmetricProperty"},ws={publisher:"kanonak.org",package_:"core-owl",name:"FunctionalProperty"},_s={publisher:"kanonak.org",package_:"core-kanonak",name:"Package"},js={publisher:"kanonak.org",package_:"look",name:"edgeLabel"},Ks={publisher:"kanonak.org",package_:"look",name:"labelEdges"},Rs={publisher:"kanonak.org",package_:"look",name:"edgeValue"},Es={publisher:"kanonak.org",package_:"look",name:"figureTitle"},Ls={publisher:"kanonak.org",package_:"look",name:"titlePosition"},xs=`(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
- })();`,Ae={chip:56,icon:120,card:240,full:420},Cs=["chip","icon","card","full"],Os={56:"chip",120:"icon",240:"card",420:"full"},de=11,Us={publisher:"kanonak.org",package_:"look",name:"placement"},Is={publisher:"kanonak.org",package_:"look",name:"width"},Fs=4,Ts={publisher:"kanonak.org",package_:"look",name:"StatRow"},Ps={publisher:"kanonak.org",package_:"look",name:"Horizon"},Vs={publisher:"kanonak.org",package_:"look",name:"PackageContents"},Jn={publisher:"kanonak.org",package_:"core-kanonak",name:"Package"},As={publisher:"kanonak.org",package_:"core-kanonak",name:"Publisher"},Ms={publisher:"kanonak.org",package_:"look",name:"FeaturedResource"},Ns={publisher:"kanonak.org",package_:"look",name:"PublisherPackages"},Ds={publisher:"kanonak.org",package_:"look",name:"packages"},Bs={publisher:"kanonak.org",package_:"code-grammars",name:"CodeGrammar"},Hs={publisher:"kanonak.org",package_:"code-grammars",name:"language"},qs={publisher:"kanonak.org",package_:"code-grammars",name:"rule"},Gs={publisher:"kanonak.org",package_:"code-grammars",name:"tokenClass"},zs={publisher:"kanonak.org",package_:"code-grammars",name:"pattern"},Ws={publisher:"kanonak.org",package_:"look",name:"Links"},Ys={publisher:"kanonak.org",package_:"link",name:"url"},Xs={publisher:"kanonak.org",package_:"link",name:"links"};var Qs={publisher:"kanonak.org",package_:"look",name:"Distribution"},Js={publisher:"kanonak.org",package_:"look",name:"alphaPath"},Zs={publisher:"kanonak.org",package_:"look",name:"betaPath"},Zn={publisher:"kanonak.org",package_:"look",name:"SectionHeading"},eo={publisher:"kanonak.org",package_:"look",name:"SectionNav"},ra={publisher:"kanonak.org",package_:"look",name:"heading"},no={publisher:"kanonak.org",package_:"look",name:"note"},to={publisher:"kanonak.org",package_:"look",name:"VersionDelta"},ao={publisher:"kanonak.org",package_:"look",name:"TimePlot"},ro={publisher:"kanonak.org",package_:"look",name:"Details"},so={publisher:"kanonak.org",package_:"look",name:"EmbeddedViews"},oo={publisher:"kanonak.org",package_:"look",name:"ResourceCount"},io={publisher:"kanonak.org",package_:"look",name:"counts"},co={publisher:"kanonak.org",package_:"look",name:"skip"},sa={publisher:"kanonak.org",package_:"derivation",name:"derivations"},lo={publisher:"kanonak.org",package_:"look",name:"laneBy"},uo={publisher:"kanonak.org",package_:"look",name:"stats"},fo={publisher:"kanonak.org",package_:"look",name:"statPath"},po={publisher:"kanonak.org",package_:"look",name:"statLabel"},oa={publisher:"kanonak.org",package_:"look",name:"labelPath"},mo={publisher:"kanonak.org",package_:"look",name:"badgePath"},ia={publisher:"kanonak.org",package_:"look",name:"BarMeter"},ko={publisher:"kanonak.org",package_:"look",name:"cellAs"},go={publisher:"kanonak.org",package_:"look",name:"variants"},ho={publisher:"kanonak.org",package_:"look",name:"when"},bo={publisher:"kanonak.org",package_:"look",name:"property"},ca={publisher:"kanonak.org",package_:"look",name:"equals"},yo={publisher:"kanonak.org",package_:"look",name:"ResourceQuery"},vo={publisher:"kanonak.org",package_:"look",name:"ofClass"},$o={publisher:"kanonak.org",package_:"look",name:"direction"},So={publisher:"kanonak.org",package_:"look",name:"limit"},Cn={publisher:"kanonak.org",package_:"look",name:"orderBy"},la={publisher:"kanonak.org",package_:"look",name:"track"},gn={publisher:"kanonak.org",package_:"look",name:"metricPath"},et={publisher:"kanonak.org",package_:"look",name:"hueBy"},ua={publisher:"kanonak.org",package_:"look",name:"lowerPath"},da={publisher:"kanonak.org",package_:"look",name:"upperPath"},wo={publisher:"kanonak.org",package_:"look",name:"axisMin"},_o={publisher:"kanonak.org",package_:"look",name:"axisMax"},jo={publisher:"kanonak.org",package_:"look",name:"valueLabel"};var fa={publisher:"kanonak.org",package_:"look",name:"semanticSvg"},Ko={publisher:"kanonak.org",package_:"look",name:"tierChip"},Ro={publisher:"kanonak.org",package_:"look",name:"tierIcon"},Eo={publisher:"kanonak.org",package_:"look",name:"tierCard"},Lo={publisher:"kanonak.org",package_:"look",name:"tierFull"},qe={publisher:"kanonak.org",package_:"core-rdf",name:"type"},rt={publisher:"kanonak.org",package_:"core-rdf",name:"subClassOf"},pa=6,xo={publisher:"kanonak.org",package_:"look",name:"bands"},Co={publisher:"kanonak.org",package_:"look",name:"title"},Oo={publisher:"kanonak.org",package_:"look",name:"eyebrow"},Uo={publisher:"kanonak.org",package_:"look",name:"subtitle"},ma={publisher:"kanonak.org",package_:"look",name:"badges"},pe={publisher:"kanonak.org",package_:"look",name:"source"},Io={publisher:"kanonak.org",package_:"look",name:"via"},Fo={publisher:"kanonak.org",package_:"look",name:"size"},To={publisher:"kanonak.org",package_:"look",name:"icon"},Po={publisher:"kanonak.org",package_:"look",name:"avatar"},Vo={publisher:"kanonak.org",package_:"look",name:"contents"},Ao={publisher:"kanonak.org",package_:"look",name:"transitive"},Mo={publisher:"kanonak.org",package_:"look",name:"chips"},ka={publisher:"kanonak.org",package_:"look",name:"entries"},No={publisher:"kanonak.org",package_:"look",name:"urlForm"},An=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 ht.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=Ho(e)?void 0:On(e);return n?{declaration:n,sourceClass:{publisher:le(e),package_:this.uriOf(e).package_,name:e.name}}:this.lookFromTypeRefs(be(e))}lookFromTypeRefs(e){let n=new Set,t=[...e];for(;t.length>0;){let s=t.shift().subject,o=Q(s);if(n.has(o))continue;n.add(o);let i=ce(this.catalog,s);for(let c of i){let l=On(c);if(l)return{declaration:l,sourceClass:{publisher:s.publisher,package_:s.package_,name:s.name}}}for(let c of i)for(let l of In(c))t.push(l)}if(!n.has(Q(Le)))for(let a of ce(this.catalog,Le)){let s=On(a);if(s)return{declaration:s,sourceClass:{...Le}}}}matchingVariants(e){let n=this.findCascadedLook(e);if(!n)return[];let t=this.valueItems(n.declaration,go).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,ho);if(!c)continue;let l=B(c,bo);if(!l)continue;let d=B(c,ca);if(d){this.valueItems(e,l).filter(k=>k instanceof I).some(k=>Q(k.subject)===Q(d))&&o.push({variant:i,declaredBy:s});continue}let f=Z(c,ca);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 Do(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=be(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(Le)?"resource-floor":"class",d=ce(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=le(e);if(o){let i=this.publisherSubject(o);i!==e&&t(i,"publisher")}if(!a.has(Q(Le))){let i=ce(this.catalog,Le);for(let c of i)t(c,"resource-floor")}return n}async renderSvg(e){let n=H(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(([k,h])=>`--kan-${k}: ${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 ct,n=new it(e);this.resolverInstance=new Ln(n,e,new Sn(e))}return this.resolverInstance}async evaluateTier(e,n){if(!e)return"";let t;try{t=Te(e,"semanticSvg-tier",{catalog:this.catalog,depth:0})}catch(o){return this.noteExpressionFailure("look.semanticSvg tier",o)}let a=new kn(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(ba(i.kind,c))}return o.join("")}let s=await a.evaluate(t,n);return ba(t.kind,s)}async evaluateCarrier(e,n){if(!e)return;let t;try{t=Te(e,"look-carrier",{catalog:this.catalog,depth:0})}catch(c){this.noteExpressionFailure("look band path carrier",c);return}let a=new kn(this.expressionResolver(),this.catalog),s=new Map([["input",n]]),o=await a.evaluate(t,s),i=Sa(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 oe&&t.object instanceof D?t.object:void 0}referenceLabel(e){let n=e.subject,t=ce(this.catalog,n);if(t.length===0){let a=ee(this.catalog,n);a&&t.push(a)}for(let a of t){let s=H(this.catalog,a);if(s.label!==a.name)return s.label}return n.name}collectCascadedSvgTiers(e){let n={},t=c=>{let l=Ke(c,fa);if(!(l instanceof oe))return;let d=l.object,f=Un(d,Ko),p=Un(d,Ro),k=Un(d,Eo),h=Un(d,Lo);n.tierChip===void 0&&f!==void 0&&(n.tierChip=f),n.tierIcon===void 0&&p!==void 0&&(n.tierIcon=p),n.tierCard===void 0&&k!==void 0&&(n.tierCard=k),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 ce(this.catalog,l))t(d)}let o=new Set,i=be(e);for(;i.length>0;){let c=i.shift(),l=Q(c.subject);if(o.has(l))continue;o.add(l);let d=ce(this.catalog,c.subject);for(let f of d){t(f);for(let p of In(f))i.push(p)}}if(!o.has(Q(Le)))for(let c of ce(this.catalog,Le))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`${qo(n)}
81
- ${a}
82
- ${s}`}explainStylesheet(e){let n=this.explainCascadedTokens(e),t=this.explainBaseStylesheet(le(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 z)||f.name!=="base-stylesheet")continue;let p=f.namespace||"";if(p.startsWith(`${e}/look-styles@`)){a.push(p);let k=t(f);k&&(!o||hn(k,o)>0)&&(s=f,o=k)}else if(p.startsWith("kanonak.org/look-styles@")){a.push(p);let k=t(f);k&&(!c||hn(k,c)>0)&&(i=f,c=k)}}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=nt(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=le(e),s=this.collectSectionHeadings(t);this.diagramScriptEmitted=!1,this.diagramArrowSeq=0;let o=[];for(let i of t){let c=on(i);c&&X(c,Zn)&&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,Us);if(t!=="floatLeft"&&t!=="floatRight")return n;let a=t==="floatLeft"?"left":"right",s=Z(e,Is),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=on(t);if(!a||!X(a,Zn))continue;let s=Z(t,ra);s&&n.push({slug:ya(s),label:s})}return n}publisherSubject(e){for(let t of this.catalog){if(!(t instanceof z)||le(t)!==e||!be(t).some(s=>X(s.subject,As)))continue;return ce(this.catalog,{publisher:e,package_:this.uriOf(t).package_,name:t.name})[0]??t}let n=new z;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===Le.publisher&&a.package_===Le.package_&&a.name===Le.name||a.publisher===Jn.publisher&&a.package_===Jn.package_&&a.name===Jn.name)(n.sourceClass):!1}renderPackageVersionList(e,n,t){let a=le(t),s=this.renderNavGroup(t,a),o=this.renderBreadcrumb(t,a,{bareOverview:!0}),i=n.map(l=>`<a class="kan-resource-card" href="${g(this.packageHref(a,e,l))}/"><h3 class="kan-resource-card-title">${g(l)}</h3></a>`).join(`
84
- `),c=`<header class="kan-hero">
85
- <span class="kan-hero-eyebrow">PACKAGE</span>
86
- <h1 class="kan-hero-title">${g(e)}</h1>
87
- </header>
88
- <section class="kan-resource-grid">
89
- ${i}
90
- </section>`;return`<!doctype html>
91
- <html lang="en">
92
- <head>
93
- <meta charset="utf-8">
94
- <meta name="viewport" content="width=device-width, initial-scale=1">
95
- <title>${g(e)}</title>
96
- <link rel="stylesheet" href="${g(t.name)}.css">
97
- </head>
98
- <body>
99
- ${s}
100
- ${o}
101
- <main class="kan-main">
102
- ${c}
103
- </main>
104
- </body>
105
- </html>
106
- `}async renderDocument(e,n){let t=await this.renderHtml(e),a=H(this.catalog,e).label,s=n?.rootIndex?"index.css":`${e.name}.css`,o=!n?.rootIndex&&this.hasSvgDerivation(e)?`<figure class="kan-figure"><img src="${g(e.name)}.svg" alt=""></figure>
107
- `:"",i=le(e),c=this.renderNavGroup(e,i),l=this.renderSiteFooter(i),d=n?.rootIndex?"":this.renderBreadcrumb(e,i,n);return`<!doctype html>
108
- <html lang="en">
109
- <head>
110
- <meta charset="utf-8">
111
- <meta name="viewport" content="width=device-width, initial-scale=1">
112
- <title>${g(a)}</title>
113
- <link rel="stylesheet" href="${g(s)}">
114
- </head>
115
- <body>
116
- ${c}
117
- ${d}
118
- <main class="kan-main">
119
- ${o}${t}
120
- </main>
121
- ${l}
122
- </body>
123
- </html>
124
- `}hasSvgDerivation(e){let n=new Set,t=be(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,sa))if(i instanceof D)for(let c of i.statement){if(!(c instanceof J)||!Me(c,"kanonak.org","derivation","format")||!(c.object instanceof I))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=[[eo,(e,n)=>e.renderSectionNav(n.sections)],[Dr,(e,n)=>e.renderHero(n.band,n.instance,n.contextPublisher)],[Br,(e,n)=>e.renderPropertyList(n.band,n.instance,n.contextPublisher)],[Hr,(e,n)=>e.renderPropertyTable(n.band,n.instance,n.contextPublisher,n.pathPrefix)],[qr,(e,n)=>e.renderBadgeRow(n.band,n.instance,n.contextPublisher)],[Gr,(e,n)=>e.renderChipRow(n.band,n.instance,n.contextPublisher)],[zr,(e,n)=>e.renderReferenceList(n.band,n.instance,n.contextPublisher)],[Wr,(e,n)=>e.renderReferencedBy(n.band,n.instance,n.contextPublisher)],[Yr,(e,n)=>e.renderInstances(n.band,n.instance,n.contextPublisher)],[na,(e,n)=>e.renderMarkdown(n.band,n.instance,n.contextPublisher)],[Ws,(e,n)=>e.renderLinks(n.band,n.instance)],[Xr,(e,n)=>e.renderNavGroup(n.instance,n.contextPublisher)],[ns,(e,n)=>e.renderResourceGrid(n.band,n.contextPublisher,n.instance)],[ts,(e,n)=>e.renderTimeline(n.band,n.contextPublisher)],[as,(e,n)=>e.renderVersionDiff(n.band,n.contextPublisher)],[rs,(e,n)=>e.renderFigure(n.band,n.instance,n.contextPublisher)],[ss,(e,n)=>e.renderDiagram(n.band,n.instance,n.contextPublisher)],[ys,(e,n)=>e.renderSequence(n.band,n.instance,n.contextPublisher)],[$s,(e,n)=>e.renderEntityRelationship(n.band,n.instance,n.contextPublisher)],[Ts,(e,n)=>e.renderStatRow(n.band,n.instance)],[Ps,(e,n)=>e.renderHorizon(n.band,n.instance,n.contextPublisher)],[Vs,(e,n)=>e.renderPackageContents(n.instance,n.contextPublisher)],[Ms,(e,n)=>e.renderFeaturedResource(n.band,n.contextPublisher)],[Ns,(e,n)=>e.renderPublisherPackages(n.band,n.contextPublisher)],[Qs,(e,n)=>e.renderDistribution(n.band,n.instance)],[Zn,(e,n)=>e.renderSectionHeading(n.band)],[to,(e,n)=>e.renderVersionDelta(n.band,n.instance)],[ao,(e,n)=>e.renderTimePlot(n.band,n.instance,n.contextPublisher)],[ro,(e,n)=>e.renderDetails(n.band,n.instance,n.contextPublisher)],[so,(e,n)=>e.renderEmbeddedViews(n.band,n.instance,n.contextPublisher,n.pathPrefix)],[oo,(e,n)=>e.renderResourceCount(n.band,n.contextPublisher)],[ia,(e,n)=>e.renderBarMeter(n.band,n.instance)]];static bandDispatchUris(){return r.BAND_DISPATCH.map(([e])=>e)}uriOf(e){let n=_e(e);return n?{publisher:n.publisher,package_:n.package_,name:n.name,...n.version?{version:n.version}:{}}:{publisher:le(e),package_:"",name:e.name}}async renderBand(e,n,t,a=[],s=""){let o=on(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 k of p){let h=ee(this.catalog,{publisher:k.subject.publisher,package_:k.subject.package_,name:k.subject.name,...k.subject.version?{version:k.subject.version}:{}});if(!h)continue;let b=k.subject.name,m=c.get(b);m||(m={key:b,label:H(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:le(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,gn),s=B(e,la);if(!s||!a)return"<!-- LookRenderer.VersionDiff: needs look.track + look.metricPath -->";let o=B(e,Cn),i=this.readEmbeddedCarrier(e,et),c=this.findInstancesOfClass(t,this.readTransitive(e));if(c.length===0)return"<!-- LookRenderer.VersionDiff: no instances -->";let l=k=>o?this.readPropertyValueText(k,o)??"":"",d=c.slice().sort((k,h)=>l(k).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((k,h)=>{let b=k.hue!==void 0?k.hue:Math.round(h*360/f.length),m=k.points.filter(T=>T!==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 T=E>0?"up":"down",x=E>0?"\u25B2":"\u25BC";K=`<span class="kan-vdiff-delta ${T}">${E>0?"+":""}${E.toFixed(2)} ${x}</span>`}else K='<span class="kan-vdiff-delta flat">\u2014</span>';let O=k.lastSubject&&this.isLinkable(le(k.lastSubject),n)?`<a href="${g(this.hrefForSubject(k.lastSubject,n))}">${g(k.label)}</a>`:g(k.label);return`<div class="kan-vdiff-row" style="--kan-vdiff-hue:${b}"><span class="kan-vdiff-label">${O}</span><span class="kan-vdiff-start">${y.toFixed(2)}</span>`+this.sparkline(k.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,k=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=k(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=H(this.catalog,a).label,c=Z(e,Fo);return`<figure class="kan-figure${c==="small"||c==="medium"||c==="large"?` kan-figure-${c}`:""}"><img class="kan-figure-img" src="${g(o)}" alt="${g(i)}" loading="lazy"/></figure>`}diagramArrowSeq=0;diagramScriptEmitted=!1;async renderDiagram(e,n,t,a=0,s=new Set){let o=this.valueItems(e,os).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,is);if(!b){i.push("<!-- LookRenderer.Diagram: facet has no resolvable look.relation -->");continue}let m=B(h,cs),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,ms),K=E instanceof oe&&E.object instanceof D?E.object:void 0,O=Z(h,aa),T=O&&Ae[O]!==void 0?Ae[O]:void 0,x=T??this.classTierSize(y),w=Os[x??Ae.icon]??"icon",G=this.readEmbeddedCarrier(h,bs),P=B(h,ks),V=P?ee(this.catalog,P):void 0;if(V){i.push(await this.renderDiagramExpand(y,V,t,a,s,G,T));continue}if(m&&X(m,us)){let L=B(h,gs),j=this.facetEdgeLabel(h,L??b),N=this.readEmbeddedCarrier(h,Rs);i.push(await this.embedTiers(w,R=>L?this.renderDiagramDag(y,L,v,t,R,j,N):this.renderDiagramConnector(n,y,v,t,R,j,N)));continue}if(m&&!X(m,ls)){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,x)}</div></div>`:await this.embedTiers(w,L=>this.renderDiagramCluster(y,v,void 0,t,L)))}let c=Z(e,Es),l=Z(e,Ls),d=h=>`<div class="kan-diagram-title" style="font-weight:600;font-size:0.95rem;color:var(--kan-text);${h}">${g(c)}</div>`,f=c&&l!=="bottom"?d("margin:0 0 .5rem"):"",p=c&&l==="bottom"?d("margin:.5rem 0 0"):"",k="";return a===0&&!this.diagramScriptEmitted&&(this.diagramScriptEmitted=!0,k=`<script>${xs}</script>`),`<section class="kan-diagram">${f}${i.join("")}${p}${k}</section>`}async embedTiers(e,n){let t=[];for(let a of Cs){let s=await n(Ae[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),k=a<Fs&&!s.has(d)?await this.renderDiagram(n,l,t,a+1,new Set([...s,d])):"",h=k?`<div style="margin-left:30px;border-left:2px solid var(--kan-border);padding-left:14px;margin-top:6px">${k}</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=H(this.catalog,e).label,c=a?await this.evaluateCarrier(a,e):void 0,l=c!==void 0?`<span class="kan-diagram-node-note" style="display:block;font-size:0.8em;color:var(--kan-text-dim)">${g(c)}</span>`:"";return`<a href="${g(s)}" style="display:inline-flex;align-items:center;gap:10px;text-decoration:none"><img src="${g(o)}" width="${t}" height="${t}" alt="" loading="lazy"/><span><span class="kan-diagram-node-label">${g(i)}</span>${l}</span></a>`}classTierSize(e){let n;for(let t of e)for(let a of be(t)){let s=ee(this.catalog,a.subject);if(!s)continue;let o=Z(s,hs),i=o?Ae[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,ds).filter(s=>s instanceof D),a=[];for(let s of t){let o=this.readEmbeddedCarrier(s,fs),i=Z(s,ps);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,k=c.map(h=>Number.isFinite(h)&&p>0?(h-d)/p:.5);a.push({to:i,norm:k})}return a}facetEdgeLabel(e,n){let t=Z(e,js);if(t)return t;if(Bo(e,Ks)&&n){let s=ee(this.catalog,n);if(s)return H(this.catalog,s).label}}async edgeText(e,n,t){let a=t&&n?await this.evaluateCarrier(t,n):void 0,s=[e,a].filter(o=>!!o);return s.length?s.join(" "):void 0}edgeLabelEl(e,n,t){return`<text x="${e.toFixed(1)}" y="${n.toFixed(1)}" text-anchor="middle" class="kan-diagram-edge-label" style="font-size:11px;paint-order:stroke;stroke:var(--kan-bg);stroke-width:3px;fill:var(--kan-text-dim)">${g(t)}</text>`}async renderDiagramCluster(e,n,t,a,s){let o=s??132,i=18,c=18,l=n.find(b=>b.to==="opacity");if(t){let b=[];for(let m=0;m<e.length;m++){let y=e[m],v=await this.renderBand(t,y,a),E=this.hrefForSubject(y,a),K=H(this.catalog,y).label,O=l?`opacity:${(.4+l.norm[m]*.6).toFixed(2)};`:"";b.push(`<a class="kan-diagram-mark" href="${g(E)}" style="display:block;text-decoration:none;${O}">${v}<span class="kan-diagram-mark-label">${g(K)}</span></a>`)}return`<figure class="kan-diagram-figure"><div class="kan-diagram-marks" style="display:flex;flex-wrap:wrap;gap:18px;align-items:flex-start">${b.join("")}</div></figure>`}let d=Math.min(e.length,4),f=Math.ceil(e.length/d),p=c*2+d*o+(d-1)*i,k=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),O=l?.4+l.norm[m]*.6:1;return this.diagramTile(b,E,K,o,a,O)}).join("");return`<figure class="kan-diagram-figure"><svg class="kan-diagram-svg" viewBox="0 0 ${p} ${k}" 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"),k=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,O=`kan-arrow-${this.diagramArrowSeq++}`,T=[],x=[],w=[];for(let P=0;P<n.length;P++){let V=n[P],L=f+P*(c+l),j=v+c,N=E+c/2,R=K-de,U=L+c/2,F=(j+K)/2,$=p?1.5+p.norm[P]*5.5:2,A=k?.4+k.norm[P]*.6:1,q=k?` stroke-opacity="${A.toFixed(2)}"`:"";T.push(`<path d="M${j.toFixed(1)},${N.toFixed(1)} C${F.toFixed(1)},${N.toFixed(1)} ${F.toFixed(1)},${U.toFixed(1)} ${R.toFixed(1)},${U.toFixed(1)}" class="kan-diagram-edge" fill="none" stroke="var(--kan-border)" stroke-width="${$.toFixed(1)}"${q} marker-end="url(#${O})"/>`);let C=await this.edgeText(o,V,i);C&&x.push(this.edgeLabelEl((j+K)/2,(N+U)/2-5,C)),w.push(this.diagramTile(V,K,L,c,a,k?A:1))}let G=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(O,"var(--kan-border)")}${T.join("")}${x.join("")}${G}${w.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(($,A)=>[$.name,A])),k=new Set(e.map($=>$.name)),h=new Map(e.map($=>[$.name,[]])),b=new Map(e.map($=>[$.name,[]]));for(let $ of e)for(let A of this.readPropertyValueReferences($,n)){let q=A.subject.name;q!==$.name&&k.has(q)&&(h.get($.name).push(q),b.get(q).push($.name))}let m=new Map,y=new Set,v=$=>{let A=m.get($);if(A!==void 0)return A;if(y.has($))return 0;y.add($);let q=0;for(let C of b.get($)??[])q=Math.max(q,v(C)+1);return y.delete($),m.set($,q),q};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()),O=Array.from({length:K+1},()=>[]);for(let $ of e)O[m.get($.name)].push($);let T=Math.max(1,...O.map($=>$.length)),x=!1;for(let[$,A]of h)for(let q of A)m.get(q)<=m.get($)&&(x=!0);let w=x?84:0,G=T*c+(T-1)*d,P=f*2+(K+1)*c+K*l,V=f*2+w+G,L=new Map;O.forEach(($,A)=>{let q=$.length*c+($.length-1)*d,C=f+w+(G-q)/2;$.forEach((M,fe)=>L.set(M.name,{x:f+A*(c+l),y:C+fe*(c+d)}))});let j=t.find($=>$.to==="thickness"),N=`kan-arrow-${this.diagramArrowSeq++}`,R=[],U=[];for(let[$,A]of h){let q=L.get($);for(let C of A){let M=L.get(C),fe=M.x>=q.x,se=j?1.5+j.norm[p.get($)]*4.5:2,ne,ue,te;if(fe){let me=q.x+c,Ge=q.y+c/2,Ue=M.x-de,cn=M.y+c/2,Ze=(me+Ue)/2;ne=`M${me.toFixed(1)},${Ge.toFixed(1)} C${Ze.toFixed(1)},${Ge.toFixed(1)} ${Ze.toFixed(1)},${cn.toFixed(1)} ${Ue.toFixed(1)},${cn.toFixed(1)}`,ue=(me+Ue)/2,te=(Ge+cn)/2-5}else{let me=q.x+c/2,Ge=q.y,Ue=M.x+c/2,cn=M.y-de,Ze=f+w*.2;ne=`M${me.toFixed(1)},${Ge.toFixed(1)} C${me.toFixed(1)},${Ze.toFixed(1)} ${Ue.toFixed(1)},${Ze.toFixed(1)} ${Ue.toFixed(1)},${cn.toFixed(1)}`,ue=(me+Ue)/2,te=Ze+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 ye=await this.edgeText(o,e[p.get($)],i);ye&&U.push(this.edgeLabelEl(ue,te,ye))}}let F=e.map($=>{let A=L.get($.name);return this.diagramTile($,A.x,A.y,c,a)}).join("");return`<figure class="kan-diagram-figure"><svg class="kan-diagram-svg" viewBox="0 0 ${P.toFixed(0)} ${V.toFixed(0)}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">${this.arrowMarkerDef(N,"var(--kan-accent)")}${R.join("")}${U.join("")}${F}</svg></figure>`}static SEQ_COL_GAP=70;static SEQ_ROW=46;static SEQ_PAD=20;subjectFor(e){return ce(this.catalog,e)[0]}async renderSequence(e,n,t){let a=qn(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 w of a.strayPropertyRefs)s.push(`<!-- LookRenderer.Sequence: prose references property ${w.publisher}/${w.package_}/${w.name}, which is not a declared connector; ignored -->`);for(let w of a.gaps)s.push(`<!-- LookRenderer.Sequence: prose orders ${w.prev.name} then ${w.next.name}, but no declared connector holds between them in the graph \u2014 no message drawn. -->`);let{messages:o,lifelines:i}=a,c=Ve;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,aa);l!==void 0&&Ae[l]===void 0&&s.push(`<!-- LookRenderer.Sequence: look.nodeTier '${g(l)}' is not a tier (${Object.keys(Ae).join(", ")}); using the class/default size -->`);let d=(l!==void 0?Ae[l]:void 0)??this.classTierSize(i)??Ae.icon,f=d+r.SEQ_COL_GAP,p=r.SEQ_ROW,k=r.SEQ_PAD,h=Z(e,vs)==="true",b=new Map;i.forEach((w,G)=>b.set(c(w),k+G*f+d/2));let m=k+d,y=m+p,v=y+o.length*p+k,E=k*2+(i.length-1)*f+d,K=`kan-arrow-${this.diagramArrowSeq++}`,O=`kan-arrow-open-${this.diagramArrowSeq++}`,x=[this.arrowMarkerDef(K,"var(--kan-text-dim)")+`<defs><marker id="${O}" 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 w of i){let G=b.get(c(w));x.push(`<line class="kan-seq-lifeline" x1="${G}" y1="${m}" x2="${G}" y2="${v-k}" stroke="var(--kan-border)" stroke-width="1.5" stroke-dasharray="5 5"/>`),x.push(this.diagramTile(w,G-d/2,k,d,t))}return o.forEach((w,G)=>{let P=y+G*p,V=b.get(c(w.from)),L=b.get(c(w.to)),j=this.subjectFor(w.relation),N=(h?`${G+1}. `:"")+(j?H(this.catalog,j).label:w.relation.name),R=w.style==="dotted"?' stroke-dasharray="4 4"':"",U=w.style==="thick"?3:1.5,F=w.undirected?"":` marker-end="url(#${w.style==="open"?O:K})"`,$=`kan-seq-message kan-seq-message-${w.style}${w.undirected?" kan-seq-message-undirected":""}`;if(V===L){let M=p*.55,fe=V+(w.undirected?0:de);x.push(`<path class="${$}" d="M${V},${P-M/2} H${V+34} V${P+M/2} H${fe}" fill="none" stroke="var(--kan-text-dim)" stroke-width="${U}"${R}${F}/>`),x.push(`<text class="kan-seq-message-label" x="${V+34+6}" y="${P+4}" font-size="12" fill="var(--kan-text)">${g(N)}</text>`);return}let A=L>V?1:-1,q=w.undirected?L:L-A*de;x.push(`<line class="${$}" x1="${V}" y1="${P}" x2="${q}" y2="${P}" stroke="var(--kan-text-dim)" stroke-width="${U}"${R}${F}/>`),x.push(`<text class="kan-seq-message-label" x="${((V+L)/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">${g(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">${x.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=>en.isClassType(t);if(_(e,_s))return{classes:this.catalog.filter(a=>a instanceof z&&a.namespace===e.namespace&&n(a))};if(n(e)){let t=_e(e);if(!t)return{classes:[],reason:"the page class has no canonical URI"};let a=pn(this.catalog),s=new Map([[W(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(W(o.range.uri))&&s.set(W(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=L=>`${L.namespace}/${L.name}`,c=new Map;for(let L of a){let j=_e(L);j&&c.set(W(j),L)}let l=a.map(L=>{let j=_e(L),N=j?Rn(this.catalog,j,!1,o):[];return{subject:L,label:H(this.catalog,L).label,attrs:N.filter(R=>R.kind==="datatype"),rels:N.filter(R=>R.kind==="object"&&R.range.kind==="class"&&c.has(W(R.range.uri))),supers:we(L,rt).filter(R=>c.has(W(R)))}}),d=r.ER_BOX_W,f=r.ER_HEAD_H,p=r.ER_ROW_H,k=r.ER_GAP,h=r.ER_PAD,b=Math.max(1,Math.ceil(Math.sqrt(l.length))),m=L=>f+Math.max(1,L.attrs.length)*p+8,y=[];l.forEach((L,j)=>{let N=Math.floor(j/b);y[N]=Math.max(y[N]??0,m(L))});let v=[],E=h;y.forEach((L,j)=>{v[j]=E,E+=L+k});let K=new Map;l.forEach((L,j)=>{let N=Math.floor(j/b),R=j%b,U=h+R*(d+k),F=v[N],$=m(L);K.set(i(L.subject),{x:U,y:F,w:d,h:$,cx:U+d/2,cy:F+$/2})});let O=h*2+b*d+(b-1)*k,T=E-k+h,x=[],w=[],G=[],P=`kan-er-tri-${this.diagramArrowSeq++}`,V=`<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 L of l){let j=K.get(i(L.subject));for(let N of L.rels){let R=c.get(W(N.range.uri)),U=K.get(i(R)),F=i(R)===i(L.subject),$=this.subjectFor(N.uri),A=!!$&&fn(this.catalog,$,Ss),q=!!$&&fn(this.catalog,$,ws),C=N.minCount??0,M=N.maxCount??(q?1:void 0),fe=$?H(this.catalog,$).label:N.localName;if(F){let te=j.x+j.w,Re=j.y+12,ye=j.y+j.h-12;x.push(`<path class="kan-er-relationship" d="M${te},${Re} h28 V${ye} h-28" fill="none" stroke="var(--kan-text-dim)" stroke-width="1.5"/>`),A||x.push(this.erCardinalityGlyph(te,ye,180,C,M)),w.push(`<text class="kan-er-relationship-label" x="${te+32}" y="${j.cy+4}" font-size="11" fill="var(--kan-text)">${g(fe)}</text>`);continue}let se=this.erBorderPoint(j.cx,j.cy,j.w,j.h,U.cx,U.cy),ne=this.erBorderPoint(U.cx,U.cy,U.w,U.h,j.cx,j.cy);x.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 ue=Math.atan2(ne.y-se.y,ne.x-se.x)*180/Math.PI;A||x.push(this.erCardinalityGlyph(ne.x,ne.y,ue,C,M)),w.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">${g(fe)}</text>`)}for(let N of L.supers){let R=c.get(W(N)),U=K.get(i(R)),F=this.erBorderPoint(j.cx,j.cy,j.w,j.h,U.cx,U.cy),$=this.erBorderPoint(U.cx,U.cy,U.w,U.h,j.cx,j.cy);x.push(`<line class="kan-er-inherits" x1="${F.x.toFixed(1)}" y1="${F.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 L of l){let j=K.get(i(L.subject)),N=this.hrefForSubject(L.subject,t),R=L.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>`:L.attrs.map((U,F)=>{let $=this.subjectFor(U.uri),A=$?H(this.catalog,$).label:U.localName,q=U.required||(U.minCount??0)>=1?" *":"";return`<text class="kan-er-attribute" x="${j.x+10}" y="${j.y+f+14+F*p}" font-size="11" fill="var(--kan-text)">${g(A)}${q}<tspan fill="var(--kan-text-dim)"> : ${g(U.range.uri.name)}</tspan></text>`}).join("");G.push(`<a href="${g(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)">${g(L.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 ${O} ${T}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">${V}${x.join("")}${G.join("")}${w.join("")}</svg></figure>`}diagramTile(e,n,t,a,s,o=1){let i=this.hrefForSubject(e,s),c=this.svgUrlForSubject(e,s),l=H(this.catalog,e).label,d=o<1?` opacity="${o.toFixed(2)}"`:"";return`<a href="${g(i)}"><image href="${g(c)}" x="${n}" y="${t}" width="${a}" height="${a}"${d}><title>${g(l)}</title></image></a>`}async renderStatRow(e,n){let t=this.valueItems(e,uo).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,fo);if(!o)continue;let i=await this.evaluateCarrier(o,n);if(i===void 0)continue;let c=Z(s,po)??"";a.push('<div class="kan-stat">'+(c?`<span class="kan-stat-label">${g(c)}</span>`:"")+`<span class="kan-stat-val">${g(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 g(e);let t=Math.max(0,Math.min(1,n))*100;return`<span class="kan-bar-meter" role="img" aria-label="${g(e)}"><span class="kan-bar-fill" style="width:${t.toFixed(1)}%"></span></span><span class="kan-bar-value">${g(e)}</span>`}async renderBarMeter(e,n){let t=this.readEmbeddedCarrier(e,gn);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,io).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=H(this.catalog,c).label,d=this.findInstancesOfClass(i,a).length,f=this.hrefForSubject(c,n);s.push(`<a class="kan-count" href="${g(f)}"><span class="kan-count-val">${d}</span><span class="kan-count-label">${g(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=on(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 k=p.predicate?.subject;if(!k||X(k,qe))continue;let h=this.readLabelForUri({publisher:k.publisher,package_:k.package_,name:k.name})??k.name;if(p instanceof ae||p instanceof he||p instanceof ke)o.push(`<div class="kan-cond-field"><span class="kan-cond-key">${g(h)}</span><span class="kan-cond-v">${g(String(p.object))}</span></div>`);else if(p instanceof J&&p.object instanceof I){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">${g(h)}</span><span class="kan-cond-v">${g(m)}</span></div>`)}else if(p instanceof oe)i.push(this.renderConditionNode(p.object,n,t+1));else if(p instanceof ie)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">${g(s)}</span>`:`<div class="kan-cond-type">${g(s)}</div>`;return`<div class="kan-cond ${d?"kan-cond-branch":"kan-cond-leaf"}">${f}${c}${l}</div>`}renderSectionHeading(e){let n=e,t=Z(n,ra);if(!t)return"<!-- LookRenderer.SectionHeading: no look.heading -->";let a=Z(n,no);return`<div class="kan-section" id="${ya(t)}"><h2 class="kan-section-title">${g(t)}</h2>`+(a?`<p class="kan-section-note">${g(a)}</p>`:"")+"</div>"}renderSectionNav(e){return e.length===0?"<!-- LookRenderer.SectionNav: no section headings in this view -->":`<nav class="kan-section-nav" aria-label="On this page">${e.map(t=>`<a class="kan-section-nav-link" href="#${g(t.slug)}">${g(t.label)}</a>`).join("")}</nav>`}async renderVersionDelta(e,n){let t=this.readEmbeddedCarrier(e,gn);if(!t)return"<!-- LookRenderer.VersionDelta: no look.metricPath -->";let a=async P=>{let V=await this.evaluateCarrierNum(t,P);return Number.isFinite(V)?V: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,V)=>P.major-V.major||P.minor-V.minor||P.patch-V.patch,c={publisher:le(n),package_:this.uriOf(n).package_,name:n.name},l=o(n),d,f;for(let P of ce(this.catalog,c)){let V=o(P);i(V,l)<0&&(!f||i(V,f)>0)&&(d=P,f=V)}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 k=s-p,h=Math.abs(k)<.005?"flat":k>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,O=30,T=P=>K+Math.min(1,Math.max(0,P))*(v-2*K),x=T(p),w=T(s),G=`<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="${O}" x2="${v-K}" y2="${O}" class="kan-delta-base"/><line x1="${x.toFixed(1)}" y1="${O}" x2="${w.toFixed(1)}" y2="${O}" stroke="${m}" stroke-width="3"/><circle cx="${x.toFixed(1)}" cy="${O}" r="4" class="kan-delta-prev"/><circle cx="${w.toFixed(1)}" cy="${O}" r="5.5" fill="${m}"/><text x="${x.toFixed(1)}" y="${O-9}" text-anchor="middle" class="kan-delta-tick kan-delta-tick-prev">${p.toFixed(2)}</text><text x="${w.toFixed(1)}" y="${O+17}" text-anchor="middle" class="kan-delta-tick">${s.toFixed(2)}</text></svg>`;return`<div class="kan-delta"><div class="kan-delta-head"><span class="kan-delta-vs">vs ${g(y)}</span><span class="kan-delta-badge ${h}">${k>0?"+":""}${k.toFixed(2)} ${b}</span></div>`+G+"</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,lo),i=this.readEmbeddedCarrier(e,oa),c=[];for(let R of this.readPropertyValueReferences(n,a)){let U=ee(this.catalog,{publisher:R.subject.publisher,package_:R.subject.package_,name:R.subject.name,...R.subject.version?{version:R.subject.version}:{}});if(!U)continue;let F=this.readPropertyValueText(U,s)??"",$=Date.parse(F);if(!Number.isFinite($))continue;let A=o?await this.evaluateCarrier(o,U)??"":"",q=(i?await this.evaluateCarrier(i,U):void 0)??H(this.catalog,U).label;c.push({t:$,dateStr:F,lane:A,label:q,href:this.hrefForSubject(U,t),linkable:this.isLinkable(le(U),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),k=720,h=p?96:16,b=18,m=12,y=24,v=36,E=m+l.length*v+y,K=h,O=k-b,T=O-K,x=R=>K+(R-d)/(f-d)*T,w=R=>m+R*v+v/2,G=R=>Math.round(R*360/Math.max(1,l.length)),P=[];l.forEach((R,U)=>{let F=w(U);P.push(`<line x1="${K}" y1="${F.toFixed(1)}" x2="${O}" y2="${F.toFixed(1)}" class="kan-plot-guide"/>`),R&&P.push(`<text x="${(h-8).toFixed(1)}" y="${(F+4).toFixed(1)}" text-anchor="end" class="kan-plot-lane">${Oe(R)}</text>`)});let V={},L=[];for(let R of c){let U=l.indexOf(R.lane),$=((V[R.lane]=(V[R.lane]??0)+1)%3-1)*7,A=x(R.t),q=w(U)+$,C=`${Fn(R.dateStr)} \xB7 ${R.label}`,M=`<circle cx="${A.toFixed(1)}" cy="${q.toFixed(1)}" r="5" fill="hsl(${G(U)},65%,60%)" class="kan-plot-pt"><title>${Oe(C)}</title></circle>`;L.push(R.linkable?`<a href="${g(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(Fn(new Date(d).toISOString()))}</text><text x="${O}" y="${(E-6).toFixed(1)}" text-anchor="end" class="kan-plot-axis">${Oe(Fn(new Date(f).toISOString()))}</text>`;return`<section class="kan-plot">${`<svg class="kan-plot-svg" viewBox="0 0 ${k} ${E}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">`+P.join("")+L.join("")+j+"</svg>"}</section>`}renderDetails(e,n,t){let a=tt(e,co),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 ga(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">${g(o)}</dt><dd class="kan-details-val">${i}</dd>`)}return a.join("")}detailValue(e,n,t,a){let s=Fe(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"?$a(i):typeof i=="number"||typeof i=="boolean"?g(String(i)):i instanceof I?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 I?this.detailReferenceLink(i,t):i instanceof D?this.detailEmbedded(i,t,a):g(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">${g(t)}</span>`;let a=this.urlForReference(e,void 0,n);return`<img class="kan-md-chip" src="${g(`${a}.svg`)}" alt="" loading="lazy"><a class="kan-link" href="${g(a)}">${g(t)}</a>`}detailEmbedded(e,n,t){let a=on(e),s=a?this.readLabelForUri({publisher:a.publisher,package_:a.package_,name:a.name})??a.name:"",o=this.detailRows(e,n,t);return'<div class="kan-details-embed">'+(s?`<span class="kan-details-type">${g(s)}</span>`:"")+(o?`<dl class="kan-details">${o}</dl>`:"")+"</div>"}rangeTypeRefs(e){let n=ee(this.catalog,e);if(!n)return[];let t=Ke(n,Ar);return t instanceof J&&t.object instanceof I?[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,Vo),c=i instanceof ke?i.object===!0:i instanceof ae&&i.object==="true",l=[],d=[];for(let p of o){let k=p.node,h=k,b=p.address.slice(1),m=k.name?b:"";if(c&&m){let x=H(this.catalog,h).label||k.name||m;l.push(`<a class="kan-section-nav-link" href="#${g(m)}">${g(x)}</a>`)}let y=be(h),v=y.length>0?y:this.rangeTypeRefs(s),E=On(h)?this.findCascadedLook(h):this.lookFromTypeRefs(v),K="";if(E){let x=[];for(let w of nt(E.declaration))x.push(await this.renderBand(w,h,t,[],b));K=x.join(`
128
- `)}else{let x=this.detailRows(k,t,[]);K=x?`<dl class="kan-details">${x}</dl>`:""}let O=m?` id="${g(m)}"`:"",T=m?this.anchorLink(m):"";d.push(`<section class="kan-embedded-view"${O}>${T}${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="#${g(e)}" title="${g(e)}" aria-label="Link to this resource">#</a>`}isMetaPredicate(e){return X(e,qe)||X(e,Xn)||X(e,ea)||X(e,Tn)||X(e,Pn)||X(e,sa)||X(e,fa)||X(e,Xs)}renderPackageContents(e,n){let t=e.namespace||"";if(!t)return"";let a=this.catalog.filter(o=>o instanceof z&&o.namespace===t&&o.name!==e.name);return a.length===0?`<!-- LookRenderer.PackageContents: no members in ${t} -->`:(a.sort((o,i)=>{let c=H(this.catalog,o).label,l=H(this.catalog,i).label;return c.localeCompare(l)}),`<section class="kan-pkg-grid">${a.map(o=>{let i=H(this.catalog,o),c=i.label,l=i.summary,d=l?at(l,160):"",f=this.hrefForSubject(o,n),p=this.svgUrlForSubject(o,n);return`<a class="kan-pkg-card" href="${g(f)}"><img class="kan-pkg-card-svg" src="${g(p)}" alt="" loading="lazy"/><span class="kan-pkg-card-body"><span class="kan-pkg-card-title">${g(c)}</span>`+(d?`<span class="kan-pkg-card-comment">${g(d)}</span>`:"")+"</span></a>"}).join("")}</section>`)}renderReferencedBy(e,n,t){let a=B(e,Io),s={publisher:le(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,k)=>p.major-k.major||p.minor-k.minor||p.patch-k.patch,l=new Map;for(let p of this.catalog){if(!(p instanceof z))continue;let k=Q({publisher:le(p),package_:this.uriOf(p).package_,name:p.name});if(k!==o)for(let h of p.statement){let b=h.predicate?.subject;if(!b||X(b,qe)||a&&Q(b)!==Q(a))continue;let m=[];if(h instanceof J&&h.object instanceof I)m.push(h.object);else if(h instanceof ie)for(let K of h.object??[])K instanceof I&&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(k);(!E||c(i(p),i(E))>0)&&v.best.set(k,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,k)=>p.label.localeCompare(k.label)).map(p=>{let h=[...p.best.values()].sort((b,m)=>H(this.catalog,b).label.localeCompare(H(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> ${g(p.label)}</h3><section class="kan-pkg-grid">${h}</section></div>`}).join("")}`}resourceCard(e,n,t){let a=H(this.catalog,e),s=a.summary?at(a.summary,160):"",o=be(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">${g(y)}</span>`).join("")}</span>`:"")+`<span class="kan-pkg-card-title">${g(a.label)}</span>`+(s?`<span class="kan-pkg-card-comment">${g(s)}</span>`:"")+"</span>",l=this.isLinkable(le(e),n),d=l?`<a class="kan-pkg-card-link" href="${g(this.hrefForSubject(e,n))}"><img class="kan-pkg-card-svg" src="${g(this.svgUrlForSubject(e,n))}" alt="" loading="lazy"/>`+c+"</a>":`<span class="kan-pkg-card-link">${c}</span>`,f=e.namespace||"",p=this.uriOf(e),k=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">${g(b)}</span>`:"";if(l){let v=`<span class="kan-card-pkg">${g(h)}</span>${y}`;m=`<a class="kan-pkg-card-foot" href="${g(this.packageHref(k,h,b||void 0))}" title="${g(b?`${h}@${b}`:h)}">${v}</a>`}else{let v=`<span class="kan-card-pub">${g(k)}/</span><span class="kan-card-pkg">${g(h)}</span>${y}`;m=`<span class="kan-pkg-card-foot" title="${g(b?`${k}/${h}@${b}`:`${k}/${h}`)}">${v}</span>`}}return`<div class="kan-pkg-card kan-pkg-card--foot">${d}${m}</div>`}renderInstances(e,n,t){let a={publisher:le(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 z)||!be(m).some(K=>o.has(Q(K.subject))))continue;let v=Q({publisher:le(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)=>H(this.catalog,m).label.localeCompare(H(this.catalog,y).label));let f=48,p=d.slice(0,f),k=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">${k.join("")}</section>`}descendantTypeKeys(e){let n=Q(e),t=new Set([n]),a=new Set;for(let s of this.catalog)if(s instanceof z)for(let o of be(s)){let i=o.subject,c=Q(i);a.has(c)||(a.add(c),nn(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,qe)||t&&!(s&&Q(s)===Q(t)))continue;let o=[];if(a instanceof J&&a.object instanceof I)o.push(a.object);else if(a instanceof ie)for(let i of a.object??[])i instanceof I&&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=ce(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="${g(c)}">View full resource \u2192</a>`+i+"</section>"}async renderDistribution(e,n){let t=async F=>{let $=this.readEmbeddedCarrier(e,F);if(!$)return;let A=await this.evaluateCarrierNum($,n);return Number.isFinite(A)?A:void 0},a=await t(Js),s=await t(Zs);if(a===void 0||s===void 0||a<=0||s<=0)return"<!-- LookRenderer.Distribution: needs resolvable alphaPath + betaPath (> 0) -->";let o=await t(gn)??a/(a+s),i=await t(ua),c=await t(da),l=await t(et),d=l!==void 0?`hsl(${l},65%,60%)`:"var(--kan-accent)",f=F=>Number.isInteger(F)?String(F):F.toFixed(1),p=280,k=168,h={top:14,right:14,bottom:24,left:14},b=p-h.left-h.right,m=k-h.top-h.bottom,y=120,v=1e-4,E=[],K=[],O=0;for(let F=0;F<=y;F++){let $=F/y;$<v?$=v:$>1-v&&($=1-v);let A=Math.exp((a-1)*Math.log($)+(s-1)*Math.log(1-$));E.push($),K.push(A),A>O&&(O=A)}let T=F=>h.left+Math.min(1,Math.max(0,F))*b,x=F=>h.top+(1-(O>0?F/O:0))*m,w=h.top+m,G=E.map((F,$)=>`${T(F).toFixed(1)},${x(K[$]).toFixed(1)}`),P=`M${T(0).toFixed(1)},${w.toFixed(1)} L${G.join(" L")} L${T(1).toFixed(1)},${w.toFixed(1)} Z`,V="";if(i!==void 0&&c!==void 0&&c>i){let F=[`${T(i).toFixed(1)},${w.toFixed(1)}`];for(let $=0;$<=y;$++)E[$]>=i&&E[$]<=c&&F.push(`${T(E[$]).toFixed(1)},${x(K[$]).toFixed(1)}`);F.push(`${T(c).toFixed(1)},${w.toFixed(1)}`),V=`<path d="M${F.join(" L")} Z" fill="${d}" fill-opacity="0.3"/>`}let L=T(o),j=`<line x1="${L.toFixed(1)}" y1="${h.top.toFixed(1)}" x2="${L.toFixed(1)}" y2="${w.toFixed(1)}" stroke="${d}" stroke-width="1.5" stroke-dasharray="3 3"/><text x="${L.toFixed(1)}" y="${(h.top-3).toFixed(1)}" text-anchor="middle" class="kan-dist-mean">\u03BC ${o.toFixed(2)}</text>`,N=`<text x="${T(0).toFixed(1)}" y="${(w+15).toFixed(1)}" text-anchor="start" class="kan-dist-axis">0</text><text x="${T(1).toFixed(1)}" y="${(w+15).toFixed(1)}" text-anchor="end" class="kan-dist-axis">1</text>`,R=`<svg class="kan-dist-svg" viewBox="0 0 ${p} ${k}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img"><line x1="${h.left}" y1="${w.toFixed(1)}" x2="${(p-h.right).toFixed(1)}" y2="${w.toFixed(1)}" class="kan-dist-base"/><path d="${P}" fill="${d}" fill-opacity="0.12"/>`+V+`<polyline points="${G.join(" ")}" fill="none" stroke="${d}" stroke-width="2"/>`+j+N+"</svg>",U=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)})${U}</figcaption></figure>`}renderPublisherPackages(e,n){let t=new Map;for(let i of this.catalog){if(!(i instanceof z)||le(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,Ds);if(s.length>0){a=[];for(let i of s){if(!(i instanceof I))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=H(this.catalog,c),d=l.label,f=l.summary,p=f?at(f,160):"",k=this.svgUrlForSubject(c,n);return`<a class="kan-pkg-card" href="${g(this.packageHref(n,i))}"><img class="kan-pkg-card-svg" src="${g(k)}" alt="" loading="lazy"/><span class="kan-pkg-card-body"><span class="kan-pkg-card-title">${g(d)}</span>`+(p?`<span class="kan-pkg-card-comment">${g(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,la),l=this.readEmbeddedCarrier(e,gn);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),k=p.package_,h=p.version,b=this.resourceHref({publisher:le(f),package_:k,name:f.name,...h?{version:h}:{}},n),m=o(f),y=m?`<span class="kan-timeline-date">${g(m)}</span>`:"",v=h?bn(h):f.name;return`<li class="kan-timeline-node"><a href="${g(b)}"><span class="kan-timeline-key">${g(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,et),l=this.readEmbeddedCarrier(a,ua),d=this.readEmbeddedCarrier(a,da),f=Z(i,jo),p=ha(i,wo),k=ha(i,_o),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,O=k!==void 0?k:v+E;O-K<1e-9&&(O=K+1);let T=1e3,x=440,w={top:28,right:24,bottom:56,left:52},G=T-w.left-w.right,P=x-w.top-w.bottom,V=C=>h<=1?w.left+G/2:w.left+C/(h-1)*G,L=C=>w.top+(1-(C-K)/(O-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*(O-K)/4,fe=L(M);N.push(`<line x1="${w.left}" y1="${fe.toFixed(1)}" x2="${(T-w.right).toFixed(1)}" y2="${fe.toFixed(1)}" class="kan-fan-grid"/>`),N.push(`<text x="${(w.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):"",ue=V(M),te=Fn(o(C));R.push(`<a href="${g(fe)}" class="kan-fan-xtick"><line x1="${ue.toFixed(1)}" y1="${w.top}" x2="${ue.toFixed(1)}" y2="${(x-w.bottom).toFixed(1)}" class="kan-fan-vline"/><text x="${ue.toFixed(1)}" y="${(x-w.bottom+20).toFixed(1)}" class="kan-fan-xlabel" text-anchor="middle">${Oe(ne||C.name)}</text>`+(te?`<text x="${ue.toFixed(1)}" y="${(x-w.bottom+36).toFixed(1)}" class="kan-fan-xdate" text-anchor="middle">${Oe(te)}</text>`:"")+"</a>")});let U=[];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],ye=C.lower[te];Re==null||ye===null||ye===void 0||(se.push(`${V(te).toFixed(1)},${L(Re).toFixed(1)}`),ne.unshift(`${V(te).toFixed(1)},${L(ye).toFixed(1)}`))}let ue=se.concat(ne);ue.length<3||U.push(`<polygon class="kan-fan-band" points="${ue.join(" ")}" fill="hsl(${fe},65%,60%)"/>`)});let F=[];b.forEach((C,M)=>{let se=`hsl(${j(C,M)},65%,60%)`,ne=[],ue=[];C.points.forEach((te,Re)=>{if(te===null)return;let ye=V(Re),me=L(te);ne.push(`${ye.toFixed(1)},${me.toFixed(1)}`),ue.push(`<circle cx="${ye.toFixed(1)}" cy="${me.toFixed(1)}" r="3.5" fill="${se}"/>`)}),ne.length!==0&&F.push(`<g class="kan-fan-series" data-series="${g(C.key)}"><polyline points="${ne.join(" ")}" fill="none" stroke="${se}" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/>`+ue.join("")+"</g>")});let $=`<svg class="kan-fan-svg" viewBox="0 0 ${T} ${x}" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">`+N.join("")+R.join("")+U.join("")+F.join("")+"</svg>",A=f?`${g(f)}=`:"",q=b.map((C,M)=>{let fe=j(C,M),se=C.points.filter(me=>me!==null),ne=se.length?se[0]:void 0,ue=se.length?se[se.length-1]:void 0,te="";if(ue!==void 0&&ne!==void 0){let me=ue-ne;if(Math.abs(me)>=.005){let Ge=me>0?"up":"down",Ue=me>0?"\u25B2":"\u25BC";te=` <span class="kan-fan-delta ${Ge}">${me>0?"+":""}${me.toFixed(2)} ${Ue}</span>`}else te=' <span class="kan-fan-delta flat">\u2014</span>'}let Re=ue!==void 0?`${A}${ue.toFixed(2)}`:"\u2014",ye=C.lastSubject&&this.isLinkable(le(C.lastSubject),s)?`<a href="${g(this.hrefForSubject(C.lastSubject,s))}">${g(C.label)}</a>`:g(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">${ye}</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">${q.join("")}</div></section>`}resolveResourceQuery(e){let n=i=>{let c=B(i,vo);if(!c)return;let l=B(i,Cn),d=Z(i,$o),f=this.readPropertyValueText(i,So),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?be(s).some(i=>X(i.subject,yo)):!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=H(this.catalog,d),p=f.label,k=f.summary,h=this.uriOf(d),b=h.package_,m=h.version,y=this.resourceHref({publisher:le(d),package_:b,name:d.name,...m?{version:m}:{}},n),v=k?`<p class="kan-resource-card-subtitle">${g(k)}</p>`:"",E=`<h3 class="kan-resource-card-title">${g(p)}</h3>${v}`;l.push(this.isLinkable(le(d),n)?`<a class="kan-resource-card" href="${g(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,Ao);return n instanceof ke?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 z&&be(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="${g(this.publisherHref(o))}">${g(o)}</a></li>
138
- <li aria-current="page">${g(c)}</li>
139
- </ol></nav>`;let d=e.name,p=!!ee(this.catalog,{publisher:o,package_:c,name:c}),k=l?`${c}@${l}`:c,h=this.resourceHref({publisher:o,package_:c,name:c,...l?{version:ot(l)}:{}},o),b=e.name===c,m=[];return m.push(`<li><a href="${g(this.publisherHref(o))}">${g(o)}</a></li>`),b?m.push(`<li aria-current="page">${g(k)}</li>`):(m.push(p?`<li><a href="${g(h)}">${g(k)}</a></li>`:`<li>${g(k)}</li>`),m.push(`<li aria-current="page">${g(d)}</li>`)),`<nav class="kan-breadcrumb"><ol>
140
- ${m.join(`
141
- `)}
142
- </ol></nav>`}renderNavGroup(e,n){let t=this.valueItems(this.publisherSubject(n),Qr);if(t.length===0)return"";let a=[];for(let s of t){if(!(s instanceof I))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="${g(i)}"${d}>${g(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),Jr),t;if(n instanceof oe?t=n.object:n instanceof J&&n.object instanceof I&&(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,Zr),s=this.valueItems(t,es),o=[];for(let c of s){if(!(c instanceof I))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="${g(d)}">${g(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">${g(a)}</p>`),`<footer class="kan-site-footer">${i.join(`
146
- `)}</footer>`}resolveNavEntry(e,n,t){if(n&&be(n).map(c=>c.subject).some(c=>c.publisher===Qn.publisher&&c.package_===Qn.package_&&c.name===Qn.name)){let c=Z(n,Xn),l=Ke(n,ta);if(l instanceof J&&l.object instanceof I){let d=l.object,f=this.readLabelForUri({publisher:d.subject.publisher,package_:d.subject.package_,name:d.subject.name});return{href:this.urlForReference(d,ta,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?H(this.catalog,n).label:e.subject.name;return{href:a,label:s}}codeHighlighter(){return this._codeHighlighter||(this._codeHighlighter=new xn(this.collectGrammars())),this._codeHighlighter}collectGrammars(){let e=[];for(let n of this.catalog){if(!(n instanceof z)||!be(n).some(o=>X(o.subject,Bs)))continue;let t=Z(n,Hs);if(!t)continue;let a=this.valueItems(n,qs),s=[];for(let o of a){if(!(o instanceof D))continue;let i=B(o,Gs),c=Z(o,zs);!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 I&&(i=ee(this.catalog,{publisher:o.subject.publisher,package_:o.subject.package_,name:o.subject.name})),!i)continue;let c=Z(i,Ys);if(!c)continue;let l=Z(i,Xn)??c,d=Z(i,ea),f=d?` title="${g(d)}"`:"";s.push(`<a class="kan-extlink" href="${g(c)}"${f} target="_blank" rel="noopener noreferrer">${g(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="'+va(d)+'">)([^<]*)(</a>)',"g");l=l.replace(p,`$1<img class="kan-md-chip" src="${g(f)}" alt="" loading="lazy">$2$3`)}return`<section class="kan-markdown">
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=nt(n.declaration),a=[];for(let s of t){let o=on(s);if(!o||!X(o,na))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 ke?m.object===!0:m instanceof ae&&m.object==="true"},s=a(Po),o=!s&&a(To),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="${g(b)}" alt="" loading="lazy"/>`),l.push('<div class="kan-hero-text">')}let d=B(e,Oo);if(d){let b=this.readPropertyValueText(n,d);b&&l.push(`<span class="kan-hero-eyebrow">${g(Vn(b)??b)}</span>`)}let f=B(e,Co),p="";f&&(p=this.readPropertyValueText(n,f)??""),p||(p=H(this.catalog,n).label),l.push(`<h1 class="kan-hero-title">${g(Vn(p)??p)}</h1>`);let k=B(e,Uo);if(k){let b=this.readPropertyValueText(n,k);b&&l.push(`<p class="kan-hero-subtitle">${g(Vn(b)??b)}</p>`)}let h=B(e,ma);if(h){let b=this.readPropertyValueReferences(n,h);if(b.length>0){let m=b.map(y=>this.renderBadge(y,ma,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">${g(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,ko);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=>H(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>${g(m.label)}</th>`).join(""),p=e.map((m,y)=>{let v=d&&m.name?`${a}.${m.name}`:"",E=v?` id="${g(v)}"`:"",K=d?`<td class="kan-anchor-col">${v?this.anchorLink(v):""}</td>`:"",O=l?`<th scope="row">${g(c[y]??"")}</th>`:"",T=o.map(x=>{let w=Ke(m,x.uri);return w?`<td>${this.tableCellValue(w,n,s)}</td>`:"<td></td>"}).join("");return`<tr${E}>${K}${O}${T}</tr>`}).join(""),k=d&&a?` id="${g(a)}"`:"",h=d&&a?this.anchorLink(a):"",b=t?`<caption>${g(t)}${h}</caption>`:"";return`<table class="kan-property-table"${k}>${b}<thead><tr>${f}</tr></thead><tbody>${p}</tbody></table>`}tableCellValue(e,n,t){if(t&&X(t,ia)){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 $a(e.object);if(e instanceof he||e instanceof ke)return g(String(e.object));if(e instanceof J&&e.object instanceof I)return this.detailReferenceLink(e.object,n);if(e instanceof oe)return this.renderEmbeddedTable([e.object],n);if(e instanceof ie){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 I?this.detailReferenceLink(o,n):o instanceof D?this.renderEmbeddedTable([o],n):g(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="'+va(i)+'">)([^<]*)(</a>)',"g");o=o.replace(l,`$1<img class="kan-md-chip" src="${g(c)}" alt="" loading="lazy">$2$3`)}return o}renderBadgeRow(e,n,t){let a=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=tt(e,Mo);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">${g(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=tt(e,ka);if(a.length===0)return"<!-- LookRenderer: ReferenceList has no look.entries -->";let s=this.readEmbeddedCarrier(e,oa),o=this.readEmbeddedCarrier(e,mo),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 k of l)f.push(await this.renderDetailRow(k,s,o,t));let p=f.filter(k=>k).join("");p&&i.push(`<dt>${g(d)}</dt><dd><ul class="kan-ref-rows">${p}</ul></dd>`)}else{let f=l.map(p=>this.renderReferenceLink(p,ka,t)).join(", ");i.push(`<dt>${g(d)}</dt><dd>${f}</dd>`)}}return i.length===0?"":`<dl class="kan-reference-list">${i.join("")}</dl>`}async renderDetailRow(e,n,t,a){let s=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)??H(this.catalog,s).label,i="";if(t){let f=await this.evaluateCarrier(t,s);f&&(i=`<span class="kan-ref-badge">${g(f)}</span>`)}let c=`<span class="kan-ref-text">${g(o)}</span>${i}`;if(!this.isLinkable(le(s),a))return`<li class="kan-ref-row"><span class="kan-ref-rowlink">${c}</span></li>`;let l=this.hrefForSubject(s,a),d=this.svgUrlForSubject(s,a);return`<li class="kan-ref-row"><a class="kan-ref-rowlink" href="${g(l)}"><img class="kan-ref-icon" src="${g(d)}" alt="" loading="lazy"/>`+c+"</a></li>"}readPropertyValueText(e,n){let t=Fe(e,n);if(t.length===0)return Ke(e,n)?"":void 0;let a=o=>o instanceof I?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>=pa)return"\u2026";let t=[];for(let a of e.statement){let s=a.predicate?.subject;if(!(s&&X(s,qe)))if(a instanceof ae)t.push(a.object);else if(a instanceof he||a instanceof ke)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 oe&&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 I)}valueItems(e,n){return Fe(e,n).map(t=>"literal"in t.item?t.item.value:t.item)}renderInlineValue(e,n,t,a=0){return e instanceof I?this.renderReferenceLink(e,n,t):e instanceof D?this.renderEmbeddedInline(e,t,a):typeof e=="string"?g(e):typeof e=="number"||typeof e=="boolean"?g(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>=pa)return"\u2026";let a=[];for(let s of ga(e)){if(X(s,qe))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>${g(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">${g(a)}</span>`;let s=this.urlForReference(e,n,t);return`<a class="kan-link" href="${g(s)}">${g(a)}</a>`}isLinkable(e,n){return this.publisherFirst||e===n}renderBadge(e,n,t){let a=this.readLabelForUri({publisher:e.subject.publisher,package_:e.subject.package_,name:e.subject.name})??e.subject.name,s=this.readCommentForUri({publisher:e.subject.publisher,package_:e.subject.package_,name:e.subject.name}),o=s?` title="${g(s)}"`:"";if(!this.isLinkable(e.subject.publisher,t))return`<span class="kan-badge"${o}>${g(a)}</span>`;let i=this.urlForReference(e,n,t);return`<a class="kan-badge" href="${g(i)}"${o}>${g(a)}</a>`}urlForReference(e,n,t){let a=n?this.getUrlFormForProperty(n):"=";return this.resourceHref({publisher:e.subject.publisher,package_:e.subject.package_,...e.subject.version?{version:e.subject.version}:{},name:e.subject.name},t,a)}getUrlFormForProperty(e){let n=ee(this.catalog,e);if(!n)return"=";let t=Z(n,No);return t==="*"||t==="^"||t==="~"||t==="="?t:"="}readLabelForUri(e){let n=ee(this.catalog,e);if(n)return H(this.catalog,n).label}readCommentForUri(e){let n=ee(this.catalog,e);if(n)return H(this.catalog,n).summary}};function Do(r){let e=new Map;for(let n of r.statement){if(!(n instanceof oe)||!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 On(r){for(let e of r.statement)if(e instanceof oe&&Me(e,Tn.publisher,Tn.package_,Tn.name))return e.object}function nt(r){return Fe(r,xo).map(e=>e.item).filter(e=>e instanceof D)}function on(r){for(let e of r.statement)if(e instanceof J&&!(!e.predicate?.subject||!X(e.predicate.subject,qe))&&e.object instanceof I){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 I){let t=n.object.subject;return{publisher:t.publisher,package_:t.package_,name:t.name}}}function tt(r,e){return we(r,e).map(n=>({publisher:n.publisher,package_:n.package_,name:n.name}))}function ga(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 Un(r,e){for(let n of r.statement)if(n instanceof oe&&Me(n,e.publisher,e.package_,e.name))return n.object}function ha(r,e){for(let n of r.statement)if(n instanceof he&&Me(n,e.publisher,e.package_,e.name))return n.object}function Bo(r,e){for(let n of r.statement)if(n instanceof ke&&Me(n,e.publisher,e.package_,e.name))return n.object===!0;return!1}function Ho(r){for(let e of be(r))if(X(e.subject,Mr)||X(e.subject,Nr))return!0;return!1}function be(r){return Fe(r,qe).map(e=>e.item).filter(e=>e instanceof I)}function In(r){let e=[];for(let n of r.statement)if(n instanceof J){if(!n.predicate?.subject||!X(n.predicate.subject,rt))continue;n.object instanceof I&&e.push(n.object)}else if(n instanceof ie){if(!n.predicate?.subject||!X(n.predicate.subject,rt))continue;for(let t of n.object??[])t instanceof I&&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 z&&a.name===e.name&&a.namespace===t)return a}for(let t of r){if(!(t instanceof z)||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 qo(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 le(r){let e=r.namespace||"",n=e.indexOf("/");return n>=0?e.substring(0,n):e}function g(r){return r.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function Oe(r){return r.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function ba(r,e){return e==null?"":Je(e)?e.value:r==="string-literal"?typeof e=="string"?e:String(e):Array.isArray(e)?e.map(n=>Je(n)?n.value:Oe(typeof n=="string"?n:String(n))).join(""):Oe(typeof e=="string"?e:String(e))}function Sa(r){if(r==null)return"";if(typeof r=="string")return r;if(typeof r=="number"||typeof r=="boolean")return String(r);if(Je(r))return r.value;if(Array.isArray(r))return r.map(Sa).filter(n=>n!=="").join(", ");if(r instanceof I)return r.subject.name;if(r instanceof z||r instanceof D)return r.name??"";let e=r.value;return typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):""}function at(r,e){return r.length<=e?r:r.slice(0,e).replace(/\s+\S*$/,"")+"\u2026"}function ya(r){return r.toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function va(r){return r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function $a(r){let e=Vn(r);return g(e||r)}function Vn(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 Fn(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 Go(){return new Set(An.bandDispatchUris().map(r=>`${r.publisher}/${r.package_}/${r.name}`))}export{Y as a,Jo as b,Te as c,H as d,It as e,Ft as f,Tt as g,qn as h,pn as i,Mt as j,Li as k,mn as l,Je as m,Ce as n,kn as o,Ln as p,Ae as q,An as r,Go as s};
@@ -1 +0,0 @@
1
- import{a as d}from"./chunk-F67UH4FD.js";import{a as l,b as h}from"./chunk-QILEJIFU.js";import*as c from"js-yaml";var y=new Set(["Package","EphemeralPackage"]);function f(m){return typeof m=="string"&&y.has(m)}var g=class{parse(e){let r=this.parseWithErrors(e);if(!r.isValid){let n=r.errors[0];throw new Error(`YAML parse error at line ${n.line}, column ${n.column}: ${n.message}`)}return r.document}parseWithErrors(e){let r=[],n;try{e=e.replace(/^\uFEFF/,"");let a=c.load(e,{schema:c.FAILSAFE_SCHEMA});if(!a||typeof a!="object")return n={metadata:this.createEmptyMetadata(),body:{},toString:()=>"KanonakDocument(empty)"},{document:n,errors:r,isValid:!0};let t=this.extractMetadata(a),o=this.extractBody(a,t);return n={metadata:t,body:o,toString:function(){return this.metadata.namespace_?`KanonakDocument(${this.metadata.namespace_.publisher}/${this.metadata.namespace_.package_})`:"KanonakDocument(no namespace)"}},{document:n,errors:r,isValid:!0}}catch(a){let t=a,o={message:t.message||"Unknown parse error",line:t.mark?.line??0,column:t.mark?.column??0,errorType:t.name==="YAMLException"?"SyntaxError":"Unknown",toString:()=>`${t.name==="YAMLException"?"SyntaxError":"Unknown"} at line ${t.mark?.line??0}: ${t.message||"Unknown parse error"}`};return r.push(o),{document:void 0,errors:r,isValid:!1}}}save(e){let r={};if(e.metadata.namespace_){let n=e.metadata.namespace_,a={type:"Package",publisher:n.publisher};n.version&&(a.version=`${n.version.major}.${n.version.minor}.${n.version.patch}`),e.metadata.imports&&(a.imports=this.serializeImports(e.metadata.imports)),r[n.package_]=a}return Object.assign(r,e.body),c.dump(r,{indent:2,noRefs:!0,sortKeys:!1})}createEmptyMetadata(){return{get allImports(){return[]}}}addAllImportsGetter(e){let r=e.imports;return Object.defineProperty(e,"allImports",{get:function(){if(!r)return[];let n=[];for(let a of Object.values(r))n.push(...a);return n},enumerable:!0,configurable:!0}),e}createVersion(e,r,n){return{major:e,minor:r,patch:n,toString:()=>`${e}.${r}.${n}`,equals:t=>!t||typeof t!="object"?!1:t.major===e&&t.minor===r&&t.patch===n,getHashCode:()=>e<<20|r<<10|n,compareTo:t=>e!==t.major?e-t.major:r!==t.minor?r-t.minor:n-t.patch}}extractMetadata(e){let r=this.createEmptyMetadata();for(let[n,a]of Object.entries(e))if(a&&typeof a=="object"&&f(a.type)){r.type_=a.type;let t=n,o=a.publisher,i=a.version?this.parseVersion(a.version):void 0;return o&&t&&(r.namespace_={publisher:o,package_:t,version:i,toString:function(){return this.version?`${this.publisher}/${this.package_}@${this.version.major}.${this.version.minor}.${this.version.patch}`:`${this.publisher}/${this.package_}`},equals:s=>!s||typeof s!="object"?!1:s.publisher===o&&s.package_===t&&(!i||!s.version||i.equals(s.version)),getHashCode:()=>{let s=0;for(let p=0;p<o.length;p++)s=(s<<5)-s+o.charCodeAt(p);for(let p=0;p<t.length;p++)s=(s<<5)-s+t.charCodeAt(p);return s|0}}),a.imports&&Array.isArray(a.imports)&&(r.imports=this.parseImportsV3(a.imports)),this.addAllImportsGetter(r)}return r}extractBody(e,r){let n={};for(let[a,t]of Object.entries(e))if(t&&typeof t=="object"&&f(t.type)){let o={};for(let[i,s]of Object.entries(t))i==="publisher"||i==="version"||i==="imports"||(o[i]=s);n[a]=o}else n[a]=t;return n}parseVersion(e){if(typeof e=="string"){let r=e.split(".").map(Number);return this.createVersion(r[0]||0,r[1]||0,r[2]||0)}return this.createVersion(e.major||0,e.minor||0,e.patch||0)}parseImportsV3(e){let r={};for(let n of e)if(!(!n||typeof n!="object"))if(n.packages&&Array.isArray(n.packages)){let a=n.publisher;if(!a)throw new Error("PublisherImport requires 'publisher' property");r[a]||(r[a]=[]);for(let t of n.packages){if(!t||typeof t!="object")continue;let o=this.parseImportFromEmbeddedObject(t,a);r[a].push(o)}}else{let a=this.parseImportFromEmbeddedObject(n,n.publisher),t=a.publisher||"";r[t]||(r[t]=[]),r[t].push(a)}return r}parseImportFromEmbeddedObject(e,r){let n=e.package;if(!n)throw new Error("Import requires 'package' property");let a=e.match;if(!a)throw new Error("Import requires 'match' property");let t=e.version;if(!t)throw new Error("Import requires 'version' property");let o;if(e.mode!==void 0&&e.mode!==null){if(!d.includes(e.mode))throw new Error(`Import '${n}' has an unknown mode '${e.mode}'; expected one of: ${d.join(", ")}`);o=e.mode}return this.makeImport(n,a,t,r,e.alias,o)}makeImport(e,r,n,a,t,o){let i=this.parseVersion(n),s=this.parseVersionOperator(r),p=this.calculateMaxVersion(r,i);return{package_:`${e} ${r} ${i.toString()}`,publisher:a,packageName:e,versionOperator:s,version:i,alias:t,...o?{mode:o}:{},minVersion:i,maxVersion:p,toEmbeddedObject:()=>{let u={package:e,match:r,version:i.toString()};return t&&(u.alias=t),o&&(u.mode=o),u},toString:()=>t?`${e} ${r} ${i.toString()} as ${t}`:`${e} ${r} ${i.toString()}`}}buildImport(e,r,n,a){return this.makeImport(e,r,n,a)}parseVersionOperator(e){return l(e)}calculateMaxVersion(e,r){switch(e){case"~":return this.createVersion(r.major,r.minor+1,0);case"^":return r.major===0?this.createVersion(0,r.minor+1,0):this.createVersion(r.major+1,0,0);default:return this.createVersion(999,999,999)}}serializeImports(e){let r=[];for(let[n,a]of Object.entries(e)){let t={publisher:n,packages:a.map(o=>{let i=h(o.versionOperator),s={package:o.packageName,match:i,version:`${o.version.major}.${o.version.minor}.${o.version.patch}`};return o.alias&&(s.alias=o.alias),s})};r.push(t)}return r}};export{g as a};
@@ -1 +0,0 @@
1
- import{n as A}from"./chunk-BZ3YTI3C.js";import{a as P}from"./chunk-6VIUXP4N.js";import{a as f}from"./chunk-HF5FJBS2.js";import{c as K,g as I,j as R}from"./chunk-QILEJIFU.js";import*as i from"fs/promises";import*as c from"path";import{pathToFileURL as b}from"url";var y=class{rootPath;recursive;parser;documentCache;filePathsByIdentifier;cacheInitialized=!1;cacheInitPromise=null;parsingErrors=new Map;constructor(e,t=!0,n){if(!e||e.trim().length===0)throw new Error("Root path cannot be null or empty");this.rootPath=c.resolve(e),this.recursive=t,this.parser=n??new f,this.documentCache=new Map,this.filePathsByIdentifier=new Map}async getAllDocumentsAsync(){await this.ensureCacheInitialized();let e=new Set(this.documentCache.values());return Array.from(e)}async getDocumentAsync(e){await this.ensureCacheInitialized();let t=this.documentCache.get(e);if(t)return t;let n=c.join(this.rootPath,e);if(t=this.documentCache.get(n),t)return t;for(let o of[".kan.yml",".yml",".yaml"])if(!e.endsWith(o)){let s=e+o;if(t=this.documentCache.get(s),t)return t;let a=c.join(this.rootPath,s);if(t=this.documentCache.get(a),t)return t}return null}async getDocumentsByNamespaceAsync(e,t){await this.ensureCacheInitialized();let n=new Set(this.documentCache.values());return Array.from(n).filter(o=>o.metadata.namespace_?.publisher===e&&o.metadata.namespace_?.package_===t)}async getHighestCompatibleVersionAsync(e,t){await this.ensureCacheInitialized();let n=new Set(this.documentCache.values()),o=Array.from(n).filter(a=>a.metadata?.namespace_?.publisher===e&&a.metadata?.namespace_?.package_===t.packageName&&a.metadata?.namespace_?.version!==void 0);if(o.length===0)return null;let s=o.filter(a=>{let r=a.metadata.namespace_.version;return R(r,t)});return s.length===0?null:(s.sort((a,r)=>{let m=a.metadata.namespace_.version,p=r.metadata.namespace_.version;return K(p,m)}),s[0])}async saveDocumentAsync(e,t){let n,o=e.metadata.namespace_?.toString();if(o&&o.includes("@")&&o.includes("/")){let m=o.split("/"),p=m[0],h=m[1].replace("@","@")+".kan.yml";n=c.join(this.rootPath,p,h)}else n=c.join(this.rootPath,t),!n.endsWith(".yml")&&!n.endsWith(".yaml")&&!n.endsWith(".kan.yml")&&(n+=".kan.yml");let s=c.dirname(n);await i.mkdir(s,{recursive:!0});let a=this.parser.save(e);await i.writeFile(n,a,"utf8"),o&&this.documentCache.set(o,e),this.documentCache.set(n,e);let r=c.relative(this.rootPath,n);this.documentCache.set(r,e)}async deleteDocumentAsync(e){let t=await this.getDocumentAsync(e);if(!t)return;let n=this.filePathsByIdentifier.get(e);if(!n)return;try{await i.unlink(n)}catch{}let o=t.metadata.namespace_?.toString();o&&this.documentCache.delete(o),this.documentCache.delete(e),this.documentCache.delete(n);let s=c.relative(this.rootPath,n);this.documentCache.delete(s)}async clearNamespaceAsync(e,t){await this.ensureCacheInitialized();let n=[];for(let[s,a]of this.documentCache.entries()){let r=a.metadata.namespace_?.toString()||"";r.includes(e)&&r.includes(t)&&n.push([s,a])}let o=c.join(this.rootPath,e);try{let s=await i.readdir(o);for(let a of s)a.includes(t)&&a.endsWith(".kan.yml")&&await i.unlink(c.join(o,a))}catch{}for(let[s]of n)this.documentCache.delete(s)}async getAllDocumentReferencesAsync(){await this.ensureCacheInitialized();let e=new Set(this.filePathsByIdentifier.values()),t=[];for(let n of e){let o=b(n).toString(),s;for(let[m,p]of this.documentCache.entries())if(this.filePathsByIdentifier.get(m)===n&&p.metadata.namespace_){s=p.metadata.namespace_.toString();break}let a=s??c.relative(this.rootPath,n),r=this.parsingErrors.has(n);t.push({identifier:a,uri:o,hasParseError:r})}return t}async getDocumentContentAsync(e){await this.ensureCacheInitialized();let t=this.filePathsByIdentifier.get(e);if(!t)try{await i.access(e),t=e}catch{let n=c.join(this.rootPath,e);try{await i.access(n),t=n}catch{return null}}try{return await i.readFile(t,"utf8")}catch{return null}}async getDocumentUriAsync(e){await this.ensureCacheInitialized();let t=this.filePathsByIdentifier.get(e);if(!t)try{await i.access(e),t=e}catch{let n=c.join(this.rootPath,e);try{await i.access(n),t=n}catch{return null}}return b(t).toString()}async refreshAsync(){this.documentCache.clear(),this.filePathsByIdentifier.clear(),this.parsingErrors.clear(),this.cacheInitialized=!1,this.cacheInitPromise=null,await this.ensureCacheInitialized()}async ensureCacheInitialized(){if(!this.cacheInitialized){if(this.cacheInitPromise){await this.cacheInitPromise;return}this.cacheInitPromise=this.loadDocuments(),await this.cacheInitPromise,this.cacheInitialized=!0}}async loadDocuments(){try{await i.mkdir(this.rootPath,{recursive:!0})}catch{}let t=(await this.findYamlFiles(this.rootPath,this.recursive)).map(async o=>{try{let s=await i.readFile(o,"utf8"),a=this.parser.parse(s);return{filePath:o,document:a,error:null}}catch(s){return{filePath:o,document:null,error:s instanceof Error?s.message:String(s)}}}),n=await Promise.all(t);for(let{filePath:o,document:s,error:a}of n){let r=c.relative(this.rootPath,o);if(s&&s.metadata.namespace_){let m=s.metadata.namespace_.toString();this.documentCache.set(m,s),this.documentCache.set(o,s),this.documentCache.set(r,s),this.filePathsByIdentifier.set(m,o),this.filePathsByIdentifier.set(o,o),this.filePathsByIdentifier.set(r,o)}else this.filePathsByIdentifier.set(o,o),this.filePathsByIdentifier.set(r,o);a&&this.parsingErrors.set(o,a)}}async findYamlFiles(e,t){let n=[];try{let o=await i.readdir(e,{withFileTypes:!0});for(let s of o){let a=c.join(e,s.name);if(s.isDirectory()&&t){let r=await this.findYamlFiles(a,t);n.push(...r)}else s.isFile()&&s.name.endsWith(".kan.yml")&&n.push(a)}}catch{}return n}};import*as g from"fs";var F=(n=>(n.NotFound="NotFound",n.Workspace="Workspace",n.Cache="Cache",n))(F||{}),D=class{cache;workspace;constructor(e,t,n){let o=n??new f;g.existsSync(e)||g.mkdirSync(e,{recursive:!0}),g.existsSync(t)||g.mkdirSync(t,{recursive:!0}),this.cache=new y(e,!0,o),this.workspace=new y(t,!0,o)}getCache(){return this.cache}getWorkspace(){return this.workspace}async getAllDocumentsAsync(){let e=await this.workspace.getAllDocumentsAsync(),t=await this.cache.getAllDocumentsAsync(),n=new Map;for(let o of t)if(o.metadata.namespace_){let s=o.metadata.namespace_.toString();n.set(s,o)}for(let o of e)if(o.metadata.namespace_){let s=o.metadata.namespace_.toString();n.set(s,o)}return Array.from(n.values())}async getDocumentAsync(e){let t=await this.workspace.getDocumentAsync(e);return t||await this.cache.getDocumentAsync(e)}async getDocumentsByNamespaceAsync(e,t){let n=await this.workspace.getDocumentsByNamespaceAsync(e,t),o=await this.cache.getDocumentsByNamespaceAsync(e,t),s=new Map;for(let a of o)if(a.metadata.namespace_?.version){let r=a.metadata.namespace_.version.toString();s.set(r,a)}for(let a of n)if(a.metadata.namespace_?.version){let r=a.metadata.namespace_.version.toString();s.set(r,a)}return Array.from(s.values())}async getHighestCompatibleVersionAsync(e,t){let n=await this.workspace.getHighestCompatibleVersionAsync(e,t);return n||await this.cache.getHighestCompatibleVersionAsync(e,t)}async saveDocumentAsync(e,t){await this.workspace.saveDocumentAsync(e,t)}async saveToCacheAsync(e,t){await this.cache.saveDocumentAsync(e,t)}async deleteDocumentAsync(e){await this.workspace.deleteDocumentAsync(e)}async clearNamespaceAsync(e,t){await this.workspace.clearNamespaceAsync(e,t)}async getAllDocumentReferencesAsync(){let e=await this.workspace.getAllDocumentReferencesAsync(),t=await this.cache.getAllDocumentReferencesAsync(),n=[];return n.push(...e),n.push(...t),n}async getDocumentContentAsync(e){let t=await this.workspace.getDocumentContentAsync(e);return t||await this.cache.getDocumentContentAsync(e)}async getDocumentUriAsync(e){let t=await this.workspace.getDocumentUriAsync(e);return t||await this.cache.getDocumentUriAsync(e)}async getDocumentLocationAsync(e){return await this.workspace.getDocumentAsync(e)?"Workspace":await this.cache.getDocumentAsync(e)?"Cache":"NotFound"}};import{homedir as x}from"os";import{join as _}from"path";function d(){let u=process.env.KANONAK_PACKAGE_CACHE;return u||_(x(),".kanonak","packages")}var w=class u{static createComposite(e,t,n){let o=e??d(),s=t??".";return new D(o,s,n)}static createFromEnvironment(e){let t=d(),n=process.env.KANONAK_WORKSPACE_PATH??".";return u.createComposite(t,n,e)}};var k=class{repos;constructor(...e){this.repos=e}async getHighestCompatibleVersionAsync(e,t){for(let n of this.repos)try{let o=await n.getHighestCompatibleVersionAsync(e,t);if(o)return o}catch{}return null}async getAllDocumentsAsync(){let e=[],t=new Set;for(let n of this.repos)try{for(let o of await n.getAllDocumentsAsync()){let s=o.metadata?.namespace_,a=s?s.version?`${s.publisher}/${s.package_}@${s.version.major}.${s.version.minor}.${s.version.patch}`:`${s.publisher}/${s.package_}`:void 0;if(a!==void 0){if(t.has(a))continue;t.add(a)}e.push(o)}}catch{}return e}async getDocumentAsync(e){for(let t of this.repos)try{let n=await t.getDocumentAsync(e);if(n)return n}catch{}return null}async getDocumentsByNamespaceAsync(e,t){for(let n of this.repos)try{let o=await n.getDocumentsByNamespaceAsync(e,t);if(o.length>0)return o}catch{}return[]}async saveDocumentAsync(e,t){await this.repos[0].saveDocumentAsync(e,t)}async deleteDocumentAsync(e){await this.repos[0].deleteDocumentAsync(e)}async clearNamespaceAsync(e,t){await this.repos[0].clearNamespaceAsync(e,t)}async getAllDocumentReferencesAsync(){return this.repos[0].getAllDocumentReferencesAsync()}async getDocumentContentAsync(e){for(let t of this.repos)try{let n=await t.getDocumentContentAsync(e);if(n)return n}catch{}return null}async getDocumentUriAsync(e){for(let t of this.repos)try{let n=await t.getDocumentUriAsync(e);if(n)return n}catch{}return null}};import{VersionOperator as H}from"@kanonak-protocol/types/document/models/enums";var v=class{constructor(e,t){this.base=e;this.lock=t}base;lock;pinnedVersion(e,t){return this.lock.packages[`${e}/${t}`]?.version}async getHighestCompatibleVersionAsync(e,t){let n=this.pinnedVersion(e,t.packageName);if(n){let o=I(n);if(o){let s={...t,versionOperator:H.Exact,version:o};return this.base.getHighestCompatibleVersionAsync(e,s)}}return this.base.getHighestCompatibleVersionAsync(e,t)}async getDocumentsByNamespaceAsync(e,t){let n=await this.base.getDocumentsByNamespaceAsync(e,t),o=this.pinnedVersion(e,t);return o?n.filter(s=>{let a=s.metadata.namespace_?.version;return a?`${a.major}.${a.minor}.${a.patch}`===o:!1}):n}getAllDocumentsAsync(){return this.base.getAllDocumentsAsync()}getDocumentAsync(e){return this.base.getDocumentAsync(e)}saveDocumentAsync(e,t){return this.base.saveDocumentAsync(e,t)}deleteDocumentAsync(e){return this.base.deleteDocumentAsync(e)}clearNamespaceAsync(e,t){return this.base.clearNamespaceAsync(e,t)}getAllDocumentReferencesAsync(){return this.base.getAllDocumentReferencesAsync()}getDocumentContentAsync(e){return this.base.getDocumentContentAsync(e)}getDocumentUriAsync(e){return this.base.getDocumentUriAsync(e)}};import{readFileSync as N,readdirSync as $}from"fs";import{join as S}from"path";var B=new Set(["node_modules",".kanonak",".git","_site","build",".stage"]);function C(u,e=[]){for(let t of $(u,{withFileTypes:!0}))t.isDirectory()?B.has(t.name)||C(S(u,t.name),e):t.name.endsWith(".kan.yml")&&e.push(S(u,t.name));return e}async function V(u,e=new f,t={}){let n=new P(e);for(let m of C(u))try{let p=e.parse(N(m,"utf-8")),l=p.metadata?.namespace_,h=l?.version;l&&h&&await n.saveDocumentAsync(p,`${l.publisher}/${l.package_}@${h.major}.${h.minor}.${h.patch}`)}catch{}let o=new y(d(),!0,e);if(t.offline)return new k(n,o);let s=new Map,a=t.httpCache??{getFromCache:(m,p,l)=>s.get(`${m}|${p}|${l}`)??null,onFetch:(m,p,l,h)=>{s.set(`${m}|${p}|${l}`,h)}},r=new A({getFromCache:a.getFromCache,onFetch:a.onFetch});return new k(n,o,r)}export{y as a,F as b,D as c,d,w as e,k as f,v as g,C as h,V as i};