@vertexvis/viewer 0.12.0 → 0.13.0-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/dist/cjs/{config-acd7cea9.js → config-90ee43d5.js} +1 -1
  2. package/dist/cjs/{cursors-399a9648.js → cursors-ad2fd395.js} +7 -0
  3. package/dist/cjs/{controller-8cbcdd8d.js → entities-aa59890e.js} +57 -22
  4. package/dist/cjs/{index-cc65325e.js → index-e100709a.js} +64 -3
  5. package/dist/cjs/index.cjs.js +21 -11
  6. package/dist/cjs/loader.cjs.js +2 -2
  7. package/dist/cjs/{model-18ef3363.js → mapper-f6e6cafe.js} +37 -191
  8. package/dist/cjs/model-4ec0c36e.js +134 -0
  9. package/dist/cjs/overlays-8a582edf.js +76 -0
  10. package/dist/cjs/results-bc325974.js +24 -0
  11. package/dist/cjs/{scene-ffee07ee.js → scene-f4040800.js} +1 -1
  12. package/dist/cjs/{stencil-bd453a38.js → stencil-a664cd10.js} +1 -1
  13. package/dist/cjs/{streamAttributes-9d6226ac.js → streamAttributes-d6236448.js} +87 -30
  14. package/dist/cjs/vertex-scene-tree-search_3.cjs.entry.js +2 -2
  15. package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js +1 -1
  16. package/dist/cjs/vertex-scene-tree-table-column.cjs.entry.js +1 -1
  17. package/dist/cjs/vertex-scene-tree-table-header.cjs.entry.js +1 -1
  18. package/dist/cjs/vertex-scene-tree-table-resize-divider.cjs.entry.js +1 -1
  19. package/dist/cjs/vertex-scene-tree-toolbar-group.cjs.entry.js +1 -1
  20. package/dist/cjs/vertex-scene-tree.cjs.entry.js +3 -3
  21. package/dist/cjs/vertex-viewer-button_3.cjs.entry.js +1 -1
  22. package/dist/cjs/vertex-viewer-default-toolbar.cjs.entry.js +1 -1
  23. package/dist/cjs/vertex-viewer-dom-element_3.cjs.entry.js +4 -4
  24. package/dist/cjs/vertex-viewer-icon.cjs.entry.js +1 -1
  25. package/dist/cjs/vertex-viewer-layer.cjs.entry.js +1 -1
  26. package/dist/cjs/vertex-viewer-markup-arrow_3.cjs.entry.js +1 -1
  27. package/dist/cjs/vertex-viewer-markup-tool.cjs.entry.js +1 -1
  28. package/dist/cjs/vertex-viewer-markup.cjs.entry.js +1 -1
  29. package/dist/cjs/vertex-viewer-measurement-details.cjs.entry.js +221 -75
  30. package/dist/cjs/{vertex-viewer-measurement-distance_2.cjs.entry.js → vertex-viewer-measurement-distance.cjs.entry.js} +30 -69
  31. package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js +170 -0
  32. package/dist/cjs/vertex-viewer-measurement-precise.cjs.entry.js +163 -55
  33. package/dist/cjs/vertex-viewer-measurement-tool.cjs.entry.js +2 -2
  34. package/dist/cjs/vertex-viewer-measurements.cjs.entry.js +33 -4
  35. package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js +4 -4
  36. package/dist/cjs/vertex-viewer.cjs.entry.js +58 -10
  37. package/dist/cjs/viewer.cjs.js +2 -2
  38. package/dist/cjs/{viewport-51aa05ab.js → viewport-8c39089f.js} +11 -0
  39. package/dist/collection/collection-manifest.json +1 -0
  40. package/dist/collection/components/viewer/viewer.js +2 -2
  41. package/dist/collection/components/viewer-dom-renderer/viewer-dom-renderer.js +2 -2
  42. package/dist/collection/components/viewer-measurement-details/viewer-measurement-details-entry.js +14 -0
  43. package/dist/collection/components/viewer-measurement-details/viewer-measurement-details-results.js +22 -0
  44. package/dist/collection/components/viewer-measurement-details/viewer-measurement-details.css +3 -10
  45. package/dist/collection/components/viewer-measurement-details/viewer-measurement-details.js +125 -188
  46. package/dist/collection/components/viewer-measurement-distance/interactions.js +3 -14
  47. package/dist/collection/components/viewer-measurement-distance/viewer-measurement-distance.js +41 -1
  48. package/dist/collection/components/viewer-measurement-overlays/viewer-measurement-overlays-components.js +30 -0
  49. package/dist/collection/components/viewer-measurement-overlays/viewer-measurement-overlays.css +51 -0
  50. package/dist/collection/components/viewer-measurement-overlays/viewer-measurement-overlays.js +149 -0
  51. package/dist/collection/components/viewer-measurement-precise/viewer-measurement-precise.js +118 -26
  52. package/dist/collection/components/viewer-measurements/viewer-measurements.js +67 -2
  53. package/dist/collection/components/viewer-view-cube/viewer-view-cube.css +21 -3
  54. package/dist/collection/index.js +2 -2
  55. package/dist/collection/lib/cursors.js +7 -1
  56. package/dist/collection/lib/elementRectObserver.js +19 -0
  57. package/dist/collection/lib/interactions/interactionApi.js +53 -4
  58. package/dist/collection/lib/mappers/frameStreaming.js +2 -4
  59. package/dist/collection/lib/measurement/controller.js +21 -17
  60. package/dist/collection/lib/measurement/entities.js +34 -0
  61. package/dist/collection/lib/measurement/index.js +4 -2
  62. package/dist/collection/lib/measurement/interactions.js +74 -28
  63. package/dist/collection/lib/measurement/mapper.js +5 -5
  64. package/dist/collection/lib/measurement/model.js +24 -85
  65. package/dist/collection/lib/measurement/outcomes.js +2 -0
  66. package/dist/collection/lib/measurement/overlays.js +69 -0
  67. package/dist/collection/lib/measurement/results.js +17 -0
  68. package/dist/collection/lib/types/entities.js +5 -1
  69. package/dist/collection/lib/types/featureMap.js +14 -5
  70. package/dist/collection/lib/types/frame.js +3 -3
  71. package/dist/collection/lib/types/measurementUnits.js +7 -7
  72. package/dist/collection/lib/types/viewport.js +12 -1
  73. package/dist/collection/testing/eventually.js +30 -0
  74. package/dist/collection/testing/fixtures.js +11 -4
  75. package/dist/collection/testing/index.js +2 -1
  76. package/dist/custom-elements/index.d.ts +6 -0
  77. package/dist/custom-elements/index.js +851 -287
  78. package/dist/esm/{browser.esm-e6827921.js → browser.esm-59e914f6.js} +1 -1
  79. package/dist/esm/{bundle.esm-8f14ac60.js → bundle.esm-d899b2d5.js} +1 -1
  80. package/dist/esm/{config-a200c227.js → config-604c644e.js} +2 -2
  81. package/dist/esm/{cursors-5157d29d.js → cursors-a7ec4adb.js} +8 -2
  82. package/dist/esm/{dom-2d6a1e1e.js → dom-780d25be.js} +1 -1
  83. package/dist/esm/{controller-a756cf9c.js → entities-759d97cd.js} +52 -18
  84. package/dist/esm/{index-f0053642.js → index-10c1495a.js} +64 -3
  85. package/dist/esm/index.js +13 -11
  86. package/dist/esm/index.mjs +13 -11
  87. package/dist/esm/loader.js +2 -2
  88. package/dist/esm/loader.mjs +2 -2
  89. package/dist/esm/{model-f711a825.js → mapper-4b815e31.js} +37 -190
  90. package/dist/esm/{markup-e46623b3.js → markup-1d177b4a.js} +2 -2
  91. package/dist/esm/{measurement-702d6b8c.js → measurement-12cdbf5c.js} +2 -2
  92. package/dist/esm/model-e5a4f00f.js +132 -0
  93. package/dist/esm/overlays-dbe5d652.js +74 -0
  94. package/dist/esm/{png-decoder-59a0e9c2.js → png-decoder-3f1fa486.js} +1 -1
  95. package/dist/esm/results-994bdb50.js +22 -0
  96. package/dist/esm/{scene-16490983.js → scene-9ac8a484.js} +3 -3
  97. package/dist/esm/{stencil-7d04d41a.js → stencil-9bf7fb9e.js} +1 -1
  98. package/dist/esm/{streamAttributes-7aa486b2.js → streamAttributes-d623bb60.js} +77 -20
  99. package/dist/esm/{utils-8070900a.js → utils-01e4f587.js} +1 -1
  100. package/dist/esm/{utils-953a1619.js → utils-5e57bf24.js} +1 -1
  101. package/dist/esm/vertex-scene-tree-search_3.entry.js +3 -3
  102. package/dist/esm/vertex-scene-tree-table-cell.entry.js +1 -1
  103. package/dist/esm/vertex-scene-tree-table-column.entry.js +1 -1
  104. package/dist/esm/vertex-scene-tree-table-header.entry.js +1 -1
  105. package/dist/esm/vertex-scene-tree-table-resize-divider.entry.js +1 -1
  106. package/dist/esm/vertex-scene-tree-toolbar-group.entry.js +1 -1
  107. package/dist/esm/vertex-scene-tree.entry.js +5 -5
  108. package/dist/esm/vertex-viewer-button_3.entry.js +1 -1
  109. package/dist/esm/vertex-viewer-default-toolbar.entry.js +1 -1
  110. package/dist/esm/vertex-viewer-dom-element_3.entry.js +6 -6
  111. package/dist/esm/vertex-viewer-icon.entry.js +1 -1
  112. package/dist/esm/vertex-viewer-layer.entry.js +1 -1
  113. package/dist/esm/vertex-viewer-markup-arrow_3.entry.js +4 -4
  114. package/dist/esm/vertex-viewer-markup-tool.entry.js +5 -5
  115. package/dist/esm/vertex-viewer-markup.entry.js +5 -5
  116. package/dist/esm/vertex-viewer-measurement-details.entry.js +221 -75
  117. package/dist/esm/{vertex-viewer-measurement-distance_2.entry.js → vertex-viewer-measurement-distance.entry.js} +35 -73
  118. package/dist/esm/vertex-viewer-measurement-line_2.entry.js +165 -0
  119. package/dist/esm/vertex-viewer-measurement-precise.entry.js +160 -52
  120. package/dist/esm/vertex-viewer-measurement-tool.entry.js +6 -6
  121. package/dist/esm/vertex-viewer-measurements.entry.js +36 -7
  122. package/dist/esm/vertex-viewer-view-cube.entry.js +6 -6
  123. package/dist/esm/vertex-viewer.entry.js +61 -13
  124. package/dist/esm/viewer.js +2 -2
  125. package/dist/esm/{viewport-bb7c46d9.js → viewport-01c886ea.js} +12 -1
  126. package/dist/types/components/viewer-dom-renderer/viewer-dom-renderer.d.ts +1 -1
  127. package/dist/types/components/viewer-measurement-details/viewer-measurement-details-entry.d.ts +8 -0
  128. package/dist/types/components/viewer-measurement-details/viewer-measurement-details-results.d.ts +15 -0
  129. package/dist/types/components/viewer-measurement-details/viewer-measurement-details.d.ts +44 -42
  130. package/dist/types/components/viewer-measurement-distance/interactions.d.ts +23 -1
  131. package/dist/types/components/viewer-measurement-distance/viewer-measurement-distance.d.ts +8 -0
  132. package/dist/types/components/viewer-measurement-overlays/viewer-measurement-overlays-components.d.ts +10 -0
  133. package/dist/types/components/viewer-measurement-overlays/viewer-measurement-overlays.d.ts +41 -0
  134. package/dist/types/components/viewer-measurement-precise/viewer-measurement-precise.d.ts +62 -6
  135. package/dist/types/components/viewer-measurements/viewer-measurements.d.ts +12 -0
  136. package/dist/types/components.d.ts +103 -40
  137. package/dist/types/index.d.ts +1 -1
  138. package/dist/types/lib/cursors.d.ts +5 -0
  139. package/dist/types/lib/elementRectObserver.d.ts +8 -0
  140. package/dist/types/lib/interactions/interactionApi.d.ts +32 -5
  141. package/dist/types/lib/measurement/controller.d.ts +8 -7
  142. package/dist/types/lib/measurement/entities.d.ts +10 -0
  143. package/dist/types/lib/measurement/index.d.ts +3 -1
  144. package/dist/types/lib/measurement/interactions.d.ts +19 -5
  145. package/dist/types/lib/measurement/mapper.d.ts +1 -1
  146. package/dist/types/lib/measurement/model.d.ts +18 -153
  147. package/dist/types/lib/measurement/outcomes.d.ts +8 -0
  148. package/dist/types/lib/measurement/overlays.d.ts +38 -0
  149. package/dist/types/lib/measurement/results.d.ts +90 -0
  150. package/dist/types/lib/types/entities.d.ts +5 -1
  151. package/dist/types/lib/types/featureMap.d.ts +2 -2
  152. package/dist/types/lib/types/measurementUnits.d.ts +1 -1
  153. package/dist/types/lib/types/viewport.d.ts +9 -1
  154. package/dist/types/testing/eventually.d.ts +15 -0
  155. package/dist/types/testing/fixtures.d.ts +2 -2
  156. package/dist/types/testing/index.d.ts +1 -0
  157. package/dist/viewer/index.esm.js +1 -1
  158. package/dist/viewer/p-081e6873.js +4 -0
  159. package/dist/viewer/{p-5d82c131.entry.js → p-099fe6ca.entry.js} +1 -1
  160. package/dist/viewer/{p-784914e4.js → p-0aba71fd.js} +1 -1
  161. package/dist/viewer/p-0aeab3fc.js +4 -0
  162. package/dist/viewer/p-0eb195dd.entry.js +4 -0
  163. package/dist/viewer/p-1a7df99a.entry.js +4 -0
  164. package/dist/viewer/{p-f70d8def.js → p-301660cf.js} +1 -1
  165. package/dist/viewer/{p-a0e49d10.entry.js → p-31658489.entry.js} +1 -1
  166. package/dist/viewer/{p-95f3a81c.entry.js → p-353cfc7a.entry.js} +1 -1
  167. package/dist/viewer/p-364ce21c.js +4 -0
  168. package/dist/viewer/{p-a5a0bf86.js → p-3f6ac74f.js} +1 -1
  169. package/dist/viewer/p-423410be.js +4 -0
  170. package/dist/viewer/{p-6f71f0f2.js → p-439220c6.js} +1 -1
  171. package/dist/viewer/{p-e84ed098.entry.js → p-46459921.entry.js} +1 -1
  172. package/dist/viewer/{p-c23a8b34.entry.js → p-4717c98e.entry.js} +1 -1
  173. package/dist/viewer/p-4985fad5.js +4 -0
  174. package/dist/viewer/{p-ba393340.entry.js → p-61b1097b.entry.js} +1 -1
  175. package/dist/viewer/{p-011eecd5.entry.js → p-6370098c.entry.js} +1 -1
  176. package/dist/viewer/p-67446e35.js +4 -0
  177. package/dist/viewer/p-7006fd4e.entry.js +4 -0
  178. package/dist/viewer/{p-a20e4ea1.entry.js → p-70ca1ea7.entry.js} +1 -1
  179. package/dist/viewer/p-76ec0245.js +4 -0
  180. package/dist/viewer/p-7cad9bf4.js +4 -0
  181. package/dist/viewer/p-7f25dcb5.entry.js +4 -0
  182. package/dist/viewer/{p-ca6bbe53.entry.js → p-8decee06.entry.js} +1 -1
  183. package/dist/viewer/{p-b7ffa306.entry.js → p-915d95ad.entry.js} +1 -1
  184. package/dist/viewer/{p-4485ac6d.js → p-a0df0e0c.js} +1 -1
  185. package/dist/viewer/{p-cc9888be.entry.js → p-a455ae02.entry.js} +1 -1
  186. package/dist/viewer/{p-a6a8026f.js → p-acf22d3e.js} +1 -1
  187. package/dist/viewer/{p-653aca1b.entry.js → p-b2b48a42.entry.js} +1 -1
  188. package/dist/viewer/p-bc9b1e67.entry.js +4 -0
  189. package/dist/viewer/p-c458f191.entry.js +32 -0
  190. package/dist/viewer/p-cafa57a6.js +4 -0
  191. package/dist/viewer/p-d00e9203.js +4 -0
  192. package/dist/viewer/{p-3e96bd62.entry.js → p-d2bcf788.entry.js} +1 -1
  193. package/dist/viewer/p-d90f2f6d.entry.js +4 -0
  194. package/dist/viewer/p-da2f4a56.js +4 -0
  195. package/dist/viewer/{p-5a2e34e1.entry.js → p-e07377fa.entry.js} +1 -1
  196. package/dist/viewer/{p-40800e8d.entry.js → p-f755af5a.entry.js} +1 -1
  197. package/dist/viewer/p-f7cb7e59.js +4 -0
  198. package/dist/viewer/p-fad9693e.js +4 -0
  199. package/dist/viewer/p-fe11d694.js +4 -0
  200. package/dist/viewer/{p-b92a3ac2.entry.js → p-fec1a8d0.entry.js} +1 -1
  201. package/dist/viewer/viewer.css +1 -1
  202. package/dist/viewer/viewer.esm.js +1 -1
  203. package/package.json +11 -10
  204. package/dist/cjs/summary-7bbdb4c9.js +0 -45
  205. package/dist/collection/lib/measurement/summary.js +0 -38
  206. package/dist/esm/summary-0a3d0bf9.js +0 -43
  207. package/dist/types/lib/measurement/summary.d.ts +0 -11
  208. package/dist/viewer/p-03e482ff.js +0 -4
  209. package/dist/viewer/p-0c052bc8.entry.js +0 -4
  210. package/dist/viewer/p-148cd792.js +0 -4
  211. package/dist/viewer/p-26d99e2d.entry.js +0 -4
  212. package/dist/viewer/p-38eeacc5.js +0 -4
  213. package/dist/viewer/p-39d1720c.js +0 -4
  214. package/dist/viewer/p-5dc17b8b.js +0 -4
  215. package/dist/viewer/p-5fea3491.js +0 -4
  216. package/dist/viewer/p-6b700561.entry.js +0 -4
  217. package/dist/viewer/p-6cd7a6e0.js +0 -4
  218. package/dist/viewer/p-75337d0b.js +0 -4
  219. package/dist/viewer/p-b83cc8a9.js +0 -4
  220. package/dist/viewer/p-d2a9e047.js +0 -4
  221. package/dist/viewer/p-d40bd835.entry.js +0 -4
  222. package/dist/viewer/p-e10b1526.js +0 -4
  223. package/dist/viewer/p-ec8a1a68.entry.js +0 -4
  224. package/dist/viewer/p-f4a8c901.js +0 -4
  225. package/dist/viewer/p-f77dde26.entry.js +0 -4
