@vertexvis/viewer 1.0.2-canary.2 → 1.0.2-canary.4

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 (501) hide show
  1. package/dist/cjs/config-20ozv4y8.js.map +1 -1
  2. package/dist/cjs/controller-BhcNbaX_.js.map +1 -1
  3. package/dist/cjs/controller-CSwG6gbQ.js.map +1 -1
  4. package/dist/cjs/cursors-BZmDRtaZ.js.map +1 -1
  5. package/dist/cjs/dom-BBil4aN3.js.map +1 -1
  6. package/dist/cjs/dom-CvGkFQon.js.map +1 -1
  7. package/dist/cjs/entities-D6kgGria.js.map +1 -1
  8. package/dist/cjs/geometry_pb-BTko2Wi0.js.map +1 -1
  9. package/dist/cjs/grpc-BsWFEUrc.js.map +1 -1
  10. package/dist/cjs/index.cjs.js.map +1 -1
  11. package/dist/cjs/model-C9WvOKYT.js.map +1 -1
  12. package/dist/cjs/model-D17EQTIh.js.map +1 -1
  13. package/dist/cjs/model-DAB4oD5n.js.map +1 -1
  14. package/dist/cjs/model-DkXCzhs_.js.map +1 -1
  15. package/dist/cjs/multiElementInteractionHandler-BHvRKVIp.js.map +1 -1
  16. package/dist/cjs/overlays-B-06bUbI.js.map +1 -1
  17. package/dist/cjs/queries-Da9I-xMf.js.map +1 -1
  18. package/dist/cjs/regl-component-HhKCyGQ3.js.map +1 -1
  19. package/dist/cjs/representation_pb-CrCGjlyP.js.map +1 -1
  20. package/dist/cjs/results-1wRRZiYG.js.map +1 -1
  21. package/dist/cjs/row-Cet6xXup.js.map +1 -1
  22. package/dist/cjs/stencil-Hsr_8Chs.js.map +1 -1
  23. package/dist/cjs/streamAttributes-D_J-W8-2.js.map +1 -1
  24. package/dist/cjs/templates-DvjgjnlO.js.map +1 -1
  25. package/dist/cjs/util-DIJSIQXH.js.map +1 -1
  26. package/dist/cjs/utils-CibrnHQ4.js.map +1 -1
  27. package/dist/cjs/utils-D8MbXbwO.js.map +1 -1
  28. package/dist/cjs/utils-qErVs2Vt.js.map +1 -1
  29. package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js +6 -8
  30. package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js.map +1 -1
  31. package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js +1 -1
  32. package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js.map +1 -1
  33. package/dist/cjs/vertex-scene-tree.cjs.entry.js +2 -2
  34. package/dist/cjs/vertex-scene-tree.cjs.entry.js.map +1 -1
  35. package/dist/cjs/vertex-viewer-box-query-tool.cjs.entry.js +2 -2
  36. package/dist/cjs/vertex-viewer-box-query-tool.cjs.entry.js.map +1 -1
  37. package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js +1 -1
  38. package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js.map +1 -1
  39. package/dist/cjs/vertex-viewer-dom-group.cjs.entry.js +1 -1
  40. package/dist/cjs/vertex-viewer-dom-group.cjs.entry.js.map +1 -1
  41. package/dist/cjs/vertex-viewer-hit-result-indicator.cjs.entry.js +1 -1
  42. package/dist/cjs/vertex-viewer-hit-result-indicator.cjs.entry.js.map +1 -1
  43. package/dist/cjs/vertex-viewer-icon.cjs.entry.js.map +1 -1
  44. package/dist/cjs/vertex-viewer-markup-arrow_3.cjs.entry.js.map +1 -1
  45. package/dist/cjs/vertex-viewer-markup-tool.cjs.entry.js.map +1 -1
  46. package/dist/cjs/vertex-viewer-markup.cjs.entry.js +1 -1
  47. package/dist/cjs/vertex-viewer-markup.cjs.entry.js.map +1 -1
  48. package/dist/cjs/vertex-viewer-measurement-details.cjs.entry.js.map +1 -1
  49. package/dist/cjs/vertex-viewer-measurement-distance.cjs.entry.js.map +1 -1
  50. package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js +2 -2
  51. package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js.map +1 -1
  52. package/dist/cjs/vertex-viewer-measurement-precise.cjs.entry.js.map +1 -1
  53. package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js +2 -2
  54. package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js.map +1 -1
  55. package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js.map +1 -1
  56. package/dist/cjs/vertex-viewer-pin-tool.cjs.entry.js +1 -1
  57. package/dist/cjs/vertex-viewer-pin-tool.cjs.entry.js.map +1 -1
  58. package/dist/cjs/vertex-viewer-teleport-tool.cjs.entry.js.map +1 -1
  59. package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js +4 -5
  60. package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js.map +1 -1
  61. package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js +1 -1
  62. package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js.map +1 -1
  63. package/dist/cjs/vertex-viewer-walk-mode-tool.cjs.entry.js.map +1 -1
  64. package/dist/cjs/vertex-viewer.cjs.entry.js +9 -5
  65. package/dist/cjs/vertex-viewer.cjs.entry.js.map +1 -1
  66. package/dist/cjs/viewport-CG1VYkIU.js.map +1 -1
  67. package/dist/collection/components/scene-tree/errors.js.map +1 -1
  68. package/dist/collection/components/scene-tree/lib/controller.js.map +1 -1
  69. package/dist/collection/components/scene-tree/lib/dom.js.map +1 -1
  70. package/dist/collection/components/scene-tree/lib/errors.js.map +1 -1
  71. package/dist/collection/components/scene-tree/lib/grpc.js.map +1 -1
  72. package/dist/collection/components/scene-tree/lib/handlers.js.map +1 -1
  73. package/dist/collection/components/scene-tree/lib/row.js.map +1 -1
  74. package/dist/collection/components/scene-tree/lib/viewer-ops.js.map +1 -1
  75. package/dist/collection/components/scene-tree/scene-tree.js +2 -2
  76. package/dist/collection/components/scene-tree/scene-tree.js.map +1 -1
  77. package/dist/collection/components/scene-tree-search/scene-tree-search.js.map +1 -1
  78. package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.js +1 -1
  79. package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.js.map +1 -1
  80. package/dist/collection/components/scene-tree-table-cell/utils.js.map +1 -1
  81. package/dist/collection/components/scene-tree-table-layout/lib/dom.js.map +1 -1
  82. package/dist/collection/components/scene-tree-table-layout/lib/window.js.map +1 -1
  83. package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js +5 -5
  84. package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js.map +1 -1
  85. package/dist/collection/components/viewer/utils.js.map +1 -1
  86. package/dist/collection/components/viewer/viewer.js +9 -5
  87. package/dist/collection/components/viewer/viewer.js.map +1 -1
  88. package/dist/collection/components/viewer-box-query-tool/viewer-box-query-tool.js +2 -2
  89. package/dist/collection/components/viewer-box-query-tool/viewer-box-query-tool.js.map +1 -1
  90. package/dist/collection/components/viewer-dom-element/utils.js.map +1 -1
  91. package/dist/collection/components/viewer-dom-element/viewer-dom-element.js +1 -1
  92. package/dist/collection/components/viewer-dom-element/viewer-dom-element.js.map +1 -1
  93. package/dist/collection/components/viewer-dom-group/utils.js.map +1 -1
  94. package/dist/collection/components/viewer-dom-group/viewer-dom-group.js +1 -1
  95. package/dist/collection/components/viewer-dom-group/viewer-dom-group.js.map +1 -1
  96. package/dist/collection/components/viewer-dom-renderer/renderer2d.js.map +1 -1
  97. package/dist/collection/components/viewer-dom-renderer/renderer3d.js.map +1 -1
  98. package/dist/collection/components/viewer-dom-renderer/viewer-dom-renderer.js.map +1 -1
  99. package/dist/collection/components/viewer-hit-result-indicator/lib/dom.js.map +1 -1
  100. package/dist/collection/components/viewer-hit-result-indicator/lib/indicator.js.map +1 -1
  101. package/dist/collection/components/viewer-hit-result-indicator/lib/plane.js.map +1 -1
  102. package/dist/collection/components/viewer-hit-result-indicator/lib/point.js.map +1 -1
  103. package/dist/collection/components/viewer-hit-result-indicator/viewer-hit-result-indicator.js +1 -1
  104. package/dist/collection/components/viewer-hit-result-indicator/viewer-hit-result-indicator.js.map +1 -1
  105. package/dist/collection/components/viewer-icon/viewer-icon.js.map +1 -1
  106. package/dist/collection/components/viewer-markup/markup-utils.js.map +1 -1
  107. package/dist/collection/components/viewer-markup/viewer-markup-components.js.map +1 -1
  108. package/dist/collection/components/viewer-markup/viewer-markup.js +1 -1
  109. package/dist/collection/components/viewer-markup/viewer-markup.js.map +1 -1
  110. package/dist/collection/components/viewer-markup-arrow/interactions.js.map +1 -1
  111. package/dist/collection/components/viewer-markup-arrow/utils.js.map +1 -1
  112. package/dist/collection/components/viewer-markup-arrow/viewer-markup-arrow-components.js.map +1 -1
  113. package/dist/collection/components/viewer-markup-arrow/viewer-markup-arrow.js.map +1 -1
  114. package/dist/collection/components/viewer-markup-circle/interactions.js.map +1 -1
  115. package/dist/collection/components/viewer-markup-circle/utils.js.map +1 -1
  116. package/dist/collection/components/viewer-markup-circle/viewer-markup-circle.js.map +1 -1
  117. package/dist/collection/components/viewer-markup-freeform/interactions.js.map +1 -1
  118. package/dist/collection/components/viewer-markup-freeform/utils.js.map +1 -1
  119. package/dist/collection/components/viewer-markup-freeform/viewer-markup-freeform.js.map +1 -1
  120. package/dist/collection/components/viewer-markup-tool/viewer-markup-tool.js.map +1 -1
  121. package/dist/collection/components/viewer-measurement-details/viewer-measurement-details.js.map +1 -1
  122. package/dist/collection/components/viewer-measurement-distance/hitTest.js.map +1 -1
  123. package/dist/collection/components/viewer-measurement-distance/interactions.js.map +1 -1
  124. package/dist/collection/components/viewer-measurement-distance/utils.js.map +1 -1
  125. package/dist/collection/components/viewer-measurement-distance/viewer-measurement-distance.js.map +1 -1
  126. package/dist/collection/components/viewer-measurement-line/viewer-measurement-line.js +1 -1
  127. package/dist/collection/components/viewer-measurement-line/viewer-measurement-line.js.map +1 -1
  128. package/dist/collection/components/viewer-measurement-overlays/viewer-measurement-overlays.js +1 -1
  129. package/dist/collection/components/viewer-measurement-overlays/viewer-measurement-overlays.js.map +1 -1
  130. package/dist/collection/components/viewer-measurement-precise/viewer-measurement-precise.js.map +1 -1
  131. package/dist/collection/components/viewer-pin-group/utils.js.map +1 -1
  132. package/dist/collection/components/viewer-pin-group/viewer-pin-group.js +2 -2
  133. package/dist/collection/components/viewer-pin-group/viewer-pin-group.js.map +1 -1
  134. package/dist/collection/components/viewer-pin-label/viewer-pin-label.js.map +1 -1
  135. package/dist/collection/components/viewer-pin-tool/utils.js.map +1 -1
  136. package/dist/collection/components/viewer-pin-tool/viewer-pin-tool.js +1 -1
  137. package/dist/collection/components/viewer-pin-tool/viewer-pin-tool.js.map +1 -1
  138. package/dist/collection/components/viewer-teleport-tool/viewer-teleport-tool.js.map +1 -1
  139. package/dist/collection/components/viewer-transform-widget/util.js +1 -2
  140. package/dist/collection/components/viewer-transform-widget/util.js.map +1 -1
  141. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget-components.js.map +1 -1
  142. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.js +3 -3
  143. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.js.map +1 -1
  144. package/dist/collection/components/viewer-transform-widget/widget.js.map +1 -1
  145. package/dist/collection/components/viewer-view-cube/viewer-view-cube.js +1 -1
  146. package/dist/collection/components/viewer-view-cube/viewer-view-cube.js.map +1 -1
  147. package/dist/collection/components/viewer-walk-mode-tool/viewer-walk-mode-tool.js.map +1 -1
  148. package/dist/collection/lib/annotations/controller.js.map +1 -1
  149. package/dist/collection/lib/canvases/controller.js.map +1 -1
  150. package/dist/collection/lib/canvases/mapper.js.map +1 -1
  151. package/dist/collection/lib/config.js.map +1 -1
  152. package/dist/collection/lib/cursors.js.map +1 -1
  153. package/dist/collection/lib/dom.js.map +1 -1
  154. package/dist/collection/lib/grpc.js.map +1 -1
  155. package/dist/collection/lib/interactions/baseInteractionHandler.js.map +1 -1
  156. package/dist/collection/lib/interactions/flyToPartKeyInteraction.js.map +1 -1
  157. package/dist/collection/lib/interactions/flyToPositionKeyInteraction.js.map +1 -1
  158. package/dist/collection/lib/interactions/interactionApi.js.map +1 -1
  159. package/dist/collection/lib/interactions/interactionApiOrthographic.js.map +1 -1
  160. package/dist/collection/lib/interactions/interactionApiPerspective.js.map +1 -1
  161. package/dist/collection/lib/interactions/mouseInteractionHandler.js.map +1 -1
  162. package/dist/collection/lib/interactions/mouseInteractions.js.map +1 -1
  163. package/dist/collection/lib/interactions/multiElementInteractionHandler.js.map +1 -1
  164. package/dist/collection/lib/interactions/multiPointerInteractionHandler.js.map +1 -1
  165. package/dist/collection/lib/interactions/multiTouchInteractionHandler.js.map +1 -1
  166. package/dist/collection/lib/interactions/pointerInteractionHandler.js.map +1 -1
  167. package/dist/collection/lib/interactions/tapInteractionHandler.js.map +1 -1
  168. package/dist/collection/lib/interactions/touchInteractionHandler.js.map +1 -1
  169. package/dist/collection/lib/keyBinding.js.map +1 -1
  170. package/dist/collection/lib/mappers/annotation.js.map +1 -1
  171. package/dist/collection/lib/mappers/camera.js.map +1 -1
  172. package/dist/collection/lib/mappers/color.js.map +1 -1
  173. package/dist/collection/lib/mappers/colorMaterial.js.map +1 -1
  174. package/dist/collection/lib/mappers/corePb.js.map +1 -1
  175. package/dist/collection/lib/mappers/corePbJs.js.map +1 -1
  176. package/dist/collection/lib/mappers/frameStreaming.js.map +1 -1
  177. package/dist/collection/lib/mappers/geometry.js.map +1 -1
  178. package/dist/collection/lib/mappers/material.js.map +1 -1
  179. package/dist/collection/lib/mappers/pagination.js.map +1 -1
  180. package/dist/collection/lib/mappers/scalar.js.map +1 -1
  181. package/dist/collection/lib/mappers/streamAttributes.js.map +1 -1
  182. package/dist/collection/lib/markup/interactions.js.map +1 -1
  183. package/dist/collection/lib/measurement/controller.js.map +1 -1
  184. package/dist/collection/lib/measurement/entities.js.map +1 -1
  185. package/dist/collection/lib/measurement/interactions.js.map +1 -1
  186. package/dist/collection/lib/measurement/mapper.js.map +1 -1
  187. package/dist/collection/lib/measurement/model.js.map +1 -1
  188. package/dist/collection/lib/measurement/overlays.js.map +1 -1
  189. package/dist/collection/lib/measurement/results.js.map +1 -1
  190. package/dist/collection/lib/meters.js.map +1 -1
  191. package/dist/collection/lib/model-views/controller.js.map +1 -1
  192. package/dist/collection/lib/model-views/mapper.js.map +1 -1
  193. package/dist/collection/lib/pins/controller.js.map +1 -1
  194. package/dist/collection/lib/pins/interactions.js.map +1 -1
  195. package/dist/collection/lib/pmi/controller.js.map +1 -1
  196. package/dist/collection/lib/pmi/mapper.js.map +1 -1
  197. package/dist/collection/lib/rendering/canvas.js.map +1 -1
  198. package/dist/collection/lib/rendering/imageLoaders.js.map +1 -1
  199. package/dist/collection/lib/rendering/matrices.js.map +1 -1
  200. package/dist/collection/lib/rendering/timing.js.map +1 -1
  201. package/dist/collection/lib/rendering/utils.js.map +1 -1
  202. package/dist/collection/lib/rendering/vectors.js.map +1 -1
  203. package/dist/collection/lib/scene-items/controller.js.map +1 -1
  204. package/dist/collection/lib/scene-items/mapper.js.map +1 -1
  205. package/dist/collection/lib/scenes/camera.js.map +1 -1
  206. package/dist/collection/lib/scenes/cameraRenderResult.js.map +1 -1
  207. package/dist/collection/lib/scenes/colorMaterial.js.map +1 -1
  208. package/dist/collection/lib/scenes/crossSectioner.js.map +1 -1
  209. package/dist/collection/lib/scenes/mapper.js.map +1 -1
  210. package/dist/collection/lib/scenes/operations.js.map +1 -1
  211. package/dist/collection/lib/scenes/queries.js.map +1 -1
  212. package/dist/collection/lib/scenes/raycaster.js.map +1 -1
  213. package/dist/collection/lib/scenes/scene.js.map +1 -1
  214. package/dist/collection/lib/scenes/sceneOperationExecuteResult.js.map +1 -1
  215. package/dist/collection/lib/scenes/sceneViewStateLoader.js.map +1 -1
  216. package/dist/collection/lib/stencil.js.map +1 -1
  217. package/dist/collection/lib/storage.js.map +1 -1
  218. package/dist/collection/lib/stream/dispatcher.js.map +1 -1
  219. package/dist/collection/lib/stream/stream.js.map +1 -1
  220. package/dist/collection/lib/stream/utils.js.map +1 -1
  221. package/dist/collection/lib/teleportation/interactions.js.map +1 -1
  222. package/dist/collection/lib/templates.js.map +1 -1
  223. package/dist/collection/lib/token.js.map +1 -1
  224. package/dist/collection/lib/transforms/axis-lines.js.map +1 -1
  225. package/dist/collection/lib/transforms/axis-rotation.js.map +1 -1
  226. package/dist/collection/lib/transforms/axis-translation.js.map +1 -1
  227. package/dist/collection/lib/transforms/controller.js.map +1 -1
  228. package/dist/collection/lib/transforms/drawable.js.map +1 -1
  229. package/dist/collection/lib/transforms/hits.js.map +1 -1
  230. package/dist/collection/lib/transforms/line.js.map +1 -1
  231. package/dist/collection/lib/transforms/mesh.js.map +1 -1
  232. package/dist/collection/lib/transforms/shape.js.map +1 -1
  233. package/dist/collection/lib/transforms/transformation-delta.js.map +1 -1
  234. package/dist/collection/lib/transforms/util.js.map +1 -1
  235. package/dist/collection/lib/types/clippingPlanes.js.map +1 -1
  236. package/dist/collection/lib/types/depthBuffer.js.map +1 -1
  237. package/dist/collection/lib/types/featureMap.js.map +1 -1
  238. package/dist/collection/lib/types/flags.js.map +1 -1
  239. package/dist/collection/lib/types/frame.js.map +1 -1
  240. package/dist/collection/lib/types/frameCamera.js.map +1 -1
  241. package/dist/collection/lib/types/loadableResource.js.map +1 -1
  242. package/dist/collection/lib/types/orientation.js.map +1 -1
  243. package/dist/collection/lib/types/sceneViewStateIdentifier.js.map +1 -1
  244. package/dist/collection/lib/types/standardView.js.map +1 -1
  245. package/dist/collection/lib/types/stencilBuffer.js.map +1 -1
  246. package/dist/collection/lib/types/synchronizedClock.js.map +1 -1
  247. package/dist/collection/lib/types/viewport.js.map +1 -1
  248. package/dist/collection/lib/visibilityObserver.js.map +1 -1
  249. package/dist/collection/lib/volume-intersection/controller.js.map +1 -1
  250. package/dist/collection/lib/volume-intersection/interactions.js.map +1 -1
  251. package/dist/collection/lib/volume-intersection/model.js.map +1 -1
  252. package/dist/collection/lib/walk-mode/controller.js.map +1 -1
  253. package/dist/collection/lib/walk-mode/interactions.js.map +1 -1
  254. package/dist/collection/lib/walk-mode/model.js.map +1 -1
  255. package/dist/collection/lib/webgl/regl-component.js.map +1 -1
  256. package/dist/collection/testing/annotations.js.map +1 -1
  257. package/dist/collection/testing/canvases.js.map +1 -1
  258. package/dist/collection/testing/colors.js.map +1 -1
  259. package/dist/collection/testing/eventually.js.map +1 -1
  260. package/dist/collection/testing/fixtures.js.map +1 -1
  261. package/dist/collection/testing/grpc.js +3 -9
  262. package/dist/collection/testing/grpc.js.map +1 -1
  263. package/dist/collection/testing/modelViews.js.map +1 -1
  264. package/dist/collection/testing/pmi.js.map +1 -1
  265. package/dist/collection/testing/random.js.map +1 -1
  266. package/dist/collection/testing/resizeObserver.js.map +1 -1
  267. package/dist/collection/testing/scene-items-helper.js.map +1 -1
  268. package/dist/collection/testing/sceneTree.js.map +1 -1
  269. package/dist/collection/testing/viewer.js.map +1 -1
  270. package/dist/collection/testing/webgl.js.map +1 -1
  271. package/dist/components/index.js.map +1 -1
  272. package/dist/components/{p-St4ctu2K.js → p-3-bKfpqr.js} +2 -2
  273. package/dist/components/{p-St4ctu2K.js.map → p-3-bKfpqr.js.map} +1 -1
  274. package/dist/components/p-3DqRAYgO.js.map +1 -1
  275. package/dist/components/p-B-ToCp8-.js.map +1 -1
  276. package/dist/components/p-B156bTbY.js +5 -0
  277. package/dist/components/p-B156bTbY.js.map +1 -0
  278. package/dist/components/p-B9R0QWr4.js.map +1 -1
  279. package/dist/components/p-BCOD9yfw.js.map +1 -1
  280. package/dist/components/p-BHAaIoH5.js.map +1 -1
  281. package/dist/components/{p-Doltf1wO.js → p-BOJJZ1cN.js} +2 -2
  282. package/dist/components/p-BOJJZ1cN.js.map +1 -0
  283. package/dist/components/p-BkHp-aAR.js.map +1 -1
  284. package/dist/components/p-Bkm6H5uq.js.map +1 -1
  285. package/dist/components/p-C-VWDW9n.js.map +1 -1
  286. package/dist/components/p-C79PxobX.js.map +1 -1
  287. package/dist/components/p-CAugdB_8.js.map +1 -1
  288. package/dist/components/p-CEzVEgdQ.js.map +1 -1
  289. package/dist/components/p-CGCJ5hbJ.js.map +1 -1
  290. package/dist/components/p-COlcifvm.js.map +1 -1
  291. package/dist/components/p-CXTH3zrN.js.map +1 -1
  292. package/dist/components/p-CZCXdo3t.js.map +1 -1
  293. package/dist/components/p-Cd7kap5W.js.map +1 -1
  294. package/dist/components/p-CiSHWNC4.js.map +1 -1
  295. package/dist/components/p-CjG1fMh1.js.map +1 -1
  296. package/dist/components/p-CkjXRDNL.js.map +1 -1
  297. package/dist/components/p-D0KZu516.js.map +1 -1
  298. package/dist/components/p-D12q-fpW.js.map +1 -1
  299. package/dist/components/p-D33gVA2W.js.map +1 -1
  300. package/dist/components/p-DC86ZXai.js.map +1 -1
  301. package/dist/components/{p-B80hfIq6.js → p-DF4kEsJU.js} +2 -2
  302. package/dist/components/p-DF4kEsJU.js.map +1 -0
  303. package/dist/components/p-DRh4_Z-g.js.map +1 -1
  304. package/dist/components/p-DRnMrHWY.js.map +1 -1
  305. package/dist/components/{p-b0ZzPHz8.js → p-DUC59SSO.js} +2 -2
  306. package/dist/components/p-DUC59SSO.js.map +1 -0
  307. package/dist/components/p-DVW2WZTq.js.map +1 -1
  308. package/dist/components/p-DZI8pnGz.js.map +1 -1
  309. package/dist/components/p-Dbz9yUqC.js.map +1 -1
  310. package/dist/components/p-Yfi0i5Kj.js.map +1 -1
  311. package/dist/components/p-abSJ29r7.js.map +1 -1
  312. package/dist/components/p-ahjMltGJ.js.map +1 -1
  313. package/dist/components/p-bal2RLiw.js.map +1 -1
  314. package/dist/components/{p-BopQW1sA.js → p-oK38ynrd.js} +2 -2
  315. package/dist/components/p-oK38ynrd.js.map +1 -0
  316. package/dist/components/vertex-scene-tree-table-cell.js +1 -1
  317. package/dist/components/vertex-scene-tree-table-cell.js.map +1 -1
  318. package/dist/components/vertex-scene-tree-table-layout.js +1 -1
  319. package/dist/components/vertex-scene-tree.js +1 -1
  320. package/dist/components/vertex-scene-tree.js.map +1 -1
  321. package/dist/components/vertex-viewer-box-query-tool.js +1 -1
  322. package/dist/components/vertex-viewer-box-query-tool.js.map +1 -1
  323. package/dist/components/vertex-viewer-dom-element.js +1 -1
  324. package/dist/components/vertex-viewer-dom-group.js +1 -1
  325. package/dist/components/vertex-viewer-hit-result-indicator.js +1 -1
  326. package/dist/components/vertex-viewer-hit-result-indicator.js.map +1 -1
  327. package/dist/components/vertex-viewer-markup-tool.js.map +1 -1
  328. package/dist/components/vertex-viewer-markup.js +1 -1
  329. package/dist/components/vertex-viewer-markup.js.map +1 -1
  330. package/dist/components/vertex-viewer-measurement-details.js.map +1 -1
  331. package/dist/components/vertex-viewer-measurement-distance.js +1 -1
  332. package/dist/components/vertex-viewer-measurement-distance.js.map +1 -1
  333. package/dist/components/vertex-viewer-measurement-line.js +1 -1
  334. package/dist/components/vertex-viewer-measurement-overlays.js +1 -1
  335. package/dist/components/vertex-viewer-measurement-precise.js +1 -1
  336. package/dist/components/vertex-viewer-measurement-precise.js.map +1 -1
  337. package/dist/components/vertex-viewer-pin-group.js +1 -1
  338. package/dist/components/vertex-viewer-pin-tool.js +1 -1
  339. package/dist/components/vertex-viewer-pin-tool.js.map +1 -1
  340. package/dist/components/vertex-viewer-transform-widget.js +1 -1
  341. package/dist/components/vertex-viewer-transform-widget.js.map +1 -1
  342. package/dist/components/vertex-viewer-view-cube.js +1 -1
  343. package/dist/components/vertex-viewer-view-cube.js.map +1 -1
  344. package/dist/components/vertex-viewer-walk-mode-tool.js.map +1 -1
  345. package/dist/components/vertex-viewer.js +1 -1
  346. package/dist/components/vertex-viewer.js.map +1 -1
  347. package/dist/esm/config-lglER3mU.js.map +1 -1
  348. package/dist/esm/controller-BMWGs-I6.js.map +1 -1
  349. package/dist/esm/controller-Iymb_J2R.js.map +1 -1
  350. package/dist/esm/cursors-BbBDEutb.js.map +1 -1
  351. package/dist/esm/dom-B3m2VjbN.js.map +1 -1
  352. package/dist/esm/dom-DX6pEG54.js.map +1 -1
  353. package/dist/esm/entities-zRken6VS.js.map +1 -1
  354. package/dist/esm/geometry_pb-BiZRfctN.js.map +1 -1
  355. package/dist/esm/grpc-CZAYqbTu.js.map +1 -1
  356. package/dist/esm/index.js.map +1 -1
  357. package/dist/esm/model-BYW5YIye.js.map +1 -1
  358. package/dist/esm/model-CLtwOS0o.js.map +1 -1
  359. package/dist/esm/model-D0EJdHmW.js.map +1 -1
  360. package/dist/esm/model-DHJ5aE4y.js.map +1 -1
  361. package/dist/esm/multiElementInteractionHandler-DwjL-r55.js.map +1 -1
  362. package/dist/esm/overlays-BE1oqniA.js.map +1 -1
  363. package/dist/esm/queries-DEzCmbTD.js.map +1 -1
  364. package/dist/esm/regl-component-DmkowWhg.js.map +1 -1
  365. package/dist/esm/representation_pb-g4f0WC4k.js.map +1 -1
  366. package/dist/esm/results-CFB6nKu8.js.map +1 -1
  367. package/dist/esm/row-CiSHWNC4.js.map +1 -1
  368. package/dist/esm/stencil-BV-7pO4q.js.map +1 -1
  369. package/dist/esm/streamAttributes-Cp8PEH9A.js.map +1 -1
  370. package/dist/esm/templates-DRh4_Z-g.js.map +1 -1
  371. package/dist/esm/util-BCZZYmp4.js.map +1 -1
  372. package/dist/esm/utils-BvZ9-fs0.js.map +1 -1
  373. package/dist/esm/utils-DC86ZXai.js.map +1 -1
  374. package/dist/esm/utils-D_pIldrS.js.map +1 -1
  375. package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js +6 -8
  376. package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js.map +1 -1
  377. package/dist/esm/vertex-scene-tree-table-cell.entry.js +1 -1
  378. package/dist/esm/vertex-scene-tree-table-cell.entry.js.map +1 -1
  379. package/dist/esm/vertex-scene-tree.entry.js +2 -2
  380. package/dist/esm/vertex-scene-tree.entry.js.map +1 -1
  381. package/dist/esm/vertex-viewer-box-query-tool.entry.js +2 -2
  382. package/dist/esm/vertex-viewer-box-query-tool.entry.js.map +1 -1
  383. package/dist/esm/vertex-viewer-dom-element_2.entry.js +1 -1
  384. package/dist/esm/vertex-viewer-dom-element_2.entry.js.map +1 -1
  385. package/dist/esm/vertex-viewer-dom-group.entry.js +1 -1
  386. package/dist/esm/vertex-viewer-dom-group.entry.js.map +1 -1
  387. package/dist/esm/vertex-viewer-hit-result-indicator.entry.js +1 -1
  388. package/dist/esm/vertex-viewer-hit-result-indicator.entry.js.map +1 -1
  389. package/dist/esm/vertex-viewer-icon.entry.js.map +1 -1
  390. package/dist/esm/vertex-viewer-markup-arrow_3.entry.js.map +1 -1
  391. package/dist/esm/vertex-viewer-markup-tool.entry.js.map +1 -1
  392. package/dist/esm/vertex-viewer-markup.entry.js +1 -1
  393. package/dist/esm/vertex-viewer-markup.entry.js.map +1 -1
  394. package/dist/esm/vertex-viewer-measurement-details.entry.js.map +1 -1
  395. package/dist/esm/vertex-viewer-measurement-distance.entry.js.map +1 -1
  396. package/dist/esm/vertex-viewer-measurement-line_2.entry.js +2 -2
  397. package/dist/esm/vertex-viewer-measurement-line_2.entry.js.map +1 -1
  398. package/dist/esm/vertex-viewer-measurement-precise.entry.js.map +1 -1
  399. package/dist/esm/vertex-viewer-pin-group.entry.js +2 -2
  400. package/dist/esm/vertex-viewer-pin-group.entry.js.map +1 -1
  401. package/dist/esm/vertex-viewer-pin-label_2.entry.js.map +1 -1
  402. package/dist/esm/vertex-viewer-pin-tool.entry.js +1 -1
  403. package/dist/esm/vertex-viewer-pin-tool.entry.js.map +1 -1
  404. package/dist/esm/vertex-viewer-teleport-tool.entry.js.map +1 -1
  405. package/dist/esm/vertex-viewer-transform-widget.entry.js +4 -5
  406. package/dist/esm/vertex-viewer-transform-widget.entry.js.map +1 -1
  407. package/dist/esm/vertex-viewer-view-cube.entry.js +1 -1
  408. package/dist/esm/vertex-viewer-view-cube.entry.js.map +1 -1
  409. package/dist/esm/vertex-viewer-walk-mode-tool.entry.js.map +1 -1
  410. package/dist/esm/vertex-viewer.entry.js +9 -5
  411. package/dist/esm/vertex-viewer.entry.js.map +1 -1
  412. package/dist/esm/viewport-C8WQZxvx.js.map +1 -1
  413. package/dist/types/regl-shape.d.ts +1 -1
  414. package/dist/viewer/index.esm.js.map +1 -1
  415. package/dist/viewer/{p-eac63070.entry.js → p-051b5154.entry.js} +2 -2
  416. package/dist/viewer/p-051b5154.entry.js.map +1 -0
  417. package/dist/viewer/{p-3d3a7eeb.entry.js → p-0984c51f.entry.js} +2 -2
  418. package/dist/viewer/{p-3d3a7eeb.entry.js.map → p-0984c51f.entry.js.map} +1 -1
  419. package/dist/viewer/{p-864f40c7.entry.js → p-11cf755a.entry.js} +2 -2
  420. package/dist/viewer/p-11cf755a.entry.js.map +1 -0
  421. package/dist/viewer/{p-29d14611.entry.js → p-16775f7d.entry.js} +2 -2
  422. package/dist/viewer/p-16775f7d.entry.js.map +1 -0
  423. package/dist/viewer/{p-5a85cae5.entry.js → p-1eb636f8.entry.js} +2 -2
  424. package/dist/viewer/p-1eb636f8.entry.js.map +1 -0
  425. package/dist/viewer/{p-e993f300.entry.js → p-228d1d43.entry.js} +2 -2
  426. package/dist/viewer/p-228d1d43.entry.js.map +1 -0
  427. package/dist/viewer/p-33f44cc1.entry.js.map +1 -1
  428. package/dist/viewer/{p-3300d3dc.entry.js → p-35601c85.entry.js} +2 -2
  429. package/dist/viewer/p-35601c85.entry.js.map +1 -0
  430. package/dist/viewer/p-47766566.entry.js.map +1 -1
  431. package/dist/viewer/p-6e3a6bbd.entry.js.map +1 -1
  432. package/dist/viewer/p-7f388b45.entry.js.map +1 -1
  433. package/dist/viewer/p-89544066.entry.js.map +1 -1
  434. package/dist/viewer/{p-07b99ac9.entry.js → p-8c369777.entry.js} +2 -2
  435. package/dist/viewer/p-8c369777.entry.js.map +1 -0
  436. package/dist/viewer/{p-e59983dc.entry.js → p-9835c5e2.entry.js} +2 -2
  437. package/dist/viewer/p-9835c5e2.entry.js.map +1 -0
  438. package/dist/viewer/{p-aa95e21a.entry.js → p-9d8ff406.entry.js} +2 -2
  439. package/dist/viewer/p-9d8ff406.entry.js.map +1 -0
  440. package/dist/viewer/p-BDvACHun.js.map +1 -1
  441. package/dist/viewer/p-BIkuvTVH.js.map +1 -1
  442. package/dist/viewer/p-BRPkbTVP.js.map +1 -1
  443. package/dist/viewer/p-BsBIynwj.js.map +1 -1
  444. package/dist/viewer/p-BxtKMwBH.js.map +1 -1
  445. package/dist/viewer/p-C4y4Noe-.js.map +1 -1
  446. package/dist/viewer/p-C6KrfydC.js.map +1 -1
  447. package/dist/viewer/p-C7dYsPFU.js.map +1 -1
  448. package/dist/viewer/p-C9Cqbq6H.js.map +1 -1
  449. package/dist/viewer/p-CVWO4w6b.js.map +1 -1
  450. package/dist/viewer/p-ChqXy0cG.js.map +1 -1
  451. package/dist/viewer/p-CiSHWNC4.js.map +1 -1
  452. package/dist/viewer/p-CjG1fMh1.js.map +1 -1
  453. package/dist/viewer/p-Cs5KOvOQ.js.map +1 -1
  454. package/dist/viewer/p-CyGlYje2.js.map +1 -1
  455. package/dist/viewer/p-D6eJC1q4.js.map +1 -1
  456. package/dist/viewer/p-DC86ZXai.js.map +1 -1
  457. package/dist/viewer/p-DRh4_Z-g.js.map +1 -1
  458. package/dist/viewer/p-DUX5FvBC.js.map +1 -1
  459. package/dist/viewer/p-DX6pEG54.js.map +1 -1
  460. package/dist/viewer/p-D_ixWHO7.js.map +1 -1
  461. package/dist/viewer/p-DacE-wPp.js.map +1 -1
  462. package/dist/viewer/p-Dp56p_jX.js.map +1 -1
  463. package/dist/viewer/p-EsKoKfmx.js.map +1 -1
  464. package/dist/viewer/p-F8e15or2.js.map +1 -1
  465. package/dist/viewer/p-Jfxh0jq9.js.map +1 -1
  466. package/dist/viewer/p-WPRMWirY.js.map +1 -1
  467. package/dist/viewer/p-_93RRNxT.js.map +1 -1
  468. package/dist/viewer/p-a8a81cba.entry.js +5 -0
  469. package/dist/viewer/p-a8a81cba.entry.js.map +1 -0
  470. package/dist/viewer/p-a9282481.entry.js.map +1 -1
  471. package/dist/viewer/{p-63f4f702.entry.js → p-c7e62d66.entry.js} +2 -2
  472. package/dist/viewer/p-c7e62d66.entry.js.map +1 -0
  473. package/dist/viewer/p-d37e647b.entry.js.map +1 -1
  474. package/dist/viewer/{p-302f2078.entry.js → p-d9fe788f.entry.js} +2 -2
  475. package/dist/viewer/p-d9fe788f.entry.js.map +1 -0
  476. package/dist/viewer/p-e9b83dae.entry.js.map +1 -1
  477. package/dist/viewer/{p-70f3629d.entry.js → p-f271dc4a.entry.js} +2 -2
  478. package/dist/viewer/p-f271dc4a.entry.js.map +1 -0
  479. package/dist/viewer/p-f65c0769.entry.js.map +1 -1
  480. package/dist/viewer/viewer.esm.js +1 -1
  481. package/package.json +7 -7
  482. package/dist/components/p-B80hfIq6.js.map +0 -1
  483. package/dist/components/p-BopQW1sA.js.map +0 -1
  484. package/dist/components/p-DNtS2F8J.js +0 -5
  485. package/dist/components/p-DNtS2F8J.js.map +0 -1
  486. package/dist/components/p-Doltf1wO.js.map +0 -1
  487. package/dist/components/p-b0ZzPHz8.js.map +0 -1
  488. package/dist/viewer/p-07b99ac9.entry.js.map +0 -1
  489. package/dist/viewer/p-29d14611.entry.js.map +0 -1
  490. package/dist/viewer/p-302f2078.entry.js.map +0 -1
  491. package/dist/viewer/p-3300d3dc.entry.js.map +0 -1
  492. package/dist/viewer/p-5a85cae5.entry.js.map +0 -1
  493. package/dist/viewer/p-60c915e3.entry.js +0 -5
  494. package/dist/viewer/p-60c915e3.entry.js.map +0 -1
  495. package/dist/viewer/p-63f4f702.entry.js.map +0 -1
  496. package/dist/viewer/p-70f3629d.entry.js.map +0 -1
  497. package/dist/viewer/p-864f40c7.entry.js.map +0 -1
  498. package/dist/viewer/p-aa95e21a.entry.js.map +0 -1
  499. package/dist/viewer/p-e59983dc.entry.js.map +0 -1
  500. package/dist/viewer/p-e993f300.entry.js.map +0 -1
  501. package/dist/viewer/p-eac63070.entry.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"vertex-viewer-markup-tool.entry.js","sources":["src/components/viewer-markup-tool/viewer-markup-tool.css?tag=vertex-viewer-markup-tool&encapsulation=shadow","src/components/viewer-markup-tool/viewer-markup-tool.tsx"],"sourcesContent":[":host {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n pointer-events: none;\n}\n\n:host([elevated=\"\"]) {\n z-index: 100;\n}","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Dimensions, Point } from '@vertexvis/geometry';\nimport { BasicViewer } from '@vertexvis/utils';\n\nimport { stampTemplateWithId } from '../../lib/templates';\nimport {\n ArrowMarkup,\n CircleMarkup,\n FreeformMarkup,\n Markup,\n MarkupCenteringBehavior,\n} from '../../lib/types/markup';\nimport {\n isVertexViewerArrowMarkup,\n LineAnchorStyle,\n} from '../viewer-markup-arrow/utils';\nimport { isVertexViewerCircleMarkup } from '../viewer-markup-circle/utils';\nimport { isVertexViewerFreeformMarkup } from '../viewer-markup-freeform/utils';\n\n/**\n * The types of markup that can be performed by this tool.\n */\nexport type ViewerMarkupToolType = 'arrow' | 'circle' | 'freeform';\n\ninterface StateMap {\n markupElement?:\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement;\n}\n\n@Component({\n tag: 'vertex-viewer-markup-tool',\n styleUrl: 'viewer-markup-tool.css',\n shadow: true,\n})\nexport class ViewerMarkupTool {\n /**\n * An HTML template that describes the HTML to use for new arrow\n * markup. It's expected that the template contains a\n * `<vertex-viewer-markup-arrow>`.\n */\n @Prop()\n public arrowTemplateId?: string;\n\n /**\n * An HTML template that describes the HTML to use for new circle\n * markup. It's expected that the template contains a\n * `<vertex-viewer-markup-circle>`.\n */\n @Prop()\n public circleTemplateId?: string;\n\n /**\n * An HTML template that describes the HTML to use for new freeform\n * markup. It's expected that the template contains a\n * `<vertex-viewer-markup-freeform>`.\n */\n @Prop()\n public freeformTemplateId?: string;\n\n /**\n * The type of markup.\n *\n * This property will automatically be set when a child of a\n * `<vertex-viewer-markup>` element.\n */\n @Prop()\n public tool: ViewerMarkupToolType = 'arrow';\n\n /**\n * Disables markups.\n *\n * This property will automatically be set when a child of a\n * `<vertex-viewer-markup>` element.\n */\n @Prop()\n public disabled = false;\n\n /**\n * The viewer to connect to markup.\n *\n * This property will automatically be set when a child of a\n * `<vertex-viewer-markup>` or `<vertex-viewer>` element.\n */\n @Prop()\n public viewer?: BasicViewer;\n\n /**\n * The style of the starting anchor. This defaults to none.\n */\n @Prop({ mutable: true })\n public startLineAnchorStyle: LineAnchorStyle = 'none';\n\n /**\n * The style of the ending anchor. This defaults to 'arrow-triangle.'\n */\n @Prop({ mutable: true })\n public endLineAnchorStyle: LineAnchorStyle = 'arrow-triangle';\n\n /**\n * The original viewport dimensions where this markup was created. This value is used\n * to determine where the markup should be rendered relative to the current viewport,\n * enabling some markup to appear \"off-screen\".\n *\n * When provided, all NDC values will be considered relative to this viewport.\n */\n @Prop()\n public originatingViewport?: Dimensions.Dimensions;\n\n /**\n * Defines the behavior of the provided markup when the originating viewport is smaller\n * than the current viewport, or is scaled to a size smaller than the current viewport\n * using the `scale` property.\n *\n * Options:\n * - `x-only`: Markup will be centered horizontally, but not vertically.\n * - `y-only`: Markup will be centered vertically, but not horizontally.\n * - `both`: Markup will be centered both horizontally and vertically.\n * - `none`: Markup will not be centered (default).\n */\n @Prop()\n public centeringBehavior: MarkupCenteringBehavior = 'none';\n\n /**\n * The current offset of the visible viewport. This value is used to determine where\n * markup should be rendered relative to the current viewport, enabling some markup to appear \"off-screen\".\n *\n * When provided, all computed coordinates will be offset by this amount.\n */\n @Prop()\n public offset?: Point.Point;\n\n /**\n * The scale to render this markup at. This value is used to scale the element's bounds\n * along with any `offset` to determine the final computed coordinates.\n *\n * When provided, all computed coordinates will be scaled by this amount.\n */\n @Prop()\n public scale = 1;\n\n /**\n * An event that is dispatched when a user begins a new markup.\n */\n @Event({ bubbles: true })\n public markupBegin!: EventEmitter<void>;\n\n /**\n * An event that is dispatched when a user has finished their markup.\n */\n @Event({ bubbles: true })\n public markupEnd!: EventEmitter<Markup>;\n\n @Element()\n private hostEl!: HTMLElement;\n\n /**\n * Captures internal state that you want to preserve across dev refreshes, but\n * don't want to trigger a render when the state changes.\n */\n @State()\n private stateMap: StateMap = {};\n\n @Watch('viewer')\n protected async handleViewerChanged(): Promise<void> {\n if (this.stateMap.markupElement != null) {\n this.stateMap.markupElement.viewer = this.viewer;\n }\n }\n\n /**\n * @ignore\n */\n @Watch('arrowTemplateId')\n @Watch('circleTemplateId')\n @Watch('disabled')\n @Watch('endLineAnchorStyle')\n @Watch('freeformTemplateId')\n @Watch('startLineAnchorStyle')\n @Watch('tool')\n protected handlePropertyChanged(): void {\n this.updateMarkupElement();\n }\n\n @Watch('scale')\n @Watch('offset')\n @Watch('originatingViewport')\n @Watch('centeringBehavior')\n protected handleScalingConfigurationChanged(): void {\n this.updateMarkupElement();\n }\n\n /**\n * @ignore\n */\n protected componentDidLoad(): void {\n this.updateMarkupElement();\n }\n\n /**\n * Resets the state of the internally managed markup element\n * to allow for creating a new markup. This state is automatically\n * managed when this element is placed as a child of a\n * `<vertex-viewer-markup>` element.\n */\n @Method()\n public async reset(): Promise<void> {\n const { markupElement } = this.stateMap;\n if (isVertexViewerFreeformMarkup(markupElement)) {\n markupElement.points = undefined;\n markupElement.bounds = undefined;\n markupElement.mode = 'create';\n } else if (isVertexViewerCircleMarkup(markupElement)) {\n markupElement.bounds = undefined;\n markupElement.mode = 'create';\n } else if (isVertexViewerArrowMarkup(markupElement)) {\n markupElement.start = undefined;\n markupElement.end = undefined;\n markupElement.mode = 'create';\n }\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n if (!this.disabled) {\n if (\n this.tool === 'arrow' ||\n this.tool === 'circle' ||\n this.tool === 'freeform'\n ) {\n return (\n <Host>\n <slot />\n </Host>\n );\n } else {\n return <Host>{`Unsupported tool type '${this.tool}'.`}</Host>;\n }\n } else {\n return <Host></Host>;\n }\n }\n\n private createArrowMarkupElement(): HTMLVertexViewerMarkupArrowElement {\n if (this.arrowTemplateId != null) {\n const element = stampTemplateWithId(\n window.document.body,\n this.arrowTemplateId,\n isVertexViewerArrowMarkup,\n () =>\n console.warn(\n `Arrow template with ID ${this.arrowTemplateId} not found. Using default arrow element.`\n ),\n () =>\n console.warn(\n `Arrow template does not contain a vertex-viewer-markup-arrow. Using default arrow element.`\n )\n );\n\n if (element != null) {\n return element;\n }\n }\n\n return document.createElement('vertex-viewer-markup-arrow');\n }\n\n private createCircleMarkupElement(): HTMLVertexViewerMarkupCircleElement {\n if (this.circleTemplateId != null) {\n const element = stampTemplateWithId(\n window.document.body,\n this.circleTemplateId,\n isVertexViewerCircleMarkup,\n () =>\n console.warn(\n `Circle template with ID ${this.circleTemplateId} not found. Using default circle element.`\n ),\n () =>\n console.warn(\n `Circle template does not contain a vertex-viewer-markup-circle. Using default circle element.`\n )\n );\n\n if (element != null) {\n return element;\n }\n }\n\n return document.createElement('vertex-viewer-markup-circle');\n }\n\n private createFreeformMarkupElement(): HTMLVertexViewerMarkupFreeformElement {\n if (this.freeformTemplateId != null) {\n const element = stampTemplateWithId(\n window.document.body,\n this.freeformTemplateId,\n isVertexViewerFreeformMarkup,\n () =>\n console.warn(\n `Freeform template with ID ${this.freeformTemplateId} not found. Using default freeform element.`\n ),\n () =>\n console.warn(\n `Freeform template does not contain a vertex-viewer-markup-freeform. Using default freeform element.`\n )\n );\n\n if (element != null) {\n return element;\n }\n }\n\n return document.createElement('vertex-viewer-markup-freeform');\n }\n\n private createNewMarkupElement():\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement {\n switch (this.tool) {\n case 'arrow':\n return this.createArrowMarkupElement();\n case 'circle':\n return this.createCircleMarkupElement();\n case 'freeform':\n return this.createFreeformMarkupElement();\n }\n }\n\n private updateMarkupElement(): void {\n const { markupElement } = this.stateMap;\n if (markupElement != null) {\n markupElement.remove();\n markupElement.dispose();\n markupElement.viewer = undefined;\n markupElement.removeEventListener(\n 'interactionBegin',\n this.handleMarkupInteractionBegin\n );\n markupElement.removeEventListener(\n 'interactionEnd',\n this.handleMarkupInteractionEnd\n );\n }\n\n if (!this.disabled) {\n const newMarkupElement = this.createNewMarkupElement();\n this.hostEl.append(newMarkupElement);\n\n if (this.tool === 'arrow') {\n (\n newMarkupElement as HTMLVertexViewerMarkupArrowElement\n ).startLineAnchorStyle = this.startLineAnchorStyle;\n (\n newMarkupElement as HTMLVertexViewerMarkupArrowElement\n ).endLineAnchorStyle = this.endLineAnchorStyle;\n }\n\n newMarkupElement.mode = 'create';\n newMarkupElement.viewer = this.viewer;\n newMarkupElement.originatingViewport = this.originatingViewport;\n newMarkupElement.centeringBehavior = this.centeringBehavior;\n newMarkupElement.offset = this.offset;\n newMarkupElement.scale = this.scale;\n newMarkupElement.addEventListener(\n 'interactionBegin',\n this.handleMarkupInteractionBegin\n );\n newMarkupElement.addEventListener(\n 'interactionEnd',\n this.handleMarkupInteractionEnd\n );\n this.stateMap.markupElement = newMarkupElement;\n }\n }\n\n private handleMarkupInteractionBegin = (): void => {\n this.markupBegin.emit();\n };\n\n private handleMarkupInteractionEnd = (): void => {\n const { markupElement } = this.stateMap;\n if (isVertexViewerFreeformMarkup(markupElement)) {\n const { points, bounds } = markupElement;\n\n if (points != null && points.length > 0 && bounds != null) {\n this.markupEnd.emit(new FreeformMarkup({ points, bounds }));\n }\n } else if (isVertexViewerCircleMarkup(markupElement)) {\n const { bounds } = markupElement;\n\n if (bounds != null) {\n this.markupEnd.emit(new CircleMarkup({ bounds }));\n }\n } else if (isVertexViewerArrowMarkup(markupElement)) {\n const { start, end } = markupElement;\n\n if (start != null && end != null) {\n this.markupEnd.emit(new ArrowMarkup({ start, end }));\n }\n }\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vertex-viewer-markup-tool.entry.js","sources":["src/components/viewer-markup-tool/viewer-markup-tool.css?tag=vertex-viewer-markup-tool&encapsulation=shadow","src/components/viewer-markup-tool/viewer-markup-tool.tsx"],"sourcesContent":[":host {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n pointer-events: none;\n}\n\n:host([elevated=\"\"]) {\n z-index: 100;\n}","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Dimensions, Point } from '@vertexvis/geometry';\nimport { BasicViewer } from '@vertexvis/utils';\n\nimport { stampTemplateWithId } from '../../lib/templates';\nimport {\n ArrowMarkup,\n CircleMarkup,\n FreeformMarkup,\n Markup,\n MarkupCenteringBehavior,\n} from '../../lib/types/markup';\nimport {\n isVertexViewerArrowMarkup,\n LineAnchorStyle,\n} from '../viewer-markup-arrow/utils';\nimport { isVertexViewerCircleMarkup } from '../viewer-markup-circle/utils';\nimport { isVertexViewerFreeformMarkup } from '../viewer-markup-freeform/utils';\n\n/**\n * The types of markup that can be performed by this tool.\n */\nexport type ViewerMarkupToolType = 'arrow' | 'circle' | 'freeform';\n\ninterface StateMap {\n markupElement?:\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement;\n}\n\n@Component({\n tag: 'vertex-viewer-markup-tool',\n styleUrl: 'viewer-markup-tool.css',\n shadow: true,\n})\nexport class ViewerMarkupTool {\n /**\n * An HTML template that describes the HTML to use for new arrow\n * markup. It's expected that the template contains a\n * `<vertex-viewer-markup-arrow>`.\n */\n @Prop()\n public arrowTemplateId?: string;\n\n /**\n * An HTML template that describes the HTML to use for new circle\n * markup. It's expected that the template contains a\n * `<vertex-viewer-markup-circle>`.\n */\n @Prop()\n public circleTemplateId?: string;\n\n /**\n * An HTML template that describes the HTML to use for new freeform\n * markup. It's expected that the template contains a\n * `<vertex-viewer-markup-freeform>`.\n */\n @Prop()\n public freeformTemplateId?: string;\n\n /**\n * The type of markup.\n *\n * This property will automatically be set when a child of a\n * `<vertex-viewer-markup>` element.\n */\n @Prop()\n public tool: ViewerMarkupToolType = 'arrow';\n\n /**\n * Disables markups.\n *\n * This property will automatically be set when a child of a\n * `<vertex-viewer-markup>` element.\n */\n @Prop()\n public disabled = false;\n\n /**\n * The viewer to connect to markup.\n *\n * This property will automatically be set when a child of a\n * `<vertex-viewer-markup>` or `<vertex-viewer>` element.\n */\n @Prop()\n public viewer?: BasicViewer;\n\n /**\n * The style of the starting anchor. This defaults to none.\n */\n @Prop({ mutable: true })\n public startLineAnchorStyle: LineAnchorStyle = 'none';\n\n /**\n * The style of the ending anchor. This defaults to 'arrow-triangle.'\n */\n @Prop({ mutable: true })\n public endLineAnchorStyle: LineAnchorStyle = 'arrow-triangle';\n\n /**\n * The original viewport dimensions where this markup was created. This value is used\n * to determine where the markup should be rendered relative to the current viewport,\n * enabling some markup to appear \"off-screen\".\n *\n * When provided, all NDC values will be considered relative to this viewport.\n */\n @Prop()\n public originatingViewport?: Dimensions.Dimensions;\n\n /**\n * Defines the behavior of the provided markup when the originating viewport is smaller\n * than the current viewport, or is scaled to a size smaller than the current viewport\n * using the `scale` property.\n *\n * Options:\n * - `x-only`: Markup will be centered horizontally, but not vertically.\n * - `y-only`: Markup will be centered vertically, but not horizontally.\n * - `both`: Markup will be centered both horizontally and vertically.\n * - `none`: Markup will not be centered (default).\n */\n @Prop()\n public centeringBehavior: MarkupCenteringBehavior = 'none';\n\n /**\n * The current offset of the visible viewport. This value is used to determine where\n * markup should be rendered relative to the current viewport, enabling some markup to appear \"off-screen\".\n *\n * When provided, all computed coordinates will be offset by this amount.\n */\n @Prop()\n public offset?: Point.Point;\n\n /**\n * The scale to render this markup at. This value is used to scale the element's bounds\n * along with any `offset` to determine the final computed coordinates.\n *\n * When provided, all computed coordinates will be scaled by this amount.\n */\n @Prop()\n public scale = 1;\n\n /**\n * An event that is dispatched when a user begins a new markup.\n */\n @Event({ bubbles: true })\n public markupBegin!: EventEmitter<void>;\n\n /**\n * An event that is dispatched when a user has finished their markup.\n */\n @Event({ bubbles: true })\n public markupEnd!: EventEmitter<Markup>;\n\n @Element()\n private hostEl!: HTMLElement;\n\n /**\n * Captures internal state that you want to preserve across dev refreshes, but\n * don't want to trigger a render when the state changes.\n */\n @State()\n private stateMap: StateMap = {};\n\n @Watch('viewer')\n protected async handleViewerChanged(): Promise<void> {\n if (this.stateMap.markupElement != null) {\n this.stateMap.markupElement.viewer = this.viewer;\n }\n }\n\n /**\n * @ignore\n */\n @Watch('arrowTemplateId')\n @Watch('circleTemplateId')\n @Watch('disabled')\n @Watch('endLineAnchorStyle')\n @Watch('freeformTemplateId')\n @Watch('startLineAnchorStyle')\n @Watch('tool')\n protected handlePropertyChanged(): void {\n this.updateMarkupElement();\n }\n\n @Watch('scale')\n @Watch('offset')\n @Watch('originatingViewport')\n @Watch('centeringBehavior')\n protected handleScalingConfigurationChanged(): void {\n this.updateMarkupElement();\n }\n\n /**\n * @ignore\n */\n protected componentDidLoad(): void {\n this.updateMarkupElement();\n }\n\n /**\n * Resets the state of the internally managed markup element\n * to allow for creating a new markup. This state is automatically\n * managed when this element is placed as a child of a\n * `<vertex-viewer-markup>` element.\n */\n @Method()\n public async reset(): Promise<void> {\n const { markupElement } = this.stateMap;\n if (isVertexViewerFreeformMarkup(markupElement)) {\n markupElement.points = undefined;\n markupElement.bounds = undefined;\n markupElement.mode = 'create';\n } else if (isVertexViewerCircleMarkup(markupElement)) {\n markupElement.bounds = undefined;\n markupElement.mode = 'create';\n } else if (isVertexViewerArrowMarkup(markupElement)) {\n markupElement.start = undefined;\n markupElement.end = undefined;\n markupElement.mode = 'create';\n }\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n if (!this.disabled) {\n if (\n this.tool === 'arrow' ||\n this.tool === 'circle' ||\n this.tool === 'freeform'\n ) {\n return (\n <Host>\n <slot />\n </Host>\n );\n } else {\n return <Host>{`Unsupported tool type '${this.tool}'.`}</Host>;\n }\n } else {\n return <Host></Host>;\n }\n }\n\n private createArrowMarkupElement(): HTMLVertexViewerMarkupArrowElement {\n if (this.arrowTemplateId != null) {\n const element = stampTemplateWithId(\n window.document.body,\n this.arrowTemplateId,\n isVertexViewerArrowMarkup,\n () =>\n console.warn(\n `Arrow template with ID ${this.arrowTemplateId} not found. Using default arrow element.`,\n ),\n () =>\n console.warn(\n `Arrow template does not contain a vertex-viewer-markup-arrow. Using default arrow element.`,\n ),\n );\n\n if (element != null) {\n return element;\n }\n }\n\n return document.createElement('vertex-viewer-markup-arrow');\n }\n\n private createCircleMarkupElement(): HTMLVertexViewerMarkupCircleElement {\n if (this.circleTemplateId != null) {\n const element = stampTemplateWithId(\n window.document.body,\n this.circleTemplateId,\n isVertexViewerCircleMarkup,\n () =>\n console.warn(\n `Circle template with ID ${this.circleTemplateId} not found. Using default circle element.`,\n ),\n () =>\n console.warn(\n `Circle template does not contain a vertex-viewer-markup-circle. Using default circle element.`,\n ),\n );\n\n if (element != null) {\n return element;\n }\n }\n\n return document.createElement('vertex-viewer-markup-circle');\n }\n\n private createFreeformMarkupElement(): HTMLVertexViewerMarkupFreeformElement {\n if (this.freeformTemplateId != null) {\n const element = stampTemplateWithId(\n window.document.body,\n this.freeformTemplateId,\n isVertexViewerFreeformMarkup,\n () =>\n console.warn(\n `Freeform template with ID ${this.freeformTemplateId} not found. Using default freeform element.`,\n ),\n () =>\n console.warn(\n `Freeform template does not contain a vertex-viewer-markup-freeform. Using default freeform element.`,\n ),\n );\n\n if (element != null) {\n return element;\n }\n }\n\n return document.createElement('vertex-viewer-markup-freeform');\n }\n\n private createNewMarkupElement():\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement {\n switch (this.tool) {\n case 'arrow':\n return this.createArrowMarkupElement();\n case 'circle':\n return this.createCircleMarkupElement();\n case 'freeform':\n return this.createFreeformMarkupElement();\n }\n }\n\n private updateMarkupElement(): void {\n const { markupElement } = this.stateMap;\n if (markupElement != null) {\n markupElement.remove();\n markupElement.dispose();\n markupElement.viewer = undefined;\n markupElement.removeEventListener(\n 'interactionBegin',\n this.handleMarkupInteractionBegin,\n );\n markupElement.removeEventListener(\n 'interactionEnd',\n this.handleMarkupInteractionEnd,\n );\n }\n\n if (!this.disabled) {\n const newMarkupElement = this.createNewMarkupElement();\n this.hostEl.append(newMarkupElement);\n\n if (this.tool === 'arrow') {\n (\n newMarkupElement as HTMLVertexViewerMarkupArrowElement\n ).startLineAnchorStyle = this.startLineAnchorStyle;\n (\n newMarkupElement as HTMLVertexViewerMarkupArrowElement\n ).endLineAnchorStyle = this.endLineAnchorStyle;\n }\n\n newMarkupElement.mode = 'create';\n newMarkupElement.viewer = this.viewer;\n newMarkupElement.originatingViewport = this.originatingViewport;\n newMarkupElement.centeringBehavior = this.centeringBehavior;\n newMarkupElement.offset = this.offset;\n newMarkupElement.scale = this.scale;\n newMarkupElement.addEventListener(\n 'interactionBegin',\n this.handleMarkupInteractionBegin,\n );\n newMarkupElement.addEventListener(\n 'interactionEnd',\n this.handleMarkupInteractionEnd,\n );\n this.stateMap.markupElement = newMarkupElement;\n }\n }\n\n private handleMarkupInteractionBegin = (): void => {\n this.markupBegin.emit();\n };\n\n private handleMarkupInteractionEnd = (): void => {\n const { markupElement } = this.stateMap;\n if (isVertexViewerFreeformMarkup(markupElement)) {\n const { points, bounds } = markupElement;\n\n if (points != null && points.length > 0 && bounds != null) {\n this.markupEnd.emit(new FreeformMarkup({ points, bounds }));\n }\n } else if (isVertexViewerCircleMarkup(markupElement)) {\n const { bounds } = markupElement;\n\n if (bounds != null) {\n this.markupEnd.emit(new CircleMarkup({ bounds }));\n }\n } else if (isVertexViewerArrowMarkup(markupElement)) {\n const { start, end } = markupElement;\n\n if (start != null && end != null) {\n this.markupEnd.emit(new ArrowMarkup({ start, end }));\n }\n }\n };\n}\n"],"names":[],"mappings":"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"}
