worldorbit 3.0.6 → 3.1.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 (53) hide show
  1. package/README.md +2 -2
  2. package/dist/browser/core/dist/atlas-edit.js +5 -1
  3. package/dist/browser/core/dist/atlas-validate.js +1 -1
  4. package/dist/browser/core/dist/draft-parse.js +14 -9
  5. package/dist/browser/core/dist/draft.d.ts +1 -0
  6. package/dist/browser/core/dist/draft.js +4 -2
  7. package/dist/browser/core/dist/format.js +5 -3
  8. package/dist/browser/core/dist/load.js +3 -2
  9. package/dist/browser/core/dist/normalize.js +36 -0
  10. package/dist/browser/core/dist/parse.js +54 -0
  11. package/dist/browser/core/dist/scene.js +1 -0
  12. package/dist/browser/core/dist/types.d.ts +21 -1
  13. package/dist/browser/viewer/dist/runtime-3d.js +396 -117
  14. package/dist/browser/viewer/dist/theme.js +27 -0
  15. package/dist/browser/viewer/dist/types.d.ts +17 -0
  16. package/dist/browser/viewer/dist/viewer.js +51 -0
  17. package/dist/unpkg/core/dist/atlas-edit.js +5 -1
  18. package/dist/unpkg/core/dist/atlas-validate.js +1 -1
  19. package/dist/unpkg/core/dist/draft-parse.js +14 -9
  20. package/dist/unpkg/core/dist/draft.d.ts +1 -0
  21. package/dist/unpkg/core/dist/draft.js +4 -2
  22. package/dist/unpkg/core/dist/format.js +5 -3
  23. package/dist/unpkg/core/dist/load.js +3 -2
  24. package/dist/unpkg/core/dist/normalize.js +36 -0
  25. package/dist/unpkg/core/dist/parse.js +54 -0
  26. package/dist/unpkg/core/dist/scene.js +1 -0
  27. package/dist/unpkg/core/dist/types.d.ts +21 -1
  28. package/dist/unpkg/viewer/dist/runtime-3d.js +396 -117
  29. package/dist/unpkg/viewer/dist/theme.js +27 -0
  30. package/dist/unpkg/viewer/dist/types.d.ts +17 -0
  31. package/dist/unpkg/viewer/dist/viewer.js +51 -0
  32. package/dist/unpkg/worldorbit-core.min.js +9 -9
  33. package/dist/unpkg/worldorbit-editor.min.js +360 -356
  34. package/dist/unpkg/worldorbit-markdown.min.js +20 -20
  35. package/dist/unpkg/worldorbit-viewer.min.js +210 -206
  36. package/dist/unpkg/worldorbit.js +557 -120
  37. package/dist/unpkg/worldorbit.min.js +216 -212
  38. package/package.json +1 -1
  39. package/packages/core/dist/atlas-edit.js +5 -1
  40. package/packages/core/dist/atlas-validate.js +1 -1
  41. package/packages/core/dist/draft-parse.js +14 -9
  42. package/packages/core/dist/draft.d.ts +1 -0
  43. package/packages/core/dist/draft.js +4 -2
  44. package/packages/core/dist/format.js +5 -3
  45. package/packages/core/dist/load.js +3 -2
  46. package/packages/core/dist/normalize.js +36 -0
  47. package/packages/core/dist/parse.js +54 -0
  48. package/packages/core/dist/scene.js +1 -0
  49. package/packages/core/dist/types.d.ts +21 -1
  50. package/packages/viewer/dist/runtime-3d.js +396 -117
  51. package/packages/viewer/dist/theme.js +27 -0
  52. package/packages/viewer/dist/types.d.ts +17 -0
  53. package/packages/viewer/dist/viewer.js +51 -0
@@ -30,6 +30,15 @@ const THEME_PRESETS = {
30
30
  starCore: "#ffcc67",
31
31
  starStroke: "rgba(255, 245, 203, 0.85)",
32
32
  starGlow: "#ffe8a3",
33
+ spaceFog: "#07131d",
34
+ starfield: "rgba(226, 239, 255, 0.9)",
35
+ starfieldDim: "rgba(164, 194, 228, 0.45)",
36
+ objectSpecular: "#f5f8ff",
37
+ orbitOpacity: 0.34,
38
+ orbitBandOpacity: 0.24,
39
+ selectionHalo: "rgba(255, 214, 139, 0.9)",
40
+ atmosphere: "rgba(143, 202, 255, 0.4)",
41
+ cometTail: "rgba(193, 243, 255, 0.7)",
33
42
  fontFamily: "\"Segoe UI Variable\", \"Bahnschrift\", sans-serif",
34
43
  displayFont: "\"Bahnschrift\", \"Segoe UI Variable\", sans-serif"
35
44
  },