@@ -0,0 +1,170 @@
1
+ /**!
2
+ * Copyright (c) 2022 Vertex Software LLC. All rights reserved.
3
+ */
4
+ 'use strict';
5
+
6
+ Object.defineProperty(exports, '__esModule', { value: true });
7
+
8
+ const index = require('./index-e100709a.js');
9
+ const bundle_esm = require('./bundle.esm-dc0a8361.js');
10
+ require('./mapper-f6e6cafe.js');
11
+ require('./grpc-web-client.umd-60a79aae.js');
12
+ require('./streamAttributes-d6236448.js');
13
+ const overlays = require('./overlays-8a582edf.js');
14
+ require('./_commonjsHelpers-537d719a.js');
15
+ require('./browser.esm-31b03292.js');
16
+
17
+ const viewerMeasurementLineCss = ":host{display:block;--viewer-measurement-line-stroke:var(--white);--viewer-measurement-line-stroke-opacity:0.75;--viewer-measurement-line-stroke-width:1.25px;--viewer-measurement-line-fill:var(--neutral-900);--viewer-measurement-line-fill-width:2px;--viewer-measurement-line-start-cap-visibility:initial;--viewer-measurement-line-end-cap-visibility:initial}svg{width:100%;height:100%}.line-stroke{stroke-width:calc(\n var(--viewer-measurement-line-fill-width) +\n var(--viewer-measurement-line-stroke-width)\n );stroke:var(--viewer-measurement-line-stroke);opacity:var(--viewer-measurement-line-stroke-opacity)}.line-fill{stroke-width:var(--viewer-measurement-line-fill-width);stroke:var(--viewer-measurement-line-fill)}.start-cap{visibility:var(--viewer-measurement-line-start-cap-visibility)}.end-cap{visibility:var(--viewer-measurement-line-end-cap-visibility)}";
18
+
19
+ let ViewerMeasurementLine = class {
20
+ constructor(hostRef) {
21
+ index.registerInstance(this, hostRef);
22
+ /**
23
+ * A point that specifies the starting point of the line.
24
+ */
25
+ this.start = bundle_esm.point.create();
26
+ /**
27
+ * A point that specifies the ending point of the line.
28
+ */
29
+ this.end = bundle_esm.point.create();
30
+ /**
31
+ * A length of the line cap. The line cap is a line at each end of a line.
32
+ */
33
+ this.capLength = 0;
34
+ /**
35
+ * The type of [SVG pointer
36
+ * events](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/pointer-events)
37
+ * that the line should respond to.
38
+ */
39
+ this.pointerEvents = 'none';
40
+ }
41
+ /**
42
+ * @ignore
43
+ */
44
+ render() {
45
+ const angle = bundle_esm.angle.fromPoints(this.start, this.end);
46
+ const lineFillEndCaps = getEndCapPoints(this.start, this.end, angle, this.capLength);
47
+ const lineStrokeEndCaps = getEndCapPoints(this.start, this.end, angle, this.capLength + 1);
48
+ return (index.h("svg", null, index.h("g", { class: "line-stroke", "pointer-events": this.pointerEvents }, index.h("line", { class: "line", x1: this.start.x, y1: this.start.y, x2: this.end.x, y2: this.end.y }), index.h("line", { class: "start-cap", x1: lineStrokeEndCaps.startEndCap.start.x, y1: lineStrokeEndCaps.startEndCap.start.y, x2: lineStrokeEndCaps.startEndCap.end.x, y2: lineStrokeEndCaps.startEndCap.end.y }), index.h("line", { class: "end-cap", x1: lineStrokeEndCaps.endEndCap.start.x, y1: lineStrokeEndCaps.endEndCap.start.y, x2: lineStrokeEndCaps.endEndCap.end.x, y2: lineStrokeEndCaps.endEndCap.end.y })), index.h("g", { class: "line-fill", "pointer-events": this.pointerEvents }, index.h("line", { class: "line", x1: this.start.x, y1: this.start.y, x2: this.end.x, y2: this.end.y }), index.h("line", { class: "start-cap", x1: lineFillEndCaps.startEndCap.start.x, y1: lineFillEndCaps.startEndCap.start.y, x2: lineFillEndCaps.startEndCap.end.x, y2: lineFillEndCaps.startEndCap.end.y }), index.h("line", { class: "end-cap", x1: lineFillEndCaps.endEndCap.start.x, y1: lineFillEndCaps.endEndCap.start.y, x2: lineFillEndCaps.endEndCap.end.x, y2: lineFillEndCaps.endEndCap.end.y }))));
49
+ }
50
+ };
51
+ function getEndCapPoints(start, end, angle, length) {
52
+ return {
53
+ startEndCap: getPerpendicularLine(start, angle, length),
54
+ endEndCap: getPerpendicularLine(end, angle, length),
55
+ };
56
+ }
57
+ function getPerpendicularLine(pt, angle, length) {
58
+ const perpAngle = angle + Math.PI / 2;
59
+ const start = bundle_esm.point.add(pt, bundle_esm.point.polar(length / 2, perpAngle));
60
+ const end = bundle_esm.point.add(pt, bundle_esm.point.polar(length / 2, perpAngle + Math.PI));
61
+ return { start, end };
62
+ }
63
+ ViewerMeasurementLine.style = viewerMeasurementLineCss;
64
+
65
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
66
+ const MeasurementOverlayView = ({ overlay, viewport, camera }) => {
67
+ if (overlay.type === 'line') {
68
+ return (index.h(LineOverlayView, { overlay: overlay, viewport: viewport, camera: camera }));
69
+ }
70
+ else {
71
+ return (index.h(DistanceVectorOverlayView, { overlay: overlay, viewport: viewport, camera: camera }));
72
+ }
73
+ };
74
+ const LineOverlayView = ({ overlay: { start, end }, camera, viewport }) => {
75
+ const m = camera.projectionViewMatrix;
76
+ const sw = viewport.transformWorldToViewport(start, m);
77
+ const ew = viewport.transformWorldToViewport(end, m);
78
+ return (index.h("vertex-viewer-measurement-line", { class: "measurement-line", start: sw, end: ew }));
79
+ };
80
+ const DistanceVectorOverlayView = ({ overlay: { x, y, z }, camera, viewport }) => {
81
+ const m = camera.projectionViewMatrix;
82
+ const xs = viewport.transformWorldToViewport(x.start, m);
83
+ const xe = viewport.transformWorldToViewport(x.end, m);
84
+ const ys = viewport.transformWorldToViewport(y.start, m);
85
+ const ye = viewport.transformWorldToViewport(y.end, m);
86
+ const zs = viewport.transformWorldToViewport(z.start, m);
87
+ const ze = viewport.transformWorldToViewport(z.end, m);
88
+ return (index.h(index.Fragment, null,
89
+ index.h("vertex-viewer-measurement-line", { class: "measurement-line distance-vector-x", start: xs, end: xe }),
90
+ index.h("vertex-viewer-measurement-line", { class: "measurement-line distance-vector-y", start: ys, end: ye }),
91
+ index.h("vertex-viewer-measurement-line", { class: "measurement-line distance-vector-z", start: zs, end: ze })));
92
+ };
93
+
94
+ const viewerMeasurementOverlaysCss = ":host{display:block;position:absolute;top:0;bottom:0;left:0;right:0;pointer-events:none;--viewer-measurement-overlays-x-axis-color:var(--x-axis-color);--viewer-measurement-overlays-y-axis-color:var(--y-axis-color);--viewer-measurement-overlays-z-axis-color:var(--z-axis-color)}.measurement-line{position:absolute;width:100%;height:100%}.measurement-line.distance-vector-x{--viewer-measurement-line-fill:var(\n --viewer-measurement-overlays-x-axis-color\n )}.measurement-line.distance-vector-y{--viewer-measurement-line-fill:var(\n --viewer-measurement-overlays-y-axis-color\n )}.measurement-line.distance-vector-z{--viewer-measurement-line-fill:var(\n --viewer-measurement-overlays-z-axis-color\n )}";
95
+
96
+ let ViewerMeasurementOverlays = class {
97
+ constructor(hostRef) {
98
+ index.registerInstance(this, hostRef);
99
+ /**
100
+ * The model that contains the overlays to present.
101
+ */
102
+ this.measurementOverlays = new overlays.MeasurementOverlayManager();
103
+ this.overlays = [];
104
+ this.updateCamera = () => {
105
+ var _a, _b;
106
+ this.camera = (_b = (_a = this.viewer) === null || _a === void 0 ? void 0 : _a.frame) === null || _b === void 0 ? void 0 : _b.scene.camera;
107
+ };
108
+ }
109
+ /**
110
+ * @ignore
111
+ */
112
+ handleMeasurementOverlaysChanged() {
113
+ this.removeModelListeners();
114
+ this.addModelListeners();
115
+ this.updateOverlays();
116
+ }
117
+ /**
118
+ * @ignore
119
+ */
120
+ handleViewerChanged(newViewer, oldViewer) {
121
+ this.removeViewerListeners(oldViewer);
122
+ this.addViewerListeners();
123
+ this.updateCamera();
124
+ }
125
+ /**
126
+ * @ignore
127
+ */
128
+ componentWillLoad() {
129
+ this.addModelListeners();
130
+ this.addViewerListeners();
131
+ this.updateOverlays();
132
+ this.updateCamera();
133
+ }
134
+ addModelListeners() {
135
+ this.onOverlaysChangedListener = this.measurementOverlays.onOverlaysChanged(() => this.updateOverlays());
136
+ }
137
+ removeModelListeners() {
138
+ var _a;
139
+ (_a = this.onOverlaysChangedListener) === null || _a === void 0 ? void 0 : _a.dispose();
140
+ this.onOverlaysChangedListener = undefined;
141
+ }
142
+ addViewerListeners() {
143
+ var _a;
144
+ (_a = this.viewer) === null || _a === void 0 ? void 0 : _a.addEventListener('frameReceived', this.updateCamera);
145
+ }
146
+ removeViewerListeners(viewer) {
147
+ viewer === null || viewer === void 0 ? void 0 : viewer.removeEventListener('frameReceived', this.updateCamera);
148
+ }
149
+ updateOverlays() {
150
+ this.overlays = this.measurementOverlays.getOverlays();
151
+ }
152
+ /**
153
+ * @ignore
154
+ */
155
+ render() {
156
+ return (index.h(index.Host, null, this.overlays.map((overlay) => {
157
+ if (this.camera != null && this.viewer != null) {
158
+ return (index.h(MeasurementOverlayView, { overlay: overlay, viewport: this.viewer.viewport, camera: this.camera }));
159
+ }
160
+ })));
161
+ }
162
+ static get watchers() { return {
163
+ "measurementOverlays": ["handleMeasurementOverlaysChanged"],
164
+ "viewer": ["handleViewerChanged"]
165
+ }; }
166
+ };
167
+ ViewerMeasurementOverlays.style = viewerMeasurementOverlaysCss;
168
+
169
+ exports.vertex_viewer_measurement_line = ViewerMeasurementLine;
170
+ exports.vertex_viewer_measurement_overlays = ViewerMeasurementOverlays;
@@ -5,17 +5,19 @@
5
5
 
