@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,165 @@
1
+ /**!
2
+ * Copyright (c) 2022 Vertex Software LLC. All rights reserved.
3
+ */
4
+ import { r as registerInstance, h, F as Fragment, H as Host } from './index-10c1495a.js';
5
+ import { p as point, i as angle } from './bundle.esm-d899b2d5.js';
6
+ import './mapper-4b815e31.js';
7
+ import './grpc-web-client.umd-5982b7b0.js';
8
+ import './streamAttributes-d623bb60.js';
9
+ import { M as MeasurementOverlayManager } from './overlays-dbe5d652.js';
10
+ import './_commonjsHelpers-9943807e.js';
11
+ import './browser.esm-59e914f6.js';
12
+
13
+ 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)}";
14
+
15
+ let ViewerMeasurementLine = class {
16
+ constructor(hostRef) {
17
+ registerInstance(this, hostRef);
18
+ /**
19
+ * A point that specifies the starting point of the line.
20
+ */
21
+ this.start = point.create();
22
+ /**
23
+ * A point that specifies the ending point of the line.
24
+ */
25
+ this.end = point.create();
26
+ /**
27
+ * A length of the line cap. The line cap is a line at each end of a line.
28
+ */
29
+ this.capLength = 0;
30
+ /**
31
+ * The type of [SVG pointer
32
+ * events](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/pointer-events)
33
+ * that the line should respond to.
34
+ */
35
+ this.pointerEvents = 'none';
36
+ }
37
+ /**
38
+ * @ignore
39
+ */
40
+ render() {
41
+ const angle$1 = angle.fromPoints(this.start, this.end);
42
+ const lineFillEndCaps = getEndCapPoints(this.start, this.end, angle$1, this.capLength);
43
+ const lineStrokeEndCaps = getEndCapPoints(this.start, this.end, angle$1, this.capLength + 1);
44
+ return (h("svg", null, h("g", { class: "line-stroke", "pointer-events": this.pointerEvents }, h("line", { class: "line", x1: this.start.x, y1: this.start.y, x2: this.end.x, y2: this.end.y }), 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 }), 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 })), h("g", { class: "line-fill", "pointer-events": this.pointerEvents }, h("line", { class: "line", x1: this.start.x, y1: this.start.y, x2: this.end.x, y2: this.end.y }), 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 }), 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 }))));
45
+ }
46
+ };
47
+ function getEndCapPoints(start, end, angle, length) {
48
+ return {
49
+ startEndCap: getPerpendicularLine(start, angle, length),
50
+ endEndCap: getPerpendicularLine(end, angle, length),
51
+ };
52
+ }
53
+ function getPerpendicularLine(pt, angle, length) {
54
+ const perpAngle = angle + Math.PI / 2;
55
+ const start = point.add(pt, point.polar(length / 2, perpAngle));
56
+ const end = point.add(pt, point.polar(length / 2, perpAngle + Math.PI));
57
+ return { start, end };
58
+ }
59
+ ViewerMeasurementLine.style = viewerMeasurementLineCss;
60
+
61
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
62
+ const MeasurementOverlayView = ({ overlay, viewport, camera }) => {
63
+ if (overlay.type === 'line') {
64
+ return (h(LineOverlayView, { overlay: overlay, viewport: viewport, camera: camera }));
65
+ }
66
+ else {
67
+ return (h(DistanceVectorOverlayView, { overlay: overlay, viewport: viewport, camera: camera }));
68
+ }
69
+ };
70
+ const LineOverlayView = ({ overlay: { start, end }, camera, viewport }) => {
71
+ const m = camera.projectionViewMatrix;
72
+ const sw = viewport.transformWorldToViewport(start, m);
73
+ const ew = viewport.transformWorldToViewport(end, m);
74
+ return (h("vertex-viewer-measurement-line", { class: "measurement-line", start: sw, end: ew }));
75
+ };
76
+ const DistanceVectorOverlayView = ({ overlay: { x, y, z }, camera, viewport }) => {
77
+ const m = camera.projectionViewMatrix;
78
+ const xs = viewport.transformWorldToViewport(x.start, m);
79
+ const xe = viewport.transformWorldToViewport(x.end, m);
80
+ const ys = viewport.transformWorldToViewport(y.start, m);
81
+ const ye = viewport.transformWorldToViewport(y.end, m);
82
+ const zs = viewport.transformWorldToViewport(z.start, m);
83
+ const ze = viewport.transformWorldToViewport(z.end, m);
84
+ return (h(Fragment, null,
85
+ h("vertex-viewer-measurement-line", { class: "measurement-line distance-vector-x", start: xs, end: xe }),
86
+ h("vertex-viewer-measurement-line", { class: "measurement-line distance-vector-y", start: ys, end: ye }),
87
+ h("vertex-viewer-measurement-line", { class: "measurement-line distance-vector-z", start: zs, end: ze })));
88
+ };
89
+
90
+ 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 )}";
91
+
92
+ let ViewerMeasurementOverlays = class {
93
+ constructor(hostRef) {
94
+ registerInstance(this, hostRef);
95
+ /**
96
+ * The model that contains the overlays to present.
97
+ */
98
+ this.measurementOverlays = new MeasurementOverlayManager();
99
+ this.overlays = [];
100
+ this.updateCamera = () => {
101
+ var _a, _b;
102
+ this.camera = (_b = (_a = this.viewer) === null || _a === void 0 ? void 0 : _a.frame) === null || _b === void 0 ? void 0 : _b.scene.camera;
103
+ };
104
+ }
105
+ /**
106
+ * @ignore
107
+ */
108
+ handleMeasurementOverlaysChanged() {
109
+ this.removeModelListeners();
110
+ this.addModelListeners();
111
+ this.updateOverlays();
112
+ }
113
+ /**
114
+ * @ignore
115
+ */
116
+ handleViewerChanged(newViewer, oldViewer) {
117
+ this.removeViewerListeners(oldViewer);
118
+ this.addViewerListeners();
119
+ this.updateCamera();
120
+ }
121
+ /**
122
+ * @ignore
123
+ */
124
+ componentWillLoad() {
125
+ this.addModelListeners();
126
+ this.addViewerListeners();
127
+ this.updateOverlays();
128
+ this.updateCamera();
129
+ }
130
+ addModelListeners() {
131
+ this.onOverlaysChangedListener = this.measurementOverlays.onOverlaysChanged(() => this.updateOverlays());
132
+ }
133
+ removeModelListeners() {
134
+ var _a;
135
+ (_a = this.onOverlaysChangedListener) === null || _a === void 0 ? void 0 : _a.dispose();
136
+ this.onOverlaysChangedListener = undefined;
137
+ }
138
+ addViewerListeners() {
139
+ var _a;
140
+ (_a = this.viewer) === null || _a === void 0 ? void 0 : _a.addEventListener('frameReceived', this.updateCamera);
141
+ }
142
+ removeViewerListeners(viewer) {
143
+ viewer === null || viewer === void 0 ? void 0 : viewer.removeEventListener('frameReceived', this.updateCamera);
144
+ }
145
+ updateOverlays() {
146
+ this.overlays = this.measurementOverlays.getOverlays();
147
+ }
148
+ /**
149
+ * @ignore
150
+ */
151
+ render() {
152
+ return (h(Host, null, this.overlays.map((overlay) => {
153
+ if (this.camera != null && this.viewer != null) {
154
+ return (h(MeasurementOverlayView, { overlay: overlay, viewport: this.viewer.viewport, camera: this.camera }));
155
+ }
156
+ })));
157
+ }
158
+ static get watchers() { return {
159
+ "measurementOverlays": ["handleMeasurementOverlaysChanged"],
160
+ "viewer": ["handleViewerChanged"]
161
+ }; }
162
+ };
163
+ ViewerMeasurementOverlays.style = viewerMeasurementOverlaysCss;
164
+
165
+ export { ViewerMeasurementLine as vertex_viewer_measurement_line, ViewerMeasurementOverlays as vertex_viewer_measurement_overlays };
@@ -1,17 +1,19 @@
1
1
  /**!
2
2
  * Copyright (c) 2022 Vertex Software LLC. All rights reserved.
3
3
  */
