@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.
Files changed (71) hide show
  1. package/README.template.md +3 -3
  2. package/dist/cjs/{controller-4e9ef328.js → controller-c7c4f333.js} +6 -6
  3. package/dist/cjs/controller-c7c4f333.js.map +1 -0
  4. package/dist/cjs/index.cjs.js +2 -2
  5. package/dist/cjs/{scene-9762fef8.js → scene-4425281f.js} +6 -3
  6. package/dist/cjs/scene-4425281f.js.map +1 -0
  7. package/dist/cjs/vertex-scene-tree-search_3.cjs.entry.js +1 -3
  8. package/dist/cjs/vertex-scene-tree-search_3.cjs.entry.js.map +1 -1
  9. package/dist/cjs/vertex-scene-tree.cjs.entry.js +1 -1
  10. package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js +1 -1
  11. package/dist/cjs/vertex-viewer.cjs.entry.js +13 -10
  12. package/dist/cjs/vertex-viewer.cjs.entry.js.map +1 -1
  13. package/dist/collection/components/scene-tree/lib/controller.js +5 -5
  14. package/dist/collection/components/scene-tree/lib/controller.js.map +1 -1
  15. package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js +1 -3
  16. package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js.map +1 -1
  17. package/dist/collection/components/viewer/viewer.js +3 -3
  18. package/dist/collection/components/viewer/viewer.js.map +1 -1
  19. package/dist/collection/lib/interactions/interactionApiOrthographic.js +5 -4
  20. package/dist/collection/lib/interactions/interactionApiOrthographic.js.map +1 -1
  21. package/dist/collection/lib/interactions/interactionApiPerspective.js +4 -3
  22. package/dist/collection/lib/interactions/interactionApiPerspective.js.map +1 -1
  23. package/dist/collection/lib/interactions/multiTouchInteractionHandler.js +3 -2
  24. package/dist/collection/lib/interactions/multiTouchInteractionHandler.js.map +1 -1
  25. package/dist/collection/lib/types/loadableResource.js +5 -2
  26. package/dist/collection/lib/types/loadableResource.js.map +1 -1
  27. package/dist/collection/testing/viewer.js +2 -2
  28. package/dist/collection/testing/viewer.js.map +1 -1
  29. package/dist/custom-elements/index.js +23 -19
  30. package/dist/custom-elements/index.js.map +1 -1
  31. package/dist/esm/{controller-53f803d9.js → controller-bbcc1700.js} +6 -6
  32. package/dist/esm/controller-bbcc1700.js.map +1 -0
  33. package/dist/esm/index.js +2 -2
  34. package/dist/esm/index.mjs +2 -2
  35. package/dist/esm/{scene-1bd307f3.js → scene-31d88655.js} +6 -3
  36. package/dist/esm/scene-31d88655.js.map +1 -0
  37. package/dist/esm/vertex-scene-tree-search_3.entry.js +1 -3
  38. package/dist/esm/vertex-scene-tree-search_3.entry.js.map +1 -1
  39. package/dist/esm/vertex-scene-tree.entry.js +1 -1
  40. package/dist/esm/vertex-viewer-pin-group.entry.js +1 -1
  41. package/dist/esm/vertex-viewer.entry.js +13 -10
  42. package/dist/esm/vertex-viewer.entry.js.map +1 -1
  43. package/dist/types/components/viewer/viewer.d.ts +2 -2
  44. package/dist/types/components.d.ts +3 -3
  45. package/dist/types/testing/viewer.d.ts +2 -2
  46. package/dist/viewer/index.esm.js +1 -1
  47. package/dist/viewer/{p-921ec41b.js → p-3d19b37e.js} +2 -2
  48. package/dist/viewer/p-3d19b37e.js.map +1 -0
  49. package/dist/viewer/p-43eb668e.js +5 -0
  50. package/dist/viewer/p-43eb668e.js.map +1 -0
  51. package/dist/viewer/{p-951a2e08.entry.js → p-5ce0269a.entry.js} +2 -2
  52. package/dist/viewer/p-5ce0269a.entry.js.map +1 -0
  53. package/dist/viewer/{p-1815d19b.entry.js → p-6114701c.entry.js} +2 -2
  54. package/dist/viewer/p-8f16e792.entry.js +5 -0
  55. package/dist/viewer/p-8f16e792.entry.js.map +1 -0
  56. package/dist/viewer/{p-9b8dae4a.entry.js → p-d256624d.entry.js} +2 -2
  57. package/dist/viewer/viewer.esm.js +1 -1
  58. package/package.json +7 -7
  59. package/readme.md +7 -7
  60. package/dist/cjs/controller-4e9ef328.js.map +0 -1
  61. package/dist/cjs/scene-9762fef8.js.map +0 -1
  62. package/dist/esm/controller-53f803d9.js.map +0 -1
  63. package/dist/esm/scene-1bd307f3.js.map +0 -1
  64. package/dist/viewer/p-27a5034e.entry.js +0 -5
  65. package/dist/viewer/p-27a5034e.entry.js.map +0 -1
  66. package/dist/viewer/p-921ec41b.js.map +0 -1
  67. package/dist/viewer/p-951a2e08.entry.js.map +0 -1
  68. package/dist/viewer/p-c3be5b4d.js +0 -5
  69. package/dist/viewer/p-c3be5b4d.js.map +0 -1
  70. /package/dist/viewer/{p-1815d19b.entry.js.map → p-6114701c.entry.js.map} +0 -0
  71. /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":"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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:vertexvis:stream-key:123';\n\nexport const key2 = 'urn:vertexvis: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"]}
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
- const [, stream] = await Promise.all([
12313
- this.fetchPage(0),
12314
- this.subscribe(),
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 * 1;
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 vertexvis namespace');
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 d = vector3.magnitude(viewVector) * Math.tan(camera.fovHeight);
111104
- const epsilonX = (delta.x * d) / viewport.width;
111105
- const epsilonY = (delta.y / viewport.width) * d;
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 = (delta.x * d) / viewport.width;
111240
- const epsilonY = (delta.y / viewport.width) * d;
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.scale(point.add(point.subtract(point1, this.currentPosition1), point.subtract(point2, this.currentPosition2)), 0.25, 0.25);
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.zoomCamera(zoom);
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:vertexvis:scene:<sceneid>`
113298
+ * * `urn:vertex:scene:<sceneid>`
113295
113299
  *
113296
113300
  * @param urn The URN of the resource to load.
113297
113301
  */