@@ -53,6 +62,15 @@ const THEME_PRESETS = {
53
62
  starCore: "#e5f98c",
54
63
  starStroke: "rgba(246, 255, 217, 0.9)",
55
64
  starGlow: "#fffab4",
65
+ spaceFog: "#071723",
66
+ starfield: "rgba(220, 255, 245, 0.9)",
67
+ starfieldDim: "rgba(124, 212, 195, 0.42)",
68
+ objectSpecular: "#ecfffb",
69
+ orbitOpacity: 0.3,
70
+ orbitBandOpacity: 0.22,
71
+ selectionHalo: "rgba(120, 255, 215, 0.85)",
72
+ atmosphere: "rgba(120, 255, 215, 0.32)",
73
+ cometTail: "rgba(181, 255, 236, 0.68)",
56
74
  fontFamily: "\"Segoe UI Variable\", \"Bahnschrift\", sans-serif",
57
75
  displayFont: "\"Bahnschrift\", \"Segoe UI Variable\", sans-serif"
58
76
  },
@@ -76,6 +94,15 @@ const THEME_PRESETS = {
76
94
  starCore: "#ffb766",
77
95
  starStroke: "rgba(255, 236, 205, 0.88)",
78
96
  starGlow: "#ffe2ad",
97
+ spaceFog: "#1c0d12",
98
+ starfield: "rgba(255, 232, 214, 0.88)",
99
+ starfieldDim: "rgba(255, 176, 138, 0.38)",
100
+ objectSpecular: "#fff0e6",
101
+ orbitOpacity: 0.3,
102
+ orbitBandOpacity: 0.24,
103
+ selectionHalo: "rgba(255, 178, 125, 0.85)",
104
+ atmosphere: "rgba(255, 190, 140, 0.26)",
105
+ cometTail: "rgba(255, 214, 173, 0.62)",
79
106
  fontFamily: "\"Segoe UI Variable\", \"Bahnschrift\", sans-serif",
80
107
  displayFont: "\"Bahnschrift\", \"Segoe UI Variable\", sans-serif"
81
108
  }
@@ -1,6 +1,8 @@
1
1
  import type { CoordinatePoint, RenderOrbitVisual, RenderProjectionFallback, RenderPresetName, RenderSceneEvent, RenderSceneGroup, RenderSceneLabel, RenderScaleModel, RenderScene, RenderSceneObject, RenderSceneViewpoint, SceneRenderOptions, SpatialScene, ViewProjection, WorldOrbitObject, WorldOrbitDocument, WorldOrbitViewCamera } from "@worldorbit/core";
2
2
  export type WorldOrbitThemeName = "atlas" | "nightglass" | "ember";
3
3
  export type WorldOrbitViewMode = "2d" | "3d";
4
+ export type WorldOrbit3DQuality = "low" | "balanced" | "high";
5
+ export type WorldOrbit3DStyle = "symbolic" | "cinematic";
4
6
  export type WorldOrbitEmbedMode = "static" | "interactive" | "interactive-2d" | "interactive-3d";
5
7
  export type TooltipMode = "hover" | "pinned" | "disabled";
6
8
  export interface WorldOrbitTheme {
@@ -23,6 +25,15 @@ export interface WorldOrbitTheme {
23
25
  starCore: string;
24
26
  starStroke: string;
25
27
  starGlow: string;
28
+ spaceFog: string;
29
+ starfield: string;
30
+ starfieldDim: string;
31
+ objectSpecular: string;
32
+ orbitOpacity: number;
33
+ orbitBandOpacity: number;
34
+ selectionHalo: string;
35
+ atmosphere: string;
36
+ cometTail: string;
26
37
  fontFamily: string;
27
38
  displayFont: string;
28
39
  }
@@ -64,6 +75,8 @@ export interface ViewerRenderOptions extends Omit<SvgRenderOptions, "selectedObj
64
75
  projection?: "document" | ViewProjection;
65
76
  scaleModel?: Partial<RenderScaleModel>;
66
77
  viewMode?: WorldOrbitViewMode;
78
+ quality?: WorldOrbit3DQuality;
79
+ style3d?: WorldOrbit3DStyle;
67
80
  }
68
81
  export interface ViewerState {
69
82
  scale: number;
@@ -118,6 +131,8 @@ export interface ViewerAtlasState {
118
131
  scaleModel?: Partial<RenderScaleModel>;
119
132
  activeEventId?: string | null;
120
133
  viewMode?: WorldOrbitViewMode;
134
+ quality?: WorldOrbit3DQuality;
135
+ style3d?: WorldOrbit3DStyle;
121
136
  };
122
137
  filter: ViewerFilter | null;
123
138
  }
