@nebula-spatial/viewer 0.1.0 → 0.2.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/dist/types.d.ts CHANGED
@@ -1,5 +1,38 @@
1
1
  import type { Box3, ColorRepresentation, Object3D, Vector3 } from 'three';
2
+ import type { CadViewerCapability, CameraStateStore, ViewerUiOptions } from './cad/types';
3
+ export type { CadBlockModel, CadDocumentHandle, CadFontResolver, CadResolvedTextFont, CadHudModel, CadInspectorModel, CadLayerModel, CadLoadSource, CadOpenOptions, CadTextDetails, CadTextSelection, CadTextSelectionId, CadViewerCapability, ResolveTextFont, CadViewerEventMap, CameraStateStore, ViewerUiOptions, ViewerUiParts, ViewerUiPreset, ViewerUiTheme, } from './cad/types';
2
4
  export type ViewerViewMode = '2d' | '3d';
5
+ export interface ViewerDocumentRect {
6
+ readonly minX: number;
7
+ readonly minY: number;
8
+ readonly maxX: number;
9
+ readonly maxY: number;
10
+ }
11
+ export interface ViewerOrthographicSnapshot {
12
+ readonly left: number;
13
+ readonly right: number;
14
+ readonly top: number;
15
+ readonly bottom: number;
16
+ readonly zoom: number;
17
+ readonly positionX: number;
18
+ readonly positionY: number;
19
+ readonly targetX: number;
20
+ readonly targetY: number;
21
+ }
22
+ export interface ViewerOrbitSnapshot {
23
+ readonly targetX: number;
24
+ readonly targetY: number;
25
+ readonly targetZ: number;
26
+ readonly distance: number;
27
+ readonly yaw: number;
28
+ readonly pitch: number;
29
+ }
30
+ export interface ViewerCameraSnapshot {
31
+ readonly schemaVersion: number;
32
+ readonly viewMode: ViewerViewMode;
33
+ readonly orthographic?: ViewerOrthographicSnapshot;
34
+ readonly orbit?: ViewerOrbitSnapshot;
35
+ }
3
36
  export interface ViewerOptions {
4
37
  viewport: HTMLElement;
5
38
  canvas: HTMLCanvasElement;
@@ -10,6 +43,10 @@ export interface ViewerOptions {
10
43
  initialViewMode?: ViewerViewMode;
11
44
  autoSelectOnPick?: boolean;
12
45
  pointerPick?: boolean;
46
+ cameraStateStore?: CameraStateStore | false;
47
+ /** Max delay for merged viewport demands while the interaction is active. Default 160ms. */
48
+ viewportDemandCoalesceMs?: number;
49
+ ui?: ViewerUiOptions;
13
50
  }
14
51
  export interface ViewerFitViewOptions {
15
52
  padding?: number;
@@ -31,20 +68,24 @@ export interface ViewerPickResult {
31
68
  export interface ViewerHighlightOptions {
32
69
  color?: ColorRepresentation;
33
70
  }
71
+ export interface ViewerRenderStats {
72
+ readonly drawCalls: number;
73
+ readonly submittedVertexRefs: number;
74
+ readonly fps: number;
75
+ }
76
+ export interface ViewerPointerEvent {
77
+ clientX: number;
78
+ clientY: number;
79
+ buttons: number;
80
+ shiftKey: boolean;
81
+ ctrlKey: boolean;
82
+ metaKey: boolean;
83
+ }
34
84
  export interface ViewerEventMap {
35
- 'pointer-click': {
36
- clientX: number;
37
- clientY: number;
38
- shiftKey: boolean;
39
- ctrlKey: boolean;
40
- metaKey: boolean;
41
- };
42
- pick: {
43
- clientX: number;
44
- clientY: number;
45
- shiftKey: boolean;
46
- ctrlKey: boolean;
47
- metaKey: boolean;
85
+ 'pointer-move': ViewerPointerEvent;
86
+ 'pointer-leave': ViewerPointerEvent;
87
+ 'pointer-click': ViewerPointerEvent;
88
+ pick: ViewerPointerEvent & {
48
89
  result: ViewerPickResult | null;
49
90
  };
50
91
  'selection-change': {
@@ -59,6 +100,21 @@ export interface ViewerEventMap {
59
100
  resize: {
60
101
  resized: boolean;
61
102
  };
103
+ 'viewport-change': {
104
+ viewportWidthPx: number;
105
+ viewportHeightPx: number;
106
+ worldUnitsPerPixel: number;
107
+ interaction: 'active' | 'idle';
108
+ };
109
+ 'interaction-change': {
110
+ interaction: 'active' | 'idle';
111
+ };
112
+ 'content-change': {
113
+ source: 'object' | 'cad';
114
+ };
115
+ 'camera-change': {
116
+ viewMode: ViewerViewMode;
117
+ };
62
118
  }
63
119
  export interface Viewer {
64
120
  readonly viewport: HTMLElement;
@@ -67,10 +123,13 @@ export interface Viewer {
67
123
  readonly selectedObject: Object3D | null;
68
124
  readonly highlightedObject: Object3D | null;
69
125
  readonly isDisposed: boolean;
126
+ readonly cad: CadViewerCapability;
70
127
  addObject(object: Object3D): void;
71
128
  removeObject(object: Object3D): boolean;
72
129
  setVisible(object: Object3D, visible: boolean): void;
73
- setViewMode(mode: ViewerViewMode): void;
130
+ setViewMode(mode: ViewerViewMode, options?: {
131
+ preserveOrbit?: boolean;
132
+ }): void;
74
133
  fitView(target?: Object3D | Box3, options?: ViewerFitViewOptions): boolean;
75
134
  screenToWorldOnPlane(clientX: number, clientY: number, planeZ?: number): Vector3 | null;
76
135
  pick(clientX: number, clientY: number, options?: ViewerPickOptions): ViewerPickResult | null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nebula-spatial/viewer",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Read-only Three.js viewer facade",
5
5
  "license": "ISC",
6
6
  "engines": {
@@ -10,6 +10,7 @@
10
10
  "files": [
11
11
  "dist",
12
12
  "README.md",
13
+ "CHANGELOG.md",
13
14
  "package.json"
14
15
  ],
15
16
  "main": "./dist/index.js",
@@ -26,7 +27,7 @@
26
27
  "scripts": {
27
28
  "build": "npm run check:boundary && npm run typecheck && npm run build:bundle && npm run build:types && npm run check:dist",
28
29
  "build:bundle": "vite build --config vite.config.ts",
29
- "build:types": "tsc --project tsconfig.build.json",
30
+ "build:types": "tsc --project tsconfig.build.json && node scripts/prune-dist-types.mjs",
30
31
  "check:boundary": "node scripts/check-boundary.mjs",
31
32
  "check:dist": "node scripts/check-dist.mjs",
32
33
  "typecheck": "tsc --project tsconfig.json --noEmit",
@@ -34,14 +35,19 @@
34
35
  "pack:dry": "npm pack --dry-run",
35
36
  "prepack": "npm run build"
36
37
  },
38
+ "dependencies": {
39
+ "@nebula-spatial/cad-loader": "^0.2.0"
40
+ },
37
41
  "peerDependencies": {
38
42
  "three": "0.182.0"
39
43
  },
40
44
  "devDependencies": {
41
45
  "@types/node": "^25.6.0",
46
+ "@types/jsdom": "^27.0.0",
42
47
  "@types/three": "0.182.0",
43
48
  "three": "0.182.0",
44
49
  "typescript": "^5.6.3",
50
+ "jsdom": "^29.0.2",
45
51
  "vite": "^5.4.10",
46
52
  "vitest": "^2.1.8"
47
53
  }