@vertexvis/viewer 0.15.2-canary.0 → 0.15.2-testing.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 (82) hide show
  1. package/dist/cjs/{config-aec561b9.js → config-4a86ae0b.js} +2 -1
  2. package/dist/cjs/{entities-7b2e8c03.js → entities-496b61cd.js} +2 -2
  3. package/dist/cjs/index.cjs.js +4 -4
  4. package/dist/cjs/loader.cjs.js +1 -1
  5. package/dist/cjs/{mapper-0f2294a6.js → mapper-216603b0.js} +1 -1
  6. package/dist/cjs/{scene-56438693.js → scene-cb169b09.js} +25 -1
  7. package/dist/cjs/{streamAttributes-c64aee75.js → streamAttributes-7725f5c4.js} +976 -4
  8. package/dist/cjs/vertex-scene-tree.cjs.entry.js +17 -3
  9. package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js +1 -1
  10. package/dist/cjs/vertex-viewer-drag-select.cjs.entry.js +177 -0
  11. package/dist/cjs/vertex-viewer-measurement-details.cjs.entry.js +1 -1
  12. package/dist/cjs/vertex-viewer-measurement-distance.cjs.entry.js +2 -2
  13. package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js +2 -2
  14. package/dist/cjs/vertex-viewer-measurement-precise.cjs.entry.js +4 -4
  15. package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js +2 -2
  16. package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js +1 -1
  17. package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js +1 -1
  18. package/dist/cjs/vertex-viewer.cjs.entry.js +3 -3
  19. package/dist/cjs/viewer.cjs.js +1 -1
  20. package/dist/collection/collection-manifest.json +1 -0
  21. package/dist/collection/components/scene-tree/lib/grpc.js +11 -1
  22. package/dist/collection/components/scene-tree/scene-tree.js +7 -2
  23. package/dist/collection/components/viewer-drag-select/controller.js +18 -0
  24. package/dist/collection/components/viewer-drag-select/interaction-handler.js +41 -0
  25. package/dist/collection/components/viewer-drag-select/model.js +49 -0
  26. package/dist/collection/components/viewer-drag-select/viewer-drag-select.css +36 -0
  27. package/dist/collection/components/viewer-drag-select/viewer-drag-select.js +115 -0
  28. package/dist/collection/lib/scenes/mapper.js +11 -1
  29. package/dist/collection/lib/scenes/queries.js +15 -1
  30. package/dist/collection/lib/types/flags.js +2 -1
  31. package/dist/custom-elements/index.d.ts +6 -0
  32. package/dist/custom-elements/index.js +1184 -6
  33. package/dist/esm/{config-d574c78c.js → config-6cdeb6ca.js} +2 -1
  34. package/dist/esm/{entities-a5bfef48.js → entities-6f3c5437.js} +2 -2
  35. package/dist/esm/index.js +4 -4
  36. package/dist/esm/index.mjs +4 -4
  37. package/dist/esm/loader.js +1 -1
  38. package/dist/esm/loader.mjs +1 -1
  39. package/dist/esm/{mapper-5894c2a4.js → mapper-941ff03c.js} +1 -1
  40. package/dist/esm/{scene-5b919078.js → scene-6f98b0dd.js} +25 -1
  41. package/dist/esm/{streamAttributes-7e8565be.js → streamAttributes-24bd7b3a.js} +976 -4
  42. package/dist/esm/vertex-scene-tree.entry.js +17 -3
  43. package/dist/esm/vertex-viewer-dom-element_2.entry.js +1 -1
  44. package/dist/esm/vertex-viewer-drag-select.entry.js +173 -0
  45. package/dist/esm/vertex-viewer-measurement-details.entry.js +1 -1
  46. package/dist/esm/vertex-viewer-measurement-distance.entry.js +2 -2
  47. package/dist/esm/vertex-viewer-measurement-line_2.entry.js +2 -2
  48. package/dist/esm/vertex-viewer-measurement-precise.entry.js +4 -4
  49. package/dist/esm/vertex-viewer-pin-group.entry.js +2 -2
  50. package/dist/esm/vertex-viewer-transform-widget.entry.js +1 -1
  51. package/dist/esm/vertex-viewer-view-cube.entry.js +1 -1
  52. package/dist/esm/vertex-viewer.entry.js +3 -3
  53. package/dist/esm/viewer.js +1 -1
  54. package/dist/types/components/scene-tree/lib/grpc.d.ts +2 -0
  55. package/dist/types/components/viewer-drag-select/controller.d.ts +9 -0
  56. package/dist/types/components/viewer-drag-select/interaction-handler.d.ts +15 -0
  57. package/dist/types/components/viewer-drag-select/model.d.ts +25 -0
  58. package/dist/types/components/viewer-drag-select/viewer-drag-select.d.ts +27 -0
  59. package/dist/types/components.d.ts +24 -0
  60. package/dist/types/lib/scenes/queries.d.ts +12 -2
  61. package/dist/types/lib/types/flags.d.ts +7 -1
  62. package/dist/viewer/index.esm.js +1 -1
  63. package/dist/viewer/{p-e63c1703.entry.js → p-1bba9ade.entry.js} +1 -1
  64. package/dist/viewer/{p-3f6f2457.entry.js → p-24cda14a.entry.js} +1 -1
  65. package/dist/viewer/{p-b7e170ac.entry.js → p-2b58afc3.entry.js} +1 -1
  66. package/dist/viewer/{p-1fc24ec6.js → p-52ab9ec0.js} +1 -1
  67. package/dist/viewer/p-597cc9b5.js +4 -0
  68. package/dist/viewer/{p-61e50e11.entry.js → p-608925c5.entry.js} +1 -1
  69. package/dist/viewer/p-68e192b9.js +4 -0
  70. package/dist/viewer/{p-d34ad2b2.entry.js → p-69a3fce8.entry.js} +1 -1
  71. package/dist/viewer/{p-d78f54a6.entry.js → p-74c772bb.entry.js} +1 -1
  72. package/dist/viewer/{p-40a9dd7d.js → p-9e1384c9.js} +1 -1
  73. package/dist/viewer/{p-d64c1e14.entry.js → p-a107b65e.entry.js} +2 -2
  74. package/dist/viewer/{p-b278cf0b.entry.js → p-a5f18e7b.entry.js} +1 -1
  75. package/dist/viewer/p-ae31d912.entry.js +4 -0
  76. package/dist/viewer/{p-920c9a88.entry.js → p-bfacbaa8.entry.js} +1 -1
  77. package/dist/viewer/{p-f3ea0c2b.entry.js → p-c72da0fb.entry.js} +1 -1
  78. package/dist/viewer/{p-1e0dd2e9.js → p-cea5d8bd.js} +1 -1
  79. package/dist/viewer/viewer.esm.js +1 -1
  80. package/package.json +8 -8
  81. package/dist/viewer/p-31b87b90.js +0 -4
  82. package/dist/viewer/p-5317e8cd.js +0 -4
@@ -23111,6 +23111,458 @@ const vertexvis$1 = $root$1.vertexvis = (() => {
23111
23111
  return PointQuery;
23112
23112
  })();
23113
23113
 