4
- import { r as registerInstance, h, H as Host } from './index-f0053642.js';
5
- import { s as scene_view_api_pb, M as MeasurementEntity, a as MeasurementModel } from './model-f711a825.js';
4
+ import { r as registerInstance, h, H as Host } from './index-10c1495a.js';
5
+ import { s as scene_view_api_pb } from './mapper-4b815e31.js';
6
6
  import { g as grpcWebClient_umd } from './grpc-web-client.umd-5982b7b0.js';
7
- import { p as parseConfig } from './config-a200c227.js';
8
- import { M as MeasurementController } from './controller-a756cf9c.js';
9
- import { p as point } from './bundle.esm-8f14ac60.js';
10
- import './cursors-5157d29d.js';
11
- import './streamAttributes-7aa486b2.js';
12
- import { g as getMouseClientPosition } from './dom-2d6a1e1e.js';
13
- import './browser.esm-e6827921.js';
7
+ import { p as parseConfig } from './config-604c644e.js';
8
+ import { a as MeasurementEntity, M as MeasurementController } from './entities-759d97cd.js';
9
+ import { E as EntityType } from './streamAttributes-d623bb60.js';
10
+ import { M as MeasurementModel } from './model-e5a4f00f.js';
11
+ import { M as MeasurementOverlayManager } from './overlays-dbe5d652.js';
12
+ import { p as point } from './bundle.esm-d899b2d5.js';
13
+ import { a as measurementWithArrowCursor } from './cursors-a7ec4adb.js';
14
+ import { g as getMouseClientPosition } from './dom-780d25be.js';
14
15
  import './_commonjsHelpers-9943807e.js';
