@vertexvis/viewer 0.17.5-testing.4 → 0.17.5
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.template.md +3 -3
- package/dist/cjs/{controller-4e9ef328.js → controller-c7c4f333.js} +6 -6
- package/dist/cjs/controller-c7c4f333.js.map +1 -0
- package/dist/cjs/index.cjs.js +2 -2
- package/dist/cjs/{scene-9762fef8.js → scene-4425281f.js} +6 -3
- package/dist/cjs/scene-4425281f.js.map +1 -0
- package/dist/cjs/vertex-scene-tree-search_3.cjs.entry.js +1 -3
- package/dist/cjs/vertex-scene-tree-search_3.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-scene-tree.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer.cjs.entry.js +13 -10
- package/dist/cjs/vertex-viewer.cjs.entry.js.map +1 -1
- package/dist/collection/components/scene-tree/lib/controller.js +5 -5
- package/dist/collection/components/scene-tree/lib/controller.js.map +1 -1
- package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js +1 -3
- package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js.map +1 -1
- package/dist/collection/components/viewer/viewer.js +3 -3
- package/dist/collection/components/viewer/viewer.js.map +1 -1
- package/dist/collection/lib/interactions/interactionApiOrthographic.js +5 -4
- package/dist/collection/lib/interactions/interactionApiOrthographic.js.map +1 -1
- package/dist/collection/lib/interactions/interactionApiPerspective.js +4 -3
- package/dist/collection/lib/interactions/interactionApiPerspective.js.map +1 -1
- package/dist/collection/lib/interactions/multiTouchInteractionHandler.js +3 -2
- package/dist/collection/lib/interactions/multiTouchInteractionHandler.js.map +1 -1
- package/dist/collection/lib/types/loadableResource.js +5 -2
- package/dist/collection/lib/types/loadableResource.js.map +1 -1
- package/dist/collection/testing/viewer.js +2 -2
- package/dist/collection/testing/viewer.js.map +1 -1
- package/dist/custom-elements/index.js +23 -19
- package/dist/custom-elements/index.js.map +1 -1
- package/dist/esm/{controller-53f803d9.js → controller-bbcc1700.js} +6 -6
- package/dist/esm/controller-bbcc1700.js.map +1 -0
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.mjs +2 -2
- package/dist/esm/{scene-1bd307f3.js → scene-31d88655.js} +6 -3
- package/dist/esm/scene-31d88655.js.map +1 -0
- package/dist/esm/vertex-scene-tree-search_3.entry.js +1 -3
- package/dist/esm/vertex-scene-tree-search_3.entry.js.map +1 -1
- package/dist/esm/vertex-scene-tree.entry.js +1 -1
- package/dist/esm/vertex-viewer-pin-group.entry.js +1 -1
- package/dist/esm/vertex-viewer.entry.js +13 -10
- package/dist/esm/vertex-viewer.entry.js.map +1 -1
- package/dist/types/components/viewer/viewer.d.ts +2 -2
- package/dist/types/components.d.ts +3 -3
- package/dist/types/testing/viewer.d.ts +2 -2
- package/dist/viewer/index.esm.js +1 -1
- package/dist/viewer/{p-921ec41b.js → p-3d19b37e.js} +2 -2
- package/dist/viewer/p-3d19b37e.js.map +1 -0
- package/dist/viewer/p-43eb668e.js +5 -0
- package/dist/viewer/p-43eb668e.js.map +1 -0
- package/dist/viewer/{p-951a2e08.entry.js → p-5ce0269a.entry.js} +2 -2
- package/dist/viewer/p-5ce0269a.entry.js.map +1 -0
- package/dist/viewer/{p-1815d19b.entry.js → p-6114701c.entry.js} +2 -2
- package/dist/viewer/p-8f16e792.entry.js +5 -0
- package/dist/viewer/p-8f16e792.entry.js.map +1 -0
- package/dist/viewer/{p-9b8dae4a.entry.js → p-d256624d.entry.js} +2 -2
- package/dist/viewer/viewer.esm.js +1 -1
- package/package.json +7 -7
- package/readme.md +7 -7
- package/dist/cjs/controller-4e9ef328.js.map +0 -1
- package/dist/cjs/scene-9762fef8.js.map +0 -1
- package/dist/esm/controller-53f803d9.js.map +0 -1
- package/dist/esm/scene-1bd307f3.js.map +0 -1
- package/dist/viewer/p-27a5034e.entry.js +0 -5
- package/dist/viewer/p-27a5034e.entry.js.map +0 -1
- package/dist/viewer/p-921ec41b.js.map +0 -1
- package/dist/viewer/p-951a2e08.entry.js.map +0 -1
- package/dist/viewer/p-c3be5b4d.js +0 -5
- package/dist/viewer/p-c3be5b4d.js.map +0 -1
- /package/dist/viewer/{p-1815d19b.entry.js.map → p-6114701c.entry.js.map} +0 -0
- /package/dist/viewer/{p-9b8dae4a.entry.js.map → p-d256624d.entry.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewer.js","sourceRoot":"","sources":["../../src/testing/viewer.ts"],"names":[],"mappings":"AACA,OAAO,EACL,MAAM,EACN,QAAQ,IAAI,cAAc,EAC1B,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAalC,MAAM,CAAC,MAAM,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"viewer.js","sourceRoot":"","sources":["../../src/testing/viewer.ts"],"names":[],"mappings":"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","sourcesContent":["import { vertexvis } from '@vertexvis/frame-streaming-protos';\nimport {\n encode,\n Fixtures as StreamFixtures,\n WebSocketClientMock,\n} from '@vertexvis/stream-api';\nimport { Async } from '@vertexvis/utils';\n\nimport { ViewerStream } from '../lib/stream/stream';\nimport * as Fixtures from './fixtures';\nimport { random } from './random';\n\ninterface ViewerStreamOperationCtx {\n stream: ViewerStream;\n ws: WebSocketClientMock;\n viewer: HTMLVertexViewerElement;\n}\n\ninterface LoadViewerStreamKeyOptions {\n token?: string;\n beforeConnected?: VoidFunction;\n}\n\nexport const key1 = 'urn:vertex:stream-key:123';\n\nexport const key2 = 'urn:vertex:stream-key:234';\n\nexport function makeViewerStream(): {\n stream: ViewerStream;\n ws: WebSocketClientMock;\n} {\n const ws = new WebSocketClientMock();\n const stream = new ViewerStream(ws);\n return { stream, ws };\n}\n\nexport async function loadViewerStreamKey(\n urn: string,\n { viewer, stream, ws }: ViewerStreamOperationCtx,\n {\n token = random.string({ alpha: true }),\n beforeConnected,\n }: LoadViewerStreamKeyOptions = {}\n): Promise<void> {\n jest.spyOn(stream, 'startStream').mockResolvedValue(\n StreamFixtures.Responses.startStream({\n result: {\n token: {\n token: token,\n expiresIn: new Date().getTime() + 10000,\n },\n },\n }).response\n );\n jest\n .spyOn(stream, 'syncTime')\n .mockResolvedValue(StreamFixtures.Responses.syncTime().response);\n\n const connecting = stream.stateChanged.onceWhen(\n (s) => s.type === 'connecting'\n );\n const loaded = viewer.load(urn);\n\n // Emit frame drawn on next event loop\n await connecting;\n await Async.delay(10);\n beforeConnected?.();\n ws.receiveMessage(\n encode(\n StreamFixtures.Requests.drawFrame({\n payload: Fixtures.drawFramePayloadPerspective,\n })\n )\n );\n await loaded;\n}\n\ninterface GracefulReconnectOptions<T = void> {\n beforeReconnect?: () => Promise<T>;\n}\n\nexport async function gracefulReconnect<T = void>(\n { viewer, stream, ws }: ViewerStreamOperationCtx,\n { beforeReconnect }: GracefulReconnectOptions<T> = {}\n): Promise<T | undefined> {\n jest\n .spyOn(stream, 'reconnect')\n .mockResolvedValue(StreamFixtures.Responses.reconnect().response);\n jest\n .spyOn(stream, 'syncTime')\n .mockResolvedValue(StreamFixtures.Responses.syncTime().response);\n\n const connecting = stream.stateChanged.onceWhen(\n (s) => s.type === 'reconnecting'\n );\n\n ws.receiveMessage(encode(StreamFixtures.Requests.gracefulReconnect()));\n const result = await beforeReconnect?.();\n\n await connecting;\n await Async.delay(10);\n\n ws.receiveMessage(\n encode(\n StreamFixtures.Requests.drawFrame({\n payload: Fixtures.drawFramePayloadPerspective,\n })\n )\n );\n\n return result;\n}\n\nexport function receiveFrame(\n ws: WebSocketClientMock,\n transformPayload?: (\n payload: vertexvis.protobuf.stream.IDrawFramePayload\n ) => vertexvis.protobuf.stream.IDrawFramePayload\n): void {\n ws.receiveMessage(\n encode(\n StreamFixtures.Requests.drawFrame({\n payload: transformPayload?.(Fixtures.drawFramePayloadPerspective),\n })\n )\n );\n}\n"]}
|
|
@@ -12309,10 +12309,10 @@ class SceneTreeController {
|
|
|
12309
12309
|
this.updateState(Object.assign(Object.assign({}, this.state), { connection: connecting }));
|
|
12310
12310
|
try {
|
|
12311
12311
|
this.log('Scene tree controller connecting.');
|
|
12312
|
-
|
|
12313
|
-
|
|
12314
|
-
|
|
12315
|
-
|
|
12312
|
+
// Ensure we have a subscription prior to attempting to get the first page
|
|
12313
|
+
// to make sure we receive any ListChange that comes through
|
|
12314
|
+
const stream = await this.subscribe();
|
|
12315
|
+
await this.fetchPage(0);
|
|
12316
12316
|
if (this.state.connection.type !== 'cancelled') {
|
|
12317
12317
|
this.updateState(Object.assign(Object.assign({}, this.state), { connection: {
|
|
12318
12318
|
jwtProvider,
|
|
@@ -12980,7 +12980,7 @@ class SceneTreeController {
|
|
|
12980
12980
|
return connection.type === 'connected';
|
|
12981
12981
|
}
|
|
12982
12982
|
}
|
|
12983
|
-
SceneTreeController.IDLE_RECONNECT_IN_SECONDS = 4 *
|
|
12983
|
+
SceneTreeController.IDLE_RECONNECT_IN_SECONDS = 4 * 60;
|
|
12984
12984
|
SceneTreeController.LOST_CONNECTION_RECONNECT_IN_SECONDS = 2;
|
|
12985
12985
|
SceneTreeController.MAX_SUBSCRIPTION_RETRY_COUNT = 2;
|
|
12986
12986
|
|
|
@@ -65462,8 +65462,11 @@ function fromUrn(urn) {
|
|
|
65462
65462
|
throw new Error('Invalid URN. Expected URN scheme.');
|
|
65463
65463
|
}
|
|
65464
65464
|
const [nid, resourceType, resourceId, ...subResourcePath] = uri$1.path.split(/[:/]/);
|
|
65465
|
-
if (nid !== 'vertexvis') {
|
|
65466
|
-
throw new Error('Invalid URN. Expected URN to be
|
|
65465
|
+
if (nid !== 'vertexvis' && nid !== 'vertex') {
|
|
65466
|
+
throw new Error('Invalid URN. Expected URN to be vertex namespace');
|
|
65467
|
+
}
|
|
65468
|
+
if (nid === 'vertexvis') {
|
|
65469
|
+
console.warn("vertexvis namespace is deprecated. Use 'vertex' for the namespace urn instead");
|
|
65467
65470
|
}
|
|
65468
65471
|
switch (resourceType) {
|
|
65469
65472
|
case 'stream-key':
|
|
@@ -110384,9 +110387,7 @@ const SceneTreeTableLayout = class extends HTMLElement$1 {
|
|
|
110384
110387
|
async computeAndUpdateViewportRows() {
|
|
110385
110388
|
var _a;
|
|
110386
110389
|
this.computeViewportRows();
|
|
110387
|
-
if (((_a = this.controller) === null || _a === void 0 ? void 0 : _a.isConnected) &&
|
|
110388
|
-
this.viewportStartIndex >= 0 &&
|
|
110389
|
-
this.viewportEndIndex >= 0) {
|
|
110390
|
+
if (((_a = this.controller) === null || _a === void 0 ? void 0 : _a.isConnected) && this.totalRows > 0) {
|
|
110390
110391
|
await this.controller.updateActiveRowRange(this.viewportStartIndex, this.viewportEndIndex);
|
|
110391
110392
|
}
|
|
110392
110393
|
}
|
|
@@ -111100,9 +111101,10 @@ class InteractionApiOrthographic extends InteractionApi {
|
|
|
111100
111101
|
const viewVector = camera.viewVector;
|
|
111101
111102
|
const normalizedUpVector = vector3.normalize(camera.up);
|
|
111102
111103
|
const normalizedViewVector = vector3.normalize(viewVector);
|
|
111103
|
-
const
|
|
111104
|
-
const
|
|
111105
|
-
const
|
|
111104
|
+
const throttledDelta = point.scale(delta, 0.5, 0.5);
|
|
111105
|
+
const d = vector3.magnitude(viewVector);
|
|
111106
|
+
const epsilonX = (throttledDelta.x * d) / viewport.width;
|
|
111107
|
+
const epsilonY = (throttledDelta.y / viewport.width) * d;
|
|
111106
111108
|
const xvec = vector3.cross(normalizedUpVector, normalizedViewVector);
|
|
111107
111109
|
const yvec = vector3.cross(normalizedViewVector, xvec);
|
|
111108
111110
|
const offset = vector3.add(vector3.scale(epsilonX, xvec), vector3.scale(epsilonY, yvec));
|
|
@@ -111175,7 +111177,7 @@ class InteractionApiOrthographic extends InteractionApi {
|
|
|
111175
111177
|
}
|
|
111176
111178
|
if (this.orthographicZoomData != null) {
|
|
111177
111179
|
const { hitPt, hitPlane } = this.orthographicZoomData;
|
|
111178
|
-
const relativeDelta = 2 * (camera.fovHeight / viewport.height) * delta;
|
|
111180
|
+
const relativeDelta = 2 * (camera.fovHeight / viewport.height) * delta * 2;
|
|
111179
111181
|
const fovHeight = Math.max(1, camera.fovHeight - relativeDelta);
|
|
111180
111182
|
const projectedLookAt = plane.projectPoint(hitPlane, camera.lookAt);
|
|
111181
111183
|
const diff = vector3.scale((camera.fovHeight - fovHeight) / camera.fovHeight, vector3.subtract(hitPt, projectedLookAt));
|
|
@@ -111235,9 +111237,10 @@ class InteractionApiPerspective extends InteractionApi {
|
|
|
111235
111237
|
const vv = camera.viewVector;
|
|
111236
111238
|
const u = vector3.normalize(camera.up);
|
|
111237
111239
|
const v = vector3.normalize(vv);
|
|
111240
|
+
const throttledDelta = point.scale(delta, 0.25, 0.25);
|
|
111238
111241
|
const d = vector3.magnitude(vv) * Math.tan((_a = camera.fovY) !== null && _a !== void 0 ? _a : 45);
|
|
111239
|
-
const epsilonX = (
|
|
111240
|
-
const epsilonY = (
|
|
111242
|
+
const epsilonX = (throttledDelta.x * d) / viewport.width;
|
|
111243
|
+
const epsilonY = (throttledDelta.y / viewport.width) * d;
|
|
111241
111244
|
const xvec = vector3.cross(u, v);
|
|
111242
111245
|
const yvec = vector3.cross(v, xvec);
|
|
111243
111246
|
const offset = vector3.add(vector3.scale(epsilonX, xvec), vector3.scale(epsilonY, yvec));
|
|
@@ -111827,14 +111830,15 @@ class MultiTouchInteractionHandler {
|
|
|
111827
111830
|
handleTwoPointTouchMove(point1, point2) {
|
|
111828
111831
|
var _a, _b, _c, _d;
|
|
111829
111832
|
if (this.currentPosition1 != null && this.currentPosition2 != null) {
|
|
111830
|
-
const delta = point.
|
|
111833
|
+
const delta = point.add(point.subtract(point1, this.currentPosition1), point.subtract(point2, this.currentPosition2));
|
|
111831
111834
|
const distance = point.distance(point1, point2) -
|
|
111832
111835
|
point.distance(this.currentPosition1, this.currentPosition2);
|
|
111833
111836
|
const zoom = distance * 0.5;
|
|
111834
111837
|
const previousToCurrent = matrix2.create(point.subtract(this.currentPosition1, this.currentPosition2), point.subtract(point1, point2));
|
|
111835
111838
|
const angle$1 = angle.toDegrees(Math.atan2(matrix2.determinant(previousToCurrent), matrix2.dot(previousToCurrent)));
|
|
111839
|
+
const center = point.create((point1.x + point2.x) / 2, (point1.y + point2.y) / 2);
|
|
111836
111840
|
(_a = this.interactionApi) === null || _a === void 0 ? void 0 : _a.beginInteraction();
|
|
111837
|
-
(_b = this.interactionApi) === null || _b === void 0 ? void 0 : _b.
|
|
111841
|
+
(_b = this.interactionApi) === null || _b === void 0 ? void 0 : _b.zoomCameraToPoint(center, zoom);
|
|
111838
111842
|
(_c = this.interactionApi) === null || _c === void 0 ? void 0 : _c.panCameraByDelta(delta);
|
|
111839
111843
|
// Setting a minimum angle to prevent wobbling
|
|
111840
111844
|
if (Math.abs(angle$1) > 0.5) {
|
|
@@ -113291,7 +113295,7 @@ const Viewer = class extends HTMLElement$1 {
|
|
|
113291
113295
|
* resolves when the scene has been loaded. The specified scene is
|
|
113292
113296
|
* provided as a URN in the following format:
|
|
113293
113297
|
*
|
|
113294
|
-
* * `urn:
|
|
113298
|
+
* * `urn:vertex:scene:<sceneid>`
|
|
113295
113299
|
*
|
|
113296
113300
|
* @param urn The URN of the resource to load.
|
|
113297
113301
|
*/
|