@@ -287,7 +287,7 @@ const ViewerMarkup = class {
287
287
  * @ignore
288
288
  */
289
289
  render() {
290
- return (h(Host, { key: 'e30960d136c0fcb8bd65f0d123cf639c5d0c591b' }, h("slot", { key: '2bffaeb54dbc2e20056d9ddbf96d50b1720ff55a', onSlotchange: this.handleSlotChange })));
290
+ return (h(Host, { key: '6e5d1d248b208a23b131f097692cf0cf1ca6ad29' }, h("slot", { key: 'b1318c9faea745daf6eab83b4715923b529ffe72', onSlotchange: this.handleSlotChange })));
291
291
  }
292
292
  appendMarkupElement(el) {
293
293
  this.updatePropsOnMarkup(el);
@@ -1 +1 @@
1
- {"version":3,"file":"vertex-viewer-markup.entry.js","sources":["src/components/viewer-markup/viewer-markup.css?tag=vertex-viewer-markup&encapsulation=shadow","src/components/viewer-markup/viewer-markup.tsx"],"sourcesContent":[":host {\n display: block;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n pointer-events: none;\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Dimensions, Point } from '@vertexvis/geometry';\n\nimport { stampTemplateWithId } from '../../lib/templates';\nimport {\n ArrowMarkup,\n CircleMarkup,\n FreeformMarkup,\n Markup,\n MarkupCenteringBehavior,\n MarkupInteraction,\n} from '../../lib/types/markup';\nimport {\n isVertexViewerArrowMarkup,\n LineAnchorStyle,\n} from '../viewer-markup-arrow/utils';\nimport { isVertexViewerCircleMarkup } from '../viewer-markup-circle/utils';\nimport { isVertexViewerFreeformMarkup } from '../viewer-markup-freeform/utils';\nimport { ViewerMarkupToolType } from '../viewer-markup-tool/viewer-markup-tool';\n\n@Component({\n tag: 'vertex-viewer-markup',\n styleUrl: 'viewer-markup.css',\n shadow: true,\n})\nexport class ViewerMarkup {\n /**\n * An HTML template that describes the HTML to use for new arrow\n * markup. It's expected that the template contains a\n * `<vertex-viewer-markup-arrow>`.\n */\n @Prop()\n public arrowTemplateId?: string;\n\n /**\n * An HTML template that describes the HTML to use for new circle\n * markup. It's expected that the template contains a\n * `<vertex-viewer-markup-circle>`.\n */\n @Prop()\n public circleTemplateId?: string;\n\n /**\n * An HTML template that describes the HTML to use for new freeform\n * markup. It's expected that the template contains a\n * `<vertex-viewer-markup-freeform>`.\n */\n @Prop()\n public freeformTemplateId?: string;\n\n /**\n * The type of markup to perform.\n */\n @Prop()\n public tool: ViewerMarkupToolType = 'arrow';\n\n /**\n * If `true`, disables adding or editing of markup through user\n * interaction.\n */\n @Prop()\n public disabled = false;\n\n /**\n * The viewer to connect to markup. If nested within a <vertex-viewer>,\n * this property will be populated automatically.\n */\n @Prop()\n public viewer?: HTMLVertexViewerElement;\n\n /**\n * The ID of the markup that is selected.\n */\n @Prop({ mutable: true })\n public selectedMarkupId?: string;\n\n /**\n * Indicates if new markup should be automatically selected.\n */\n @Prop()\n public selectNew = false;\n\n /**\n * The style of the starting anchor. This defaults to none.\n */\n @Prop({ mutable: true })\n public startLineAnchorStyle: LineAnchorStyle = 'none';\n\n /**\n * The style of the ending anchor. This defaults to 'arrow-triangle.'\n */\n @Prop({ mutable: true })\n public endLineAnchorStyle: LineAnchorStyle = 'arrow-triangle';\n\n /**\n * The original viewport dimensions where this markup was created. This value is used\n * to determine where the markup should be rendered relative to the current viewport,\n * enabling some markup to appear \"off-screen\".\n *\n * When provided, all NDC values will be considered relative to this viewport.\n */\n @Prop()\n public originatingViewport?: Dimensions.Dimensions;\n\n /**\n * Defines the behavior of the provided markup when the originating viewport is smaller\n * than the current viewport, or is scaled to a size smaller than the current viewport\n * using the `scale` property.\n *\n * Options:\n * - `x-only`: Markup will be centered horizontally, but not vertically.\n * - `y-only`: Markup will be centered vertically, but not horizontally.\n * - `both`: Markup will be centered both horizontally and vertically.\n * - `none`: Markup will not be centered (default).\n */\n @Prop()\n public centeringBehavior: MarkupCenteringBehavior = 'none';\n\n /**\n * The current offset of the visible viewport. This value is used to determine where\n * markup should be rendered relative to the current viewport, enabling some markup to appear \"off-screen\".\n *\n * When provided, all computed coordinates will be offset by this amount.\n */\n @Prop()\n public offset?: Point.Point;\n\n /**\n * The scale to render this markup at. This value is used to scale the element's bounds\n * along with any `offset` to determine the final computed coordinates.\n *\n * When provided, all computed coordinates will be scaled by this amount.\n */\n @Prop()\n public scale = 1;\n\n /**\n * Dispatched when a new markup is added, either through user interaction\n * or programmatically.\n */\n @Event()\n public markupAdded!: EventEmitter<\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement\n >;\n\n /**\n * Dispatched when an existing piece of markup is changed, either through user interaction\n * or programmatically.\n */\n @Event()\n public markupChanged!: EventEmitter<\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement\n >;\n\n /**\n * Dispatched when a markup is removed, either through user\n * interaction or programmatically.\n */\n @Event()\n public markupRemoved!: EventEmitter<\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement\n >;\n\n /**\n * Dispatched when markup selection changes. Will either be the\n * selected element or `undefined` indicating that selection\n * was cleared.\n */\n @Event()\n public markupSelectionChanged!: EventEmitter<\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement\n | undefined\n >;\n\n @Element()\n private hostEl!: HTMLElement;\n\n @State()\n private toSelectMarkupId?: string;\n\n @State()\n private pointerDownPosition?: Point.Point;\n\n protected disconnectedCallback(): void {\n window.removeEventListener('pointerup', this.handlePointerUp);\n window.removeEventListener('pointermove', this.handlePointerMove);\n }\n\n /**\n * Adds a new markup as a child to this component. A new markup\n * component will be created from the template specified by\n * `arrow-template-id`, `circle-template-id`, or if undefined\n * a default element will be created.\n *\n * @param markup The markup to add.\n * @returns The markup element that was created.\n * @see {@link arrowTemplateId}\n * @see {@link circleTemplateId}\n */\n @Method()\n public async addMarkup(\n markup: Markup\n ): Promise<\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement\n > {\n if (markup instanceof ArrowMarkup) {\n const { start, end, id } = markup;\n\n const el = this.createArrowMarkupElement();\n this.appendMarkupElement(el);\n el.id = id;\n el.start = start;\n el.end = end;\n el.startLineAnchorStyle = this.startLineAnchorStyle;\n el.endLineAnchorStyle = this.endLineAnchorStyle;\n\n return el;\n } else if (markup instanceof CircleMarkup) {\n const { bounds, id } = markup;\n\n const el = this.createCircleMarkupElement();\n this.appendMarkupElement(el);\n el.id = id;\n el.bounds = bounds;\n\n return el;\n } else if (markup instanceof FreeformMarkup) {\n const { bounds, points, id } = markup;\n\n const el = this.createFreeformMarkupElement();\n this.appendMarkupElement(el);\n el.id = id;\n el.points = points;\n el.bounds = bounds;\n\n return el;\n } else {\n throw new Error(`Cannot add markup. Unknown type '${markup}'.`);\n }\n }\n\n /**\n * Removes a markup with the given ID, and returns the HTML element\n * associated to the markup. Returns `undefined` if no markup is\n * found.\n *\n * @param id The ID of the markup to remove.\n * @returns The markup element, or undefined.\n */\n @Method()\n public async removeMarkup(\n id: string\n ): Promise<\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement\n | undefined\n > {\n const markup = await this.getMarkupElement(id);\n\n if (markup != null) {\n markup.remove();\n this.markupRemoved.emit(markup);\n }\n\n return markup;\n }\n\n /**\n * Returns a list of markup elements that are children of this component.\n *\n * @returns A list of all markups.\n * @see {@link getMarkupElement}\n */\n @Method()\n public async getMarkupElements(): Promise<\n Array<\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement\n >\n > {\n return Array.from(this.hostEl.children).filter(\n (e) =>\n isVertexViewerArrowMarkup(e) ||\n isVertexViewerCircleMarkup(e) ||\n isVertexViewerFreeformMarkup(e)\n ) as Array<\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement\n >;\n }\n\n /**\n * Returns the markup element associated to the given ID.\n *\n * @param id The ID of the markup element to return.\n * @returns A markup element, or `undefined`.\n * @see {@link getMarkupElements}\n */\n @Method()\n public async getMarkupElement(\n id: string\n ): Promise<\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement\n | undefined\n > {\n const markup = await this.getMarkupElements();\n return markup.find((el) => el.id === id);\n }\n\n /**\n * @ignore\n */\n @Watch('selectedMarkupId')\n protected async handleSelectedMarkupIdChanged(): Promise<void> {\n const markup = await this.getMarkupElements();\n markup.forEach((m) => {\n if (m.id === this.selectedMarkupId) {\n m.mode = 'edit';\n this.markupSelectionChanged.emit(m);\n } else {\n m.mode = '';\n }\n });\n\n if (this.selectedMarkupId == null) {\n this.markupSelectionChanged.emit(undefined);\n }\n }\n\n /**\n * @ignore\n */\n @Watch('arrowTemplateId')\n @Watch('circleTemplateId')\n @Watch('freeformTemplateId')\n @Watch('tool')\n protected handlePropertyChanged(): void {\n this.updatePropsOnMarkupTool();\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n @Watch('originatingViewport')\n @Watch('centeringBehavior')\n @Watch('offset')\n @Watch('scale')\n protected async handleViewerChanged(\n newViewer: HTMLVertexViewerElement | undefined\n ): Promise<void> {\n this.updatePropsOnMarkupTool();\n this.updatePropsOnMarkups();\n }\n\n /**\n * @ignore\n */\n @Watch('disabled')\n protected handleDisabledChanged(): void {\n this.updatePropsOnMarkupTool();\n }\n\n /**\n * @ignore\n */\n @Watch('startLineAnchorStyle')\n protected async handleStartLineAnchorStyleChanged(): Promise<void> {\n this.updatePropsOnMarkupTool();\n\n // If a piece of arrow markup is currently selected, then update its anchor style\n const selectedArrow = await this.getSelectedArrowMarkup();\n if (selectedArrow != null) {\n selectedArrow.startLineAnchorStyle = this.startLineAnchorStyle;\n this.markupChanged.emit(selectedArrow);\n }\n }\n\n /**\n * @ignore\n */\n @Watch('endLineAnchorStyle')\n protected async handleEndLineAnchorStyleChanged(): Promise<void> {\n this.updatePropsOnMarkupTool();\n\n // If a piece of arrow markup is currently selected, then update its anchor style\n const selectedArrow = await this.getSelectedArrowMarkup();\n\n if (selectedArrow != null) {\n selectedArrow.endLineAnchorStyle = this.endLineAnchorStyle;\n this.markupChanged.emit(selectedArrow);\n }\n }\n\n /**\n * @ignore\n */\n @Listen('markupEnd')\n protected async handleMarkupEnd(event: CustomEvent<Markup>): Promise<void> {\n const e = event as CustomEvent<Markup>;\n const el = await this.addMarkup(e.detail);\n if (typeof el.componentOnReady === 'function') {\n await el.componentOnReady();\n }\n if (this.selectNew) {\n this.selectedMarkupId = e.detail.id;\n }\n this.getMarkupTool()?.reset();\n }\n\n /**\n * @ignore\n */\n @Listen('interactionEnd')\n protected async handleMarkupUpdated(\n event: CustomEvent<MarkupInteraction>\n ): Promise<void> {\n const e = event as CustomEvent<MarkupInteraction>;\n\n // Do not emit the markupChanged event if the markup was just created\n if (!e.detail.newlyCreatedMarkup) {\n this.markupChanged.emit(e.detail.markup);\n }\n }\n\n /**\n * @ignore\n */\n @Listen('pointerdown')\n protected async handleMarkupPointerDown(event: PointerEvent): Promise<void> {\n if (!this.disabled) {\n const el = event.target as Element;\n const markups = await this.getMarkupElements();\n const markup = markups.find((m) => m === el);\n if (markup?.id != null && markup?.id !== '') {\n this.toSelectMarkupId = el.id;\n }\n this.pointerDownPosition = Point.create(event.clientX, event.clientY);\n\n window.addEventListener('pointermove', this.handlePointerMove);\n window.addEventListener('pointerup', this.handlePointerUp);\n }\n }\n\n /**\n * @ignore\n */\n protected componentDidLoad(): void {\n this.updatePropsOnMarkupTool();\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <slot onSlotchange={this.handleSlotChange} />\n </Host>\n );\n }\n\n private handleSlotChange = (): void => {\n this.updatePropsOnMarkupTool();\n this.updatePropsOnMarkups();\n };\n\n private handlePointerMove = (event: PointerEvent): void => {\n if (\n this.pointerDownPosition != null &&\n Point.distance(\n this.pointerDownPosition,\n Point.create(event.clientX, event.clientY)\n ) > 2\n ) {\n this.toSelectMarkupId = undefined;\n }\n };\n\n private handlePointerUp = async (event: PointerEvent): Promise<void> => {\n if (!this.disabled) {\n const el = event.target as Element;\n const markups = await this.getMarkupElements();\n const markup = markups.find((m) => m === el);\n if (\n markup?.id != null &&\n markup.id !== '' &&\n markup.id === this.toSelectMarkupId\n ) {\n this.selectedMarkupId = el.id;\n } else if (\n this.pointerDownPosition != null &&\n Point.distance(\n this.pointerDownPosition,\n Point.create(event.clientX, event.clientY)\n ) <= 2\n ) {\n this.selectedMarkupId = undefined;\n }\n this.toSelectMarkupId = undefined;\n this.pointerDownPosition = undefined;\n }\n\n window.removeEventListener('pointerup', this.handlePointerUp);\n window.removeEventListener('pointermove', this.handlePointerMove);\n };\n\n private appendMarkupElement(\n el:\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupFreeformElement\n ):\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupFreeformElement {\n this.updatePropsOnMarkup(el);\n this.hostEl.appendChild(el);\n this.markupAdded.emit(el);\n\n return el;\n }\n\n private createArrowMarkupElement(): HTMLVertexViewerMarkupArrowElement {\n if (this.arrowTemplateId != null) {\n const element = stampTemplateWithId(\n window.document.body,\n this.arrowTemplateId,\n isVertexViewerArrowMarkup,\n () =>\n console.warn(\n `Arrow template with ID ${this.arrowTemplateId} not found. Using default arrow element.`\n ),\n () =>\n console.warn(\n `Arrow template does not contain a vertex-viewer-markup-arrow. Using default arrow element.`\n )\n );\n\n if (element != null) {\n return element;\n }\n }\n\n return document.createElement('vertex-viewer-markup-arrow');\n }\n\n private createCircleMarkupElement(): HTMLVertexViewerMarkupCircleElement {\n if (this.circleTemplateId != null) {\n const element = stampTemplateWithId(\n window.document.body,\n this.circleTemplateId,\n isVertexViewerCircleMarkup,\n () =>\n console.warn(\n `Circle template with ID ${this.circleTemplateId} not found. Using default circle element.`\n ),\n () =>\n console.warn(\n `Circle template does not contain a vertex-viewer-markup-circle. Using default circle element.`\n )\n );\n\n if (element != null) {\n return element;\n }\n }\n\n return document.createElement('vertex-viewer-markup-circle');\n }\n\n private createFreeformMarkupElement(): HTMLVertexViewerMarkupFreeformElement {\n if (this.freeformTemplateId != null) {\n const element = stampTemplateWithId(\n window.document.body,\n this.freeformTemplateId,\n isVertexViewerFreeformMarkup,\n () =>\n console.warn(\n `Freeform template with ID ${this.freeformTemplateId} not found. Using default freeform element.`\n ),\n () =>\n console.warn(\n `Freeform template does not contain a vertex-viewer-markup-freeform. Using default freeform element.`\n )\n );\n\n if (element != null) {\n return element;\n }\n }\n\n return document.createElement('vertex-viewer-markup-freeform');\n }\n\n private async updatePropsOnMarkups(): Promise<void> {\n const markup = await this.getMarkupElements();\n markup.forEach((m) => this.updatePropsOnMarkup(m));\n }\n\n private updatePropsOnMarkup(\n element:\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement\n ): void {\n element.viewer = this.viewer;\n element.originatingViewport = this.originatingViewport;\n element.centeringBehavior = this.centeringBehavior;\n element.offset = this.offset;\n element.scale = this.scale;\n element.classList.add('viewer-markup__markup');\n }\n\n private updatePropsOnMarkupTool(): void {\n const tool = this.getMarkupTool();\n if (tool != null) {\n tool.disabled = this.disabled;\n tool.arrowTemplateId = this.arrowTemplateId;\n tool.circleTemplateId = this.circleTemplateId;\n tool.freeformTemplateId = this.freeformTemplateId;\n tool.tool = this.tool;\n tool.viewer = this.viewer;\n tool.startLineAnchorStyle = this.startLineAnchorStyle;\n tool.endLineAnchorStyle = this.endLineAnchorStyle;\n tool.originatingViewport = this.originatingViewport;\n tool.centeringBehavior = this.centeringBehavior;\n tool.offset = this.offset;\n tool.scale = this.scale;\n }\n }\n\n private getMarkupTool(): HTMLVertexViewerMarkupToolElement | undefined {\n return this.hostEl.querySelector('vertex-viewer-markup-tool') as\n | HTMLVertexViewerMarkupToolElement\n | undefined;\n }\n\n private async getSelectedArrowMarkup(): Promise<\n HTMLVertexViewerMarkupArrowElement | undefined\n > {\n if (this.selectedMarkupId != null) {\n const selected = await this.getMarkupElement(this.selectedMarkupId);\n\n return isVertexViewerArrowMarkup(selected) ? selected : undefined;\n }\n }\n}\n"],"names":["Point"],"mappings":"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"}
1
+ {"version":3,"file":"vertex-viewer-markup.entry.js","sources":["src/components/viewer-markup/viewer-markup.css?tag=vertex-viewer-markup&encapsulation=shadow","src/components/viewer-markup/viewer-markup.tsx"],"sourcesContent":[":host {\n display: block;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n pointer-events: none;\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Dimensions, Point } from '@vertexvis/geometry';\n\nimport { stampTemplateWithId } from '../../lib/templates';\nimport {\n ArrowMarkup,\n CircleMarkup,\n FreeformMarkup,\n Markup,\n MarkupCenteringBehavior,\n MarkupInteraction,\n} from '../../lib/types/markup';\nimport {\n isVertexViewerArrowMarkup,\n LineAnchorStyle,\n} from '../viewer-markup-arrow/utils';\nimport { isVertexViewerCircleMarkup } from '../viewer-markup-circle/utils';\nimport { isVertexViewerFreeformMarkup } from '../viewer-markup-freeform/utils';\nimport { ViewerMarkupToolType } from '../viewer-markup-tool/viewer-markup-tool';\n\n@Component({\n tag: 'vertex-viewer-markup',\n styleUrl: 'viewer-markup.css',\n shadow: true,\n})\nexport class ViewerMarkup {\n /**\n * An HTML template that describes the HTML to use for new arrow\n * markup. It's expected that the template contains a\n * `<vertex-viewer-markup-arrow>`.\n */\n @Prop()\n public arrowTemplateId?: string;\n\n /**\n * An HTML template that describes the HTML to use for new circle\n * markup. It's expected that the template contains a\n * `<vertex-viewer-markup-circle>`.\n */\n @Prop()\n public circleTemplateId?: string;\n\n /**\n * An HTML template that describes the HTML to use for new freeform\n * markup. It's expected that the template contains a\n * `<vertex-viewer-markup-freeform>`.\n */\n @Prop()\n public freeformTemplateId?: string;\n\n /**\n * The type of markup to perform.\n */\n @Prop()\n public tool: ViewerMarkupToolType = 'arrow';\n\n /**\n * If `true`, disables adding or editing of markup through user\n * interaction.\n */\n @Prop()\n public disabled = false;\n\n /**\n * The viewer to connect to markup. If nested within a <vertex-viewer>,\n * this property will be populated automatically.\n */\n @Prop()\n public viewer?: HTMLVertexViewerElement;\n\n /**\n * The ID of the markup that is selected.\n */\n @Prop({ mutable: true })\n public selectedMarkupId?: string;\n\n /**\n * Indicates if new markup should be automatically selected.\n */\n @Prop()\n public selectNew = false;\n\n /**\n * The style of the starting anchor. This defaults to none.\n */\n @Prop({ mutable: true })\n public startLineAnchorStyle: LineAnchorStyle = 'none';\n\n /**\n * The style of the ending anchor. This defaults to 'arrow-triangle.'\n */\n @Prop({ mutable: true })\n public endLineAnchorStyle: LineAnchorStyle = 'arrow-triangle';\n\n /**\n * The original viewport dimensions where this markup was created. This value is used\n * to determine where the markup should be rendered relative to the current viewport,\n * enabling some markup to appear \"off-screen\".\n *\n * When provided, all NDC values will be considered relative to this viewport.\n */\n @Prop()\n public originatingViewport?: Dimensions.Dimensions;\n\n /**\n * Defines the behavior of the provided markup when the originating viewport is smaller\n * than the current viewport, or is scaled to a size smaller than the current viewport\n * using the `scale` property.\n *\n * Options:\n * - `x-only`: Markup will be centered horizontally, but not vertically.\n * - `y-only`: Markup will be centered vertically, but not horizontally.\n * - `both`: Markup will be centered both horizontally and vertically.\n * - `none`: Markup will not be centered (default).\n */\n @Prop()\n public centeringBehavior: MarkupCenteringBehavior = 'none';\n\n /**\n * The current offset of the visible viewport. This value is used to determine where\n * markup should be rendered relative to the current viewport, enabling some markup to appear \"off-screen\".\n *\n * When provided, all computed coordinates will be offset by this amount.\n */\n @Prop()\n public offset?: Point.Point;\n\n /**\n * The scale to render this markup at. This value is used to scale the element's bounds\n * along with any `offset` to determine the final computed coordinates.\n *\n * When provided, all computed coordinates will be scaled by this amount.\n */\n @Prop()\n public scale = 1;\n\n /**\n * Dispatched when a new markup is added, either through user interaction\n * or programmatically.\n */\n @Event()\n public markupAdded!: EventEmitter<\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement\n >;\n\n /**\n * Dispatched when an existing piece of markup is changed, either through user interaction\n * or programmatically.\n */\n @Event()\n public markupChanged!: EventEmitter<\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement\n >;\n\n /**\n * Dispatched when a markup is removed, either through user\n * interaction or programmatically.\n */\n @Event()\n public markupRemoved!: EventEmitter<\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement\n >;\n\n /**\n * Dispatched when markup selection changes. Will either be the\n * selected element or `undefined` indicating that selection\n * was cleared.\n */\n @Event()\n public markupSelectionChanged!: EventEmitter<\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement\n | undefined\n >;\n\n @Element()\n private hostEl!: HTMLElement;\n\n @State()\n private toSelectMarkupId?: string;\n\n @State()\n private pointerDownPosition?: Point.Point;\n\n protected disconnectedCallback(): void {\n window.removeEventListener('pointerup', this.handlePointerUp);\n window.removeEventListener('pointermove', this.handlePointerMove);\n }\n\n /**\n * Adds a new markup as a child to this component. A new markup\n * component will be created from the template specified by\n * `arrow-template-id`, `circle-template-id`, or if undefined\n * a default element will be created.\n *\n * @param markup The markup to add.\n * @returns The markup element that was created.\n * @see {@link arrowTemplateId}\n * @see {@link circleTemplateId}\n */\n @Method()\n public async addMarkup(\n markup: Markup,\n ): Promise<\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement\n > {\n if (markup instanceof ArrowMarkup) {\n const { start, end, id } = markup;\n\n const el = this.createArrowMarkupElement();\n this.appendMarkupElement(el);\n el.id = id;\n el.start = start;\n el.end = end;\n el.startLineAnchorStyle = this.startLineAnchorStyle;\n el.endLineAnchorStyle = this.endLineAnchorStyle;\n\n return el;\n } else if (markup instanceof CircleMarkup) {\n const { bounds, id } = markup;\n\n const el = this.createCircleMarkupElement();\n this.appendMarkupElement(el);\n el.id = id;\n el.bounds = bounds;\n\n return el;\n } else if (markup instanceof FreeformMarkup) {\n const { bounds, points, id } = markup;\n\n const el = this.createFreeformMarkupElement();\n this.appendMarkupElement(el);\n el.id = id;\n el.points = points;\n el.bounds = bounds;\n\n return el;\n } else {\n throw new Error(`Cannot add markup. Unknown type '${markup}'.`);\n }\n }\n\n /**\n * Removes a markup with the given ID, and returns the HTML element\n * associated to the markup. Returns `undefined` if no markup is\n * found.\n *\n * @param id The ID of the markup to remove.\n * @returns The markup element, or undefined.\n */\n @Method()\n public async removeMarkup(\n id: string,\n ): Promise<\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement\n | undefined\n > {\n const markup = await this.getMarkupElement(id);\n\n if (markup != null) {\n markup.remove();\n this.markupRemoved.emit(markup);\n }\n\n return markup;\n }\n\n /**\n * Returns a list of markup elements that are children of this component.\n *\n * @returns A list of all markups.\n * @see {@link getMarkupElement}\n */\n @Method()\n public async getMarkupElements(): Promise<\n Array<\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement\n >\n > {\n return Array.from(this.hostEl.children).filter(\n (e) =>\n isVertexViewerArrowMarkup(e) ||\n isVertexViewerCircleMarkup(e) ||\n isVertexViewerFreeformMarkup(e),\n ) as Array<\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement\n >;\n }\n\n /**\n * Returns the markup element associated to the given ID.\n *\n * @param id The ID of the markup element to return.\n * @returns A markup element, or `undefined`.\n * @see {@link getMarkupElements}\n */\n @Method()\n public async getMarkupElement(\n id: string,\n ): Promise<\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement\n | undefined\n > {\n const markup = await this.getMarkupElements();\n return markup.find((el) => el.id === id);\n }\n\n /**\n * @ignore\n */\n @Watch('selectedMarkupId')\n protected async handleSelectedMarkupIdChanged(): Promise<void> {\n const markup = await this.getMarkupElements();\n markup.forEach((m) => {\n if (m.id === this.selectedMarkupId) {\n m.mode = 'edit';\n this.markupSelectionChanged.emit(m);\n } else {\n m.mode = '';\n }\n });\n\n if (this.selectedMarkupId == null) {\n this.markupSelectionChanged.emit(undefined);\n }\n }\n\n /**\n * @ignore\n */\n @Watch('arrowTemplateId')\n @Watch('circleTemplateId')\n @Watch('freeformTemplateId')\n @Watch('tool')\n protected handlePropertyChanged(): void {\n this.updatePropsOnMarkupTool();\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n @Watch('originatingViewport')\n @Watch('centeringBehavior')\n @Watch('offset')\n @Watch('scale')\n protected async handleViewerChanged(\n newViewer: HTMLVertexViewerElement | undefined,\n ): Promise<void> {\n this.updatePropsOnMarkupTool();\n this.updatePropsOnMarkups();\n }\n\n /**\n * @ignore\n */\n @Watch('disabled')\n protected handleDisabledChanged(): void {\n this.updatePropsOnMarkupTool();\n }\n\n /**\n * @ignore\n */\n @Watch('startLineAnchorStyle')\n protected async handleStartLineAnchorStyleChanged(): Promise<void> {\n this.updatePropsOnMarkupTool();\n\n // If a piece of arrow markup is currently selected, then update its anchor style\n const selectedArrow = await this.getSelectedArrowMarkup();\n if (selectedArrow != null) {\n selectedArrow.startLineAnchorStyle = this.startLineAnchorStyle;\n this.markupChanged.emit(selectedArrow);\n }\n }\n\n /**\n * @ignore\n */\n @Watch('endLineAnchorStyle')\n protected async handleEndLineAnchorStyleChanged(): Promise<void> {\n this.updatePropsOnMarkupTool();\n\n // If a piece of arrow markup is currently selected, then update its anchor style\n const selectedArrow = await this.getSelectedArrowMarkup();\n\n if (selectedArrow != null) {\n selectedArrow.endLineAnchorStyle = this.endLineAnchorStyle;\n this.markupChanged.emit(selectedArrow);\n }\n }\n\n /**\n * @ignore\n */\n @Listen('markupEnd')\n protected async handleMarkupEnd(event: CustomEvent<Markup>): Promise<void> {\n const e = event as CustomEvent<Markup>;\n const el = await this.addMarkup(e.detail);\n if (typeof el.componentOnReady === 'function') {\n await el.componentOnReady();\n }\n if (this.selectNew) {\n this.selectedMarkupId = e.detail.id;\n }\n this.getMarkupTool()?.reset();\n }\n\n /**\n * @ignore\n */\n @Listen('interactionEnd')\n protected async handleMarkupUpdated(\n event: CustomEvent<MarkupInteraction>,\n ): Promise<void> {\n const e = event as CustomEvent<MarkupInteraction>;\n\n // Do not emit the markupChanged event if the markup was just created\n if (!e.detail.newlyCreatedMarkup) {\n this.markupChanged.emit(e.detail.markup);\n }\n }\n\n /**\n * @ignore\n */\n @Listen('pointerdown')\n protected async handleMarkupPointerDown(event: PointerEvent): Promise<void> {\n if (!this.disabled) {\n const el = event.target as Element;\n const markups = await this.getMarkupElements();\n const markup = markups.find((m) => m === el);\n if (markup?.id != null && markup?.id !== '') {\n this.toSelectMarkupId = el.id;\n }\n this.pointerDownPosition = Point.create(event.clientX, event.clientY);\n\n window.addEventListener('pointermove', this.handlePointerMove);\n window.addEventListener('pointerup', this.handlePointerUp);\n }\n }\n\n /**\n * @ignore\n */\n protected componentDidLoad(): void {\n this.updatePropsOnMarkupTool();\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <slot onSlotchange={this.handleSlotChange} />\n </Host>\n );\n }\n\n private handleSlotChange = (): void => {\n this.updatePropsOnMarkupTool();\n this.updatePropsOnMarkups();\n };\n\n private handlePointerMove = (event: PointerEvent): void => {\n if (\n this.pointerDownPosition != null &&\n Point.distance(\n this.pointerDownPosition,\n Point.create(event.clientX, event.clientY),\n ) > 2\n ) {\n this.toSelectMarkupId = undefined;\n }\n };\n\n private handlePointerUp = async (event: PointerEvent): Promise<void> => {\n if (!this.disabled) {\n const el = event.target as Element;\n const markups = await this.getMarkupElements();\n const markup = markups.find((m) => m === el);\n if (\n markup?.id != null &&\n markup.id !== '' &&\n markup.id === this.toSelectMarkupId\n ) {\n this.selectedMarkupId = el.id;\n } else if (\n this.pointerDownPosition != null &&\n Point.distance(\n this.pointerDownPosition,\n Point.create(event.clientX, event.clientY),\n ) <= 2\n ) {\n this.selectedMarkupId = undefined;\n }\n this.toSelectMarkupId = undefined;\n this.pointerDownPosition = undefined;\n }\n\n window.removeEventListener('pointerup', this.handlePointerUp);\n window.removeEventListener('pointermove', this.handlePointerMove);\n };\n\n private appendMarkupElement(\n el:\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupFreeformElement,\n ):\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupFreeformElement {\n this.updatePropsOnMarkup(el);\n this.hostEl.appendChild(el);\n this.markupAdded.emit(el);\n\n return el;\n }\n\n private createArrowMarkupElement(): HTMLVertexViewerMarkupArrowElement {\n if (this.arrowTemplateId != null) {\n const element = stampTemplateWithId(\n window.document.body,\n this.arrowTemplateId,\n isVertexViewerArrowMarkup,\n () =>\n console.warn(\n `Arrow template with ID ${this.arrowTemplateId} not found. Using default arrow element.`,\n ),\n () =>\n console.warn(\n `Arrow template does not contain a vertex-viewer-markup-arrow. Using default arrow element.`,\n ),\n );\n\n if (element != null) {\n return element;\n }\n }\n\n return document.createElement('vertex-viewer-markup-arrow');\n }\n\n private createCircleMarkupElement(): HTMLVertexViewerMarkupCircleElement {\n if (this.circleTemplateId != null) {\n const element = stampTemplateWithId(\n window.document.body,\n this.circleTemplateId,\n isVertexViewerCircleMarkup,\n () =>\n console.warn(\n `Circle template with ID ${this.circleTemplateId} not found. Using default circle element.`,\n ),\n () =>\n console.warn(\n `Circle template does not contain a vertex-viewer-markup-circle. Using default circle element.`,\n ),\n );\n\n if (element != null) {\n return element;\n }\n }\n\n return document.createElement('vertex-viewer-markup-circle');\n }\n\n private createFreeformMarkupElement(): HTMLVertexViewerMarkupFreeformElement {\n if (this.freeformTemplateId != null) {\n const element = stampTemplateWithId(\n window.document.body,\n this.freeformTemplateId,\n isVertexViewerFreeformMarkup,\n () =>\n console.warn(\n `Freeform template with ID ${this.freeformTemplateId} not found. Using default freeform element.`,\n ),\n () =>\n console.warn(\n `Freeform template does not contain a vertex-viewer-markup-freeform. Using default freeform element.`,\n ),\n );\n\n if (element != null) {\n return element;\n }\n }\n\n return document.createElement('vertex-viewer-markup-freeform');\n }\n\n private async updatePropsOnMarkups(): Promise<void> {\n const markup = await this.getMarkupElements();\n markup.forEach((m) => this.updatePropsOnMarkup(m));\n }\n\n private updatePropsOnMarkup(\n element:\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement,\n ): void {\n element.viewer = this.viewer;\n element.originatingViewport = this.originatingViewport;\n element.centeringBehavior = this.centeringBehavior;\n element.offset = this.offset;\n element.scale = this.scale;\n element.classList.add('viewer-markup__markup');\n }\n\n private updatePropsOnMarkupTool(): void {\n const tool = this.getMarkupTool();\n if (tool != null) {\n tool.disabled = this.disabled;\n tool.arrowTemplateId = this.arrowTemplateId;\n tool.circleTemplateId = this.circleTemplateId;\n tool.freeformTemplateId = this.freeformTemplateId;\n tool.tool = this.tool;\n tool.viewer = this.viewer;\n tool.startLineAnchorStyle = this.startLineAnchorStyle;\n tool.endLineAnchorStyle = this.endLineAnchorStyle;\n tool.originatingViewport = this.originatingViewport;\n tool.centeringBehavior = this.centeringBehavior;\n tool.offset = this.offset;\n tool.scale = this.scale;\n }\n }\n\n private getMarkupTool(): HTMLVertexViewerMarkupToolElement | undefined {\n return this.hostEl.querySelector('vertex-viewer-markup-tool') as\n | HTMLVertexViewerMarkupToolElement\n | undefined;\n }\n\n private async getSelectedArrowMarkup(): Promise<\n HTMLVertexViewerMarkupArrowElement | undefined\n > {\n if (this.selectedMarkupId != null) {\n const selected = await this.getMarkupElement(this.selectedMarkupId);\n\n return isVertexViewerArrowMarkup(selected) ? selected : undefined;\n }\n }\n}\n"],"names":["Point"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"vertex-viewer-measurement-details.entry.js","sources":["../../node_modules/lower-case/dist.es2015/index.js","../../node_modules/no-case/dist.es2015/index.js","../../node_modules/dot-case/dist.es2015/index.js","../../node_modules/param-case/dist.es2015/index.js","src/components/viewer-measurement-details/viewer-measurement-details-entry.tsx","src/components/viewer-measurement-details/viewer-measurement-details-results.tsx","src/components/viewer-measurement-details/viewer-measurement-details.css?tag=vertex-viewer-measurement-details&encapsulation=shadow","src/components/viewer-measurement-details/viewer-measurement-details.tsx"],"sourcesContent":["/**\n * Source: ftp://ftp.unicode.org/Public/UCD/latest/ucd/SpecialCasing.txt\n */\nvar SUPPORTED_LOCALE = {\n tr: {\n regexp: /\\u0130|\\u0049|\\u0049\\u0307/g,\n map: {\n İ: \"\\u0069\",\n I: \"\\u0131\",\n İ: \"\\u0069\",\n },\n },\n az: {\n regexp: /\\u0130/g,\n map: {\n İ: \"\\u0069\",\n I: \"\\u0131\",\n İ: \"\\u0069\",\n },\n },\n lt: {\n regexp: /\\u0049|\\u004A|\\u012E|\\u00CC|\\u00CD|\\u0128/g,\n map: {\n I: \"\\u0069\\u0307\",\n J: \"\\u006A\\u0307\",\n Į: \"\\u012F\\u0307\",\n Ì: \"\\u0069\\u0307\\u0300\",\n Í: \"\\u0069\\u0307\\u0301\",\n Ĩ: \"\\u0069\\u0307\\u0303\",\n },\n },\n};\n/**\n * Localized lower case.\n */\nexport function localeLowerCase(str, locale) {\n var lang = SUPPORTED_LOCALE[locale.toLowerCase()];\n if (lang)\n return lowerCase(str.replace(lang.regexp, function (m) { return lang.map[m]; }));\n return lowerCase(str);\n}\n/**\n * Lower case as a function.\n */\nexport function lowerCase(str) {\n return str.toLowerCase();\n}\n//# sourceMappingURL=index.js.map","import { lowerCase } from \"lower-case\";\n// Support camel case (\"camelCase\" -> \"camel Case\" and \"CAMELCase\" -> \"CAMEL Case\").\nvar DEFAULT_SPLIT_REGEXP = [/([a-z0-9])([A-Z])/g, /([A-Z])([A-Z][a-z])/g];\n// Remove all non-word characters.\nvar DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi;\n/**\n * Normalize the string into something other libraries can manipulate easier.\n */\nexport function noCase(input, options) {\n if (options === void 0) { options = {}; }\n var _a = options.splitRegexp, splitRegexp = _a === void 0 ? DEFAULT_SPLIT_REGEXP : _a, _b = options.stripRegexp, stripRegexp = _b === void 0 ? DEFAULT_STRIP_REGEXP : _b, _c = options.transform, transform = _c === void 0 ? lowerCase : _c, _d = options.delimiter, delimiter = _d === void 0 ? \" \" : _d;\n var result = replace(replace(input, splitRegexp, \"$1\\0$2\"), stripRegexp, \"\\0\");\n var start = 0;\n var end = result.length;\n // Trim the delimiter from around the output string.\n while (result.charAt(start) === \"\\0\")\n start++;\n while (result.charAt(end - 1) === \"\\0\")\n end--;\n // Transform each token independently.\n return result.slice(start, end).split(\"\\0\").map(transform).join(delimiter);\n}\n/**\n * Replace `re` in the input string with the replacement value.\n */\nfunction replace(input, re, value) {\n if (re instanceof RegExp)\n return input.replace(re, value);\n return re.reduce(function (input, re) { return input.replace(re, value); }, input);\n}\n//# sourceMappingURL=index.js.map","import { __assign } from \"tslib\";\nimport { noCase } from \"no-case\";\nexport function dotCase(input, options) {\n if (options === void 0) { options = {}; }\n return noCase(input, __assign({ delimiter: \".\" }, options));\n}\n//# sourceMappingURL=index.js.map","import { __assign } from \"tslib\";\nimport { dotCase } from \"dot-case\";\nexport function paramCase(input, options) {\n if (options === void 0) { options = {}; }\n return dotCase(input, __assign({ delimiter: \"-\" }, options));\n}\n//# sourceMappingURL=index.js.map","// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { FunctionalComponent, h } from '@stencil/core';\nimport classNames from 'classnames';\nimport { paramCase } from 'param-case';\n\ninterface MeasurementDetailsEntryProps {\n label: string;\n onMouseEnter?: () => void;\n onMouseLeave?: () => void;\n}\n\nexport const MeasurementDetailsEntry: FunctionalComponent<\n MeasurementDetailsEntryProps\n> = ({ label, ...props }, children) => {\n return (\n <div {...props} class=\"measurement-details-entry\">\n <div\n class={classNames('measurement-details-entry-label', paramCase(label))}\n >\n {label}:\n </div>\n {children}\n </div>\n );\n};\n","// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { Fragment, FunctionalComponent, h } from '@stencil/core';\nimport { Vector3 } from '@vertexvis/geometry';\n\nimport { Formatter } from '../../lib/formatter';\nimport {\n MeasurementOverlay,\n MeasurementOverlayManager,\n MeasurementResult,\n MinimumDistanceMeasurementResult,\n PlanarAngleMeasurementResult,\n PlanarDistanceMeasurementResult,\n SurfaceAreaMeasurementResult,\n} from '../../lib/measurement';\nimport { MeasurementDetailsEntry } from './viewer-measurement-details-entry';\n\ninterface MeasurementResultEntryProps<R extends MeasurementResult> {\n result: R;\n overlays?: MeasurementOverlayManager;\n formatter: Formatter<number>;\n onShowOverlay: (overlay: MeasurementOverlay | undefined) => void;\n onHideOverlay: () => void;\n}\n\nexport const MinimumDistanceResultEntry: FunctionalComponent<\n MeasurementResultEntryProps<MinimumDistanceMeasurementResult>\n> = ({ result, formatter, overlays, onShowOverlay, onHideOverlay }) => {\n const v = Vector3.subtract(result.point1, result.point2);\n\n return (\n <Fragment>\n <MeasurementDetailsEntry\n label=\"Dist\"\n onMouseEnter={() => onShowOverlay(overlays?.addLineFromResult(result))}\n onMouseLeave={onHideOverlay}\n >\n {formatter(result.distance)}\n </MeasurementDetailsEntry>\n <MeasurementDetailsEntry\n label=\"X\"\n onMouseEnter={() =>\n onShowOverlay(overlays?.addDistanceVectorFromResult(result))\n }\n onMouseLeave={onHideOverlay}\n >\n {formatter(v.x)}\n </MeasurementDetailsEntry>\n <MeasurementDetailsEntry\n label=\"Y\"\n onMouseEnter={() =>\n onShowOverlay(overlays?.addDistanceVectorFromResult(result))\n }\n onMouseLeave={onHideOverlay}\n >\n {formatter(v.y)}\n </MeasurementDetailsEntry>\n <MeasurementDetailsEntry\n label=\"Z\"\n onMouseEnter={() =>\n onShowOverlay(overlays?.addDistanceVectorFromResult(result))\n }\n onMouseLeave={onHideOverlay}\n >\n {formatter(v.z)}\n </MeasurementDetailsEntry>\n </Fragment>\n );\n};\n\nexport const PlanarAngleResultEntry: FunctionalComponent<\n MeasurementResultEntryProps<PlanarAngleMeasurementResult>\n> = ({ result, formatter }) => {\n return (\n <MeasurementDetailsEntry label=\"Angle\">\n {formatter(result.angle)}\n </MeasurementDetailsEntry>\n );\n};\n\nexport const PlanarDistanceResultEntry: FunctionalComponent<\n MeasurementResultEntryProps<PlanarDistanceMeasurementResult>\n> = ({ result, formatter }) => {\n return (\n <MeasurementDetailsEntry label=\"Parallel Dist\">\n {formatter(result.distance)}\n </MeasurementDetailsEntry>\n );\n};\n\nexport const SurfaceAreaResultEntry: FunctionalComponent<\n MeasurementResultEntryProps<SurfaceAreaMeasurementResult>\n> = ({ result, formatter }) => {\n return (\n <MeasurementDetailsEntry label=\"Area\">\n {formatter(result.area)}\n </MeasurementDetailsEntry>\n );\n};\n",":host {\n display: flex;\n flex-direction: column;\n\n /**\n * @prop --viewer-measurement-details-x-color:\n * The color of the `X` label in measurements.\n * Defaults to red.\n */\n --viewer-measurement-details-x-color: red;\n\n /**\n * @prop --viewer-measurement-details-y-color:\n * The color of the `X` label in measurements.\n * Defaults to var(--green-500).\n */\n --viewer-measurement-details-y-color: var(--green-500);\n\n /**\n * @prop --viewer-measurement-details-z-color:\n * The color of the `X` label in measurements.\n * Defaults to blue.\n */\n --viewer-measurement-details-z-color: blue;\n}\n\n.measurement-details-entry {\n display: flex;\n align-items: center;\n}\n\n.measurement-details-entry-label {\n user-select: none;\n padding-right: 0.25rem;\n}\n\n.measurement-details-entry-label.x {\n color: var(--viewer-measurement-details-x-color);\n}\n\n.measurement-details-entry-label.y {\n color: var(--viewer-measurement-details-y-color);\n}\n\n.measurement-details-entry-label.z {\n color: var(--viewer-measurement-details-z-color);\n}\n","import { Component, h, Host, Prop, State, Watch } from '@stencil/core';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { Formatter } from '../../lib/formatter';\nimport {\n MeasurementModel,\n MeasurementOutcome,\n MeasurementOverlay,\n MeasurementOverlayManager,\n MeasurementResult,\n} from '../../lib/measurement';\nimport {\n AngleUnits,\n AngleUnitType,\n AreaUnits,\n DistanceUnits,\n DistanceUnitType,\n Unit,\n} from '../../lib/types';\nimport {\n MinimumDistanceResultEntry,\n PlanarAngleResultEntry,\n PlanarDistanceResultEntry,\n SurfaceAreaResultEntry,\n} from './viewer-measurement-details-results';\n\n@Component({\n tag: 'vertex-viewer-measurement-details',\n styleUrl: 'viewer-measurement-details.css',\n shadow: true,\n})\nexport class ViewerMeasurementDetails {\n /**\n * The `MeasurementModel` that should be reflected in these details.\n * If not specified, a new `MeasurementModel` will be created,\n * which can then be used to update the display.\n */\n @Prop()\n public measurementModel?: MeasurementModel = new MeasurementModel();\n\n /**\n * The manager that the component will use to present measurement overlays.\n */\n @Prop()\n public measurementOverlays?: MeasurementOverlayManager;\n\n /**\n * The outcome to display. This property is automatically updated if a\n * measurement model is provided.\n */\n @Prop({ mutable: true })\n public measurementOutcome?: MeasurementOutcome;\n\n /**\n * The unit of distance-based measurement.\n */\n @Prop()\n public distanceUnits: DistanceUnitType = 'millimeters';\n\n /**\n * The unit of angle-based measurement.\n */\n @Prop()\n public angleUnits: AngleUnitType = 'degrees';\n\n /**\n * The number of fraction digits to display.\n */\n @Prop()\n public fractionalDigits = 2;\n\n /**\n * An optional formatter that can be used to format the display of a distance.\n * The formatting function is passed a calculated real-world distance and is\n * expected to return a string.\n */\n @Prop()\n public distanceFormatter?: Formatter<number>;\n\n /**\n * An optional formatter that can be used to format the display of an angle.\n * The formatting function is passed a calculated angle in degrees and is\n * expected to return a string.\n */\n @Prop()\n public angleFormatter?: Formatter<number>;\n\n /**\n * An optional formatter that can be used to format the display of an area.\n * The formatting function is passed a calculated area and is\n * expected to return a string.\n */\n @Prop()\n public areaFormatter?: Formatter<number>;\n\n /**\n * A set of result types to display. If `undefined`, then all results will be\n * displayed.\n */\n @Prop()\n public resultTypes?: MeasurementResult['type'][];\n\n @State()\n private overlay?: MeasurementOverlay;\n\n @State()\n private distanceMeasurementUnits = new DistanceUnits(this.distanceUnits);\n\n @State()\n private angleMeasurementUnits = new AngleUnits(this.angleUnits);\n\n @State()\n private areaMeasurementUnits = new AreaUnits(this.distanceUnits);\n\n private onOutcomeChangedHandler?: Disposable;\n\n /**\n * @internal\n */\n protected connectedCallback(): void {\n this.handleMeasurementModelChanged();\n }\n\n /**\n * @internal\n */\n protected disconnectedCallback(): void {\n this.onOutcomeChangedHandler?.dispose();\n }\n\n /**\n * @internal\n */\n @Watch('distanceUnits', { immediate: true })\n protected handleDistanceUnitsChanged(): void {\n this.distanceMeasurementUnits = new DistanceUnits(this.distanceUnits);\n this.areaMeasurementUnits = new AreaUnits(this.distanceUnits);\n }\n\n /**\n * @internal\n */\n @Watch('angleUnits', { immediate: true })\n protected handleAngleUnitsChanged(): void {\n this.angleMeasurementUnits = new AngleUnits(this.angleUnits);\n }\n\n /**\n * @internal\n */\n @Watch('measurementModel', { immediate: true })\n protected handleMeasurementModelChanged(): void {\n this.onOutcomeChangedHandler?.dispose();\n this.onOutcomeChangedHandler = this.measurementModel?.onOutcomeChanged(\n this.handleOutcomeChange\n );\n\n this.updateStateFromModel();\n }\n\n /**\n * @internal\n */\n @Watch('resultTypes')\n protected handleResultTypesChanged(): void {\n this.updateStateFromModel();\n }\n\n /**\n * @internal\n */\n protected render(): h.JSX.IntrinsicElements {\n const isFilteredResultType = (result: MeasurementResult): boolean => {\n return this.resultTypes?.includes(result.type) ?? true;\n };\n\n const results = (this.measurementOutcome?.results ?? []).filter(\n isFilteredResultType\n );\n\n return (\n <Host>\n {this.renderResult('planar-angle', results, (result) => (\n <PlanarAngleResultEntry\n result={result}\n overlays={this.measurementOverlays}\n formatter={this.makeAngleFormatter()}\n onShowOverlay={this.handleShowOverlay}\n onHideOverlay={this.handleHideOverlay}\n />\n ))}\n\n {this.renderResult('planar-distance', results, (result) => (\n <PlanarDistanceResultEntry\n result={result}\n overlays={this.measurementOverlays}\n formatter={this.makeDistanceFormatter()}\n onShowOverlay={this.handleShowOverlay}\n onHideOverlay={this.handleHideOverlay}\n />\n ))}\n\n {this.renderResult('surface-area', results, (result) => (\n <SurfaceAreaResultEntry\n result={result}\n overlays={this.measurementOverlays}\n formatter={this.makeAreaFormatter()}\n onShowOverlay={this.handleShowOverlay}\n onHideOverlay={this.handleHideOverlay}\n />\n ))}\n\n {this.renderResult('minimum-distance', results, (result) => (\n <MinimumDistanceResultEntry\n result={result}\n overlays={this.measurementOverlays}\n formatter={this.makeDistanceFormatter()}\n onShowOverlay={this.handleShowOverlay}\n onHideOverlay={this.handleHideOverlay}\n />\n ))}\n </Host>\n );\n }\n\n private handleShowOverlay = (\n overlay: MeasurementOverlay | undefined\n ): void => {\n this.overlay = overlay;\n };\n\n private handleHideOverlay = (): void => {\n this.overlay?.dispose();\n };\n\n private handleOutcomeChange = (): void => {\n this.updateStateFromModel();\n };\n\n private updateStateFromModel(): void {\n this.measurementOutcome = this.measurementModel?.getOutcome();\n }\n\n private renderResult<T extends MeasurementResult['type']>(\n type: T,\n results: MeasurementResult[],\n render: (\n result: Extract<MeasurementResult, { type: T }>\n ) => h.JSX.IntrinsicElements | undefined\n ): h.JSX.IntrinsicElements | undefined {\n const result = this.getResultForType(type, results);\n return result != null ? render(result) : undefined;\n }\n\n private getResultForType<T extends MeasurementResult['type']>(\n type: T,\n results: MeasurementResult[]\n ): Extract<MeasurementResult, { type: T }> | undefined {\n return results.find((result) => result.type === type) as Extract<\n MeasurementResult,\n { type: T }\n >;\n }\n\n private makeDistanceFormatter(): Formatter<number> {\n return this.makeFormatter(\n (value) => this.distanceMeasurementUnits.convertWorldValueToReal(value),\n this.distanceMeasurementUnits.unit,\n this.distanceFormatter\n );\n }\n\n private makeAngleFormatter(): Formatter<number> {\n return this.makeFormatter(\n (value) => this.angleMeasurementUnits.convertTo(value),\n this.angleMeasurementUnits.unit,\n this.angleFormatter\n );\n }\n\n private makeAreaFormatter(): Formatter<number> {\n return this.makeFormatter(\n (value) => this.areaMeasurementUnits.convertWorldValueToReal(value),\n this.areaMeasurementUnits.unit,\n this.areaFormatter\n );\n }\n\n private makeFormatter(\n convert: (value: number) => number,\n units: Unit,\n customFormatter: Formatter<number> | undefined\n ): Formatter<number> {\n return (value) => {\n const v = convert(value);\n\n if (customFormatter != null) {\n return customFormatter(v);\n } else {\n return this.formatValue(v, units);\n }\n };\n }\n\n private formatValue(value: number, unit: Unit): string {\n const val = value.toFixed(this.fractionalDigits);\n const isApprox = this.measurementOutcome?.isApproximate ?? false;\n return `${isApprox ? '~' + val : val} ${unit.abbreviatedName}`;\n }\n}\n"],"names":["classNames","Vector3"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
1
+ {"version":3,"file":"vertex-viewer-measurement-details.entry.js","sources":["../../node_modules/lower-case/dist.es2015/index.js","../../node_modules/no-case/dist.es2015/index.js","../../node_modules/dot-case/dist.es2015/index.js","../../node_modules/param-case/dist.es2015/index.js","src/components/viewer-measurement-details/viewer-measurement-details-entry.tsx","src/components/viewer-measurement-details/viewer-measurement-details-results.tsx","src/components/viewer-measurement-details/viewer-measurement-details.css?tag=vertex-viewer-measurement-details&encapsulation=shadow","src/components/viewer-measurement-details/viewer-measurement-details.tsx"],"sourcesContent":["/**\n * Source: ftp://ftp.unicode.org/Public/UCD/latest/ucd/SpecialCasing.txt\n */\nvar SUPPORTED_LOCALE = {\n tr: {\n regexp: /\\u0130|\\u0049|\\u0049\\u0307/g,\n map: {\n İ: \"\\u0069\",\n I: \"\\u0131\",\n İ: \"\\u0069\",\n },\n },\n az: {\n regexp: /\\u0130/g,\n map: {\n İ: \"\\u0069\",\n I: \"\\u0131\",\n İ: \"\\u0069\",\n },\n },\n lt: {\n regexp: /\\u0049|\\u004A|\\u012E|\\u00CC|\\u00CD|\\u0128/g,\n map: {\n I: \"\\u0069\\u0307\",\n J: \"\\u006A\\u0307\",\n Į: \"\\u012F\\u0307\",\n Ì: \"\\u0069\\u0307\\u0300\",\n Í: \"\\u0069\\u0307\\u0301\",\n Ĩ: \"\\u0069\\u0307\\u0303\",\n },\n },\n};\n/**\n * Localized lower case.\n */\nexport function localeLowerCase(str, locale) {\n var lang = SUPPORTED_LOCALE[locale.toLowerCase()];\n if (lang)\n return lowerCase(str.replace(lang.regexp, function (m) { return lang.map[m]; }));\n return lowerCase(str);\n}\n/**\n * Lower case as a function.\n */\nexport function lowerCase(str) {\n return str.toLowerCase();\n}\n//# sourceMappingURL=index.js.map","import { lowerCase } from \"lower-case\";\n// Support camel case (\"camelCase\" -> \"camel Case\" and \"CAMELCase\" -> \"CAMEL Case\").\nvar DEFAULT_SPLIT_REGEXP = [/([a-z0-9])([A-Z])/g, /([A-Z])([A-Z][a-z])/g];\n// Remove all non-word characters.\nvar DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi;\n/**\n * Normalize the string into something other libraries can manipulate easier.\n */\nexport function noCase(input, options) {\n if (options === void 0) { options = {}; }\n var _a = options.splitRegexp, splitRegexp = _a === void 0 ? DEFAULT_SPLIT_REGEXP : _a, _b = options.stripRegexp, stripRegexp = _b === void 0 ? DEFAULT_STRIP_REGEXP : _b, _c = options.transform, transform = _c === void 0 ? lowerCase : _c, _d = options.delimiter, delimiter = _d === void 0 ? \" \" : _d;\n var result = replace(replace(input, splitRegexp, \"$1\\0$2\"), stripRegexp, \"\\0\");\n var start = 0;\n var end = result.length;\n // Trim the delimiter from around the output string.\n while (result.charAt(start) === \"\\0\")\n start++;\n while (result.charAt(end - 1) === \"\\0\")\n end--;\n // Transform each token independently.\n return result.slice(start, end).split(\"\\0\").map(transform).join(delimiter);\n}\n/**\n * Replace `re` in the input string with the replacement value.\n */\nfunction replace(input, re, value) {\n if (re instanceof RegExp)\n return input.replace(re, value);\n return re.reduce(function (input, re) { return input.replace(re, value); }, input);\n}\n//# sourceMappingURL=index.js.map","import { __assign } from \"tslib\";\nimport { noCase } from \"no-case\";\nexport function dotCase(input, options) {\n if (options === void 0) { options = {}; }\n return noCase(input, __assign({ delimiter: \".\" }, options));\n}\n//# sourceMappingURL=index.js.map","import { __assign } from \"tslib\";\nimport { dotCase } from \"dot-case\";\nexport function paramCase(input, options) {\n if (options === void 0) { options = {}; }\n return dotCase(input, __assign({ delimiter: \"-\" }, options));\n}\n//# sourceMappingURL=index.js.map","// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { FunctionalComponent, h } from '@stencil/core';\nimport classNames from 'classnames';\nimport { paramCase } from 'param-case';\n\ninterface MeasurementDetailsEntryProps {\n label: string;\n onMouseEnter?: () => void;\n onMouseLeave?: () => void;\n}\n\nexport const MeasurementDetailsEntry: FunctionalComponent<\n MeasurementDetailsEntryProps\n> = ({ label, ...props }, children) => {\n return (\n <div {...props} class=\"measurement-details-entry\">\n <div\n class={classNames('measurement-details-entry-label', paramCase(label))}\n >\n {label}:\n </div>\n {children}\n </div>\n );\n};\n","// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { Fragment, FunctionalComponent, h } from '@stencil/core';\nimport { Vector3 } from '@vertexvis/geometry';\n\nimport { Formatter } from '../../lib/formatter';\nimport {\n MeasurementOverlay,\n MeasurementOverlayManager,\n MeasurementResult,\n MinimumDistanceMeasurementResult,\n PlanarAngleMeasurementResult,\n PlanarDistanceMeasurementResult,\n SurfaceAreaMeasurementResult,\n} from '../../lib/measurement';\nimport { MeasurementDetailsEntry } from './viewer-measurement-details-entry';\n\ninterface MeasurementResultEntryProps<R extends MeasurementResult> {\n result: R;\n overlays?: MeasurementOverlayManager;\n formatter: Formatter<number>;\n onShowOverlay: (overlay: MeasurementOverlay | undefined) => void;\n onHideOverlay: () => void;\n}\n\nexport const MinimumDistanceResultEntry: FunctionalComponent<\n MeasurementResultEntryProps<MinimumDistanceMeasurementResult>\n> = ({ result, formatter, overlays, onShowOverlay, onHideOverlay }) => {\n const v = Vector3.subtract(result.point1, result.point2);\n\n return (\n <Fragment>\n <MeasurementDetailsEntry\n label=\"Dist\"\n onMouseEnter={() => onShowOverlay(overlays?.addLineFromResult(result))}\n onMouseLeave={onHideOverlay}\n >\n {formatter(result.distance)}\n </MeasurementDetailsEntry>\n <MeasurementDetailsEntry\n label=\"X\"\n onMouseEnter={() =>\n onShowOverlay(overlays?.addDistanceVectorFromResult(result))\n }\n onMouseLeave={onHideOverlay}\n >\n {formatter(v.x)}\n </MeasurementDetailsEntry>\n <MeasurementDetailsEntry\n label=\"Y\"\n onMouseEnter={() =>\n onShowOverlay(overlays?.addDistanceVectorFromResult(result))\n }\n onMouseLeave={onHideOverlay}\n >\n {formatter(v.y)}\n </MeasurementDetailsEntry>\n <MeasurementDetailsEntry\n label=\"Z\"\n onMouseEnter={() =>\n onShowOverlay(overlays?.addDistanceVectorFromResult(result))\n }\n onMouseLeave={onHideOverlay}\n >\n {formatter(v.z)}\n </MeasurementDetailsEntry>\n </Fragment>\n );\n};\n\nexport const PlanarAngleResultEntry: FunctionalComponent<\n MeasurementResultEntryProps<PlanarAngleMeasurementResult>\n> = ({ result, formatter }) => {\n return (\n <MeasurementDetailsEntry label=\"Angle\">\n {formatter(result.angle)}\n </MeasurementDetailsEntry>\n );\n};\n\nexport const PlanarDistanceResultEntry: FunctionalComponent<\n MeasurementResultEntryProps<PlanarDistanceMeasurementResult>\n> = ({ result, formatter }) => {\n return (\n <MeasurementDetailsEntry label=\"Parallel Dist\">\n {formatter(result.distance)}\n </MeasurementDetailsEntry>\n );\n};\n\nexport const SurfaceAreaResultEntry: FunctionalComponent<\n MeasurementResultEntryProps<SurfaceAreaMeasurementResult>\n> = ({ result, formatter }) => {\n return (\n <MeasurementDetailsEntry label=\"Area\">\n {formatter(result.area)}\n </MeasurementDetailsEntry>\n );\n};\n",":host {\n display: flex;\n flex-direction: column;\n\n /**\n * @prop --viewer-measurement-details-x-color:\n * The color of the `X` label in measurements.\n * Defaults to red.\n */\n --viewer-measurement-details-x-color: red;\n\n /**\n * @prop --viewer-measurement-details-y-color:\n * The color of the `X` label in measurements.\n * Defaults to var(--green-500).\n */\n --viewer-measurement-details-y-color: var(--green-500);\n\n /**\n * @prop --viewer-measurement-details-z-color:\n * The color of the `X` label in measurements.\n * Defaults to blue.\n */\n --viewer-measurement-details-z-color: blue;\n}\n\n.measurement-details-entry {\n display: flex;\n align-items: center;\n}\n\n.measurement-details-entry-label {\n user-select: none;\n padding-right: 0.25rem;\n}\n\n.measurement-details-entry-label.x {\n color: var(--viewer-measurement-details-x-color);\n}\n\n.measurement-details-entry-label.y {\n color: var(--viewer-measurement-details-y-color);\n}\n\n.measurement-details-entry-label.z {\n color: var(--viewer-measurement-details-z-color);\n}\n","import { Component, h, Host, Prop, State, Watch } from '@stencil/core';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { Formatter } from '../../lib/formatter';\nimport {\n MeasurementModel,\n MeasurementOutcome,\n MeasurementOverlay,\n MeasurementOverlayManager,\n MeasurementResult,\n} from '../../lib/measurement';\nimport {\n AngleUnits,\n AngleUnitType,\n AreaUnits,\n DistanceUnits,\n DistanceUnitType,\n Unit,\n} from '../../lib/types';\nimport {\n MinimumDistanceResultEntry,\n PlanarAngleResultEntry,\n PlanarDistanceResultEntry,\n SurfaceAreaResultEntry,\n} from './viewer-measurement-details-results';\n\n@Component({\n tag: 'vertex-viewer-measurement-details',\n styleUrl: 'viewer-measurement-details.css',\n shadow: true,\n})\nexport class ViewerMeasurementDetails {\n /**\n * The `MeasurementModel` that should be reflected in these details.\n * If not specified, a new `MeasurementModel` will be created,\n * which can then be used to update the display.\n */\n @Prop()\n public measurementModel?: MeasurementModel = new MeasurementModel();\n\n /**\n * The manager that the component will use to present measurement overlays.\n */\n @Prop()\n public measurementOverlays?: MeasurementOverlayManager;\n\n /**\n * The outcome to display. This property is automatically updated if a\n * measurement model is provided.\n */\n @Prop({ mutable: true })\n public measurementOutcome?: MeasurementOutcome;\n\n /**\n * The unit of distance-based measurement.\n */\n @Prop()\n public distanceUnits: DistanceUnitType = 'millimeters';\n\n /**\n * The unit of angle-based measurement.\n */\n @Prop()\n public angleUnits: AngleUnitType = 'degrees';\n\n /**\n * The number of fraction digits to display.\n */\n @Prop()\n public fractionalDigits = 2;\n\n /**\n * An optional formatter that can be used to format the display of a distance.\n * The formatting function is passed a calculated real-world distance and is\n * expected to return a string.\n */\n @Prop()\n public distanceFormatter?: Formatter<number>;\n\n /**\n * An optional formatter that can be used to format the display of an angle.\n * The formatting function is passed a calculated angle in degrees and is\n * expected to return a string.\n */\n @Prop()\n public angleFormatter?: Formatter<number>;\n\n /**\n * An optional formatter that can be used to format the display of an area.\n * The formatting function is passed a calculated area and is\n * expected to return a string.\n */\n @Prop()\n public areaFormatter?: Formatter<number>;\n\n /**\n * A set of result types to display. If `undefined`, then all results will be\n * displayed.\n */\n @Prop()\n public resultTypes?: MeasurementResult['type'][];\n\n @State()\n private overlay?: MeasurementOverlay;\n\n @State()\n private distanceMeasurementUnits = new DistanceUnits(this.distanceUnits);\n\n @State()\n private angleMeasurementUnits = new AngleUnits(this.angleUnits);\n\n @State()\n private areaMeasurementUnits = new AreaUnits(this.distanceUnits);\n\n private onOutcomeChangedHandler?: Disposable;\n\n /**\n * @internal\n */\n protected connectedCallback(): void {\n this.handleMeasurementModelChanged();\n }\n\n /**\n * @internal\n */\n protected disconnectedCallback(): void {\n this.onOutcomeChangedHandler?.dispose();\n }\n\n /**\n * @internal\n */\n @Watch('distanceUnits', { immediate: true })\n protected handleDistanceUnitsChanged(): void {\n this.distanceMeasurementUnits = new DistanceUnits(this.distanceUnits);\n this.areaMeasurementUnits = new AreaUnits(this.distanceUnits);\n }\n\n /**\n * @internal\n */\n @Watch('angleUnits', { immediate: true })\n protected handleAngleUnitsChanged(): void {\n this.angleMeasurementUnits = new AngleUnits(this.angleUnits);\n }\n\n /**\n * @internal\n */\n @Watch('measurementModel', { immediate: true })\n protected handleMeasurementModelChanged(): void {\n this.onOutcomeChangedHandler?.dispose();\n this.onOutcomeChangedHandler = this.measurementModel?.onOutcomeChanged(\n this.handleOutcomeChange,\n );\n\n this.updateStateFromModel();\n }\n\n /**\n * @internal\n */\n @Watch('resultTypes')\n protected handleResultTypesChanged(): void {\n this.updateStateFromModel();\n }\n\n /**\n * @internal\n */\n protected render(): h.JSX.IntrinsicElements {\n const isFilteredResultType = (result: MeasurementResult): boolean => {\n return this.resultTypes?.includes(result.type) ?? true;\n };\n\n const results = (this.measurementOutcome?.results ?? []).filter(\n isFilteredResultType,\n );\n\n return (\n <Host>\n {this.renderResult('planar-angle', results, (result) => (\n <PlanarAngleResultEntry\n result={result}\n overlays={this.measurementOverlays}\n formatter={this.makeAngleFormatter()}\n onShowOverlay={this.handleShowOverlay}\n onHideOverlay={this.handleHideOverlay}\n />\n ))}\n\n {this.renderResult('planar-distance', results, (result) => (\n <PlanarDistanceResultEntry\n result={result}\n overlays={this.measurementOverlays}\n formatter={this.makeDistanceFormatter()}\n onShowOverlay={this.handleShowOverlay}\n onHideOverlay={this.handleHideOverlay}\n />\n ))}\n\n {this.renderResult('surface-area', results, (result) => (\n <SurfaceAreaResultEntry\n result={result}\n overlays={this.measurementOverlays}\n formatter={this.makeAreaFormatter()}\n onShowOverlay={this.handleShowOverlay}\n onHideOverlay={this.handleHideOverlay}\n />\n ))}\n\n {this.renderResult('minimum-distance', results, (result) => (\n <MinimumDistanceResultEntry\n result={result}\n overlays={this.measurementOverlays}\n formatter={this.makeDistanceFormatter()}\n onShowOverlay={this.handleShowOverlay}\n onHideOverlay={this.handleHideOverlay}\n />\n ))}\n </Host>\n );\n }\n\n private handleShowOverlay = (\n overlay: MeasurementOverlay | undefined,\n ): void => {\n this.overlay = overlay;\n };\n\n private handleHideOverlay = (): void => {\n this.overlay?.dispose();\n };\n\n private handleOutcomeChange = (): void => {\n this.updateStateFromModel();\n };\n\n private updateStateFromModel(): void {\n this.measurementOutcome = this.measurementModel?.getOutcome();\n }\n\n private renderResult<T extends MeasurementResult['type']>(\n type: T,\n results: MeasurementResult[],\n render: (\n result: Extract<MeasurementResult, { type: T }>,\n ) => h.JSX.IntrinsicElements | undefined,\n ): h.JSX.IntrinsicElements | undefined {\n const result = this.getResultForType(type, results);\n return result != null ? render(result) : undefined;\n }\n\n private getResultForType<T extends MeasurementResult['type']>(\n type: T,\n results: MeasurementResult[],\n ): Extract<MeasurementResult, { type: T }> | undefined {\n return results.find((result) => result.type === type) as Extract<\n MeasurementResult,\n { type: T }\n >;\n }\n\n private makeDistanceFormatter(): Formatter<number> {\n return this.makeFormatter(\n (value) => this.distanceMeasurementUnits.convertWorldValueToReal(value),\n this.distanceMeasurementUnits.unit,\n this.distanceFormatter,\n );\n }\n\n private makeAngleFormatter(): Formatter<number> {\n return this.makeFormatter(\n (value) => this.angleMeasurementUnits.convertTo(value),\n this.angleMeasurementUnits.unit,\n this.angleFormatter,\n );\n }\n\n private makeAreaFormatter(): Formatter<number> {\n return this.makeFormatter(\n (value) => this.areaMeasurementUnits.convertWorldValueToReal(value),\n this.areaMeasurementUnits.unit,\n this.areaFormatter,\n );\n }\n\n private makeFormatter(\n convert: (value: number) => number,\n units: Unit,\n customFormatter: Formatter<number> | undefined,\n ): Formatter<number> {\n return (value) => {\n const v = convert(value);\n\n if (customFormatter != null) {\n return customFormatter(v);\n } else {\n return this.formatValue(v, units);\n }\n };\n }\n\n private formatValue(value: number, unit: Unit): string {\n const val = value.toFixed(this.fractionalDigits);\n const isApprox = this.measurementOutcome?.isApproximate ?? false;\n return `${isApprox ? '~' + val : val} ${unit.abbreviatedName}`;\n }\n}\n"],"names":["classNames","Vector3"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}