@@ -274,6 +289,8 @@ export interface WorldOrbitEmbedPayload {
274
289
  subtitle?: string;
275
290
  preset?: SceneRenderOptions["preset"];
276
291
  viewMode?: WorldOrbitViewMode;
292
+ quality?: WorldOrbit3DQuality;
293
+ style3d?: WorldOrbit3DStyle;
277
294
  initialViewpointId?: string;
278
295
  initialSelectionObjectId?: string;
279
296
  initialFilter?: ViewerFilter | null;
@@ -45,6 +45,8 @@ export function createInteractiveViewer(container, options) {
45
45
  preset: options.preset,
46
46
  projection: options.projection,
47
47
  viewMode: options.viewMode ?? "2d",
48
+ quality: options.quality ?? "balanced",
49
+ style3d: options.style3d ?? "symbolic",
48
50
  camera: options.camera ? { ...options.camera } : null,
49
51
  scaleModel: options.scaleModel ? { ...options.scaleModel } : undefined,
50
52
  theme: options.theme,
@@ -1318,6 +1320,9 @@ export function createInteractiveViewer(container, options) {
1318
1320
  if (label.hidden || !visibleObjectIds.has(label.objectId)) {
1319
1321
  continue;
1320
1322
  }
1323
+ if (is3DView() && !shouldRender3DLabel(label.objectId, visibleObjectIds)) {
1324
+ continue;
1325
+ }
1321
1326
  const point = is3DView()
1322
1327
  ? runtime3d?.projectObjectToContainer(label.objectId) ?? null
1323
1328
  : project2DScenePointToContainer({ x: label.x, y: label.y });
@@ -1361,6 +1366,44 @@ export function createInteractiveViewer(container, options) {
1361
1366
  function isEventVisible(event, visibleObjectIds) {
1362
1367
  return event.objectIds.some((objectId) => visibleObjectIds.has(objectId));
1363
1368
  }
1369
+ function shouldRender3DLabel(objectId, visibleObjectIds) {
1370
+ if (!is3DView()) {
1371
+ return true;
1372
+ }
1373
+ if (objectId === state.selectedObjectId || objectId === hoveredObjectId) {
1374
+ return true;
1375
+ }
1376
+ const object = getObjectById(objectId);
1377
+ if (!object || object.hidden || !visibleObjectIds.has(objectId)) {
1378
+ return false;
1379
+ }
1380
+ if (object.object.type === "star") {
1381
+ return true;
1382
+ }
1383
+ const selected = state.selectedObjectId ? buildObjectDetails(state.selectedObjectId) : null;
1384
+ const hovered = hoveredObjectId ? buildObjectDetails(hoveredObjectId) : null;
1385
+ const selectedFocus = selected
1386
+ ? new Set([
1387
+ selected.objectId,
1388
+ ...selected.renderObject.ancestorIds,
1389
+ ...selected.renderObject.childIds,
1390
+ ])
1391
+ : null;
1392
+ const hoveredFocus = hovered
1393
+ ? new Set([
1394
+ hovered.objectId,
1395
+ ...hovered.renderObject.ancestorIds,
1396
+ ...hovered.renderObject.childIds,
1397
+ ])
1398
+ : null;
1399
+ if (selectedFocus?.has(objectId) || hoveredFocus?.has(objectId)) {
1400
+ return true;
1401
+ }
1402
+ if (object.semanticGroupIds.length > 0 && object.visualRadius >= 12) {
1403
+ return true;
1404
+ }
1405
+ return object.childIds.length > 0 && object.visualRadius >= 10;
1406
+ }
1364
1407
  function createScreenLabelElement(descriptor) {
1365
1408
  const element = document.createElement("div");
1366
1409
  element.className = `wo-viewer-label wo-viewer-label-${descriptor.kind}`;
@@ -1500,6 +1543,8 @@ function cloneRenderOptions(renderOptions) {
1500
1543
  : renderOptions.theme,
1501
1544
  activeEventId: renderOptions.activeEventId ?? null,
1502
1545
  viewMode: renderOptions.viewMode ?? "2d",
1546
+ quality: renderOptions.quality ?? "balanced",
1547
+ style3d: renderOptions.style3d ?? "symbolic",
1503
1548
  };
1504
1549
  }
1505
1550
  function mergeRenderOptions(current, next) {
@@ -1538,6 +1583,8 @@ function mergeRenderOptions(current, next) {
1538
1583
  ? { ...next.theme }
1539
1584
  : next.theme ?? current.theme,
1540
1585
  viewMode: next.viewMode ?? current.viewMode ?? "2d",
1586
+ quality: next.quality ?? current.quality ?? "balanced",
1587
+ style3d: next.style3d ?? current.style3d ?? "symbolic",
1541
1588
  };
1542
1589
  }
1543
1590
  function hasSceneAffectingRenderOptions(options) {
@@ -1758,6 +1805,10 @@ function installViewerOverlayStyles() {
1758
1805
  position: absolute;
1759
1806
  display: grid;
1760
1807
  gap: 2px;
1808
+ padding: 4px 8px;
1809
+ border-radius: 999px;
1810
+ background: linear-gradient(180deg, rgba(5, 16, 26, 0.72), rgba(5, 16, 26, 0.38));
1811
+ border: 1px solid rgba(164, 194, 228, 0.16);
1761
1812
  color: #edf6ff;
1762
1813
  font-family: "Segoe UI Variable", "Segoe UI", sans-serif;
1763
1814
  line-height: 1.15;