worldorbit 2.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +5 -0
- package/README.md +250 -0
- package/dist/browser/core/dist/index.js +4009 -0
- package/dist/browser/markdown/dist/index.js +3951 -0
- package/dist/browser/viewer/dist/index.js +5981 -0
- package/dist/constants.d.ts +8 -0
- package/dist/constants.js +84 -0
- package/dist/errors.d.ts +7 -0
- package/dist/errors.js +16 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.js +25 -0
- package/dist/normalize.d.ts +2 -0
- package/dist/normalize.js +243 -0
- package/dist/parse.d.ts +2 -0
- package/dist/parse.js +126 -0
- package/dist/render.d.ts +6 -0
- package/dist/render.js +683 -0
- package/dist/tokenize.d.ts +4 -0
- package/dist/tokenize.js +68 -0
- package/dist/types.d.ts +208 -0
- package/dist/types.js +1 -0
- package/dist/unpkg/core/dist/index.js +4081 -0
- package/dist/unpkg/markdown/dist/index.js +3979 -0
- package/dist/unpkg/test.html +1 -0
- package/dist/unpkg/viewer/dist/index.js +6038 -0
- package/dist/unpkg/worldorbit-core.min.js +5 -0
- package/dist/unpkg/worldorbit-markdown.min.js +81 -0
- package/dist/unpkg/worldorbit-viewer.min.js +232 -0
- package/dist/unpkg/worldorbit.d.ts +2 -0
- package/dist/unpkg/worldorbit.js +2 -0
- package/dist/unpkg/worldorbit.min.js +236 -0
- package/dist/validate.d.ts +2 -0
- package/dist/validate.js +31 -0
- package/dist/viewer-state.d.ts +16 -0
- package/dist/viewer-state.js +130 -0
- package/dist/viewer.d.ts +2 -0
- package/dist/viewer.js +434 -0
- package/package.json +64 -0
- package/packages/core/README.md +13 -0
- package/packages/core/dist/atlas-edit.d.ts +11 -0
- package/packages/core/dist/atlas-edit.js +210 -0
- package/packages/core/dist/diagnostics.d.ts +10 -0
- package/packages/core/dist/diagnostics.js +109 -0
- package/packages/core/dist/draft-parse.d.ts +3 -0
- package/packages/core/dist/draft-parse.js +642 -0
- package/packages/core/dist/draft.d.ts +15 -0
- package/packages/core/dist/draft.js +343 -0
- package/packages/core/dist/errors.d.ts +7 -0
- package/packages/core/dist/errors.js +16 -0
- package/packages/core/dist/format.d.ts +4 -0
- package/packages/core/dist/format.js +364 -0
- package/packages/core/dist/index.d.ts +28 -0
- package/packages/core/dist/index.js +44 -0
- package/packages/core/dist/load.d.ts +4 -0
- package/packages/core/dist/load.js +130 -0
- package/packages/core/dist/markdown.d.ts +2 -0
- package/packages/core/dist/markdown.js +37 -0
- package/packages/core/dist/normalize.d.ts +2 -0
- package/packages/core/dist/normalize.js +304 -0
- package/packages/core/dist/parse.d.ts +2 -0
- package/packages/core/dist/parse.js +133 -0
- package/packages/core/dist/scene.d.ts +3 -0
- package/packages/core/dist/scene.js +1484 -0
- package/packages/core/dist/schema.d.ts +8 -0
- package/packages/core/dist/schema.js +298 -0
- package/packages/core/dist/tokenize.d.ts +4 -0
- package/packages/core/dist/tokenize.js +68 -0
- package/packages/core/dist/types.d.ts +382 -0
- package/packages/core/dist/types.js +1 -0
- package/packages/core/dist/validate.d.ts +2 -0
- package/packages/core/dist/validate.js +56 -0
- package/packages/editor/dist/editor.d.ts +2 -0
- package/packages/editor/dist/editor.js +2620 -0
- package/packages/editor/dist/index.d.ts +2 -0
- package/packages/editor/dist/index.js +1 -0
- package/packages/editor/dist/types.d.ts +53 -0
- package/packages/editor/dist/types.js +1 -0
- package/packages/markdown/README.md +9 -0
- package/packages/markdown/dist/html.d.ts +3 -0
- package/packages/markdown/dist/html.js +57 -0
- package/packages/markdown/dist/index.d.ts +4 -0
- package/packages/markdown/dist/index.js +3 -0
- package/packages/markdown/dist/rehype.d.ts +10 -0
- package/packages/markdown/dist/rehype.js +49 -0
- package/packages/markdown/dist/remark.d.ts +9 -0
- package/packages/markdown/dist/remark.js +28 -0
- package/packages/markdown/dist/types.d.ts +11 -0
- package/packages/markdown/dist/types.js +1 -0
- package/packages/viewer/README.md +12 -0
- package/packages/viewer/dist/atlas-state.d.ts +12 -0
- package/packages/viewer/dist/atlas-state.js +251 -0
- package/packages/viewer/dist/atlas-viewer.d.ts +2 -0
- package/packages/viewer/dist/atlas-viewer.js +448 -0
- package/packages/viewer/dist/custom-element.d.ts +1 -0
- package/packages/viewer/dist/custom-element.js +64 -0
- package/packages/viewer/dist/embed.d.ts +20 -0
- package/packages/viewer/dist/embed.js +138 -0
- package/packages/viewer/dist/index.d.ts +9 -0
- package/packages/viewer/dist/index.js +8 -0
- package/packages/viewer/dist/minimap.d.ts +3 -0
- package/packages/viewer/dist/minimap.js +63 -0
- package/packages/viewer/dist/render.d.ts +6 -0
- package/packages/viewer/dist/render.js +585 -0
- package/packages/viewer/dist/theme.d.ts +4 -0
- package/packages/viewer/dist/theme.js +98 -0
- package/packages/viewer/dist/tooltip.d.ts +3 -0
- package/packages/viewer/dist/tooltip.js +154 -0
- package/packages/viewer/dist/types.d.ts +256 -0
- package/packages/viewer/dist/types.js +1 -0
- package/packages/viewer/dist/viewer-state.d.ts +19 -0
- package/packages/viewer/dist/viewer-state.js +162 -0
- package/packages/viewer/dist/viewer.d.ts +2 -0
- package/packages/viewer/dist/viewer.js +1156 -0
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ViewerLayerOptions, WorldOrbitTheme, WorldOrbitThemeName } from "./types.js";
|
|
2
|
+
export declare function resolveTheme(theme?: WorldOrbitTheme | WorldOrbitThemeName): WorldOrbitTheme;
|
|
3
|
+
export declare function resolveLayers(layers?: ViewerLayerOptions): Required<ViewerLayerOptions>;
|
|
4
|
+
export declare function getThemePreset(name: WorldOrbitThemeName): WorldOrbitTheme;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
const DEFAULT_LAYERS = {
|
|
2
|
+
background: true,
|
|
3
|
+
guides: true,
|
|
4
|
+
orbits: true,
|
|
5
|
+
objects: true,
|
|
6
|
+
labels: true,
|
|
7
|
+
structures: true,
|
|
8
|
+
metadata: true,
|
|
9
|
+
};
|
|
10
|
+
const THEME_PRESETS = {
|
|
11
|
+
atlas: {
|
|
12
|
+
name: "atlas",
|
|
13
|
+
backgroundStart: "#041018",
|
|
14
|
+
backgroundEnd: "#0a2331",
|
|
15
|
+
backgroundGlow: "rgba(240, 180, 100, 0.18)",
|
|
16
|
+
panel: "rgba(7, 17, 27, 0.9)",
|
|
17
|
+
panelLine: "rgba(168, 207, 242, 0.18)",
|
|
18
|
+
orbit: "rgba(163, 209, 255, 0.24)",
|
|
19
|
+
orbitBand: "rgba(255, 190, 120, 0.28)",
|
|
20
|
+
guide: "rgba(255, 255, 255, 0.04)",
|
|
21
|
+
leader: "rgba(225, 238, 255, 0.4)",
|
|
22
|
+
ink: "#e8f0ff",
|
|
23
|
+
muted: "rgba(232, 240, 255, 0.7)",
|
|
24
|
+
accent: "#f0b464",
|
|
25
|
+
accentStrong: "#ff7f5f",
|
|
26
|
+
selected: "rgba(255, 214, 139, 0.92)",
|
|
27
|
+
starCore: "#ffcc67",
|
|
28
|
+
starStroke: "rgba(255, 245, 203, 0.85)",
|
|
29
|
+
starGlow: "#ffe8a3",
|
|
30
|
+
fontFamily: "\"Segoe UI Variable\", \"Bahnschrift\", sans-serif",
|
|
31
|
+
displayFont: "\"Bahnschrift\", \"Segoe UI Variable\", sans-serif"
|
|
32
|
+
},
|
|
33
|
+
nightglass: {
|
|
34
|
+
name: "nightglass",
|
|
35
|
+
backgroundStart: "#07131f",
|
|
36
|
+
backgroundEnd: "#13283a",
|
|
37
|
+
backgroundGlow: "rgba(120, 255, 215, 0.16)",
|
|
38
|
+
panel: "rgba(7, 20, 30, 0.9)",
|
|
39
|
+
panelLine: "rgba(120, 255, 215, 0.16)",
|
|
40
|
+
orbit: "rgba(120, 255, 215, 0.2)",
|
|
41
|
+
orbitBand: "rgba(137, 185, 255, 0.24)",
|
|
42
|
+
guide: "rgba(255, 255, 255, 0.035)",
|
|
43
|
+
leader: "rgba(192, 255, 233, 0.42)",
|
|
44
|
+
ink: "#edfff8",
|
|
45
|
+
muted: "rgba(237, 255, 248, 0.68)",
|
|
46
|
+
accent: "#78ffd7",
|
|
47
|
+
accentStrong: "#9ce7ff",
|
|
48
|
+
selected: "rgba(120, 255, 215, 0.9)",
|
|
49
|
+
starCore: "#e5f98c",
|
|
50
|
+
starStroke: "rgba(246, 255, 217, 0.9)",
|
|
51
|
+
starGlow: "#fffab4",
|
|
52
|
+
fontFamily: "\"Segoe UI Variable\", \"Bahnschrift\", sans-serif",
|
|
53
|
+
displayFont: "\"Bahnschrift\", \"Segoe UI Variable\", sans-serif"
|
|
54
|
+
},
|
|
55
|
+
ember: {
|
|
56
|
+
name: "ember",
|
|
57
|
+
backgroundStart: "#17090b",
|
|
58
|
+
backgroundEnd: "#31111a",
|
|
59
|
+
backgroundGlow: "rgba(255, 127, 95, 0.18)",
|
|
60
|
+
panel: "rgba(24, 9, 13, 0.9)",
|
|
61
|
+
panelLine: "rgba(255, 166, 149, 0.16)",
|
|
62
|
+
orbit: "rgba(255, 188, 164, 0.22)",
|
|
63
|
+
orbitBand: "rgba(255, 214, 139, 0.24)",
|
|
64
|
+
guide: "rgba(255, 255, 255, 0.03)",
|
|
65
|
+
leader: "rgba(255, 223, 209, 0.42)",
|
|
66
|
+
ink: "#fff3ee",
|
|
67
|
+
muted: "rgba(255, 243, 238, 0.68)",
|
|
68
|
+
accent: "#ffb27d",
|
|
69
|
+
accentStrong: "#ff7f5f",
|
|
70
|
+
selected: "rgba(255, 178, 125, 0.9)",
|
|
71
|
+
starCore: "#ffb766",
|
|
72
|
+
starStroke: "rgba(255, 236, 205, 0.88)",
|
|
73
|
+
starGlow: "#ffe2ad",
|
|
74
|
+
fontFamily: "\"Segoe UI Variable\", \"Bahnschrift\", sans-serif",
|
|
75
|
+
displayFont: "\"Bahnschrift\", \"Segoe UI Variable\", sans-serif"
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
export function resolveTheme(theme) {
|
|
79
|
+
if (!theme) {
|
|
80
|
+
return THEME_PRESETS.atlas;
|
|
81
|
+
}
|
|
82
|
+
if (typeof theme === "string") {
|
|
83
|
+
return THEME_PRESETS[theme] ?? THEME_PRESETS.atlas;
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
...THEME_PRESETS.atlas,
|
|
87
|
+
...theme,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
export function resolveLayers(layers) {
|
|
91
|
+
return {
|
|
92
|
+
...DEFAULT_LAYERS,
|
|
93
|
+
...layers,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
export function getThemePreset(name) {
|
|
97
|
+
return THEME_PRESETS[name];
|
|
98
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { TooltipMode, ViewerObjectDetails, ViewerTooltipDetails } from "./types.js";
|
|
2
|
+
export declare function buildViewerTooltipDetails(details: ViewerObjectDetails): ViewerTooltipDetails;
|
|
3
|
+
export declare function renderDefaultTooltipContent(details: ViewerTooltipDetails, mode: TooltipMode): string;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
const FIELD_ORDER = [
|
|
2
|
+
"radius",
|
|
3
|
+
"temperature",
|
|
4
|
+
"atmosphere",
|
|
5
|
+
"period",
|
|
6
|
+
"semiMajor",
|
|
7
|
+
"distance",
|
|
8
|
+
"eccentricity",
|
|
9
|
+
"angle",
|
|
10
|
+
"inclination",
|
|
11
|
+
"phase",
|
|
12
|
+
"albedo",
|
|
13
|
+
"mass",
|
|
14
|
+
"density",
|
|
15
|
+
"gravity",
|
|
16
|
+
];
|
|
17
|
+
export function buildViewerTooltipDetails(details) {
|
|
18
|
+
return {
|
|
19
|
+
objectId: details.objectId,
|
|
20
|
+
title: details.objectId,
|
|
21
|
+
typeLabel: humanizeType(details.object.type),
|
|
22
|
+
imageHref: details.renderObject.imageHref ?? null,
|
|
23
|
+
description: readTooltipDescription(details),
|
|
24
|
+
tags: normalizeTags(details.object.properties.tags),
|
|
25
|
+
fields: buildTooltipFields(details),
|
|
26
|
+
parentLabel: details.parent?.objectId ?? null,
|
|
27
|
+
orbitLabel: details.orbit?.parentId ?? null,
|
|
28
|
+
details,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export function renderDefaultTooltipContent(details, mode) {
|
|
32
|
+
const tagMarkup = details.tags.length
|
|
33
|
+
? `<div class="wo-tooltip-tags">${details.tags
|
|
34
|
+
.map((tag) => `<span class="wo-tooltip-tag">${escapeHtml(tag)}</span>`)
|
|
35
|
+
.join("")}</div>`
|
|
36
|
+
: "";
|
|
37
|
+
const fieldMarkup = details.fields.length
|
|
38
|
+
? `<dl class="wo-tooltip-fields">${details.fields
|
|
39
|
+
.map((field) => `<div class="wo-tooltip-field"><dt>${escapeHtml(field.label)}</dt><dd>${escapeHtml(field.value)}</dd></div>`)
|
|
40
|
+
.join("")}</dl>`
|
|
41
|
+
: "";
|
|
42
|
+
const relationBits = [
|
|
43
|
+
details.parentLabel ? `Parent: ${details.parentLabel}` : null,
|
|
44
|
+
details.orbitLabel ? `Orbit: ${details.orbitLabel}` : null,
|
|
45
|
+
mode === "pinned" ? "Pinned tooltip" : "Hover tooltip",
|
|
46
|
+
].filter(Boolean);
|
|
47
|
+
return `<article class="wo-tooltip-card" data-tooltip-object-id="${escapeHtml(details.objectId)}">
|
|
48
|
+
<div class="wo-tooltip-head">
|
|
49
|
+
${details.imageHref
|
|
50
|
+
? `<img class="wo-tooltip-image" src="${escapeAttribute(details.imageHref)}" alt="" />`
|
|
51
|
+
: `<div class="wo-tooltip-image wo-tooltip-image-placeholder">${escapeHtml(details.typeLabel.slice(0, 1))}</div>`}
|
|
52
|
+
<div class="wo-tooltip-heading">
|
|
53
|
+
<strong>${escapeHtml(details.title)}</strong>
|
|
54
|
+
<span>${escapeHtml(details.typeLabel)}</span>
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
57
|
+
${details.description ? `<p class="wo-tooltip-description">${escapeHtml(details.description)}</p>` : ""}
|
|
58
|
+
${tagMarkup}
|
|
59
|
+
${fieldMarkup}
|
|
60
|
+
${relationBits.length
|
|
61
|
+
? `<p class="wo-tooltip-relations">${escapeHtml(relationBits.join(" - "))}</p>`
|
|
62
|
+
: ""}
|
|
63
|
+
</article>`;
|
|
64
|
+
}
|
|
65
|
+
function buildTooltipFields(details) {
|
|
66
|
+
const fields = new Map();
|
|
67
|
+
for (const key of FIELD_ORDER) {
|
|
68
|
+
const value = details.object.properties[key];
|
|
69
|
+
if (value === undefined) {
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
fields.set(key, {
|
|
73
|
+
key,
|
|
74
|
+
label: humanizeField(key),
|
|
75
|
+
value: formatTooltipValue(value),
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
const placement = details.object.placement;
|
|
79
|
+
if (placement?.mode === "at") {
|
|
80
|
+
fields.set("placement", {
|
|
81
|
+
key: "placement",
|
|
82
|
+
label: "Placement",
|
|
83
|
+
value: `At ${placement.target}`,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
else if (placement?.mode === "surface") {
|
|
87
|
+
fields.set("placement", {
|
|
88
|
+
key: "placement",
|
|
89
|
+
label: "Placement",
|
|
90
|
+
value: `Surface ${placement.target}`,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
else if (placement?.mode === "free") {
|
|
94
|
+
fields.set("placement", {
|
|
95
|
+
key: "placement",
|
|
96
|
+
label: "Placement",
|
|
97
|
+
value: placement.distance
|
|
98
|
+
? `Free ${formatTooltipValue(placement.distance)}`
|
|
99
|
+
: `Free ${placement.descriptor ?? "custom"}`,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
return [...fields.values()];
|
|
103
|
+
}
|
|
104
|
+
function normalizeTags(value) {
|
|
105
|
+
if (!Array.isArray(value)) {
|
|
106
|
+
return [];
|
|
107
|
+
}
|
|
108
|
+
return value.filter((entry) => typeof entry === "string");
|
|
109
|
+
}
|
|
110
|
+
function readTooltipDescription(details) {
|
|
111
|
+
const direct = details.object.info.description?.trim();
|
|
112
|
+
if (direct) {
|
|
113
|
+
return direct;
|
|
114
|
+
}
|
|
115
|
+
const summary = details.group?.label?.trim();
|
|
116
|
+
return summary && summary !== details.objectId ? summary : null;
|
|
117
|
+
}
|
|
118
|
+
function formatTooltipValue(value) {
|
|
119
|
+
if (typeof value === "string") {
|
|
120
|
+
return value;
|
|
121
|
+
}
|
|
122
|
+
if (typeof value === "number") {
|
|
123
|
+
return String(value);
|
|
124
|
+
}
|
|
125
|
+
if (typeof value === "boolean") {
|
|
126
|
+
return value ? "true" : "false";
|
|
127
|
+
}
|
|
128
|
+
if (Array.isArray(value)) {
|
|
129
|
+
return value.join(", ");
|
|
130
|
+
}
|
|
131
|
+
return formatUnitValue(value);
|
|
132
|
+
}
|
|
133
|
+
function formatUnitValue(value) {
|
|
134
|
+
return `${value.value}${value.unit ?? ""}`;
|
|
135
|
+
}
|
|
136
|
+
function humanizeType(value) {
|
|
137
|
+
return value.charAt(0).toUpperCase() + value.slice(1);
|
|
138
|
+
}
|
|
139
|
+
function humanizeField(value) {
|
|
140
|
+
return value
|
|
141
|
+
.replace(/([a-z])([A-Z])/g, "$1 $2")
|
|
142
|
+
.replace(/[-_]+/g, " ")
|
|
143
|
+
.replace(/^./, (match) => match.toUpperCase());
|
|
144
|
+
}
|
|
145
|
+
function escapeHtml(value) {
|
|
146
|
+
return value
|
|
147
|
+
.replaceAll("&", "&")
|
|
148
|
+
.replaceAll("<", "<")
|
|
149
|
+
.replaceAll(">", ">")
|
|
150
|
+
.replaceAll('"', """);
|
|
151
|
+
}
|
|
152
|
+
function escapeAttribute(value) {
|
|
153
|
+
return escapeHtml(value);
|
|
154
|
+
}
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import type { CoordinatePoint, RenderOrbitVisual, RenderPresetName, RenderSceneGroup, RenderSceneLabel, RenderScaleModel, RenderScene, RenderSceneObject, RenderSceneViewpoint, SceneRenderOptions, ViewProjection, WorldOrbitObject, WorldOrbitDocument } from "@worldorbit/core";
|
|
2
|
+
export type WorldOrbitThemeName = "atlas" | "nightglass" | "ember";
|
|
3
|
+
export type WorldOrbitEmbedMode = "static" | "interactive";
|
|
4
|
+
export type TooltipMode = "hover" | "pinned" | "disabled";
|
|
5
|
+
export interface WorldOrbitTheme {
|
|
6
|
+
name: string;
|
|
7
|
+
backgroundStart: string;
|
|
8
|
+
backgroundEnd: string;
|
|
9
|
+
backgroundGlow: string;
|
|
10
|
+
panel: string;
|
|
11
|
+
panelLine: string;
|
|
12
|
+
orbit: string;
|
|
13
|
+
orbitBand: string;
|
|
14
|
+
guide: string;
|
|
15
|
+
leader: string;
|
|
16
|
+
ink: string;
|
|
17
|
+
muted: string;
|
|
18
|
+
accent: string;
|
|
19
|
+
accentStrong: string;
|
|
20
|
+
selected: string;
|
|
21
|
+
starCore: string;
|
|
22
|
+
starStroke: string;
|
|
23
|
+
starGlow: string;
|
|
24
|
+
fontFamily: string;
|
|
25
|
+
displayFont: string;
|
|
26
|
+
}
|
|
27
|
+
export interface ViewerLayerOptions {
|
|
28
|
+
background?: boolean;
|
|
29
|
+
guides?: boolean;
|
|
30
|
+
orbits?: boolean;
|
|
31
|
+
objects?: boolean;
|
|
32
|
+
labels?: boolean;
|
|
33
|
+
structures?: boolean;
|
|
34
|
+
metadata?: boolean;
|
|
35
|
+
}
|
|
36
|
+
export interface ViewerFilter {
|
|
37
|
+
query?: string;
|
|
38
|
+
objectTypes?: Array<WorldOrbitObject["type"]>;
|
|
39
|
+
tags?: string[];
|
|
40
|
+
groupIds?: string[];
|
|
41
|
+
includeAncestors?: boolean;
|
|
42
|
+
}
|
|
43
|
+
export interface ViewerSearchResult {
|
|
44
|
+
objectId: string;
|
|
45
|
+
label: string;
|
|
46
|
+
type: WorldOrbitObject["type"];
|
|
47
|
+
score: number;
|
|
48
|
+
groupId: string | null;
|
|
49
|
+
parentId: string | null;
|
|
50
|
+
tags: string[];
|
|
51
|
+
}
|
|
52
|
+
export interface SvgRenderOptions extends SceneRenderOptions {
|
|
53
|
+
theme?: WorldOrbitTheme | WorldOrbitThemeName;
|
|
54
|
+
layers?: ViewerLayerOptions;
|
|
55
|
+
filter?: ViewerFilter | null;
|
|
56
|
+
selectedObjectId?: string | null;
|
|
57
|
+
subtitle?: string;
|
|
58
|
+
}
|
|
59
|
+
export interface ViewerRenderOptions extends Omit<SvgRenderOptions, "selectedObjectId"> {
|
|
60
|
+
projection?: "document" | ViewProjection;
|
|
61
|
+
scaleModel?: Partial<RenderScaleModel>;
|
|
62
|
+
}
|
|
63
|
+
export interface ViewerState {
|
|
64
|
+
scale: number;
|
|
65
|
+
rotationDeg: number;
|
|
66
|
+
translateX: number;
|
|
67
|
+
translateY: number;
|
|
68
|
+
selectedObjectId: string | null;
|
|
69
|
+
}
|
|
70
|
+
export interface ViewerObjectDetails {
|
|
71
|
+
objectId: string;
|
|
72
|
+
object: WorldOrbitObject;
|
|
73
|
+
renderObject: RenderSceneObject;
|
|
74
|
+
label: RenderSceneLabel | null;
|
|
75
|
+
group: RenderSceneGroup | null;
|
|
76
|
+
orbit: RenderOrbitVisual | null;
|
|
77
|
+
relatedOrbits: RenderOrbitVisual[];
|
|
78
|
+
parent: RenderSceneObject | null;
|
|
79
|
+
children: RenderSceneObject[];
|
|
80
|
+
ancestors: RenderSceneObject[];
|
|
81
|
+
focusPath: RenderSceneObject[];
|
|
82
|
+
}
|
|
83
|
+
export interface ViewerTooltipField {
|
|
84
|
+
key: string;
|
|
85
|
+
label: string;
|
|
86
|
+
value: string;
|
|
87
|
+
}
|
|
88
|
+
export interface ViewerTooltipDetails {
|
|
89
|
+
objectId: string;
|
|
90
|
+
title: string;
|
|
91
|
+
typeLabel: string;
|
|
92
|
+
imageHref: string | null;
|
|
93
|
+
description: string | null;
|
|
94
|
+
tags: string[];
|
|
95
|
+
fields: ViewerTooltipField[];
|
|
96
|
+
parentLabel: string | null;
|
|
97
|
+
orbitLabel: string | null;
|
|
98
|
+
details: ViewerObjectDetails;
|
|
99
|
+
}
|
|
100
|
+
export interface ViewerAtlasState {
|
|
101
|
+
version: "2.0";
|
|
102
|
+
viewpointId: string | null;
|
|
103
|
+
viewerState: ViewerState;
|
|
104
|
+
renderOptions: {
|
|
105
|
+
preset?: RenderPresetName;
|
|
106
|
+
projection?: "document" | ViewProjection;
|
|
107
|
+
layers?: ViewerLayerOptions;
|
|
108
|
+
scaleModel?: Partial<RenderScaleModel>;
|
|
109
|
+
};
|
|
110
|
+
filter: ViewerFilter | null;
|
|
111
|
+
}
|
|
112
|
+
export interface ViewerBookmark {
|
|
113
|
+
id: string;
|
|
114
|
+
label: string;
|
|
115
|
+
atlasState: ViewerAtlasState;
|
|
116
|
+
}
|
|
117
|
+
export interface AtlasViewerControls {
|
|
118
|
+
search?: boolean;
|
|
119
|
+
typeFilter?: boolean;
|
|
120
|
+
viewpointSelect?: boolean;
|
|
121
|
+
inspector?: boolean;
|
|
122
|
+
bookmarks?: boolean;
|
|
123
|
+
}
|
|
124
|
+
export interface AtlasInspectorSnapshot {
|
|
125
|
+
selection: ViewerObjectDetails | null;
|
|
126
|
+
activeViewpoint: RenderSceneViewpoint | null;
|
|
127
|
+
filter: ViewerFilter | null;
|
|
128
|
+
atlasState: ViewerAtlasState;
|
|
129
|
+
visibleObjectIds: string[];
|
|
130
|
+
scene: {
|
|
131
|
+
title: string;
|
|
132
|
+
projection: ViewProjection;
|
|
133
|
+
renderPreset: RenderPresetName | null;
|
|
134
|
+
groupCount: number;
|
|
135
|
+
viewpointCount: number;
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
export interface InteractiveViewerOptions extends ViewerRenderOptions {
|
|
139
|
+
source?: string;
|
|
140
|
+
document?: WorldOrbitDocument;
|
|
141
|
+
scene?: RenderScene;
|
|
142
|
+
initialViewpointId?: string;
|
|
143
|
+
initialSelectionObjectId?: string;
|
|
144
|
+
initialFilter?: ViewerFilter | null;
|
|
145
|
+
minScale?: number;
|
|
146
|
+
maxScale?: number;
|
|
147
|
+
fitPadding?: number;
|
|
148
|
+
keyboard?: boolean;
|
|
149
|
+
pointer?: boolean;
|
|
150
|
+
touch?: boolean;
|
|
151
|
+
selection?: boolean;
|
|
152
|
+
tooltipMode?: TooltipMode;
|
|
153
|
+
tooltipRenderer?: (details: ViewerTooltipDetails, mode: TooltipMode) => HTMLElement | string;
|
|
154
|
+
minimap?: boolean;
|
|
155
|
+
panStep?: number;
|
|
156
|
+
zoomStep?: number;
|
|
157
|
+
rotationStep?: number;
|
|
158
|
+
onSelectionChange?: (selectedObject: RenderSceneObject | null) => void;
|
|
159
|
+
onSelectionDetailsChange?: (details: ViewerObjectDetails | null) => void;
|
|
160
|
+
onHoverChange?: (hoveredObject: RenderSceneObject | null) => void;
|
|
161
|
+
onHoverDetailsChange?: (details: ViewerObjectDetails | null) => void;
|
|
162
|
+
onTooltipChange?: (details: ViewerTooltipDetails | null) => void;
|
|
163
|
+
onFilterChange?: (filter: ViewerFilter | null, visibleObjects: RenderSceneObject[]) => void;
|
|
164
|
+
onViewpointChange?: (viewpoint: RenderSceneViewpoint | null) => void;
|
|
165
|
+
onViewChange?: (state: ViewerState) => void;
|
|
166
|
+
onAtlasStateChange?: (state: ViewerAtlasState) => void;
|
|
167
|
+
}
|
|
168
|
+
export interface AtlasViewerOptions extends Omit<InteractiveViewerOptions, "initialFilter"> {
|
|
169
|
+
controls?: AtlasViewerControls;
|
|
170
|
+
initialFilter?: ViewerFilter | null;
|
|
171
|
+
initialQuery?: string;
|
|
172
|
+
initialObjectType?: WorldOrbitObject["type"] | null;
|
|
173
|
+
onInspectorChange?: (snapshot: AtlasInspectorSnapshot) => void;
|
|
174
|
+
}
|
|
175
|
+
export interface WorldOrbitViewer {
|
|
176
|
+
setSource(source: string): void;
|
|
177
|
+
setDocument(document: WorldOrbitDocument): void;
|
|
178
|
+
setScene(scene: RenderScene): void;
|
|
179
|
+
getScene(): RenderScene;
|
|
180
|
+
getRenderOptions(): ViewerRenderOptions;
|
|
181
|
+
setRenderOptions(options: Partial<ViewerRenderOptions>): void;
|
|
182
|
+
listViewpoints(): RenderSceneViewpoint[];
|
|
183
|
+
getActiveViewpoint(): RenderSceneViewpoint | null;
|
|
184
|
+
goToViewpoint(id: string): boolean;
|
|
185
|
+
search(query: string, limit?: number): ViewerSearchResult[];
|
|
186
|
+
getFilter(): ViewerFilter | null;
|
|
187
|
+
setFilter(filter: ViewerFilter | null): void;
|
|
188
|
+
getVisibleObjects(): RenderSceneObject[];
|
|
189
|
+
getFocusPath(id: string): RenderSceneObject[];
|
|
190
|
+
getObjectDetails(id: string): ViewerObjectDetails | null;
|
|
191
|
+
getSelectionDetails(): ViewerObjectDetails | null;
|
|
192
|
+
getTooltipDetails(): ViewerTooltipDetails | null;
|
|
193
|
+
getAtlasState(): ViewerAtlasState;
|
|
194
|
+
setAtlasState(state: ViewerAtlasState | string): void;
|
|
195
|
+
serializeAtlasState(): string;
|
|
196
|
+
captureBookmark(name: string, label?: string): ViewerBookmark;
|
|
197
|
+
applyBookmark(bookmark: ViewerBookmark | string): boolean;
|
|
198
|
+
getState(): ViewerState;
|
|
199
|
+
setState(state: Partial<ViewerState>): void;
|
|
200
|
+
zoomBy(factor: number, anchor?: CoordinatePoint): void;
|
|
201
|
+
panBy(dx: number, dy: number): void;
|
|
202
|
+
rotateBy(deg: number): void;
|
|
203
|
+
fitToSystem(): void;
|
|
204
|
+
focusObject(id: string): void;
|
|
205
|
+
pinTooltip(id: string | null): void;
|
|
206
|
+
resetView(): void;
|
|
207
|
+
exportSvg(): string;
|
|
208
|
+
destroy(): void;
|
|
209
|
+
}
|
|
210
|
+
export interface WorldOrbitAtlasViewer {
|
|
211
|
+
element: HTMLElement;
|
|
212
|
+
viewer: WorldOrbitViewer;
|
|
213
|
+
getViewer(): WorldOrbitViewer;
|
|
214
|
+
setSource(source: string): void;
|
|
215
|
+
setDocument(document: WorldOrbitDocument): void;
|
|
216
|
+
setScene(scene: RenderScene): void;
|
|
217
|
+
getAtlasState(): ViewerAtlasState;
|
|
218
|
+
setAtlasState(state: ViewerAtlasState | string): void;
|
|
219
|
+
getInspectorSnapshot(): AtlasInspectorSnapshot;
|
|
220
|
+
getSearchQuery(): string;
|
|
221
|
+
setSearchQuery(query: string): void;
|
|
222
|
+
getObjectTypeFilter(): WorldOrbitObject["type"] | null;
|
|
223
|
+
setObjectTypeFilter(type: WorldOrbitObject["type"] | null): void;
|
|
224
|
+
listSearchResults(limit?: number): ViewerSearchResult[];
|
|
225
|
+
listBookmarks(): ViewerBookmark[];
|
|
226
|
+
captureBookmark(name: string, label?: string): ViewerBookmark;
|
|
227
|
+
applyBookmark(bookmark: ViewerBookmark | string): boolean;
|
|
228
|
+
goToViewpoint(id: string): boolean;
|
|
229
|
+
exportSvg(): string;
|
|
230
|
+
destroy(): void;
|
|
231
|
+
}
|
|
232
|
+
export interface WorldOrbitEmbedPayload {
|
|
233
|
+
version: "2.0";
|
|
234
|
+
mode: WorldOrbitEmbedMode;
|
|
235
|
+
scene: RenderScene;
|
|
236
|
+
options?: {
|
|
237
|
+
theme?: WorldOrbitTheme | WorldOrbitThemeName;
|
|
238
|
+
layers?: ViewerLayerOptions;
|
|
239
|
+
subtitle?: string;
|
|
240
|
+
preset?: SceneRenderOptions["preset"];
|
|
241
|
+
initialViewpointId?: string;
|
|
242
|
+
initialSelectionObjectId?: string;
|
|
243
|
+
initialFilter?: ViewerFilter | null;
|
|
244
|
+
atlasState?: ViewerAtlasState | null;
|
|
245
|
+
minimap?: boolean;
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
export interface MountWorldOrbitEmbedsOptions extends SvgRenderOptions {
|
|
249
|
+
mode?: WorldOrbitEmbedMode;
|
|
250
|
+
viewer?: Omit<InteractiveViewerOptions, "source" | "document" | "scene">;
|
|
251
|
+
onMount?: (viewer: WorldOrbitViewer | null, element: HTMLElement) => void;
|
|
252
|
+
}
|
|
253
|
+
export interface MountedWorldOrbitEmbeds {
|
|
254
|
+
viewers: WorldOrbitViewer[];
|
|
255
|
+
destroy(): void;
|
|
256
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type CoordinatePoint, type RenderBounds, type RenderScene } from "@worldorbit/core";
|
|
2
|
+
import type { ViewerState } from "./types.js";
|
|
3
|
+
export interface ViewerConstraints {
|
|
4
|
+
minScale: number;
|
|
5
|
+
maxScale: number;
|
|
6
|
+
fitPadding: number;
|
|
7
|
+
}
|
|
8
|
+
export declare const DEFAULT_VIEWER_STATE: ViewerState;
|
|
9
|
+
export declare function normalizeRotation(rotationDeg: number): number;
|
|
10
|
+
export declare function clampScale(scale: number, constraints: ViewerConstraints): number;
|
|
11
|
+
export declare function panViewerState(state: ViewerState, dx: number, dy: number): ViewerState;
|
|
12
|
+
export declare function rotateViewerState(state: ViewerState, deltaDeg: number): ViewerState;
|
|
13
|
+
export declare function zoomViewerStateAt(scene: RenderScene, state: ViewerState, factor: number, anchor: CoordinatePoint, constraints: ViewerConstraints): ViewerState;
|
|
14
|
+
export declare function fitViewerState(scene: RenderScene, state: ViewerState, constraints: ViewerConstraints): ViewerState;
|
|
15
|
+
export declare function focusViewerState(scene: RenderScene, state: ViewerState, objectId: string, constraints: ViewerConstraints): ViewerState;
|
|
16
|
+
export declare function composeViewerTransform(scene: RenderScene, state: ViewerState): string;
|
|
17
|
+
export declare function invertViewerPoint(scene: RenderScene, state: ViewerState, point: CoordinatePoint): CoordinatePoint;
|
|
18
|
+
export declare function getViewerVisibleBounds(scene: RenderScene, state: ViewerState): RenderBounds;
|
|
19
|
+
export declare function getSceneCenter(scene: RenderScene): CoordinatePoint;
|