@johnmorrisdotca/uchusen-rockets 0.2.1 → 0.3.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 (891) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/LICENSES/ODbL-1.0.txt +540 -0
  3. package/NOTICE.md +56 -6
  4. package/README.md +49 -14
  5. package/dist/assets/apollo-soyuz-apollo-soyuz-apart.painted.svg +1 -0
  6. package/dist/assets/apollo-soyuz-apollo-soyuz-apart.svg +1 -0
  7. package/dist/assets/apollo-soyuz-apollo-soyuz-apart.thick.svg +1 -0
  8. package/dist/assets/apollo-soyuz-apollo-soyuz-csm.glb +0 -0
  9. package/dist/assets/apollo-soyuz-apollo-soyuz-csm.painted.svg +1 -0
  10. package/dist/assets/apollo-soyuz-apollo-soyuz-csm.svg +1 -0
  11. package/dist/assets/apollo-soyuz-apollo-soyuz-csm.thick.svg +1 -0
  12. package/dist/assets/apollo-soyuz-apollo-soyuz-docking-module.glb +0 -0
  13. package/dist/assets/apollo-soyuz-apollo-soyuz-docking-module.painted.svg +1 -0
  14. package/dist/assets/apollo-soyuz-apollo-soyuz-docking-module.svg +1 -0
  15. package/dist/assets/apollo-soyuz-apollo-soyuz-docking-module.thick.svg +1 -0
  16. package/dist/assets/apollo-soyuz-apollo-soyuz-soyuz.glb +0 -0
  17. package/dist/assets/apollo-soyuz-apollo-soyuz-soyuz.painted.svg +1 -0
  18. package/dist/assets/apollo-soyuz-apollo-soyuz-soyuz.svg +1 -0
  19. package/dist/assets/apollo-soyuz-apollo-soyuz-soyuz.thick.svg +1 -0
  20. package/dist/assets/apollo-soyuz-apollo-soyuz.glb +0 -0
  21. package/dist/assets/apollo-soyuz-apollo-soyuz.painted.svg +1 -0
  22. package/dist/assets/apollo-soyuz-apollo-soyuz.svg +1 -0
  23. package/dist/assets/apollo-soyuz-apollo-soyuz.thick.svg +1 -0
  24. package/dist/assets/dragon-cargo-dragon-2-apart.painted.svg +1 -0
  25. package/dist/assets/dragon-cargo-dragon-2-apart.svg +1 -0
  26. package/dist/assets/dragon-cargo-dragon-2-apart.thick.svg +1 -0
  27. package/dist/assets/dragon-cargo-dragon-2-capsule.glb +0 -0
  28. package/dist/assets/dragon-cargo-dragon-2-capsule.painted.svg +1 -0
  29. package/dist/assets/dragon-cargo-dragon-2-capsule.svg +1 -0
  30. package/dist/assets/dragon-cargo-dragon-2-capsule.thick.svg +1 -0
  31. package/dist/assets/dragon-cargo-dragon-2-trunk.glb +0 -0
  32. package/dist/assets/dragon-cargo-dragon-2-trunk.painted.svg +1 -0
  33. package/dist/assets/dragon-cargo-dragon-2-trunk.svg +1 -0
  34. package/dist/assets/dragon-cargo-dragon-2-trunk.thick.svg +1 -0
  35. package/dist/assets/dragon-cargo-dragon-2.glb +0 -0
  36. package/dist/assets/dragon-cargo-dragon-2.painted.svg +1 -0
  37. package/dist/assets/dragon-cargo-dragon-2.svg +1 -0
  38. package/dist/assets/dragon-cargo-dragon-2.thick.svg +1 -0
  39. package/dist/assets/dragon-crew-dragon-inside.glb +0 -0
  40. package/dist/assets/dragon-crew-dragon-inside.painted.svg +1 -0
  41. package/dist/assets/dragon-crew-dragon-inside.svg +1 -0
  42. package/dist/assets/dragon-crew-dragon-inside.thick.svg +1 -0
  43. package/dist/assets/dragon-dragon-1-apart.painted.svg +1 -1
  44. package/dist/assets/dragon-dragon-1-apart.svg +1 -1
  45. package/dist/assets/dragon-dragon-1-apart.thick.svg +1 -1
  46. package/dist/assets/dragon-dragon-1-capsule.painted.svg +1 -1
  47. package/dist/assets/dragon-dragon-1-capsule.svg +1 -1
  48. package/dist/assets/dragon-dragon-1-capsule.thick.svg +1 -1
  49. package/dist/assets/dragon-dragon-1-trunk.painted.svg +1 -1
  50. package/dist/assets/dragon-dragon-1-trunk.svg +1 -1
  51. package/dist/assets/dragon-dragon-1-trunk.thick.svg +1 -1
  52. package/dist/assets/dragon-dragon-1.painted.svg +1 -1
  53. package/dist/assets/dragon-dragon-1.svg +1 -1
  54. package/dist/assets/dragon-dragon-1.thick.svg +1 -1
  55. package/dist/assets/dragon-dragon-2-apart.painted.svg +1 -1
  56. package/dist/assets/dragon-dragon-2-apart.svg +1 -1
  57. package/dist/assets/dragon-dragon-2-apart.thick.svg +1 -1
  58. package/dist/assets/dragon-dragon-2-capsule.painted.svg +1 -1
  59. package/dist/assets/dragon-dragon-2-capsule.svg +1 -1
  60. package/dist/assets/dragon-dragon-2-capsule.thick.svg +1 -1
  61. package/dist/assets/dragon-dragon-2-trunk.painted.svg +1 -1
  62. package/dist/assets/dragon-dragon-2-trunk.svg +1 -1
  63. package/dist/assets/dragon-dragon-2-trunk.thick.svg +1 -1
  64. package/dist/assets/dragon-dragon-2.painted.svg +1 -1
  65. package/dist/assets/dragon-dragon-2.svg +1 -1
  66. package/dist/assets/dragon-dragon-2.thick.svg +1 -1
  67. package/dist/assets/droneship-asog-apart.painted.svg +1 -0
  68. package/dist/assets/droneship-asog-apart.svg +1 -0
  69. package/dist/assets/droneship-asog-apart.thick.svg +1 -0
  70. package/dist/assets/droneship-asog-deck.glb +0 -0
  71. package/dist/assets/droneship-asog-deck.painted.svg +1 -0
  72. package/dist/assets/droneship-asog-deck.svg +1 -0
  73. package/dist/assets/droneship-asog-deck.thick.svg +1 -0
  74. package/dist/assets/droneship-asog-landed.glb +0 -0
  75. package/dist/assets/droneship-asog-landed.painted.svg +1 -0
  76. package/dist/assets/droneship-asog-landed.svg +1 -0
  77. package/dist/assets/droneship-asog-landed.thick.svg +1 -0
  78. package/dist/assets/droneship-asog.glb +0 -0
  79. package/dist/assets/droneship-asog.painted.svg +1 -0
  80. package/dist/assets/droneship-asog.svg +1 -0
  81. package/dist/assets/droneship-asog.thick.svg +1 -0
  82. package/dist/assets/droneship-jrti-apart.painted.svg +1 -0
  83. package/dist/assets/droneship-jrti-apart.svg +1 -0
  84. package/dist/assets/droneship-jrti-apart.thick.svg +1 -0
  85. package/dist/assets/droneship-jrti-deck.glb +0 -0
  86. package/dist/assets/droneship-jrti-deck.painted.svg +1 -0
  87. package/dist/assets/droneship-jrti-deck.svg +1 -0
  88. package/dist/assets/droneship-jrti-deck.thick.svg +1 -0
  89. package/dist/assets/droneship-jrti-landed.glb +0 -0
  90. package/dist/assets/droneship-jrti-landed.painted.svg +1 -0
  91. package/dist/assets/droneship-jrti-landed.svg +1 -0
  92. package/dist/assets/droneship-jrti-landed.thick.svg +1 -0
  93. package/dist/assets/droneship-jrti.glb +0 -0
  94. package/dist/assets/droneship-jrti.painted.svg +1 -0
  95. package/dist/assets/droneship-jrti.svg +1 -0
  96. package/dist/assets/droneship-jrti.thick.svg +1 -0
  97. package/dist/assets/droneship-ocisly-apart.painted.svg +1 -0
  98. package/dist/assets/droneship-ocisly-apart.svg +1 -0
  99. package/dist/assets/droneship-ocisly-apart.thick.svg +1 -0
  100. package/dist/assets/droneship-ocisly-deck.glb +0 -0
  101. package/dist/assets/droneship-ocisly-deck.painted.svg +1 -0
  102. package/dist/assets/droneship-ocisly-deck.svg +1 -0
  103. package/dist/assets/droneship-ocisly-deck.thick.svg +1 -0
  104. package/dist/assets/droneship-ocisly-landed.glb +0 -0
  105. package/dist/assets/droneship-ocisly-landed.painted.svg +1 -0
  106. package/dist/assets/droneship-ocisly-landed.svg +1 -0
  107. package/dist/assets/droneship-ocisly-landed.thick.svg +1 -0
  108. package/dist/assets/droneship-ocisly.glb +0 -0
  109. package/dist/assets/droneship-ocisly.painted.svg +1 -0
  110. package/dist/assets/droneship-ocisly.svg +1 -0
  111. package/dist/assets/droneship-ocisly.thick.svg +1 -0
  112. package/dist/assets/electron-electron-adapter.glb +0 -0
  113. package/dist/assets/electron-electron-adapter.painted.svg +1 -0
  114. package/dist/assets/electron-electron-adapter.svg +1 -0
  115. package/dist/assets/electron-electron-adapter.thick.svg +1 -0
  116. package/dist/assets/electron-electron-apart.painted.svg +1 -0
  117. package/dist/assets/electron-electron-apart.svg +1 -0
  118. package/dist/assets/electron-electron-apart.thick.svg +1 -0
  119. package/dist/assets/electron-electron-fairing.glb +0 -0
  120. package/dist/assets/electron-electron-fairing.painted.svg +1 -0
  121. package/dist/assets/electron-electron-fairing.svg +1 -0
  122. package/dist/assets/electron-electron-fairing.thick.svg +1 -0
  123. package/dist/assets/electron-electron-first-stage.glb +0 -0
  124. package/dist/assets/electron-electron-first-stage.painted.svg +1 -0
  125. package/dist/assets/electron-electron-first-stage.svg +1 -0
  126. package/dist/assets/electron-electron-first-stage.thick.svg +1 -0
  127. package/dist/assets/electron-electron-second-stage.glb +0 -0
  128. package/dist/assets/electron-electron-second-stage.painted.svg +1 -0
  129. package/dist/assets/electron-electron-second-stage.svg +1 -0
  130. package/dist/assets/electron-electron-second-stage.thick.svg +1 -0
  131. package/dist/assets/electron-electron.glb +0 -0
  132. package/dist/assets/electron-electron.painted.svg +1 -0
  133. package/dist/assets/electron-electron.svg +1 -0
  134. package/dist/assets/electron-electron.thick.svg +1 -0
  135. package/dist/assets/falcon-1-falcon-1-apart.painted.svg +1 -0
  136. package/dist/assets/falcon-1-falcon-1-apart.svg +1 -0
  137. package/dist/assets/falcon-1-falcon-1-apart.thick.svg +1 -0
  138. package/dist/assets/falcon-1-falcon-1-fairing.glb +0 -0
  139. package/dist/assets/falcon-1-falcon-1-fairing.painted.svg +1 -0
  140. package/dist/assets/falcon-1-falcon-1-fairing.svg +1 -0
  141. package/dist/assets/falcon-1-falcon-1-fairing.thick.svg +1 -0
  142. package/dist/assets/falcon-1-falcon-1-first-stage.glb +0 -0
  143. package/dist/assets/falcon-1-falcon-1-first-stage.painted.svg +1 -0
  144. package/dist/assets/falcon-1-falcon-1-first-stage.svg +1 -0
  145. package/dist/assets/falcon-1-falcon-1-first-stage.thick.svg +1 -0
  146. package/dist/assets/falcon-1-falcon-1-second-stage.glb +0 -0
  147. package/dist/assets/falcon-1-falcon-1-second-stage.painted.svg +1 -0
  148. package/dist/assets/falcon-1-falcon-1-second-stage.svg +1 -0
  149. package/dist/assets/falcon-1-falcon-1-second-stage.thick.svg +1 -0
  150. package/dist/assets/falcon-1-falcon-1.glb +0 -0
  151. package/dist/assets/falcon-1-falcon-1.painted.svg +1 -0
  152. package/dist/assets/falcon-1-falcon-1.svg +1 -0
  153. package/dist/assets/falcon-1-falcon-1.thick.svg +1 -0
  154. package/dist/assets/falcon-1-falcon-1e-apart.painted.svg +1 -0
  155. package/dist/assets/falcon-1-falcon-1e-apart.svg +1 -0
  156. package/dist/assets/falcon-1-falcon-1e-apart.thick.svg +1 -0
  157. package/dist/assets/falcon-1-falcon-1e-fairing.glb +0 -0
  158. package/dist/assets/falcon-1-falcon-1e-fairing.painted.svg +1 -0
  159. package/dist/assets/falcon-1-falcon-1e-fairing.svg +1 -0
  160. package/dist/assets/falcon-1-falcon-1e-fairing.thick.svg +1 -0
  161. package/dist/assets/falcon-1-falcon-1e-first-stage.glb +0 -0
  162. package/dist/assets/falcon-1-falcon-1e-first-stage.painted.svg +1 -0
  163. package/dist/assets/falcon-1-falcon-1e-first-stage.svg +1 -0
  164. package/dist/assets/falcon-1-falcon-1e-first-stage.thick.svg +1 -0
  165. package/dist/assets/falcon-1-falcon-1e-second-stage.glb +0 -0
  166. package/dist/assets/falcon-1-falcon-1e-second-stage.painted.svg +1 -0
  167. package/dist/assets/falcon-1-falcon-1e-second-stage.svg +1 -0
  168. package/dist/assets/falcon-1-falcon-1e-second-stage.thick.svg +1 -0
  169. package/dist/assets/falcon-1-falcon-1e.glb +0 -0
  170. package/dist/assets/falcon-1-falcon-1e.painted.svg +1 -0
  171. package/dist/assets/falcon-1-falcon-1e.svg +1 -0
  172. package/dist/assets/falcon-1-falcon-1e.thick.svg +1 -0
  173. package/dist/assets/falcon-9-block-5-apart.painted.svg +1 -1
  174. package/dist/assets/falcon-9-block-5-apart.svg +1 -1
  175. package/dist/assets/falcon-9-block-5-apart.thick.svg +1 -1
  176. package/dist/assets/falcon-9-block-5-dragon-2-apart.painted.svg +1 -1
  177. package/dist/assets/falcon-9-block-5-dragon-2-apart.svg +1 -1
  178. package/dist/assets/falcon-9-block-5-dragon-2-apart.thick.svg +1 -1
  179. package/dist/assets/falcon-9-block-5-dragon-2-capsule.painted.svg +1 -1
  180. package/dist/assets/falcon-9-block-5-dragon-2-capsule.svg +1 -1
  181. package/dist/assets/falcon-9-block-5-dragon-2-capsule.thick.svg +1 -1
  182. package/dist/assets/falcon-9-block-5-dragon-2-first-stage.painted.svg +1 -1
  183. package/dist/assets/falcon-9-block-5-dragon-2-first-stage.svg +1 -1
  184. package/dist/assets/falcon-9-block-5-dragon-2-first-stage.thick.svg +1 -1
  185. package/dist/assets/falcon-9-block-5-dragon-2-second-stage.painted.svg +1 -1
  186. package/dist/assets/falcon-9-block-5-dragon-2-second-stage.svg +1 -1
  187. package/dist/assets/falcon-9-block-5-dragon-2-second-stage.thick.svg +1 -1
  188. package/dist/assets/falcon-9-block-5-dragon-2-trunk.painted.svg +1 -1
  189. package/dist/assets/falcon-9-block-5-dragon-2-trunk.svg +1 -1
  190. package/dist/assets/falcon-9-block-5-dragon-2-trunk.thick.svg +1 -1
  191. package/dist/assets/falcon-9-block-5-dragon-2.painted.svg +1 -1
  192. package/dist/assets/falcon-9-block-5-dragon-2.svg +1 -1
  193. package/dist/assets/falcon-9-block-5-dragon-2.thick.svg +1 -1
  194. package/dist/assets/falcon-9-block-5-fairing.painted.svg +1 -1
  195. package/dist/assets/falcon-9-block-5-fairing.svg +1 -1
  196. package/dist/assets/falcon-9-block-5-fairing.thick.svg +1 -1
  197. package/dist/assets/falcon-9-block-5-first-stage.painted.svg +1 -1
  198. package/dist/assets/falcon-9-block-5-first-stage.svg +1 -1
  199. package/dist/assets/falcon-9-block-5-first-stage.thick.svg +1 -1
  200. package/dist/assets/falcon-9-block-5-second-stage.painted.svg +1 -1
  201. package/dist/assets/falcon-9-block-5-second-stage.svg +1 -1
  202. package/dist/assets/falcon-9-block-5-second-stage.thick.svg +1 -1
  203. package/dist/assets/falcon-9-block-5.painted.svg +1 -1
  204. package/dist/assets/falcon-9-block-5.svg +1 -1
  205. package/dist/assets/falcon-9-block-5.thick.svg +1 -1
  206. package/dist/assets/falcon-9-ft-apart.painted.svg +1 -1
  207. package/dist/assets/falcon-9-ft-apart.svg +1 -1
  208. package/dist/assets/falcon-9-ft-apart.thick.svg +1 -1
  209. package/dist/assets/falcon-9-ft-fairing.painted.svg +1 -1
  210. package/dist/assets/falcon-9-ft-fairing.svg +1 -1
  211. package/dist/assets/falcon-9-ft-fairing.thick.svg +1 -1
  212. package/dist/assets/falcon-9-ft-first-stage.painted.svg +1 -1
  213. package/dist/assets/falcon-9-ft-first-stage.svg +1 -1
  214. package/dist/assets/falcon-9-ft-first-stage.thick.svg +1 -1
  215. package/dist/assets/falcon-9-ft-second-stage.painted.svg +1 -1
  216. package/dist/assets/falcon-9-ft-second-stage.svg +1 -1
  217. package/dist/assets/falcon-9-ft-second-stage.thick.svg +1 -1
  218. package/dist/assets/falcon-9-ft.painted.svg +1 -1
  219. package/dist/assets/falcon-9-ft.svg +1 -1
  220. package/dist/assets/falcon-9-ft.thick.svg +1 -1
  221. package/dist/assets/falcon-9-v1.0-apart.painted.svg +1 -1
  222. package/dist/assets/falcon-9-v1.0-apart.svg +1 -1
  223. package/dist/assets/falcon-9-v1.0-apart.thick.svg +1 -1
  224. package/dist/assets/falcon-9-v1.0-fairing.painted.svg +1 -1
  225. package/dist/assets/falcon-9-v1.0-fairing.svg +1 -1
  226. package/dist/assets/falcon-9-v1.0-fairing.thick.svg +1 -1
  227. package/dist/assets/falcon-9-v1.0-first-stage.painted.svg +1 -1
  228. package/dist/assets/falcon-9-v1.0-first-stage.svg +1 -1
  229. package/dist/assets/falcon-9-v1.0-first-stage.thick.svg +1 -1
  230. package/dist/assets/falcon-9-v1.0-second-stage.painted.svg +1 -1
  231. package/dist/assets/falcon-9-v1.0-second-stage.svg +1 -1
  232. package/dist/assets/falcon-9-v1.0-second-stage.thick.svg +1 -1
  233. package/dist/assets/falcon-9-v1.0.painted.svg +1 -1
  234. package/dist/assets/falcon-9-v1.0.svg +1 -1
  235. package/dist/assets/falcon-9-v1.0.thick.svg +1 -1
  236. package/dist/assets/falcon-9-v1.1-apart.painted.svg +1 -1
  237. package/dist/assets/falcon-9-v1.1-apart.svg +1 -1
  238. package/dist/assets/falcon-9-v1.1-apart.thick.svg +1 -1
  239. package/dist/assets/falcon-9-v1.1-fairing.painted.svg +1 -1
  240. package/dist/assets/falcon-9-v1.1-fairing.svg +1 -1
  241. package/dist/assets/falcon-9-v1.1-fairing.thick.svg +1 -1
  242. package/dist/assets/falcon-9-v1.1-first-stage.painted.svg +1 -1
  243. package/dist/assets/falcon-9-v1.1-first-stage.svg +1 -1
  244. package/dist/assets/falcon-9-v1.1-first-stage.thick.svg +1 -1
  245. package/dist/assets/falcon-9-v1.1-second-stage.painted.svg +1 -1
  246. package/dist/assets/falcon-9-v1.1-second-stage.svg +1 -1
  247. package/dist/assets/falcon-9-v1.1-second-stage.thick.svg +1 -1
  248. package/dist/assets/falcon-9-v1.1.painted.svg +1 -1
  249. package/dist/assets/falcon-9-v1.1.svg +1 -1
  250. package/dist/assets/falcon-9-v1.1.thick.svg +1 -1
  251. package/dist/assets/falcon-heavy-falcon-heavy-apart.painted.svg +1 -1
  252. package/dist/assets/falcon-heavy-falcon-heavy-apart.svg +1 -1
  253. package/dist/assets/falcon-heavy-falcon-heavy-apart.thick.svg +1 -1
  254. package/dist/assets/falcon-heavy-falcon-heavy-centre.painted.svg +1 -1
  255. package/dist/assets/falcon-heavy-falcon-heavy-centre.svg +1 -1
  256. package/dist/assets/falcon-heavy-falcon-heavy-centre.thick.svg +1 -1
  257. package/dist/assets/falcon-heavy-falcon-heavy-side-left.painted.svg +1 -1
  258. package/dist/assets/falcon-heavy-falcon-heavy-side-left.svg +1 -1
  259. package/dist/assets/falcon-heavy-falcon-heavy-side-left.thick.svg +1 -1
  260. package/dist/assets/falcon-heavy-falcon-heavy-side-right.painted.svg +1 -1
  261. package/dist/assets/falcon-heavy-falcon-heavy-side-right.svg +1 -1
  262. package/dist/assets/falcon-heavy-falcon-heavy-side-right.thick.svg +1 -1
  263. package/dist/assets/falcon-heavy-falcon-heavy.painted.svg +1 -1
  264. package/dist/assets/falcon-heavy-falcon-heavy.svg +1 -1
  265. package/dist/assets/falcon-heavy-falcon-heavy.thick.svg +1 -1
  266. package/dist/assets/gemini-gemini-adapter.glb +0 -0
  267. package/dist/assets/gemini-gemini-adapter.painted.svg +1 -0
  268. package/dist/assets/gemini-gemini-adapter.svg +1 -0
  269. package/dist/assets/gemini-gemini-adapter.thick.svg +1 -0
  270. package/dist/assets/gemini-gemini-apart.painted.svg +1 -0
  271. package/dist/assets/gemini-gemini-apart.svg +1 -0
  272. package/dist/assets/gemini-gemini-apart.thick.svg +1 -0
  273. package/dist/assets/gemini-gemini-capsule.glb +0 -0
  274. package/dist/assets/gemini-gemini-capsule.painted.svg +1 -0
  275. package/dist/assets/gemini-gemini-capsule.svg +1 -0
  276. package/dist/assets/gemini-gemini-capsule.thick.svg +1 -0
  277. package/dist/assets/gemini-gemini.glb +0 -0
  278. package/dist/assets/gemini-gemini.painted.svg +1 -0
  279. package/dist/assets/gemini-gemini.svg +1 -0
  280. package/dist/assets/gemini-gemini.thick.svg +1 -0
  281. package/dist/assets/grasshopper-grasshopper.painted.svg +1 -1
  282. package/dist/assets/grasshopper-grasshopper.svg +1 -1
  283. package/dist/assets/grasshopper-grasshopper.thick.svg +1 -1
  284. package/dist/assets/hubble-hubble.glb +0 -0
  285. package/dist/assets/hubble-hubble.painted.svg +1 -0
  286. package/dist/assets/hubble-hubble.svg +1 -0
  287. package/dist/assets/hubble-hubble.thick.svg +1 -0
  288. package/dist/assets/iss-iss.glb +0 -0
  289. package/dist/assets/iss-iss.painted.svg +1 -0
  290. package/dist/assets/iss-iss.svg +1 -0
  291. package/dist/assets/iss-iss.thick.svg +1 -0
  292. package/dist/assets/jupiter-c-jupiter-c.glb +0 -0
  293. package/dist/assets/jupiter-c-jupiter-c.painted.svg +1 -0
  294. package/dist/assets/jupiter-c-jupiter-c.svg +1 -0
  295. package/dist/assets/jupiter-c-jupiter-c.thick.svg +1 -0
  296. package/dist/assets/landing-zone-lz-1-apart.painted.svg +1 -0
  297. package/dist/assets/landing-zone-lz-1-apart.svg +1 -0
  298. package/dist/assets/landing-zone-lz-1-apart.thick.svg +1 -0
  299. package/dist/assets/landing-zone-lz-1-landed.glb +0 -0
  300. package/dist/assets/landing-zone-lz-1-landed.painted.svg +1 -0
  301. package/dist/assets/landing-zone-lz-1-landed.svg +1 -0
  302. package/dist/assets/landing-zone-lz-1-landed.thick.svg +1 -0
  303. package/dist/assets/landing-zone-lz-1-pad.glb +0 -0
  304. package/dist/assets/landing-zone-lz-1-pad.painted.svg +1 -0
  305. package/dist/assets/landing-zone-lz-1-pad.svg +1 -0
  306. package/dist/assets/landing-zone-lz-1-pad.thick.svg +1 -0
  307. package/dist/assets/landing-zone-lz-1.glb +0 -0
  308. package/dist/assets/landing-zone-lz-1.painted.svg +1 -0
  309. package/dist/assets/landing-zone-lz-1.svg +1 -0
  310. package/dist/assets/landing-zone-lz-1.thick.svg +1 -0
  311. package/dist/assets/landing-zone-lz-4-apart.painted.svg +1 -0
  312. package/dist/assets/landing-zone-lz-4-apart.svg +1 -0
  313. package/dist/assets/landing-zone-lz-4-apart.thick.svg +1 -0
  314. package/dist/assets/landing-zone-lz-4-landed.glb +0 -0
  315. package/dist/assets/landing-zone-lz-4-landed.painted.svg +1 -0
  316. package/dist/assets/landing-zone-lz-4-landed.svg +1 -0
  317. package/dist/assets/landing-zone-lz-4-landed.thick.svg +1 -0
  318. package/dist/assets/landing-zone-lz-4-pad.glb +0 -0
  319. package/dist/assets/landing-zone-lz-4-pad.painted.svg +1 -0
  320. package/dist/assets/landing-zone-lz-4-pad.svg +1 -0
  321. package/dist/assets/landing-zone-lz-4-pad.thick.svg +1 -0
  322. package/dist/assets/landing-zone-lz-4.glb +0 -0
  323. package/dist/assets/landing-zone-lz-4.painted.svg +1 -0
  324. package/dist/assets/landing-zone-lz-4.svg +1 -0
  325. package/dist/assets/landing-zone-lz-4.thick.svg +1 -0
  326. package/dist/assets/launch-tower-catch-apart.painted.svg +1 -0
  327. package/dist/assets/launch-tower-catch-apart.svg +1 -0
  328. package/dist/assets/launch-tower-catch-apart.thick.svg +1 -0
  329. package/dist/assets/launch-tower-catch-arms.glb +0 -0
  330. package/dist/assets/launch-tower-catch-arms.painted.svg +1 -0
  331. package/dist/assets/launch-tower-catch-arms.svg +1 -0
  332. package/dist/assets/launch-tower-catch-arms.thick.svg +1 -0
  333. package/dist/assets/launch-tower-catch-booster.glb +0 -0
  334. package/dist/assets/launch-tower-catch-booster.painted.svg +1 -0
  335. package/dist/assets/launch-tower-catch-booster.svg +1 -0
  336. package/dist/assets/launch-tower-catch-booster.thick.svg +1 -0
  337. package/dist/assets/launch-tower-catch-mount.glb +0 -0
  338. package/dist/assets/launch-tower-catch-mount.painted.svg +1 -0
  339. package/dist/assets/launch-tower-catch-mount.svg +1 -0
  340. package/dist/assets/launch-tower-catch-mount.thick.svg +1 -0
  341. package/dist/assets/launch-tower-catch-tower.glb +0 -0
  342. package/dist/assets/launch-tower-catch-tower.painted.svg +1 -0
  343. package/dist/assets/launch-tower-catch-tower.svg +1 -0
  344. package/dist/assets/launch-tower-catch-tower.thick.svg +1 -0
  345. package/dist/assets/launch-tower-catch.glb +0 -0
  346. package/dist/assets/launch-tower-catch.painted.svg +1 -0
  347. package/dist/assets/launch-tower-catch.svg +1 -0
  348. package/dist/assets/launch-tower-catch.thick.svg +1 -0
  349. package/dist/assets/launch-tower-stack-apart.painted.svg +1 -0
  350. package/dist/assets/launch-tower-stack-apart.svg +1 -0
  351. package/dist/assets/launch-tower-stack-apart.thick.svg +1 -0
  352. package/dist/assets/launch-tower-stack-arms.glb +0 -0
  353. package/dist/assets/launch-tower-stack-arms.painted.svg +1 -0
  354. package/dist/assets/launch-tower-stack-arms.svg +1 -0
  355. package/dist/assets/launch-tower-stack-arms.thick.svg +1 -0
  356. package/dist/assets/launch-tower-stack-booster.glb +0 -0
  357. package/dist/assets/launch-tower-stack-booster.painted.svg +1 -0
  358. package/dist/assets/launch-tower-stack-booster.svg +1 -0
  359. package/dist/assets/launch-tower-stack-booster.thick.svg +1 -0
  360. package/dist/assets/launch-tower-stack-mount.glb +0 -0
  361. package/dist/assets/launch-tower-stack-mount.painted.svg +1 -0
  362. package/dist/assets/launch-tower-stack-mount.svg +1 -0
  363. package/dist/assets/launch-tower-stack-mount.thick.svg +1 -0
  364. package/dist/assets/launch-tower-stack-ship.glb +0 -0
  365. package/dist/assets/launch-tower-stack-ship.painted.svg +1 -0
  366. package/dist/assets/launch-tower-stack-ship.svg +1 -0
  367. package/dist/assets/launch-tower-stack-ship.thick.svg +1 -0
  368. package/dist/assets/launch-tower-stack-tower.glb +0 -0
  369. package/dist/assets/launch-tower-stack-tower.painted.svg +1 -0
  370. package/dist/assets/launch-tower-stack-tower.svg +1 -0
  371. package/dist/assets/launch-tower-stack-tower.thick.svg +1 -0
  372. package/dist/assets/launch-tower-stack.glb +0 -0
  373. package/dist/assets/launch-tower-stack.painted.svg +1 -0
  374. package/dist/assets/launch-tower-stack.svg +1 -0
  375. package/dist/assets/launch-tower-stack.thick.svg +1 -0
  376. package/dist/assets/launch-tower-tower-apart.painted.svg +1 -0
  377. package/dist/assets/launch-tower-tower-apart.svg +1 -0
  378. package/dist/assets/launch-tower-tower-apart.thick.svg +1 -0
  379. package/dist/assets/launch-tower-tower-arms.glb +0 -0
  380. package/dist/assets/launch-tower-tower-arms.painted.svg +1 -0
  381. package/dist/assets/launch-tower-tower-arms.svg +1 -0
  382. package/dist/assets/launch-tower-tower-arms.thick.svg +1 -0
  383. package/dist/assets/launch-tower-tower-mount.glb +0 -0
  384. package/dist/assets/launch-tower-tower-mount.painted.svg +1 -0
  385. package/dist/assets/launch-tower-tower-mount.svg +1 -0
  386. package/dist/assets/launch-tower-tower-mount.thick.svg +1 -0
  387. package/dist/assets/launch-tower-tower-tower.glb +0 -0
  388. package/dist/assets/launch-tower-tower-tower.painted.svg +1 -0
  389. package/dist/assets/launch-tower-tower-tower.svg +1 -0
  390. package/dist/assets/launch-tower-tower-tower.thick.svg +1 -0
  391. package/dist/assets/launch-tower-tower.glb +0 -0
  392. package/dist/assets/launch-tower-tower.painted.svg +1 -0
  393. package/dist/assets/launch-tower-tower.svg +1 -0
  394. package/dist/assets/launch-tower-tower.thick.svg +1 -0
  395. package/dist/assets/lunar-module-lunar-module-apart.painted.svg +1 -0
  396. package/dist/assets/lunar-module-lunar-module-apart.svg +1 -0
  397. package/dist/assets/lunar-module-lunar-module-apart.thick.svg +1 -0
  398. package/dist/assets/lunar-module-lunar-module-ascent.glb +0 -0
  399. package/dist/assets/lunar-module-lunar-module-ascent.painted.svg +1 -0
  400. package/dist/assets/lunar-module-lunar-module-ascent.svg +1 -0
  401. package/dist/assets/lunar-module-lunar-module-ascent.thick.svg +1 -0
  402. package/dist/assets/lunar-module-lunar-module-descent.glb +0 -0
  403. package/dist/assets/lunar-module-lunar-module-descent.painted.svg +1 -0
  404. package/dist/assets/lunar-module-lunar-module-descent.svg +1 -0
  405. package/dist/assets/lunar-module-lunar-module-descent.thick.svg +1 -0
  406. package/dist/assets/lunar-module-lunar-module.glb +0 -0
  407. package/dist/assets/lunar-module-lunar-module.painted.svg +1 -0
  408. package/dist/assets/lunar-module-lunar-module.svg +1 -0
  409. package/dist/assets/lunar-module-lunar-module.thick.svg +1 -0
  410. package/dist/assets/mercury-friendship-7.glb +0 -0
  411. package/dist/assets/mercury-friendship-7.painted.svg +1 -0
  412. package/dist/assets/mercury-friendship-7.svg +1 -0
  413. package/dist/assets/mercury-friendship-7.thick.svg +1 -0
  414. package/dist/assets/models/apollo-soyuz-csm.glb +0 -0
  415. package/dist/assets/models/apollo-soyuz-docking-module.glb +0 -0
  416. package/dist/assets/models/apollo-soyuz-soyuz.glb +0 -0
  417. package/dist/assets/models/gemini-adapter.glb +0 -0
  418. package/dist/assets/models/gemini-capsule.glb +0 -0
  419. package/dist/assets/models/hubble-telescope.glb +0 -0
  420. package/dist/assets/models/iss-station.glb +0 -0
  421. package/dist/assets/models/jupiter-c-vehicle.glb +0 -0
  422. package/dist/assets/models/lunar-module-ascent.glb +0 -0
  423. package/dist/assets/models/lunar-module-descent.glb +0 -0
  424. package/dist/assets/models/mercury-capsule.glb +0 -0
  425. package/dist/assets/models/space-shuttle-discovery-orbiter.glb +0 -0
  426. package/dist/assets/models/space-shuttle-stack-external-tank.glb +0 -0
  427. package/dist/assets/models/space-shuttle-stack-orbiter.glb +0 -0
  428. package/dist/assets/models/space-shuttle-stack-srb.glb +0 -0
  429. package/dist/assets/new-glenn-7x2-apart.painted.svg +1 -0
  430. package/dist/assets/new-glenn-7x2-apart.svg +1 -0
  431. package/dist/assets/new-glenn-7x2-apart.thick.svg +1 -0
  432. package/dist/assets/new-glenn-7x2-fairing.glb +0 -0
  433. package/dist/assets/new-glenn-7x2-fairing.painted.svg +1 -0
  434. package/dist/assets/new-glenn-7x2-fairing.svg +1 -0
  435. package/dist/assets/new-glenn-7x2-fairing.thick.svg +1 -0
  436. package/dist/assets/new-glenn-7x2-first-stage.glb +0 -0
  437. package/dist/assets/new-glenn-7x2-first-stage.painted.svg +1 -0
  438. package/dist/assets/new-glenn-7x2-first-stage.svg +1 -0
  439. package/dist/assets/new-glenn-7x2-first-stage.thick.svg +1 -0
  440. package/dist/assets/new-glenn-7x2-second-stage.glb +0 -0
  441. package/dist/assets/new-glenn-7x2-second-stage.painted.svg +1 -0
  442. package/dist/assets/new-glenn-7x2-second-stage.svg +1 -0
  443. package/dist/assets/new-glenn-7x2-second-stage.thick.svg +1 -0
  444. package/dist/assets/new-glenn-7x2.glb +0 -0
  445. package/dist/assets/new-glenn-7x2.painted.svg +1 -0
  446. package/dist/assets/new-glenn-7x2.svg +1 -0
  447. package/dist/assets/new-glenn-7x2.thick.svg +1 -0
  448. package/dist/assets/parts/flap-aft.painted.svg +1 -1
  449. package/dist/assets/parts/flap-aft.svg +1 -1
  450. package/dist/assets/parts/flap-aft.thick.svg +1 -1
  451. package/dist/assets/parts/flap-forward.painted.svg +1 -1
  452. package/dist/assets/parts/flap-forward.svg +1 -1
  453. package/dist/assets/parts/flap-forward.thick.svg +1 -1
  454. package/dist/assets/parts/grid-fin-four.painted.svg +1 -1
  455. package/dist/assets/parts/grid-fin-four.svg +1 -1
  456. package/dist/assets/parts/grid-fin-four.thick.svg +1 -1
  457. package/dist/assets/parts/grid-fin-three.painted.svg +1 -1
  458. package/dist/assets/parts/grid-fin-three.svg +1 -1
  459. package/dist/assets/parts/grid-fin-three.thick.svg +1 -1
  460. package/dist/assets/parts/merlin-sea-level.painted.svg +1 -1
  461. package/dist/assets/parts/merlin-sea-level.svg +1 -1
  462. package/dist/assets/parts/merlin-sea-level.thick.svg +1 -1
  463. package/dist/assets/parts/raptor-sea-level.painted.svg +1 -1
  464. package/dist/assets/parts/raptor-sea-level.svg +1 -1
  465. package/dist/assets/parts/raptor-sea-level.thick.svg +1 -1
  466. package/dist/assets/parts/raptor-vacuum.painted.svg +1 -1
  467. package/dist/assets/parts/raptor-vacuum.svg +1 -1
  468. package/dist/assets/parts/raptor-vacuum.thick.svg +1 -1
  469. package/dist/assets/saturn-v-saturn-v-adapter.glb +0 -0
  470. package/dist/assets/saturn-v-saturn-v-adapter.painted.svg +1 -0
  471. package/dist/assets/saturn-v-saturn-v-adapter.svg +1 -0
  472. package/dist/assets/saturn-v-saturn-v-adapter.thick.svg +1 -0
  473. package/dist/assets/saturn-v-saturn-v-apart.painted.svg +1 -0
  474. package/dist/assets/saturn-v-saturn-v-apart.svg +1 -0
  475. package/dist/assets/saturn-v-saturn-v-apart.thick.svg +1 -0
  476. package/dist/assets/saturn-v-saturn-v-capsule.glb +0 -0
  477. package/dist/assets/saturn-v-saturn-v-capsule.painted.svg +1 -0
  478. package/dist/assets/saturn-v-saturn-v-capsule.svg +1 -0
  479. package/dist/assets/saturn-v-saturn-v-capsule.thick.svg +1 -0
  480. package/dist/assets/saturn-v-saturn-v-escape-tower.glb +0 -0
  481. package/dist/assets/saturn-v-saturn-v-escape-tower.painted.svg +1 -0
  482. package/dist/assets/saturn-v-saturn-v-escape-tower.svg +1 -0
  483. package/dist/assets/saturn-v-saturn-v-escape-tower.thick.svg +1 -0
  484. package/dist/assets/saturn-v-saturn-v-first-stage.glb +0 -0
  485. package/dist/assets/saturn-v-saturn-v-first-stage.painted.svg +1 -0
  486. package/dist/assets/saturn-v-saturn-v-first-stage.svg +1 -0
  487. package/dist/assets/saturn-v-saturn-v-first-stage.thick.svg +1 -0
  488. package/dist/assets/saturn-v-saturn-v-second-stage.glb +0 -0
  489. package/dist/assets/saturn-v-saturn-v-second-stage.painted.svg +1 -0
  490. package/dist/assets/saturn-v-saturn-v-second-stage.svg +1 -0
  491. package/dist/assets/saturn-v-saturn-v-second-stage.thick.svg +1 -0
  492. package/dist/assets/saturn-v-saturn-v-service-module.glb +0 -0
  493. package/dist/assets/saturn-v-saturn-v-service-module.painted.svg +1 -0
  494. package/dist/assets/saturn-v-saturn-v-service-module.svg +1 -0
  495. package/dist/assets/saturn-v-saturn-v-service-module.thick.svg +1 -0
  496. package/dist/assets/saturn-v-saturn-v-third-stage.glb +0 -0
  497. package/dist/assets/saturn-v-saturn-v-third-stage.painted.svg +1 -0
  498. package/dist/assets/saturn-v-saturn-v-third-stage.svg +1 -0
  499. package/dist/assets/saturn-v-saturn-v-third-stage.thick.svg +1 -0
  500. package/dist/assets/saturn-v-saturn-v.glb +0 -0
  501. package/dist/assets/saturn-v-saturn-v.painted.svg +1 -0
  502. package/dist/assets/saturn-v-saturn-v.svg +1 -0
  503. package/dist/assets/saturn-v-saturn-v.thick.svg +1 -0
  504. package/dist/assets/sls-block-1-apart.painted.svg +1 -0
  505. package/dist/assets/sls-block-1-apart.svg +1 -0
  506. package/dist/assets/sls-block-1-apart.thick.svg +1 -0
  507. package/dist/assets/sls-block-1-capsule.glb +0 -0
  508. package/dist/assets/sls-block-1-capsule.painted.svg +1 -0
  509. package/dist/assets/sls-block-1-capsule.svg +1 -0
  510. package/dist/assets/sls-block-1-capsule.thick.svg +1 -0
  511. package/dist/assets/sls-block-1-escape-tower.glb +0 -0
  512. package/dist/assets/sls-block-1-escape-tower.painted.svg +1 -0
  513. package/dist/assets/sls-block-1-escape-tower.svg +1 -0
  514. package/dist/assets/sls-block-1-escape-tower.thick.svg +1 -0
  515. package/dist/assets/sls-block-1-first-stage.glb +0 -0
  516. package/dist/assets/sls-block-1-first-stage.painted.svg +1 -0
  517. package/dist/assets/sls-block-1-first-stage.svg +1 -0
  518. package/dist/assets/sls-block-1-first-stage.thick.svg +1 -0
  519. package/dist/assets/sls-block-1-service-module.glb +0 -0
  520. package/dist/assets/sls-block-1-service-module.painted.svg +1 -0
  521. package/dist/assets/sls-block-1-service-module.svg +1 -0
  522. package/dist/assets/sls-block-1-service-module.thick.svg +1 -0
  523. package/dist/assets/sls-block-1-srb-left.glb +0 -0
  524. package/dist/assets/sls-block-1-srb-left.painted.svg +1 -0
  525. package/dist/assets/sls-block-1-srb-left.svg +1 -0
  526. package/dist/assets/sls-block-1-srb-left.thick.svg +1 -0
  527. package/dist/assets/sls-block-1-srb-right.glb +0 -0
  528. package/dist/assets/sls-block-1-srb-right.painted.svg +1 -0
  529. package/dist/assets/sls-block-1-srb-right.svg +1 -0
  530. package/dist/assets/sls-block-1-srb-right.thick.svg +1 -0
  531. package/dist/assets/sls-block-1-upper-stage.glb +0 -0
  532. package/dist/assets/sls-block-1-upper-stage.painted.svg +1 -0
  533. package/dist/assets/sls-block-1-upper-stage.svg +1 -0
  534. package/dist/assets/sls-block-1-upper-stage.thick.svg +1 -0
  535. package/dist/assets/sls-block-1.glb +0 -0
  536. package/dist/assets/sls-block-1.painted.svg +1 -0
  537. package/dist/assets/sls-block-1.svg +1 -0
  538. package/dist/assets/sls-block-1.thick.svg +1 -0
  539. package/dist/assets/soyuz-soyuz-2-apart.painted.svg +1 -0
  540. package/dist/assets/soyuz-soyuz-2-apart.svg +1 -0
  541. package/dist/assets/soyuz-soyuz-2-apart.thick.svg +1 -0
  542. package/dist/assets/soyuz-soyuz-2-booster-1.glb +0 -0
  543. package/dist/assets/soyuz-soyuz-2-booster-1.painted.svg +1 -0
  544. package/dist/assets/soyuz-soyuz-2-booster-1.svg +1 -0
  545. package/dist/assets/soyuz-soyuz-2-booster-1.thick.svg +1 -0
  546. package/dist/assets/soyuz-soyuz-2-booster-2.glb +0 -0
  547. package/dist/assets/soyuz-soyuz-2-booster-2.painted.svg +1 -0
  548. package/dist/assets/soyuz-soyuz-2-booster-2.svg +1 -0
  549. package/dist/assets/soyuz-soyuz-2-booster-2.thick.svg +1 -0
  550. package/dist/assets/soyuz-soyuz-2-booster-3.glb +0 -0
  551. package/dist/assets/soyuz-soyuz-2-booster-3.painted.svg +1 -0
  552. package/dist/assets/soyuz-soyuz-2-booster-3.svg +1 -0
  553. package/dist/assets/soyuz-soyuz-2-booster-3.thick.svg +1 -0
  554. package/dist/assets/soyuz-soyuz-2-booster-4.glb +0 -0
  555. package/dist/assets/soyuz-soyuz-2-booster-4.painted.svg +1 -0
  556. package/dist/assets/soyuz-soyuz-2-booster-4.svg +1 -0
  557. package/dist/assets/soyuz-soyuz-2-booster-4.thick.svg +1 -0
  558. package/dist/assets/soyuz-soyuz-2-fairing.glb +0 -0
  559. package/dist/assets/soyuz-soyuz-2-fairing.painted.svg +1 -0
  560. package/dist/assets/soyuz-soyuz-2-fairing.svg +1 -0
  561. package/dist/assets/soyuz-soyuz-2-fairing.thick.svg +1 -0
  562. package/dist/assets/soyuz-soyuz-2-first-stage.glb +0 -0
  563. package/dist/assets/soyuz-soyuz-2-first-stage.painted.svg +1 -0
  564. package/dist/assets/soyuz-soyuz-2-first-stage.svg +1 -0
  565. package/dist/assets/soyuz-soyuz-2-first-stage.thick.svg +1 -0
  566. package/dist/assets/soyuz-soyuz-2-third-stage.glb +0 -0
  567. package/dist/assets/soyuz-soyuz-2-third-stage.painted.svg +1 -0
  568. package/dist/assets/soyuz-soyuz-2-third-stage.svg +1 -0
  569. package/dist/assets/soyuz-soyuz-2-third-stage.thick.svg +1 -0
  570. package/dist/assets/soyuz-soyuz-2.glb +0 -0
  571. package/dist/assets/soyuz-soyuz-2.painted.svg +1 -0
  572. package/dist/assets/soyuz-soyuz-2.svg +1 -0
  573. package/dist/assets/soyuz-soyuz-2.thick.svg +1 -0
  574. package/dist/assets/space-shuttle-discovery.glb +0 -0
  575. package/dist/assets/space-shuttle-discovery.painted.svg +1 -0
  576. package/dist/assets/space-shuttle-discovery.svg +1 -0
  577. package/dist/assets/space-shuttle-discovery.thick.svg +1 -0
  578. package/dist/assets/space-shuttle-stack-apart.painted.svg +1 -0
  579. package/dist/assets/space-shuttle-stack-apart.svg +1 -0
  580. package/dist/assets/space-shuttle-stack-apart.thick.svg +1 -0
  581. package/dist/assets/space-shuttle-stack-external-tank.glb +0 -0
  582. package/dist/assets/space-shuttle-stack-external-tank.painted.svg +1 -0
  583. package/dist/assets/space-shuttle-stack-external-tank.svg +1 -0
  584. package/dist/assets/space-shuttle-stack-external-tank.thick.svg +1 -0
  585. package/dist/assets/space-shuttle-stack-orbiter.glb +0 -0
  586. package/dist/assets/space-shuttle-stack-orbiter.painted.svg +1 -0
  587. package/dist/assets/space-shuttle-stack-orbiter.svg +1 -0
  588. package/dist/assets/space-shuttle-stack-orbiter.thick.svg +1 -0
  589. package/dist/assets/space-shuttle-stack-srb-left.glb +0 -0
  590. package/dist/assets/space-shuttle-stack-srb-left.painted.svg +1 -0
  591. package/dist/assets/space-shuttle-stack-srb-left.svg +1 -0
  592. package/dist/assets/space-shuttle-stack-srb-left.thick.svg +1 -0
  593. package/dist/assets/space-shuttle-stack-srb-right.glb +0 -0
  594. package/dist/assets/space-shuttle-stack-srb-right.painted.svg +1 -0
  595. package/dist/assets/space-shuttle-stack-srb-right.svg +1 -0
  596. package/dist/assets/space-shuttle-stack-srb-right.thick.svg +1 -0
  597. package/dist/assets/space-shuttle-stack.glb +0 -0
  598. package/dist/assets/space-shuttle-stack.painted.svg +1 -0
  599. package/dist/assets/space-shuttle-stack.svg +1 -0
  600. package/dist/assets/space-shuttle-stack.thick.svg +1 -0
  601. package/dist/assets/starbase-build-site-apart.painted.svg +1 -0
  602. package/dist/assets/starbase-build-site-apart.svg +1 -0
  603. package/dist/assets/starbase-build-site-apart.thick.svg +1 -0
  604. package/dist/assets/starbase-build-site-garden.glb +0 -0
  605. package/dist/assets/starbase-build-site-garden.painted.svg +1 -0
  606. package/dist/assets/starbase-build-site-garden.svg +1 -0
  607. package/dist/assets/starbase-build-site-garden.thick.svg +1 -0
  608. package/dist/assets/starbase-build-site-ground.glb +0 -0
  609. package/dist/assets/starbase-build-site-ground.painted.svg +1 -0
  610. package/dist/assets/starbase-build-site-ground.svg +1 -0
  611. package/dist/assets/starbase-build-site-ground.thick.svg +1 -0
  612. package/dist/assets/starbase-build-site-mega-bays.glb +0 -0
  613. package/dist/assets/starbase-build-site-mega-bays.painted.svg +1 -0
  614. package/dist/assets/starbase-build-site-mega-bays.svg +1 -0
  615. package/dist/assets/starbase-build-site-mega-bays.thick.svg +1 -0
  616. package/dist/assets/starbase-build-site-sign.glb +0 -0
  617. package/dist/assets/starbase-build-site-sign.painted.svg +1 -0
  618. package/dist/assets/starbase-build-site-sign.svg +1 -0
  619. package/dist/assets/starbase-build-site-sign.thick.svg +1 -0
  620. package/dist/assets/starbase-build-site-starfactory.glb +0 -0
  621. package/dist/assets/starbase-build-site-starfactory.painted.svg +1 -0
  622. package/dist/assets/starbase-build-site-starfactory.svg +1 -0
  623. package/dist/assets/starbase-build-site-starfactory.thick.svg +1 -0
  624. package/dist/assets/starbase-build-site.glb +0 -0
  625. package/dist/assets/starbase-build-site.painted.svg +1 -0
  626. package/dist/assets/starbase-build-site.svg +1 -0
  627. package/dist/assets/starbase-build-site.thick.svg +1 -0
  628. package/dist/assets/starbase-city-apart.painted.svg +1 -0
  629. package/dist/assets/starbase-city-apart.svg +1 -0
  630. package/dist/assets/starbase-city-apart.thick.svg +1 -0
  631. package/dist/assets/starbase-city-garden.glb +0 -0
  632. package/dist/assets/starbase-city-garden.painted.svg +1 -0
  633. package/dist/assets/starbase-city-garden.svg +1 -0
  634. package/dist/assets/starbase-city-garden.thick.svg +1 -0
  635. package/dist/assets/starbase-city-ground.glb +0 -0
  636. package/dist/assets/starbase-city-ground.painted.svg +1 -0
  637. package/dist/assets/starbase-city-ground.svg +1 -0
  638. package/dist/assets/starbase-city-ground.thick.svg +1 -0
  639. package/dist/assets/starbase-city-mega-bays.glb +0 -0
  640. package/dist/assets/starbase-city-mega-bays.painted.svg +1 -0
  641. package/dist/assets/starbase-city-mega-bays.svg +1 -0
  642. package/dist/assets/starbase-city-mega-bays.thick.svg +1 -0
  643. package/dist/assets/starbase-city-on-pad.glb +0 -0
  644. package/dist/assets/starbase-city-on-pad.painted.svg +1 -0
  645. package/dist/assets/starbase-city-on-pad.svg +1 -0
  646. package/dist/assets/starbase-city-on-pad.thick.svg +1 -0
  647. package/dist/assets/starbase-city-pads.glb +0 -0
  648. package/dist/assets/starbase-city-pads.painted.svg +1 -0
  649. package/dist/assets/starbase-city-pads.svg +1 -0
  650. package/dist/assets/starbase-city-pads.thick.svg +1 -0
  651. package/dist/assets/starbase-city-sign.glb +0 -0
  652. package/dist/assets/starbase-city-sign.painted.svg +1 -0
  653. package/dist/assets/starbase-city-sign.svg +1 -0
  654. package/dist/assets/starbase-city-sign.thick.svg +1 -0
  655. package/dist/assets/starbase-city-starfactory.glb +0 -0
  656. package/dist/assets/starbase-city-starfactory.painted.svg +1 -0
  657. package/dist/assets/starbase-city-starfactory.svg +1 -0
  658. package/dist/assets/starbase-city-starfactory.thick.svg +1 -0
  659. package/dist/assets/starbase-city-tank-farm.glb +0 -0
  660. package/dist/assets/starbase-city-tank-farm.painted.svg +1 -0
  661. package/dist/assets/starbase-city-tank-farm.svg +1 -0
  662. package/dist/assets/starbase-city-tank-farm.thick.svg +1 -0
  663. package/dist/assets/starbase-city-village.glb +0 -0
  664. package/dist/assets/starbase-city-village.painted.svg +1 -0
  665. package/dist/assets/starbase-city-village.svg +1 -0
  666. package/dist/assets/starbase-city-village.thick.svg +1 -0
  667. package/dist/assets/starbase-city.glb +0 -0
  668. package/dist/assets/starbase-city.painted.svg +1 -0
  669. package/dist/assets/starbase-city.svg +1 -0
  670. package/dist/assets/starbase-city.thick.svg +1 -0
  671. package/dist/assets/starbase-launch-site-apart.painted.svg +1 -0
  672. package/dist/assets/starbase-launch-site-apart.svg +1 -0
  673. package/dist/assets/starbase-launch-site-apart.thick.svg +1 -0
  674. package/dist/assets/starbase-launch-site-ground.glb +0 -0
  675. package/dist/assets/starbase-launch-site-ground.painted.svg +1 -0
  676. package/dist/assets/starbase-launch-site-ground.svg +1 -0
  677. package/dist/assets/starbase-launch-site-ground.thick.svg +1 -0
  678. package/dist/assets/starbase-launch-site-on-pad.glb +0 -0
  679. package/dist/assets/starbase-launch-site-on-pad.painted.svg +1 -0
  680. package/dist/assets/starbase-launch-site-on-pad.svg +1 -0
  681. package/dist/assets/starbase-launch-site-on-pad.thick.svg +1 -0
  682. package/dist/assets/starbase-launch-site-pads.glb +0 -0
  683. package/dist/assets/starbase-launch-site-pads.painted.svg +1 -0
  684. package/dist/assets/starbase-launch-site-pads.svg +1 -0
  685. package/dist/assets/starbase-launch-site-pads.thick.svg +1 -0
  686. package/dist/assets/starbase-launch-site-tank-farm.glb +0 -0
  687. package/dist/assets/starbase-launch-site-tank-farm.painted.svg +1 -0
  688. package/dist/assets/starbase-launch-site-tank-farm.svg +1 -0
  689. package/dist/assets/starbase-launch-site-tank-farm.thick.svg +1 -0
  690. package/dist/assets/starbase-launch-site.glb +0 -0
  691. package/dist/assets/starbase-launch-site.painted.svg +1 -0
  692. package/dist/assets/starbase-launch-site.svg +1 -0
  693. package/dist/assets/starbase-launch-site.thick.svg +1 -0
  694. package/dist/assets/starship-2019.painted.svg +1 -1
  695. package/dist/assets/starship-2019.svg +1 -1
  696. package/dist/assets/starship-2019.thick.svg +1 -1
  697. package/dist/assets/starship-v1-apart.painted.svg +1 -1
  698. package/dist/assets/starship-v1-apart.svg +1 -1
  699. package/dist/assets/starship-v1-apart.thick.svg +1 -1
  700. package/dist/assets/starship-v1-booster.painted.svg +1 -1
  701. package/dist/assets/starship-v1-booster.svg +1 -1
  702. package/dist/assets/starship-v1-booster.thick.svg +1 -1
  703. package/dist/assets/starship-v1-flight1-apart.painted.svg +1 -1
  704. package/dist/assets/starship-v1-flight1-apart.svg +1 -1
  705. package/dist/assets/starship-v1-flight1-apart.thick.svg +1 -1
  706. package/dist/assets/starship-v1-flight1-booster.painted.svg +1 -1
  707. package/dist/assets/starship-v1-flight1-booster.svg +1 -1
  708. package/dist/assets/starship-v1-flight1-booster.thick.svg +1 -1
  709. package/dist/assets/starship-v1-flight1-ship.painted.svg +1 -1
  710. package/dist/assets/starship-v1-flight1-ship.svg +1 -1
  711. package/dist/assets/starship-v1-flight1-ship.thick.svg +1 -1
  712. package/dist/assets/starship-v1-flight1.painted.svg +1 -1
  713. package/dist/assets/starship-v1-flight1.svg +1 -1
  714. package/dist/assets/starship-v1-flight1.thick.svg +1 -1
  715. package/dist/assets/starship-v1-ship.painted.svg +1 -1
  716. package/dist/assets/starship-v1-ship.svg +1 -1
  717. package/dist/assets/starship-v1-ship.thick.svg +1 -1
  718. package/dist/assets/starship-v1.painted.svg +1 -1
  719. package/dist/assets/starship-v1.svg +1 -1
  720. package/dist/assets/starship-v1.thick.svg +1 -1
  721. package/dist/assets/starship-v2-apart.painted.svg +1 -1
  722. package/dist/assets/starship-v2-apart.svg +1 -1
  723. package/dist/assets/starship-v2-apart.thick.svg +1 -1
  724. package/dist/assets/starship-v2-booster.painted.svg +1 -1
  725. package/dist/assets/starship-v2-booster.svg +1 -1
  726. package/dist/assets/starship-v2-booster.thick.svg +1 -1
  727. package/dist/assets/starship-v2-ship.painted.svg +1 -1
  728. package/dist/assets/starship-v2-ship.svg +1 -1
  729. package/dist/assets/starship-v2-ship.thick.svg +1 -1
  730. package/dist/assets/starship-v2.painted.svg +1 -1
  731. package/dist/assets/starship-v2.svg +1 -1
  732. package/dist/assets/starship-v2.thick.svg +1 -1
  733. package/dist/assets/starship-v3-apart.painted.svg +1 -1
  734. package/dist/assets/starship-v3-apart.svg +1 -1
  735. package/dist/assets/starship-v3-apart.thick.svg +1 -1
  736. package/dist/assets/starship-v3-booster.painted.svg +1 -1
  737. package/dist/assets/starship-v3-booster.svg +1 -1
  738. package/dist/assets/starship-v3-booster.thick.svg +1 -1
  739. package/dist/assets/starship-v3-ship.painted.svg +1 -1
  740. package/dist/assets/starship-v3-ship.svg +1 -1
  741. package/dist/assets/starship-v3-ship.thick.svg +1 -1
  742. package/dist/assets/starship-v3.painted.svg +1 -1
  743. package/dist/assets/starship-v3.svg +1 -1
  744. package/dist/assets/starship-v3.thick.svg +1 -1
  745. package/dist/assets/starship-v4-apart.painted.svg +1 -1
  746. package/dist/assets/starship-v4-apart.svg +1 -1
  747. package/dist/assets/starship-v4-apart.thick.svg +1 -1
  748. package/dist/assets/starship-v4-booster.painted.svg +1 -1
  749. package/dist/assets/starship-v4-booster.svg +1 -1
  750. package/dist/assets/starship-v4-booster.thick.svg +1 -1
  751. package/dist/assets/starship-v4-ship.painted.svg +1 -1
  752. package/dist/assets/starship-v4-ship.svg +1 -1
  753. package/dist/assets/starship-v4-ship.thick.svg +1 -1
  754. package/dist/assets/starship-v4.painted.svg +1 -1
  755. package/dist/assets/starship-v4.svg +1 -1
  756. package/dist/assets/starship-v4.thick.svg +1 -1
  757. package/dist/attrs.d.ts +27 -0
  758. package/dist/attrs.js +31 -0
  759. package/dist/build/index.d.ts +7 -2
  760. package/dist/build/index.js +28 -4
  761. package/dist/build/lineup.js +14 -4
  762. package/dist/builder.d.ts +22 -0
  763. package/dist/builder.js +103 -0
  764. package/dist/data/apollosoyuz.d.ts +6 -0
  765. package/dist/data/apollosoyuz.js +28 -0
  766. package/dist/data/credits.d.ts +19 -1
  767. package/dist/data/credits.js +30 -1
  768. package/dist/data/dragon.js +35 -0
  769. package/dist/data/electron.d.ts +2 -0
  770. package/dist/data/electron.js +23 -0
  771. package/dist/data/falcon.js +2 -2
  772. package/dist/data/falcon1.d.ts +4 -0
  773. package/dist/data/falcon1.js +51 -0
  774. package/dist/data/flight-log.d.ts +18 -0
  775. package/dist/data/flight-log.js +23 -0
  776. package/dist/data/flights.d.ts +49 -0
  777. package/dist/data/flights.js +177 -0
  778. package/dist/data/gemini.d.ts +3 -0
  779. package/dist/data/gemini.js +22 -0
  780. package/dist/data/hubble.d.ts +3 -0
  781. package/dist/data/hubble.js +23 -0
  782. package/dist/data/iss.d.ts +5 -0
  783. package/dist/data/iss.js +25 -0
  784. package/dist/data/jupiterc.d.ts +3 -0
  785. package/dist/data/jupiterc.js +22 -0
  786. package/dist/data/landing.d.ts +3 -0
  787. package/dist/data/landing.js +51 -0
  788. package/dist/data/lunarmodule.d.ts +4 -0
  789. package/dist/data/lunarmodule.js +27 -0
  790. package/dist/data/makers.d.ts +16 -0
  791. package/dist/data/makers.js +29 -0
  792. package/dist/data/mercury.d.ts +3 -0
  793. package/dist/data/mercury.js +22 -0
  794. package/dist/data/newglenn.d.ts +2 -0
  795. package/dist/data/newglenn.js +23 -0
  796. package/dist/data/saturn.d.ts +2 -0
  797. package/dist/data/saturn.js +32 -0
  798. package/dist/data/shuttle.d.ts +5 -0
  799. package/dist/data/shuttle.js +52 -0
  800. package/dist/data/sls.d.ts +4 -0
  801. package/dist/data/sls.js +36 -0
  802. package/dist/data/sources.d.ts +348 -2
  803. package/dist/data/sources.js +45 -1
  804. package/dist/data/soyuz.d.ts +3 -0
  805. package/dist/data/soyuz.js +33 -0
  806. package/dist/data/starbase.d.ts +2 -0
  807. package/dist/data/starbase.js +30 -0
  808. package/dist/data/tower.d.ts +3 -0
  809. package/dist/data/tower.js +26 -0
  810. package/dist/data/types.d.ts +7 -1
  811. package/dist/draw/plume.d.ts +8 -0
  812. package/dist/draw/plume.js +71 -0
  813. package/dist/draw/svg.d.ts +1 -1
  814. package/dist/draw/svg.js +3 -3
  815. package/dist/element/ground.d.ts +15 -0
  816. package/dist/element/ground.js +95 -0
  817. package/dist/element/plumes.d.ts +38 -0
  818. package/dist/element/plumes.js +208 -0
  819. package/dist/element/scene.d.ts +39 -5
  820. package/dist/element/scene.js +250 -7
  821. package/dist/element.d.ts +50 -1
  822. package/dist/element.js +201 -13
  823. package/dist/embed.d.ts +26 -0
  824. package/dist/embed.js +135 -0
  825. package/dist/engines.d.ts +44 -0
  826. package/dist/engines.js +79 -0
  827. package/dist/fit.d.ts +2 -0
  828. package/dist/fit.js +4 -3
  829. package/dist/flight.d.ts +67 -0
  830. package/dist/flight.js +124 -0
  831. package/dist/flightbar.d.ts +22 -0
  832. package/dist/flightbar.js +176 -0
  833. package/dist/index.d.ts +17 -0
  834. package/dist/index.js +9 -0
  835. package/dist/layout.js +1 -1
  836. package/dist/looks.d.ts +1 -1
  837. package/dist/looks.js +2 -0
  838. package/dist/model/apollosoyuz.d.ts +2 -0
  839. package/dist/model/apollosoyuz.js +46 -0
  840. package/dist/model/dragoninside.d.ts +2 -0
  841. package/dist/model/dragoninside.js +67 -0
  842. package/dist/model/electron.d.ts +2 -0
  843. package/dist/model/electron.js +35 -0
  844. package/dist/model/falcon.d.ts +2 -0
  845. package/dist/model/falcon.js +4 -0
  846. package/dist/model/falcon1.d.ts +2 -0
  847. package/dist/model/falcon1.js +53 -0
  848. package/dist/model/gemini.d.ts +2 -0
  849. package/dist/model/gemini.js +28 -0
  850. package/dist/model/hubble.d.ts +2 -0
  851. package/dist/model/hubble.js +28 -0
  852. package/dist/model/iss.d.ts +2 -0
  853. package/dist/model/iss.js +32 -0
  854. package/dist/model/jupiterc.d.ts +2 -0
  855. package/dist/model/jupiterc.js +24 -0
  856. package/dist/model/kit.d.ts +36 -0
  857. package/dist/model/kit.js +95 -0
  858. package/dist/model/landing.d.ts +3 -0
  859. package/dist/model/landing.js +81 -0
  860. package/dist/model/lunarmodule.d.ts +2 -0
  861. package/dist/model/lunarmodule.js +43 -0
  862. package/dist/model/materials.d.ts +42 -0
  863. package/dist/model/materials.js +7 -0
  864. package/dist/model/mercury.d.ts +2 -0
  865. package/dist/model/mercury.js +19 -0
  866. package/dist/model/newglenn.d.ts +2 -0
  867. package/dist/model/newglenn.js +43 -0
  868. package/dist/model/pieces.d.ts +2 -0
  869. package/dist/model/pieces.js +2 -2
  870. package/dist/model/registry.js +63 -0
  871. package/dist/model/saturn.d.ts +2 -0
  872. package/dist/model/saturn.js +122 -0
  873. package/dist/model/shuttle.d.ts +2 -0
  874. package/dist/model/shuttle.js +111 -0
  875. package/dist/model/sls.d.ts +2 -0
  876. package/dist/model/sls.js +83 -0
  877. package/dist/model/soyuz.d.ts +2 -0
  878. package/dist/model/soyuz.js +75 -0
  879. package/dist/model/stacks.d.ts +39 -0
  880. package/dist/model/stacks.js +1 -0
  881. package/dist/model/starbase.d.ts +2 -0
  882. package/dist/model/starbase.js +108 -0
  883. package/dist/model/tower.d.ts +6 -0
  884. package/dist/model/tower.js +89 -0
  885. package/dist/parts.d.ts +3 -2
  886. package/dist/react.d.ts +14 -6
  887. package/dist/rockets.d.ts +5 -0
  888. package/dist/rockets.js +78 -7
  889. package/dist/spin.d.ts +11 -0
  890. package/dist/spin.js +11 -0
  891. package/package.json +93 -18