6
6
  Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
- const index = require('./index-cc65325e.js');
9
- const model = require('./model-18ef3363.js');
8
+ const index = require('./index-e100709a.js');
9
+ const mapper = require('./mapper-f6e6cafe.js');
10
10
  const grpcWebClient_umd = require('./grpc-web-client.umd-60a79aae.js');
11
- const config = require('./config-acd7cea9.js');
12
- const controller = require('./controller-8cbcdd8d.js');
11
+ const config = require('./config-90ee43d5.js');
12
+ const entities = require('./entities-aa59890e.js');
13
+ const streamAttributes = require('./streamAttributes-d6236448.js');
14
+ const model = require('./model-4ec0c36e.js');
15
+ const overlays = require('./overlays-8a582edf.js');
13
16
  const bundle_esm = require('./bundle.esm-dc0a8361.js');
14
- require('./cursors-399a9648.js');
15
- require('./streamAttributes-9d6226ac.js');
17
+ const cursors = require('./cursors-ad2fd395.js');
16
18
  const dom = require('./dom-dd265f48.js');
17
- require('./browser.esm-31b03292.js');
18
19
  require('./_commonjsHelpers-537d719a.js');
20
+ require('./browser.esm-31b03292.js');
19
21
 
20
22
  // package: vertexvis.protobuf.sceneview.v1
