@vertexvis/viewer 0.18.2-testing.0 → 0.18.2-testing.1

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 (228) hide show
  1. package/dist/cjs/index-b99cd335.js +126 -1
  2. package/dist/esm/index-fd7d7b68.js +126 -1
  3. package/package.json +7 -7
  4. package/dist/components/_commonjsHelpers.js +0 -41
  5. package/dist/components/_commonjsHelpers.js.map +0 -1
  6. package/dist/components/browser.esm.js +0 -3173
  7. package/dist/components/browser.esm.js.map +0 -1
  8. package/dist/components/bundle.esm.js +0 -2250
  9. package/dist/components/bundle.esm.js.map +0 -1
  10. package/dist/components/bundle.esm2.js +0 -39740
  11. package/dist/components/bundle.esm2.js.map +0 -1
  12. package/dist/components/config.js +0 -81
  13. package/dist/components/config.js.map +0 -1
  14. package/dist/components/controller.js +0 -7627
  15. package/dist/components/controller.js.map +0 -1
  16. package/dist/components/controller2.js +0 -124
  17. package/dist/components/controller2.js.map +0 -1
  18. package/dist/components/controller3.js +0 -111
  19. package/dist/components/controller3.js.map +0 -1
  20. package/dist/components/cursors.js +0 -110
  21. package/dist/components/cursors.js.map +0 -1
  22. package/dist/components/dom.js +0 -43
  23. package/dist/components/dom.js.map +0 -1
  24. package/dist/components/dom2.js +0 -10
  25. package/dist/components/dom2.js.map +0 -1
  26. package/dist/components/elementRectObserver.js +0 -25
  27. package/dist/components/elementRectObserver.js.map +0 -1
  28. package/dist/components/entities.js +0 -179
  29. package/dist/components/entities.js.map +0 -1
  30. package/dist/components/errors.js +0 -80
  31. package/dist/components/errors.js.map +0 -1
  32. package/dist/components/events.js +0 -11
  33. package/dist/components/events.js.map +0 -1
  34. package/dist/components/index.d.ts +0 -26
  35. package/dist/components/index.js +0 -365
  36. package/dist/components/index.js.map +0 -1
  37. package/dist/components/index2.js +0 -63
  38. package/dist/components/index2.js.map +0 -1
  39. package/dist/components/interactions.js +0 -236
  40. package/dist/components/interactions.js.map +0 -1
  41. package/dist/components/mapper.js +0 -9811
  42. package/dist/components/mapper.js.map +0 -1
  43. package/dist/components/markup.js +0 -33
  44. package/dist/components/markup.js.map +0 -1
  45. package/dist/components/model.js +0 -134
  46. package/dist/components/model.js.map +0 -1
  47. package/dist/components/model2.js +0 -157
  48. package/dist/components/model2.js.map +0 -1
  49. package/dist/components/overlays.js +0 -76
  50. package/dist/components/overlays.js.map +0 -1
  51. package/dist/components/png-decoder.js +0 -2405
  52. package/dist/components/png-decoder.js.map +0 -1
  53. package/dist/components/regl-component.js +0 -12582
  54. package/dist/components/regl-component.js.map +0 -1
  55. package/dist/components/results.js +0 -24
  56. package/dist/components/results.js.map +0 -1
  57. package/dist/components/row.js +0 -32
  58. package/dist/components/row.js.map +0 -1
  59. package/dist/components/scene-tree-search.js +0 -146
  60. package/dist/components/scene-tree-search.js.map +0 -1
  61. package/dist/components/scene-tree-table-layout.js +0 -928
  62. package/dist/components/scene-tree-table-layout.js.map +0 -1
  63. package/dist/components/scene-tree-toolbar.js +0 -35
  64. package/dist/components/scene-tree-toolbar.js.map +0 -1
  65. package/dist/components/scene.js +0 -1508
  66. package/dist/components/scene.js.map +0 -1
  67. package/dist/components/stencil.js +0 -25
  68. package/dist/components/stencil.js.map +0 -1
  69. package/dist/components/streamAttributes.js +0 -40833
  70. package/dist/components/streamAttributes.js.map +0 -1
  71. package/dist/components/templates.js +0 -36
  72. package/dist/components/templates.js.map +0 -1
  73. package/dist/components/tslib.es6.js +0 -125
  74. package/dist/components/tslib.es6.js.map +0 -1
  75. package/dist/components/vertex-scene-tree-search.d.ts +0 -11
  76. package/dist/components/vertex-scene-tree-search.js +0 -11
  77. package/dist/components/vertex-scene-tree-search.js.map +0 -1
  78. package/dist/components/vertex-scene-tree-table-cell.d.ts +0 -11
  79. package/dist/components/vertex-scene-tree-table-cell.js +0 -209
  80. package/dist/components/vertex-scene-tree-table-cell.js.map +0 -1
  81. package/dist/components/vertex-scene-tree-table-column.d.ts +0 -11
  82. package/dist/components/vertex-scene-tree-table-column.js +0 -42
  83. package/dist/components/vertex-scene-tree-table-column.js.map +0 -1
  84. package/dist/components/vertex-scene-tree-table-header.d.ts +0 -11
  85. package/dist/components/vertex-scene-tree-table-header.js +0 -38
  86. package/dist/components/vertex-scene-tree-table-header.js.map +0 -1
  87. package/dist/components/vertex-scene-tree-table-layout.d.ts +0 -11
  88. package/dist/components/vertex-scene-tree-table-layout.js +0 -11
  89. package/dist/components/vertex-scene-tree-table-layout.js.map +0 -1
  90. package/dist/components/vertex-scene-tree-table-resize-divider.d.ts +0 -11
  91. package/dist/components/vertex-scene-tree-table-resize-divider.js +0 -57
  92. package/dist/components/vertex-scene-tree-table-resize-divider.js.map +0 -1
  93. package/dist/components/vertex-scene-tree-toolbar-group.d.ts +0 -11
  94. package/dist/components/vertex-scene-tree-toolbar-group.js +0 -38
  95. package/dist/components/vertex-scene-tree-toolbar-group.js.map +0 -1
  96. package/dist/components/vertex-scene-tree-toolbar.d.ts +0 -11
  97. package/dist/components/vertex-scene-tree-toolbar.js +0 -11
  98. package/dist/components/vertex-scene-tree-toolbar.js.map +0 -1
  99. package/dist/components/vertex-scene-tree.d.ts +0 -11
  100. package/dist/components/vertex-scene-tree.js +0 -803
  101. package/dist/components/vertex-scene-tree.js.map +0 -1
  102. package/dist/components/vertex-viewer-box-query-tool.d.ts +0 -11
  103. package/dist/components/vertex-viewer-box-query-tool.js +0 -352
  104. package/dist/components/vertex-viewer-box-query-tool.js.map +0 -1
  105. package/dist/components/vertex-viewer-button.d.ts +0 -11
  106. package/dist/components/vertex-viewer-button.js +0 -11
  107. package/dist/components/vertex-viewer-button.js.map +0 -1
  108. package/dist/components/vertex-viewer-default-toolbar.d.ts +0 -11
  109. package/dist/components/vertex-viewer-default-toolbar.js +0 -99
  110. package/dist/components/vertex-viewer-default-toolbar.js.map +0 -1
  111. package/dist/components/vertex-viewer-dom-element.d.ts +0 -11
  112. package/dist/components/vertex-viewer-dom-element.js +0 -11
  113. package/dist/components/vertex-viewer-dom-element.js.map +0 -1
  114. package/dist/components/vertex-viewer-dom-group.d.ts +0 -11
  115. package/dist/components/vertex-viewer-dom-group.js +0 -11
  116. package/dist/components/vertex-viewer-dom-group.js.map +0 -1
  117. package/dist/components/vertex-viewer-dom-renderer.d.ts +0 -11
  118. package/dist/components/vertex-viewer-dom-renderer.js +0 -11
  119. package/dist/components/vertex-viewer-dom-renderer.js.map +0 -1
  120. package/dist/components/vertex-viewer-hit-result-indicator.d.ts +0 -11
  121. package/dist/components/vertex-viewer-hit-result-indicator.js +0 -335
  122. package/dist/components/vertex-viewer-hit-result-indicator.js.map +0 -1
  123. package/dist/components/vertex-viewer-icon.d.ts +0 -11
  124. package/dist/components/vertex-viewer-icon.js +0 -11
  125. package/dist/components/vertex-viewer-icon.js.map +0 -1
  126. package/dist/components/vertex-viewer-layer.d.ts +0 -11
  127. package/dist/components/vertex-viewer-layer.js +0 -11
  128. package/dist/components/vertex-viewer-layer.js.map +0 -1
  129. package/dist/components/vertex-viewer-markup-arrow.d.ts +0 -11
  130. package/dist/components/vertex-viewer-markup-arrow.js +0 -11
  131. package/dist/components/vertex-viewer-markup-arrow.js.map +0 -1
  132. package/dist/components/vertex-viewer-markup-circle.d.ts +0 -11
  133. package/dist/components/vertex-viewer-markup-circle.js +0 -11
  134. package/dist/components/vertex-viewer-markup-circle.js.map +0 -1
  135. package/dist/components/vertex-viewer-markup-freeform.d.ts +0 -11
  136. package/dist/components/vertex-viewer-markup-freeform.js +0 -11
  137. package/dist/components/vertex-viewer-markup-freeform.js.map +0 -1
  138. package/dist/components/vertex-viewer-markup-tool.d.ts +0 -11
  139. package/dist/components/vertex-viewer-markup-tool.js +0 -257
  140. package/dist/components/vertex-viewer-markup-tool.js.map +0 -1
  141. package/dist/components/vertex-viewer-markup.d.ts +0 -11
  142. package/dist/components/vertex-viewer-markup.js +0 -362
  143. package/dist/components/vertex-viewer-markup.js.map +0 -1
  144. package/dist/components/vertex-viewer-measurement-details.d.ts +0 -11
  145. package/dist/components/vertex-viewer-measurement-details.js +0 -307
  146. package/dist/components/vertex-viewer-measurement-details.js.map +0 -1
  147. package/dist/components/vertex-viewer-measurement-distance.d.ts +0 -11
  148. package/dist/components/vertex-viewer-measurement-distance.js +0 -1067
  149. package/dist/components/vertex-viewer-measurement-distance.js.map +0 -1
  150. package/dist/components/vertex-viewer-measurement-line.d.ts +0 -11
  151. package/dist/components/vertex-viewer-measurement-line.js +0 -11
  152. package/dist/components/vertex-viewer-measurement-line.js.map +0 -1
  153. package/dist/components/vertex-viewer-measurement-overlays.d.ts +0 -11
  154. package/dist/components/vertex-viewer-measurement-overlays.js +0 -11
  155. package/dist/components/vertex-viewer-measurement-overlays.js.map +0 -1
  156. package/dist/components/vertex-viewer-measurement-precise.d.ts +0 -11
  157. package/dist/components/vertex-viewer-measurement-precise.js +0 -362
  158. package/dist/components/vertex-viewer-measurement-precise.js.map +0 -1
  159. package/dist/components/vertex-viewer-pin-group.d.ts +0 -11
  160. package/dist/components/vertex-viewer-pin-group.js +0 -11
  161. package/dist/components/vertex-viewer-pin-group.js.map +0 -1
  162. package/dist/components/vertex-viewer-pin-label-line.d.ts +0 -11
  163. package/dist/components/vertex-viewer-pin-label-line.js +0 -11
  164. package/dist/components/vertex-viewer-pin-label-line.js.map +0 -1
  165. package/dist/components/vertex-viewer-pin-label.d.ts +0 -11
  166. package/dist/components/vertex-viewer-pin-label.js +0 -11
  167. package/dist/components/vertex-viewer-pin-label.js.map +0 -1
  168. package/dist/components/vertex-viewer-pin-tool.d.ts +0 -11
  169. package/dist/components/vertex-viewer-pin-tool.js +0 -430
  170. package/dist/components/vertex-viewer-pin-tool.js.map +0 -1
  171. package/dist/components/vertex-viewer-spinner.d.ts +0 -11
  172. package/dist/components/vertex-viewer-spinner.js +0 -11
  173. package/dist/components/vertex-viewer-spinner.js.map +0 -1
  174. package/dist/components/vertex-viewer-toolbar-group.d.ts +0 -11
  175. package/dist/components/vertex-viewer-toolbar-group.js +0 -11
  176. package/dist/components/vertex-viewer-toolbar-group.js.map +0 -1
  177. package/dist/components/vertex-viewer-toolbar.d.ts +0 -11
  178. package/dist/components/vertex-viewer-toolbar.js +0 -11
  179. package/dist/components/vertex-viewer-toolbar.js.map +0 -1
  180. package/dist/components/vertex-viewer-transform-widget.d.ts +0 -11
  181. package/dist/components/vertex-viewer-transform-widget.js +0 -838
  182. package/dist/components/vertex-viewer-transform-widget.js.map +0 -1
  183. package/dist/components/vertex-viewer-view-cube.d.ts +0 -11
  184. package/dist/components/vertex-viewer-view-cube.js +0 -270
  185. package/dist/components/vertex-viewer-view-cube.js.map +0 -1
  186. package/dist/components/vertex-viewer.d.ts +0 -11
  187. package/dist/components/vertex-viewer.js +0 -3543
  188. package/dist/components/vertex-viewer.js.map +0 -1
  189. package/dist/components/viewer-button.js +0 -35
  190. package/dist/components/viewer-button.js.map +0 -1
  191. package/dist/components/viewer-dom-element.js +0 -250
  192. package/dist/components/viewer-dom-element.js.map +0 -1
  193. package/dist/components/viewer-dom-group.js +0 -214
  194. package/dist/components/viewer-dom-group.js.map +0 -1
  195. package/dist/components/viewer-dom-renderer.js +0 -295
  196. package/dist/components/viewer-dom-renderer.js.map +0 -1
  197. package/dist/components/viewer-icon.js +0 -87
  198. package/dist/components/viewer-icon.js.map +0 -1
  199. package/dist/components/viewer-layer.js +0 -46
  200. package/dist/components/viewer-layer.js.map +0 -1
  201. package/dist/components/viewer-markup-arrow.js +0 -235
  202. package/dist/components/viewer-markup-arrow.js.map +0 -1
  203. package/dist/components/viewer-markup-circle-components.js +0 -42
  204. package/dist/components/viewer-markup-circle-components.js.map +0 -1
  205. package/dist/components/viewer-markup-circle.js +0 -201
  206. package/dist/components/viewer-markup-circle.js.map +0 -1
  207. package/dist/components/viewer-markup-freeform.js +0 -251
  208. package/dist/components/viewer-markup-freeform.js.map +0 -1
  209. package/dist/components/viewer-measurement-line.js +0 -77
  210. package/dist/components/viewer-measurement-line.js.map +0 -1
  211. package/dist/components/viewer-measurement-overlays.js +0 -184
  212. package/dist/components/viewer-measurement-overlays.js.map +0 -1
  213. package/dist/components/viewer-pin-group.js +0 -207
  214. package/dist/components/viewer-pin-group.js.map +0 -1
  215. package/dist/components/viewer-pin-label-line.js +0 -43
  216. package/dist/components/viewer-pin-label-line.js.map +0 -1
  217. package/dist/components/viewer-pin-label.js +0 -427
  218. package/dist/components/viewer-pin-label.js.map +0 -1
  219. package/dist/components/viewer-spinner.js +0 -53
  220. package/dist/components/viewer-spinner.js.map +0 -1
  221. package/dist/components/viewer-toolbar-group.js +0 -42
  222. package/dist/components/viewer-toolbar-group.js.map +0 -1
  223. package/dist/components/viewer-toolbar.js +0 -61
  224. package/dist/components/viewer-toolbar.js.map +0 -1
  225. package/dist/components/viewport.js +0 -188
  226. package/dist/components/viewport.js.map +0 -1
  227. package/dist/components/wrappers_pb.js +0 -1926
  228. package/dist/components/wrappers_pb.js.map +0 -1
