spacemap 0.1.5 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -3
- package/dist/spacemap.iife.js +49 -38
- package/dist/spacemap.js +55 -44
- package/index.d.ts +19 -1
- package/index.js +232 -28
- package/package.json +1 -1
package/index.d.ts
CHANGED
|
@@ -369,6 +369,10 @@ export declare function dateToJD(date: Date): number;
|
|
|
369
369
|
* renderer through the same effects a host's own store drives. */
|
|
370
370
|
export declare function defaultSceneSettings(): SceneSettings;
|
|
371
371
|
|
|
372
|
+
/** Kilometres between two places at `date`. Null and rejection are those of
|
|
373
|
+
* {@link offsetKm}. */
|
|
374
|
+
export declare function distanceKm(from: Anchor, to: Anchor, date: Date): Promise<number | null>;
|
|
375
|
+
|
|
372
376
|
/**
|
|
373
377
|
* A Keplerian orbit, propagated from its epoch by the mean motion the elements
|
|
374
378
|
* carry. Defined at every date, so an object on one is always drawn.
|
|
@@ -1032,7 +1036,7 @@ export declare interface LonLat {
|
|
|
1032
1036
|
|
|
1033
1037
|
/** Every layer, in the order a switcher should offer them: the objects first,
|
|
1034
1038
|
* then the chrome drawn around them. */
|
|
1035
|
-
export declare const MAP_LAYERS: readonly ["planets", "dwarfPlanets", "moons", "asteroids", "comets", "spacecraft", "satellites", "debris", "orbits", "labels", "nomenclature", "stars"];
|
|
1039
|
+
export declare const MAP_LAYERS: readonly ["planets", "dwarfPlanets", "moons", "asteroids", "comets", "spacecraft", "satellites", "debris", "orbits", "labels", "halos", "nomenclature", "stars"];
|
|
1036
1040
|
|
|
1037
1041
|
export declare interface MapEvents {
|
|
1038
1042
|
focuschange: (e: FocusChange) => void;
|
|
@@ -1198,6 +1202,13 @@ export declare type NoticeTopic = Notice['topic'];
|
|
|
1198
1202
|
* ecliptic north pole. */
|
|
1199
1203
|
export declare type OffsetKm = readonly [number, number, number];
|
|
1200
1204
|
|
|
1205
|
+
/**
|
|
1206
|
+
* From one place to another at `date`, in kilometres on ecliptic J2000 axes.
|
|
1207
|
+
* Null when either end is nowhere at that date. Rejects when the data does
|
|
1208
|
+
* not load.
|
|
1209
|
+
*/
|
|
1210
|
+
export declare function offsetKm(from: Anchor, to: Anchor, date: Date): Promise<OffsetKm | null>;
|
|
1211
|
+
|
|
1201
1212
|
export declare interface OrbitalElements {
|
|
1202
1213
|
a: number;
|
|
1203
1214
|
e: number;
|
|
@@ -2098,6 +2109,13 @@ export declare interface SpaceMapOptions {
|
|
|
2098
2109
|
layers?: Partial<Record<MapLayerId, boolean>>;
|
|
2099
2110
|
}
|
|
2100
2111
|
|
|
2112
|
+
/**
|
|
2113
|
+
* The place on `id` where the Sun is overhead at `date`, in the frame of a
|
|
2114
|
+
* surface anchor. Null for the Sun, and for a body that is nowhere at that
|
|
2115
|
+
* date. Rejects when the data does not load.
|
|
2116
|
+
*/
|
|
2117
|
+
export declare function subsolarPoint(id: string, date: Date): Promise<LonLat | null>;
|
|
2118
|
+
|
|
2101
2119
|
/** A place on (or above) the body's surface, turning with it. */
|
|
2102
2120
|
export declare interface SurfaceAnchor {
|
|
2103
2121
|
body: string;
|
package/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*! spacemap SDK — https://spacemap.co — Mozilla Public License 2.0. Bundles MIT and ISC libraries: THIRD_PARTY_NOTICES.txt in the spacemap npm package. */
|
|
2
|
-
import { ACESFilmicToneMapping, AdditiveBlending, AmbientLight, ArrowHelper, BackSide, Box3, BufferAttribute, BufferGeometry, CanvasTexture, Color, CubeTexture, CustomBlending, DataTexture, DepthTexture, DirectionalLight, DoubleSide, Euler, Float32BufferAttribute, FloatType, FrontSide, Group, HalfFloatType, InstancedBufferAttribute, InstancedMesh, Line, LineBasicMaterial, LineLoop, LinearFilter, LinearMipmapLinearFilter, LinearSRGBColorSpace, MathUtils, Matrix4, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshStandardMaterial, NoBlending, NoColorSpace, NormalBlending, OneFactor, OneMinusSrcAlphaFactor, PCFShadowMap, PCFSoftShadowMap, PMREMGenerator, PerspectiveCamera, PlaneGeometry, PointLight, Points, PointsMaterial, Quaternion, RGBAFormat, RawShaderMaterial, Raycaster, RedFormat, RingGeometry, SRGBColorSpace, Scene, ShaderMaterial, ShadowMaterial, Shape, ShapeGeometry, ShapeUtils, SphereGeometry, Sprite, SpriteMaterial, TOUCH, Texture, TextureLoader, Uint16BufferAttribute, UnsignedByteType, Vector2, Vector3, Vector4, WebGLRenderTarget, WebGLRenderer } from "three";
|
|
2
|
+
import { ACESFilmicToneMapping, AdditiveBlending, AmbientLight, ArrowHelper, BackSide, Box3, BufferAttribute, BufferGeometry, CanvasTexture, Color, CubeTexture, CustomBlending, DataTexture, DepthTexture, DirectionalLight, DoubleSide, Euler, Float32BufferAttribute, FloatType, FrontSide, Group, HalfFloatType, InstancedBufferAttribute, InstancedMesh, Line, LineBasicMaterial, LineLoop, LinearFilter, LinearMipmapLinearFilter, LinearSRGBColorSpace, MathUtils, Matrix4, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshStandardMaterial, NoBlending, NoColorSpace, NormalBlending, OneFactor, OneMinusSrcAlphaFactor, PCFShadowMap, PCFSoftShadowMap, PMREMGenerator, PerspectiveCamera, PlaneGeometry, PointLight, Points, PointsMaterial, Quaternion, RGBAFormat, RawShaderMaterial, Raycaster, RedFormat, RingGeometry, SRGBColorSpace, Scene, ShaderChunk, ShaderMaterial, ShadowMaterial, Shape, ShapeGeometry, ShapeUtils, SphereGeometry, Sprite, SpriteMaterial, TOUCH, Texture, TextureLoader, Uint16BufferAttribute, UnsignedByteType, Vector2, Vector3, Vector4, WebGLRenderTarget, WebGLRenderer } from "three";
|
|
3
3
|
import { OrbitControls } from "three/addons/controls/OrbitControls.js";
|
|
4
4
|
import { EffectComposer } from "three/addons/postprocessing/EffectComposer.js";
|
|
5
5
|
import { RenderPass } from "three/addons/postprocessing/RenderPass.js";
|
|
@@ -6287,6 +6287,12 @@ var BodyIndex = class {
|
|
|
6287
6287
|
findAsteroidZone(id) {
|
|
6288
6288
|
for (const [zone, byId] of this.asteroidBodiesByZone) if (byId.has(id)) return zone;
|
|
6289
6289
|
}
|
|
6290
|
+
elementRow(body) {
|
|
6291
|
+
const d = body.data;
|
|
6292
|
+
if (d.orbitalSource !== OrbitalSource.SPICE) return d;
|
|
6293
|
+
const zone = this.findAsteroidZone(d.id);
|
|
6294
|
+
return zone === void 0 ? void 0 : this.asteroidBodiesByZone.get(zone)?.get(d.id)?.data;
|
|
6295
|
+
}
|
|
6290
6296
|
maxMoonA(parentId) {
|
|
6291
6297
|
return this.moonMaxAByParent.get(parentId);
|
|
6292
6298
|
}
|
|
@@ -6608,6 +6614,7 @@ var MAP_LAYERS = [
|
|
|
6608
6614
|
"debris",
|
|
6609
6615
|
"orbits",
|
|
6610
6616
|
"labels",
|
|
6617
|
+
"halos",
|
|
6611
6618
|
"nomenclature",
|
|
6612
6619
|
"stars"
|
|
6613
6620
|
];
|
|
@@ -12101,6 +12108,26 @@ function isReversedDepth() {
|
|
|
12101
12108
|
function ndcZVisible(z) {
|
|
12102
12109
|
return reversed ? z >= 0 && z <= 1 : z >= -1 && z <= 1;
|
|
12103
12110
|
}
|
|
12111
|
+
var LOG_DEPTH_FLOOR = -44;
|
|
12112
|
+
function installLogDepthChunks() {
|
|
12113
|
+
ShaderChunk.logdepthbuf_vertex = `
|
|
12114
|
+
#ifdef USE_LOGARITHMIC_DEPTH_BUFFER
|
|
12115
|
+
vFragDepth = gl_Position.w;
|
|
12116
|
+
vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );
|
|
12117
|
+
#endif
|
|
12118
|
+
`;
|
|
12119
|
+
ShaderChunk.logdepthbuf_fragment = `
|
|
12120
|
+
#if defined( USE_LOGARITHMIC_DEPTH_BUFFER )
|
|
12121
|
+
gl_FragDepth = vIsPerspective == 0.0
|
|
12122
|
+
? gl_FragCoord.z
|
|
12123
|
+
: max( log2( vFragDepth ) - ${LOG_DEPTH_FLOOR.toFixed(1)}, 0.0 ) / ( 2.0 / logDepthBufFC - ${LOG_DEPTH_FLOOR.toFixed(1)} );
|
|
12124
|
+
#endif
|
|
12125
|
+
`;
|
|
12126
|
+
}
|
|
12127
|
+
function logDepthToEyeGlsl(depth, far) {
|
|
12128
|
+
const floor = LOG_DEPTH_FLOOR.toFixed(1);
|
|
12129
|
+
return `exp2(${depth} * (log2(${far} + 1.0) - ${floor}) + ${floor})`;
|
|
12130
|
+
}
|
|
12104
12131
|
|
|
12105
12132
|
//#endregion
|
|
12106
12133
|
//#region src/lib/scene/label/throttled-renderer.ts
|
|
@@ -12419,6 +12446,7 @@ var WebGLUnavailableError = class extends Error {
|
|
|
12419
12446
|
function bootThree(canvas, labelContainer, ctx) {
|
|
12420
12447
|
let renderer;
|
|
12421
12448
|
const reversedDepth = probeClipControl();
|
|
12449
|
+
if (!reversedDepth) installLogDepthChunks();
|
|
12422
12450
|
try {
|
|
12423
12451
|
renderer = new WebGLRenderer(reversedDepth ? {
|
|
12424
12452
|
canvas,
|
|
@@ -14255,11 +14283,9 @@ function refreshVisibleBodyLabelRects(bodyObjects, screenWidth, screenHeight, ca
|
|
|
14255
14283
|
//#endregion
|
|
14256
14284
|
//#region src/lib/scene/label/factory.ts
|
|
14257
14285
|
var SPACECRAFT_ICON_D = "M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z";
|
|
14258
|
-
var LANDED_PROBE_ICON_D = "M2.586 16.726A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2h6.624a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586z";
|
|
14259
14286
|
var SPACECRAFT_GLYPH_D = {
|
|
14260
14287
|
flying: SPACECRAFT_ICON_D,
|
|
14261
|
-
landed:
|
|
14262
|
-
crashed: LANDED_PROBE_ICON_D + "M15 9l-6 6M9 9l6 6"
|
|
14288
|
+
landed: "M2.586 16.726A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2h6.624a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586z"
|
|
14263
14289
|
};
|
|
14264
14290
|
function setSpacecraftGlyph(halo, glyph) {
|
|
14265
14291
|
if (!halo) return;
|
|
@@ -15294,7 +15320,7 @@ var FRAGMENT_SHADER = `
|
|
|
15294
15320
|
if (hitGeom && fwd > 1e-4) {
|
|
15295
15321
|
float terrainW = uReversedDepth > 0.5
|
|
15296
15322
|
? uCameraNear * uCameraFar / (d * (uCameraFar - uCameraNear) + uCameraNear)
|
|
15297
|
-
:
|
|
15323
|
+
: ${logDepthToEyeGlsl("d", "uCameraFar")};
|
|
15298
15324
|
float tTerrain = terrainW * dLen / (uPlanetRadiusScene * fwd);
|
|
15299
15325
|
if (tTerrain < tEnd) {
|
|
15300
15326
|
tEnd = tTerrain;
|
|
@@ -16495,6 +16521,10 @@ function attachRingBundles(bodyId, systemId, rings, radii, bo, scene, maxTexture
|
|
|
16495
16521
|
//#endregion
|
|
16496
16522
|
//#region src/lib/scene/objects/surface/clouds.ts
|
|
16497
16523
|
var CLOUD_RADIUS_OFFSET = 1.002;
|
|
16524
|
+
function cloudRadiusRatio(params, surfaceKm) {
|
|
16525
|
+
const deckKm = params?.referenceAltitudeKm ?? 0;
|
|
16526
|
+
return deckKm > 0 ? 1 + deckKm / surfaceKm : CLOUD_RADIUS_OFFSET;
|
|
16527
|
+
}
|
|
16498
16528
|
var CLOUD_SWAP_MIN_INTERVAL_MS = 1e3;
|
|
16499
16529
|
function cloudTextureUrl(id, tier, frame) {
|
|
16500
16530
|
return versionedUrl(`/v1/textures/${id}/${tier}_${frame}.webp`, "textures");
|
|
@@ -16779,8 +16809,8 @@ var SIBLING_LAYERS = {
|
|
|
16779
16809
|
async load(bo, meta, mesh, env) {
|
|
16780
16810
|
const frame = cloudFrameForJd(env.currentJd, meta.frames, meta.coverage);
|
|
16781
16811
|
if (!frame) return;
|
|
16782
|
-
const
|
|
16783
|
-
const
|
|
16812
|
+
const cloudRatio = cloudRadiusRatio(bo.atmosphere?.params, bo.atmosphere?.surfaceRadiusKm ?? 1);
|
|
16813
|
+
const deckRatio = cloudRatio === 1.002 ? 1 : cloudRatio;
|
|
16784
16814
|
const node = await loadCloudNode(mesh, bo.radiusScene, meta, frame, cloudRatio);
|
|
16785
16815
|
if (!node) return;
|
|
16786
16816
|
if (bo.clouds) {
|
|
@@ -21429,6 +21459,18 @@ function updatePositions(params) {
|
|
|
21429
21459
|
ctx.bodies.hostRead.delete(id);
|
|
21430
21460
|
return false;
|
|
21431
21461
|
};
|
|
21462
|
+
const elementRowOffset = (body, parentPos) => {
|
|
21463
|
+
const row = ctx.bodies.elementRow(body);
|
|
21464
|
+
const rowParentPos = row && positionMap.get(row.parentId);
|
|
21465
|
+
if (!rowParentPos) return null;
|
|
21466
|
+
const offset = row.q != null ? parabolicToPositionJD(row, jd) : orbitalElementsToPositionJD(row, jd);
|
|
21467
|
+
if (!offset) return null;
|
|
21468
|
+
return [
|
|
21469
|
+
rowParentPos[0] - parentPos[0] + offset[0],
|
|
21470
|
+
rowParentPos[1] - parentPos[1] + offset[1],
|
|
21471
|
+
rowParentPos[2] - parentPos[2] + offset[2]
|
|
21472
|
+
];
|
|
21473
|
+
};
|
|
21432
21474
|
const computePosition = (body) => {
|
|
21433
21475
|
if (computed.has(body.data.id)) return;
|
|
21434
21476
|
computed.add(body.data.id);
|
|
@@ -21489,7 +21531,7 @@ function updatePositions(params) {
|
|
|
21489
21531
|
let y;
|
|
21490
21532
|
let z;
|
|
21491
21533
|
if (isChebTracked) {
|
|
21492
|
-
const chebOffset = ctx.chebStore.positionScene(d.id, jd);
|
|
21534
|
+
const chebOffset = ctx.chebStore.positionScene(d.id, jd) ?? elementRowOffset(body, parentPos);
|
|
21493
21535
|
if (!chebOffset) {
|
|
21494
21536
|
hide(true);
|
|
21495
21537
|
const coverage = ctx.chebStore.zoneCoverage(d.id);
|
|
@@ -21535,11 +21577,11 @@ function updatePositions(params) {
|
|
|
21535
21577
|
if (bo) {
|
|
21536
21578
|
bo.outOfRange = false;
|
|
21537
21579
|
const crashed = probeLanded.isDestroyed;
|
|
21538
|
-
if (!bo.isLanded
|
|
21539
|
-
setSpacecraftGlyph(bo.labelHalo,
|
|
21580
|
+
if (!bo.isLanded) {
|
|
21581
|
+
setSpacecraftGlyph(bo.labelHalo, "landed");
|
|
21540
21582
|
bo.isLanded = true;
|
|
21541
|
-
bo.isCrashed = crashed;
|
|
21542
21583
|
}
|
|
21584
|
+
bo.isCrashed = crashed;
|
|
21543
21585
|
if (bo.model) bo.model.visible = !crashed;
|
|
21544
21586
|
}
|
|
21545
21587
|
body.position[0] = landedRender.x;
|
|
@@ -23489,10 +23531,7 @@ function rotateByQuaternion(q, x, y, z, out, at) {
|
|
|
23489
23531
|
function bodyCentre(body, ctx, jd) {
|
|
23490
23532
|
return placeForRead(body, jd, ctx) ? body.position : null;
|
|
23491
23533
|
}
|
|
23492
|
-
function
|
|
23493
|
-
const body = ctx.getBody(anchor.body);
|
|
23494
|
-
const centre = body && bodyCentre(body, ctx, jd);
|
|
23495
|
-
if (!centre) return null;
|
|
23534
|
+
function placeAnchor(anchor, body, centre, jd) {
|
|
23496
23535
|
const [cx, cy, cz] = centre;
|
|
23497
23536
|
if (isSurface(anchor)) {
|
|
23498
23537
|
const distance = kmToScene(effectiveRadiusKm(body.data) + (anchor.altitudeKm ?? 0));
|
|
@@ -23529,6 +23568,11 @@ function resolveAnchor(anchor, ctx, jd) {
|
|
|
23529
23568
|
cz + oz
|
|
23530
23569
|
];
|
|
23531
23570
|
}
|
|
23571
|
+
function resolveAnchor(anchor, ctx, jd) {
|
|
23572
|
+
const body = ctx.getBody(anchor.body);
|
|
23573
|
+
const centre = body && bodyCentre(body, ctx, jd);
|
|
23574
|
+
return centre ? placeAnchor(anchor, body, centre, jd) : null;
|
|
23575
|
+
}
|
|
23532
23576
|
function anchorNormal(anchor, world, ctx, jd) {
|
|
23533
23577
|
const body = ctx.getBody(anchor.body);
|
|
23534
23578
|
const centre = body && bodyCentre(body, ctx, jd);
|
|
@@ -23802,6 +23846,7 @@ var SceneRenderer = class SceneRenderer {
|
|
|
23802
23846
|
fpsSampleHead = 0;
|
|
23803
23847
|
stashedSky = null;
|
|
23804
23848
|
namesShown = true;
|
|
23849
|
+
halosShown = true;
|
|
23805
23850
|
textureLoader = new TextureLoader();
|
|
23806
23851
|
appearances = new BodyAppearances();
|
|
23807
23852
|
shadowLight;
|
|
@@ -25050,6 +25095,11 @@ var SceneRenderer = class SceneRenderer {
|
|
|
25050
25095
|
this.namesShown = names;
|
|
25051
25096
|
this.labelContainer.classList.toggle("scene-overlay--no-names", !names);
|
|
25052
25097
|
}
|
|
25098
|
+
const halos = this.ctx.layers.isVisible("halos");
|
|
25099
|
+
if (halos !== this.halosShown) {
|
|
25100
|
+
this.halosShown = halos;
|
|
25101
|
+
this.labelContainer.classList.toggle("scene-overlay--no-halos", !halos);
|
|
25102
|
+
}
|
|
25053
25103
|
}
|
|
25054
25104
|
setHaloDebugVisible(visible) {
|
|
25055
25105
|
this.haloDebug.setVisible(visible);
|
|
@@ -27321,13 +27371,7 @@ function anchorDistanceKm(a, b, ctx, jd) {
|
|
|
27321
27371
|
const offset = anchorOffsetKm(a, b, ctx, jd);
|
|
27322
27372
|
return offset && Math.hypot(...offset);
|
|
27323
27373
|
}
|
|
27324
|
-
function
|
|
27325
|
-
const body = ctx.getBody(id);
|
|
27326
|
-
const sun = ctx.getBody(SUN_ID);
|
|
27327
|
-
if (!body || !sun || body === sun) return null;
|
|
27328
|
-
if (!body.orientation && !ctx.bodies.orientationRead.has(id)) return null;
|
|
27329
|
-
const centre = bodyCentre(body, ctx, jd);
|
|
27330
|
-
if (!centre) return null;
|
|
27374
|
+
function subsolarAt(body, centre, sun, jd) {
|
|
27331
27375
|
const turn = body.orientation ? bodyQuaternion(body.orientation, jd, body.nutPrec).toArray() : [
|
|
27332
27376
|
0,
|
|
27333
27377
|
0,
|
|
@@ -27335,9 +27379,9 @@ function subsolarPoint(id, ctx, jd) {
|
|
|
27335
27379
|
1
|
|
27336
27380
|
];
|
|
27337
27381
|
const { latitude, longitude, distance } = cartesianToSpherical([
|
|
27338
|
-
sun
|
|
27339
|
-
sun
|
|
27340
|
-
sun
|
|
27382
|
+
sun[0],
|
|
27383
|
+
sun[1],
|
|
27384
|
+
sun[2]
|
|
27341
27385
|
], [
|
|
27342
27386
|
centre[0],
|
|
27343
27387
|
centre[1],
|
|
@@ -27348,6 +27392,14 @@ function subsolarPoint(id, ctx, jd) {
|
|
|
27348
27392
|
lat: latitude
|
|
27349
27393
|
} : null;
|
|
27350
27394
|
}
|
|
27395
|
+
function subsolarPoint$1(id, ctx, jd) {
|
|
27396
|
+
const body = ctx.getBody(id);
|
|
27397
|
+
const sun = ctx.getBody(SUN_ID);
|
|
27398
|
+
if (!body || !sun || body === sun) return null;
|
|
27399
|
+
if (!body.orientation && !ctx.bodies.orientationRead.has(id)) return null;
|
|
27400
|
+
const centre = bodyCentre(body, ctx, jd);
|
|
27401
|
+
return centre && subsolarAt(body, centre, sun.position, jd);
|
|
27402
|
+
}
|
|
27351
27403
|
|
|
27352
27404
|
//#endregion
|
|
27353
27405
|
//#region src/lib/interaction/gesture.ts
|
|
@@ -27667,7 +27719,7 @@ var SpaceMap = class {
|
|
|
27667
27719
|
return anchorOffsetKm(from, to, this.ctx, this.placedJd);
|
|
27668
27720
|
}
|
|
27669
27721
|
getSubsolarPoint(id) {
|
|
27670
|
-
return subsolarPoint(id, this.ctx, this.placedJd);
|
|
27722
|
+
return subsolarPoint$1(id, this.ctx, this.placedJd);
|
|
27671
27723
|
}
|
|
27672
27724
|
load(targetId = this.initialView.id) {
|
|
27673
27725
|
return this.ctx.load(jdToDate(this.clock.jd), targetId);
|
|
@@ -32216,6 +32268,158 @@ function kmToAu(km) {
|
|
|
32216
32268
|
return km / AU_KM;
|
|
32217
32269
|
}
|
|
32218
32270
|
|
|
32271
|
+
//#endregion
|
|
32272
|
+
//#region src/lib/scene/extensions/ephemeris.ts
|
|
32273
|
+
var chebyshev = null;
|
|
32274
|
+
var queue = Promise.resolve();
|
|
32275
|
+
function inTurn(read) {
|
|
32276
|
+
const turn = queue.then(read, read);
|
|
32277
|
+
queue = turn.catch(() => {});
|
|
32278
|
+
return turn;
|
|
32279
|
+
}
|
|
32280
|
+
async function open(date) {
|
|
32281
|
+
const jd = dateToJD(date);
|
|
32282
|
+
const metadata = await fetchMetadata();
|
|
32283
|
+
if (!chebyshev) {
|
|
32284
|
+
const params = chebyshevZoneParams(metadata);
|
|
32285
|
+
if (params.size > 0) chebyshev = new ChebyshevStore(params);
|
|
32286
|
+
}
|
|
32287
|
+
try {
|
|
32288
|
+
await chebyshev?.ensure(jd).done;
|
|
32289
|
+
} catch (error) {
|
|
32290
|
+
chebyshev = null;
|
|
32291
|
+
throw error;
|
|
32292
|
+
}
|
|
32293
|
+
return {
|
|
32294
|
+
jd,
|
|
32295
|
+
metadata,
|
|
32296
|
+
chebyshev
|
|
32297
|
+
};
|
|
32298
|
+
}
|
|
32299
|
+
function discovered(visibleFromDays, jd) {
|
|
32300
|
+
return !(visibleFromDays !== void 0 && jd - 2451545 < visibleFromDays);
|
|
32301
|
+
}
|
|
32302
|
+
async function moonRow(id, { jd, metadata }) {
|
|
32303
|
+
const zone = metadata.position.zones.moons;
|
|
32304
|
+
const zoom = zone && flatZoom(zone);
|
|
32305
|
+
if (!zoom) return null;
|
|
32306
|
+
const cols = await fetchElements("moons", null, 0, isChunkIndexed(zoom) ? String(chunkIndexForJd(zoom, jd)) : null);
|
|
32307
|
+
for (let i = 0; i < cols.rowCount; i++) if (rowId(cols, i) === id) return materializeBodyData(cols, i, /* @__PURE__ */ new Map(), "naif");
|
|
32308
|
+
return null;
|
|
32309
|
+
}
|
|
32310
|
+
function elementsOffset(data, jd) {
|
|
32311
|
+
if (!discovered(data.visibleFromDays, jd)) return null;
|
|
32312
|
+
if (jd < data.validityStart || jd > data.validityEnd) return null;
|
|
32313
|
+
if (data.satrec) return sgp4PositionScene(data.satrec, jd);
|
|
32314
|
+
if (data.q != null) return parabolicToPositionJD(data, jd);
|
|
32315
|
+
if (data.a === 0) return [
|
|
32316
|
+
0,
|
|
32317
|
+
0,
|
|
32318
|
+
0
|
|
32319
|
+
];
|
|
32320
|
+
return orbitalElementsToPositionJD(data, jd);
|
|
32321
|
+
}
|
|
32322
|
+
async function locate(id, at) {
|
|
32323
|
+
const { jd } = at;
|
|
32324
|
+
if (at.chebyshev?.has(id)) {
|
|
32325
|
+
const body = at.chebyshev.body(id, jd);
|
|
32326
|
+
if (body && !discovered(body.visibleFromDays, jd)) return null;
|
|
32327
|
+
const offset = body && chebyshevPositionScene(body, jd);
|
|
32328
|
+
if (offset) {
|
|
32329
|
+
const { radiusKm, objectType } = body;
|
|
32330
|
+
return {
|
|
32331
|
+
data: {
|
|
32332
|
+
radiusKm,
|
|
32333
|
+
objectType,
|
|
32334
|
+
orbitalSource: OrbitalSource.SPICE
|
|
32335
|
+
},
|
|
32336
|
+
parentId: `naif-${body.parentId}`,
|
|
32337
|
+
offset
|
|
32338
|
+
};
|
|
32339
|
+
}
|
|
32340
|
+
if (id.startsWith("naif-")) return null;
|
|
32341
|
+
}
|
|
32342
|
+
const data = (id.startsWith("naif-") ? await moonRow(id, at) : null) ?? bodyDataFromGlobal(id, await fetchObjectDetail(id, false));
|
|
32343
|
+
const offset = data && elementsOffset(data, jd);
|
|
32344
|
+
return offset ? {
|
|
32345
|
+
data,
|
|
32346
|
+
parentId: data.parentId,
|
|
32347
|
+
offset
|
|
32348
|
+
} : null;
|
|
32349
|
+
}
|
|
32350
|
+
async function place(id, at, above = /* @__PURE__ */ new Set()) {
|
|
32351
|
+
if (above.has(id)) return null;
|
|
32352
|
+
const own = await locate(id, at);
|
|
32353
|
+
if (!own) return null;
|
|
32354
|
+
if (own.parentId === "naif-0") return {
|
|
32355
|
+
data: own.data,
|
|
32356
|
+
centre: own.offset
|
|
32357
|
+
};
|
|
32358
|
+
const parent = await place(own.parentId, at, new Set(above).add(id));
|
|
32359
|
+
if (!parent) return null;
|
|
32360
|
+
const [x, y, z] = parent.centre;
|
|
32361
|
+
return {
|
|
32362
|
+
data: own.data,
|
|
32363
|
+
centre: [
|
|
32364
|
+
x + own.offset[0],
|
|
32365
|
+
y + own.offset[1],
|
|
32366
|
+
z + own.offset[2]
|
|
32367
|
+
]
|
|
32368
|
+
};
|
|
32369
|
+
}
|
|
32370
|
+
async function spinOf(id) {
|
|
32371
|
+
const [detail] = await Promise.all([fetchObjectDetail(id, false), loadSystemsGlobal()]);
|
|
32372
|
+
const orientation = detail.global?.orientation;
|
|
32373
|
+
const sums = detail.global?.nut_prec;
|
|
32374
|
+
const naif = /^naif-(-?\d+)$/.exec(id);
|
|
32375
|
+
const angles = naif ? getNutPrecAngles(ownerIdFor(parseInt(naif[1], 10))) : void 0;
|
|
32376
|
+
return {
|
|
32377
|
+
orientation,
|
|
32378
|
+
nutPrec: sums && angles ? {
|
|
32379
|
+
...sums,
|
|
32380
|
+
angles
|
|
32381
|
+
} : void 0
|
|
32382
|
+
};
|
|
32383
|
+
}
|
|
32384
|
+
async function resolve(anchor, at) {
|
|
32385
|
+
const placed = await place(anchor.body, at);
|
|
32386
|
+
if (!placed) return null;
|
|
32387
|
+
const spin = "latitude" in anchor ? await spinOf(anchor.body) : {};
|
|
32388
|
+
return placeAnchor(anchor, {
|
|
32389
|
+
data: placed.data,
|
|
32390
|
+
...spin
|
|
32391
|
+
}, placed.centre, at.jd);
|
|
32392
|
+
}
|
|
32393
|
+
function offsetKm(from, to, date) {
|
|
32394
|
+
return inTurn(async () => {
|
|
32395
|
+
const at = await open(date);
|
|
32396
|
+
const a = await resolve(from, at);
|
|
32397
|
+
const b = a && await resolve(to, at);
|
|
32398
|
+
return a && b ? sceneToEcliptic([
|
|
32399
|
+
b[0] - a[0],
|
|
32400
|
+
b[1] - a[1],
|
|
32401
|
+
b[2] - a[2]
|
|
32402
|
+
]) : null;
|
|
32403
|
+
});
|
|
32404
|
+
}
|
|
32405
|
+
async function distanceKm(from, to, date) {
|
|
32406
|
+
const offset = await offsetKm(from, to, date);
|
|
32407
|
+
return offset && Math.hypot(...offset);
|
|
32408
|
+
}
|
|
32409
|
+
function subsolarPoint(id, date) {
|
|
32410
|
+
return inTurn(async () => {
|
|
32411
|
+
if (id === "naif-10") return null;
|
|
32412
|
+
const at = await open(date);
|
|
32413
|
+
const body = await place(id, at);
|
|
32414
|
+
const sun = body && await place("naif-10", at);
|
|
32415
|
+
if (!body || !sun) return null;
|
|
32416
|
+
return subsolarAt({
|
|
32417
|
+
data: body.data,
|
|
32418
|
+
...await spinOf(id)
|
|
32419
|
+
}, body.centre, sun.centre, at.jd);
|
|
32420
|
+
});
|
|
32421
|
+
}
|
|
32422
|
+
|
|
32219
32423
|
//#endregion
|
|
32220
32424
|
//#region src/lib/fetch/panoramas.ts
|
|
32221
32425
|
var index = null;
|
|
@@ -32336,5 +32540,5 @@ function applyHost(options) {
|
|
|
32336
32540
|
}
|
|
32337
32541
|
|
|
32338
32542
|
//#endregion
|
|
32339
|
-
export { AttributionControl, FlatAttributionControl, FlatMap, GestureHandler, MAP_LAYERS, PROJECTION_IDS, PanoramaAttributionControl, PanoramaView, SpaceMap, SystemMap, Viewport, bearingDeg, boxRing, circlePoints, configureHost, createFlatMap, createMap, createPanorama, createProjection, createSystemMap, dateToJD, defaultSceneSettings, elements, fetchPanoramaIndex, fetchPanoramas, findPanorama, fixed, graticule, groundDistanceM, isViewable, jdToDate, kmToAu, neighboursOf, panoramaAt, pathFor, planeBasis, projectionAspect, samples, smallCircle, tle };
|
|
32340
|
-
(function(){if(typeof document==='undefined')return;var s=document.createElement('style');s.textContent=".scene-label{pointer-events:auto;cursor:pointer;-webkit-user-select:none;user-select:none;color:inherit;touch-action:none;z-index:1;width:32px;height:32px;text-decoration:none;display:block;position:relative;left:0}.scene-label__halo{border-radius:50%;width:100%;height:100%;transition:transform .1s}.scene-label__halo--spacecraft,.scene-label__halo--debris{overflow:visible}.scene-label__loader{box-sizing:border-box;pointer-events:none;border:2px solid #fff;border-color:#fff #fff #fff3 #fff3;border-radius:50%;width:32px;height:32px;margin:auto;animation:.9s linear infinite scene-label-loader-spin;position:fixed;inset:0}@keyframes scene-label-loader-spin{to{transform:rotate(360deg)}}.reduce-motion .scene-label__loader{animation-duration:.9s!important;animation-iteration-count:infinite!important}.scene-label__name{white-space:nowrap;pointer-events:auto;cursor:pointer;color:#fff;text-shadow:0 0 4px #000,0 0 4px #000;padding-left:8px;font-size:14px;font-weight:700;text-decoration:none;position:absolute;top:50%;left:32px;transform:translateY(-50%)}.scene-label__name--large{font-size:16px}.scene-label__annotations{top:28px;pointer-events:none;flex-direction:column;padding-inline-start:8px;display:flex;position:absolute;inset-inline-start:32px}.scene-label__annotation{opacity:0;white-space:nowrap;color:#fff9;text-shadow:0 0 3px #000,0 0 3px #000;transition:opacity .15s, display .15s allow-discrete;font-size:11px;line-height:1.3;display:none}.scene-label__annotation--visible{opacity:1;display:block}@starting-style{.scene-label__annotation--visible{opacity:0}}.scene-feature-label{color:#ffffffb3;white-space:nowrap;pointer-events:auto;cursor:pointer;-webkit-user-select:none;user-select:none;text-shadow:0 0 2px #000,0 0 2px #000;z-index:0;font-size:12px;transition:color .1s;left:0}.scene-feature-label:hover{color:#fff;text-shadow:0 0 3px #000,0 0 3px #000}.scene-feature-label--active{color:#fff;font-size:14px;font-weight:600}.scene-path-label{color:#fff;font:inherit;white-space:nowrap;text-align:start;text-shadow:0 0 4px #000,0 0 4px #000;pointer-events:auto;cursor:pointer;-webkit-user-select:none;user-select:none;touch-action:none;z-index:2;background:0 0;border:0;align-items:center;gap:8px;padding:0;line-height:1.15;display:flex;left:0}.scene-path-label--static{pointer-events:none;cursor:default}.scene-path-label__halo{border-radius:50%;flex-shrink:0;width:32px;height:32px;margin-inline-start:-16px;transition:transform .1s}.scene-path-label:hover .scene-path-label__halo{transform:scale(1.15)}.scene-path-label__text{flex-direction:column;gap:1px;display:flex}.scene-path-label__name{font-size:14px;font-weight:700}.scene-path-label__when{opacity:.8;font-variant-numeric:tabular-nums;font-size:12px}.scene-path-label--dim .scene-path-label__text{display:none}.scene-path-label--dim .scene-path-label__halo{transform:scale(.55)}.scene-path-label--dim:hover .scene-path-label__halo{transform:scale(.75)}.scene-path-label--step .scene-path-label__halo{background:0 0;border:0}.scene-path-label--step:hover .scene-path-label__halo{background:#ffffff1f}.scene-path-label--step .scene-path-label__name{font-size:12px;font-weight:600}.scene-path-label--step .scene-path-label__when{font-size:11px}.scene-path-label__hazard{font-size:11px;font-weight:700}.scene-path-label--lit{color:#fff}.scene-path-label--lit .scene-path-label__halo{transform:scale(1.15)}.scene-path-label--lit.scene-path-label--dim .scene-path-label__halo{transform:scale(.75)}.scene-path-label--faint .scene-path-label__text{display:none}.scene-path-label--faint .scene-path-label__halo{opacity:.45;transform:scale(.5)}.scene-path-label--faint:hover .scene-path-label__halo{opacity:1;transform:scale(.75)}.scene-overlay--no-names .scene-label__name,.scene-overlay--no-names .scene-label__annotations{display:none}.scene-hazard-label{white-space:nowrap;pointer-events:none;-webkit-user-select:none;user-select:none;text-shadow:0 0 4px #000,0 0 4px #000;margin-inline-start:16px;font-size:12px;font-weight:700;position:relative;left:0}.user-location-marker{pointer-events:none;background:#1a73e8;border:2px solid #fff;border-radius:50%;width:16px;height:16px;box-shadow:0 0 6px #0006}.sm-drawing-label{white-space:nowrap;color:#fff;text-shadow:0 0 4px #000,0 0 4px #000;-webkit-user-select:none;user-select:none;pointer-events:none;font:700 14px/1.2 system-ui,sans-serif}.sm-drawing-icon{-webkit-user-select:none;user-select:none;pointer-events:none;display:block}.sm-drawing--interactive{pointer-events:auto;cursor:pointer;touch-action:none}.sm-cooperative-hint{z-index:4;color:#fff;text-align:center;pointer-events:none;opacity:0;background:#0000008c;place-content:center;padding:16px;font:15px/1.4 system-ui,sans-serif;transition:opacity .2s;display:grid;position:absolute;inset:0}.sm-cooperative-hint--shown{opacity:1}@media (prefers-reduced-motion:reduce){.sm-cooperative-hint{transition:none}}.sm-ctrl{z-index:2;pointer-events:none;flex-direction:column;gap:6px;max-width:100%;padding:6px;display:flex;position:absolute}.sm-ctrl>*{pointer-events:auto}.sm-ctrl--top-left{align-items:flex-start;top:0;left:0}.sm-ctrl--top-right{align-items:flex-end;top:0;right:0}.sm-ctrl--bottom-left{align-items:flex-start;bottom:0;left:0}.sm-ctrl--bottom-right{align-items:flex-end;bottom:0;right:0}.sm-map{-webkit-user-select:none;user-select:none}:where(.sm-map){width:100%;height:100%;position:relative}.sm-map__canvas{pointer-events:auto;touch-action:none;width:100%;height:100%;display:block}.sm-map__canvas:focus-visible{outline:2px solid var(--ring,Highlight)}.sm-map .scene-overlay{pointer-events:none;z-index:0;position:absolute;inset:0}.sm-flat{touch-action:none;background:#05070e;width:100%;height:100%;position:relative;overflow:hidden}.sm-flat__raster,.sm-flat__vector,.sm-flat__markers{width:100%;height:100%;position:absolute;inset:0}.sm-flat__raster{display:block}.sm-flat__vector,.sm-flat__markers{pointer-events:none}.sm-flat--interactive{cursor:grab}.sm-flat--cooperative{touch-action:pan-x pan-y}.sm-flat--dragging{cursor:grabbing}.sm-flat__graticule{fill:none;stroke:#ffffff47;stroke-width:1px}.sm-flat__frame{fill:none;stroke:#ffffff73;stroke-width:1px}.sm-flat__feature-dot{fill:#fffc}.sm-flat__feature-label{fill:#ffffffd9;paint-order:stroke;stroke:#000000a6;stroke-width:2.5px;font:10px/1 system-ui,sans-serif}.sm-flat__marker-dot{background:#4ea3ff;border:2px solid #fff;border-radius:50%;width:10px;height:10px;box-shadow:0 0 0 1px #00000073}.sm-system-map{border-radius:var(--sm-system-map-radius,6px);background:var(--sm-system-map-background,#ffffff0d);width:100%;color:var(--sm-system-map-ink,#ffffff9e);position:relative;overflow:hidden}.sm-system-map--background{pointer-events:none;background:0 0;border-radius:0;height:100%}.sm-system-map__svg{touch-action:pan-y;width:100%;height:auto;display:block}.sm-system-map--background .sm-system-map__svg{height:100%}.sm-system-map__svg--near :is(a,.sm-system-map__button):not([data-near]){pointer-events:none}.sm-system-map__button{cursor:pointer}.sm-system-map__button:focus{outline:none}.sm-system-map__reference{opacity:.6}.sm-system-map__band--muted{color:var(--sm-system-map-ink,#ffffff9e)}.sm-system-map__band--sky{color:var(--sm-system-map-sky,oklch(74.6% .16 232.661/.7))}.sm-system-map__band--amber{color:var(--sm-system-map-amber,oklch(92.4% .12 95.746/.8))}.sm-system-map__band-label{font-weight:600}.sm-system-map__band-label--muted{fill:var(--sm-system-map-ink,#ffffff9e)}.sm-system-map__band-label--sky{fill:var(--sm-system-map-sky-label,oklch(74.6% .16 232.661))}.sm-system-map__band-label--amber{fill:var(--sm-system-map-amber-label,oklch(92.4% .12 95.746/.9))}.sm-system-map__tip{z-index:10;background:var(--sm-system-map-tip-background,#0a0c14e6);width:max-content;color:var(--sm-system-map-tip-ink,#fffffff2);white-space:nowrap;pointer-events:none;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1.33333;position:absolute;transform:translate(-50%);box-shadow:0 1px 3px #0000001a,0 1px 2px -1px #0000001a}.sm-system-map__tip[hidden]{display:none}.sm-system-map__tip-title{font-weight:500}.sm-system-map__tip-sub{color:var(--sm-system-map-ink,#ffffff9e)}.sm-ctrl:has(>.sm-attribution:only-child){padding:0}.sm-ctrl--top-left:has(>.sm-attribution:only-child)>.sm-attribution{border-radius:0 0 var(--sm-attribution-radius) 0}.sm-ctrl--top-right:has(>.sm-attribution:only-child)>.sm-attribution{border-radius:0 0 0 var(--sm-attribution-radius)}.sm-ctrl--bottom-left:has(>.sm-attribution:only-child)>.sm-attribution{border-radius:0 var(--sm-attribution-radius) 0 0}.sm-ctrl--bottom-right:has(>.sm-attribution:only-child)>.sm-attribution{border-radius:var(--sm-attribution-radius) 0 0 0}.sm-attribution{--sm-attribution-radius:3px;border-radius:var(--sm-attribution-radius);color:#ffffffbf;white-space:nowrap;background:#0006;align-items:center;gap:.5em;max-width:100%;padding:1px 6px;font:11px/1.45 system-ui,sans-serif;display:flex}.sm-attribution a{color:inherit;text-decoration:none}.sm-attribution a:hover{color:#fff;text-decoration:underline}.sm-attribution__home{font-weight:600}.sm-attribution__group{text-overflow:ellipsis;overflow:hidden}.sm-attribution__label{color:#ffffff80}\n/*$vite$:1*/";document.head.appendChild(s);})();
|
|
32543
|
+
export { AttributionControl, FlatAttributionControl, FlatMap, GestureHandler, MAP_LAYERS, PROJECTION_IDS, PanoramaAttributionControl, PanoramaView, SpaceMap, SystemMap, Viewport, bearingDeg, boxRing, circlePoints, configureHost, createFlatMap, createMap, createPanorama, createProjection, createSystemMap, dateToJD, defaultSceneSettings, distanceKm, elements, fetchPanoramaIndex, fetchPanoramas, findPanorama, fixed, graticule, groundDistanceM, isViewable, jdToDate, kmToAu, neighboursOf, offsetKm, panoramaAt, pathFor, planeBasis, projectionAspect, samples, smallCircle, subsolarPoint, tle };
|
|
32544
|
+
(function(){if(typeof document==='undefined')return;var s=document.createElement('style');s.textContent=".scene-label{pointer-events:auto;cursor:pointer;-webkit-user-select:none;user-select:none;color:inherit;touch-action:none;z-index:1;width:32px;height:32px;text-decoration:none;display:block;position:relative;left:0}.scene-label__halo{border-radius:50%;width:100%;height:100%;transition:transform .1s}.scene-label__halo--spacecraft,.scene-label__halo--debris{overflow:visible}.scene-label__loader{box-sizing:border-box;pointer-events:none;border:2px solid #fff;border-color:#fff #fff #fff3 #fff3;border-radius:50%;width:32px;height:32px;margin:auto;animation:.9s linear infinite scene-label-loader-spin;position:fixed;inset:0}@keyframes scene-label-loader-spin{to{transform:rotate(360deg)}}.reduce-motion .scene-label__loader{animation-duration:.9s!important;animation-iteration-count:infinite!important}.scene-label__name{white-space:nowrap;pointer-events:auto;cursor:pointer;color:#fff;text-shadow:0 0 4px #000,0 0 4px #000;padding-left:8px;font-size:14px;font-weight:700;text-decoration:none;position:absolute;top:50%;left:32px;transform:translateY(-50%)}.scene-label__name--large{font-size:16px}.scene-label__annotations{top:28px;pointer-events:none;flex-direction:column;padding-inline-start:8px;display:flex;position:absolute;inset-inline-start:32px}.scene-label__annotation{opacity:0;white-space:nowrap;color:#fff9;text-shadow:0 0 3px #000,0 0 3px #000;transition:opacity .15s, display .15s allow-discrete;font-size:11px;line-height:1.3;display:none}.scene-label__annotation--visible{opacity:1;display:block}@starting-style{.scene-label__annotation--visible{opacity:0}}.scene-feature-label{color:#ffffffb3;white-space:nowrap;pointer-events:auto;cursor:pointer;-webkit-user-select:none;user-select:none;text-shadow:0 0 2px #000,0 0 2px #000;z-index:0;font-size:12px;transition:color .1s;left:0}.scene-feature-label:hover{color:#fff;text-shadow:0 0 3px #000,0 0 3px #000}.scene-feature-label--active{color:#fff;font-size:14px;font-weight:600}.scene-path-label{color:#fff;font:inherit;white-space:nowrap;text-align:start;text-shadow:0 0 4px #000,0 0 4px #000;pointer-events:auto;cursor:pointer;-webkit-user-select:none;user-select:none;touch-action:none;z-index:2;background:0 0;border:0;align-items:center;gap:8px;padding:0;line-height:1.15;display:flex;left:0}.scene-path-label--static{pointer-events:none;cursor:default}.scene-path-label__halo{border-radius:50%;flex-shrink:0;width:32px;height:32px;margin-inline-start:-16px;transition:transform .1s}.scene-path-label:hover .scene-path-label__halo{transform:scale(1.15)}.scene-path-label__text{flex-direction:column;gap:1px;display:flex}.scene-path-label__name{font-size:14px;font-weight:700}.scene-path-label__when{opacity:.8;font-variant-numeric:tabular-nums;font-size:12px}.scene-path-label--dim .scene-path-label__text{display:none}.scene-path-label--dim .scene-path-label__halo{transform:scale(.55)}.scene-path-label--dim:hover .scene-path-label__halo{transform:scale(.75)}.scene-path-label--step .scene-path-label__halo{background:0 0;border:0}.scene-path-label--step:hover .scene-path-label__halo{background:#ffffff1f}.scene-path-label--step .scene-path-label__name{font-size:12px;font-weight:600}.scene-path-label--step .scene-path-label__when{font-size:11px}.scene-path-label__hazard{font-size:11px;font-weight:700}.scene-path-label--lit{color:#fff}.scene-path-label--lit .scene-path-label__halo{transform:scale(1.15)}.scene-path-label--lit.scene-path-label--dim .scene-path-label__halo{transform:scale(.75)}.scene-path-label--faint .scene-path-label__text{display:none}.scene-path-label--faint .scene-path-label__halo{opacity:.45;transform:scale(.5)}.scene-path-label--faint:hover .scene-path-label__halo{opacity:1;transform:scale(.75)}.scene-overlay--no-names .scene-label__name,.scene-overlay--no-names .scene-label__annotations{display:none}.scene-overlay--no-halos .scene-label__halo{visibility:hidden}.scene-overlay--no-halos .scene-label{pointer-events:none}.scene-hazard-label{white-space:nowrap;pointer-events:none;-webkit-user-select:none;user-select:none;text-shadow:0 0 4px #000,0 0 4px #000;margin-inline-start:16px;font-size:12px;font-weight:700;position:relative;left:0}.user-location-marker{pointer-events:none;background:#1a73e8;border:2px solid #fff;border-radius:50%;width:16px;height:16px;box-shadow:0 0 6px #0006}.sm-drawing-label{white-space:nowrap;color:#fff;text-shadow:0 0 4px #000,0 0 4px #000;-webkit-user-select:none;user-select:none;pointer-events:none;font:700 14px/1.2 system-ui,sans-serif}.sm-drawing-icon{-webkit-user-select:none;user-select:none;pointer-events:none;display:block}.sm-drawing--interactive{pointer-events:auto;cursor:pointer;touch-action:none}.sm-cooperative-hint{z-index:4;color:#fff;text-align:center;pointer-events:none;opacity:0;background:#0000008c;place-content:center;padding:16px;font:15px/1.4 system-ui,sans-serif;transition:opacity .2s;display:grid;position:absolute;inset:0}.sm-cooperative-hint--shown{opacity:1}@media (prefers-reduced-motion:reduce){.sm-cooperative-hint{transition:none}}.sm-ctrl{z-index:2;pointer-events:none;flex-direction:column;gap:6px;max-width:100%;padding:6px;display:flex;position:absolute}.sm-ctrl>*{pointer-events:auto}.sm-ctrl--top-left{align-items:flex-start;top:0;left:0}.sm-ctrl--top-right{align-items:flex-end;top:0;right:0}.sm-ctrl--bottom-left{align-items:flex-start;bottom:0;left:0}.sm-ctrl--bottom-right{align-items:flex-end;bottom:0;right:0}.sm-map{-webkit-user-select:none;user-select:none}:where(.sm-map){width:100%;height:100%;position:relative}.sm-map__canvas{pointer-events:auto;touch-action:none;width:100%;height:100%;display:block}.sm-map__canvas:focus-visible{outline:2px solid var(--ring,Highlight)}.sm-map .scene-overlay{pointer-events:none;z-index:0;position:absolute;inset:0}.sm-flat{touch-action:none;background:#05070e;width:100%;height:100%;position:relative;overflow:hidden}.sm-flat__raster,.sm-flat__vector,.sm-flat__markers{width:100%;height:100%;position:absolute;inset:0}.sm-flat__raster{display:block}.sm-flat__vector,.sm-flat__markers{pointer-events:none}.sm-flat--interactive{cursor:grab}.sm-flat--cooperative{touch-action:pan-x pan-y}.sm-flat--dragging{cursor:grabbing}.sm-flat__graticule{fill:none;stroke:#ffffff47;stroke-width:1px}.sm-flat__frame{fill:none;stroke:#ffffff73;stroke-width:1px}.sm-flat__feature-dot{fill:#fffc}.sm-flat__feature-label{fill:#ffffffd9;paint-order:stroke;stroke:#000000a6;stroke-width:2.5px;font:10px/1 system-ui,sans-serif}.sm-flat__marker-dot{background:#4ea3ff;border:2px solid #fff;border-radius:50%;width:10px;height:10px;box-shadow:0 0 0 1px #00000073}.sm-system-map{border-radius:var(--sm-system-map-radius,6px);background:var(--sm-system-map-background,#ffffff0d);width:100%;color:var(--sm-system-map-ink,#ffffff9e);position:relative;overflow:hidden}.sm-system-map--background{pointer-events:none;background:0 0;border-radius:0;height:100%}.sm-system-map__svg{touch-action:pan-y;width:100%;height:auto;display:block}.sm-system-map--background .sm-system-map__svg{height:100%}.sm-system-map__svg--near :is(a,.sm-system-map__button):not([data-near]){pointer-events:none}.sm-system-map__button{cursor:pointer}.sm-system-map__button:focus{outline:none}.sm-system-map__reference{opacity:.6}.sm-system-map__band--muted{color:var(--sm-system-map-ink,#ffffff9e)}.sm-system-map__band--sky{color:var(--sm-system-map-sky,oklch(74.6% .16 232.661/.7))}.sm-system-map__band--amber{color:var(--sm-system-map-amber,oklch(92.4% .12 95.746/.8))}.sm-system-map__band-label{font-weight:600}.sm-system-map__band-label--muted{fill:var(--sm-system-map-ink,#ffffff9e)}.sm-system-map__band-label--sky{fill:var(--sm-system-map-sky-label,oklch(74.6% .16 232.661))}.sm-system-map__band-label--amber{fill:var(--sm-system-map-amber-label,oklch(92.4% .12 95.746/.9))}.sm-system-map__tip{z-index:10;background:var(--sm-system-map-tip-background,#0a0c14e6);width:max-content;color:var(--sm-system-map-tip-ink,#fffffff2);white-space:nowrap;pointer-events:none;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1.33333;position:absolute;transform:translate(-50%);box-shadow:0 1px 3px #0000001a,0 1px 2px -1px #0000001a}.sm-system-map__tip[hidden]{display:none}.sm-system-map__tip-title{font-weight:500}.sm-system-map__tip-sub{color:var(--sm-system-map-ink,#ffffff9e)}.sm-ctrl:has(>.sm-attribution:only-child){padding:0}.sm-ctrl--top-left:has(>.sm-attribution:only-child)>.sm-attribution{border-radius:0 0 var(--sm-attribution-radius) 0}.sm-ctrl--top-right:has(>.sm-attribution:only-child)>.sm-attribution{border-radius:0 0 0 var(--sm-attribution-radius)}.sm-ctrl--bottom-left:has(>.sm-attribution:only-child)>.sm-attribution{border-radius:0 var(--sm-attribution-radius) 0 0}.sm-ctrl--bottom-right:has(>.sm-attribution:only-child)>.sm-attribution{border-radius:var(--sm-attribution-radius) 0 0 0}.sm-attribution{--sm-attribution-radius:3px;border-radius:var(--sm-attribution-radius);color:#ffffffbf;white-space:nowrap;background:#0006;align-items:center;gap:.5em;max-width:100%;padding:1px 6px;font:11px/1.45 system-ui,sans-serif;display:flex}.sm-attribution a{color:inherit;text-decoration:none}.sm-attribution a:hover{color:#fff;text-decoration:underline}.sm-attribution__home{font-weight:600}.sm-attribution__group{text-overflow:ellipsis;overflow:hidden}.sm-attribution__label{color:#ffffff80}\n/*$vite$:1*/";document.head.appendChild(s);})();
|
package/package.json
CHANGED