worldorbit 2.5.1-5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +5 -0
- package/README.md +468 -0
- package/dist/browser/core/dist/index.js +4009 -0
- package/dist/browser/markdown/dist/index.js +3951 -0
- package/dist/browser/viewer/dist/index.js +5981 -0
- package/dist/constants.d.ts +8 -0
- package/dist/constants.js +84 -0
- package/dist/errors.d.ts +7 -0
- package/dist/errors.js +16 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.js +25 -0
- package/dist/normalize.d.ts +2 -0
- package/dist/normalize.js +243 -0
- package/dist/parse.d.ts +2 -0
- package/dist/parse.js +126 -0
- package/dist/render.d.ts +6 -0
- package/dist/render.js +683 -0
- package/dist/tokenize.d.ts +4 -0
- package/dist/tokenize.js +68 -0
- package/dist/types.d.ts +208 -0
- package/dist/types.js +1 -0
- package/dist/unpkg/core/dist/index.js +4081 -0
- package/dist/unpkg/markdown/dist/index.js +3979 -0
- package/dist/unpkg/viewer/dist/index.js +6038 -0
- package/dist/unpkg/worldorbit-core.min.js +12 -0
- package/dist/unpkg/worldorbit-markdown.min.js +95 -0
- package/dist/unpkg/worldorbit-viewer.min.js +251 -0
- package/dist/unpkg/worldorbit.d.ts +2 -0
- package/dist/unpkg/worldorbit.esm.js +2 -0
- package/dist/unpkg/worldorbit.js +8524 -0
- package/dist/unpkg/worldorbit.min.js +255 -0
- package/dist/validate.d.ts +2 -0
- package/dist/validate.js +31 -0
- package/dist/viewer-state.d.ts +16 -0
- package/dist/viewer-state.js +130 -0
- package/dist/viewer.d.ts +2 -0
- package/dist/viewer.js +434 -0
- package/package.json +68 -0
- package/packages/core/README.md +17 -0
- package/packages/core/dist/atlas-edit.d.ts +11 -0
- package/packages/core/dist/atlas-edit.js +273 -0
- package/packages/core/dist/atlas-utils.d.ts +22 -0
- package/packages/core/dist/atlas-utils.js +189 -0
- package/packages/core/dist/atlas-validate.d.ts +2 -0
- package/packages/core/dist/atlas-validate.js +285 -0
- package/packages/core/dist/diagnostics.d.ts +10 -0
- package/packages/core/dist/diagnostics.js +109 -0
- package/packages/core/dist/draft-parse.d.ts +3 -0
- package/packages/core/dist/draft-parse.js +1275 -0
- package/packages/core/dist/draft.d.ts +18 -0
- package/packages/core/dist/draft.js +387 -0
- package/packages/core/dist/errors.d.ts +7 -0
- package/packages/core/dist/errors.js +16 -0
- package/packages/core/dist/format.d.ts +4 -0
- package/packages/core/dist/format.js +520 -0
- package/packages/core/dist/index.d.ts +28 -0
- package/packages/core/dist/index.js +44 -0
- package/packages/core/dist/load.d.ts +4 -0
- package/packages/core/dist/load.js +175 -0
- package/packages/core/dist/markdown.d.ts +2 -0
- package/packages/core/dist/markdown.js +37 -0
- package/packages/core/dist/normalize.d.ts +2 -0
- package/packages/core/dist/normalize.js +311 -0
- package/packages/core/dist/parse.d.ts +2 -0
- package/packages/core/dist/parse.js +133 -0
- package/packages/core/dist/scene.d.ts +3 -0
- package/packages/core/dist/scene.js +1565 -0
- package/packages/core/dist/schema.d.ts +8 -0
- package/packages/core/dist/schema.js +298 -0
- package/packages/core/dist/tokenize.d.ts +4 -0
- package/packages/core/dist/tokenize.js +68 -0
- package/packages/core/dist/types.d.ts +476 -0
- package/packages/core/dist/types.js +1 -0
- package/packages/core/dist/validate.d.ts +2 -0
- package/packages/core/dist/validate.js +56 -0
- package/packages/editor/dist/editor.d.ts +2 -0
- package/packages/editor/dist/editor.js +3042 -0
- package/packages/editor/dist/index.d.ts +2 -0
- package/packages/editor/dist/index.js +1 -0
- package/packages/editor/dist/types.d.ts +53 -0
- package/packages/editor/dist/types.js +1 -0
- package/packages/markdown/README.md +9 -0
- package/packages/markdown/dist/html.d.ts +3 -0
- package/packages/markdown/dist/html.js +57 -0
- package/packages/markdown/dist/index.d.ts +4 -0
- package/packages/markdown/dist/index.js +3 -0
- package/packages/markdown/dist/rehype.d.ts +10 -0
- package/packages/markdown/dist/rehype.js +49 -0
- package/packages/markdown/dist/remark.d.ts +9 -0
- package/packages/markdown/dist/remark.js +28 -0
- package/packages/markdown/dist/types.d.ts +11 -0
- package/packages/markdown/dist/types.js +1 -0
- package/packages/viewer/README.md +13 -0
- package/packages/viewer/dist/atlas-state.d.ts +12 -0
- package/packages/viewer/dist/atlas-state.js +257 -0
- package/packages/viewer/dist/atlas-viewer.d.ts +2 -0
- package/packages/viewer/dist/atlas-viewer.js +482 -0
- package/packages/viewer/dist/custom-element.d.ts +1 -0
- package/packages/viewer/dist/custom-element.js +64 -0
- package/packages/viewer/dist/embed.d.ts +20 -0
- package/packages/viewer/dist/embed.js +138 -0
- package/packages/viewer/dist/index.d.ts +9 -0
- package/packages/viewer/dist/index.js +8 -0
- package/packages/viewer/dist/minimap.d.ts +3 -0
- package/packages/viewer/dist/minimap.js +63 -0
- package/packages/viewer/dist/render.d.ts +6 -0
- package/packages/viewer/dist/render.js +641 -0
- package/packages/viewer/dist/theme.d.ts +4 -0
- package/packages/viewer/dist/theme.js +102 -0
- package/packages/viewer/dist/tooltip.d.ts +3 -0
- package/packages/viewer/dist/tooltip.js +189 -0
- package/packages/viewer/dist/types.d.ts +263 -0
- package/packages/viewer/dist/types.js +1 -0
- package/packages/viewer/dist/viewer-state.d.ts +19 -0
- package/packages/viewer/dist/viewer-state.js +162 -0
- package/packages/viewer/dist/viewer.d.ts +2 -0
- package/packages/viewer/dist/viewer.js +1175 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";var WorldOrbitCore=(()=>{var Ye=Object.defineProperty;var Dn=Object.getOwnPropertyDescriptor;var Sn=Object.getOwnPropertyNames;var Fn=Object.prototype.hasOwnProperty;var Mn=(e,t)=>{for(var n in t)Ye(e,n,{get:t[n],enumerable:!0})},Rn=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Sn(t))!Fn.call(e,i)&&i!==n&&Ye(e,i,{get:()=>t[i],enumerable:!(r=Dn(t,i))||r.enumerable});return e};var Pn=e=>Rn(Ye({},"__esModule",{value:!0}),e);var Yo={};Mn(Yo,{WORLDORBIT_FIELD_KEYS:()=>ht,WORLDORBIT_FIELD_SCHEMAS:()=>Ge,WORLDORBIT_OBJECT_TYPES:()=>ie,WorldOrbitError:()=>d,cloneAtlasDocument:()=>Ue,createDiagnostic:()=>vt,createEmptyAtlasDocument:()=>ot,detectWorldOrbitSchemaVersion:()=>dt,diagnosticFromError:()=>D,extractWorldOrbitBlocks:()=>kn,formatAtlasDocument:()=>Pe,formatDocument:()=>Ee,formatDraftDocument:()=>Qe,getAtlasDocumentNode:()=>at,getFieldSchema:()=>L,isKnownFieldKey:()=>He,listAtlasDocumentPaths:()=>mn,load:()=>Uo,loadWorldOrbitSource:()=>We,loadWorldOrbitSourceWithDiagnostics:()=>ft,materializeAtlasDocument:()=>pe,materializeDraftDocument:()=>Ct,normalizeDocument:()=>C,normalizeWithDiagnostics:()=>It,parse:()=>xn,parseSafe:()=>Wo,parseWithDiagnostics:()=>je,parseWorldOrbit:()=>q,parseWorldOrbitAtlas:()=>Ve,parseWorldOrbitDraft:()=>an,removeAtlasDocumentNode:()=>yn,render:()=>Vo,renderDocumentToScene:()=>H,resolveAtlasDiagnosticPath:()=>ct,resolveAtlasDiagnostics:()=>lt,rotatePoint:()=>Dt,stringify:()=>qo,supportsObjectType:()=>Ke,tokenizeLine:()=>yt,tokenizeLineDetailed:()=>G,unitFamilyAllowsUnit:()=>oe,updateAtlasDocumentNode:()=>hn,upgradeDocumentToDraftV2:()=>Re,upgradeDocumentToV2:()=>fe,upsertAtlasDocumentNode:()=>st,validateAtlasDocumentWithDiagnostics:()=>gn,validateDocument:()=>z,validateDocumentWithDiagnostics:()=>$t});var d=class e extends Error{line;column;constructor(t,n,r){let i=n===void 0?"":` (line ${n}${r===void 0?"":`, column ${r}`})`;super(`${t}${i}`),this.name="WorldOrbitError",this.line=n,this.column=r}static fromLocation(t,n){return new e(t,n?.line,n?.column)}};var re=["system","star","planet","moon","belt","asteroid","comet","ring","structure","phenomenon"],R=re.filter(e=>e!=="system"),_n=["star","planet","moon","asteroid","comet","structure","phenomenon"],mt=["structure","phenomenon"],W=["star","planet","moon","belt","asteroid","comet","ring","structure","phenomenon"],En=["star","planet","moon","belt","asteroid","comet","ring","structure","phenomenon"];function g(e,t){return{key:e,...t}}var ie=new Set(re),Ge=new Map([g("orbit",{kind:"string",placement:!0,arity:"single",objectTypes:W}),g("distance",{kind:"unit",placement:!0,arity:"single",objectTypes:W,unitFamily:"distance"}),g("semiMajor",{kind:"unit",placement:!0,arity:"single",objectTypes:W,unitFamily:"distance"}),g("eccentricity",{kind:"number",placement:!0,arity:"single",objectTypes:W}),g("period",{kind:"unit",placement:!0,arity:"single",objectTypes:W,unitFamily:"duration"}),g("angle",{kind:"unit",placement:!0,arity:"single",objectTypes:W,unitFamily:"angle"}),g("inclination",{kind:"unit",placement:!0,arity:"single",objectTypes:W,unitFamily:"angle"}),g("phase",{kind:"unit",placement:!0,arity:"single",objectTypes:W,unitFamily:"angle"}),g("at",{kind:"string",placement:!0,arity:"single",objectTypes:mt}),g("surface",{kind:"string",placement:!0,arity:"single",objectTypes:mt}),g("free",{kind:"string",placement:!0,arity:"single",objectTypes:En}),g("kind",{kind:"string",placement:!1,arity:"single",objectTypes:R}),g("class",{kind:"string",placement:!1,arity:"single",objectTypes:R}),g("culture",{kind:"string",placement:!1,arity:"single",objectTypes:R}),g("tags",{kind:"list",placement:!1,arity:"multiple",objectTypes:re}),g("color",{kind:"string",placement:!1,arity:"single",objectTypes:re}),g("image",{kind:"string",placement:!1,arity:"single",objectTypes:_n}),g("hidden",{kind:"boolean",placement:!1,arity:"single",objectTypes:re}),g("radius",{kind:"unit",placement:!1,arity:"single",objectTypes:R,unitFamily:"radius"}),g("mass",{kind:"unit",placement:!1,arity:"single",objectTypes:R,unitFamily:"mass"}),g("density",{kind:"unit",placement:!1,arity:"single",objectTypes:R,unitFamily:"generic"}),g("gravity",{kind:"unit",placement:!1,arity:"single",objectTypes:R,unitFamily:"generic"}),g("temperature",{kind:"unit",placement:!1,arity:"single",objectTypes:R,unitFamily:"generic"}),g("albedo",{kind:"number",placement:!1,arity:"single",objectTypes:R}),g("atmosphere",{kind:"string",placement:!1,arity:"single",objectTypes:["planet","moon","asteroid","comet","phenomenon"]}),g("inner",{kind:"unit",placement:!1,arity:"single",objectTypes:["belt","ring","phenomenon"],unitFamily:"distance"}),g("outer",{kind:"unit",placement:!1,arity:"single",objectTypes:["belt","ring","phenomenon"],unitFamily:"distance"}),g("view",{kind:"string",placement:!1,arity:"single",objectTypes:["system"]}),g("scale",{kind:"string",placement:!1,arity:"single",objectTypes:["system"]}),g("units",{kind:"string",placement:!1,arity:"single",objectTypes:["system"]}),g("title",{kind:"string",placement:!1,arity:"single",objectTypes:["system"]}),g("on",{kind:"string",placement:!1,arity:"single",objectTypes:R}),g("source",{kind:"string",placement:!1,arity:"single",objectTypes:R}),g("cycle",{kind:"unit",placement:!1,arity:"single",objectTypes:R,unitFamily:"duration"})].map(e=>[e.key,e])),ht=new Set(Ge.keys());function L(e){return Ge.get(e)}function He(e){return ht.has(e)}function Ke(e,t){return e.objectTypes.includes(t)}function oe(e,t){switch(e){case"distance":return t===null||["au","km","m","ly","pc","kpc","re","sol"].includes(t);case"radius":return t===null||["km","m","re","rj","sol"].includes(t);case"mass":return t===null||["me","mj","sol"].includes(t);case"duration":return t===null||["s","min","h","d","y","ky","my","gy"].includes(t);case"angle":return t===null||t==="deg";case"generic":return!0}}function yt(e){return G(e).map(t=>t.value)}function G(e,t={}){let n=[],r=t.columnOffset??0,i="",a=null,s=!1,o=!1,l=null,c=()=>{a!==null&&(n.push({value:i,column:a,quoted:s}),i="",a=null,s=!1)};for(let u=0;u<e.length;u++){let f=e[u],m=r+u+1;if(o&&f==="\\"){let p=e[u+1];if(p==='"'||p==="\\"){i+=p,u++;continue}}if(f==='"'){o?o=!1:(a===null&&(a=m),s=!0,l=m,o=!0);continue}if(!o&&/\s/.test(f)){c();continue}a===null&&(a=m),i+=f}if(o)throw new d("Unclosed quote in line",t.line,l??r+e.length);return c(),n}function $e(e){return e.match(/^\s*/)?.[0].length??0}function q(e){let t=e.split(/\r?\n/),n=[],r=null,i=!1,a=null;for(let s=0;s<t.length;s++){let o=t[s],l=s+1;if(!o.trim())continue;let c=$e(o),u=G(o.slice(c),{line:l,columnOffset:c});if(u.length!==0){if(c===0){i=!1,a=null;let f=Nn(u,l);n.push(f),r=f;continue}if(!r)throw new d("Indented line without parent object",l,c+1);if(u.length===1&&u[0].value==="info"){i=!0,a=c;continue}i&&c<=(a??0)&&(i=!1),i?r.infoEntries.push(zn(u,l)):r.blockFields.push(Cn(u,l))}}return{type:"document",objects:n}}function Nn(e,t){if(e.length<2)throw new d("Invalid object declaration",t,e[0]?.column??1);let[n,r,...i]=e;if(!ie.has(n.value))throw new d(`Unknown object type "${n.value}"`,t,n.column);return{type:"object",objectType:n.value,name:r.value,inlineFields:Bn(i,t),blockFields:[],infoEntries:[],location:{line:t,column:n.column}}}function Bn(e,t){let n=[],r=0;for(;r<e.length;){let i=e[r],a=L(i.value);if(!a)throw new d(`Unknown field "${i.value}"`,t,i.column);r++;let s=[];if(a.arity==="multiple")for(;r<e.length&&!He(e[r].value);)s.push(e[r]),r++;else{let o=e[r];o&&(s.push(o),r++)}if(s.length===0)throw new d(`Missing value for field "${i.value}"`,t,i.column);n.push({type:"field",key:i.value,values:s.map(o=>o.value),location:{line:t,column:i.column}})}return n}function Cn(e,t){if(e.length<2)throw new d("Invalid field line",t,e[0]?.column??1);if(!L(e[0].value))throw new d(`Unknown field "${e[0].value}"`,t,e[0].column);return{type:"field",key:e[0].value,values:e.slice(1).map(n=>n.value),location:{line:t,column:e[0].column}}}function zn(e,t){if(e.length<2)throw new d("Invalid info entry",t,e[0]?.column??1);return{type:"info-entry",key:e[0].value,value:e.slice(1).map(n=>n.value).join(" "),location:{line:t,column:e[0].column}}}var gt=/^(-?\d+(?:\.\d+)?)(kpc|min|mj|rj|ky|my|gy|au|km|me|re|pc|ly|deg|sol|K|m|s|h|d|y)?$/,Vn=new Map([["true",!0],["false",!1],["yes",!0],["no",!1]]),Un=/^[A-Za-z][A-Za-z0-9+.-]*:/;function C(e){let t=null,n=[];for(let r of e.objects){let i=Wn(r);if(r.objectType==="system"){if(t)throw d.fromLocation("Only one system object is allowed",r.location);t=i}else n.push(i)}return{format:"worldorbit",version:"1.0",schemaVersion:"1.0",system:t,groups:[],relations:[],objects:n}}function Wn(e){let t=[...e.inlineFields,...e.blockFields];qn(e.objectType,t);let n=Yn(t),r=Gn(e.objectType,n),i=Hn(n),a=Xn(e.infoEntries);return e.objectType==="system"?{type:"system",id:e.name,title:typeof i.title=="string"?i.title:null,description:null,epoch:null,referencePlane:null,properties:i,info:a}:{type:e.objectType,id:e.name,properties:i,placement:r,info:a}}function qn(e,t){for(let n of t){let r=L(n.key);if(!r)throw d.fromLocation(`Unknown field "${n.key}"`,n.location);if(!Ke(r,e))throw d.fromLocation(`Field "${n.key}" is not valid on "${e}"`,n.location);if(r.arity==="single"&&n.values.length!==1)throw d.fromLocation(`Field "${n.key}" expects exactly one value`,n.location)}}function Yn(e){let t=new Map;for(let n of e){if(t.has(n.key))throw d.fromLocation(`Duplicate field "${n.key}"`,n.location);t.set(n.key,n)}return t}function Gn(e,t){let n=t.has("orbit"),r=t.has("at"),i=t.has("surface"),a=t.has("free"),s=[n,r,i,a].filter(Boolean).length;if(s>1){let o=t.get("orbit")??t.get("at")??t.get("surface")??t.get("free");throw d.fromLocation("Object has multiple placement modes",o?.location)}if(e==="system"&&s>0)throw d.fromLocation("System objects cannot declare placement",[...t.values()][0]?.location);if(n)return{mode:"orbit",target:ke(t,"orbit"),distance:J(t,"distance"),semiMajor:J(t,"semiMajor"),eccentricity:er(t,"eccentricity"),period:J(t,"period"),angle:J(t,"angle"),inclination:J(t,"inclination"),phase:J(t,"phase")};if(r){let o=xe(t,"at"),l=ke(t,"at");return{mode:"at",target:l,reference:Jn(l,o.location)}}if(i)return{mode:"surface",target:ke(t,"surface")};if(a){let o=ke(t,"free"),l=Qn(o);return{mode:"free",distance:l??void 0,descriptor:l?void 0:o}}return null}function Hn(e){let t={};for(let[n,r]of e.entries()){let i=L(n);if(!(!i||i.placement))switch(i.kind){case"list":t[n]=r.values;break;case"boolean":t[n]=tr(r);break;case"number":t[n]=wt(Q(r),n,r.location);break;case"unit":t[n]=bt(Q(r),r.location,n);break;case"string":t[n]=Kn(n,r);break}}return t}function Kn(e,t){let n=t.values.join(" ").trim();return e==="image"&&Zn(n,t.location),n}function Zn(e,t){if(!e)throw d.fromLocation('Field "image" must not be empty',t);if(e.startsWith("//"))throw d.fromLocation('Field "image" must use a relative path, root-relative path, or an http/https URL',t);let n=e.match(Un);if(!n)return;let r=n[0].slice(0,-1).toLowerCase();if(r!=="http"&&r!=="https")throw d.fromLocation(`Field "image" does not support the "${r}" scheme`,t)}function Xn(e){let t={};for(let n of e){if(n.key in t)throw d.fromLocation(`Duplicate info key "${n.key}"`,n.location);t[n.key]=n.value}return t}function Jn(e,t){if(/^[A-Za-z0-9._-]+-[A-Za-z0-9._-]+:L\d+$/i.test(e))throw d.fromLocation(`Invalid special position "${e}"`,t);let n=e.match(/^([A-Za-z0-9._-]+)-([A-Za-z0-9._-]+):(L[1-5])$/);if(n)return{kind:"lagrange",primary:n[1],secondary:n[2],point:n[3]};let r=e.match(/^([A-Za-z0-9._-]+):(L[1-5])$/);if(r)return{kind:"lagrange",primary:r[1],secondary:null,point:r[2]};if(/^[A-Za-z0-9._-]+:L\d+$/i.test(e))throw d.fromLocation(`Invalid special position "${e}"`,t);let i=e.match(/^([A-Za-z0-9._-]+):([A-Za-z0-9._-]+)$/);return i?{kind:"anchor",objectId:i[1],anchor:i[2]}:{kind:"named",name:e}}function bt(e,t,n){let r=e.match(gt);if(!r)throw d.fromLocation(`Invalid unit value "${e}"`,t);let i={value:Number(r[1]),unit:r[2]??null};if(n){let a=L(n);if(a?.unitFamily&&!oe(a.unitFamily,i.unit))throw d.fromLocation(`Unit "${i.unit??"none"}" is not valid for "${n}"`,t)}return i}function Qn(e){let t=e.match(gt);return t?{value:Number(t[1]),unit:t[2]??null}:null}function J(e,t){if(!e.has(t))return;let n=xe(e,t);return bt(Q(n),n.location,t)}function er(e,t){if(!e.has(t))return;let n=xe(e,t);return wt(Q(n),t,n.location)}function wt(e,t,n){let r=Number(e);if(!Number.isFinite(r))throw d.fromLocation(`Invalid numeric value "${e}" for "${t}"`,n);return r}function tr(e){let t=Q(e).toLowerCase(),n=Vn.get(t);if(n===void 0)throw d.fromLocation(`Invalid boolean value "${t}" for "${e.key}"`,e.location);return n}function xe(e,t){let n=e.get(t);if(!n)throw new d(`Missing value for key "${t}"`);return n}function ke(e,t){return Q(xe(e,t))}function Q(e){if(e.values.length!==1)throw d.fromLocation(`Field "${e.key}" expects exactly one value`,e.location);return e.values[0]}var nr=new Set(["star","planet","moon","asteroid","comet"]);function z(e){let t=new Set,n=new Map;for(let r of e.objects){if(t.has(r.id))throw new d(`Duplicate object id "${r.id}"`);t.add(r.id),n.set(r.id,r)}for(let r of e.objects)if(r.placement){if((r.placement.mode==="orbit"||r.placement.mode==="surface")&&!t.has(r.placement.target))throw new d(`Unknown placement target "${r.placement.target}" on "${r.id}"`);if(r.placement.mode==="surface"){let i=n.get(r.placement.target);if(!i||!nr.has(i.type))throw new d(`Surface target "${r.placement.target}" on "${r.id}" is not surface-capable`)}r.placement.mode==="at"&&(r.placement.reference.kind==="lagrange"&&rr(r,r.placement.reference,t),r.placement.reference.kind==="anchor"&&ir(r,r.placement.reference,t))}}function rr(e,t,n){if(!n.has(t.primary))throw new d(`Unknown Lagrange reference "${t.primary}" on "${e.id}"`);if(t.secondary&&!n.has(t.secondary))throw new d(`Unknown Lagrange reference "${t.secondary}" on "${e.id}"`)}function ir(e,t,n){if(!n.has(t.objectId))throw new d(`Unknown anchor target "${t.objectId}" on "${e.id}"`)}function vt(e){return{...e}}function D(e,t,n=`${t}.failed`){return e instanceof d?{code:n,severity:"error",source:t,message:e.message,line:e.line,column:e.column}:e instanceof Error?{code:n,severity:"error",source:t,message:e.message}:{code:n,severity:"error",source:t,message:String(e)}}function je(e){let t;try{t=q(e)}catch(r){return{ok:!1,value:null,diagnostics:[D(r,"parse")]}}let n;try{n=C(t)}catch(r){return{ok:!1,value:null,diagnostics:[D(r,"normalize")]}}try{z(n)}catch(r){return{ok:!1,value:null,diagnostics:[D(r,"validate")]}}return{ok:!0,value:{ast:t,document:n},diagnostics:[]}}function It(e){try{return{ok:!0,value:C(e),diagnostics:[]}}catch(t){return{ok:!1,value:null,diagnostics:[D(t,"normalize")]}}}function $t(e){try{return z(e),{ok:!0,value:e,diagnostics:[]}}catch(t){return{ok:!1,value:null,diagnostics:[D(t,"validate")]}}}var ae=1495978707e-1,or=6371,ar=71492,sr=695700,lr=63241.077,cr=206264.806,ur=206264806,At=.68,dr=.2,Lt=28;function H(e,t={}){let n=pr(t),r=n.width,i=n.height,a=n.padding,s=fr(e),o=hr(e,t.projection),l=yr(s,t.scaleModel),c=br(s),u=e.system?.id??null,f=new Map(e.objects.map(h=>[h.id,h])),m=Jr(e.objects,f),p=new Map,b=[],v=[],j=[],A=[],y=[],I=new Map,P=new Map;for(let h of e.objects){let M=h.placement;if(!M){j.push(h);continue}if(M.mode==="orbit"){jt(P,M.target,h);continue}if(M.mode==="surface"){jt(I,M.target,h);continue}if(M.mode==="at"){y.push(h);continue}A.push(h)}let N=A.length>0?r*.42:r/2,$=i/2,_={orbitChildren:P,surfaceChildren:I,objectMap:f,spacingFactor:c,projection:o,scaleModel:l},S=j.find(h=>h.type==="star")??j[0]??null;S&&Ze(S,N,$,0,p,b,v,_);let B=j.filter(h=>h.id!==S?.id);if(B.length>0){let h=Math.min(r,i)*.28*c*l.orbitDistanceMultiplier;B.forEach((M,k)=>{let qe=ce(k,B.length,-Math.PI/2),Y=ue(qe,h,o,1);Ze(M,N+Y.x,$+Y.y,0,p,b,v,_)})}A.forEach((h,M)=>{let k=r-a-140-ii(h.placement?.mode==="free"?h.placement.distance:void 0,l),qe=Math.max(76,(i-a*2-180)/Math.max(1,A.length)*c)*l.freePlacementMultiplier,Y=a+92+M*qe;p.set(h.id,{object:h,x:k,y:Y,radius:Le(h,0,l),sortKey:Se(k,Y,0)}),v.push({object:h,groupId:m.groupIds.get(h.id)??null,x1:k-60,y1:Y,x2:k-18,y2:Y,mode:"free"}),Te(h,p,b,v,_,1)}),y.forEach((h,M)=>{if(p.has(h.id)||!h.placement||h.placement.mode!=="at")return;let k=Zr(h.placement.reference,p,f,M,y.length,r,i,a,_);p.set(h.id,{object:h,x:k.x,y:k.y,radius:Le(h,2,l),sortKey:Se(k.x,k.y,2),anchorX:k.anchorX,anchorY:k.anchorY}),k.anchorX!==void 0&&k.anchorY!==void 0&&v.push({object:h,groupId:m.groupIds.get(h.id)??null,x1:k.anchorX,y1:k.anchorY,x2:k.x,y2:k.y,mode:"at"}),Te(h,p,b,v,_,2)});let F=[...p.values()].map(h=>wr(h,l,m)),we=b.map(h=>vr(h,m.groupIds.get(h.object.id)??null)),ve=v.map(h=>Ir(h)),Ie=$r(F,i,l.labelMultiplier),pt=Or(e,F),jn=kr(we,pt,ve,F,Ie),On=xr(F,we,ve,Ie,m),Tn=jr(e,F),An=Tr(e,o,n.preset,m,f),Ln=zr(r,i,F,we,ve,Ie);return{width:r,height:i,padding:a,renderPreset:n.preset,projection:o,scaleModel:l,title:String(e.system?.title??e.system?.properties.title??e.system?.id??"WorldOrbit")||"WorldOrbit",subtitle:`${Ot(o)} view - ${Ot(s)} layout`,systemId:u,viewMode:o,layoutPreset:s,metadata:{format:e.format,version:e.version,view:o,scale:String(e.system?.properties.scale??s),units:String(e.system?.properties.units??"mixed"),preset:n.preset??"custom"},contentBounds:Ln,layers:jn,groups:On,semanticGroups:Tn,viewpoints:An,objects:F,orbitVisuals:we,relations:pt,leaders:ve,labels:Ie}}function Dt(e,t,n){let r=Me(n),i=Math.cos(r),a=Math.sin(r),s=e.x-t.x,o=e.y-t.y;return{x:t.x+s*i-o*a,y:t.y+s*a+o*i}}function fr(e){switch(String(e.system?.properties.scale??"balanced").toLowerCase()){case"compressed":case"compact":return"compact";case"expanded":case"presentation":return"presentation";default:return"balanced"}}function pr(e){let t=mr(e.preset);return{width:e.width??t.width,height:e.height??t.height,padding:e.padding??t.padding,preset:e.preset??null}}function mr(e){switch(e){case"presentation":return{width:1440,height:900,padding:88};case"atlas-card":return{width:960,height:560,padding:56};case"markdown":return{width:920,height:540,padding:48};default:return{width:1200,height:780,padding:72}}}function hr(e,t){return t==="topdown"||t==="isometric"?t:String(e.system?.properties.view??"topdown").toLowerCase()==="isometric"?"isometric":"topdown"}function yr(e,t){return{...gr(e),...t}}function gr(e){switch(e){case"compact":return{orbitDistanceMultiplier:.84,bodyRadiusMultiplier:.92,labelMultiplier:.9,freePlacementMultiplier:.9,ringThicknessMultiplier:.92,minBodyRadius:4,maxBodyRadius:36};case"presentation":return{orbitDistanceMultiplier:1.2,bodyRadiusMultiplier:1.18,labelMultiplier:1.08,freePlacementMultiplier:1.05,ringThicknessMultiplier:1.16,minBodyRadius:5,maxBodyRadius:48};default:return{orbitDistanceMultiplier:1,bodyRadiusMultiplier:1,labelMultiplier:1,freePlacementMultiplier:1,ringThicknessMultiplier:1,minBodyRadius:4,maxBodyRadius:40}}}function br(e){switch(e){case"compact":return .84;case"presentation":return 1.2;default:return 1}}function wr(e,t,n){let{object:r,x:i,y:a,radius:s,sortKey:o,anchorX:l,anchorY:c}=e,u=r.renderHints?.renderPriority??0;return{renderId:de(r.id),objectId:r.id,object:r,parentId:n.parentIds.get(r.id)??null,ancestorIds:n.ancestorIds.get(r.id)??[],childIds:n.childIds.get(r.id)??[],groupId:n.groupIds.get(r.id)??null,semanticGroupIds:[...r.groups??[]],x:i,y:a,radius:s,visualRadius:ri(r,s,t),sortKey:o+u*.001,anchorX:l,anchorY:c,label:r.id,secondaryLabel:r.type==="structure"?String(r.properties.kind??r.type):r.type,fillColor:ai(r.properties.color),imageHref:typeof r.properties.image=="string"&&r.properties.image.trim()?r.properties.image:void 0,hidden:r.properties.hidden===!0}}function vr(e,t){return{renderId:`${de(e.object.id)}-orbit`,objectId:e.object.id,object:e.object,parentId:e.parentId,groupId:t,semanticGroupIds:[...e.object.groups??[]],kind:e.kind,cx:e.cx,cy:e.cy,radius:e.radius,rx:e.rx,ry:e.ry,rotationDeg:e.rotationDeg,band:e.band,bandThickness:e.bandThickness,frontArcPath:e.frontArcPath,backArcPath:e.backArcPath,hidden:e.object.properties.hidden===!0||e.object.renderHints?.renderOrbit===!1}}function Ir(e){return{renderId:`${de(e.object.id)}-leader-${e.mode}`,objectId:e.object.id,object:e.object,groupId:e.groupId,semanticGroupIds:[...e.object.groups??[]],x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,mode:e.mode,hidden:e.object.properties.hidden===!0}}function $r(e,t,n){let r=[],i=[],a=[...e].filter(s=>!s.hidden&&s.object.renderHints?.renderLabel!==!1).sort((s,o)=>s.sortKey-o.sortKey);for(let s of a){let o=s.y>t*.62?-1:1,l=si(s,n),c=s.y+o*(s.radius+18*n),u=c+o*(16*n),f=kt(s.x,c,u,l,o),m=0;for(;i.some(p=>ti(p,f))&&m<10;)c+=o*14*n,u+=o*14*n,f=kt(s.x,c,u,l,o),m+=1;i.push(f),r.push({renderId:`${s.renderId}-label`,objectId:s.objectId,object:s.object,groupId:s.groupId,semanticGroupIds:[...s.semanticGroupIds],label:s.label,secondaryLabel:s.secondaryLabel,x:s.x,y:c,secondaryY:u,textAnchor:"middle",direction:o<0?"above":"below",hidden:s.hidden})}return r}function kr(e,t,n,r,i){let a=e.filter(o=>!o.hidden&&!!o.backArcPath).map(o=>o.renderId),s=e.filter(o=>!o.hidden).map(o=>o.renderId);return[{id:"background",renderIds:["wo-bg","wo-bg-glow","wo-grid"]},{id:"guides",renderIds:n.filter(o=>!o.hidden).map(o=>o.renderId)},{id:"orbits-back",renderIds:a},{id:"orbits-front",renderIds:s},{id:"relations",renderIds:t.filter(o=>!o.hidden).map(o=>o.renderId)},{id:"objects",renderIds:r.filter(o=>!o.hidden).map(o=>o.renderId)},{id:"labels",renderIds:i.filter(o=>!o.hidden).map(o=>o.renderId)},{id:"metadata",renderIds:["wo-title","wo-subtitle","wo-meta"]}]}function xr(e,t,n,r,i){let a=new Map,s=o=>{if(!o)return null;let l=a.get(o);if(l)return l;let c=i.groupRoots.get(o)??null,u={renderId:o,rootObjectId:c,label:c??o,objectIds:[],orbitIds:[],labelIds:[],leaderIds:[],contentBounds:le(0,0,0,0)};return a.set(o,u),u};for(let o of e){let l=s(o.groupId);l&&!o.hidden&&l.objectIds.push(o.objectId)}for(let o of t){let l=s(o.groupId);l&&!o.hidden&&l.orbitIds.push(o.objectId)}for(let o of n){let l=s(o.groupId);l&&!o.hidden&&l.leaderIds.push(o.objectId)}for(let o of r){let l=s(o.groupId);l&&!o.hidden&&l.labelIds.push(o.objectId)}for(let o of a.values())o.contentBounds=Qr(o,e,t,n,r);return[...a.values()].sort((o,l)=>o.label.localeCompare(l.label))}function jr(e,t){return[...e.groups].map(n=>({id:n.id,label:n.label,summary:n.summary,color:n.color,tags:[...n.tags],hidden:n.hidden,objectIds:t.filter(r=>!r.hidden&&r.semanticGroupIds.includes(n.id)).map(r=>r.objectId)})).sort((n,r)=>n.label.localeCompare(r.label))}function Or(e,t){let n=new Map(t.map(r=>[r.objectId,r]));return e.relations.map(r=>{let i=n.get(r.from),a=n.get(r.to);return{renderId:`${de(r.id)}-relation`,relationId:r.id,relation:r,fromObjectId:r.from,toObjectId:r.to,x1:i?.x??0,y1:i?.y??0,x2:a?.x??0,y2:a?.y??0,hidden:r.hidden||!i||!a||i.hidden||a.hidden}}).sort((r,i)=>r.relation.id.localeCompare(i.relation.id))}function Tr(e,t,n,r,i){let a=Ar(e,t,n),s=new Map;for(let[c,u]of Object.entries(e.system?.info??{})){if(!c.startsWith("viewpoint."))continue;let[f,m,...p]=c.split(".");if(f!=="viewpoint"||!m||p.length===0)continue;let b=Nr(m);if(!b)continue;let v=p.join(".").toLowerCase(),j=s.get(b)??{id:b};Lr(j,v,u,e,t,n,r,i),s.set(b,j)}let o=[...s.values()].map(c=>Dr(c,t,n,i)).filter(Boolean),l=o.findIndex(c=>c.id===a.id);return l>=0?o.splice(l,1,{...a,...o[l],layers:{...a.layers,...o[l].layers},filter:o[l].filter??a.filter,generated:!1}):o.unshift(a),o.sort((c,u)=>c.id==="overview"?-1:u.id==="overview"?1:c.label.localeCompare(u.label))}function Ar(e,t,n){let r=e.system?.title??e.system?.properties.title;return{id:"overview",label:r?`${String(r)} Overview`:"Overview",summary:"Fit the whole system with the current atlas defaults.",objectId:null,selectedObjectId:null,projection:t,preset:n,rotationDeg:0,scale:null,layers:{},filter:null,generated:!0}}function Lr(e,t,n,r,i,a,s,o){let l=n.trim();switch(t){case"label":case"title":l&&(e.label=l);return;case"summary":case"description":l&&(e.summary=l);return;case"focus":case"object":l&&(e.focus=l);return;case"select":case"selection":l&&(e.select=l);return;case"projection":case"view":e.projection=Fr(l)??i;return;case"preset":e.preset=Mr(l)??a;return;case"rotation":case"angle":e.rotationDeg=St(l)??e.rotationDeg??0;return;case"zoom":case"scale":e.scale=Rr(l);return;case"layers":e.layers=Pr(l);return;case"query":e.filter={...e.filter??Oe(),query:l||null};return;case"types":case"objecttypes":e.filter={...e.filter??Oe(),objectTypes:_r(l)};return;case"tags":e.filter={...e.filter??Oe(),tags:Fe(l)};return;case"groups":e.filter={...e.filter??Oe(),groupIds:Er(l,r,s,o)};return}}function Dr(e,t,n,r){let i=e.focus&&r.has(e.focus)?e.focus:null,a=e.select&&r.has(e.select)?e.select:i,s=Sr(e.filter),o=e.label?.trim()||Br(e.id);return{id:e.id,label:o,summary:e.summary?.trim()||Cr(o,i,s),objectId:i,selectedObjectId:a,projection:e.projection??t,preset:e.preset??n,rotationDeg:e.rotationDeg??0,scale:e.scale??null,layers:e.layers??{},filter:s,generated:!1}}function Oe(){return{query:null,objectTypes:[],tags:[],groupIds:[]}}function Sr(e){if(!e)return null;let t={query:e.query?.trim()||null,objectTypes:[...new Set(e.objectTypes)],tags:[...new Set(e.tags)],groupIds:[...new Set(e.groupIds)]};return t.query||t.objectTypes.length>0||t.tags.length>0||t.groupIds.length>0?t:null}function Fr(e){return e.toLowerCase()==="isometric"?"isometric":e.toLowerCase()==="topdown"?"topdown":null}function Mr(e){let t=e.toLowerCase();return t==="diagram"||t==="presentation"||t==="atlas-card"||t==="markdown"?t:null}function St(e){let t=Number(e);return Number.isFinite(t)?t:null}function Rr(e){let t=St(e);return t!==null&&t>0?t:null}function Pr(e){let t={};for(let n of Fe(e)){let r=!n.startsWith("-")&&!n.startsWith("!"),i=n.replace(/^[-!]+/,"").toLowerCase();if(i==="orbits"){t["orbits-back"]=r,t["orbits-front"]=r;continue}(i==="background"||i==="guides"||i==="orbits-back"||i==="orbits-front"||i==="relations"||i==="objects"||i==="labels"||i==="metadata")&&(t[i]=r)}return t}function _r(e){return Fe(e).filter(t=>t==="star"||t==="planet"||t==="moon"||t==="belt"||t==="asteroid"||t==="comet"||t==="ring"||t==="structure"||t==="phenomenon")}function Er(e,t,n,r){return Fe(e).map(i=>t.schemaVersion==="2.1"||t.groups.some(a=>a.id===i)||i.startsWith("wo-")&&i.endsWith("-group")?i:n.groupIds.has(i)?n.groupIds.get(i)??se(i):(r.has(i),se(i)))}function Fe(e){return e.split(/[\s,]+/).map(t=>t.trim()).filter(Boolean)}function Nr(e){return e.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")}function Br(e){return e.split(/[-_]+/).filter(Boolean).map(t=>t[0].toUpperCase()+t.slice(1)).join(" ")}function Cr(e,t,n){let r=[e];return t&&r.push(`focus ${t}`),n?.objectTypes.length&&r.push(n.objectTypes.join("/")),n?.tags.length&&r.push(`tags ${n.tags.join(", ")}`),n?.query&&r.push(`query "${n.query}"`),r.join(" - ")}function zr(e,t,n,r,i,a){let s=Number.POSITIVE_INFINITY,o=Number.POSITIVE_INFINITY,l=Number.NEGATIVE_INFINITY,c=Number.NEGATIVE_INFINITY,u=(f,m)=>{s=Math.min(s,f),o=Math.min(o,m),l=Math.max(l,f),c=Math.max(c,m)};for(let f of r)f.hidden||Ft(f,u);for(let f of i)f.hidden||(u(f.x1,f.y1),u(f.x2,f.y2));for(let f of n)f.hidden||Mt(f,u);for(let f of a)f.hidden||Rt(f,u);return!Number.isFinite(s)||!Number.isFinite(o)?le(0,0,e,t):le(s,o,l,c)}function Ft(e,t){let n=e.bandThickness!==void 0?e.bandThickness/2+4:e.band?10:3;if(e.kind==="circle"&&e.radius!==void 0){t(e.cx-e.radius-n,e.cy-e.radius-n),t(e.cx+e.radius+n,e.cy+e.radius+n);return}let r=e.rx??e.radius??0,i=e.ry??e.radius??0,a=_t(e.cx,e.cy,r,i,e.rotationDeg,0,Math.PI*2,Lt*2);for(let s of a)t(s.x-n,s.y-n),t(s.x+n,s.y+n)}function le(e,t,n,r){return{minX:e,minY:t,maxX:n,maxY:r,width:n-e,height:r-t,centerX:e+(n-e)/2,centerY:t+(r-t)/2}}function Mt(e,t){t(e.x-e.visualRadius-24,e.y-e.visualRadius-16),t(e.x+e.visualRadius+24,e.y+e.visualRadius+36)}function Rt(e,t){let r=li(e.label,e.secondaryLabel,1);t(e.x-r,e.y-18),t(e.x+r,e.y+8),t(e.x-r,e.secondaryY-14),t(e.x+r,e.secondaryY+8)}function Ze(e,t,n,r,i,a,s,o){i.has(e.id)||(i.set(e.id,{object:e,x:t,y:n,radius:Le(e,r,o.scaleModel),sortKey:Se(t,n,r)}),Te(e,i,a,s,o,r+1))}function Te(e,t,n,r,i,a){let s=t.get(e.id);if(!s)return;let o=[...i.orbitChildren.get(e.id)??[]].sort(Vr),l=Ur(o,s.radius,i.spacingFactor,i.scaleModel),c=Yr(o,l);o.forEach((f,m)=>{let p=Wr(f,m,o.length,s,l,c[m]??l.innerPx,i);n.push({object:f,parentId:e.id,kind:p.kind,cx:p.cx,cy:p.cy,radius:p.radius,rx:p.rx,ry:p.ry,rotationDeg:p.rotationDeg,band:p.band,bandThickness:p.bandThickness,frontArcPath:p.frontArcPath,backArcPath:p.backArcPath}),Ze(f,p.objectX,p.objectY,a,t,n,r,i)});let u=[...i.surfaceChildren.get(e.id)??[]];u.forEach((f,m)=>{let p=ce(m,u.length,-Math.PI/3),b=28*i.spacingFactor,v=ue(p,s.radius,i.projection,i.projection==="isometric"?.9:1),j=ue(p,s.radius+b,i.projection,i.projection==="isometric"?.9:1),A=s.x+v.x,y=s.y+v.y,I=s.x+j.x,P=s.y+j.y;t.set(f.id,{object:f,x:I,y:P,radius:Le(f,a+1,i.scaleModel),sortKey:Se(I,P,a+1),anchorX:A,anchorY:y}),r.push({object:f,groupId:i.objectMap.has(f.id)?se(ei(f,i.objectMap)):null,x1:A,y1:y,x2:I,y2:P,mode:"surface"}),Te(f,t,n,r,i,a+1)})}function Vr(e,t){let n=Ae(e),r=Ae(t);return n!==null&&r!==null&&n!==r?n-r:n!==null&&r===null?-1:n===null&&r!==null?1:e.id.localeCompare(t.id)}function Ur(e,t,n,r){let i=e.map(f=>Ae(f)),a=i.filter(f=>f!==null),s=t+56*n*r.orbitDistanceMultiplier,o=(e.length>2?54:64)*n*r.orbitDistanceMultiplier;if(a.length===0)return{metrics:i,minMetric:0,maxMetric:0,metricSpread:0,innerPx:s,stepPx:o,pixelSpread:Math.max(o*Math.max(e.length-1,1),o),minimumGapPx:o*.42};let l=Math.min(...a),c=Math.max(...a),u=c-l;return{metrics:i,minMetric:l,maxMetric:c,metricSpread:u,innerPx:s,stepPx:o,pixelSpread:Math.max(o*Math.max(e.length-1,1),o),minimumGapPx:o*.42}}function Wr(e,t,n,r,i,a,s){let o=e.placement,l=e.type==="belt"||e.type==="ring";if(!o||o.mode!=="orbit"){let S=i.innerPx+t*i.stepPx;return{kind:"circle",cx:r.x,cy:r.y,radius:S,rotationDeg:0,band:l,bandThickness:l?12*s.scaleModel.ringThicknessMultiplier:void 0,objectX:r.x,objectY:r.y-S}}let c=x(typeof o.eccentricity=="number"?o.eccentricity:0,0,.92),u=a,f=Math.max(u*Math.sqrt(1-c*c),u*.18),m=Je(o.inclination)??0,p=s.projection==="isometric"?Math.max(dr,Math.cos(Me(m)))*At:1,b=Math.max(f*p,u*.14),v=Je(o.angle)??0,j=u*c,A=Nt(-j,0,v),y=r.x+A.x,I=r.y+A.y,P=Hr(o.phase,t,n),N=Et(y,I,u,b,v,P),$=s.projection==="topdown"&&c<=1e-4&&Math.abs(v)<=1e-4,_=l?Kr(e,u,i,s.scaleModel):void 0;return{kind:$?"circle":"ellipse",cx:$?r.x:y,cy:$?r.y:I,radius:$?u:void 0,rx:$?void 0:u,ry:$?void 0:b,rotationDeg:v,band:l,bandThickness:_,frontArcPath:s.projection==="isometric"||l?xt(y,I,u,b,v,0,Math.PI):void 0,backArcPath:s.projection==="isometric"||l?xt(y,I,u,b,v,Math.PI,Math.PI*2):void 0,objectX:N.x,objectY:N.y}}function qr(e,t){return t.innerPx+t.stepPx*Gr(Math.max(e,0)+1)}function Yr(e,t){let n=[];return e.forEach((r,i)=>{let a=Ae(r),s=t.innerPx+i*t.stepPx,o=a===null?s:qr(a,t),l=i===0?t.innerPx:(n[i-1]??t.innerPx)+t.minimumGapPx;n.push(Math.max(o,l))}),n}function Ae(e){return!e.placement||e.placement.mode!=="orbit"?null:De(e.placement.semiMajor??e.placement.distance??null)}function Gr(e){return Math.log(e)/Math.log(2)}function Hr(e,t,n){let r=e?Je(e):null;return r!==null?Me(r-90):ce(t,n,-Math.PI/2)}function Kr(e,t,n,r){let i=De(Xe(e.properties.inner)),a=De(Xe(e.properties.outer));if(i!==null&&a!==null){let o=Math.abs(a-i);if(n.metricSpread>0)return x(o/n.metricSpread*n.pixelSpread*r.ringThicknessMultiplier,8,54);let l=Math.max(Math.max(i,a),1e-4);return x(o/l*t*.75*r.ringThicknessMultiplier,8,48)}return(e.type==="belt"?18:12)*r.ringThicknessMultiplier}function Zr(e,t,n,r,i,a,s,o,l){if(e.kind==="lagrange")return Xr(e,t,n,a,s);if(e.kind==="anchor"){let c=t.get(e.objectId);if(c){let u=ce(r,i,Math.PI/5),f=(c.radius+36)*l.scaleModel.labelMultiplier,m=ue(u,f,l.projection,l.projection==="isometric"?.92:1);return{x:c.x+m.x,y:c.y+m.y,anchorX:c.x,anchorY:c.y}}}if(e.kind==="named"){let c=t.get(e.name);if(c){let u=ce(r,i,Math.PI/6),f=(c.radius+36)*l.scaleModel.labelMultiplier,m=ue(u,f,l.projection,l.projection==="isometric"?.92:1);return{x:c.x+m.x,y:c.y+m.y,anchorX:c.x,anchorY:c.y}}}return{x:a-o-170,y:s-o-86-r*58*l.scaleModel.freePlacementMultiplier}}function Xr(e,t,n,r,i){let a=e.secondary?t.get(e.primary):ni(e.primary,t,n),s=t.get(e.secondary??e.primary);if(!a||!s)return{x:r*.7,y:i*.25};let o=s.x-a.x,l=s.y-a.y,c=Math.hypot(o,l)||1,u=o/c,f=l/c,m=-f,p=u,b=x(c*.25,24,68);switch(e.point){case"L1":return{x:s.x-u*b,y:s.y-f*b,anchorX:s.x,anchorY:s.y};case"L2":return{x:s.x+u*b,y:s.y+f*b,anchorX:s.x,anchorY:s.y};case"L3":return{x:a.x-u*b,y:a.y-f*b,anchorX:a.x,anchorY:a.y};case"L4":return{x:s.x+(u*.5-m*.8660254)*b,y:s.y+(f*.5-p*.8660254)*b,anchorX:s.x,anchorY:s.y};case"L5":return{x:s.x+(u*.5+m*.8660254)*b,y:s.y+(f*.5+p*.8660254)*b,anchorX:s.x,anchorY:s.y}}}function Jr(e,t){let n=new Map,r=new Map;for(let c of e){let u=Pt(c,t);if(n.set(c.id,u),u){let f=r.get(u);f?f.push(c.id):r.set(u,[c.id])}r.has(c.id)||r.set(c.id,[])}let i=new Map,a=new Map,s=new Map,o=c=>{let u=i.get(c);if(u)return u;let f=new Set,m=[],p=n.get(c)??null;for(;p&&!f.has(p);)m.push(p),f.add(p),p=n.get(p)??null;return i.set(c,m),m},l=c=>{let u=s.get(a.get(c)??"");if(u)return u;let f=n.get(c)??null,m=t.get(c),p=c;return m?.placement&&m.placement.mode!=="free"&&f&&(p=l(f)),p};for(let c of e){o(c.id);let u=l(c.id),f=se(u);a.set(c.id,f),s.set(f,u)}return{parentIds:n,childIds:r,ancestorIds:i,groupIds:a,groupRoots:s}}function Pt(e,t){let n=e.placement;if(!n)return null;switch(n.mode){case"orbit":case"surface":return t.has(n.target)?n.target:null;case"at":switch(n.reference.kind){case"anchor":return t.has(n.reference.objectId)?n.reference.objectId:null;case"named":return t.has(n.reference.name)?n.reference.name:null;case"lagrange":return n.reference.secondary&&t.has(n.reference.secondary)?n.reference.secondary:t.has(n.reference.primary)?n.reference.primary:null}case"free":return null}}function Qr(e,t,n,r,i){let a=Number.POSITIVE_INFINITY,s=Number.POSITIVE_INFINITY,o=Number.NEGATIVE_INFINITY,l=Number.NEGATIVE_INFINITY,c=(u,f)=>{a=Math.min(a,u),s=Math.min(s,f),o=Math.max(o,u),l=Math.max(l,f)};for(let u of t)!u.hidden&&e.objectIds.includes(u.objectId)&&Mt(u,c);for(let u of n)!u.hidden&&e.orbitIds.includes(u.objectId)&&Ft(u,c);for(let u of r)!u.hidden&&e.leaderIds.includes(u.objectId)&&(c(u.x1,u.y1),c(u.x2,u.y2));for(let u of i)!u.hidden&&e.labelIds.includes(u.objectId)&&Rt(u,c);return!Number.isFinite(a)||!Number.isFinite(s)?le(0,0,0,0):le(a,s,o,l)}function ei(e,t){let n=e,r=new Set;for(;n.placement&&n.placement.mode!=="free"&&!r.has(n.id);){r.add(n.id);let i=Pt(n,t);if(!i)break;let a=t.get(i);if(!a)break;n=a}return n.id}function kt(e,t,n,r,i){return{left:e-r,right:e+r,top:Math.min(t,n)-(i<0?18:12),bottom:Math.max(t,n)+(i<0?8:12)}}function ti(e,t){return!(e.right<t.left||t.right<e.left||e.bottom<t.top||t.bottom<e.top)}function ni(e,t,n){let r=n.get(e);return!r?.placement||r.placement.mode!=="orbit"?t.get(e):t.get(r.placement.target)}function Le(e,t,n){let r=oi(e.properties.radius,n);if(r!==null)return r;let i=n.bodyRadiusMultiplier;switch(e.type){case"star":return x((t===0?28:20)*i,n.minBodyRadius,n.maxBodyRadius);case"planet":return x(12*i,n.minBodyRadius,n.maxBodyRadius);case"moon":return x(7*i,n.minBodyRadius,n.maxBodyRadius);case"belt":return x(5*i,n.minBodyRadius,n.maxBodyRadius);case"asteroid":return x(5*i,n.minBodyRadius,n.maxBodyRadius);case"comet":return x(6*i,n.minBodyRadius,n.maxBodyRadius);case"ring":return x(5*i,n.minBodyRadius,n.maxBodyRadius);case"structure":return x(6*i,n.minBodyRadius,n.maxBodyRadius);case"phenomenon":return x(8*i,n.minBodyRadius,n.maxBodyRadius)}}function ri(e,t,n){let r=typeof e.properties.atmosphere=="string"?4:0;switch(e.type){case"star":return t*2.4;case"phenomenon":return t*1.25;case"structure":return t+2;default:return Math.min(t+r,n.maxBodyRadius+10)}}function De(e){if(!e)return null;switch(e.unit){case"au":return e.value;case"km":return e.value/ae;case"m":return e.value/1e3/ae;case"ly":return e.value*lr;case"pc":return e.value*cr;case"kpc":return e.value*ur;case"re":return e.value*or/ae;case"rj":return e.value*ar/ae;case"sol":return e.value*sr/ae;default:return e.value}}function ii(e,t){let n=De(e??null);return n===null||n<=0?0:x(n*96*t.freePlacementMultiplier,0,420)}function oi(e,t){let n=Xe(e);if(!n)return null;let r;switch(n.unit){case"sol":r=x(n.value*22,14,40);break;case"re":r=x(n.value*10,6,18);break;case"km":r=x(Math.log10(Math.max(n.value,1))*2.6,4,16);break;default:r=x(n.value*4,4,20);break}return x(r*t.bodyRadiusMultiplier,t.minBodyRadius,t.maxBodyRadius)}function Xe(e){return!e||typeof e!="object"||!("value"in e)?null:e}function Je(e){return e&&(e.unit==="deg"||e.unit===null)?e.value:null}function ce(e,t,n){return t<=1?n:n+e*Math.PI*2/t}function xt(e,t,n,r,i,a,s){let o=_t(e,t,n,r,i,a,s,Lt);return o.length===0?"":o.map((l,c)=>`${c===0?"M":"L"} ${Tt(l.x)} ${Tt(l.y)}`).join(" ")}function _t(e,t,n,r,i,a,s,o){let l=[];for(let c=0;c<=o;c+=1){let u=a+(s-a)*c/o;l.push(Et(e,t,n,r,i,u))}return l}function Et(e,t,n,r,i,a){let s=n*Math.cos(a),o=r*Math.sin(a),l=Nt(s,o,i);return{x:e+l.x,y:t+l.y}}function Nt(e,t,n){let r=Me(n);return{x:e*Math.cos(r)-t*Math.sin(r),y:e*Math.sin(r)+t*Math.cos(r)}}function ue(e,t,n,r){let i=n==="isometric"?At*r:r;return{x:Math.cos(e)*t,y:Math.sin(e)*t*i}}function Se(e,t,n){return t*1e3+e+n*.01}function x(e,t,n){return Math.min(Math.max(e,t),n)}function jt(e,t,n){let r=e.get(t);r?r.push(n):e.set(t,[n])}function de(e){return`wo-${e.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")||"object"}`}function se(e){return`${de(e)}-group`}function ai(e){return typeof e=="string"&&e.trim()?e:void 0}function si(e,t){let n=e.label.length*4.6*t+18,r=e.secondaryLabel.length*3.9*t+18;return Math.max(n,r,e.visualRadius+18)}function li(e,t,n){let r=e.length*4.6*n+18,i=t.length*3.9*n+18;return Math.max(r,i,24)}function Ot(e){return e.length>0?e[0].toUpperCase()+e.slice(1):e}function Me(e){return e*Math.PI/180}function Tt(e){return Number.isInteger(e)?String(e):e.toFixed(2)}function fe(e,t={}){let n=H(e,t),r=[],i=di(e,r),a=fi(e,r),s=ui(e,n.renderPreset??t.preset??null,n.projection),o=e.system?ci(e,s,i,a,r,n.renderPreset??t.preset??null):null;return n.viewpoints.some(l=>!l.generated)&&r.push({code:"upgrade.viewpoints.structured",severity:"info",source:"upgrade",message:`Promoted ${n.viewpoints.filter(l=>!l.generated).length} document-defined viewpoint(s) into the 2.0 atlas section.`}),{format:"worldorbit",version:"2.0",schemaVersion:"2.0",sourceVersion:e.version,system:o,groups:structuredClone(e.groups??[]),relations:structuredClone(e.relations??[]),objects:e.objects.map(zt),diagnostics:r}}function Re(e,t={}){return vi(fe(e,t))}function pe(e){let t=e.system?{type:"system",id:e.system.id,title:e.system.title,description:e.system.description,epoch:e.system.epoch,referencePlane:e.system.referencePlane,properties:gi(e.system),info:bi(e.system)}:null;return{format:"worldorbit",version:"1.0",schemaVersion:e.version,system:t,groups:structuredClone(e.groups??[]),relations:structuredClone(e.relations??[]),objects:e.objects.map(zt)}}function Ct(e){return pe(e)}function ci(e,t,n,r,i,a){let s=H(e,{preset:a??void 0,projection:t.view});return{type:"system",id:e.system?.id??"WorldOrbit",title:e.system?.title??(typeof e.system?.properties.title=="string"?e.system.properties.title:null),description:e.system?.description??null,epoch:e.system?.epoch??null,referencePlane:e.system?.referencePlane??null,defaults:t,atlasMetadata:n,viewpoints:s.viewpoints.map(pi),annotations:r}}function ui(e,t,n){return{view:typeof e.system?.properties.view=="string"&&e.system.properties.view.toLowerCase()==="topdown"?"topdown":n,scale:typeof e.system?.properties.scale=="string"?e.system.properties.scale:null,units:typeof e.system?.properties.units=="string"?e.system.properties.units:null,preset:t,theme:typeof e.system?.info["atlas.theme"]=="string"?e.system.info["atlas.theme"]:null}}function di(e,t){let n={};for(let[i,a]of Object.entries(e.system?.info??{}))i.startsWith("viewpoint.")||i.startsWith("annotation.")||(n[i]=a);let r=Object.keys(n);return r.length>0&&t.push({code:"upgrade.atlasMetadata.preserved",severity:"warning",source:"upgrade",message:`Preserved ${r.length} system info entr${r.length===1?"y":"ies"} as atlas metadata in the 2.0 atlas document.`}),n}function fi(e,t){let n=new Map;for(let[r,i]of Object.entries(e.system?.info??{})){if(!r.startsWith("annotation."))continue;let[,a,...s]=r.split(".");if(!a||s.length===0)continue;let o=Bt(a);if(!o)continue;let l=n.get(o)??{id:o};switch(s.join(".").toLowerCase()){case"label":l.label=i;break;case"target":case"object":l.targetObjectId=i.trim()||null;break;case"body":case"text":case"description":l.body=i;break;case"tags":l.tags=hi(i);break}n.set(o,l)}for(let r of e.objects){let i=r.info.description;if(!i)continue;let a=Bt(`${r.id}-notes`);n.has(a)||(n.set(a,{id:a,label:`${r.id} Notes`,targetObjectId:r.id,body:i,tags:Array.isArray(r.properties.tags)?r.properties.tags.filter(s=>typeof s=="string"):[]}),t.push({code:"upgrade.annotation.objectDescription",severity:"info",source:"upgrade",message:`Lifted ${r.id}.info.description into structured atlas annotation "${a}".`,objectId:r.id,field:"description"}))}return[...n.values()].filter(r=>r.body||r.label).map(r=>({id:r.id,label:r.label??yi(r.id),targetObjectId:r.targetObjectId??null,body:r.body??"",tags:r.tags??[],sourceObjectId:r.targetObjectId??null})).sort((r,i)=>r.label.localeCompare(i.label))}function pi(e){return{id:e.id,label:e.label,summary:e.summary,focusObjectId:e.objectId,selectedObjectId:e.selectedObjectId,projection:e.projection,preset:e.preset,zoom:e.scale,rotationDeg:e.rotationDeg,layers:{...e.layers},filter:e.filter?{query:e.filter.query,objectTypes:[...e.filter.objectTypes],tags:[...e.filter.tags],groupIds:[...e.filter.groupIds]}:null}}function zt(e){return{...e,groups:e.groups?[...e.groups]:void 0,resonance:e.resonance?{...e.resonance}:e.resonance,renderHints:e.renderHints?{...e.renderHints}:e.renderHints,deriveRules:e.deriveRules?e.deriveRules.map(t=>({...t})):void 0,validationRules:e.validationRules?e.validationRules.map(t=>({...t})):void 0,lockedFields:e.lockedFields?[...e.lockedFields]:void 0,tolerances:e.tolerances?e.tolerances.map(t=>({field:t.field,value:t.value&&typeof t.value=="object"&&"value"in t.value?{value:t.value.value,unit:t.value.unit}:Array.isArray(t.value)?[...t.value]:t.value})):void 0,typedBlocks:e.typedBlocks?Object.fromEntries(Object.entries(e.typedBlocks).map(([t,n])=>[t,{...n??{}}])):void 0,properties:mi(e.properties),placement:e.placement?structuredClone(e.placement):null,info:{...e.info}}}function mi(e){let t={};for(let[n,r]of Object.entries(e)){if(Array.isArray(r)){t[n]=[...r];continue}if(r&&typeof r=="object"&&"value"in r){t[n]={value:r.value,unit:r.unit};continue}t[n]=r}return t}function hi(e){return e.split(/[\s,]+/).map(t=>t.trim()).filter(Boolean)}function Bt(e){return e.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")}function yi(e){return e.split(/[-_]+/).filter(Boolean).map(t=>t[0].toUpperCase()+t.slice(1)).join(" ")}function gi(e){let t={};return e.title&&(t.title=e.title),t.view=e.defaults.view,e.defaults.scale&&(t.scale=e.defaults.scale),e.defaults.units&&(t.units=e.defaults.units),e.description&&(t.description=e.description),e.epoch&&(t.epoch=e.epoch),e.referencePlane&&(t.referencePlane=e.referencePlane),t}function bi(e){let t={...e.atlasMetadata};e.defaults.theme&&(t["atlas.theme"]=e.defaults.theme);for(let n of e.viewpoints){let r=`viewpoint.${n.id}`;t[`${r}.label`]=n.label,n.summary&&(t[`${r}.summary`]=n.summary),n.focusObjectId&&(t[`${r}.focus`]=n.focusObjectId),n.selectedObjectId&&(t[`${r}.select`]=n.selectedObjectId),n.projection&&(t[`${r}.projection`]=n.projection),n.preset&&(t[`${r}.preset`]=n.preset),n.zoom!==null&&(t[`${r}.zoom`]=String(n.zoom)),n.rotationDeg!==0&&(t[`${r}.rotation`]=String(n.rotationDeg));let i=wi(n.layers);i&&(t[`${r}.layers`]=i),n.filter?.query&&(t[`${r}.query`]=n.filter.query),(n.filter?.objectTypes.length??0)>0&&(t[`${r}.types`]=n.filter?.objectTypes.join(" ")??""),(n.filter?.tags.length??0)>0&&(t[`${r}.tags`]=n.filter?.tags.join(" ")??""),(n.filter?.groupIds.length??0)>0&&(t[`${r}.groups`]=n.filter?.groupIds.join(" ")??"")}for(let n of e.annotations){let r=`annotation.${n.id}`;t[`${r}.label`]=n.label,n.targetObjectId&&(t[`${r}.target`]=n.targetObjectId),t[`${r}.body`]=n.body,n.tags.length>0&&(t[`${r}.tags`]=n.tags.join(" ")),n.sourceObjectId&&(t[`${r}.source`]=n.sourceObjectId)}return t}function wi(e){let t=[],n=e["orbits-front"],r=e["orbits-back"];(n!==void 0||r!==void 0)&&t.push(n!==!1||r!==!1?"orbits":"-orbits");for(let i of["background","guides","relations","objects","labels","metadata"])e[i]!==void 0&&t.push(e[i]?i:`-${i}`);return t.join(" ")}function vi(e){return{...e,version:"2.0-draft",schemaVersion:"2.0-draft"}}var Vt=["title","view","scale","units","kind","class","tags","color","image","hidden","orbit","distance","semiMajor","eccentricity","period","angle","inclination","phase","at","surface","free","radius","mass","density","gravity","temperature","albedo","atmosphere","inner","outer","on","source","cycle"];function Ee(e,t={}){let n=t.schema??"auto";if(n==="2.0"||n==="2.1"||n==="2.0-draft"||e.version==="2.0"||e.version==="2.1"||e.version==="2.0-draft"){if(n==="2.0-draft"){let l=e.version==="2.0-draft"?e:e.version==="2.0"||e.version==="2.1"?{...e,version:"2.0-draft",schemaVersion:"2.0-draft"}:Re(e);return Qe(l)}let o=e.version==="2.0"||e.version==="2.1"?e:e.version==="2.0-draft"?{...e,version:"2.0",schemaVersion:"2.0"}:fe(e);return n==="2.1"&&o.version!=="2.1"?Pe({...o,version:"2.1",schemaVersion:"2.1"}):Pe(o)}let i=[],a=e;a.system&&i.push(...Ii(a.system));let s=[...a.objects].sort(tt);for(let o of s)i.length>0&&i.push(""),i.push(...ki(o));return i.join(`
|
|
2
|
+
`)}function Pe(e){let t=[`schema ${e.version}`,""];e.system&&t.push(...Wt(e.system));for(let r of[...e.groups].sort(_e))t.push(""),t.push(...Kt(r));for(let r of[...e.relations].sort(_e))t.push(""),t.push(...Zt(r));let n=[...e.objects].sort(tt);return n.length>0&&t.at(-1)!==""&&t.push(""),n.forEach((r,i)=>{i>0&&t.push(""),t.push(...qt(r))}),t.join(`
|
|
3
|
+
`)}function Qe(e){let t=e.version==="2.0-draft"?e:{...e,version:"2.0-draft",schemaVersion:"2.0-draft"},n=["schema 2.0-draft",""];t.system&&n.push(...Wt(t.system));for(let i of[...t.groups].sort(_e))n.push(""),n.push(...Kt(i));for(let i of[...t.relations].sort(_e))n.push(""),n.push(...Zt(i));let r=[...t.objects].sort(tt);return r.length>0&&n.at(-1)!==""&&n.push(""),r.forEach((i,a)=>{a>0&&n.push(""),n.push(...qt(i))}),n.join(`
|
|
4
|
+
`)}function Ii(e){return $i("system",e.id,e.properties,null,e.info)}function $i(e,t,n,r,i){let a=[`${e} ${t}`],s=[...Gt(r),...Ht(n)];for(let l of s)a.push(` ${l}`);let o=Object.entries(i).sort(([l],[c])=>l.localeCompare(c));if(o.length>0){s.length>0&&a.push(""),a.push(" info");for(let[l,c]of o)a.push(` ${l} ${w(c)}`)}return a}function Wt(e){let t=[`system ${e.id}`];if(e.title&&t.push(` title ${w(e.title)}`),e.description&&t.push(` description ${w(e.description)}`),e.epoch&&t.push(` epoch ${w(e.epoch)}`),e.referencePlane&&t.push(` referencePlane ${w(e.referencePlane)}`),t.push(""),t.push("defaults"),t.push(` view ${e.defaults.view}`),e.defaults.scale&&t.push(` scale ${w(e.defaults.scale)}`),e.defaults.units&&t.push(` units ${w(e.defaults.units)}`),e.defaults.preset&&t.push(` preset ${e.defaults.preset}`),e.defaults.theme&&t.push(` theme ${w(e.defaults.theme)}`),Object.keys(e.atlasMetadata).length>0){t.push(""),t.push("atlas"),t.push(" metadata");for(let[n,r]of Object.entries(e.atlasMetadata).sort(([i],[a])=>i.localeCompare(a)))t.push(` ${n} ${w(r)}`)}for(let n of e.viewpoints)t.push(""),t.push(...ji(n));for(let n of e.annotations)t.push(""),t.push(...Oi(n));return t}function ki(e){return Yt(e.type,e.id,e)}function qt(e){return Yt(`object ${e.type}`,e.id,e)}function Yt(e,t,n){let r=[`${e} ${t}`],i=[...Gt(n.placement),...Ht(n.properties),...xi(n)];for(let s of i)r.push(` ${s}`);let a=Object.entries(n.info).sort(([s],[o])=>s.localeCompare(o));if(a.length>0){i.length>0&&r.push(""),r.push(" info");for(let[s,o]of a)r.push(` ${s} ${w(o)}`)}for(let s of["climate","habitability","settlement"]){let o=Object.entries(n.typedBlocks?.[s]??{}).sort(([l],[c])=>l.localeCompare(c));if(o.length>0){r.push(""),r.push(` ${s}`);for(let[l,c]of o)r.push(` ${l} ${w(c)}`)}}return r}function Gt(e){if(!e)return[];switch(e.mode){case"orbit":return[`orbit ${e.target}`,...ee("distance",e.distance),...ee("semiMajor",e.semiMajor),...Ti("eccentricity",e.eccentricity),...ee("period",e.period),...ee("angle",e.angle),...ee("inclination",e.inclination),...ee("phase",e.phase)];case"at":return[`at ${Ai(e.reference)}`];case"surface":return[`surface ${e.target}`];case"free":return[`free ${e.distance?et(e.distance):e.descriptor??""}`.trim()]}}function Ht(e){return Object.keys(e).sort(Di).map(t=>`${t} ${Xt(e[t])}`)}function xi(e){let t=[];e.groups?.length&&t.push(`groups ${e.groups.join(" ")}`),e.epoch&&t.push(`epoch ${w(e.epoch)}`),e.referencePlane&&t.push(`referencePlane ${w(e.referencePlane)}`),e.tidalLock!==void 0&&t.push(`tidalLock ${e.tidalLock?"true":"false"}`),e.renderHints?.renderLabel!==void 0&&t.push(`renderLabel ${e.renderHints.renderLabel?"true":"false"}`),e.renderHints?.renderOrbit!==void 0&&t.push(`renderOrbit ${e.renderHints.renderOrbit?"true":"false"}`),e.renderHints?.renderPriority!==void 0&&t.push(`renderPriority ${e.renderHints.renderPriority}`),e.resonance&&t.push(`resonance ${e.resonance.targetObjectId} ${e.resonance.ratio}`);for(let n of e.deriveRules??[])t.push(`derive ${n.field} ${n.strategy}`);for(let n of e.validationRules??[])t.push(`validate ${n.rule}`);e.lockedFields?.length&&t.push(`locked ${e.lockedFields.join(" ")}`);for(let n of e.tolerances??[])t.push(`tolerance ${n.field} ${Xt(n.value)}`);return t}function ji(e){let t=[`viewpoint ${e.id}`,` label ${w(e.label)}`];e.focusObjectId&&t.push(` focus ${e.focusObjectId}`),e.selectedObjectId&&e.selectedObjectId!==e.focusObjectId&&t.push(` select ${e.selectedObjectId}`),e.summary&&t.push(` summary ${w(e.summary)}`),e.projection&&t.push(` projection ${e.projection}`),e.preset&&t.push(` preset ${e.preset}`),e.zoom!==null&&t.push(` zoom ${e.zoom}`),e.rotationDeg!==0&&t.push(` rotation ${e.rotationDeg}`);let n=Li(e.layers);return n.length>0&&t.push(` layers ${n.join(" ")}`),e.filter&&(t.push(" filter"),e.filter.query&&t.push(` query ${w(e.filter.query)}`),e.filter.objectTypes.length>0&&t.push(` objectTypes ${e.filter.objectTypes.join(" ")}`),e.filter.tags.length>0&&t.push(` tags ${e.filter.tags.map(w).join(" ")}`),e.filter.groupIds.length>0&&t.push(` groups ${e.filter.groupIds.join(" ")}`)),t}function Oi(e){let t=[`annotation ${e.id}`,` label ${w(e.label)}`];return e.targetObjectId&&t.push(` target ${e.targetObjectId}`),t.push(` body ${w(e.body)}`),e.tags.length>0&&t.push(` tags ${e.tags.map(w).join(" ")}`),t}function Kt(e){let t=[`group ${e.id}`,` label ${w(e.label)}`];return e.summary&&t.push(` summary ${w(e.summary)}`),e.color&&t.push(` color ${w(e.color)}`),e.tags.length>0&&t.push(` tags ${e.tags.map(w).join(" ")}`),e.hidden&&t.push(" hidden true"),t}function Zt(e){let t=[`relation ${e.id}`];return e.from&&t.push(` from ${w(e.from)}`),e.to&&t.push(` to ${w(e.to)}`),e.kind&&t.push(` kind ${w(e.kind)}`),e.label&&t.push(` label ${w(e.label)}`),e.summary&&t.push(` summary ${w(e.summary)}`),e.tags.length>0&&t.push(` tags ${e.tags.map(w).join(" ")}`),e.color&&t.push(` color ${w(e.color)}`),e.hidden&&t.push(" hidden true"),t}function Xt(e){return Array.isArray(e)?e.map(t=>w(t)).join(" "):typeof e=="boolean"?e?"true":"false":typeof e=="number"?String(e):typeof e=="string"?w(e):et(e)}function et(e){return`${e.value}${e.unit??""}`}function ee(e,t){return t?[`${e} ${et(t)}`]:[]}function Ti(e,t){return t===void 0?[]:[`${e} ${t}`]}function Ai(e){switch(e.kind){case"lagrange":return e.secondary?`${e.primary}-${e.secondary}:${e.point}`:`${e.primary}:${e.point}`;case"anchor":return`${e.objectId}:${e.anchor}`;case"named":return e.name}}function Li(e){let t=[],n=e["orbits-front"],r=e["orbits-back"];(n!==void 0||r!==void 0)&&t.push(n!==!1||r!==!1?"orbits":"-orbits");for(let i of["background","guides","relations","objects","labels","metadata"])e[i]!==void 0&&t.push(e[i]?i:`-${i}`);return t}function Di(e,t){let n=Vt.indexOf(e),r=Vt.indexOf(t);return n===-1&&r===-1?e.localeCompare(t):n===-1?1:r===-1?-1:n-r}function tt(e,t){let n=Ut(e.type),r=Ut(t.type);return n!==r?n-r:e.id.localeCompare(t.id)}function _e(e,t){return e.id.localeCompare(t.id)}function Ut(e){switch(e){case"star":return 0;case"planet":return 1;case"moon":return 2;case"belt":return 3;case"asteroid":return 4;case"comet":return 5;case"ring":return 6;case"structure":return 7;case"phenomenon":return 8}}function w(e){return!/\s/.test(e)&&!e.includes('"')?e:`"${e.replaceAll("\\","\\\\").replaceAll('"','\\"')}"`}var Jt=/^(-?\d+(?:\.\d+)?)(kpc|min|mj|rj|ky|my|gy|au|km|me|re|pc|ly|deg|sol|K|m|s|h|d|y)?$/,Si=new Map([["true",!0],["false",!1],["yes",!0],["no",!1]]),Fi=/^[A-Za-z][A-Za-z0-9+.-]*:/;function he(e){return e.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")}function Ne(e){return e.split(/[-_]+/).filter(Boolean).map(t=>t[0].toUpperCase()+t.slice(1)).join(" ")}function nt(e,t,n){let r=e.match(Jt);if(!r)throw d.fromLocation(`Invalid unit value "${e}"`,t);let i={value:Number(r[1]),unit:r[2]??null};if(n){let a=L(n);if(a?.unitFamily&&!oe(a.unitFamily,i.unit))throw d.fromLocation(`Unit "${i.unit??"none"}" is not valid for "${n}"`,t)}return i}function rt(e){let t=e.match(Jt);return t?{value:Number(t[1]),unit:t[2]??null}:null}function Be(e,t,n){let r=Number(e);if(!Number.isFinite(r))throw d.fromLocation(`Invalid numeric value "${e}" for "${t}"`,n);return r}function K(e,t,n){let r=Si.get(e.toLowerCase());if(r===void 0)throw d.fromLocation(`Invalid boolean value "${e}" for "${t}"`,n);return r}function Qt(e,t){if(/^[A-Za-z0-9._-]+-[A-Za-z0-9._-]+:L\d+$/i.test(e))throw d.fromLocation(`Invalid special position "${e}"`,t);let n=e.match(/^([A-Za-z0-9._-]+)-([A-Za-z0-9._-]+):(L[1-5])$/);if(n)return{kind:"lagrange",primary:n[1],secondary:n[2],point:n[3]};let r=e.match(/^([A-Za-z0-9._-]+):(L[1-5])$/);if(r)return{kind:"lagrange",primary:r[1],secondary:null,point:r[2]};if(/^[A-Za-z0-9._-]+:L\d+$/i.test(e))throw d.fromLocation(`Invalid special position "${e}"`,t);let i=e.match(/^([A-Za-z0-9._-]+):([A-Za-z0-9._-]+)$/);return i?{kind:"anchor",objectId:i[1],anchor:i[2]}:{kind:"named",name:e}}function Mi(e,t){if(!e)throw d.fromLocation('Field "image" must not be empty',t);if(e.startsWith("//"))throw d.fromLocation('Field "image" must use a relative path, root-relative path, or an http/https URL',t);let n=e.match(Fi);if(!n)return;let r=n[0].slice(0,-1).toLowerCase();if(r!=="http"&&r!=="https")throw d.fromLocation(`Field "image" does not support the "${r}" scheme`,t)}function en(e,t,n){let r=L(e);if(!r)throw d.fromLocation(`Unknown field "${e}"`,n);if(r.arity==="single"&&t.length!==1)throw d.fromLocation(`Field "${e}" expects exactly one value`,n);switch(r.kind){case"list":return t;case"boolean":return K(me(t,e,n),e,n);case"number":return Be(me(t,e,n),e,n);case"unit":return nt(me(t,e,n),n,e);case"string":{let i=t.join(" ").trim();return e==="image"&&Mi(i,n),i}}}function it(e,t,n){let r=L(e);if(!r)throw d.fromLocation(`Unknown field "${e}"`,n);if(!r.objectTypes.includes(t))throw d.fromLocation(`Field "${e}" is not valid on "${t}"`,n)}function me(e,t,n){if(e.length!==1)throw d.fromLocation(`Field "${t}" expects exactly one value`,n);return e[0]}var Ri=new Set(["star","planet","moon","asteroid","comet"]),Pi=332946.0487,_i=1047.3486,Ce=1495978707e-1,Ei=6371,Ni=695700,Bi=63241.077,Ci=206264.806,zi=206264806;function ye(e,t){let n=[],r=new Map(e.objects.map(s=>[s.id,s])),i=new Set(e.groups.map(s=>s.id));e.system||n.push(O("validate.system.required","Atlas documents must declare exactly one system."));let a=new Map;for(let[s,o]of[["group",e.groups.map(l=>l.id)],["viewpoint",e.system?.viewpoints.map(l=>l.id)??[]],["annotation",e.system?.annotations.map(l=>l.id)??[]],["relation",e.relations.map(l=>l.id)],["object",e.objects.map(l=>l.id)]])for(let l of o){let c=a.get(l);c?n.push(O("validate.id.duplicate",`Duplicate ${s} id "${l}" already used by ${c}.`)):a.set(l,s)}for(let s of e.relations)Vi(s,r,n);for(let s of e.system?.viewpoints??[])Ui(s.filter,i,t,n,s.id);for(let s of e.objects)Wi(s,e.system,r,i,n);return n}function Vi(e,t,n){e.from?t.has(e.from)||n.push(O("validate.relation.from.unknown",`Unknown relation source "${e.from}" on "${e.id}".`)):n.push(O("validate.relation.from.required",`Relation "${e.id}" is missing a "from" target.`)),e.to?t.has(e.to)||n.push(O("validate.relation.to.unknown",`Unknown relation target "${e.to}" on "${e.id}".`)):n.push(O("validate.relation.to.required",`Relation "${e.id}" is missing a "to" target.`)),e.kind||n.push(O("validate.relation.kind.required",`Relation "${e.id}" is missing a "kind" value.`))}function Ui(e,t,n,r,i){if(!(!e||n!=="2.1"))for(let a of e.groupIds)t.has(a)||r.push(V("validate.viewpoint.group.unknown",`Unknown group "${a}" in viewpoint "${i}".`))}function Wi(e,t,n,r,i){let a=e.placement,s=a?.mode==="orbit"?a:null,o=a?.mode==="orbit"?n.get(a.target)??null:null;if(e.groups)for(let l of e.groups)r.has(l)||i.push(V("validate.group.unknown",`Unknown group "${l}" on "${e.id}".`,e.id,"groups"));if(s&&(n.has(s.target)||i.push(O("validate.orbit.target.unknown",`Unknown placement target "${s.target}" on "${e.id}".`,e.id,"orbit")),s.distance&&s.semiMajor&&i.push(O("validate.orbit.distanceConflict",`Object "${e.id}" cannot declare both "distance" and "semiMajor".`,e.id,"distance")),s.phase&&!e.epoch&&!t?.epoch&&i.push(V("validate.phase.epochMissing",`Object "${e.id}" sets "phase" without an object or system epoch.`,e.id,"phase")),s.inclination&&!e.referencePlane&&!t?.referencePlane&&i.push(V("validate.inclination.referencePlaneMissing",`Object "${e.id}" sets "inclination" without an object or system reference plane.`,e.id,"inclination")),s.period&&!nn(o?.properties.mass)&&i.push(V("validate.period.massMissing",`Object "${e.id}" sets "period" but its central mass cannot be derived.`,e.id,"period"))),a?.mode==="surface"){let l=n.get(a.target);l?Ri.has(l.type)||i.push(O("validate.surface.target.invalid",`Surface target "${a.target}" on "${e.id}" is not surface-capable.`,e.id,"surface")):i.push(O("validate.surface.target.unknown",`Unknown placement target "${a.target}" on "${e.id}".`,e.id,"surface"))}if(a?.mode==="at"&&(e.type!=="structure"&&e.type!=="phenomenon"&&i.push(O("validate.at.objectType",`Only structures and phenomena may use "at" placement; found "${e.type}" on "${e.id}".`,e.id,"at")),qi(e,n,i)||i.push(O("validate.at.target.unknown",`Unknown at-reference target "${a.target}" on "${e.id}".`,e.id,"at"))),e.resonance){let l=n.get(e.resonance.targetObjectId);l?(e.placement?.mode!=="orbit"||l.placement?.mode!=="orbit"||e.placement.target!==l.placement.target)&&i.push(V("validate.resonance.orbitMismatch",`Resonance target "${e.resonance.targetObjectId}" on "${e.id}" does not share a compatible orbital parent.`,e.id,"resonance")):i.push(O("validate.resonance.target.unknown",`Unknown resonance target "${e.resonance.targetObjectId}" on "${e.id}".`,e.id,"resonance"))}for(let l of e.deriveRules??[]){if(l.field!=="period"||l.strategy!=="kepler"){i.push(V("validate.derive.unsupported",`Unsupported derive rule "${l.field} ${l.strategy}" on "${e.id}".`,e.id,"derive"));continue}let c=tn(e,o);if(c===null){i.push(V("validate.derive.inputsMissing",`Object "${e.id}" requests "derive period kepler" but lacks enough input data.`,e.id,"derive"));continue}s?.period||i.push(Ki("validate.derive.period.available",`Object "${e.id}" can derive a Kepler period of ${Hi(c)}.`,e.id,"derive"))}for(let l of e.validationRules??[]){if(l.rule!=="kepler"){i.push(V("validate.rule.unsupported",`Unsupported validation rule "${l.rule}" on "${e.id}".`,e.id,"validate"));continue}let c=rn(s?.period),u=tn(e,o);if(c===null||u===null)continue;let f=Gi(e,"period");Math.abs(c-u)>f&&i.push(O("validate.kepler.mismatch",`Object "${e.id}" fails Kepler validation for "period".`,e.id,"validate"))}}function qi(e,t,n){let r=e.placement?.mode==="at"?e.placement.reference:null;return r?r.kind==="named"?t.has(r.name):r.kind==="anchor"?t.has(r.objectId)?!0:(n.push(O("validate.anchor.target.unknown",`Unknown anchor target "${r.objectId}" on "${e.id}".`,e.id,"at")),!1):t.has(r.primary)?r.secondary&&!t.has(r.secondary)?(n.push(O("validate.lagrange.secondary.unknown",`Unknown Lagrange reference "${r.secondary}" on "${e.id}".`,e.id,"at")),!1):!0:(n.push(O("validate.lagrange.primary.unknown",`Unknown Lagrange reference "${r.primary}" on "${e.id}".`,e.id,"at")),!1):!0}function tn(e,t){let n=e.placement;if(!n||n.mode!=="orbit")return null;let r=Yi(n.semiMajor??n.distance),i=nn(t?.properties.mass);return r===null||i===null||i<=0?null:Math.sqrt(r**3/i)*365.25}function Yi(e){if(!e)return null;switch(e.unit){case null:case"au":return e.value;case"km":return e.value/Ce;case"m":return e.value/(Ce*1e3);case"ly":return e.value*Bi;case"pc":return e.value*Ci;case"kpc":return e.value*zi;case"re":return e.value*Ei/Ce;case"sol":return e.value*Ni/Ce;default:return null}}function nn(e){if(!e||typeof e!="object"||!("value"in e))return null;let t=e;switch(t.unit){case null:case"sol":return t.value;case"me":return t.value/Pi;case"mj":return t.value/_i;default:return null}}function rn(e){if(!e)return null;switch(e.unit){case null:case"d":return e.value;case"s":return e.value/86400;case"min":return e.value/1440;case"h":return e.value/24;case"y":return e.value*365.25;case"ky":return e.value*365250;case"my":return e.value*36525e4;case"gy":return e.value*36525e7;default:return null}}function Gi(e,t){let n=e.tolerances?.find(r=>r.field===t)?.value;return typeof n=="number"?n:n&&typeof n=="object"&&"value"in n?rn(n)??0:0}function Hi(e){return`${Math.round(e*100)/100}d`}function O(e,t,n,r){return{code:e,severity:"error",source:"validate",message:t,objectId:n,field:r}}function V(e,t,n,r){return{code:e,severity:"warning",source:"validate",message:t,objectId:n,field:r}}function Ki(e,t,n,r){return{code:e,severity:"info",source:"validate",message:t,objectId:n,field:r}}var Zi=new Set(["climate","habitability","settlement"]),ze=new Map;for(let e of["orbit","distance","semiMajor","eccentricity","period","angle","inclination","phase","at","surface","free","kind","class","culture","tags","color","image","hidden","radius","mass","density","gravity","temperature","albedo","atmosphere","inner","outer","on","source","cycle"]){let t=L(e);t&&ze.set(e,{key:e,version:"2.0",inlineMode:t.arity==="multiple"?"multiple":"single",allowRepeat:!1,legacySchema:t})}for(let e of[{key:"groups",inlineMode:"multiple",allowRepeat:!1},{key:"epoch",inlineMode:"single",allowRepeat:!1},{key:"referencePlane",inlineMode:"single",allowRepeat:!1},{key:"tidalLock",inlineMode:"single",allowRepeat:!1},{key:"renderLabel",inlineMode:"single",allowRepeat:!1},{key:"renderOrbit",inlineMode:"single",allowRepeat:!1},{key:"renderPriority",inlineMode:"single",allowRepeat:!1},{key:"resonance",inlineMode:"pair",allowRepeat:!1},{key:"derive",inlineMode:"pair",allowRepeat:!0},{key:"validate",inlineMode:"single",allowRepeat:!0},{key:"locked",inlineMode:"multiple",allowRepeat:!1},{key:"tolerance",inlineMode:"pair",allowRepeat:!0}])ze.set(e.key,{key:e.key,version:"2.1",inlineMode:e.inlineMode,allowRepeat:e.allowRepeat});var Xi=new Set(ze.keys());function Ve(e){return sn(e)}function an(e){return sn(e,"2.0-draft")}function sn(e,t){let n=Ro(e),r=n.source.split(/\r?\n/),i=[],a=!1,s="2.0",o=null,l=null,c=[],u=[],f=[],m=!1,p=!1,b=new Set,v=new Set,j=new Set,A=new Set;for(let $=0;$<r.length;$++){let _=r[$],S=$+1;if(!_.trim())continue;let B=$e(_),F=G(_.slice(B),{line:S,columnOffset:B});if(F.length!==0){if(!a){s=Ji(F,S),a=!0,n.comments.length>0&&s!=="2.1"&&i.push({code:"parse.schema21.commentCompatibility",severity:"warning",source:"parse",message:`Comments require schema 2.1; parsed in compatibility mode because the document header is "schema ${s}".`,line:n.comments[0].line,column:n.comments[0].column});continue}if(B===0){l=Qi(F,S,s,i,o,c,u,f,b,v,j,A,{sawDefaults:m,sawAtlas:p}),l.kind==="system"?o=l.system:l.kind==="defaults"?m=!0:l.kind==="atlas"&&(p=!0);continue}if(!l)throw new d("Indented line without parent atlas section",S,B+1);ao(l,B,F,S)}}if(!a)throw new d('Missing required atlas schema header "schema 2.0"');let y=c.map($=>ko($,s,i)),I=t??(s==="2.0-draft"?"2.0":s),P={format:"worldorbit",sourceVersion:"1.0",system:o,groups:u,relations:f,objects:y,diagnostics:i};if(I==="2.0-draft"){let $={...P,version:"2.0-draft",schemaVersion:"2.0-draft"};return $.diagnostics.push(...ye($,s)),$}let N={...P,version:I,schemaVersion:I};return s==="2.0-draft"&&N.diagnostics.push({code:"load.schema.deprecatedDraft",severity:"warning",source:"upgrade",message:'Source header "schema 2.0-draft" is deprecated; canonical v2 documents now use "schema 2.0".'}),N.diagnostics.push(...ye(N,s)),N}function Ji(e,t){if(e.length!==2||e[0].value.toLowerCase()!=="schema"||!["2.0-draft","2.0","2.1"].includes(e[1].value.toLowerCase()))throw new d('Expected atlas header "schema 2.0", "schema 2.1", or legacy "schema 2.0-draft"',t,e[0]?.column??1);let n=e[1].value.toLowerCase();return n==="2.1"?"2.1":n==="2.0-draft"?"2.0-draft":"2.0"}function Qi(e,t,n,r,i,a,s,o,l,c,u,f,m){switch(e[0]?.value.toLowerCase()){case"system":if(i)throw new d('Atlas section "system" may only appear once',t,e[0].column);return eo(e,t,n,r);case"defaults":if(!i)throw new d('Atlas section "defaults" requires a preceding system declaration',t,e[0].column);if(m.sawDefaults)throw new d('Atlas section "defaults" may only appear once',t,e[0].column);return{kind:"defaults",system:i,seenFields:new Set};case"atlas":if(!i)throw new d('Atlas section "atlas" requires a preceding system declaration',t,e[0].column);if(m.sawAtlas)throw new d('Atlas section "atlas" may only appear once',t,e[0].column);return{kind:"atlas",system:i,inMetadata:!1,metadataIndent:null};case"viewpoint":if(!i)throw new d('Atlas section "viewpoint" requires a preceding system declaration',t,e[0].column);return to(e,t,i,l);case"annotation":if(!i)throw new d('Atlas section "annotation" requires a preceding system declaration',t,e[0].column);return no(e,t,i,c);case"group":return U(n,r,"group",{line:t,column:e[0].column}),ro(e,t,s,u);case"relation":return U(n,r,"relation",{line:t,column:e[0].column}),io(e,t,o,f);case"object":return oo(e,t,n,r,a);default:throw new d(`Unknown atlas section "${e[0]?.value??""}"`,t,e[0]?.column??1)}}function eo(e,t,n,r){if(e.length!==2)throw new d("Invalid atlas system declaration",t,e[0]?.column??1);return{kind:"system",system:{type:"system",id:e[1].value,title:null,description:null,epoch:null,referencePlane:null,defaults:{view:"topdown",scale:null,units:null,preset:null,theme:null},atlasMetadata:{},viewpoints:[],annotations:[]},sourceSchemaVersion:n,diagnostics:r,seenFields:new Set}}function to(e,t,n,r){if(e.length!==2)throw new d("Invalid viewpoint declaration",t,e[0]?.column??1);let i=he(e[1].value);if(!i)throw new d("Viewpoint id must not be empty",t,e[1].column);if(r.has(i))throw new d(`Duplicate viewpoint id "${i}"`,t,e[1].column);let a={id:i,label:Ne(i),summary:"",focusObjectId:null,selectedObjectId:null,projection:n.defaults.view,preset:n.defaults.preset,zoom:null,rotationDeg:0,layers:{},filter:null};return n.viewpoints.push(a),r.add(i),{kind:"viewpoint",viewpoint:a,seenFields:new Set,inFilter:!1,filterIndent:null,seenFilterFields:new Set}}function no(e,t,n,r){if(e.length!==2)throw new d("Invalid annotation declaration",t,e[0]?.column??1);let i=he(e[1].value);if(!i)throw new d("Annotation id must not be empty",t,e[1].column);if(r.has(i))throw new d(`Duplicate annotation id "${i}"`,t,e[1].column);let a={id:i,label:Ne(i),targetObjectId:null,body:"",tags:[],sourceObjectId:null};return n.annotations.push(a),r.add(i),{kind:"annotation",annotation:a,seenFields:new Set}}function ro(e,t,n,r){if(e.length!==2)throw new d("Invalid group declaration",t,e[0]?.column??1);let i=he(e[1].value);if(!i)throw new d("Group id must not be empty",t,e[1].column);if(r.has(i))throw new d(`Duplicate group id "${i}"`,t,e[1].column);let a={id:i,label:Ne(i),summary:"",color:null,tags:[],hidden:!1};return n.push(a),r.add(i),{kind:"group",group:a,seenFields:new Set}}function io(e,t,n,r){if(e.length!==2)throw new d("Invalid relation declaration",t,e[0]?.column??1);let i=he(e[1].value);if(!i)throw new d("Relation id must not be empty",t,e[1].column);if(r.has(i))throw new d(`Duplicate relation id "${i}"`,t,e[1].column);let a={id:i,from:"",to:"",kind:"",label:null,summary:null,tags:[],color:null,hidden:!1};return n.push(a),r.add(i),{kind:"relation",relation:a,seenFields:new Set}}function oo(e,t,n,r,i){if(e.length<3)throw new d("Invalid atlas object declaration",t,e[0]?.column??1);let a=e[1],s=e[2],o=a.value;if(!ie.has(o)||o==="system")throw new d(`Unknown object type "${a.value}"`,t,a.column);let l={objectType:o,id:s.value,fields:Io(e.slice(3),t,o,n,r),infoEntries:[],typedBlockEntries:{},location:{line:t,column:a.column}};return i.push(l),{kind:"object",objectNode:l,sourceSchemaVersion:n,diagnostics:r,activeBlock:null,blockIndent:null,seenInfoKeys:new Set,seenTypedBlockKeys:{}}}function ao(e,t,n,r){switch(e.kind){case"system":so(e,n,r);return;case"defaults":lo(e,n,r);return;case"atlas":co(e,t,n,r);return;case"viewpoint":uo(e,t,n,r);return;case"annotation":po(e,n,r);return;case"group":mo(e,n,r);return;case"relation":ho(e,n,r);return;case"object":yo(e,t,n,r);return}}function so(e,t,n){let r=X(t,e.seenFields,n),i=T(t,n);switch(r){case"title":e.system.title=i;return;case"description":U(e.sourceSchemaVersion,e.diagnostics,r,{line:n,column:t[0].column}),e.system.description=i;return;case"epoch":U(e.sourceSchemaVersion,e.diagnostics,r,{line:n,column:t[0].column}),e.system.epoch=i;return;case"referenceplane":U(e.sourceSchemaVersion,e.diagnostics,"referencePlane",{line:n,column:t[0].column}),e.system.referencePlane=i;return;default:throw new d(`Unknown system atlas field "${t[0].value}"`,n,t[0].column)}}function lo(e,t,n){let r=X(t,e.seenFields,n),i=T(t,n);switch(r){case"view":e.system.defaults.view=ln(i,n,t[0].column);return;case"scale":e.system.defaults.scale=i;return;case"units":e.system.defaults.units=i;return;case"preset":e.system.defaults.preset=cn(i,n,t[0].column);return;case"theme":e.system.defaults.theme=i;return;default:throw new d(`Unknown defaults field "${t[0].value}"`,n,t[0].column)}}function co(e,t,n,r){if(e.inMetadata&&t<=(e.metadataIndent??0)&&(e.inMetadata=!1,e.metadataIndent=null),e.inMetadata){let i=dn(n,r,"Invalid atlas metadata entry");if(i.key in e.system.atlasMetadata)throw new d(`Duplicate atlas metadata key "${i.key}"`,r,n[0].column);e.system.atlasMetadata[i.key]=i.value;return}if(n.length===1&&n[0].value.toLowerCase()==="metadata"){e.inMetadata=!0,e.metadataIndent=t;return}throw new d(`Unknown atlas field "${n[0].value}"`,r,n[0].column)}function uo(e,t,n,r){if(e.inFilter&&t<=(e.filterIndent??0)&&(e.inFilter=!1,e.filterIndent=null),e.inFilter){fo(e,n,r);return}if(n.length===1&&n[0].value.toLowerCase()==="filter"){if(e.seenFields.has("filter"))throw new d('Duplicate viewpoint field "filter"',r,n[0].column);e.seenFields.add("filter"),e.inFilter=!0,e.filterIndent=t;return}let i=X(n,e.seenFields,r),a=T(n,r);switch(i){case"label":e.viewpoint.label=a;return;case"summary":e.viewpoint.summary=a;return;case"focus":e.viewpoint.focusObjectId=a;return;case"select":e.viewpoint.selectedObjectId=a;return;case"projection":e.viewpoint.projection=ln(a,r,n[0].column);return;case"preset":e.viewpoint.preset=cn(a,r,n[0].column);return;case"zoom":e.viewpoint.zoom=wo(a,r,n[0].column,"zoom");return;case"rotation":e.viewpoint.rotationDeg=un(a,r,n[0].column,"rotation");return;case"layers":e.viewpoint.layers=bo(n.slice(1),r);return;default:throw new d(`Unknown viewpoint field "${n[0].value}"`,r,n[0].column)}}function fo(e,t,n){let r=X(t,e.seenFilterFields,n),i=e.viewpoint.filter??vo();switch(r){case"query":i.query=T(t,n);break;case"objecttypes":i.objectTypes=go(t.slice(1),n);break;case"tags":i.tags=Z(t.slice(1),n,"tags");break;case"groups":i.groupIds=Z(t.slice(1),n,"groups");break;default:throw new d(`Unknown viewpoint filter field "${t[0].value}"`,n,t[0].column)}e.viewpoint.filter=i}function po(e,t,n){switch(X(t,e.seenFields,n)){case"label":e.annotation.label=T(t,n);return;case"target":e.annotation.targetObjectId=T(t,n);return;case"body":e.annotation.body=T(t,n);return;case"tags":e.annotation.tags=Z(t.slice(1),n,"tags");return;default:throw new d(`Unknown annotation field "${t[0].value}"`,n,t[0].column)}}function mo(e,t,n){switch(X(t,e.seenFields,n)){case"label":e.group.label=T(t,n);return;case"summary":e.group.summary=T(t,n);return;case"color":e.group.color=T(t,n);return;case"tags":e.group.tags=Z(t.slice(1),n,"tags");return;case"hidden":e.group.hidden=K(T(t,n),"hidden",{line:n,column:t[0].column});return;default:throw new d(`Unknown group field "${t[0].value}"`,n,t[0].column)}}function ho(e,t,n){switch(X(t,e.seenFields,n)){case"from":e.relation.from=T(t,n);return;case"to":e.relation.to=T(t,n);return;case"kind":e.relation.kind=T(t,n);return;case"label":e.relation.label=T(t,n);return;case"summary":e.relation.summary=T(t,n);return;case"tags":e.relation.tags=Z(t.slice(1),n,"tags");return;case"color":e.relation.color=T(t,n);return;case"hidden":e.relation.hidden=K(T(t,n),"hidden",{line:n,column:t[0].column});return;default:throw new d(`Unknown relation field "${t[0].value}"`,n,t[0].column)}}function yo(e,t,n,r){if(e.activeBlock&&t<=(e.blockIndent??0)&&(e.activeBlock=null,e.blockIndent=null),n.length===1){let i=n[0].value.toLowerCase();if(i==="info"||Zi.has(i)){i!=="info"&&U(e.sourceSchemaVersion,e.diagnostics,i,{line:r,column:n[0].column}),e.activeBlock=i,e.blockIndent=t;return}}if(e.activeBlock){let i=dn(n,r,`Invalid ${e.activeBlock} entry`);if(e.activeBlock==="info"){if(e.seenInfoKeys.has(i.key))throw new d(`Duplicate info key "${i.key}"`,r,n[0].column);e.seenInfoKeys.add(i.key),e.objectNode.infoEntries.push(i);return}let a=e.activeBlock,s=e.seenTypedBlockKeys[a]??(e.seenTypedBlockKeys[a]=new Set);if(s.has(i.key))throw new d(`Duplicate ${a} key "${i.key}"`,r,n[0].column);s.add(i.key),(e.objectNode.typedBlockEntries[a]??(e.objectNode.typedBlockEntries[a]=[])).push(i);return}e.objectNode.fields.push($o(n,r,e.objectNode.objectType,e.sourceSchemaVersion,e.diagnostics))}function X(e,t,n){if(e.length<2)throw new d("Invalid atlas field line",n,e[0]?.column??1);let r=e[0].value.toLowerCase();if(t.has(r))throw new d(`Duplicate atlas field "${e[0].value}"`,n,e[0].column);return t.add(r),r}function T(e,t){if(e.length<2)throw new d("Missing value for atlas field",t,e[0]?.column??1);return e.slice(1).map(n=>n.value).join(" ").trim()}function go(e,t){return Z(e,t,"objectTypes").filter(n=>n==="star"||n==="planet"||n==="moon"||n==="belt"||n==="asteroid"||n==="comet"||n==="ring"||n==="structure"||n==="phenomenon")}function bo(e,t){let n={};for(let r of Z(e,t,"layers")){let i=!r.startsWith("-")&&!r.startsWith("!"),a=r.replace(/^[-!]+/,"").toLowerCase();if(a==="orbits"){n["orbits-back"]=i,n["orbits-front"]=i;continue}(a==="background"||a==="guides"||a==="orbits-back"||a==="orbits-front"||a==="relations"||a==="objects"||a==="labels"||a==="metadata")&&(n[a]=i)}return n}function Z(e,t,n){if(e.length===0)throw new d(`Missing value for atlas field "${n}"`,t,1);let r=e.map(i=>i.value).filter(Boolean);if(r.length===0)throw new d(`Missing value for atlas field "${n}"`,t,e[0]?.column??1);return r}function ln(e,t,n){let r=e.toLowerCase();if(r!=="topdown"&&r!=="isometric")throw new d(`Unknown projection "${e}"`,t,n);return r}function cn(e,t,n){let r=e.toLowerCase();if(r==="diagram"||r==="presentation"||r==="atlas-card"||r==="markdown")return r;throw new d(`Unknown render preset "${e}"`,t,n)}function wo(e,t,n,r){let i=un(e,t,n,r);if(i<=0)throw new d(`Field "${r}" must be greater than zero`,t,n);return i}function un(e,t,n,r){let i=Number(e);if(!Number.isFinite(i))throw new d(`Invalid numeric value "${e}" for "${r}"`,t,n);return i}function vo(){return{query:null,objectTypes:[],tags:[],groupIds:[]}}function Io(e,t,n,r,i){let a=[],s=0;for(;s<e.length;){let o=e[s],l=ge(o.value);if(!l)throw new d(`Unknown field "${o.value}"`,t,o.column);l.version==="2.1"&&U(r,i,o.value,{line:t,column:o.column}),s++;let c=[];if(l.inlineMode==="single"){let u=e[s];u&&(c.push(u),s++)}else if(l.inlineMode==="pair")for(let u=0;u<2;u++){let f=e[s];if(!f)break;c.push(f),s++}else for(;s<e.length&&!Xi.has(e[s].value);)c.push(e[s]),s++;if(c.length===0)throw new d(`Missing value for field "${o.value}"`,t,o.column);a.push({type:"field",key:o.value,values:c.map(u=>u.value),location:{line:t,column:o.column}})}return pn(a,n),a}function $o(e,t,n,r,i){if(e.length<2)throw new d("Invalid field line",t,e[0]?.column??1);let a=ge(e[0].value);if(!a)throw new d(`Unknown field "${e[0].value}"`,t,e[0].column);a.version==="2.1"&&U(r,i,e[0].value,{line:t,column:e[0].column});let s={type:"field",key:e[0].value,values:e.slice(1).map(o=>o.value),location:{line:t,column:e[0].column}};return pn([s],n),s}function dn(e,t,n){if(e.length<2)throw new d(n,t,e[0]?.column??1);return{type:"info-entry",key:e[0].value,value:e.slice(1).map(r=>r.value).join(" "),location:{line:t,column:e[0].column}}}function ko(e,t,n){let r=xo(e.fields),i=jo(e.objectType,r),a=Oo(e.objectType,r),s=Fo(r.get("groups")?.[0]),o=on(r.get("epoch")?.[0]),l=on(r.get("referencePlane")?.[0]),c=r.has("tidalLock")?K(E(r.get("tidalLock")[0]),"tidalLock",r.get("tidalLock")[0].location):void 0,u=r.has("resonance")?Lo(r.get("resonance")[0]):void 0,f=Ao(r),m=r.get("derive")?.map(I=>Do(I)),p=r.get("validate")?.map(I=>({rule:E(I)})),b=r.has("locked")?[...new Set(r.get("locked").flatMap(I=>I.values))]:void 0,v=r.get("tolerance")?.map(I=>So(I)),j=To(e.typedBlockEntries),A=fn(e.infoEntries,"info"),y={type:e.objectType,id:e.id,properties:a,placement:i,info:A};return s.length>0&&(y.groups=s),o&&(y.epoch=o),l&&(y.referencePlane=l),c!==void 0&&(y.tidalLock=c),u&&(y.resonance=u),f&&(y.renderHints=f),m?.length&&(y.deriveRules=m),p?.length&&(y.validationRules=p),b?.length&&(y.lockedFields=b),v?.length&&(y.tolerances=v),j&&Object.keys(j).length>0&&(y.typedBlocks=j),t!=="2.1"&&(y.groups||y.epoch||y.referencePlane||y.tidalLock!==void 0||y.resonance||y.renderHints||y.deriveRules?.length||y.validationRules?.length||y.lockedFields?.length||y.tolerances?.length||y.typedBlocks)&&U(t,n,e.id,e.location),y}function xo(e){let t=new Map;for(let n of e){let r=ge(n.key);if(!r)throw d.fromLocation(`Unknown field "${n.key}"`,n.location);if(!r.allowRepeat&&t.has(n.key))throw d.fromLocation(`Duplicate field "${n.key}"`,n.location);let i=t.get(n.key)??[];i.push(n),t.set(n.key,i)}return t}function jo(e,t){let n=t.get("orbit")?.[0],r=t.get("at")?.[0],i=t.get("surface")?.[0],a=t.get("free")?.[0];if([n,r,i,a].filter(Boolean).length>1){let o=n??r??i??a;throw d.fromLocation("Object has multiple placement modes",o?.location)}if(n)return{mode:"orbit",target:E(n),distance:te(t.get("distance")?.[0],"distance"),semiMajor:te(t.get("semiMajor")?.[0],"semiMajor"),eccentricity:Mo(t.get("eccentricity")?.[0],"eccentricity"),period:te(t.get("period")?.[0],"period"),angle:te(t.get("angle")?.[0],"angle"),inclination:te(t.get("inclination")?.[0],"inclination"),phase:te(t.get("phase")?.[0],"phase")};if(r){let o=E(r);return{mode:"at",target:o,reference:Qt(o,r.location)}}if(i)return{mode:"surface",target:E(i)};if(a){let o=E(a),l=rt(o);return{mode:"free",distance:l??void 0,descriptor:l?void 0:o}}return null}function Oo(e,t){let n={};for(let[r,i]of t.entries()){let a=i[0],s=ge(r);!a||!s?.legacySchema||s.legacySchema.placement||(it(r,e,a.location),n[r]=en(r,a.values,a.location))}return n}function fn(e,t){let n={};for(let r of e){if(r.key in n)throw d.fromLocation(`Duplicate ${t} key "${r.key}"`,r.location);n[r.key]=r.value}return n}function To(e){let t={};for(let n of Object.keys(e)){let r=e[n];r?.length&&(t[n]=fn(r,n))}return t}function Ao(e){let t={},n=e.get("renderLabel")?.[0],r=e.get("renderOrbit")?.[0],i=e.get("renderPriority")?.[0];return n&&(t.renderLabel=K(E(n),"renderLabel",n.location)),r&&(t.renderOrbit=K(E(r),"renderOrbit",r.location)),i&&(t.renderPriority=Be(E(i),"renderPriority",i.location)),Object.keys(t).length>0?t:void 0}function Lo(e){if(e.values.length!==2)throw d.fromLocation('Field "resonance" expects "<targetObjectId> <ratio>"',e.location);let t=e.values[1];if(!/^\d+:\d+$/.test(t))throw d.fromLocation(`Invalid resonance ratio "${t}"`,e.location);return{targetObjectId:e.values[0],ratio:t}}function Do(e){if(e.values.length!==2)throw d.fromLocation('Field "derive" expects "<field> <strategy>"',e.location);return{field:e.values[0],strategy:e.values[1]}}function So(e){if(e.values.length!==2)throw d.fromLocation('Field "tolerance" expects "<field> <value>"',e.location);let t=e.values[1],n=rt(t),r=Number(t);return{field:e.values[0],value:n??(Number.isFinite(r)?r:t)}}function Fo(e){return e?[...new Set(e.values)]:[]}function on(e){return e&&e.values.join(" ").trim()||null}function te(e,t){return e?nt(E(e),e.location,t):void 0}function Mo(e,t){return e?Be(E(e),t,e.location):void 0}function E(e){return me(e.values,e.key,e.location)}function ge(e){return ze.get(e)}function pn(e,t){for(let n of e){let r=ge(n.key);if(!r)throw d.fromLocation(`Unknown field "${n.key}"`,n.location);if(r.legacySchema){it(n.key,t,n.location);continue}if((n.key==="renderLabel"||n.key==="renderOrbit"||n.key==="tidalLock")&&n.values.length!==1)throw d.fromLocation(`Field "${n.key}" expects exactly one value`,n.location)}}function U(e,t,n,r){e!=="2.1"&&t.push({code:"parse.schema21.featureCompatibility",severity:"warning",source:"parse",message:`Feature "${n}" requires schema 2.1; parsed in compatibility mode because the document header is "schema ${e}".`,line:r.line,column:r.column})}function Ro(e){let t=[...e],n=[],r=!1,i=!1,a=null,s=1,o=1;for(let l=0;l<t.length;l++){let c=t[l],u=t[l+1];if(i){if(c==="*"&&u==="/"){t[l]=" ",t[l+1]=" ",i=!1,a=null,l++,o+=2;continue}c!==`
|
|
5
|
+
`&&c!=="\r"&&(t[l]=" "),c===`
|
|
6
|
+
`?(s++,o=1):o++;continue}if(!r&&c==="/"&&u==="*"){n.push({kind:"block",line:s,column:o}),t[l]=" ",t[l+1]=" ",i=!0,a={line:s,column:o},l++,o+=2;continue}if(!r&&c==="#"&&!Po(t,l)){n.push({kind:"line",line:s,column:o}),t[l]=" ";let f=l+1;for(;f<t.length&&t[f]!==`
|
|
7
|
+
`&&t[f]!=="\r";)t[f]=" ",f++;o+=f-l,l=f-1;continue}c==='"'&&t[l-1]!=="\\"&&(r=!r),c===`
|
|
8
|
+
`?(s++,o=1):o++}if(i)throw d.fromLocation("Unclosed block comment",a??void 0);return{source:t.join(""),comments:n}}function Po(e,t){let n=t+1,r=0;for(;n<e.length&&/[0-9a-f]/i.test(e[n]??"");)n++,r++;if(![3,4,6,8].includes(r))return!1;let i=e[n];return i===void 0||i===" "||i===" "||i==="\r"||i===`
|
|
9
|
+
`}function ot(e="WorldOrbit",t="2.0"){return{format:"worldorbit",version:t,schemaVersion:t,sourceVersion:"1.0",system:{type:"system",id:e,title:e,description:null,epoch:null,referencePlane:null,defaults:{view:"topdown",scale:null,units:null,preset:null,theme:null},atlasMetadata:{},viewpoints:[],annotations:[]},groups:[],relations:[],objects:[],diagnostics:[]}}function Ue(e){return structuredClone(e)}function mn(e){let t=[{kind:"system"},{kind:"defaults"}];if(e.system){for(let n of Object.keys(e.system.atlasMetadata).sort())t.push({kind:"metadata",key:n});for(let n of[...e.system.viewpoints].sort(ne))t.push({kind:"viewpoint",id:n.id});for(let n of[...e.system.annotations].sort(ne))t.push({kind:"annotation",id:n.id})}for(let n of[...e.groups].sort(ne))t.push({kind:"group",id:n.id});for(let n of[...e.relations].sort(ne))t.push({kind:"relation",id:n.id});for(let n of[...e.objects].sort(ne))t.push({kind:"object",id:n.id});return t}function at(e,t){switch(t.kind){case"system":return e.system;case"defaults":return e.system?.defaults??null;case"metadata":return t.key?e.system?.atlasMetadata[t.key]??null:null;case"group":return t.id?wn(e,t.id):null;case"object":return t.id?bn(e,t.id):null;case"viewpoint":return t.id?In(e.system,t.id):null;case"annotation":return t.id?$n(e.system,t.id):null;case"relation":return t.id?vn(e,t.id):null}}function st(e,t,n){let r=Ue(e),i=ut(r);switch(t.kind){case"system":return r.system=n,r;case"defaults":return i.defaults={...i.defaults,...n},r;case"metadata":if(!t.key)throw new Error('Metadata updates require a "key" value.');return n==null||n===""?delete i.atlasMetadata[t.key]:i.atlasMetadata[t.key]=String(n),r;case"group":if(!t.id)throw new Error('Group updates require an "id" value.');return be(r.groups,n),r;case"object":if(!t.id)throw new Error('Object updates require an "id" value.');return be(r.objects,n),r;case"viewpoint":if(!t.id)throw new Error('Viewpoint updates require an "id" value.');return be(i.viewpoints,n),r;case"annotation":if(!t.id)throw new Error('Annotation updates require an "id" value.');return be(i.annotations,n),r;case"relation":if(!t.id)throw new Error('Relation updates require an "id" value.');return be(r.relations,n),r}}function hn(e,t,n){return st(e,t,n(at(e,t)))}function yn(e,t){let n=Ue(e),r=ut(n);switch(t.kind){case"metadata":return t.key&&delete r.atlasMetadata[t.key],n;case"object":return t.id&&(n.objects=n.objects.filter(i=>i.id!==t.id)),n;case"group":return t.id&&(n.groups=n.groups.filter(i=>i.id!==t.id)),n;case"viewpoint":return t.id&&(r.viewpoints=r.viewpoints.filter(i=>i.id!==t.id)),n;case"annotation":return t.id&&(r.annotations=r.annotations.filter(i=>i.id!==t.id)),n;case"relation":return t.id&&(n.relations=n.relations.filter(i=>i.id!==t.id)),n;default:return n}}function lt(e,t){return t.map(n=>({diagnostic:n,path:ct(e,n)}))}function ct(e,t){if(t.objectId&&bn(e,t.objectId))return{kind:"object",id:t.objectId};if(t.field?.startsWith("group.")){let n=t.field.split(".");if(n[1]&&wn(e,n[1]))return{kind:"group",id:n[1]}}if(t.field?.startsWith("viewpoint.")){let n=t.field.split(".");if(n[1]&&In(e.system,n[1]))return{kind:"viewpoint",id:n[1]}}if(t.field?.startsWith("annotation.")){let n=t.field.split(".");if(n[1]&&$n(e.system,n[1]))return{kind:"annotation",id:n[1]}}if(t.field?.startsWith("relation.")){let n=t.field.split(".");if(n[1]&&vn(e,n[1]))return{kind:"relation",id:n[1]}}return t.field&&t.field in ut(e).atlasMetadata?{kind:"metadata",key:t.field}:null}function gn(e){let t=[...e.diagnostics,...ye(e,e.version)];return lt(e,t)}function ut(e){return e.system||(e.system=ot().system),e.system}function bn(e,t){return e.objects.find(n=>n.id===t)??null}function wn(e,t){return e.groups.find(n=>n.id===t)??null}function vn(e,t){return e.relations.find(n=>n.id===t)??null}function In(e,t){return e?.viewpoints.find(n=>n.id===t)??null}function $n(e,t){return e?.annotations.find(n=>n.id===t)??null}function be(e,t){let n=e.findIndex(r=>r.id===t.id);if(n===-1){e.push(t),e.sort(ne);return}e[n]=t}function ne(e,t){return e.id.localeCompare(t.id)}var _o=/^schema\s+2(?:\.0|\.1)?$/i,Eo=/^schema\s+2\.1$/i,No=/^schema\s+2\.0-draft$/i;function dt(e){for(let t of Bo(e).split(/\r?\n/)){let n=t.trim();if(n)return No.test(n)?"2.0-draft":Eo.test(n)?"2.1":_o.test(n)?"2.0":"1.0"}return"1.0"}function Bo(e){let t=[...e],n=!1,r=!1;for(let i=0;i<t.length;i++){let a=t[i],s=t[i+1];if(r){if(a==="*"&&s==="/"){t[i]=" ",t[i+1]=" ",r=!1,i++;continue}a!==`
|
|
10
|
+
`&&a!=="\r"&&(t[i]=" ");continue}if(!n&&a==="/"&&s==="*"){t[i]=" ",t[i+1]=" ",r=!0,i++;continue}if(!n&&a==="#"){t[i]=" ";let o=i+1;for(;o<t.length&&t[o]!==`
|
|
11
|
+
`&&t[o]!=="\r";)t[o]=" ",o++;i=o-1;continue}a==='"'&&t[i-1]!=="\\"&&(n=!n)}return t.join("")}function We(e){let t=ft(e);if(!t.ok||!t.value){let n=t.diagnostics[0];throw new d(n?.message??"Failed to load WorldOrbit source",n?.line,n?.column)}return t.value}function ft(e){let t=dt(e);if(t==="2.0"||t==="2.0-draft"||t==="2.1")return Co(e,t);let n;try{n=q(e)}catch(i){return{ok:!1,value:null,diagnostics:[D(i,"parse")]}}let r;try{r=C(n)}catch(i){return{ok:!1,value:null,diagnostics:[D(i,"normalize")]}}try{z(r)}catch(i){return{ok:!1,value:null,diagnostics:[D(i,"validate")]}}return{ok:!0,value:{schemaVersion:t,ast:n,document:r,atlasDocument:null,draftDocument:null,diagnostics:[]},diagnostics:[]}}function Co(e,t){let n;try{n=Ve(e)}catch(s){return{ok:!1,value:null,diagnostics:[D(s,"parse","load.atlas.failed")]}}let r=[...n.diagnostics];if(r.some(s=>s.severity==="error"))return{ok:!1,value:null,diagnostics:r};let i;try{i=pe(n)}catch(s){return{ok:!1,value:null,diagnostics:[D(s,"normalize","load.atlas.materialize.failed")]}}return{ok:!0,value:{schemaVersion:t,ast:null,document:i,atlasDocument:n,draftDocument:n,diagnostics:r},diagnostics:r}}var zo=/^```worldorbit(?:\s+(.*))?\s*$/;function kn(e){let t=e.split(/\r?\n/),n=[],r=!1,i=null,a=0,s=[];return t.forEach((o,l)=>{let c=l+1;if(!r){let u=o.match(zo);u&&(r=!0,i=u[1]??null,a=c,s=[]);return}if(o.trim()==="```"){n.push({source:s.join(`
|
|
12
|
+
`),info:i,startLine:a,endLine:c}),r=!1,i=null,a=0,s=[];return}s.push(o)}),n}function xn(e){let t=q(e),n=C(t);return z(n),{ast:t,document:n}}function Vo(e){let t=xn(e);return{...t,scene:H(t.document)}}function Uo(e){return We(e)}function Wo(e){return je(e)}function qo(e,t={}){return Ee(e,t)}return Pn(Yo);})();
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";var WorldOrbitMarkdown=(()=>{var Ne=Object.defineProperty;var ur=Object.getOwnPropertyDescriptor;var dr=Object.getOwnPropertyNames;var fr=Object.prototype.hasOwnProperty;var pr=(e,t)=>{for(var r in t)Ne(e,r,{get:t[r],enumerable:!0})},mr=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of dr(t))!fr.call(e,o)&&o!==r&&Ne(e,o,{get:()=>t[o],enumerable:!(n=ur(t,o))||n.enumerable});return e};var hr=e=>mr(Ne({},"__esModule",{value:!0}),e);var Qi={};pr(Qi,{rehypeWorldOrbit:()=>rr,remarkWorldOrbit:()=>er,renderWorldOrbitBlock:()=>ee,renderWorldOrbitError:()=>st});var d=class e extends Error{line;column;constructor(t,r,n){let o=r===void 0?"":` (line ${r}${n===void 0?"":`, column ${n}`})`;super(`${t}${o}`),this.name="WorldOrbitError",this.line=r,this.column=n}static fromLocation(t,r){return new e(t,r?.line,r?.column)}};var te=["system","star","planet","moon","belt","asteroid","comet","ring","structure","phenomenon"],F=te.filter(e=>e!=="system"),gr=["star","planet","moon","asteroid","comet","structure","phenomenon"],ct=["structure","phenomenon"],z=["star","planet","moon","belt","asteroid","comet","ring","structure","phenomenon"],br=["star","planet","moon","belt","asteroid","comet","ring","structure","phenomenon"];function w(e,t){return{key:e,...t}}var we=new Set(te),ut=new Map([w("orbit",{kind:"string",placement:!0,arity:"single",objectTypes:z}),w("distance",{kind:"unit",placement:!0,arity:"single",objectTypes:z,unitFamily:"distance"}),w("semiMajor",{kind:"unit",placement:!0,arity:"single",objectTypes:z,unitFamily:"distance"}),w("eccentricity",{kind:"number",placement:!0,arity:"single",objectTypes:z}),w("period",{kind:"unit",placement:!0,arity:"single",objectTypes:z,unitFamily:"duration"}),w("angle",{kind:"unit",placement:!0,arity:"single",objectTypes:z,unitFamily:"angle"}),w("inclination",{kind:"unit",placement:!0,arity:"single",objectTypes:z,unitFamily:"angle"}),w("phase",{kind:"unit",placement:!0,arity:"single",objectTypes:z,unitFamily:"angle"}),w("at",{kind:"string",placement:!0,arity:"single",objectTypes:ct}),w("surface",{kind:"string",placement:!0,arity:"single",objectTypes:ct}),w("free",{kind:"string",placement:!0,arity:"single",objectTypes:br}),w("kind",{kind:"string",placement:!1,arity:"single",objectTypes:F}),w("class",{kind:"string",placement:!1,arity:"single",objectTypes:F}),w("culture",{kind:"string",placement:!1,arity:"single",objectTypes:F}),w("tags",{kind:"list",placement:!1,arity:"multiple",objectTypes:te}),w("color",{kind:"string",placement:!1,arity:"single",objectTypes:te}),w("image",{kind:"string",placement:!1,arity:"single",objectTypes:gr}),w("hidden",{kind:"boolean",placement:!1,arity:"single",objectTypes:te}),w("radius",{kind:"unit",placement:!1,arity:"single",objectTypes:F,unitFamily:"radius"}),w("mass",{kind:"unit",placement:!1,arity:"single",objectTypes:F,unitFamily:"mass"}),w("density",{kind:"unit",placement:!1,arity:"single",objectTypes:F,unitFamily:"generic"}),w("gravity",{kind:"unit",placement:!1,arity:"single",objectTypes:F,unitFamily:"generic"}),w("temperature",{kind:"unit",placement:!1,arity:"single",objectTypes:F,unitFamily:"generic"}),w("albedo",{kind:"number",placement:!1,arity:"single",objectTypes:F}),w("atmosphere",{kind:"string",placement:!1,arity:"single",objectTypes:["planet","moon","asteroid","comet","phenomenon"]}),w("inner",{kind:"unit",placement:!1,arity:"single",objectTypes:["belt","ring","phenomenon"],unitFamily:"distance"}),w("outer",{kind:"unit",placement:!1,arity:"single",objectTypes:["belt","ring","phenomenon"],unitFamily:"distance"}),w("view",{kind:"string",placement:!1,arity:"single",objectTypes:["system"]}),w("scale",{kind:"string",placement:!1,arity:"single",objectTypes:["system"]}),w("units",{kind:"string",placement:!1,arity:"single",objectTypes:["system"]}),w("title",{kind:"string",placement:!1,arity:"single",objectTypes:["system"]}),w("on",{kind:"string",placement:!1,arity:"single",objectTypes:F}),w("source",{kind:"string",placement:!1,arity:"single",objectTypes:F}),w("cycle",{kind:"unit",placement:!1,arity:"single",objectTypes:F,unitFamily:"duration"})].map(e=>[e.key,e])),yr=new Set(ut.keys());function T(e){return ut.get(e)}function dt(e){return yr.has(e)}function ft(e,t){return e.objectTypes.includes(t)}function ve(e,t){switch(e){case"distance":return t===null||["au","km","m","ly","pc","kpc","re","sol"].includes(t);case"radius":return t===null||["km","m","re","rj","sol"].includes(t);case"mass":return t===null||["me","mj","sol"].includes(t);case"duration":return t===null||["s","min","h","d","y","ky","my","gy"].includes(t);case"angle":return t===null||t==="deg";case"generic":return!0}}function re(e,t={}){let r=[],n=t.columnOffset??0,o="",i=null,a=!1,s=!1,l=null,c=()=>{i!==null&&(r.push({value:o,column:i,quoted:a}),o="",i=null,a=!1)};for(let u=0;u<e.length;u++){let f=e[u],h=n+u+1;if(s&&f==="\\"){let p=e[u+1];if(p==='"'||p==="\\"){o+=p,u++;continue}}if(f==='"'){s?s=!1:(i===null&&(i=h),a=!0,l=h,s=!0);continue}if(!s&&/\s/.test(f)){c();continue}i===null&&(i=h),o+=f}if(s)throw new d("Unclosed quote in line",t.line,l??n+e.length);return c(),r}function $e(e){return e.match(/^\s*/)?.[0].length??0}function ne(e){let t=e.split(/\r?\n/),r=[],n=null,o=!1,i=null;for(let a=0;a<t.length;a++){let s=t[a],l=a+1;if(!s.trim())continue;let c=$e(s),u=re(s.slice(c),{line:l,columnOffset:c});if(u.length!==0){if(c===0){o=!1,i=null;let f=wr(u,l);r.push(f),n=f;continue}if(!n)throw new d("Indented line without parent object",l,c+1);if(u.length===1&&u[0].value==="info"){o=!0,i=c;continue}o&&c<=(i??0)&&(o=!1),o?n.infoEntries.push(Ir(u,l)):n.blockFields.push($r(u,l))}}return{type:"document",objects:r}}function wr(e,t){if(e.length<2)throw new d("Invalid object declaration",t,e[0]?.column??1);let[r,n,...o]=e;if(!we.has(r.value))throw new d(`Unknown object type "${r.value}"`,t,r.column);return{type:"object",objectType:r.value,name:n.value,inlineFields:vr(o,t),blockFields:[],infoEntries:[],location:{line:t,column:r.column}}}function vr(e,t){let r=[],n=0;for(;n<e.length;){let o=e[n],i=T(o.value);if(!i)throw new d(`Unknown field "${o.value}"`,t,o.column);n++;let a=[];if(i.arity==="multiple")for(;n<e.length&&!dt(e[n].value);)a.push(e[n]),n++;else{let s=e[n];s&&(a.push(s),n++)}if(a.length===0)throw new d(`Missing value for field "${o.value}"`,t,o.column);r.push({type:"field",key:o.value,values:a.map(s=>s.value),location:{line:t,column:o.column}})}return r}function $r(e,t){if(e.length<2)throw new d("Invalid field line",t,e[0]?.column??1);if(!T(e[0].value))throw new d(`Unknown field "${e[0].value}"`,t,e[0].column);return{type:"field",key:e[0].value,values:e.slice(1).map(r=>r.value),location:{line:t,column:e[0].column}}}function Ir(e,t){if(e.length<2)throw new d("Invalid info entry",t,e[0]?.column??1);return{type:"info-entry",key:e[0].value,value:e.slice(1).map(r=>r.value).join(" "),location:{line:t,column:e[0].column}}}var pt=/^(-?\d+(?:\.\d+)?)(kpc|min|mj|rj|ky|my|gy|au|km|me|re|pc|ly|deg|sol|K|m|s|h|d|y)?$/,xr=new Map([["true",!0],["false",!1],["yes",!0],["no",!1]]),kr=/^[A-Za-z][A-Za-z0-9+.-]*:/;function oe(e){let t=null,r=[];for(let n of e.objects){let o=Sr(n);if(n.objectType==="system"){if(t)throw d.fromLocation("Only one system object is allowed",n.location);t=o}else r.push(o)}return{format:"worldorbit",version:"1.0",schemaVersion:"1.0",system:t,groups:[],relations:[],objects:r}}function Sr(e){let t=[...e.inlineFields,...e.blockFields];jr(e.objectType,t);let r=Or(t),n=Ar(e.objectType,r),o=Tr(r),i=Dr(e.infoEntries);return e.objectType==="system"?{type:"system",id:e.name,title:typeof o.title=="string"?o.title:null,description:null,epoch:null,referencePlane:null,properties:o,info:i}:{type:e.objectType,id:e.name,properties:o,placement:n,info:i}}function jr(e,t){for(let r of t){let n=T(r.key);if(!n)throw d.fromLocation(`Unknown field "${r.key}"`,r.location);if(!ft(n,e))throw d.fromLocation(`Field "${r.key}" is not valid on "${e}"`,r.location);if(n.arity==="single"&&r.values.length!==1)throw d.fromLocation(`Field "${r.key}" expects exactly one value`,r.location)}}function Or(e){let t=new Map;for(let r of e){if(t.has(r.key))throw d.fromLocation(`Duplicate field "${r.key}"`,r.location);t.set(r.key,r)}return t}function Ar(e,t){let r=t.has("orbit"),n=t.has("at"),o=t.has("surface"),i=t.has("free"),a=[r,n,o,i].filter(Boolean).length;if(a>1){let s=t.get("orbit")??t.get("at")??t.get("surface")??t.get("free");throw d.fromLocation("Object has multiple placement modes",s?.location)}if(e==="system"&&a>0)throw d.fromLocation("System objects cannot declare placement",[...t.values()][0]?.location);if(r)return{mode:"orbit",target:Ie(t,"orbit"),distance:Z(t,"distance"),semiMajor:Z(t,"semiMajor"),eccentricity:Vr(t,"eccentricity"),period:Z(t,"period"),angle:Z(t,"angle"),inclination:Z(t,"inclination"),phase:Z(t,"phase")};if(n){let s=xe(t,"at"),l=Ie(t,"at");return{mode:"at",target:l,reference:Fr(l,s.location)}}if(o)return{mode:"surface",target:Ie(t,"surface")};if(i){let s=Ie(t,"free"),l=Er(s);return{mode:"free",distance:l??void 0,descriptor:l?void 0:s}}return null}function Tr(e){let t={};for(let[r,n]of e.entries()){let o=T(r);if(!(!o||o.placement))switch(o.kind){case"list":t[r]=n.values;break;case"boolean":t[r]=Pr(n);break;case"number":t[r]=ht(J(n),r,n.location);break;case"unit":t[r]=mt(J(n),n.location,r);break;case"string":t[r]=Mr(r,n);break}}return t}function Mr(e,t){let r=t.values.join(" ").trim();return e==="image"&&Lr(r,t.location),r}function Lr(e,t){if(!e)throw d.fromLocation('Field "image" must not be empty',t);if(e.startsWith("//"))throw d.fromLocation('Field "image" must use a relative path, root-relative path, or an http/https URL',t);let r=e.match(kr);if(!r)return;let n=r[0].slice(0,-1).toLowerCase();if(n!=="http"&&n!=="https")throw d.fromLocation(`Field "image" does not support the "${n}" scheme`,t)}function Dr(e){let t={};for(let r of e){if(r.key in t)throw d.fromLocation(`Duplicate info key "${r.key}"`,r.location);t[r.key]=r.value}return t}function Fr(e,t){if(/^[A-Za-z0-9._-]+-[A-Za-z0-9._-]+:L\d+$/i.test(e))throw d.fromLocation(`Invalid special position "${e}"`,t);let r=e.match(/^([A-Za-z0-9._-]+)-([A-Za-z0-9._-]+):(L[1-5])$/);if(r)return{kind:"lagrange",primary:r[1],secondary:r[2],point:r[3]};let n=e.match(/^([A-Za-z0-9._-]+):(L[1-5])$/);if(n)return{kind:"lagrange",primary:n[1],secondary:null,point:n[2]};if(/^[A-Za-z0-9._-]+:L\d+$/i.test(e))throw d.fromLocation(`Invalid special position "${e}"`,t);let o=e.match(/^([A-Za-z0-9._-]+):([A-Za-z0-9._-]+)$/);return o?{kind:"anchor",objectId:o[1],anchor:o[2]}:{kind:"named",name:e}}function mt(e,t,r){let n=e.match(pt);if(!n)throw d.fromLocation(`Invalid unit value "${e}"`,t);let o={value:Number(n[1]),unit:n[2]??null};if(r){let i=T(r);if(i?.unitFamily&&!ve(i.unitFamily,o.unit))throw d.fromLocation(`Unit "${o.unit??"none"}" is not valid for "${r}"`,t)}return o}function Er(e){let t=e.match(pt);return t?{value:Number(t[1]),unit:t[2]??null}:null}function Z(e,t){if(!e.has(t))return;let r=xe(e,t);return mt(J(r),r.location,t)}function Vr(e,t){if(!e.has(t))return;let r=xe(e,t);return ht(J(r),t,r.location)}function ht(e,t,r){let n=Number(e);if(!Number.isFinite(n))throw d.fromLocation(`Invalid numeric value "${e}" for "${t}"`,r);return n}function Pr(e){let t=J(e).toLowerCase(),r=xr.get(t);if(r===void 0)throw d.fromLocation(`Invalid boolean value "${t}" for "${e.key}"`,e.location);return r}function xe(e,t){let r=e.get(t);if(!r)throw new d(`Missing value for key "${t}"`);return r}function Ie(e,t){return J(xe(e,t))}function J(e){if(e.values.length!==1)throw d.fromLocation(`Field "${e.key}" expects exactly one value`,e.location);return e.values[0]}var Cr=new Set(["star","planet","moon","asteroid","comet"]);function ie(e){let t=new Set,r=new Map;for(let n of e.objects){if(t.has(n.id))throw new d(`Duplicate object id "${n.id}"`);t.add(n.id),r.set(n.id,n)}for(let n of e.objects)if(n.placement){if((n.placement.mode==="orbit"||n.placement.mode==="surface")&&!t.has(n.placement.target))throw new d(`Unknown placement target "${n.placement.target}" on "${n.id}"`);if(n.placement.mode==="surface"){let o=r.get(n.placement.target);if(!o||!Cr.has(o.type))throw new d(`Surface target "${n.placement.target}" on "${n.id}" is not surface-capable`)}n.placement.mode==="at"&&(n.placement.reference.kind==="lagrange"&&Rr(n,n.placement.reference,t),n.placement.reference.kind==="anchor"&&Br(n,n.placement.reference,t))}}function Rr(e,t,r){if(!r.has(t.primary))throw new d(`Unknown Lagrange reference "${t.primary}" on "${e.id}"`);if(t.secondary&&!r.has(t.secondary))throw new d(`Unknown Lagrange reference "${t.secondary}" on "${e.id}"`)}function Br(e,t,r){if(!r.has(t.objectId))throw new d(`Unknown anchor target "${t.objectId}" on "${e.id}"`)}function Y(e,t,r=`${t}.failed`){return e instanceof d?{code:r,severity:"error",source:t,message:e.message,line:e.line,column:e.column}:e instanceof Error?{code:r,severity:"error",source:t,message:e.message}:{code:r,severity:"error",source:t,message:String(e)}}var ae=1495978707e-1,_r=6371,Nr=71492,zr=695700,Ur=63241.077,Wr=206264.806,Yr=206264806,$t=.68,Hr=.2,It=28;function U(e,t={}){let r=Gr(t),n=r.width,o=r.height,i=r.padding,a=qr(e),s=Kr(e,t.projection),l=Zr(a,t.scaleModel),c=Qr(a),u=e.system?.id??null,f=new Map(e.objects.map(g=>[g.id,g])),h=En(e.objects,f),p=new Map,y=[],v=[],I=[],m=[],b=[],$=new Map,E=new Map;for(let g of e.objects){let D=g.placement;if(!D){I.push(g);continue}if(D.mode==="orbit"){yt(E,D.target,g);continue}if(D.mode==="surface"){yt($,D.target,g);continue}if(D.mode==="at"){b.push(g);continue}m.push(g)}let R=m.length>0?n*.42:n/2,x=o/2,V={orbitChildren:E,surfaceChildren:$,objectMap:f,spacingFactor:c,projection:s,scaleModel:l},M=I.find(g=>g.type==="star")??I[0]??null;M&&ze(M,R,x,0,p,y,v,V);let B=I.filter(g=>g.id!==M?.id);if(B.length>0){let g=Math.min(n,o)*.28*c*l.orbitDistanceMultiplier;B.forEach((D,k)=>{let _e=ce(k,B.length,-Math.PI/2),W=ue(_e,g,s,1);ze(D,R+W.x,x+W.y,0,p,y,v,V)})}m.forEach((g,D)=>{let k=n-i-140-_n(g.placement?.mode==="free"?g.placement.distance:void 0,l),_e=Math.max(76,(o-i*2-180)/Math.max(1,m.length)*c)*l.freePlacementMultiplier,W=i+92+D*_e;p.set(g.id,{object:g,x:k,y:W,radius:Oe(g,0,l),sortKey:Te(k,W,0)}),v.push({object:g,groupId:h.groupIds.get(g.id)??null,x1:k-60,y1:W,x2:k-18,y2:W,mode:"free"}),Se(g,p,y,v,V,1)}),b.forEach((g,D)=>{if(p.has(g.id)||!g.placement||g.placement.mode!=="at")return;let k=Dn(g.placement.reference,p,f,D,b.length,n,o,i,V);p.set(g.id,{object:g,x:k.x,y:k.y,radius:Oe(g,2,l),sortKey:Te(k.x,k.y,2),anchorX:k.anchorX,anchorY:k.anchorY}),k.anchorX!==void 0&&k.anchorY!==void 0&&v.push({object:g,groupId:h.groupIds.get(g.id)??null,x1:k.anchorX,y1:k.anchorY,x2:k.x,y2:k.y,mode:"at"}),Se(g,p,y,v,V,2)});let L=[...p.values()].map(g=>en(g,l,h)),ge=y.map(g=>tn(g,h.groupIds.get(g.object.id)??null)),be=v.map(g=>rn(g)),ye=nn(L,o,l.labelMultiplier),lt=ln(e,L),ir=on(ge,lt,be,L,ye),ar=an(L,ge,be,ye,h),sr=sn(e,L),lr=cn(e,s,r.preset,h,f),cr=xn(n,o,L,ge,be,ye);return{width:n,height:o,padding:i,renderPreset:r.preset,projection:s,scaleModel:l,title:String(e.system?.title??e.system?.properties.title??e.system?.id??"WorldOrbit")||"WorldOrbit",subtitle:`${wt(s)} view - ${wt(a)} layout`,systemId:u,viewMode:s,layoutPreset:a,metadata:{format:e.format,version:e.version,view:s,scale:String(e.system?.properties.scale??a),units:String(e.system?.properties.units??"mixed"),preset:r.preset??"custom"},contentBounds:cr,layers:ir,groups:ar,semanticGroups:sr,viewpoints:lr,objects:L,orbitVisuals:ge,relations:lt,leaders:be,labels:ye}}function qr(e){switch(String(e.system?.properties.scale??"balanced").toLowerCase()){case"compressed":case"compact":return"compact";case"expanded":case"presentation":return"presentation";default:return"balanced"}}function Gr(e){let t=Xr(e.preset);return{width:e.width??t.width,height:e.height??t.height,padding:e.padding??t.padding,preset:e.preset??null}}function Xr(e){switch(e){case"presentation":return{width:1440,height:900,padding:88};case"atlas-card":return{width:960,height:560,padding:56};case"markdown":return{width:920,height:540,padding:48};default:return{width:1200,height:780,padding:72}}}function Kr(e,t){return t==="topdown"||t==="isometric"?t:String(e.system?.properties.view??"topdown").toLowerCase()==="isometric"?"isometric":"topdown"}function Zr(e,t){return{...Jr(e),...t}}function Jr(e){switch(e){case"compact":return{orbitDistanceMultiplier:.84,bodyRadiusMultiplier:.92,labelMultiplier:.9,freePlacementMultiplier:.9,ringThicknessMultiplier:.92,minBodyRadius:4,maxBodyRadius:36};case"presentation":return{orbitDistanceMultiplier:1.2,bodyRadiusMultiplier:1.18,labelMultiplier:1.08,freePlacementMultiplier:1.05,ringThicknessMultiplier:1.16,minBodyRadius:5,maxBodyRadius:48};default:return{orbitDistanceMultiplier:1,bodyRadiusMultiplier:1,labelMultiplier:1,freePlacementMultiplier:1,ringThicknessMultiplier:1,minBodyRadius:4,maxBodyRadius:40}}}function Qr(e){switch(e){case"compact":return .84;case"presentation":return 1.2;default:return 1}}function en(e,t,r){let{object:n,x:o,y:i,radius:a,sortKey:s,anchorX:l,anchorY:c}=e,u=n.renderHints?.renderPriority??0;return{renderId:de(n.id),objectId:n.id,object:n,parentId:r.parentIds.get(n.id)??null,ancestorIds:r.ancestorIds.get(n.id)??[],childIds:r.childIds.get(n.id)??[],groupId:r.groupIds.get(n.id)??null,semanticGroupIds:[...n.groups??[]],x:o,y:i,radius:a,visualRadius:Bn(n,a,t),sortKey:s+u*.001,anchorX:l,anchorY:c,label:n.id,secondaryLabel:n.type==="structure"?String(n.properties.kind??n.type):n.type,fillColor:zn(n.properties.color),imageHref:typeof n.properties.image=="string"&&n.properties.image.trim()?n.properties.image:void 0,hidden:n.properties.hidden===!0}}function tn(e,t){return{renderId:`${de(e.object.id)}-orbit`,objectId:e.object.id,object:e.object,parentId:e.parentId,groupId:t,semanticGroupIds:[...e.object.groups??[]],kind:e.kind,cx:e.cx,cy:e.cy,radius:e.radius,rx:e.rx,ry:e.ry,rotationDeg:e.rotationDeg,band:e.band,bandThickness:e.bandThickness,frontArcPath:e.frontArcPath,backArcPath:e.backArcPath,hidden:e.object.properties.hidden===!0||e.object.renderHints?.renderOrbit===!1}}function rn(e){return{renderId:`${de(e.object.id)}-leader-${e.mode}`,objectId:e.object.id,object:e.object,groupId:e.groupId,semanticGroupIds:[...e.object.groups??[]],x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,mode:e.mode,hidden:e.object.properties.hidden===!0}}function nn(e,t,r){let n=[],o=[],i=[...e].filter(a=>!a.hidden&&a.object.renderHints?.renderLabel!==!1).sort((a,s)=>a.sortKey-s.sortKey);for(let a of i){let s=a.y>t*.62?-1:1,l=Un(a,r),c=a.y+s*(a.radius+18*r),u=c+s*(16*r),f=gt(a.x,c,u,l,s),h=0;for(;o.some(p=>Cn(p,f))&&h<10;)c+=s*14*r,u+=s*14*r,f=gt(a.x,c,u,l,s),h+=1;o.push(f),n.push({renderId:`${a.renderId}-label`,objectId:a.objectId,object:a.object,groupId:a.groupId,semanticGroupIds:[...a.semanticGroupIds],label:a.label,secondaryLabel:a.secondaryLabel,x:a.x,y:c,secondaryY:u,textAnchor:"middle",direction:s<0?"above":"below",hidden:a.hidden})}return n}function on(e,t,r,n,o){let i=e.filter(s=>!s.hidden&&!!s.backArcPath).map(s=>s.renderId),a=e.filter(s=>!s.hidden).map(s=>s.renderId);return[{id:"background",renderIds:["wo-bg","wo-bg-glow","wo-grid"]},{id:"guides",renderIds:r.filter(s=>!s.hidden).map(s=>s.renderId)},{id:"orbits-back",renderIds:i},{id:"orbits-front",renderIds:a},{id:"relations",renderIds:t.filter(s=>!s.hidden).map(s=>s.renderId)},{id:"objects",renderIds:n.filter(s=>!s.hidden).map(s=>s.renderId)},{id:"labels",renderIds:o.filter(s=>!s.hidden).map(s=>s.renderId)},{id:"metadata",renderIds:["wo-title","wo-subtitle","wo-meta"]}]}function an(e,t,r,n,o){let i=new Map,a=s=>{if(!s)return null;let l=i.get(s);if(l)return l;let c=o.groupRoots.get(s)??null,u={renderId:s,rootObjectId:c,label:c??s,objectIds:[],orbitIds:[],labelIds:[],leaderIds:[],contentBounds:le(0,0,0,0)};return i.set(s,u),u};for(let s of e){let l=a(s.groupId);l&&!s.hidden&&l.objectIds.push(s.objectId)}for(let s of t){let l=a(s.groupId);l&&!s.hidden&&l.orbitIds.push(s.objectId)}for(let s of r){let l=a(s.groupId);l&&!s.hidden&&l.leaderIds.push(s.objectId)}for(let s of n){let l=a(s.groupId);l&&!s.hidden&&l.labelIds.push(s.objectId)}for(let s of i.values())s.contentBounds=Vn(s,e,t,r,n);return[...i.values()].sort((s,l)=>s.label.localeCompare(l.label))}function sn(e,t){return[...e.groups].map(r=>({id:r.id,label:r.label,summary:r.summary,color:r.color,tags:[...r.tags],hidden:r.hidden,objectIds:t.filter(n=>!n.hidden&&n.semanticGroupIds.includes(r.id)).map(n=>n.objectId)})).sort((r,n)=>r.label.localeCompare(n.label))}function ln(e,t){let r=new Map(t.map(n=>[n.objectId,n]));return e.relations.map(n=>{let o=r.get(n.from),i=r.get(n.to);return{renderId:`${de(n.id)}-relation`,relationId:n.id,relation:n,fromObjectId:n.from,toObjectId:n.to,x1:o?.x??0,y1:o?.y??0,x2:i?.x??0,y2:i?.y??0,hidden:n.hidden||!o||!i||o.hidden||i.hidden}}).sort((n,o)=>n.relation.id.localeCompare(o.relation.id))}function cn(e,t,r,n,o){let i=un(e,t,r),a=new Map;for(let[c,u]of Object.entries(e.system?.info??{})){if(!c.startsWith("viewpoint."))continue;let[f,h,...p]=c.split(".");if(f!=="viewpoint"||!h||p.length===0)continue;let y=vn(h);if(!y)continue;let v=p.join(".").toLowerCase(),I=a.get(y)??{id:y};dn(I,v,u,e,t,r,n,o),a.set(y,I)}let s=[...a.values()].map(c=>fn(c,t,r,o)).filter(Boolean),l=s.findIndex(c=>c.id===i.id);return l>=0?s.splice(l,1,{...i,...s[l],layers:{...i.layers,...s[l].layers},filter:s[l].filter??i.filter,generated:!1}):s.unshift(i),s.sort((c,u)=>c.id==="overview"?-1:u.id==="overview"?1:c.label.localeCompare(u.label))}function un(e,t,r){let n=e.system?.title??e.system?.properties.title;return{id:"overview",label:n?`${String(n)} Overview`:"Overview",summary:"Fit the whole system with the current atlas defaults.",objectId:null,selectedObjectId:null,projection:t,preset:r,rotationDeg:0,scale:null,layers:{},filter:null,generated:!0}}function dn(e,t,r,n,o,i,a,s){let l=r.trim();switch(t){case"label":case"title":l&&(e.label=l);return;case"summary":case"description":l&&(e.summary=l);return;case"focus":case"object":l&&(e.focus=l);return;case"select":case"selection":l&&(e.select=l);return;case"projection":case"view":e.projection=mn(l)??o;return;case"preset":e.preset=hn(l)??i;return;case"rotation":case"angle":e.rotationDeg=xt(l)??e.rotationDeg??0;return;case"zoom":case"scale":e.scale=gn(l);return;case"layers":e.layers=bn(l);return;case"query":e.filter={...e.filter??ke(),query:l||null};return;case"types":case"objecttypes":e.filter={...e.filter??ke(),objectTypes:yn(l)};return;case"tags":e.filter={...e.filter??ke(),tags:Me(l)};return;case"groups":e.filter={...e.filter??ke(),groupIds:wn(l,n,a,s)};return}}function fn(e,t,r,n){let o=e.focus&&n.has(e.focus)?e.focus:null,i=e.select&&n.has(e.select)?e.select:o,a=pn(e.filter),s=e.label?.trim()||$n(e.id);return{id:e.id,label:s,summary:e.summary?.trim()||In(s,o,a),objectId:o,selectedObjectId:i,projection:e.projection??t,preset:e.preset??r,rotationDeg:e.rotationDeg??0,scale:e.scale??null,layers:e.layers??{},filter:a,generated:!1}}function ke(){return{query:null,objectTypes:[],tags:[],groupIds:[]}}function pn(e){if(!e)return null;let t={query:e.query?.trim()||null,objectTypes:[...new Set(e.objectTypes)],tags:[...new Set(e.tags)],groupIds:[...new Set(e.groupIds)]};return t.query||t.objectTypes.length>0||t.tags.length>0||t.groupIds.length>0?t:null}function mn(e){return e.toLowerCase()==="isometric"?"isometric":e.toLowerCase()==="topdown"?"topdown":null}function hn(e){let t=e.toLowerCase();return t==="diagram"||t==="presentation"||t==="atlas-card"||t==="markdown"?t:null}function xt(e){let t=Number(e);return Number.isFinite(t)?t:null}function gn(e){let t=xt(e);return t!==null&&t>0?t:null}function bn(e){let t={};for(let r of Me(e)){let n=!r.startsWith("-")&&!r.startsWith("!"),o=r.replace(/^[-!]+/,"").toLowerCase();if(o==="orbits"){t["orbits-back"]=n,t["orbits-front"]=n;continue}(o==="background"||o==="guides"||o==="orbits-back"||o==="orbits-front"||o==="relations"||o==="objects"||o==="labels"||o==="metadata")&&(t[o]=n)}return t}function yn(e){return Me(e).filter(t=>t==="star"||t==="planet"||t==="moon"||t==="belt"||t==="asteroid"||t==="comet"||t==="ring"||t==="structure"||t==="phenomenon")}function wn(e,t,r,n){return Me(e).map(o=>t.schemaVersion==="2.1"||t.groups.some(i=>i.id===o)||o.startsWith("wo-")&&o.endsWith("-group")?o:r.groupIds.has(o)?r.groupIds.get(o)??se(o):(n.has(o),se(o)))}function Me(e){return e.split(/[\s,]+/).map(t=>t.trim()).filter(Boolean)}function vn(e){return e.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")}function $n(e){return e.split(/[-_]+/).filter(Boolean).map(t=>t[0].toUpperCase()+t.slice(1)).join(" ")}function In(e,t,r){let n=[e];return t&&n.push(`focus ${t}`),r?.objectTypes.length&&n.push(r.objectTypes.join("/")),r?.tags.length&&n.push(`tags ${r.tags.join(", ")}`),r?.query&&n.push(`query "${r.query}"`),n.join(" - ")}function xn(e,t,r,n,o,i){let a=Number.POSITIVE_INFINITY,s=Number.POSITIVE_INFINITY,l=Number.NEGATIVE_INFINITY,c=Number.NEGATIVE_INFINITY,u=(f,h)=>{a=Math.min(a,f),s=Math.min(s,h),l=Math.max(l,f),c=Math.max(c,h)};for(let f of n)f.hidden||kt(f,u);for(let f of o)f.hidden||(u(f.x1,f.y1),u(f.x2,f.y2));for(let f of r)f.hidden||St(f,u);for(let f of i)f.hidden||jt(f,u);return!Number.isFinite(a)||!Number.isFinite(s)?le(0,0,e,t):le(a,s,l,c)}function kt(e,t){let r=e.bandThickness!==void 0?e.bandThickness/2+4:e.band?10:3;if(e.kind==="circle"&&e.radius!==void 0){t(e.cx-e.radius-r,e.cy-e.radius-r),t(e.cx+e.radius+r,e.cy+e.radius+r);return}let n=e.rx??e.radius??0,o=e.ry??e.radius??0,i=At(e.cx,e.cy,n,o,e.rotationDeg,0,Math.PI*2,It*2);for(let a of i)t(a.x-r,a.y-r),t(a.x+r,a.y+r)}function le(e,t,r,n){return{minX:e,minY:t,maxX:r,maxY:n,width:r-e,height:n-t,centerX:e+(r-e)/2,centerY:t+(n-t)/2}}function St(e,t){t(e.x-e.visualRadius-24,e.y-e.visualRadius-16),t(e.x+e.visualRadius+24,e.y+e.visualRadius+36)}function jt(e,t){let n=Wn(e.label,e.secondaryLabel,1);t(e.x-n,e.y-18),t(e.x+n,e.y+8),t(e.x-n,e.secondaryY-14),t(e.x+n,e.secondaryY+8)}function ze(e,t,r,n,o,i,a,s){o.has(e.id)||(o.set(e.id,{object:e,x:t,y:r,radius:Oe(e,n,s.scaleModel),sortKey:Te(t,r,n)}),Se(e,o,i,a,s,n+1))}function Se(e,t,r,n,o,i){let a=t.get(e.id);if(!a)return;let s=[...o.orbitChildren.get(e.id)??[]].sort(kn),l=Sn(s,a.radius,o.spacingFactor,o.scaleModel),c=An(s,l);s.forEach((f,h)=>{let p=jn(f,h,s.length,a,l,c[h]??l.innerPx,o);r.push({object:f,parentId:e.id,kind:p.kind,cx:p.cx,cy:p.cy,radius:p.radius,rx:p.rx,ry:p.ry,rotationDeg:p.rotationDeg,band:p.band,bandThickness:p.bandThickness,frontArcPath:p.frontArcPath,backArcPath:p.backArcPath}),ze(f,p.objectX,p.objectY,i,t,r,n,o)});let u=[...o.surfaceChildren.get(e.id)??[]];u.forEach((f,h)=>{let p=ce(h,u.length,-Math.PI/3),y=28*o.spacingFactor,v=ue(p,a.radius,o.projection,o.projection==="isometric"?.9:1),I=ue(p,a.radius+y,o.projection,o.projection==="isometric"?.9:1),m=a.x+v.x,b=a.y+v.y,$=a.x+I.x,E=a.y+I.y;t.set(f.id,{object:f,x:$,y:E,radius:Oe(f,i+1,o.scaleModel),sortKey:Te($,E,i+1),anchorX:m,anchorY:b}),n.push({object:f,groupId:o.objectMap.has(f.id)?se(Pn(f,o.objectMap)):null,x1:m,y1:b,x2:$,y2:E,mode:"surface"}),Se(f,t,r,n,o,i+1)})}function kn(e,t){let r=je(e),n=je(t);return r!==null&&n!==null&&r!==n?r-n:r!==null&&n===null?-1:r===null&&n!==null?1:e.id.localeCompare(t.id)}function Sn(e,t,r,n){let o=e.map(f=>je(f)),i=o.filter(f=>f!==null),a=t+56*r*n.orbitDistanceMultiplier,s=(e.length>2?54:64)*r*n.orbitDistanceMultiplier;if(i.length===0)return{metrics:o,minMetric:0,maxMetric:0,metricSpread:0,innerPx:a,stepPx:s,pixelSpread:Math.max(s*Math.max(e.length-1,1),s),minimumGapPx:s*.42};let l=Math.min(...i),c=Math.max(...i),u=c-l;return{metrics:o,minMetric:l,maxMetric:c,metricSpread:u,innerPx:a,stepPx:s,pixelSpread:Math.max(s*Math.max(e.length-1,1),s),minimumGapPx:s*.42}}function jn(e,t,r,n,o,i,a){let s=e.placement,l=e.type==="belt"||e.type==="ring";if(!s||s.mode!=="orbit"){let M=o.innerPx+t*o.stepPx;return{kind:"circle",cx:n.x,cy:n.y,radius:M,rotationDeg:0,band:l,bandThickness:l?12*a.scaleModel.ringThicknessMultiplier:void 0,objectX:n.x,objectY:n.y-M}}let c=S(typeof s.eccentricity=="number"?s.eccentricity:0,0,.92),u=i,f=Math.max(u*Math.sqrt(1-c*c),u*.18),h=We(s.inclination)??0,p=a.projection==="isometric"?Math.max(Hr,Math.cos(Ye(h)))*$t:1,y=Math.max(f*p,u*.14),v=We(s.angle)??0,I=u*c,m=Mt(-I,0,v),b=n.x+m.x,$=n.y+m.y,E=Mn(s.phase,t,r),R=Tt(b,$,u,y,v,E),x=a.projection==="topdown"&&c<=1e-4&&Math.abs(v)<=1e-4,V=l?Ln(e,u,o,a.scaleModel):void 0;return{kind:x?"circle":"ellipse",cx:x?n.x:b,cy:x?n.y:$,radius:x?u:void 0,rx:x?void 0:u,ry:x?void 0:y,rotationDeg:v,band:l,bandThickness:V,frontArcPath:a.projection==="isometric"||l?bt(b,$,u,y,v,0,Math.PI):void 0,backArcPath:a.projection==="isometric"||l?bt(b,$,u,y,v,Math.PI,Math.PI*2):void 0,objectX:R.x,objectY:R.y}}function On(e,t){return t.innerPx+t.stepPx*Tn(Math.max(e,0)+1)}function An(e,t){let r=[];return e.forEach((n,o)=>{let i=je(n),a=t.innerPx+o*t.stepPx,s=i===null?a:On(i,t),l=o===0?t.innerPx:(r[o-1]??t.innerPx)+t.minimumGapPx;r.push(Math.max(s,l))}),r}function je(e){return!e.placement||e.placement.mode!=="orbit"?null:Ae(e.placement.semiMajor??e.placement.distance??null)}function Tn(e){return Math.log(e)/Math.log(2)}function Mn(e,t,r){let n=e?We(e):null;return n!==null?Ye(n-90):ce(t,r,-Math.PI/2)}function Ln(e,t,r,n){let o=Ae(Ue(e.properties.inner)),i=Ae(Ue(e.properties.outer));if(o!==null&&i!==null){let s=Math.abs(i-o);if(r.metricSpread>0)return S(s/r.metricSpread*r.pixelSpread*n.ringThicknessMultiplier,8,54);let l=Math.max(Math.max(o,i),1e-4);return S(s/l*t*.75*n.ringThicknessMultiplier,8,48)}return(e.type==="belt"?18:12)*n.ringThicknessMultiplier}function Dn(e,t,r,n,o,i,a,s,l){if(e.kind==="lagrange")return Fn(e,t,r,i,a);if(e.kind==="anchor"){let c=t.get(e.objectId);if(c){let u=ce(n,o,Math.PI/5),f=(c.radius+36)*l.scaleModel.labelMultiplier,h=ue(u,f,l.projection,l.projection==="isometric"?.92:1);return{x:c.x+h.x,y:c.y+h.y,anchorX:c.x,anchorY:c.y}}}if(e.kind==="named"){let c=t.get(e.name);if(c){let u=ce(n,o,Math.PI/6),f=(c.radius+36)*l.scaleModel.labelMultiplier,h=ue(u,f,l.projection,l.projection==="isometric"?.92:1);return{x:c.x+h.x,y:c.y+h.y,anchorX:c.x,anchorY:c.y}}}return{x:i-s-170,y:a-s-86-n*58*l.scaleModel.freePlacementMultiplier}}function Fn(e,t,r,n,o){let i=e.secondary?t.get(e.primary):Rn(e.primary,t,r),a=t.get(e.secondary??e.primary);if(!i||!a)return{x:n*.7,y:o*.25};let s=a.x-i.x,l=a.y-i.y,c=Math.hypot(s,l)||1,u=s/c,f=l/c,h=-f,p=u,y=S(c*.25,24,68);switch(e.point){case"L1":return{x:a.x-u*y,y:a.y-f*y,anchorX:a.x,anchorY:a.y};case"L2":return{x:a.x+u*y,y:a.y+f*y,anchorX:a.x,anchorY:a.y};case"L3":return{x:i.x-u*y,y:i.y-f*y,anchorX:i.x,anchorY:i.y};case"L4":return{x:a.x+(u*.5-h*.8660254)*y,y:a.y+(f*.5-p*.8660254)*y,anchorX:a.x,anchorY:a.y};case"L5":return{x:a.x+(u*.5+h*.8660254)*y,y:a.y+(f*.5+p*.8660254)*y,anchorX:a.x,anchorY:a.y}}}function En(e,t){let r=new Map,n=new Map;for(let c of e){let u=Ot(c,t);if(r.set(c.id,u),u){let f=n.get(u);f?f.push(c.id):n.set(u,[c.id])}n.has(c.id)||n.set(c.id,[])}let o=new Map,i=new Map,a=new Map,s=c=>{let u=o.get(c);if(u)return u;let f=new Set,h=[],p=r.get(c)??null;for(;p&&!f.has(p);)h.push(p),f.add(p),p=r.get(p)??null;return o.set(c,h),h},l=c=>{let u=a.get(i.get(c)??"");if(u)return u;let f=r.get(c)??null,h=t.get(c),p=c;return h?.placement&&h.placement.mode!=="free"&&f&&(p=l(f)),p};for(let c of e){s(c.id);let u=l(c.id),f=se(u);i.set(c.id,f),a.set(f,u)}return{parentIds:r,childIds:n,ancestorIds:o,groupIds:i,groupRoots:a}}function Ot(e,t){let r=e.placement;if(!r)return null;switch(r.mode){case"orbit":case"surface":return t.has(r.target)?r.target:null;case"at":switch(r.reference.kind){case"anchor":return t.has(r.reference.objectId)?r.reference.objectId:null;case"named":return t.has(r.reference.name)?r.reference.name:null;case"lagrange":return r.reference.secondary&&t.has(r.reference.secondary)?r.reference.secondary:t.has(r.reference.primary)?r.reference.primary:null}case"free":return null}}function Vn(e,t,r,n,o){let i=Number.POSITIVE_INFINITY,a=Number.POSITIVE_INFINITY,s=Number.NEGATIVE_INFINITY,l=Number.NEGATIVE_INFINITY,c=(u,f)=>{i=Math.min(i,u),a=Math.min(a,f),s=Math.max(s,u),l=Math.max(l,f)};for(let u of t)!u.hidden&&e.objectIds.includes(u.objectId)&&St(u,c);for(let u of r)!u.hidden&&e.orbitIds.includes(u.objectId)&&kt(u,c);for(let u of n)!u.hidden&&e.leaderIds.includes(u.objectId)&&(c(u.x1,u.y1),c(u.x2,u.y2));for(let u of o)!u.hidden&&e.labelIds.includes(u.objectId)&&jt(u,c);return!Number.isFinite(i)||!Number.isFinite(a)?le(0,0,0,0):le(i,a,s,l)}function Pn(e,t){let r=e,n=new Set;for(;r.placement&&r.placement.mode!=="free"&&!n.has(r.id);){n.add(r.id);let o=Ot(r,t);if(!o)break;let i=t.get(o);if(!i)break;r=i}return r.id}function gt(e,t,r,n,o){return{left:e-n,right:e+n,top:Math.min(t,r)-(o<0?18:12),bottom:Math.max(t,r)+(o<0?8:12)}}function Cn(e,t){return!(e.right<t.left||t.right<e.left||e.bottom<t.top||t.bottom<e.top)}function Rn(e,t,r){let n=r.get(e);return!n?.placement||n.placement.mode!=="orbit"?t.get(e):t.get(n.placement.target)}function Oe(e,t,r){let n=Nn(e.properties.radius,r);if(n!==null)return n;let o=r.bodyRadiusMultiplier;switch(e.type){case"star":return S((t===0?28:20)*o,r.minBodyRadius,r.maxBodyRadius);case"planet":return S(12*o,r.minBodyRadius,r.maxBodyRadius);case"moon":return S(7*o,r.minBodyRadius,r.maxBodyRadius);case"belt":return S(5*o,r.minBodyRadius,r.maxBodyRadius);case"asteroid":return S(5*o,r.minBodyRadius,r.maxBodyRadius);case"comet":return S(6*o,r.minBodyRadius,r.maxBodyRadius);case"ring":return S(5*o,r.minBodyRadius,r.maxBodyRadius);case"structure":return S(6*o,r.minBodyRadius,r.maxBodyRadius);case"phenomenon":return S(8*o,r.minBodyRadius,r.maxBodyRadius)}}function Bn(e,t,r){let n=typeof e.properties.atmosphere=="string"?4:0;switch(e.type){case"star":return t*2.4;case"phenomenon":return t*1.25;case"structure":return t+2;default:return Math.min(t+n,r.maxBodyRadius+10)}}function Ae(e){if(!e)return null;switch(e.unit){case"au":return e.value;case"km":return e.value/ae;case"m":return e.value/1e3/ae;case"ly":return e.value*Ur;case"pc":return e.value*Wr;case"kpc":return e.value*Yr;case"re":return e.value*_r/ae;case"rj":return e.value*Nr/ae;case"sol":return e.value*zr/ae;default:return e.value}}function _n(e,t){let r=Ae(e??null);return r===null||r<=0?0:S(r*96*t.freePlacementMultiplier,0,420)}function Nn(e,t){let r=Ue(e);if(!r)return null;let n;switch(r.unit){case"sol":n=S(r.value*22,14,40);break;case"re":n=S(r.value*10,6,18);break;case"km":n=S(Math.log10(Math.max(r.value,1))*2.6,4,16);break;default:n=S(r.value*4,4,20);break}return S(n*t.bodyRadiusMultiplier,t.minBodyRadius,t.maxBodyRadius)}function Ue(e){return!e||typeof e!="object"||!("value"in e)?null:e}function We(e){return e&&(e.unit==="deg"||e.unit===null)?e.value:null}function ce(e,t,r){return t<=1?r:r+e*Math.PI*2/t}function bt(e,t,r,n,o,i,a){let s=At(e,t,r,n,o,i,a,It);return s.length===0?"":s.map((l,c)=>`${c===0?"M":"L"} ${vt(l.x)} ${vt(l.y)}`).join(" ")}function At(e,t,r,n,o,i,a,s){let l=[];for(let c=0;c<=s;c+=1){let u=i+(a-i)*c/s;l.push(Tt(e,t,r,n,o,u))}return l}function Tt(e,t,r,n,o,i){let a=r*Math.cos(i),s=n*Math.sin(i),l=Mt(a,s,o);return{x:e+l.x,y:t+l.y}}function Mt(e,t,r){let n=Ye(r);return{x:e*Math.cos(n)-t*Math.sin(n),y:e*Math.sin(n)+t*Math.cos(n)}}function ue(e,t,r,n){let o=r==="isometric"?$t*n:n;return{x:Math.cos(e)*t,y:Math.sin(e)*t*o}}function Te(e,t,r){return t*1e3+e+r*.01}function S(e,t,r){return Math.min(Math.max(e,t),r)}function yt(e,t,r){let n=e.get(t);n?n.push(r):e.set(t,[r])}function de(e){return`wo-${e.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")||"object"}`}function se(e){return`${de(e)}-group`}function zn(e){return typeof e=="string"&&e.trim()?e:void 0}function Un(e,t){let r=e.label.length*4.6*t+18,n=e.secondaryLabel.length*3.9*t+18;return Math.max(r,n,e.visualRadius+18)}function Wn(e,t,r){let n=e.length*4.6*r+18,o=t.length*3.9*r+18;return Math.max(n,o,24)}function wt(e){return e.length>0?e[0].toUpperCase()+e.slice(1):e}function Ye(e){return e*Math.PI/180}function vt(e){return Number.isInteger(e)?String(e):e.toFixed(2)}function He(e){let t=e.system?{type:"system",id:e.system.id,title:e.system.title,description:e.system.description,epoch:e.system.epoch,referencePlane:e.system.referencePlane,properties:qn(e.system),info:Gn(e.system)}:null;return{format:"worldorbit",version:"1.0",schemaVersion:e.version,system:t,groups:structuredClone(e.groups??[]),relations:structuredClone(e.relations??[]),objects:e.objects.map(Yn)}}function Yn(e){return{...e,groups:e.groups?[...e.groups]:void 0,resonance:e.resonance?{...e.resonance}:e.resonance,renderHints:e.renderHints?{...e.renderHints}:e.renderHints,deriveRules:e.deriveRules?e.deriveRules.map(t=>({...t})):void 0,validationRules:e.validationRules?e.validationRules.map(t=>({...t})):void 0,lockedFields:e.lockedFields?[...e.lockedFields]:void 0,tolerances:e.tolerances?e.tolerances.map(t=>({field:t.field,value:t.value&&typeof t.value=="object"&&"value"in t.value?{value:t.value.value,unit:t.value.unit}:Array.isArray(t.value)?[...t.value]:t.value})):void 0,typedBlocks:e.typedBlocks?Object.fromEntries(Object.entries(e.typedBlocks).map(([t,r])=>[t,{...r??{}}])):void 0,properties:Hn(e.properties),placement:e.placement?structuredClone(e.placement):null,info:{...e.info}}}function Hn(e){let t={};for(let[r,n]of Object.entries(e)){if(Array.isArray(n)){t[r]=[...n];continue}if(n&&typeof n=="object"&&"value"in n){t[r]={value:n.value,unit:n.unit};continue}t[r]=n}return t}function qn(e){let t={};return e.title&&(t.title=e.title),t.view=e.defaults.view,e.defaults.scale&&(t.scale=e.defaults.scale),e.defaults.units&&(t.units=e.defaults.units),e.description&&(t.description=e.description),e.epoch&&(t.epoch=e.epoch),e.referencePlane&&(t.referencePlane=e.referencePlane),t}function Gn(e){let t={...e.atlasMetadata};e.defaults.theme&&(t["atlas.theme"]=e.defaults.theme);for(let r of e.viewpoints){let n=`viewpoint.${r.id}`;t[`${n}.label`]=r.label,r.summary&&(t[`${n}.summary`]=r.summary),r.focusObjectId&&(t[`${n}.focus`]=r.focusObjectId),r.selectedObjectId&&(t[`${n}.select`]=r.selectedObjectId),r.projection&&(t[`${n}.projection`]=r.projection),r.preset&&(t[`${n}.preset`]=r.preset),r.zoom!==null&&(t[`${n}.zoom`]=String(r.zoom)),r.rotationDeg!==0&&(t[`${n}.rotation`]=String(r.rotationDeg));let o=Xn(r.layers);o&&(t[`${n}.layers`]=o),r.filter?.query&&(t[`${n}.query`]=r.filter.query),(r.filter?.objectTypes.length??0)>0&&(t[`${n}.types`]=r.filter?.objectTypes.join(" ")??""),(r.filter?.tags.length??0)>0&&(t[`${n}.tags`]=r.filter?.tags.join(" ")??""),(r.filter?.groupIds.length??0)>0&&(t[`${n}.groups`]=r.filter?.groupIds.join(" ")??"")}for(let r of e.annotations){let n=`annotation.${r.id}`;t[`${n}.label`]=r.label,r.targetObjectId&&(t[`${n}.target`]=r.targetObjectId),t[`${n}.body`]=r.body,r.tags.length>0&&(t[`${n}.tags`]=r.tags.join(" ")),r.sourceObjectId&&(t[`${n}.source`]=r.sourceObjectId)}return t}function Xn(e){let t=[],r=e["orbits-front"],n=e["orbits-back"];(r!==void 0||n!==void 0)&&t.push(r!==!1||n!==!1?"orbits":"-orbits");for(let o of["background","guides","relations","objects","labels","metadata"])e[o]!==void 0&&t.push(e[o]?o:`-${o}`);return t.join(" ")}var Lt=/^(-?\d+(?:\.\d+)?)(kpc|min|mj|rj|ky|my|gy|au|km|me|re|pc|ly|deg|sol|K|m|s|h|d|y)?$/,Jn=new Map([["true",!0],["false",!1],["yes",!0],["no",!1]]),Qn=/^[A-Za-z][A-Za-z0-9+.-]*:/;function pe(e){return e.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")}function Le(e){return e.split(/[-_]+/).filter(Boolean).map(t=>t[0].toUpperCase()+t.slice(1)).join(" ")}function qe(e,t,r){let n=e.match(Lt);if(!n)throw d.fromLocation(`Invalid unit value "${e}"`,t);let o={value:Number(n[1]),unit:n[2]??null};if(r){let i=T(r);if(i?.unitFamily&&!ve(i.unitFamily,o.unit))throw d.fromLocation(`Unit "${o.unit??"none"}" is not valid for "${r}"`,t)}return o}function Ge(e){let t=e.match(Lt);return t?{value:Number(t[1]),unit:t[2]??null}:null}function De(e,t,r){let n=Number(e);if(!Number.isFinite(n))throw d.fromLocation(`Invalid numeric value "${e}" for "${t}"`,r);return n}function H(e,t,r){let n=Jn.get(e.toLowerCase());if(n===void 0)throw d.fromLocation(`Invalid boolean value "${e}" for "${t}"`,r);return n}function Dt(e,t){if(/^[A-Za-z0-9._-]+-[A-Za-z0-9._-]+:L\d+$/i.test(e))throw d.fromLocation(`Invalid special position "${e}"`,t);let r=e.match(/^([A-Za-z0-9._-]+)-([A-Za-z0-9._-]+):(L[1-5])$/);if(r)return{kind:"lagrange",primary:r[1],secondary:r[2],point:r[3]};let n=e.match(/^([A-Za-z0-9._-]+):(L[1-5])$/);if(n)return{kind:"lagrange",primary:n[1],secondary:null,point:n[2]};if(/^[A-Za-z0-9._-]+:L\d+$/i.test(e))throw d.fromLocation(`Invalid special position "${e}"`,t);let o=e.match(/^([A-Za-z0-9._-]+):([A-Za-z0-9._-]+)$/);return o?{kind:"anchor",objectId:o[1],anchor:o[2]}:{kind:"named",name:e}}function eo(e,t){if(!e)throw d.fromLocation('Field "image" must not be empty',t);if(e.startsWith("//"))throw d.fromLocation('Field "image" must use a relative path, root-relative path, or an http/https URL',t);let r=e.match(Qn);if(!r)return;let n=r[0].slice(0,-1).toLowerCase();if(n!=="http"&&n!=="https")throw d.fromLocation(`Field "image" does not support the "${n}" scheme`,t)}function Ft(e,t,r){let n=T(e);if(!n)throw d.fromLocation(`Unknown field "${e}"`,r);if(n.arity==="single"&&t.length!==1)throw d.fromLocation(`Field "${e}" expects exactly one value`,r);switch(n.kind){case"list":return t;case"boolean":return H(fe(t,e,r),e,r);case"number":return De(fe(t,e,r),e,r);case"unit":return qe(fe(t,e,r),r,e);case"string":{let o=t.join(" ").trim();return e==="image"&&eo(o,r),o}}}function Xe(e,t,r){let n=T(e);if(!n)throw d.fromLocation(`Unknown field "${e}"`,r);if(!n.objectTypes.includes(t))throw d.fromLocation(`Field "${e}" is not valid on "${t}"`,r)}function fe(e,t,r){if(e.length!==1)throw d.fromLocation(`Field "${t}" expects exactly one value`,r);return e[0]}var to=new Set(["star","planet","moon","asteroid","comet"]),ro=332946.0487,no=1047.3486,Fe=1495978707e-1,oo=6371,io=695700,ao=63241.077,so=206264.806,lo=206264806;function Ee(e,t){let r=[],n=new Map(e.objects.map(a=>[a.id,a])),o=new Set(e.groups.map(a=>a.id));e.system||r.push(j("validate.system.required","Atlas documents must declare exactly one system."));let i=new Map;for(let[a,s]of[["group",e.groups.map(l=>l.id)],["viewpoint",e.system?.viewpoints.map(l=>l.id)??[]],["annotation",e.system?.annotations.map(l=>l.id)??[]],["relation",e.relations.map(l=>l.id)],["object",e.objects.map(l=>l.id)]])for(let l of s){let c=i.get(l);c?r.push(j("validate.id.duplicate",`Duplicate ${a} id "${l}" already used by ${c}.`)):i.set(l,a)}for(let a of e.relations)co(a,n,r);for(let a of e.system?.viewpoints??[])uo(a.filter,o,t,r,a.id);for(let a of e.objects)fo(a,e.system,n,o,r);return r}function co(e,t,r){e.from?t.has(e.from)||r.push(j("validate.relation.from.unknown",`Unknown relation source "${e.from}" on "${e.id}".`)):r.push(j("validate.relation.from.required",`Relation "${e.id}" is missing a "from" target.`)),e.to?t.has(e.to)||r.push(j("validate.relation.to.unknown",`Unknown relation target "${e.to}" on "${e.id}".`)):r.push(j("validate.relation.to.required",`Relation "${e.id}" is missing a "to" target.`)),e.kind||r.push(j("validate.relation.kind.required",`Relation "${e.id}" is missing a "kind" value.`))}function uo(e,t,r,n,o){if(!(!e||r!=="2.1"))for(let i of e.groupIds)t.has(i)||n.push(_("validate.viewpoint.group.unknown",`Unknown group "${i}" in viewpoint "${o}".`))}function fo(e,t,r,n,o){let i=e.placement,a=i?.mode==="orbit"?i:null,s=i?.mode==="orbit"?r.get(i.target)??null:null;if(e.groups)for(let l of e.groups)n.has(l)||o.push(_("validate.group.unknown",`Unknown group "${l}" on "${e.id}".`,e.id,"groups"));if(a&&(r.has(a.target)||o.push(j("validate.orbit.target.unknown",`Unknown placement target "${a.target}" on "${e.id}".`,e.id,"orbit")),a.distance&&a.semiMajor&&o.push(j("validate.orbit.distanceConflict",`Object "${e.id}" cannot declare both "distance" and "semiMajor".`,e.id,"distance")),a.phase&&!e.epoch&&!t?.epoch&&o.push(_("validate.phase.epochMissing",`Object "${e.id}" sets "phase" without an object or system epoch.`,e.id,"phase")),a.inclination&&!e.referencePlane&&!t?.referencePlane&&o.push(_("validate.inclination.referencePlaneMissing",`Object "${e.id}" sets "inclination" without an object or system reference plane.`,e.id,"inclination")),a.period&&!Vt(s?.properties.mass)&&o.push(_("validate.period.massMissing",`Object "${e.id}" sets "period" but its central mass cannot be derived.`,e.id,"period"))),i?.mode==="surface"){let l=r.get(i.target);l?to.has(l.type)||o.push(j("validate.surface.target.invalid",`Surface target "${i.target}" on "${e.id}" is not surface-capable.`,e.id,"surface")):o.push(j("validate.surface.target.unknown",`Unknown placement target "${i.target}" on "${e.id}".`,e.id,"surface"))}if(i?.mode==="at"&&(e.type!=="structure"&&e.type!=="phenomenon"&&o.push(j("validate.at.objectType",`Only structures and phenomena may use "at" placement; found "${e.type}" on "${e.id}".`,e.id,"at")),po(e,r,o)||o.push(j("validate.at.target.unknown",`Unknown at-reference target "${i.target}" on "${e.id}".`,e.id,"at"))),e.resonance){let l=r.get(e.resonance.targetObjectId);l?(e.placement?.mode!=="orbit"||l.placement?.mode!=="orbit"||e.placement.target!==l.placement.target)&&o.push(_("validate.resonance.orbitMismatch",`Resonance target "${e.resonance.targetObjectId}" on "${e.id}" does not share a compatible orbital parent.`,e.id,"resonance")):o.push(j("validate.resonance.target.unknown",`Unknown resonance target "${e.resonance.targetObjectId}" on "${e.id}".`,e.id,"resonance"))}for(let l of e.deriveRules??[]){if(l.field!=="period"||l.strategy!=="kepler"){o.push(_("validate.derive.unsupported",`Unsupported derive rule "${l.field} ${l.strategy}" on "${e.id}".`,e.id,"derive"));continue}let c=Et(e,s);if(c===null){o.push(_("validate.derive.inputsMissing",`Object "${e.id}" requests "derive period kepler" but lacks enough input data.`,e.id,"derive"));continue}a?.period||o.push(bo("validate.derive.period.available",`Object "${e.id}" can derive a Kepler period of ${go(c)}.`,e.id,"derive"))}for(let l of e.validationRules??[]){if(l.rule!=="kepler"){o.push(_("validate.rule.unsupported",`Unsupported validation rule "${l.rule}" on "${e.id}".`,e.id,"validate"));continue}let c=Pt(a?.period),u=Et(e,s);if(c===null||u===null)continue;let f=ho(e,"period");Math.abs(c-u)>f&&o.push(j("validate.kepler.mismatch",`Object "${e.id}" fails Kepler validation for "period".`,e.id,"validate"))}}function po(e,t,r){let n=e.placement?.mode==="at"?e.placement.reference:null;return n?n.kind==="named"?t.has(n.name):n.kind==="anchor"?t.has(n.objectId)?!0:(r.push(j("validate.anchor.target.unknown",`Unknown anchor target "${n.objectId}" on "${e.id}".`,e.id,"at")),!1):t.has(n.primary)?n.secondary&&!t.has(n.secondary)?(r.push(j("validate.lagrange.secondary.unknown",`Unknown Lagrange reference "${n.secondary}" on "${e.id}".`,e.id,"at")),!1):!0:(r.push(j("validate.lagrange.primary.unknown",`Unknown Lagrange reference "${n.primary}" on "${e.id}".`,e.id,"at")),!1):!0}function Et(e,t){let r=e.placement;if(!r||r.mode!=="orbit")return null;let n=mo(r.semiMajor??r.distance),o=Vt(t?.properties.mass);return n===null||o===null||o<=0?null:Math.sqrt(n**3/o)*365.25}function mo(e){if(!e)return null;switch(e.unit){case null:case"au":return e.value;case"km":return e.value/Fe;case"m":return e.value/(Fe*1e3);case"ly":return e.value*ao;case"pc":return e.value*so;case"kpc":return e.value*lo;case"re":return e.value*oo/Fe;case"sol":return e.value*io/Fe;default:return null}}function Vt(e){if(!e||typeof e!="object"||!("value"in e))return null;let t=e;switch(t.unit){case null:case"sol":return t.value;case"me":return t.value/ro;case"mj":return t.value/no;default:return null}}function Pt(e){if(!e)return null;switch(e.unit){case null:case"d":return e.value;case"s":return e.value/86400;case"min":return e.value/1440;case"h":return e.value/24;case"y":return e.value*365.25;case"ky":return e.value*365250;case"my":return e.value*36525e4;case"gy":return e.value*36525e7;default:return null}}function ho(e,t){let r=e.tolerances?.find(n=>n.field===t)?.value;return typeof r=="number"?r:r&&typeof r=="object"&&"value"in r?Pt(r)??0:0}function go(e){return`${Math.round(e*100)/100}d`}function j(e,t,r,n){return{code:e,severity:"error",source:"validate",message:t,objectId:r,field:n}}function _(e,t,r,n){return{code:e,severity:"warning",source:"validate",message:t,objectId:r,field:n}}function bo(e,t,r,n){return{code:e,severity:"info",source:"validate",message:t,objectId:r,field:n}}var yo=new Set(["climate","habitability","settlement"]),Ve=new Map;for(let e of["orbit","distance","semiMajor","eccentricity","period","angle","inclination","phase","at","surface","free","kind","class","culture","tags","color","image","hidden","radius","mass","density","gravity","temperature","albedo","atmosphere","inner","outer","on","source","cycle"]){let t=T(e);t&&Ve.set(e,{key:e,version:"2.0",inlineMode:t.arity==="multiple"?"multiple":"single",allowRepeat:!1,legacySchema:t})}for(let e of[{key:"groups",inlineMode:"multiple",allowRepeat:!1},{key:"epoch",inlineMode:"single",allowRepeat:!1},{key:"referencePlane",inlineMode:"single",allowRepeat:!1},{key:"tidalLock",inlineMode:"single",allowRepeat:!1},{key:"renderLabel",inlineMode:"single",allowRepeat:!1},{key:"renderOrbit",inlineMode:"single",allowRepeat:!1},{key:"renderPriority",inlineMode:"single",allowRepeat:!1},{key:"resonance",inlineMode:"pair",allowRepeat:!1},{key:"derive",inlineMode:"pair",allowRepeat:!0},{key:"validate",inlineMode:"single",allowRepeat:!0},{key:"locked",inlineMode:"multiple",allowRepeat:!1},{key:"tolerance",inlineMode:"pair",allowRepeat:!0}])Ve.set(e.key,{key:e.key,version:"2.1",inlineMode:e.inlineMode,allowRepeat:e.allowRepeat});var wo=new Set(Ve.keys());function Ke(e){return vo(e)}function vo(e,t){let r=ri(e),n=r.source.split(/\r?\n/),o=[],i=!1,a="2.0",s=null,l=null,c=[],u=[],f=[],h=!1,p=!1,y=new Set,v=new Set,I=new Set,m=new Set;for(let x=0;x<n.length;x++){let V=n[x],M=x+1;if(!V.trim())continue;let B=$e(V),L=re(V.slice(B),{line:M,columnOffset:B});if(L.length!==0){if(!i){a=$o(L,M),i=!0,r.comments.length>0&&a!=="2.1"&&o.push({code:"parse.schema21.commentCompatibility",severity:"warning",source:"parse",message:`Comments require schema 2.1; parsed in compatibility mode because the document header is "schema ${a}".`,line:r.comments[0].line,column:r.comments[0].column});continue}if(B===0){l=Io(L,M,a,o,s,c,u,f,y,v,I,m,{sawDefaults:h,sawAtlas:p}),l.kind==="system"?s=l.system:l.kind==="defaults"?h=!0:l.kind==="atlas"&&(p=!0);continue}if(!l)throw new d("Indented line without parent atlas section",M,B+1);To(l,B,L,M)}}if(!i)throw new d('Missing required atlas schema header "schema 2.0"');let b=c.map(x=>Yo(x,a,o)),$=t??(a==="2.0-draft"?"2.0":a),E={format:"worldorbit",sourceVersion:"1.0",system:s,groups:u,relations:f,objects:b,diagnostics:o};if($==="2.0-draft"){let x={...E,version:"2.0-draft",schemaVersion:"2.0-draft"};return x.diagnostics.push(...Ee(x,a)),x}let R={...E,version:$,schemaVersion:$};return a==="2.0-draft"&&R.diagnostics.push({code:"load.schema.deprecatedDraft",severity:"warning",source:"upgrade",message:'Source header "schema 2.0-draft" is deprecated; canonical v2 documents now use "schema 2.0".'}),R.diagnostics.push(...Ee(R,a)),R}function $o(e,t){if(e.length!==2||e[0].value.toLowerCase()!=="schema"||!["2.0-draft","2.0","2.1"].includes(e[1].value.toLowerCase()))throw new d('Expected atlas header "schema 2.0", "schema 2.1", or legacy "schema 2.0-draft"',t,e[0]?.column??1);let r=e[1].value.toLowerCase();return r==="2.1"?"2.1":r==="2.0-draft"?"2.0-draft":"2.0"}function Io(e,t,r,n,o,i,a,s,l,c,u,f,h){switch(e[0]?.value.toLowerCase()){case"system":if(o)throw new d('Atlas section "system" may only appear once',t,e[0].column);return xo(e,t,r,n);case"defaults":if(!o)throw new d('Atlas section "defaults" requires a preceding system declaration',t,e[0].column);if(h.sawDefaults)throw new d('Atlas section "defaults" may only appear once',t,e[0].column);return{kind:"defaults",system:o,seenFields:new Set};case"atlas":if(!o)throw new d('Atlas section "atlas" requires a preceding system declaration',t,e[0].column);if(h.sawAtlas)throw new d('Atlas section "atlas" may only appear once',t,e[0].column);return{kind:"atlas",system:o,inMetadata:!1,metadataIndent:null};case"viewpoint":if(!o)throw new d('Atlas section "viewpoint" requires a preceding system declaration',t,e[0].column);return ko(e,t,o,l);case"annotation":if(!o)throw new d('Atlas section "annotation" requires a preceding system declaration',t,e[0].column);return So(e,t,o,c);case"group":return N(r,n,"group",{line:t,column:e[0].column}),jo(e,t,a,u);case"relation":return N(r,n,"relation",{line:t,column:e[0].column}),Oo(e,t,s,f);case"object":return Ao(e,t,r,n,i);default:throw new d(`Unknown atlas section "${e[0]?.value??""}"`,t,e[0]?.column??1)}}function xo(e,t,r,n){if(e.length!==2)throw new d("Invalid atlas system declaration",t,e[0]?.column??1);return{kind:"system",system:{type:"system",id:e[1].value,title:null,description:null,epoch:null,referencePlane:null,defaults:{view:"topdown",scale:null,units:null,preset:null,theme:null},atlasMetadata:{},viewpoints:[],annotations:[]},sourceSchemaVersion:r,diagnostics:n,seenFields:new Set}}function ko(e,t,r,n){if(e.length!==2)throw new d("Invalid viewpoint declaration",t,e[0]?.column??1);let o=pe(e[1].value);if(!o)throw new d("Viewpoint id must not be empty",t,e[1].column);if(n.has(o))throw new d(`Duplicate viewpoint id "${o}"`,t,e[1].column);let i={id:o,label:Le(o),summary:"",focusObjectId:null,selectedObjectId:null,projection:r.defaults.view,preset:r.defaults.preset,zoom:null,rotationDeg:0,layers:{},filter:null};return r.viewpoints.push(i),n.add(o),{kind:"viewpoint",viewpoint:i,seenFields:new Set,inFilter:!1,filterIndent:null,seenFilterFields:new Set}}function So(e,t,r,n){if(e.length!==2)throw new d("Invalid annotation declaration",t,e[0]?.column??1);let o=pe(e[1].value);if(!o)throw new d("Annotation id must not be empty",t,e[1].column);if(n.has(o))throw new d(`Duplicate annotation id "${o}"`,t,e[1].column);let i={id:o,label:Le(o),targetObjectId:null,body:"",tags:[],sourceObjectId:null};return r.annotations.push(i),n.add(o),{kind:"annotation",annotation:i,seenFields:new Set}}function jo(e,t,r,n){if(e.length!==2)throw new d("Invalid group declaration",t,e[0]?.column??1);let o=pe(e[1].value);if(!o)throw new d("Group id must not be empty",t,e[1].column);if(n.has(o))throw new d(`Duplicate group id "${o}"`,t,e[1].column);let i={id:o,label:Le(o),summary:"",color:null,tags:[],hidden:!1};return r.push(i),n.add(o),{kind:"group",group:i,seenFields:new Set}}function Oo(e,t,r,n){if(e.length!==2)throw new d("Invalid relation declaration",t,e[0]?.column??1);let o=pe(e[1].value);if(!o)throw new d("Relation id must not be empty",t,e[1].column);if(n.has(o))throw new d(`Duplicate relation id "${o}"`,t,e[1].column);let i={id:o,from:"",to:"",kind:"",label:null,summary:null,tags:[],color:null,hidden:!1};return r.push(i),n.add(o),{kind:"relation",relation:i,seenFields:new Set}}function Ao(e,t,r,n,o){if(e.length<3)throw new d("Invalid atlas object declaration",t,e[0]?.column??1);let i=e[1],a=e[2],s=i.value;if(!we.has(s)||s==="system")throw new d(`Unknown object type "${i.value}"`,t,i.column);let l={objectType:s,id:a.value,fields:Uo(e.slice(3),t,s,r,n),infoEntries:[],typedBlockEntries:{},location:{line:t,column:i.column}};return o.push(l),{kind:"object",objectNode:l,sourceSchemaVersion:r,diagnostics:n,activeBlock:null,blockIndent:null,seenInfoKeys:new Set,seenTypedBlockKeys:{}}}function To(e,t,r,n){switch(e.kind){case"system":Mo(e,r,n);return;case"defaults":Lo(e,r,n);return;case"atlas":Do(e,t,r,n);return;case"viewpoint":Fo(e,t,r,n);return;case"annotation":Vo(e,r,n);return;case"group":Po(e,r,n);return;case"relation":Co(e,r,n);return;case"object":Ro(e,t,r,n);return}}function Mo(e,t,r){let n=G(t,e.seenFields,r),o=O(t,r);switch(n){case"title":e.system.title=o;return;case"description":N(e.sourceSchemaVersion,e.diagnostics,n,{line:r,column:t[0].column}),e.system.description=o;return;case"epoch":N(e.sourceSchemaVersion,e.diagnostics,n,{line:r,column:t[0].column}),e.system.epoch=o;return;case"referenceplane":N(e.sourceSchemaVersion,e.diagnostics,"referencePlane",{line:r,column:t[0].column}),e.system.referencePlane=o;return;default:throw new d(`Unknown system atlas field "${t[0].value}"`,r,t[0].column)}}function Lo(e,t,r){let n=G(t,e.seenFields,r),o=O(t,r);switch(n){case"view":e.system.defaults.view=Rt(o,r,t[0].column);return;case"scale":e.system.defaults.scale=o;return;case"units":e.system.defaults.units=o;return;case"preset":e.system.defaults.preset=Bt(o,r,t[0].column);return;case"theme":e.system.defaults.theme=o;return;default:throw new d(`Unknown defaults field "${t[0].value}"`,r,t[0].column)}}function Do(e,t,r,n){if(e.inMetadata&&t<=(e.metadataIndent??0)&&(e.inMetadata=!1,e.metadataIndent=null),e.inMetadata){let o=Nt(r,n,"Invalid atlas metadata entry");if(o.key in e.system.atlasMetadata)throw new d(`Duplicate atlas metadata key "${o.key}"`,n,r[0].column);e.system.atlasMetadata[o.key]=o.value;return}if(r.length===1&&r[0].value.toLowerCase()==="metadata"){e.inMetadata=!0,e.metadataIndent=t;return}throw new d(`Unknown atlas field "${r[0].value}"`,n,r[0].column)}function Fo(e,t,r,n){if(e.inFilter&&t<=(e.filterIndent??0)&&(e.inFilter=!1,e.filterIndent=null),e.inFilter){Eo(e,r,n);return}if(r.length===1&&r[0].value.toLowerCase()==="filter"){if(e.seenFields.has("filter"))throw new d('Duplicate viewpoint field "filter"',n,r[0].column);e.seenFields.add("filter"),e.inFilter=!0,e.filterIndent=t;return}let o=G(r,e.seenFields,n),i=O(r,n);switch(o){case"label":e.viewpoint.label=i;return;case"summary":e.viewpoint.summary=i;return;case"focus":e.viewpoint.focusObjectId=i;return;case"select":e.viewpoint.selectedObjectId=i;return;case"projection":e.viewpoint.projection=Rt(i,n,r[0].column);return;case"preset":e.viewpoint.preset=Bt(i,n,r[0].column);return;case"zoom":e.viewpoint.zoom=No(i,n,r[0].column,"zoom");return;case"rotation":e.viewpoint.rotationDeg=_t(i,n,r[0].column,"rotation");return;case"layers":e.viewpoint.layers=_o(r.slice(1),n);return;default:throw new d(`Unknown viewpoint field "${r[0].value}"`,n,r[0].column)}}function Eo(e,t,r){let n=G(t,e.seenFilterFields,r),o=e.viewpoint.filter??zo();switch(n){case"query":o.query=O(t,r);break;case"objecttypes":o.objectTypes=Bo(t.slice(1),r);break;case"tags":o.tags=q(t.slice(1),r,"tags");break;case"groups":o.groupIds=q(t.slice(1),r,"groups");break;default:throw new d(`Unknown viewpoint filter field "${t[0].value}"`,r,t[0].column)}e.viewpoint.filter=o}function Vo(e,t,r){switch(G(t,e.seenFields,r)){case"label":e.annotation.label=O(t,r);return;case"target":e.annotation.targetObjectId=O(t,r);return;case"body":e.annotation.body=O(t,r);return;case"tags":e.annotation.tags=q(t.slice(1),r,"tags");return;default:throw new d(`Unknown annotation field "${t[0].value}"`,r,t[0].column)}}function Po(e,t,r){switch(G(t,e.seenFields,r)){case"label":e.group.label=O(t,r);return;case"summary":e.group.summary=O(t,r);return;case"color":e.group.color=O(t,r);return;case"tags":e.group.tags=q(t.slice(1),r,"tags");return;case"hidden":e.group.hidden=H(O(t,r),"hidden",{line:r,column:t[0].column});return;default:throw new d(`Unknown group field "${t[0].value}"`,r,t[0].column)}}function Co(e,t,r){switch(G(t,e.seenFields,r)){case"from":e.relation.from=O(t,r);return;case"to":e.relation.to=O(t,r);return;case"kind":e.relation.kind=O(t,r);return;case"label":e.relation.label=O(t,r);return;case"summary":e.relation.summary=O(t,r);return;case"tags":e.relation.tags=q(t.slice(1),r,"tags");return;case"color":e.relation.color=O(t,r);return;case"hidden":e.relation.hidden=H(O(t,r),"hidden",{line:r,column:t[0].column});return;default:throw new d(`Unknown relation field "${t[0].value}"`,r,t[0].column)}}function Ro(e,t,r,n){if(e.activeBlock&&t<=(e.blockIndent??0)&&(e.activeBlock=null,e.blockIndent=null),r.length===1){let o=r[0].value.toLowerCase();if(o==="info"||yo.has(o)){o!=="info"&&N(e.sourceSchemaVersion,e.diagnostics,o,{line:n,column:r[0].column}),e.activeBlock=o,e.blockIndent=t;return}}if(e.activeBlock){let o=Nt(r,n,`Invalid ${e.activeBlock} entry`);if(e.activeBlock==="info"){if(e.seenInfoKeys.has(o.key))throw new d(`Duplicate info key "${o.key}"`,n,r[0].column);e.seenInfoKeys.add(o.key),e.objectNode.infoEntries.push(o);return}let i=e.activeBlock,a=e.seenTypedBlockKeys[i]??(e.seenTypedBlockKeys[i]=new Set);if(a.has(o.key))throw new d(`Duplicate ${i} key "${o.key}"`,n,r[0].column);a.add(o.key),(e.objectNode.typedBlockEntries[i]??(e.objectNode.typedBlockEntries[i]=[])).push(o);return}e.objectNode.fields.push(Wo(r,n,e.objectNode.objectType,e.sourceSchemaVersion,e.diagnostics))}function G(e,t,r){if(e.length<2)throw new d("Invalid atlas field line",r,e[0]?.column??1);let n=e[0].value.toLowerCase();if(t.has(n))throw new d(`Duplicate atlas field "${e[0].value}"`,r,e[0].column);return t.add(n),n}function O(e,t){if(e.length<2)throw new d("Missing value for atlas field",t,e[0]?.column??1);return e.slice(1).map(r=>r.value).join(" ").trim()}function Bo(e,t){return q(e,t,"objectTypes").filter(r=>r==="star"||r==="planet"||r==="moon"||r==="belt"||r==="asteroid"||r==="comet"||r==="ring"||r==="structure"||r==="phenomenon")}function _o(e,t){let r={};for(let n of q(e,t,"layers")){let o=!n.startsWith("-")&&!n.startsWith("!"),i=n.replace(/^[-!]+/,"").toLowerCase();if(i==="orbits"){r["orbits-back"]=o,r["orbits-front"]=o;continue}(i==="background"||i==="guides"||i==="orbits-back"||i==="orbits-front"||i==="relations"||i==="objects"||i==="labels"||i==="metadata")&&(r[i]=o)}return r}function q(e,t,r){if(e.length===0)throw new d(`Missing value for atlas field "${r}"`,t,1);let n=e.map(o=>o.value).filter(Boolean);if(n.length===0)throw new d(`Missing value for atlas field "${r}"`,t,e[0]?.column??1);return n}function Rt(e,t,r){let n=e.toLowerCase();if(n!=="topdown"&&n!=="isometric")throw new d(`Unknown projection "${e}"`,t,r);return n}function Bt(e,t,r){let n=e.toLowerCase();if(n==="diagram"||n==="presentation"||n==="atlas-card"||n==="markdown")return n;throw new d(`Unknown render preset "${e}"`,t,r)}function No(e,t,r,n){let o=_t(e,t,r,n);if(o<=0)throw new d(`Field "${n}" must be greater than zero`,t,r);return o}function _t(e,t,r,n){let o=Number(e);if(!Number.isFinite(o))throw new d(`Invalid numeric value "${e}" for "${n}"`,t,r);return o}function zo(){return{query:null,objectTypes:[],tags:[],groupIds:[]}}function Uo(e,t,r,n,o){let i=[],a=0;for(;a<e.length;){let s=e[a],l=me(s.value);if(!l)throw new d(`Unknown field "${s.value}"`,t,s.column);l.version==="2.1"&&N(n,o,s.value,{line:t,column:s.column}),a++;let c=[];if(l.inlineMode==="single"){let u=e[a];u&&(c.push(u),a++)}else if(l.inlineMode==="pair")for(let u=0;u<2;u++){let f=e[a];if(!f)break;c.push(f),a++}else for(;a<e.length&&!wo.has(e[a].value);)c.push(e[a]),a++;if(c.length===0)throw new d(`Missing value for field "${s.value}"`,t,s.column);i.push({type:"field",key:s.value,values:c.map(u=>u.value),location:{line:t,column:s.column}})}return Ut(i,r),i}function Wo(e,t,r,n,o){if(e.length<2)throw new d("Invalid field line",t,e[0]?.column??1);let i=me(e[0].value);if(!i)throw new d(`Unknown field "${e[0].value}"`,t,e[0].column);i.version==="2.1"&&N(n,o,e[0].value,{line:t,column:e[0].column});let a={type:"field",key:e[0].value,values:e.slice(1).map(s=>s.value),location:{line:t,column:e[0].column}};return Ut([a],r),a}function Nt(e,t,r){if(e.length<2)throw new d(r,t,e[0]?.column??1);return{type:"info-entry",key:e[0].value,value:e.slice(1).map(n=>n.value).join(" "),location:{line:t,column:e[0].column}}}function Yo(e,t,r){let n=Ho(e.fields),o=qo(e.objectType,n),i=Go(e.objectType,n),a=ei(n.get("groups")?.[0]),s=Ct(n.get("epoch")?.[0]),l=Ct(n.get("referencePlane")?.[0]),c=n.has("tidalLock")?H(P(n.get("tidalLock")[0]),"tidalLock",n.get("tidalLock")[0].location):void 0,u=n.has("resonance")?Zo(n.get("resonance")[0]):void 0,f=Ko(n),h=n.get("derive")?.map($=>Jo($)),p=n.get("validate")?.map($=>({rule:P($)})),y=n.has("locked")?[...new Set(n.get("locked").flatMap($=>$.values))]:void 0,v=n.get("tolerance")?.map($=>Qo($)),I=Xo(e.typedBlockEntries),m=zt(e.infoEntries,"info"),b={type:e.objectType,id:e.id,properties:i,placement:o,info:m};return a.length>0&&(b.groups=a),s&&(b.epoch=s),l&&(b.referencePlane=l),c!==void 0&&(b.tidalLock=c),u&&(b.resonance=u),f&&(b.renderHints=f),h?.length&&(b.deriveRules=h),p?.length&&(b.validationRules=p),y?.length&&(b.lockedFields=y),v?.length&&(b.tolerances=v),I&&Object.keys(I).length>0&&(b.typedBlocks=I),t!=="2.1"&&(b.groups||b.epoch||b.referencePlane||b.tidalLock!==void 0||b.resonance||b.renderHints||b.deriveRules?.length||b.validationRules?.length||b.lockedFields?.length||b.tolerances?.length||b.typedBlocks)&&N(t,r,e.id,e.location),b}function Ho(e){let t=new Map;for(let r of e){let n=me(r.key);if(!n)throw d.fromLocation(`Unknown field "${r.key}"`,r.location);if(!n.allowRepeat&&t.has(r.key))throw d.fromLocation(`Duplicate field "${r.key}"`,r.location);let o=t.get(r.key)??[];o.push(r),t.set(r.key,o)}return t}function qo(e,t){let r=t.get("orbit")?.[0],n=t.get("at")?.[0],o=t.get("surface")?.[0],i=t.get("free")?.[0];if([r,n,o,i].filter(Boolean).length>1){let s=r??n??o??i;throw d.fromLocation("Object has multiple placement modes",s?.location)}if(r)return{mode:"orbit",target:P(r),distance:Q(t.get("distance")?.[0],"distance"),semiMajor:Q(t.get("semiMajor")?.[0],"semiMajor"),eccentricity:ti(t.get("eccentricity")?.[0],"eccentricity"),period:Q(t.get("period")?.[0],"period"),angle:Q(t.get("angle")?.[0],"angle"),inclination:Q(t.get("inclination")?.[0],"inclination"),phase:Q(t.get("phase")?.[0],"phase")};if(n){let s=P(n);return{mode:"at",target:s,reference:Dt(s,n.location)}}if(o)return{mode:"surface",target:P(o)};if(i){let s=P(i),l=Ge(s);return{mode:"free",distance:l??void 0,descriptor:l?void 0:s}}return null}function Go(e,t){let r={};for(let[n,o]of t.entries()){let i=o[0],a=me(n);!i||!a?.legacySchema||a.legacySchema.placement||(Xe(n,e,i.location),r[n]=Ft(n,i.values,i.location))}return r}function zt(e,t){let r={};for(let n of e){if(n.key in r)throw d.fromLocation(`Duplicate ${t} key "${n.key}"`,n.location);r[n.key]=n.value}return r}function Xo(e){let t={};for(let r of Object.keys(e)){let n=e[r];n?.length&&(t[r]=zt(n,r))}return t}function Ko(e){let t={},r=e.get("renderLabel")?.[0],n=e.get("renderOrbit")?.[0],o=e.get("renderPriority")?.[0];return r&&(t.renderLabel=H(P(r),"renderLabel",r.location)),n&&(t.renderOrbit=H(P(n),"renderOrbit",n.location)),o&&(t.renderPriority=De(P(o),"renderPriority",o.location)),Object.keys(t).length>0?t:void 0}function Zo(e){if(e.values.length!==2)throw d.fromLocation('Field "resonance" expects "<targetObjectId> <ratio>"',e.location);let t=e.values[1];if(!/^\d+:\d+$/.test(t))throw d.fromLocation(`Invalid resonance ratio "${t}"`,e.location);return{targetObjectId:e.values[0],ratio:t}}function Jo(e){if(e.values.length!==2)throw d.fromLocation('Field "derive" expects "<field> <strategy>"',e.location);return{field:e.values[0],strategy:e.values[1]}}function Qo(e){if(e.values.length!==2)throw d.fromLocation('Field "tolerance" expects "<field> <value>"',e.location);let t=e.values[1],r=Ge(t),n=Number(t);return{field:e.values[0],value:r??(Number.isFinite(n)?n:t)}}function ei(e){return e?[...new Set(e.values)]:[]}function Ct(e){return e&&e.values.join(" ").trim()||null}function Q(e,t){return e?qe(P(e),e.location,t):void 0}function ti(e,t){return e?De(P(e),t,e.location):void 0}function P(e){return fe(e.values,e.key,e.location)}function me(e){return Ve.get(e)}function Ut(e,t){for(let r of e){let n=me(r.key);if(!n)throw d.fromLocation(`Unknown field "${r.key}"`,r.location);if(n.legacySchema){Xe(r.key,t,r.location);continue}if((r.key==="renderLabel"||r.key==="renderOrbit"||r.key==="tidalLock")&&r.values.length!==1)throw d.fromLocation(`Field "${r.key}" expects exactly one value`,r.location)}}function N(e,t,r,n){e!=="2.1"&&t.push({code:"parse.schema21.featureCompatibility",severity:"warning",source:"parse",message:`Feature "${r}" requires schema 2.1; parsed in compatibility mode because the document header is "schema ${e}".`,line:n.line,column:n.column})}function ri(e){let t=[...e],r=[],n=!1,o=!1,i=null,a=1,s=1;for(let l=0;l<t.length;l++){let c=t[l],u=t[l+1];if(o){if(c==="*"&&u==="/"){t[l]=" ",t[l+1]=" ",o=!1,i=null,l++,s+=2;continue}c!==`
|
|
2
|
+
`&&c!=="\r"&&(t[l]=" "),c===`
|
|
3
|
+
`?(a++,s=1):s++;continue}if(!n&&c==="/"&&u==="*"){r.push({kind:"block",line:a,column:s}),t[l]=" ",t[l+1]=" ",o=!0,i={line:a,column:s},l++,s+=2;continue}if(!n&&c==="#"&&!ni(t,l)){r.push({kind:"line",line:a,column:s}),t[l]=" ";let f=l+1;for(;f<t.length&&t[f]!==`
|
|
4
|
+
`&&t[f]!=="\r";)t[f]=" ",f++;s+=f-l,l=f-1;continue}c==='"'&&t[l-1]!=="\\"&&(n=!n),c===`
|
|
5
|
+
`?(a++,s=1):s++}if(o)throw d.fromLocation("Unclosed block comment",i??void 0);return{source:t.join(""),comments:r}}function ni(e,t){let r=t+1,n=0;for(;r<e.length&&/[0-9a-f]/i.test(e[r]??"");)r++,n++;if(![3,4,6,8].includes(n))return!1;let o=e[r];return o===void 0||o===" "||o===" "||o==="\r"||o===`
|
|
6
|
+
`}var oi=/^schema\s+2(?:\.0|\.1)?$/i,ii=/^schema\s+2\.1$/i,ai=/^schema\s+2\.0-draft$/i;function Wt(e){for(let t of si(e).split(/\r?\n/)){let r=t.trim();if(r)return ai.test(r)?"2.0-draft":ii.test(r)?"2.1":oi.test(r)?"2.0":"1.0"}return"1.0"}function si(e){let t=[...e],r=!1,n=!1;for(let o=0;o<t.length;o++){let i=t[o],a=t[o+1];if(n){if(i==="*"&&a==="/"){t[o]=" ",t[o+1]=" ",n=!1,o++;continue}i!==`
|
|
7
|
+
`&&i!=="\r"&&(t[o]=" ");continue}if(!r&&i==="/"&&a==="*"){t[o]=" ",t[o+1]=" ",n=!0,o++;continue}if(!r&&i==="#"){t[o]=" ";let s=o+1;for(;s<t.length&&t[s]!==`
|
|
8
|
+
`&&t[s]!=="\r";)t[s]=" ",s++;o=s-1;continue}i==='"'&&t[o-1]!=="\\"&&(r=!r)}return t.join("")}function X(e){let t=Yt(e);if(!t.ok||!t.value){let r=t.diagnostics[0];throw new d(r?.message??"Failed to load WorldOrbit source",r?.line,r?.column)}return t.value}function Yt(e){let t=Wt(e);if(t==="2.0"||t==="2.0-draft"||t==="2.1")return li(e,t);let r;try{r=ne(e)}catch(o){return{ok:!1,value:null,diagnostics:[Y(o,"parse")]}}let n;try{n=oe(r)}catch(o){return{ok:!1,value:null,diagnostics:[Y(o,"normalize")]}}try{ie(n)}catch(o){return{ok:!1,value:null,diagnostics:[Y(o,"validate")]}}return{ok:!0,value:{schemaVersion:t,ast:r,document:n,atlasDocument:null,draftDocument:null,diagnostics:[]},diagnostics:[]}}function li(e,t){let r;try{r=Ke(e)}catch(a){return{ok:!1,value:null,diagnostics:[Y(a,"parse","load.atlas.failed")]}}let n=[...r.diagnostics];if(n.some(a=>a.severity==="error"))return{ok:!1,value:null,diagnostics:n};let o;try{o=He(r)}catch(a){return{ok:!1,value:null,diagnostics:[Y(a,"normalize","load.atlas.materialize.failed")]}}return{ok:!0,value:{schemaVersion:t,ast:null,document:o,atlasDocument:r,draftDocument:r,diagnostics:n},diagnostics:n}}var di={background:!0,guides:!0,relations:!0,orbits:!0,objects:!0,labels:!0,structures:!0,metadata:!0},Pe={atlas:{name:"atlas",backgroundStart:"#041018",backgroundEnd:"#0a2331",backgroundGlow:"rgba(240, 180, 100, 0.18)",panel:"rgba(7, 17, 27, 0.9)",panelLine:"rgba(168, 207, 242, 0.18)",relation:"rgba(240, 180, 100, 0.42)",orbit:"rgba(163, 209, 255, 0.24)",orbitBand:"rgba(255, 190, 120, 0.28)",guide:"rgba(255, 255, 255, 0.04)",leader:"rgba(225, 238, 255, 0.4)",ink:"#e8f0ff",muted:"rgba(232, 240, 255, 0.7)",accent:"#f0b464",accentStrong:"#ff7f5f",selected:"rgba(255, 214, 139, 0.92)",starCore:"#ffcc67",starStroke:"rgba(255, 245, 203, 0.85)",starGlow:"#ffe8a3",fontFamily:'"Segoe UI Variable", "Bahnschrift", sans-serif',displayFont:'"Bahnschrift", "Segoe UI Variable", sans-serif'},nightglass:{name:"nightglass",backgroundStart:"#07131f",backgroundEnd:"#13283a",backgroundGlow:"rgba(120, 255, 215, 0.16)",panel:"rgba(7, 20, 30, 0.9)",panelLine:"rgba(120, 255, 215, 0.16)",relation:"rgba(156, 231, 255, 0.42)",orbit:"rgba(120, 255, 215, 0.2)",orbitBand:"rgba(137, 185, 255, 0.24)",guide:"rgba(255, 255, 255, 0.035)",leader:"rgba(192, 255, 233, 0.42)",ink:"#edfff8",muted:"rgba(237, 255, 248, 0.68)",accent:"#78ffd7",accentStrong:"#9ce7ff",selected:"rgba(120, 255, 215, 0.9)",starCore:"#e5f98c",starStroke:"rgba(246, 255, 217, 0.9)",starGlow:"#fffab4",fontFamily:'"Segoe UI Variable", "Bahnschrift", sans-serif',displayFont:'"Bahnschrift", "Segoe UI Variable", sans-serif'},ember:{name:"ember",backgroundStart:"#17090b",backgroundEnd:"#31111a",backgroundGlow:"rgba(255, 127, 95, 0.18)",panel:"rgba(24, 9, 13, 0.9)",panelLine:"rgba(255, 166, 149, 0.16)",relation:"rgba(255, 178, 125, 0.42)",orbit:"rgba(255, 188, 164, 0.22)",orbitBand:"rgba(255, 214, 139, 0.24)",guide:"rgba(255, 255, 255, 0.03)",leader:"rgba(255, 223, 209, 0.42)",ink:"#fff3ee",muted:"rgba(255, 243, 238, 0.68)",accent:"#ffb27d",accentStrong:"#ff7f5f",selected:"rgba(255, 178, 125, 0.9)",starCore:"#ffb766",starStroke:"rgba(255, 236, 205, 0.88)",starGlow:"#ffe2ad",fontFamily:'"Segoe UI Variable", "Bahnschrift", sans-serif',displayFont:'"Bahnschrift", "Segoe UI Variable", sans-serif'}};function Ze(e){return e?typeof e=="string"?Pe[e]??Pe.atlas:{...Pe.atlas,...e}:Pe.atlas}function Je(e){return{...di,...e}}function Ce(e){if(!e)return null;let t={query:e.query?.trim()||void 0,objectTypes:Qe(e.objectTypes??[]),tags:Qe((e.tags??[]).map(r=>r.trim()).filter(Boolean)),groupIds:Qe((e.groupIds??[]).map(r=>r.trim()).filter(Boolean)),includeAncestors:e.includeAncestors??!0};return fi(t)?t:null}function fi(e){return!!(e&&(e.query?.trim()||e.objectTypes?.length||e.tags?.length||e.groupIds?.length))}function et(e,t){let r=Ce(t),n=new Set;for(let o of e.objects)if(!o.hidden&&pi(o,r)&&(n.add(o.objectId),r?.includeAncestors!==!1))for(let i of o.ancestorIds)n.add(i);return r?n:new Set(e.objects.filter(o=>!o.hidden).map(o=>o.objectId))}function pi(e,t){if(!t)return!0;if(t.objectTypes?.length&&!t.objectTypes.includes(e.object.type))return!1;if(t.groupIds?.length&&(!e.groupId||!t.groupIds.includes(e.groupId))){let r=e.semanticGroupIds.length>0&&t.groupIds.some(o=>e.semanticGroupIds.includes(o)),n=!!(e.groupId&&t.groupIds.includes(e.groupId));if(!r&&!n)return!1}if(t.tags?.length){let r=Array.isArray(e.object.properties.tags)?e.object.properties.tags.filter(n=>typeof n=="string"):[];if(!t.tags.every(n=>r.includes(n)))return!1}if(t.query?.trim()){let r=mi(e.object,e.label).toLowerCase();if(!t.query.toLowerCase().split(/\s+/).filter(Boolean).every(o=>r.includes(o)))return!1}return!0}function mi(e,t){let r=Object.values(e.info),n=Object.values(e.properties).flatMap(o=>Array.isArray(o)?o:typeof o=="object"&&o&&"value"in o?[String(o.value),String(o.unit??"")]:[String(o)]).filter(Boolean);return[e.id,t,e.type,...n,...r].join(" ")}function Qe(e){return[...new Set(e)]}var tt="worldorbit-camera-root";function K(e,t={}){let r=Ze(t.theme),n=Ti(t.preset??e.renderPreset??void 0),o=Je({...n.layers,...t.layers}),i=t.subtitle??e.subtitle,a=et(e,t.filter??null),s=e.objects.filter(m=>!m.hidden).filter(m=>a.has(m.objectId)).filter(m=>o.structures||!Re(m.object)).sort((m,b)=>m.sortKey-b.sortKey),l=e.labels.filter(m=>!m.hidden).filter(m=>a.has(m.objectId)).filter(m=>o.structures||!Re(m.object)),c=gi(s),u=o.orbits?hi(e,a,o.structures):{back:"",front:""},f=o.guides?e.leaders.filter(m=>!m.hidden).filter(m=>a.has(m.objectId)).filter(m=>o.structures||!Re(m.object)).map(m=>`<line class="wo-leader wo-leader-${m.mode}" x1="${m.x1}" y1="${m.y1}" x2="${m.x2}" y2="${m.y2}" data-render-id="${A(m.renderId)}" data-group-id="${C(m.groupId??"")}" />`).join(""):"",h=o.relations?e.relations.filter(m=>!m.hidden).filter(m=>a.has(m.fromObjectId)&&a.has(m.toObjectId)).map(m=>`<line class="wo-relation" x1="${m.x1}" y1="${m.y1}" x2="${m.x2}" y2="${m.y2}" data-render-id="${A(m.renderId)}" data-relation-id="${C(m.relationId)}" />`).join(""):"",p=o.objects?s.map(m=>bi(m,t.selectedObjectId??null,r)).join(""):"",y=o.labels?l.map(m=>yi(e,m,t.selectedObjectId??null)).join(""):"",v=o.metadata?`<text class="wo-title" x="56" y="64">${A(e.title)}</text>
|
|
9
|
+
<text class="wo-subtitle" x="56" y="88">${A(i)}</text>
|
|
10
|
+
<text class="wo-meta" x="56" y="${e.height-42}">${A(Li(e))}</text>`:"",I=o.background?`<rect class="wo-bg" x="0" y="0" width="${e.width}" height="${e.height}" rx="28" ry="28" />
|
|
11
|
+
<rect class="wo-bg-glow" x="0" y="0" width="${e.width}" height="${e.height}" rx="28" ry="28" />
|
|
12
|
+
${o.guides?Mi(e.width,e.height):""}`:"";return`<svg xmlns="http://www.w3.org/2000/svg" data-worldorbit-svg="true" width="${e.width}" height="${e.height}" viewBox="0 0 ${e.width} ${e.height}" preserveAspectRatio="xMidYMid meet" role="img" aria-labelledby="worldorbit-title worldorbit-desc">
|
|
13
|
+
<title id="worldorbit-title">${A(e.title)}</title>
|
|
14
|
+
<desc id="worldorbit-desc">A ${A(e.viewMode)} WorldOrbit render with ${s.length} visible objects.</desc>
|
|
15
|
+
<defs>
|
|
16
|
+
<linearGradient id="wo-bg" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
17
|
+
<stop offset="0%" stop-color="${r.backgroundStart}" />
|
|
18
|
+
<stop offset="100%" stop-color="${r.backgroundEnd}" />
|
|
19
|
+
</linearGradient>
|
|
20
|
+
<radialGradient id="wo-star-glow" cx="50%" cy="50%" r="50%">
|
|
21
|
+
<stop offset="0%" stop-color="${r.starGlow}" stop-opacity="0.95" />
|
|
22
|
+
<stop offset="100%" stop-color="${r.starCore}" stop-opacity="0" />
|
|
23
|
+
</radialGradient>
|
|
24
|
+
<radialGradient id="wo-bg-glow" cx="20%" cy="10%" r="90%">
|
|
25
|
+
<stop offset="0%" stop-color="${r.backgroundGlow}" />
|
|
26
|
+
<stop offset="100%" stop-color="transparent" />
|
|
27
|
+
</radialGradient>
|
|
28
|
+
${c}
|
|
29
|
+
</defs>
|
|
30
|
+
<style>
|
|
31
|
+
.wo-bg { fill: url(#wo-bg); }
|
|
32
|
+
.wo-bg-glow { fill: url(#wo-bg-glow); }
|
|
33
|
+
.wo-grid { fill: none; stroke: ${r.guide}; stroke-width: 1; }
|
|
34
|
+
.wo-orbit { fill: none; stroke: ${r.orbit}; stroke-width: 1.5; }
|
|
35
|
+
.wo-orbit-back { opacity: 0.38; stroke-dasharray: 8 6; }
|
|
36
|
+
.wo-orbit-front { opacity: 0.9; }
|
|
37
|
+
.wo-orbit-band { stroke: ${r.orbitBand}; stroke-linecap: round; }
|
|
38
|
+
.wo-relation { stroke: ${r.relation}; stroke-width: 2; stroke-dasharray: 10 6; }
|
|
39
|
+
.wo-leader { stroke: ${r.leader}; stroke-width: 1.5; stroke-dasharray: 6 5; }
|
|
40
|
+
.wo-label { fill: ${r.ink}; font-family: ${r.fontFamily}; font-weight: 600; letter-spacing: 0.02em; }
|
|
41
|
+
.wo-label-secondary { fill: ${r.muted}; font-family: ${r.fontFamily}; font-weight: 500; }
|
|
42
|
+
.wo-title { fill: ${r.ink}; font: 700 24px ${r.displayFont}; letter-spacing: 0.06em; text-transform: uppercase; }
|
|
43
|
+
.wo-subtitle { fill: ${r.muted}; font: 500 12px ${r.fontFamily}; letter-spacing: 0.14em; text-transform: uppercase; }
|
|
44
|
+
.wo-meta { fill: ${r.muted}; font: 500 11px ${r.fontFamily}; letter-spacing: 0.06em; }
|
|
45
|
+
.wo-object { cursor: pointer; outline: none; }
|
|
46
|
+
.wo-object:focus-visible .wo-selection-ring,
|
|
47
|
+
.wo-object:hover .wo-selection-ring,
|
|
48
|
+
.wo-object-selected .wo-selection-ring { display: block; }
|
|
49
|
+
.wo-object-selected .wo-selection-ring { stroke: ${r.selected}; }
|
|
50
|
+
.wo-object-label-selected .wo-label { fill: ${r.accent}; }
|
|
51
|
+
.wo-object-label-selected .wo-label-secondary { fill: ${r.selected}; }
|
|
52
|
+
.wo-chain-selected .wo-selection-ring,
|
|
53
|
+
.wo-chain-hover .wo-selection-ring { display: block; }
|
|
54
|
+
.wo-ancestor-selected .wo-selection-ring,
|
|
55
|
+
.wo-ancestor-hover .wo-selection-ring { display: block; opacity: 0.66; }
|
|
56
|
+
.wo-chain-selected .wo-label,
|
|
57
|
+
.wo-chain-hover .wo-label { fill: ${r.accent}; }
|
|
58
|
+
.wo-ancestor-selected .wo-label,
|
|
59
|
+
.wo-ancestor-hover .wo-label { fill: ${r.ink}; opacity: 0.82; }
|
|
60
|
+
.wo-orbit-related-selected,
|
|
61
|
+
.wo-orbit-related-hover { stroke: ${r.accentStrong}; opacity: 1; }
|
|
62
|
+
.wo-selection-ring { display: none; fill: none; stroke-width: 2; stroke-dasharray: 6 5; }
|
|
63
|
+
.wo-object-image { pointer-events: none; }
|
|
64
|
+
</style>
|
|
65
|
+
${I}
|
|
66
|
+
${v}
|
|
67
|
+
<g data-worldorbit-world="true">
|
|
68
|
+
<g data-worldorbit-camera-root="${tt}" id="${tt}">
|
|
69
|
+
<g data-worldorbit-world-content="true">
|
|
70
|
+
${o.orbits?`<g data-layer-id="orbits-back">${u.back}</g>`:""}
|
|
71
|
+
${o.guides?`<g data-layer-id="guides">${f}</g>`:""}
|
|
72
|
+
${o.relations?`<g data-layer-id="relations">${h}</g>`:""}
|
|
73
|
+
${o.objects?`<g data-layer-id="objects">${p}</g>`:""}
|
|
74
|
+
${o.orbits?`<g data-layer-id="orbits-front">${u.front}</g>`:""}
|
|
75
|
+
${o.labels?`<g data-layer-id="labels">${y}</g>`:""}
|
|
76
|
+
</g>
|
|
77
|
+
</g>
|
|
78
|
+
</g>
|
|
79
|
+
</svg>`}function hi(e,t,r){let n=[],o=[];for(let i of e.orbitVisuals.filter(a=>!a.hidden&&t.has(a.objectId)&&(r||!Re(a.object)))){let a=i.bandThickness??(i.band?10:1.5),s=i.band?"wo-orbit wo-orbit-band wo-orbit-node":"wo-orbit wo-orbit-node",l=`data-render-id="${A(i.renderId)}" data-orbit-object-id="${C(i.objectId)}" data-parent-id="${C(i.parentId)}" data-group-id="${C(i.groupId??"")}"`;if(i.backArcPath||i.frontArcPath){i.backArcPath&&n.push(`<path class="${s} wo-orbit-back" d="${i.backArcPath}" stroke-width="${a}" ${l} />`),i.frontArcPath&&o.push(`<path class="${s} wo-orbit-front" d="${i.frontArcPath}" stroke-width="${a}" ${l} />`);continue}if(i.kind==="ellipse"){let c=i.rx??i.radius??0,u=i.ry??i.radius??0;o.push(`<ellipse class="${s} wo-orbit-front" cx="${i.cx}" cy="${i.cy}" rx="${c}" ry="${u}" transform="rotate(${i.rotationDeg} ${i.cx} ${i.cy})" stroke-width="${a}" ${l} />`);continue}o.push(`<circle class="${s} wo-orbit-front" cx="${i.cx}" cy="${i.cy}" r="${i.radius??0}" stroke-width="${a}" ${l} />`)}return{back:n.join(""),front:o.join("")}}function gi(e){return e.filter(t=>!!t.imageHref).map(t=>$i(t)).join("")}function bi(e,t,r){let{object:n,x:o,y:i,radius:a,visualRadius:s}=e,l=t===e.objectId?" wo-object-selected":"",c=n.properties.kind?` wo-kind-${String(n.properties.kind).toLowerCase().replace(/[^a-z0-9-]/g,"-")}`:"",u=xi(e,r),f=vi(e),h=f?qt(n,o,i,a,u,{outlineOnly:!0}):"";return`<g class="wo-object wo-object-${n.type}${c}${l}" data-object-id="${A(e.objectId)}" data-parent-id="${C(e.parentId??"")}" data-group-id="${C(e.groupId??"")}" data-render-id="${A(e.renderId)}" tabindex="0" role="button" aria-label="${A(`${n.type} ${e.objectId}`)}">
|
|
80
|
+
<circle class="wo-selection-ring" cx="${o}" cy="${i}" r="${s+8}" />
|
|
81
|
+
${wi(e,u)}
|
|
82
|
+
${qt(n,o,i,a,u)}
|
|
83
|
+
${f}
|
|
84
|
+
${h}
|
|
85
|
+
</g>`}function yi(e,t,r){let n=r===t.objectId?" wo-object-label-selected":"",o=e.scaleModel.labelMultiplier;return`<g class="wo-object-label${n}" data-object-id="${A(t.objectId)}" data-group-id="${C(t.groupId??"")}" data-render-id="${A(t.renderId)}">
|
|
86
|
+
<text class="wo-label" x="${t.x}" y="${t.y}" text-anchor="${t.textAnchor}" font-size="${14*o}">${A(t.label)}</text>
|
|
87
|
+
<text class="wo-label-secondary" x="${t.x}" y="${t.secondaryY}" text-anchor="${t.textAnchor}" font-size="${11*o}">${A(t.secondaryLabel)}</text>
|
|
88
|
+
</g>`}function qt(e,t,r,n,o,i={}){let a=i.outlineOnly?"transparent":o.fill,s=o.tail??o.fill;switch(e.type){case"star":return i.outlineOnly?`<circle cx="${t}" cy="${r}" r="${n}" fill="transparent" stroke="${o.stroke}" stroke-width="2" />`:`<circle cx="${t}" cy="${r}" r="${n*2.4}" fill="${o.glow??"url(#wo-star-glow)"}" opacity="0.84" />
|
|
89
|
+
<circle cx="${t}" cy="${r}" r="${n}" fill="${a}" stroke="${o.stroke}" stroke-width="2" />`;case"planet":case"moon":case"belt":case"asteroid":case"ring":return`<circle cx="${t}" cy="${r}" r="${n}" fill="${a}" stroke="${o.stroke}" stroke-width="${i.outlineOnly?1.5:1.4}" />`;case"comet":return i.outlineOnly?`<circle cx="${t}" cy="${r}" r="${n}" fill="transparent" stroke="${o.stroke}" stroke-width="1.4" />`:`<path d="M ${t-n*2} ${r+n*1.3} Q ${t-n*.7} ${r+n*.3} ${t-n*.45} ${r}" fill="none" stroke="${s}" stroke-width="${Math.max(2,n*.8)}" stroke-linecap="round" opacity="0.85" />
|
|
90
|
+
<circle cx="${t}" cy="${r}" r="${n}" fill="${a}" stroke="${o.stroke}" stroke-width="1.4" />`;case"structure":return`<polygon points="${Zt(t,r,n)}" fill="${a}" stroke="${o.stroke}" stroke-width="1.4" />`;case"phenomenon":{let l=String(e.properties.kind??"").toLowerCase().replace(/_/g,"-");return i.outlineOnly?l==="black-hole"||l==="nebula"||l==="galaxy"||l==="dwarf-galaxy"?`<circle cx="${t}" cy="${r}" r="${n}" fill="transparent" stroke="${o.stroke}" stroke-width="1.4" />`:`<polygon points="${rt(t,r,n)}" fill="transparent" stroke="${o.stroke}" stroke-width="1.4" />`:l==="black-hole"?`<ellipse cx="${t}" cy="${r}" rx="${n*2.4}" ry="${n*.55}" fill="none" stroke="${o.accentRing??o.stroke}" stroke-width="3.5" />
|
|
91
|
+
<circle cx="${t}" cy="${r}" r="${n}" fill="${a}" stroke="${o.stroke}" stroke-width="2" />`:l==="galaxy"?`<ellipse cx="${t}" cy="${r}" rx="${n*2.6}" ry="${n}" fill="${o.halo??"none"}" stroke="none" />
|
|
92
|
+
<ellipse cx="${t}" cy="${r}" rx="${n*1.5}" ry="${n*.42}" fill="${a}" stroke="${o.stroke}" stroke-width="1.2" />
|
|
93
|
+
<circle cx="${t}" cy="${r}" r="${n*.28}" fill="${o.core??"#fff"}" stroke="none" />`:l==="dwarf-galaxy"?`<ellipse cx="${t}" cy="${r}" rx="${n*1.6}" ry="${n*.55}" fill="${a}" stroke="${o.stroke}" stroke-width="1" />
|
|
94
|
+
<circle cx="${t}" cy="${r}" r="${n*.25}" fill="${o.core??"#fff"}" stroke="none" />`:l==="nebula"?`<circle cx="${t}" cy="${r}" r="${n*2.2}" fill="${o.halo??"none"}" stroke="none" />
|
|
95
|
+
<circle cx="${t}" cy="${r}" r="${n}" fill="${a}" stroke="${o.stroke}" stroke-width="1" />`:`<polygon points="${rt(t,r,n)}" fill="${a}" stroke="${o.stroke}" stroke-width="1.4" />`}}}function wi(e,t){if(!t.atmosphere)return"";let{object:r,x:n,y:o,radius:i}=e;return r.type!=="planet"&&r.type!=="moon"&&r.type!=="asteroid"?"":`<circle cx="${n}" cy="${o}" r="${i+4}" fill="none" stroke="${t.atmosphere}" stroke-width="4" opacity="0.45" />`}function vi(e){if(!e.imageHref)return"";let t=Ii(e);return`<image class="wo-object-image" x="${t.x}" y="${t.y}" width="${t.width}" height="${t.height}" href="${C(e.imageHref)}" preserveAspectRatio="xMidYMid slice" clip-path="url(#${C(Kt(e))})" />`}function $i(e){let{x:t,y:r,radius:n}=e,o="";switch(e.object.type){case"star":case"planet":case"moon":case"asteroid":case"comet":o=`<circle cx="${t}" cy="${r}" r="${n}" />`;break;case"structure":o=`<polygon points="${Zt(t,r,n)}" />`;break;case"phenomenon":o=`<polygon points="${rt(t,r,n)}" />`;break;default:return""}return`<clipPath id="${C(Kt(e))}" clipPathUnits="userSpaceOnUse">${o}</clipPath>`}function Ii(e){let{object:t,x:r,y:n,radius:o}=e;switch(t.type){case"structure":return{x:r-o,y:n-o,width:o*2,height:o*2};case"phenomenon":return{x:r-o*1.2,y:n-o*1.2,width:o*2.4,height:o*2.4};default:return{x:r-o,y:n-o,width:o*2,height:o*2}}}function xi(e,t){let r=String(e.object.properties.kind??"").toLowerCase().replace(/_/g,"-"),n=ki(e.object.type,r,t),o=e.fillColor&&Fi(e.fillColor)?e.fillColor:n.fill,i=Gt(e.object.properties.albedo),a=Gt(e.object.properties.temperature),s=ji(o,a,i,e.object.type),l=he(s,"#ffffff",.4)??n.stroke,c=Ai(e.object.properties.atmosphere),u=e.object.type==="star"?Xt(he(s,"#fff2cb",.4)??s,.82):void 0;return{fill:s,stroke:l,glow:u,atmosphere:c,tail:e.object.type==="comet"?Xt(he(s,"#ffffff",.5)??s,.72):void 0}}function ki(e,t,r){switch(e){case"star":return{fill:r.starCore,stroke:r.starStroke};case"planet":return{fill:"#72b7ff",stroke:"#d8efff"};case"moon":return{fill:"#c7d7ea",stroke:"#f2f8ff"};case"belt":return{fill:"#d9aa74",stroke:"#f7d5aa"};case"asteroid":return{fill:"#a7a5b8",stroke:"#ebe5ff"};case"comet":return{fill:"#9ce7ff",stroke:"#e7fbff"};case"ring":return{fill:"#e59f7d",stroke:"#fff0d3"};case"structure":return{fill:r.accentStrong,stroke:"#fff2ea"};case"phenomenon":return Si(t)}}function Si(e){return e==="galaxy"?{fill:"rgba(165,125,255,0.55)",stroke:"rgba(210,185,255,0.75)",halo:"rgba(160,120,255,0.10)",core:"#ede0ff"}:e==="dwarf-galaxy"?{fill:"rgba(190,165,255,0.45)",stroke:"rgba(220,205,255,0.75)",core:"#ddd0ff"}:e==="black-hole"?{fill:"#040408",stroke:"#ff6a00",accentRing:"rgba(255,140,20,0.72)"}:e==="nebula"?{fill:"rgba(105,205,255,0.45)",stroke:"rgba(180,235,255,0.72)",halo:"rgba(100,200,255,0.08)"}:e==="void"?{fill:"#05080f",stroke:"rgba(130,160,255,0.4)"}:{fill:"#78ffd7",stroke:"#e9fff7"}}function ji(e,t,r,n){let o=e;if(t!==null){let i=Oi(t,n);o=he(o,i,n==="star"?.42:.2)??o}if(r!==null){let i=Math.min(Math.max(r,0),1);o=he(o,i>=.5?"#ffffff":"#0f1520",Math.abs(i-.5)*.7)??o}return o}function Oi(e,t){return t==="star"?e>=8e3?"#d7ebff":e>=6e3?"#fff3d8":e>=4e3?"#ffd39a":"#ff9d76":e<=180?"#8fd8ff":e>=600?"#ffb56e":"#fff1c4"}function Ai(e){if(typeof e!="string"||!e.trim())return;let t=e.trim().toLowerCase();return t.includes("methane")?"rgba(134, 236, 255, 0.75)":t.includes("nitrogen")||t.includes("oxygen")||t.includes("air")?"rgba(122, 194, 255, 0.75)":t.includes("carbon")||t.includes("co2")?"rgba(255, 198, 138, 0.75)":t.includes("sulfur")?"rgba(255, 233, 138, 0.75)":"rgba(180, 222, 255, 0.68)"}function Ti(e){switch(e){case"presentation":return{layers:{background:!0,guides:!0,orbits:!0,objects:!0,labels:!0,structures:!0,metadata:!0}};case"atlas-card":return{layers:{background:!0,guides:!1,orbits:!0,objects:!0,labels:!0,structures:!0,metadata:!0}};case"markdown":return{layers:{background:!0,guides:!1,orbits:!0,objects:!0,labels:!0,structures:!0,metadata:!1}};default:return{layers:{background:!0,guides:!0,orbits:!0,objects:!0,labels:!0,structures:!0,metadata:!0}}}}function Gt(e){return typeof e=="number"?e:e&&typeof e=="object"&&"value"in e?e.value:null}function Kt(e){return`${e.renderId}-clip`}function Zt(e,t,r){return`${e},${t-r} ${e+r},${t} ${e},${t+r} ${e-r},${t}`}function rt(e,t,r){return`${e},${t-r*1.2} ${e+r*.9},${t-r*.3} ${e+r*1.2},${t+r*.8} ${e},${t+r*1.2} ${e-r*1.1},${t+r*.3} ${e-r*.8},${t-r*.8}`}function Mi(e,t){let r=Array.from({length:10},(o,i)=>{let a=90+i*((e-180)/9);return`<line class="wo-grid" x1="${a}" y1="120" x2="${a}" y2="${t-70}" />`}).join(""),n=Array.from({length:6},(o,i)=>{let a=150+i*((t-240)/5);return`<line class="wo-grid" x1="56" y1="${a}" x2="${e-56}" y2="${a}" />`}).join("");return`${r}${n}`}function Li(e){return[`${e.layoutPreset} layout`,`${e.viewMode} view`,`${e.renderPreset??"custom"} preset`,`schema ${e.metadata.version??"1.0"}`].join(" - ")}function Re(e){return e.type==="structure"||e.type==="phenomenon"}function he(e,t,r){let n=nt(e),o=nt(t);if(!n||!o)return;let i=Math.min(Math.max(r,0),1);return Di({r:Math.round(n.r+(o.r-n.r)*i),g:Math.round(n.g+(o.g-n.g)*i),b:Math.round(n.b+(o.b-n.b)*i)})}function Xt(e,t){let r=nt(e);return r?`rgba(${r.r}, ${r.g}, ${r.b}, ${t})`:e}function nt(e){let t=e.trim();return/^#[0-9a-f]{6}$/i.test(t)?{r:Number.parseInt(t.slice(1,3),16),g:Number.parseInt(t.slice(3,5),16),b:Number.parseInt(t.slice(5,7),16)}:/^#[0-9a-f]{3}$/i.test(t)?{r:Number.parseInt(t[1]+t[1],16),g:Number.parseInt(t[2]+t[2],16),b:Number.parseInt(t[3]+t[3],16)}:null}function Di(e){let t=r=>r.toString(16).padStart(2,"0");return`#${t(e.r)}${t(e.g)}${t(e.b)}`}function Fi(e){return!!e.trim()}function A(e){return e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function C(e){return A(e)}function Jt(e){return encodeURIComponent(JSON.stringify(e))}function it(e,t,r={}){return{version:"2.0",mode:t,scene:e,options:{initialViewpointId:r.initialViewpointId,initialSelectionObjectId:r.initialSelectionObjectId,initialFilter:r.initialFilter??null,atlasState:r.atlasState??null,minimap:r.minimap}}}function at(e,t={}){let r={...e,options:{...e.options,theme:t.theme??e.options?.theme,layers:t.layers??e.options?.layers,subtitle:t.subtitle??e.options?.subtitle,preset:t.preset??e.options?.preset,initialViewpointId:t.initialViewpointId??e.options?.initialViewpointId,initialSelectionObjectId:t.initialSelectionObjectId??e.options?.initialSelectionObjectId,initialFilter:t.initialFilter??e.options?.initialFilter??null,atlasState:t.atlasState??e.options?.atlasState??null,minimap:t.minimap??e.options?.minimap}},n=K(e.scene,{theme:r.options?.theme,layers:r.options?.layers,filter:r.options?.initialFilter??null,selectedObjectId:r.options?.initialSelectionObjectId??null,subtitle:r.options?.subtitle,preset:r.options?.preset});return`<div class="${Be(t.className??"worldorbit-embed")}" data-worldorbit-embed="true" data-worldorbit-mode="${e.mode}" data-worldorbit-preset="${Be(r.options?.preset??e.scene.renderPreset??"custom")}" data-worldorbit-viewpoint="${Be(r.options?.initialViewpointId??"")}" data-worldorbit-payload="${Be(Jt(r))}">${n}</div>`}function Be(e){return e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function ee(e,t={}){try{let r=X(e),n=U(r.document,Ki(r,t));return(t.mode??"static")==="interactive"?at(it(n,"interactive",{initialViewpointId:t.initialViewpointId,initialSelectionObjectId:t.initialSelectionObjectId,initialFilter:t.initialFilter??null,atlasState:t.atlasState??null,minimap:t.minimap}),{className:t.className??"worldorbit-block worldorbit-interactive",theme:t.theme,layers:t.layers,subtitle:t.subtitle,preset:t.preset,initialViewpointId:t.initialViewpointId,initialSelectionObjectId:t.initialSelectionObjectId,initialFilter:t.initialFilter??null,atlasState:t.atlasState??null,minimap:t.minimap}):`<figure class="${Xi(t.className??"worldorbit-block worldorbit-static")}">${K(n,t)}</figure>`}catch(r){if(t.strict)throw r;return st(r instanceof Error?r.message:String(r))}}function st(e){return`<pre class="worldorbit-error">WorldOrbit error: ${Qt(e)}</pre>`}function Qt(e){return e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">")}function Xi(e){return Qt(e).replaceAll('"',""")}function Ki(e,t){let r=e.atlasDocument??e.draftDocument;return t.preset||!r?.system?.defaults.preset?t:{...t,preset:r.system.defaults.preset}}function er(e={}){return function(r){tr(r,(n,o,i)=>{!i||o===-1||n.type!=="code"||!Zi(n.lang)||(i.children[o]={type:"html",value:ee(n.value??"",e)})})}}function tr(e,t,r=null){let n=e.children??[];for(let o=0;o<n.length;o+=1){let i=n[o];t(i,o,e),tr(i,t,e)}r||t(e,-1,null)}function Zi(e){return(e??"").trim().toLowerCase()==="worldorbit"}function rr(e={}){return function(r){nr(r,(n,o,i)=>{if(!i||o===-1||n.type!=="element"||n.tagName!=="pre")return;let a=n.children?.[0];if(!a||a.type!=="element"||a.tagName!=="code"||!Ji(a.properties?.className).includes("language-worldorbit"))return;let l=or(a);i.children[o]={type:"raw",value:ee(l,e)}})}}function nr(e,t,r=null){let n=e.children??[];for(let o=0;o<n.length;o+=1){let i=n[o];t(i,o,e),nr(i,t,e)}r||t(e,-1,null)}function Ji(e){return Array.isArray(e)?e.map(t=>String(t)):typeof e=="string"?e.split(/\s+/).filter(Boolean):[]}function or(e){return e.type==="text"?e.value??"":(e.children??[]).map(t=>or(t)).join("")}return hr(Qi);})();
|