package/dist/fit.js CHANGED
@@ -3,14 +3,15 @@
3
3
  import { MODEL_CREDITS } from "./data/credits.js";
4
4
  import { partEntry } from "./model/registry.js";
5
5
  import { partIdOf, ROCKETS, variantOf } from "./rockets.js";
6
- const TOLERANCE = 0.1;
6
+ /** How far apart two joints may be in metres and still meet. */
7
+ export const JOINT_TOLERANCE = 0.1;
7
8
  /** The whole height, joint to joint up the stack, and the widest part. */
8
9
  function sizeOf(parts) {
9
10
  let y = 0;
10
11
  let top = 0;
11
12
  for (const { part } of parts) {
12
13
  if (part.strapOn) {
13
- top = Math.max(top, part.height);
14
+ top = Math.max(top, (part.strapOn.y ?? 0) + part.height);
14
15
  continue;
15
16
  }
16
17
  const base = y - (part.joints.bottom?.y ?? 0);
@@ -84,7 +85,7 @@ export function check(description) {
84
85
  }
85
86
  if (top.kind !== bottom.kind)
86
87
  fail("joint-kind", `${below.name} ends in a ${top.kind} joint and ${above.name} starts with a ${bottom.kind} joint.`);
87
- if (Math.abs(top.diameter - bottom.diameter) > TOLERANCE)
88
+ if (Math.abs(top.diameter - bottom.diameter) > JOINT_TOLERANCE)
88
89
  fail("joint-diameter", `${below.name} is ${top.diameter} m across at the joint and ${above.name} is ${bottom.diameter} m.`);
89
90
  }
90
91
  if (custom)
@@ -0,0 +1,67 @@
1
+ import { type Flight, type FlightPhase } from "./data/flights.ts";
2
+ import type { Figure } from "./data/types.ts";
3
+ export type { Flight, FlightBurn, FlightPhase, PartPose } from "./data/flights.ts";
4
+ /** Seconds a phase takes on the screen when the timeline plays: one flight in under a minute, whatever its real length. */
5
+ export declare const SECONDS_PER_PHASE = 2.4;
6
+ /** The flight for a rocket's variant, when a page gives one. */
7
+ export declare const flightOf: (rocket: string, variant: string | undefined) => Flight | null;
8
+ /** The last place on the timeline: the last phase. */
9
+ export declare const lastPosition: (flight: Flight) => number;
10
+ /** Which phase a place on the timeline is in, and how far along to the next. A value that is not a number is the start. */
11
+ export declare function phaseAt(flight: Flight, position: number): {
12
+ index: number;
13
+ along: number;
14
+ phase: FlightPhase;
15
+ };
16
+ /** The place on the timeline of a phase by its id, or null for one the flight does not have. */
17
+ export declare function phasePosition(flight: Flight, id: string | null | undefined): number | null;
18
+ /** How many engines of each part burn in a phase, as drawn: a blank figure draws its `drawn`. */
19
+ export declare function burnsOf(phase: FlightPhase): Record<string, number>;
20
+ export interface PoseNow {
21
+ dx: number;
22
+ dy: number;
23
+ pitch: number;
24
+ gone: boolean;
25
+ }
26
+ export interface FlightFrame {
27
+ index: number;
28
+ phase: FlightPhase;
29
+ poses: Readonly<Record<string, PoseNow>>;
30
+ burns: Readonly<Record<string, number>>;
31
+ /** Metres. */
32
+ groundY: number;
33
+ smoke: number;
34
+ air: number;
35
+ /** A part stands away from the stack. */
36
+ separated: boolean;
37
+ }
38
+ export interface FlightPart {
39
+ slot: string;
40
+ /** Where it stands in the stack: the base's height, metres. */
41
+ baseY: number;
42
+ }
43
+ /** Everything the picture needs at a place on the timeline, for a vehicle `height` metres tall. */
44
+ export declare function frameAt(flight: Flight, position: number, parts: readonly FlightPart[], height: number): FlightFrame;
45
+ /** How far a flight's picture reaches, so the camera can hold all of it: the widest and highest every part stands, from the stack's own bounds. */
46
+ export declare function flightBounds(flight: Flight, parts: readonly (FlightPart & {
47
+ height: number;
48
+ radius: number;
49
+ })[], height: number): {
50
+ min: [number, number, number];
51
+ max: [number, number, number];
52
+ };
53
+ /** The clock of one timeline: where it is and whether it runs. It only moves when told to, once a frame by whoever draws, so a timeline out of sight stands still. */
54
+ export declare class FlightClock {
55
+ readonly flight: Flight;
56
+ position: number;
57
+ playing: boolean;
58
+ constructor(flight: Flight);
59
+ get ended(): boolean;
60
+ play(): void;
61
+ pause(): void;
62
+ seek(position: number): void;
63
+ /** Moves on by `seconds` of the screen's time, and stops at the end. */
64
+ advance(seconds: number): void;
65
+ }
66
+ /** A time as words: `T+2:35`, `T-0:03`, `T+1:05:20`. A blank says so. */
67
+ export declare function clockWords(at: Figure): string;
package/dist/flight.js ADDED
@@ -0,0 +1,124 @@
1
+ // A flight as a timeline: where the reader is along it, which engines burn there and how each part stands. The times and the counts are `src/data/flights.ts`, each with its page. Moving between the phases is a picture. Pure: no three.js and no DOM.
2
+ import { FLIGHTS } from "./data/flights.js";
3
+ /** Seconds a phase takes on the screen when the timeline plays: one flight in under a minute, whatever its real length. */
4
+ export const SECONDS_PER_PHASE = 2.4;
5
+ /** The flight for a rocket's variant, when a page gives one. */
6
+ export const flightOf = (rocket, variant) => FLIGHTS.find((flight) => flight.rocket === rocket && flight.variant === variant) ?? null;
7
+ /** The last place on the timeline: the last phase. */
8
+ export const lastPosition = (flight) => flight.phases.length - 1;
9
+ /** Which phase a place on the timeline is in, and how far along to the next. A value that is not a number is the start. */
10
+ export function phaseAt(flight, position) {
11
+ const last = lastPosition(flight);
12
+ const place = Number.isFinite(position) ? Math.min(last, Math.max(0, position)) : 0;
13
+ const index = Math.floor(place);
14
+ return { index, along: place - index, phase: flight.phases[index] };
15
+ }
16
+ /** The place on the timeline of a phase by its id, or null for one the flight does not have. */
17
+ export function phasePosition(flight, id) {
18
+ const index = flight.phases.findIndex((phase) => phase.id === id);
19
+ return index < 0 ? null : index;
20
+ }
21
+ /** How many engines of each part burn in a phase, as drawn: a blank figure draws its `drawn`. */
22
+ export function burnsOf(phase) {
23
+ const out = {};
24
+ for (const [slot, burn] of Object.entries(phase.burns))
25
+ out[slot] = burn.engines.value ?? burn.drawn ?? 0;
26
+ return out;
27
+ }
28
+ const smooth = (t) => t * t * (3 - 2 * t);
29
+ const mix = (a, b, t) => a + (b - a) * t;
30
+ const poseIn = (pose, part, height) => ({
31
+ dx: (pose?.dx ?? 0) * height,
32
+ dy: pose?.rest ? -part.baseY : (pose?.dy ?? 0) * height,
33
+ pitch: pose?.pitch ?? 0,
34
+ gone: pose?.gone ?? false,
35
+ });
36
+ /** Everything the picture needs at a place on the timeline, for a vehicle `height` metres tall. */
37
+ export function frameAt(flight, position, parts, height) {
38
+ const { index, along, phase } = phaseAt(flight, position);
39
+ const next = flight.phases[Math.min(index + 1, lastPosition(flight))];
40
+ const t = smooth(along);
41
+ const poses = {};
42
+ let separated = false;
43
+ for (const part of parts) {
44
+ const from = poseIn(phase.pose[part.slot], part, height);
45
+ const to = poseIn(next.pose[part.slot], part, height);
46
+ const now = { dx: mix(from.dx, to.dx, t), dy: mix(from.dy, to.dy, t), pitch: mix(from.pitch, to.pitch, t), gone: from.gone };
47
+ poses[part.slot] = now;
48
+ if (now.dx !== 0 || now.dy !== 0)
49
+ separated = true;
50
+ }
51
+ return {
52
+ index,
53
+ phase,
54
+ poses,
55
+ burns: burnsOf(phase),
56
+ groundY: -mix(phase.ground, next.ground, t) * height,
57
+ smoke: mix(phase.smoke ?? 0, next.smoke ?? 0, t),
58
+ air: mix(phase.air ?? 0, next.air ?? 0, t),
59
+ separated,
60
+ };
61
+ }
62
+ /** How far a flight's picture reaches, so the camera can hold all of it: the widest and highest every part stands, from the stack's own bounds. */
63
+ export function flightBounds(flight, parts, height) {
64
+ const min = [Infinity, 0, Infinity];
65
+ const max = [-Infinity, height, -Infinity];
66
+ for (const part of parts)
67
+ for (const phase of flight.phases) {
68
+ const pose = poseIn(phase.pose[part.slot], part, height);
69
+ if (pose.gone)
70
+ continue;
71
+ const reach = Math.max(part.radius, (Math.abs(Math.sin((pose.pitch * Math.PI) / 180)) * part.height) / 2);
72
+ min[0] = Math.min(min[0], pose.dx - reach);
73
+ max[0] = Math.max(max[0], pose.dx + reach);
74
+ min[1] = Math.min(min[1], part.baseY + pose.dy);
75
+ max[1] = Math.max(max[1], part.baseY + pose.dy + part.height);
76
+ min[2] = Math.min(min[2], -part.radius);
77
+ max[2] = Math.max(max[2], part.radius);
78
+ }
79
+ return { min, max };
80
+ }
81
+ /** The clock of one timeline: where it is and whether it runs. It only moves when told to, once a frame by whoever draws, so a timeline out of sight stands still. */
82
+ export class FlightClock {
83
+ flight;
84
+ position = 0;
85
+ playing = false;
86
+ constructor(flight) {
87
+ this.flight = flight;
88
+ }
89
+ get ended() {
90
+ return this.position >= lastPosition(this.flight);
91
+ }
92
+ play() {
93
+ if (this.ended)
94
+ this.position = 0;
95
+ this.playing = true;
96
+ }
97
+ pause() {
98
+ this.playing = false;
99
+ }
100
+ seek(position) {
101
+ const { index, along } = phaseAt(this.flight, position);
102
+ this.position = index + along;
103
+ this.playing = false;
104
+ }
105
+ /** Moves on by `seconds` of the screen's time, and stops at the end. */
106
+ advance(seconds) {
107
+ if (!this.playing)
108
+ return;
109
+ this.position = Math.min(lastPosition(this.flight), this.position + seconds / SECONDS_PER_PHASE);
110
+ if (this.ended)
111
+ this.playing = false;
112
+ }
113
+ }
114
+ /** A time as words: `T+2:35`, `T-0:03`, `T+1:05:20`. A blank says so. */
115
+ export function clockWords(at) {
116
+ if (at.value === null)
117
+ return "Time: no source";
118
+ const sign = at.value < 0 ? "-" : "+";
119
+ const total = Math.abs(at.value);
120
+ const h = Math.floor(total / 3600);
121
+ const m = Math.floor((total % 3600) / 60);
122
+ const s = String(total % 60).padStart(2, "0");
123
+ return h > 0 ? `T${sign}${h}:${String(m).padStart(2, "0")}:${s}` : `T${sign}${m}:${s}`;
124
+ }
@@ -0,0 +1,22 @@
1
+ declare const HTMLBase: typeof HTMLElement;
2
+ export declare class UchusenFlight extends HTMLBase {
3
+ static readonly observedAttributes: string[];
4
+ private rocket;
5
+ private drawnFor;
6
+ private chartKey;
7
+ private parts;
8
+ connectedCallback(): void;
9
+ disconnectedCallback(): void;
10
+ attributeChangedCallback(): void;
11
+ private bind;
12
+ private build;
13
+ private drawAbout;
14
+ private update;
15
+ }
16
+ export declare function defineUchusenFlight(): void;
17
+ declare global {
18
+ interface HTMLElementTagNameMap {
19
+ "uchusen-flight": UchusenFlight;
20
+ }
21
+ }
22
+ export {};
@@ -0,0 +1,176 @@
1
+ // `<uchusen-flight for="rocket">`: the play, pause and scrub of a rocket's flight, with where it is, what happens there and which engines burn, engine by engine. It draws nothing and has no clock of its own: the rocket's own frame loop moves the timeline and tells it, so it adds no frame request. Importing the element's module defines it.
2
+ import { SOURCES } from "./data/sources.js";
3
+ import { clockWords, lastPosition, phaseAt } from "./flight.js";
4
+ const HTMLBase = typeof HTMLElement === "undefined" ? class {
5
+ } : HTMLElement;
6
+ const CSS = `
7
+ :host { display: block; color: inherit; font-size: 0.9rem; line-height: 1.4; }
8
+ :host([hidden]) { display: none; }
9
+ [hidden] { display: none !important; }
10
+ .row { display: flex; flex-wrap: wrap; align-items: center; gap: 0.4rem; }
11
+ button { min-width: 44px; min-height: 44px; padding: 0.3rem 0.75rem; border: 1px solid currentColor; border-radius: 10px; background: transparent; color: inherit; font: inherit; cursor: pointer; }
12
+ button:disabled { opacity: 0.45; cursor: default; }
13
+ button:focus-visible, input:focus-visible { outline: 2px solid currentColor; outline-offset: 2px; }
14
+ input[type="range"] { flex: 1 1 10rem; min-width: 8rem; min-height: 44px; margin: 0; accent-color: var(--uchusen-accent, currentColor); }
15
+ .now { margin: 0.45rem 0 0.1rem; font-weight: 600; font-variant-numeric: tabular-nums; }
16
+ .what, .fine { margin: 0; }
17
+ .fine { margin-top: 0.3rem; font-size: 0.78rem; opacity: 0.78; }
18
+ .charts { display: flex; flex-wrap: wrap; gap: 0.7rem; margin-top: 0.5rem; }
19
+ figure { margin: 0; width: 5.5rem; }
20
+ figure svg { display: block; width: 100%; height: auto; }
21
+ figcaption { font-size: 0.74rem; line-height: 1.25; margin-top: 0.2rem; }
22
+ a { color: inherit; }
23
+ `;
24
+ const sheet = { made: null };
25
+ export class UchusenFlight extends HTMLBase {
26
+ static observedAttributes = ["for"];
27
+ rocket = null;
28
+ drawnFor = "";
29
+ chartKey = "";
30
+ parts = null;
31
+ connectedCallback() {
32
+ if (!this.shadowRoot)
33
+ this.build();
34
+ this.bind();
35
+ }
36
+ disconnectedCallback() {
37
+ this.rocket?.removeEventListener("uchusen-flight", this.update);
38
+ this.rocket = null;
39
+ }
40
+ attributeChangedCallback() {
41
+ if (this.isConnected && this.shadowRoot)
42
+ this.bind();
43
+ }
44
+ bind() {
45
+ this.rocket?.removeEventListener("uchusen-flight", this.update);
46
+ const id = this.getAttribute("for");
47
+ this.rocket = id ? this.getRootNode().getElementById?.(id) : null;
48
+ this.rocket?.addEventListener("uchusen-flight", this.update);
49
+ queueMicrotask(this.update);
50
+ }
51
+ build() {
52
+ const root = this.attachShadow({ mode: "open" });
53
+ try {
54
+ if (!sheet.made) {
55
+ sheet.made = new CSSStyleSheet();
56
+ sheet.made.replaceSync(CSS);
57
+ }
58
+ root.adoptedStyleSheets = [sheet.made];
59
+ }
60
+ catch {
61
+ const style = document.createElement("style");
62
+ style.textContent = CSS;
63
+ root.append(style);
64
+ }
65
+ const make = (tag, id, text = "") => {
66
+ const node = document.createElement(tag);
67
+ node.dataset.testid = id;
68
+ node.setAttribute("part", id);
69
+ node.textContent = text;
70
+ return node;
71
+ };
72
+ const button = (id, text, on) => {
73
+ const node = make("button", id, text);
74
+ node.type = "button";
75
+ node.addEventListener("click", on);
76
+ return node;
77
+ };
78
+ const play = button("flight-play", "Play", () => {
79
+ if (this.rocket?.flightState.playing)
80
+ this.rocket.pause();
81
+ else
82
+ this.rocket?.play();
83
+ });
84
+ const position = () => this.rocket?.flightState.position ?? 0;
85
+ const back = button("flight-back", "Back", () => this.rocket?.seek(Math.ceil(position()) - 1));
86
+ const next = button("flight-next", "Next", () => this.rocket?.seek(Math.floor(position()) + 1));
87
+ const leave = button("flight-leave", "Back to the rocket", () => this.rocket?.endFlight());
88
+ const range = make("input", "flight-range");
89
+ range.type = "range";
90
+ range.min = "0";
91
+ range.step = "0.01";
92
+ range.value = "0";
93
+ range.setAttribute("aria-label", "Where along the flight");
94
+ range.addEventListener("input", () => this.rocket?.seek(Number(range.value)));
95
+ const row = document.createElement("div");
96
+ row.className = "row";
97
+ row.setAttribute("part", "flight-row");
98
+ row.append(play, back, range, next, leave);
99
+ const now = make("p", "flight-now");
100
+ now.className = "now";
101
+ now.setAttribute("aria-live", "polite");
102
+ const what = make("p", "flight-what");
103
+ what.className = "what";
104
+ const charts = make("div", "flight-charts");
105
+ charts.className = "charts";
106
+ const about = make("p", "flight-about");
107
+ about.className = "fine";
108
+ const body = document.createElement("div");
109
+ body.setAttribute("part", "flight-body");
110
+ body.append(row, now, what, charts, about);
111
+ const none = make("p", "flight-none", "No flight timeline for this version yet: no page read here gives one.");
112
+ none.className = "fine";
113
+ root.append(body, none);
114
+ this.parts = { play, back, next, leave, range, now, what, charts, about, none, body };
115
+ }
116
+ drawAbout(flight, reduced) {
117
+ if (!this.parts)
118
+ return;
119
+ const source = SOURCES[flight.source];
120
+ const link = document.createElement("a");
121
+ link.href = source.url;
122
+ link.rel = "noopener";
123
+ link.textContent = `${source.publisher}: ${source.title}`;
124
+ this.parts.about.replaceChildren(`${flight.basis} The times and engine counts are sourced; how the picture moves between them is illustrative, not to scale. ${flight.note ?? ""} ${reduced ? "This device asks for reduced motion, so nothing plays and no flame shows: move the slider or step through, and the charts say which engines burn. " : ""}From `, link, ".");
125
+ }
126
+ update = () => {
127
+ const parts = this.parts;
128
+ const rocket = this.rocket;
129
+ if (!parts)
130
+ return;
131
+ const flight = rocket?.flight ?? null;
132
+ parts.body.hidden = !flight;
133
+ parts.none.hidden = Boolean(flight);
134
+ if (!rocket || !flight) {
135
+ this.drawnFor = "";
136
+ this.dataset.flight = "";
137
+ return;
138
+ }
139
+ const reduced = typeof matchMedia === "function" && matchMedia("(prefers-reduced-motion: reduce)").matches;
140
+ if (this.drawnFor !== flight.id) {
141
+ this.drawnFor = flight.id;
142
+ parts.range.max = String(lastPosition(flight));
143
+ parts.play.disabled = reduced;
144
+ this.drawAbout(flight, reduced);
145
+ }
146
+ const state = rocket.flightState;
147
+ const { index, phase } = phaseAt(flight, state.position);
148
+ this.dataset.flight = flight.id;
149
+ this.dataset.phase = state.active ? phase.id : "";
150
+ this.dataset.playing = String(state.playing);
151
+ parts.play.textContent = state.playing ? "Pause" : state.ended ? "Play again" : "Play";
152
+ parts.play.setAttribute("aria-pressed", String(state.playing));
153
+ parts.back.disabled = state.position <= 0;
154
+ parts.next.disabled = state.position >= lastPosition(flight);
155
+ parts.leave.disabled = !state.active;
156
+ parts.range.value = String(state.position);
157
+ parts.range.setAttribute("aria-valuetext", `${clockWords(phase.at)}, ${phase.name}`);
158
+ parts.now.textContent = `${clockWords(phase.at)}, ${phase.name}${phase.altitude?.value ? `, ${phase.altitude.value}` : ""}`;
159
+ parts.what.textContent = phase.what;
160
+ const chartKey = `${flight.id}/${index}/${state.active}`;
161
+ if (chartKey !== this.chartKey) {
162
+ this.chartKey = chartKey;
163
+ // nothing started yet: what burns in the first phase
164
+ const charts = rocket.engineCharts(state.active ? null : flight.phases[0].id);
165
+ const template = document.createElement("template");
166
+ template.innerHTML = charts.map((chart) => `<figure data-slot="${chart.slot}" data-burning="${chart.burning}">${chart.svg}<figcaption></figcaption></figure>`).join("");
167
+ for (const [i, node] of [...template.content.querySelectorAll("figcaption")].entries())
168
+ node.textContent = charts[i].words;
169
+ parts.charts.replaceChildren(template.content);
170
+ }
171
+ };
172
+ }
173
+ export function defineUchusenFlight() {
174
+ if (typeof customElements !== "undefined" && !customElements.get("uchusen-flight"))
175
+ customElements.define("uchusen-flight", UchusenFlight);
176
+ }
package/dist/index.d.ts CHANGED
@@ -2,6 +2,10 @@ export { PLANNED_ROCKETS, ROCKETS, partIdOf, SLOT_NAMES, variantOf } from "./roc
2
2
  export type { PlannedRocket, RocketEntry, RocketStatus } from "./rockets.ts";
3
3
  export { blank, figureWords } from "./data/types.ts";
4
4
  export type { Disagreement, Figure, Variant, VariantFacts, VariantStatus } from "./data/types.ts";
5
+ export { MAKERS } from "./data/makers.ts";
6
+ export type { MakerId } from "./data/makers.ts";
7
+ export { FLIGHT_LOG, flightLogOf } from "./data/flight-log.ts";
8
+ export type { LoggedFlight } from "./data/flight-log.ts";
5
9
  export { SOURCES } from "./data/sources.ts";
6
10
  export type { Source, SourceId } from "./data/sources.ts";
7
11
  export { creditLine, MODEL_CREDITS } from "./data/credits.ts";
@@ -22,3 +26,16 @@ export { tiltMode, tiltTurn } from "./tilt.ts";
22
26
  export type { Reading, TiltMode } from "./tilt.ts";
23
27
  export { MATERIALS } from "./model/materials.ts";
24
28
  export type { MaterialName, MaterialSpec } from "./model/materials.ts";
29
+ export { builderState } from "./builder.ts";
30
+ export type { BuilderOption, BuilderRow, BuilderState } from "./builder.ts";
31
+ export { cleanWay, DEFAULT_SPIN, spinOf } from "./spin.ts";
32
+ export type { Spin, Way } from "./spin.ts";
33
+ export { FLIGHTS } from "./data/flights.ts";
34
+ export { burnsOf, clockWords, FlightClock, flightOf, frameAt, lastPosition, phaseAt, phasePosition, SECONDS_PER_PHASE } from "./flight.ts";
35
+ export type { Flight, FlightBurn, FlightFrame, FlightPhase, PartPose } from "./flight.ts";
36
+ export { bellsOf, enginesWanted, FLAME_SETTLE_MS, pickBells, plumeLength, ringsOf } from "./engines.ts";
37
+ export type { Bell } from "./engines.ts";
38
+ export { OPTION_ATTRIBUTES, attributesFromOptions, optionsFromAttributes, rocketFromParams, rocketToParams } from "./attrs.ts";
39
+ export type { RocketOptions } from "./attrs.ts";
40
+ export { assetPathOf, CDN, EMBED_KINDS, SITE, THREE_VERSION, embedCode, embedNote, paintedCredit } from "./embed.ts";
41
+ export type { EmbedKind, EmbedSettings } from "./embed.ts";
package/dist/index.js CHANGED
@@ -1,6 +1,8 @@
1
1
  // The pure core: the rockets and their variants with sourced sizes, the parts and how they fit, the camera rule, the looks and the layout. No three.js, no DOM.
2
2
  export { PLANNED_ROCKETS, ROCKETS, partIdOf, SLOT_NAMES, variantOf } from "./rockets.js";
3
3
  export { blank, figureWords } from "./data/types.js";
4
+ export { MAKERS } from "./data/makers.js";
5
+ export { FLIGHT_LOG, flightLogOf } from "./data/flight-log.js";
4
6
  export { SOURCES } from "./data/sources.js";
5
7
  export { creditLine, MODEL_CREDITS } from "./data/credits.js";
6
8
  export { PART_ENTRIES, partEntry } from "./model/registry.js";
@@ -12,3 +14,10 @@ export { CROSSFADE_MS, DRAWING_HOLD_MS, REDUCED_FADE_MS, revealDelay } from "./c
12
14
  export { MAX_PIXELS, MAX_RATIO, MAX_SIDE, pixelRatioFor } from "./pixels.js";
13
15
  export { tiltMode, tiltTurn } from "./tilt.js";
14
16
  export { MATERIALS } from "./model/materials.js";
17
+ export { builderState } from "./builder.js";
18
+ export { cleanWay, DEFAULT_SPIN, spinOf } from "./spin.js";
19
+ export { FLIGHTS } from "./data/flights.js";
20
+ export { burnsOf, clockWords, FlightClock, flightOf, frameAt, lastPosition, phaseAt, phasePosition, SECONDS_PER_PHASE } from "./flight.js";
21
+ export { bellsOf, enginesWanted, FLAME_SETTLE_MS, pickBells, plumeLength, ringsOf } from "./engines.js";
22
+ export { OPTION_ATTRIBUTES, attributesFromOptions, optionsFromAttributes, rocketFromParams, rocketToParams } from "./attrs.js";
23
+ export { assetPathOf, CDN, EMBED_KINDS, SITE, THREE_VERSION, embedCode, embedNote, paintedCredit } from "./embed.js";
package/dist/layout.js CHANGED
@@ -24,7 +24,7 @@ export function placesFor(parts, show, widthOf) {
24
24
  return parts.map(({ slot, part }) => {
25
25
  const together = show === "together";
26
26
  if (part.strapOn)
27
- return { slot, at: [together ? part.strapOn.x : 0, 0, together ? part.strapOn.z : 0], shown: together || show === slot };
27
+ return { slot, at: [together ? part.strapOn.x : 0, together ? (part.strapOn.y ?? 0) : 0, together ? part.strapOn.z : 0], shown: together || show === slot };
28
28
  const base = y - (part.joints.bottom?.y ?? 0);
29
29
  const at = [0, together ? base : 0, 0];
30
30
  y = base + (part.joints.top ? part.joints.top.y : part.height);
package/dist/looks.d.ts CHANGED
@@ -19,7 +19,7 @@ export interface Look {
19
19
  /** The soft light behind the rocket in a drawing. */
20
20
  halo: boolean;
21
21
  }
22
- export type FillName = "hull" | "white" | "tile" | "metal" | "dark" | "bell";
22
+ export type FillName = "hull" | "white" | "tile" | "metal" | "dark" | "bell" | "foam";
23
23
  export declare const LOOKS: Readonly<Record<LookName, Look>>;
24
24
  /** A value from outside as a look's name: the default for anything else. */
25
25
  export declare const cleanLook: (value: unknown) => LookName;
package/dist/looks.js CHANGED
@@ -8,6 +8,7 @@ const NIGHT = {
8
8
  metal: ["#16202f", "#3a475c", "#16202f"],
9
9
  dark: ["#070b12", "#121a28", "#070b12"],
10
10
  bell: ["#0a0f18", "#242f42", "#0a0f18"],
11
+ foam: ["#16202f", "#3a475c", "#16202f"],
11
12
  };
12
13
  export const LOOKS = {
13
14
  line: { line: "#8fa1b8", outlinePx: 1.4, featurePx: 1, weldPx: 0.6, weldOpacity: 0.45, outline: 1.2, feature: 0.8, weld: 0.45, fills: NIGHT, halo: true },
@@ -28,6 +29,7 @@ export const LOOKS = {
28
29
  metal: ["#5a5f66", "#a9afb6", "#5a5f66"],
29
30
  dark: ["#111316", "#2a2d31", "#111316"],
30
31
  bell: ["#141518", "#3c3f44", "#141518"],
32
+ foam: ["#6e3a1b", "#c8743a", "#6e3a1b"],
31
33
  },
32
34
  halo: false,
33
35
  },
@@ -0,0 +1,2 @@
1
+ import type { StackBuild } from "./stacks.ts";
2
+ export declare const APOLLO_SOYUZ_BUILDS: readonly StackBuild[];
@@ -0,0 +1,46 @@
1
+ // Apollo and Soyuz docked, in plain shapes, for the line looks: each is its sourced length and width, stood on end with Apollo's engine down. Where their parts begin is measured from NASA's model at those scales. The painted look is NASA's model.
2
+ import { AS_CSM_LONG, AS_CSM_WIDE, AS_SOYUZ_LONG, AS_SOYUZ_WIDE } from "../data/apollosoyuz.js";
3
+ import { blank } from "../data/types.js";
4
+ import { floor, taper, tube } from "./kit.js";
5
+ const CSM = AS_CSM_LONG.value ?? 0;
6
+ const CSM_R = (AS_CSM_WIDE.value ?? 0) / 2;
7
+ const ALONG = CSM / 11.84;
8
+ const ENGINE = 2.59;
9
+ const CM_AT = CSM - 3.28;
10
+ const DOCK_AT = CSM - (0.32 * ALONG);
11
+ const DOCK = 2.33;
12
+ const SOYUZ_AT = DOCK_AT + 2.32 * ALONG;
13
+ const SOYUZ = AS_SOYUZ_LONG.value ?? 0;
14
+ const SOYUZ_R = (AS_SOYUZ_WIDE.value ?? 0) / 2;
15
+ const csm = () => [
16
+ taper("engine-pale", 1.2, 0, 0.45, ENGINE, { rings: [0.02] }),
17
+ tube("white", CSM_R, ENGINE, CM_AT, { rings: [ENGINE + 0.02, CM_AT - 0.02], welds: [ENGINE + 1.5] }),
18
+ floor(CSM_R, ENGINE),
19
+ taper("steel", CSM_R, CM_AT, 0.3, CSM),
20
+ ];
21
+ const dock = () => [tube("dark", 0.7, 0.1, DOCK, { rings: [0.3, DOCK - 0.25] }), floor(0.7, 0.1)];
22
+ const wing = (side) => {
23
+ const frame = { o: [side * SOYUZ_R, 5.9, 0], u: [side, 0, 0], v: [0, 1, 0], w: [0, 0, 1] };
24
+ return { kind: "plate", material: "solar", frame, outline: [[0.1, -0.5], [2.75, -0.5], [2.75, 0.5], [0.1, 0.5]], thickness: 0.04 };
25
+ };
26
+ const soyuz = () => [
27
+ { kind: "lathe", material: "white", segs: 28, body: true, outline: true, profile: [[0.3, 0.1], [0.75, 0.25], [1.05, 0.8], [1.05, 1.4], [0.72, 2.1]] },
28
+ { kind: "lathe", material: "white", segs: 28, body: true, outline: true, profile: [[0.72, 2.1], [SOYUZ_R * 0.88, 3], [SOYUZ_R * 0.9, 4.6]], rings: [3] },
29
+ tube("engine-pale", SOYUZ_R * 0.95, 4.6, 6.6, { rings: [4.62] }),
30
+ { kind: "lathe", material: "white", segs: 28, body: true, outline: true, profile: [[SOYUZ_R * 0.95, 6.6], [SOYUZ_R, SOYUZ]] },
31
+ wing(1),
32
+ wing(-1),
33
+ ];
34
+ const FROM = "NASA's model for the painted look. This package's plain shapes for the two line looks, from each craft's sourced length and width; where its parts begin is measured from NASA's model. No flag or lettering is drawn.";
35
+ export const APOLLO_SOYUZ_BUILDS = [
36
+ {
37
+ rocket: "apollo-soyuz",
38
+ variant: "apollo-soyuz",
39
+ drawnFrom: FROM,
40
+ parts: [
41
+ { slot: "csm", kind: "spacecraft", name: "Apollo command and service module", height: CSM, diameter: CSM_R * 2, sourcedDiameter: AS_CSM_WIDE, painted: { file: "apollo-soyuz-csm.glb", credit: "nasa-apollo-soyuz" }, pieces: csm },
42
+ { slot: "docking-module", kind: "spacecraft", name: "Docking module", height: DOCK, diameter: 1.41, place: { x: 0, z: 0, y: DOCK_AT }, sourcedDiameter: blank("No source read here gives its size."), painted: { file: "apollo-soyuz-docking-module.glb", credit: "nasa-apollo-soyuz" }, pieces: dock },
43
+ { slot: "soyuz", kind: "spacecraft", name: "Soyuz 7K-TM", height: SOYUZ, diameter: SOYUZ_R * 2, place: { x: 0, z: 0, y: SOYUZ_AT }, sourcedDiameter: AS_SOYUZ_WIDE, painted: { file: "apollo-soyuz-soyuz.glb", credit: "nasa-apollo-soyuz" }, pieces: soyuz },
44
+ ],
45
+ },
46
+ ];
@@ -0,0 +1,2 @@
1
+ import type { StackBuild } from "./stacks.ts";
2
+ export declare const DRAGON_INSIDE_BUILDS: readonly StackBuild[];
@@ -0,0 +1,67 @@
1
+ // Inside Crew Dragon: the capsule cut open down its middle, at Dragon 2's sourced sizes. Four seats and the three-screen panel over the two centre seats are sourced, with the cargo below them; where each sits and its size are judged from one published picture of the cabin. For scale, a plain person of 1.8 m, not a fact about anyone.
2
+ import { DRAGON_DRAWS } from "./falcon.js";
3
+ import { deg } from "../framing.js";
4
+ import { strut } from "./pieces.js";
5
+ const d = DRAGON_DRAWS["dragon-2"];
6
+ const H = d.capsule;
7
+ const R = d.baseRadius;
8
+ const N = d.nest;
9
+ const SHOULDER = H * 0.74;
10
+ const OUTER = [[R * 0.9, N], [R, N + 0.3], [R * 0.93, N + 0.7], [R * 0.5, SHOULDER], [R * 0.47, H * 0.84], [R * 0.3, H * 0.95], [0.001, H]];
11
+ const BACK = () => [deg(90), deg(270)];
12
+ const FLOOR_Y = N + 0.75;
13
+ const shell = (profile, material, extra = {}) => ({ kind: "lathe", material, segs: 48, body: true, arc: BACK, profile, ...extra });
14
+ const box = (material, a, b, width, depth) => strut(material, a, b, width, depth, { plain: false });
15
+ function seat(x, y, z) {
16
+ return [
17
+ box("white", [x, y, z - 0.3], [x, y + 0.82, z - 0.62], 0.58, 0.1),
18
+ box("black", [x, y + 0.02, z - 0.28], [x, y + 0.08, z + 0.26], 0.54, 0.12),
19
+ box("black", [x, y + 0.72, z - 0.5], [x, y + 0.84, z - 0.54], 0.3, 0.14),
20
+ ];
21
+ }
22
+ /** A plain person for scale, standing. */
23
+ function person(x, y, z) {
24
+ const tall = 1.8;
25
+ const head = 0.12;
26
+ const at = [x, z];
27
+ return [
28
+ { kind: "lathe", material: "engine-pale", at, segs: 12, profile: [[0.14, y], [0.2, y + tall * 0.5], [0.23, y + tall * 0.8], [0.09, y + tall - 2 * head]] },
29
+ { kind: "lathe", material: "engine-pale", at, segs: 12, profile: [[0.001, y + tall - 2 * head], [head * 0.72, y + tall - 1.72 * head], [head, y + tall - head], [head * 0.72, y + tall - 0.28 * head], [0.001, y + tall]] },
30
+ ];
31
+ }
32
+ function inside() {
33
+ const inner = OUTER.map(([r, y]) => [Math.max(0.001, r * 0.93), y + 0.03]).reverse();
34
+ const out = [
35
+ shell(OUTER, "white", { outline: true, rings: [N + 0.3, SHOULDER] }),
36
+ // the inner wall, seen through the cut
37
+ shell(inner, "engine-pale"),
38
+ { kind: "lathe", material: "soot", segs: 40, under: true, profile: [[0, 0], [R * 0.72, 0], [R * 0.9, N]], rings: [N] },
39
+ // the floor and the cut edge of the shell
40
+ { kind: "lathe", material: "dark", segs: 40, body: true, profile: [[R * 0.86, FLOOR_Y], [0.001, FLOOR_Y]] },
41
+ // the cargo under the centre seats
42
+ box("engine-pale", [-0.55, FLOOR_Y, 0.1], [-0.55, FLOOR_Y + 0.5, 0.1], 0.5, 0.55),
43
+ box("engine-metal", [0, FLOOR_Y, 0.15], [0, FLOOR_Y + 0.46, 0.15], 0.4, 0.55),
44
+ box("engine-pale", [0.55, FLOOR_Y, 0.1], [0.55, FLOOR_Y + 0.5, 0.1], 0.5, 0.55),
45
+ // the two centre seats, higher, and the outer two
46
+ ...seat(-0.34, FLOOR_Y + 0.72, -0.15),
47
+ ...seat(0.34, FLOOR_Y + 0.72, -0.15),
48
+ ...seat(-1.02, FLOOR_Y + 0.42, -0.42),
49
+ ...seat(1.02, FLOOR_Y + 0.42, -0.42),
50
+ // the panel over the centre seats, with its three screens
51
+ box("engine-metal", [0, FLOOR_Y + 1.62, 0.22], [0, FLOOR_Y + 1.92, 0.08], 1.34, 0.08),
52
+ ...[-0.42, 0, 0.42].map((x) => box("glass", [x, FLOOR_Y + 1.66, 0.25], [x, FLOOR_Y + 1.88, 0.15], 0.38, 0.03)),
53
+ // a window on each side of the cabin, and the docking port in the ceiling
54
+ ...[-1, 1].map((side) => box("glass", [side * 1.36, FLOOR_Y + 0.96, -0.1], [side * 1.2, FLOOR_Y + 1.24, -0.1], 0.3, 0.06)),
55
+ { kind: "lathe", material: "engine-metal", segs: 20, body: true, profile: [[0.38, H * 0.8], [0.38, H * 0.86], [0.001, H * 0.86]] },
56
+ ...person(1.5, FLOOR_Y, 0.9),
57
+ ];
58
+ return out;
59
+ }
60
+ export const DRAGON_INSIDE_BUILDS = [
61
+ {
62
+ rocket: "dragon",
63
+ variant: "crew-dragon-inside",
64
+ drawnFrom: "This package's code. The outside is Dragon 2's sourced size; its four seats, panel and cargo are from its article, placed by eye from one published picture of the cabin. Their sizes have no source. Cut open to look inside: the real capsule's front half is not drawn. The figure of 1.8 m is for scale.",
65
+ parts: [{ slot: "capsule", kind: "capsule", name: "Inside Crew Dragon, cut open", height: H, diameter: R * 2, pieces: inside }],
66
+ },
67
+ ];
@@ -0,0 +1,2 @@
1
+ import type { StackBuild } from "./stacks.ts";
2
+ export declare const ELECTRON_BUILDS: readonly StackBuild[];