worldorbit 2.5.17 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/README.md +91 -18
  2. package/dist/browser/core/dist/atlas-edit.d.ts +11 -0
  3. package/dist/browser/core/dist/atlas-edit.js +347 -0
  4. package/dist/browser/core/dist/atlas-utils.d.ts +22 -0
  5. package/dist/browser/core/dist/atlas-utils.js +189 -0
  6. package/dist/browser/core/dist/atlas-validate.d.ts +2 -0
  7. package/dist/browser/core/dist/atlas-validate.js +488 -0
  8. package/dist/browser/core/dist/diagnostics.d.ts +10 -0
  9. package/dist/browser/core/dist/diagnostics.js +109 -0
  10. package/dist/browser/core/dist/draft-parse.d.ts +3 -0
  11. package/dist/browser/core/dist/draft-parse.js +1654 -0
  12. package/dist/browser/core/dist/draft.d.ts +21 -0
  13. package/dist/browser/core/dist/draft.js +482 -0
  14. package/dist/browser/core/dist/errors.d.ts +7 -0
  15. package/dist/browser/core/dist/errors.js +16 -0
  16. package/dist/browser/core/dist/format.d.ts +4 -0
  17. package/dist/browser/core/dist/format.js +613 -0
  18. package/dist/browser/core/dist/index.d.ts +29 -0
  19. package/dist/browser/core/dist/index.js +35 -6101
  20. package/dist/browser/core/dist/load.d.ts +4 -0
  21. package/dist/browser/core/dist/load.js +182 -0
  22. package/dist/browser/core/dist/markdown.d.ts +2 -0
  23. package/dist/browser/core/dist/markdown.js +37 -0
  24. package/dist/browser/core/dist/normalize.d.ts +2 -0
  25. package/dist/browser/core/dist/normalize.js +312 -0
  26. package/dist/browser/core/dist/parse.d.ts +2 -0
  27. package/dist/browser/core/dist/parse.js +133 -0
  28. package/dist/browser/core/dist/scene.d.ts +3 -0
  29. package/dist/browser/core/dist/scene.js +1901 -0
  30. package/dist/browser/core/dist/schema.d.ts +8 -0
  31. package/dist/browser/core/dist/schema.js +298 -0
  32. package/dist/browser/core/dist/spatial-scene.d.ts +3 -0
  33. package/dist/browser/core/dist/spatial-scene.js +420 -0
  34. package/dist/browser/core/dist/tokenize.d.ts +4 -0
  35. package/dist/browser/core/dist/tokenize.js +68 -0
  36. package/dist/browser/core/dist/types.d.ts +637 -0
  37. package/dist/browser/core/dist/types.js +1 -0
  38. package/dist/browser/core/dist/validate.d.ts +2 -0
  39. package/dist/browser/core/dist/validate.js +56 -0
  40. package/dist/browser/editor/dist/editor.d.ts +2 -0
  41. package/dist/browser/editor/dist/editor.js +3700 -0
  42. package/dist/browser/editor/dist/index.d.ts +2 -0
  43. package/dist/browser/editor/dist/index.js +1 -11702
  44. package/dist/browser/editor/dist/types.d.ts +59 -0
  45. package/dist/browser/editor/dist/types.js +1 -0
  46. package/dist/browser/markdown/dist/html.d.ts +3 -0
  47. package/dist/browser/markdown/dist/html.js +64 -0
  48. package/dist/browser/markdown/dist/index.d.ts +4 -0
  49. package/dist/browser/markdown/dist/index.js +3 -5766
  50. package/dist/browser/markdown/dist/rehype.d.ts +10 -0
  51. package/dist/browser/markdown/dist/rehype.js +49 -0
  52. package/dist/browser/markdown/dist/remark.d.ts +9 -0
  53. package/dist/browser/markdown/dist/remark.js +28 -0
  54. package/dist/browser/markdown/dist/types.d.ts +11 -0
  55. package/dist/browser/markdown/dist/types.js +1 -0
  56. package/dist/browser/viewer/dist/atlas-state.d.ts +12 -0
  57. package/dist/browser/viewer/dist/atlas-state.js +269 -0
  58. package/dist/browser/viewer/dist/atlas-viewer.d.ts +2 -0
  59. package/dist/browser/viewer/dist/atlas-viewer.js +495 -0
  60. package/dist/browser/viewer/dist/custom-element.d.ts +1 -0
  61. package/dist/browser/viewer/dist/custom-element.js +78 -0
  62. package/dist/browser/viewer/dist/embed.d.ts +24 -0
  63. package/dist/browser/viewer/dist/embed.js +172 -0
  64. package/dist/browser/viewer/dist/errors.d.ts +6 -0
  65. package/dist/browser/viewer/dist/errors.js +12 -0
  66. package/dist/browser/viewer/dist/index.d.ts +10 -0
  67. package/dist/browser/viewer/dist/index.js +9 -7901
  68. package/dist/browser/viewer/dist/minimap.d.ts +3 -0
  69. package/dist/browser/viewer/dist/minimap.js +63 -0
  70. package/dist/browser/viewer/dist/render.d.ts +6 -0
  71. package/dist/browser/viewer/dist/render.js +670 -0
  72. package/dist/browser/viewer/dist/runtime-3d.d.ts +19 -0
  73. package/dist/browser/viewer/dist/runtime-3d.js +494 -0
  74. package/dist/browser/viewer/dist/theme.d.ts +4 -0
  75. package/dist/browser/viewer/dist/theme.js +103 -0
  76. package/dist/browser/viewer/dist/tooltip.d.ts +3 -0
  77. package/dist/browser/viewer/dist/tooltip.js +198 -0
  78. package/dist/browser/viewer/dist/types.d.ts +292 -0
  79. package/dist/browser/viewer/dist/types.js +1 -0
  80. package/dist/browser/viewer/dist/vendor/three.module.js +53032 -0
  81. package/dist/browser/viewer/dist/viewer-state.d.ts +19 -0
  82. package/dist/browser/viewer/dist/viewer-state.js +162 -0
  83. package/dist/browser/viewer/dist/viewer.d.ts +2 -0
  84. package/dist/browser/viewer/dist/viewer.js +1662 -0
  85. package/dist/unpkg/core/dist/atlas-edit.d.ts +11 -0
  86. package/dist/unpkg/core/dist/atlas-edit.js +347 -0
  87. package/dist/unpkg/core/dist/atlas-utils.d.ts +22 -0
  88. package/dist/unpkg/core/dist/atlas-utils.js +189 -0
  89. package/dist/unpkg/core/dist/atlas-validate.d.ts +2 -0
  90. package/dist/unpkg/core/dist/atlas-validate.js +488 -0
  91. package/dist/unpkg/core/dist/diagnostics.d.ts +10 -0
  92. package/dist/unpkg/core/dist/diagnostics.js +109 -0
  93. package/dist/unpkg/core/dist/draft-parse.d.ts +3 -0
  94. package/dist/unpkg/core/dist/draft-parse.js +1654 -0
  95. package/dist/unpkg/core/dist/draft.d.ts +21 -0
  96. package/dist/unpkg/core/dist/draft.js +482 -0
  97. package/dist/unpkg/core/dist/errors.d.ts +7 -0
  98. package/dist/unpkg/core/dist/errors.js +16 -0
  99. package/dist/unpkg/core/dist/format.d.ts +4 -0
  100. package/dist/unpkg/core/dist/format.js +613 -0
  101. package/dist/unpkg/core/dist/index.d.ts +29 -0
  102. package/dist/unpkg/core/dist/index.js +35 -6173
  103. package/dist/unpkg/core/dist/load.d.ts +4 -0
  104. package/dist/unpkg/core/dist/load.js +182 -0
  105. package/dist/unpkg/core/dist/markdown.d.ts +2 -0
  106. package/dist/unpkg/core/dist/markdown.js +37 -0
  107. package/dist/unpkg/core/dist/normalize.d.ts +2 -0
  108. package/dist/unpkg/core/dist/normalize.js +312 -0
  109. package/dist/unpkg/core/dist/parse.d.ts +2 -0
  110. package/dist/unpkg/core/dist/parse.js +133 -0
  111. package/dist/unpkg/core/dist/scene.d.ts +3 -0
  112. package/dist/unpkg/core/dist/scene.js +1901 -0
  113. package/dist/unpkg/core/dist/schema.d.ts +8 -0
  114. package/dist/unpkg/core/dist/schema.js +298 -0
  115. package/dist/unpkg/core/dist/spatial-scene.d.ts +3 -0
  116. package/dist/unpkg/core/dist/spatial-scene.js +420 -0
  117. package/dist/unpkg/core/dist/tokenize.d.ts +4 -0
  118. package/dist/unpkg/core/dist/tokenize.js +68 -0
  119. package/dist/unpkg/core/dist/types.d.ts +637 -0
  120. package/dist/unpkg/core/dist/types.js +1 -0
  121. package/dist/unpkg/core/dist/validate.d.ts +2 -0
  122. package/dist/unpkg/core/dist/validate.js +56 -0
  123. package/dist/unpkg/editor/dist/editor.d.ts +2 -0
  124. package/dist/unpkg/editor/dist/editor.js +3700 -0
  125. package/dist/unpkg/editor/dist/index.d.ts +2 -0
  126. package/dist/unpkg/editor/dist/index.js +1 -11727
  127. package/dist/unpkg/editor/dist/types.d.ts +59 -0
  128. package/dist/unpkg/editor/dist/types.js +1 -0
  129. package/dist/unpkg/markdown/dist/html.d.ts +3 -0
  130. package/dist/unpkg/markdown/dist/html.js +64 -0
  131. package/dist/unpkg/markdown/dist/index.d.ts +4 -0
  132. package/dist/unpkg/markdown/dist/index.js +3 -5794
  133. package/dist/unpkg/markdown/dist/rehype.d.ts +10 -0
  134. package/dist/unpkg/markdown/dist/rehype.js +49 -0
  135. package/dist/unpkg/markdown/dist/remark.d.ts +9 -0
  136. package/dist/unpkg/markdown/dist/remark.js +28 -0
  137. package/dist/unpkg/markdown/dist/types.d.ts +11 -0
  138. package/dist/unpkg/markdown/dist/types.js +1 -0
  139. package/dist/unpkg/viewer/dist/atlas-state.d.ts +12 -0
  140. package/dist/unpkg/viewer/dist/atlas-state.js +269 -0
  141. package/dist/unpkg/viewer/dist/atlas-viewer.d.ts +2 -0
  142. package/dist/unpkg/viewer/dist/atlas-viewer.js +495 -0
  143. package/dist/unpkg/viewer/dist/custom-element.d.ts +1 -0
  144. package/dist/unpkg/viewer/dist/custom-element.js +78 -0
  145. package/dist/unpkg/viewer/dist/embed.d.ts +24 -0
  146. package/dist/unpkg/viewer/dist/embed.js +172 -0
  147. package/dist/unpkg/viewer/dist/errors.d.ts +6 -0
  148. package/dist/unpkg/viewer/dist/errors.js +12 -0
  149. package/dist/unpkg/viewer/dist/index.d.ts +10 -0
  150. package/dist/unpkg/viewer/dist/index.js +9 -7958
  151. package/dist/unpkg/viewer/dist/minimap.d.ts +3 -0
  152. package/dist/unpkg/viewer/dist/minimap.js +63 -0
  153. package/dist/unpkg/viewer/dist/render.d.ts +6 -0
  154. package/dist/unpkg/viewer/dist/render.js +670 -0
  155. package/dist/unpkg/viewer/dist/runtime-3d.d.ts +19 -0
  156. package/dist/unpkg/viewer/dist/runtime-3d.js +494 -0
  157. package/dist/unpkg/viewer/dist/theme.d.ts +4 -0
  158. package/dist/unpkg/viewer/dist/theme.js +103 -0
  159. package/dist/unpkg/viewer/dist/tooltip.d.ts +3 -0
  160. package/dist/unpkg/viewer/dist/tooltip.js +198 -0
  161. package/dist/unpkg/viewer/dist/types.d.ts +292 -0
  162. package/dist/unpkg/viewer/dist/types.js +1 -0
  163. package/dist/unpkg/viewer/dist/vendor/three.module.js +53032 -0
  164. package/dist/unpkg/viewer/dist/viewer-state.d.ts +19 -0
  165. package/dist/unpkg/viewer/dist/viewer-state.js +162 -0
  166. package/dist/unpkg/viewer/dist/viewer.d.ts +2 -0
  167. package/dist/unpkg/viewer/dist/viewer.js +1662 -0
  168. package/dist/unpkg/worldorbit-core.min.js +1 -12
  169. package/dist/unpkg/worldorbit-editor.min.js +1 -894
  170. package/dist/unpkg/worldorbit-markdown.min.js +1 -103
  171. package/dist/unpkg/worldorbit-viewer.min.js +1 -259
  172. package/dist/unpkg/worldorbit.js +2 -9243
  173. package/dist/unpkg/worldorbit.min.js +2 -263
  174. package/package.json +1 -1
  175. package/packages/core/dist/atlas-edit.js +1 -1
  176. package/packages/core/dist/atlas-validate.js +99 -10
  177. package/packages/core/dist/draft-parse.js +190 -15
  178. package/packages/core/dist/draft.js +50 -11
  179. package/packages/core/dist/format.js +36 -5
  180. package/packages/core/dist/index.d.ts +1 -0
  181. package/packages/core/dist/index.js +1 -0
  182. package/packages/core/dist/load.js +9 -2
  183. package/packages/core/dist/scene.js +158 -24
  184. package/packages/core/dist/spatial-scene.d.ts +3 -0
  185. package/packages/core/dist/spatial-scene.js +420 -0
  186. package/packages/core/dist/types.d.ts +124 -2
  187. package/packages/editor/dist/editor.js +130 -8
  188. package/packages/editor/dist/types.d.ts +4 -0
  189. package/packages/markdown/dist/html.js +10 -3
  190. package/packages/viewer/dist/atlas-state.js +8 -2
  191. package/packages/viewer/dist/atlas-viewer.js +20 -8
  192. package/packages/viewer/dist/custom-element.js +18 -4
  193. package/packages/viewer/dist/embed.d.ts +5 -1
  194. package/packages/viewer/dist/embed.js +58 -24
  195. package/packages/viewer/dist/errors.d.ts +6 -0
  196. package/packages/viewer/dist/errors.js +12 -0
  197. package/packages/viewer/dist/index.d.ts +1 -0
  198. package/packages/viewer/dist/index.js +1 -0
  199. package/packages/viewer/dist/runtime-3d.d.ts +19 -0
  200. package/packages/viewer/dist/runtime-3d.js +494 -0
  201. package/packages/viewer/dist/types.d.ts +25 -3
  202. package/packages/viewer/dist/vendor/three.module.js +53032 -0
  203. package/packages/viewer/dist/viewer.js +517 -41
