@vertexvis/viewer 0.17.5-testing.5 → 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 (52) hide show
  1. package/README.template.md +3 -3
  2. package/dist/cjs/index.cjs.js +1 -1
  3. package/dist/cjs/{scene-9762fef8.js → scene-4425281f.js} +6 -3
  4. package/dist/cjs/scene-4425281f.js.map +1 -0
  5. package/dist/cjs/vertex-scene-tree-search_3.cjs.entry.js +1 -3
  6. package/dist/cjs/vertex-scene-tree-search_3.cjs.entry.js.map +1 -1
  7. package/dist/cjs/vertex-viewer.cjs.entry.js +13 -10
  8. package/dist/cjs/vertex-viewer.cjs.entry.js.map +1 -1
  9. package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js +1 -3
  10. package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js.map +1 -1
  11. package/dist/collection/components/viewer/viewer.js +3 -3
  12. package/dist/collection/components/viewer/viewer.js.map +1 -1
  13. package/dist/collection/lib/interactions/interactionApiOrthographic.js +5 -4
  14. package/dist/collection/lib/interactions/interactionApiOrthographic.js.map +1 -1
  15. package/dist/collection/lib/interactions/interactionApiPerspective.js +4 -3
  16. package/dist/collection/lib/interactions/interactionApiPerspective.js.map +1 -1
  17. package/dist/collection/lib/interactions/multiTouchInteractionHandler.js +3 -2
  18. package/dist/collection/lib/interactions/multiTouchInteractionHandler.js.map +1 -1
  19. package/dist/collection/lib/types/loadableResource.js +5 -2
  20. package/dist/collection/lib/types/loadableResource.js.map +1 -1
  21. package/dist/collection/testing/viewer.js +2 -2
  22. package/dist/collection/testing/viewer.js.map +1 -1
  23. package/dist/custom-elements/index.js +18 -14
  24. package/dist/custom-elements/index.js.map +1 -1
  25. package/dist/esm/index.js +1 -1
  26. package/dist/esm/index.mjs +1 -1
  27. package/dist/esm/{scene-1bd307f3.js → scene-31d88655.js} +6 -3
  28. package/dist/esm/scene-31d88655.js.map +1 -0
  29. package/dist/esm/vertex-scene-tree-search_3.entry.js +1 -3
  30. package/dist/esm/vertex-scene-tree-search_3.entry.js.map +1 -1
  31. package/dist/esm/vertex-viewer.entry.js +13 -10
  32. package/dist/esm/vertex-viewer.entry.js.map +1 -1
  33. package/dist/types/components/viewer/viewer.d.ts +2 -2
  34. package/dist/types/components.d.ts +3 -3
  35. package/dist/types/testing/viewer.d.ts +2 -2
  36. package/dist/viewer/index.esm.js +1 -1
  37. package/dist/viewer/p-43eb668e.js +5 -0
  38. package/dist/viewer/p-43eb668e.js.map +1 -0
  39. package/dist/viewer/{p-951a2e08.entry.js → p-5ce0269a.entry.js} +2 -2
  40. package/dist/viewer/p-5ce0269a.entry.js.map +1 -0
  41. package/dist/viewer/p-8f16e792.entry.js +5 -0
  42. package/dist/viewer/p-8f16e792.entry.js.map +1 -0
  43. package/dist/viewer/viewer.esm.js +1 -1
  44. package/package.json +7 -7
  45. package/readme.md +7 -7
  46. package/dist/cjs/scene-9762fef8.js.map +0 -1
  47. package/dist/esm/scene-1bd307f3.js.map +0 -1
  48. package/dist/viewer/p-27a5034e.entry.js +0 -5
  49. package/dist/viewer/p-27a5034e.entry.js.map +0 -1
  50. package/dist/viewer/p-951a2e08.entry.js.map +0 -1
  51. package/dist/viewer/p-c3be5b4d.js +0 -5
  52. package/dist/viewer/p-c3be5b4d.js.map +0 -1
@@ -36,7 +36,7 @@ file that references our published JS bundles from a CDN.
36
36
  </head>
37
37
 
38
38
  <body>
39
- <vertex-viewer id="viewer" src="urn:vertexvis:stream-key:123" client-id="123"></vertex-viewer>
39
+ <vertex-viewer id="viewer" src="urn:vertex:stream-key:123" client-id="123"></vertex-viewer>
40
40
  </body>
41
41
  </html>
42
42
  ```
@@ -77,7 +77,7 @@ async function main() {
77
77
 
78
78
  // Wait for the component to be registered.
79
79
  await customElements.whenDefined('vertex-viewer');
80
- viewer.load("urn:vertexvis:stream-key:123")
80
+ viewer.load("urn:vertex:stream-key:123")
81
81
  }
82
82
  ```
83
83
 
@@ -111,7 +111,7 @@ async function main() {
111
111
  await defineCustomElements();
112
112
 
113
113
  const viewer = document.querySelector("viewer");
114
- await viewer.load("urn:vertexvis:stream-key:123");
114
+ await viewer.load("urn:vertex:stream-key:123");
115
115
  console.log("Loaded!");
116
116
  }
117
117
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
- const scene = require('./scene-9762fef8.js');
8
+ const scene = require('./scene-4425281f.js');
9
9
  const controller = require('./controller-c7c4f333.js');
10
10
  const row = require('./row-8f1b8d84.js');
11
11
  const cursors = require('./cursors-5f6e27c0.js');
@@ -75,8 +75,11 @@ function fromUrn(urn) {
75
75
  throw new Error('Invalid URN. Expected URN scheme.');
76
76
  }
77
77
  const [nid, resourceType, resourceId, ...subResourcePath] = uri.path.split(/[:/]/);
