worldorbit 3.2.2 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +546 -545
- package/dist/browser/core/dist/atlas-edit.js +146 -1
- package/dist/browser/core/dist/atlas-validate.js +105 -10
- package/dist/browser/core/dist/draft-parse.js +341 -16
- package/dist/browser/core/dist/draft.d.ts +2 -1
- package/dist/browser/core/dist/draft.js +25 -3
- package/dist/browser/core/dist/format.js +86 -4
- package/dist/browser/core/dist/index.d.ts +1 -0
- package/dist/browser/core/dist/index.js +1 -0
- package/dist/browser/core/dist/load.js +7 -2
- package/dist/browser/core/dist/normalize.js +1 -0
- package/dist/browser/core/dist/scene.js +11 -2
- package/dist/browser/core/dist/schema.js +11 -1
- package/dist/browser/core/dist/solver.d.ts +26 -0
- package/dist/browser/core/dist/solver.js +27 -0
- package/dist/browser/core/dist/types.d.ts +57 -3
- package/dist/browser/editor/dist/editor.js +844 -719
- package/dist/browser/editor/dist/types.d.ts +2 -1
- package/dist/browser/viewer/dist/minimap.js +9 -7
- package/dist/browser/viewer/dist/render.js +23 -19
- package/dist/browser/viewer/dist/runtime-3d.js +2 -0
- package/dist/browser/viewer/dist/viewer.js +7 -3
- package/dist/obsidian-plugin/README.md +141 -124
- package/dist/obsidian-plugin/main.js +31 -31
- package/dist/unpkg/core/dist/atlas-edit.js +146 -1
- package/dist/unpkg/core/dist/atlas-validate.js +105 -10
- package/dist/unpkg/core/dist/draft-parse.js +341 -16
- package/dist/unpkg/core/dist/draft.d.ts +2 -1
- package/dist/unpkg/core/dist/draft.js +25 -3
- package/dist/unpkg/core/dist/format.js +86 -4
- package/dist/unpkg/core/dist/index.d.ts +1 -0
- package/dist/unpkg/core/dist/index.js +1 -0
- package/dist/unpkg/core/dist/load.js +7 -2
- package/dist/unpkg/core/dist/normalize.js +1 -0
- package/dist/unpkg/core/dist/scene.js +11 -2
- package/dist/unpkg/core/dist/schema.js +11 -1
- package/dist/unpkg/core/dist/solver.d.ts +26 -0
- package/dist/unpkg/core/dist/solver.js +27 -0
- package/dist/unpkg/core/dist/types.d.ts +57 -3
- package/dist/unpkg/editor/dist/editor.js +844 -719
- package/dist/unpkg/editor/dist/types.d.ts +2 -1
- package/dist/unpkg/viewer/dist/minimap.js +9 -7
- package/dist/unpkg/viewer/dist/render.js +23 -19
- package/dist/unpkg/viewer/dist/runtime-3d.js +2 -0
- package/dist/unpkg/viewer/dist/viewer.js +7 -3
- package/dist/unpkg/worldorbit-core.min.js +10 -10
- package/dist/unpkg/worldorbit-editor.min.js +359 -332
- package/dist/unpkg/worldorbit-markdown.min.js +28 -28
- package/dist/unpkg/worldorbit-viewer.min.js +214 -214
- package/dist/unpkg/worldorbit.js +758 -40
- package/dist/unpkg/worldorbit.min.js +223 -223
- package/package.json +5 -1
- package/packages/core/dist/atlas-edit.js +146 -1
- package/packages/core/dist/atlas-validate.js +105 -10
- package/packages/core/dist/draft-parse.js +341 -16
- package/packages/core/dist/draft.d.ts +2 -1
- package/packages/core/dist/draft.js +25 -3
- package/packages/core/dist/format.js +86 -4
- package/packages/core/dist/index.d.ts +1 -0
- package/packages/core/dist/index.js +1 -0
- package/packages/core/dist/load.js +7 -2
- package/packages/core/dist/normalize.js +1 -0
- package/packages/core/dist/scene.js +11 -2
- package/packages/core/dist/schema.js +11 -1
- package/packages/core/dist/solver.d.ts +26 -0
- package/packages/core/dist/solver.js +27 -0
- package/packages/core/dist/types.d.ts +57 -3
- package/packages/editor/dist/editor.js +844 -719
- package/packages/editor/dist/types.d.ts +2 -1
- package/packages/viewer/dist/minimap.js +9 -7
- package/packages/viewer/dist/render.js +23 -19
- package/packages/viewer/dist/runtime-3d.js +2 -0
- package/packages/viewer/dist/viewer.js +7 -3
|
@@ -9,6 +9,7 @@ export interface WorldOrbitEditorSnapshot {
|
|
|
9
9
|
diagnostics: AtlasResolvedDiagnostic[];
|
|
10
10
|
selection: WorldOrbitEditorSelection | null;
|
|
11
11
|
}
|
|
12
|
+
export type WorldOrbitEditorObjectType = WorldOrbitObject["type"] | "craft";
|
|
12
13
|
export interface WorldOrbitEditorOptions {
|
|
13
14
|
source?: string;
|
|
14
15
|
atlasDocument?: WorldOrbitAtlasDocument;
|
|
@@ -40,7 +41,7 @@ export interface WorldOrbitEditor {
|
|
|
40
41
|
canRedo(): boolean;
|
|
41
42
|
undo(): boolean;
|
|
42
43
|
redo(): boolean;
|
|
43
|
-
addObject(type?:
|
|
44
|
+
addObject(type?: WorldOrbitEditorObjectType): string;
|
|
44
45
|
addEvent(): string;
|
|
45
46
|
addViewpoint(): string;
|
|
46
47
|
addAnnotation(): string;
|
|
@@ -28,13 +28,13 @@ export function renderViewerMinimap(scene, state, visibleObjects) {
|
|
|
28
28
|
return `<circle cx="${formatNumber(x)}" cy="${formatNumber(y)}" r="${formatNumber(radius)}" fill="${fill}" fill-opacity="0.92" />`;
|
|
29
29
|
})
|
|
30
30
|
.join("");
|
|
31
|
-
return `<div data-worldorbit-minimap="true" style="position:absolute;right:16px;bottom:16px;width:${MINIMAP_WIDTH}px;height:${MINIMAP_HEIGHT}px;padding:8px;border-radius:16px;background:rgba(5, 14, 22, 0.78);border:1px solid rgba(179, 216, 255, 0.16);box-shadow:0 14px 28px rgba(0, 0, 0, 0.24);backdrop-filter:blur(8px);pointer-events:none;">
|
|
32
|
-
<svg width="${MINIMAP_WIDTH}" height="${MINIMAP_HEIGHT}" viewBox="0 0 ${MINIMAP_WIDTH} ${MINIMAP_HEIGHT}" role="presentation" aria-hidden="true">
|
|
33
|
-
<rect x="0.5" y="0.5" width="${MINIMAP_WIDTH - 1}" height="${MINIMAP_HEIGHT - 1}" rx="12" ry="12" fill="rgba(7, 17, 27, 0.85)" stroke="rgba(179, 216, 255, 0.18)" />
|
|
34
|
-
<rect x="${formatNumber(bounds.minX * scale + translateX)}" y="${formatNumber(bounds.minY * scale + translateY)}" width="${formatNumber(bounds.width * scale)}" height="${formatNumber(bounds.height * scale)}" rx="10" ry="10" fill="rgba(163, 209, 255, 0.04)" stroke="rgba(163, 209, 255, 0.16)" />
|
|
35
|
-
${objectsMarkup}
|
|
36
|
-
<rect x="${formatNumber(viewport.minX * scale + translateX)}" y="${formatNumber(viewport.minY * scale + translateY)}" width="${formatNumber(viewport.width * scale)}" height="${formatNumber(viewport.height * scale)}" rx="8" ry="8" fill="rgba(255, 180, 100, 0.09)" stroke="rgba(255, 180, 100, 0.88)" stroke-width="1.4" />
|
|
37
|
-
</svg>
|
|
31
|
+
return `<div data-worldorbit-minimap="true" style="position:absolute;right:16px;bottom:16px;width:${MINIMAP_WIDTH}px;height:${MINIMAP_HEIGHT}px;padding:8px;border-radius:16px;background:rgba(5, 14, 22, 0.78);border:1px solid rgba(179, 216, 255, 0.16);box-shadow:0 14px 28px rgba(0, 0, 0, 0.24);backdrop-filter:blur(8px);pointer-events:none;">
|
|
32
|
+
<svg width="${MINIMAP_WIDTH}" height="${MINIMAP_HEIGHT}" viewBox="0 0 ${MINIMAP_WIDTH} ${MINIMAP_HEIGHT}" role="presentation" aria-hidden="true">
|
|
33
|
+
<rect x="0.5" y="0.5" width="${MINIMAP_WIDTH - 1}" height="${MINIMAP_HEIGHT - 1}" rx="12" ry="12" fill="rgba(7, 17, 27, 0.85)" stroke="rgba(179, 216, 255, 0.18)" />
|
|
34
|
+
<rect x="${formatNumber(bounds.minX * scale + translateX)}" y="${formatNumber(bounds.minY * scale + translateY)}" width="${formatNumber(bounds.width * scale)}" height="${formatNumber(bounds.height * scale)}" rx="10" ry="10" fill="rgba(163, 209, 255, 0.04)" stroke="rgba(163, 209, 255, 0.16)" />
|
|
35
|
+
${objectsMarkup}
|
|
36
|
+
<rect x="${formatNumber(viewport.minX * scale + translateX)}" y="${formatNumber(viewport.minY * scale + translateY)}" width="${formatNumber(viewport.width * scale)}" height="${formatNumber(viewport.height * scale)}" rx="8" ry="8" fill="rgba(255, 180, 100, 0.09)" stroke="rgba(255, 180, 100, 0.88)" stroke-width="1.4" />
|
|
37
|
+
</svg>
|
|
38
38
|
</div>`;
|
|
39
39
|
}
|
|
40
40
|
function minimapColorForObject(type) {
|
|
@@ -52,6 +52,8 @@ function minimapColorForObject(type) {
|
|
|
52
52
|
return "#a7a5b8";
|
|
53
53
|
case "comet":
|
|
54
54
|
return "#9ce7ff";
|
|
55
|
+
case "craft":
|
|
56
|
+
return "#ffb47f";
|
|
55
57
|
case "structure":
|
|
56
58
|
return "#ff7f5f";
|
|
57
59
|
case "phenomenon":
|
|
@@ -89,14 +89,14 @@ export function renderSceneToSvg(scene, options = {}) {
|
|
|
89
89
|
.wo-bg-glow { fill: url(#wo-bg-glow); }
|
|
90
90
|
.wo-grid { fill: none; stroke: ${theme.guide}; stroke-width: 1; }
|
|
91
91
|
.wo-orbit { fill: none; stroke: ${theme.orbit}; stroke-width: 1.5; }
|
|
92
|
-
.wo-orbit-back { opacity: 0.38; stroke-dasharray: 8 6; }
|
|
93
|
-
.wo-orbit-front { opacity: 0.9; }
|
|
94
|
-
.wo-orbit-band { stroke: ${theme.orbitBand}; stroke-linecap: round; }
|
|
95
|
-
.wo-relation { stroke: ${theme.relation}; stroke-width: 2; stroke-dasharray: 10 6; }
|
|
96
|
-
.wo-event-line { stroke: ${theme.accent}; stroke-width: 1.6; stroke-dasharray: 5 5; opacity: 0.72; }
|
|
97
|
-
.wo-event-node { fill: ${theme.accent}; stroke: ${theme.selected}; stroke-width: 1.4; opacity: 0.92; }
|
|
98
|
-
.wo-event-label { fill: ${theme.accent}; font-family: ${theme.fontFamily}; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; }
|
|
99
|
-
.wo-leader { stroke: ${theme.leader}; stroke-width: 1.5; stroke-dasharray: 6 5; }
|
|
92
|
+
.wo-orbit-back { opacity: 0.38; stroke-dasharray: 8 6; }
|
|
93
|
+
.wo-orbit-front { opacity: 0.9; }
|
|
94
|
+
.wo-orbit-band { stroke: ${theme.orbitBand}; stroke-linecap: round; }
|
|
95
|
+
.wo-relation { stroke: ${theme.relation}; stroke-width: 2; stroke-dasharray: 10 6; }
|
|
96
|
+
.wo-event-line { stroke: ${theme.accent}; stroke-width: 1.6; stroke-dasharray: 5 5; opacity: 0.72; }
|
|
97
|
+
.wo-event-node { fill: ${theme.accent}; stroke: ${theme.selected}; stroke-width: 1.4; opacity: 0.92; }
|
|
98
|
+
.wo-event-label { fill: ${theme.accent}; font-family: ${theme.fontFamily}; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; }
|
|
99
|
+
.wo-leader { stroke: ${theme.leader}; stroke-width: 1.5; stroke-dasharray: 6 5; }
|
|
100
100
|
.wo-label { fill: ${theme.ink}; font-family: ${theme.fontFamily}; font-weight: 600; letter-spacing: 0.02em; }
|
|
101
101
|
.wo-label-secondary { fill: ${theme.muted}; font-family: ${theme.fontFamily}; font-weight: 500; }
|
|
102
102
|
.wo-title { fill: ${theme.ink}; font: 700 24px ${theme.displayFont}; letter-spacing: 0.06em; text-transform: uppercase; }
|
|
@@ -127,13 +127,13 @@ export function renderSceneToSvg(scene, options = {}) {
|
|
|
127
127
|
<g data-worldorbit-world="true">
|
|
128
128
|
<g data-worldorbit-camera-root="${WORLD_LAYER_ID}" id="${WORLD_LAYER_ID}">
|
|
129
129
|
<g data-worldorbit-world-content="true">
|
|
130
|
-
${layers.orbits ? `<g data-layer-id="orbits-back">${orbitMarkup.back}</g>` : ""}
|
|
131
|
-
${layers.guides ? `<g data-layer-id="guides">${leaderMarkup}</g>` : ""}
|
|
132
|
-
${layers.relations ? `<g data-layer-id="relations">${relationMarkup}</g>` : ""}
|
|
133
|
-
${layers.events ? `<g data-layer-id="events">${eventMarkup}</g>` : ""}
|
|
134
|
-
${layers.objects ? `<g data-layer-id="objects">${objectMarkup}</g>` : ""}
|
|
135
|
-
${layers.orbits ? `<g data-layer-id="orbits-front">${orbitMarkup.front}</g>` : ""}
|
|
136
|
-
${layers.labels ? `<g data-layer-id="labels">${labelMarkup}</g>` : ""}
|
|
130
|
+
${layers.orbits ? `<g data-layer-id="orbits-back">${orbitMarkup.back}</g>` : ""}
|
|
131
|
+
${layers.guides ? `<g data-layer-id="guides">${leaderMarkup}</g>` : ""}
|
|
132
|
+
${layers.relations ? `<g data-layer-id="relations">${relationMarkup}</g>` : ""}
|
|
133
|
+
${layers.events ? `<g data-layer-id="events">${eventMarkup}</g>` : ""}
|
|
134
|
+
${layers.objects ? `<g data-layer-id="objects">${objectMarkup}</g>` : ""}
|
|
135
|
+
${layers.orbits ? `<g data-layer-id="orbits-front">${orbitMarkup.front}</g>` : ""}
|
|
136
|
+
${layers.labels ? `<g data-layer-id="labels">${labelMarkup}</g>` : ""}
|
|
137
137
|
</g>
|
|
138
138
|
</g>
|
|
139
139
|
</g>
|
|
@@ -152,10 +152,10 @@ function renderSceneEventOverlay(scene, event, visibleObjectIds, theme) {
|
|
|
152
152
|
const lineMarkup = participants
|
|
153
153
|
.map((object) => `<line class="wo-event-line" x1="${event.x}" y1="${event.y}" x2="${object.x}" y2="${object.y}" stroke="${escapeAttribute(stroke)}" data-event-id="${escapeAttribute(event.eventId)}" data-object-id="${escapeAttribute(object.objectId)}" />`)
|
|
154
154
|
.join("");
|
|
155
|
-
return `<g class="wo-event" data-render-id="${escapeXml(event.renderId)}" data-event-id="${escapeAttribute(event.eventId)}">
|
|
156
|
-
${lineMarkup}
|
|
157
|
-
<circle class="wo-event-node" cx="${event.x}" cy="${event.y}" r="5" fill="${escapeAttribute(stroke)}" />
|
|
158
|
-
<text class="wo-event-label" x="${event.x}" y="${event.y - 10}" text-anchor="middle" font-size="10">${escapeXml(label)}</text>
|
|
155
|
+
return `<g class="wo-event" data-render-id="${escapeXml(event.renderId)}" data-event-id="${escapeAttribute(event.eventId)}">
|
|
156
|
+
${lineMarkup}
|
|
157
|
+
<circle class="wo-event-node" cx="${event.x}" cy="${event.y}" r="5" fill="${escapeAttribute(stroke)}" />
|
|
158
|
+
<text class="wo-event-label" x="${event.x}" y="${event.y - 10}" text-anchor="middle" font-size="10">${escapeXml(label)}</text>
|
|
159
159
|
</g>`;
|
|
160
160
|
}
|
|
161
161
|
export function renderDocumentToSvg(document, options = {}) {
|
|
@@ -259,6 +259,8 @@ function renderObjectBody(object, x, y, radius, palette, options = {}) {
|
|
|
259
259
|
? `<circle cx="${x}" cy="${y}" r="${radius}" fill="transparent" stroke="${palette.stroke}" stroke-width="1.4" />`
|
|
260
260
|
: `<path d="M ${x - radius * 2} ${y + radius * 1.3} Q ${x - radius * 0.7} ${y + radius * 0.3} ${x - radius * 0.45} ${y}" fill="none" stroke="${tail}" stroke-width="${Math.max(2, radius * 0.8)}" stroke-linecap="round" opacity="0.85" />
|
|
261
261
|
<circle cx="${x}" cy="${y}" r="${radius}" fill="${fill}" stroke="${palette.stroke}" stroke-width="1.4" />`;
|
|
262
|
+
case "craft":
|
|
263
|
+
return `<polygon points="${diamondPoints(x, y, radius * 0.85)}" fill="${fill}" stroke="${palette.stroke}" stroke-width="1.4" />`;
|
|
262
264
|
case "structure":
|
|
263
265
|
return `<polygon points="${diamondPoints(x, y, radius)}" fill="${fill}" stroke="${palette.stroke}" stroke-width="1.4" />`;
|
|
264
266
|
case "phenomenon": {
|
|
@@ -443,6 +445,8 @@ function basePaletteForType(type, kind, theme) {
|
|
|
443
445
|
return { fill: "#9ce7ff", stroke: "#e7fbff" };
|
|
444
446
|
case "ring":
|
|
445
447
|
return { fill: "#e59f7d", stroke: "#fff0d3" };
|
|
448
|
+
case "craft":
|
|
449
|
+
return { fill: "#ffb47f", stroke: "#fff0d3" };
|
|
446
450
|
case "structure":
|
|
447
451
|
return { fill: theme.accentStrong, stroke: "#fff2ea" };
|
|
448
452
|
case "phenomenon":
|
|
@@ -1086,7 +1086,7 @@ export function createInteractiveViewer(container, options) {
|
|
|
1086
1086
|
tooltipRoot.hidden = false;
|
|
1087
1087
|
tooltipRoot.dataset.mode = resolved.mode;
|
|
1088
1088
|
tooltipRoot.classList.toggle("is-pinned", resolved.mode === "pinned");
|
|
1089
|
-
tooltipRoot.style.pointerEvents = "auto";
|
|
1089
|
+
tooltipRoot.style.pointerEvents = resolved.mode === "pinned" ? "auto" : "none";
|
|
1090
1090
|
tooltipRoot.style.visibility = "hidden";
|
|
1091
1091
|
renderTooltipContent(tooltipRoot, tooltipDetails, resolved.mode);
|
|
1092
1092
|
positionTooltip(tooltipRoot, details.renderObject);
|
|
@@ -1732,7 +1732,11 @@ function getClosestObjectId(target) {
|
|
|
1732
1732
|
if (!(target instanceof Element)) {
|
|
1733
1733
|
return null;
|
|
1734
1734
|
}
|
|
1735
|
-
|
|
1735
|
+
const selectionTarget = target.closest("[data-object-id], [data-orbit-object-id]");
|
|
1736
|
+
if (!selectionTarget) {
|
|
1737
|
+
return null;
|
|
1738
|
+
}
|
|
1739
|
+
return selectionTarget.dataset.objectId ?? selectionTarget.dataset.orbitObjectId ?? null;
|
|
1736
1740
|
}
|
|
1737
1741
|
function ensureBrowserEnvironment(container) {
|
|
1738
1742
|
if (typeof window === "undefined" || typeof document === "undefined") {
|
|
@@ -1864,7 +1868,7 @@ function installViewerOverlayStyles() {
|
|
|
1864
1868
|
backdrop-filter: blur(12px);
|
|
1865
1869
|
font: 500 13px/1.5 "Segoe UI Variable", "Segoe UI", sans-serif;
|
|
1866
1870
|
}
|
|
1867
|
-
.wo-viewer-tooltip-root[data-mode="hover"] { pointer-events:
|
|
1871
|
+
.wo-viewer-tooltip-root[data-mode="hover"] { pointer-events: none; }
|
|
1868
1872
|
.wo-viewer-tooltip-root[data-mode="pinned"] { pointer-events: auto; }
|
|
1869
1873
|
.wo-tooltip-card { display: grid; gap: 10px; }
|
|
1870
1874
|
.wo-tooltip-head { display: grid; grid-template-columns: 52px minmax(0, 1fr); gap: 12px; align-items: center; }
|