16
+ import './browser.esm-59e914f6.js';
15
17
 
16
18
  // package: vertexvis.protobuf.sceneview.v1
17
19
  // file: sceneview/protos/scene_view_api.proto
@@ -112,59 +114,122 @@ SceneViewAPIClient.prototype.measure = function measure(requestMessage, metadata
112
114
 
113
115
  var SceneViewAPIClient_1 = SceneViewAPIClient;
114
116
 
115
- class PreciseMeasurementInteractionHandler {
116
- constructor(controller) {
117
+ class ElementRectObserver {
118
+ constructor() {
119
+ this.observer = new ResizeObserver(() => this.measure());
120
+ }
121
+ observe(element) {
122
+ this.element = element;
123
+ this.observer.observe(element);
124
+ this.measure();
125
+ }
126
+ disconnect() {
127
+ this.element = undefined;
128
+ this.observer.disconnect();
129
+ }
130
+ measure() {
131
+ var _a;
132
+ this.rect = (_a = this.element) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
133
+ }
134
+ }
135
+
136
+ class MeasurementInteractionHandler {
137
+ constructor(controller, measurableEntityTypes) {
138
+ this.rectObserver = new ElementRectObserver();
139
+ this.handlePointerMove = async (event) => {
140
+ if (await this.isMeasurableEntityUnderPointer(event)) {
141
+ this.clearCursor();
142
+ this.addCursor(measurementWithArrowCursor);
143
+ }
144
+ else {
145
+ this.clearCursor();
146
+ }
147
+ };
117
148
  this.handlePointerDown = (event) => {
118
- this.ifNoInteraction(event, () => {
119
- this.ifInitialized(async ({ element, api }) => {
120
- const pt = getMouseClientPosition(event, element.getBoundingClientRect());
121
- const [hit] = await api.hitItems(pt);
122
- if (hit != null) {
123
- this.controller.addEntity(MeasurementEntity.fromHit(hit));
124
- }
125
- else {
126
- this.controller.clearEntities();
127
- }
128
- });
149
+ this.ifNoInteraction(event, async () => {
150
+ if (await this.isMeasurableEntityUnderPointer(event)) {
151
+ this.measureEntityUnderPointer(event);
152
+ }
153
+ else {
154
+ this.controller.clearEntities();
155
+ }
129
156
  });
130
157
  };
131
158
  this.controller = controller;
159
+ this.measurableEntityTypes = measurableEntityTypes;
160
+ }
161
+ get elementRect() {
162
+ return this.rectObserver.rect;
132
163
  }
133
164
  initialize(element, api) {
134
165
  this.element = element;
135
166
  this.api = api;
167
+ this.rectObserver.observe(element);
168
+ element.addEventListener('pointermove', this.handlePointerMove);
136
169
  element.addEventListener('pointerdown', this.handlePointerDown);
137
170
  }
138
171
  dispose() {
172
+ var _a, _b, _c;
173
+ this.rectObserver.disconnect();
174
+ (_a = this.measurementInteraction) === null || _a === void 0 ? void 0 : _a.dispose();
175
+ this.clearCursor();
176
+ (_b = this.element) === null || _b === void 0 ? void 0 : _b.removeEventListener('pointermove', this.handlePointerMove);
177
+ (_c = this.element) === null || _c === void 0 ? void 0 : _c.removeEventListener('pointerdown', this.handlePointerDown);
178
+ this.element = undefined;
179
+ this.api = undefined;
180
+ }
181
+ addCursor(cursor) {
182
+ this.cursor = this.ifInitialized(({ api }) => api.addCursor(cursor));
183
+ }
184
+ clearCursor() {
139
185
  var _a;
140
- (_a = this.element) === null || _a === void 0 ? void 0 : _a.removeEventListener('pointerdown', this.handlePointerDown);
186
+ (_a = this.cursor) === null || _a === void 0 ? void 0 : _a.dispose();
187
+ this.cursor = undefined;
188
+ }
189
+ async isMeasurableEntityUnderPointer(event) {
190
+ var _a;
191
+ const pt = getMouseClientPosition(event, this.elementRect);
192
+ const type = await ((_a = this.api) === null || _a === void 0 ? void 0 : _a.getEntityTypeAtPoint(pt));
193
+ return type != null && this.measurableEntityTypes.includes(type);
194
+ }
195
+ measureEntityUnderPointer(event) {
196
+ this.ifInitialized(async ({ api }) => {
197
+ const pt = getMouseClientPosition(event, this.elementRect);
198
+ const [hit] = await api.hitItems(pt);
199
+ if (hit != null) {
200
+ this.controller.addEntity(MeasurementEntity.fromHit(hit));
201
+ }
202
+ else {
203
+ this.controller.clearEntities();
204
+ }
205
+ });
206
+ }
207
+ ifInitialized(f) {
208
+ if (this.element != null && this.api != null) {
209
+ return f({ element: this.element, api: this.api });
210
+ }
211
+ else {
212
+ throw new Error('Measurement interaction handler not initialized.');
213
+ }
141
214
  }
142
215
  ifNoInteraction(event, f) {
143
216
  const startPos = point.create(event.clientX, event.clientY);
144
217
  let didInteract = false;
145
- function handleMouseMove(event) {
218
+ const handleMouseMove = (event) => {
146
219
  const pos = point.create(event.clientX, event.clientY);
147
220
  const dis = point.distance(startPos, pos);
148
221
  didInteract = dis > 2;
149
- }
150
- function handleMouseUp() {
222
+ };
223
+ const handleMouseUp = () => {
151
224
  window.removeEventListener('pointermove', handleMouseMove);
152
225
  window.removeEventListener('pointerup', handleMouseUp);
153
226
  if (!didInteract) {
154
227
  f();
155
228
  }
156
- }
229
+ };
157
230
  window.addEventListener('pointermove', handleMouseMove);
158
231
  window.addEventListener('pointerup', handleMouseUp);
159
232
  }
160
- ifInitialized(f) {
161
- if (this.element != null && this.api != null) {
162
- return f({ element: this.element, api: this.api });
163
- }
164
- else {
165
- throw new Error('Measurement interaction handler not initialized');
166
- }
167
- }
168
233
  }
169
234
 
170
235
  const viewerMeasurementPreciseCss = ":host{display:block;position:absolute;top:0;bottom:0;left:0;right:0;pointer-events:none}";
@@ -172,36 +237,80 @@ const viewerMeasurementPreciseCss = ":host{display:block;position:absolute;top:0
172
237
  let ViewerMeasurementPrecise = class {
173
238
  constructor(hostRef) {
174
239
  registerInstance(this, hostRef);
240
+ /**
241
+ * The model that contains the entities and outcomes from performing precise
242
+ * measurements.
243
+ */
175
244
  this.measurementModel = new MeasurementModel();
245
+ /**
246
+ * The manager that is responsible for measurement overlays to present by this
247
+ * component.
248
+ */
249
+ this.measurementOverlays = new MeasurementOverlayManager();
250
+ /**
251
+ * @internal
252
+ *
253
+ * An internal property that can be used to opt-in to performing measurements
254
+ * on other types of entities.
255
+ */
256
+ this.measurableEntityTypes = [EntityType.PRECISE_SURFACE];
257
+ /**
258
+ * The environment that will be used to request measurement results.
259
+ */
176
260
  this.configEnv = 'platprod';
177
- this.entities = [];
178
- this.handleEntitiesChanged = () => {
179
- this.updateEntities();
180
- };
261
+ this.overlays = [];
181
262
  }
263
+ /**
264
+ * @ignore
265
+ */
182
266
  connectedCallback() {
183
267
  this.setupInteractionHandler();
184
268
  }
269
+ /**
270
+ * @ignore
271
+ */
185
272
  componentWillLoad() {
186
273
  this.setupController();
187
- this.setupInteractionHandler();
188
274
  this.setupModelListeners();
275
+ this.setupInteractionHandler();
189
276
  }
277
+ /**
278
+ * @ignore
279
+ */
190
280
  disconnectedCallback() {
191
281
  this.clearInteractionHandler();
282
+ this.clearModelListeners();
283
+ }
284
+ /**
285
+ * @ignore
286
+ */
287
+ handleMeasurableEntityTypesChanged() {
288
+ this.setupInteractionHandler();
192
289
  }
290
+ /**
291
+ * @ignore
292
+ */
193
293
  handleMeasurementControllerChanged() {
194
294
  this.setupInteractionHandler();
195
295
  }
296
+ /**
297
+ * @ignore
298
+ */
196
299
  handleMeasurementModelChanged() {
197
300
  this.setupController();
198
301
  this.setupModelListeners();
199
302
  }
303
+ /**
304
+ * @ignore
305
+ */
200
306
  handleViewerChanged() {
201
307
  this.setupInteractionHandler();
202
308
  }
309
+ /**
310
+ * @ignore
311
+ */
203
312
  render() {
204
- return h(Host, null);
313
+ return (h(Host, null, h("vertex-viewer-measurement-overlays", { viewer: this.viewer, measurementOverlays: this.measurementOverlays })));
205
314
  }
206
315
  setupController() {
207
316
  var _a;
@@ -219,24 +328,23 @@ let ViewerMeasurementPrecise = class {
219
328
  this.clearInteractionHandler();
220
329
  if (this.measurementController != null) {
221
330
  this.registeredInteractionHandler =
222
- (_a = this.viewer) === null || _a === void 0 ? void 0 : _a.registerInteractionHandler(new PreciseMeasurementInteractionHandler(this.measurementController));
331
+ (_a = this.viewer) === null || _a === void 0 ? void 0 : _a.registerInteractionHandler(new MeasurementInteractionHandler(this.measurementController, this.measurableEntityTypes));
223
332
  }
224
333
  }
225
334
  clearModelListeners() {
226
- var _a;
227
- (_a = this.onEntitiesChangedDisposable) === null || _a === void 0 ? void 0 : _a.dispose();
228
- this.onEntitiesChangedDisposable = undefined;
335
+ var _a, _b;
336
+ (_a = this.onEntitiesChangedHandler) === null || _a === void 0 ? void 0 : _a.dispose();
337
+ this.onEntitiesChangedHandler = undefined;
338
+ (_b = this.onOverlaysChangedHandler) === null || _b === void 0 ? void 0 : _b.dispose();
339
+ this.onOverlaysChangedHandler = undefined;
229
340
  }
230
341
  setupModelListeners() {
231
- var _a;
232
- this.clearModelListeners();
233
- this.onEntitiesChangedDisposable = (_a = this.measurementModel) === null || _a === void 0 ? void 0 : _a.onEntitiesChanged(this.handleEntitiesChanged);
234
- }
235
- updateEntities() {
236
- var _a, _b;
237
- this.entities = (_b = (_a = this.measurementModel) === null || _a === void 0 ? void 0 : _a.getEntities()) !== null && _b !== void 0 ? _b : [];
342
+ this.onOverlaysChangedHandler = this.measurementOverlays.onOverlaysChanged((overlays) => {
343
+ this.overlays = overlays;
344
+ });
238
345
  }
239
346
  static get watchers() { return {
347
+ "measurableEntityTypes": ["handleMeasurableEntityTypesChanged"],
240
348
  "measurementController": ["handleMeasurementControllerChanged"],
241
349
  "measurementModel": ["handleMeasurementModelChanged"],
242
350
  "viewer": ["handleViewerChanged"]
@@ -1,13 +1,13 @@
1
1
  /**!
2
2
  * Copyright (c) 2022 Vertex Software LLC. All rights reserved.
3
3
  */
4
- import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-f0053642.js';
5
- import { M as MEASUREMENT_SNAP_DISTANCE, i as isVertexViewerDistanceMeasurement } from './utils-8070900a.js';
4
+ import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-10c1495a.js';
5
+ import { M as MEASUREMENT_SNAP_DISTANCE, i as isVertexViewerDistanceMeasurement } from './utils-01e4f587.js';
6
6
  import { s as stampTemplateWithId } from './templates-022199c1.js';
7
- import './streamAttributes-7aa486b2.js';
8
- import { D as DistanceMeasurement } from './measurement-702d6b8c.js';
9
- import './bundle.esm-8f14ac60.js';
10
- import './browser.esm-e6827921.js';
7
+ import './streamAttributes-d623bb60.js';
8
+ import { D as DistanceMeasurement } from './measurement-12cdbf5c.js';
9
+ import './bundle.esm-d899b2d5.js';
10
+ import './browser.esm-59e914f6.js';
11
11
  import './_commonjsHelpers-9943807e.js';
12
12
 
13
13
  const viewerMeasurementToolCss = ":host{position:absolute;top:0;bottom:0;left:0;right:0}";
@@ -1,14 +1,18 @@
1
1
  /**!
2
2
  * Copyright (c) 2022 Vertex Software LLC. All rights reserved.
3
3
  */
4
- import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-f0053642.js';
5
- import { M as MEASUREMENT_SNAP_DISTANCE, i as isVertexViewerDistanceMeasurement } from './utils-8070900a.js';
4
+ import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-10c1495a.js';
5
+ import { M as MEASUREMENT_SNAP_DISTANCE, i as isVertexViewerDistanceMeasurement } from './utils-01e4f587.js';
6
+ import './mapper-4b815e31.js';
7
+ import './grpc-web-client.umd-5982b7b0.js';
8
+ import './streamAttributes-d623bb60.js';
9
+ import { M as MeasurementModel } from './model-e5a4f00f.js';
10
+ import { m as makeMinimumDistanceResult } from './results-994bdb50.js';
6
11
  import { s as stampTemplateWithId } from './templates-022199c1.js';
7
- import './streamAttributes-7aa486b2.js';
8
- import { D as DistanceMeasurement } from './measurement-702d6b8c.js';
9
- import './bundle.esm-8f14ac60.js';
10
- import './browser.esm-e6827921.js';
12
+ import { D as DistanceMeasurement } from './measurement-12cdbf5c.js';
13
+ import './bundle.esm-d899b2d5.js';
11
14
  import './_commonjsHelpers-9943807e.js';
15
+ import './browser.esm-59e914f6.js';
12
16
 
13
17
  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}";
14
18
 
@@ -39,6 +43,17 @@ let ViewerMeasurements = class {
39
43
  * value of 0 disables snapping.
40
44
  */
41
45
  this.snapDistance = MEASUREMENT_SNAP_DISTANCE;
46
+ /**
47
+ * Enables the display of axis reference lines between the start and end
48
+ * point of selected measurements.
49
+ */
50
+ this.showAxisReferenceLines = false;
51
+ /**
52
+ * The measurement model that will be updated with the selected measurement.
53
+ * You can pass this to a <vertex-viewer-measurement-details> component to
54
+ * display measurement outcomes.
55
+ */
56
+ this.measurementModel = new MeasurementModel();
42
57
  }
43
58
  /**
44
59
  * Adds a new measurement as a child to this component. A new measurement
@@ -107,9 +122,23 @@ let ViewerMeasurements = class {
107
122
  * @ignore
108
123
  */
109
124
  async handleSelectedMeasurementIdChanged() {
125
+ this.measurementModel.clearOutcome();
110
126
  const measurements = await this.getMeasurementElements();
111
127
  measurements.forEach((m) => {
112
- m.mode = m.id === this.selectedMeasurementId ? 'edit' : '';
128
+ if (m.id === this.selectedMeasurementId) {
129
+ m.mode = 'edit';
130
+ m.showAxisReferenceLines = this.showAxisReferenceLines;
131
+ if (m.start != null && m.end != null) {
132
+ this.measurementModel.setOutcome({
133
+ isApproximate: true,
134
+ results: [makeMinimumDistanceResult(m.start, m.end)],
135
+ });
136
+ }
137
+ }
138
+ else {
139
+ m.mode = '';
140
+ m.showAxisReferenceLines = false;
141
+ }
113
142
  });
114
143
  }
115
144
  /**
@@ -1,12 +1,12 @@
1
1
  /**!
2
2
  * Copyright (c) 2022 Vertex Software LLC. All rights reserved.
3
3
  */
4
- import { h, F as Fragment, r as registerInstance, H as Host } from './index-f0053642.js';
5
- import { v as vector3, s as quaternion, t as euler } from './bundle.esm-8f14ac60.js';
6
- import { r as readDOM } from './stencil-7d04d41a.js';
7
- import { O as Orientation, c as FramePerspectiveCamera, w as StandardView } from './streamAttributes-7aa486b2.js';
4
+ import { h, F as Fragment, r as registerInstance, H as Host } from './index-10c1495a.js';
5
+ import { v as vector3, s as quaternion, t as euler } from './bundle.esm-d899b2d5.js';
6
+ import { r as readDOM } from './stencil-9bf7fb9e.js';
7
+ import { O as Orientation, c as FramePerspectiveCamera, w as StandardView } from './streamAttributes-d623bb60.js';
8
8
  import { c as classnames } from './index-455380d0.js';
9
- import './browser.esm-e6827921.js';
9
+ import './browser.esm-59e914f6.js';
10
10
  import './_commonjsHelpers-9943807e.js';
11
11
 
12
12
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -90,7 +90,7 @@ const ViewCubeShadow = ({ length, }) => {
90
90
  h("div", { class: "cube-shadow-face" })));
91
91
  };
92
92
 
93
- 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}";
93
+ 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}";
94
94
 
95
95
  let ViewerViewCube = class {
96
96
  constructor(hostRef) {