21
23
  // file: sceneview/protos/scene_view_api.proto
@@ -34,8 +36,8 @@ SceneViewAPI.UpdateModelEntities = {
34
36
  service: SceneViewAPI,
35
37
  requestStream: false,
36
38
  responseStream: false,
37
- requestType: model.scene_view_api_pb.UpdateModelEntitiesRequest,
38
- responseType: model.scene_view_api_pb.UpdateModelEntitiesResponse
39
+ requestType: mapper.scene_view_api_pb.UpdateModelEntitiesRequest,
40
+ responseType: mapper.scene_view_api_pb.UpdateModelEntitiesResponse
39
41
  };
40
42
 
41
43
  SceneViewAPI.Measure = {
@@ -43,8 +45,8 @@ SceneViewAPI.Measure = {
43
45
  service: SceneViewAPI,
44
46
  requestStream: false,
45
47
  responseStream: false,
46
- requestType: model.scene_view_api_pb.MeasureRequest,
47
- responseType: model.scene_view_api_pb.MeasureResponse
48
+ requestType: mapper.scene_view_api_pb.MeasureRequest,
49
+ responseType: mapper.scene_view_api_pb.MeasureResponse
48
50
  };
49
51
 
50
52
  function SceneViewAPIClient(serviceHost, options) {
@@ -116,59 +118,122 @@ SceneViewAPIClient.prototype.measure = function measure(requestMessage, metadata
116
118
 
117
119
  var SceneViewAPIClient_1 = SceneViewAPIClient;
118
120
 
119
- class PreciseMeasurementInteractionHandler {
120
- constructor(controller) {
121
+ class ElementRectObserver {
122
+ constructor() {
123
+ this.observer = new ResizeObserver(() => this.measure());
124
+ }
125
+ observe(element) {
126
+ this.element = element;
127
+ this.observer.observe(element);
128
+ this.measure();
129
+ }
130
+ disconnect() {
131
+ this.element = undefined;
132
+ this.observer.disconnect();
133
+ }
134
+ measure() {
135
+ var _a;
136
+ this.rect = (_a = this.element) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
137
+ }
138
+ }
139
+
140
+ class MeasurementInteractionHandler {
141
+ constructor(controller, measurableEntityTypes) {
142
+ this.rectObserver = new ElementRectObserver();
143
+ this.handlePointerMove = async (event) => {
144
+ if (await this.isMeasurableEntityUnderPointer(event)) {
145
+ this.clearCursor();
146
+ this.addCursor(cursors.measurementWithArrowCursor);
147
+ }
148
+ else {
149
+ this.clearCursor();
150
+ }
151
+ };
121
152
  this.handlePointerDown = (event) => {
122
- this.ifNoInteraction(event, () => {
123
- this.ifInitialized(async ({ element, api }) => {
124
- const pt = dom.getMouseClientPosition(event, element.getBoundingClientRect());
125
- const [hit] = await api.hitItems(pt);
126
- if (hit != null) {
127
- this.controller.addEntity(model.MeasurementEntity.fromHit(hit));
128
- }
129
- else {
130
- this.controller.clearEntities();
131
- }
132
- });
153
+ this.ifNoInteraction(event, async () => {
154
+ if (await this.isMeasurableEntityUnderPointer(event)) {
155
+ this.measureEntityUnderPointer(event);
156
+ }
157
+ else {
158
+ this.controller.clearEntities();
159
+ }
133
160
  });
134
161
  };
135
162
  this.controller = controller;
163
+ this.measurableEntityTypes = measurableEntityTypes;
164
+ }
165
+ get elementRect() {
166
+ return this.rectObserver.rect;
136
167
  }
137
168
  initialize(element, api) {
138
169
  this.element = element;
139
170
  this.api = api;
171
+ this.rectObserver.observe(element);
172
+ element.addEventListener('pointermove', this.handlePointerMove);
140
173
  element.addEventListener('pointerdown', this.handlePointerDown);
141
174
  }
142
175
  dispose() {
176
+ var _a, _b, _c;
177
+ this.rectObserver.disconnect();
178
+ (_a = this.measurementInteraction) === null || _a === void 0 ? void 0 : _a.dispose();
179
+ this.clearCursor();
180
+ (_b = this.element) === null || _b === void 0 ? void 0 : _b.removeEventListener('pointermove', this.handlePointerMove);
181
+ (_c = this.element) === null || _c === void 0 ? void 0 : _c.removeEventListener('pointerdown', this.handlePointerDown);
182
+ this.element = undefined;
183
+ this.api = undefined;
184
+ }
185
+ addCursor(cursor) {
186
+ this.cursor = this.ifInitialized(({ api }) => api.addCursor(cursor));
187
+ }
188
+ clearCursor() {
143
189
  var _a;
144
- (_a = this.element) === null || _a === void 0 ? void 0 : _a.removeEventListener('pointerdown', this.handlePointerDown);
190
+ (_a = this.cursor) === null || _a === void 0 ? void 0 : _a.dispose();
191
+ this.cursor = undefined;
192
+ }
193
+ async isMeasurableEntityUnderPointer(event) {
194
+ var _a;
195
+ const pt = dom.getMouseClientPosition(event, this.elementRect);
196
+ const type = await ((_a = this.api) === null || _a === void 0 ? void 0 : _a.getEntityTypeAtPoint(pt));
197
+ return type != null && this.measurableEntityTypes.includes(type);
198
+ }
199
+ measureEntityUnderPointer(event) {
200
+ this.ifInitialized(async ({ api }) => {
201
+ const pt = dom.getMouseClientPosition(event, this.elementRect);
202
+ const [hit] = await api.hitItems(pt);
203
+ if (hit != null) {
204
+ this.controller.addEntity(entities.MeasurementEntity.fromHit(hit));
205
+ }
206
+ else {
207
+ this.controller.clearEntities();
208
+ }
209
+ });
210
+ }
211
+ ifInitialized(f) {
212
+ if (this.element != null && this.api != null) {
213
+ return f({ element: this.element, api: this.api });
214
+ }
215
+ else {
216
+ throw new Error('Measurement interaction handler not initialized.');
217
+ }
145
218
  }
146
219
  ifNoInteraction(event, f) {
147
220
  const startPos = bundle_esm.point.create(event.clientX, event.clientY);
148
221
  let didInteract = false;
149
- function handleMouseMove(event) {
222
+ const handleMouseMove = (event) => {
150
223
  const pos = bundle_esm.point.create(event.clientX, event.clientY);
151
224
  const dis = bundle_esm.point.distance(startPos, pos);
152
225
  didInteract = dis > 2;
153
- }
154
- function handleMouseUp() {
226
+ };
227
+ const handleMouseUp = () => {
155
228
  window.removeEventListener('pointermove', handleMouseMove);
156
229
  window.removeEventListener('pointerup', handleMouseUp);
157
230
  if (!didInteract) {
158
231
  f();
159
232
  }
160
- }
233
+ };
161
234
  window.addEventListener('pointermove', handleMouseMove);
162
235
  window.addEventListener('pointerup', handleMouseUp);
163
236
  }
164
- ifInitialized(f) {
165
- if (this.element != null && this.api != null) {
166
- return f({ element: this.element, api: this.api });
167
- }
168
- else {
169
- throw new Error('Measurement interaction handler not initialized');
170
- }
171
- }
172
237
  }
173
238
 
174
239
  const viewerMeasurementPreciseCss = ":host{display:block;position:absolute;top:0;bottom:0;left:0;right:0;pointer-events:none}";
@@ -176,42 +241,86 @@ const viewerMeasurementPreciseCss = ":host{display:block;position:absolute;top:0
176
241
  let ViewerMeasurementPrecise = class {
177
242
  constructor(hostRef) {
178
243
  index.registerInstance(this, hostRef);
244
+ /**
245
+ * The model that contains the entities and outcomes from performing precise
246
+ * measurements.
247
+ */
179
248
  this.measurementModel = new model.MeasurementModel();
249
+ /**
250
+ * The manager that is responsible for measurement overlays to present by this
251
+ * component.
252
+ */
253
+ this.measurementOverlays = new overlays.MeasurementOverlayManager();
254
+ /**
255
+ * @internal
256
+ *
257
+ * An internal property that can be used to opt-in to performing measurements
258
+ * on other types of entities.
259
+ */
260
+ this.measurableEntityTypes = [streamAttributes.EntityType.PRECISE_SURFACE];
261
+ /**
262
+ * The environment that will be used to request measurement results.
263
+ */
180
264
  this.configEnv = 'platprod';
181
- this.entities = [];
182
- this.handleEntitiesChanged = () => {
183
- this.updateEntities();
184
- };
265
+ this.overlays = [];
185
266
  }
267
+ /**
268
+ * @ignore
269
+ */
186
270
  connectedCallback() {
187
271
  this.setupInteractionHandler();
188
272
  }
273
+ /**
274
+ * @ignore
275
+ */
189
276
  componentWillLoad() {
190
277
  this.setupController();
191
- this.setupInteractionHandler();
192
278
  this.setupModelListeners();
279
+ this.setupInteractionHandler();
193
280
  }
281
+ /**
282
+ * @ignore
283
+ */
194
284
  disconnectedCallback() {
195
285
  this.clearInteractionHandler();
286
+ this.clearModelListeners();
287
+ }
288
+ /**
289
+ * @ignore
290
+ */
291
+ handleMeasurableEntityTypesChanged() {
292
+ this.setupInteractionHandler();
196
293
  }
294
+ /**
295
+ * @ignore
296
+ */
197
297
  handleMeasurementControllerChanged() {
198
298
  this.setupInteractionHandler();
199
299
  }
300
+ /**
301
+ * @ignore
302
+ */
200
303
  handleMeasurementModelChanged() {
201
304
  this.setupController();
202
305
  this.setupModelListeners();
203
306
  }
307
+ /**
308
+ * @ignore
309
+ */
204
310
  handleViewerChanged() {
205
311
  this.setupInteractionHandler();
206
312
  }
313
+ /**
314
+ * @ignore
315
+ */
207
316
  render() {
208
- return index.h(index.Host, null);
317
+ return (index.h(index.Host, null, index.h("vertex-viewer-measurement-overlays", { viewer: this.viewer, measurementOverlays: this.measurementOverlays })));
209
318
  }
210
319
  setupController() {
211
320
  var _a;
212
321
  const config$1 = config.parseConfig(this.configEnv, this.config);
213
322
  const client = new SceneViewAPIClient_1(config$1.network.sceneViewHost);
214
- this.measurementController = new controller.MeasurementController(this.measurementModel, client, () => { var _a; return (_a = this.viewer) === null || _a === void 0 ? void 0 : _a.token; }, (_a = this.viewer) === null || _a === void 0 ? void 0 : _a.deviceId);
323
+ this.measurementController = new entities.MeasurementController(this.measurementModel, client, () => { var _a; return (_a = this.viewer) === null || _a === void 0 ? void 0 : _a.token; }, (_a = this.viewer) === null || _a === void 0 ? void 0 : _a.deviceId);
215
324
  }
216
325
  clearInteractionHandler() {
217
326
  var _a;
@@ -223,24 +332,23 @@ let ViewerMeasurementPrecise = class {
223
332
  this.clearInteractionHandler();
224
333
  if (this.measurementController != null) {
225
334
  this.registeredInteractionHandler =
226
- (_a = this.viewer) === null || _a === void 0 ? void 0 : _a.registerInteractionHandler(new PreciseMeasurementInteractionHandler(this.measurementController));
335
+ (_a = this.viewer) === null || _a === void 0 ? void 0 : _a.registerInteractionHandler(new MeasurementInteractionHandler(this.measurementController, this.measurableEntityTypes));
227
336
  }
228
337
  }
229
338
  clearModelListeners() {
230
- var _a;
231
- (_a = this.onEntitiesChangedDisposable) === null || _a === void 0 ? void 0 : _a.dispose();
232
- this.onEntitiesChangedDisposable = undefined;
339
+ var _a, _b;
340
+ (_a = this.onEntitiesChangedHandler) === null || _a === void 0 ? void 0 : _a.dispose();
341
+ this.onEntitiesChangedHandler = undefined;
342
+ (_b = this.onOverlaysChangedHandler) === null || _b === void 0 ? void 0 : _b.dispose();
343
+ this.onOverlaysChangedHandler = undefined;
233
344
  }
234
345
  setupModelListeners() {
235
- var _a;
236
- this.clearModelListeners();
237
- this.onEntitiesChangedDisposable = (_a = this.measurementModel) === null || _a === void 0 ? void 0 : _a.onEntitiesChanged(this.handleEntitiesChanged);
238
- }
239
- updateEntities() {
240
- var _a, _b;
241
- this.entities = (_b = (_a = this.measurementModel) === null || _a === void 0 ? void 0 : _a.getEntities()) !== null && _b !== void 0 ? _b : [];
346
+ this.onOverlaysChangedHandler = this.measurementOverlays.onOverlaysChanged((overlays) => {
347
+ this.overlays = overlays;
348
+ });
242
349
  }
243
350
  static get watchers() { return {
351
+ "measurableEntityTypes": ["handleMeasurableEntityTypesChanged"],
244
352
  "measurementController": ["handleMeasurementControllerChanged"],
245
353
  "measurementModel": ["handleMeasurementModelChanged"],
246
354
  "viewer": ["handleViewerChanged"]
@@ -5,10 +5,10 @@
5
5
 
6
6
  Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
- const index = require('./index-cc65325e.js');
8
+ const index = require('./index-e100709a.js');
9
9
  const utils = require('./utils-235cd490.js');
10
10
  const templates = require('./templates-e57b3741.js');
11
- require('./streamAttributes-9d6226ac.js');
11
+ require('./streamAttributes-d6236448.js');
12
12
  const measurement = require('./measurement-aba1e0e8.js');
13
13
  require('./bundle.esm-dc0a8361.js');
14
14
  require('./browser.esm-31b03292.js');
@@ -5,14 +5,18 @@
5
5
 
6
6
  Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
- const index = require('./index-cc65325e.js');
8
+ const index = require('./index-e100709a.js');
9
9
  const utils = require('./utils-235cd490.js');
10
+ require('./mapper-f6e6cafe.js');
11
+ require('./grpc-web-client.umd-60a79aae.js');
12
+ require('./streamAttributes-d6236448.js');
13
+ const model = require('./model-4ec0c36e.js');
14
+ const results = require('./results-bc325974.js');
10
15
  const templates = require('./templates-e57b3741.js');
11
- require('./streamAttributes-9d6226ac.js');
12
16
  const measurement = require('./measurement-aba1e0e8.js');
13
17
  require('./bundle.esm-dc0a8361.js');
14
- require('./browser.esm-31b03292.js');
15
18
  require('./_commonjsHelpers-537d719a.js');
19
+ require('./browser.esm-31b03292.js');
16
20
 
17
21
  const viewerMeasurementsCss = ":host{display:block;position:absolute;top:0;bottom:0;left:0;right:0;pointer-events:none}::slotted(.viewer-measurements__measurement[mode='']){cursor:pointer}::slotted(.viewer-measurements__measurement[mode='edit']){z-index:1}::slotted(.viewer-measurements__measurement[interacting-anchor='start']),::slotted(.viewer-measurements__measurement[interacting-anchor='end']),::slotted(vertex-viewer-measurement-tool[is-measuring]){z-index:2}";
18
22
 
@@ -43,6 +47,17 @@ let ViewerMeasurements = class {
43
47
  * value of 0 disables snapping.
44
48
  */
45
49
  this.snapDistance = utils.MEASUREMENT_SNAP_DISTANCE;
50
+ /**
51
+ * Enables the display of axis reference lines between the start and end
52
+ * point of selected measurements.
53
+ */
54
+ this.showAxisReferenceLines = false;
55
+ /**
56
+ * The measurement model that will be updated with the selected measurement.
57
+ * You can pass this to a <vertex-viewer-measurement-details> component to
58
+ * display measurement outcomes.
59
+ */
60
+ this.measurementModel = new model.MeasurementModel();
46
61
  }
47
62
  /**
48
63
  * Adds a new measurement as a child to this component. A new measurement
@@ -111,9 +126,23 @@ let ViewerMeasurements = class {
111
126
  * @ignore
112
127
  */
113
128
  async handleSelectedMeasurementIdChanged() {
129
+ this.measurementModel.clearOutcome();
114
130
  const measurements = await this.getMeasurementElements();
115
131
  measurements.forEach((m) => {
116
- m.mode = m.id === this.selectedMeasurementId ? 'edit' : '';
132
+ if (m.id === this.selectedMeasurementId) {
133
+ m.mode = 'edit';
134
+ m.showAxisReferenceLines = this.showAxisReferenceLines;
135
+ if (m.start != null && m.end != null) {
136
+ this.measurementModel.setOutcome({
137
+ isApproximate: true,
138
+ results: [results.makeMinimumDistanceResult(m.start, m.end)],
139
+ });
140
+ }
141
+ }
142
+ else {
143
+ m.mode = '';
144
+ m.showAxisReferenceLines = false;
145
+ }
117
146
  });
118
147
  }
119
148
  /**
@@ -5,10 +5,10 @@
5
5
 
6
6
  Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
- const index = require('./index-cc65325e.js');
8
+ const index = require('./index-e100709a.js');
9
9
  const bundle_esm = require('./bundle.esm-dc0a8361.js');
10
- const stencil = require('./stencil-bd453a38.js');
11
- const streamAttributes = require('./streamAttributes-9d6226ac.js');
10
+ const stencil = require('./stencil-a664cd10.js');
11
+ const streamAttributes = require('./streamAttributes-d6236448.js');
12
12
  const index$1 = require('./index-3bc6bac0.js');
13
13
  require('./browser.esm-31b03292.js');
14
14
  require('./_commonjsHelpers-537d719a.js');
@@ -94,7 +94,7 @@ const ViewCubeShadow = ({ length, }) => {
94
94
  index.h("div", { class: "cube-shadow-face" })));
95
95
  };
96
96
 
97
- const viewerViewCubeCss = ":host{--viewer-view-cube-side-background:var(--white);--viewer-view-cube-side-background-hover:var(--blue-500);--viewer-view-cube-side-background-hover-opacity:0.25;--viewer-view-cube-side-border:1.5px solid var(--neutral-500);--viewer-view-cube-edge-length:12px;--viewer-view-cube-opacity:0.8;display:block;color:var(--neutral-700);width:80px;height:80px;margin:20px;position:relative;display:flex;align-items:center;justify-content:center;user-select:none}.renderer{position:unset;width:100%;height:100%;overflow:visible}.reference-point{width:5px;height:5px;border-radius:50%;background-color:black}.triad{pointer-events:none}.triad-axis{width:100%;height:1.5px;outline:1px solid transparent;transform:translateX(50%)}.triad-axis-x{background-color:#ea3324}.triad-axis-y{background-color:#4faf32}.triad-axis-z{background-color:#0000ff}.triad-label{font-family:Arial, Helvetica, sans-serif;font-size:0.6875rem}.triad-label-x{color:#ea3324}.triad-label-y{color:#4faf32}.triad-label-z{color:#0000ff}.cube{pointer-events:initial}.cube:hover .cube-side-face{opacity:1}.cube-side{backface-visibility:hidden;-webkit-backface-visibility:hidden}.cube-side-face{box-sizing:border-box;font-size:0.875rem;text-transform:uppercase;width:100%;height:100%;background-color:var(--viewer-view-cube-side-background);border:var(--viewer-view-cube-side-border);display:flex;align-items:center;justify-content:center;outline:1px solid transparent;opacity:var(--viewer-view-cube-opacity);transition:opacity 0.2s ease-in-out}.cube-side-face::before{content:'';position:absolute;left:calc(var(--viewer-view-cube-edge-length) - 4px);right:calc(var(--viewer-view-cube-edge-length) - 4px);top:calc(var(--viewer-view-cube-edge-length) - 4px);bottom:calc(var(--viewer-view-cube-edge-length) - 4px)}.cube-corner,.cube-edge{position:relative}.cube-corner-face,.cube-edge-face{position:absolute;backface-visibility:hidden;-webkit-backface-visibility:hidden}.cube-edge-face.top{top:0;left:var(--viewer-view-cube-edge-length);right:var(--viewer-view-cube-edge-length);height:var(--viewer-view-cube-edge-length)}.cube-edge-face.bottom{bottom:0;left:var(--viewer-view-cube-edge-length);right:var(--viewer-view-cube-edge-length);height:var(--viewer-view-cube-edge-length)}.cube-edge-face.left{left:0;top:var(--viewer-view-cube-edge-length);bottom:var(--viewer-view-cube-edge-length);width:var(--viewer-view-cube-edge-length)}.cube-edge-face.right{right:0;top:var(--viewer-view-cube-edge-length);bottom:var(--viewer-view-cube-edge-length);width:var(--viewer-view-cube-edge-length)}.cube-corner-face{width:var(--viewer-view-cube-edge-length);height:var(--viewer-view-cube-edge-length)}.cube-corner-face.top-left{top:0;left:0}.cube-corner-face.top-right{top:0;right:0}.cube-corner-face.bottom-right{bottom:0;right:0}.cube-corner-face.bottom-left{bottom:0;left:0}.cube-shadow{backface-visibility:hidden;-webkit-backface-visibility:hidden}.cube-shadow-face{position:absolute;left:4px;right:4px;top:4px;bottom:4px;background-color:black;opacity:0.12;filter:blur(4px)}.cube-corner .cube-corner-face,.cube-edge .cube-edge-face,.cube-side .cube-side-face::before{background:var(--viewer-view-cube-side-background-hover);opacity:0}.cube-corner:hover .cube-corner-face,.cube-edge:hover .cube-edge-face,.cube-side:hover .cube-side-face::before{opacity:var(--viewer-view-cube-side-background-hover-opacity)}.cube-corner.disabled,.cube-edge.disabled,.cube-side.disabled{pointer-events:none}";
97
+ const viewerViewCubeCss = ":host{--viewer-view-cube-side-background:var(--white);--viewer-view-cube-side-background-hover:var(--blue-500);--viewer-view-cube-side-background-hover-opacity:0.25;--viewer-view-cube-side-border:1.5px solid var(--neutral-500);--viewer-view-cube-edge-length:12px;--viewer-view-cube-opacity:0.8;--viewer-view-cube-triad-x-axis-color:var(--x-axis-color);--viewer-view-cube-triad-y-axis-color:var(--y-axis-color);--viewer-view-cube-triad-z-axis-color:var(--z-axis-color);display:block;color:var(--neutral-700);width:80px;height:80px;margin:20px;position:relative;display:flex;align-items:center;justify-content:center;user-select:none}.renderer{position:unset;width:100%;height:100%;overflow:visible}.reference-point{width:5px;height:5px;border-radius:50%;background-color:black}.triad{pointer-events:none}.triad-axis{width:100%;height:1.5px;outline:1px solid transparent;transform:translateX(50%)}.triad-axis-x{background-color:#ea3324}.triad-axis-y{background-color:#4faf32}.triad-axis-z{background-color:#0000ff}.triad-label{font-family:Arial, Helvetica, sans-serif;font-size:0.6875rem}.triad-label-x{color:var(--viewer-view-cube-triad-x-axis-color)}.triad-label-y{color:var(--viewer-view-cube-triad-y-axis-color)}.triad-label-z{color:var(--viewer-view-cube-triad-z-axis-color)}.cube{pointer-events:initial}.cube:hover .cube-side-face{opacity:1}.cube-side{backface-visibility:hidden;-webkit-backface-visibility:hidden}.cube-side-face{box-sizing:border-box;font-size:0.875rem;text-transform:uppercase;width:100%;height:100%;background-color:var(--viewer-view-cube-side-background);border:var(--viewer-view-cube-side-border);display:flex;align-items:center;justify-content:center;outline:1px solid transparent;opacity:var(--viewer-view-cube-opacity);transition:opacity 0.2s ease-in-out}.cube-side-face::before{content:'';position:absolute;left:calc(var(--viewer-view-cube-edge-length) - 4px);right:calc(var(--viewer-view-cube-edge-length) - 4px);top:calc(var(--viewer-view-cube-edge-length) - 4px);bottom:calc(var(--viewer-view-cube-edge-length) - 4px)}.cube-corner,.cube-edge{position:relative}.cube-corner-face,.cube-edge-face{position:absolute;backface-visibility:hidden;-webkit-backface-visibility:hidden}.cube-edge-face.top{top:0;left:var(--viewer-view-cube-edge-length);right:var(--viewer-view-cube-edge-length);height:var(--viewer-view-cube-edge-length)}.cube-edge-face.bottom{bottom:0;left:var(--viewer-view-cube-edge-length);right:var(--viewer-view-cube-edge-length);height:var(--viewer-view-cube-edge-length)}.cube-edge-face.left{left:0;top:var(--viewer-view-cube-edge-length);bottom:var(--viewer-view-cube-edge-length);width:var(--viewer-view-cube-edge-length)}.cube-edge-face.right{right:0;top:var(--viewer-view-cube-edge-length);bottom:var(--viewer-view-cube-edge-length);width:var(--viewer-view-cube-edge-length)}.cube-corner-face{width:var(--viewer-view-cube-edge-length);height:var(--viewer-view-cube-edge-length)}.cube-corner-face.top-left{top:0;left:0}.cube-corner-face.top-right{top:0;right:0}.cube-corner-face.bottom-right{bottom:0;right:0}.cube-corner-face.bottom-left{bottom:0;left:0}.cube-shadow{backface-visibility:hidden;-webkit-backface-visibility:hidden}.cube-shadow-face{position:absolute;left:4px;right:4px;top:4px;bottom:4px;background-color:black;opacity:0.12;filter:blur(4px)}.cube-corner .cube-corner-face,.cube-edge .cube-edge-face,.cube-side .cube-side-face::before{background:var(--viewer-view-cube-side-background-hover);opacity:0}.cube-corner:hover .cube-corner-face,.cube-edge:hover .cube-edge-face,.cube-side:hover .cube-side-face::before{opacity:var(--viewer-view-cube-side-background-hover-opacity)}.cube-corner.disabled,.cube-edge.disabled,.cube-side.disabled{pointer-events:none}";
98
98
 
99
99
  let ViewerViewCube = class {
100
100
  constructor(hostRef) {