78
- if (nid !== 'vertexvis') {
79
- throw new Error('Invalid URN. Expected URN to be vertexvis namespace');
78
+ if (nid !== 'vertexvis' && nid !== 'vertex') {
79
+ throw new Error('Invalid URN. Expected URN to be vertex namespace');
80
+ }
81
+ if (nid === 'vertexvis') {
82
+ console.warn("vertexvis namespace is deprecated. Use 'vertex' for the namespace urn instead");
80
83
  }
81
84
  switch (resourceType) {
82
85
  case 'stream-key':
@@ -1509,4 +1512,4 @@ exports.colorMaterial = colorMaterial;
1509
1512
  exports.fromUrn = fromUrn;
1510
1513
  exports.loadableResource = loadableResource;
1511
1514
 
1512
- //# sourceMappingURL=scene-9762fef8.js.map
1515
+ //# sourceMappingURL=scene-4425281f.js.map
@@ -0,0 +1 @@
1
+ {"file":"scene-4425281f.js","mappings":";;;;;;;;;;;;AAcO,MAAM,YAAY,GAAkB;EACzC,OAAO,EAAE,GAAG;EACZ,UAAU,EAAE,CAAC;EACb,OAAO,EAAE;IACP,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;GACL;EACD,OAAO,EAAE;IACP,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;GACL;EAED,QAAQ,EAAE;IACR,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;GACL;EACD,QAAQ,EAAE;IACR,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;GACL;CACF,CAAC;AAEF;;;;;AAKO,MAAM,MAAM,GAAG,CACpB,CAAS,EACT,CAAS,EACT,CAAS,EACT,OAAgB;EAEhB,uCACK,YAAY,KACf,OAAO,EAAE,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,YAAY,CAAC,OAAO,EACxC,OAAO,EAAE;MACP,CAAC;MACD,CAAC;MACD,CAAC;MACD,CAAC,EAAE,CAAC;KACL,IACD;AACJ,CAAC,CAAC;AAEF;;;;;AAKO,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,OAAgB;EACnD,MAAM,KAAK,GAAGA,iBAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;EAEvC,uCACK,YAAY,KACf,OAAO,EAAE,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,YAAY,CAAC,OAAO,EACxC,OAAO,EAAE,KAAK,IAAI,IAAI,qBAAQ,KAAK,sBAAU,YAAY,CAAC,OAAO,CAAE,IACnE;AACJ,CAAC;;;;;;;;;SC/De,OAAO,CAAC,GAAW;;EACjC,MAAM,GAAG,GAAGC,eAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;EAE3B,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE;IAC5C,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;GACtD;EAED,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,eAAe,CAAC,GACvD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;EAEzB,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,QAAQ,EAAE;IAC3C,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;GACrE;EAED,IAAI,GAAG,KAAK,WAAW,EAAE;IACvB,OAAO,CAAC,IAAI,CACV,+EAA+E,CAChF,CAAC;GACH;EAED,QAAQ,YAAY;IAClB,KAAK,YAAY;MACf,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;MACrC,MAAM,WAAW,GACf,MAAA,mBAAmB,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,mCAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAEpC,CAAC;MAEjB,OAAO;QACL,QAAQ,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,EAAE;QAChD,WAAW;QACX,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAC;OAC9D,CAAC;IACJ;MACE,MAAM,IAAIC,8BAAuB,CAC/B,sCAAsC,YAAY,EAAE,CACrD,CAAC;GACL;AACH,CAAC;AASD,SAAS,mBAAmB,CAAC,IAAa;EACxC,IAAI,IAAI,IAAI,IAAI,EAAE;IAChB,MAAM,CAAC,eAAe,EAAE,aAAa,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEzD,QAAQ,eAAe;MACrB,KAAK,mBAAmB;QACtB,OAAO;UACL,IAAI,EAAE,kBAAkB;UACxB,EAAE,EAAE,aAAa;SAClB,CAAC;MACJ;QACE,OAAO,SAAS,CAAC;KACpB;GACF;AACH,CAAC;AASD,SAAS,SAAS,CAAC,KAAc;EAC/B,IAAI,KAAK,IAAI,IAAI,EAAE;IACjB,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa;MACxC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;MAE5D,QAAQ,YAAY;QAClB,KAAK,aAAa;UAChB,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;QACjD,KAAK,kBAAkB;UACrB,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;QACtD;UACE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;OAC5D;KACF,CAAC,CAAC;GACJ;OAAM;IACL,OAAO,EAAE,CAAC;GACX;AACH;;;;;;;SCtFgB,kBAAkB,CAChC,UAAoC;EAEpC,OAAQ,UAA+B,CAAC,EAAE,IAAI,IAAI,CAAC;AACrD,CAAC;SAEe,0BAA0B,CACxC,UAAoC;EAEpC,OAAQ,UAAuC,CAAC,UAAU,IAAI,IAAI,CAAC;AACrE;;AC3BA;;;;;;;;;;;;;;;;;;;;;MAqBa,iBAAiB;EAC5B,YACkB,eAAqB,EACrB,iBAAiB,IAAI,IAAI,EAAE;IAD3B,oBAAe,GAAf,eAAe,CAAM;IACrB,mBAAc,GAAd,cAAc,CAAa;GACzC;;;;EAKG,WAAW;IAChB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;GAC5D;;;;;;EAuBM,SAAS,CAAC,wBAA6C;IAC5D,MAAM,UAAU,GACd,OAAO,wBAAwB,KAAK,QAAQ;QACxC,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,wBAAwB,CAAC;QAClE,wBAAwB,CAAC;IAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IACjE,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;GACxD;;;;;;EAOM,YAAY,CAAC,YAAkB,IAAI,IAAI,EAAE;IAC9C,OAAO,IAAI,CAAC,QAAQ,CAClB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,EACpC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAC3B,CAAC;GACH;;;;EAKM,SAAS;IACd,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;GACzC;;;;;;EAsBM,UAAU,CAAC,uBAA4C;IAC5D,MAAM,SAAS,GACb,OAAO,uBAAuB,KAAK,QAAQ;QACvC,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,uBAAuB,CAAC;QACjE,uBAAuB,CAAC;IAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAC/D,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;GACzD;EAEO,WAAW,CAAC,KAAW,EAAE,QAAsB;IACrD,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,CAAC;GAC7C;EAEO,QAAQ,CAAC,KAAW,EAAE,GAAS;IACrC,OAAO,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;GACxC;EAEO,QAAQ;IACd,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;GAC7B;;;ACxHI,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAE,CAAC;MAElC,wBAAwB;EAKnC,YACU,MAAiB,EACjB,SAEI,EACJ,SAEU,EACV,UAAkB,qBAAqB;IAPvC,WAAM,GAAN,MAAM,CAAW;IACjB,cAAS,GAAT,SAAS,CAEL;IACJ,cAAS,GAAT,SAAS,CAEC;IACV,YAAO,GAAP,OAAO,CAAgC;IAZzC,cAAS,GAAuB,EAAE,CAAC;IAczC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;GACpD;EAEM,EAAE,CAAC,QAAqB;IAC7B,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC/C,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,EAAE;MAClE,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;GACF;EAEM,GAAG,CAAC,QAAqB;IAC9B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC;IAC9D,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;MAC/B,IAAI,CAAC,eAAe,EAAE,CAAC;KACxB;GACF;EAEM,IAAI;IACT,IAAI,OAA0B,CAAC;IAC/B,OAAOC,iBAAK,CAAC,OAAO,CAClB,IAAI,CAAC,OAAO,EACZ,IAAI,OAAO,CAAI,CAAC,OAAO;MACrB,OAAO,GAAG,CAAC,IAAO;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC;QACd,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;OACnB,CAAC;MAEF,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;KAClB,CAAC,CACH,CAAC,OAAO,CAAC;MACR,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;KACnB,CAAC,CAAC;GACJ;EAEO,aAAa,CAAC,GAA6C;IACjE,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;MACvB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;MAExC,IAAI,WAAW,IAAI,IAAI,EAAE;QACvB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;OAC/C;KACF;GACF;EAEO,YAAY;IAClB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC/D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;GACpE;EAEO,eAAe;;IACrB,MAAA,IAAI,CAAC,eAAe,0CAAE,OAAO,EAAE,CAAC;IAChC,MAAA,IAAI,CAAC,iBAAiB,0CAAE,OAAO,EAAE,CAAC;GACnC;;;MC7DU,kBAAkB;EAK7B,YACE,MAAiB,EACjB,WAAyB,EACzB,EAAE,WAAW,EAAE,aAAa,EAAmB,EAC/C,OAAgB;IARX,SAAI,GAAG,SAAS,CAAC;IAUtB,IAAI,CAAC,oBAAoB,GAAG,IAAI,wBAAwB,CACtD,MAAM,EACN,CAAC,GAAG,uBAAK,OAAA,CAAA,MAAA,MAAA,MAAA,GAAG,CAAC,KAAK,0CAAE,kBAAkB,0CAAE,WAAW,0CAAE,GAAG,MAAK,WAAW,CAAA,EAAA,EACxE,CAAC,GAAG,uBAAK,OAAA,CAAA,MAAA,MAAA,MAAA,GAAG,CAAC,KAAK,0CAAE,kBAAkB,0CAAE,WAAW,0CAAE,GAAG,KAAI,SAAS,CAAA,EAAA,EACrE,OAAO,CACR,CAAC;IACF,IAAI,CAAC,eAAe,GAAG,IAAI,wBAAwB,CACjD,MAAM,EACN,CAAC,GAAG;;MACF,OAAA,CAAC,EAAC,MAAA,MAAA,MAAA,GAAG,CAAC,OAAO,0CAAE,SAAS,0CAAE,mBAAmB,0CAAE,IAAI,CACjD,CAAC,EAAE,KAAK,EAAE,KAAK,aAAa,CAC7B,CAAA,CAAA;KAAA,EACH,CAAC,GAAG;;MACF,OAAA,CAAA,MAAA,GAAG,CAAC,OAAO,0CAAE,SAAS,KAAI,IAAI;UAC1B,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;UAClC,SAAS,CAAA;KAAA,EACf,OAAO,CACR,CAAC;GACH;;;SCtBa,6BAA6B,CAC3C,UAAyE;EAUzE,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;IAClC,OAAO,EAAE,gBAAgB,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,CAAC;GAClD;OAAM,IAAIC,kBAA2C,CAAC,UAAU,CAAC,EAAE;IAClE,OAAO,EAAE,gBAAgB,EAAE,EAAE,GAAG,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC;GACrD;OAAM,IAAIC,0BAAmD,CAAC,UAAU,CAAC,EAAE;IAC1E,OAAO,EAAE,wBAAwB,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,EAAE,EAAE,CAAC;GACvE;OAAM;IACL,MAAM,IAAI,KAAK,CACb,oGAAoG,CACrG,CAAC;GACH;AACH,CAAC;SAEe,oBAAoB,CAClC,KAAsB,EACtB,OAAmC;EAEnC,QAAQ,KAAK,CAAC,IAAI;IAChB,KAAK,KAAK,CAAC;IACX,KAAK,IAAI;MACP,OAAO;QACL,OAAO,EAAE;UACP,cAAc,EAAE;YACd,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM;cACvC,cAAc,EAAE,mBAAmB,CAAC,GAAG,CAAC;aACzC,CAAC,CAAC;WACJ;SACF;OACF,CAAC;IACJ,KAAK,KAAK;MACR,OAAO;QACL,GAAG,EAAE;UACH,UAAU,EAAE,oBAAoB,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC;SACvD;OACF,CAAC;IACJ,KAAK,SAAS,CAAC;IACf,KAAK,aAAa;MAChB,OAAO;QACL,OAAO,EAAE;UACP,IAAI,EAAE;YACJ,cAAc,EAAE,mBAAmB,CAAC,KAAK,CAAC;WAC3C;SACF;OACF,CAAC;IACJ,KAAK,KAAK;MACR,OAAO;QACL,OAAO,EAAE;UACP,IAAI,EAAE,EAAE;SACT;OACF,CAAC;IACJ,KAAK,kBAAkB;MACrB,OAAO;QACL,OAAO,EAAE;UACP,cAAc,EAAE;YACd,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK;YACxB,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG;WACrB;SACF;OACF,CAAC;IACJ,KAAK,UAAU;MACb,OAAO;QACL,OAAO,EAAE;UACP,QAAQ,EAAE;YACR,WAAW,EAAE,KAAK,CAAC,MAAM;YACzB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,UAAU,EAAE,KAAK,CAAC,UAAU;WAC7B;SACF;OACF,CAAC;IACJ,KAAK,cAAc;MACjB,OAAO;QACL,OAAO,EAAE;UACP,QAAQ,EAAE;YACR,SAAS,EAAE,EAAE;WACd;SACF;OACF,CAAC;IACJ,KAAK,OAAO;MACV,OAAO;QACL,OAAO,EAAE;UACP,KAAK,EAAE;YACL,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,QAAQ,EAAE,OAAO,CAAC,UAAU;WAC7B;SACF;OACF,CAAC;IACJ,KAAK,qBAAqB;MACxB,OAAO;QACL,OAAO,EAAE;UACP,MAAM,EAAE;YACN,kBAAkB,EAAE;cAClB,SAAS,EAAE,KAAK,CAAC,SAAS;aAC3B;YACD,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,QAAQ,EAAE,OAAO,CAAC,UAAU;WAC7B;SACF;OACF,CAAC;IACJ;MACE,OAAO,EAAE,CAAC;GACb;AACH,CAAC;SAEe,mBAAmB,CACjC,KAAsB,EACtB,UAA2B,EAC3B,OAAmC;EAEnC,MAAM,cAAc,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;EAEvD,MAAM,eAAe,GAAG,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;EAE7D,OAAO;IACL,eAAe;IACf,cAAc;GACf,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,IAAqB;EAErB,QAAQ,IAAI,CAAC,IAAI;IACf,KAAK,SAAS;MACZ,OAAO;QACL,EAAE,EAAE,IAAIC,0BAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;UACnC,GAAG,EAAE,IAAI,CAAC,KAAK;SAChB,CAAC;OACH,CAAC;IACJ,KAAK,aAAa;MAChB,OAAO;QACL,UAAU,EAAE,IAAI,CAAC,KAAK;OACvB,CAAC;IACJ;MACE,OAAO,EAAE,CAAC;GACb;AACH,CAAC;SAEe,mBAAmB,CACjC,kBAA6B,EAC7B,OAA2B,EAC3B,SAA+B;EAE/B,MAAM,OAAO,GAAG;IACd,kBAAkB,EAAE;MAClB,KAAK,EAAE,kBAAkB;KAC1B;IACD,SAAS,EAAE,SAAS;QAChB;QACE,QAAQ,EAAEC,0BAAe,CAAC,SAAS,CAAC,YAAY,CAAC;OAClD;QACD,SAAS;GACd,CAAC;EAEF,QAAQ,OAAO,CAAC,KAAK,CAAC,IAAI;IACxB,KAAK,UAAU,EAAE;MACf,uCACK,OAAO,KACV,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,IAClC;KACH;IACD,KAAK,UAAU,EAAE;MACf,uCACK,OAAO,KACV,MAAM,EAAE,IAAID,0BAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;UACvC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI;SACxB,CAAC,IACF;KACH;IACD,KAAK,QAAQ,EAAE;MACb,uCACK,OAAO,KACV,MAAM,EAAEE,2BAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAClD;KACH;IAED,KAAK,cAAc,EAAE;MACnB,uCACK,OAAO,KACV,WAAW,EAAE;UACX,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;UAC9B,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;UAC9B,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;UAC9B,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;UAC9B,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;UAC9B,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC/B,IACD;KACH;IACD;MACE,OAAO,EAAE,CAAC;GACb;AACH,CAAC;AAED,SAAS,mBAAmB,CAC1B,UAA2B;EAE3B,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;;IACvB,QAAQ,EAAE,CAAC,IAAI;MACb,KAAK,iBAAiB;QACpB,OAAO;UACL,cAAc,EAAE;YACd,QAAQ,EAAE;cACR,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO;cACtB,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU;cAC1B,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO;cACvB,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO;cACvB,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ;cACxB,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ;aACzB;WACF;SACF,CAAC;MACJ,KAAK,gBAAgB;QACnB,OAAO;UACL,cAAc,EAAE,EAAE;SACnB,CAAC;MACJ,KAAK,kBAAkB;QACrB,OAAO;UACL,eAAe,EAAE;YACf,SAAS,oBAAO,EAAE,CAAC,SAAS,CAAE;WAC/B;SACF,CAAC;MACJ,KAAK,iBAAiB;QACpB,OAAO;UACL,cAAc,EAAE;YACd,OAAO,EAAE,EAAE,CAAC,OAAO;WACpB;SACF,CAAC;MACJ,KAAK,MAAM;QACT,OAAO;UACL,gBAAgB,EAAE;YAChB,OAAO,EAAE,KAAK;WACf;SACF,CAAC;MACJ,KAAK,MAAM;QACT,OAAO;UACL,gBAAgB,EAAE;YAChB,OAAO,EAAE,IAAI;WACd;SACF,CAAC;MACJ,KAAK,QAAQ;QACX,OAAO;UACL,eAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;SACpC,CAAC;MACJ,KAAK,UAAU;QACb,OAAO;UACL,eAAe,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;SACrC,CAAC;MACJ,KAAK,gBAAgB;QACnB,OAAO;UACL,aAAa,EAAE,EAAE,OAAO,EAAE,MAAA,EAAE,CAAC,YAAY,mCAAI,IAAI,EAAE;SACpD,CAAC;MACJ,KAAK,eAAe;QAClB,OAAO;UACL,aAAa,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;SAClC,CAAC;MACJ,KAAK,iBAAiB;QACpB,OAAO;UACL,aAAa,EAAE,EAAE,OAAO,EAAE,MAAA,EAAE,CAAC,YAAY,mCAAI,IAAI,EAAE;SACpD,CAAC;MACJ,KAAK,gBAAgB;QACnB,OAAO;UACL,aAAa,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;SAClC,CAAC;MACJ;QACE,OAAO,EAAE,CAAC;KACb;GACF,CAAC,CAAC;AACL,CAAC;SAEe,0BAA0B,CACxC,QAAiC;EAEjC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO;IAC1B,QAAQ,OAAO;MACb,KAAK,QAAQ;QACX,OAAOF,0BAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,qBAAqB;WACnD,+BAA+B,CAAC;MACrC,KAAK,oBAAoB;QACvB,OAAOA,0BAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,qBAAqB;WACnD,0CAA0C,CAAC;MAChD,KAAK,WAAW;QACd,OAAOA,0BAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,qBAAqB;WACnD,kCAAkC,CAAC;MACxC,KAAK,YAAY;QACf,OAAOA,0BAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,qBAAqB;WACnD,mCAAmC,CAAC;MACzC,KAAK,YAAY;QACf,OAAOA,0BAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,qBAAqB;WACnD,kCAAkC,CAAC;MACxC,KAAK,eAAe;QAClB,OAAOA,0BAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,qBAAqB;WACnD,sCAAsC,CAAC;MAC5C;QACE,OAAOA,0BAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,qBAAqB;WACnD,gCAAgC,CAAC;KACvC;GACF,CAAC,CAAC;AACL;;AC3SA,MAAM,WAAW,GAAG,iBAAiB,CAAC;MAMzB,qBAAqB;EAChC,YAA2B,YAAiC;IAAjC,iBAAY,GAAZ,YAAY,CAAqB;GAAI;EAEzD,KAAK;IACV,OAAO,IAAI,CAAC,YAAY,CAAC;GAC1B;CACF;MAEY,aAAa;EAGjB,UAAU,CAAC,EAAU;IAC1B,OAAO,IAAI,qBAAqB,CAAC;MAC/B,KAAK,EAAE;QACL,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,EAAE;OACT;KACF,CAAC,CAAC;GACJ;EAEM,cAAc,CAAC,EAAU;IAC9B,OAAO,IAAI,qBAAqB,CAAC;MAC/B,KAAK,EAAE;QACL,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,EAAE;OACT;KACF,CAAC,CAAC;GACJ;EAEM,UAAU,CAAC,MAA+B;IAC/C,OAAO,IAAI,qBAAqB,CAAC;MAC/B,KAAK,EAAE;QACL,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,MAAM;OACb;KACF,CAAC,CAAC;GACJ;EAEM,eAAe,CACpB,WAAoC;IAEpC,OAAO,IAAI,qBAAqB,CAAC;MAC/B,KAAK,EAAE;QACL,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,WAAW;OAClB;KACF,CAAC,CAAC;GACJ;EAEM,KAAK;IACV,OAAO,IAAI,CAAC,YAAY,CAAC;GAC1B;CACF;AASD;;;;;;;;;;MAUsB,MAAM;EAC1B,YACY,MAAiB,EACjB,MAAc,EAChB,IAA6B,EAC3B,WAAoC,EACpC,WAAyB,EACzB,YAAiC;IALjC,WAAM,GAAN,MAAM,CAAW;IACjB,WAAM,GAAN,MAAM,CAAQ;IAChB,SAAI,GAAJ,IAAI,CAAyB;IAC3B,gBAAW,GAAX,WAAW,CAAyB;IACpC,gBAAW,GAAX,WAAW,CAAc;IACzB,iBAAY,GAAZ,YAAY,CAAqB;GACzC;EAEM,sBAAsB,CAC9B,WAAoC,EACpC,QAAgB,EAChB,UAA2B;IAE3B,MAAM,IAAI,GAAGG,oBAAO,CAAC,KAAK,CAAC,QAAQ,EAAEA,oBAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;IAEpE,MAAM,MAAM,GAAGC,wBAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAGD,oBAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAEhD,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;GAC5D;;;;;;;EAQM,iCAAiC,CACtC,WAAqC;IAErC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAGE,0CAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEtE,MAAM,iBAAiB,GAAGD,wBAAW,CAAC,MAAM,CAC1C,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,IAAI,CAAC,WAAW,CAChC,CAAC;IACF,MAAM,cAAc,GAAGD,oBAAO,CAAC,QAAQ,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IAErE,QACEA,oBAAO,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,GAAGA,oBAAO,CAAC,SAAS,CAAC,UAAU,CAAC,EACvE;GACH;;;;;;;;EASM,KAAK,CACV,aAA0E;IAE1E,IAAI,OAAO,aAAa,KAAK,UAAU,EAAE;MACvC,OAAO,IAAI,CAAC,kBAAkB,CAAC;QAC7B,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;OAC1C,CAAC,CAAC;KACJ;SAAM;MACL,OAAO,IAAI,CAAC,kBAAkB,CAC5B,aAAa,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC,KAAK,EAAE,CAC3C,CAAC;KACH;GACF;EAEM,OAAO;IACZ,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;GAChD;;;;;EAMM,MAAM,MAAM,CACjB,aAAmC;;IAEnC,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,aAAa,IAAI,IAAI,EAAE;MACtD,IAAI,CAAC,YAAY,GAAG;QAClB,KAAK,EAAE;UACL,IAAI,EAAE,QAAQ;UACd,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB;OACF,CAAC;KACH;IAED,IAAI;MACF,MAAM,MAAM,GAAGG,gBAAI,CAAC,MAAM,EAAE,CAAC;MAC7B,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;QAC7B,MAAM,OAAO,GAAG,mBAAmB,CACjC,MAAM,EACN,IAAI,CAAC,YAAY,EACjB,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,SAAS,CACzB,CAAC;QACF,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAE7D,OAAO,IAAI,kBAAkB,CAC3B,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,WAAW,EAChB;UACE,aAAa,EAAE,MAAM;UACrB,WAAW,EAAE,CAAA,MAAA,MAAA,aAAa,CAAC,KAAK,0CAAE,WAAW,0CAAE,GAAG,KAAI,SAAS;SAChE,EACD,CAAA,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,SAAS,0CAAE,YAAY,KAAI,IAAI;YAC1C,aAAa,CAAC,SAAS,CAAC,YAAY,GAAG,qBAAqB;YAC5D,SAAS,CACd,CAAC;OACH;WAAM;QACL,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;UACxB,MAAM,EAAEJ,2BAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;UACzC,kBAAkB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;SACtC,CAAC,CAAC;QAEH,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE;UAC3D,aAAa,EAAE,MAAM;SACtB,CAAC,CAAC;OACJ;KACF;IAAC,OAAO,CAAC,EAAE;MACV,OAAO,CAAC,IAAI,CAAC,gCAAgC,EAAE,CAAC,CAAC,CAAC;MAClD,MAAM,CAAC,CAAC;KACT;GACF;;;;;;;EAQM,gBAAgB,CACrB,cAAsB,EACtB,IAAqB;IAErB,OAAO,IAAI,CAAC,uBAAuB,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;GAC7E;;;;;;;;;;EAWM,OAAO,CAAC,QAAyB,EAAE,MAAuB;IAC/D,MAAM,MAAM,GAAGC,oBAAO,CAAC,SAAS,CAC9BA,oBAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAEA,oBAAO,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAC3D,CAAC;IACF,MAAM,cAAc,GAAGA,oBAAO,CAAC,SAAS,CACtCA,oBAAO,CAAC,KAAK,CAACA,oBAAO,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAC1D,CAAC;;;IAIF,MAAM,MAAM,GACVA,oBAAO,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC;QACjDA,oBAAO,CAAC,MAAM,CAAC,cAAc,CAAC;QAC9B,cAAc,CAAC;IACrB,MAAM,MAAM,GAAGA,oBAAO,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;QAC1C,MAAM;QACNA,oBAAO,CAAC,SAAS,CAACA,oBAAO,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAErD,MAAM,qBAAqB,GAAGA,oBAAO,CAAC,eAAe,CACnD,IAAI,CAAC,UAAU,EACfI,oBAAO,CAAC,YAAY,CAClBC,uBAAU,CAAC,aAAa,CAAC,MAAM,EAAEL,oBAAO,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAClE,CACF,CAAC;IACF,MAAM,SAAS,GAAGM,gBAAG,CAAC,MAAM,CAAC;MAC3B,MAAM,EAAE,QAAQ;MAChB,SAAS,EAAEN,oBAAO,CAAC,SAAS,CAAC,qBAAqB,CAAC;KACpD,CAAC,CAAC;IACH,MAAM,MAAM,GAAGM,gBAAG,CAAC,EAAE,CAAC,SAAS,EAAEN,oBAAO,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAErE,OAAO,IAAI,CAAC,MAAM,CAAC;MACjB,QAAQ;MACR,MAAM;MACN,EAAE,EAAE,MAAM;KACX,CAAC,CAAC;GACJ;;;;;;;;EASM,YAAY,CAAC,YAA0B;IAC5C,OAAO,IAAI,CAAC,MAAM,CAAC;MACjB,QAAQ,EAAE,YAAY,CAAC,QAAQ;MAC/B,UAAU,EAAEA,oBAAO,CAAC,QAAQ,CAACA,oBAAO,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,QAAQ,CAAC;MACrE,MAAM,EAAEA,oBAAO,CAAC,MAAM,EAAE;MACxB,EAAE,EAAE,YAAY,CAAC,EAAE;KACpB,CAAC,CAAC;GACJ;EAEO,cAAc,CAAC,OAAoB;IACzC,IAAI,OAAO,CAAC,WAAW,IAAI,IAAI,EAAE;MAC/B,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;KAC5D;SAAM,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE;MACjC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;KACjD;SAAM,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE;MACjC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;KACnD;SAAM,IAAI,OAAO,CAAC,cAAc,IAAI,IAAI,EAAE;MACzC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;KAC3D;SAAM;MACL,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;KAC7D;GACF;EAES,qBAAqB,CAC7B,MAA+B;IAE/B,OAAOO,+CAA6C,CAClD,IAAI,CAAC,WAAW,EAChB,MAAM,CACP,CAAC;GACH;CAyDF;MAEY,iBACX,SAAQ,MAAM;EAGd,YACE,MAAiB,EACjB,MAAc,EACN,eAAmD,EAC3D,WAAoC,EACpC,WAAyB,EACzB,YAAiC;IAEjC,KAAK,CACH,MAAM,EACN,MAAM,EACN,eAAe,EACf,WAAW,EACX,WAAW,EACX,YAAY,CACb,CAAC;IAZM,oBAAe,GAAf,eAAe,CAAoC;GAa5D;;;;;;;EAQM,MAAM,CAAC,KAAsB;IAClC,OAAO,IAAI,CAAC,MAAM,CAAC;MACjB,QAAQ,EAAEP,oBAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;MAC3C,MAAM,EAAEA,oBAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;KACxC,CAAC,CAAC;GACJ;EAEM,uBAAuB,CAC5B,cAAsB,EACtB,KAAsB,EACtB,IAAqB;IAErB,OAAO,IAAI,CAAC,MAAM,CAAC;MACjB,QAAQ,EAAEA,oBAAO,CAAC,eAAe,CAC/B,cAAc,EACd,IAAI,CAAC,QAAQ,EACb,IAAI,EACJ,KAAK,CACN;MACD,MAAM,EAAEA,oBAAO,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC;MACzE,EAAE,EAAEA,oBAAO,CAAC,eAAe,CACzB,cAAc,EACd,IAAI,CAAC,EAAE,EACP,IAAI,EACJA,oBAAO,CAAC,MAAM,EAAE,CACjB;KACF,CAAC,CAAC;GACJ;EAEM,gBAAgB,CAAC,WAAoC;;IAC1D,MAAM,MAAM,GACV,GAAG;MACHA,oBAAO,CAAC,SAAS,CACfA,oBAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAEC,wBAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CACnE,CAAC;;IAGJ,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAA,IAAI,CAAC,IAAI,mCAAI,EAAE,IAAI,WAAW,CAAC,CAAC;IAEvD,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE;MACrB,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;KACvB;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAE3C,OAAO,KAAK,CAAC,sBAAsB,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;GAC7E;EAEM,MAAM,CAAC,MAAmD;;IAC/D,MAAM,IAAI,GAAG,MAAA,MAAM,CAAC,IAAI,mCAAI,IAAI,CAAC,IAAI,CAAC;IACtC,OAAO,IAAI,iBAAiB,CAC1B,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,gDACN,IAAI,CAAC,eAAe,GAAK,MAAM,KAAE,IAAI,KAC1C,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,YAAY,CAClB,CAAC;GACH;EAEM,aAAa;;IAClB,OAAO,IAAIO,uCAAsB,CAC/B,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,WAAW,EAChB,MAAA,IAAI,CAAC,IAAI,mCAAI,EAAE,CAChB,CAAC;GACH;EAED,IAAW,UAAU;IACnB,OAAOR,oBAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;GACrD;;;;EAKD,IAAW,QAAQ;IACjB,yBAAY,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAG;GAC7C;;;;EAKD,IAAW,EAAE;IACX,yBAAY,IAAI,CAAC,eAAe,CAAC,EAAE,EAAG;GACvC;;;;EAKD,IAAW,MAAM;IACf,yBAAY,IAAI,CAAC,eAAe,CAAC,MAAM,EAAG;GAC3C;;;;EAKD,IAAW,IAAI;IACb,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;GAClC;;;;EAKD,IAAW,WAAW;IACpB,OAAO,IAAI,CAAC,MAAM,CAAC;GACpB;;;;EAKD,IAAW,IAAI;IACb,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAClE,OAAO,IAAI,CAAC;GACb;;;;EAKD,IAAW,GAAG;IACZ,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACjE,OAAO,GAAG,CAAC;GACZ;EAES,kBAAkB,CAC1B,YAAiC;IAEjC,OAAO,IAAI,iBAAiB,CAC1B,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,WAAW,EAChB,YAAY,CACb,CAAC;GACH;CACF;MAEY,kBACX,SAAQ,MAAM;EAGd,YACE,MAAiB,EACjB,MAAc,EACN,gBAAqD,EAC7D,WAAoC,EACpC,WAAyB,EACzB,YAAiC;IAEjC,KAAK,CACH,MAAM,EACN,MAAM,EACN,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,YAAY,CACb,CAAC;IAZM,qBAAgB,GAAhB,gBAAgB,CAAqC;GAa9D;;;;;;;EAQM,MAAM,CAAC,KAAsB;IAClC,OAAO,IAAI,CAAC,MAAM,CAAC;MACjB,MAAM,EAAEA,oBAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;KACxC,CAAC,CAAC;GACJ;EAEM,uBAAuB,CAC5B,cAAsB,EACtB,KAAsB,EACtB,IAAqB;IAErB,MAAM,aAAa,GAAGA,oBAAO,CAAC,eAAe,CAC3C,cAAc,EACd,IAAI,CAAC,MAAM,EACX,IAAI,EACJ,KAAK,CACN,CAAC;IACF,MAAM,eAAe,GAAGA,oBAAO,CAAC,eAAe,CAC7C,cAAc,EACd,IAAI,CAAC,QAAQ,EACb,IAAI,EACJ,KAAK,CACN,CAAC;IACF,MAAM,UAAU,GAAGS,oCAAmB,CACpCT,oBAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC,EAChDU,2BAAc,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CACxC,CAAC;IAEF,OAAO,IAAI,CAAC,MAAM,CAAC;MACjB,UAAU,EAAE,UAAU;MACtB,MAAM,EAAE,aAAa;MACrB,EAAE,EAAEV,oBAAO,CAAC,eAAe,CACzB,cAAc,EACd,IAAI,CAAC,EAAE,EACP,IAAI,EACJA,oBAAO,CAAC,MAAM,EAAE,CACjB;KACF,CAAC,CAAC;GACJ;EAEM,gBAAgB,CAAC,WAAoC;IAC1D,MAAM,cAAc,GAAGU,2BAAc,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAE1D,MAAM,MAAM,GAAG,KAAK,CAAC,sBAAsB,CACzC,WAAW,EACX,cAAc,CAAC,MAAM,EACrB,IAAI,CAAC,UAAU,CAChB,CAAC;IAEF,OAAO,IAAI,CAAC,MAAM,CAAC;MACjB,MAAM,EAAE,MAAM,CAAC,MAAM;MACrB,UAAU,EAAE,MAAM,CAAC,UAAU;MAC7B,SAAS,EAAE,cAAc,CAAC,MAAM,GAAG,CAAC;KACrC,CAAC,CAAC;GACJ;EAEM,MAAM,CAAC,MAAwC;IACpD,OAAO,IAAI,kBAAkB,CAC3B,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,kCACN,IAAI,CAAC,gBAAgB,GAAK,MAAM,GACrC,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,YAAY,CAClB,CAAC;GACH;EAEM,aAAa;IAClB,OAAO,IAAIC,wCAAuB,CAChCF,oCAAmB,CACjB,IAAI,CAAC,UAAU,EACfC,2BAAc,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CACxC,EACD,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,SAAS,CACf,CAAC;GACH;EAED,IAAW,UAAU;IACnB,yBAAY,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAG;GAChD;EAED,IAAW,QAAQ;IACjB,OAAOV,oBAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAEA,oBAAO,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;GAClE;;;;EAKD,IAAW,EAAE;IACX,yBAAY,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAG;GACxC;;;;EAKD,IAAW,MAAM;IACf,yBAAY,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAG;GAC5C;;;;EAKD,IAAW,SAAS;IAClB,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;GACxC;;;;EAKD,IAAW,WAAW;IACpB,OAAO,IAAI,CAAC,MAAM,CAAC;GACpB;;;;EAKD,IAAW,IAAI;IACb,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACnE,OAAO,IAAI,CAAC;GACb;;;;EAKD,IAAW,GAAG;IACZ,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAClE,OAAO,GAAG,CAAC;GACZ;EAES,kBAAkB,CAC1B,YAAiC;IAEjC,OAAO,IAAI,kBAAkB,CAC3B,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,WAAW,EAChB,YAAY,CACb,CAAC;GACH;;;AChsBH;;;MAGa,SAAS;EACpB,YACU,MAAiB,EACjB,kBAAsC;IADtC,WAAM,GAAN,MAAM,CAAW;IACjB,uBAAkB,GAAlB,kBAAkB,CAAoB;GAC5C;;;;;;;EAQG,MAAM,QAAQ,CACnB,KAAkB,EAClB,OAA0B;IAE1B,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;IACxC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CACpC;MACE,KAAK,EAAEY,kBAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,CAAC,KAAI,CAAC,EAAE,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,CAAC,KAAI,CAAC,CAAC;MACvD,eAAe,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,eAAe;KAC1C,EACD,IAAI,CACL,CAAC;IACF,OAAO,GAAG,CAAC,QAAQ,IAAI,SAAS,CAAC;GAClC;;;AC3CH;;;MAGa,cAAc;EACzB,YACU,MAAiB,EACjB,IAAqC;IADrC,WAAM,GAAN,MAAM,CAAW;IACjB,SAAI,GAAJ,IAAI,CAAiC;GAC3C;;;;;;EAOG,MAAM,MAAM,CACjB,eAAgD;IAIhD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,CACjD;MACE,eAAe,EAAE;QACf,aAAa,EAAE,eAAe,CAAC,aAAa;QAC5C,cAAc,EAAE,eAAe,CAAC,cAAc;QAC9C,SAAS,EACP,CAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,SAAS,KAAI,IAAI;YAC9B,EAAE,KAAK,EAAE,eAAe,CAAC,SAAS,EAAE;YACpC,IAAI;OACX;KACF,EACD,IAAI,CACL,CAAC;IAEF,OAAO,GAAG,CAAC,qBAAqB,IAAI,SAAS,CAAC;GAC/C;EAEM,OAAO;IACZ,OAAO,IAAI,CAAC,IAAI,CAAC;GAClB;;;AC0CH;;;MAGa,qBAAqB;EAGhC,YAA2B,aAA8B,EAAE;IAAhC,eAAU,GAAV,UAAU,CAAsB;GAAI;;;;;EAMxD,KAAK;IACV,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;GACjC;EAEM,gBAAgB,CAAC,QAAuB;IAC7C,OAAO,IAAI,qBAAqB,CAC9B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,CAAC,CAChE,CAAC;GACH;EAEM,IAAI;IACT,OAAO,IAAI,qBAAqB,CAC9B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAC3C,CAAC;GACH;EAEM,IAAI;IACT,OAAO,IAAI,qBAAqB,CAC9B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAC3C,CAAC;GACH;EAEM,MAAM;IACX,OAAO,IAAI,qBAAqB,CAC9B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAC7C,CAAC;GACH;EAEM,QAAQ;IACb,OAAO,IAAI,qBAAqB,CAC9B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAC/C,CAAC;GACH;EAEM,sBAAsB;IAC3B,OAAO,IAAI,qBAAqB,CAC9B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC,CACrD,CAAC;GACH;EAEM,SAAS,CACd,MAA2C;IAE3C,OAAO,IAAI,qBAAqB,CAC9B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAC1E,CAAC;GACH;EAEM,eAAe,CAAC,OAAO,GAAG,IAAI;IACnC,OAAO,IAAI,qBAAqB,CAC9B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,CAAC,CAC/D,CAAC;GACH;EAEM,UAAU,CAAC,YAAsB;IACtC,OAAO,IAAI,qBAAqB,CAC9B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,YAAY,EAAE,CAAC,CAAC,CACnE,CAAC;GACH;EAEM,YAAY;IACjB,OAAO,IAAI,qBAAqB,CAC9B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC,CACpD,CAAC;GACH;EAEM,UAAU,CAAC,YAAsB;IACtC,OAAO,IAAI,qBAAqB,CAC9B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAC,CAAC,CACpE,CAAC;GACH;EAEM,YAAY;IACjB,OAAO,IAAI,qBAAqB,CAC9B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC,CACrD,CAAC;GACH;;;ACnGH;;;;AAIA,MAAe,aAAa;EAE1B,YAAmB,QAAiB;IAClC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;GAC1B;EAEM,KAAK;IACV,IAAI,IAAI,CAAC,QAAQ,EAAE;MACjB,OAAO;QACL,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,IAAI,CAAC,sBAAsB,EAAE;OACrC,CAAC;KACH;SAAM;MACL,OAAO,IAAI,CAAC,sBAAsB,EAAE,CAAC;KACtC;GACF;CAGF;MAaY,SAAS;EACpB,YAA2B,WAAoB,KAAK;IAAzB,aAAQ,GAAR,QAAQ,CAAiB;GAAI;EACjD,GAAG;IACR,OAAO,IAAI,QAAQ,EAAE,CAAC;GACvB;EAEM,GAAG;IACR,OAAO,IAAI,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;GACrC;EAEM,WAAW,CAAC,GAAa;IAC9B,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;GACrD;EAEM,eAAe,CAAC,GAAa;IAClC,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;GACzD;EAEM,UAAU,CAAC,EAAU;IAC1B,OAAO,IAAI,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;GACvE;EAEM,cAAc,CAAC,EAAU;IAC9B,OAAO,IAAI,WAAW,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;GAC3E;EAEM,kBAAkB,CAAC,KAAqB;IAC7C,OAAO,IAAI,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;GACtD;EAEM,YAAY,CACjB,MAAc,EACd,IAAc,EACd,UAAmB;IAEnB,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;GACnE;EAEM,YAAY;IACjB,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;GAC5C;EAEM,SAAS,CAAC,KAAkB;IACjC,OAAO,IAAI,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;GAC7C;EAEM,sBAAsB,CAC3B,SAA8B,EAC9B,SAAmB;IAEnB,OAAO,IAAI,uBAAuB,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;GACzE;CACF;MAEY,QAAS,SAAQ,SAAS;EACrC,YAAmB,QAAiB;IAClC,KAAK,CAAC,QAAQ,CAAC,CAAC;GACjB;CACF;MAEY,QAAS,SAAQ,aAAa;EACzC,YAAmB,QAAQ,GAAG,KAAK;IACjC,KAAK,CAAC,QAAQ,CAAC,CAAC;GACjB;EAEM,sBAAsB;IAC3B,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;GACxB;CACF;MAEY,mBAAoB,SAAQ,aAAa;EACpD,YAA2B,KAAqB,EAAE,QAAiB;IACjE,KAAK,CAAC,QAAQ,CAAC,CAAC;IADS,UAAK,GAAL,KAAK,CAAgB;GAE/C;EAEM,sBAAsB;IAC3B,OAAO;MACL,IAAI,EAAE,kBAAkB;MACxB,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC;GACH;CACF;MAEY,aAAc,SAAQ,aAAa;EAC9C,YACU,MAAc,EACd,IAAc,EACd,UAAmB,EAC3B,QAAiB;IAEjB,KAAK,CAAC,QAAQ,CAAC,CAAC;IALR,WAAM,GAAN,MAAM,CAAQ;IACd,SAAI,GAAJ,IAAI,CAAU;IACd,eAAU,GAAV,UAAU,CAAS;GAI5B;EAEM,sBAAsB;IAC3B,OAAO;MACL,IAAI,EAAE,UAAU;MAChB,MAAM,EAAE,IAAI,CAAC,MAAM;MACnB,IAAI,EAAE,IAAI,CAAC,IAAI;MACf,UAAU,EAAE,IAAI,CAAC,UAAU;KAC5B,CAAC;GACH;CACF;MAEY,gBAAiB,SAAQ,aAAa;EACjD,YAAmB,QAAiB;IAClC,KAAK,CAAC,QAAQ,CAAC,CAAC;GACjB;EAEM,sBAAsB;IAC3B,OAAO;MACL,IAAI,EAAE,cAAc;KACrB,CAAC;GACH;CACF;MAEY,UAAW,SAAQ,aAAa;EAC3C,YAA2B,KAAkB,EAAE,QAAiB;IAC9D,KAAK,CAAC,QAAQ,CAAC,CAAC;IADS,UAAK,GAAL,KAAK,CAAa;GAE5C;EAEM,sBAAsB;IAC3B,OAAO;MACL,IAAI,EAAE,OAAO;MACb,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC;GACH;CACF;MAEY,uBAAwB,SAAQ,aAAa;EACxD,YACU,SAA8B,EACtC,QAAiB,EACT,SAAmB;IAE3B,KAAK,CAAC,QAAQ,CAAC,CAAC;IAJR,cAAS,GAAT,SAAS,CAAqB;IAE9B,cAAS,GAAT,SAAS,CAAU;GAG5B;EAEM,sBAAsB;IAC3B,OAAO;MACL,IAAI,EAAE,qBAAqB;MAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;MACzB,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS;KAC5B,CAAC;GACH;CACF;MAEY,SAAU,SAAQ,aAAa;EAC1C,YACU,GAAa,EACb,IAA+B,EACvC,QAAiB;IAEjB,KAAK,CAAC,QAAQ,CAAC,CAAC;IAJR,QAAG,GAAH,GAAG,CAAU;IACb,SAAI,GAAJ,IAAI,CAA2B;GAIxC;EAEM,sBAAsB;IAC3B,OAAO;MACL,IAAI,EAAE,IAAI;MACV,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;QAC3B,OAAO;UACL,IAAI,EAAE,IAAI,CAAC,IAAI;UACf,KAAK,EAAE,EAAE;SACV,CAAC;OACH,CAAC;KACH,CAAC;GACH;CACF;AAED,MAAM,WAAY,SAAQ,aAAa;EACrC,YAA2B,KAAsB,EAAE,QAAiB;IAClE,KAAK,CAAC,QAAQ,CAAC,CAAC;IADS,UAAK,GAAL,KAAK,CAAiB;GAEhD;EAEM,sBAAsB;IAC3B,yBAAY,IAAI,CAAC,KAAK,EAAG;GAC1B;EAEM,GAAG;IACR,OAAO,IAAI,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;GAClD;EAEM,EAAE;IACP,OAAO,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;GACjD;CACF;MAEY,OAAQ,SAAQ,aAAa;EACxC,YACU,WAA8B,EACtC,QAAiB;IAEjB,KAAK,CAAC,QAAQ,CAAC,CAAC;IAHR,gBAAW,GAAX,WAAW,CAAmB;GAIvC;EAEM,sBAAsB;IAC3B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;GAC3D;EAEM,UAAU,CAAC,EAAU;IAC1B,OAAO,IAAI,OAAO,CAChB,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EACrD,IAAI,CAAC,QAAQ,CACd,CAAC;GACH;EAEM,cAAc,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAChB,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EACzD,IAAI,CAAC,QAAQ,CACd,CAAC;GACH;EAEM,EAAE;IACP,OAAO,IAAI,CAAC;GACb;CACF;MAEY,QAAS,SAAQ,aAAa;EACzC,YACU,WAA8B,EACtC,QAAiB;IAEjB,KAAK,CAAC,QAAQ,CAAC,CAAC;IAHR,gBAAW,GAAX,WAAW,CAAmB;GAIvC;EAEM,sBAAsB;IAC3B,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;GAC5D;EAEM,UAAU,CAAC,EAAU;IAC1B,OAAO,IAAI,QAAQ,CACjB,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EACrD,IAAI,CAAC,QAAQ,CACd,CAAC;GACH;EAEM,cAAc,CAAC,EAAU;IAC9B,OAAO,IAAI,QAAQ,CACjB,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EACzD,IAAI,CAAC,QAAQ,CACd,CAAC;GACH;EAEM,GAAG;IACR,OAAO,IAAI,CAAC;GACb;CACF;MAEY,sBAAsB;EAC1B,KAAK,CACV,KAAsC;IAEtC,MAAM,UAAU,GAAoB,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAEnE,OAAO,IAAI,0BAA0B,CAAC,UAAU,CAAC,CAAC;GACnD;;;AC1UH;;;;;MAKa,0BAA0B;EAKrC,YACU,KAAsB,EAC9B,YAAoC;IAD5B,UAAK,GAAL,KAAK,CAAiB;IAG9B,IAAI,CAAC,OAAO;MACV,YAAY,IAAI,IAAI,GAAG,YAAY,GAAG,IAAI,qBAAqB,EAAE,CAAC;GACrE;EAEM,gBAAgB,CACrB,KAA6B;IAE7B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;MAC7B,OAAO,IAAI,0BAA0B,CACnC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAC9C,CAAC;KACH;SAAM;MACL,OAAO,IAAI,0BAA0B,CACnC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CACrC,CAAC;KACH;GACF;EAEM,IAAI;IACT,OAAO,IAAI,0BAA0B,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;GACxE;EAEM,IAAI;IACT,OAAO,IAAI,0BAA0B,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;GACxE;EAEM,MAAM;IACX,OAAO,IAAI,0BAA0B,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;GAC1E;EAEM,QAAQ;IACb,OAAO,IAAI,0BAA0B,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;GAC5E;EAEM,sBAAsB;IAC3B,OAAO,IAAI,0BAA0B,CACnC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CACtC,CAAC;GACH;EAEM,SAAS,CACd,MAAsD;IAEtD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;MACzB,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,EAAE;QACxB,MAAM,IAAIC,2BAAoB,CAC5B,uDAAuD,CACxD,CAAC;OACH;MAED,OAAO,IAAI,0BAA0B,CACnC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QACrB,EAAE,EAAE;UACF,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;UACZ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;UACZ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;UACZ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;SACb;QACD,EAAE,EAAE;UACF,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;UACZ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;UACZ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;UACZ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;SACb;QACD,EAAE,EAAE;UACF,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;UACZ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;UACZ,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;UACb,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;SACd;QACD,EAAE,EAAE;UACF,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;UACb,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;UACb,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;UACb,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;SACd;OACF,CAAC,CACH,CAAC;KACH;SAAM;MACL,OAAO,IAAI,0BAA0B,CACnC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAC/B,CAAC;KACH;GACF;EAEM,eAAe,CAAC,OAAO,GAAG,IAAI;IACnC,OAAO,IAAI,0BAA0B,CACnC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CACtC,CAAC;GACH;EAEM,UAAU,CAAC,YAAsB;IACtC,OAAO,IAAI,0BAA0B,CACnC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CACtC,CAAC;GACH;EAEM,YAAY;IACjB,OAAO,IAAI,0BAA0B,CACnC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAC5B,CAAC;GACH;EAEM,UAAU,CAAC,YAAsB;IACtC,OAAO,IAAI,0BAA0B,CACnC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CACtC,CAAC;GACH;EAEM,YAAY;IACjB,OAAO,IAAI,0BAA0B,CACnC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAC5B,CAAC;GACH;EAEM,KAAK;IACV,OAAO;MACL,KAAK,EAAE,IAAI,CAAC,KAAK;MACjB,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;KACjC,CAAC;GACH;CACF;MAOY,sBAAsB;EACjC,YACU,WAAsB,EACtB,MAAiB,EACjB,UAAiC,EACjC,eAAiC;IAHjC,gBAAW,GAAX,WAAW,CAAW;IACtB,WAAM,GAAN,MAAM,CAAW;IACjB,eAAU,GAAV,UAAU,CAAuB;IACjC,oBAAe,GAAf,eAAe,CAAkB;GACvC;EAEG,MAAM,OAAO,CAClB,gBAAwC;IAExC,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,KAC/C,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,EAAE;MAC3C,UAAU,EAAE,IAAI,CAAC,UAAU;KAC5B,CAAC,CACH,CAAC;IACF,MAAM,OAAO,GAAG;MACd,WAAW,EAAE;QACX,GAAG,EAAE,IAAI,CAAC,WAAW;OACtB;MACD,UAAU,EAAE,YAAY;MACxB,qBAAqB,EACnB,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,qBAAqB,KAAI,IAAI;UAC3C;UACE,KAAK,EAAE,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,qBAAqB;SAC/C;UACD,SAAS;KAChB,CAAC;IAEF,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;GAClD;CACF;AAmBD;;;;;;MAMa,KAAK;EAChB,YACU,MAAiB,EACjB,KAAY,EACZ,WAAyB,EACzB,kBAAsC,EACtC,UAAiC,EACzB,OAAkB,EAClB,WAAsB;IAN9B,WAAM,GAAN,MAAM,CAAW;IACjB,UAAK,GAAL,KAAK,CAAO;IACZ,gBAAW,GAAX,WAAW,CAAc;IACzB,uBAAkB,GAAlB,kBAAkB,CAAoB;IACtC,eAAU,GAAV,UAAU,CAAuB;IACzB,YAAO,GAAP,OAAO,CAAW;IAClB,gBAAW,GAAX,WAAW,CAAW;GACpC;;;;EAKG,MAAM,mBAAmB,CAC9B,gBAEqD,EACrD,OAA8B,EAAE;IAEhC,MAAM,SAAS,GAAG,6BAA6B,CAAC,gBAAgB,CAAC,CAAC;IAElE,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,iCAEpC,SAAS,KACZ,kBAAkB,EAAE,IAAI,CAAC,qBAAqB;UAC1C,EAAE,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE;UACrC,SAAS,KAEf,IAAI,CACL,CAAC;GACH;;;;EAKM,MAAM,0BAA0B,CACrC,gBAEqD,EACrD,eAAwC,EACxC,OAA8B,EAAE;IAEhC,MAAM,SAAS,GAAG,6BAA6B,CAAC,gBAAgB,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,0BAA0B,CAAC,eAAe,CAAC,CAAC;IAE/D,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,iCAEpC,SAAS,KACZ,kBAAkB,EAAE,IAAI,CAAC,qBAAqB;UAC1C,EAAE,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE;UACrC,SAAS,EACb,2BAA2B,EAAE,UAAU,KAEzC,IAAI,CACL,CAAC;GACH;;;;EAKM,MAAM,KAAK,CAChB,OAAyB,EAAE;IAE3B,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CACrC;MACE,aAAa,EAAE,IAAI,CAAC,aAAa;MACjC,kBAAkB,EAAE,IAAI,CAAC,qBAAqB;UAC1C,EAAE,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE;UACrC,SAAS;KACd,EACD,IAAI,CACL,CAAC;GACH;;;;;;EAOM,KAAK,CACV,UAAuE;IAEvE,MAAM,eAAe,GAAG,UAAU,CAAC,IAAI,sBAAsB,EAAE,CAAC,CAAC;IAEjE,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;QACtC,eAAe;QACf,CAAC,eAAe,CAAC,CAAC;IACtB,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAC9B,CAAC,GAAG,EAAE,OAAmC,KAAK,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EACzE,EAAsB,CACvB,CAAC;IACF,OAAO,IAAI,sBAAsB,CAC/B,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,UAAU,EACf,aAAa,CACd,CAAC;GACH;;;;EAKM,MAAM;IACX,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;IAE7B,IAAI,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE;MACjC,OAAO,IAAI,kBAAkB,CAC3B,IAAI,CAAC,MAAM,EACXC,uBAAU,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EACvC;QACE,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;QACnC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;QAC3B,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;QACnB,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS;OAClC,EACD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAC5B,IAAI,CAAC,WAAW,CACjB,CAAC;KACH;SAAM,IAAI,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE;MACvC,OAAO,IAAI,iBAAiB,CAC1B,IAAI,CAAC,MAAM,EACXA,uBAAU,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EACvC;QACE,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ;QAC/B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;QAC3B,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;QACnB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;OACxB,EACD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAC5B,IAAI,CAAC,WAAW,CACjB,CAAC;KACH;SAAM;MACL,MAAM,IAAIC,yBAAkB,CAC1B,sEAAsE,CACvE,CAAC;KACH;GACF;EAEM,WAAW;IAChB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;GACrC;;;;EAKM,eAAe;IACpB,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;GACvE;;;;EAKM,SAAS;IACd,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;GAC5D;;;;EAKM,QAAQ;IACb,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;GAC9B;;;;EAKM,KAAK;IACV,OAAO,IAAI,CAAC,kBAAkB,EAAE,IAAIH,kBAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;GACxD;;;;;;;;;","names":["Color","Uri","InvalidResourceUrnError","Async","SceneViewStateIdentifier.isSceneViewStateId","SceneViewStateIdentifier.isSceneViewStateSuppliedId","vertexvis","toProtoDuration","FrameCamera.toProtobuf","Vector3","BoundingBox","withPositionAndViewVector","UUID","Matrix4","Quaternion","Ray","ClippingPlanes.fromBoundingBoxAndLookAtCamera","FramePerspectiveCamera","constrainViewVector","BoundingSphere","FrameOrthographicCamera","Point","InvalidArgumentError","Dimensions","InvalidCameraError"],"sources":["./src/lib/scenes/colorMaterial.ts","./src/lib/types/loadableResource.ts","./src/lib/types/sceneViewStateIdentifier.ts","./src/lib/types/synchronizedClock.ts","./src/lib/stream/dispatcher.ts","./src/lib/scenes/cameraRenderResult.ts","./src/lib/scenes/mapper.ts","./src/lib/scenes/camera.ts","./src/lib/scenes/raycaster.ts","./src/lib/scenes/crossSectioner.ts","./src/lib/scenes/operations.ts","./src/lib/scenes/queries.ts","./src/lib/scenes/scene.ts"],"sourcesContent":["import { Color } from '@vertexvis/utils';\n\n/**\n * The `ColorMaterial` interface is here.\n */\nexport interface ColorMaterial {\n opacity: number;\n glossiness: number;\n diffuse: Color.Color;\n ambient: Color.Color;\n specular: Color.Color;\n emissive: Color.Color;\n}\n\nexport const defaultColor: ColorMaterial = {\n opacity: 255,\n glossiness: 4,\n diffuse: {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n },\n ambient: {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n },\n\n specular: {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n },\n emissive: {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n },\n};\n\n/**\n * This helper creats an rgb value color\n * @param hex\n * @param opacity\n */\nexport const create = (\n r: number,\n g: number,\n b: number,\n opacity?: number\n): ColorMaterial => {\n return {\n ...defaultColor,\n opacity: opacity ?? defaultColor.opacity,\n diffuse: {\n r,\n g,\n b,\n a: 0,\n },\n };\n};\n\n/**\n * This helper converts a hex string to a ColorMaterial object\n * @param hex\n * @param opacity\n */\nexport const fromHex = (hex: string, opacity?: number): ColorMaterial => {\n const color = Color.fromHexString(hex);\n\n return {\n ...defaultColor,\n opacity: opacity ?? defaultColor.opacity,\n diffuse: color != null ? { ...color } : { ...defaultColor.diffuse },\n };\n};\n","import { Uri } from '@vertexvis/utils';\n\nimport { InvalidResourceUrnError } from '../errors';\n\ninterface StreamKeyResource {\n type: 'stream-key';\n id: string;\n}\n\nexport type LoadableResource = StreamKeyResource;\n\nexport interface Resource {\n resource: LoadableResource;\n subResource?: PathResource;\n queries: QueryValue[];\n}\n\nexport function fromUrn(urn: string): Resource {\n const uri = Uri.parse(urn);\n\n if (uri.scheme !== 'urn' || uri.path == null) {\n throw new Error('Invalid URN. Expected URN scheme.');\n }\n\n const [nid, resourceType, resourceId, ...subResourcePath] =\n uri.path.split(/[:/]/);\n\n if (nid !== 'vertexvis' && nid !== 'vertex') {\n throw new Error('Invalid URN. Expected URN to be vertex namespace');\n }\n\n if (nid === 'vertexvis') {\n console.warn(\n \"vertexvis namespace is deprecated. Use 'vertex' for the namespace urn instead\"\n );\n }\n\n switch (resourceType) {\n case 'stream-key':\n const queries = fromQuery(uri.query);\n const subResource =\n fromSubResourcePath(subResourcePath.join('/')) ??\n (queries.find((q) => q.type === 'scene-view-state') as\n | SceneViewStateResource\n | undefined);\n\n return {\n resource: { type: 'stream-key', id: resourceId },\n subResource,\n queries: queries.filter((q) => q.type !== 'scene-view-state'),\n };\n default:\n throw new InvalidResourceUrnError(\n `Invalid URN. Unknown resource type ${resourceType}`\n );\n }\n}\n\nexport interface SceneViewStateResource {\n type: 'scene-view-state';\n id?: string;\n}\n\nexport type PathResource = SceneViewStateResource;\n\nfunction fromSubResourcePath(path?: string): PathResource | undefined {\n if (path != null) {\n const [subResourceType, subResourceId] = path.split('/');\n\n switch (subResourceType) {\n case 'scene-view-states':\n return {\n type: 'scene-view-state',\n id: subResourceId,\n };\n default:\n return undefined;\n }\n }\n}\n\nexport interface SuppliedIdQueryValue {\n type: 'supplied-id';\n id: string;\n}\n\nexport type QueryValue = SceneViewStateResource | SuppliedIdQueryValue;\n\nfunction fromQuery(query?: string): QueryValue[] {\n if (query != null) {\n return query.split('&').map((queryFragment) => {\n const [resourceType, resourceId] = queryFragment.split('=');\n\n switch (resourceType) {\n case 'supplied-id':\n return { type: 'supplied-id', id: resourceId };\n case 'scene-view-state':\n return { type: 'scene-view-state', id: resourceId };\n default:\n throw new Error('Invalid URN. Unknown query value type');\n }\n });\n } else {\n return [];\n }\n}\n","import { UUID } from '@vertexvis/utils';\n\nexport interface SceneViewStateId {\n id: UUID.UUID;\n}\n\nexport interface SceneViewStateSuppliedId {\n suppliedId: string;\n}\n\n/**\n * An object describing an ID for the scene view state. Can either be an\n * object containing the ID generated on creation, or an object containing\n * a supplied id provided during creation.\n */\nexport type SceneViewStateIdentifier =\n | SceneViewStateId\n | SceneViewStateSuppliedId;\n\nexport function isSceneViewStateId(\n identifier: SceneViewStateIdentifier\n): identifier is SceneViewStateId {\n return (identifier as SceneViewStateId).id != null;\n}\n\nexport function isSceneViewStateSuppliedId(\n identifier: SceneViewStateIdentifier\n): identifier is SceneViewStateSuppliedId {\n return (identifier as SceneViewStateSuppliedId).suppliedId != null;\n}\n","type Milliseconds = number;\n\n/**\n * A `SynchronizedClock` allows for approximating the time on a remote machine.\n *\n * During initialization, a known time of the remote host must be supplied. Once\n * the remote time is known, this class can approximate the time on the remote\n * machine from a date or duration.\n *\n * @example\n * ```\n * const knownRemoteTime = await getRemoteTime();\n * const clock = new SynchronizedClock(knownRemoteTime);\n *\n * const localDate = new Date();\n * const serverTime = clock.remoteTime(localDate);\n *\n * const remoteDate = await getRemoteTime();\n * const localTime = clock.localTime(remoteDate);\n *\n * const currentRemoteTime = clock.remoteNow();\n * ```\n */\nexport class SynchronizedClock {\n public constructor(\n public readonly knownRemoteTime: Date,\n public readonly knownLocalTime = new Date()\n ) {}\n\n /**\n * Computes an offset duration from when this clock was instantiated.\n */\n public localOffset(): Milliseconds {\n return this.duration(this.knownLocalTime, this.localNow());\n }\n\n /**\n * Approximates the local time from a timestamp originating from the remote\n * machine.\n *\n * @param remoteTime A remote timestamp.\n */\n public localTime(remoteTime: Date): Date;\n\n /**\n * Approximates the local from an offset duration originating from the remote\n * machine's last known time.\n *\n * @param remoteDurationInMs A remote duration, in milliseconds.\n */\n public localTime(remoteDurationInMs: Milliseconds): Date;\n\n /**\n * Approximates the local time from a remote timestamp or duration.\n *\n * @param remoteTimeOrDurationInMs A remote timestamp or duration.\n */\n public localTime(remoteTimeOrDurationInMs: Milliseconds | Date): Date {\n const remoteTime =\n typeof remoteTimeOrDurationInMs === 'number'\n ? new Date(this.knownLocalTime.getTime() + remoteTimeOrDurationInMs)\n : remoteTimeOrDurationInMs;\n const duration = this.duration(this.knownRemoteTime, remoteTime);\n return this.addDuration(this.knownLocalTime, duration);\n }\n\n /**\n * Approximates an offset duration on the remote machine.\n *\n * @param localTime A local timestamp. Defaults to the current local time.\n */\n public remoteOffset(localTime: Date = new Date()): Milliseconds {\n return this.duration(\n this.remoteTime(this.knownLocalTime),\n this.remoteTime(localTime)\n );\n }\n\n /**\n * Approximates the current time on the remote machine.\n */\n public remoteNow(): Date {\n return this.remoteTime(this.localNow());\n }\n\n /**\n * Approximates the remote time from a local timestamp.\n *\n * @param localTime A local timestamp.\n */\n public remoteTime(localTime: Date): Date;\n\n /**\n * Approximates the remote time from a local offset duration.\n *\n * @param localDurationInMs A local offset, in milliseconds.\n * @see #localOffset\n */\n public remoteTime(localDurationInMs: Milliseconds): Date;\n\n /**\n * Approximates the remote time from either a local timestamp or duration.\n *\n * @param localTimeOrDurationInMs A local timestamp or duration.\n */\n public remoteTime(localTimeOrDurationInMs: Milliseconds | Date): Date {\n const localTime =\n typeof localTimeOrDurationInMs === 'number'\n ? new Date(this.knownLocalTime.getTime() + localTimeOrDurationInMs)\n : localTimeOrDurationInMs;\n const duration = this.duration(this.knownLocalTime, localTime);\n return this.addDuration(this.knownRemoteTime, duration);\n }\n\n private addDuration(start: Date, duration: Milliseconds): Date {\n return new Date(start.getTime() + duration);\n }\n\n private duration(start: Date, end: Date): Milliseconds {\n return end.getTime() - start.getTime();\n }\n\n private localNow(): Date {\n return new Date(Date.now());\n }\n}\n","import { vertexvis } from '@vertexvis/frame-streaming-protos';\nimport { StreamApi } from '@vertexvis/stream-api';\nimport { Async, Disposable, Listener } from '@vertexvis/utils';\n\nexport const DEFAULT_TIMEOUT_IN_MS = 1000 * 10;\n\nexport class StreamApiEventDispatcher<T> {\n private listeners: Array<Listener<T>> = [];\n private eventDisposable?: Disposable;\n private requestDisposable?: Disposable;\n\n public constructor(\n private stream: StreamApi,\n private predicate: (\n msg: vertexvis.protobuf.stream.IStreamMessage\n ) => boolean,\n private transform: (\n msg: vertexvis.protobuf.stream.IStreamMessage\n ) => T | undefined,\n private timeout: number = DEFAULT_TIMEOUT_IN_MS\n ) {\n this.handleMessage = this.handleMessage.bind(this);\n }\n\n public on(listener: Listener<T>): void {\n this.listeners = [...this.listeners, listener];\n if (this.eventDisposable == null || this.requestDisposable == null) {\n this.addListeners();\n }\n }\n\n public off(listener: Listener<T>): void {\n this.listeners = this.listeners.filter((l) => l !== listener);\n if (this.listeners.length === 0) {\n this.removeListeners();\n }\n }\n\n public once(): Promise<T> {\n let handler: (data: T) => void;\n return Async.timeout(\n this.timeout,\n new Promise<T>((resolve) => {\n handler = (data: T) => {\n resolve(data);\n this.off(handler);\n };\n\n this.on(handler);\n })\n ).finally(() => {\n this.off(handler);\n });\n }\n\n private handleMessage(msg: vertexvis.protobuf.stream.IStreamMessage): void {\n if (this.predicate(msg)) {\n const transformed = this.transform(msg);\n\n if (transformed != null) {\n this.listeners.forEach((l) => l(transformed));\n }\n }\n }\n\n private addListeners(): void {\n this.eventDisposable = this.stream.onEvent(this.handleMessage);\n this.requestDisposable = this.stream.onRequest(this.handleMessage);\n }\n\n private removeListeners(): void {\n this.eventDisposable?.dispose();\n this.requestDisposable?.dispose();\n }\n}\n","import { StreamApi } from '@vertexvis/stream-api';\n\nimport type { FrameDecoder } from '../mappers';\nimport { StreamApiEventDispatcher } from '../stream/dispatcher';\nimport { Result } from '../stream/result';\nimport { Frame } from '../types';\n\nexport interface RenderResultIds {\n animationId?: string;\n correlationId?: string;\n}\n\nexport class CameraRenderResult implements Result {\n public data = undefined;\n public onAnimationCompleted: StreamApiEventDispatcher<string>;\n public onFrameReceived: StreamApiEventDispatcher<Frame>;\n\n public constructor(\n stream: StreamApi,\n decodeFrame: FrameDecoder,\n { animationId, correlationId }: RenderResultIds,\n timeout?: number\n ) {\n this.onAnimationCompleted = new StreamApiEventDispatcher(\n stream,\n (msg) => msg.event?.animationCompleted?.animationId?.hex === animationId,\n (msg) => msg.event?.animationCompleted?.animationId?.hex || undefined,\n timeout\n );\n this.onFrameReceived = new StreamApiEventDispatcher<Frame>(\n stream,\n (msg) =>\n !!msg.request?.drawFrame?.frameCorrelationIds?.some(\n (id) => id === correlationId\n ),\n (msg) =>\n msg.request?.drawFrame != null\n ? decodeFrame(msg.request.drawFrame)\n : undefined,\n timeout\n );\n }\n}\n","import { vertexvis } from '@vertexvis/frame-streaming-protos';\nimport { Dimensions } from '@vertexvis/geometry';\nimport { toProtoDuration } from '@vertexvis/stream-api';\nimport { UUID } from '@vertexvis/utils';\n\nimport {\n Animation,\n FlyTo,\n FrameCamera,\n SceneViewStateIdentifier,\n} from '../types';\nimport { ItemOperation } from './operations';\nimport { QueryExpression } from './queries';\nimport { SceneViewStateFeature } from './scene';\n\nexport interface BuildSceneOperationContext {\n dimensions: Dimensions.Dimensions;\n}\n\nexport function buildSceneViewStateIdentifier(\n identifier: UUID.UUID | SceneViewStateIdentifier.SceneViewStateIdentifier\n):\n | Pick<\n vertexvis.protobuf.stream.ILoadSceneViewStatePayload,\n 'sceneViewStateId'\n >\n | Pick<\n vertexvis.protobuf.stream.ILoadSceneViewStatePayload,\n 'sceneViewStateSuppliedId'\n > {\n if (typeof identifier === 'string') {\n return { sceneViewStateId: { hex: identifier } };\n } else if (SceneViewStateIdentifier.isSceneViewStateId(identifier)) {\n return { sceneViewStateId: { hex: identifier.id } };\n } else if (SceneViewStateIdentifier.isSceneViewStateSuppliedId(identifier)) {\n return { sceneViewStateSuppliedId: { value: identifier.suppliedId } };\n } else {\n throw new Error(\n 'Unable to build scene view state identifier, input must be a string or `SceneViewStateIdentifier`.'\n );\n }\n}\n\nexport function buildQueryExpression(\n query: QueryExpression,\n context: BuildSceneOperationContext\n): vertexvis.protobuf.stream.IQueryExpression {\n switch (query.type) {\n case 'and':\n case 'or':\n return {\n operand: {\n itemCollection: {\n queries: query.expressions.map((exp) => ({\n sceneItemQuery: buildSceneItemQuery(exp),\n })),\n },\n },\n };\n case 'not':\n return {\n not: {\n expression: buildQueryExpression(query.query, context),\n },\n };\n case 'item-id':\n case 'supplied-id':\n return {\n operand: {\n item: {\n sceneItemQuery: buildSceneItemQuery(query),\n },\n },\n };\n case 'all':\n return {\n operand: {\n root: {},\n },\n };\n case 'scene-tree-range':\n return {\n operand: {\n sceneTreeRange: {\n start: query.range.start,\n end: query.range.end,\n },\n },\n };\n case 'metadata':\n return {\n operand: {\n metadata: {\n valueFilter: query.filter,\n keys: query.keys,\n exactMatch: query.exactMatch,\n },\n },\n };\n case 'all-selected':\n return {\n operand: {\n override: {\n selection: {},\n },\n },\n };\n case 'point':\n return {\n operand: {\n point: {\n point: query.point,\n viewport: context.dimensions,\n },\n },\n };\n case 'volume-intersection':\n return {\n operand: {\n volume: {\n frustumByRectangle: {\n rectangle: query.rectangle,\n },\n exclusive: query.exclusive,\n viewport: context.dimensions,\n },\n },\n };\n default:\n return {};\n }\n}\n\nexport function buildSceneOperation(\n query: QueryExpression,\n operations: ItemOperation[],\n context: BuildSceneOperationContext\n): vertexvis.protobuf.stream.ISceneOperation {\n const operationTypes = buildOperationTypes(operations);\n\n const queryExpression = buildQueryExpression(query, context);\n\n return {\n queryExpression,\n operationTypes,\n };\n}\n\nfunction buildSceneItemQuery(\n item: QueryExpression\n): vertexvis.protobuf.stream.ISceneItemQuery {\n switch (item.type) {\n case 'item-id':\n return {\n id: new vertexvis.protobuf.core.Uuid({\n hex: item.value,\n }),\n };\n case 'supplied-id':\n return {\n suppliedId: item.value,\n };\n default:\n return {};\n }\n}\n\nexport function buildFlyToOperation(\n frameCorrelationId: UUID.UUID,\n options: FlyTo.FlyToOptions,\n animation?: Animation.Animation\n): vertexvis.protobuf.stream.IFlyToPayload {\n const payload = {\n frameCorrelationId: {\n value: frameCorrelationId,\n },\n animation: animation\n ? {\n duration: toProtoDuration(animation.milliseconds),\n }\n : undefined,\n };\n\n switch (options.flyTo.type) {\n case 'supplied': {\n return {\n ...payload,\n itemSuppliedId: options.flyTo.data,\n };\n }\n case 'internal': {\n return {\n ...payload,\n itemId: new vertexvis.protobuf.core.Uuid({\n hex: options.flyTo.data,\n }),\n };\n }\n case 'camera': {\n return {\n ...payload,\n camera: FrameCamera.toProtobuf(options.flyTo.data),\n };\n }\n\n case 'bounding-box': {\n return {\n ...payload,\n boundingBox: {\n xmin: options.flyTo.data.min.x,\n xmax: options.flyTo.data.max.x,\n ymin: options.flyTo.data.min.y,\n ymax: options.flyTo.data.max.y,\n zmin: options.flyTo.data.min.z,\n zmax: options.flyTo.data.max.z,\n },\n };\n }\n default:\n return {};\n }\n}\n\nfunction buildOperationTypes(\n operations: ItemOperation[]\n): vertexvis.protobuf.stream.IOperationType[] {\n return operations.map((op) => {\n switch (op.type) {\n case 'change-material':\n return {\n changeMaterial: {\n material: {\n d: op.material.opacity,\n ns: op.material.glossiness,\n ka: op.material.ambient,\n kd: op.material.diffuse,\n ks: op.material.specular,\n ke: op.material.emissive,\n },\n },\n };\n case 'clear-override':\n return {\n changeMaterial: {},\n };\n case 'change-transform':\n return {\n changeTransform: {\n transform: { ...op.transform },\n },\n };\n case 'clear-transform':\n return {\n clearTransform: {\n cascade: op.cascade,\n },\n };\n case 'hide':\n return {\n changeVisibility: {\n visible: false,\n },\n };\n case 'show':\n return {\n changeVisibility: {\n visible: true,\n },\n };\n case 'select':\n return {\n changeSelection: { selected: true },\n };\n case 'deselect':\n return {\n changeSelection: { selected: false },\n };\n case 'change-phantom':\n return {\n changePhantom: { phantom: op.phantomState ?? true },\n };\n case 'clear-phantom':\n return {\n changePhantom: { phantom: false },\n };\n case 'change-end-item':\n return {\n changeEndItem: { endItem: op.endItemState ?? true },\n };\n case 'clear-end-item':\n return {\n changeEndItem: { endItem: false },\n };\n default:\n return {};\n }\n });\n}\n\nexport function toPbSceneViewStateFeatures(\n features: SceneViewStateFeature[]\n): vertexvis.protobuf.stream.SceneViewStateFeature[] {\n return features.map((feature) => {\n switch (feature) {\n case 'camera':\n return vertexvis.protobuf.stream.SceneViewStateFeature\n .SCENE_VIEW_STATE_FEATURE_CAMERA;\n case 'material_overrides':\n return vertexvis.protobuf.stream.SceneViewStateFeature\n .SCENE_VIEW_STATE_FEATURE_MATERIAL_OVERRIDE;\n case 'selection':\n return vertexvis.protobuf.stream.SceneViewStateFeature\n .SCENE_VIEW_STATE_FEATURE_SELECTION;\n case 'visibility':\n return vertexvis.protobuf.stream.SceneViewStateFeature\n .SCENE_VIEW_STATE_FEATURE_VISIBILITY;\n case 'transforms':\n return vertexvis.protobuf.stream.SceneViewStateFeature\n .SCENE_VIEW_STATE_FEATURE_TRANSFORM;\n case 'cross_section':\n return vertexvis.protobuf.stream.SceneViewStateFeature\n .SCENE_VIEW_STATE_FEATURE_CROSS_SECTION;\n default:\n return vertexvis.protobuf.stream.SceneViewStateFeature\n .SCENE_VIEW_STATE_FEATURE_INVALID;\n }\n });\n}\n","import {\n BoundingBox,\n BoundingSphere,\n Matrix4,\n Quaternion,\n Ray,\n Vector3,\n} from '@vertexvis/geometry';\nimport { StreamApi } from '@vertexvis/stream-api';\nimport { UUID } from '@vertexvis/utils';\n\nimport { FrameDecoder } from '../mappers';\nimport { constrainViewVector } from '../rendering/vectors';\nimport { DEFAULT_TIMEOUT_IN_MS } from '../stream/dispatcher';\nimport {\n Animation,\n ClippingPlanes,\n FlyTo,\n FrameCamera,\n FrameCameraBase,\n FrameOrthographicCamera,\n FramePerspectiveCamera,\n StandardView,\n} from '../types';\nimport { withPositionAndViewVector } from '../types/frameCamera';\nimport { CameraRenderResult } from './cameraRenderResult';\nimport { buildFlyToOperation } from './mapper';\n\nconst PI_OVER_360 = 0.008726646259972;\n\ninterface CameraRenderOptions {\n animation?: Animation.Animation;\n}\n\nexport class TerminalFlyToExecutor {\n public constructor(private flyToOptions?: FlyTo.FlyToOptions) {}\n\n public build(): FlyTo.FlyToOptions | undefined {\n return this.flyToOptions;\n }\n}\n\nexport class FlyToExecutor {\n private flyToOptions?: FlyTo.FlyToOptions;\n\n public withItemId(id: string): TerminalFlyToExecutor {\n return new TerminalFlyToExecutor({\n flyTo: {\n type: 'internal',\n data: id,\n },\n });\n }\n\n public withSuppliedId(id: string): TerminalFlyToExecutor {\n return new TerminalFlyToExecutor({\n flyTo: {\n type: 'supplied',\n data: id,\n },\n });\n }\n\n public withCamera(camera: FrameCamera.FrameCamera): TerminalFlyToExecutor {\n return new TerminalFlyToExecutor({\n flyTo: {\n type: 'camera',\n data: camera,\n },\n });\n }\n\n public withBoundingBox(\n boundingBox: BoundingBox.BoundingBox\n ): TerminalFlyToExecutor {\n return new TerminalFlyToExecutor({\n flyTo: {\n type: 'bounding-box',\n data: boundingBox,\n },\n });\n }\n\n public build(): FlyTo.FlyToOptions | undefined {\n return this.flyToOptions;\n }\n}\n\nexport interface FlyToParams {\n itemId?: string;\n camera?: FrameCamera.FrameCamera;\n boundingBox?: BoundingBox.BoundingBox;\n itemSuppliedId?: string;\n}\n\n/**\n * The `Camera` class contains properties that reflect a world space position, a\n * view direction (lookAt), and normalized vector representing the up direction.\n *\n * It also provides utility methods to update orientation of the camera and\n * rerender the scene.\n *\n * This class in intended to treated as an immutable type. Any mutations return\n * a new instance of the class with the updated properties.\n */\nexport abstract class Camera {\n public constructor(\n protected stream: StreamApi,\n protected aspect: number,\n private data: FrameCamera.FrameCamera,\n protected boundingBox: BoundingBox.BoundingBox,\n protected decodeFrame: FrameDecoder,\n protected flyToOptions?: FlyTo.FlyToOptions\n ) {}\n\n protected fitCameraToBoundingBox(\n boundingBox: BoundingBox.BoundingBox,\n distance: number,\n viewVector: Vector3.Vector3\n ): Camera {\n const vvec = Vector3.scale(distance, Vector3.normalize(viewVector));\n\n const lookAt = BoundingBox.center(boundingBox);\n const position = Vector3.subtract(lookAt, vvec);\n\n return this.update({ lookAt, position, viewVector: vvec });\n }\n\n /**\n * Returns the distance from the camera's position to the center\n * of the provided bounding box (or the scene's visible bounding box if not provided).\n *\n * @param boundingBox - The bounding box to determine distance from.\n */\n public signedDistanceToBoundingBoxCenter(\n boundingBox?: BoundingBox.BoundingBox\n ): number {\n const { position, viewVector } = withPositionAndViewVector(this.data);\n\n const boundingBoxCenter = BoundingBox.center(\n boundingBox ?? this.boundingBox\n );\n const cameraToCenter = Vector3.subtract(boundingBoxCenter, position);\n\n return (\n Vector3.dot(viewVector, cameraToCenter) / Vector3.magnitude(viewVector)\n );\n }\n\n /**\n * Specifies that the next render of the camera will be repositioned to one of\n * the options specified in `options`.\n *\n * @param paramsOrQuery An object or query describing how the camera should\n * be positioned.\n */\n public flyTo(\n paramsOrQuery: FlyToParams | ((q: FlyToExecutor) => TerminalFlyToExecutor)\n ): Camera {\n if (typeof paramsOrQuery !== 'function') {\n return this.updateFlyToOptions({\n flyTo: this.buildFlyToType(paramsOrQuery),\n });\n } else {\n return this.updateFlyToOptions(\n paramsOrQuery(new FlyToExecutor()).build()\n );\n }\n }\n\n public viewAll(): Camera {\n return this.fitToBoundingBox(this.boundingBox);\n }\n\n /**\n * Queues the rendering for a new frame using this camera. The returned\n * promise will resolve when a frame is received that contains this camera.\n */\n public async render(\n renderOptions?: CameraRenderOptions\n ): Promise<CameraRenderResult> {\n if (this.flyToOptions == null && renderOptions != null) {\n this.flyToOptions = {\n flyTo: {\n type: 'camera',\n data: this.data,\n },\n };\n }\n\n try {\n const corrId = UUID.create();\n if (this.flyToOptions != null) {\n const payload = buildFlyToOperation(\n corrId,\n this.flyToOptions,\n renderOptions?.animation\n );\n const flyToResponse = await this.stream.flyTo(payload, true);\n\n return new CameraRenderResult(\n this.stream,\n this.decodeFrame,\n {\n correlationId: corrId,\n animationId: flyToResponse.flyTo?.animationId?.hex || undefined,\n },\n renderOptions?.animation?.milliseconds != null\n ? renderOptions.animation.milliseconds + DEFAULT_TIMEOUT_IN_MS\n : undefined\n );\n } else {\n this.stream.replaceCamera({\n camera: FrameCamera.toProtobuf(this.data),\n frameCorrelationId: { value: corrId },\n });\n\n return new CameraRenderResult(this.stream, this.decodeFrame, {\n correlationId: corrId,\n });\n }\n } catch (e) {\n console.warn('Error when performing render: ', e);\n throw e;\n }\n }\n\n /**\n * Repositions the camera by rotating its current position around an axis.\n *\n * @param angleInRadians The angle, in radians, to rotate.\n * @param axis A normalized vector to rotate around.\n */\n public rotateAroundAxis(\n angleInRadians: number,\n axis: Vector3.Vector3\n ): Camera {\n return this.rotateAroundAxisAtPoint(angleInRadians, this.data.lookAt, axis);\n }\n\n /**\n * Aligns the camera to the plane defined by the provided position and normal.\n * This will place the camera at the provided position, set the up vector to\n * the provided normal, and place the lookAt on the defined plane. The point\n * chosen for the lookAt will be determined using the current view vector.\n *\n * @param position The position to place the camera at.\n * @param normal The normal of the plane to align to.\n */\n public alignTo(position: Vector3.Vector3, normal: Vector3.Vector3): Camera {\n const worldX = Vector3.normalize(\n Vector3.cross(this.up, Vector3.normalize(this.viewVector))\n );\n const positiveWorldY = Vector3.normalize(\n Vector3.cross(Vector3.normalize(this.viewVector), worldX)\n );\n\n // Invert the world y axis if the provided normal is more than 90 degrees from it\n // to compute a proper angle to rotate the view vector by\n const worldY =\n Vector3.angleTo(normal, positiveWorldY) > Math.PI / 2\n ? Vector3.negate(positiveWorldY)\n : positiveWorldY;\n const localX = Vector3.isEqual(worldY, normal)\n ? worldX\n : Vector3.normalize(Vector3.cross(worldY, normal));\n\n const transformedViewVector = Vector3.transformMatrix(\n this.viewVector,\n Matrix4.makeRotation(\n Quaternion.fromAxisAngle(localX, Vector3.angleTo(normal, worldY))\n )\n );\n const lookAtRay = Ray.create({\n origin: position,\n direction: Vector3.normalize(transformedViewVector),\n });\n const lookAt = Ray.at(lookAtRay, Vector3.magnitude(this.viewVector));\n\n return this.update({\n position,\n lookAt,\n up: normal,\n });\n }\n\n /**\n * Updates the `position` and `up` vectors of the camera to the given standard\n * view.\n *\n * @param standardView The standard view to apply.\n * @returns A new camera.\n */\n public standardView(standardView: StandardView): Camera {\n return this.update({\n position: standardView.position,\n viewVector: Vector3.subtract(Vector3.origin(), standardView.position),\n lookAt: Vector3.origin(),\n up: standardView.up,\n });\n }\n\n private buildFlyToType(options: FlyToParams): FlyTo.FlyToType {\n if (options.boundingBox != null) {\n return { type: 'bounding-box', data: options.boundingBox };\n } else if (options.camera != null) {\n return { type: 'camera', data: options.camera };\n } else if (options.itemId != null) {\n return { type: 'internal', data: options.itemId };\n } else if (options.itemSuppliedId != null) {\n return { type: 'supplied', data: options.itemSuppliedId };\n } else {\n throw new Error('Fly to must specify at least one option.');\n }\n }\n\n protected computeClippingPlanes(\n camera: FrameCamera.FrameCamera\n ): ClippingPlanes.ClippingPlanes {\n return ClippingPlanes.fromBoundingBoxAndLookAtCamera(\n this.boundingBox,\n camera\n );\n }\n\n /**\n * Repositions the camera by rotating its current position around an axis\n * defined at a specific world point.\n *\n * @param angleInRadians The angle, in radians, to rotate.\n * @param point The point in world space to place the axis at.\n * @param axis A normalized vector to rotate around.\n */\n public abstract rotateAroundAxisAtPoint(\n angleInRadians: number,\n point: Vector3.Vector3,\n axis: Vector3.Vector3\n ): Camera;\n\n /**\n * Updates the position of the camera such that the given bounding box will\n * be contained within the camera's view.\n *\n * @param boundingBox The bounding box to position to.\n */\n public abstract fitToBoundingBox(\n boundingBox: BoundingBox.BoundingBox\n ): Camera;\n\n public abstract get position(): Vector3.Vector3;\n public abstract get lookAt(): Vector3.Vector3;\n public abstract get up(): Vector3.Vector3;\n public abstract get near(): number;\n public abstract get far(): number;\n public abstract get aspectRatio(): number;\n public abstract get viewVector(): Vector3.Vector3;\n\n /**\n * Shifts the position of the camera by the given delta.\n *\n * @param delta The number of units to shift the camera on the X, Y, and Z\n * axis.\n */\n public abstract moveBy(delta: Vector3.Vector3): Camera;\n\n /**\n * Updates the `position`, `lookAt` and/or `up` vectors of the camera.\n *\n * @param camera The values to update the camera to.\n */\n public abstract update(camera: Partial<FrameCamera.FrameCamera>): Camera;\n\n /**\n * Returns a `FrameCameraBase` representation.\n */\n public abstract toFrameCamera(): FrameCameraBase;\n\n protected abstract updateFlyToOptions(\n flyToOptions?: FlyTo.FlyToOptions\n ): Camera;\n}\n\nexport class PerspectiveCamera\n extends Camera\n implements FrameCamera.PerspectiveFrameCamera\n{\n public constructor(\n stream: StreamApi,\n aspect: number,\n private perspectiveData: FrameCamera.PerspectiveFrameCamera,\n boundingBox: BoundingBox.BoundingBox,\n decodeFrame: FrameDecoder,\n flyToOptions?: FlyTo.FlyToOptions\n ) {\n super(\n stream,\n aspect,\n perspectiveData,\n boundingBox,\n decodeFrame,\n flyToOptions\n );\n }\n\n /**\n * Shifts the position of the camera by the given delta.\n *\n * @param delta The number of units to shift the camera on the X, Y, and Z\n * axis.\n */\n public moveBy(delta: Vector3.Vector3): Camera {\n return this.update({\n position: Vector3.add(this.position, delta),\n lookAt: Vector3.add(this.lookAt, delta),\n });\n }\n\n public rotateAroundAxisAtPoint(\n angleInRadians: number,\n point: Vector3.Vector3,\n axis: Vector3.Vector3\n ): Camera {\n return this.update({\n position: Vector3.rotateAboutAxis(\n angleInRadians,\n this.position,\n axis,\n point\n ),\n lookAt: Vector3.rotateAboutAxis(angleInRadians, this.lookAt, axis, point),\n up: Vector3.rotateAboutAxis(\n angleInRadians,\n this.up,\n axis,\n Vector3.origin()\n ),\n });\n }\n\n public fitToBoundingBox(boundingBox: BoundingBox.BoundingBox): Camera {\n const radius =\n 1.1 *\n Vector3.magnitude(\n Vector3.subtract(boundingBox.max, BoundingBox.center(boundingBox))\n );\n\n // ratio of the height of the frustum to the distance along the view vector\n let hOverD = Math.tan((this.fovY ?? 45) * PI_OVER_360);\n\n if (this.aspect < 1.0) {\n hOverD *= this.aspect;\n }\n\n const distance = Math.abs(radius / hOverD);\n\n return super.fitCameraToBoundingBox(boundingBox, distance, this.viewVector);\n }\n\n public update(camera: Partial<FrameCamera.PerspectiveFrameCamera>): Camera {\n const fovY = camera.fovY ?? this.fovY;\n return new PerspectiveCamera(\n this.stream,\n this.aspect,\n { ...this.perspectiveData, ...camera, fovY },\n this.boundingBox,\n this.decodeFrame,\n this.flyToOptions\n );\n }\n\n public toFrameCamera(): FramePerspectiveCamera {\n return new FramePerspectiveCamera(\n this.position,\n this.lookAt,\n this.up,\n this.near,\n this.far,\n this.aspectRatio,\n this.fovY ?? 45\n );\n }\n\n public get viewVector(): Vector3.Vector3 {\n return Vector3.subtract(this.lookAt, this.position);\n }\n\n /**\n * The position vector for the camera, in world space coordinates.\n */\n public get position(): Vector3.Vector3 {\n return { ...this.perspectiveData.position };\n }\n\n /**\n * A normalized vector representing the up direction.\n */\n public get up(): Vector3.Vector3 {\n return { ...this.perspectiveData.up };\n }\n\n /**\n * A vector, in world space coordinates, of where the camera is pointed at.\n */\n public get lookAt(): Vector3.Vector3 {\n return { ...this.perspectiveData.lookAt };\n }\n\n /**\n * The camera's field of view.\n */\n public get fovY(): number | undefined {\n return this.perspectiveData.fovY;\n }\n\n /**\n * The aspect ratio of the camera.\n */\n public get aspectRatio(): number {\n return this.aspect;\n }\n\n /**\n * The camera's near clipping plane.\n */\n public get near(): number {\n const { near } = this.computeClippingPlanes(this.perspectiveData);\n return near;\n }\n\n /**\n * The camera's far clipping plane.\n */\n public get far(): number {\n const { far } = this.computeClippingPlanes(this.perspectiveData);\n return far;\n }\n\n protected updateFlyToOptions(\n flyToOptions?: FlyTo.FlyToOptions\n ): PerspectiveCamera {\n return new PerspectiveCamera(\n this.stream,\n this.aspect,\n this.perspectiveData,\n this.boundingBox,\n this.decodeFrame,\n flyToOptions\n );\n }\n}\n\nexport class OrthographicCamera\n extends Camera\n implements FrameCamera.OrthographicFrameCamera\n{\n public constructor(\n stream: StreamApi,\n aspect: number,\n private orthographicData: FrameCamera.OrthographicFrameCamera,\n boundingBox: BoundingBox.BoundingBox,\n decodeFrame: FrameDecoder,\n flyToOptions?: FlyTo.FlyToOptions\n ) {\n super(\n stream,\n aspect,\n orthographicData,\n boundingBox,\n decodeFrame,\n flyToOptions\n );\n }\n\n /**\n * Shifts the position of the camera by the given delta.\n *\n * @param delta The number of units to shift the camera on the X, Y, and Z\n * axis.\n */\n public moveBy(delta: Vector3.Vector3): Camera {\n return this.update({\n lookAt: Vector3.add(this.lookAt, delta),\n });\n }\n\n public rotateAroundAxisAtPoint(\n angleInRadians: number,\n point: Vector3.Vector3,\n axis: Vector3.Vector3\n ): Camera {\n const updatedLookAt = Vector3.rotateAboutAxis(\n angleInRadians,\n this.lookAt,\n axis,\n point\n );\n const updatedPosition = Vector3.rotateAboutAxis(\n angleInRadians,\n this.position,\n axis,\n point\n );\n const viewVector = constrainViewVector(\n Vector3.subtract(updatedLookAt, updatedPosition),\n BoundingSphere.create(this.boundingBox)\n );\n\n return this.update({\n viewVector: viewVector,\n lookAt: updatedLookAt,\n up: Vector3.rotateAboutAxis(\n angleInRadians,\n this.up,\n axis,\n Vector3.origin()\n ),\n });\n }\n\n public fitToBoundingBox(boundingBox: BoundingBox.BoundingBox): Camera {\n const boundingSphere = BoundingSphere.create(boundingBox);\n\n const fitAll = super.fitCameraToBoundingBox(\n boundingBox,\n boundingSphere.radius,\n this.viewVector\n );\n\n return this.update({\n lookAt: fitAll.lookAt,\n viewVector: fitAll.viewVector,\n fovHeight: boundingSphere.radius * 2,\n });\n }\n\n public update(camera: Partial<FrameCamera.FrameCamera>): Camera {\n return new OrthographicCamera(\n this.stream,\n this.aspect,\n { ...this.orthographicData, ...camera },\n this.boundingBox,\n this.decodeFrame,\n this.flyToOptions\n );\n }\n\n public toFrameCamera(): FrameOrthographicCamera {\n return new FrameOrthographicCamera(\n constrainViewVector(\n this.viewVector,\n BoundingSphere.create(this.boundingBox)\n ),\n this.lookAt,\n this.up,\n this.near,\n this.far,\n this.aspectRatio,\n this.fovHeight\n );\n }\n\n public get viewVector(): Vector3.Vector3 {\n return { ...this.orthographicData.viewVector };\n }\n\n public get position(): Vector3.Vector3 {\n return Vector3.add(this.lookAt, Vector3.negate(this.viewVector));\n }\n\n /**\n * A normalized vector representing the up direction.\n */\n public get up(): Vector3.Vector3 {\n return { ...this.orthographicData.up };\n }\n\n /**\n * A vector, in world space coordinates, of where the camera is pointed at.\n */\n public get lookAt(): Vector3.Vector3 {\n return { ...this.orthographicData.lookAt };\n }\n\n /**\n * The camera's field of view.\n */\n public get fovHeight(): number {\n return this.orthographicData.fovHeight;\n }\n\n /**\n * The aspect ratio of the camera.\n */\n public get aspectRatio(): number {\n return this.aspect;\n }\n\n /**\n * The camera's near clipping plane.\n */\n public get near(): number {\n const { near } = this.computeClippingPlanes(this.orthographicData);\n return near;\n }\n\n /**\n * The camera's far clipping plane.\n */\n public get far(): number {\n const { far } = this.computeClippingPlanes(this.orthographicData);\n return far;\n }\n\n protected updateFlyToOptions(\n flyToOptions?: FlyTo.FlyToOptions\n ): OrthographicCamera {\n return new OrthographicCamera(\n this.stream,\n this.aspect,\n this.orthographicData,\n this.boundingBox,\n this.decodeFrame,\n flyToOptions\n );\n }\n}\n","import { vertexvis } from '@vertexvis/frame-streaming-protos';\nimport { Point } from '@vertexvis/geometry';\nimport { StreamApi } from '@vertexvis/stream-api';\n\nimport { ImageScaleProvider } from './scene';\n\n/**\n * Optional raycaster options available on a hit request.\n */\ninterface RaycasterOptions {\n includeMetadata: boolean;\n}\n\nexport interface RaycasterLike {\n hitItems(\n point: Point.Point,\n options?: RaycasterOptions\n ): Promise<vertexvis.protobuf.stream.IHitItemsResult | undefined>;\n}\n\n/**\n * The `Raycaster` class is here.\n */\nexport class Raycaster implements RaycasterLike {\n public constructor(\n private stream: StreamApi,\n private imageScaleProvider: ImageScaleProvider\n ) {}\n\n /**\n * Performs request on the stream to find items that intersect\n * the given point.\n *\n * @param point The point to cast from looking for intersections.\n */\n public async hitItems(\n point: Point.Point,\n options?: RaycasterOptions\n ): Promise<vertexvis.protobuf.stream.IHitItemsResult | undefined> {\n const scale = this.imageScaleProvider();\n const res = await this.stream.hitItems(\n {\n point: Point.scale(point, scale?.x || 1, scale?.y || 1),\n includeMetadata: options?.includeMetadata,\n },\n true\n );\n return res.hitItems || undefined;\n }\n}\n","import { vertexvis } from '@vertexvis/frame-streaming-protos';\nimport { StreamApi } from '@vertexvis/stream-api';\n\nimport { CrossSectioning } from '../types';\n\n/**\n * The `CrossSectioner` class is here.\n */\nexport class CrossSectioner {\n public constructor(\n private stream: StreamApi,\n private data: CrossSectioning.CrossSectioning\n ) {}\n\n /**\n * Performs request on the stream to update the cross sectioning config.\n *\n * @param crossSectioning The new cross sectioning.\n */\n public async update(\n crossSectioning: CrossSectioning.CrossSectioning\n ): Promise<\n vertexvis.protobuf.stream.IUpdateCrossSectioningResult | undefined\n > {\n const res = await this.stream.updateCrossSectioning(\n {\n crossSectioning: {\n sectionPlanes: crossSectioning.sectionPlanes,\n highlightColor: crossSectioning.highlightColor,\n lineWidth:\n crossSectioning?.lineWidth != null\n ? { value: crossSectioning.lineWidth }\n : null,\n },\n },\n true\n );\n\n return res.updateCrossSectioning || undefined;\n }\n\n public current(): CrossSectioning.CrossSectioning {\n return this.data;\n }\n}\n","import { vertexvis } from '@vertexvis/frame-streaming-protos';\n\nimport { ColorMaterial } from './colorMaterial';\n\ninterface ShowItemOperation {\n type: 'show';\n}\n\ninterface HideItemOperation {\n type: 'hide';\n}\n\ninterface SelectItemOperation {\n type: 'select';\n}\n\ninterface DeselectItemOperation {\n type: 'deselect';\n}\n\ninterface ClearItemOperation {\n type: 'clear-override';\n}\n\nexport interface ChangeMaterialOperation {\n type: 'change-material';\n material: ColorMaterial;\n}\n\nexport interface TransformOperation {\n type: 'change-transform';\n transform: vertexvis.protobuf.core.IMatrix4x4f;\n}\n\nexport interface ClearTransformOperation {\n type: 'clear-transform';\n cascade?: boolean;\n}\n\nexport interface ChangePhantomOperation {\n type: 'change-phantom';\n phantomState?: boolean;\n}\n\ninterface ClearPhantomOperation {\n type: 'clear-phantom';\n}\n\nexport interface ChangeEndItemOperation {\n type: 'change-end-item';\n endItemState?: boolean;\n}\n\ninterface ClearEndItemOperation {\n type: 'clear-end-item';\n}\n\nexport type ItemOperation =\n | ShowItemOperation\n | HideItemOperation\n | SelectItemOperation\n | DeselectItemOperation\n | ChangeMaterialOperation\n | ClearItemOperation\n | TransformOperation\n | ClearTransformOperation\n | ChangePhantomOperation\n | ClearPhantomOperation\n | ChangeEndItemOperation\n | ClearEndItemOperation;\n\nexport interface SceneItemOperations<T> {\n materialOverride(color: ColorMaterial): T;\n show(): T;\n hide(): T;\n select(color: ColorMaterial): T;\n deselect(): T;\n clearMaterialOverrides(): T;\n clearTransforms(): T;\n setPhantom(phantomState?: boolean): T;\n clearPhantom(): T;\n setEndItem(endItemState?: boolean): T;\n clearEndItem(): T;\n}\n\n/**\n * A class to handle the building of operations for a scene.\n */\nexport class SceneOperationBuilder\n implements SceneItemOperations<SceneOperationBuilder>\n{\n public constructor(private operations: ItemOperation[] = []) {}\n\n /**\n * Constructs the scene operations and returns a definition describing each\n * operation.\n */\n public build(): ItemOperation[] {\n return this.operations.concat();\n }\n\n public materialOverride(material: ColorMaterial): SceneOperationBuilder {\n return new SceneOperationBuilder(\n this.operations.concat([{ type: 'change-material', material }])\n );\n }\n\n public show(): SceneOperationBuilder {\n return new SceneOperationBuilder(\n this.operations.concat([{ type: 'show' }])\n );\n }\n\n public hide(): SceneOperationBuilder {\n return new SceneOperationBuilder(\n this.operations.concat([{ type: 'hide' }])\n );\n }\n\n public select(): SceneOperationBuilder {\n return new SceneOperationBuilder(\n this.operations.concat([{ type: 'select' }])\n );\n }\n\n public deselect(): SceneOperationBuilder {\n return new SceneOperationBuilder(\n this.operations.concat([{ type: 'deselect' }])\n );\n }\n\n public clearMaterialOverrides(): SceneOperationBuilder {\n return new SceneOperationBuilder(\n this.operations.concat([{ type: 'clear-override' }])\n );\n }\n\n public transform(\n matrix: vertexvis.protobuf.core.IMatrix4x4f\n ): SceneOperationBuilder {\n return new SceneOperationBuilder(\n this.operations.concat([{ type: 'change-transform', transform: matrix }])\n );\n }\n\n public clearTransforms(cascade = true): SceneOperationBuilder {\n return new SceneOperationBuilder(\n this.operations.concat([{ type: 'clear-transform', cascade }])\n );\n }\n\n public setPhantom(phantomState?: boolean): SceneOperationBuilder {\n return new SceneOperationBuilder(\n this.operations.concat([{ type: 'change-phantom', phantomState }])\n );\n }\n\n public clearPhantom(): SceneOperationBuilder {\n return new SceneOperationBuilder(\n this.operations.concat([{ type: 'clear-phantom' }])\n );\n }\n\n public setEndItem(endItemState?: boolean): SceneOperationBuilder {\n return new SceneOperationBuilder(\n this.operations.concat([{ type: 'change-end-item', endItemState }])\n );\n }\n\n public clearEndItem(): SceneOperationBuilder {\n return new SceneOperationBuilder(\n this.operations.concat([{ type: 'clear-end-item' }])\n );\n }\n}\n","import { Point, Rectangle } from '@vertexvis/geometry';\n\nimport { SceneItemOperationsBuilder } from './scene';\n\ninterface AllQueryExpression {\n type: 'all';\n}\n\nexport interface SceneTreeRange {\n start: number;\n end: number;\n}\n\ninterface ItemQueryExpression {\n type: 'item-id' | 'supplied-id';\n value: string;\n}\n\nexport interface AndExpression {\n type: 'and';\n expressions: QueryExpression[];\n}\n\nexport interface OrExpression {\n type: 'or';\n expressions: QueryExpression[];\n}\n\ninterface SceneTreeRangeQueryExpression {\n type: 'scene-tree-range';\n range: SceneTreeRange;\n}\n\ninterface NotQueryExpression {\n type: 'not';\n query: QueryExpression;\n}\ninterface MetadataQueryExpression {\n type: 'metadata';\n filter: string;\n keys: string[];\n exactMatch: boolean;\n}\n\ninterface AllSelectedQueryExpression {\n type: 'all-selected';\n}\n\ninterface PointQueryExpression {\n type: 'point';\n point: Point.Point;\n}\n\ninterface VolumeIntersectionQueryExpression {\n type: 'volume-intersection';\n rectangle: Rectangle.Rectangle;\n exclusive: boolean;\n}\n\n/**\n * Represents the sum of all possible types of expressions.\n */\nexport type QueryExpression =\n | AllQueryExpression\n | ItemQueryExpression\n | AndExpression\n | OrExpression\n | SceneTreeRangeQueryExpression\n | PointQueryExpression\n | VolumeIntersectionQueryExpression\n | MetadataQueryExpression\n | AllSelectedQueryExpression\n | NotQueryExpression;\n\n/**\n * An interface that represents a query is \"complete\" and can be turned into an\n * expression.\n */\nabstract class TerminalQuery {\n protected inverted: boolean;\n public constructor(inverted: boolean) {\n this.inverted = inverted;\n }\n\n public build(): QueryExpression {\n if (this.inverted) {\n return {\n type: 'not',\n query: this.queryExpressionBuilder(),\n };\n } else {\n return this.queryExpressionBuilder();\n }\n }\n\n public abstract queryExpressionBuilder(): QueryExpression;\n}\n\ninterface ItemQuery<N> {\n withItemId(id: string): N;\n\n withSuppliedId(id: string): N;\n}\n\ninterface BooleanQuery {\n and(): AndQuery;\n or(): OrQuery;\n}\n\nexport class RootQuery implements ItemQuery<SingleQuery> {\n public constructor(private inverted: boolean = false) {}\n public all(): AllQuery {\n return new AllQuery();\n }\n\n public not(): RootQuery {\n return new NotQuery(!this.inverted);\n }\n\n public withItemIds(ids: string[]): BulkQuery {\n return new BulkQuery(ids, 'item-id', this.inverted);\n }\n\n public withSuppliedIds(ids: string[]): BulkQuery {\n return new BulkQuery(ids, 'supplied-id', this.inverted);\n }\n\n public withItemId(id: string): SingleQuery {\n return new SingleQuery({ type: 'item-id', value: id }, this.inverted);\n }\n\n public withSuppliedId(id: string): SingleQuery {\n return new SingleQuery({ type: 'supplied-id', value: id }, this.inverted);\n }\n\n public withSceneTreeRange(range: SceneTreeRange): SceneTreeRangeQuery {\n return new SceneTreeRangeQuery(range, this.inverted);\n }\n\n public withMetadata(\n filter: string,\n keys: string[],\n exactMatch: boolean\n ): MetadataQuery {\n return new MetadataQuery(filter, keys, exactMatch, this.inverted);\n }\n\n public withSelected(): AllSelectedQuery {\n return new AllSelectedQuery(this.inverted);\n }\n\n public withPoint(point: Point.Point): PointQuery {\n return new PointQuery(point, this.inverted);\n }\n\n public withVolumeIntersection(\n rectangle: Rectangle.Rectangle,\n exclusive?: boolean\n ): VolumeIntersectionQuery {\n return new VolumeIntersectionQuery(rectangle, this.inverted, exclusive);\n }\n}\n\nexport class NotQuery extends RootQuery {\n public constructor(inverted: boolean) {\n super(inverted);\n }\n}\n\nexport class AllQuery extends TerminalQuery {\n public constructor(inverted = false) {\n super(inverted);\n }\n\n public queryExpressionBuilder(): QueryExpression {\n return { type: 'all' };\n }\n}\n\nexport class SceneTreeRangeQuery extends TerminalQuery {\n public constructor(private range: SceneTreeRange, inverted: boolean) {\n super(inverted);\n }\n\n public queryExpressionBuilder(): SceneTreeRangeQueryExpression {\n return {\n type: 'scene-tree-range',\n range: this.range,\n };\n }\n}\n\nexport class MetadataQuery extends TerminalQuery {\n public constructor(\n private filter: string,\n private keys: string[],\n private exactMatch: boolean,\n inverted: boolean\n ) {\n super(inverted);\n }\n\n public queryExpressionBuilder(): MetadataQueryExpression {\n return {\n type: 'metadata',\n filter: this.filter,\n keys: this.keys,\n exactMatch: this.exactMatch,\n };\n }\n}\n\nexport class AllSelectedQuery extends TerminalQuery {\n public constructor(inverted: boolean) {\n super(inverted);\n }\n\n public queryExpressionBuilder(): AllSelectedQueryExpression {\n return {\n type: 'all-selected',\n };\n }\n}\n\nexport class PointQuery extends TerminalQuery {\n public constructor(private point: Point.Point, inverted: boolean) {\n super(inverted);\n }\n\n public queryExpressionBuilder(): PointQueryExpression {\n return {\n type: 'point',\n point: this.point,\n };\n }\n}\n\nexport class VolumeIntersectionQuery extends TerminalQuery {\n public constructor(\n private rectangle: Rectangle.Rectangle,\n inverted: boolean,\n private exclusive?: boolean\n ) {\n super(inverted);\n }\n\n public queryExpressionBuilder(): VolumeIntersectionQueryExpression {\n return {\n type: 'volume-intersection',\n rectangle: this.rectangle,\n exclusive: !!this.exclusive,\n };\n }\n}\n\nexport class BulkQuery extends TerminalQuery {\n public constructor(\n private ids: string[],\n private type: 'item-id' | 'supplied-id',\n inverted: boolean\n ) {\n super(inverted);\n }\n\n public queryExpressionBuilder(): QueryExpression {\n return {\n type: 'or',\n expressions: this.ids.map((id) => {\n return {\n type: this.type,\n value: id,\n };\n }),\n };\n }\n}\n\nclass SingleQuery extends TerminalQuery implements BooleanQuery {\n public constructor(private query: QueryExpression, inverted: boolean) {\n super(inverted);\n }\n\n public queryExpressionBuilder(): QueryExpression {\n return { ...this.query };\n }\n\n public and(): AndQuery {\n return new AndQuery([this.query], this.inverted);\n }\n\n public or(): OrQuery {\n return new OrQuery([this.query], this.inverted);\n }\n}\n\nexport class OrQuery extends TerminalQuery implements ItemQuery<OrQuery> {\n public constructor(\n private expressions: QueryExpression[],\n inverted: boolean\n ) {\n super(inverted);\n }\n\n public queryExpressionBuilder(): QueryExpression {\n return { type: 'or', expressions: [...this.expressions] };\n }\n\n public withItemId(id: string): OrQuery {\n return new OrQuery(\n [...this.expressions, { type: 'item-id', value: id }],\n this.inverted\n );\n }\n\n public withSuppliedId(id: string): OrQuery {\n return new OrQuery(\n [...this.expressions, { type: 'supplied-id', value: id }],\n this.inverted\n );\n }\n\n public or(): OrQuery {\n return this;\n }\n}\n\nexport class AndQuery extends TerminalQuery implements ItemQuery<AndQuery> {\n public constructor(\n private expressions: QueryExpression[],\n inverted: boolean\n ) {\n super(inverted);\n }\n\n public queryExpressionBuilder(): QueryExpression {\n return { type: 'and', expressions: [...this.expressions] };\n }\n\n public withItemId(id: string): AndQuery {\n return new AndQuery(\n [...this.expressions, { type: 'item-id', value: id }],\n this.inverted\n );\n }\n\n public withSuppliedId(id: string): AndQuery {\n return new AndQuery(\n [...this.expressions, { type: 'supplied-id', value: id }],\n this.inverted\n );\n }\n\n public and(): AndQuery {\n return this;\n }\n}\n\nexport class SceneItemQueryExecutor {\n public where(\n query: (q: RootQuery) => TerminalQuery\n ): SceneItemOperationsBuilder {\n const expression: QueryExpression = query(new RootQuery()).build();\n\n return new SceneItemOperationsBuilder(expression);\n }\n}\n","import { vertexvis } from '@vertexvis/frame-streaming-protos';\nimport { BoundingBox, Dimensions, Point } from '@vertexvis/geometry';\nimport { StreamApi } from '@vertexvis/stream-api';\nimport { UUID } from '@vertexvis/utils';\n\nimport { InvalidArgumentError, InvalidCameraError } from '../errors';\nimport { FrameDecoder } from '../mappers';\nimport { SceneViewStateIdentifier } from '../types';\nimport { Frame } from '../types/frame';\nimport { Camera, OrthographicCamera, PerspectiveCamera } from '.';\nimport { ColorMaterial, fromHex } from './colorMaterial';\nimport { CrossSectioner } from './crossSectioner';\nimport {\n buildSceneOperation,\n buildSceneViewStateIdentifier,\n toPbSceneViewStateFeatures,\n} from './mapper';\nimport {\n ItemOperation,\n SceneItemOperations,\n SceneOperationBuilder,\n} from './operations';\nimport { QueryExpression, SceneItemQueryExecutor } from './queries';\nimport { Raycaster } from './raycaster';\n\ninterface SceneExecutionOptions {\n suppliedCorrelationId?: string;\n}\n\ninterface ResetViewOptions {\n includeCamera?: boolean;\n suppliedCorrelationId?: string;\n}\n\n/**\n * A class that is responsible for building operations for a specific scene.\n * This executor requires a query, and expects `execute()` to be invoked in order\n * for the changes to take effect.\n */\nexport class SceneItemOperationsBuilder\n implements SceneItemOperations<SceneItemOperationsBuilder>\n{\n private builder: SceneOperationBuilder;\n\n public constructor(\n private query: QueryExpression,\n givenBuilder?: SceneOperationBuilder\n ) {\n this.builder =\n givenBuilder != null ? givenBuilder : new SceneOperationBuilder();\n }\n\n public materialOverride(\n color: ColorMaterial | string\n ): SceneItemOperationsBuilder {\n if (typeof color === 'string') {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.materialOverride(fromHex(color))\n );\n } else {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.materialOverride(color)\n );\n }\n }\n\n public hide(): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(this.query, this.builder.hide());\n }\n\n public show(): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(this.query, this.builder.show());\n }\n\n public select(): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(this.query, this.builder.select());\n }\n\n public deselect(): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(this.query, this.builder.deselect());\n }\n\n public clearMaterialOverrides(): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.clearMaterialOverrides()\n );\n }\n\n public transform(\n matrix: vertexvis.protobuf.core.IMatrix4x4f | number[]\n ): SceneItemOperationsBuilder {\n if (Array.isArray(matrix)) {\n if (matrix.length !== 16) {\n throw new InvalidArgumentError(\n 'Matrix provided must contain exactly 16 values (4x4).'\n );\n }\n\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.transform({\n r0: {\n x: matrix[0],\n y: matrix[1],\n z: matrix[2],\n w: matrix[3],\n },\n r1: {\n x: matrix[4],\n y: matrix[5],\n z: matrix[6],\n w: matrix[7],\n },\n r2: {\n x: matrix[8],\n y: matrix[9],\n z: matrix[10],\n w: matrix[11],\n },\n r3: {\n x: matrix[12],\n y: matrix[13],\n z: matrix[14],\n w: matrix[15],\n },\n })\n );\n } else {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.transform(matrix)\n );\n }\n }\n\n public clearTransforms(cascade = true): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.clearTransforms(cascade)\n );\n }\n\n public setPhantom(phantomState?: boolean): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.setPhantom(phantomState)\n );\n }\n\n public clearPhantom(): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.clearPhantom()\n );\n }\n\n public setEndItem(endItemState?: boolean): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.setEndItem(endItemState)\n );\n }\n\n public clearEndItem(): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.clearEndItem()\n );\n }\n\n public build(): QueryOperation {\n return {\n query: this.query,\n operations: this.builder.build(),\n };\n }\n}\n\nexport interface QueryOperation {\n query: QueryExpression;\n operations: ItemOperation[];\n}\n\nexport class ItemsOperationExecutor {\n public constructor(\n private sceneViewId: UUID.UUID,\n private stream: StreamApi,\n private dimensions: Dimensions.Dimensions,\n private queryOperations: QueryOperation[]\n ) {}\n\n public async execute(\n executionOptions?: SceneExecutionOptions\n ): Promise<void> {\n const pbOperations = this.queryOperations.map((op) =>\n buildSceneOperation(op.query, op.operations, {\n dimensions: this.dimensions,\n })\n );\n const request = {\n sceneViewId: {\n hex: this.sceneViewId,\n },\n operations: pbOperations,\n suppliedCorrelationId:\n executionOptions?.suppliedCorrelationId != null\n ? {\n value: executionOptions?.suppliedCorrelationId,\n }\n : undefined,\n };\n\n await this.stream.createSceneAlteration(request);\n }\n}\n\nexport type TerminalItemOperationBuilder =\n | SceneItemOperationsBuilder\n | SceneItemOperationsBuilder[];\n\nexport type ImageScaleProvider = () => Point.Point | undefined;\n\n/**\n * The features of a scene view state that can be applied to the current scene\n */\nexport type SceneViewStateFeature =\n | 'camera'\n | 'cross_section'\n | 'material_overrides'\n | 'selection'\n | 'transforms'\n | 'visibility';\n\n/**\n * A class that represents the `Scene` that has been loaded into the viewer. On\n * it, you can retrieve attributes of the scene, such as the camera. It also\n * contains methods for updating the scene and performing requests to rerender\n * the scene.\n */\nexport class Scene {\n public constructor(\n private stream: StreamApi,\n private frame: Frame,\n private decodeFrame: FrameDecoder,\n private imageScaleProvider: ImageScaleProvider,\n private dimensions: Dimensions.Dimensions,\n public readonly sceneId: UUID.UUID,\n public readonly sceneViewId: UUID.UUID\n ) {}\n\n /**\n * Applies the provided scene view state to the scene.\n */\n public async applySceneViewState(\n sceneViewStateId:\n | UUID.UUID\n | SceneViewStateIdentifier.SceneViewStateIdentifier,\n opts: SceneExecutionOptions = {}\n ): Promise<vertexvis.protobuf.stream.ILoadSceneViewStateResult | undefined> {\n const pbIdField = buildSceneViewStateIdentifier(sceneViewStateId);\n\n return await this.stream.loadSceneViewState(\n {\n ...pbIdField,\n frameCorrelationId: opts.suppliedCorrelationId\n ? { value: opts.suppliedCorrelationId }\n : undefined,\n },\n true\n );\n }\n\n /**\n * Applies the specified features of the provided scene view state to the scene.\n */\n public async applyPartialSceneViewState(\n sceneViewStateId:\n | UUID.UUID\n | SceneViewStateIdentifier.SceneViewStateIdentifier,\n featuresToApply: SceneViewStateFeature[],\n opts: SceneExecutionOptions = {}\n ): Promise<vertexvis.protobuf.stream.ILoadSceneViewStateResult | undefined> {\n const pbIdField = buildSceneViewStateIdentifier(sceneViewStateId);\n const pbFeatures = toPbSceneViewStateFeatures(featuresToApply);\n\n return await this.stream.loadSceneViewState(\n {\n ...pbIdField,\n frameCorrelationId: opts.suppliedCorrelationId\n ? { value: opts.suppliedCorrelationId }\n : undefined,\n sceneViewStateFeatureSubset: pbFeatures,\n },\n true\n );\n }\n\n /**\n * Resets the view to its default state, with the ability to reset the camera to that of the base scene.\n */\n public async reset(\n opts: ResetViewOptions = {}\n ): Promise<vertexvis.protobuf.stream.IResetViewResult | undefined> {\n return await this.stream.resetSceneView(\n {\n includeCamera: opts.includeCamera,\n frameCorrelationId: opts.suppliedCorrelationId\n ? { value: opts.suppliedCorrelationId }\n : undefined,\n },\n true\n );\n }\n\n /**\n * Returns an executor that accepts a function as a parameter that contains one or many operations to apply\n * to the scene view. The operations will be applied transactionally.\n * @param operations\n */\n public items(\n operations: (q: SceneItemQueryExecutor) => TerminalItemOperationBuilder\n ): ItemsOperationExecutor {\n const sceneOperations = operations(new SceneItemQueryExecutor());\n\n const ops = Array.isArray(sceneOperations)\n ? sceneOperations\n : [sceneOperations];\n const operationList = ops.reduce(\n (acc, builder: SceneItemOperationsBuilder) => acc.concat(builder.build()),\n [] as QueryOperation[]\n );\n return new ItemsOperationExecutor(\n this.sceneViewId,\n this.stream,\n this.dimensions,\n operationList\n );\n }\n\n /**\n * An instance of the current camera of the scene.\n */\n public camera(): Camera {\n const { scene } = this.frame;\n\n if (scene.camera.isOrthographic()) {\n return new OrthographicCamera(\n this.stream,\n Dimensions.aspectRatio(this.viewport()),\n {\n viewVector: scene.camera.viewVector,\n lookAt: scene.camera.lookAt,\n up: scene.camera.up,\n fovHeight: scene.camera.fovHeight,\n },\n this.frame.scene.boundingBox,\n this.decodeFrame\n );\n } else if (scene.camera.isPerspective()) {\n return new PerspectiveCamera(\n this.stream,\n Dimensions.aspectRatio(this.viewport()),\n {\n position: scene.camera.position,\n lookAt: scene.camera.lookAt,\n up: scene.camera.up,\n fovY: scene.camera.fovY,\n },\n this.frame.scene.boundingBox,\n this.decodeFrame\n );\n } else {\n throw new InvalidCameraError(\n 'Cannot retrieve camera. Scene has an unknown or invalid camera type.'\n );\n }\n }\n\n public boundingBox(): BoundingBox.BoundingBox {\n return this.frame.scene.boundingBox;\n }\n\n /**\n * CrossSectioner to update cross sectioning planes and get current configuration.\n */\n public crossSectioning(): CrossSectioner {\n return new CrossSectioner(this.stream, this.frame.scene.crossSection);\n }\n\n /**\n * Raycaster to request items that intersect a point.\n */\n public raycaster(): Raycaster {\n return new Raycaster(this.stream, this.imageScaleProvider);\n }\n\n /**\n * The current viewport of the scene, in pixels.\n */\n public viewport(): Dimensions.Dimensions {\n return this.frame.dimensions;\n }\n\n /**\n * The current x and y scale of the rendered image.\n */\n public scale(): Point.Point {\n return this.imageScaleProvider() || Point.create(1, 1);\n }\n}\n"],"version":3}
@@ -846,9 +846,7 @@ const SceneTreeTableLayout = class {
846
846
  async computeAndUpdateViewportRows() {
847
847
  var _a;
848
848
  this.computeViewportRows();
849
- if (((_a = this.controller) === null || _a === void 0 ? void 0 : _a.isConnected) &&
850
- this.viewportStartIndex >= 0 &&
851
- this.viewportEndIndex >= 0) {
849
+ if (((_a = this.controller) === null || _a === void 0 ? void 0 : _a.isConnected) && this.totalRows > 0) {
852
850
  await this.controller.updateActiveRowRange(this.viewportStartIndex, this.viewportEndIndex);
853
851
  }
854
852
  }