@@ -1,427 +0,0 @@
1
- /*!
2
- * Copyright (c) 2023 Vertex Software LLC. All rights reserved.
3
- */
4
- import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
5
- import { p as point, d as dimensions } from './bundle.esm.js';
6
- import { c as classnames } from './index2.js';
7
- import { g as getMouseClientPosition } from './dom.js';
8
- import { P as PinModel, g as getPinColors, i as isTextPin } from './model2.js';
9
- import { r as readDOM } from './stencil.js';
10
- import { r as range } from './browser.esm.js';
11
-
12
- /**
13
- * The `PinController` is responsible for adding pin entities to the viewer canvas
14
- */
15
- class PinController {
16
- constructor(model, mode = 'view', type = 'pin-icon', styleAttributes = undefined) {
17
- this.model = model;
18
- this.mode = mode;
19
- this.type = type;
20
- this.styleAttributes = styleAttributes;
21
- }
22
- /**
23
- * Registers an entity to place on the canvas and places the pin on the associated part.
24
- *
25
- * @param pin The pin entity
26
- * @returns A void promise
27
- */
28
- addPin(pin) {
29
- this.model.addPin(pin);
30
- }
31
- /**
32
- * Clears all entities and returns a promise that resolves with an empty list
33
- * of pin results.
34
- */
35
- clearPins() {
36
- this.model.clearPins();
37
- }
38
- /**
39
- * Deregisters an entity and performs a pin if this entity was
40
- * removed.
41
- *
42
- * @param entity The entity to remove.
43
- * @returns A promise that resolves with the results after removing this
44
- * entity.
45
- */
46
- removePin(pin) {
47
- this.model.removePin(pin);
48
- }
49
- /**
50
- * Registers a set of entities and adds a pin
51
- *
52
- * @param entities The pin entities to draw.
53
- * @returns A promise that resolves with the results after registering these
54
- * entities.
55
- */
56
- setPins(pins) {
57
- this.model.setPins(pins);
58
- }
59
- /**
60
- * Sets the set of entities to be placed with the model.
61
- *
62
- * @param pin A pin to set
63
- * @returns `true` if the entity has been added.
64
- */
65
- setPin(pin) {
66
- this.model.setPin(pin);
67
- }
68
- /**
69
- * Updates an existing pin
70
- * @param pin A pin to set
71
- * @returns `true` if the entity has been updated, false otherwise
72
- */
73
- updatePin(pin) {
74
- this.model.updatePin(pin);
75
- }
76
- /**
77
- * Tells the controller which pin is selected in the model
78
- * @param pinId
79
- */
80
- setSelectedPinId(pinId) {
81
- this.model.setSelectedPin(pinId);
82
- }
83
- getToolMode() {
84
- return this.mode;
85
- }
86
- getToolType() {
87
- return this.type;
88
- }
89
- setToolMode(mode) {
90
- this.mode = mode;
91
- }
92
- setToolType(type) {
93
- this.type = type;
94
- }
95
- getDraggable() {
96
- return this.draggable;
97
- }
98
- setDraggable(draggable) {
99
- this.draggable = draggable;
100
- }
101
- setPrimaryColor(color) {
102
- this.styleAttributes = Object.assign(Object.assign({}, this.styleAttributes), { primaryColor: color });
103
- }
104
- setAccentColor(color) {
105
- this.styleAttributes = Object.assign(Object.assign({}, this.styleAttributes), { accentColor: color });
106
- }
107
- getStyleAttributes() {
108
- return this.styleAttributes;
109
- }
110
- updateDraggable(draggable, worldPosition, partId) {
111
- if (this.draggable != null) {
112
- this.draggable = draggable;
113
- }
114
- const pin = this.model.getPinById(draggable.id);
115
- if (pin != null) {
116
- this.updatePin(Object.assign(Object.assign({}, pin), { worldPosition,
117
- partId }));
118
- }
119
- }
120
- }
121
-
122
- function constrainRelativePoint(pt, range) {
123
- const constrainedX = Math.max(range.start, Math.min(range.end, pt.x));
124
- const constrainedY = Math.max(range.start, Math.min(range.end, pt.y));
125
- return point.create(constrainedX, constrainedY);
126
- }
127
- /**
128
- * Translates a point in relative units to a point in screen units.
129
- */
130
- function translatePointToScreen(pt, canvasDimensions) {
131
- return point.add(point.scale(pt, canvasDimensions.width, canvasDimensions.height), dimensions.center(canvasDimensions));
132
- }
133
- /**
134
- * Translates a point in screen units to a point in relative units.
135
- */
136
- function translatePointToRelative(pt, canvasDimensions, includeOffset, xOffset, yOffset) {
137
- const verticalScaleFactor = 1 / canvasDimensions.height;
138
- const horizontalScaleFactor = 1 / canvasDimensions.width;
139
- const canvasCenterPoint = dimensions.center(canvasDimensions);
140
- const point$1 = point.scale(point.subtract(pt, canvasCenterPoint), horizontalScaleFactor, verticalScaleFactor);
141
- if (includeOffset) {
142
- const offset = point.scale(point.create(xOffset, yOffset), horizontalScaleFactor, verticalScaleFactor);
143
- // We want to place the label towards the center of the screen.
144
- // The given point corresponds to the upper left corner of the label, so increase the offset
145
- // when placing it to the left or above to ensure that part of the label line is visible
146
- const centerIsToTheRightInXDirection = canvasCenterPoint.x > pt.x;
147
- const xOffsetCalculated = centerIsToTheRightInXDirection
148
- ? offset.x
149
- : -3 * offset.x;
150
- const centerIsBelowInYDirection = canvasCenterPoint.y > pt.y;
151
- const yOffsetCalculated = centerIsBelowInYDirection
152
- ? offset.y
153
- : -3 * offset.y;
154
- const offsetPoint = point.add(point$1, point.create(xOffsetCalculated, yOffsetCalculated));
155
- return constrainRelativePoint(offsetPoint, range.create(-0.5, 0.5));
156
- }
157
- else {
158
- return constrainRelativePoint(point$1, range.create(-0.5, 0.5));
159
- }
160
- }
161
-
162
- function getComputedStyle(el) {
163
- return window.getComputedStyle(el);
164
- }
165
-
166
- const viewerPinLabelCss = ":host{--viewer-annotations-pin-label-background-color:var(--viewer-annotations-pin-accent-color);--viewer-annotations-pin-label-border-color:var(--viewer-annotations-pin-primary-color);--viewer-annotations-pin-label-focused-border-color:var(--viewer-annotations-pin-primary-color);--viewer-annotations-pin-label-color:var(--white);--viewer-annotations-pin-label-padding-y:0.375em;--viewer-annotations-pin-label-padding-x:0.5em;--viewer-annotations-pin-label-border-width:2px;--viewer-annotations-pin-label-border-style:solid;--viewer-annotations-pin-label-border-radius:0.25em;--viewer-annotations-pin-label-min-width:2rem;--viewer-annotations-pin-label-max-width:25rem;--viewer-annotations-pin-label-max-height:50rem;overflow:hidden;pointer-events:none}:host([mode='']) .pin-label{color:var(--viewer-annotations-pin-label-color);background:var(--viewer-annotations-pin-label-background-color)}.pin-label-text{font-family:Arial, Helvetica, sans-serif;font-size:0.875rem;line-height:1rem;word-break:break-word;white-space:pre-wrap}.pin-label-input-wrapper{display:flex;position:absolute;pointer-events:auto;box-sizing:border-box;min-width:var(--viewer-annotations-pin-label-min-width);max-width:var(--viewer-annotations-pin-label-max-width);max-height:var(--viewer-annotations-pin-label-max-height);background:var(--viewer-annotations-pin-label-background-color);border-width:var(--viewer-annotations-pin-label-border-width);border-style:var(--viewer-annotations-pin-label-border-style);border-color:var(--viewer-annotations-pin-label-border-color);border-radius:var(--viewer-annotations-pin-label-border-radius)}.pin-label-input-wrapper.focused{min-width:var(--viewer-annotations-pin-label-max-width);border-color:var(--viewer-annotations-pin-label-focused-border-color)}.pin-input-drag-target{position:absolute;top:0;left:0;width:100%;height:100%;cursor:pointer}.pin-label-input{resize:none;position:relative;outline:none;border:none;word-break:break-word;padding:0 0 0 0;background-color:transparent;margin:var(--viewer-annotations-pin-label-padding-y) var(--viewer-annotations-pin-label-padding-x);width:var(--viewer-annotations-pin-label-min-width);flex-grow:1;overflow:hidden;max-width:calc(var(--viewer-annotations-pin-label-max-width) - calc(2 * var(--viewer-annotations-pin-label-padding-x)))}.pin-label-input.readonly{pointer-events:auto;color:black;cursor:pointer}.pin-label-hidden{position:absolute;visibility:hidden;pointer-events:none;width:auto;height:auto;box-sizing:border-box;border-width:var(--viewer-annotations-pin-label-border-width);border-style:var(--viewer-annotations-pin-label-border-style);border-color:var(--viewer-annotations-pin-label-border-color);margin:var(--viewer-annotations-pin-label-padding-y) 0;padding:0 var(--viewer-annotations-pin-label-padding-x);max-width:calc(var(--viewer-annotations-pin-label-max-width) - calc(2 * var(--viewer-annotations-pin-label-padding-x)))}";
167
-
168
- const VertexPinLabel = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
169
- constructor() {
170
- super();
171
- this.__registerHost();
172
- this.labelChanged = createEvent(this, "labelChanged", 7);
173
- this.labelFocused = createEvent(this, "labelFocused", 7);
174
- this.labelBlurred = createEvent(this, "labelBlurred", 7);
175
- this.focused = false;
176
- this.textareaRows = 1;
177
- this.computeContentSize = () => {
178
- readDOM(() => {
179
- if (this.contentEl != null) {
180
- this.contentElBounds = this.contentEl.getBoundingClientRect();
181
- const computedStyles = getComputedStyle(this.contentEl);
182
- this.textareaRows = Math.max(1, Math.ceil((parseFloat(computedStyles.height) -
183
- parseFloat(computedStyles.borderWidth) * 2) /
184
- parseFloat(computedStyles.lineHeight)));
185
- }
186
- });
187
- };
188
- this.handleInputKeyDown = (event) => {
189
- event.stopPropagation();
190
- if (event.key === 'Enter' &&
191
- (event.ctrlKey || event.metaKey || event.shiftKey)) {
192
- this.textareaRows += 1;
193
- this.value += '\n';
194
- }
195
- else if (event.key === 'Enter') {
196
- event.preventDefault();
197
- this.submit();
198
- }
199
- };
200
- this.handlePointerDown = (event) => {
201
- var _a;
202
- if (!this.focused) {
203
- if (this.elementBounds != null) {
204
- this.relativePointerDownPosition = translatePointToRelative(getMouseClientPosition(event, this.elementBounds), this.elementBounds);
205
- this.pinPointerDownPosition = (_a = this.pin) === null || _a === void 0 ? void 0 : _a.label.point;
206
- window.addEventListener('pointermove', this.handlePointerMove);
207
- window.addEventListener('pointerup', this.handlePointerUp);
208
- }
209
- }
210
- };
211
- this.handlePointerMove = (event) => {
212
- var _a;
213
- if (this.elementBounds != null &&
214
- this.relativePointerDownPosition &&
215
- this.pinPointerDownPosition != null) {
216
- // Prevent selection of any text while interacting with the label
217
- event.preventDefault();
218
- const point$1 = getMouseClientPosition(event, this.elementBounds);
219
- const relative = translatePointToRelative(point$1, this.elementBounds);
220
- const relativeDelta = point.subtract(relative, this.relativePointerDownPosition);
221
- const myUpdatedPin = this.pin != null
222
- ? Object.assign(Object.assign({}, this.pin), { label: Object.assign(Object.assign({}, this.pin.label), { point: point.add(this.pinPointerDownPosition, relativeDelta) }) }) : undefined;
223
- if (myUpdatedPin) {
224
- (_a = this.pinController) === null || _a === void 0 ? void 0 : _a.updatePin(myUpdatedPin);
225
- this.computeScreenPosition();
226
- }
227
- }
228
- };
229
- this.handlePointerUp = (event) => {
230
- var _a, _b;
231
- if (((_a = this.pinController) === null || _a === void 0 ? void 0 : _a.getToolMode()) === 'edit' &&
232
- this.relativePointerDownPosition != null &&
233
- this.elementBounds != null) {
234
- const pointerDownScreen = translatePointToScreen(this.relativePointerDownPosition, this.elementBounds);
235
- const distanceBetweenStartAndEndPoint = point.distance(pointerDownScreen, getMouseClientPosition(event, this.elementBounds));
236
- if (distanceBetweenStartAndEndPoint <= 2) {
237
- this.focused = true;
238
- this.labelFocused.emit((_b = this.pin) === null || _b === void 0 ? void 0 : _b.id);
239
- }
240
- }
241
- this.relativePointerDownPosition = undefined;
242
- this.pinPointerDownPosition = undefined;
243
- window.removeEventListener('pointermove', this.handlePointerMove);
244
- window.removeEventListener('pointerup', this.handlePointerUp);
245
- };
246
- this.handleTextBlur = () => {
247
- this.submit();
248
- };
249
- this.handleTextInput = (event) => {
250
- const input = event.target;
251
- this.value = input.value;
252
- };
253
- this.value = this.getPinText();
254
- }
255
- /**
256
- * Gives focus to the the component's internal text input.
257
- */
258
- async setFocus() {
259
- var _a, _b, _c;
260
- // HTMLInputElement.focus() doesn't exist in tests.
261
- if (typeof ((_a = this.inputEl) === null || _a === void 0 ? void 0 : _a.focus) === 'function') {
262
- this.focused = true;
263
- this.labelFocused.emit((_b = this.pin) === null || _b === void 0 ? void 0 : _b.id);
264
- (_c = this.inputEl) === null || _c === void 0 ? void 0 : _c.focus();
265
- }
266
- }
267
- watchFocusChange() {
268
- var _a, _b;
269
- this.labelChanged.emit();
270
- if (this.focused) {
271
- (_a = this.pinController) === null || _a === void 0 ? void 0 : _a.setSelectedPinId((_b = this.pin) === null || _b === void 0 ? void 0 : _b.id);
272
- }
273
- }
274
- watchPinChange() {
275
- this.value = this.getPinText();
276
- this.computeScreenPosition();
277
- }
278
- watchElementBoundsChange() {
279
- this.computeScreenPosition();
280
- }
281
- componentWillLoad() {
282
- this.computeScreenPosition();
283
- }
284
- componentDidLoad() {
285
- this.resizeObserver = new ResizeObserver(() => {
286
- this.labelChanged.emit();
287
- });
288
- this.contentResizeObserver = new ResizeObserver(this.computeContentSize);
289
- if (this.hostEl != null) {
290
- this.resizeObserver.observe(this.hostEl);
291
- }
292
- if (this.contentEl != null) {
293
- this.contentResizeObserver.observe(this.contentEl);
294
- }
295
- if (this.pinController == null) {
296
- this.pinController = new PinController(new PinModel());
297
- }
298
- }
299
- disconnectedCallback() {
300
- var _a, _b;
301
- (_a = this.resizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
302
- (_b = this.contentResizeObserver) === null || _b === void 0 ? void 0 : _b.disconnect();
303
- }
304
- componentDidRender() {
305
- if (this.focused && this.inputEl != null) {
306
- this.setFocus();
307
- }
308
- }
309
- render() {
310
- var _a, _b, _c;
311
- const { primaryColor, accentColor } = getPinColors(this.pin);
312
- return (h(Host, null, h("div", { class: classnames('pin-label-input-wrapper', {
313
- focused: this.focused,
314
- }), onPointerDown: this.handlePointerDown, style: {
315
- top: `${((_a = this.computedScreenPosition) === null || _a === void 0 ? void 0 : _a.y.toString()) || 0}px`,
316
- left: `${((_b = this.computedScreenPosition) === null || _b === void 0 ? void 0 : _b.x.toString()) || 0}px`,
317
- minWidth: this.computeMinWidth(),
318
- maxWidth: this.computeMaxWidth(),
319
- maxHeight: this.computeMaxHeight(),
320
- borderColor: primaryColor,
321
- background: accentColor,
322
- } }, h("textarea", { id: `pin-label-input-${(_c = this.pin) === null || _c === void 0 ? void 0 : _c.id}`, class: classnames('pin-label-input', 'pin-label-text', {
323
- ['readonly']: !this.focused,
324
- }), disabled: !this.focused, ref: (ref) => (this.inputEl = ref), value: this.value, rows: this.textareaRows, onKeyDown: this.handleInputKeyDown, onInput: this.handleTextInput, onBlur: this.handleTextBlur }), !this.focused && (h("div", { class: "pin-input-drag-target", onPointerDown: this.handlePointerDown }))), h("div", { ref: (el) => (this.contentEl = el), class: classnames('pin-label-text', 'pin-label-hidden'), style: {
325
- maxWidth: this.computeMaxWidth(),
326
- maxHeight: this.computeMaxHeight(),
327
- } }, this.hiddenContent())));
328
- }
329
- hiddenContent() {
330
- // This corrects some inconsistencies in how a newline character
331
- // is represented in a div. Leveraging `<br>`s results in a more
332
- // consistent representation of the newlines in a textarea.
333
- return this.value.includes('\n')
334
- ? this.value
335
- .split('\n')
336
- .reduce((res, str) => [...res, str, h("br", null)], [])
337
- : [this.value];
338
- }
339
- computeMinWidth() {
340
- if (this.contentElBounds != null) {
341
- const expected = `${this.contentElBounds.width + 8}px`;
342
- return `min(${expected}, ${this.computeMaxWidth()})`;
343
- }
344
- else {
345
- return `var(--viewer-annotations-pin-label-min-width)`;
346
- }
347
- }
348
- computeMaxWidth() {
349
- const expected = `var(--viewer-annotations-pin-label-max-width)`;
350
- return `min(${expected}, ${this.computeRemainingWidth()})`;
351
- }
352
- computeMaxHeight() {
353
- const expected = `var(--viewer-annotations-pin-label-max-height)`;
354
- return `min(${expected}, ${this.computeRemainingHeight()})`;
355
- }
356
- computeRemainingWidth() {
357
- var _a, _b;
358
- return `calc(${((_a = this.elementBounds) === null || _a === void 0 ? void 0 : _a.width.toString()) || 0}px - ${((_b = this.computedScreenPosition) === null || _b === void 0 ? void 0 : _b.x.toString()) || 0}px)`;
359
- }
360
- computeRemainingHeight() {
361
- var _a, _b;
362
- return `calc(${((_a = this.elementBounds) === null || _a === void 0 ? void 0 : _a.height.toString()) || 0}px - ${((_b = this.computedScreenPosition) === null || _b === void 0 ? void 0 : _b.y.toString()) || 0}px)`;
363
- }
364
- getPinText() {
365
- var _a;
366
- if (((_a = this.pin) === null || _a === void 0 ? void 0 : _a.label.text) != null) {
367
- this.value = this.pin.label.text;
368
- }
369
- else {
370
- this.value = '';
371
- }
372
- return this.value;
373
- }
374
- computeScreenPosition() {
375
- this.computedScreenPosition =
376
- isTextPin(this.pin) &&
377
- this.elementBounds != null &&
378
- this.pin.label.point != null
379
- ? translatePointToScreen(this.pin.label.point, this.elementBounds)
380
- : undefined;
381
- }
382
- submit() {
383
- var _a, _b;
384
- this.focused = false;
385
- this.labelBlurred.emit((_a = this.pin) === null || _a === void 0 ? void 0 : _a.id);
386
- if (this.pin != null) {
387
- (_b = this.pinController) === null || _b === void 0 ? void 0 : _b.updatePin(Object.assign(Object.assign({}, this.pin), { label: {
388
- point: this.pin.label.point,
389
- text: this.value,
390
- } }));
391
- }
392
- }
393
- get hostEl() { return this; }
394
- static get watchers() { return {
395
- "focused": ["watchFocusChange"],
396
- "pin": ["watchPinChange"],
397
- "elementBounds": ["watchElementBoundsChange"]
398
- }; }
399
- static get style() { return viewerPinLabelCss; }
400
- }, [0, "vertex-viewer-pin-label", {
401
- "pin": [16],
402
- "elementBounds": [16],
403
- "value": [1025],
404
- "pinController": [16],
405
- "focused": [32],
406
- "computedScreenPosition": [32],
407
- "textareaRows": [32],
408
- "contentElBounds": [32],
409
- "setFocus": [64]
410
- }]);
411
- function defineCustomElement() {
412
- if (typeof customElements === "undefined") {
413
- return;
414
- }
415
- const components = ["vertex-viewer-pin-label"];
416
- components.forEach(tagName => { switch (tagName) {
417
- case "vertex-viewer-pin-label":
418
- if (!customElements.get(tagName)) {
419
- customElements.define(tagName, VertexPinLabel);
420
- }
421
- break;
422
- } });
423
- }
424
-
425
- export { PinController as P, VertexPinLabel as V, translatePointToRelative as a, defineCustomElement as d, translatePointToScreen as t };
426
-
427
- //# sourceMappingURL=viewer-pin-label.js.map
@@ -1 +0,0 @@
1
- {"file":"viewer-pin-label.js","mappings":"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","names":["Point","Dimensions","point","Range","classNames"],"sources":["./src/lib/pins/controller.ts","./src/components/viewer-pin-tool/utils.ts","./src/components/viewer-pin-label/utils.ts","./src/components/viewer-pin-label/viewer-pin-label.css?tag=vertex-viewer-pin-label","./src/components/viewer-pin-label/viewer-pin-label.tsx"],"sourcesContent":["import { Point, Vector3 } from '@vertexvis/geometry';\nimport { Color } from '@vertexvis/utils';\n\nimport {\n Pin,\n PinModel,\n PinStyleAttributes,\n ViewerPinToolMode,\n ViewerPinToolType,\n} from './model';\n\nexport interface Draggable {\n id: string;\n lastPoint?: Point.Point;\n}\n\n/**\n * The `PinController` is responsible for adding pin entities to the viewer canvas\n */\nexport class PinController {\n private draggable?: Draggable;\n\n public constructor(\n private model: PinModel,\n private mode: ViewerPinToolMode = 'view',\n private type: ViewerPinToolType = 'pin-icon',\n private styleAttributes: PinStyleAttributes | undefined = undefined\n ) {}\n\n /**\n * Registers an entity to place on the canvas and places the pin on the associated part.\n *\n * @param pin The pin entity\n * @returns A void promise\n */\n public addPin(pin: Pin): void {\n this.model.addPin(pin);\n }\n\n /**\n * Clears all entities and returns a promise that resolves with an empty list\n * of pin results.\n */\n public clearPins(): void {\n this.model.clearPins();\n }\n\n /**\n * Deregisters an entity and performs a pin if this entity was\n * removed.\n *\n * @param entity The entity to remove.\n * @returns A promise that resolves with the results after removing this\n * entity.\n */\n public removePin(pin: Pin): void {\n this.model.removePin(pin);\n }\n\n /**\n * Registers a set of entities and adds a pin\n *\n * @param entities The pin entities to draw.\n * @returns A promise that resolves with the results after registering these\n * entities.\n */\n public setPins(pins: Set<Pin>): void {\n this.model.setPins(pins);\n }\n\n /**\n * Sets the set of entities to be placed with the model.\n *\n * @param pin A pin to set\n * @returns `true` if the entity has been added.\n */\n public setPin(pin: Pin): void {\n this.model.setPin(pin);\n }\n\n /**\n * Updates an existing pin\n * @param pin A pin to set\n * @returns `true` if the entity has been updated, false otherwise\n */\n public updatePin(pin: Pin): void {\n this.model.updatePin(pin);\n }\n\n /**\n * Tells the controller which pin is selected in the model\n * @param pinId\n */\n public setSelectedPinId(pinId?: string): void {\n this.model.setSelectedPin(pinId);\n }\n\n public getToolMode(): ViewerPinToolMode {\n return this.mode;\n }\n\n public getToolType(): ViewerPinToolType {\n return this.type;\n }\n\n public setToolMode(mode: ViewerPinToolMode): void {\n this.mode = mode;\n }\n\n public setToolType(type: ViewerPinToolType): void {\n this.type = type;\n }\n\n public getDraggable(): Draggable | undefined {\n return this.draggable;\n }\n\n public setDraggable(draggable: Draggable | undefined): void {\n this.draggable = draggable;\n }\n\n public setPrimaryColor(color?: Color.Color | string): void {\n this.styleAttributes = {\n ...this.styleAttributes,\n primaryColor: color,\n };\n }\n\n public setAccentColor(color?: Color.Color | string): void {\n this.styleAttributes = {\n ...this.styleAttributes,\n accentColor: color,\n };\n }\n\n public getStyleAttributes(): PinStyleAttributes | undefined {\n return this.styleAttributes;\n }\n\n public updateDraggable(\n draggable: Draggable,\n worldPosition: Vector3.Vector3,\n partId?: string\n ): void {\n if (this.draggable != null) {\n this.draggable = draggable;\n }\n const pin = this.model.getPinById(draggable.id);\n if (pin != null) {\n this.updatePin({\n ...pin,\n worldPosition,\n partId,\n });\n }\n }\n}\n","import { Dimensions, Point } from '@vertexvis/geometry';\nimport { Range } from '@vertexvis/utils';\n\nexport function constrainRelativePoint(\n pt: Point.Point,\n range: Range.Range\n): Point.Point {\n const constrainedX = Math.max(range.start, Math.min(range.end, pt.x));\n const constrainedY = Math.max(range.start, Math.min(range.end, pt.y));\n\n return Point.create(constrainedX, constrainedY);\n}\n\n/**\n * Translates a point in relative units to a point in screen units.\n */\nexport function translatePointToScreen(\n pt: Point.Point,\n canvasDimensions: Dimensions.Dimensions\n): Point.Point {\n return Point.add(\n Point.scale(pt, canvasDimensions.width, canvasDimensions.height),\n Dimensions.center(canvasDimensions)\n );\n}\n\n/**\n * Translates a point in screen units to a point in relative units.\n */\nexport function translatePointToRelative(\n pt: Point.Point,\n canvasDimensions: Dimensions.Dimensions,\n includeOffset?: boolean,\n xOffset?: number,\n yOffset?: number\n): Point.Point {\n const verticalScaleFactor = 1 / canvasDimensions.height;\n const horizontalScaleFactor = 1 / canvasDimensions.width;\n const canvasCenterPoint = Dimensions.center(canvasDimensions);\n\n const point = Point.scale(\n Point.subtract(pt, canvasCenterPoint),\n horizontalScaleFactor,\n verticalScaleFactor\n );\n\n if (includeOffset) {\n const offset = Point.scale(\n Point.create(xOffset, yOffset),\n horizontalScaleFactor,\n verticalScaleFactor\n );\n\n // We want to place the label towards the center of the screen.\n // The given point corresponds to the upper left corner of the label, so increase the offset\n // when placing it to the left or above to ensure that part of the label line is visible\n const centerIsToTheRightInXDirection = canvasCenterPoint.x > pt.x;\n const xOffsetCalculated = centerIsToTheRightInXDirection\n ? offset.x\n : -3 * offset.x;\n\n const centerIsBelowInYDirection = canvasCenterPoint.y > pt.y;\n const yOffsetCalculated = centerIsBelowInYDirection\n ? offset.y\n : -3 * offset.y;\n\n const offsetPoint = Point.add(\n point,\n Point.create(xOffsetCalculated, yOffsetCalculated)\n );\n\n return constrainRelativePoint(offsetPoint, Range.create(-0.5, 0.5));\n } else {\n return constrainRelativePoint(point, Range.create(-0.5, 0.5));\n }\n}\n","export function getComputedStyle(el: HTMLElement): CSSStyleDeclaration {\n return window.getComputedStyle(el);\n}\n",":host {\n /**\n * @prop --viewer-annotations-pin-label-background-color: A CSS color that\n * specifies the color of the label background\n */\n --viewer-annotations-pin-label-background-color: var(--viewer-annotations-pin-accent-color);\n\n /**\n * @prop --viewer-annotations-pin-label-border-color: A CSS color that\n * specifies the color of the label's border\n */\n --viewer-annotations-pin-label-border-color: var(--viewer-annotations-pin-primary-color);\n\n /**\n * @prop --viewer-annotations-pin-label-focused-border-color: A CSS color that\n * specifies the color of the label's border when focused. \n */\n --viewer-annotations-pin-label-focused-border-color: var(--viewer-annotations-pin-primary-color);\n\n /**\n * @prop --viewer-annotations-pin-label-color: A CSS color that\n * specifies the color of the label \n */\n --viewer-annotations-pin-label-color: var(--white);\n\n /**\n * @prop --viewer-annotations-pin-label-padding-y: A var that\n * specifies the vertical padding of the label\n */\n --viewer-annotations-pin-label-padding-y: 0.375em;\n\n /**\n * @prop --viewer-annotations-pin-label-padding-x: A var that\n * specifies the horizontal padding of the label\n */\n --viewer-annotations-pin-label-padding-x: 0.5em;\n\n /**\n * @prop --viewer-annotations-pin-label-border-width: A CSS length that\n * specifies the width of the border on this label. Defaults to `2px`.\n */\n --viewer-annotations-pin-label-border-width: 2px;\n\n /**\n * @prop --viewer-annotations-pin-label-border-style: A CSS variable that\n * specifies the style of border on this label. Defaults to `solid`.\n */\n --viewer-annotations-pin-label-border-style: solid;\n\n /**\n * @prop --viewer-annotations-pin-label-border-radius: A var that\n * specifies the border radius of the label\n */\n --viewer-annotations-pin-label-border-radius: 0.25em;\n\n /**\n * @prop --viewer-annotations-pin-label-min-width: A CSS length that\n * specifies the minimum width of the label. Defaults to `2rem`.\n */\n --viewer-annotations-pin-label-min-width: 2rem;\n\n /**\n * @prop --viewer-annotations-pin-label-max-width: A CSS length that\n * specifies the maximum width of the label. Defaults to `25rem`.\n */\n --viewer-annotations-pin-label-max-width: 25rem;\n\n /**\n * @prop --viewer-annotations-pin-label-max-height: A CSS length that\n * specifies the maximum height of the label. Defaults to `50rem`.\n */\n --viewer-annotations-pin-label-max-height: 50rem;\n\n overflow: hidden;\n pointer-events: none;\n}\n\n:host([mode='']) .pin-label {\n color: var(--viewer-annotations-pin-label-color);\n background: var(--viewer-annotations-pin-label-background-color);\n}\n\n.pin-label-text {\n font-family: Arial, Helvetica, sans-serif;\n font-size: 0.875rem;\n line-height: 1rem;\n word-break: break-word;\n white-space: pre-wrap;\n}\n\n.pin-label-input-wrapper {\n display: flex;\n position: absolute;\n pointer-events: auto;\n box-sizing: border-box;\n min-width: var(--viewer-annotations-pin-label-min-width);\n max-width: var(--viewer-annotations-pin-label-max-width);\n max-height: var(--viewer-annotations-pin-label-max-height);\n background: var(--viewer-annotations-pin-label-background-color);\n border-width: var(--viewer-annotations-pin-label-border-width);\n border-style: var(--viewer-annotations-pin-label-border-style);\n border-color: var(--viewer-annotations-pin-label-border-color);\n border-radius: var(--viewer-annotations-pin-label-border-radius);\n}\n\n.pin-label-input-wrapper.focused {\n min-width: var(--viewer-annotations-pin-label-max-width);\n border-color: var(--viewer-annotations-pin-label-focused-border-color);\n}\n\n.pin-input-drag-target {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n cursor: pointer;\n}\n\n.pin-label-input {\n resize: none;\n position: relative;\n outline: none;\n border: none;\n word-break: break-word;\n padding: 0 0 0 0;\n background-color: transparent;\n margin: var(--viewer-annotations-pin-label-padding-y) var(--viewer-annotations-pin-label-padding-x);\n width: var(--viewer-annotations-pin-label-min-width);\n flex-grow: 1;\n overflow: hidden;\n max-width: calc(var(--viewer-annotations-pin-label-max-width) - calc(2 * var(--viewer-annotations-pin-label-padding-x)));\n}\n\n.pin-label-input.readonly {\n pointer-events: auto;\n color: black;\n cursor: pointer;\n}\n\n.pin-label-hidden {\n position: absolute;\n visibility: hidden;\n pointer-events: none;\n width: auto;\n height: auto;\n box-sizing: border-box;\n border-width: var(--viewer-annotations-pin-label-border-width);\n border-style: var(--viewer-annotations-pin-label-border-style);\n border-color: var(--viewer-annotations-pin-label-border-color);\n margin: var(--viewer-annotations-pin-label-padding-y) 0;\n padding: 0 var(--viewer-annotations-pin-label-padding-x);\n max-width: calc(var(--viewer-annotations-pin-label-max-width) - calc(2 * var(--viewer-annotations-pin-label-padding-x)));\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 Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Point } from '@vertexvis/geometry';\nimport classNames from 'classnames';\n\nimport { getMouseClientPosition } from '../../lib/dom';\nimport { PinController } from '../../lib/pins/controller';\nimport {\n getPinColors,\n isTextPin,\n PinModel,\n TextPin,\n} from '../../lib/pins/model';\nimport { readDOM } from '../../lib/stencil';\nimport {\n translatePointToRelative,\n translatePointToScreen,\n} from '../viewer-pin-tool/utils';\nimport { getComputedStyle } from './utils';\n\n@Component({\n tag: 'vertex-viewer-pin-label',\n styleUrl: 'viewer-pin-label.css',\n shadow: false,\n})\nexport class VertexPinLabel {\n /**\n * The pin to draw for the group\n */\n @Prop()\n public pin?: TextPin;\n\n /**\n * The dimensions of the canvas for the pins\n */\n @Prop()\n public elementBounds?: DOMRect;\n\n /**\n * The current text value of the component. Value is updated on user\n * interaction.\n */\n @Prop({ mutable: true })\n public value: string;\n\n /**\n * The controller that drives behavior for pin operations\n */\n @Prop()\n public pinController?: PinController;\n\n /**\n * @internal\n */\n @Event({ bubbles: true })\n public labelChanged!: EventEmitter<void>;\n\n /**\n * Emitted whenever the label is focused, with the ID of the\n * associated pin (or undefined if no pin is provided).\n */\n @Event({ bubbles: true })\n public labelFocused!: EventEmitter<string | undefined>;\n\n /**\n * Emitted whenever the label is blurred, with the ID of the\n * associated pin (or undefined if no pin is provided).\n */\n @Event({ bubbles: true })\n public labelBlurred!: EventEmitter<string | undefined>;\n\n @Element()\n private hostEl!: HTMLElement;\n\n @State()\n private focused = false;\n\n @State()\n private computedScreenPosition?: Point.Point;\n\n @State()\n private textareaRows = 1;\n\n @State()\n private contentElBounds?: DOMRect;\n\n private relativePointerDownPosition?: Point.Point;\n private pinPointerDownPosition?: Point.Point;\n\n private inputEl?: HTMLTextAreaElement;\n private contentEl?: HTMLDivElement;\n\n private resizeObserver?: ResizeObserver;\n private contentResizeObserver?: ResizeObserver;\n\n public constructor() {\n this.value = this.getPinText();\n }\n\n /**\n * Gives focus to the the component's internal text input.\n */\n @Method()\n public async setFocus(): Promise<void> {\n // HTMLInputElement.focus() doesn't exist in tests.\n if (typeof this.inputEl?.focus === 'function') {\n this.focused = true;\n this.labelFocused.emit(this.pin?.id);\n this.inputEl?.focus();\n }\n }\n\n @Watch('focused')\n protected watchFocusChange(): void {\n this.labelChanged.emit();\n\n if (this.focused) {\n this.pinController?.setSelectedPinId(this.pin?.id);\n }\n }\n\n @Watch('pin')\n protected watchPinChange(): void {\n this.value = this.getPinText();\n this.computeScreenPosition();\n }\n\n @Watch('elementBounds')\n protected watchElementBoundsChange(): void {\n this.computeScreenPosition();\n }\n\n protected componentWillLoad(): void {\n this.computeScreenPosition();\n }\n\n protected componentDidLoad(): void {\n this.resizeObserver = new ResizeObserver(() => {\n this.labelChanged.emit();\n });\n\n this.contentResizeObserver = new ResizeObserver(this.computeContentSize);\n\n if (this.hostEl != null) {\n this.resizeObserver.observe(this.hostEl);\n }\n\n if (this.contentEl != null) {\n this.contentResizeObserver.observe(this.contentEl);\n }\n\n if (this.pinController == null) {\n this.pinController = new PinController(new PinModel());\n }\n }\n\n protected disconnectedCallback(): void {\n this.resizeObserver?.disconnect();\n this.contentResizeObserver?.disconnect();\n }\n\n protected componentDidRender(): void {\n if (this.focused && this.inputEl != null) {\n this.setFocus();\n }\n }\n\n protected render(): JSX.Element {\n const { primaryColor, accentColor } = getPinColors(this.pin);\n return (\n <Host>\n <div\n class={classNames('pin-label-input-wrapper', {\n focused: this.focused,\n })}\n onPointerDown={this.handlePointerDown}\n style={{\n top: `${this.computedScreenPosition?.y.toString() || 0}px`,\n left: `${this.computedScreenPosition?.x.toString() || 0}px`,\n minWidth: this.computeMinWidth(),\n maxWidth: this.computeMaxWidth(),\n maxHeight: this.computeMaxHeight(),\n borderColor: primaryColor,\n background: accentColor,\n }}\n >\n <textarea\n id={`pin-label-input-${this.pin?.id}`}\n class={classNames('pin-label-input', 'pin-label-text', {\n ['readonly']: !this.focused,\n })}\n disabled={!this.focused}\n ref={(ref) => (this.inputEl = ref)}\n value={this.value}\n rows={this.textareaRows}\n onKeyDown={this.handleInputKeyDown}\n onInput={this.handleTextInput}\n onBlur={this.handleTextBlur}\n />\n {/* This corrects for a behavior in Firefox where setting the `disabled` attribute to true */}\n {/* prevents any events from propagating. */}\n {!this.focused && (\n <div\n class=\"pin-input-drag-target\"\n onPointerDown={this.handlePointerDown}\n />\n )}\n </div>\n <div\n ref={(el) => (this.contentEl = el)}\n class={classNames('pin-label-text', 'pin-label-hidden')}\n style={{\n maxWidth: this.computeMaxWidth(),\n maxHeight: this.computeMaxHeight(),\n }}\n >\n {this.hiddenContent()}\n </div>\n </Host>\n );\n }\n\n private hiddenContent(): Array<string | HTMLBRElement> {\n // This corrects some inconsistencies in how a newline character\n // is represented in a div. Leveraging `<br>`s results in a more\n // consistent representation of the newlines in a textarea.\n return this.value.includes('\\n')\n ? this.value\n .split('\\n')\n .reduce(\n (res, str) => [...res, str, <br />],\n [] as Array<string | HTMLBRElement>\n )\n : [this.value];\n }\n\n private computeMinWidth(): string {\n if (this.contentElBounds != null) {\n const expected = `${this.contentElBounds.width + 8}px`;\n\n return `min(${expected}, ${this.computeMaxWidth()})`;\n } else {\n return `var(--viewer-annotations-pin-label-min-width)`;\n }\n }\n\n private computeMaxWidth(): string {\n const expected = `var(--viewer-annotations-pin-label-max-width)`;\n\n return `min(${expected}, ${this.computeRemainingWidth()})`;\n }\n\n private computeMaxHeight(): string {\n const expected = `var(--viewer-annotations-pin-label-max-height)`;\n\n return `min(${expected}, ${this.computeRemainingHeight()})`;\n }\n\n private computeRemainingWidth(): string {\n return `calc(${this.elementBounds?.width.toString() || 0}px - ${\n this.computedScreenPosition?.x.toString() || 0\n }px)`;\n }\n\n private computeRemainingHeight(): string {\n return `calc(${this.elementBounds?.height.toString() || 0}px - ${\n this.computedScreenPosition?.y.toString() || 0\n }px)`;\n }\n\n private getPinText(): string {\n if (this.pin?.label.text != null) {\n this.value = this.pin.label.text;\n } else {\n this.value = '';\n }\n\n return this.value;\n }\n\n private computeScreenPosition(): void {\n this.computedScreenPosition =\n isTextPin(this.pin) &&\n this.elementBounds != null &&\n this.pin.label.point != null\n ? translatePointToScreen(this.pin.label.point, this.elementBounds)\n : undefined;\n }\n\n private computeContentSize = (): void => {\n readDOM(() => {\n if (this.contentEl != null) {\n this.contentElBounds = this.contentEl.getBoundingClientRect();\n const computedStyles = getComputedStyle(this.contentEl);\n this.textareaRows = Math.max(\n 1,\n Math.ceil(\n (parseFloat(computedStyles.height) -\n parseFloat(computedStyles.borderWidth) * 2) /\n parseFloat(computedStyles.lineHeight)\n )\n );\n }\n });\n };\n\n private handleInputKeyDown = (event: KeyboardEvent): void => {\n event.stopPropagation();\n if (\n event.key === 'Enter' &&\n (event.ctrlKey || event.metaKey || event.shiftKey)\n ) {\n this.textareaRows += 1;\n this.value += '\\n';\n } else if (event.key === 'Enter') {\n event.preventDefault();\n this.submit();\n }\n };\n\n private handlePointerDown = (event: PointerEvent): void => {\n if (!this.focused) {\n if (this.elementBounds != null) {\n this.relativePointerDownPosition = translatePointToRelative(\n getMouseClientPosition(event, this.elementBounds),\n this.elementBounds\n );\n this.pinPointerDownPosition = this.pin?.label.point;\n\n window.addEventListener('pointermove', this.handlePointerMove);\n window.addEventListener('pointerup', this.handlePointerUp);\n }\n }\n };\n\n private handlePointerMove = (event: PointerEvent): void => {\n if (\n this.elementBounds != null &&\n this.relativePointerDownPosition &&\n this.pinPointerDownPosition != null\n ) {\n // Prevent selection of any text while interacting with the label\n event.preventDefault();\n\n const point = getMouseClientPosition(event, this.elementBounds);\n const relative = translatePointToRelative(point, this.elementBounds);\n\n const relativeDelta = Point.subtract(\n relative,\n this.relativePointerDownPosition\n );\n\n const myUpdatedPin =\n this.pin != null\n ? {\n ...this.pin,\n label: {\n ...this.pin.label,\n point: Point.add(this.pinPointerDownPosition, relativeDelta),\n },\n }\n : undefined;\n\n if (myUpdatedPin) {\n this.pinController?.updatePin(myUpdatedPin);\n this.computeScreenPosition();\n }\n }\n };\n\n private handlePointerUp = (event: PointerEvent): void => {\n if (\n this.pinController?.getToolMode() === 'edit' &&\n this.relativePointerDownPosition != null &&\n this.elementBounds != null\n ) {\n const pointerDownScreen = translatePointToScreen(\n this.relativePointerDownPosition,\n this.elementBounds\n );\n const distanceBetweenStartAndEndPoint = Point.distance(\n pointerDownScreen,\n getMouseClientPosition(event, this.elementBounds)\n );\n\n if (distanceBetweenStartAndEndPoint <= 2) {\n this.focused = true;\n this.labelFocused.emit(this.pin?.id);\n }\n }\n\n this.relativePointerDownPosition = undefined;\n this.pinPointerDownPosition = undefined;\n\n window.removeEventListener('pointermove', this.handlePointerMove);\n window.removeEventListener('pointerup', this.handlePointerUp);\n };\n\n private handleTextBlur = (): void => {\n this.submit();\n };\n\n private submit(): void {\n this.focused = false;\n this.labelBlurred.emit(this.pin?.id);\n if (this.pin != null) {\n this.pinController?.updatePin({\n ...this.pin,\n label: {\n point: this.pin.label.point,\n text: this.value,\n },\n });\n }\n }\n\n private handleTextInput = (event: Event): void => {\n const input = event.target as HTMLInputElement;\n this.value = input.value;\n };\n}\n"],"version":3}
@@ -1,53 +0,0 @@
1
- /*!
2
- * Copyright (c) 2023 Vertex Software LLC. All rights reserved.
3
- */
4
- import { proxyCustomElement, HTMLElement, h } from '@stencil/core/internal/client';
5
- import { c as classnames } from './index2.js';
6
-
7
- const viewerSpinnerCss = ".spinner{position:relative;height:16px;width:16px}.spinner div{position:absolute;display:block;animation:spinner 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;border-radius:50%;border-style:solid;box-sizing:border-box;border-color:var(--neutral-800) transparent transparent transparent;border-width:1px;margin:0}.spinner div:nth-child(1){animation-delay:-0.45s}.spinner div:nth-child(2){animation-delay:-0.3s}.spinner div:nth-child(3){animation-delay:-0.15s}.spinner.xs{height:16px;width:16px}.spinner.xs div{border-width:1px;height:16px;width:16px;margin:0}.spinner.sm{height:24px;width:24px}.spinner.sm div{border-width:3px;height:18px;width:18px;margin:2px}.spinner.md{height:32px;width:32px}.spinner.md div{border-width:3px;height:32px;width:32px;margin:2px}.spinner.lg{height:64px;width:64px}.spinner.lg div{border-width:6px;height:52px;width:52px;margin:6px}@keyframes spinner{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}";
8
-
9
- const ViewerSpinner = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
10
- constructor() {
11
- super();
12
- this.__registerHost();
13
- this.__attachShadow();
14
- /**
15
- * The size of the spinner. Can be `'xs' | 'sm' | 'md' | 'lg' | undefined`. Predefined
16
- * sizes are set to:
17
- *
18
- * * `xm`: 16px
19
- * * `sm`: 24px
20
- * * `md`: 32px
21
- * * `lg`: 64px
22
- */
23
- this.size = 'md';
24
- }
25
- render() {
26
- return (h("div", { class: classnames('spinner', {
27
- ['xs']: this.size === 'xs',
28
- ['sm']: this.size === 'sm',
29
- ['md']: this.size === 'md',
30
- ['lg']: this.size === 'lg',
31
- }) }, h("div", null), h("div", null), h("div", null), h("div", null)));
32
- }
33
- static get style() { return viewerSpinnerCss; }
34
- }, [1, "vertex-viewer-spinner", {
35
- "size": [1]
36
- }]);
37
- function defineCustomElement() {
38
- if (typeof customElements === "undefined") {
39
- return;
40
- }
41
- const components = ["vertex-viewer-spinner"];
42
- components.forEach(tagName => { switch (tagName) {
43
- case "vertex-viewer-spinner":
44
- if (!customElements.get(tagName)) {
45
- customElements.define(tagName, ViewerSpinner);
46
- }
47
- break;
48
- } });
49
- }
50
-
51
- export { ViewerSpinner as V, defineCustomElement as d };
52
-
53
- //# sourceMappingURL=viewer-spinner.js.map
@@ -1 +0,0 @@
1
- {"file":"viewer-spinner.js","mappings":";;;;;;AAAA,MAAM,gBAAgB,GAAG,26BAA26B;;MCav7B,aAAa;EAL1B;;;;;;;;;;;;;IAgBS,SAAI,GAAiB,IAAI,CAAC;GAmBlC;EAjBQ,MAAM;IACX,QACE,WACE,KAAK,EAAEA,UAAU,CAAC,SAAS,EAAE;QAC3B,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI;QAC1B,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI;QAC1B,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI;QAC1B,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI;OAC3B,CAAC,IAEF,cAAO,EACP,cAAO,EACP,cAAO,EACP,cAAO,CACH,EACN;GACH;;;;;;;;;;;;;;;;;;;;;","names":["classNames"],"sources":["./src/components/viewer-spinner/viewer-spinner.css?tag=vertex-viewer-spinner&encapsulation=shadow","./src/components/viewer-spinner/viewer-spinner.tsx"],"sourcesContent":[".spinner {\n position: relative;\n height: 16px;\n width: 16px;\n}\n\n.spinner div {\n position: absolute;\n display: block;\n animation: spinner 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n border-radius: 50%;\n border-style: solid;\n box-sizing: border-box;\n border-color: var(--neutral-800) transparent transparent transparent;\n border-width: 1px;\n\n margin: 0;\n}\n\n.spinner div:nth-child(1) {\n animation-delay: -0.45s;\n}\n\n.spinner div:nth-child(2) {\n animation-delay: -0.3s;\n}\n\n.spinner div:nth-child(3) {\n animation-delay: -0.15s;\n}\n\n/* xs */\n.spinner.xs {\n height: 16px;\n width: 16px;\n}\n\n.spinner.xs div {\n border-width: 1px;\n height: 16px;\n width: 16px;\n margin: 0;\n}\n\n/* sm */\n.spinner.sm {\n height: 24px;\n width: 24px;\n}\n\n.spinner.sm div {\n border-width: 3px;\n height: 18px;\n width: 18px;\n margin: 2px;\n}\n\n/* md */\n.spinner.md {\n height: 32px;\n width: 32px;\n}\n\n.spinner.md div {\n border-width: 3px;\n height: 32px;\n width: 32px;\n margin: 2px;\n}\n\n/* lg */\n.spinner.lg {\n height: 64px;\n width: 64px;\n}\n\n.spinner.lg div {\n border-width: 6px;\n height: 52px;\n width: 52px;\n margin: 6px;\n}\n\n@keyframes spinner {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n","import { Component, h, Prop } from '@stencil/core';\nimport classNames from 'classnames';\n\n/**\n * The predefined sizes for the spinner.\n */\nexport type SpinnerSize = 'xs' | 'sm' | 'md' | 'lg' | undefined;\n\n@Component({\n tag: 'vertex-viewer-spinner',\n styleUrl: 'viewer-spinner.css',\n shadow: true,\n})\nexport class ViewerSpinner {\n /**\n * The size of the spinner. Can be `'xs' | 'sm' | 'md' | 'lg' | undefined`. Predefined\n * sizes are set to:\n *\n * * `xm`: 16px\n * * `sm`: 24px\n * * `md`: 32px\n * * `lg`: 64px\n */\n @Prop()\n public size?: SpinnerSize = 'md';\n\n public render(): h.JSX.IntrinsicElements {\n return (\n <div\n class={classNames('spinner', {\n ['xs']: this.size === 'xs',\n ['sm']: this.size === 'sm',\n ['md']: this.size === 'md',\n ['lg']: this.size === 'lg',\n })}\n >\n <div />\n <div />\n <div />\n <div />\n </div>\n );\n }\n}\n"],"version":3}
@@ -1,42 +0,0 @@
1
- /*!
2
- * Copyright (c) 2023 Vertex Software LLC. All rights reserved.
3
- */
4
- import { proxyCustomElement, HTMLElement, h } from '@stencil/core/internal/client';
5
- import { c as classnames } from './index2.js';
6
-
7
- const viewerToolbarGroupCss = ".inner{display:flex;align-items:center;margin:auto}.inner.vertical{flex-direction:column}.inner.horizontal{flex-direction:row}";
8
-
9
- const ViewerToolbarGroup = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
10
- constructor() {
11
- super();
12
- this.__registerHost();
13
- this.__attachShadow();
14
- this.direction = 'horizontal';
15
- }
16
- render() {
17
- return (h("div", { class: classnames('inner', {
18
- horizontal: this.direction === 'horizontal',
19
- vertical: this.direction === 'vertical',
20
- }) }, h("slot", null)));
21
- }
22
- static get style() { return viewerToolbarGroupCss; }
23
- }, [1, "vertex-viewer-toolbar-group", {
24
- "direction": [1]
25
- }]);
26
- function defineCustomElement() {
27
- if (typeof customElements === "undefined") {
28
- return;
29
- }
30
- const components = ["vertex-viewer-toolbar-group"];
31
- components.forEach(tagName => { switch (tagName) {
32
- case "vertex-viewer-toolbar-group":
33
- if (!customElements.get(tagName)) {
34
- customElements.define(tagName, ViewerToolbarGroup);
35
- }
36
- break;
37
- } });
38
- }
39
-
40
- export { ViewerToolbarGroup as V, defineCustomElement as d };
41
-
42
- //# sourceMappingURL=viewer-toolbar-group.js.map
@@ -1 +0,0 @@
1
- {"file":"viewer-toolbar-group.js","mappings":";;;;;;AAAA,MAAM,qBAAqB,GAAG,gIAAgI;;MCUjJ,kBAAkB;EAL/B;;;;IAOS,cAAS,GAAgC,YAAY,CAAC;GAc9D;EAZQ,MAAM;IACX,QACE,WACE,KAAK,EAAEA,UAAU,CAAC,OAAO,EAAE;QACzB,UAAU,EAAE,IAAI,CAAC,SAAS,KAAK,YAAY;QAC3C,QAAQ,EAAE,IAAI,CAAC,SAAS,KAAK,UAAU;OACxC,CAAC,IAEF,eAAa,CACT,EACN;GACH;;;;;;;;;;;;;;;;;;;;;","names":["classNames"],"sources":["./src/components/viewer-toolbar-group/viewer-toolbar-group.css?tag=vertex-viewer-toolbar-group&encapsulation=shadow","./src/components/viewer-toolbar-group/viewer-toolbar-group.tsx"],"sourcesContent":[".inner {\n display: flex;\n align-items: center;\n margin: auto;\n}\n\n.inner.vertical {\n flex-direction: column;\n}\n\n.inner.horizontal {\n flex-direction: row;\n}\n","import { Component, h, Prop } from '@stencil/core';\nimport classNames from 'classnames';\n\nimport { ViewerToolbarGroupDirection } from './types';\n\n@Component({\n tag: 'vertex-viewer-toolbar-group',\n styleUrl: 'viewer-toolbar-group.css',\n shadow: true,\n})\nexport class ViewerToolbarGroup {\n @Prop()\n public direction: ViewerToolbarGroupDirection = 'horizontal';\n\n public render(): h.JSX.IntrinsicElements {\n return (\n <div\n class={classNames('inner', {\n horizontal: this.direction === 'horizontal',\n vertical: this.direction === 'vertical',\n })}\n >\n <slot></slot>\n </div>\n );\n }\n}\n"],"version":3}