23114
+ stream.FrustumByRectangle = (function() {
23115
+
23116
+ /**
23117
+ * Properties of a FrustumByRectangle.
23118
+ * @memberof vertexvis.protobuf.stream
23119
+ * @interface IFrustumByRectangle
23120
+ * @property {vertexvis.protobuf.stream.IRectangle|null} [rectangle] FrustumByRectangle rectangle
23121
+ */
23122
+
23123
+ /**
23124
+ * Constructs a new FrustumByRectangle.
23125
+ * @memberof vertexvis.protobuf.stream
23126
+ * @classdesc Represents a FrustumByRectangle.
23127
+ * @implements IFrustumByRectangle
23128
+ * @constructor
23129
+ * @param {vertexvis.protobuf.stream.IFrustumByRectangle=} [properties] Properties to set
23130
+ */
23131
+ function FrustumByRectangle(properties) {
23132
+ if (properties)
23133
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
23134
+ if (properties[keys[i]] != null)
23135
+ this[keys[i]] = properties[keys[i]];
23136
+ }
23137
+
23138
+ /**
23139
+ * FrustumByRectangle rectangle.
23140
+ * @member {vertexvis.protobuf.stream.IRectangle|null|undefined} rectangle
23141
+ * @memberof vertexvis.protobuf.stream.FrustumByRectangle
23142
+ * @instance
23143
+ */
23144
+ FrustumByRectangle.prototype.rectangle = null;
23145
+
23146
+ /**
23147
+ * Creates a new FrustumByRectangle instance using the specified properties.
23148
+ * @function create
23149
+ * @memberof vertexvis.protobuf.stream.FrustumByRectangle
23150
+ * @static
23151
+ * @param {vertexvis.protobuf.stream.IFrustumByRectangle=} [properties] Properties to set
23152
+ * @returns {vertexvis.protobuf.stream.FrustumByRectangle} FrustumByRectangle instance
23153
+ */
23154
+ FrustumByRectangle.create = function create(properties) {
23155
+ return new FrustumByRectangle(properties);
23156
+ };
23157
+
23158
+ /**
23159
+ * Encodes the specified FrustumByRectangle message. Does not implicitly {@link vertexvis.protobuf.stream.FrustumByRectangle.verify|verify} messages.
23160
+ * @function encode
23161
+ * @memberof vertexvis.protobuf.stream.FrustumByRectangle
23162
+ * @static
23163
+ * @param {vertexvis.protobuf.stream.IFrustumByRectangle} message FrustumByRectangle message or plain object to encode
23164
+ * @param {$protobuf.Writer} [writer] Writer to encode to
23165
+ * @returns {$protobuf.Writer} Writer
23166
+ */
23167
+ FrustumByRectangle.encode = function encode(message, writer) {
23168
+ if (!writer)
23169
+ writer = $Writer$1.create();
23170
+ if (message.rectangle != null && Object.hasOwnProperty.call(message, "rectangle"))
23171
+ $root$1.vertexvis.protobuf.stream.Rectangle.encode(message.rectangle, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
23172
+ return writer;
23173
+ };
23174
+
23175
+ /**
23176
+ * Encodes the specified FrustumByRectangle message, length delimited. Does not implicitly {@link vertexvis.protobuf.stream.FrustumByRectangle.verify|verify} messages.
23177
+ * @function encodeDelimited
23178
+ * @memberof vertexvis.protobuf.stream.FrustumByRectangle
23179
+ * @static
23180
+ * @param {vertexvis.protobuf.stream.IFrustumByRectangle} message FrustumByRectangle message or plain object to encode
23181
+ * @param {$protobuf.Writer} [writer] Writer to encode to
23182
+ * @returns {$protobuf.Writer} Writer
23183
+ */
23184
+ FrustumByRectangle.encodeDelimited = function encodeDelimited(message, writer) {
23185
+ return this.encode(message, writer).ldelim();
23186
+ };
23187
+
23188
+ /**
23189
+ * Decodes a FrustumByRectangle message from the specified reader or buffer.
23190
+ * @function decode
23191
+ * @memberof vertexvis.protobuf.stream.FrustumByRectangle
23192
+ * @static
23193
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
23194
+ * @param {number} [length] Message length if known beforehand
23195
+ * @returns {vertexvis.protobuf.stream.FrustumByRectangle} FrustumByRectangle
23196
+ * @throws {Error} If the payload is not a reader or valid buffer
23197
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
23198
+ */
23199
+ FrustumByRectangle.decode = function decode(reader, length) {
23200
+ if (!(reader instanceof $Reader$1))
23201
+ reader = $Reader$1.create(reader);
23202
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root$1.vertexvis.protobuf.stream.FrustumByRectangle();
23203
+ while (reader.pos < end) {
23204
+ let tag = reader.uint32();
23205
+ switch (tag >>> 3) {
23206
+ case 1:
23207
+ message.rectangle = $root$1.vertexvis.protobuf.stream.Rectangle.decode(reader, reader.uint32());
23208
+ break;
23209
+ default:
23210
+ reader.skipType(tag & 7);
23211
+ break;
23212
+ }
23213
+ }
23214
+ return message;
23215
+ };
23216
+
23217
+ /**
23218
+ * Decodes a FrustumByRectangle message from the specified reader or buffer, length delimited.
23219
+ * @function decodeDelimited
23220
+ * @memberof vertexvis.protobuf.stream.FrustumByRectangle
23221
+ * @static
23222
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
23223
+ * @returns {vertexvis.protobuf.stream.FrustumByRectangle} FrustumByRectangle
23224
+ * @throws {Error} If the payload is not a reader or valid buffer
23225
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
23226
+ */
23227
+ FrustumByRectangle.decodeDelimited = function decodeDelimited(reader) {
23228
+ if (!(reader instanceof $Reader$1))
23229
+ reader = new $Reader$1(reader);
23230
+ return this.decode(reader, reader.uint32());
23231
+ };
23232
+
23233
+ /**
23234
+ * Verifies a FrustumByRectangle message.
23235
+ * @function verify
23236
+ * @memberof vertexvis.protobuf.stream.FrustumByRectangle
23237
+ * @static
23238
+ * @param {Object.<string,*>} message Plain object to verify
23239
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
23240
+ */
23241
+ FrustumByRectangle.verify = function verify(message) {
23242
+ if (typeof message !== "object" || message === null)
23243
+ return "object expected";
23244
+ if (message.rectangle != null && message.hasOwnProperty("rectangle")) {
23245
+ let error = $root$1.vertexvis.protobuf.stream.Rectangle.verify(message.rectangle);
23246
+ if (error)
23247
+ return "rectangle." + error;
23248
+ }
23249
+ return null;
23250
+ };
23251
+
23252
+ /**
23253
+ * Creates a FrustumByRectangle message from a plain object. Also converts values to their respective internal types.
23254
+ * @function fromObject
23255
+ * @memberof vertexvis.protobuf.stream.FrustumByRectangle
23256
+ * @static
23257
+ * @param {Object.<string,*>} object Plain object
23258
+ * @returns {vertexvis.protobuf.stream.FrustumByRectangle} FrustumByRectangle
23259
+ */
23260
+ FrustumByRectangle.fromObject = function fromObject(object) {
23261
+ if (object instanceof $root$1.vertexvis.protobuf.stream.FrustumByRectangle)
23262
+ return object;
23263
+ let message = new $root$1.vertexvis.protobuf.stream.FrustumByRectangle();
23264
+ if (object.rectangle != null) {
23265
+ if (typeof object.rectangle !== "object")
23266
+ throw TypeError(".vertexvis.protobuf.stream.FrustumByRectangle.rectangle: object expected");
23267
+ message.rectangle = $root$1.vertexvis.protobuf.stream.Rectangle.fromObject(object.rectangle);
23268
+ }
23269
+ return message;
23270
+ };
23271
+
23272
+ /**
23273
+ * Creates a plain object from a FrustumByRectangle message. Also converts values to other types if specified.
23274
+ * @function toObject
23275
+ * @memberof vertexvis.protobuf.stream.FrustumByRectangle
23276
+ * @static
23277
+ * @param {vertexvis.protobuf.stream.FrustumByRectangle} message FrustumByRectangle
23278
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
23279
+ * @returns {Object.<string,*>} Plain object
23280
+ */
23281
+ FrustumByRectangle.toObject = function toObject(message, options) {
23282
+ if (!options)
23283
+ options = {};
23284
+ let object = {};
23285
+ if (options.defaults)
23286
+ object.rectangle = null;
23287
+ if (message.rectangle != null && message.hasOwnProperty("rectangle"))
23288
+ object.rectangle = $root$1.vertexvis.protobuf.stream.Rectangle.toObject(message.rectangle, options);
23289
+ return object;
23290
+ };
23291
+
23292
+ /**
23293
+ * Converts this FrustumByRectangle to JSON.
23294
+ * @function toJSON
23295
+ * @memberof vertexvis.protobuf.stream.FrustumByRectangle
23296
+ * @instance
23297
+ * @returns {Object.<string,*>} JSON object
23298
+ */
23299
+ FrustumByRectangle.prototype.toJSON = function toJSON() {
23300
+ return this.constructor.toObject(this, minimal$2.util.toJSONOptions);
23301
+ };
23302
+
23303
+ return FrustumByRectangle;
23304
+ })();
23305
+
23306
+ stream.VolumeIntersectionQuery = (function() {
23307
+
23308
+ /**
23309
+ * Properties of a VolumeIntersectionQuery.
23310
+ * @memberof vertexvis.protobuf.stream
23311
+ * @interface IVolumeIntersectionQuery
23312
+ * @property {vertexvis.protobuf.stream.IFrustumByRectangle|null} [frustumByRectangle] VolumeIntersectionQuery frustumByRectangle
23313
+ * @property {boolean|null} [exclusive] VolumeIntersectionQuery exclusive
23314
+ * @property {vertexvis.protobuf.stream.IDimensions|null} [viewport] VolumeIntersectionQuery viewport
23315
+ */
23316
+
23317
+ /**
23318
+ * Constructs a new VolumeIntersectionQuery.
23319
+ * @memberof vertexvis.protobuf.stream
23320
+ * @classdesc Represents a VolumeIntersectionQuery.
23321
+ * @implements IVolumeIntersectionQuery
23322
+ * @constructor
23323
+ * @param {vertexvis.protobuf.stream.IVolumeIntersectionQuery=} [properties] Properties to set
23324
+ */
23325
+ function VolumeIntersectionQuery(properties) {
23326
+ if (properties)
23327
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
23328
+ if (properties[keys[i]] != null)
23329
+ this[keys[i]] = properties[keys[i]];
23330
+ }
23331
+
23332
+ /**
23333
+ * VolumeIntersectionQuery frustumByRectangle.
23334
+ * @member {vertexvis.protobuf.stream.IFrustumByRectangle|null|undefined} frustumByRectangle
23335
+ * @memberof vertexvis.protobuf.stream.VolumeIntersectionQuery
23336
+ * @instance
23337
+ */
23338
+ VolumeIntersectionQuery.prototype.frustumByRectangle = null;
23339
+
23340
+ /**
23341
+ * VolumeIntersectionQuery exclusive.
23342
+ * @member {boolean} exclusive
23343
+ * @memberof vertexvis.protobuf.stream.VolumeIntersectionQuery
23344
+ * @instance
23345
+ */
23346
+ VolumeIntersectionQuery.prototype.exclusive = false;
23347
+
23348
+ /**
23349
+ * VolumeIntersectionQuery viewport.
23350
+ * @member {vertexvis.protobuf.stream.IDimensions|null|undefined} viewport
23351
+ * @memberof vertexvis.protobuf.stream.VolumeIntersectionQuery
23352
+ * @instance
23353
+ */
23354
+ VolumeIntersectionQuery.prototype.viewport = null;
23355
+
23356
+ // OneOf field names bound to virtual getters and setters
23357
+ let $oneOfFields;
23358
+
23359
+ /**
23360
+ * VolumeIntersectionQuery volume.
23361
+ * @member {"frustumByRectangle"|undefined} volume
23362
+ * @memberof vertexvis.protobuf.stream.VolumeIntersectionQuery
23363
+ * @instance
23364
+ */
23365
+ Object.defineProperty(VolumeIntersectionQuery.prototype, "volume", {
23366
+ get: $util$1.oneOfGetter($oneOfFields = ["frustumByRectangle"]),
23367
+ set: $util$1.oneOfSetter($oneOfFields)
23368
+ });
23369
+
23370
+ /**
23371
+ * Creates a new VolumeIntersectionQuery instance using the specified properties.
23372
+ * @function create
23373
+ * @memberof vertexvis.protobuf.stream.VolumeIntersectionQuery
23374
+ * @static
23375
+ * @param {vertexvis.protobuf.stream.IVolumeIntersectionQuery=} [properties] Properties to set
23376
+ * @returns {vertexvis.protobuf.stream.VolumeIntersectionQuery} VolumeIntersectionQuery instance
23377
+ */
23378
+ VolumeIntersectionQuery.create = function create(properties) {
23379
+ return new VolumeIntersectionQuery(properties);
23380
+ };
23381
+
23382
+ /**
23383
+ * Encodes the specified VolumeIntersectionQuery message. Does not implicitly {@link vertexvis.protobuf.stream.VolumeIntersectionQuery.verify|verify} messages.
23384
+ * @function encode
23385
+ * @memberof vertexvis.protobuf.stream.VolumeIntersectionQuery
23386
+ * @static
23387
+ * @param {vertexvis.protobuf.stream.IVolumeIntersectionQuery} message VolumeIntersectionQuery message or plain object to encode
23388
+ * @param {$protobuf.Writer} [writer] Writer to encode to
23389
+ * @returns {$protobuf.Writer} Writer
23390
+ */
23391
+ VolumeIntersectionQuery.encode = function encode(message, writer) {
23392
+ if (!writer)
23393
+ writer = $Writer$1.create();
23394
+ if (message.frustumByRectangle != null && Object.hasOwnProperty.call(message, "frustumByRectangle"))
23395
+ $root$1.vertexvis.protobuf.stream.FrustumByRectangle.encode(message.frustumByRectangle, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
23396
+ if (message.exclusive != null && Object.hasOwnProperty.call(message, "exclusive"))
23397
+ writer.uint32(/* id 2, wireType 0 =*/16).bool(message.exclusive);
23398
+ if (message.viewport != null && Object.hasOwnProperty.call(message, "viewport"))
23399
+ $root$1.vertexvis.protobuf.stream.Dimensions.encode(message.viewport, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
23400
+ return writer;
23401
+ };
23402
+
23403
+ /**
23404
+ * Encodes the specified VolumeIntersectionQuery message, length delimited. Does not implicitly {@link vertexvis.protobuf.stream.VolumeIntersectionQuery.verify|verify} messages.
23405
+ * @function encodeDelimited
23406
+ * @memberof vertexvis.protobuf.stream.VolumeIntersectionQuery
23407
+ * @static
23408
+ * @param {vertexvis.protobuf.stream.IVolumeIntersectionQuery} message VolumeIntersectionQuery message or plain object to encode
23409
+ * @param {$protobuf.Writer} [writer] Writer to encode to
23410
+ * @returns {$protobuf.Writer} Writer
23411
+ */
23412
+ VolumeIntersectionQuery.encodeDelimited = function encodeDelimited(message, writer) {
23413
+ return this.encode(message, writer).ldelim();
23414
+ };
23415
+
23416
+ /**
23417
+ * Decodes a VolumeIntersectionQuery message from the specified reader or buffer.
23418
+ * @function decode
23419
+ * @memberof vertexvis.protobuf.stream.VolumeIntersectionQuery
23420
+ * @static
23421
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
23422
+ * @param {number} [length] Message length if known beforehand
23423
+ * @returns {vertexvis.protobuf.stream.VolumeIntersectionQuery} VolumeIntersectionQuery
23424
+ * @throws {Error} If the payload is not a reader or valid buffer
23425
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
23426
+ */
23427
+ VolumeIntersectionQuery.decode = function decode(reader, length) {
23428
+ if (!(reader instanceof $Reader$1))
23429
+ reader = $Reader$1.create(reader);
23430
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root$1.vertexvis.protobuf.stream.VolumeIntersectionQuery();
23431
+ while (reader.pos < end) {
23432
+ let tag = reader.uint32();
23433
+ switch (tag >>> 3) {
23434
+ case 1:
23435
+ message.frustumByRectangle = $root$1.vertexvis.protobuf.stream.FrustumByRectangle.decode(reader, reader.uint32());
23436
+ break;
23437
+ case 2:
23438
+ message.exclusive = reader.bool();
23439
+ break;
23440
+ case 3:
23441
+ message.viewport = $root$1.vertexvis.protobuf.stream.Dimensions.decode(reader, reader.uint32());
23442
+ break;
23443
+ default:
23444
+ reader.skipType(tag & 7);
23445
+ break;
23446
+ }
23447
+ }
23448
+ return message;
23449
+ };
23450
+
23451
+ /**
23452
+ * Decodes a VolumeIntersectionQuery message from the specified reader or buffer, length delimited.
23453
+ * @function decodeDelimited
23454
+ * @memberof vertexvis.protobuf.stream.VolumeIntersectionQuery
23455
+ * @static
23456
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
23457
+ * @returns {vertexvis.protobuf.stream.VolumeIntersectionQuery} VolumeIntersectionQuery
23458
+ * @throws {Error} If the payload is not a reader or valid buffer
23459
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
23460
+ */
23461
+ VolumeIntersectionQuery.decodeDelimited = function decodeDelimited(reader) {
23462
+ if (!(reader instanceof $Reader$1))
23463
+ reader = new $Reader$1(reader);
23464
+ return this.decode(reader, reader.uint32());
23465
+ };
23466
+
23467
+ /**
23468
+ * Verifies a VolumeIntersectionQuery message.
23469
+ * @function verify
23470
+ * @memberof vertexvis.protobuf.stream.VolumeIntersectionQuery
23471
+ * @static
23472
+ * @param {Object.<string,*>} message Plain object to verify
23473
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
23474
+ */
23475
+ VolumeIntersectionQuery.verify = function verify(message) {
23476
+ if (typeof message !== "object" || message === null)
23477
+ return "object expected";
23478
+ if (message.frustumByRectangle != null && message.hasOwnProperty("frustumByRectangle")) {
23479
+ {
23480
+ let error = $root$1.vertexvis.protobuf.stream.FrustumByRectangle.verify(message.frustumByRectangle);
23481
+ if (error)
23482
+ return "frustumByRectangle." + error;
23483
+ }
23484
+ }
23485
+ if (message.exclusive != null && message.hasOwnProperty("exclusive"))
23486
+ if (typeof message.exclusive !== "boolean")
23487
+ return "exclusive: boolean expected";
23488
+ if (message.viewport != null && message.hasOwnProperty("viewport")) {
23489
+ let error = $root$1.vertexvis.protobuf.stream.Dimensions.verify(message.viewport);
23490
+ if (error)
23491
+ return "viewport." + error;
23492
+ }
23493
+ return null;
23494
+ };
23495
+
23496
+ /**
23497
+ * Creates a VolumeIntersectionQuery message from a plain object. Also converts values to their respective internal types.
23498
+ * @function fromObject
23499
+ * @memberof vertexvis.protobuf.stream.VolumeIntersectionQuery
23500
+ * @static
23501
+ * @param {Object.<string,*>} object Plain object
23502
+ * @returns {vertexvis.protobuf.stream.VolumeIntersectionQuery} VolumeIntersectionQuery
23503
+ */
23504
+ VolumeIntersectionQuery.fromObject = function fromObject(object) {
23505
+ if (object instanceof $root$1.vertexvis.protobuf.stream.VolumeIntersectionQuery)
23506
+ return object;
23507
+ let message = new $root$1.vertexvis.protobuf.stream.VolumeIntersectionQuery();
23508
+ if (object.frustumByRectangle != null) {
23509
+ if (typeof object.frustumByRectangle !== "object")
23510
+ throw TypeError(".vertexvis.protobuf.stream.VolumeIntersectionQuery.frustumByRectangle: object expected");
23511
+ message.frustumByRectangle = $root$1.vertexvis.protobuf.stream.FrustumByRectangle.fromObject(object.frustumByRectangle);
23512
+ }
23513
+ if (object.exclusive != null)
23514
+ message.exclusive = Boolean(object.exclusive);
23515
+ if (object.viewport != null) {
23516
+ if (typeof object.viewport !== "object")
23517
+ throw TypeError(".vertexvis.protobuf.stream.VolumeIntersectionQuery.viewport: object expected");
23518
+ message.viewport = $root$1.vertexvis.protobuf.stream.Dimensions.fromObject(object.viewport);
23519
+ }
23520
+ return message;
23521
+ };
23522
+
23523
+ /**
23524
+ * Creates a plain object from a VolumeIntersectionQuery message. Also converts values to other types if specified.
23525
+ * @function toObject
23526
+ * @memberof vertexvis.protobuf.stream.VolumeIntersectionQuery
23527
+ * @static
23528
+ * @param {vertexvis.protobuf.stream.VolumeIntersectionQuery} message VolumeIntersectionQuery
23529
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
23530
+ * @returns {Object.<string,*>} Plain object
23531
+ */
23532
+ VolumeIntersectionQuery.toObject = function toObject(message, options) {
23533
+ if (!options)
23534
+ options = {};
23535
+ let object = {};
23536
+ if (options.defaults) {
23537
+ object.exclusive = false;
23538
+ object.viewport = null;
23539
+ }
23540
+ if (message.frustumByRectangle != null && message.hasOwnProperty("frustumByRectangle")) {
23541
+ object.frustumByRectangle = $root$1.vertexvis.protobuf.stream.FrustumByRectangle.toObject(message.frustumByRectangle, options);
23542
+ if (options.oneofs)
23543
+ object.volume = "frustumByRectangle";
23544
+ }
23545
+ if (message.exclusive != null && message.hasOwnProperty("exclusive"))
23546
+ object.exclusive = message.exclusive;
23547
+ if (message.viewport != null && message.hasOwnProperty("viewport"))
23548
+ object.viewport = $root$1.vertexvis.protobuf.stream.Dimensions.toObject(message.viewport, options);
23549
+ return object;
23550
+ };
23551
+
23552
+ /**
23553
+ * Converts this VolumeIntersectionQuery to JSON.
23554
+ * @function toJSON
23555
+ * @memberof vertexvis.protobuf.stream.VolumeIntersectionQuery
23556
+ * @instance
23557
+ * @returns {Object.<string,*>} JSON object
23558
+ */
23559
+ VolumeIntersectionQuery.prototype.toJSON = function toJSON() {
23560
+ return this.constructor.toObject(this, minimal$2.util.toJSONOptions);
23561
+ };
23562
+
23563
+ return VolumeIntersectionQuery;
23564
+ })();
23565
+
23114
23566
  stream.SceneTreeRangeQuery = (function() {
23115
23567
 
23116
23568
  /**
@@ -25699,6 +26151,7 @@ const vertexvis$1 = $root$1.vertexvis = (() => {
25699
26151
  * @property {vertexvis.protobuf.stream.ISceneTreeRangeQuery|null} [sceneTreeRange] SceneOperation sceneTreeRange
25700
26152
  * @property {vertexvis.protobuf.stream.IMetadataFilterQuery|null} [metadata] SceneOperation metadata
25701
26153
  * @property {vertexvis.protobuf.stream.IOverrideQuery|null} [override] SceneOperation override
26154
+ * @property {vertexvis.protobuf.stream.IVolumeIntersectionQuery|null} [volume] SceneOperation volume
25702
26155
  * @property {Array.<vertexvis.protobuf.stream.IOperationType>|null} [operationTypes] SceneOperation operationTypes
25703
26156
  */
25704
26157
 
@@ -25782,6 +26235,14 @@ const vertexvis$1 = $root$1.vertexvis = (() => {
25782
26235
  */
25783
26236
  SceneOperation.prototype.override = null;
25784
26237
 
26238
+ /**
26239
+ * SceneOperation volume.
26240
+ * @member {vertexvis.protobuf.stream.IVolumeIntersectionQuery|null|undefined} volume
26241
+ * @memberof vertexvis.protobuf.stream.SceneOperation
26242
+ * @instance
26243
+ */
26244
+ SceneOperation.prototype.volume = null;
26245
+
25785
26246
  /**
25786
26247
  * SceneOperation operationTypes.
25787
26248
  * @member {Array.<vertexvis.protobuf.stream.IOperationType>} operationTypes
@@ -25795,12 +26256,12 @@ const vertexvis$1 = $root$1.vertexvis = (() => {
25795
26256
 
25796
26257
  /**
25797
26258
  * SceneOperation query.
25798
- * @member {"item"|"or"|"and"|"all"|"point"|"sceneTreeRange"|"metadata"|"override"|undefined} query
26259
+ * @member {"item"|"or"|"and"|"all"|"point"|"sceneTreeRange"|"metadata"|"override"|"volume"|undefined} query
25799
26260
  * @memberof vertexvis.protobuf.stream.SceneOperation
25800
26261
  * @instance
25801
26262
  */
25802
26263
  Object.defineProperty(SceneOperation.prototype, "query", {
25803
- get: $util$1.oneOfGetter($oneOfFields = ["item", "or", "and", "all", "point", "sceneTreeRange", "metadata", "override"]),
26264
+ get: $util$1.oneOfGetter($oneOfFields = ["item", "or", "and", "all", "point", "sceneTreeRange", "metadata", "override", "volume"]),
25804
26265
  set: $util$1.oneOfSetter($oneOfFields)
25805
26266
  });
25806
26267
 
@@ -25847,6 +26308,8 @@ const vertexvis$1 = $root$1.vertexvis = (() => {
25847
26308
  $root$1.vertexvis.protobuf.stream.MetadataFilterQuery.encode(message.metadata, writer.uint32(/* id 8, wireType 2 =*/66).fork()).ldelim();
25848
26309
  if (message.override != null && Object.hasOwnProperty.call(message, "override"))
25849
26310
  $root$1.vertexvis.protobuf.stream.OverrideQuery.encode(message.override, writer.uint32(/* id 9, wireType 2 =*/74).fork()).ldelim();
26311
+ if (message.volume != null && Object.hasOwnProperty.call(message, "volume"))
26312
+ $root$1.vertexvis.protobuf.stream.VolumeIntersectionQuery.encode(message.volume, writer.uint32(/* id 10, wireType 2 =*/82).fork()).ldelim();
25850
26313
  return writer;
25851
26314
  };
25852
26315
 
@@ -25905,6 +26368,9 @@ const vertexvis$1 = $root$1.vertexvis = (() => {
25905
26368
  case 9:
25906
26369
  message.override = $root$1.vertexvis.protobuf.stream.OverrideQuery.decode(reader, reader.uint32());
25907
26370
  break;
26371
+ case 10:
26372
+ message.volume = $root$1.vertexvis.protobuf.stream.VolumeIntersectionQuery.decode(reader, reader.uint32());
26373
+ break;
25908
26374
  case 4:
25909
26375
  if (!(message.operationTypes && message.operationTypes.length))
25910
26376
  message.operationTypes = [];
@@ -26024,6 +26490,16 @@ const vertexvis$1 = $root$1.vertexvis = (() => {
26024
26490
  return "override." + error;
26025
26491
  }
26026
26492
  }
26493
+ if (message.volume != null && message.hasOwnProperty("volume")) {
26494
+ if (properties.query === 1)
26495
+ return "query: multiple values";
26496
+ properties.query = 1;
26497
+ {
26498
+ let error = $root$1.vertexvis.protobuf.stream.VolumeIntersectionQuery.verify(message.volume);
26499
+ if (error)
26500
+ return "volume." + error;
26501
+ }
26502
+ }
26027
26503
  if (message.operationTypes != null && message.hasOwnProperty("operationTypes")) {
26028
26504
  if (!Array.isArray(message.operationTypes))
26029
26505
  return "operationTypes: array expected";
@@ -26088,6 +26564,11 @@ const vertexvis$1 = $root$1.vertexvis = (() => {
26088
26564
  throw TypeError(".vertexvis.protobuf.stream.SceneOperation.override: object expected");
26089
26565
  message.override = $root$1.vertexvis.protobuf.stream.OverrideQuery.fromObject(object.override);
26090
26566
  }
26567
+ if (object.volume != null) {
26568
+ if (typeof object.volume !== "object")
26569
+ throw TypeError(".vertexvis.protobuf.stream.SceneOperation.volume: object expected");
26570
+ message.volume = $root$1.vertexvis.protobuf.stream.VolumeIntersectionQuery.fromObject(object.volume);
26571
+ }
26091
26572
  if (object.operationTypes) {
26092
26573
  if (!Array.isArray(object.operationTypes))
26093
26574
  throw TypeError(".vertexvis.protobuf.stream.SceneOperation.operationTypes: array expected");
@@ -26161,6 +26642,11 @@ const vertexvis$1 = $root$1.vertexvis = (() => {
26161
26642
  if (options.oneofs)
26162
26643
  object.query = "override";
26163
26644
  }
26645
+ if (message.volume != null && message.hasOwnProperty("volume")) {
26646
+ object.volume = $root$1.vertexvis.protobuf.stream.VolumeIntersectionQuery.toObject(message.volume, options);
26647
+ if (options.oneofs)
26648
+ object.query = "volume";
26649
+ }
26164
26650
  return object;
26165
26651
  };
26166
26652
 
@@ -53970,6 +54456,7 @@ const defaultFlags = {
53970
54456
  logWsMessages: false,
53971
54457
  logFrameRate: false,
53972
54458
  letterboxFrames: false,
54459
+ grpcUseStreamingWebSocketTransport: true,
53973
54460
  };
53974
54461
 
53975
54462
  const defaultInteractionConfig = {
@@ -61358,6 +61845,458 @@ const vertexvis = $root.vertexvis = (() => {
61358
61845
  return PointQuery;
61359
61846
  })();
61360
61847
 
61848
+ stream.FrustumByRectangle = (function() {
61849
+
61850
+ /**
61851
+ * Properties of a FrustumByRectangle.
61852
+ * @memberof vertexvis.protobuf.stream
61853
+ * @interface IFrustumByRectangle
61854
+ * @property {vertexvis.protobuf.stream.IRectangle|null} [rectangle] FrustumByRectangle rectangle
61855
+ */
61856
+
61857
+ /**
61858
+ * Constructs a new FrustumByRectangle.
61859
+ * @memberof vertexvis.protobuf.stream
61860
+ * @classdesc Represents a FrustumByRectangle.
61861
+ * @implements IFrustumByRectangle
61862
+ * @constructor
61863
+ * @param {vertexvis.protobuf.stream.IFrustumByRectangle=} [properties] Properties to set
61864
+ */
61865
+ function FrustumByRectangle(properties) {
61866
+ if (properties)
61867
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
61868
+ if (properties[keys[i]] != null)
61869
+ this[keys[i]] = properties[keys[i]];
61870
+ }
61871
+
61872
+ /**
61873
+ * FrustumByRectangle rectangle.
61874
+ * @member {vertexvis.protobuf.stream.IRectangle|null|undefined} rectangle
61875
+ * @memberof vertexvis.protobuf.stream.FrustumByRectangle
61876
+ * @instance
61877
+ */
61878
+ FrustumByRectangle.prototype.rectangle = null;
61879
+
61880
+ /**
61881
+ * Creates a new FrustumByRectangle instance using the specified properties.
61882
+ * @function create
61883
+ * @memberof vertexvis.protobuf.stream.FrustumByRectangle
61884
+ * @static
61885
+ * @param {vertexvis.protobuf.stream.IFrustumByRectangle=} [properties] Properties to set
61886
+ * @returns {vertexvis.protobuf.stream.FrustumByRectangle} FrustumByRectangle instance
61887
+ */
61888
+ FrustumByRectangle.create = function create(properties) {
61889
+ return new FrustumByRectangle(properties);
61890
+ };
61891
+
61892
+ /**
61893
+ * Encodes the specified FrustumByRectangle message. Does not implicitly {@link vertexvis.protobuf.stream.FrustumByRectangle.verify|verify} messages.
61894
+ * @function encode
61895
+ * @memberof vertexvis.protobuf.stream.FrustumByRectangle
61896
+ * @static
61897
+ * @param {vertexvis.protobuf.stream.IFrustumByRectangle} message FrustumByRectangle message or plain object to encode
61898
+ * @param {$protobuf.Writer} [writer] Writer to encode to
61899
+ * @returns {$protobuf.Writer} Writer
61900
+ */
61901
+ FrustumByRectangle.encode = function encode(message, writer) {
61902
+ if (!writer)
61903
+ writer = $Writer.create();
61904
+ if (message.rectangle != null && Object.hasOwnProperty.call(message, "rectangle"))
61905
+ $root.vertexvis.protobuf.stream.Rectangle.encode(message.rectangle, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
61906
+ return writer;
61907
+ };
61908
+
61909
+ /**
61910
+ * Encodes the specified FrustumByRectangle message, length delimited. Does not implicitly {@link vertexvis.protobuf.stream.FrustumByRectangle.verify|verify} messages.
61911
+ * @function encodeDelimited
61912
+ * @memberof vertexvis.protobuf.stream.FrustumByRectangle
61913
+ * @static
61914
+ * @param {vertexvis.protobuf.stream.IFrustumByRectangle} message FrustumByRectangle message or plain object to encode
61915
+ * @param {$protobuf.Writer} [writer] Writer to encode to
61916
+ * @returns {$protobuf.Writer} Writer
61917
+ */
61918
+ FrustumByRectangle.encodeDelimited = function encodeDelimited(message, writer) {
61919
+ return this.encode(message, writer).ldelim();
61920
+ };
61921
+
61922
+ /**
61923
+ * Decodes a FrustumByRectangle message from the specified reader or buffer.
61924
+ * @function decode
61925
+ * @memberof vertexvis.protobuf.stream.FrustumByRectangle
61926
+ * @static
61927
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
61928
+ * @param {number} [length] Message length if known beforehand
61929
+ * @returns {vertexvis.protobuf.stream.FrustumByRectangle} FrustumByRectangle
61930
+ * @throws {Error} If the payload is not a reader or valid buffer
61931
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
61932
+ */
61933
+ FrustumByRectangle.decode = function decode(reader, length) {
61934
+ if (!(reader instanceof $Reader))
61935
+ reader = $Reader.create(reader);
61936
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.vertexvis.protobuf.stream.FrustumByRectangle();
61937
+ while (reader.pos < end) {
61938
+ let tag = reader.uint32();
61939
+ switch (tag >>> 3) {
61940
+ case 1:
61941
+ message.rectangle = $root.vertexvis.protobuf.stream.Rectangle.decode(reader, reader.uint32());
61942
+ break;
61943
+ default:
61944
+ reader.skipType(tag & 7);
61945
+ break;
61946
+ }
61947
+ }
61948
+ return message;
61949
+ };
61950
+
61951
+ /**
61952
+ * Decodes a FrustumByRectangle message from the specified reader or buffer, length delimited.
61953
+ * @function decodeDelimited
61954
+ * @memberof vertexvis.protobuf.stream.FrustumByRectangle
61955
+ * @static
61956
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
61957
+ * @returns {vertexvis.protobuf.stream.FrustumByRectangle} FrustumByRectangle
61958
+ * @throws {Error} If the payload is not a reader or valid buffer
61959
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
61960
+ */
61961
+ FrustumByRectangle.decodeDelimited = function decodeDelimited(reader) {
61962
+ if (!(reader instanceof $Reader))
61963
+ reader = new $Reader(reader);
61964
+ return this.decode(reader, reader.uint32());
61965
+ };
61966
+
61967
+ /**
61968
+ * Verifies a FrustumByRectangle message.
61969
+ * @function verify
61970
+ * @memberof vertexvis.protobuf.stream.FrustumByRectangle
61971
+ * @static
61972
+ * @param {Object.<string,*>} message Plain object to verify
61973
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
61974
+ */
61975
+ FrustumByRectangle.verify = function verify(message) {
61976
+ if (typeof message !== "object" || message === null)
61977
+ return "object expected";
61978
+ if (message.rectangle != null && message.hasOwnProperty("rectangle")) {
61979
+ let error = $root.vertexvis.protobuf.stream.Rectangle.verify(message.rectangle);
61980
+ if (error)
61981
+ return "rectangle." + error;
61982
+ }
61983
+ return null;
61984
+ };
61985
+
61986
+ /**
61987
+ * Creates a FrustumByRectangle message from a plain object. Also converts values to their respective internal types.
61988
+ * @function fromObject
61989
+ * @memberof vertexvis.protobuf.stream.FrustumByRectangle
61990
+ * @static
61991
+ * @param {Object.<string,*>} object Plain object
61992
+ * @returns {vertexvis.protobuf.stream.FrustumByRectangle} FrustumByRectangle
61993
+ */
61994
+ FrustumByRectangle.fromObject = function fromObject(object) {
61995
+ if (object instanceof $root.vertexvis.protobuf.stream.FrustumByRectangle)
61996
+ return object;
61997
+ let message = new $root.vertexvis.protobuf.stream.FrustumByRectangle();
61998
+ if (object.rectangle != null) {
61999
+ if (typeof object.rectangle !== "object")
62000
+ throw TypeError(".vertexvis.protobuf.stream.FrustumByRectangle.rectangle: object expected");
62001
+ message.rectangle = $root.vertexvis.protobuf.stream.Rectangle.fromObject(object.rectangle);
62002
+ }
62003
+ return message;
62004
+ };
62005
+
62006
+ /**
62007
+ * Creates a plain object from a FrustumByRectangle message. Also converts values to other types if specified.
62008
+ * @function toObject
62009
+ * @memberof vertexvis.protobuf.stream.FrustumByRectangle
62010
+ * @static
62011
+ * @param {vertexvis.protobuf.stream.FrustumByRectangle} message FrustumByRectangle
62012
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
62013
+ * @returns {Object.<string,*>} Plain object
62014
+ */
62015
+ FrustumByRectangle.toObject = function toObject(message, options) {
62016
+ if (!options)
62017
+ options = {};
62018
+ let object = {};
62019
+ if (options.defaults)
62020
+ object.rectangle = null;
62021
+ if (message.rectangle != null && message.hasOwnProperty("rectangle"))
62022
+ object.rectangle = $root.vertexvis.protobuf.stream.Rectangle.toObject(message.rectangle, options);
62023
+ return object;
62024
+ };
62025
+
62026
+ /**
62027
+ * Converts this FrustumByRectangle to JSON.
62028
+ * @function toJSON
62029
+ * @memberof vertexvis.protobuf.stream.FrustumByRectangle
62030
+ * @instance
62031
+ * @returns {Object.<string,*>} JSON object
62032
+ */
62033
+ FrustumByRectangle.prototype.toJSON = function toJSON() {
62034
+ return this.constructor.toObject(this, minimal.util.toJSONOptions);
62035
+ };
62036
+
62037
+ return FrustumByRectangle;
62038
+ })();
62039
+
62040
+ stream.VolumeIntersectionQuery = (function() {
62041
+
62042
+ /**
62043
+ * Properties of a VolumeIntersectionQuery.
62044
+ * @memberof vertexvis.protobuf.stream
62045
+ * @interface IVolumeIntersectionQuery
62046
+ * @property {vertexvis.protobuf.stream.IFrustumByRectangle|null} [frustumByRectangle] VolumeIntersectionQuery frustumByRectangle
62047
+ * @property {boolean|null} [exclusive] VolumeIntersectionQuery exclusive
62048
+ * @property {vertexvis.protobuf.stream.IDimensions|null} [viewport] VolumeIntersectionQuery viewport
62049
+ */
62050
+
62051
+ /**
62052
+ * Constructs a new VolumeIntersectionQuery.
62053
+ * @memberof vertexvis.protobuf.stream
62054
+ * @classdesc Represents a VolumeIntersectionQuery.
62055
+ * @implements IVolumeIntersectionQuery
62056
+ * @constructor
62057
+ * @param {vertexvis.protobuf.stream.IVolumeIntersectionQuery=} [properties] Properties to set
62058
+ */
62059
+ function VolumeIntersectionQuery(properties) {
62060
+ if (properties)
62061
+ for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
62062
+ if (properties[keys[i]] != null)
62063
+ this[keys[i]] = properties[keys[i]];
62064
+ }
62065
+
62066
+ /**
62067
+ * VolumeIntersectionQuery frustumByRectangle.
62068
+ * @member {vertexvis.protobuf.stream.IFrustumByRectangle|null|undefined} frustumByRectangle
62069
+ * @memberof vertexvis.protobuf.stream.VolumeIntersectionQuery
62070
+ * @instance
62071
+ */
62072
+ VolumeIntersectionQuery.prototype.frustumByRectangle = null;
62073
+
62074
+ /**
62075
+ * VolumeIntersectionQuery exclusive.
62076
+ * @member {boolean} exclusive
62077
+ * @memberof vertexvis.protobuf.stream.VolumeIntersectionQuery
62078
+ * @instance
62079
+ */
62080
+ VolumeIntersectionQuery.prototype.exclusive = false;
62081
+
62082
+ /**
62083
+ * VolumeIntersectionQuery viewport.
62084
+ * @member {vertexvis.protobuf.stream.IDimensions|null|undefined} viewport
62085
+ * @memberof vertexvis.protobuf.stream.VolumeIntersectionQuery
62086
+ * @instance
62087
+ */
62088
+ VolumeIntersectionQuery.prototype.viewport = null;
62089
+
62090
+ // OneOf field names bound to virtual getters and setters
62091
+ let $oneOfFields;
62092
+
62093
+ /**
62094
+ * VolumeIntersectionQuery volume.
62095
+ * @member {"frustumByRectangle"|undefined} volume
62096
+ * @memberof vertexvis.protobuf.stream.VolumeIntersectionQuery
62097
+ * @instance
62098
+ */
62099
+ Object.defineProperty(VolumeIntersectionQuery.prototype, "volume", {
62100
+ get: $util.oneOfGetter($oneOfFields = ["frustumByRectangle"]),
62101
+ set: $util.oneOfSetter($oneOfFields)
62102
+ });
62103
+
62104
+ /**
62105
+ * Creates a new VolumeIntersectionQuery instance using the specified properties.
62106
+ * @function create
62107
+ * @memberof vertexvis.protobuf.stream.VolumeIntersectionQuery
62108
+ * @static
62109
+ * @param {vertexvis.protobuf.stream.IVolumeIntersectionQuery=} [properties] Properties to set
62110
+ * @returns {vertexvis.protobuf.stream.VolumeIntersectionQuery} VolumeIntersectionQuery instance
62111
+ */
62112
+ VolumeIntersectionQuery.create = function create(properties) {
62113
+ return new VolumeIntersectionQuery(properties);
62114
+ };
62115
+
62116
+ /**
62117
+ * Encodes the specified VolumeIntersectionQuery message. Does not implicitly {@link vertexvis.protobuf.stream.VolumeIntersectionQuery.verify|verify} messages.
62118
+ * @function encode
62119
+ * @memberof vertexvis.protobuf.stream.VolumeIntersectionQuery
62120
+ * @static
62121
+ * @param {vertexvis.protobuf.stream.IVolumeIntersectionQuery} message VolumeIntersectionQuery message or plain object to encode
62122
+ * @param {$protobuf.Writer} [writer] Writer to encode to
62123
+ * @returns {$protobuf.Writer} Writer
62124
+ */
62125
+ VolumeIntersectionQuery.encode = function encode(message, writer) {
62126
+ if (!writer)
62127
+ writer = $Writer.create();
62128
+ if (message.frustumByRectangle != null && Object.hasOwnProperty.call(message, "frustumByRectangle"))
62129
+ $root.vertexvis.protobuf.stream.FrustumByRectangle.encode(message.frustumByRectangle, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
62130
+ if (message.exclusive != null && Object.hasOwnProperty.call(message, "exclusive"))
62131
+ writer.uint32(/* id 2, wireType 0 =*/16).bool(message.exclusive);
62132
+ if (message.viewport != null && Object.hasOwnProperty.call(message, "viewport"))
62133
+ $root.vertexvis.protobuf.stream.Dimensions.encode(message.viewport, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
62134
+ return writer;
62135
+ };
62136
+
62137
+ /**
62138
+ * Encodes the specified VolumeIntersectionQuery message, length delimited. Does not implicitly {@link vertexvis.protobuf.stream.VolumeIntersectionQuery.verify|verify} messages.
62139
+ * @function encodeDelimited
62140
+ * @memberof vertexvis.protobuf.stream.VolumeIntersectionQuery
62141
+ * @static
62142
+ * @param {vertexvis.protobuf.stream.IVolumeIntersectionQuery} message VolumeIntersectionQuery message or plain object to encode
62143
+ * @param {$protobuf.Writer} [writer] Writer to encode to
62144
+ * @returns {$protobuf.Writer} Writer
62145
+ */
62146
+ VolumeIntersectionQuery.encodeDelimited = function encodeDelimited(message, writer) {
62147
+ return this.encode(message, writer).ldelim();
62148
+ };
62149
+
62150
+ /**
62151
+ * Decodes a VolumeIntersectionQuery message from the specified reader or buffer.
62152
+ * @function decode
62153
+ * @memberof vertexvis.protobuf.stream.VolumeIntersectionQuery
62154
+ * @static
62155
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
62156
+ * @param {number} [length] Message length if known beforehand
62157
+ * @returns {vertexvis.protobuf.stream.VolumeIntersectionQuery} VolumeIntersectionQuery
62158
+ * @throws {Error} If the payload is not a reader or valid buffer
62159
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
62160
+ */
62161
+ VolumeIntersectionQuery.decode = function decode(reader, length) {
62162
+ if (!(reader instanceof $Reader))
62163
+ reader = $Reader.create(reader);
62164
+ let end = length === undefined ? reader.len : reader.pos + length, message = new $root.vertexvis.protobuf.stream.VolumeIntersectionQuery();
62165
+ while (reader.pos < end) {
62166
+ let tag = reader.uint32();
62167
+ switch (tag >>> 3) {
62168
+ case 1:
62169
+ message.frustumByRectangle = $root.vertexvis.protobuf.stream.FrustumByRectangle.decode(reader, reader.uint32());
62170
+ break;
62171
+ case 2:
62172
+ message.exclusive = reader.bool();
62173
+ break;
62174
+ case 3:
62175
+ message.viewport = $root.vertexvis.protobuf.stream.Dimensions.decode(reader, reader.uint32());
62176
+ break;
62177
+ default:
62178
+ reader.skipType(tag & 7);
62179
+ break;
62180
+ }
62181
+ }
62182
+ return message;
62183
+ };
62184
+
62185
+ /**
62186
+ * Decodes a VolumeIntersectionQuery message from the specified reader or buffer, length delimited.
62187
+ * @function decodeDelimited
62188
+ * @memberof vertexvis.protobuf.stream.VolumeIntersectionQuery
62189
+ * @static
62190
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
62191
+ * @returns {vertexvis.protobuf.stream.VolumeIntersectionQuery} VolumeIntersectionQuery
62192
+ * @throws {Error} If the payload is not a reader or valid buffer
62193
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
62194
+ */
62195
+ VolumeIntersectionQuery.decodeDelimited = function decodeDelimited(reader) {
62196
+ if (!(reader instanceof $Reader))
62197
+ reader = new $Reader(reader);
62198
+ return this.decode(reader, reader.uint32());
62199
+ };
62200
+
62201
+ /**
62202
+ * Verifies a VolumeIntersectionQuery message.
62203
+ * @function verify
62204
+ * @memberof vertexvis.protobuf.stream.VolumeIntersectionQuery
62205
+ * @static
62206
+ * @param {Object.<string,*>} message Plain object to verify
62207
+ * @returns {string|null} `null` if valid, otherwise the reason why it is not
62208
+ */
62209
+ VolumeIntersectionQuery.verify = function verify(message) {
62210
+ if (typeof message !== "object" || message === null)
62211
+ return "object expected";
62212
+ if (message.frustumByRectangle != null && message.hasOwnProperty("frustumByRectangle")) {
62213
+ {
62214
+ let error = $root.vertexvis.protobuf.stream.FrustumByRectangle.verify(message.frustumByRectangle);
62215
+ if (error)
62216
+ return "frustumByRectangle." + error;
62217
+ }
62218
+ }
62219
+ if (message.exclusive != null && message.hasOwnProperty("exclusive"))
62220
+ if (typeof message.exclusive !== "boolean")
62221
+ return "exclusive: boolean expected";
62222
+ if (message.viewport != null && message.hasOwnProperty("viewport")) {
62223
+ let error = $root.vertexvis.protobuf.stream.Dimensions.verify(message.viewport);
62224
+ if (error)
62225
+ return "viewport." + error;
62226
+ }
62227
+ return null;
62228
+ };
62229
+
62230
+ /**
62231
+ * Creates a VolumeIntersectionQuery message from a plain object. Also converts values to their respective internal types.
62232
+ * @function fromObject
62233
+ * @memberof vertexvis.protobuf.stream.VolumeIntersectionQuery
62234
+ * @static
62235
+ * @param {Object.<string,*>} object Plain object
62236
+ * @returns {vertexvis.protobuf.stream.VolumeIntersectionQuery} VolumeIntersectionQuery
62237
+ */
62238
+ VolumeIntersectionQuery.fromObject = function fromObject(object) {
62239
+ if (object instanceof $root.vertexvis.protobuf.stream.VolumeIntersectionQuery)
62240
+ return object;
62241
+ let message = new $root.vertexvis.protobuf.stream.VolumeIntersectionQuery();
62242
+ if (object.frustumByRectangle != null) {
62243
+ if (typeof object.frustumByRectangle !== "object")
62244
+ throw TypeError(".vertexvis.protobuf.stream.VolumeIntersectionQuery.frustumByRectangle: object expected");
62245
+ message.frustumByRectangle = $root.vertexvis.protobuf.stream.FrustumByRectangle.fromObject(object.frustumByRectangle);
62246
+ }
62247
+ if (object.exclusive != null)
62248
+ message.exclusive = Boolean(object.exclusive);
62249
+ if (object.viewport != null) {
62250
+ if (typeof object.viewport !== "object")
62251
+ throw TypeError(".vertexvis.protobuf.stream.VolumeIntersectionQuery.viewport: object expected");
62252
+ message.viewport = $root.vertexvis.protobuf.stream.Dimensions.fromObject(object.viewport);
62253
+ }
62254
+ return message;
62255
+ };
62256
+
62257
+ /**
62258
+ * Creates a plain object from a VolumeIntersectionQuery message. Also converts values to other types if specified.
62259
+ * @function toObject
62260
+ * @memberof vertexvis.protobuf.stream.VolumeIntersectionQuery
62261
+ * @static
62262
+ * @param {vertexvis.protobuf.stream.VolumeIntersectionQuery} message VolumeIntersectionQuery
62263
+ * @param {$protobuf.IConversionOptions} [options] Conversion options
62264
+ * @returns {Object.<string,*>} Plain object
62265
+ */
62266
+ VolumeIntersectionQuery.toObject = function toObject(message, options) {
62267
+ if (!options)
62268
+ options = {};
62269
+ let object = {};
62270
+ if (options.defaults) {
62271
+ object.exclusive = false;
62272
+ object.viewport = null;
62273
+ }
62274
+ if (message.frustumByRectangle != null && message.hasOwnProperty("frustumByRectangle")) {
62275
+ object.frustumByRectangle = $root.vertexvis.protobuf.stream.FrustumByRectangle.toObject(message.frustumByRectangle, options);
62276
+ if (options.oneofs)
62277
+ object.volume = "frustumByRectangle";
62278
+ }
62279
+ if (message.exclusive != null && message.hasOwnProperty("exclusive"))
62280
+ object.exclusive = message.exclusive;
62281
+ if (message.viewport != null && message.hasOwnProperty("viewport"))
62282
+ object.viewport = $root.vertexvis.protobuf.stream.Dimensions.toObject(message.viewport, options);
62283
+ return object;
62284
+ };
62285
+
62286
+ /**
62287
+ * Converts this VolumeIntersectionQuery to JSON.
62288
+ * @function toJSON
62289
+ * @memberof vertexvis.protobuf.stream.VolumeIntersectionQuery
62290
+ * @instance
62291
+ * @returns {Object.<string,*>} JSON object
62292
+ */
62293
+ VolumeIntersectionQuery.prototype.toJSON = function toJSON() {
62294
+ return this.constructor.toObject(this, minimal.util.toJSONOptions);
62295
+ };
62296
+
62297
+ return VolumeIntersectionQuery;
62298
+ })();
62299
+
61361
62300
  stream.SceneTreeRangeQuery = (function() {
61362
62301
 
61363
62302
  /**
@@ -63946,6 +64885,7 @@ const vertexvis = $root.vertexvis = (() => {
63946
64885
  * @property {vertexvis.protobuf.stream.ISceneTreeRangeQuery|null} [sceneTreeRange] SceneOperation sceneTreeRange
63947
64886
  * @property {vertexvis.protobuf.stream.IMetadataFilterQuery|null} [metadata] SceneOperation metadata
63948
64887
  * @property {vertexvis.protobuf.stream.IOverrideQuery|null} [override] SceneOperation override
64888
+ * @property {vertexvis.protobuf.stream.IVolumeIntersectionQuery|null} [volume] SceneOperation volume
63949
64889
  * @property {Array.<vertexvis.protobuf.stream.IOperationType>|null} [operationTypes] SceneOperation operationTypes
63950
64890
  */
63951
64891
 
@@ -64029,6 +64969,14 @@ const vertexvis = $root.vertexvis = (() => {
64029
64969
  */
64030
64970
  SceneOperation.prototype.override = null;
64031
64971
 
64972
+ /**
64973
+ * SceneOperation volume.
64974
+ * @member {vertexvis.protobuf.stream.IVolumeIntersectionQuery|null|undefined} volume
64975
+ * @memberof vertexvis.protobuf.stream.SceneOperation
64976
+ * @instance
64977
+ */
64978
+ SceneOperation.prototype.volume = null;
64979
+
64032
64980
  /**
64033
64981
  * SceneOperation operationTypes.
64034
64982
  * @member {Array.<vertexvis.protobuf.stream.IOperationType>} operationTypes
@@ -64042,12 +64990,12 @@ const vertexvis = $root.vertexvis = (() => {
64042
64990
 
64043
64991
  /**
64044
64992
  * SceneOperation query.
64045
- * @member {"item"|"or"|"and"|"all"|"point"|"sceneTreeRange"|"metadata"|"override"|undefined} query
64993
+ * @member {"item"|"or"|"and"|"all"|"point"|"sceneTreeRange"|"metadata"|"override"|"volume"|undefined} query
64046
64994
  * @memberof vertexvis.protobuf.stream.SceneOperation
64047
64995
  * @instance
64048
64996
  */
64049
64997
  Object.defineProperty(SceneOperation.prototype, "query", {
64050
- get: $util.oneOfGetter($oneOfFields = ["item", "or", "and", "all", "point", "sceneTreeRange", "metadata", "override"]),
64998
+ get: $util.oneOfGetter($oneOfFields = ["item", "or", "and", "all", "point", "sceneTreeRange", "metadata", "override", "volume"]),
64051
64999
  set: $util.oneOfSetter($oneOfFields)
64052
65000
  });
64053
65001
 
@@ -64094,6 +65042,8 @@ const vertexvis = $root.vertexvis = (() => {
64094
65042
  $root.vertexvis.protobuf.stream.MetadataFilterQuery.encode(message.metadata, writer.uint32(/* id 8, wireType 2 =*/66).fork()).ldelim();
64095
65043
  if (message.override != null && Object.hasOwnProperty.call(message, "override"))
64096
65044
  $root.vertexvis.protobuf.stream.OverrideQuery.encode(message.override, writer.uint32(/* id 9, wireType 2 =*/74).fork()).ldelim();
65045
+ if (message.volume != null && Object.hasOwnProperty.call(message, "volume"))
65046
+ $root.vertexvis.protobuf.stream.VolumeIntersectionQuery.encode(message.volume, writer.uint32(/* id 10, wireType 2 =*/82).fork()).ldelim();
64097
65047
  return writer;
64098
65048
  };
64099
65049
 
@@ -64152,6 +65102,9 @@ const vertexvis = $root.vertexvis = (() => {
64152
65102
  case 9:
64153
65103
  message.override = $root.vertexvis.protobuf.stream.OverrideQuery.decode(reader, reader.uint32());
64154
65104
  break;
65105
+ case 10:
65106
+ message.volume = $root.vertexvis.protobuf.stream.VolumeIntersectionQuery.decode(reader, reader.uint32());
65107
+ break;
64155
65108
  case 4:
64156
65109
  if (!(message.operationTypes && message.operationTypes.length))
64157
65110
  message.operationTypes = [];
@@ -64271,6 +65224,16 @@ const vertexvis = $root.vertexvis = (() => {
64271
65224
  return "override." + error;
64272
65225
  }
64273
65226
  }
65227
+ if (message.volume != null && message.hasOwnProperty("volume")) {
65228
+ if (properties.query === 1)
65229
+ return "query: multiple values";
65230
+ properties.query = 1;
65231
+ {
65232
+ let error = $root.vertexvis.protobuf.stream.VolumeIntersectionQuery.verify(message.volume);
65233
+ if (error)
65234
+ return "volume." + error;
65235
+ }
65236
+ }
64274
65237
  if (message.operationTypes != null && message.hasOwnProperty("operationTypes")) {
64275
65238
  if (!Array.isArray(message.operationTypes))
64276
65239
  return "operationTypes: array expected";
@@ -64335,6 +65298,11 @@ const vertexvis = $root.vertexvis = (() => {
64335
65298
  throw TypeError(".vertexvis.protobuf.stream.SceneOperation.override: object expected");
64336
65299
  message.override = $root.vertexvis.protobuf.stream.OverrideQuery.fromObject(object.override);
64337
65300
  }
65301
+ if (object.volume != null) {
65302
+ if (typeof object.volume !== "object")
65303
+ throw TypeError(".vertexvis.protobuf.stream.SceneOperation.volume: object expected");
65304
+ message.volume = $root.vertexvis.protobuf.stream.VolumeIntersectionQuery.fromObject(object.volume);
65305
+ }
64338
65306
  if (object.operationTypes) {
64339
65307
  if (!Array.isArray(object.operationTypes))
64340
65308
  throw TypeError(".vertexvis.protobuf.stream.SceneOperation.operationTypes: array expected");
@@ -64408,6 +65376,11 @@ const vertexvis = $root.vertexvis = (() => {
64408
65376
  if (options.oneofs)
64409
65377
  object.query = "override";
64410
65378
  }
65379
+ if (message.volume != null && message.hasOwnProperty("volume")) {
65380
+ object.volume = $root.vertexvis.protobuf.stream.VolumeIntersectionQuery.toObject(message.volume, options);
65381
+ if (options.oneofs)
65382
+ object.query = "volume";
65383
+ }
64411
65384
  return object;
64412
65385
  };
64413
65386
 
@@ -91503,6 +92476,16 @@ function buildSceneOperation(query, operations, context) {
91503
92476
  },
91504
92477
  operationTypes,
91505
92478
  };
92479
+ case 'volume-intersection':
92480
+ return {
92481
+ volume: {
92482
+ frustumByRectangle: {
92483
+ rectangle: query.rectangle,
92484
+ },
92485
+ exclusive: true,
92486
+ viewport: context.dimensions,
92487
+ },
92488
+ };
91506
92489
  default:
91507
92490
  return {};
91508
92491
  }
@@ -92146,6 +93129,9 @@ class RootQuery {
92146
93129
  withPoint(point) {
92147
93130
  return new PointQuery(point);
92148
93131
  }
93132
+ withVolumeIntersection(rectangle) {
93133
+ return new VolumeIntersectionQuery(rectangle);
93134
+ }
92149
93135
  }
92150
93136
  class AllQuery {
92151
93137
  build() {
@@ -92196,6 +93182,17 @@ class PointQuery {
92196
93182
  };
92197
93183
  }
92198
93184
  }
93185
+ class VolumeIntersectionQuery {
93186
+ constructor(rectangle) {
93187
+ this.rectangle = rectangle;
93188
+ }
93189
+ build() {
93190
+ return {
93191
+ type: 'volume-intersection',
93192
+ rectangle: this.rectangle,
93193
+ };
93194
+ }
93195
+ }
92199
93196
  class BulkQuery {
92200
93197
  constructor(ids, type) {
92201
93198
  this.ids = ids;
@@ -99116,6 +100113,8 @@ SceneTreeAPI.GetAvailableColumns = {
99116
100113
  responseType: scene_tree_api_pb.GetAvailableColumnsResponse
99117
100114
  };
99118
100115
 
100116
+ var SceneTreeAPI_1 = SceneTreeAPI;
100117
+
99119
100118
  function SceneTreeAPIClient(serviceHost, options) {
99120
100119
  this.serviceHost = serviceHost;
99121
100120
  this.options = options || {};
@@ -99542,6 +100541,14 @@ function getSceneTreeErrorMessage(code) {
99542
100541
  function isGrpcServiceError(err) {
99543
100542
  return typeof err.code === 'number' && err.hasOwnProperty('metadata');
99544
100543
  }
100544
+ function webSocketSubscriptionTransportFactory(options) {
100545
+ if (options.methodDefinition.methodName === SceneTreeAPI_1.Subscribe.methodName) {
100546
+ return grpcWebClient_umd.grpc.WebsocketTransport()(options);
100547
+ }
100548
+ else {
100549
+ return grpcWebClient_umd.grpc.CrossBrowserHttpTransport({ withCredentials: false })(options);
100550
+ }
100551
+ }
99545
100552
 
99546
100553
  function e(e){this.message=e;}e.prototype=new Error,e.prototype.name="InvalidCharacterError";var r="undefined"!=typeof window&&window.atob&&window.atob.bind(window)||function(r){var t=String(r).replace(/=+$/,"");if(t.length%4==1)throw new e("'atob' failed: The string to be decoded is not correctly encoded.");for(var n,o,a=0,i=0,c="";o=t.charAt(i++);~o&&(n=a%4?64*n+o:o,a++%4)?c+=String.fromCharCode(255&n>>(-2*a&6)):0)o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(o);return c};function t(e){var t=e.replace(/-/g,"+").replace(/_/g,"/");switch(t.length%4){case 0:break;case 2:t+="==";break;case 3:t+="=";break;default:throw "Illegal base64url string!"}try{return function(e){return decodeURIComponent(r(e).replace(/(.)/g,(function(e,r){var t=r.charCodeAt(0).toString(16).toUpperCase();return t.length<2&&(t="0"+t),"%"+t})))}(t)}catch(e){return r(t)}}function n(e){this.message=e;}function o(e,r){if("string"!=typeof e)throw new n("Invalid token specified");var o=!0===(r=r||{}).header?0:1;try{return JSON.parse(t(e.split(".")[o]))}catch(e){throw new n("Invalid token specified: "+e.message)}}n.prototype=new Error,n.prototype.name="InvalidTokenError";
99547
100554
 
@@ -100669,7 +101676,11 @@ const SceneTree = class extends HTMLElement$1 {
100669
101676
  componentWillLoad() {
100670
101677
  if (this.controller == null) {
100671
101678
  const { sceneTreeHost } = this.getConfig().network;
100672
- const client = new SceneTreeAPIClient_1(sceneTreeHost);
101679
+ const client = new SceneTreeAPIClient_1(sceneTreeHost, this.getConfig().flags.grpcUseStreamingWebSocketTransport
101680
+ ? {
101681
+ transport: webSocketSubscriptionTransportFactory,
101682
+ }
101683
+ : undefined);
100673
101684
  this.controller = new SceneTreeController(client, 100);
100674
101685
  }
100675
101686
  this.stateMap.onStateChangeDisposable = this.controller.onStateChange.on((state) => this.handleControllerStateChange(state));
@@ -106014,6 +107025,171 @@ const ViewerDomRenderer = class extends HTMLElement$1 {
106014
107025
  static get style() { return viewerDomRendererCss; }
106015
107026
  };
106016
107027
 
107028
+ class ViewerDragSelectController {
107029
+ constructor(viewer, model) {
107030
+ this.viewer = viewer;
107031
+ this.model = model;
107032
+ this.dragEndDisposable = this.model.onDragFinished(this.selectFromBounds);
107033
+ }
107034
+ dispose() {
107035
+ var _a;
107036
+ (_a = this.dragEndDisposable) === null || _a === void 0 ? void 0 : _a.dispose();
107037
+ }
107038
+ async selectFromBounds(event) {
107039
+ const scene = await this.viewer.scene();
107040
+ await scene
107041
+ .items((op) => op.where((q) => q.withVolumeIntersection(event.rectangle)).select())
107042
+ .execute();
107043
+ }
107044
+ }
107045
+
107046
+ class ViewerDragSelectInteractionHandler {
107047
+ constructor(viewer, dragSelectModel) {
107048
+ this.viewer = viewer;
107049
+ this.dragSelectModel = dragSelectModel;
107050
+ this.handleDragBegin = this.handleDragBegin.bind(this);
107051
+ this.handleDrag = this.handleDrag.bind(this);
107052
+ this.handleDragEnd = this.handleDragEnd.bind(this);
107053
+ }
107054
+ initialize(element, api) {
107055
+ this.element = element;
107056
+ this.api = api;
107057
+ this.element.addEventListener('pointerdown', this.handleDragBegin);
107058
+ }
107059
+ dispose() {
107060
+ var _a, _b, _c;
107061
+ (_a = this.element) === null || _a === void 0 ? void 0 : _a.removeEventListener('pointerdown', this.handleDragBegin);
107062
+ (_b = this.element) === null || _b === void 0 ? void 0 : _b.removeEventListener('pointermove', this.handleDrag);
107063
+ (_c = this.element) === null || _c === void 0 ? void 0 : _c.removeEventListener('pointerup', this.handleDragEnd);
107064
+ }
107065
+ handleDragBegin(event) {
107066
+ var _a, _b;
107067
+ if (event.buttons === 1) {
107068
+ this.viewer.cameraControls = false;
107069
+ this.dragSelectModel.updateStartPoint(point.create(event.offsetX, event.offsetY));
107070
+ (_a = this.element) === null || _a === void 0 ? void 0 : _a.addEventListener('pointermove', this.handleDrag);
107071
+ (_b = this.element) === null || _b === void 0 ? void 0 : _b.addEventListener('pointerup', this.handleDragEnd);
107072
+ }
107073
+ }
107074
+ handleDrag(event) {
107075
+ this.dragSelectModel.updateEndPoint(point.create(event.offsetX, event.offsetY));
107076
+ }
107077
+ handleDragEnd() {
107078
+ var _a, _b;
107079
+ this.viewer.cameraControls = true;
107080
+ this.dragSelectModel.clear();
107081
+ (_a = this.element) === null || _a === void 0 ? void 0 : _a.removeEventListener('pointermove', this.handleDrag);
107082
+ (_b = this.element) === null || _b === void 0 ? void 0 : _b.removeEventListener('pointerup', this.handleDragEnd);
107083
+ }
107084
+ }
107085
+
107086
+ class ViewerDragSelectModel {
107087
+ constructor() {
107088
+ this.dragFinished = new EventDispatcher();
107089
+ this.boundsChanged = new EventDispatcher();
107090
+ }
107091
+ updateStartPoint(point) {
107092
+ this.dragStartPoint = point;
107093
+ }
107094
+ updateEndPoint(point$1) {
107095
+ var _a;
107096
+ this.dragEndPoint = point$1;
107097
+ this.direction =
107098
+ point.subtract(point$1, (_a = this.dragStartPoint) !== null && _a !== void 0 ? _a : point$1).x > 0
107099
+ ? 'right'
107100
+ : 'left';
107101
+ this.boundsChanged.emit({
107102
+ rectangle: this.getDragBounds(),
107103
+ direction: this.getDragDirection(),
107104
+ });
107105
+ }
107106
+ clear() {
107107
+ this.dragFinished.emit({
107108
+ rectangle: this.getDragBounds(),
107109
+ direction: this.getDragDirection(),
107110
+ });
107111
+ this.dragStartPoint = undefined;
107112
+ this.dragEndPoint = undefined;
107113
+ this.boundsChanged.emit({});
107114
+ }
107115
+ onDragFinished(listener) {
107116
+ return this.dragFinished.on(listener);
107117
+ }
107118
+ onBoundsChanged(listener) {
107119
+ return this.boundsChanged.on(listener);
107120
+ }
107121
+ getDragBounds() {
107122
+ if (this.dragStartPoint != null && this.dragEndPoint != null) {
107123
+ return rectangle.fromPoints(this.dragStartPoint, this.dragEndPoint);
107124
+ }
107125
+ return rectangle.create(0, 0, 0, 0);
107126
+ }
107127
+ getDragDirection() {
107128
+ var _a;
107129
+ return (_a = this.direction) !== null && _a !== void 0 ? _a : 'right';
107130
+ }
107131
+ }
107132
+
107133
+ const viewerDragSelectCss = ":host{--viewer-drag-select-outline-exclusive-border-color:#5555ff;--viewer-drag-select-outline-exclusive-border-style:solid;--viewer-drag-select-outline-exclusive-fill-color:blue;--viewer-drag-select-outline-inclusive-border-color:#ff5555;--viewer-drag-select-outline-inclusive-border-style:dashed;--viewer-drag-select-outline-inclusive-fill-color:red;--viewer-drag-select-outline-fill-opacity:0.1}.outline{position:absolute}.outline.exclusive{border:3px var(--viewer-drag-select-outline-exclusive-border-style) var(--viewer-drag-select-outline-exclusive-border-color)}.outline.inclusive{border:3px var(--viewer-drag-select-outline-inclusive-border-style) var(--viewer-drag-select-outline-inclusive-border-color)}.fill{position:relative;width:100%;height:100%;opacity:var(--viewer-drag-select-outline-fill-opacity)}.fill.exclusive{background-color:var(--viewer-drag-select-outline-exclusive-fill-color)}.fill.inclusive{background-color:var(--viewer-drag-select-outline-inclusive-fill-color)}";
107134
+
107135
+ const ViewerDragSelect = class extends HTMLElement$1 {
107136
+ constructor() {
107137
+ super();
107138
+ this.__registerHost();
107139
+ this.__attachShadow();
107140
+ this.handleBoundsChanged = this.handleBoundsChanged.bind(this);
107141
+ }
107142
+ componentWillLoad() {
107143
+ this.interactionModel = new ViewerDragSelectModel();
107144
+ this.interactionModel.onBoundsChanged(this.handleBoundsChanged);
107145
+ this.handleViewerChanged(this.viewer);
107146
+ }
107147
+ /**
107148
+ * @ignore
107149
+ */
107150
+ handleViewerChanged(newViewer) {
107151
+ this.deregisterInteractionHandler();
107152
+ if ((newViewer === null || newViewer === void 0 ? void 0 : newViewer.stream) != null) {
107153
+ this.registerInteractionHandler(newViewer);
107154
+ this.controller = new ViewerDragSelectController(newViewer, this.interactionModel);
107155
+ }
107156
+ }
107157
+ /**
107158
+ * @ignore
107159
+ */
107160
+ render() {
107161
+ return (h(Host, null, h("vertex-viewer-layer", null, this.dragRect != null && (h("div", { class: classnames('outline', {
107162
+ exclusive: this.dragDirection === 'right',
107163
+ inclusive: this.dragDirection === 'left',
107164
+ }), style: {
107165
+ left: `${this.dragRect.x}px`,
107166
+ top: `${this.dragRect.y}px`,
107167
+ width: `${this.dragRect.width}px`,
107168
+ height: `${this.dragRect.height}px`,
107169
+ } }, h("div", { class: classnames('fill', {
107170
+ exclusive: this.dragDirection === 'right',
107171
+ inclusive: this.dragDirection === 'left',
107172
+ }) }))))));
107173
+ }
107174
+ handleBoundsChanged(event) {
107175
+ this.dragRect = event.rectangle;
107176
+ this.dragDirection = event.direction;
107177
+ }
107178
+ registerInteractionHandler(viewer) {
107179
+ this.interactionHandler = new ViewerDragSelectInteractionHandler(viewer, this.interactionModel);
107180
+ viewer.registerInteractionHandler(this.interactionHandler);
107181
+ }
107182
+ deregisterInteractionHandler() {
107183
+ var _a;
107184
+ (_a = this.interactionHandler) === null || _a === void 0 ? void 0 : _a.dispose();
107185
+ this.interactionHandler = undefined;
107186
+ }
107187
+ static get watchers() { return {
107188
+ "viewer": ["handleViewerChanged"]
107189
+ }; }
107190
+ static get style() { return viewerDragSelectCss; }
107191
+ };
107192
+
106017
107193
  const viewerIconCss = ":host{display:inline-block;width:1em;height:1em;fill:currentColor}:host(.size-sm){font-size:16px}:host(.size-md){font-size:24px}:host(.size-lg){font-size:32px}svg{display:block;width:100%;height:100%}";
106018
107194
 
106019
107195
  const ViewerIcon = class extends HTMLElement$1 {
@@ -123817,6 +124993,7 @@ const VertexViewerDefaultToolbar = /*@__PURE__*/proxyCustomElement(ViewerDefault
123817
124993
  const VertexViewerDomElement = /*@__PURE__*/proxyCustomElement(ViewerDomElement, [1,"vertex-viewer-dom-element",{"position":[1040],"positionJson":[1,"position"],"rotation":[1040],"rotationJson":[1,"rotation"],"quaternion":[1040],"quaternionJson":[1,"quaternion"],"scale":[1040],"scaleJson":[1,"scale"],"matrix":[1040],"occlusionOff":[4,"occlusion-off"],"occluded":[516],"billboardOff":[4,"billboard-off"],"interactionsOff":[516,"interactions-off"]}]);
123818
124994
  const VertexViewerDomGroup = /*@__PURE__*/proxyCustomElement(ViewerDomGroup, [1,"vertex-viewer-dom-group",{"position":[1040],"positionJson":[1,"position"],"rotation":[1040],"rotationJson":[1,"rotation"],"quaternion":[1040],"quaternionJson":[1,"quaternion"],"scale":[1040],"scaleJson":[1,"scale"],"matrix":[1040]}]);
123819
124995
  const VertexViewerDomRenderer = /*@__PURE__*/proxyCustomElement(ViewerDomRenderer, [1,"vertex-viewer-dom-renderer",{"drawMode":[1,"draw-mode"],"viewer":[16],"camera":[1040],"depthBuffer":[1040],"viewport":[32],"invalidateFrameCounter":[32]},[[0,"propertyChange","handlePropertyChange"]]]);
124996
+ const VertexViewerDragSelect = /*@__PURE__*/proxyCustomElement(ViewerDragSelect, [1,"vertex-viewer-drag-select",{"viewer":[16],"controller":[16],"dragRect":[32],"dragDirection":[32]}]);
123820
124997
  const VertexViewerIcon = /*@__PURE__*/proxyCustomElement(ViewerIcon, [1,"vertex-viewer-icon",{"name":[1],"size":[1]}]);
123821
124998
  const VertexViewerLayer = /*@__PURE__*/proxyCustomElement(ViewerLayer, [1,"vertex-viewer-layer",{"stretchOff":[516,"stretch-off"]}]);
123822
124999
  const VertexViewerMarkup = /*@__PURE__*/proxyCustomElement(ViewerMarkup, [1,"vertex-viewer-markup",{"arrowTemplateId":[1,"arrow-template-id"],"circleTemplateId":[1,"circle-template-id"],"freeformTemplateId":[1,"freeform-template-id"],"tool":[1],"disabled":[4],"viewer":[16],"selectedMarkupId":[1025,"selected-markup-id"],"selectNew":[4,"select-new"],"toSelectMarkupId":[32],"pointerDownPosition":[32]},[[0,"markupEnd","handleMarkupEnd"],[1,"pointerdown","handleMarkupPointerDown"]]]);
@@ -123856,6 +125033,7 @@ const defineCustomElements = (opts) => {
123856
125033
  VertexViewerDomElement,
123857
125034
  VertexViewerDomGroup,
123858
125035
  VertexViewerDomRenderer,
125036
+ VertexViewerDragSelect,
123859
125037
  VertexViewerIcon,
123860
125038
  VertexViewerLayer,
123861
125039
  VertexViewerMarkup,
@@ -123885,4 +125063,4 @@ const defineCustomElements = (opts) => {
123885
125063
  }
123886
125064
  };
123887
125065
 
123888
- export { AngleUnits, AreaUnits, ArrowMarkup, CircleMarkup, colorMaterial as ColorMaterial, CursorManager, DistanceUnits, EntityType, FrameCameraBase, FreeformMarkup, loadableResource as LoadableResource, MeasurementController, MeasurementEntity, MeasurementModel, MeasurementOverlayManager, Frame as ReceivedFrame, FrameImage as ReceivedFrameImage, FrameScene as ReceivedFrameScene, FrameOrthographicCamera as ReceivedOrthographicCamera, FramePerspectiveCamera as ReceivedPerspectiveCamera, Scene, SynchronizedClock, VertexSceneTree, VertexSceneTreeSearch, VertexSceneTreeTableCell, VertexSceneTreeTableColumn, VertexSceneTreeTableHeader, VertexSceneTreeTableLayout, VertexSceneTreeTableResizeDivider, VertexSceneTreeToolbar, VertexSceneTreeToolbarGroup, VertexViewer, VertexViewerButton, VertexViewerDefaultToolbar, VertexViewerDomElement, VertexViewerDomGroup, VertexViewerDomRenderer, VertexViewerIcon, VertexViewerLayer, VertexViewerMarkup, VertexViewerMarkupArrow, VertexViewerMarkupCircle, VertexViewerMarkupFreeform, VertexViewerMarkupTool, VertexViewerMeasurementDetails, VertexViewerMeasurementDistance, VertexViewerMeasurementLine, VertexViewerMeasurementOverlays, VertexViewerMeasurementPrecise, VertexViewerPinGroup, VertexViewerPinLabel, VertexViewerPinLabelLine, VertexViewerPinTool, VertexViewerSpinner, VertexViewerToolbar, VertexViewerToolbarGroup, VertexViewerTransformWidget, VertexViewerViewCube, Viewport, __awaiter as _, __generator as a, __spreadArray as b, createCommonjsModule as c, defineCustomElements, labelPinCursor, makeMinimumDistanceResult, measurementCursor, measurementWithArrowCursor, pinCursor };
125066
+ export { AngleUnits, AreaUnits, ArrowMarkup, CircleMarkup, colorMaterial as ColorMaterial, CursorManager, DistanceUnits, EntityType, FrameCameraBase, FreeformMarkup, loadableResource as LoadableResource, MeasurementController, MeasurementEntity, MeasurementModel, MeasurementOverlayManager, Frame as ReceivedFrame, FrameImage as ReceivedFrameImage, FrameScene as ReceivedFrameScene, FrameOrthographicCamera as ReceivedOrthographicCamera, FramePerspectiveCamera as ReceivedPerspectiveCamera, Scene, SynchronizedClock, VertexSceneTree, VertexSceneTreeSearch, VertexSceneTreeTableCell, VertexSceneTreeTableColumn, VertexSceneTreeTableHeader, VertexSceneTreeTableLayout, VertexSceneTreeTableResizeDivider, VertexSceneTreeToolbar, VertexSceneTreeToolbarGroup, VertexViewer, VertexViewerButton, VertexViewerDefaultToolbar, VertexViewerDomElement, VertexViewerDomGroup, VertexViewerDomRenderer, VertexViewerDragSelect, VertexViewerIcon, VertexViewerLayer, VertexViewerMarkup, VertexViewerMarkupArrow, VertexViewerMarkupCircle, VertexViewerMarkupFreeform, VertexViewerMarkupTool, VertexViewerMeasurementDetails, VertexViewerMeasurementDistance, VertexViewerMeasurementLine, VertexViewerMeasurementOverlays, VertexViewerMeasurementPrecise, VertexViewerPinGroup, VertexViewerPinLabel, VertexViewerPinLabelLine, VertexViewerPinTool, VertexViewerSpinner, VertexViewerToolbar, VertexViewerToolbarGroup, VertexViewerTransformWidget, VertexViewerViewCube, Viewport, __awaiter as _, __generator as a, __spreadArray as b, createCommonjsModule as c, defineCustomElements, labelPinCursor, makeMinimumDistanceResult, measurementCursor, measurementWithArrowCursor, pinCursor };