@vertexvis/viewer 0.24.4-canary.9 → 0.24.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 (236) hide show
  1. package/README.template.md +6 -0
  2. package/dist/cjs/{cursors-2dfb0ef3.js → cursors-17ad74ac.js} +2 -2
  3. package/dist/cjs/{cursors-2dfb0ef3.js.map → cursors-17ad74ac.js.map} +1 -1
  4. package/dist/cjs/dom-fc408b4c.js.map +1 -1
  5. package/dist/cjs/{index-5fa5a527.js → index-0abd8b0b.js} +2 -2
  6. package/dist/cjs/index-0abd8b0b.js.map +1 -0
  7. package/dist/cjs/index.cjs.js +2 -2
  8. package/dist/cjs/loader.cjs.js +1 -1
  9. package/dist/cjs/loader.cjs.js.map +1 -1
  10. package/dist/cjs/{queries-cf96c8bc.js → queries-4580caa5.js} +8 -2
  11. package/dist/cjs/queries-4580caa5.js.map +1 -0
  12. package/dist/cjs/{shadow-css-8962c4a9.js → shadow-css-37297ac8.js} +1 -1
  13. package/dist/cjs/shadow-css-37297ac8.js.map +1 -0
  14. package/dist/cjs/{stencil-a3f4e15b.js → stencil-40ef9119.js} +2 -2
  15. package/dist/cjs/{stencil-a3f4e15b.js.map → stencil-40ef9119.js.map} +1 -1
  16. package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js +8 -2
  17. package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js.map +1 -1
  18. package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js +1 -1
  19. package/dist/cjs/vertex-scene-tree-table-column.cjs.entry.js +1 -1
  20. package/dist/cjs/vertex-scene-tree-table-header.cjs.entry.js +1 -1
  21. package/dist/cjs/vertex-scene-tree-table-resize-divider.cjs.entry.js +1 -1
  22. package/dist/cjs/vertex-scene-tree-toolbar-group.cjs.entry.js +1 -1
  23. package/dist/cjs/vertex-scene-tree.cjs.entry.js +1 -1
  24. package/dist/cjs/vertex-viewer-annotation-callout.cjs.entry.js +1 -1
  25. package/dist/cjs/vertex-viewer-box-query-tool.cjs.entry.js +2 -2
  26. package/dist/cjs/vertex-viewer-button_3.cjs.entry.js +1 -1
  27. package/dist/cjs/vertex-viewer-default-toolbar.cjs.entry.js +1 -1
  28. package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js +1 -1
  29. package/dist/cjs/vertex-viewer-dom-group.cjs.entry.js +1 -1
  30. package/dist/cjs/vertex-viewer-hit-result-indicator.cjs.entry.js +2 -2
  31. package/dist/cjs/vertex-viewer-icon.cjs.entry.js +1 -1
  32. package/dist/cjs/vertex-viewer-layer.cjs.entry.js +1 -1
  33. package/dist/cjs/vertex-viewer-markup-arrow_3.cjs.entry.js +1 -1
  34. package/dist/cjs/vertex-viewer-markup-tool.cjs.entry.js +1 -1
  35. package/dist/cjs/vertex-viewer-markup.cjs.entry.js +1 -1
  36. package/dist/cjs/vertex-viewer-measurement-details.cjs.entry.js +1 -1
  37. package/dist/cjs/vertex-viewer-measurement-distance.cjs.entry.js +2 -2
  38. package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js +1 -1
  39. package/dist/cjs/vertex-viewer-measurement-precise.cjs.entry.js +2 -2
  40. package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js +3 -3
  41. package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js.map +1 -1
  42. package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js +2 -2
  43. package/dist/cjs/vertex-viewer-pin-tool.cjs.entry.js +2 -2
  44. package/dist/cjs/vertex-viewer-spinner.cjs.entry.js +1 -1
  45. package/dist/cjs/vertex-viewer-teleport-tool.cjs.entry.js +1 -1
  46. package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js +2 -2
  47. package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js +2 -2
  48. package/dist/cjs/vertex-viewer-walk-mode-tool.cjs.entry.js +4 -4
  49. package/dist/cjs/vertex-viewer-walk-mode-tool.cjs.entry.js.map +1 -1
  50. package/dist/cjs/vertex-viewer.cjs.entry.js +22 -11
  51. package/dist/cjs/vertex-viewer.cjs.entry.js.map +1 -1
  52. package/dist/cjs/viewer.cjs.js +1 -1
  53. package/dist/cjs/viewer.cjs.js.map +1 -1
  54. package/dist/collection/components/scene-tree-search/scene-tree-search.js +21 -1
  55. package/dist/collection/components/scene-tree-search/scene-tree-search.js.map +1 -1
  56. package/dist/collection/components/viewer/viewer.js +18 -7
  57. package/dist/collection/components/viewer/viewer.js.map +1 -1
  58. package/dist/collection/components/viewer-pin-group/viewer-pin-group.css +5 -0
  59. package/dist/collection/components/viewer-walk-mode-tool/viewer-walk-mode-tool.js +3 -3
  60. package/dist/collection/components/viewer-walk-mode-tool/viewer-walk-mode-tool.js.map +1 -1
  61. package/dist/collection/lib/cursors.js +1 -1
  62. package/dist/collection/lib/cursors.js.map +1 -1
  63. package/dist/collection/lib/model-views/controller.js +7 -1
  64. package/dist/collection/lib/model-views/controller.js.map +1 -1
  65. package/dist/collection/lib/stream/stream.js +4 -3
  66. package/dist/collection/lib/stream/stream.js.map +1 -1
  67. package/dist/collection/testing/viewer.js +1 -1
  68. package/dist/collection/testing/viewer.js.map +1 -1
  69. package/dist/components/cursors.js +1 -1
  70. package/dist/components/cursors.js.map +1 -1
  71. package/dist/components/queries.js +7 -1
  72. package/dist/components/queries.js.map +1 -1
  73. package/dist/components/scene-tree-search.js +6 -0
  74. package/dist/components/scene-tree-search.js.map +1 -1
  75. package/dist/components/vertex-viewer-walk-mode-tool.js +3 -3
  76. package/dist/components/vertex-viewer-walk-mode-tool.js.map +1 -1
  77. package/dist/components/vertex-viewer.js +18 -7
  78. package/dist/components/vertex-viewer.js.map +1 -1
  79. package/dist/components/viewer-pin-group.js +1 -1
  80. package/dist/components/viewer-pin-group.js.map +1 -1
  81. package/dist/esm/{cursors-9e349d61.js → cursors-3806bc04.js} +2 -2
  82. package/dist/esm/{cursors-9e349d61.js.map → cursors-3806bc04.js.map} +1 -1
  83. package/dist/esm/dom-dba69343.js.map +1 -1
  84. package/dist/esm/{index-f3e96c9e.js → index-c12dc0cd.js} +2 -2
  85. package/dist/esm/index-c12dc0cd.js.map +1 -0
  86. package/dist/esm/index.js +2 -2
  87. package/dist/esm/index.mjs +2 -2
  88. package/dist/esm/loader.js +1 -1
  89. package/dist/esm/loader.js.map +1 -1
  90. package/dist/esm/loader.mjs +1 -1
  91. package/dist/esm/{queries-2f4a492c.js → queries-948a88f9.js} +8 -2
  92. package/dist/esm/queries-948a88f9.js.map +1 -0
  93. package/dist/esm/{shadow-css-9363884b.js → shadow-css-d5069bdf.js} +1 -1
  94. package/dist/esm/shadow-css-d5069bdf.js.map +1 -0
  95. package/dist/esm/{stencil-9d9f090f.js → stencil-38b2fc28.js} +2 -2
  96. package/dist/esm/{stencil-9d9f090f.js.map → stencil-38b2fc28.js.map} +1 -1
  97. package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js +8 -2
  98. package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js.map +1 -1
  99. package/dist/esm/vertex-scene-tree-table-cell.entry.js +1 -1
  100. package/dist/esm/vertex-scene-tree-table-column.entry.js +1 -1
  101. package/dist/esm/vertex-scene-tree-table-header.entry.js +1 -1
  102. package/dist/esm/vertex-scene-tree-table-resize-divider.entry.js +1 -1
  103. package/dist/esm/vertex-scene-tree-toolbar-group.entry.js +1 -1
  104. package/dist/esm/vertex-scene-tree.entry.js +1 -1
  105. package/dist/esm/vertex-viewer-annotation-callout.entry.js +1 -1
  106. package/dist/esm/vertex-viewer-box-query-tool.entry.js +2 -2
  107. package/dist/esm/vertex-viewer-button_3.entry.js +1 -1
  108. package/dist/esm/vertex-viewer-default-toolbar.entry.js +1 -1
  109. package/dist/esm/vertex-viewer-dom-element_2.entry.js +1 -1
  110. package/dist/esm/vertex-viewer-dom-group.entry.js +1 -1
  111. package/dist/esm/vertex-viewer-hit-result-indicator.entry.js +2 -2
  112. package/dist/esm/vertex-viewer-icon.entry.js +1 -1
  113. package/dist/esm/vertex-viewer-layer.entry.js +1 -1
  114. package/dist/esm/vertex-viewer-markup-arrow_3.entry.js +1 -1
  115. package/dist/esm/vertex-viewer-markup-tool.entry.js +1 -1
  116. package/dist/esm/vertex-viewer-markup.entry.js +1 -1
  117. package/dist/esm/vertex-viewer-measurement-details.entry.js +1 -1
  118. package/dist/esm/vertex-viewer-measurement-distance.entry.js +2 -2
  119. package/dist/esm/vertex-viewer-measurement-line_2.entry.js +1 -1
  120. package/dist/esm/vertex-viewer-measurement-precise.entry.js +2 -2
  121. package/dist/esm/vertex-viewer-pin-group.entry.js +3 -3
  122. package/dist/esm/vertex-viewer-pin-group.entry.js.map +1 -1
  123. package/dist/esm/vertex-viewer-pin-label_2.entry.js +2 -2
  124. package/dist/esm/vertex-viewer-pin-tool.entry.js +2 -2
  125. package/dist/esm/vertex-viewer-spinner.entry.js +1 -1
  126. package/dist/esm/vertex-viewer-teleport-tool.entry.js +1 -1
  127. package/dist/esm/vertex-viewer-transform-widget.entry.js +2 -2
  128. package/dist/esm/vertex-viewer-view-cube.entry.js +2 -2
  129. package/dist/esm/vertex-viewer-walk-mode-tool.entry.js +4 -4
  130. package/dist/esm/vertex-viewer-walk-mode-tool.entry.js.map +1 -1
  131. package/dist/esm/vertex-viewer.entry.js +22 -11
  132. package/dist/esm/vertex-viewer.entry.js.map +1 -1
  133. package/dist/esm/viewer.js +1 -1
  134. package/dist/esm/viewer.js.map +1 -1
  135. package/dist/types/components/scene-tree-search/scene-tree-search.d.ts +5 -1
  136. package/dist/types/components/viewer/viewer.d.ts +3 -2
  137. package/dist/types/components.d.ts +9 -5
  138. package/dist/types/lib/stream/stream.d.ts +1 -1
  139. package/dist/types/testing/viewer.d.ts +1 -1
  140. package/dist/viewer/index.esm.js +1 -1
  141. package/dist/viewer/{p-0e0973f0.entry.js → p-03efd0d6.entry.js} +2 -2
  142. package/dist/viewer/{p-7f0eeb06.entry.js → p-0988832f.entry.js} +2 -2
  143. package/dist/viewer/{p-78a1be4e.entry.js → p-0aa04328.entry.js} +2 -2
  144. package/dist/viewer/p-18ce3f3b.entry.js +5 -0
  145. package/dist/viewer/{p-9bb550e2.entry.js.map → p-18ce3f3b.entry.js.map} +1 -1
  146. package/dist/viewer/{p-2ecdcd5d.entry.js → p-23f0bb30.entry.js} +2 -2
  147. package/dist/viewer/{p-06b8bca7.entry.js → p-296311d3.entry.js} +2 -2
  148. package/dist/viewer/{p-2172230d.entry.js → p-2fd66679.entry.js} +2 -2
  149. package/dist/viewer/{p-5540add8.entry.js → p-362f3e12.entry.js} +2 -2
  150. package/dist/viewer/{p-110f66c6.js → p-388f809e.js} +2 -2
  151. package/dist/viewer/p-388f809e.js.map +1 -0
  152. package/dist/viewer/{p-48b63c5f.entry.js → p-45044ff2.entry.js} +2 -2
  153. package/dist/viewer/{p-9fc2e56e.entry.js → p-45b5b5ed.entry.js} +2 -2
  154. package/dist/viewer/{p-f79933ae.entry.js → p-4bd1ea70.entry.js} +2 -2
  155. package/dist/viewer/{p-842cc51b.entry.js → p-4bf16450.entry.js} +2 -2
  156. package/dist/viewer/{p-a057d7f2.entry.js → p-56fa8168.entry.js} +2 -2
  157. package/dist/viewer/{p-8c367e87.entry.js → p-59f204e7.entry.js} +2 -2
  158. package/dist/viewer/p-59f204e7.entry.js.map +1 -0
  159. package/dist/viewer/{p-33033b58.entry.js → p-6cf6eb8a.entry.js} +2 -2
  160. package/dist/viewer/p-715255e1.entry.js +5 -0
  161. package/dist/viewer/p-715255e1.entry.js.map +1 -0
  162. package/dist/viewer/{p-5f9352c0.entry.js → p-75f5ae33.entry.js} +2 -2
  163. package/dist/viewer/{p-7eea3fb3.entry.js → p-7a87ae97.entry.js} +2 -2
  164. package/dist/viewer/{p-22b42d4b.entry.js → p-86e1ee86.entry.js} +2 -2
  165. package/dist/viewer/p-89d93218.entry.js +5 -0
  166. package/dist/viewer/p-89d93218.entry.js.map +1 -0
  167. package/dist/viewer/{p-07325d65.entry.js → p-8c53ed63.entry.js} +2 -2
  168. package/dist/viewer/p-991f7bac.js.map +1 -1
  169. package/dist/viewer/{p-983db3dd.entry.js → p-a009c6d9.entry.js} +2 -2
  170. package/dist/viewer/{p-dcb64250.entry.js → p-a3bc0b79.entry.js} +2 -2
  171. package/dist/viewer/{p-29318a17.entry.js → p-aece4279.entry.js} +2 -2
  172. package/dist/viewer/{p-be257155.js → p-b8c0f6ff.js} +1 -1
  173. package/dist/viewer/p-b8c0f6ff.js.map +1 -0
  174. package/dist/viewer/p-bab8266e.js +5 -0
  175. package/dist/viewer/p-bab8266e.js.map +1 -0
  176. package/dist/viewer/{p-05562c21.entry.js → p-bcddbdb2.entry.js} +2 -2
  177. package/dist/viewer/{p-40e8a5ea.entry.js → p-c3b071a3.entry.js} +2 -2
  178. package/dist/viewer/{p-fbfa1e82.entry.js → p-cd3f0870.entry.js} +2 -2
  179. package/dist/viewer/{p-d2677c13.entry.js → p-d9e75269.entry.js} +2 -2
  180. package/dist/viewer/p-e1eaedd8.js +5 -0
  181. package/dist/viewer/{p-a27a9775.entry.js → p-e70e2c04.entry.js} +2 -2
  182. package/dist/viewer/{p-ffa8a2dd.entry.js → p-ebea8f56.entry.js} +2 -2
  183. package/dist/viewer/{p-342dac8b.js → p-eda9f5d4.js} +2 -2
  184. package/dist/viewer/{p-342dac8b.js.map → p-eda9f5d4.js.map} +1 -1
  185. package/dist/viewer/{p-9d54d593.entry.js → p-f292e8ae.entry.js} +2 -2
  186. package/dist/viewer/{p-d024c250.entry.js → p-f8a9c4d2.entry.js} +2 -2
  187. package/dist/viewer/viewer.esm.js +1 -1
  188. package/dist/viewer/viewer.esm.js.map +1 -1
  189. package/package.json +7 -7
  190. package/readme.md +10 -4
  191. package/dist/cjs/index-5fa5a527.js.map +0 -1
  192. package/dist/cjs/queries-cf96c8bc.js.map +0 -1
  193. package/dist/cjs/shadow-css-8962c4a9.js.map +0 -1
  194. package/dist/esm/index-f3e96c9e.js.map +0 -1
  195. package/dist/esm/queries-2f4a492c.js.map +0 -1
  196. package/dist/esm/shadow-css-9363884b.js.map +0 -1
  197. package/dist/viewer/p-04bf6b89.js +0 -5
  198. package/dist/viewer/p-110f66c6.js.map +0 -1
  199. package/dist/viewer/p-51eff23a.entry.js +0 -5
  200. package/dist/viewer/p-51eff23a.entry.js.map +0 -1
  201. package/dist/viewer/p-629a5ae7.entry.js +0 -5
  202. package/dist/viewer/p-629a5ae7.entry.js.map +0 -1
  203. package/dist/viewer/p-8c367e87.entry.js.map +0 -1
  204. package/dist/viewer/p-9bb550e2.entry.js +0 -5
  205. package/dist/viewer/p-b2e80d7f.js +0 -5
  206. package/dist/viewer/p-b2e80d7f.js.map +0 -1
  207. package/dist/viewer/p-be257155.js.map +0 -1
  208. /package/dist/viewer/{p-0e0973f0.entry.js.map → p-03efd0d6.entry.js.map} +0 -0
  209. /package/dist/viewer/{p-7f0eeb06.entry.js.map → p-0988832f.entry.js.map} +0 -0
  210. /package/dist/viewer/{p-78a1be4e.entry.js.map → p-0aa04328.entry.js.map} +0 -0
  211. /package/dist/viewer/{p-2ecdcd5d.entry.js.map → p-23f0bb30.entry.js.map} +0 -0
  212. /package/dist/viewer/{p-06b8bca7.entry.js.map → p-296311d3.entry.js.map} +0 -0
  213. /package/dist/viewer/{p-2172230d.entry.js.map → p-2fd66679.entry.js.map} +0 -0
  214. /package/dist/viewer/{p-5540add8.entry.js.map → p-362f3e12.entry.js.map} +0 -0
  215. /package/dist/viewer/{p-48b63c5f.entry.js.map → p-45044ff2.entry.js.map} +0 -0
  216. /package/dist/viewer/{p-9fc2e56e.entry.js.map → p-45b5b5ed.entry.js.map} +0 -0
  217. /package/dist/viewer/{p-f79933ae.entry.js.map → p-4bd1ea70.entry.js.map} +0 -0
  218. /package/dist/viewer/{p-842cc51b.entry.js.map → p-4bf16450.entry.js.map} +0 -0
  219. /package/dist/viewer/{p-a057d7f2.entry.js.map → p-56fa8168.entry.js.map} +0 -0
  220. /package/dist/viewer/{p-33033b58.entry.js.map → p-6cf6eb8a.entry.js.map} +0 -0
  221. /package/dist/viewer/{p-5f9352c0.entry.js.map → p-75f5ae33.entry.js.map} +0 -0
  222. /package/dist/viewer/{p-7eea3fb3.entry.js.map → p-7a87ae97.entry.js.map} +0 -0
  223. /package/dist/viewer/{p-22b42d4b.entry.js.map → p-86e1ee86.entry.js.map} +0 -0
  224. /package/dist/viewer/{p-07325d65.entry.js.map → p-8c53ed63.entry.js.map} +0 -0
  225. /package/dist/viewer/{p-983db3dd.entry.js.map → p-a009c6d9.entry.js.map} +0 -0
  226. /package/dist/viewer/{p-dcb64250.entry.js.map → p-a3bc0b79.entry.js.map} +0 -0
  227. /package/dist/viewer/{p-29318a17.entry.js.map → p-aece4279.entry.js.map} +0 -0
  228. /package/dist/viewer/{p-05562c21.entry.js.map → p-bcddbdb2.entry.js.map} +0 -0
  229. /package/dist/viewer/{p-40e8a5ea.entry.js.map → p-c3b071a3.entry.js.map} +0 -0
  230. /package/dist/viewer/{p-fbfa1e82.entry.js.map → p-cd3f0870.entry.js.map} +0 -0
  231. /package/dist/viewer/{p-d2677c13.entry.js.map → p-d9e75269.entry.js.map} +0 -0
  232. /package/dist/viewer/{p-04bf6b89.js.map → p-e1eaedd8.js.map} +0 -0
  233. /package/dist/viewer/{p-a27a9775.entry.js.map → p-e70e2c04.entry.js.map} +0 -0
  234. /package/dist/viewer/{p-ffa8a2dd.entry.js.map → p-ebea8f56.entry.js.map} +0 -0
  235. /package/dist/viewer/{p-9d54d593.entry.js.map → p-f292e8ae.entry.js.map} +0 -0
  236. /package/dist/viewer/{p-d024c250.entry.js.map → p-f8a9c4d2.entry.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Copyright (c) 2026 Vertex Software LLC. All rights reserved.
3
3
  */
4
- import { h, r as registerInstance, c as createEvent, H as Host, g as getElement } from './index-f3e96c9e.js';
4
+ import { h, r as registerInstance, c as createEvent, H as Host, g as getElement } from './index-c12dc0cd.js';
5
5
  import { g as getMarkupBoundingClientRect } from './dom-fd88a5b9.js';
6
6
  import { p as point, d as dimensions, f as rectangle, c as angle } from './bundle.esm-925f02ed.js';
7
7
  import { i as isVertexViewerArrowMarkup, a as isVertexViewerCircleMarkup, b as isVertexViewerFreeformMarkup, p as parsePoint, c as createLineAnchorStylePoints, d as arrowheadPointsToPolygonPoints, e as arrowheadPointsToPathPoints, f as parseBounds, g as parsePoints } from './utils-1cbdf72b.js';
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Copyright (c) 2026 Vertex Software LLC. All rights reserved.
3
3
  */
4
- import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-f3e96c9e.js';
4
+ import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-c12dc0cd.js';
5
5
  import { s as stampTemplateWithId } from './templates-d7afbd57.js';
6
6
  import { F as FreeformMarkup, C as CircleMarkup, A as ArrowMarkup } from './markup-2a6bd378.js';
7
7
  import { b as isVertexViewerFreeformMarkup, a as isVertexViewerCircleMarkup, i as isVertexViewerArrowMarkup } from './utils-1cbdf72b.js';
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Copyright (c) 2026 Vertex Software LLC. All rights reserved.
3
3
  */
4
- import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-f3e96c9e.js';
4
+ import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-c12dc0cd.js';
5
5
  import { p as point } from './bundle.esm-925f02ed.js';
6
6
  import { s as stampTemplateWithId } from './templates-d7afbd57.js';
7
7
  import { A as ArrowMarkup, C as CircleMarkup, F as FreeformMarkup } from './markup-2a6bd378.js';
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Copyright (c) 2026 Vertex Software LLC. All rights reserved.
3
3
  */
4
- import { h, F as Fragment, r as registerInstance, H as Host } from './index-f3e96c9e.js';
4
+ import { h, F as Fragment, r as registerInstance, H as Host } from './index-c12dc0cd.js';
5
5
  import { D as DistanceUnits, A as AngleUnits, g as AreaUnits } from './streamAttributes-b054bb69.js';
6
6
  import './entities-618b551e.js';
7
7
  import { x as __rest, v as vector3 } from './bundle.esm-925f02ed.js';
@@ -1,9 +1,9 @@
1
1
  /*!
2
2
  * Copyright (c) 2026 Vertex Software LLC. All rights reserved.
3
3
  */
4
- import { h, r as registerInstance, c as createEvent, H as Host, g as getElement } from './index-f3e96c9e.js';
4
+ import { h, r as registerInstance, c as createEvent, H as Host, g as getElement } from './index-c12dc0cd.js';
5
5
  import { v as vector3, c as angle, p as point, l as line3 } from './bundle.esm-925f02ed.js';
6
- import { m as measurementCursor } from './cursors-9e349d61.js';
6
+ import { m as measurementCursor } from './cursors-3806bc04.js';
7
7
  import { a as cssTransformCenterAt, g as getMouseClientPosition } from './dom-bad6c254.js';
8
8
  import './scene_view_api_pb-15db20a2.js';
9
9
  import './wrappers_pb-6dce518c.js';
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Copyright (c) 2026 Vertex Software LLC. All rights reserved.
3
3
  */
4
- import { r as registerInstance, h, F as Fragment, H as Host } from './index-f3e96c9e.js';
4
+ import { r as registerInstance, h, F as Fragment, H as Host } from './index-c12dc0cd.js';
5
5
  import { p as point, c as angle } from './bundle.esm-925f02ed.js';
6
6
  import './scene_view_api_pb-15db20a2.js';
7
7
  import './wrappers_pb-6dce518c.js';
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Copyright (c) 2026 Vertex Software LLC. All rights reserved.
3
3
  */
4
- import { r as registerInstance, h, H as Host } from './index-f3e96c9e.js';
4
+ import { r as registerInstance, h, H as Host } from './index-c12dc0cd.js';
5
5
  import { S as SceneViewAPIClient_1 } from './scene_view_api_pb_service-20585d47.js';
6
6
  import { p as parseAndValidateConfig } from './config-fa44191a.js';
7
7
  import { a as MeasurementEntity, M as MeasurementController } from './entities-ca7c6509.js';
@@ -10,7 +10,7 @@ import './scene_view_api_pb-15db20a2.js';
10
10
  import { M as MeasurementModel } from './model-63465a7e.js';
11
11
  import { M as MeasurementOverlayManager } from './overlays-29a1aac4.js';
12
12
  import { p as point } from './bundle.esm-925f02ed.js';
13
- import { a as measurementWithArrowCursor } from './cursors-9e349d61.js';
13
+ import { a as measurementWithArrowCursor } from './cursors-3806bc04.js';
14
14
  import { g as getMouseClientPosition } from './dom-bad6c254.js';
15
15
  import { E as ElementRectObserver } from './elementRectObserver-21aee9fd.js';
16
16
  import { E as EntityType } from './entities-618b551e.js';
@@ -1,10 +1,10 @@
1
1
  /*!
2
2
  * Copyright (c) 2026 Vertex Software LLC. All rights reserved.
3
3
  */
4
- import { h, F as Fragment, r as registerInstance } from './index-f3e96c9e.js';
4
+ import { h, F as Fragment, r as registerInstance } from './index-c12dc0cd.js';
5
5
  import { p as point, m as matrix4, v as vector3 } from './bundle.esm-925f02ed.js';
6
6
  import './controller-8cfb590e.js';
7
- import './cursors-9e349d61.js';
7
+ import './cursors-3806bc04.js';
8
8
  import './scene_view_api_pb-15db20a2.js';
9
9
  import './wrappers_pb-6dce518c.js';
10
10
  import './mapper-1457b205.js';
@@ -63,7 +63,7 @@ function getClosestCenterToPoint(boxPoint, pointToMeasure, dimensions) {
63
63
  return candidates[candidateIndex];
64
64
  }
65
65
 
66
- const viewerPinGroupCss = ":host{--viewer-annotations-pin-primary-color:var(--blue-700);--viewer-annotations-pin-accent-color:var(--blue-200);--viewer-annotations-pin-dot-color:var(--viewer-annotations-pin-primary-color);--viewer-annotations-pin-color:var(--viewer-annotations-pin-primary-color);--viewer-annotations-pin-font-size:0.75rem;--viewer-annotations-pin-selected-stroke:var(--white);--viewer-annotations-pin-selected-border:2px solid var(--white);--viewer-annotations-pin-label-border:2px solid var(--black);--viewer-annotations-pin-selected-stroke:var(--white);font-size:var(--viewer-annotations-pin-font-size);position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden;pointer-events:none}.pin-anchor{position:absolute;border-radius:50%;transform:translate(-50%, -50%);display:block;width:9px;height:9px;box-sizing:border-box;border:var(--viewer-annotations-pin-label-border);background:var(--viewer-annotations-pin-dot-color);pointer-events:auto;cursor:pointer}.selected{width:13px;height:13px;border:var(--viewer-annotations-pin-selected-border)}.pin{color:var(--viewer-annotations-pin-color);cursor:pointer;transition:opacity 0.3s ease-in}.pin-selected{stroke-width:1;stroke:var(--viewer-annotations-pin-selected-stroke)}.pin-occluded{opacity:.3;transition:opacity 0.3s ease-in}.pin-detached{visibility:hidden}";
66
+ const viewerPinGroupCss = ":host{--viewer-annotations-pin-primary-color:var(--blue-700);--viewer-annotations-pin-accent-color:var(--blue-200);--viewer-annotations-pin-dot-color:var(--viewer-annotations-pin-primary-color);--viewer-annotations-pin-color:var(--viewer-annotations-pin-primary-color);--viewer-annotations-pin-font-size:0.75rem;--viewer-annotations-pin-selected-stroke:var(--white);--viewer-annotations-pin-selected-border:2px solid var(--white);--viewer-annotations-pin-label-border:2px solid var(--black);--viewer-annotations-pin-selected-stroke:var(--white);font-size:var(--viewer-annotations-pin-font-size);position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden;pointer-events:none}.pin-anchor{position:absolute;border-radius:50%;transform:translate(-50%, -50%);display:block;width:9px;height:9px;box-sizing:border-box;border:var(--viewer-annotations-pin-label-border);background:var(--viewer-annotations-pin-dot-color);pointer-events:auto;cursor:pointer}.selected{width:13px;height:13px;border:var(--viewer-annotations-pin-selected-border)}.pin{color:var(--viewer-annotations-pin-color);cursor:pointer;transition:opacity 0.3s ease-in;transform:translate(0px, -12px)}.pin-selected{stroke-width:1;stroke:var(--viewer-annotations-pin-selected-stroke)}.pin-occluded{opacity:.3;transition:opacity 0.3s ease-in}.pin-detached{visibility:hidden}";
67
67
 
68
68
  const ViewerPinGroup = class {
69
69
  constructor(hostRef) {
@@ -1 +1 @@
1
- {"file":"vertex-viewer-pin-group.entry.js","mappings":"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","names":["classNames","Point","Matrix4","Vector3"],"sources":["./src/components/viewer-pin-group/pin-renderer.tsx","./src/components/viewer-pin-group/utils.ts","./src/components/viewer-pin-group/viewer-pin-group.css?tag=vertex-viewer-pin-group","./src/components/viewer-pin-group/viewer-pin-group.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { Fragment, FunctionalComponent, h } from '@stencil/core';\nimport classNames from 'classnames';\n\nimport { getPinColors, isIconPin, isTextPin, Pin } from '../../lib/pins/model';\n\ninterface PinRendererProps {\n pin?: Pin;\n selected: boolean;\n occluded: boolean;\n detached: boolean;\n}\n\nexport const PinRenderer: FunctionalComponent<PinRendererProps> = ({\n pin,\n selected,\n occluded,\n detached,\n}) => {\n const { primaryColor } = getPinColors(pin);\n\n return (\n <Fragment>\n {isTextPin(pin) && (\n <div\n id=\"pin-anchor\"\n class={classNames('pin-anchor', {\n selected: selected,\n 'pin-occluded': occluded,\n 'pin-detached': detached,\n })}\n style={{\n background: primaryColor,\n }}\n ></div>\n )}\n\n {isIconPin(pin) && (\n <vertex-viewer-icon\n name=\"pin-fill\"\n size=\"lg\"\n class={classNames('pin', {\n 'pin-selected': selected,\n 'pin-occluded': occluded,\n 'pin-detached': detached,\n })}\n style={{\n color: primaryColor,\n }}\n />\n )}\n </Fragment>\n );\n};\n","import { Dimensions, Point } from '@vertexvis/geometry';\n\nexport function getClosestCenterToPoint(\n boxPoint: Point.Point,\n pointToMeasure: Point.Point,\n dimensions: Dimensions.Dimensions\n): Point.Point {\n const topPoint = {\n x: boxPoint.x + dimensions.width / 2,\n y: boxPoint.y,\n };\n\n const bottomPoint = {\n x: boxPoint.x + dimensions.width / 2,\n y: boxPoint.y + dimensions.height,\n };\n\n const rightPoint = {\n x: boxPoint.x + dimensions.width,\n y: boxPoint.y + dimensions.height / 2,\n };\n\n const leftPoint = {\n x: boxPoint.x,\n y: boxPoint.y + dimensions.height / 2,\n };\n\n const candidates = [topPoint, bottomPoint, leftPoint, rightPoint];\n\n const distances = candidates.map((candidate) =>\n Point.distance(candidate, pointToMeasure)\n );\n\n const candidateIndex = distances.indexOf(Math.min(...distances));\n return candidates[candidateIndex];\n}\n",":host {\n\n /**\n * @prop --viewer-annotations-pin-primary-color: A CSS color that\n * specifies the primary color for the pins. This value gets used for the dot color \n * and borders\n */\n --viewer-annotations-pin-primary-color: var(--blue-700);\n\n /**\n * @prop --viewer-annotations-pin-accent-color: A CSS color that\n * specifies the accent color for the pins. This value gets used for background colors\n * \n */\n\n --viewer-annotations-pin-accent-color: var(--blue-200);\n /**\n * @prop viewer-annotations-pin-dot-color: A CSS color that\n * specifies the color of the anchor dot\n */\n --viewer-annotations-pin-dot-color: var(--viewer-annotations-pin-primary-color);\n\n /**\n * @prop --viewer-annotations-pin-color: A CSS color that\n * specifies the color of the pin\n */\n --viewer-annotations-pin-color: var(--viewer-annotations-pin-primary-color);\n\n /**\n * @prop --viewer-annotations-pin-font-size: A CSS property to specify\n the font size of the pin\n */\n --viewer-annotations-pin-font-size: 0.75rem;\n\n /**\n * @prop --viewer-annotations-pin-selected-stroke: A CSS color that\n * specifies the stroke color of a selected pin\n */\n --viewer-annotations-pin-selected-stroke: var(--white);\n\n /**\n * @prop --viewer-annotations-pin-selected-border: A CSS color that\n * specifies the border of a selected pin\n */\n --viewer-annotations-pin-selected-border: 2px solid var(--white);\n\n /**\n * @prop --viewer-annotations-pin-label-border: A CSS color that\n * specifies the border of a text pin anchor\n */\n --viewer-annotations-pin-label-border: 2px solid var(--black);\n\n /**\n * @prop --viewer-annotations-pin-selected-border: A CSS color that\n * specifies the stroke of a selected default pin\n */\n --viewer-annotations-pin-selected-stroke: var(--white);\n\n font-size: var(--viewer-annotations-pin-font-size);\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n overflow: hidden;\n pointer-events: none;\n}\n\n.pin-anchor {\n position: absolute;\n border-radius: 50%;\n transform: translate(-50%, -50%);\n display: block;\n width: 9px;\n height: 9px;\n box-sizing: border-box;\n border: var(--viewer-annotations-pin-label-border);\n background: var(--viewer-annotations-pin-dot-color);\n pointer-events: auto;\n cursor: pointer;\n}\n\n.selected {\n width: 13px;\n height: 13px;\n border: var(--viewer-annotations-pin-selected-border)\n}\n\n.pin {\n color: var(--viewer-annotations-pin-color);\n cursor: pointer;\n transition: opacity 0.3s ease-in;\n}\n\n.pin-selected {\n stroke-width: 1;\n stroke: var(--viewer-annotations-pin-selected-stroke);\n}\n\n.pin-occluded {\n opacity: .3;\n transition: opacity 0.3s ease-in;\n}\n\n.pin-detached {\n visibility: hidden;\n}","import {\n Component,\n Fragment,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n Listen,\n Prop,\n State,\n} from '@stencil/core';\nimport { Dimensions, Matrix4, Point, Vector3 } from '@vertexvis/geometry';\n\nimport { Viewport } from '../..';\nimport { PinController } from '../../lib/pins/controller';\nimport { isTextPin, Pin, TextPin } from '../../lib/pins/model';\nimport { PinModel } from '../../lib/pins/model';\nimport { translatePointToScreen } from '../viewer-pin-tool/utils';\nimport { PinRenderer } from './pin-renderer';\nimport { getClosestCenterToPoint } from './utils';\n\ninterface ComputedPoints {\n pinPoint: Point.Point;\n labelPoint?: Point.Point;\n}\n\n@Component({\n tag: 'vertex-viewer-pin-group',\n styleUrl: 'viewer-pin-group.css',\n shadow: false,\n})\nexport class ViewerPinGroup {\n /**\n * The pin to draw for the group\n */\n @Prop()\n public pin?: Pin;\n\n /**\n * The local matrix of this element.\n */\n @Prop({ mutable: true, attribute: null })\n public matrix: Matrix4.Matrix4 = Matrix4.makeIdentity();\n\n /**\n * Projection view matrix used for computing the position of the pin line\n */\n @Prop()\n public projectionViewMatrix: Matrix4.Matrix4 = Matrix4.makeIdentity();\n\n /**\n * The dimensions of the canvas for the pins\n */\n @Prop({ mutable: true })\n public elementBounds?: DOMRect;\n\n /**\n * The model that contains the entities and outcomes from performing pin operations\n */\n @Prop()\n public pinModel: PinModel = new PinModel();\n\n /**\n * The controller that drives behavior for pin operations\n */\n @Prop()\n public pinController?: PinController;\n\n /**\n * Whether the pin is \"selected\"\n */\n @Prop()\n public selected = false;\n\n /**\n * @internal\n * Whether the pin is occluded\n */\n @Prop({ mutable: true, reflect: true })\n public occluded = false;\n\n /**\n * @internal\n * Whether the pin is detached\n */\n @Prop({ mutable: true, reflect: true })\n public detached = false;\n\n @State()\n private invalidateStateCounter = 0;\n\n private labelEl: HTMLVertexViewerPinLabelElement | undefined;\n\n private resizeObserver?: ResizeObserver;\n\n protected componentDidLoad(): void {\n this.setLabelObserver();\n\n if (this.pinController == null) {\n this.pinController = new PinController(this.pinModel);\n }\n\n if (this.selected) {\n this.labelEl?.setFocus();\n }\n }\n\n /**\n * @ignore\n */\n @Listen('occlusionStateChanged')\n protected async handleOcclusionStateChanged(\n event: CustomEvent<boolean>\n ): Promise<void> {\n this.occluded = event.detail;\n }\n\n /**\n * @ignore\n */\n @Listen('detachedStateChanged')\n protected async handleDetachedStateChanged(\n event: CustomEvent<boolean>\n ): Promise<void> {\n this.detached = event.detail;\n }\n\n protected disconnectedCallback(): void {\n this.labelEl?.removeEventListener('labelChanged', this.invalidateState);\n this.resizeObserver?.disconnect();\n }\n\n protected render(): JSX.Element {\n if (this.pin == null) {\n throw new Error('Unable to draw pin');\n }\n\n const { pinPoint, labelPoint } = this.computePinPoints(this.pin);\n\n return (\n <Fragment>\n <vertex-viewer-dom-element\n data-testid={`drawn-pin-${this.pin.id}`}\n position={this.pin.worldPosition}\n onPointerDown={async () => {\n await this.labelEl?.submit();\n this.selectPin();\n this.handleAnchorPointerDown();\n }}\n detachedOff={false}\n >\n <PinRenderer\n pin={this.pin}\n selected={this.selected}\n occluded={this.occluded}\n detached={this.detached}\n />\n </vertex-viewer-dom-element>\n\n {isTextPin(this.pin) && !this.occluded && !this.detached && (\n <Fragment>\n <vertex-viewer-pin-label-line\n id={`pin-label-line-${this.pin?.id}`}\n pinPoint={pinPoint}\n pin={this.pin}\n labelPoint={labelPoint}\n onPointerDown={() => this.selectPin()}\n ></vertex-viewer-pin-label-line>\n\n <vertex-viewer-pin-label\n pin={this.pin}\n ref={(el) => (this.labelEl = el)}\n elementBounds={this.elementBounds}\n pinController={this.pinController}\n onPointerDown={() => this.selectPin()}\n ></vertex-viewer-pin-label>\n </Fragment>\n )}\n </Fragment>\n );\n }\n\n private invalidateState = (): void => {\n this.invalidateStateCounter = this.invalidateStateCounter + 1;\n };\n\n private setLabelObserver(): void {\n if (this.labelEl != null) {\n this.labelEl.addEventListener('labelChanged', this.invalidateState);\n\n this.resizeObserver = new ResizeObserver(() => this.invalidateState());\n this.resizeObserver.observe(this.labelEl);\n }\n }\n\n private computePinPoints(pin: Pin): ComputedPoints {\n if (this.elementBounds != null && this.pin != null) {\n return isTextPin(this.pin) && this.pin.label.point != null\n ? this.computeTextPinPoints(this.pin, this.elementBounds)\n : this.computeDefaultPinPoints(this.pin, this.elementBounds);\n }\n\n return { pinPoint: pin.worldPosition };\n }\n\n private computeDefaultPinPoints(\n pin: Pin,\n elementBounds: DOMRect\n ): ComputedPoints {\n return {\n pinPoint: this.getFromWorldPosition(\n pin.worldPosition,\n this.projectionViewMatrix,\n elementBounds\n ),\n };\n }\n\n private computeTextPinPoints(\n pin: TextPin,\n elementBounds: DOMRect\n ): ComputedPoints {\n const { pinPoint } = this.computeDefaultPinPoints(pin, elementBounds);\n\n const screenPosition = translatePointToScreen(\n pin.label.point,\n elementBounds\n );\n\n const labelWidth = this.labelEl?.firstElementChild?.clientWidth || 0;\n const labelHeight = this.labelEl?.firstElementChild?.clientHeight || 0;\n\n return {\n pinPoint,\n labelPoint: getClosestCenterToPoint(screenPosition, pinPoint, {\n width: labelWidth,\n height: labelHeight,\n }),\n };\n }\n\n private handleAnchorPointerDown(): void {\n if (\n this.elementBounds != null &&\n this.pinController?.getToolMode() === 'edit' &&\n this.pin != null\n ) {\n this.pinController?.setDraggable({ id: this.pin.id });\n }\n }\n\n private selectPin(): void {\n this.pinController?.setSelectedPinId(this.pin?.id);\n }\n\n private getFromWorldPosition(\n pt: Vector3.Vector3,\n projectionViewMatrix: Matrix4.Matrix4,\n dimensions: Dimensions.Dimensions\n ): Point.Point {\n const ndcPt = Vector3.transformMatrix(pt, projectionViewMatrix);\n return Viewport.fromDimensions(dimensions).transformVectorToViewport(ndcPt);\n }\n}\n"],"version":3}
1
+ {"file":"vertex-viewer-pin-group.entry.js","mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;AAaO,MAAM,WAAW,GAA0C,CAAC,EACjE,GAAG,EACH,QAAQ,EACR,QAAQ,EACR,QAAQ,GACT;EACC,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;EAE3C,QACE,EAAC,QAAQ;IACN,SAAS,CAAC,GAAG,CAAC,KACb,WACE,EAAE,EAAC,YAAY,EACf,KAAK,EAAEA,UAAU,CAAC,YAAY,EAAE;QAC9B,QAAQ,EAAE,QAAQ;QAClB,cAAc,EAAE,QAAQ;QACxB,cAAc,EAAE,QAAQ;OACzB,CAAC,EACF,KAAK,EAAE;QACL,UAAU,EAAE,YAAY;OACzB,GACI,CACR;IAEA,SAAS,CAAC,GAAG,CAAC,KACb,0BACE,IAAI,EAAC,UAAU,EACf,IAAI,EAAC,IAAI,EACT,KAAK,EAAEA,UAAU,CAAC,KAAK,EAAE;QACvB,cAAc,EAAE,QAAQ;QACxB,cAAc,EAAE,QAAQ;QACxB,cAAc,EAAE,QAAQ;OACzB,CAAC,EACF,KAAK,EAAE;QACL,KAAK,EAAE,YAAY;OACpB,GACD,CACH,CACQ,EACX;AACJ,CAAC;;SCnDe,uBAAuB,CACrC,QAAqB,EACrB,cAA2B,EAC3B,UAAiC;EAEjC,MAAM,QAAQ,GAAG;IACf,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC;IACpC,CAAC,EAAE,QAAQ,CAAC,CAAC;GACd,CAAC;EAEF,MAAM,WAAW,GAAG;IAClB,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC;IACpC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM;GAClC,CAAC;EAEF,MAAM,UAAU,GAAG;IACjB,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK;IAChC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC;GACtC,CAAC;EAEF,MAAM,SAAS,GAAG;IAChB,CAAC,EAAE,QAAQ,CAAC,CAAC;IACb,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC;GACtC,CAAC;EAEF,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;EAElE,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,KACzCC,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC,CAC1C,CAAC;EAEF,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;EACjE,OAAO,UAAU,CAAC,cAAc,CAAC,CAAC;AACpC;;ACnCA,MAAM,iBAAiB,GAAG,yzCAAyzC;;MC6Bt0C,cAAc;EAL3B;;;;;IAgBS,WAAM,GAAoBC,OAAO,CAAC,YAAY,EAAE,CAAC;;;;IAMjD,yBAAoB,GAAoBA,OAAO,CAAC,YAAY,EAAE,CAAC;;;;IAY/D,aAAQ,GAAa,IAAI,QAAQ,EAAE,CAAC;;;;IAYpC,aAAQ,GAAG,KAAK,CAAC;;;;;IAOjB,aAAQ,GAAG,KAAK,CAAC;;;;;IAOjB,aAAQ,GAAG,KAAK,CAAC;IAGhB,2BAAsB,GAAG,CAAC,CAAC;IA6F3B,oBAAe,GAAG;MACxB,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,GAAG,CAAC,CAAC;KAC/D,CAAC;GA+EH;EAxKW,gBAAgB;;IACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAExB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,EAAE;MAC9B,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACvD;IAED,IAAI,IAAI,CAAC,QAAQ,EAAE;MACjB,MAAA,IAAI,CAAC,OAAO,0CAAE,QAAQ,EAAE,CAAC;KAC1B;GACF;;;;EAMS,MAAM,2BAA2B,CACzC,KAA2B;IAE3B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;GAC9B;;;;EAMS,MAAM,0BAA0B,CACxC,KAA2B;IAE3B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;GAC9B;EAES,oBAAoB;;IAC5B,MAAA,IAAI,CAAC,OAAO,0CAAE,mBAAmB,CAAC,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IACxE,MAAA,IAAI,CAAC,cAAc,0CAAE,UAAU,EAAE,CAAC;GACnC;EAES,MAAM;;IACd,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE;MACpB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;KACvC;IAED,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEjE,QACE,EAAC,QAAQ,QACP,gDACe,aAAa,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EACvC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,EAChC,aAAa,EAAE;;QACb,OAAM,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,EAAE,CAAA,CAAC;QAC7B,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,uBAAuB,EAAE,CAAC;OAChC,EACD,WAAW,EAAE,KAAK,IAElB,EAAC,WAAW,IACV,GAAG,EAAE,IAAI,CAAC,GAAG,EACb,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ,GACvB,CACwB,EAE3B,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,KACtD,EAAC,QAAQ,QACP,oCACE,EAAE,EAAE,kBAAkB,MAAA,IAAI,CAAC,GAAG,0CAAE,EAAE,EAAE,EACpC,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,IAAI,CAAC,GAAG,EACb,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,MAAM,IAAI,CAAC,SAAS,EAAE,GACP,EAEhC,+BACE,GAAG,EAAE,IAAI,CAAC,GAAG,EACb,GAAG,EAAE,CAAC,EAAE,MAAM,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,EAChC,aAAa,EAAE,IAAI,CAAC,aAAa,EACjC,aAAa,EAAE,IAAI,CAAC,aAAa,EACjC,aAAa,EAAE,MAAM,IAAI,CAAC,SAAS,EAAE,GACZ,CAClB,CACZ,CACQ,EACX;GACH;EAMO,gBAAgB;IACtB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;MACxB,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;MAEpE,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;MACvE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAC3C;GACF;EAEO,gBAAgB,CAAC,GAAQ;IAC/B,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE;MAClD,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI;UACtD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC;UACvD,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;KAChE;IAED,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC;GACxC;EAEO,uBAAuB,CAC7B,GAAQ,EACR,aAAsB;IAEtB,OAAO;MACL,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CACjC,GAAG,CAAC,aAAa,EACjB,IAAI,CAAC,oBAAoB,EACzB,aAAa,CACd;KACF,CAAC;GACH;EAEO,oBAAoB,CAC1B,GAAY,EACZ,aAAsB;;IAEtB,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAEtE,MAAM,cAAc,GAAG,sBAAsB,CAC3C,GAAG,CAAC,KAAK,CAAC,KAAK,EACf,aAAa,CACd,CAAC;IAEF,MAAM,UAAU,GAAG,CAAA,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,iBAAiB,0CAAE,WAAW,KAAI,CAAC,CAAC;IACrE,MAAM,WAAW,GAAG,CAAA,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,iBAAiB,0CAAE,YAAY,KAAI,CAAC,CAAC;IAEvE,OAAO;MACL,QAAQ;MACR,UAAU,EAAE,uBAAuB,CAAC,cAAc,EAAE,QAAQ,EAAE;QAC5D,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,WAAW;OACpB,CAAC;KACH,CAAC;GACH;EAEO,uBAAuB;;IAC7B,IACE,IAAI,CAAC,aAAa,IAAI,IAAI;MAC1B,CAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,WAAW,EAAE,MAAK,MAAM;MAC5C,IAAI,CAAC,GAAG,IAAI,IAAI,EAChB;MACA,MAAA,IAAI,CAAC,aAAa,0CAAE,YAAY,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;KACvD;GACF;EAEO,SAAS;;IACf,MAAA,IAAI,CAAC,aAAa,0CAAE,gBAAgB,CAAC,MAAA,IAAI,CAAC,GAAG,0CAAE,EAAE,CAAC,CAAC;GACpD;EAEO,oBAAoB,CAC1B,EAAmB,EACnB,oBAAqC,EACrC,UAAiC;IAEjC,MAAM,KAAK,GAAGC,OAAO,CAAC,eAAe,CAAC,EAAE,EAAE,oBAAoB,CAAC,CAAC;IAChE,OAAO,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;GAC7E;;;;;;","names":["classNames","Point","Matrix4","Vector3"],"sources":["./src/components/viewer-pin-group/pin-renderer.tsx","./src/components/viewer-pin-group/utils.ts","./src/components/viewer-pin-group/viewer-pin-group.css?tag=vertex-viewer-pin-group","./src/components/viewer-pin-group/viewer-pin-group.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { Fragment, FunctionalComponent, h } from '@stencil/core';\nimport classNames from 'classnames';\n\nimport { getPinColors, isIconPin, isTextPin, Pin } from '../../lib/pins/model';\n\ninterface PinRendererProps {\n pin?: Pin;\n selected: boolean;\n occluded: boolean;\n detached: boolean;\n}\n\nexport const PinRenderer: FunctionalComponent<PinRendererProps> = ({\n pin,\n selected,\n occluded,\n detached,\n}) => {\n const { primaryColor } = getPinColors(pin);\n\n return (\n <Fragment>\n {isTextPin(pin) && (\n <div\n id=\"pin-anchor\"\n class={classNames('pin-anchor', {\n selected: selected,\n 'pin-occluded': occluded,\n 'pin-detached': detached,\n })}\n style={{\n background: primaryColor,\n }}\n ></div>\n )}\n\n {isIconPin(pin) && (\n <vertex-viewer-icon\n name=\"pin-fill\"\n size=\"lg\"\n class={classNames('pin', {\n 'pin-selected': selected,\n 'pin-occluded': occluded,\n 'pin-detached': detached,\n })}\n style={{\n color: primaryColor,\n }}\n />\n )}\n </Fragment>\n );\n};\n","import { Dimensions, Point } from '@vertexvis/geometry';\n\nexport function getClosestCenterToPoint(\n boxPoint: Point.Point,\n pointToMeasure: Point.Point,\n dimensions: Dimensions.Dimensions\n): Point.Point {\n const topPoint = {\n x: boxPoint.x + dimensions.width / 2,\n y: boxPoint.y,\n };\n\n const bottomPoint = {\n x: boxPoint.x + dimensions.width / 2,\n y: boxPoint.y + dimensions.height,\n };\n\n const rightPoint = {\n x: boxPoint.x + dimensions.width,\n y: boxPoint.y + dimensions.height / 2,\n };\n\n const leftPoint = {\n x: boxPoint.x,\n y: boxPoint.y + dimensions.height / 2,\n };\n\n const candidates = [topPoint, bottomPoint, leftPoint, rightPoint];\n\n const distances = candidates.map((candidate) =>\n Point.distance(candidate, pointToMeasure)\n );\n\n const candidateIndex = distances.indexOf(Math.min(...distances));\n return candidates[candidateIndex];\n}\n",":host {\n\n /**\n * @prop --viewer-annotations-pin-primary-color: A CSS color that\n * specifies the primary color for the pins. This value gets used for the dot color \n * and borders\n */\n --viewer-annotations-pin-primary-color: var(--blue-700);\n\n /**\n * @prop --viewer-annotations-pin-accent-color: A CSS color that\n * specifies the accent color for the pins. This value gets used for background colors\n * \n */\n\n --viewer-annotations-pin-accent-color: var(--blue-200);\n /**\n * @prop viewer-annotations-pin-dot-color: A CSS color that\n * specifies the color of the anchor dot\n */\n --viewer-annotations-pin-dot-color: var(--viewer-annotations-pin-primary-color);\n\n /**\n * @prop --viewer-annotations-pin-color: A CSS color that\n * specifies the color of the pin\n */\n --viewer-annotations-pin-color: var(--viewer-annotations-pin-primary-color);\n\n /**\n * @prop --viewer-annotations-pin-font-size: A CSS property to specify\n the font size of the pin\n */\n --viewer-annotations-pin-font-size: 0.75rem;\n\n /**\n * @prop --viewer-annotations-pin-selected-stroke: A CSS color that\n * specifies the stroke color of a selected pin\n */\n --viewer-annotations-pin-selected-stroke: var(--white);\n\n /**\n * @prop --viewer-annotations-pin-selected-border: A CSS color that\n * specifies the border of a selected pin\n */\n --viewer-annotations-pin-selected-border: 2px solid var(--white);\n\n /**\n * @prop --viewer-annotations-pin-label-border: A CSS color that\n * specifies the border of a text pin anchor\n */\n --viewer-annotations-pin-label-border: 2px solid var(--black);\n\n /**\n * @prop --viewer-annotations-pin-selected-border: A CSS color that\n * specifies the stroke of a selected default pin\n */\n --viewer-annotations-pin-selected-stroke: var(--white);\n\n font-size: var(--viewer-annotations-pin-font-size);\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n overflow: hidden;\n pointer-events: none;\n}\n\n.pin-anchor {\n position: absolute;\n border-radius: 50%;\n transform: translate(-50%, -50%);\n display: block;\n width: 9px;\n height: 9px;\n box-sizing: border-box;\n border: var(--viewer-annotations-pin-label-border);\n background: var(--viewer-annotations-pin-dot-color);\n pointer-events: auto;\n cursor: pointer;\n}\n\n.selected {\n width: 13px;\n height: 13px;\n border: var(--viewer-annotations-pin-selected-border)\n}\n\n.pin {\n color: var(--viewer-annotations-pin-color);\n cursor: pointer;\n transition: opacity 0.3s ease-in;\n\n /**\n * Place bottom point of the pin at the location instead of the middle of the pin\n */\n transform: translate(0px, -12px);\n}\n\n.pin-selected {\n stroke-width: 1;\n stroke: var(--viewer-annotations-pin-selected-stroke);\n}\n\n.pin-occluded {\n opacity: .3;\n transition: opacity 0.3s ease-in;\n}\n\n.pin-detached {\n visibility: hidden;\n}","import {\n Component,\n Fragment,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n Listen,\n Prop,\n State,\n} from '@stencil/core';\nimport { Dimensions, Matrix4, Point, Vector3 } from '@vertexvis/geometry';\n\nimport { Viewport } from '../..';\nimport { PinController } from '../../lib/pins/controller';\nimport { isTextPin, Pin, TextPin } from '../../lib/pins/model';\nimport { PinModel } from '../../lib/pins/model';\nimport { translatePointToScreen } from '../viewer-pin-tool/utils';\nimport { PinRenderer } from './pin-renderer';\nimport { getClosestCenterToPoint } from './utils';\n\ninterface ComputedPoints {\n pinPoint: Point.Point;\n labelPoint?: Point.Point;\n}\n\n@Component({\n tag: 'vertex-viewer-pin-group',\n styleUrl: 'viewer-pin-group.css',\n shadow: false,\n})\nexport class ViewerPinGroup {\n /**\n * The pin to draw for the group\n */\n @Prop()\n public pin?: Pin;\n\n /**\n * The local matrix of this element.\n */\n @Prop({ mutable: true, attribute: null })\n public matrix: Matrix4.Matrix4 = Matrix4.makeIdentity();\n\n /**\n * Projection view matrix used for computing the position of the pin line\n */\n @Prop()\n public projectionViewMatrix: Matrix4.Matrix4 = Matrix4.makeIdentity();\n\n /**\n * The dimensions of the canvas for the pins\n */\n @Prop({ mutable: true })\n public elementBounds?: DOMRect;\n\n /**\n * The model that contains the entities and outcomes from performing pin operations\n */\n @Prop()\n public pinModel: PinModel = new PinModel();\n\n /**\n * The controller that drives behavior for pin operations\n */\n @Prop()\n public pinController?: PinController;\n\n /**\n * Whether the pin is \"selected\"\n */\n @Prop()\n public selected = false;\n\n /**\n * @internal\n * Whether the pin is occluded\n */\n @Prop({ mutable: true, reflect: true })\n public occluded = false;\n\n /**\n * @internal\n * Whether the pin is detached\n */\n @Prop({ mutable: true, reflect: true })\n public detached = false;\n\n @State()\n private invalidateStateCounter = 0;\n\n private labelEl: HTMLVertexViewerPinLabelElement | undefined;\n\n private resizeObserver?: ResizeObserver;\n\n protected componentDidLoad(): void {\n this.setLabelObserver();\n\n if (this.pinController == null) {\n this.pinController = new PinController(this.pinModel);\n }\n\n if (this.selected) {\n this.labelEl?.setFocus();\n }\n }\n\n /**\n * @ignore\n */\n @Listen('occlusionStateChanged')\n protected async handleOcclusionStateChanged(\n event: CustomEvent<boolean>\n ): Promise<void> {\n this.occluded = event.detail;\n }\n\n /**\n * @ignore\n */\n @Listen('detachedStateChanged')\n protected async handleDetachedStateChanged(\n event: CustomEvent<boolean>\n ): Promise<void> {\n this.detached = event.detail;\n }\n\n protected disconnectedCallback(): void {\n this.labelEl?.removeEventListener('labelChanged', this.invalidateState);\n this.resizeObserver?.disconnect();\n }\n\n protected render(): JSX.Element {\n if (this.pin == null) {\n throw new Error('Unable to draw pin');\n }\n\n const { pinPoint, labelPoint } = this.computePinPoints(this.pin);\n\n return (\n <Fragment>\n <vertex-viewer-dom-element\n data-testid={`drawn-pin-${this.pin.id}`}\n position={this.pin.worldPosition}\n onPointerDown={async () => {\n await this.labelEl?.submit();\n this.selectPin();\n this.handleAnchorPointerDown();\n }}\n detachedOff={false}\n >\n <PinRenderer\n pin={this.pin}\n selected={this.selected}\n occluded={this.occluded}\n detached={this.detached}\n />\n </vertex-viewer-dom-element>\n\n {isTextPin(this.pin) && !this.occluded && !this.detached && (\n <Fragment>\n <vertex-viewer-pin-label-line\n id={`pin-label-line-${this.pin?.id}`}\n pinPoint={pinPoint}\n pin={this.pin}\n labelPoint={labelPoint}\n onPointerDown={() => this.selectPin()}\n ></vertex-viewer-pin-label-line>\n\n <vertex-viewer-pin-label\n pin={this.pin}\n ref={(el) => (this.labelEl = el)}\n elementBounds={this.elementBounds}\n pinController={this.pinController}\n onPointerDown={() => this.selectPin()}\n ></vertex-viewer-pin-label>\n </Fragment>\n )}\n </Fragment>\n );\n }\n\n private invalidateState = (): void => {\n this.invalidateStateCounter = this.invalidateStateCounter + 1;\n };\n\n private setLabelObserver(): void {\n if (this.labelEl != null) {\n this.labelEl.addEventListener('labelChanged', this.invalidateState);\n\n this.resizeObserver = new ResizeObserver(() => this.invalidateState());\n this.resizeObserver.observe(this.labelEl);\n }\n }\n\n private computePinPoints(pin: Pin): ComputedPoints {\n if (this.elementBounds != null && this.pin != null) {\n return isTextPin(this.pin) && this.pin.label.point != null\n ? this.computeTextPinPoints(this.pin, this.elementBounds)\n : this.computeDefaultPinPoints(this.pin, this.elementBounds);\n }\n\n return { pinPoint: pin.worldPosition };\n }\n\n private computeDefaultPinPoints(\n pin: Pin,\n elementBounds: DOMRect\n ): ComputedPoints {\n return {\n pinPoint: this.getFromWorldPosition(\n pin.worldPosition,\n this.projectionViewMatrix,\n elementBounds\n ),\n };\n }\n\n private computeTextPinPoints(\n pin: TextPin,\n elementBounds: DOMRect\n ): ComputedPoints {\n const { pinPoint } = this.computeDefaultPinPoints(pin, elementBounds);\n\n const screenPosition = translatePointToScreen(\n pin.label.point,\n elementBounds\n );\n\n const labelWidth = this.labelEl?.firstElementChild?.clientWidth || 0;\n const labelHeight = this.labelEl?.firstElementChild?.clientHeight || 0;\n\n return {\n pinPoint,\n labelPoint: getClosestCenterToPoint(screenPosition, pinPoint, {\n width: labelWidth,\n height: labelHeight,\n }),\n };\n }\n\n private handleAnchorPointerDown(): void {\n if (\n this.elementBounds != null &&\n this.pinController?.getToolMode() === 'edit' &&\n this.pin != null\n ) {\n this.pinController?.setDraggable({ id: this.pin.id });\n }\n }\n\n private selectPin(): void {\n this.pinController?.setSelectedPinId(this.pin?.id);\n }\n\n private getFromWorldPosition(\n pt: Vector3.Vector3,\n projectionViewMatrix: Matrix4.Matrix4,\n dimensions: Dimensions.Dimensions\n ): Point.Point {\n const ndcPt = Vector3.transformMatrix(pt, projectionViewMatrix);\n return Viewport.fromDimensions(dimensions).transformVectorToViewport(ndcPt);\n }\n}\n"],"version":3}
@@ -1,12 +1,12 @@
1
1
  /*!
2
2
  * Copyright (c) 2026 Vertex Software LLC. All rights reserved.
3
3
  */
4
- import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-f3e96c9e.js';
4
+ import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-c12dc0cd.js';
5
5
  import { p as point } from './bundle.esm-925f02ed.js';
6
6
  import { c as classnames } from './index-4fb60da6.js';
7
7
  import { g as getMouseClientPosition } from './dom-bad6c254.js';
8
8
  import { t as translatePointToRelative, c as translatePointToScreen, a as PinController, P as PinModel, g as getPinColors, b as isTextPin } from './model-1c68cf1e.js';
9
- import { r as readDOM } from './stencil-9d9f090f.js';
9
+ import { r as readDOM } from './stencil-38b2fc28.js';
10
10
  import './_commonjsHelpers-43fe435c.js';
11
11
  import './browser.esm-340e5d9b.js';
12
12
 
@@ -1,11 +1,11 @@
1
1
  /*!
2
2
  * Copyright (c) 2026 Vertex Software LLC. All rights reserved.
3
3
  */
4
- import { r as registerInstance, h, H as Host, g as getElement } from './index-f3e96c9e.js';
4
+ import { r as registerInstance, h, H as Host, g as getElement } from './index-c12dc0cd.js';
5
5
  import { t as translatePointToRelative, P as PinModel, a as PinController } from './model-1c68cf1e.js';
6
6
  import { p as point } from './bundle.esm-925f02ed.js';
7
7
  import { a as uuid } from './browser.esm-340e5d9b.js';
8
- import { l as labelPinCursor, p as pinCursor } from './cursors-9e349d61.js';
8
+ import { l as labelPinCursor, p as pinCursor } from './cursors-3806bc04.js';
9
9
  import { g as getMouseClientPosition } from './dom-bad6c254.js';
10
10
  import { E as ElementRectObserver } from './elementRectObserver-21aee9fd.js';
11
11
  import { E as EntityType } from './entities-618b551e.js';
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Copyright (c) 2026 Vertex Software LLC. All rights reserved.
3
3
  */
4
- import { r as registerInstance, h } from './index-f3e96c9e.js';
4
+ import { r as registerInstance, h } from './index-c12dc0cd.js';
5
5
  import { c as classnames } from './index-4fb60da6.js';
6
6
  import './_commonjsHelpers-43fe435c.js';
7
7
 
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Copyright (c) 2026 Vertex Software LLC. All rights reserved.
3
3
  */
4
- import { r as registerInstance, c as createEvent, h, H as Host } from './index-f3e96c9e.js';
4
+ import { r as registerInstance, c as createEvent, h, H as Host } from './index-c12dc0cd.js';
5
5
  import { p as point, v as vector3, b as boundingBox, g as plane, r as ray } from './bundle.esm-925f02ed.js';
6
6
  import { g as getMouseClientPosition } from './dom-bad6c254.js';
7
7
  import { E as ElementRectObserver } from './elementRectObserver-21aee9fd.js';
@@ -1,10 +1,10 @@
1
1
  /*!
2
2
  * Copyright (c) 2026 Vertex Software LLC. All rights reserved.
3
3
  */
4
- import { h, r as registerInstance, c as createEvent, H as Host, g as getElement } from './index-f3e96c9e.js';
4
+ import { h, r as registerInstance, c as createEvent, H as Host, g as getElement } from './index-c12dc0cd.js';
5
5
  import { p as point, m as matrix4, v as vector3, r as ray, g as plane, q as quaternion, c as angle, e as euler, f as rectangle, d as dimensions, b as boundingBox } from './bundle.esm-925f02ed.js';
6
6
  import { c as classnames } from './index-4fb60da6.js';
7
- import { w as writeDOM, r as readDOM } from './stencil-9d9f090f.js';
7
+ import { w as writeDOM, r as readDOM } from './stencil-38b2fc28.js';
8
8
  import { T as TransformController } from './controller-6b03767d.js';
9
9
  import { D as DistanceUnits, A as AngleUnits } from './streamAttributes-b054bb69.js';
10
10
  import './entities-618b551e.js';
@@ -1,9 +1,9 @@
1
1
  /*!
2
2
  * Copyright (c) 2026 Vertex Software LLC. All rights reserved.
3
3
  */
4
- import { h, F as Fragment, r as registerInstance, H as Host } from './index-f3e96c9e.js';
4
+ import { h, F as Fragment, r as registerInstance, H as Host } from './index-c12dc0cd.js';
5
5
  import { v as vector3, q as quaternion, e as euler } from './bundle.esm-925f02ed.js';
6
- import { r as readDOM } from './stencil-9d9f090f.js';
6
+ import { r as readDOM } from './stencil-38b2fc28.js';
7
7
  import { O as Orientation, f as FramePerspectiveCamera, S as StandardView } from './streamAttributes-b054bb69.js';
8
8
  import './entities-618b551e.js';
9
9
  import { c as classnames } from './index-4fb60da6.js';
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Copyright (c) 2026 Vertex Software LLC. All rights reserved.
3
3
  */
4
- import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-f3e96c9e.js';
4
+ import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-c12dc0cd.js';
5
5
  import { V as ViewerWalkModeOperation, W as WalkModeModel, a as WalkModeController } from './model-1c5b7f28.js';
6
6
  import { v as vector3 } from './bundle.esm-925f02ed.js';
7
7
  import './browser.esm-340e5d9b.js';
@@ -288,7 +288,7 @@ const ViewerWalkModeTool = class {
288
288
  }
289
289
  }
290
290
  async ensureTeleportToolConfigured() {
291
- var _a, _b, _c, _d, _e;
291
+ var _a, _b, _c;
292
292
  if (this.hostEl != null) {
293
293
  const slotted = (_b = (_a = this.hostEl) === null || _a === void 0 ? void 0 : _a.querySelector('vertex-viewer-teleport-tool[slot="teleport-tool"]')) !== null && _b !== void 0 ? _b : undefined;
294
294
  const slottedTeleportTool = (slotted === null || slotted === void 0 ? void 0 : slotted.tagName) === 'VERTEX-VIEWER-TELEPORT-TOOL'
@@ -298,9 +298,9 @@ const ViewerWalkModeTool = class {
298
298
  this.stateMap.teleportTool = slottedTeleportTool;
299
299
  }
300
300
  else {
301
- const slot = (_e = (_d = (_c = this.hostEl) === null || _c === void 0 ? void 0 : _c.shadowRoot) === null || _d === void 0 ? void 0 : _d.querySelector('slot[name="teleport-tool"]')) !== null && _e !== void 0 ? _e : undefined;
302
301
  this.stateMap.teleportTool = document.createElement('vertex-viewer-teleport-tool');
303
- slot === null || slot === void 0 ? void 0 : slot.appendChild(this.stateMap.teleportTool);
302
+ this.stateMap.teleportTool.slot = 'teleport-tool';
303
+ (_c = this.hostEl) === null || _c === void 0 ? void 0 : _c.appendChild(this.stateMap.teleportTool);
304
304
  }
305
305
  }
306
306
  }
@@ -1 +1 @@
1
- {"file":"vertex-viewer-walk-mode-tool.entry.js","mappings":"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","names":["Vector3"],"sources":["./src/lib/walk-mode/dom.ts","./src/lib/walk-mode/interactions.ts","./src/components/viewer-walk-mode-tool/viewer-walk-mode-tool.css?tag=vertex-viewer-walk-mode-tool&encapsulation=shadow","./src/components/viewer-walk-mode-tool/viewer-walk-mode-tool.tsx"],"sourcesContent":["export function targetIsElement(target: EventTarget | null): target is Element {\n return target instanceof Element;\n}\n","import { Vector3 } from '@vertexvis/geometry';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { InteractionApiPerspective, InteractionHandler } from '../interactions';\nimport { targetIsElement } from './dom';\nimport { ViewerWalkModeOperation, WalkModeModel } from './model';\n\nexport class WalkInteractionHandler implements InteractionHandler {\n private api?: InteractionApiPerspective;\n\n private interval?: NodeJS.Timer;\n private pressed: Record<string, boolean> = {};\n private handlers: Record<ViewerWalkModeOperation, VoidFunction>;\n\n private enabledChangeDisposable?: Disposable;\n private keyBindingsChangeDisposable?: Disposable;\n private configurationChangeDisposable?: Disposable;\n\n public constructor(private model: WalkModeModel) {\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleKeyUp = this.handleKeyUp.bind(this);\n this.handleEnabledChange = this.handleEnabledChange.bind(this);\n this.restartInteraction = this.restartInteraction.bind(this);\n this.updateCamera = this.updateCamera.bind(this);\n\n this.handlers = {\n [ViewerWalkModeOperation.MOVE_DOWN]: this.moveDown.bind(this),\n [ViewerWalkModeOperation.MOVE_UP]: this.moveUp.bind(this),\n [ViewerWalkModeOperation.PIVOT_DOWN]: this.pivotDown.bind(this),\n [ViewerWalkModeOperation.PIVOT_LEFT]: this.pivotLeft.bind(this),\n [ViewerWalkModeOperation.PIVOT_RIGHT]: this.pivotRight.bind(this),\n [ViewerWalkModeOperation.PIVOT_UP]: this.pivotUp.bind(this),\n [ViewerWalkModeOperation.WALK_BACKWARD]: this.walkBackward.bind(this),\n [ViewerWalkModeOperation.WALK_FORWARD]: this.walkForward.bind(this),\n [ViewerWalkModeOperation.WALK_LEFT]: this.walkLeft.bind(this),\n [ViewerWalkModeOperation.WALK_RIGHT]: this.walkRight.bind(this),\n };\n\n this.enabledChangeDisposable = this.model.onEnabledChange(\n this.handleEnabledChange\n );\n this.keyBindingsChangeDisposable = this.model.onKeyBindingsChange(\n this.restartInteraction\n );\n this.configurationChangeDisposable = this.model.onConfigurationChange(\n this.restartInteraction\n );\n }\n\n public dispose(): void {\n this.disable();\n this.enabledChangeDisposable?.dispose();\n this.keyBindingsChangeDisposable?.dispose();\n this.configurationChangeDisposable?.dispose();\n\n window.removeEventListener('keydown', this.handleKeyDown);\n window.removeEventListener('keyup', this.handleKeyUp);\n }\n\n public initialize(_: HTMLElement, api: InteractionApiPerspective): void {\n this.api = api;\n\n this.handleEnabledChange(this.model.getEnabled());\n }\n\n public enable(): void {\n this.disable();\n\n window.addEventListener('keydown', this.handleKeyDown);\n window.addEventListener('keyup', this.handleKeyUp);\n }\n\n public disable(): void {\n window.removeEventListener('keydown', this.handleKeyDown);\n window.removeEventListener('keyup', this.handleKeyUp);\n }\n\n private handleKeyDown(event: KeyboardEvent): void {\n const key = event.key.toLowerCase();\n\n const exclude =\n targetIsElement(event.target) &&\n this.model.isElementExcluded(event.target);\n\n if (!event.repeat && !exclude) {\n this.pressed = { ...this.pressed, [key]: true };\n\n this.tryBeginInteraction();\n }\n }\n\n private handleKeyUp = async (event: KeyboardEvent): Promise<void> => {\n const key = event.key.toLocaleLowerCase();\n\n this.pressed = Object.keys(this.pressed)\n .filter((k) => k !== key)\n .reduce((pressed, k) => ({ ...pressed, [k]: true }), {});\n\n if (Object.keys(this.pressed).length === 0 && this.interval != null) {\n this.endInteraction();\n }\n };\n\n private handleEnabledChange(enabled: boolean): void {\n if (enabled) {\n this.enable();\n } else {\n this.disable();\n }\n }\n\n private restartInteraction(): void {\n this.clearInterval();\n this.tryBeginInteraction();\n }\n\n private tryBeginInteraction(): void {\n if (Object.keys(this.pressed).length > 0 && this.someOperationMatches()) {\n this.beginInteraction();\n }\n }\n\n private beginInteraction(): void {\n if (!this.api?.isInteracting()) {\n this.api?.beginInteraction();\n }\n\n if (this.interval == null) {\n this.interval = setInterval(\n this.updateCamera,\n this.model.getKeyboardRepeatInterval()\n );\n }\n }\n\n private endInteraction = async (): Promise<void> => {\n this.clearInterval();\n await this.api?.endInteraction();\n };\n\n private clearInterval(): void {\n if (this.interval != null) {\n clearInterval(this.interval);\n this.interval = undefined;\n }\n }\n\n private updateCamera(): void {\n Object.keys(this.handlers).forEach((key) => {\n const op = key as ViewerWalkModeOperation;\n\n if (this.model.operationMatches(op, this.pressed)) {\n this.handlers[op]();\n }\n });\n }\n\n private someOperationMatches(): boolean {\n return Object.keys(this.handlers).some((op) =>\n this.model.operationMatches(op as ViewerWalkModeOperation, this.pressed)\n );\n }\n\n private pivotLeft(): void {\n this.api?.pivotCamera(0, this.model.getKeyboardPivotDegrees());\n }\n\n private pivotRight(): void {\n this.api?.pivotCamera(0, -this.model.getKeyboardPivotDegrees());\n }\n\n private pivotUp(): void {\n this.api?.pivotCamera(-this.model.getKeyboardPivotDegrees(), 0);\n }\n\n private pivotDown(): void {\n this.api?.pivotCamera(this.model.getKeyboardPivotDegrees(), 0);\n }\n\n private walkForward(): void {\n this.api?.walk(Vector3.scale(this.relativeWalkSpeed(), Vector3.forward()));\n }\n\n private walkBackward(): void {\n this.api?.walk(Vector3.scale(this.relativeWalkSpeed(), Vector3.back()));\n }\n\n private walkLeft(): void {\n this.api?.walk(Vector3.scale(this.relativeWalkSpeed(), Vector3.left()));\n }\n\n private walkRight(): void {\n this.api?.walk(Vector3.scale(this.relativeWalkSpeed(), Vector3.right()));\n }\n\n private moveUp(): void {\n this.api?.walk(Vector3.scale(this.relativeWalkSpeed(), Vector3.down()));\n }\n\n private moveDown(): void {\n this.api?.walk(Vector3.scale(this.relativeWalkSpeed(), Vector3.up()));\n }\n\n private relativeWalkSpeed(): number {\n return this.model.getKeyboardWalkSpeed() / 500;\n }\n}\n",":host {\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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n Host,\n Prop,\n Watch,\n} from '@stencil/core';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { InteractionType } from '../../lib/interactions/baseInteractionHandler';\nimport { WalkModeController } from '../../lib/walk-mode/controller';\nimport { WalkInteractionHandler } from '../../lib/walk-mode/interactions';\nimport { ViewerTeleportMode, WalkModeModel } from '../../lib/walk-mode/model';\n\ninterface StateMap {\n teleportTool?: HTMLVertexViewerTeleportToolElement;\n previousPrimaryInteractionType?: InteractionType;\n}\n\n/**\n * The `<vertex-viewer-walk-mode-tool>` allows for additional interactions\n * intended for walking through a model instead of orbiting a model.\n */\n@Component({\n tag: 'vertex-viewer-walk-mode-tool',\n styleUrl: 'viewer-walk-mode-tool.css',\n shadow: true,\n})\nexport class ViewerWalkModeTool {\n /**\n * The viewer that this component is bound to. This is automatically assigned\n * if added to the light-dom of a parent viewer element.\n */\n @Prop()\n public viewer?: HTMLVertexViewerElement;\n\n /**\n * The `WalkModeController` responsible for controlling `KeyBinding`s and excluded\n * elements, as well as updating the `WalkModeModel` with various configuration\n * settings.\n */\n @Prop({ mutable: true })\n public controller?: WalkModeController;\n\n /**\n * The `WalkModeModel` responsible for tracking configuration and emitting\n * events for interaction handlers to respond to.\n */\n @Prop({ mutable: true })\n public model: WalkModeModel = new WalkModeModel();\n\n /**\n * The type of teleportation to perform when clicking. This value is passed through\n * to a `<vertex-viewer-teleport-tool>`'s mode attribute.\n *\n * `teleport` - the camera's `position` is moved to the location of the hit result\n * constrained by the plane represented by the camera's current `position` and `up`\n * vectors.\n *\n * `teleport-and-align` - the camera's `position`, `lookAt`, and `up` vectors are updated\n * to align to the plane represented by the hit result's position and normal.\n *\n * `teleport-toward` - the camera's `position` is moved a fixed distance toward the location of the\n * hit result constrained by the plane represented by the camera's current `position` and `up`\n * vectors.\n *\n * `undefined` - no teleportation will occur when clicking.\n *\n * Defaults to `undefined`.\n */\n @Prop()\n public teleportMode?: ViewerTeleportMode;\n\n /**\n * Determines whether the interaction handlers for this tool should respond to events.\n * When set to `true`, the default viewer interaction mode will be overridden to use the\n * `pivot` camera interaction type, keyboard controls for movement will be added, and\n * setting the `teleportMode` will enable the tool.\n *\n * Defaults to `true`.\n */\n @Prop()\n public enabled = true;\n\n /**\n * Event emitted when the `WalkModeController` associated with this tool changes.\n */\n @Event()\n public controllerChanged!: EventEmitter<WalkModeController>;\n\n @Element()\n private hostEl?: HTMLElement;\n\n private interactionHandlerDisposable?: Disposable;\n private interactionHandler?: WalkInteractionHandler;\n\n private stateMap: StateMap = {};\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n this.setupController();\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n protected async componentDidLoad(): Promise<void> {\n await this.ensureTeleportToolConfigured();\n this.updateTeleportTool();\n await this.setPivotInteractionMode();\n }\n\n /**\n * @ignore\n */\n protected connectedCallback(): void {\n this.setupInteractionHandler();\n this.setPivotInteractionMode();\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.clearInteractionHandler();\n this.resetInteractionMode();\n }\n\n /**\n * @ignore\n */\n @Watch('enabled')\n protected handleEnabledChanged(): void {\n this.controller?.setEnabled(this.enabled);\n this.toggleInteractionMode();\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(): void {\n this.clearInteractionHandler();\n this.setupInteractionHandler();\n this.updateTeleportTool();\n this.toggleInteractionMode();\n }\n\n /**\n * @ignore\n */\n @Watch('teleportMode')\n protected handleTeleportModeChanged(): void {\n this.updateTeleportTool();\n }\n\n /**\n * @ignore\n */\n @Watch('controller')\n protected handleControllerChanged(): void {\n this.updateTeleportTool();\n this.controllerChanged.emit(this.controller);\n }\n\n /**\n * @ignore\n */\n @Watch('model')\n protected handleModelChanged(): void {\n this.setupController();\n this.clearInteractionHandler();\n this.setupInteractionHandler();\n }\n\n protected render(): JSX.Element {\n return (\n <Host>\n <slot\n name=\"teleport-tool\"\n onSlotchange={async () => {\n await this.ensureTeleportToolConfigured();\n this.updateTeleportTool();\n }}\n ></slot>\n </Host>\n );\n }\n\n private setupController(): void {\n if (this.controller == null) {\n this.controller = new WalkModeController(this.model);\n this.controllerChanged.emit(this.controller);\n } else {\n this.controller.updateModel(this.model);\n }\n }\n\n private clearInteractionHandler(): void {\n this.interactionHandlerDisposable?.dispose();\n this.interactionHandlerDisposable = undefined;\n this.interactionHandler?.dispose();\n this.interactionHandler = undefined;\n }\n\n private async setupInteractionHandler(): Promise<void> {\n if (this.interactionHandler == null) {\n this.interactionHandler = new WalkInteractionHandler(this.model);\n\n this.interactionHandlerDisposable =\n await this.viewer?.registerInteractionHandler(this.interactionHandler);\n }\n }\n\n private async ensureTeleportToolConfigured(): Promise<void> {\n if (this.hostEl != null) {\n const slotted: Element | undefined =\n this.hostEl?.querySelector(\n 'vertex-viewer-teleport-tool[slot=\"teleport-tool\"]'\n ) ?? undefined;\n const slottedTeleportTool =\n slotted?.tagName === 'VERTEX-VIEWER-TELEPORT-TOOL'\n ? (slotted as HTMLVertexViewerTeleportToolElement)\n : undefined;\n\n if (slottedTeleportTool != null) {\n this.stateMap.teleportTool = slottedTeleportTool;\n } else {\n const slot: HTMLSlotElement | undefined =\n this.hostEl?.shadowRoot?.querySelector(\n 'slot[name=\"teleport-tool\"]'\n ) ?? undefined;\n\n this.stateMap.teleportTool = document.createElement(\n 'vertex-viewer-teleport-tool'\n );\n slot?.appendChild(this.stateMap.teleportTool);\n }\n }\n }\n\n private updateTeleportTool(): void {\n if (this.stateMap.teleportTool != null) {\n this.stateMap.teleportTool.viewer = this.viewer;\n this.stateMap.teleportTool.controller = this.controller;\n this.stateMap.teleportTool.model = this.model;\n this.stateMap.teleportTool.mode = this.teleportMode;\n }\n }\n\n private toggleInteractionMode(): void {\n if (this.enabled) {\n this.setPivotInteractionMode();\n } else {\n this.resetInteractionMode();\n }\n }\n\n private async setPivotInteractionMode(): Promise<void> {\n const baseInteractionHandler =\n await this.viewer?.getBaseInteractionHandler();\n\n if (this.enabled && baseInteractionHandler != null) {\n const interactionType =\n baseInteractionHandler.getPrimaryInteractionType();\n this.stateMap.previousPrimaryInteractionType =\n interactionType === 'pivot'\n ? this.stateMap.previousPrimaryInteractionType\n : interactionType;\n baseInteractionHandler.setPrimaryInteractionType('pivot');\n }\n }\n\n private async resetInteractionMode(): Promise<void> {\n const baseInteractionHandler =\n await this.viewer?.getBaseInteractionHandler();\n\n if (\n baseInteractionHandler != null &&\n baseInteractionHandler.getPrimaryInteractionType() === 'pivot' &&\n this.stateMap.previousPrimaryInteractionType != null\n ) {\n baseInteractionHandler.setPrimaryInteractionType(\n this.stateMap.previousPrimaryInteractionType\n );\n this.stateMap.previousPrimaryInteractionType = undefined;\n }\n }\n}\n"],"version":3}
1
+ {"file":"vertex-viewer-walk-mode-tool.entry.js","mappings":"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","names":["Vector3"],"sources":["./src/lib/walk-mode/dom.ts","./src/lib/walk-mode/interactions.ts","./src/components/viewer-walk-mode-tool/viewer-walk-mode-tool.css?tag=vertex-viewer-walk-mode-tool&encapsulation=shadow","./src/components/viewer-walk-mode-tool/viewer-walk-mode-tool.tsx"],"sourcesContent":["export function targetIsElement(target: EventTarget | null): target is Element {\n return target instanceof Element;\n}\n","import { Vector3 } from '@vertexvis/geometry';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { InteractionApiPerspective, InteractionHandler } from '../interactions';\nimport { targetIsElement } from './dom';\nimport { ViewerWalkModeOperation, WalkModeModel } from './model';\n\nexport class WalkInteractionHandler implements InteractionHandler {\n private api?: InteractionApiPerspective;\n\n private interval?: NodeJS.Timer;\n private pressed: Record<string, boolean> = {};\n private handlers: Record<ViewerWalkModeOperation, VoidFunction>;\n\n private enabledChangeDisposable?: Disposable;\n private keyBindingsChangeDisposable?: Disposable;\n private configurationChangeDisposable?: Disposable;\n\n public constructor(private model: WalkModeModel) {\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleKeyUp = this.handleKeyUp.bind(this);\n this.handleEnabledChange = this.handleEnabledChange.bind(this);\n this.restartInteraction = this.restartInteraction.bind(this);\n this.updateCamera = this.updateCamera.bind(this);\n\n this.handlers = {\n [ViewerWalkModeOperation.MOVE_DOWN]: this.moveDown.bind(this),\n [ViewerWalkModeOperation.MOVE_UP]: this.moveUp.bind(this),\n [ViewerWalkModeOperation.PIVOT_DOWN]: this.pivotDown.bind(this),\n [ViewerWalkModeOperation.PIVOT_LEFT]: this.pivotLeft.bind(this),\n [ViewerWalkModeOperation.PIVOT_RIGHT]: this.pivotRight.bind(this),\n [ViewerWalkModeOperation.PIVOT_UP]: this.pivotUp.bind(this),\n [ViewerWalkModeOperation.WALK_BACKWARD]: this.walkBackward.bind(this),\n [ViewerWalkModeOperation.WALK_FORWARD]: this.walkForward.bind(this),\n [ViewerWalkModeOperation.WALK_LEFT]: this.walkLeft.bind(this),\n [ViewerWalkModeOperation.WALK_RIGHT]: this.walkRight.bind(this),\n };\n\n this.enabledChangeDisposable = this.model.onEnabledChange(\n this.handleEnabledChange\n );\n this.keyBindingsChangeDisposable = this.model.onKeyBindingsChange(\n this.restartInteraction\n );\n this.configurationChangeDisposable = this.model.onConfigurationChange(\n this.restartInteraction\n );\n }\n\n public dispose(): void {\n this.disable();\n this.enabledChangeDisposable?.dispose();\n this.keyBindingsChangeDisposable?.dispose();\n this.configurationChangeDisposable?.dispose();\n\n window.removeEventListener('keydown', this.handleKeyDown);\n window.removeEventListener('keyup', this.handleKeyUp);\n }\n\n public initialize(_: HTMLElement, api: InteractionApiPerspective): void {\n this.api = api;\n\n this.handleEnabledChange(this.model.getEnabled());\n }\n\n public enable(): void {\n this.disable();\n\n window.addEventListener('keydown', this.handleKeyDown);\n window.addEventListener('keyup', this.handleKeyUp);\n }\n\n public disable(): void {\n window.removeEventListener('keydown', this.handleKeyDown);\n window.removeEventListener('keyup', this.handleKeyUp);\n }\n\n private handleKeyDown(event: KeyboardEvent): void {\n const key = event.key.toLowerCase();\n\n const exclude =\n targetIsElement(event.target) &&\n this.model.isElementExcluded(event.target);\n\n if (!event.repeat && !exclude) {\n this.pressed = { ...this.pressed, [key]: true };\n\n this.tryBeginInteraction();\n }\n }\n\n private handleKeyUp = async (event: KeyboardEvent): Promise<void> => {\n const key = event.key.toLocaleLowerCase();\n\n this.pressed = Object.keys(this.pressed)\n .filter((k) => k !== key)\n .reduce((pressed, k) => ({ ...pressed, [k]: true }), {});\n\n if (Object.keys(this.pressed).length === 0 && this.interval != null) {\n this.endInteraction();\n }\n };\n\n private handleEnabledChange(enabled: boolean): void {\n if (enabled) {\n this.enable();\n } else {\n this.disable();\n }\n }\n\n private restartInteraction(): void {\n this.clearInterval();\n this.tryBeginInteraction();\n }\n\n private tryBeginInteraction(): void {\n if (Object.keys(this.pressed).length > 0 && this.someOperationMatches()) {\n this.beginInteraction();\n }\n }\n\n private beginInteraction(): void {\n if (!this.api?.isInteracting()) {\n this.api?.beginInteraction();\n }\n\n if (this.interval == null) {\n this.interval = setInterval(\n this.updateCamera,\n this.model.getKeyboardRepeatInterval()\n );\n }\n }\n\n private endInteraction = async (): Promise<void> => {\n this.clearInterval();\n await this.api?.endInteraction();\n };\n\n private clearInterval(): void {\n if (this.interval != null) {\n clearInterval(this.interval);\n this.interval = undefined;\n }\n }\n\n private updateCamera(): void {\n Object.keys(this.handlers).forEach((key) => {\n const op = key as ViewerWalkModeOperation;\n\n if (this.model.operationMatches(op, this.pressed)) {\n this.handlers[op]();\n }\n });\n }\n\n private someOperationMatches(): boolean {\n return Object.keys(this.handlers).some((op) =>\n this.model.operationMatches(op as ViewerWalkModeOperation, this.pressed)\n );\n }\n\n private pivotLeft(): void {\n this.api?.pivotCamera(0, this.model.getKeyboardPivotDegrees());\n }\n\n private pivotRight(): void {\n this.api?.pivotCamera(0, -this.model.getKeyboardPivotDegrees());\n }\n\n private pivotUp(): void {\n this.api?.pivotCamera(-this.model.getKeyboardPivotDegrees(), 0);\n }\n\n private pivotDown(): void {\n this.api?.pivotCamera(this.model.getKeyboardPivotDegrees(), 0);\n }\n\n private walkForward(): void {\n this.api?.walk(Vector3.scale(this.relativeWalkSpeed(), Vector3.forward()));\n }\n\n private walkBackward(): void {\n this.api?.walk(Vector3.scale(this.relativeWalkSpeed(), Vector3.back()));\n }\n\n private walkLeft(): void {\n this.api?.walk(Vector3.scale(this.relativeWalkSpeed(), Vector3.left()));\n }\n\n private walkRight(): void {\n this.api?.walk(Vector3.scale(this.relativeWalkSpeed(), Vector3.right()));\n }\n\n private moveUp(): void {\n this.api?.walk(Vector3.scale(this.relativeWalkSpeed(), Vector3.down()));\n }\n\n private moveDown(): void {\n this.api?.walk(Vector3.scale(this.relativeWalkSpeed(), Vector3.up()));\n }\n\n private relativeWalkSpeed(): number {\n return this.model.getKeyboardWalkSpeed() / 500;\n }\n}\n",":host {\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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n Host,\n Prop,\n Watch,\n} from '@stencil/core';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { InteractionType } from '../../lib/interactions/baseInteractionHandler';\nimport { WalkModeController } from '../../lib/walk-mode/controller';\nimport { WalkInteractionHandler } from '../../lib/walk-mode/interactions';\nimport { ViewerTeleportMode, WalkModeModel } from '../../lib/walk-mode/model';\n\ninterface StateMap {\n teleportTool?: HTMLVertexViewerTeleportToolElement;\n previousPrimaryInteractionType?: InteractionType;\n}\n\n/**\n * The `<vertex-viewer-walk-mode-tool>` allows for additional interactions\n * intended for walking through a model instead of orbiting a model.\n */\n@Component({\n tag: 'vertex-viewer-walk-mode-tool',\n styleUrl: 'viewer-walk-mode-tool.css',\n shadow: true,\n})\nexport class ViewerWalkModeTool {\n /**\n * The viewer that this component is bound to. This is automatically assigned\n * if added to the light-dom of a parent viewer element.\n */\n @Prop()\n public viewer?: HTMLVertexViewerElement;\n\n /**\n * The `WalkModeController` responsible for controlling `KeyBinding`s and excluded\n * elements, as well as updating the `WalkModeModel` with various configuration\n * settings.\n */\n @Prop({ mutable: true })\n public controller?: WalkModeController;\n\n /**\n * The `WalkModeModel` responsible for tracking configuration and emitting\n * events for interaction handlers to respond to.\n */\n @Prop({ mutable: true })\n public model: WalkModeModel = new WalkModeModel();\n\n /**\n * The type of teleportation to perform when clicking. This value is passed through\n * to a `<vertex-viewer-teleport-tool>`'s mode attribute.\n *\n * `teleport` - the camera's `position` is moved to the location of the hit result\n * constrained by the plane represented by the camera's current `position` and `up`\n * vectors.\n *\n * `teleport-and-align` - the camera's `position`, `lookAt`, and `up` vectors are updated\n * to align to the plane represented by the hit result's position and normal.\n *\n * `teleport-toward` - the camera's `position` is moved a fixed distance toward the location of the\n * hit result constrained by the plane represented by the camera's current `position` and `up`\n * vectors.\n *\n * `undefined` - no teleportation will occur when clicking.\n *\n * Defaults to `undefined`.\n */\n @Prop()\n public teleportMode?: ViewerTeleportMode;\n\n /**\n * Determines whether the interaction handlers for this tool should respond to events.\n * When set to `true`, the default viewer interaction mode will be overridden to use the\n * `pivot` camera interaction type, keyboard controls for movement will be added, and\n * setting the `teleportMode` will enable the tool.\n *\n * Defaults to `true`.\n */\n @Prop()\n public enabled = true;\n\n /**\n * Event emitted when the `WalkModeController` associated with this tool changes.\n */\n @Event()\n public controllerChanged!: EventEmitter<WalkModeController>;\n\n @Element()\n private hostEl?: HTMLElement;\n\n private interactionHandlerDisposable?: Disposable;\n private interactionHandler?: WalkInteractionHandler;\n\n private stateMap: StateMap = {};\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n this.setupController();\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n protected async componentDidLoad(): Promise<void> {\n await this.ensureTeleportToolConfigured();\n this.updateTeleportTool();\n await this.setPivotInteractionMode();\n }\n\n /**\n * @ignore\n */\n protected connectedCallback(): void {\n this.setupInteractionHandler();\n this.setPivotInteractionMode();\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.clearInteractionHandler();\n this.resetInteractionMode();\n }\n\n /**\n * @ignore\n */\n @Watch('enabled')\n protected handleEnabledChanged(): void {\n this.controller?.setEnabled(this.enabled);\n this.toggleInteractionMode();\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(): void {\n this.clearInteractionHandler();\n this.setupInteractionHandler();\n this.updateTeleportTool();\n this.toggleInteractionMode();\n }\n\n /**\n * @ignore\n */\n @Watch('teleportMode')\n protected handleTeleportModeChanged(): void {\n this.updateTeleportTool();\n }\n\n /**\n * @ignore\n */\n @Watch('controller')\n protected handleControllerChanged(): void {\n this.updateTeleportTool();\n this.controllerChanged.emit(this.controller);\n }\n\n /**\n * @ignore\n */\n @Watch('model')\n protected handleModelChanged(): void {\n this.setupController();\n this.clearInteractionHandler();\n this.setupInteractionHandler();\n }\n\n protected render(): JSX.Element {\n return (\n <Host>\n <slot\n name=\"teleport-tool\"\n onSlotchange={async () => {\n await this.ensureTeleportToolConfigured();\n this.updateTeleportTool();\n }}\n ></slot>\n </Host>\n );\n }\n\n private setupController(): void {\n if (this.controller == null) {\n this.controller = new WalkModeController(this.model);\n this.controllerChanged.emit(this.controller);\n } else {\n this.controller.updateModel(this.model);\n }\n }\n\n private clearInteractionHandler(): void {\n this.interactionHandlerDisposable?.dispose();\n this.interactionHandlerDisposable = undefined;\n this.interactionHandler?.dispose();\n this.interactionHandler = undefined;\n }\n\n private async setupInteractionHandler(): Promise<void> {\n if (this.interactionHandler == null) {\n this.interactionHandler = new WalkInteractionHandler(this.model);\n\n this.interactionHandlerDisposable =\n await this.viewer?.registerInteractionHandler(this.interactionHandler);\n }\n }\n\n private async ensureTeleportToolConfigured(): Promise<void> {\n if (this.hostEl != null) {\n const slotted: Element | undefined =\n this.hostEl?.querySelector(\n 'vertex-viewer-teleport-tool[slot=\"teleport-tool\"]'\n ) ?? undefined;\n const slottedTeleportTool =\n slotted?.tagName === 'VERTEX-VIEWER-TELEPORT-TOOL'\n ? (slotted as HTMLVertexViewerTeleportToolElement)\n : undefined;\n\n if (slottedTeleportTool != null) {\n this.stateMap.teleportTool = slottedTeleportTool;\n } else {\n this.stateMap.teleportTool = document.createElement(\n 'vertex-viewer-teleport-tool'\n );\n this.stateMap.teleportTool.slot = 'teleport-tool';\n\n this.hostEl?.appendChild(this.stateMap.teleportTool);\n }\n }\n }\n\n private updateTeleportTool(): void {\n if (this.stateMap.teleportTool != null) {\n this.stateMap.teleportTool.viewer = this.viewer;\n this.stateMap.teleportTool.controller = this.controller;\n this.stateMap.teleportTool.model = this.model;\n this.stateMap.teleportTool.mode = this.teleportMode;\n }\n }\n\n private toggleInteractionMode(): void {\n if (this.enabled) {\n this.setPivotInteractionMode();\n } else {\n this.resetInteractionMode();\n }\n }\n\n private async setPivotInteractionMode(): Promise<void> {\n const baseInteractionHandler =\n await this.viewer?.getBaseInteractionHandler();\n\n if (this.enabled && baseInteractionHandler != null) {\n const interactionType =\n baseInteractionHandler.getPrimaryInteractionType();\n this.stateMap.previousPrimaryInteractionType =\n interactionType === 'pivot'\n ? this.stateMap.previousPrimaryInteractionType\n : interactionType;\n baseInteractionHandler.setPrimaryInteractionType('pivot');\n }\n }\n\n private async resetInteractionMode(): Promise<void> {\n const baseInteractionHandler =\n await this.viewer?.getBaseInteractionHandler();\n\n if (\n baseInteractionHandler != null &&\n baseInteractionHandler.getPrimaryInteractionType() === 'pivot' &&\n this.stateMap.previousPrimaryInteractionType != null\n ) {\n baseInteractionHandler.setPrimaryInteractionType(\n this.stateMap.previousPrimaryInteractionType\n );\n this.stateMap.previousPrimaryInteractionType = undefined;\n }\n }\n}\n"],"version":3}
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Copyright (c) 2026 Vertex Software LLC. All rights reserved.
3
3
  */
4
- import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-f3e96c9e.js';
4
+ import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-c12dc0cd.js';
5
5
  import { p as point, v as vector3, c as angle, g as plane, r as ray, b as boundingBox, y as matrix2, d as dimensions } from './bundle.esm-925f02ed.js';
6
6
  import { S as SceneViewAPIClient_1 } from './scene_view_api_pb_service-20585d47.js';
7
7
  import { t as toProtoDuration, p as protoToDate, a as StreamApi, S as StreamRequestError, c as currentDateAsProtoTimestamp, W as WebSocketClientImpl } from './bundle.esm-4cd80d61.js';
@@ -11,14 +11,14 @@ import { u as uuid_pb, c as ImageLoadError, p as paging_pb$1, C as CustomError,
11
11
  import { s as scene_view_api_pb, p as paging_pb, f as field_mask_pb } from './scene_view_api_pb-15db20a2.js';
12
12
  import { r as requestUnary, c as createMetadata, a as requestPaged } from './grpc-b3f9c20e.js';
13
13
  import { p as fromPbStencilBufferOrThrow, q as decodePng, r as DepthBuffer, m as fromPbUuid2l, s as fromPbTimestamp, x as fromPbStringValue, k as fromPbVector3f, y as fromPbRGBAi, z as fromPbVector2d, u as updateLookAtRelativeToBoundingBoxCenter, t as toProtobuf, B as fromPbRGBi, n as mapCursor, C as fromPbInstant, E as fromPbMatrix4f, G as fromPbBoolValue, H as fromPbBoundingBox3f, I as toPbStreamAttributes, J as toPbRGBi, K as toPbCameraType, M as fromPbFrameOrThrow, N as fromPbStartStreamResponseOrThrow, P as fromPbReconnectResponseOrThrow, Q as fromPbSyncTimeResponseOrThrow, R as fromPbRefreshTokenResponseOrThrow, T as copySummaryIfInvalid, U as toPbCameraTypeOrThrow$1, V as toOrthographic, W as toPerspective } from './streamAttributes-b054bb69.js';
14
- import { t as toUuid2l, m as defaultColor, n as fromUrn, j as SynchronizedClock, M as ModelViewController, k as PmiController, S as Scene } from './queries-2f4a492c.js';
14
+ import { t as toUuid2l, m as defaultColor, n as fromUrn, j as SynchronizedClock, M as ModelViewController, k as PmiController, S as Scene } from './queries-948a88f9.js';
15
15
  import { p as parseAndValidateConfig } from './config-fa44191a.js';
16
- import { C as CursorManager } from './cursors-9e349d61.js';
16
+ import { C as CursorManager } from './cursors-3806bc04.js';
17
17
  import { g as getMouseClientPosition, c as cssCursor } from './dom-bad6c254.js';
18
18
  import { E as EntityType } from './entities-618b551e.js';
19
19
  import { V as Viewport } from './viewport-cab79320.js';
20
20
  import { B as BaseInteractionHandler, M as MultiElementInteractionHandler } from './multiElementInteractionHandler-d92e5cc5.js';
21
- import { w as writeDOM } from './stencil-9d9f090f.js';
21
+ import { w as writeDOM } from './stencil-38b2fc28.js';
22
22
  import './wrappers_pb-6dce518c.js';
23
23
  import './_commonjsHelpers-43fe435c.js';
24
24
  import './mapper-9caeebbf.js';
@@ -2599,14 +2599,15 @@ class ViewerStream extends StreamApi {
2599
2599
  this.deviceId = deviceId;
2600
2600
  this.config = config;
2601
2601
  if (this.state.type === 'disconnected') {
2602
- return this.loadIfDisconnected(urn, cameraType);
2602
+ await this.loadIfDisconnected(urn, cameraType);
2603
2603
  }
2604
2604
  else if (this.state.type === 'connection-failed') {
2605
- return this.loadIfDisconnected(urn, cameraType);
2605
+ await this.loadIfDisconnected(urn, cameraType);
2606
2606
  }
2607
2607
  else {
2608
- return this.loadIfConnectingOrConnected(urn, this.state, cameraType);
2608
+ await this.loadIfConnectingOrConnected(urn, this.state, cameraType);
2609
2609
  }
2610
+ return this.state;
2610
2611
  }
2611
2612
  update(fields) {
2612
2613
  this.frameBgColor = fields.frameBgColor
@@ -3141,6 +3142,14 @@ const Viewer = class {
3141
3142
  * @internal
3142
3143
  */
3143
3144
  this.experimentalRenderingOptions = '';
3145
+ /**
3146
+ * Specifies options related to presentation of cross-sections.
3147
+ * Defaults to showing the cross-section with an end cap that matches the part color.
3148
+ */
3149
+ this.crossSectioning = {
3150
+ endCapEnabled: true,
3151
+ endCapColor: undefined,
3152
+ };
3144
3153
  /**
3145
3154
  * An optional value that will debounce frame updates when resizing
3146
3155
  * this viewer element.
@@ -3501,10 +3510,12 @@ const Viewer = class {
3501
3510
  dimensions: this.dimensions,
3502
3511
  frameBgColor: this.getBackgroundColor(),
3503
3512
  });
3504
- await ((_a = this.stream) === null || _a === void 0 ? void 0 : _a.load(urn, this.clientId, this.getDeviceId(), this.getResolvedConfig(), options === null || options === void 0 ? void 0 : options.cameraType));
3505
- this.sceneReady.emit();
3506
- if (EXPERIMENTAL_annotationPollingIntervalInMs !== undefined) {
3507
- (_b = this.annotations) === null || _b === void 0 ? void 0 : _b.connect(EXPERIMENTAL_annotationPollingIntervalInMs);
3513
+ const state = await ((_a = this.stream) === null || _a === void 0 ? void 0 : _a.load(urn, this.clientId, this.getDeviceId(), this.getResolvedConfig(), options === null || options === void 0 ? void 0 : options.cameraType));
3514
+ if (state.type === 'connected') {
3515
+ this.sceneReady.emit();
3516
+ if (EXPERIMENTAL_annotationPollingIntervalInMs !== undefined) {
3517
+ (_b = this.annotations) === null || _b === void 0 ? void 0 : _b.connect(EXPERIMENTAL_annotationPollingIntervalInMs);
3518
+ }
3508
3519
  }
3509
3520
  }
3510
3521
  else {