@@ -1,12 +1 @@
1
- "use strict";var WorldOrbitCore=(()=>{var Ke=Object.defineProperty;var Yn=Object.getOwnPropertyDescriptor;var qn=Object.getOwnPropertyNames;var Hn=Object.prototype.hasOwnProperty;var Gn=(e,t)=>{for(var n in t)Ke(e,n,{get:t[n],enumerable:!0})},Kn=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of qn(t))!Hn.call(e,i)&&i!==n&&Ke(e,i,{get:()=>t[i],enumerable:!(r=Yn(t,i))||r.enumerable});return e};var Zn=e=>Kn(Ke({},"__esModule",{value:!0}),e);var ka={};Gn(ka,{WORLDORBIT_FIELD_KEYS:()=>vt,WORLDORBIT_FIELD_SCHEMAS:()=>Ze,WORLDORBIT_OBJECT_TYPES:()=>fe,WorldOrbitError:()=>u,cloneAtlasDocument:()=>Ye,createDiagnostic:()=>xt,createEmptyAtlasDocument:()=>lt,detectWorldOrbitSchemaVersion:()=>ht,diagnosticFromError:()=>F,extractWorldOrbitBlocks:()=>Nn,formatAtlasDocument:()=>Ce,formatDocument:()=>Be,formatDraftDocument:()=>nt,getAtlasDocumentNode:()=>ut,getFieldSchema:()=>D,isKnownFieldKey:()=>Xe,listAtlasDocumentPaths:()=>Ln,load:()=>va,loadWorldOrbitSource:()=>He,loadWorldOrbitSourceWithDiagnostics:()=>yt,materializeAtlasDocument:()=>Ie,materializeDraftDocument:()=>Kt,normalizeDocument:()=>V,normalizeWithDiagnostics:()=>Ot,parse:()=>Cn,parseSafe:()=>Ia,parseWithDiagnostics:()=>Te,parseWorldOrbit:()=>G,parseWorldOrbitAtlas:()=>We,parseWorldOrbitDraft:()=>gn,removeAtlasDocumentNode:()=>Sn,render:()=>wa,renderDocumentToScene:()=>re,resolveAtlasDiagnosticPath:()=>pt,resolveAtlasDiagnostics:()=>ft,rotatePoint:()=>Mt,stringify:()=>$a,supportsObjectType:()=>Je,tokenizeLine:()=>It,tokenizeLineDetailed:()=>ne,unitFamilyAllowsUnit:()=>pe,updateAtlasDocumentNode:()=>An,upgradeDocumentToDraftV2:()=>Ne,upgradeDocumentToV2:()=>ve,upsertAtlasDocumentNode:()=>dt,validateAtlasDocumentWithDiagnostics:()=>Tn,validateDocument:()=>W,validateDocumentWithDiagnostics:()=>Lt});var u=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 de=["system","star","planet","moon","belt","asteroid","comet","ring","structure","phenomenon"],E=de.filter(e=>e!=="system"),Xn=["star","planet","moon","asteroid","comet","structure","phenomenon"],wt=["structure","phenomenon"],H=["star","planet","moon","belt","asteroid","comet","ring","structure","phenomenon"],Jn=["star","planet","moon","belt","asteroid","comet","ring","structure","phenomenon"];function w(e,t){return{key:e,...t}}var fe=new Set(de),Ze=new Map([w("orbit",{kind:"string",placement:!0,arity:"single",objectTypes:H}),w("distance",{kind:"unit",placement:!0,arity:"single",objectTypes:H,unitFamily:"distance"}),w("semiMajor",{kind:"unit",placement:!0,arity:"single",objectTypes:H,unitFamily:"distance"}),w("eccentricity",{kind:"number",placement:!0,arity:"single",objectTypes:H}),w("period",{kind:"unit",placement:!0,arity:"single",objectTypes:H,unitFamily:"duration"}),w("angle",{kind:"unit",placement:!0,arity:"single",objectTypes:H,unitFamily:"angle"}),w("inclination",{kind:"unit",placement:!0,arity:"single",objectTypes:H,unitFamily:"angle"}),w("phase",{kind:"unit",placement:!0,arity:"single",objectTypes:H,unitFamily:"angle"}),w("at",{kind:"string",placement:!0,arity:"single",objectTypes:wt}),w("surface",{kind:"string",placement:!0,arity:"single",objectTypes:wt}),w("free",{kind:"string",placement:!0,arity:"single",objectTypes:Jn}),w("kind",{kind:"string",placement:!1,arity:"single",objectTypes:E}),w("class",{kind:"string",placement:!1,arity:"single",objectTypes:E}),w("culture",{kind:"string",placement:!1,arity:"single",objectTypes:E}),w("tags",{kind:"list",placement:!1,arity:"multiple",objectTypes:de}),w("color",{kind:"string",placement:!1,arity:"single",objectTypes:de}),w("image",{kind:"string",placement:!1,arity:"single",objectTypes:Xn}),w("hidden",{kind:"boolean",placement:!1,arity:"single",objectTypes:de}),w("radius",{kind:"unit",placement:!1,arity:"single",objectTypes:E,unitFamily:"radius"}),w("mass",{kind:"unit",placement:!1,arity:"single",objectTypes:E,unitFamily:"mass"}),w("density",{kind:"unit",placement:!1,arity:"single",objectTypes:E,unitFamily:"generic"}),w("gravity",{kind:"unit",placement:!1,arity:"single",objectTypes:E,unitFamily:"generic"}),w("temperature",{kind:"unit",placement:!1,arity:"single",objectTypes:E,unitFamily:"generic"}),w("albedo",{kind:"number",placement:!1,arity:"single",objectTypes:E}),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:E}),w("source",{kind:"string",placement:!1,arity:"single",objectTypes:E}),w("cycle",{kind:"unit",placement:!1,arity:"single",objectTypes:E,unitFamily:"duration"})].map(e=>[e.key,e])),vt=new Set(Ze.keys());function D(e){return Ze.get(e)}function Xe(e){return vt.has(e)}function Je(e,t){return e.objectTypes.includes(t)}function pe(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 It(e){return ne(e).map(t=>t.value)}function ne(e,t={}){let n=[],r=t.columnOffset??0,i="",a=null,o=!1,s=!1,c=null,l=()=>{a!==null&&(n.push({value:i,column:a,quoted:o}),i="",a=null,o=!1)};for(let d=0;d<e.length;d++){let f=e[d],p=r+d+1;if(s&&f==="\\"){let m=e[d+1];if(m==='"'||m==="\\"){i+=m,d++;continue}}if(f==='"'){s?s=!1:(a===null&&(a=p),o=!0,c=p,s=!0);continue}if(!s&&/\s/.test(f)){l();continue}a===null&&(a=p),i+=f}if(s)throw new u("Unclosed quote in line",t.line,c??r+e.length);return l(),n}function Le(e){return e.match(/^\s*/)?.[0].length??0}function G(e){let t=e.split(/\r?\n/),n=[],r=null,i=!1,a=null;for(let o=0;o<t.length;o++){let s=t[o],c=o+1;if(!s.trim())continue;let l=Le(s),d=ne(s.slice(l),{line:c,columnOffset:l});if(d.length!==0){if(l===0){i=!1,a=null;let f=Qn(d,c);n.push(f),r=f;continue}if(!r)throw new u("Indented line without parent object",c,l+1);if(d.length===1&&d[0].value==="info"){i=!0,a=l;continue}i&&l<=(a??0)&&(i=!1),i?r.infoEntries.push(nr(d,c)):r.blockFields.push(tr(d,c))}}return{type:"document",objects:n}}function Qn(e,t){if(e.length<2)throw new u("Invalid object declaration",t,e[0]?.column??1);let[n,r,...i]=e;if(!fe.has(n.value))throw new u(`Unknown object type "${n.value}"`,t,n.column);return{type:"object",objectType:n.value,name:r.value,inlineFields:er(i,t),blockFields:[],infoEntries:[],location:{line:t,column:n.column}}}function er(e,t){let n=[],r=0;for(;r<e.length;){let i=e[r],a=D(i.value);if(!a)throw new u(`Unknown field "${i.value}"`,t,i.column);r++;let o=[];if(a.arity==="multiple")for(;r<e.length&&!Xe(e[r].value);)o.push(e[r]),r++;else{let s=e[r];s&&(o.push(s),r++)}if(o.length===0)throw new u(`Missing value for field "${i.value}"`,t,i.column);n.push({type:"field",key:i.value,values:o.map(s=>s.value),location:{line:t,column:i.column}})}return n}function tr(e,t){if(e.length<2)throw new u("Invalid field line",t,e[0]?.column??1);if(!D(e[0].value))throw new u(`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 nr(e,t){if(e.length<2)throw new u("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 $t=/^(-?\d+(?:\.\d+)?)(kpc|min|mj|rj|ky|my|gy|au|km|me|re|pc|ly|deg|sol|K|m|s|h|d|y)?$/,rr=new Map([["true",!0],["false",!1],["yes",!0],["no",!1]]),ir=/^[A-Za-z][A-Za-z0-9+.-]*:/;function V(e){let t=null,n=[];for(let r of e.objects){let i=or(r);if(r.objectType==="system"){if(t)throw u.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:[],events:[],objects:n}}function or(e){let t=[...e.inlineFields,...e.blockFields];ar(e.objectType,t);let n=sr(t),r=cr(e.objectType,n),i=lr(n),a=fr(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 ar(e,t){for(let n of t){let r=D(n.key);if(!r)throw u.fromLocation(`Unknown field "${n.key}"`,n.location);if(!Je(r,e))throw u.fromLocation(`Field "${n.key}" is not valid on "${e}"`,n.location);if(r.arity==="single"&&n.values.length!==1)throw u.fromLocation(`Field "${n.key}" expects exactly one value`,n.location)}}function sr(e){let t=new Map;for(let n of e){if(t.has(n.key))throw u.fromLocation(`Duplicate field "${n.key}"`,n.location);t.set(n.key,n)}return t}function cr(e,t){let n=t.has("orbit"),r=t.has("at"),i=t.has("surface"),a=t.has("free"),o=[n,r,i,a].filter(Boolean).length;if(o>1){let s=t.get("orbit")??t.get("at")??t.get("surface")??t.get("free");throw u.fromLocation("Object has multiple placement modes",s?.location)}if(e==="system"&&o>0)throw u.fromLocation("System objects cannot declare placement",[...t.values()][0]?.location);if(n)return{mode:"orbit",target:Ae(t,"orbit"),distance:oe(t,"distance"),semiMajor:oe(t,"semiMajor"),eccentricity:hr(t,"eccentricity"),period:oe(t,"period"),angle:oe(t,"angle"),inclination:oe(t,"inclination"),phase:oe(t,"phase")};if(r){let s=Se(t,"at"),c=Ae(t,"at");return{mode:"at",target:c,reference:pr(c,s.location)}}if(i)return{mode:"surface",target:Ae(t,"surface")};if(a){let s=Ae(t,"free"),c=mr(s);return{mode:"free",distance:c??void 0,descriptor:c?void 0:s}}return null}function lr(e){let t={};for(let[n,r]of e.entries()){let i=D(n);if(!(!i||i.placement))switch(i.kind){case"list":t[n]=r.values;break;case"boolean":t[n]=yr(r);break;case"number":t[n]=jt(ae(r),n,r.location);break;case"unit":t[n]=kt(ae(r),r.location,n);break;case"string":t[n]=ur(n,r);break}}return t}function ur(e,t){let n=t.values.join(" ").trim();return e==="image"&&dr(n,t.location),n}function dr(e,t){if(!e)throw u.fromLocation('Field "image" must not be empty',t);if(e.startsWith("//"))throw u.fromLocation('Field "image" must use a relative path, root-relative path, or an http/https URL',t);let n=e.match(ir);if(!n)return;let r=n[0].slice(0,-1).toLowerCase();if(r!=="http"&&r!=="https")throw u.fromLocation(`Field "image" does not support the "${r}" scheme`,t)}function fr(e){let t={};for(let n of e){if(n.key in t)throw u.fromLocation(`Duplicate info key "${n.key}"`,n.location);t[n.key]=n.value}return t}function pr(e,t){if(/^[A-Za-z0-9._-]+-[A-Za-z0-9._-]+:L\d+$/i.test(e))throw u.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 u.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 kt(e,t,n){let r=e.match($t);if(!r)throw u.fromLocation(`Invalid unit value "${e}"`,t);let i={value:Number(r[1]),unit:r[2]??null};if(n){let a=D(n);if(a?.unitFamily&&!pe(a.unitFamily,i.unit))throw u.fromLocation(`Unit "${i.unit??"none"}" is not valid for "${n}"`,t)}return i}function mr(e){let t=e.match($t);return t?{value:Number(t[1]),unit:t[2]??null}:null}function oe(e,t){if(!e.has(t))return;let n=Se(e,t);return kt(ae(n),n.location,t)}function hr(e,t){if(!e.has(t))return;let n=Se(e,t);return jt(ae(n),t,n.location)}function jt(e,t,n){let r=Number(e);if(!Number.isFinite(r))throw u.fromLocation(`Invalid numeric value "${e}" for "${t}"`,n);return r}function yr(e){let t=ae(e).toLowerCase(),n=rr.get(t);if(n===void 0)throw u.fromLocation(`Invalid boolean value "${t}" for "${e.key}"`,e.location);return n}function Se(e,t){let n=e.get(t);if(!n)throw new u(`Missing value for key "${t}"`);return n}function Ae(e,t){return ae(Se(e,t))}function ae(e){if(e.values.length!==1)throw u.fromLocation(`Field "${e.key}" expects exactly one value`,e.location);return e.values[0]}var gr=new Set(["star","planet","moon","asteroid","comet"]);function W(e){let t=new Set,n=new Map;for(let r of e.objects){if(t.has(r.id))throw new u(`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 u(`Unknown placement target "${r.placement.target}" on "${r.id}"`);if(r.placement.mode==="surface"){let i=n.get(r.placement.target);if(!i||!gr.has(i.type))throw new u(`Surface target "${r.placement.target}" on "${r.id}" is not surface-capable`)}r.placement.mode==="at"&&(r.placement.reference.kind==="lagrange"&&br(r,r.placement.reference,t),r.placement.reference.kind==="anchor"&&wr(r,r.placement.reference,t))}}function br(e,t,n){if(!n.has(t.primary))throw new u(`Unknown Lagrange reference "${t.primary}" on "${e.id}"`);if(t.secondary&&!n.has(t.secondary))throw new u(`Unknown Lagrange reference "${t.secondary}" on "${e.id}"`)}function wr(e,t,n){if(!n.has(t.objectId))throw new u(`Unknown anchor target "${t.objectId}" on "${e.id}"`)}function xt(e){return{...e}}function F(e,t,n=`${t}.failed`){return e instanceof u?{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 Te(e){let t;try{t=G(e)}catch(r){return{ok:!1,value:null,diagnostics:[F(r,"parse")]}}let n;try{n=V(t)}catch(r){return{ok:!1,value:null,diagnostics:[F(r,"normalize")]}}try{W(n)}catch(r){return{ok:!1,value:null,diagnostics:[F(r,"validate")]}}return{ok:!0,value:{ast:t,document:n},diagnostics:[]}}function Ot(e){try{return{ok:!0,value:V(e),diagnostics:[]}}catch(t){return{ok:!1,value:null,diagnostics:[F(t,"normalize")]}}}function Lt(e){try{return W(e),{ok:!0,value:e,diagnostics:[]}}catch(t){return{ok:!1,value:null,diagnostics:[F(t,"validate")]}}}var me=1495978707e-1,vr=6371,Ir=71492,$r=695700,kr=63241.077,jr=206264.806,xr=206264806,Pt=.68,Or=.2,Et=28;function re(e,t={}){let n=Sr(t),r=n.width,i=n.height,a=n.padding,o=Ar(e),s=Dr(e,t.projection),c=Fr(o,t.scaleModel),l=Er(o),d=e.system?.id??null,f=t.activeEventId??null,p=Lr(e.objects,e.events??[],f),m=new Map(p.map(h=>[h.id,h])),b=wi(p,m),I=new Map,j=[],L=[],g=[],k=[],R=[],Q=new Map,_=new Map;for(let h of p){let P=h.placement;if(!P){g.push(h);continue}if(P.mode==="orbit"){Tt(_,P.target,h);continue}if(P.mode==="surface"){Tt(Q,P.target,h);continue}if(P.mode==="at"){R.push(h);continue}k.push(h)}let Y=k.length>0?r*.42:r/2,q=i/2,C={orbitChildren:_,surfaceChildren:Q,objectMap:m,spacingFactor:l,projection:s,scaleModel:c},A=g.find(h=>h.type==="star")??g[0]??null;A&&Qe(A,Y,q,0,I,j,L,C);let ee=g.filter(h=>h.id!==A?.id);if(ee.length>0){let h=Math.min(r,i)*.28*l*c.orbitDistanceMultiplier;ee.forEach((P,x)=>{let Ge=be(x,ee.length,-Math.PI/2),te=we(Ge,h,s,1);Qe(P,Y+te.x,q+te.y,0,I,j,L,C)})}k.forEach((h,P)=>{let x=r-a-140-xi(h.placement?.mode==="free"?h.placement.distance:void 0,c),Ge=Math.max(76,(i-a*2-180)/Math.max(1,k.length)*l)*c.freePlacementMultiplier,te=a+92+P*Ge;I.set(h.id,{object:h,x,y:te,radius:Ee(h,0,c),sortKey:Re(x,te,0)}),L.push({object:h,groupId:b.groupIds.get(h.id)??null,x1:x-60,y1:te,x2:x-18,y2:te,mode:"free"}),Fe(h,I,j,L,C,1)}),R.forEach((h,P)=>{if(I.has(h.id)||!h.placement||h.placement.mode!=="at")return;let x=gi(h.placement.reference,I,m,P,R.length,r,i,a,C);I.set(h.id,{object:h,x:x.x,y:x.y,radius:Ee(h,2,c),sortKey:Re(x.x,x.y,2),anchorX:x.anchorX,anchorY:x.anchorY}),x.anchorX!==void 0&&x.anchorY!==void 0&&L.push({object:h,groupId:b.groupIds.get(h.id)??null,x1:x.anchorX,y1:x.anchorY,x2:x.x,y2:x.y,mode:"at"}),Fe(h,I,j,L,C,2)});let T=[...I.values()].map(h=>Mr(h,c,b)),B=j.map(h=>Rr(h,b.groupIds.get(h.object.id)??null)),U=L.map(h=>_r(h)),Oe=Nr(T,r,i,c.labelMultiplier),gt=qr(e,T),bt=Hr(e.events??[],T,f),Bn=Vr(B,gt,bt,U,T,Oe),zn=Wr(T,B,U,Oe,b,c.labelMultiplier),Un=Yr(e,T),Vn=Gr(e,s,n.preset,b,m),Wn=ci(r,i,T,B,U,Oe,c.labelMultiplier);return{width:r,height:i,padding:a,renderPreset:n.preset,projection:s,scaleModel:c,title:String(e.system?.title??e.system?.properties.title??e.system?.id??"WorldOrbit")||"WorldOrbit",subtitle:`${Dt(s)} view - ${Dt(o)} layout`,systemId:d,viewMode:s,layoutPreset:o,metadata:{format:e.format,version:e.version,view:s,scale:String(e.system?.properties.scale??o),units:String(e.system?.properties.units??"mixed"),preset:n.preset??"custom"},contentBounds:Wn,layers:Bn,groups:zn,semanticGroups:Un,viewpoints:Vn,events:bt,activeEventId:f,objects:T,orbitVisuals:B,relations:gt,leaders:U,labels:Oe}}function Mt(e,t,n){let r=_e(n),i=Math.cos(r),a=Math.sin(r),o=e.x-t.x,s=e.y-t.y;return{x:t.x+o*i-s*a,y:t.y+o*a+s*i}}function Lr(e,t,n){let r=e.map(o=>structuredClone(o));if(!n)return r;let i=t.find(o=>o.id===n);if(!i)return r;let a=new Map(r.map(o=>[o.id,o]));for(let o of i.positions){let s=a.get(o.objectId);s&&(s.placement=o.placement?structuredClone(o.placement):null,o.inner?s.properties.inner={...o.inner}:delete s.properties.inner,o.outer?s.properties.outer={...o.outer}:delete s.properties.outer)}return r}function Ar(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 Sr(e){let t=Tr(e.preset);return{width:e.width??t.width,height:e.height??t.height,padding:e.padding??t.padding,preset:e.preset??null}}function Tr(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 Dr(e,t){return t==="topdown"||t==="isometric"?t:String(e.system?.properties.view??"topdown").toLowerCase()==="isometric"?"isometric":"topdown"}function Fr(e,t){return{...Pr(e),...t}}function Pr(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 Er(e){switch(e){case"compact":return .84;case"presentation":return 1.2;default:return 1}}function Mr(e,t,n){let{object:r,x:i,y:a,radius:o,sortKey:s,anchorX:c,anchorY:l}=e,d=r.renderHints?.renderPriority??0;return{renderId:se(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:o,visualRadius:ji(r,o,t),sortKey:s+d*.001,anchorX:c,anchorY:l,label:r.id,secondaryLabel:r.type==="structure"?String(r.properties.kind??r.type):r.type,fillColor:Li(r.properties.color),imageHref:typeof r.properties.image=="string"&&r.properties.image.trim()?r.properties.image:void 0,hidden:r.properties.hidden===!0}}function Rr(e,t){return{renderId:`${se(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 _r(e){return{renderId:`${se(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 Nr(e,t,n,r){let i=[],a=[],o=new Map(e.map(c=>[c.objectId,c])),s=[...e].filter(c=>!c.hidden&&c.object.renderHints?.renderLabel!==!1).sort(Cr);for(let c of s){let l=Br(c,o,a,t,n,r)??_t(c,Rt(c,o.get(c.parentId??"")??null,n),0,r);a.push(Vt(c,l,r)),i.push({renderId:`${c.renderId}-label`,objectId:c.objectId,object:c.object,groupId:c.groupId,semanticGroupIds:[...c.semanticGroupIds],label:c.label,secondaryLabel:c.secondaryLabel,x:l.x,y:l.labelY,secondaryY:l.secondaryY,textAnchor:l.textAnchor,direction:l.direction,hidden:c.hidden})}return i}function Cr(e,t){let n=At(e)-At(t);if(n!==0)return n;let r=(t.object.renderHints?.renderPriority??0)-(e.object.renderHints?.renderPriority??0);return r!==0?r:e.sortKey-t.sortKey}function At(e){switch(e.object.type){case"star":return 0;case"planet":return 1;case"moon":return 2;case"belt":case"ring":return 3;case"asteroid":case"comet":return 4;case"structure":case"phenomenon":return 5}}function Br(e,t,n,r,i,a){for(let o of zr(e,t,r,i)){let s=o==="left"||o==="right"?4:6;for(let c=0;c<=s;c+=1){let l=_t(e,o,c,a),d=Vt(e,l,a);if(!n.some(f=>$i(f,d)))return l}}return null}function zr(e,t,n,r){let i=e.parentId?t.get(e.parentId)??null:null,a=Rt(e,i,r),o=a==="below"?"above":"below",s=Ur(e,i,n),c=s==="right"?"left":"right";return e.object.type==="structure"||e.object.type==="phenomenon"||e.object.placement?.mode==="at"||e.object.placement?.mode==="surface"||e.object.placement?.mode==="free"?[s,a,c,o]:[a,s,o,c]}function Rt(e,t,n){return t&&Math.abs(e.y-t.y)>6?e.y>=t.y?"below":"above":e.y>n*.62?"above":"below"}function Ur(e,t,n){return t&&Math.abs(e.x-t.x)>6?e.x>=t.x?"right":"left":e.x>=n/2?"right":"left"}function _t(e,t,n,r){let i=14*r;switch(t){case"above":{let a=e.y-(e.radius+18*r+n*i);return{x:e.x,labelY:a,secondaryY:a-16*r,textAnchor:"middle",direction:t}}case"below":{let a=e.y+e.radius+18*r+n*i;return{x:e.x,labelY:a,secondaryY:a+16*r,textAnchor:"middle",direction:t}}case"left":{let a=e.x-(e.visualRadius+16*r+n*i),o=e.y-4*r;return{x:a,labelY:o,secondaryY:o+16*r,textAnchor:"end",direction:t}}case"right":{let a=e.x+e.visualRadius+16*r+n*i,o=e.y-4*r;return{x:a,labelY:o,secondaryY:o+16*r,textAnchor:"start",direction:t}}}}function Vr(e,t,n,r,i,a){let o=e.filter(c=>!c.hidden&&!!c.backArcPath).map(c=>c.renderId),s=e.filter(c=>!c.hidden).map(c=>c.renderId);return[{id:"background",renderIds:["wo-bg","wo-bg-glow","wo-grid"]},{id:"guides",renderIds:r.filter(c=>!c.hidden).map(c=>c.renderId)},{id:"orbits-back",renderIds:o},{id:"orbits-front",renderIds:s},{id:"relations",renderIds:t.filter(c=>!c.hidden).map(c=>c.renderId)},{id:"events",renderIds:n.filter(c=>!c.hidden).map(c=>c.renderId)},{id:"objects",renderIds:i.filter(c=>!c.hidden).map(c=>c.renderId)},{id:"labels",renderIds:a.filter(c=>!c.hidden).map(c=>c.renderId)},{id:"metadata",renderIds:["wo-title","wo-subtitle","wo-meta"]}]}function Wr(e,t,n,r,i,a){let o=new Map,s=c=>{if(!c)return null;let l=o.get(c);if(l)return l;let d=i.groupRoots.get(c)??null,f={renderId:c,rootObjectId:d,label:d??c,objectIds:[],orbitIds:[],labelIds:[],leaderIds:[],contentBounds:ge(0,0,0,0)};return o.set(c,f),f};for(let c of e){let l=s(c.groupId);l&&!c.hidden&&l.objectIds.push(c.objectId)}for(let c of t){let l=s(c.groupId);l&&!c.hidden&&l.orbitIds.push(c.objectId)}for(let c of n){let l=s(c.groupId);l&&!c.hidden&&l.leaderIds.push(c.objectId)}for(let c of r){let l=s(c.groupId);l&&!c.hidden&&l.labelIds.push(c.objectId)}for(let c of o.values())c.contentBounds=vi(c,e,t,n,r,a);return[...o.values()].sort((c,l)=>c.label.localeCompare(l.label))}function Yr(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 qr(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:`${se(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 Hr(e,t,n){let r=new Map(t.map(i=>[i.objectId,i]));return e.map(i=>{let a=[...new Set([...i.targetObjectId?[i.targetObjectId]:[],...i.participantObjectIds])],o=a.map(l=>r.get(l)).filter(Boolean),s=o.length>0?o.reduce((l,d)=>l+d.x,0)/o.length:0,c=o.length>0?o.reduce((l,d)=>l+d.y,0)/o.length:0;return{renderId:`${se(i.id)}-event`,eventId:i.id,event:i,objectIds:a,participantIds:[...i.participantObjectIds],targetObjectId:i.targetObjectId,x:s,y:c,hidden:i.hidden||o.length===0||o.every(l=>l.hidden)||n!==null&&i.id!==n}}).sort((i,a)=>i.event.id.localeCompare(a.event.id))}function Gr(e,t,n,r,i){let a=Kr(e,t,n),o=new Map;for(let[l,d]of Object.entries(e.system?.info??{})){if(!l.startsWith("viewpoint."))continue;let[f,p,...m]=l.split(".");if(f!=="viewpoint"||!p||m.length===0)continue;let b=oi(p);if(!b)continue;let I=m.join(".").toLowerCase(),j=o.get(b)??{id:b};Zr(j,I,d,e,t,n,r,i),o.set(b,j)}let s=[...o.values()].map(l=>Xr(l,t,n,i)).filter(Boolean),c=s.findIndex(l=>l.id===a.id);return c>=0?s.splice(c,1,{...a,...s[c],layers:{...a.layers,...s[c].layers},filter:s[c].filter??a.filter,generated:!1}):s.unshift(a),s.sort((l,d)=>l.id==="overview"?-1:d.id==="overview"?1:l.label.localeCompare(d.label))}function Kr(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,eventIds:[],projection:t,preset:n,rotationDeg:0,scale:null,layers:{},filter:null,generated:!0}}function Zr(e,t,n,r,i,a,o,s){let c=n.trim();switch(t){case"label":case"title":c&&(e.label=c);return;case"summary":case"description":c&&(e.summary=c);return;case"focus":case"object":c&&(e.focus=c);return;case"select":case"selection":c&&(e.select=c);return;case"events":e.eventIds=ye(c);return;case"projection":case"view":e.projection=Qr(c)??i;return;case"preset":e.preset=ei(c)??a;return;case"rotation":case"angle":e.rotationDeg=Nt(c)??e.rotationDeg??0;return;case"zoom":case"scale":e.scale=ti(c);return;case"layers":e.layers=ni(c);return;case"query":e.filter={...e.filter??De(),query:c||null};return;case"types":case"objecttypes":e.filter={...e.filter??De(),objectTypes:ri(c)};return;case"tags":e.filter={...e.filter??De(),tags:ye(c)};return;case"groups":e.filter={...e.filter??De(),groupIds:ii(c,r,o,s)};return}}function Xr(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,o=Jr(e.filter),s=e.label?.trim()||ai(e.id);return{id:e.id,label:s,summary:e.summary?.trim()||si(s,i,o),objectId:i,selectedObjectId:a,eventIds:[...new Set(e.eventIds??[])],projection:e.projection??t,preset:e.preset??n,rotationDeg:e.rotationDeg??0,scale:e.scale??null,layers:e.layers??{},filter:o,generated:!1}}function De(){return{query:null,objectTypes:[],tags:[],groupIds:[]}}function Jr(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 Qr(e){return e.toLowerCase()==="isometric"?"isometric":e.toLowerCase()==="topdown"?"topdown":null}function ei(e){let t=e.toLowerCase();return t==="diagram"||t==="presentation"||t==="atlas-card"||t==="markdown"?t:null}function Nt(e){let t=Number(e);return Number.isFinite(t)?t:null}function ti(e){let t=Nt(e);return t!==null&&t>0?t:null}function ni(e){let t={};for(let n of ye(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==="events"||i==="objects"||i==="labels"||i==="metadata")&&(t[i]=r)}return t}function ri(e){return ye(e).filter(t=>t==="star"||t==="planet"||t==="moon"||t==="belt"||t==="asteroid"||t==="comet"||t==="ring"||t==="structure"||t==="phenomenon")}function ii(e,t,n,r){return ye(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)??he(i):(r.has(i),he(i)))}function ye(e){return e.split(/[\s,]+/).map(t=>t.trim()).filter(Boolean)}function oi(e){return e.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")}function ai(e){return e.split(/[-_]+/).filter(Boolean).map(t=>t[0].toUpperCase()+t.slice(1)).join(" ")}function si(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 ci(e,t,n,r,i,a,o){let s=Number.POSITIVE_INFINITY,c=Number.POSITIVE_INFINITY,l=Number.NEGATIVE_INFINITY,d=Number.NEGATIVE_INFINITY,f=(p,m)=>{s=Math.min(s,p),c=Math.min(c,m),l=Math.max(l,p),d=Math.max(d,m)};for(let p of r)p.hidden||Ct(p,f);for(let p of i)p.hidden||(f(p.x1,p.y1),f(p.x2,p.y2));for(let p of n)p.hidden||Bt(p,f);for(let p of a)p.hidden||zt(p,f,o);return!Number.isFinite(s)||!Number.isFinite(c)?ge(0,0,e,t):ge(s,c,l,d)}function Ct(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=Yt(e.cx,e.cy,r,i,e.rotationDeg,0,Math.PI*2,Et*2);for(let o of a)t(o.x-n,o.y-n),t(o.x+n,o.y+n)}function ge(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 Bt(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 zt(e,t,n){let r=Wt(e.x,e.y,e.secondaryY,e.textAnchor,e.direction,e.label,e.secondaryLabel,n);t(r.left,r.top),t(r.right,r.bottom)}function Qe(e,t,n,r,i,a,o,s){i.has(e.id)||(i.set(e.id,{object:e,x:t,y:n,radius:Ee(e,r,s.scaleModel),sortKey:Re(t,n,r)}),Fe(e,i,a,o,s,r+1))}function Fe(e,t,n,r,i,a){let o=t.get(e.id);if(!o)return;let s=[...i.orbitChildren.get(e.id)??[]].sort(li),c=ui(s,o.radius,i.spacingFactor,i.scaleModel),l=pi(s,c);s.forEach((f,p)=>{let m=di(f,p,s.length,o,c,l[p]??c.innerPx,i);n.push({object:f,parentId:e.id,kind:m.kind,cx:m.cx,cy:m.cy,radius:m.radius,rx:m.rx,ry:m.ry,rotationDeg:m.rotationDeg,band:m.band,bandThickness:m.bandThickness,frontArcPath:m.frontArcPath,backArcPath:m.backArcPath}),Qe(f,m.objectX,m.objectY,a,t,n,r,i)});let d=[...i.surfaceChildren.get(e.id)??[]];d.forEach((f,p)=>{let m=be(p,d.length,-Math.PI/3),b=28*i.spacingFactor,I=we(m,o.radius,i.projection,i.projection==="isometric"?.9:1),j=we(m,o.radius+b,i.projection,i.projection==="isometric"?.9:1),L=o.x+I.x,g=o.y+I.y,k=o.x+j.x,R=o.y+j.y;t.set(f.id,{object:f,x:k,y:R,radius:Ee(f,a+1,i.scaleModel),sortKey:Re(k,R,a+1),anchorX:L,anchorY:g}),r.push({object:f,groupId:i.objectMap.has(f.id)?he(Ii(f,i.objectMap)):null,x1:L,y1:g,x2:k,y2:R,mode:"surface"}),Fe(f,t,n,r,i,a+1)})}function li(e,t){let n=Pe(e),r=Pe(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 ui(e,t,n,r){let i=e.map(f=>Pe(f)),a=i.filter(f=>f!==null),o=t+56*n*r.orbitDistanceMultiplier,s=(e.length>2?54:64)*n*r.orbitDistanceMultiplier;if(a.length===0)return{metrics:i,minMetric:0,maxMetric:0,metricSpread:0,innerPx:o,stepPx:s,pixelSpread:Math.max(s*Math.max(e.length-1,1),s),minimumGapPx:s*.42};let c=Math.min(...a),l=Math.max(...a),d=l-c;return{metrics:i,minMetric:c,maxMetric:l,metricSpread:d,innerPx:o,stepPx:s,pixelSpread:Math.max(s*Math.max(e.length-1,1),s),minimumGapPx:s*.42}}function di(e,t,n,r,i,a,o){let s=e.placement,c=e.type==="belt"||e.type==="ring";if(!s||s.mode!=="orbit"){let q=i.innerPx+t*i.stepPx;return{kind:"circle",cx:r.x,cy:r.y,radius:q,rotationDeg:0,band:c,bandThickness:c?12*o.scaleModel.ringThicknessMultiplier:void 0,objectX:r.x,objectY:r.y-q}}let l=O(typeof s.eccentricity=="number"?s.eccentricity:0,0,.92),d=a,f=Math.max(d*Math.sqrt(1-l*l),d*.18),p=tt(s.inclination)??0,m=o.projection==="isometric"?Math.max(Or,Math.cos(_e(p)))*Pt:1,b=Math.max(f*m,d*.14),I=tt(s.angle)??0,j=d*l,L=Ht(-j,0,I),g=r.x+L.x,k=r.y+L.y,R=hi(s.phase,t,n),Q=qt(g,k,d,b,I,R),_=o.projection==="topdown"&&l<=1e-4&&Math.abs(I)<=1e-4,Y=c?yi(e,d,i,o.scaleModel):void 0;return{kind:_?"circle":"ellipse",cx:_?r.x:g,cy:_?r.y:k,radius:_?d:void 0,rx:_?void 0:d,ry:_?void 0:b,rotationDeg:I,band:c,bandThickness:Y,frontArcPath:o.projection==="isometric"||c?St(g,k,d,b,I,0,Math.PI):void 0,backArcPath:o.projection==="isometric"||c?St(g,k,d,b,I,Math.PI,Math.PI*2):void 0,objectX:Q.x,objectY:Q.y}}function fi(e,t){return t.innerPx+t.stepPx*mi(Math.max(e,0)+1)}function pi(e,t){let n=[];return e.forEach((r,i)=>{let a=Pe(r),o=t.innerPx+i*t.stepPx,s=a===null?o:fi(a,t),c=i===0?t.innerPx:(n[i-1]??t.innerPx)+t.minimumGapPx;n.push(Math.max(s,c))}),n}function Pe(e){return!e.placement||e.placement.mode!=="orbit"?null:Me(e.placement.semiMajor??e.placement.distance??null)}function mi(e){return Math.log(e)/Math.log(2)}function hi(e,t,n){let r=e?tt(e):null;return r!==null?_e(r-90):be(t,n,-Math.PI/2)}function yi(e,t,n,r){let i=Me(et(e.properties.inner)),a=Me(et(e.properties.outer));if(i!==null&&a!==null){let s=Math.abs(a-i);if(n.metricSpread>0)return O(s/n.metricSpread*n.pixelSpread*r.ringThicknessMultiplier,8,54);let c=Math.max(Math.max(i,a),1e-4);return O(s/c*t*.75*r.ringThicknessMultiplier,8,48)}return(e.type==="belt"?18:12)*r.ringThicknessMultiplier}function gi(e,t,n,r,i,a,o,s,c){if(e.kind==="lagrange")return bi(e,t,n,a,o);if(e.kind==="anchor"){let l=t.get(e.objectId);if(l){let d=be(r,i,Math.PI/5),f=(l.radius+36)*c.scaleModel.labelMultiplier,p=we(d,f,c.projection,c.projection==="isometric"?.92:1);return{x:l.x+p.x,y:l.y+p.y,anchorX:l.x,anchorY:l.y}}}if(e.kind==="named"){let l=t.get(e.name);if(l){let d=be(r,i,Math.PI/6),f=(l.radius+36)*c.scaleModel.labelMultiplier,p=we(d,f,c.projection,c.projection==="isometric"?.92:1);return{x:l.x+p.x,y:l.y+p.y,anchorX:l.x,anchorY:l.y}}}return{x:a-s-170,y:o-s-86-r*58*c.scaleModel.freePlacementMultiplier}}function bi(e,t,n,r,i){let a=e.secondary?t.get(e.primary):ki(e.primary,t,n),o=t.get(e.secondary??e.primary);if(!a||!o)return{x:r*.7,y:i*.25};let s=o.x-a.x,c=o.y-a.y,l=Math.hypot(s,c)||1,d=s/l,f=c/l,p=-f,m=d,b=O(l*.25,24,68);switch(e.point){case"L1":return{x:o.x-d*b,y:o.y-f*b,anchorX:o.x,anchorY:o.y};case"L2":return{x:o.x+d*b,y:o.y+f*b,anchorX:o.x,anchorY:o.y};case"L3":return{x:a.x-d*b,y:a.y-f*b,anchorX:a.x,anchorY:a.y};case"L4":return{x:o.x+(d*.5-p*.8660254)*b,y:o.y+(f*.5-m*.8660254)*b,anchorX:o.x,anchorY:o.y};case"L5":return{x:o.x+(d*.5+p*.8660254)*b,y:o.y+(f*.5+m*.8660254)*b,anchorX:o.x,anchorY:o.y}}}function wi(e,t){let n=new Map,r=new Map;for(let l of e){let d=Ut(l,t);if(n.set(l.id,d),d){let f=r.get(d);f?f.push(l.id):r.set(d,[l.id])}r.has(l.id)||r.set(l.id,[])}let i=new Map,a=new Map,o=new Map,s=l=>{let d=i.get(l);if(d)return d;let f=new Set,p=[],m=n.get(l)??null;for(;m&&!f.has(m);)p.push(m),f.add(m),m=n.get(m)??null;return i.set(l,p),p},c=l=>{let d=o.get(a.get(l)??"");if(d)return d;let f=n.get(l)??null,p=t.get(l),m=l;return p?.placement&&p.placement.mode!=="free"&&f&&(m=c(f)),m};for(let l of e){s(l.id);let d=c(l.id),f=he(d);a.set(l.id,f),o.set(f,d)}return{parentIds:n,childIds:r,ancestorIds:i,groupIds:a,groupRoots:o}}function Ut(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 vi(e,t,n,r,i,a){let o=Number.POSITIVE_INFINITY,s=Number.POSITIVE_INFINITY,c=Number.NEGATIVE_INFINITY,l=Number.NEGATIVE_INFINITY,d=(f,p)=>{o=Math.min(o,f),s=Math.min(s,p),c=Math.max(c,f),l=Math.max(l,p)};for(let f of t)!f.hidden&&e.objectIds.includes(f.objectId)&&Bt(f,d);for(let f of n)!f.hidden&&e.orbitIds.includes(f.objectId)&&Ct(f,d);for(let f of r)!f.hidden&&e.leaderIds.includes(f.objectId)&&(d(f.x1,f.y1),d(f.x2,f.y2));for(let f of i)!f.hidden&&e.labelIds.includes(f.objectId)&&zt(f,d,a);return!Number.isFinite(o)||!Number.isFinite(s)?ge(0,0,0,0):ge(o,s,c,l)}function Ii(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=Ut(n,t);if(!i)break;let a=t.get(i);if(!a)break;n=a}return n.id}function Vt(e,t,n){return Wt(t.x,t.labelY,t.secondaryY,t.textAnchor,t.direction,e.label,e.secondaryLabel,n)}function Wt(e,t,n,r,i,a,o,s){let c=Ai(a,o,s),l=c*2,d=i==="above"?18:12,f=i==="above"?8:12,p=e-c,m=e+c;return r==="start"?(p=e,m=e+l):r==="end"&&(p=e-l,m=e),{left:p,right:m,top:Math.min(t,n)-d,bottom:Math.max(t,n)+f}}function $i(e,t){return!(e.right<t.left||t.right<e.left||e.bottom<t.top||t.bottom<e.top)}function ki(e,t,n){let r=n.get(e);return!r?.placement||r.placement.mode!=="orbit"?t.get(e):t.get(r.placement.target)}function Ee(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 O((t===0?28:20)*i,n.minBodyRadius,n.maxBodyRadius);case"planet":return O(12*i,n.minBodyRadius,n.maxBodyRadius);case"moon":return O(7*i,n.minBodyRadius,n.maxBodyRadius);case"belt":return O(5*i,n.minBodyRadius,n.maxBodyRadius);case"asteroid":return O(5*i,n.minBodyRadius,n.maxBodyRadius);case"comet":return O(6*i,n.minBodyRadius,n.maxBodyRadius);case"ring":return O(5*i,n.minBodyRadius,n.maxBodyRadius);case"structure":return O(6*i,n.minBodyRadius,n.maxBodyRadius);case"phenomenon":return O(8*i,n.minBodyRadius,n.maxBodyRadius)}}function ji(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 Me(e){if(!e)return null;switch(e.unit){case"au":return e.value;case"km":return e.value/me;case"m":return e.value/1e3/me;case"ly":return e.value*kr;case"pc":return e.value*jr;case"kpc":return e.value*xr;case"re":return e.value*vr/me;case"rj":return e.value*Ir/me;case"sol":return e.value*$r/me;default:return e.value}}function xi(e,t){let n=Me(e??null);return n===null||n<=0?0:O(n*96*t.freePlacementMultiplier,0,420)}function Oi(e,t){let n=et(e);if(!n)return null;let r;switch(n.unit){case"sol":r=O(n.value*22,14,40);break;case"re":r=O(n.value*10,6,18);break;case"km":r=O(Math.log10(Math.max(n.value,1))*2.6,4,16);break;default:r=O(n.value*4,4,20);break}return O(r*t.bodyRadiusMultiplier,t.minBodyRadius,t.maxBodyRadius)}function et(e){return!e||typeof e!="object"||!("value"in e)?null:e}function tt(e){return e&&(e.unit==="deg"||e.unit===null)?e.value:null}function be(e,t,n){return t<=1?n:n+e*Math.PI*2/t}function St(e,t,n,r,i,a,o){let s=Yt(e,t,n,r,i,a,o,Et);return s.length===0?"":s.map((c,l)=>`${l===0?"M":"L"} ${Ft(c.x)} ${Ft(c.y)}`).join(" ")}function Yt(e,t,n,r,i,a,o,s){let c=[];for(let l=0;l<=s;l+=1){let d=a+(o-a)*l/s;c.push(qt(e,t,n,r,i,d))}return c}function qt(e,t,n,r,i,a){let o=n*Math.cos(a),s=r*Math.sin(a),c=Ht(o,s,i);return{x:e+c.x,y:t+c.y}}function Ht(e,t,n){let r=_e(n);return{x:e*Math.cos(r)-t*Math.sin(r),y:e*Math.sin(r)+t*Math.cos(r)}}function we(e,t,n,r){let i=n==="isometric"?Pt*r:r;return{x:Math.cos(e)*t,y:Math.sin(e)*t*i}}function Re(e,t,n){return t*1e3+e+n*.01}function O(e,t,n){return Math.min(Math.max(e,t),n)}function Tt(e,t,n){let r=e.get(t);r?r.push(n):e.set(t,[n])}function se(e){return`wo-${e.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")||"object"}`}function he(e){return`${se(e)}-group`}function Li(e){return typeof e=="string"&&e.trim()?e:void 0}function Ai(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 Dt(e){return e.length>0?e[0].toUpperCase()+e.slice(1):e}function _e(e){return e*Math.PI/180}function Ft(e){return Number.isInteger(e)?String(e):e.toFixed(2)}function ve(e,t={}){let n=re(e,t),r=[],i=Di(e,r),a=Fi(e,r),o=Ti(e,n.renderPreset??t.preset??null,n.projection),s=e.system?Si(e,o,i,a,r,n.renderPreset??t.preset??null):null;return n.viewpoints.some(c=>!c.generated)&&r.push({code:"upgrade.viewpoints.structured",severity:"info",source:"upgrade",message:`Promoted ${n.viewpoints.filter(c=>!c.generated).length} document-defined viewpoint(s) into the 2.0 atlas section.`}),{format:"worldorbit",version:"2.0",schemaVersion:"2.0",sourceVersion:e.version,system:s,groups:structuredClone(e.groups??[]),relations:structuredClone(e.relations??[]),events:structuredClone(e.events??[]),objects:e.objects.map(Zt),diagnostics:r}}function Ne(e,t={}){return Vi(ve(e,t))}function Ie(e,t={}){let n=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:Bi(e.system),info:zi(e.system)}:null,r=e.objects.map(Zt);return Ri(r,e.events??[],t.activeEventId??null),{format:"worldorbit",version:"1.0",schemaVersion:e.version,system:n,groups:structuredClone(e.groups??[]),relations:structuredClone(e.relations??[]),events:e.events.map(Ei),objects:r}}function Kt(e){return Ie(e)}function Si(e,t,n,r,i,a){let o=re(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:o.viewpoints.map(Pi),annotations:r}}function Ti(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,...o]=r.split(".");if(!a||o.length===0)continue;let s=Gt(a);if(!s)continue;let c=n.get(s)??{id:s};switch(o.join(".").toLowerCase()){case"label":c.label=i;break;case"target":case"object":c.targetObjectId=i.trim()||null;break;case"body":case"text":case"description":c.body=i;break;case"tags":c.tags=Ni(i);break}n.set(s,c)}for(let r of e.objects){let i=r.info.description;if(!i)continue;let a=Gt(`${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(o=>typeof o=="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??Ci(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,events:[...e.eventIds],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:_i(e.properties),placement:e.placement?structuredClone(e.placement):null,info:{...e.info}}}function Ei(e){return{...e,participantObjectIds:[...e.participantObjectIds],tags:[...e.tags],positions:e.positions.map(Mi)}}function Mi(e){return{objectId:e.objectId,placement:Xt(e.placement),inner:e.inner?{...e.inner}:void 0,outer:e.outer?{...e.outer}:void 0}}function Xt(e){return e?structuredClone(e):null}function Ri(e,t,n){if(!n)return;let r=t.find(a=>a.id===n);if(!r)return;let i=new Map(e.map(a=>[a.id,a]));for(let a of r.positions){let o=i.get(a.objectId);o&&(o.placement=Xt(a.placement),a.inner?o.properties.inner={...a.inner}:delete o.properties.inner,a.outer?o.properties.outer={...a.outer}:delete o.properties.outer)}}function _i(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 Ni(e){return e.split(/[\s,]+/).map(t=>t.trim()).filter(Boolean)}function Gt(e){return e.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")}function Ci(e){return e.split(/[-_]+/).filter(Boolean).map(t=>t[0].toUpperCase()+t.slice(1)).join(" ")}function Bi(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 zi(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=Ui(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(" ")??""),n.events.length>0&&(t[`${r}.events`]=n.events.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 Ui(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","events","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 Jt=["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 Be(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 c=e.version==="2.0-draft"?e:e.version==="2.0"||e.version==="2.1"?{...e,version:"2.0-draft",schemaVersion:"2.0-draft"}:Ne(e);return nt(c)}let s=e.version==="2.0"||e.version==="2.1"?e:e.version==="2.0-draft"?{...e,version:"2.0",schemaVersion:"2.0"}:ve(e);return n==="2.1"&&s.version!=="2.1"?Ce({...s,version:"2.1",schemaVersion:"2.1"}):Ce(s)}let i=[],a=e;a.system&&i.push(...Wi(a.system));let o=[...a.objects].sort(ot);for(let s of o)i.length>0&&i.push(""),i.push(...qi(s));return i.join(`
2
- `)}function Ce(e){let t=[`schema ${e.version}`,""];e.system&&t.push(...en(e.system));for(let r of[...e.groups].sort(ce))t.push(""),t.push(...on(r));for(let r of[...e.relations].sort(ce))t.push(""),t.push(...an(r));for(let r of[...e.events].sort(ce))t.push(""),t.push(...sn(r));let n=[...e.objects].sort(ot);return n.length>0&&t.at(-1)!==""&&t.push(""),n.forEach((r,i)=>{i>0&&t.push(""),t.push(...tn(r))}),t.join(`
3
- `)}function nt(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(...en(t.system));for(let i of[...t.groups].sort(ce))n.push(""),n.push(...on(i));for(let i of[...t.relations].sort(ce))n.push(""),n.push(...an(i));for(let i of[...t.events].sort(ce))n.push(""),n.push(...sn(i));let r=[...t.objects].sort(ot);return r.length>0&&n.at(-1)!==""&&n.push(""),r.forEach((i,a)=>{a>0&&n.push(""),n.push(...tn(i))}),n.join(`
4
- `)}function Wi(e){return Yi("system",e.id,e.properties,null,e.info)}function Yi(e,t,n,r,i){let a=[`${e} ${t}`],o=[...rt(r),...rn(n)];for(let c of o)a.push(` ${c}`);let s=Object.entries(i).sort(([c],[l])=>c.localeCompare(l));if(s.length>0){o.length>0&&a.push(""),a.push(" info");for(let[c,l]of s)a.push(` ${c} ${y(l)}`)}return a}function en(e){let t=[`system ${e.id}`];if(e.title&&t.push(` title ${y(e.title)}`),e.description&&t.push(` description ${y(e.description)}`),e.epoch&&t.push(` epoch ${y(e.epoch)}`),e.referencePlane&&t.push(` referencePlane ${y(e.referencePlane)}`),t.push(""),t.push("defaults"),t.push(` view ${e.defaults.view}`),e.defaults.scale&&t.push(` scale ${y(e.defaults.scale)}`),e.defaults.units&&t.push(` units ${y(e.defaults.units)}`),e.defaults.preset&&t.push(` preset ${e.defaults.preset}`),e.defaults.theme&&t.push(` theme ${y(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} ${y(r)}`)}for(let n of e.viewpoints)t.push(""),t.push(...Gi(n));for(let n of e.annotations)t.push(""),t.push(...Ki(n));return t}function qi(e){return nn(e.type,e.id,e)}function tn(e){return nn(`object ${e.type}`,e.id,e)}function nn(e,t,n){let r=[`${e} ${t}`],i=[...rt(n.placement),...rn(n.properties),...Hi(n)];for(let o of i)r.push(` ${o}`);let a=Object.entries(n.info).sort(([o],[s])=>o.localeCompare(s));if(a.length>0){i.length>0&&r.push(""),r.push(" info");for(let[o,s]of a)r.push(` ${o} ${y(s)}`)}for(let o of["climate","habitability","settlement"]){let s=Object.entries(n.typedBlocks?.[o]??{}).sort(([c],[l])=>c.localeCompare(l));if(s.length>0){r.push(""),r.push(` ${o}`);for(let[c,l]of s)r.push(` ${c} ${y(l)}`)}}return r}function rt(e){if(!e)return[];switch(e.mode){case"orbit":return[`orbit ${e.target}`,...K("distance",e.distance),...K("semiMajor",e.semiMajor),...Xi("eccentricity",e.eccentricity),...K("period",e.period),...K("angle",e.angle),...K("inclination",e.inclination),...K("phase",e.phase)];case"at":return[`at ${Ji(e.reference)}`];case"surface":return[`surface ${e.target}`];case"free":return[`free ${e.distance?it(e.distance):e.descriptor??""}`.trim()]}}function rn(e){return Object.keys(e).sort(eo).map(t=>`${t} ${cn(e[t])}`)}function Hi(e){let t=[];e.groups?.length&&t.push(`groups ${e.groups.join(" ")}`),e.epoch&&t.push(`epoch ${y(e.epoch)}`),e.referencePlane&&t.push(`referencePlane ${y(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} ${cn(n.value)}`);return t}function Gi(e){let t=[`viewpoint ${e.id}`,` label ${y(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 ${y(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=Qi(e.layers);return n.length>0&&t.push(` layers ${n.join(" ")}`),e.events.length>0&&t.push(` events ${e.events.join(" ")}`),e.filter&&(t.push(" filter"),e.filter.query&&t.push(` query ${y(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(y).join(" ")}`),e.filter.groupIds.length>0&&t.push(` groups ${e.filter.groupIds.join(" ")}`)),t}function Ki(e){let t=[`annotation ${e.id}`,` label ${y(e.label)}`];return e.targetObjectId&&t.push(` target ${e.targetObjectId}`),t.push(` body ${y(e.body)}`),e.tags.length>0&&t.push(` tags ${e.tags.map(y).join(" ")}`),t}function on(e){let t=[`group ${e.id}`,` label ${y(e.label)}`];return e.summary&&t.push(` summary ${y(e.summary)}`),e.color&&t.push(` color ${y(e.color)}`),e.tags.length>0&&t.push(` tags ${e.tags.map(y).join(" ")}`),e.hidden&&t.push(" hidden true"),t}function an(e){let t=[`relation ${e.id}`];return e.from&&t.push(` from ${y(e.from)}`),e.to&&t.push(` to ${y(e.to)}`),e.kind&&t.push(` kind ${y(e.kind)}`),e.label&&t.push(` label ${y(e.label)}`),e.summary&&t.push(` summary ${y(e.summary)}`),e.tags.length>0&&t.push(` tags ${e.tags.map(y).join(" ")}`),e.color&&t.push(` color ${y(e.color)}`),e.hidden&&t.push(" hidden true"),t}function sn(e){let t=[`event ${e.id}`,` kind ${y(e.kind)}`];if(e.label&&t.push(` label ${y(e.label)}`),e.summary&&t.push(` summary ${y(e.summary)}`),e.targetObjectId&&t.push(` target ${e.targetObjectId}`),e.participantObjectIds.length>0&&t.push(` participants ${e.participantObjectIds.join(" ")}`),e.timing&&t.push(` timing ${y(e.timing)}`),e.visibility&&t.push(` visibility ${y(e.visibility)}`),e.tags.length>0&&t.push(` tags ${e.tags.map(y).join(" ")}`),e.color&&t.push(` color ${y(e.color)}`),e.hidden&&t.push(" hidden true"),e.positions.length>0){t.push(""),t.push(" positions");for(let n of[...e.positions].sort(to)){t.push(` pose ${n.objectId}`);for(let r of Zi(n))t.push(` ${r}`)}}return t}function Zi(e){return[...rt(e.placement),...K("inner",e.inner),...K("outer",e.outer)]}function cn(e){return Array.isArray(e)?e.map(t=>y(t)).join(" "):typeof e=="boolean"?e?"true":"false":typeof e=="number"?String(e):typeof e=="string"?y(e):it(e)}function it(e){return`${e.value}${e.unit??""}`}function K(e,t){return t?[`${e} ${it(t)}`]:[]}function Xi(e,t){return t===void 0?[]:[`${e} ${t}`]}function Ji(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 Qi(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","events","objects","labels","metadata"])e[i]!==void 0&&t.push(e[i]?i:`-${i}`);return t}function eo(e,t){let n=Jt.indexOf(e),r=Jt.indexOf(t);return n===-1&&r===-1?e.localeCompare(t):n===-1?1:r===-1?-1:n-r}function ot(e,t){let n=Qt(e.type),r=Qt(t.type);return n!==r?n-r:e.id.localeCompare(t.id)}function ce(e,t){return e.id.localeCompare(t.id)}function to(e,t){return e.objectId.localeCompare(t.objectId)}function Qt(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 y(e){return!/\s/.test(e)&&!e.includes('"')?e:`"${e.replaceAll("\\","\\\\").replaceAll('"','\\"')}"`}var ln=/^(-?\d+(?:\.\d+)?)(kpc|min|mj|rj|ky|my|gy|au|km|me|re|pc|ly|deg|sol|K|m|s|h|d|y)?$/,no=new Map([["true",!0],["false",!1],["yes",!0],["no",!1]]),ro=/^[A-Za-z][A-Za-z0-9+.-]*:/;function le(e){return e.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")}function ke(e){return e.split(/[-_]+/).filter(Boolean).map(t=>t[0].toUpperCase()+t.slice(1)).join(" ")}function at(e,t,n){let r=e.match(ln);if(!r)throw u.fromLocation(`Invalid unit value "${e}"`,t);let i={value:Number(r[1]),unit:r[2]??null};if(n){let a=D(n);if(a?.unitFamily&&!pe(a.unitFamily,i.unit))throw u.fromLocation(`Unit "${i.unit??"none"}" is not valid for "${n}"`,t)}return i}function st(e){let t=e.match(ln);return t?{value:Number(t[1]),unit:t[2]??null}:null}function ze(e,t,n){let r=Number(e);if(!Number.isFinite(r))throw u.fromLocation(`Invalid numeric value "${e}" for "${t}"`,n);return r}function Z(e,t,n){let r=no.get(e.toLowerCase());if(r===void 0)throw u.fromLocation(`Invalid boolean value "${e}" for "${t}"`,n);return r}function un(e,t){if(/^[A-Za-z0-9._-]+-[A-Za-z0-9._-]+:L\d+$/i.test(e))throw u.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 u.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 io(e,t){if(!e)throw u.fromLocation('Field "image" must not be empty',t);if(e.startsWith("//"))throw u.fromLocation('Field "image" must use a relative path, root-relative path, or an http/https URL',t);let n=e.match(ro);if(!n)return;let r=n[0].slice(0,-1).toLowerCase();if(r!=="http"&&r!=="https")throw u.fromLocation(`Field "image" does not support the "${r}" scheme`,t)}function dn(e,t,n){let r=D(e);if(!r)throw u.fromLocation(`Unknown field "${e}"`,n);if(r.arity==="single"&&t.length!==1)throw u.fromLocation(`Field "${e}" expects exactly one value`,n);switch(r.kind){case"list":return t;case"boolean":return Z($e(t,e,n),e,n);case"number":return ze($e(t,e,n),e,n);case"unit":return at($e(t,e,n),n,e);case"string":{let i=t.join(" ").trim();return e==="image"&&io(i,n),i}}}function ct(e,t,n){let r=D(e);if(!r)throw u.fromLocation(`Unknown field "${e}"`,n);if(!r.objectTypes.includes(t))throw u.fromLocation(`Field "${e}" is not valid on "${t}"`,n)}function $e(e,t,n){if(e.length!==1)throw u.fromLocation(`Field "${t}" expects exactly one value`,n);return e[0]}var pn=new Set(["star","planet","moon","asteroid","comet"]),oo=332946.0487,ao=1047.3486,Ue=1495978707e-1,so=6371,co=695700,lo=63241.077,uo=206264.806,fo=206264806;function je(e,t){let n=[],r=new Map(e.objects.map(s=>[s.id,s])),i=new Set(e.groups.map(s=>s.id)),a=new Set(e.events.map(s=>s.id));e.system||n.push(v("validate.system.required","Atlas documents must declare exactly one system."));let o=new Map;for(let[s,c]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)],["event",e.events.map(l=>l.id)],["object",e.objects.map(l=>l.id)]])for(let l of c){let d=o.get(l);d?n.push(v("validate.id.duplicate",`Duplicate ${s} id "${l}" already used by ${d}.`)):o.set(l,s)}for(let s of e.relations)po(s,r,n);for(let s of e.system?.viewpoints??[])mo(s.filter,s.events??[],i,a,t,n,s.id);for(let s of e.objects)ho(s,e.system,r,i,n);for(let s of e.events)yo(s,r,n);return n}function po(e,t,n){e.from?t.has(e.from)||n.push(v("validate.relation.from.unknown",`Unknown relation source "${e.from}" on "${e.id}".`)):n.push(v("validate.relation.from.required",`Relation "${e.id}" is missing a "from" target.`)),e.to?t.has(e.to)||n.push(v("validate.relation.to.unknown",`Unknown relation target "${e.to}" on "${e.id}".`)):n.push(v("validate.relation.to.required",`Relation "${e.id}" is missing a "to" target.`)),e.kind||n.push(v("validate.relation.kind.required",`Relation "${e.id}" is missing a "kind" value.`))}function mo(e,t,n,r,i,a,o){if(i==="2.1"){if(e)for(let s of e.groupIds)n.has(s)||a.push(S("validate.viewpoint.group.unknown",`Unknown group "${s}" in viewpoint "${o}".`,void 0,`viewpoint.${o}.groups`));for(let s of t)r.has(s)||a.push(S("validate.viewpoint.event.unknown",`Unknown event "${s}" in viewpoint "${o}".`,void 0,`viewpoint.${o}.events`))}}function ho(e,t,n,r,i){let a=e.placement,o=a?.mode==="orbit"?a:null,s=a?.mode==="orbit"?n.get(a.target)??null:null;if(e.groups)for(let c of e.groups)r.has(c)||i.push(S("validate.group.unknown",`Unknown group "${c}" on "${e.id}".`,e.id,"groups"));if(o&&(n.has(o.target)||i.push(v("validate.orbit.target.unknown",`Unknown placement target "${o.target}" on "${e.id}".`,e.id,"orbit")),o.distance&&o.semiMajor&&i.push(v("validate.orbit.distanceConflict",`Object "${e.id}" cannot declare both "distance" and "semiMajor".`,e.id,"distance")),o.phase&&!e.epoch&&!t?.epoch&&i.push(S("validate.phase.epochMissing",`Object "${e.id}" sets "phase" without an object or system epoch.`,e.id,"phase")),o.inclination&&!e.referencePlane&&!t?.referencePlane&&i.push(S("validate.inclination.referencePlaneMissing",`Object "${e.id}" sets "inclination" without an object or system reference plane.`,e.id,"inclination")),o.period&&!mn(s?.properties.mass)&&i.push(S("validate.period.massMissing",`Object "${e.id}" sets "period" but its central mass cannot be derived.`,e.id,"period"))),a?.mode==="surface"){let c=n.get(a.target);c?pn.has(c.type)||i.push(v("validate.surface.target.invalid",`Surface target "${a.target}" on "${e.id}" is not surface-capable.`,e.id,"surface")):i.push(v("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(v("validate.at.objectType",`Only structures and phenomena may use "at" placement; found "${e.type}" on "${e.id}".`,e.id,"at")),bo(e,n,i)||i.push(v("validate.at.target.unknown",`Unknown at-reference target "${a.target}" on "${e.id}".`,e.id,"at"))),e.resonance){let c=n.get(e.resonance.targetObjectId);c?(e.placement?.mode!=="orbit"||c.placement?.mode!=="orbit"||e.placement.target!==c.placement.target)&&i.push(S("validate.resonance.orbitMismatch",`Resonance target "${e.resonance.targetObjectId}" on "${e.id}" does not share a compatible orbital parent.`,e.id,"resonance")):i.push(v("validate.resonance.target.unknown",`Unknown resonance target "${e.resonance.targetObjectId}" on "${e.id}".`,e.id,"resonance"))}for(let c of e.deriveRules??[]){if(c.field!=="period"||c.strategy!=="kepler"){i.push(S("validate.derive.unsupported",`Unsupported derive rule "${c.field} ${c.strategy}" on "${e.id}".`,e.id,"derive"));continue}let l=fn(e,s);if(l===null){i.push(S("validate.derive.inputsMissing",`Object "${e.id}" requests "derive period kepler" but lacks enough input data.`,e.id,"derive"));continue}o?.period||i.push($o("validate.derive.period.available",`Object "${e.id}" can derive a Kepler period of ${Io(l)}.`,e.id,"derive"))}for(let c of e.validationRules??[]){if(c.rule!=="kepler"){i.push(S("validate.rule.unsupported",`Unsupported validation rule "${c.rule}" on "${e.id}".`,e.id,"validate"));continue}let l=hn(o?.period),d=fn(e,s);if(l===null||d===null)continue;let f=vo(e,"period");Math.abs(l-d)>f&&i.push(v("validate.kepler.mismatch",`Object "${e.id}" fails Kepler validation for "period".`,e.id,"validate"))}}function yo(e,t,n){let r=`event.${e.id}`,i=new Set;e.kind.trim()||n.push(v("validate.event.kind.required",`Event "${e.id}" is missing a "kind" value.`,void 0,`${r}.kind`)),!e.targetObjectId&&e.participantObjectIds.length===0&&n.push(v("validate.event.references.required",`Event "${e.id}" must define a "target" or at least one participant.`,void 0,`${r}.participants`)),e.targetObjectId&&(i.add(e.targetObjectId),t.has(e.targetObjectId)||n.push(v("validate.event.target.unknown",`Unknown event target "${e.targetObjectId}" on "${e.id}".`,void 0,`${r}.target`)));let a=new Set;for(let s of e.participantObjectIds){if(i.add(s),a.has(s)){n.push(S("validate.event.participants.duplicate",`Event "${e.id}" repeats participant "${s}".`,void 0,`${r}.participants`));continue}a.add(s),t.has(s)||n.push(v("validate.event.participants.unknown",`Unknown event participant "${s}" on "${e.id}".`,void 0,`${r}.participants`))}e.targetObjectId&&e.participantObjectIds.length>0&&!e.participantObjectIds.includes(e.targetObjectId)&&n.push(S("validate.event.target.notParticipant",`Event "${e.id}" defines a target outside its participants list.`,void 0,`${r}.target`)),e.positions.length===0&&n.push(S("validate.event.positions.missing",`Event "${e.id}" has no positions block and cannot drive a scene snapshot.`,void 0,`${r}.positions`)),/(?:^|[-_])(solar-eclipse|lunar-eclipse|transit|occultation)(?:$|[-_])/.test(e.kind)&&i.size<3&&n.push(S("validate.event.kind.participants",`Event "${e.id}" looks like an eclipse or transit but references fewer than three bodies.`,void 0,`${r}.participants`));let o=new Set;for(let s of e.positions){let c=`${r}.pose.${s.objectId}`;if(o.has(s.objectId)){n.push(v("validate.event.pose.duplicate",`Event "${e.id}" defines "${s.objectId}" more than once in positions.`,void 0,c));continue}o.add(s.objectId);let l=t.get(s.objectId);if(!l){n.push(v("validate.event.pose.object.unknown",`Unknown event pose object "${s.objectId}" on "${e.id}".`,void 0,c));continue}i.has(s.objectId)||n.push(S("validate.event.pose.unreferenced",`Event pose "${s.objectId}" on "${e.id}" is not listed in target/participants.`,void 0,c)),go(s,l,t,n,c,e.id)}}function go(e,t,n,r,i,a){let o=e.placement;if(!o){r.push(v("validate.event.pose.placement.required",`Event "${a}" pose "${e.objectId}" is missing a placement mode.`,void 0,i));return}if(o.mode==="orbit"){n.has(o.target)||r.push(v("validate.event.pose.orbit.target.unknown",`Unknown event orbit target "${o.target}" on "${a}:${e.objectId}".`,void 0,`${i}.orbit`)),o.distance&&o.semiMajor&&r.push(v("validate.event.pose.orbit.distanceConflict",`Event "${a}" pose "${e.objectId}" cannot declare both "distance" and "semiMajor".`,void 0,`${i}.distance`));return}if(o.mode==="surface"){let s=n.get(o.target);s?pn.has(s.type)||r.push(v("validate.event.pose.surface.target.invalid",`Event surface target "${o.target}" on "${a}:${e.objectId}" is not surface-capable.`,void 0,`${i}.surface`)):r.push(v("validate.event.pose.surface.target.unknown",`Unknown event surface target "${o.target}" on "${a}:${e.objectId}".`,void 0,`${i}.surface`));return}if(o.mode==="at"){t.type!=="structure"&&t.type!=="phenomenon"&&r.push(v("validate.event.pose.at.objectType",`Only structures and phenomena may use "at" placement in events; found "${t.type}" on "${a}:${e.objectId}".`,void 0,`${i}.at`));let s=o.reference;s.kind==="named"&&!n.has(s.name)?r.push(v("validate.event.pose.at.target.unknown",`Unknown event at-reference target "${o.target}" on "${a}:${e.objectId}".`,void 0,`${i}.at`)):s.kind==="anchor"&&!n.has(s.objectId)?r.push(v("validate.event.pose.anchor.target.unknown",`Unknown event anchor target "${s.objectId}" on "${a}:${e.objectId}".`,void 0,`${i}.at`)):s.kind==="lagrange"&&(n.has(s.primary)?s.secondary&&!n.has(s.secondary)&&r.push(v("validate.event.pose.lagrange.secondary.unknown",`Unknown event Lagrange target "${s.secondary}" on "${a}:${e.objectId}".`,void 0,`${i}.at`)):r.push(v("validate.event.pose.lagrange.primary.unknown",`Unknown event Lagrange target "${s.primary}" on "${a}:${e.objectId}".`,void 0,`${i}.at`)))}}function bo(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(v("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(v("validate.lagrange.secondary.unknown",`Unknown Lagrange reference "${r.secondary}" on "${e.id}".`,e.id,"at")),!1):!0:(n.push(v("validate.lagrange.primary.unknown",`Unknown Lagrange reference "${r.primary}" on "${e.id}".`,e.id,"at")),!1):!0}function fn(e,t){let n=e.placement;if(!n||n.mode!=="orbit")return null;let r=wo(n.semiMajor??n.distance),i=mn(t?.properties.mass);return r===null||i===null||i<=0?null:Math.sqrt(r**3/i)*365.25}function wo(e){if(!e)return null;switch(e.unit){case null:case"au":return e.value;case"km":return e.value/Ue;case"m":return e.value/(Ue*1e3);case"ly":return e.value*lo;case"pc":return e.value*uo;case"kpc":return e.value*fo;case"re":return e.value*so/Ue;case"sol":return e.value*co/Ue;default:return null}}function mn(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/oo;case"mj":return t.value/ao;default:return null}}function hn(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 vo(e,t){let n=e.tolerances?.find(r=>r.field===t)?.value;return typeof n=="number"?n:n&&typeof n=="object"&&"value"in n?hn(n)??0:0}function Io(e){return`${Math.round(e*100)/100}d`}function v(e,t,n,r){return{code:e,severity:"error",source:"validate",message:t,objectId:n,field:r}}function S(e,t,n,r){return{code:e,severity:"warning",source:"validate",message:t,objectId:n,field:r}}function $o(e,t,n,r){return{code:e,severity:"info",source:"validate",message:t,objectId:n,field:r}}var ko=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=D(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 jo=new Set(Ve.keys()),xo=new Set(["orbit","distance","semiMajor","eccentricity","period","angle","inclination","phase","at","surface","free","inner","outer"]);function We(e){return bn(e)}function gn(e){return bn(e,"2.0-draft")}function bn(e,t){let n=ua(e),r=n.source.split(/\r?\n/),i=[],a=!1,o="2.0",s=null,c=null,l=[],d=[],f=[],p=[],m=new Map,b=!1,I=!1,j=new Set,L=new Set,g=new Set,k=new Set,R=new Set;for(let A=0;A<r.length;A++){let ee=r[A],T=A+1;if(!ee.trim())continue;let B=Le(ee),U=ne(ee.slice(B),{line:T,columnOffset:B});if(U.length!==0){if(!a){o=Oo(U,T),a=!0,n.comments.length>0&&o!=="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 ${o}".`,line:n.comments[0].line,column:n.comments[0].column});continue}if(B===0){c=Lo(U,T,o,i,s,l,d,f,p,m,j,L,g,k,R,{sawDefaults:b,sawAtlas:I}),c.kind==="system"?s=c.system:c.kind==="defaults"?b=!0:c.kind==="atlas"&&(I=!0);continue}if(!c)throw new u("Indented line without parent atlas section",T,B+1);Mo(c,B,U,T)}}if(!a)throw new u('Missing required atlas schema header "schema 2.0"');let Q=l.map(A=>Qo(A,o,i)),_=p.map(A=>ea(A,m.get(A.id)??[])),Y=t??(o==="2.0-draft"?"2.0":o),q={format:"worldorbit",sourceVersion:"1.0",system:s,groups:d,relations:f,events:_,objects:Q,diagnostics:i};if(Y==="2.0-draft"){let A={...q,version:"2.0-draft",schemaVersion:"2.0-draft"};return A.diagnostics.push(...je(A,o)),A}let C={...q,version:Y,schemaVersion:Y};return o==="2.0-draft"&&C.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".'}),C.diagnostics.push(...je(C,o)),C}function Oo(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 u('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 Lo(e,t,n,r,i,a,o,s,c,l,d,f,p,m,b,I){switch(e[0]?.value.toLowerCase()){case"system":if(i)throw new u('Atlas section "system" may only appear once',t,e[0].column);return Ao(e,t,n,r);case"defaults":if(!i)throw new u('Atlas section "defaults" requires a preceding system declaration',t,e[0].column);if(I.sawDefaults)throw new u('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 u('Atlas section "atlas" requires a preceding system declaration',t,e[0].column);if(I.sawAtlas)throw new u('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 u('Atlas section "viewpoint" requires a preceding system declaration',t,e[0].column);return So(e,t,i,d,n,r);case"annotation":if(!i)throw new u('Atlas section "annotation" requires a preceding system declaration',t,e[0].column);return To(e,t,i,f);case"group":return M(n,r,"group",{line:t,column:e[0].column}),Do(e,t,o,p);case"relation":return M(n,r,"relation",{line:t,column:e[0].column}),Fo(e,t,s,m);case"event":return M(n,r,"event",{line:t,column:e[0].column}),Po(e,t,c,l,b,n,r);case"object":return Eo(e,t,n,r,a);default:throw new u(`Unknown atlas section "${e[0]?.value??""}"`,t,e[0]?.column??1)}}function Ao(e,t,n,r){if(e.length!==2)throw new u("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 So(e,t,n,r,i,a){if(e.length!==2)throw new u("Invalid viewpoint declaration",t,e[0]?.column??1);let o=le(e[1].value);if(!o)throw new u("Viewpoint id must not be empty",t,e[1].column);if(r.has(o))throw new u(`Duplicate viewpoint id "${o}"`,t,e[1].column);let s={id:o,label:ke(o),summary:"",focusObjectId:null,selectedObjectId:null,events:[],projection:n.defaults.view,preset:n.defaults.preset,zoom:null,rotationDeg:0,layers:{},filter:null};return n.viewpoints.push(s),r.add(o),{kind:"viewpoint",viewpoint:s,sourceSchemaVersion:i,diagnostics:a,seenFields:new Set,inFilter:!1,filterIndent:null,seenFilterFields:new Set}}function To(e,t,n,r){if(e.length!==2)throw new u("Invalid annotation declaration",t,e[0]?.column??1);let i=le(e[1].value);if(!i)throw new u("Annotation id must not be empty",t,e[1].column);if(r.has(i))throw new u(`Duplicate annotation id "${i}"`,t,e[1].column);let a={id:i,label:ke(i),targetObjectId:null,body:"",tags:[],sourceObjectId:null};return n.annotations.push(a),r.add(i),{kind:"annotation",annotation:a,seenFields:new Set}}function Do(e,t,n,r){if(e.length!==2)throw new u("Invalid group declaration",t,e[0]?.column??1);let i=le(e[1].value);if(!i)throw new u("Group id must not be empty",t,e[1].column);if(r.has(i))throw new u(`Duplicate group id "${i}"`,t,e[1].column);let a={id:i,label:ke(i),summary:"",color:null,tags:[],hidden:!1};return n.push(a),r.add(i),{kind:"group",group:a,seenFields:new Set}}function Fo(e,t,n,r){if(e.length!==2)throw new u("Invalid relation declaration",t,e[0]?.column??1);let i=le(e[1].value);if(!i)throw new u("Relation id must not be empty",t,e[1].column);if(r.has(i))throw new u(`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 Po(e,t,n,r,i,a,o){if(e.length!==2)throw new u("Invalid event declaration",t,e[0]?.column??1);let s=le(e[1].value);if(!s)throw new u("Event id must not be empty",t,e[1].column);if(i.has(s))throw new u(`Duplicate event id "${s}"`,t,e[1].column);let c={id:s,kind:"",label:ke(s),summary:null,targetObjectId:null,participantObjectIds:[],timing:null,visibility:null,tags:[],color:null,hidden:!1,positions:[]},l=[];return n.push(c),r.set(s,l),i.add(s),{kind:"event",event:c,sourceSchemaVersion:a,diagnostics:o,seenFields:new Set,rawPoses:l,inPositions:!1,positionsIndent:null,activePose:null,poseIndent:null,activePoseSeenFields:new Set}}function Eo(e,t,n,r,i){if(e.length<3)throw new u("Invalid atlas object declaration",t,e[0]?.column??1);let a=e[1],o=e[2],s=a.value;if(!fe.has(s)||s==="system")throw new u(`Unknown object type "${a.value}"`,t,a.column);let c={objectType:s,id:o.value,fields:Xo(e.slice(3),t,s,n,r),infoEntries:[],typedBlockEntries:{},location:{line:t,column:a.column}};return i.push(c),{kind:"object",objectNode:c,sourceSchemaVersion:n,diagnostics:r,activeBlock:null,blockIndent:null,seenInfoKeys:new Set,seenTypedBlockKeys:{}}}function Mo(e,t,n,r){switch(e.kind){case"system":Ro(e,n,r);return;case"defaults":_o(e,n,r);return;case"atlas":No(e,t,n,r);return;case"viewpoint":Co(e,t,n,r);return;case"annotation":zo(e,n,r);return;case"group":Uo(e,n,r);return;case"relation":Vo(e,n,r);return;case"event":Wo(e,t,n,r);return;case"object":qo(e,t,n,r);return}}function Ro(e,t,n){let r=J(t,e.seenFields,n),i=$(t,n);switch(r){case"title":e.system.title=i;return;case"description":M(e.sourceSchemaVersion,e.diagnostics,r,{line:n,column:t[0].column}),e.system.description=i;return;case"epoch":M(e.sourceSchemaVersion,e.diagnostics,r,{line:n,column:t[0].column}),e.system.epoch=i;return;case"referenceplane":M(e.sourceSchemaVersion,e.diagnostics,"referencePlane",{line:n,column:t[0].column}),e.system.referencePlane=i;return;default:throw new u(`Unknown system atlas field "${t[0].value}"`,n,t[0].column)}}function _o(e,t,n){let r=J(t,e.seenFields,n),i=$(t,n);switch(r){case"view":e.system.defaults.view=wn(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=vn(i,n,t[0].column);return;case"theme":e.system.defaults.theme=i;return;default:throw new u(`Unknown defaults field "${t[0].value}"`,n,t[0].column)}}function No(e,t,n,r){if(e.inMetadata&&t<=(e.metadataIndent??0)&&(e.inMetadata=!1,e.metadataIndent=null),e.inMetadata){let i=$n(n,r,"Invalid atlas metadata entry");if(i.key in e.system.atlasMetadata)throw new u(`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 u(`Unknown atlas field "${n[0].value}"`,r,n[0].column)}function Co(e,t,n,r){if(e.inFilter&&t<=(e.filterIndent??0)&&(e.inFilter=!1,e.filterIndent=null),e.inFilter){Bo(e,n,r);return}if(n.length===1&&n[0].value.toLowerCase()==="filter"){if(e.seenFields.has("filter"))throw new u('Duplicate viewpoint field "filter"',r,n[0].column);e.seenFields.add("filter"),e.inFilter=!0,e.filterIndent=t;return}let i=J(n,e.seenFields,r),a=$(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=wn(a,r,n[0].column);return;case"preset":e.viewpoint.preset=vn(a,r,n[0].column);return;case"zoom":e.viewpoint.zoom=Ko(a,r,n[0].column,"zoom");return;case"rotation":e.viewpoint.rotationDeg=In(a,r,n[0].column,"rotation");return;case"layers":e.viewpoint.layers=Go(n.slice(1),r,e.sourceSchemaVersion,e.diagnostics);return;case"events":M(e.sourceSchemaVersion,e.diagnostics,"viewpoint.events",{line:r,column:n[0].column}),e.viewpoint.events=z(n.slice(1),r,"events");return;default:throw new u(`Unknown viewpoint field "${n[0].value}"`,r,n[0].column)}}function Bo(e,t,n){let r=J(t,e.seenFilterFields,n),i=e.viewpoint.filter??Zo();switch(r){case"query":i.query=$(t,n);break;case"objecttypes":i.objectTypes=Ho(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 u(`Unknown viewpoint filter field "${t[0].value}"`,n,t[0].column)}e.viewpoint.filter=i}function zo(e,t,n){switch(J(t,e.seenFields,n)){case"label":e.annotation.label=$(t,n);return;case"target":e.annotation.targetObjectId=$(t,n);return;case"body":e.annotation.body=$(t,n);return;case"tags":e.annotation.tags=z(t.slice(1),n,"tags");return;default:throw new u(`Unknown annotation field "${t[0].value}"`,n,t[0].column)}}function Uo(e,t,n){switch(J(t,e.seenFields,n)){case"label":e.group.label=$(t,n);return;case"summary":e.group.summary=$(t,n);return;case"color":e.group.color=$(t,n);return;case"tags":e.group.tags=z(t.slice(1),n,"tags");return;case"hidden":e.group.hidden=Z($(t,n),"hidden",{line:n,column:t[0].column});return;default:throw new u(`Unknown group field "${t[0].value}"`,n,t[0].column)}}function Vo(e,t,n){switch(J(t,e.seenFields,n)){case"from":e.relation.from=$(t,n);return;case"to":e.relation.to=$(t,n);return;case"kind":e.relation.kind=$(t,n);return;case"label":e.relation.label=$(t,n);return;case"summary":e.relation.summary=$(t,n);return;case"tags":e.relation.tags=z(t.slice(1),n,"tags");return;case"color":e.relation.color=$(t,n);return;case"hidden":e.relation.hidden=Z($(t,n),"hidden",{line:n,column:t[0].column});return;default:throw new u(`Unknown relation field "${t[0].value}"`,n,t[0].column)}}function Wo(e,t,n,r){if(e.activePose&&t<=(e.poseIndent??0)&&(e.activePose=null,e.poseIndent=null,e.activePoseSeenFields.clear()),!e.activePose&&e.inPositions&&t<=(e.positionsIndent??0)&&(e.inPositions=!1,e.positionsIndent=null),e.activePose){e.activePose.fields.push(Yo(n,r,e.activePoseSeenFields));return}if(e.inPositions){if(n.length!==2||n[0].value.toLowerCase()!=="pose")throw new u(`Unknown event positions field "${n[0].value}"`,r,n[0]?.column??1);let a=n[1].value;if(!a.trim())throw new u("Event pose object id must not be empty",r,n[1].column);let o={objectId:a,fields:[],location:{line:r,column:n[0].column}};e.rawPoses.push(o),e.activePose=o,e.poseIndent=t,e.activePoseSeenFields=new Set;return}if(n.length===1&&n[0].value.toLowerCase()==="positions"){if(e.seenFields.has("positions"))throw new u('Duplicate event field "positions"',r,n[0].column);e.seenFields.add("positions"),e.inPositions=!0,e.positionsIndent=t;return}switch(J(n,e.seenFields,r)){case"kind":e.event.kind=$(n,r);return;case"label":e.event.label=$(n,r);return;case"summary":e.event.summary=$(n,r);return;case"target":e.event.targetObjectId=$(n,r);return;case"participants":e.event.participantObjectIds=z(n.slice(1),r,"participants");return;case"timing":e.event.timing=$(n,r);return;case"visibility":e.event.visibility=$(n,r);return;case"tags":e.event.tags=z(n.slice(1),r,"tags");return;case"color":e.event.color=$(n,r);return;case"hidden":e.event.hidden=Z($(n,r),"hidden",{line:r,column:n[0].column});return;default:throw new u(`Unknown event field "${n[0].value}"`,r,n[0].column)}}function Yo(e,t,n){if(e.length<2)throw new u("Invalid event pose field line",t,e[0]?.column??1);let r=e[0].value;if(!xo.has(r))throw new u(`Unknown event pose field "${r}"`,t,e[0].column);if(n.has(r))throw new u(`Duplicate event pose field "${r}"`,t,e[0].column);return n.add(r),{type:"field",key:r,values:e.slice(1).map(i=>i.value),location:{line:t,column:e[0].column}}}function qo(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"||ko.has(i)){i!=="info"&&M(e.sourceSchemaVersion,e.diagnostics,i,{line:r,column:n[0].column}),e.activeBlock=i,e.blockIndent=t;return}}if(e.activeBlock){let i=$n(n,r,`Invalid ${e.activeBlock} entry`);if(e.activeBlock==="info"){if(e.seenInfoKeys.has(i.key))throw new u(`Duplicate info key "${i.key}"`,r,n[0].column);e.seenInfoKeys.add(i.key),e.objectNode.infoEntries.push(i);return}let a=e.activeBlock,o=e.seenTypedBlockKeys[a]??(e.seenTypedBlockKeys[a]=new Set);if(o.has(i.key))throw new u(`Duplicate ${a} key "${i.key}"`,r,n[0].column);o.add(i.key),(e.objectNode.typedBlockEntries[a]??(e.objectNode.typedBlockEntries[a]=[])).push(i);return}e.objectNode.fields.push(Jo(n,r,e.objectNode.objectType,e.sourceSchemaVersion,e.diagnostics))}function J(e,t,n){if(e.length<2)throw new u("Invalid atlas field line",n,e[0]?.column??1);let r=e[0].value.toLowerCase();if(t.has(r))throw new u(`Duplicate atlas field "${e[0].value}"`,n,e[0].column);return t.add(r),r}function $(e,t){if(e.length<2)throw new u("Missing value for atlas field",t,e[0]?.column??1);return e.slice(1).map(n=>n.value).join(" ").trim()}function Ho(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 Go(e,t,n,r){let i={};for(let a of z(e,t,"layers")){let o=!a.startsWith("-")&&!a.startsWith("!"),s=a.replace(/^[-!]+/,"").toLowerCase();if(s==="orbits"){i["orbits-back"]=o,i["orbits-front"]=o;continue}(s==="background"||s==="guides"||s==="orbits-back"||s==="orbits-front"||s==="relations"||s==="events"||s==="objects"||s==="labels"||s==="metadata")&&(s==="events"&&n&&r&&M(n,r,"layers.events",{line:t,column:e[0]?.column??1}),i[s]=o)}return i}function z(e,t,n){if(e.length===0)throw new u(`Missing value for atlas field "${n}"`,t,1);let r=e.map(i=>i.value).filter(Boolean);if(r.length===0)throw new u(`Missing value for atlas field "${n}"`,t,e[0]?.column??1);return r}function wn(e,t,n){let r=e.toLowerCase();if(r!=="topdown"&&r!=="isometric")throw new u(`Unknown projection "${e}"`,t,n);return r}function vn(e,t,n){let r=e.toLowerCase();if(r==="diagram"||r==="presentation"||r==="atlas-card"||r==="markdown")return r;throw new u(`Unknown render preset "${e}"`,t,n)}function Ko(e,t,n,r){let i=In(e,t,n,r);if(i<=0)throw new u(`Field "${r}" must be greater than zero`,t,n);return i}function In(e,t,n,r){let i=Number(e);if(!Number.isFinite(i))throw new u(`Invalid numeric value "${e}" for "${r}"`,t,n);return i}function Zo(){return{query:null,objectTypes:[],tags:[],groupIds:[]}}function Xo(e,t,n,r,i){let a=[],o=0;for(;o<e.length;){let s=e[o],c=xe(s.value);if(!c)throw new u(`Unknown field "${s.value}"`,t,s.column);c.version==="2.1"&&M(r,i,s.value,{line:t,column:s.column}),o++;let l=[];if(c.inlineMode==="single"){let d=e[o];d&&(l.push(d),o++)}else if(c.inlineMode==="pair")for(let d=0;d<2;d++){let f=e[o];if(!f)break;l.push(f),o++}else for(;o<e.length&&!jo.has(e[o].value);)l.push(e[o]),o++;if(l.length===0)throw new u(`Missing value for field "${s.value}"`,t,s.column);a.push({type:"field",key:s.value,values:l.map(d=>d.value),location:{line:t,column:s.column}})}return On(a,n),a}function Jo(e,t,n,r,i){if(e.length<2)throw new u("Invalid field line",t,e[0]?.column??1);let a=xe(e[0].value);if(!a)throw new u(`Unknown field "${e[0].value}"`,t,e[0].column);a.version==="2.1"&&M(r,i,e[0].value,{line:t,column:e[0].column});let o={type:"field",key:e[0].value,values:e.slice(1).map(s=>s.value),location:{line:t,column:e[0].column}};return On([o],n),o}function $n(e,t,n){if(e.length<2)throw new u(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 Qo(e,t,n){let r=kn(e.fields),i=jn(r),a=na(e.objectType,r),o=ca(r.get("groups")?.[0]),s=yn(r.get("epoch")?.[0]),c=yn(r.get("referencePlane")?.[0]),l=r.has("tidalLock")?Z(N(r.get("tidalLock")[0]),"tidalLock",r.get("tidalLock")[0].location):void 0,d=r.has("resonance")?oa(r.get("resonance")[0]):void 0,f=ia(r),p=r.get("derive")?.map(k=>aa(k)),m=r.get("validate")?.map(k=>({rule:N(k)})),b=r.has("locked")?[...new Set(r.get("locked").flatMap(k=>k.values))]:void 0,I=r.get("tolerance")?.map(k=>sa(k)),j=ra(e.typedBlockEntries),L=xn(e.infoEntries,"info"),g={type:e.objectType,id:e.id,properties:a,placement:i,info:L};return o.length>0&&(g.groups=o),s&&(g.epoch=s),c&&(g.referencePlane=c),l!==void 0&&(g.tidalLock=l),d&&(g.resonance=d),f&&(g.renderHints=f),p?.length&&(g.deriveRules=p),m?.length&&(g.validationRules=m),b?.length&&(g.lockedFields=b),I?.length&&(g.tolerances=I),j&&Object.keys(j).length>0&&(g.typedBlocks=j),t!=="2.1"&&(g.groups||g.epoch||g.referencePlane||g.tidalLock!==void 0||g.resonance||g.renderHints||g.deriveRules?.length||g.validationRules?.length||g.lockedFields?.length||g.tolerances?.length||g.typedBlocks)&&M(t,n,e.id,e.location),g}function ea(e,t){return{...e,participantObjectIds:[...new Set(e.participantObjectIds)],tags:[...new Set(e.tags)],positions:t.map(n=>ta(n))}}function ta(e){let t=kn(e.fields),n=jn(t);return{objectId:e.objectId,placement:n,inner:X(t.get("inner")?.[0],"inner"),outer:X(t.get("outer")?.[0],"outer")}}function kn(e){let t=new Map;for(let n of e){let r=xe(n.key);if(!r)throw u.fromLocation(`Unknown field "${n.key}"`,n.location);if(!r.allowRepeat&&t.has(n.key))throw u.fromLocation(`Duplicate field "${n.key}"`,n.location);let i=t.get(n.key)??[];i.push(n),t.set(n.key,i)}return t}function jn(e){let t=e.get("orbit")?.[0],n=e.get("at")?.[0],r=e.get("surface")?.[0],i=e.get("free")?.[0];if([t,n,r,i].filter(Boolean).length>1){let o=t??n??r??i;throw u.fromLocation("Object has multiple placement modes",o?.location)}if(t)return{mode:"orbit",target:N(t),distance:X(e.get("distance")?.[0],"distance"),semiMajor:X(e.get("semiMajor")?.[0],"semiMajor"),eccentricity:la(e.get("eccentricity")?.[0],"eccentricity"),period:X(e.get("period")?.[0],"period"),angle:X(e.get("angle")?.[0],"angle"),inclination:X(e.get("inclination")?.[0],"inclination"),phase:X(e.get("phase")?.[0],"phase")};if(n){let o=N(n);return{mode:"at",target:o,reference:un(o,n.location)}}if(r)return{mode:"surface",target:N(r)};if(i){let o=N(i),s=st(o);return{mode:"free",distance:s??void 0,descriptor:s?void 0:o}}return null}function na(e,t){let n={};for(let[r,i]of t.entries()){let a=i[0],o=xe(r);!a||!o?.legacySchema||o.legacySchema.placement||(ct(r,e,a.location),n[r]=dn(r,a.values,a.location))}return n}function xn(e,t){let n={};for(let r of e){if(r.key in n)throw u.fromLocation(`Duplicate ${t} key "${r.key}"`,r.location);n[r.key]=r.value}return n}function ra(e){let t={};for(let n of Object.keys(e)){let r=e[n];r?.length&&(t[n]=xn(r,n))}return t}function ia(e){let t={},n=e.get("renderLabel")?.[0],r=e.get("renderOrbit")?.[0],i=e.get("renderPriority")?.[0];return n&&(t.renderLabel=Z(N(n),"renderLabel",n.location)),r&&(t.renderOrbit=Z(N(r),"renderOrbit",r.location)),i&&(t.renderPriority=ze(N(i),"renderPriority",i.location)),Object.keys(t).length>0?t:void 0}function oa(e){if(e.values.length!==2)throw u.fromLocation('Field "resonance" expects "<targetObjectId> <ratio>"',e.location);let t=e.values[1];if(!/^\d+:\d+$/.test(t))throw u.fromLocation(`Invalid resonance ratio "${t}"`,e.location);return{targetObjectId:e.values[0],ratio:t}}function aa(e){if(e.values.length!==2)throw u.fromLocation('Field "derive" expects "<field> <strategy>"',e.location);return{field:e.values[0],strategy:e.values[1]}}function sa(e){if(e.values.length!==2)throw u.fromLocation('Field "tolerance" expects "<field> <value>"',e.location);let t=e.values[1],n=st(t),r=Number(t);return{field:e.values[0],value:n??(Number.isFinite(r)?r:t)}}function ca(e){return e?[...new Set(e.values)]:[]}function yn(e){return e&&e.values.join(" ").trim()||null}function X(e,t){return e?at(N(e),e.location,t):void 0}function la(e,t){return e?ze(N(e),t,e.location):void 0}function N(e){return $e(e.values,e.key,e.location)}function xe(e){return Ve.get(e)}function On(e,t){for(let n of e){let r=xe(n.key);if(!r)throw u.fromLocation(`Unknown field "${n.key}"`,n.location);if(r.legacySchema){ct(n.key,t,n.location);continue}if((n.key==="renderLabel"||n.key==="renderOrbit"||n.key==="tidalLock")&&n.values.length!==1)throw u.fromLocation(`Field "${n.key}" expects exactly one value`,n.location)}}function M(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 ua(e){let t=[...e],n=[],r=!1,i=!1,a=null,o=1,s=1;for(let c=0;c<t.length;c++){let l=t[c],d=t[c+1];if(i){if(l==="*"&&d==="/"){t[c]=" ",t[c+1]=" ",i=!1,a=null,c++,s+=2;continue}l!==`
5
- `&&l!=="\r"&&(t[c]=" "),l===`
6
- `?(o++,s=1):s++;continue}if(!r&&l==="/"&&d==="*"){n.push({kind:"block",line:o,column:s}),t[c]=" ",t[c+1]=" ",i=!0,a={line:o,column:s},c++,s+=2;continue}if(!r&&l==="#"&&!da(t,c)){n.push({kind:"line",line:o,column:s}),t[c]=" ";let f=c+1;for(;f<t.length&&t[f]!==`
7
- `&&t[f]!=="\r";)t[f]=" ",f++;s+=f-c,c=f-1;continue}l==='"'&&t[c-1]!=="\\"&&(r=!r),l===`
8
- `?(o++,s=1):s++}if(i)throw u.fromLocation("Unclosed block comment",a??void 0);return{source:t.join(""),comments:n}}function da(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 lt(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:[],events:[],objects:[],diagnostics:[]}}function Ye(e){return structuredClone(e)}function Ln(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(ie))t.push({kind:"viewpoint",id:n.id});for(let n of[...e.system.annotations].sort(ie))t.push({kind:"annotation",id:n.id})}for(let n of[...e.groups].sort(ie))t.push({kind:"group",id:n.id});for(let n of[...e.relations].sort(ie))t.push({kind:"relation",id:n.id});for(let n of[...e.events].sort(ie)){t.push({kind:"event",id:n.id});for(let r of[...n.positions].sort(_n))t.push({kind:"event-pose",id:n.id,key:r.objectId})}for(let n of[...e.objects].sort(ie))t.push({kind:"object",id:n.id});return t}function ut(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?Fn(e,t.id):null;case"event":return t.id?qe(e,t.id):null;case"event-pose":return t.id&&t.key?En(e,t.id,t.key):null;case"object":return t.id?Dn(e,t.id):null;case"viewpoint":return t.id?Mn(e.system,t.id):null;case"annotation":return t.id?Rn(e.system,t.id):null;case"relation":return t.id?Pn(e,t.id):null}}function dt(e,t,n){let r=Ye(e),i=mt(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 ue(r.groups,n),r;case"event":if(!t.id)throw new Error('Event updates require an "id" value.');return ue(r.events,n),r;case"event-pose":if(!t.id||!t.key)throw new Error('Event pose updates require an event "id" and pose "key" value.');return fa(r.events,t.id,n),r;case"object":if(!t.id)throw new Error('Object updates require an "id" value.');return ue(r.objects,n),r;case"viewpoint":if(!t.id)throw new Error('Viewpoint updates require an "id" value.');return ue(i.viewpoints,n),r;case"annotation":if(!t.id)throw new Error('Annotation updates require an "id" value.');return ue(i.annotations,n),r;case"relation":if(!t.id)throw new Error('Relation updates require an "id" value.');return ue(r.relations,n),r}}function An(e,t,n){return dt(e,t,n(ut(e,t)))}function Sn(e,t){let n=Ye(e),r=mt(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"event":return t.id&&(n.events=n.events.filter(i=>i.id!==t.id)),n;case"event-pose":if(t.id&&t.key){let i=qe(n,t.id);i&&(i.positions=i.positions.filter(a=>a.objectId!==t.key))}return 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 ft(e,t){return t.map(n=>({diagnostic:n,path:pt(e,n)}))}function pt(e,t){if(t.objectId&&Dn(e,t.objectId))return{kind:"object",id:t.objectId};if(t.field?.startsWith("group.")){let n=t.field.split(".");if(n[1]&&Fn(e,n[1]))return{kind:"group",id:n[1]}}if(t.field?.startsWith("viewpoint.")){let n=t.field.split(".");if(n[1]&&Mn(e.system,n[1]))return{kind:"viewpoint",id:n[1]}}if(t.field?.startsWith("annotation.")){let n=t.field.split(".");if(n[1]&&Rn(e.system,n[1]))return{kind:"annotation",id:n[1]}}if(t.field?.startsWith("relation.")){let n=t.field.split(".");if(n[1]&&Pn(e,n[1]))return{kind:"relation",id:n[1]}}if(t.field?.startsWith("event.")){let n=t.field.split(".");if(n[1]&&qe(e,n[1]))return n[2]==="pose"&&n[3]&&En(e,n[1],n[3])?{kind:"event-pose",id:n[1],key:n[3]}:{kind:"event",id:n[1]}}return t.field&&t.field in mt(e).atlasMetadata?{kind:"metadata",key:t.field}:null}function Tn(e){let t=[...e.diagnostics,...je(e,e.version)];return ft(e,t)}function mt(e){return e.system||(e.system=lt().system),e.system}function Dn(e,t){return e.objects.find(n=>n.id===t)??null}function Fn(e,t){return e.groups.find(n=>n.id===t)??null}function Pn(e,t){return e.relations.find(n=>n.id===t)??null}function qe(e,t){return e.events.find(n=>n.id===t)??null}function En(e,t,n){return qe(e,t)?.positions.find(r=>r.objectId===n)??null}function Mn(e,t){return e?.viewpoints.find(n=>n.id===t)??null}function Rn(e,t){return e?.annotations.find(n=>n.id===t)??null}function ue(e,t){let n=e.findIndex(r=>r.id===t.id);if(n===-1){e.push(t),e.sort(ie);return}e[n]=t}function fa(e,t,n){let r=e.find(a=>a.id===t);if(!r)throw new Error(`Unknown event "${t}" for pose update.`);let i=r.positions.findIndex(a=>a.objectId===n.objectId);if(i===-1){r.positions.push(n),r.positions.sort(_n);return}r.positions[i]=n}function ie(e,t){return e.id.localeCompare(t.id)}function _n(e,t){return e.objectId.localeCompare(t.objectId)}var pa=/^schema\s+2(?:\.0|\.1)?$/i,ma=/^schema\s+2\.1$/i,ha=/^schema\s+2\.0-draft$/i;function ht(e){for(let t of ya(e).split(/\r?\n/)){let n=t.trim();if(n)return ha.test(n)?"2.0-draft":ma.test(n)?"2.1":pa.test(n)?"2.0":"1.0"}return"1.0"}function ya(e){let t=[...e],n=!1,r=!1;for(let i=0;i<t.length;i++){let a=t[i],o=t[i+1];if(r){if(a==="*"&&o==="/"){t[i]=" ",t[i+1]=" ",r=!1,i++;continue}a!==`
10
- `&&a!=="\r"&&(t[i]=" ");continue}if(!n&&a==="/"&&o==="*"){t[i]=" ",t[i+1]=" ",r=!0,i++;continue}if(!n&&a==="#"){t[i]=" ";let s=i+1;for(;s<t.length&&t[s]!==`
11
- `&&t[s]!=="\r";)t[s]=" ",s++;i=s-1;continue}a==='"'&&t[i-1]!=="\\"&&(n=!n)}return t.join("")}function He(e){let t=yt(e);if(!t.ok||!t.value){let n=t.diagnostics[0];throw new u(n?.message??"Failed to load WorldOrbit source",n?.line,n?.column)}return t.value}function yt(e){let t=ht(e);if(t==="2.0"||t==="2.0-draft"||t==="2.1")return ga(e,t);let n;try{n=G(e)}catch(i){return{ok:!1,value:null,diagnostics:[F(i,"parse")]}}let r;try{r=V(n)}catch(i){return{ok:!1,value:null,diagnostics:[F(i,"normalize")]}}try{W(r)}catch(i){return{ok:!1,value:null,diagnostics:[F(i,"validate")]}}return{ok:!0,value:{schemaVersion:t,ast:n,document:r,atlasDocument:null,draftDocument:null,diagnostics:[]},diagnostics:[]}}function ga(e,t){let n;try{n=We(e)}catch(o){return{ok:!1,value:null,diagnostics:[F(o,"parse","load.atlas.failed")]}}let r=[...n.diagnostics];if(r.some(o=>o.severity==="error"))return{ok:!1,value:null,diagnostics:r};let i;try{i=Ie(n)}catch(o){return{ok:!1,value:null,diagnostics:[F(o,"normalize","load.atlas.materialize.failed")]}}return{ok:!0,value:{schemaVersion:t,ast:null,document:i,atlasDocument:n,draftDocument:n,diagnostics:r},diagnostics:r}}var ba=/^```worldorbit(?:\s+(.*))?\s*$/;function Nn(e){let t=e.split(/\r?\n/),n=[],r=!1,i=null,a=0,o=[];return t.forEach((s,c)=>{let l=c+1;if(!r){let d=s.match(ba);d&&(r=!0,i=d[1]??null,a=l,o=[]);return}if(s.trim()==="```"){n.push({source:o.join(`
12
- `),info:i,startLine:a,endLine:l}),r=!1,i=null,a=0,o=[];return}o.push(s)}),n}function Cn(e){let t=G(e),n=V(t);return W(n),{ast:t,document:n}}function wa(e){let t=Cn(e);return{...t,scene:re(t.document)}}function va(e){return He(e)}function Ia(e){return Te(e)}function $a(e,t={}){return Be(e,t)}return Zn(ka);})();
1
+ export * from "./core/dist/index.js";