@vertexvis/viewer 1.0.2-canary.10 → 1.0.2-canary.12
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.
- package/dist/cjs/{multiElementInteractionHandler-Be7mbyiU.js → multiElementInteractionHandler-Dhtyv1I6.js} +9 -8
- package/dist/cjs/multiElementInteractionHandler-Dhtyv1I6.js.map +1 -0
- package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer.cjs.entry.js +1 -1
- package/dist/collection/lib/interactions/baseInteractionHandler.js +7 -6
- package/dist/collection/lib/interactions/baseInteractionHandler.js.map +1 -1
- package/dist/components/{p-CpWxGFt-.js → p-DfL6dfC1.js} +2 -2
- package/dist/components/p-DfL6dfC1.js.map +1 -0
- package/dist/components/{p-Dz3ulfDZ.js → p-DnJlSbRF.js} +2 -2
- package/dist/components/vertex-viewer-dom-renderer.js +1 -1
- package/dist/components/vertex-viewer-pin-tool.js +1 -1
- package/dist/components/vertex-viewer-view-cube.js +1 -1
- package/dist/components/vertex-viewer.js +1 -1
- package/dist/esm/{multiElementInteractionHandler-DIppEL8A.js → multiElementInteractionHandler-medDVStO.js} +9 -8
- package/dist/esm/multiElementInteractionHandler-medDVStO.js.map +1 -0
- package/dist/esm/vertex-viewer-dom-element_2.entry.js +1 -1
- package/dist/esm/vertex-viewer.entry.js +1 -1
- package/dist/viewer/{p-02f1bfe6.entry.js → p-24459727.entry.js} +2 -2
- package/dist/viewer/{p-06869cad.entry.js → p-602c6ef7.entry.js} +2 -2
- package/dist/viewer/{p-okzlR1Cz.js → p-HnHP53Zq.js} +2 -2
- package/dist/viewer/p-HnHP53Zq.js.map +1 -0
- package/dist/viewer/viewer.esm.js +1 -1
- package/package.json +7 -7
- package/dist/cjs/multiElementInteractionHandler-Be7mbyiU.js.map +0 -1
- package/dist/components/p-CpWxGFt-.js.map +0 -1
- package/dist/esm/multiElementInteractionHandler-DIppEL8A.js.map +0 -1
- package/dist/viewer/p-okzlR1Cz.js.map +0 -1
- /package/dist/components/{p-Dz3ulfDZ.js.map → p-DnJlSbRF.js.map} +0 -0
- /package/dist/viewer/{p-02f1bfe6.entry.js.map → p-24459727.entry.js.map} +0 -0
- /package/dist/viewer/{p-06869cad.entry.js.map → p-602c6ef7.entry.js.map} +0 -0
|
@@ -8,7 +8,7 @@ var bundle$1 = require('./bundle-Dc7G9ISu.js');
|
|
|
8
8
|
var dom = require('./dom-TriP9p6z.js');
|
|
9
9
|
|
|
10
10
|
const DEFAULT_FONT_SIZE = 16;
|
|
11
|
-
const
|
|
11
|
+
const DEFAULT_FONT_TO_LINE_HEIGHT_MULTIPLIER = 1.2;
|
|
12
12
|
class BaseInteractionHandler {
|
|
13
13
|
constructor(downEvent, upEvent, moveEvent, rotateInteraction, rotatePointInteraction, zoomInteraction, panInteraction, twistInteraction, pivotInteraction, getConfig) {
|
|
14
14
|
this.downEvent = downEvent;
|
|
@@ -268,11 +268,12 @@ class BaseInteractionHandler {
|
|
|
268
268
|
// is very unlikely to change frequently or while doing wheel movements.
|
|
269
269
|
if (this.bodyStyleCache == null) {
|
|
270
270
|
const bodyStyle = window.getComputedStyle(document.body);
|
|
271
|
+
const fontSize = parseFloat(bodyStyle.getPropertyValue('fontSize')) || DEFAULT_FONT_SIZE;
|
|
272
|
+
const lineHeight = parseFloat(bodyStyle.getPropertyValue('lineHeight'));
|
|
271
273
|
this.bodyStyleCache = {
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
DEFAULT_LINE_HEIGHT,
|
|
274
|
+
lineHeightPixels: Number.isFinite(lineHeight)
|
|
275
|
+
? lineHeight
|
|
276
|
+
: fontSize * DEFAULT_FONT_TO_LINE_HEIGHT_MULTIPLIER,
|
|
276
277
|
height: parseFloat(bodyStyle.getPropertyValue('height')) ||
|
|
277
278
|
window.innerHeight,
|
|
278
279
|
};
|
|
@@ -282,7 +283,7 @@ class BaseInteractionHandler {
|
|
|
282
283
|
}
|
|
283
284
|
if (deltaMode === 1) {
|
|
284
285
|
// deltaMode 1 corresponds to DOM_DELTA_LINE, which computes deltas in lines
|
|
285
|
-
return
|
|
286
|
+
return deltaY * this.bodyStyleCache.lineHeightPixels;
|
|
286
287
|
}
|
|
287
288
|
else if (deltaMode === 2) {
|
|
288
289
|
// deltaMode 2 corresponds to DOM_DELTA_PAGE, which computes deltas in pages
|
|
@@ -331,6 +332,6 @@ class MultiElementInteractionHandler extends BaseInteractionHandler {
|
|
|
331
332
|
|
|
332
333
|
exports.BaseInteractionHandler = BaseInteractionHandler;
|
|
333
334
|
exports.MultiElementInteractionHandler = MultiElementInteractionHandler;
|
|
334
|
-
//# sourceMappingURL=multiElementInteractionHandler-
|
|
335
|
+
//# sourceMappingURL=multiElementInteractionHandler-Dhtyv1I6.js.map
|
|
335
336
|
|
|
336
|
-
//# sourceMappingURL=multiElementInteractionHandler-
|
|
337
|
+
//# sourceMappingURL=multiElementInteractionHandler-Dhtyv1I6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multiElementInteractionHandler-Dhtyv1I6.js","sources":["src/lib/interactions/baseInteractionHandler.ts","src/lib/interactions/multiElementInteractionHandler.ts"],"sourcesContent":["import { Point } from '@vertexvis/geometry';\nimport { Disposable, EventDispatcher, Listener } from '@vertexvis/utils';\n\nimport { ConfigProvider } from '../config';\nimport { getMouseClientPosition } from '../dom';\nimport { InteractionApi } from './interactionApi';\nimport { BaseEvent } from './interactionEvent';\nimport { InteractionHandler } from './interactionHandler';\nimport {\n MouseInteraction,\n PanInteraction,\n PivotInteraction,\n RotateInteraction,\n RotatePointInteraction,\n TwistInteraction,\n ZoomInteraction,\n} from './mouseInteractions';\n\nexport type InteractionType =\n | 'rotate'\n | 'zoom'\n | 'pan'\n | 'twist'\n | 'rotate-point'\n | 'pivot';\n\nconst DEFAULT_FONT_SIZE = 16;\nconst DEFAULT_FONT_TO_LINE_HEIGHT_MULTIPLIER = 1.2;\n\nexport abstract class BaseInteractionHandler implements InteractionHandler {\n protected interactionApi?: InteractionApi;\n protected element?: HTMLElement;\n protected downPosition?: Point.Point;\n private downPositionCanvas?: Point.Point;\n private primaryInteraction: MouseInteraction;\n private currentInteraction?: MouseInteraction;\n private draggingInteraction: MouseInteraction | undefined;\n private lastPrimaryRotateInteraction?: MouseInteraction;\n private isDragging = false;\n private lastMoveEvent?: BaseEvent;\n private interactionTimer?: number;\n private keyboardControls = false;\n\n protected disableIndividualInteractions = false;\n\n private bodyStyleCache?: {\n lineHeightPixels: number;\n height: number;\n };\n\n private primaryInteractionTypeChange = new EventDispatcher<void>();\n\n public constructor(\n protected downEvent: 'mousedown' | 'pointerdown',\n protected upEvent: 'mouseup' | 'pointerup',\n protected moveEvent: 'mousemove' | 'pointermove',\n private rotateInteraction: RotateInteraction,\n private rotatePointInteraction: RotatePointInteraction,\n private zoomInteraction: ZoomInteraction,\n private panInteraction: PanInteraction,\n private twistInteraction: TwistInteraction,\n private pivotInteraction: PivotInteraction,\n private getConfig: ConfigProvider,\n ) {\n this.primaryInteraction = rotateInteraction;\n this.handleDownEvent = this.handleDownEvent.bind(this);\n this.handleMouseWheel = this.handleMouseWheel.bind(this);\n this.handleWindowMove = this.handleWindowMove.bind(this);\n this.handleWindowUp = this.handleWindowUp.bind(this);\n this.handleDoubleClick = this.handleDoubleClick.bind(this);\n }\n\n public initialize(element: HTMLElement, api: InteractionApi): void {\n this.element = element;\n this.interactionApi = api;\n element.addEventListener(this.downEvent, this.handleDownEvent);\n element.addEventListener('mousedown', this.handleDoubleClick);\n element.addEventListener('wheel', this.handleMouseWheel, {\n passive: false,\n });\n }\n\n public dispose(): void {\n this.element?.removeEventListener(this.downEvent, this.handleDownEvent);\n this.element?.removeEventListener('mousedown', this.handleDoubleClick);\n this.element?.removeEventListener('wheel', this.handleMouseWheel);\n this.element = undefined;\n }\n\n public onPrimaryInteractionTypeChange(listener: Listener<void>): Disposable {\n return this.primaryInteractionTypeChange.on(listener);\n }\n\n public setCurrentInteractionType(type?: InteractionType): void {\n switch (type) {\n case 'rotate':\n this.currentInteraction = this.rotateInteraction;\n break;\n case 'zoom':\n this.currentInteraction = this.zoomInteraction;\n break;\n case 'pan':\n this.currentInteraction = this.panInteraction;\n break;\n case 'twist':\n this.currentInteraction = this.twistInteraction;\n break;\n case 'rotate-point':\n this.currentInteraction = this.rotatePointInteraction;\n break;\n case 'pivot':\n this.currentInteraction = this.pivotInteraction;\n break;\n default:\n this.currentInteraction = undefined;\n }\n\n if (this.draggingInteraction) {\n const point = this.draggingInteraction.getPosition();\n this.draggingInteraction =\n this.currentInteraction || this.primaryInteraction;\n this.interactionApi?.resetLastAngle();\n this.draggingInteraction.setPosition(point);\n }\n }\n\n public getPrimaryInteractionType(): InteractionType {\n return this.primaryInteraction.getType();\n }\n\n public getCurrentInteractionType(): InteractionType {\n return (this.currentInteraction || this.primaryInteraction).getType();\n }\n\n public setPrimaryInteractionType(type: InteractionType): void {\n switch (type) {\n case 'rotate':\n this.primaryInteraction = this.rotateInteraction;\n this.lastPrimaryRotateInteraction = this.rotateInteraction;\n break;\n case 'rotate-point':\n this.primaryInteraction = this.rotatePointInteraction;\n this.lastPrimaryRotateInteraction = this.rotatePointInteraction;\n break;\n case 'zoom':\n this.primaryInteraction = this.zoomInteraction;\n break;\n case 'pan':\n this.primaryInteraction = this.panInteraction;\n break;\n case 'pivot':\n this.primaryInteraction = this.pivotInteraction;\n break;\n }\n this.primaryInteractionTypeChange.emit();\n }\n\n public setDefaultKeyboardControls(keyboardControls: boolean): void {\n this.keyboardControls = keyboardControls;\n }\n\n protected handleDownEvent(event: BaseEvent): void {\n // Prevent selection of any text while interacting with the model.\n event.preventDefault();\n\n this.interactionTimer = window.setTimeout(() => {\n this.downPosition = Point.create(event.screenX, event.screenY);\n this.downPositionCanvas = this.getCanvasPosition(event);\n this.interactionTimer = undefined;\n\n // Perform the current movement in the case that the interaction timer elapses\n if (this.lastMoveEvent != null) {\n this.handleWindowMove(this.lastMoveEvent);\n }\n }, this.getConfig().interactions.interactionDelay);\n\n window.addEventListener(this.moveEvent, this.handleWindowMove);\n window.addEventListener(this.upEvent, this.handleWindowUp);\n }\n\n protected handleWindowMove(event: BaseEvent): void {\n if (this.interactionTimer == null) {\n if (this.disableIndividualInteractions) {\n return;\n }\n\n const position = Point.create(event.screenX, event.screenY);\n const pixelThreshold =\n this.interactionApi != null\n ? this.interactionApi.pixelThreshold(this.isTouch(event))\n : 2;\n if (\n this.downPosition != null &&\n Point.distance(position, this.downPosition) >= pixelThreshold &&\n !this.isDragging\n ) {\n this.beginDrag(event);\n this.isDragging = true;\n }\n\n if (this.isDragging) {\n this.drag(event);\n }\n }\n\n this.lastMoveEvent = event;\n }\n\n protected async handleWindowUp(event: BaseEvent): Promise<void> {\n if (this.isDragging) {\n this.endDrag(event);\n this.isDragging = false;\n }\n\n if (this.interactionTimer != null) {\n window.clearTimeout(this.interactionTimer);\n this.interactionTimer = undefined;\n }\n\n window.removeEventListener(this.moveEvent, this.handleWindowMove);\n window.removeEventListener(this.upEvent, this.handleWindowUp);\n this.lastMoveEvent = undefined;\n }\n\n protected async handleDoubleClick(event: BaseEvent): Promise<void> {\n // event.detail is the number of clicks that have happened recently. If the number is 2, then the user double clicked.\n if (\n event.detail === 2 &&\n event.buttons === 4 &&\n this.interactionApi != null\n ) {\n await this.interactionApi.viewAll();\n }\n }\n\n protected beginDrag(event: BaseEvent): void {\n if (this.keyboardControls && event.metaKey && event.shiftKey) {\n this.currentInteraction = this.rotatePointInteraction;\n } else if (this.keyboardControls && event.shiftKey && event.altKey) {\n this.currentInteraction = this.twistInteraction;\n } else if (this.keyboardControls && event.shiftKey) {\n this.currentInteraction = this.zoomInteraction;\n } else if (this.keyboardControls && (event.metaKey || event.ctrlKey)) {\n this.currentInteraction = this.panInteraction;\n } else if (this.keyboardControls && event.altKey) {\n this.currentInteraction = this.rotateInteraction;\n }\n\n if (event.buttons === 1) {\n this.draggingInteraction =\n this.currentInteraction || this.primaryInteraction;\n } else if (event.buttons === 2) {\n this.draggingInteraction = this.panInteraction;\n } else if (event.buttons === 4) {\n this.draggingInteraction =\n this.lastPrimaryRotateInteraction ?? this.rotateInteraction;\n }\n\n if (\n this.draggingInteraction != null &&\n this.interactionApi != null &&\n this.element != null\n ) {\n // Ensure any scroll wheel interactions have been ended prior to beginning\n // another interaction to prevent the interaction from being ended early.\n this.zoomInteraction.endDrag(event, this.interactionApi);\n\n this.draggingInteraction.beginDrag(\n event,\n this.downPositionCanvas || Point.create(event.clientX, event.clientY),\n this.interactionApi,\n this.element,\n );\n }\n }\n\n protected drag(event: BaseEvent): void {\n if (this.keyboardControls && event.altKey && event.shiftKey) {\n this.currentInteraction = this.twistInteraction;\n } else {\n this.currentInteraction = undefined;\n }\n this.draggingInteraction =\n this.currentInteraction ||\n this.draggingInteraction ||\n this.primaryInteraction;\n if (this.draggingInteraction != null && this.interactionApi != null) {\n this.draggingInteraction.drag(event, this.interactionApi);\n }\n }\n\n protected endDrag(event: BaseEvent): void {\n if (\n this.keyboardControls &&\n this.currentInteraction === this.twistInteraction\n ) {\n this.currentInteraction = undefined;\n }\n\n if (this.draggingInteraction != null && this.interactionApi != null) {\n this.draggingInteraction.endDrag(event, this.interactionApi);\n this.draggingInteraction = undefined;\n }\n }\n\n protected handleMouseWheel(event: WheelEvent): void {\n event.preventDefault();\n\n if (\n this.element != null &&\n this.interactionApi != null &&\n event.buttons !== 4\n ) {\n const delta =\n -this.wheelDeltaToPixels(event.deltaY, event.deltaMode) / 10;\n const rect = this.element.getBoundingClientRect();\n const point = getMouseClientPosition(event, rect);\n const scrollSize = Math.abs(event.deltaY);\n\n if (scrollSize < 12) {\n // For small wheel movements, send a single zoom event.\n void this.zoomInteraction.zoomToPoint(\n point,\n delta,\n this.interactionApi,\n );\n } else {\n const divisions = Math.min(10, Math.ceil(scrollSize / 12));\n const zoomDelta = delta / divisions;\n // For larger wheel movements, divide the delta into multiple zoom events with increasing delay\n // which approximates a smooth zoom deceleration curve for the end user.\n for (let i = 1; i <= divisions; i++) {\n const delayMs = i * 5;\n window.setTimeout(() => {\n if (this.interactionApi != null) {\n this.zoomInteraction.zoomToPoint(\n point,\n zoomDelta,\n this.interactionApi,\n delayMs,\n );\n }\n }, delayMs);\n }\n }\n }\n }\n\n protected wheelDeltaToPixels(deltaY: number, deltaMode: number): number {\n // Cached values are an optimization we can use given mouseWheel\n // events can happen dozen or hundreds of times per scroll, but body style\n // is very unlikely to change frequently or while doing wheel movements.\n if (this.bodyStyleCache == null) {\n const bodyStyle = window.getComputedStyle(document.body);\n const fontSize =\n parseFloat(bodyStyle.getPropertyValue('fontSize')) || DEFAULT_FONT_SIZE;\n const lineHeight = parseFloat(bodyStyle.getPropertyValue('lineHeight'));\n this.bodyStyleCache = {\n lineHeightPixels: Number.isFinite(lineHeight)\n ? lineHeight\n : fontSize * DEFAULT_FONT_TO_LINE_HEIGHT_MULTIPLIER,\n height:\n parseFloat(bodyStyle.getPropertyValue('height')) ||\n window.innerHeight,\n };\n window.setTimeout(() => {\n this.bodyStyleCache = undefined;\n }, 4800); // For now hardcoded. Could be derived. eg mouseWheelInteractionEndDebounce * 12\n }\n\n if (deltaMode === 1) {\n // deltaMode 1 corresponds to DOM_DELTA_LINE, which computes deltas in lines\n return deltaY * this.bodyStyleCache.lineHeightPixels;\n } else if (deltaMode === 2) {\n // deltaMode 2 corresponds to DOM_DELTA_PAGE, which computes deltas in pages\n return deltaY * this.bodyStyleCache.height;\n }\n // deltaMode 0 corresponds to DOM_DELTA_PIXEL, which computes deltas in pixels\n return deltaY;\n }\n\n protected getCanvasPosition(event: BaseEvent): Point.Point | undefined {\n const canvasBounds = this.element?.getBoundingClientRect();\n const canvasOffset =\n canvasBounds != null\n ? Point.create(canvasBounds.left, canvasBounds.top)\n : undefined;\n\n return canvasOffset != null\n ? Point.subtract(Point.create(event.clientX, event.clientY), canvasOffset)\n : undefined;\n }\n\n protected isTouch(event: BaseEvent): boolean {\n return window.PointerEvent != null && event instanceof PointerEvent\n ? event.pointerType === 'touch'\n : false;\n }\n}\n","import { Disposable, UUID } from '@vertexvis/utils';\n\nimport { BaseInteractionHandler } from './baseInteractionHandler';\n\nexport abstract class MultiElementInteractionHandler extends BaseInteractionHandler {\n protected registeredExternalElements: Record<UUID.UUID, Disposable> = {};\n\n public registerAdditionalElement(external: HTMLElement): Disposable {\n const id = UUID.create();\n const disposable = this.addEventListenersToElement(external);\n\n this.registeredExternalElements[id] = disposable;\n return disposable;\n }\n\n public deregisterAdditionalElementById(id: UUID.UUID): void {\n const externalElement = this.registeredExternalElements[id];\n\n externalElement.dispose();\n\n this.registeredExternalElements = Object.fromEntries(\n Object.entries(this.registeredExternalElements).filter(\n ([key]) => key !== id,\n ),\n );\n }\n\n protected deregisterAllListeners(): void {\n Object.keys(this.registeredExternalElements).forEach((id) =>\n this.deregisterAdditionalElementById(id),\n );\n }\n\n public abstract addEventListenersToElement(element?: HTMLElement): Disposable;\n}\n"],"names":["EventDispatcher","Point","getMouseClientPosition","UUID"],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
var index = require('./index-1H7bCrlx.js');
|
|
7
7
|
var bundle = require('./bundle-Dc7G9ISu.js');
|
|
8
8
|
var bundle$1 = require('./bundle-DBQZLb3f.js');
|
|
9
|
-
var multiElementInteractionHandler = require('./multiElementInteractionHandler-
|
|
9
|
+
var multiElementInteractionHandler = require('./multiElementInteractionHandler-Dhtyv1I6.js');
|
|
10
10
|
require('./streamAttributes-Cqxt1bdc.js');
|
|
11
11
|
require('./entities-BhIrCJqA.js');
|
|
12
12
|
var viewport = require('./viewport-BR1Q8GTF.js');
|
|
@@ -20,7 +20,7 @@ var cursors = require('./cursors-BpYoQINR.js');
|
|
|
20
20
|
var dom = require('./dom-TriP9p6z.js');
|
|
21
21
|
var entities = require('./entities-BhIrCJqA.js');
|
|
22
22
|
var viewport = require('./viewport-BR1Q8GTF.js');
|
|
23
|
-
var multiElementInteractionHandler = require('./multiElementInteractionHandler-
|
|
23
|
+
var multiElementInteractionHandler = require('./multiElementInteractionHandler-Dhtyv1I6.js');
|
|
24
24
|
var stencil = require('./stencil-Hsr_8Chs.js');
|
|
25
25
|
require('./wrappers_pb-DCb8h8QZ.js');
|
|
26
26
|
require('./_commonjsHelpers-CBbBosIU.js');
|
|
@@ -5,7 +5,7 @@ import { Point } from "@vertexvis/geometry";
|
|
|
5
5
|
import { EventDispatcher } from "@vertexvis/utils";
|
|
6
6
|
import { getMouseClientPosition } from "../dom";
|
|
7
7
|
const DEFAULT_FONT_SIZE = 16;
|
|
8
|
-
const
|
|
8
|
+
const DEFAULT_FONT_TO_LINE_HEIGHT_MULTIPLIER = 1.2;
|
|
9
9
|
export class BaseInteractionHandler {
|
|
10
10
|
constructor(downEvent, upEvent, moveEvent, rotateInteraction, rotatePointInteraction, zoomInteraction, panInteraction, twistInteraction, pivotInteraction, getConfig) {
|
|
11
11
|
this.downEvent = downEvent;
|
|
@@ -265,11 +265,12 @@ export class BaseInteractionHandler {
|
|
|
265
265
|
// is very unlikely to change frequently or while doing wheel movements.
|
|
266
266
|
if (this.bodyStyleCache == null) {
|
|
267
267
|
const bodyStyle = window.getComputedStyle(document.body);
|
|
268
|
+
const fontSize = parseFloat(bodyStyle.getPropertyValue('fontSize')) || DEFAULT_FONT_SIZE;
|
|
269
|
+
const lineHeight = parseFloat(bodyStyle.getPropertyValue('lineHeight'));
|
|
268
270
|
this.bodyStyleCache = {
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
DEFAULT_LINE_HEIGHT,
|
|
271
|
+
lineHeightPixels: Number.isFinite(lineHeight)
|
|
272
|
+
? lineHeight
|
|
273
|
+
: fontSize * DEFAULT_FONT_TO_LINE_HEIGHT_MULTIPLIER,
|
|
273
274
|
height: parseFloat(bodyStyle.getPropertyValue('height')) ||
|
|
274
275
|
window.innerHeight,
|
|
275
276
|
};
|
|
@@ -279,7 +280,7 @@ export class BaseInteractionHandler {
|
|
|
279
280
|
}
|
|
280
281
|
if (deltaMode === 1) {
|
|
281
282
|
// deltaMode 1 corresponds to DOM_DELTA_LINE, which computes deltas in lines
|
|
282
|
-
return
|
|
283
|
+
return deltaY * this.bodyStyleCache.lineHeightPixels;
|
|
283
284
|
}
|
|
284
285
|
else if (deltaMode === 2) {
|
|
285
286
|
// deltaMode 2 corresponds to DOM_DELTA_PAGE, which computes deltas in pages
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseInteractionHandler.js","sourceRoot":"","sources":["../../../../../src/lib/interactions/baseInteractionHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import { Point } from '@vertexvis/geometry';\nimport { Disposable, EventDispatcher, Listener } from '@vertexvis/utils';\n\nimport { ConfigProvider } from '../config';\nimport { getMouseClientPosition } from '../dom';\nimport { InteractionApi } from './interactionApi';\nimport { BaseEvent } from './interactionEvent';\nimport { InteractionHandler } from './interactionHandler';\nimport {\n MouseInteraction,\n PanInteraction,\n PivotInteraction,\n RotateInteraction,\n RotatePointInteraction,\n TwistInteraction,\n ZoomInteraction,\n} from './mouseInteractions';\n\nexport type InteractionType =\n | 'rotate'\n | 'zoom'\n | 'pan'\n | 'twist'\n | 'rotate-point'\n | 'pivot';\n\nconst DEFAULT_FONT_SIZE = 16;\nconst DEFAULT_LINE_HEIGHT = 1.2;\n\nexport abstract class BaseInteractionHandler implements InteractionHandler {\n protected interactionApi?: InteractionApi;\n protected element?: HTMLElement;\n protected downPosition?: Point.Point;\n private downPositionCanvas?: Point.Point;\n private primaryInteraction: MouseInteraction;\n private currentInteraction?: MouseInteraction;\n private draggingInteraction: MouseInteraction | undefined;\n private lastPrimaryRotateInteraction?: MouseInteraction;\n private isDragging = false;\n private lastMoveEvent?: BaseEvent;\n private interactionTimer?: number;\n private keyboardControls = false;\n\n protected disableIndividualInteractions = false;\n\n private bodyStyleCache?: {\n fontSize: number;\n lineHeight: number;\n height: number;\n };\n\n private primaryInteractionTypeChange = new EventDispatcher<void>();\n\n public constructor(\n protected downEvent: 'mousedown' | 'pointerdown',\n protected upEvent: 'mouseup' | 'pointerup',\n protected moveEvent: 'mousemove' | 'pointermove',\n private rotateInteraction: RotateInteraction,\n private rotatePointInteraction: RotatePointInteraction,\n private zoomInteraction: ZoomInteraction,\n private panInteraction: PanInteraction,\n private twistInteraction: TwistInteraction,\n private pivotInteraction: PivotInteraction,\n private getConfig: ConfigProvider,\n ) {\n this.primaryInteraction = rotateInteraction;\n this.handleDownEvent = this.handleDownEvent.bind(this);\n this.handleMouseWheel = this.handleMouseWheel.bind(this);\n this.handleWindowMove = this.handleWindowMove.bind(this);\n this.handleWindowUp = this.handleWindowUp.bind(this);\n this.handleDoubleClick = this.handleDoubleClick.bind(this);\n }\n\n public initialize(element: HTMLElement, api: InteractionApi): void {\n this.element = element;\n this.interactionApi = api;\n element.addEventListener(this.downEvent, this.handleDownEvent);\n element.addEventListener('mousedown', this.handleDoubleClick);\n element.addEventListener('wheel', this.handleMouseWheel, {\n passive: false,\n });\n }\n\n public dispose(): void {\n this.element?.removeEventListener(this.downEvent, this.handleDownEvent);\n this.element?.removeEventListener('mousedown', this.handleDoubleClick);\n this.element?.removeEventListener('wheel', this.handleMouseWheel);\n this.element = undefined;\n }\n\n public onPrimaryInteractionTypeChange(listener: Listener<void>): Disposable {\n return this.primaryInteractionTypeChange.on(listener);\n }\n\n public setCurrentInteractionType(type?: InteractionType): void {\n switch (type) {\n case 'rotate':\n this.currentInteraction = this.rotateInteraction;\n break;\n case 'zoom':\n this.currentInteraction = this.zoomInteraction;\n break;\n case 'pan':\n this.currentInteraction = this.panInteraction;\n break;\n case 'twist':\n this.currentInteraction = this.twistInteraction;\n break;\n case 'rotate-point':\n this.currentInteraction = this.rotatePointInteraction;\n break;\n case 'pivot':\n this.currentInteraction = this.pivotInteraction;\n break;\n default:\n this.currentInteraction = undefined;\n }\n\n if (this.draggingInteraction) {\n const point = this.draggingInteraction.getPosition();\n this.draggingInteraction =\n this.currentInteraction || this.primaryInteraction;\n this.interactionApi?.resetLastAngle();\n this.draggingInteraction.setPosition(point);\n }\n }\n\n public getPrimaryInteractionType(): InteractionType {\n return this.primaryInteraction.getType();\n }\n\n public getCurrentInteractionType(): InteractionType {\n return (this.currentInteraction || this.primaryInteraction).getType();\n }\n\n public setPrimaryInteractionType(type: InteractionType): void {\n switch (type) {\n case 'rotate':\n this.primaryInteraction = this.rotateInteraction;\n this.lastPrimaryRotateInteraction = this.rotateInteraction;\n break;\n case 'rotate-point':\n this.primaryInteraction = this.rotatePointInteraction;\n this.lastPrimaryRotateInteraction = this.rotatePointInteraction;\n break;\n case 'zoom':\n this.primaryInteraction = this.zoomInteraction;\n break;\n case 'pan':\n this.primaryInteraction = this.panInteraction;\n break;\n case 'pivot':\n this.primaryInteraction = this.pivotInteraction;\n break;\n }\n this.primaryInteractionTypeChange.emit();\n }\n\n public setDefaultKeyboardControls(keyboardControls: boolean): void {\n this.keyboardControls = keyboardControls;\n }\n\n protected handleDownEvent(event: BaseEvent): void {\n // Prevent selection of any text while interacting with the model.\n event.preventDefault();\n\n this.interactionTimer = window.setTimeout(() => {\n this.downPosition = Point.create(event.screenX, event.screenY);\n this.downPositionCanvas = this.getCanvasPosition(event);\n this.interactionTimer = undefined;\n\n // Perform the current movement in the case that the interaction timer elapses\n if (this.lastMoveEvent != null) {\n this.handleWindowMove(this.lastMoveEvent);\n }\n }, this.getConfig().interactions.interactionDelay);\n\n window.addEventListener(this.moveEvent, this.handleWindowMove);\n window.addEventListener(this.upEvent, this.handleWindowUp);\n }\n\n protected handleWindowMove(event: BaseEvent): void {\n if (this.interactionTimer == null) {\n if (this.disableIndividualInteractions) {\n return;\n }\n\n const position = Point.create(event.screenX, event.screenY);\n const pixelThreshold =\n this.interactionApi != null\n ? this.interactionApi.pixelThreshold(this.isTouch(event))\n : 2;\n if (\n this.downPosition != null &&\n Point.distance(position, this.downPosition) >= pixelThreshold &&\n !this.isDragging\n ) {\n this.beginDrag(event);\n this.isDragging = true;\n }\n\n if (this.isDragging) {\n this.drag(event);\n }\n }\n\n this.lastMoveEvent = event;\n }\n\n protected async handleWindowUp(event: BaseEvent): Promise<void> {\n if (this.isDragging) {\n this.endDrag(event);\n this.isDragging = false;\n }\n\n if (this.interactionTimer != null) {\n window.clearTimeout(this.interactionTimer);\n this.interactionTimer = undefined;\n }\n\n window.removeEventListener(this.moveEvent, this.handleWindowMove);\n window.removeEventListener(this.upEvent, this.handleWindowUp);\n this.lastMoveEvent = undefined;\n }\n\n protected async handleDoubleClick(event: BaseEvent): Promise<void> {\n // event.detail is the number of clicks that have happened recently. If the number is 2, then the user double clicked.\n if (\n event.detail === 2 &&\n event.buttons === 4 &&\n this.interactionApi != null\n ) {\n await this.interactionApi.viewAll();\n }\n }\n\n protected beginDrag(event: BaseEvent): void {\n if (this.keyboardControls && event.metaKey && event.shiftKey) {\n this.currentInteraction = this.rotatePointInteraction;\n } else if (this.keyboardControls && event.shiftKey && event.altKey) {\n this.currentInteraction = this.twistInteraction;\n } else if (this.keyboardControls && event.shiftKey) {\n this.currentInteraction = this.zoomInteraction;\n } else if (this.keyboardControls && (event.metaKey || event.ctrlKey)) {\n this.currentInteraction = this.panInteraction;\n } else if (this.keyboardControls && event.altKey) {\n this.currentInteraction = this.rotateInteraction;\n }\n\n if (event.buttons === 1) {\n this.draggingInteraction =\n this.currentInteraction || this.primaryInteraction;\n } else if (event.buttons === 2) {\n this.draggingInteraction = this.panInteraction;\n } else if (event.buttons === 4) {\n this.draggingInteraction =\n this.lastPrimaryRotateInteraction ?? this.rotateInteraction;\n }\n\n if (\n this.draggingInteraction != null &&\n this.interactionApi != null &&\n this.element != null\n ) {\n // Ensure any scroll wheel interactions have been ended prior to beginning\n // another interaction to prevent the interaction from being ended early.\n this.zoomInteraction.endDrag(event, this.interactionApi);\n\n this.draggingInteraction.beginDrag(\n event,\n this.downPositionCanvas || Point.create(event.clientX, event.clientY),\n this.interactionApi,\n this.element,\n );\n }\n }\n\n protected drag(event: BaseEvent): void {\n if (this.keyboardControls && event.altKey && event.shiftKey) {\n this.currentInteraction = this.twistInteraction;\n } else {\n this.currentInteraction = undefined;\n }\n this.draggingInteraction =\n this.currentInteraction ||\n this.draggingInteraction ||\n this.primaryInteraction;\n if (this.draggingInteraction != null && this.interactionApi != null) {\n this.draggingInteraction.drag(event, this.interactionApi);\n }\n }\n\n protected endDrag(event: BaseEvent): void {\n if (\n this.keyboardControls &&\n this.currentInteraction === this.twistInteraction\n ) {\n this.currentInteraction = undefined;\n }\n\n if (this.draggingInteraction != null && this.interactionApi != null) {\n this.draggingInteraction.endDrag(event, this.interactionApi);\n this.draggingInteraction = undefined;\n }\n }\n\n protected handleMouseWheel(event: WheelEvent): void {\n event.preventDefault();\n\n if (\n this.element != null &&\n this.interactionApi != null &&\n event.buttons !== 4\n ) {\n const delta =\n -this.wheelDeltaToPixels(event.deltaY, event.deltaMode) / 10;\n const rect = this.element.getBoundingClientRect();\n const point = getMouseClientPosition(event, rect);\n const scrollSize = Math.abs(event.deltaY);\n\n if (scrollSize < 12) {\n // For small wheel movements, send a single zoom event.\n void this.zoomInteraction.zoomToPoint(\n point,\n delta,\n this.interactionApi,\n );\n } else {\n const divisions = Math.min(10, Math.ceil(scrollSize / 12));\n const zoomDelta = delta / divisions;\n // For larger wheel movements, divide the delta into multiple zoom events with increasing delay\n // which approximates a smooth zoom deceleration curve for the end user.\n for (let i = 1; i <= divisions; i++) {\n const delayMs = i * 5;\n window.setTimeout(() => {\n if (this.interactionApi != null) {\n this.zoomInteraction.zoomToPoint(\n point,\n zoomDelta,\n this.interactionApi,\n delayMs,\n );\n }\n }, delayMs);\n }\n }\n }\n }\n\n protected wheelDeltaToPixels(deltaY: number, deltaMode: number): number {\n // Cached values are an optimization we can use given mouseWheel\n // events can happen dozen or hundreds of times per scroll, but body style\n // is very unlikely to change frequently or while doing wheel movements.\n if (this.bodyStyleCache == null) {\n const bodyStyle = window.getComputedStyle(document.body);\n this.bodyStyleCache = {\n fontSize:\n parseFloat(bodyStyle.getPropertyValue('fontSize')) ||\n DEFAULT_FONT_SIZE,\n lineHeight:\n parseFloat(bodyStyle.getPropertyValue('lineHeight')) ||\n DEFAULT_LINE_HEIGHT,\n height:\n parseFloat(bodyStyle.getPropertyValue('height')) ||\n window.innerHeight,\n };\n window.setTimeout(() => {\n this.bodyStyleCache = undefined;\n }, 4800); // For now hardcoded. Could be derived. eg mouseWheelInteractionEndDebounce * 12\n }\n\n if (deltaMode === 1) {\n // deltaMode 1 corresponds to DOM_DELTA_LINE, which computes deltas in lines\n return (\n deltaY * (this.bodyStyleCache.fontSize * this.bodyStyleCache.lineHeight)\n );\n } else if (deltaMode === 2) {\n // deltaMode 2 corresponds to DOM_DELTA_PAGE, which computes deltas in pages\n return deltaY * this.bodyStyleCache.height;\n }\n // deltaMode 0 corresponds to DOM_DELTA_PIXEL, which computes deltas in pixels\n return deltaY;\n }\n\n protected getCanvasPosition(event: BaseEvent): Point.Point | undefined {\n const canvasBounds = this.element?.getBoundingClientRect();\n const canvasOffset =\n canvasBounds != null\n ? Point.create(canvasBounds.left, canvasBounds.top)\n : undefined;\n\n return canvasOffset != null\n ? Point.subtract(Point.create(event.clientX, event.clientY), canvasOffset)\n : undefined;\n }\n\n protected isTouch(event: BaseEvent): boolean {\n return window.PointerEvent != null && event instanceof PointerEvent\n ? event.pointerType === 'touch'\n : false;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"baseInteractionHandler.js","sourceRoot":"","sources":["../../../../../src/lib/interactions/baseInteractionHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import { Point } from '@vertexvis/geometry';\nimport { Disposable, EventDispatcher, Listener } from '@vertexvis/utils';\n\nimport { ConfigProvider } from '../config';\nimport { getMouseClientPosition } from '../dom';\nimport { InteractionApi } from './interactionApi';\nimport { BaseEvent } from './interactionEvent';\nimport { InteractionHandler } from './interactionHandler';\nimport {\n MouseInteraction,\n PanInteraction,\n PivotInteraction,\n RotateInteraction,\n RotatePointInteraction,\n TwistInteraction,\n ZoomInteraction,\n} from './mouseInteractions';\n\nexport type InteractionType =\n | 'rotate'\n | 'zoom'\n | 'pan'\n | 'twist'\n | 'rotate-point'\n | 'pivot';\n\nconst DEFAULT_FONT_SIZE = 16;\nconst DEFAULT_FONT_TO_LINE_HEIGHT_MULTIPLIER = 1.2;\n\nexport abstract class BaseInteractionHandler implements InteractionHandler {\n protected interactionApi?: InteractionApi;\n protected element?: HTMLElement;\n protected downPosition?: Point.Point;\n private downPositionCanvas?: Point.Point;\n private primaryInteraction: MouseInteraction;\n private currentInteraction?: MouseInteraction;\n private draggingInteraction: MouseInteraction | undefined;\n private lastPrimaryRotateInteraction?: MouseInteraction;\n private isDragging = false;\n private lastMoveEvent?: BaseEvent;\n private interactionTimer?: number;\n private keyboardControls = false;\n\n protected disableIndividualInteractions = false;\n\n private bodyStyleCache?: {\n lineHeightPixels: number;\n height: number;\n };\n\n private primaryInteractionTypeChange = new EventDispatcher<void>();\n\n public constructor(\n protected downEvent: 'mousedown' | 'pointerdown',\n protected upEvent: 'mouseup' | 'pointerup',\n protected moveEvent: 'mousemove' | 'pointermove',\n private rotateInteraction: RotateInteraction,\n private rotatePointInteraction: RotatePointInteraction,\n private zoomInteraction: ZoomInteraction,\n private panInteraction: PanInteraction,\n private twistInteraction: TwistInteraction,\n private pivotInteraction: PivotInteraction,\n private getConfig: ConfigProvider,\n ) {\n this.primaryInteraction = rotateInteraction;\n this.handleDownEvent = this.handleDownEvent.bind(this);\n this.handleMouseWheel = this.handleMouseWheel.bind(this);\n this.handleWindowMove = this.handleWindowMove.bind(this);\n this.handleWindowUp = this.handleWindowUp.bind(this);\n this.handleDoubleClick = this.handleDoubleClick.bind(this);\n }\n\n public initialize(element: HTMLElement, api: InteractionApi): void {\n this.element = element;\n this.interactionApi = api;\n element.addEventListener(this.downEvent, this.handleDownEvent);\n element.addEventListener('mousedown', this.handleDoubleClick);\n element.addEventListener('wheel', this.handleMouseWheel, {\n passive: false,\n });\n }\n\n public dispose(): void {\n this.element?.removeEventListener(this.downEvent, this.handleDownEvent);\n this.element?.removeEventListener('mousedown', this.handleDoubleClick);\n this.element?.removeEventListener('wheel', this.handleMouseWheel);\n this.element = undefined;\n }\n\n public onPrimaryInteractionTypeChange(listener: Listener<void>): Disposable {\n return this.primaryInteractionTypeChange.on(listener);\n }\n\n public setCurrentInteractionType(type?: InteractionType): void {\n switch (type) {\n case 'rotate':\n this.currentInteraction = this.rotateInteraction;\n break;\n case 'zoom':\n this.currentInteraction = this.zoomInteraction;\n break;\n case 'pan':\n this.currentInteraction = this.panInteraction;\n break;\n case 'twist':\n this.currentInteraction = this.twistInteraction;\n break;\n case 'rotate-point':\n this.currentInteraction = this.rotatePointInteraction;\n break;\n case 'pivot':\n this.currentInteraction = this.pivotInteraction;\n break;\n default:\n this.currentInteraction = undefined;\n }\n\n if (this.draggingInteraction) {\n const point = this.draggingInteraction.getPosition();\n this.draggingInteraction =\n this.currentInteraction || this.primaryInteraction;\n this.interactionApi?.resetLastAngle();\n this.draggingInteraction.setPosition(point);\n }\n }\n\n public getPrimaryInteractionType(): InteractionType {\n return this.primaryInteraction.getType();\n }\n\n public getCurrentInteractionType(): InteractionType {\n return (this.currentInteraction || this.primaryInteraction).getType();\n }\n\n public setPrimaryInteractionType(type: InteractionType): void {\n switch (type) {\n case 'rotate':\n this.primaryInteraction = this.rotateInteraction;\n this.lastPrimaryRotateInteraction = this.rotateInteraction;\n break;\n case 'rotate-point':\n this.primaryInteraction = this.rotatePointInteraction;\n this.lastPrimaryRotateInteraction = this.rotatePointInteraction;\n break;\n case 'zoom':\n this.primaryInteraction = this.zoomInteraction;\n break;\n case 'pan':\n this.primaryInteraction = this.panInteraction;\n break;\n case 'pivot':\n this.primaryInteraction = this.pivotInteraction;\n break;\n }\n this.primaryInteractionTypeChange.emit();\n }\n\n public setDefaultKeyboardControls(keyboardControls: boolean): void {\n this.keyboardControls = keyboardControls;\n }\n\n protected handleDownEvent(event: BaseEvent): void {\n // Prevent selection of any text while interacting with the model.\n event.preventDefault();\n\n this.interactionTimer = window.setTimeout(() => {\n this.downPosition = Point.create(event.screenX, event.screenY);\n this.downPositionCanvas = this.getCanvasPosition(event);\n this.interactionTimer = undefined;\n\n // Perform the current movement in the case that the interaction timer elapses\n if (this.lastMoveEvent != null) {\n this.handleWindowMove(this.lastMoveEvent);\n }\n }, this.getConfig().interactions.interactionDelay);\n\n window.addEventListener(this.moveEvent, this.handleWindowMove);\n window.addEventListener(this.upEvent, this.handleWindowUp);\n }\n\n protected handleWindowMove(event: BaseEvent): void {\n if (this.interactionTimer == null) {\n if (this.disableIndividualInteractions) {\n return;\n }\n\n const position = Point.create(event.screenX, event.screenY);\n const pixelThreshold =\n this.interactionApi != null\n ? this.interactionApi.pixelThreshold(this.isTouch(event))\n : 2;\n if (\n this.downPosition != null &&\n Point.distance(position, this.downPosition) >= pixelThreshold &&\n !this.isDragging\n ) {\n this.beginDrag(event);\n this.isDragging = true;\n }\n\n if (this.isDragging) {\n this.drag(event);\n }\n }\n\n this.lastMoveEvent = event;\n }\n\n protected async handleWindowUp(event: BaseEvent): Promise<void> {\n if (this.isDragging) {\n this.endDrag(event);\n this.isDragging = false;\n }\n\n if (this.interactionTimer != null) {\n window.clearTimeout(this.interactionTimer);\n this.interactionTimer = undefined;\n }\n\n window.removeEventListener(this.moveEvent, this.handleWindowMove);\n window.removeEventListener(this.upEvent, this.handleWindowUp);\n this.lastMoveEvent = undefined;\n }\n\n protected async handleDoubleClick(event: BaseEvent): Promise<void> {\n // event.detail is the number of clicks that have happened recently. If the number is 2, then the user double clicked.\n if (\n event.detail === 2 &&\n event.buttons === 4 &&\n this.interactionApi != null\n ) {\n await this.interactionApi.viewAll();\n }\n }\n\n protected beginDrag(event: BaseEvent): void {\n if (this.keyboardControls && event.metaKey && event.shiftKey) {\n this.currentInteraction = this.rotatePointInteraction;\n } else if (this.keyboardControls && event.shiftKey && event.altKey) {\n this.currentInteraction = this.twistInteraction;\n } else if (this.keyboardControls && event.shiftKey) {\n this.currentInteraction = this.zoomInteraction;\n } else if (this.keyboardControls && (event.metaKey || event.ctrlKey)) {\n this.currentInteraction = this.panInteraction;\n } else if (this.keyboardControls && event.altKey) {\n this.currentInteraction = this.rotateInteraction;\n }\n\n if (event.buttons === 1) {\n this.draggingInteraction =\n this.currentInteraction || this.primaryInteraction;\n } else if (event.buttons === 2) {\n this.draggingInteraction = this.panInteraction;\n } else if (event.buttons === 4) {\n this.draggingInteraction =\n this.lastPrimaryRotateInteraction ?? this.rotateInteraction;\n }\n\n if (\n this.draggingInteraction != null &&\n this.interactionApi != null &&\n this.element != null\n ) {\n // Ensure any scroll wheel interactions have been ended prior to beginning\n // another interaction to prevent the interaction from being ended early.\n this.zoomInteraction.endDrag(event, this.interactionApi);\n\n this.draggingInteraction.beginDrag(\n event,\n this.downPositionCanvas || Point.create(event.clientX, event.clientY),\n this.interactionApi,\n this.element,\n );\n }\n }\n\n protected drag(event: BaseEvent): void {\n if (this.keyboardControls && event.altKey && event.shiftKey) {\n this.currentInteraction = this.twistInteraction;\n } else {\n this.currentInteraction = undefined;\n }\n this.draggingInteraction =\n this.currentInteraction ||\n this.draggingInteraction ||\n this.primaryInteraction;\n if (this.draggingInteraction != null && this.interactionApi != null) {\n this.draggingInteraction.drag(event, this.interactionApi);\n }\n }\n\n protected endDrag(event: BaseEvent): void {\n if (\n this.keyboardControls &&\n this.currentInteraction === this.twistInteraction\n ) {\n this.currentInteraction = undefined;\n }\n\n if (this.draggingInteraction != null && this.interactionApi != null) {\n this.draggingInteraction.endDrag(event, this.interactionApi);\n this.draggingInteraction = undefined;\n }\n }\n\n protected handleMouseWheel(event: WheelEvent): void {\n event.preventDefault();\n\n if (\n this.element != null &&\n this.interactionApi != null &&\n event.buttons !== 4\n ) {\n const delta =\n -this.wheelDeltaToPixels(event.deltaY, event.deltaMode) / 10;\n const rect = this.element.getBoundingClientRect();\n const point = getMouseClientPosition(event, rect);\n const scrollSize = Math.abs(event.deltaY);\n\n if (scrollSize < 12) {\n // For small wheel movements, send a single zoom event.\n void this.zoomInteraction.zoomToPoint(\n point,\n delta,\n this.interactionApi,\n );\n } else {\n const divisions = Math.min(10, Math.ceil(scrollSize / 12));\n const zoomDelta = delta / divisions;\n // For larger wheel movements, divide the delta into multiple zoom events with increasing delay\n // which approximates a smooth zoom deceleration curve for the end user.\n for (let i = 1; i <= divisions; i++) {\n const delayMs = i * 5;\n window.setTimeout(() => {\n if (this.interactionApi != null) {\n this.zoomInteraction.zoomToPoint(\n point,\n zoomDelta,\n this.interactionApi,\n delayMs,\n );\n }\n }, delayMs);\n }\n }\n }\n }\n\n protected wheelDeltaToPixels(deltaY: number, deltaMode: number): number {\n // Cached values are an optimization we can use given mouseWheel\n // events can happen dozen or hundreds of times per scroll, but body style\n // is very unlikely to change frequently or while doing wheel movements.\n if (this.bodyStyleCache == null) {\n const bodyStyle = window.getComputedStyle(document.body);\n const fontSize =\n parseFloat(bodyStyle.getPropertyValue('fontSize')) || DEFAULT_FONT_SIZE;\n const lineHeight = parseFloat(bodyStyle.getPropertyValue('lineHeight'));\n this.bodyStyleCache = {\n lineHeightPixels: Number.isFinite(lineHeight)\n ? lineHeight\n : fontSize * DEFAULT_FONT_TO_LINE_HEIGHT_MULTIPLIER,\n height:\n parseFloat(bodyStyle.getPropertyValue('height')) ||\n window.innerHeight,\n };\n window.setTimeout(() => {\n this.bodyStyleCache = undefined;\n }, 4800); // For now hardcoded. Could be derived. eg mouseWheelInteractionEndDebounce * 12\n }\n\n if (deltaMode === 1) {\n // deltaMode 1 corresponds to DOM_DELTA_LINE, which computes deltas in lines\n return deltaY * this.bodyStyleCache.lineHeightPixels;\n } else if (deltaMode === 2) {\n // deltaMode 2 corresponds to DOM_DELTA_PAGE, which computes deltas in pages\n return deltaY * this.bodyStyleCache.height;\n }\n // deltaMode 0 corresponds to DOM_DELTA_PIXEL, which computes deltas in pixels\n return deltaY;\n }\n\n protected getCanvasPosition(event: BaseEvent): Point.Point | undefined {\n const canvasBounds = this.element?.getBoundingClientRect();\n const canvasOffset =\n canvasBounds != null\n ? Point.create(canvasBounds.left, canvasBounds.top)\n : undefined;\n\n return canvasOffset != null\n ? Point.subtract(Point.create(event.clientX, event.clientY), canvasOffset)\n : undefined;\n }\n\n protected isTouch(event: BaseEvent): boolean {\n return window.PointerEvent != null && event instanceof PointerEvent\n ? event.pointerType === 'touch'\n : false;\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{E as i,b as t}from"./p-CHdoymO5.js";import{p as s}from"./p-VBSTxIAq.js";import{g as h}from"./p-BVGibtJW.js";const e=16;const n=1.2;class o{constructor(t,s,h,e,n,o,l,a,r,d){this.downEvent=t;this.upEvent=s;this.moveEvent=h;this.rotateInteraction=e;this.rotatePointInteraction=n;this.zoomInteraction=o;this.panInteraction=l;this.twistInteraction=a;this.pivotInteraction=r;this.getConfig=d;this.isDragging=false;this.keyboardControls=false;this.disableIndividualInteractions=false;this.primaryInteractionTypeChange=new i;this.primaryInteraction=e;this.handleDownEvent=this.handleDownEvent.bind(this);this.handleMouseWheel=this.handleMouseWheel.bind(this);this.handleWindowMove=this.handleWindowMove.bind(this);this.handleWindowUp=this.handleWindowUp.bind(this);this.handleDoubleClick=this.handleDoubleClick.bind(this)}initialize(i,t){this.element=i;this.interactionApi=t;i.addEventListener(this.downEvent,this.handleDownEvent);i.addEventListener("mousedown",this.handleDoubleClick);i.addEventListener("wheel",this.handleMouseWheel,{passive:false})}dispose(){var i,t,s;(i=this.element)===null||i===void 0?void 0:i.removeEventListener(this.downEvent,this.handleDownEvent);(t=this.element)===null||t===void 0?void 0:t.removeEventListener("mousedown",this.handleDoubleClick);(s=this.element)===null||s===void 0?void 0:s.removeEventListener("wheel",this.handleMouseWheel);this.element=undefined}onPrimaryInteractionTypeChange(i){return this.primaryInteractionTypeChange.on(i)}setCurrentInteractionType(i){var t;switch(i){case"rotate":this.currentInteraction=this.rotateInteraction;break;case"zoom":this.currentInteraction=this.zoomInteraction;break;case"pan":this.currentInteraction=this.panInteraction;break;case"twist":this.currentInteraction=this.twistInteraction;break;case"rotate-point":this.currentInteraction=this.rotatePointInteraction;break;case"pivot":this.currentInteraction=this.pivotInteraction;break;default:this.currentInteraction=undefined}if(this.draggingInteraction){const i=this.draggingInteraction.getPosition();this.draggingInteraction=this.currentInteraction||this.primaryInteraction;(t=this.interactionApi)===null||t===void 0?void 0:t.resetLastAngle();this.draggingInteraction.setPosition(i)}}getPrimaryInteractionType(){return this.primaryInteraction.getType()}getCurrentInteractionType(){return(this.currentInteraction||this.primaryInteraction).getType()}setPrimaryInteractionType(i){switch(i){case"rotate":this.primaryInteraction=this.rotateInteraction;this.lastPrimaryRotateInteraction=this.rotateInteraction;break;case"rotate-point":this.primaryInteraction=this.rotatePointInteraction;this.lastPrimaryRotateInteraction=this.rotatePointInteraction;break;case"zoom":this.primaryInteraction=this.zoomInteraction;break;case"pan":this.primaryInteraction=this.panInteraction;break;case"pivot":this.primaryInteraction=this.pivotInteraction;break}this.primaryInteractionTypeChange.emit()}setDefaultKeyboardControls(i){this.keyboardControls=i}handleDownEvent(i){i.preventDefault();this.interactionTimer=window.setTimeout((()=>{this.downPosition=s.create(i.screenX,i.screenY);this.downPositionCanvas=this.getCanvasPosition(i);this.interactionTimer=undefined;if(this.lastMoveEvent!=null){this.handleWindowMove(this.lastMoveEvent)}}),this.getConfig().interactions.interactionDelay);window.addEventListener(this.moveEvent,this.handleWindowMove);window.addEventListener(this.upEvent,this.handleWindowUp)}handleWindowMove(i){if(this.interactionTimer==null){if(this.disableIndividualInteractions){return}const t=s.create(i.screenX,i.screenY);const h=this.interactionApi!=null?this.interactionApi.pixelThreshold(this.isTouch(i)):2;if(this.downPosition!=null&&s.distance(t,this.downPosition)>=h&&!this.isDragging){this.beginDrag(i);this.isDragging=true}if(this.isDragging){this.drag(i)}}this.lastMoveEvent=i}async handleWindowUp(i){if(this.isDragging){this.endDrag(i);this.isDragging=false}if(this.interactionTimer!=null){window.clearTimeout(this.interactionTimer);this.interactionTimer=undefined}window.removeEventListener(this.moveEvent,this.handleWindowMove);window.removeEventListener(this.upEvent,this.handleWindowUp);this.lastMoveEvent=undefined}async handleDoubleClick(i){if(i.detail===2&&i.buttons===4&&this.interactionApi!=null){await this.interactionApi.viewAll()}}beginDrag(i){var t;if(this.keyboardControls&&i.metaKey&&i.shiftKey){this.currentInteraction=this.rotatePointInteraction}else if(this.keyboardControls&&i.shiftKey&&i.altKey){this.currentInteraction=this.twistInteraction}else if(this.keyboardControls&&i.shiftKey){this.currentInteraction=this.zoomInteraction}else if(this.keyboardControls&&(i.metaKey||i.ctrlKey)){this.currentInteraction=this.panInteraction}else if(this.keyboardControls&&i.altKey){this.currentInteraction=this.rotateInteraction}if(i.buttons===1){this.draggingInteraction=this.currentInteraction||this.primaryInteraction}else if(i.buttons===2){this.draggingInteraction=this.panInteraction}else if(i.buttons===4){this.draggingInteraction=(t=this.lastPrimaryRotateInteraction)!==null&&t!==void 0?t:this.rotateInteraction}if(this.draggingInteraction!=null&&this.interactionApi!=null&&this.element!=null){this.zoomInteraction.endDrag(i,this.interactionApi);this.draggingInteraction.beginDrag(i,this.downPositionCanvas||s.create(i.clientX,i.clientY),this.interactionApi,this.element)}}drag(i){if(this.keyboardControls&&i.altKey&&i.shiftKey){this.currentInteraction=this.twistInteraction}else{this.currentInteraction=undefined}this.draggingInteraction=this.currentInteraction||this.draggingInteraction||this.primaryInteraction;if(this.draggingInteraction!=null&&this.interactionApi!=null){this.draggingInteraction.drag(i,this.interactionApi)}}endDrag(i){if(this.keyboardControls&&this.currentInteraction===this.twistInteraction){this.currentInteraction=undefined}if(this.draggingInteraction!=null&&this.interactionApi!=null){this.draggingInteraction.endDrag(i,this.interactionApi);this.draggingInteraction=undefined}}handleMouseWheel(i){i.preventDefault();if(this.element!=null&&this.interactionApi!=null&&i.buttons!==4){const t=-this.wheelDeltaToPixels(i.deltaY,i.deltaMode)/10;const s=this.element.getBoundingClientRect();const e=h(i,s);const n=Math.abs(i.deltaY);if(n<12){void this.zoomInteraction.zoomToPoint(e,t,this.interactionApi)}else{const i=Math.min(10,Math.ceil(n/12));const s=t/i;for(let t=1;t<=i;t++){const i=t*5;window.setTimeout((()=>{if(this.interactionApi!=null){this.zoomInteraction.zoomToPoint(e,s,this.interactionApi,i)}}),i)}}}}wheelDeltaToPixels(i,t){if(this.bodyStyleCache==null){const i=window.getComputedStyle(document.body);
|
|
5
|
-
//# sourceMappingURL=p-
|
|
4
|
+
import{E as i,b as t}from"./p-CHdoymO5.js";import{p as s}from"./p-VBSTxIAq.js";import{g as h}from"./p-BVGibtJW.js";const e=16;const n=1.2;class o{constructor(t,s,h,e,n,o,l,a,r,d){this.downEvent=t;this.upEvent=s;this.moveEvent=h;this.rotateInteraction=e;this.rotatePointInteraction=n;this.zoomInteraction=o;this.panInteraction=l;this.twistInteraction=a;this.pivotInteraction=r;this.getConfig=d;this.isDragging=false;this.keyboardControls=false;this.disableIndividualInteractions=false;this.primaryInteractionTypeChange=new i;this.primaryInteraction=e;this.handleDownEvent=this.handleDownEvent.bind(this);this.handleMouseWheel=this.handleMouseWheel.bind(this);this.handleWindowMove=this.handleWindowMove.bind(this);this.handleWindowUp=this.handleWindowUp.bind(this);this.handleDoubleClick=this.handleDoubleClick.bind(this)}initialize(i,t){this.element=i;this.interactionApi=t;i.addEventListener(this.downEvent,this.handleDownEvent);i.addEventListener("mousedown",this.handleDoubleClick);i.addEventListener("wheel",this.handleMouseWheel,{passive:false})}dispose(){var i,t,s;(i=this.element)===null||i===void 0?void 0:i.removeEventListener(this.downEvent,this.handleDownEvent);(t=this.element)===null||t===void 0?void 0:t.removeEventListener("mousedown",this.handleDoubleClick);(s=this.element)===null||s===void 0?void 0:s.removeEventListener("wheel",this.handleMouseWheel);this.element=undefined}onPrimaryInteractionTypeChange(i){return this.primaryInteractionTypeChange.on(i)}setCurrentInteractionType(i){var t;switch(i){case"rotate":this.currentInteraction=this.rotateInteraction;break;case"zoom":this.currentInteraction=this.zoomInteraction;break;case"pan":this.currentInteraction=this.panInteraction;break;case"twist":this.currentInteraction=this.twistInteraction;break;case"rotate-point":this.currentInteraction=this.rotatePointInteraction;break;case"pivot":this.currentInteraction=this.pivotInteraction;break;default:this.currentInteraction=undefined}if(this.draggingInteraction){const i=this.draggingInteraction.getPosition();this.draggingInteraction=this.currentInteraction||this.primaryInteraction;(t=this.interactionApi)===null||t===void 0?void 0:t.resetLastAngle();this.draggingInteraction.setPosition(i)}}getPrimaryInteractionType(){return this.primaryInteraction.getType()}getCurrentInteractionType(){return(this.currentInteraction||this.primaryInteraction).getType()}setPrimaryInteractionType(i){switch(i){case"rotate":this.primaryInteraction=this.rotateInteraction;this.lastPrimaryRotateInteraction=this.rotateInteraction;break;case"rotate-point":this.primaryInteraction=this.rotatePointInteraction;this.lastPrimaryRotateInteraction=this.rotatePointInteraction;break;case"zoom":this.primaryInteraction=this.zoomInteraction;break;case"pan":this.primaryInteraction=this.panInteraction;break;case"pivot":this.primaryInteraction=this.pivotInteraction;break}this.primaryInteractionTypeChange.emit()}setDefaultKeyboardControls(i){this.keyboardControls=i}handleDownEvent(i){i.preventDefault();this.interactionTimer=window.setTimeout((()=>{this.downPosition=s.create(i.screenX,i.screenY);this.downPositionCanvas=this.getCanvasPosition(i);this.interactionTimer=undefined;if(this.lastMoveEvent!=null){this.handleWindowMove(this.lastMoveEvent)}}),this.getConfig().interactions.interactionDelay);window.addEventListener(this.moveEvent,this.handleWindowMove);window.addEventListener(this.upEvent,this.handleWindowUp)}handleWindowMove(i){if(this.interactionTimer==null){if(this.disableIndividualInteractions){return}const t=s.create(i.screenX,i.screenY);const h=this.interactionApi!=null?this.interactionApi.pixelThreshold(this.isTouch(i)):2;if(this.downPosition!=null&&s.distance(t,this.downPosition)>=h&&!this.isDragging){this.beginDrag(i);this.isDragging=true}if(this.isDragging){this.drag(i)}}this.lastMoveEvent=i}async handleWindowUp(i){if(this.isDragging){this.endDrag(i);this.isDragging=false}if(this.interactionTimer!=null){window.clearTimeout(this.interactionTimer);this.interactionTimer=undefined}window.removeEventListener(this.moveEvent,this.handleWindowMove);window.removeEventListener(this.upEvent,this.handleWindowUp);this.lastMoveEvent=undefined}async handleDoubleClick(i){if(i.detail===2&&i.buttons===4&&this.interactionApi!=null){await this.interactionApi.viewAll()}}beginDrag(i){var t;if(this.keyboardControls&&i.metaKey&&i.shiftKey){this.currentInteraction=this.rotatePointInteraction}else if(this.keyboardControls&&i.shiftKey&&i.altKey){this.currentInteraction=this.twistInteraction}else if(this.keyboardControls&&i.shiftKey){this.currentInteraction=this.zoomInteraction}else if(this.keyboardControls&&(i.metaKey||i.ctrlKey)){this.currentInteraction=this.panInteraction}else if(this.keyboardControls&&i.altKey){this.currentInteraction=this.rotateInteraction}if(i.buttons===1){this.draggingInteraction=this.currentInteraction||this.primaryInteraction}else if(i.buttons===2){this.draggingInteraction=this.panInteraction}else if(i.buttons===4){this.draggingInteraction=(t=this.lastPrimaryRotateInteraction)!==null&&t!==void 0?t:this.rotateInteraction}if(this.draggingInteraction!=null&&this.interactionApi!=null&&this.element!=null){this.zoomInteraction.endDrag(i,this.interactionApi);this.draggingInteraction.beginDrag(i,this.downPositionCanvas||s.create(i.clientX,i.clientY),this.interactionApi,this.element)}}drag(i){if(this.keyboardControls&&i.altKey&&i.shiftKey){this.currentInteraction=this.twistInteraction}else{this.currentInteraction=undefined}this.draggingInteraction=this.currentInteraction||this.draggingInteraction||this.primaryInteraction;if(this.draggingInteraction!=null&&this.interactionApi!=null){this.draggingInteraction.drag(i,this.interactionApi)}}endDrag(i){if(this.keyboardControls&&this.currentInteraction===this.twistInteraction){this.currentInteraction=undefined}if(this.draggingInteraction!=null&&this.interactionApi!=null){this.draggingInteraction.endDrag(i,this.interactionApi);this.draggingInteraction=undefined}}handleMouseWheel(i){i.preventDefault();if(this.element!=null&&this.interactionApi!=null&&i.buttons!==4){const t=-this.wheelDeltaToPixels(i.deltaY,i.deltaMode)/10;const s=this.element.getBoundingClientRect();const e=h(i,s);const n=Math.abs(i.deltaY);if(n<12){void this.zoomInteraction.zoomToPoint(e,t,this.interactionApi)}else{const i=Math.min(10,Math.ceil(n/12));const s=t/i;for(let t=1;t<=i;t++){const i=t*5;window.setTimeout((()=>{if(this.interactionApi!=null){this.zoomInteraction.zoomToPoint(e,s,this.interactionApi,i)}}),i)}}}}wheelDeltaToPixels(i,t){if(this.bodyStyleCache==null){const i=window.getComputedStyle(document.body);const t=parseFloat(i.getPropertyValue("fontSize"))||e;const s=parseFloat(i.getPropertyValue("lineHeight"));this.bodyStyleCache={lineHeightPixels:Number.isFinite(s)?s:t*n,height:parseFloat(i.getPropertyValue("height"))||window.innerHeight};window.setTimeout((()=>{this.bodyStyleCache=undefined}),4800)}if(t===1){return i*this.bodyStyleCache.lineHeightPixels}else if(t===2){return i*this.bodyStyleCache.height}return i}getCanvasPosition(i){var t;const h=(t=this.element)===null||t===void 0?void 0:t.getBoundingClientRect();const e=h!=null?s.create(h.left,h.top):undefined;return e!=null?s.subtract(s.create(i.clientX,i.clientY),e):undefined}isTouch(i){return window.PointerEvent!=null&&i instanceof PointerEvent?i.pointerType==="touch":false}}class l extends o{constructor(){super(...arguments);this.registeredExternalElements={}}registerAdditionalElement(i){const s=t.create();const h=this.addEventListenersToElement(i);this.registeredExternalElements[s]=h;return h}deregisterAdditionalElementById(i){const t=this.registeredExternalElements[i];t.dispose();this.registeredExternalElements=Object.fromEntries(Object.entries(this.registeredExternalElements).filter((([t])=>t!==i)))}deregisterAllListeners(){Object.keys(this.registeredExternalElements).forEach((i=>this.deregisterAdditionalElementById(i)))}}export{o as B,l as M};
|
|
5
|
+
//# sourceMappingURL=p-DfL6dfC1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["DEFAULT_FONT_SIZE","DEFAULT_FONT_TO_LINE_HEIGHT_MULTIPLIER","BaseInteractionHandler","constructor","downEvent","upEvent","moveEvent","rotateInteraction","rotatePointInteraction","zoomInteraction","panInteraction","twistInteraction","pivotInteraction","getConfig","this","isDragging","keyboardControls","disableIndividualInteractions","primaryInteractionTypeChange","EventDispatcher","primaryInteraction","handleDownEvent","bind","handleMouseWheel","handleWindowMove","handleWindowUp","handleDoubleClick","initialize","element","api","interactionApi","addEventListener","passive","dispose","_a","removeEventListener","_b","_c","undefined","onPrimaryInteractionTypeChange","listener","on","setCurrentInteractionType","type","currentInteraction","draggingInteraction","point","getPosition","resetLastAngle","setPosition","getPrimaryInteractionType","getType","getCurrentInteractionType","setPrimaryInteractionType","lastPrimaryRotateInteraction","emit","setDefaultKeyboardControls","event","preventDefault","interactionTimer","window","setTimeout","downPosition","Point","create","screenX","screenY","downPositionCanvas","getCanvasPosition","lastMoveEvent","interactions","interactionDelay","position","pixelThreshold","isTouch","distance","beginDrag","drag","endDrag","clearTimeout","detail","buttons","viewAll","metaKey","shiftKey","altKey","ctrlKey","clientX","clientY","delta","wheelDeltaToPixels","deltaY","deltaMode","rect","getBoundingClientRect","getMouseClientPosition","scrollSize","Math","abs","zoomToPoint","divisions","min","ceil","zoomDelta","i","delayMs","bodyStyleCache","bodyStyle","getComputedStyle","document","body","fontSize","parseFloat","getPropertyValue","lineHeight","lineHeightPixels","Number","isFinite","height","innerHeight","canvasBounds","canvasOffset","left","top","subtract","PointerEvent","pointerType","MultiElementInteractionHandler","registeredExternalElements","registerAdditionalElement","external","id","UUID","disposable","addEventListenersToElement","deregisterAdditionalElementById","externalElement","Object","fromEntries","entries","filter","key","deregisterAllListeners","keys","forEach"],"sources":["src/lib/interactions/baseInteractionHandler.ts","src/lib/interactions/multiElementInteractionHandler.ts"],"sourcesContent":["import { Point } from '@vertexvis/geometry';\nimport { Disposable, EventDispatcher, Listener } from '@vertexvis/utils';\n\nimport { ConfigProvider } from '../config';\nimport { getMouseClientPosition } from '../dom';\nimport { InteractionApi } from './interactionApi';\nimport { BaseEvent } from './interactionEvent';\nimport { InteractionHandler } from './interactionHandler';\nimport {\n MouseInteraction,\n PanInteraction,\n PivotInteraction,\n RotateInteraction,\n RotatePointInteraction,\n TwistInteraction,\n ZoomInteraction,\n} from './mouseInteractions';\n\nexport type InteractionType =\n | 'rotate'\n | 'zoom'\n | 'pan'\n | 'twist'\n | 'rotate-point'\n | 'pivot';\n\nconst DEFAULT_FONT_SIZE = 16;\nconst DEFAULT_FONT_TO_LINE_HEIGHT_MULTIPLIER = 1.2;\n\nexport abstract class BaseInteractionHandler implements InteractionHandler {\n protected interactionApi?: InteractionApi;\n protected element?: HTMLElement;\n protected downPosition?: Point.Point;\n private downPositionCanvas?: Point.Point;\n private primaryInteraction: MouseInteraction;\n private currentInteraction?: MouseInteraction;\n private draggingInteraction: MouseInteraction | undefined;\n private lastPrimaryRotateInteraction?: MouseInteraction;\n private isDragging = false;\n private lastMoveEvent?: BaseEvent;\n private interactionTimer?: number;\n private keyboardControls = false;\n\n protected disableIndividualInteractions = false;\n\n private bodyStyleCache?: {\n lineHeightPixels: number;\n height: number;\n };\n\n private primaryInteractionTypeChange = new EventDispatcher<void>();\n\n public constructor(\n protected downEvent: 'mousedown' | 'pointerdown',\n protected upEvent: 'mouseup' | 'pointerup',\n protected moveEvent: 'mousemove' | 'pointermove',\n private rotateInteraction: RotateInteraction,\n private rotatePointInteraction: RotatePointInteraction,\n private zoomInteraction: ZoomInteraction,\n private panInteraction: PanInteraction,\n private twistInteraction: TwistInteraction,\n private pivotInteraction: PivotInteraction,\n private getConfig: ConfigProvider,\n ) {\n this.primaryInteraction = rotateInteraction;\n this.handleDownEvent = this.handleDownEvent.bind(this);\n this.handleMouseWheel = this.handleMouseWheel.bind(this);\n this.handleWindowMove = this.handleWindowMove.bind(this);\n this.handleWindowUp = this.handleWindowUp.bind(this);\n this.handleDoubleClick = this.handleDoubleClick.bind(this);\n }\n\n public initialize(element: HTMLElement, api: InteractionApi): void {\n this.element = element;\n this.interactionApi = api;\n element.addEventListener(this.downEvent, this.handleDownEvent);\n element.addEventListener('mousedown', this.handleDoubleClick);\n element.addEventListener('wheel', this.handleMouseWheel, {\n passive: false,\n });\n }\n\n public dispose(): void {\n this.element?.removeEventListener(this.downEvent, this.handleDownEvent);\n this.element?.removeEventListener('mousedown', this.handleDoubleClick);\n this.element?.removeEventListener('wheel', this.handleMouseWheel);\n this.element = undefined;\n }\n\n public onPrimaryInteractionTypeChange(listener: Listener<void>): Disposable {\n return this.primaryInteractionTypeChange.on(listener);\n }\n\n public setCurrentInteractionType(type?: InteractionType): void {\n switch (type) {\n case 'rotate':\n this.currentInteraction = this.rotateInteraction;\n break;\n case 'zoom':\n this.currentInteraction = this.zoomInteraction;\n break;\n case 'pan':\n this.currentInteraction = this.panInteraction;\n break;\n case 'twist':\n this.currentInteraction = this.twistInteraction;\n break;\n case 'rotate-point':\n this.currentInteraction = this.rotatePointInteraction;\n break;\n case 'pivot':\n this.currentInteraction = this.pivotInteraction;\n break;\n default:\n this.currentInteraction = undefined;\n }\n\n if (this.draggingInteraction) {\n const point = this.draggingInteraction.getPosition();\n this.draggingInteraction =\n this.currentInteraction || this.primaryInteraction;\n this.interactionApi?.resetLastAngle();\n this.draggingInteraction.setPosition(point);\n }\n }\n\n public getPrimaryInteractionType(): InteractionType {\n return this.primaryInteraction.getType();\n }\n\n public getCurrentInteractionType(): InteractionType {\n return (this.currentInteraction || this.primaryInteraction).getType();\n }\n\n public setPrimaryInteractionType(type: InteractionType): void {\n switch (type) {\n case 'rotate':\n this.primaryInteraction = this.rotateInteraction;\n this.lastPrimaryRotateInteraction = this.rotateInteraction;\n break;\n case 'rotate-point':\n this.primaryInteraction = this.rotatePointInteraction;\n this.lastPrimaryRotateInteraction = this.rotatePointInteraction;\n break;\n case 'zoom':\n this.primaryInteraction = this.zoomInteraction;\n break;\n case 'pan':\n this.primaryInteraction = this.panInteraction;\n break;\n case 'pivot':\n this.primaryInteraction = this.pivotInteraction;\n break;\n }\n this.primaryInteractionTypeChange.emit();\n }\n\n public setDefaultKeyboardControls(keyboardControls: boolean): void {\n this.keyboardControls = keyboardControls;\n }\n\n protected handleDownEvent(event: BaseEvent): void {\n // Prevent selection of any text while interacting with the model.\n event.preventDefault();\n\n this.interactionTimer = window.setTimeout(() => {\n this.downPosition = Point.create(event.screenX, event.screenY);\n this.downPositionCanvas = this.getCanvasPosition(event);\n this.interactionTimer = undefined;\n\n // Perform the current movement in the case that the interaction timer elapses\n if (this.lastMoveEvent != null) {\n this.handleWindowMove(this.lastMoveEvent);\n }\n }, this.getConfig().interactions.interactionDelay);\n\n window.addEventListener(this.moveEvent, this.handleWindowMove);\n window.addEventListener(this.upEvent, this.handleWindowUp);\n }\n\n protected handleWindowMove(event: BaseEvent): void {\n if (this.interactionTimer == null) {\n if (this.disableIndividualInteractions) {\n return;\n }\n\n const position = Point.create(event.screenX, event.screenY);\n const pixelThreshold =\n this.interactionApi != null\n ? this.interactionApi.pixelThreshold(this.isTouch(event))\n : 2;\n if (\n this.downPosition != null &&\n Point.distance(position, this.downPosition) >= pixelThreshold &&\n !this.isDragging\n ) {\n this.beginDrag(event);\n this.isDragging = true;\n }\n\n if (this.isDragging) {\n this.drag(event);\n }\n }\n\n this.lastMoveEvent = event;\n }\n\n protected async handleWindowUp(event: BaseEvent): Promise<void> {\n if (this.isDragging) {\n this.endDrag(event);\n this.isDragging = false;\n }\n\n if (this.interactionTimer != null) {\n window.clearTimeout(this.interactionTimer);\n this.interactionTimer = undefined;\n }\n\n window.removeEventListener(this.moveEvent, this.handleWindowMove);\n window.removeEventListener(this.upEvent, this.handleWindowUp);\n this.lastMoveEvent = undefined;\n }\n\n protected async handleDoubleClick(event: BaseEvent): Promise<void> {\n // event.detail is the number of clicks that have happened recently. If the number is 2, then the user double clicked.\n if (\n event.detail === 2 &&\n event.buttons === 4 &&\n this.interactionApi != null\n ) {\n await this.interactionApi.viewAll();\n }\n }\n\n protected beginDrag(event: BaseEvent): void {\n if (this.keyboardControls && event.metaKey && event.shiftKey) {\n this.currentInteraction = this.rotatePointInteraction;\n } else if (this.keyboardControls && event.shiftKey && event.altKey) {\n this.currentInteraction = this.twistInteraction;\n } else if (this.keyboardControls && event.shiftKey) {\n this.currentInteraction = this.zoomInteraction;\n } else if (this.keyboardControls && (event.metaKey || event.ctrlKey)) {\n this.currentInteraction = this.panInteraction;\n } else if (this.keyboardControls && event.altKey) {\n this.currentInteraction = this.rotateInteraction;\n }\n\n if (event.buttons === 1) {\n this.draggingInteraction =\n this.currentInteraction || this.primaryInteraction;\n } else if (event.buttons === 2) {\n this.draggingInteraction = this.panInteraction;\n } else if (event.buttons === 4) {\n this.draggingInteraction =\n this.lastPrimaryRotateInteraction ?? this.rotateInteraction;\n }\n\n if (\n this.draggingInteraction != null &&\n this.interactionApi != null &&\n this.element != null\n ) {\n // Ensure any scroll wheel interactions have been ended prior to beginning\n // another interaction to prevent the interaction from being ended early.\n this.zoomInteraction.endDrag(event, this.interactionApi);\n\n this.draggingInteraction.beginDrag(\n event,\n this.downPositionCanvas || Point.create(event.clientX, event.clientY),\n this.interactionApi,\n this.element,\n );\n }\n }\n\n protected drag(event: BaseEvent): void {\n if (this.keyboardControls && event.altKey && event.shiftKey) {\n this.currentInteraction = this.twistInteraction;\n } else {\n this.currentInteraction = undefined;\n }\n this.draggingInteraction =\n this.currentInteraction ||\n this.draggingInteraction ||\n this.primaryInteraction;\n if (this.draggingInteraction != null && this.interactionApi != null) {\n this.draggingInteraction.drag(event, this.interactionApi);\n }\n }\n\n protected endDrag(event: BaseEvent): void {\n if (\n this.keyboardControls &&\n this.currentInteraction === this.twistInteraction\n ) {\n this.currentInteraction = undefined;\n }\n\n if (this.draggingInteraction != null && this.interactionApi != null) {\n this.draggingInteraction.endDrag(event, this.interactionApi);\n this.draggingInteraction = undefined;\n }\n }\n\n protected handleMouseWheel(event: WheelEvent): void {\n event.preventDefault();\n\n if (\n this.element != null &&\n this.interactionApi != null &&\n event.buttons !== 4\n ) {\n const delta =\n -this.wheelDeltaToPixels(event.deltaY, event.deltaMode) / 10;\n const rect = this.element.getBoundingClientRect();\n const point = getMouseClientPosition(event, rect);\n const scrollSize = Math.abs(event.deltaY);\n\n if (scrollSize < 12) {\n // For small wheel movements, send a single zoom event.\n void this.zoomInteraction.zoomToPoint(\n point,\n delta,\n this.interactionApi,\n );\n } else {\n const divisions = Math.min(10, Math.ceil(scrollSize / 12));\n const zoomDelta = delta / divisions;\n // For larger wheel movements, divide the delta into multiple zoom events with increasing delay\n // which approximates a smooth zoom deceleration curve for the end user.\n for (let i = 1; i <= divisions; i++) {\n const delayMs = i * 5;\n window.setTimeout(() => {\n if (this.interactionApi != null) {\n this.zoomInteraction.zoomToPoint(\n point,\n zoomDelta,\n this.interactionApi,\n delayMs,\n );\n }\n }, delayMs);\n }\n }\n }\n }\n\n protected wheelDeltaToPixels(deltaY: number, deltaMode: number): number {\n // Cached values are an optimization we can use given mouseWheel\n // events can happen dozen or hundreds of times per scroll, but body style\n // is very unlikely to change frequently or while doing wheel movements.\n if (this.bodyStyleCache == null) {\n const bodyStyle = window.getComputedStyle(document.body);\n const fontSize =\n parseFloat(bodyStyle.getPropertyValue('fontSize')) || DEFAULT_FONT_SIZE;\n const lineHeight = parseFloat(bodyStyle.getPropertyValue('lineHeight'));\n this.bodyStyleCache = {\n lineHeightPixels: Number.isFinite(lineHeight)\n ? lineHeight\n : fontSize * DEFAULT_FONT_TO_LINE_HEIGHT_MULTIPLIER,\n height:\n parseFloat(bodyStyle.getPropertyValue('height')) ||\n window.innerHeight,\n };\n window.setTimeout(() => {\n this.bodyStyleCache = undefined;\n }, 4800); // For now hardcoded. Could be derived. eg mouseWheelInteractionEndDebounce * 12\n }\n\n if (deltaMode === 1) {\n // deltaMode 1 corresponds to DOM_DELTA_LINE, which computes deltas in lines\n return deltaY * this.bodyStyleCache.lineHeightPixels;\n } else if (deltaMode === 2) {\n // deltaMode 2 corresponds to DOM_DELTA_PAGE, which computes deltas in pages\n return deltaY * this.bodyStyleCache.height;\n }\n // deltaMode 0 corresponds to DOM_DELTA_PIXEL, which computes deltas in pixels\n return deltaY;\n }\n\n protected getCanvasPosition(event: BaseEvent): Point.Point | undefined {\n const canvasBounds = this.element?.getBoundingClientRect();\n const canvasOffset =\n canvasBounds != null\n ? Point.create(canvasBounds.left, canvasBounds.top)\n : undefined;\n\n return canvasOffset != null\n ? Point.subtract(Point.create(event.clientX, event.clientY), canvasOffset)\n : undefined;\n }\n\n protected isTouch(event: BaseEvent): boolean {\n return window.PointerEvent != null && event instanceof PointerEvent\n ? event.pointerType === 'touch'\n : false;\n }\n}\n","import { Disposable, UUID } from '@vertexvis/utils';\n\nimport { BaseInteractionHandler } from './baseInteractionHandler';\n\nexport abstract class MultiElementInteractionHandler extends BaseInteractionHandler {\n protected registeredExternalElements: Record<UUID.UUID, Disposable> = {};\n\n public registerAdditionalElement(external: HTMLElement): Disposable {\n const id = UUID.create();\n const disposable = this.addEventListenersToElement(external);\n\n this.registeredExternalElements[id] = disposable;\n return disposable;\n }\n\n public deregisterAdditionalElementById(id: UUID.UUID): void {\n const externalElement = this.registeredExternalElements[id];\n\n externalElement.dispose();\n\n this.registeredExternalElements = Object.fromEntries(\n Object.entries(this.registeredExternalElements).filter(\n ([key]) => key !== id,\n ),\n );\n }\n\n protected deregisterAllListeners(): void {\n Object.keys(this.registeredExternalElements).forEach((id) =>\n this.deregisterAdditionalElementById(id),\n );\n }\n\n public abstract addEventListenersToElement(element?: HTMLElement): Disposable;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{h as e,t,p as n,H as s,e as i}from"./p-Bb32XUUS.js";import{m as o,v as r}from"./p-VBSTxIAq.js";import{M as l}from"./p-
|
|
5
|
-
//# sourceMappingURL=p-
|
|
4
|
+
import{h as e,t,p as n,H as s,e as i}from"./p-Bb32XUUS.js";import{m as o,v as r}from"./p-VBSTxIAq.js";import{M as l}from"./p-DfL6dfC1.js";import"./p-CgDHcgLJ.js";import{V as a}from"./p-BLmYvqlv.js";function c(e){return e instanceof HTMLElement&&e.nodeName==="VERTEX-VIEWER-DOM-ELEMENT"&&e.matrix!=null}function d(e){return(e instanceof HTMLElement&&e.nodeName==="VERTEX-VIEWER-DOM-GROUP"||e instanceof HTMLElement&&e.dataset.isDomGroupElement!=null)&&e.matrix!=null}const h=(t,n)=>e("div",{class:"root-2d"},n);function u(e,t,n,s,i){const o=v(e,t,s).sort(((e,t)=>e.distanceToCamera-t.distanceToCamera));for(let e=0;e<o.length;e++){const{element:t,worldMatrix:r,worldPosition:l}=o[e];const a=i==null;const c=a||!t.occlusionOff&&(i===null||i===void 0?void 0:i.isOccluded(l,n));const d=a||!t.detachedOff&&(i===null||i===void 0?void 0:i.isDetached(l,n));const h=p(l,s.projectionViewMatrix,n);f(t,h);m(t,e,o.length);u(t,r,n,s,i);t.occluded=c!==null&&c!==void 0?c:false;t.detached=d!==null&&d!==void 0?d:false;t.classList.add("ready")}}function v(e,t,n){const s=[];for(let i=0;i<e.children.length;i++){const l=e.children[i];if(d(l)){const e=o.multiply(l.matrix,t);s.push(...v(l,e,n))}else if(c(l)){const e=o.multiply(l.matrix,t);const i=r.fromMatrixPosition(e);const a=r.distanceSquared(n.position,i);s.push({element:l,worldMatrix:e,worldPosition:i,distanceToCamera:a})}else{s.push(...v(l,t,n))}}return s}function f(e,t){e.style.transform=[`translate(-50%, -50%)`,`translate(${t.x}px, ${t.y}px)`].join(" ")}function m(e,t,n){e.style.zIndex=`${n-t}`}function p(e,t,n){const s=r.multiplyByTransformMatrixColumnMajor(e,t);return n.transformVectorToViewport(s)}const w=({camera:t,viewport:n},s)=>{const i=o.toObjectColumnMajor(t.projectionMatrix);const r=t.isOrthographic()?t.far*2/(t.fovHeight*2)*(n.height/2):i.m22*(n.height/2);const l=[`translateZ(${r}px)`,y(t.viewMatrix),`translate(${n.width/2}px, ${n.height/2}px)`].join(" ");return e("div",{class:"root-3d",style:{perspective:`${r}px`}},e("div",{class:"camera",style:{transform:l}},s))};function E(e,t,n,s,i){for(let o=0;o<e.children.length;o++){const r=e.children[o];if(c(r)){x(r,t,n,s,i)}else if(d(r)){g(r,t,n,s,i)}else{E(r,t,n,s,i)}}}function x(e,t,n,s,i){const l=o.multiply(e.matrix,t);const a=r.fromMatrixPosition(l);const c=i==null;const d=c||!e.occlusionOff&&(i===null||i===void 0?void 0:i.isOccluded(a,n));e.occluded=d!==null&&d!==void 0?d:false;const h=c||!e.detachedOff&&(i===null||i===void 0?void 0:i.isDetached(a,n));e.detached=h!==null&&h!==void 0?h:false;e.classList.add("ready");if(e.billboardOff){e.style.transform=V(l)}else{const t=s.viewMatrix;const n=o.transpose(t);const i=o.position(n,l);const r=o.scale(i,e.scale);r[3]=0;r[7]=0;r[11]=0;r[15]=1;e.style.transform=V(r)}E(e,l,n,s,i)}function g(e,t,n,s,i){const r=o.multiply(e.matrix,t);E(e,r,n,s,i)}function y(e){const t=[C(e[0]),C(-e[1]),C(e[2]),C(e[3]),C(e[4]),C(-e[5]),C(e[6]),C(e[7]),C(e[8]),C(-e[9]),C(e[10]),C(e[11]),C(e[12]),C(-e[13]),C(e[14]),C(e[15])].join(", ");return`matrix3d(${t})`}function V(e){const t=[C(e[0]),C(e[1]),C(e[2]),C(e[3]),C(-e[4]),C(-e[5]),C(-e[6]),C(-e[7]),C(e[8]),C(e[9]),C(e[10]),C(e[11]),C(e[12]),C(e[13]),C(e[14]),C(e[15])].join(", ");return[`translate(-50%, -50%)`,`matrix3d(${t})`].join(" ")}function C(e){return Math.abs(e)<1e-10?0:e}const M=()=>`.sc-vertex-viewer-dom-renderer-h{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden;pointer-events:none}.root-3d.sc-vertex-viewer-dom-renderer{width:100%;height:100%;pointer-events:inherit}.camera.sc-vertex-viewer-dom-renderer{transform-style:preserve-3d;pointer-events:inherit;width:100%;height:100%}`;const T=n(class t extends s{constructor(e){super();if(e!==false){this.__registerHost()}this.drawMode="3d";this.propagateEventsToViewer=true;this.viewport=new a(0,0);this.invalidateFrameCounter=0;this.interactionDisposables=[];this.handleViewerFrameDrawn=async()=>{this.updatePropsFromViewer()}}componentWillLoad(){var e;const t=new ResizeObserver((()=>this.handleResize()));t.observe(this.hostEl);const n=new MutationObserver((()=>this.handleChildrenChange()));n.observe(this.hostEl,{childList:true});this.handleViewerChange(this.viewer,undefined);if(((e=this.viewer)===null||e===void 0?void 0:e.frame)!=null){this.handleViewerFrameDrawn()}}render(){if(this.camera!=null){if(this.drawMode==="2d"){return e(i,null,e(h,null,e("slot",null)))}else{return e(i,null,e(w,{camera:this.camera,viewport:this.viewport},e("slot",null)))}}else{return e(i,null)}}componentWillRender(){this.updateElements()}handleViewerChange(e,t){t===null||t===void 0?void 0:t.removeEventListener("frameDrawn",this.handleViewerFrameDrawn);e===null||e===void 0?void 0:e.addEventListener("frameDrawn",this.handleViewerFrameDrawn);if(this.propagateEventsToViewer&&e!=null){this.handleEventPropagationToViewer(e)}}handlePropertyChange(){this.invalidateFrame()}invalidateFrame(){this.invalidateFrameCounter=this.invalidateFrameCounter+1}handleEventPropagationToViewer(e){this.interactionDisposables.forEach((e=>{e.dispose()}));this.interactionDisposables=[];e.getInteractionHandlers().then((e=>{e.forEach((e=>{if(e instanceof l){const t=e.registerAdditionalElement(this.hostEl);this.interactionDisposables=[...this.interactionDisposables,t]}}))}))}async updateElements(){const{viewport:e,camera:t}=this;const n=o.makeIdentity();if(t!=null){if(this.drawMode==="3d"){E(this.hostEl,n,e,t,this.depthBuffer)}else{u(this.hostEl,n,e,t,this.depthBuffer)}}}handleResize(){const e=this.hostEl.getBoundingClientRect();this.viewport=new a(e.width,e.height)}handleChildrenChange(){this.invalidateFrame()}async updatePropsFromViewer(){const{frame:e}=this.viewer||{};this.depthBuffer=await(e===null||e===void 0?void 0:e.depthBuffer());this.camera=e===null||e===void 0?void 0:e.scene.camera}get hostEl(){return this}static get watchers(){return{viewer:[{handleViewerChange:0}]}}static get style(){return M()}},[262,"vertex-viewer-dom-renderer",{drawMode:[1,"draw-mode"],propagateEventsToViewer:[4,"propagate-events-to-viewer"],viewer:[16],camera:[1040],depthBuffer:[1040],viewport:[32],invalidateFrameCounter:[32],interactionDisposables:[32]},[[0,"propertyChange","handlePropertyChange"]],{viewer:[{handleViewerChange:0}]}]);function L(){if(typeof customElements==="undefined"){return}const e=["vertex-viewer-dom-renderer"];e.forEach((e=>{switch(e){case"vertex-viewer-dom-renderer":if(!customElements.get(t(e))){customElements.define(t(e),T)}break}}))}L();export{T as V,L as d};
|
|
5
|
+
//# sourceMappingURL=p-DnJlSbRF.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{V as o,d as s}from"./p-
|
|
4
|
+
import{V as o,d as s}from"./p-DnJlSbRF.js";const t=o;const n=s;export{t as VertexViewerDomRenderer,n as defineCustomElement};
|
|
5
5
|
//# sourceMappingURL=vertex-viewer-dom-renderer.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{t as i,p as t,H as e,h as s,e as n}from"./p-Bb32XUUS.js";import{a as o,d as l,P as r}from"./p-DZ19Puk0.js";import{p as h}from"./p-VBSTxIAq.js";import{b as d}from"./p-CHdoymO5.js";import{l as a,p as u}from"./p-B-ToCp8-.js";import{g as v}from"./p-BVGibtJW.js";import{E as c}from"./p-CFus3r7d.js";import{E as p}from"./p-CgDHcgLJ.js";import{P as f}from"./p-BWUNIo7P.js";import{g as m}from"./p-Bg-uS9BH.js";import{d as w}from"./p-BGmfwtuq.js";import{d as C}from"./p-Dz3ulfDZ.js";import{d as b}from"./p-Bkm6H5uq.js";import{d as y}from"./p-C4G5JBBw.js";import{d as g}from"./p-B5FnyWQm.js";class x{get elementRect(){return this.rectObserver.rect}constructor(i,t,e){this.rectObserver=new c;this.droppableSurfaces=[p.PRECISE_SURFACE,p.IMPRECISE_SURFACE,p.GENERIC_GEOMETRY];this.handlePointerMove=async i=>{const t=await this.isDroppableSurface(i);const e=this.controller.getDraggable();if(e!=null&&t){this.handleDrag(e,i)}if(this.controller.getDraggable()==null&&this.controller.getToolMode()==="edit"&&t){this.addCursor(this.getCursorType())}else{this.clearCursor()}};this.handleDrag=async(i,t)=>{const e=v(t,this.elementRect);const s=await this.getWorldPositionForPoint(e);if(s!=null){this.controller.updateDraggable({...i,lastPoint:e},s)}};this.handlePointerDown=async i=>{const t=t=>{const s=h.distance(h.create(i.clientX,t.clientY),h.create(t.clientX,t.clientY));if(s<=2&&i.buttons!==2){if(this.controller.getToolMode()==="edit"){const t=v(i,this.elementRect);this.handlePlacePin(t)}}e()};const e=()=>{window.removeEventListener("pointerup",t)};window.addEventListener("pointerup",t);return{dispose:e}};this.handlePointerUp=async()=>{const i=this.controller.getDraggable();const t=i===null||i===void 0?void 0:i.lastPoint;this.controller.setDraggable(undefined);if(t!=null&&i!=null){this.ifInitialized((async({api:e})=>{var s,n,o,l,r,h;const[d]=await e.hitItems(t);if((d===null||d===void 0?void 0:d.hitPoint)!=null&&((s=d===null||d===void 0?void 0:d.hitPoint)===null||s===void 0?void 0:s.x)!=null&&((n=d===null||d===void 0?void 0:d.hitPoint)===null||n===void 0?void 0:n.y)!=null&&((o=d===null||d===void 0?void 0:d.hitPoint)===null||o===void 0?void 0:o.z)!=null){this.controller.updateDraggable({...i,lastPoint:t},{x:(l=d===null||d===void 0?void 0:d.hitPoint)===null||l===void 0?void 0:l.x,y:d===null||d===void 0?void 0:d.hitPoint.y,z:d===null||d===void 0?void 0:d.hitPoint.z},(h=(r=d===null||d===void 0?void 0:d.partId)===null||r===void 0?void 0:r.hex)!==null&&h!==void 0?h:undefined)}}))}};this.controller=i;this.xOffset=t;this.yOffset=e}initialize(i,t){this.element=i;this.api=t;this.rectObserver.observe(i);i.addEventListener("pointermove",this.handlePointerMove);i.addEventListener("pointerdown",this.handlePointerDown);window.addEventListener("pointerup",this.handlePointerUp)}dispose(){var i,t;this.rectObserver.disconnect();this.clearCursor();(i=this.element)===null||i===void 0?void 0:i.removeEventListener("pointermove",this.handlePointerMove);(t=this.element)===null||t===void 0?void 0:t.removeEventListener("pointerdown",this.handlePointerDown);window.removeEventListener("pointerup",this.handlePointerUp);this.element=undefined;this.api=undefined}async getWorldPositionForPoint(i){return this.ifInitialized((async({api:t})=>{const e=await t.getWorldPointFromViewport(i);return e}))}async handlePlacePin(i,t){this.ifInitialized((async({api:e})=>{var s,n,l,r,h,a;const[u]=await e.hitItems(i);if((u===null||u===void 0?void 0:u.hitPoint)!=null&&this.elementRect!=null){if((u===null||u===void 0?void 0:u.hitPoint)!=null&&(u===null||u===void 0?void 0:u.hitPoint.x)!=null&&(u===null||u===void 0?void 0:u.hitPoint.y)!=null&&(u===null||u===void 0?void 0:u.hitPoint.z)!=null){const e=t!=null?t.id:d.create();const v=this.controller.getStyleAttributes()!=null?{style:this.controller.getStyleAttributes()}:undefined;switch(this.controller.getToolType()){case"pin-icon":this.controller.setPin({type:"icon",id:e,worldPosition:{x:(s=u===null||u===void 0?void 0:u.hitPoint)===null||s===void 0?void 0:s.x,y:u===null||u===void 0?void 0:u.hitPoint.y,z:u===null||u===void 0?void 0:u.hitPoint.z},partId:(l=(n=u===null||u===void 0?void 0:u.itemId)===null||n===void 0?void 0:n.hex)!==null&&l!==void 0?l:undefined,attributes:v});break;case"pin-text":const d=t==null;const c=o(i,this.elementRect,d,this.xOffset,this.yOffset);this.controller.setPin({type:"text",id:e,worldPosition:{x:(r=u===null||u===void 0?void 0:u.hitPoint)===null||r===void 0?void 0:r.x,y:u===null||u===void 0?void 0:u.hitPoint.y,z:u===null||u===void 0?void 0:u.hitPoint.z},partId:(a=(h=u===null||u===void 0?void 0:u.itemId)===null||h===void 0?void 0:h.hex)!==null&&a!==void 0?a:undefined,label:{point:c},attributes:v});this.controller.setSelectedPinId(e);break}}}else{this.controller.setSelectedPinId()}}))}getCursorType(){switch(this.controller.getToolType()){case"pin-icon":return u;case"pin-text":return a}}addCursor(i){this.clearCursor();this.cursor=this.ifInitialized((({api:t})=>t.addCursor(i)))}async isDroppableSurface(i){var t;const e=v(i,this.elementRect);const s=await((t=this.api)===null||t===void 0?void 0:t.getEntityTypeAtPoint(e));return s!=null&&this.droppableSurfaces.includes(s)}ifInitialized(i){if(this.element!=null&&this.api!=null){return i({element:this.element,api:this.api})}else{throw new Error("Pins interaction handler not initialized.")}}clearCursor(){var i;(i=this.cursor)===null||i===void 0?void 0:i.dispose();this.cursor=undefined}}const P=()=>`:host{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden;pointer-events:none;--viewer-pin-tool-initial-label-offset-x:20;--viewer-pin-tool-initial-label-offset-y:20}`;const j=t(class i extends e{constructor(i){super();if(i!==false){this.__registerHost()}this.__attachShadow();this.pinModel=new f;this.tool="pin-icon";this.mode="view";this.pins=[];this.stateMap={};this.handleSetProjectionMatrix=()=>{var i,t;this.projectionViewMatrix=(t=(i=this.viewer)===null||i===void 0?void 0:i.frame)===null||t===void 0?void 0:t.scene.camera.projectionViewMatrix}}watchModeChange(){var i;(i=this.pinController)===null||i===void 0?void 0:i.setToolMode(this.mode);this.setupInteractionHandler();if(this.mode==="edit"){this.setFeatureMaps();this.setCameraAndKeyboardControls()}else{this.resetFeatureMaps();this.resetCameraAndKeyboardControls()}}watchTypeChange(){var i;(i=this.pinController)===null||i===void 0?void 0:i.setToolType(this.tool);this.setupInteractionHandler()}watchAccentColorChange(){var i;(i=this.pinController)===null||i===void 0?void 0:i.setAccentColor(this.accentColor);this.setupInteractionHandler()}watchPrimaryColorChange(){var i;(i=this.pinController)===null||i===void 0?void 0:i.setPrimaryColor(this.primaryColor);this.setupInteractionHandler()}watchPinsChange(){if(this.pins.length>0){this.setDepthBuffers();this.setFeatureMaps()}else{this.resetDepthBuffers();this.resetFeatureMaps()}}connectedCallback(){this.setupInteractionHandler();this.setDepthBuffers();this.setFeatureMaps();this.setCameraAndKeyboardControls()}componentWillLoad(){this.updateViewport();this.setupController();this.setupInteractionHandler();this.setDepthBuffers();this.setFeatureMaps();this.setCameraAndKeyboardControls();this.pinModel.onEntitiesChanged((i=>{this.pins=i}));this.pinModel.onSelectionChange((i=>{this.selectedPinId=i}));this.handleViewerChanged(this.viewer,undefined)}componentDidLoad(){this.resizeObserver=new ResizeObserver((()=>this.updateViewport()));this.resizeObserver.observe(this.hostEl)}disconnectedCallback(){this.clearInteractionHandler();this.clearModelListeners();this.resetDepthBuffers();this.resetFeatureMaps();this.resetCameraAndKeyboardControls()}handleViewerChanged(i,t){this.setupInteractionHandler();this.setDepthBuffers();this.setFeatureMaps();this.setCameraAndKeyboardControls();if(t!=null){t.removeEventListener("frameDrawn",this.handleSetProjectionMatrix)}if(i!=null){i.addEventListener("frameDrawn",this.handleSetProjectionMatrix)}this.handleSetProjectionMatrix()}render(){return s(n,{key:"ce2867d4a624dabf607b9de837e73a0a0c40eaf9"},s("vertex-viewer-dom-renderer",{key:"7d2dc3d75ca1818ba7b9b292ccbe1db7ac5c7ac8",viewer:this.viewer,drawMode:"2d"},this.pins.map((i=>s("vertex-viewer-pin-group",{id:`pin-group-${i.id}`,"data-is-dom-group-element":true,pin:i,elementBounds:this.elementBounds,pinModel:this.pinModel,pinController:this.pinController,projectionViewMatrix:this.projectionViewMatrix,selected:this.selectedPinId===i.id})))))}setupController(){const i=this.accentColor||this.primaryColor?{accentColor:this.accentColor,primaryColor:this.primaryColor}:undefined;this.pinController=new r(this.pinModel,this.mode,this.tool,i)}clearInteractionHandler(){var i;(i=this.registeredInteractionHandler)===null||i===void 0?void 0:i.then((i=>i.dispose()));this.registeredInteractionHandler=undefined}setupInteractionHandler(){var i;const t=window.getComputedStyle(this.hostEl);const e=t.getPropertyValue("--viewer-pin-tool-initial-label-offset-x").trim();const s=Number.isFinite(Number.parseInt(e))?Number.parseInt(e):20;const n=t.getPropertyValue("--viewer-pin-tool-initial-label-offset-y").trim();const o=Number.isFinite(Number.parseInt(n))?Number.parseInt(n):20;this.clearInteractionHandler();if(this.pinController!=null){this.registeredInteractionHandler=(i=this.viewer)===null||i===void 0?void 0:i.registerInteractionHandler(new x(this.pinController,s,o))}}clearModelListeners(){var i,t,e;(i=this.onEntitiesChangedHandler)===null||i===void 0?void 0:i.dispose();this.onEntitiesChangedHandler=undefined;(t=this.onEntityAddedHandler)===null||t===void 0?void 0:t.dispose();this.onEntityAddedHandler=undefined;(e=this.resizeObserver)===null||e===void 0?void 0:e.disconnect()}updateViewport(){this.elementBounds=m(this.hostEl)}setDepthBuffers(){if(this.pins.length>0&&this.viewer!=null&&this.viewer.depthBuffers==null){this.stateMap.shouldClearDepthBuffers=true;this.viewer.depthBuffers="final"}}resetDepthBuffers(){if(this.stateMap.shouldClearDepthBuffers&&this.viewer!=null){this.viewer.depthBuffers=undefined;this.stateMap.shouldClearDepthBuffers=undefined}}setFeatureMaps(){if((this.pins.length>0||this.mode==="edit")&&this.viewer!=null&&this.viewer.featureMaps==null){this.stateMap.shouldClearFeatureMaps=true;this.viewer.featureMaps="final"}}resetFeatureMaps(){if(this.stateMap.shouldClearFeatureMaps&&this.viewer!=null){this.viewer.featureMaps=undefined;this.stateMap.shouldClearFeatureMaps=undefined}}setCameraAndKeyboardControls(){if(this.mode==="edit"&&this.viewer!=null){if(this.viewer.cameraControls){this.stateMap.shouldClearCameraControls=true;this.viewer.cameraControls=false}if(this.viewer.keyboardControls){this.stateMap.shouldClearKeyboardControls=true;this.viewer.keyboardControls=false}}}resetCameraAndKeyboardControls(){if(this.viewer!=null){if(this.stateMap.shouldClearCameraControls){this.viewer.cameraControls=true;this.stateMap.shouldClearCameraControls=undefined}if(this.stateMap.shouldClearKeyboardControls){this.viewer.keyboardControls=true;this.stateMap.shouldClearKeyboardControls=undefined}}}get hostEl(){return this}static get watchers(){return{mode:[{watchModeChange:0}],tool:[{watchTypeChange:0}],accentColor:[{watchAccentColorChange:0}],primaryColor:[{watchPrimaryColorChange:0}],pins:[{watchPinsChange:0}],viewer:[{handleViewerChanged:0}]}}static get style(){return P()}},[1,"vertex-viewer-pin-tool",{pinController:[1040],pinModel:[16],viewer:[16],tool:[1025],mode:[1025],primaryColor:[1025,"primary-color"],accentColor:[1025,"accent-color"],pins:[32],selectedPinId:[32],elementBounds:[32],projectionViewMatrix:[32]},undefined,{mode:[{watchModeChange:0}],tool:[{watchTypeChange:0}],accentColor:[{watchAccentColorChange:0}],primaryColor:[{watchPrimaryColorChange:0}],pins:[{watchPinsChange:0}],viewer:[{handleViewerChanged:0}]}]);function B(){if(typeof customElements==="undefined"){return}const t=["vertex-viewer-pin-tool","vertex-viewer-dom-element","vertex-viewer-dom-renderer","vertex-viewer-icon","vertex-viewer-pin-group","vertex-viewer-pin-label","vertex-viewer-pin-label-line"];t.forEach((t=>{switch(t){case"vertex-viewer-pin-tool":if(!customElements.get(i(t))){customElements.define(i(t),j)}break;case"vertex-viewer-dom-element":if(!customElements.get(i(t))){w()}break;case"vertex-viewer-dom-renderer":if(!customElements.get(i(t))){C()}break;case"vertex-viewer-icon":if(!customElements.get(i(t))){b()}break;case"vertex-viewer-pin-group":if(!customElements.get(i(t))){y()}break;case"vertex-viewer-pin-label":if(!customElements.get(i(t))){l()}break;case"vertex-viewer-pin-label-line":if(!customElements.get(i(t))){g()}break}}))}B();const k=j;const E=B;export{k as VertexViewerPinTool,E as defineCustomElement};
|
|
4
|
+
import{t as i,p as t,H as e,h as s,e as n}from"./p-Bb32XUUS.js";import{a as o,d as l,P as r}from"./p-DZ19Puk0.js";import{p as h}from"./p-VBSTxIAq.js";import{b as d}from"./p-CHdoymO5.js";import{l as a,p as u}from"./p-B-ToCp8-.js";import{g as v}from"./p-BVGibtJW.js";import{E as c}from"./p-CFus3r7d.js";import{E as p}from"./p-CgDHcgLJ.js";import{P as f}from"./p-BWUNIo7P.js";import{g as m}from"./p-Bg-uS9BH.js";import{d as w}from"./p-BGmfwtuq.js";import{d as C}from"./p-DnJlSbRF.js";import{d as b}from"./p-Bkm6H5uq.js";import{d as y}from"./p-C4G5JBBw.js";import{d as g}from"./p-B5FnyWQm.js";class x{get elementRect(){return this.rectObserver.rect}constructor(i,t,e){this.rectObserver=new c;this.droppableSurfaces=[p.PRECISE_SURFACE,p.IMPRECISE_SURFACE,p.GENERIC_GEOMETRY];this.handlePointerMove=async i=>{const t=await this.isDroppableSurface(i);const e=this.controller.getDraggable();if(e!=null&&t){this.handleDrag(e,i)}if(this.controller.getDraggable()==null&&this.controller.getToolMode()==="edit"&&t){this.addCursor(this.getCursorType())}else{this.clearCursor()}};this.handleDrag=async(i,t)=>{const e=v(t,this.elementRect);const s=await this.getWorldPositionForPoint(e);if(s!=null){this.controller.updateDraggable({...i,lastPoint:e},s)}};this.handlePointerDown=async i=>{const t=t=>{const s=h.distance(h.create(i.clientX,t.clientY),h.create(t.clientX,t.clientY));if(s<=2&&i.buttons!==2){if(this.controller.getToolMode()==="edit"){const t=v(i,this.elementRect);this.handlePlacePin(t)}}e()};const e=()=>{window.removeEventListener("pointerup",t)};window.addEventListener("pointerup",t);return{dispose:e}};this.handlePointerUp=async()=>{const i=this.controller.getDraggable();const t=i===null||i===void 0?void 0:i.lastPoint;this.controller.setDraggable(undefined);if(t!=null&&i!=null){this.ifInitialized((async({api:e})=>{var s,n,o,l,r,h;const[d]=await e.hitItems(t);if((d===null||d===void 0?void 0:d.hitPoint)!=null&&((s=d===null||d===void 0?void 0:d.hitPoint)===null||s===void 0?void 0:s.x)!=null&&((n=d===null||d===void 0?void 0:d.hitPoint)===null||n===void 0?void 0:n.y)!=null&&((o=d===null||d===void 0?void 0:d.hitPoint)===null||o===void 0?void 0:o.z)!=null){this.controller.updateDraggable({...i,lastPoint:t},{x:(l=d===null||d===void 0?void 0:d.hitPoint)===null||l===void 0?void 0:l.x,y:d===null||d===void 0?void 0:d.hitPoint.y,z:d===null||d===void 0?void 0:d.hitPoint.z},(h=(r=d===null||d===void 0?void 0:d.partId)===null||r===void 0?void 0:r.hex)!==null&&h!==void 0?h:undefined)}}))}};this.controller=i;this.xOffset=t;this.yOffset=e}initialize(i,t){this.element=i;this.api=t;this.rectObserver.observe(i);i.addEventListener("pointermove",this.handlePointerMove);i.addEventListener("pointerdown",this.handlePointerDown);window.addEventListener("pointerup",this.handlePointerUp)}dispose(){var i,t;this.rectObserver.disconnect();this.clearCursor();(i=this.element)===null||i===void 0?void 0:i.removeEventListener("pointermove",this.handlePointerMove);(t=this.element)===null||t===void 0?void 0:t.removeEventListener("pointerdown",this.handlePointerDown);window.removeEventListener("pointerup",this.handlePointerUp);this.element=undefined;this.api=undefined}async getWorldPositionForPoint(i){return this.ifInitialized((async({api:t})=>{const e=await t.getWorldPointFromViewport(i);return e}))}async handlePlacePin(i,t){this.ifInitialized((async({api:e})=>{var s,n,l,r,h,a;const[u]=await e.hitItems(i);if((u===null||u===void 0?void 0:u.hitPoint)!=null&&this.elementRect!=null){if((u===null||u===void 0?void 0:u.hitPoint)!=null&&(u===null||u===void 0?void 0:u.hitPoint.x)!=null&&(u===null||u===void 0?void 0:u.hitPoint.y)!=null&&(u===null||u===void 0?void 0:u.hitPoint.z)!=null){const e=t!=null?t.id:d.create();const v=this.controller.getStyleAttributes()!=null?{style:this.controller.getStyleAttributes()}:undefined;switch(this.controller.getToolType()){case"pin-icon":this.controller.setPin({type:"icon",id:e,worldPosition:{x:(s=u===null||u===void 0?void 0:u.hitPoint)===null||s===void 0?void 0:s.x,y:u===null||u===void 0?void 0:u.hitPoint.y,z:u===null||u===void 0?void 0:u.hitPoint.z},partId:(l=(n=u===null||u===void 0?void 0:u.itemId)===null||n===void 0?void 0:n.hex)!==null&&l!==void 0?l:undefined,attributes:v});break;case"pin-text":const d=t==null;const c=o(i,this.elementRect,d,this.xOffset,this.yOffset);this.controller.setPin({type:"text",id:e,worldPosition:{x:(r=u===null||u===void 0?void 0:u.hitPoint)===null||r===void 0?void 0:r.x,y:u===null||u===void 0?void 0:u.hitPoint.y,z:u===null||u===void 0?void 0:u.hitPoint.z},partId:(a=(h=u===null||u===void 0?void 0:u.itemId)===null||h===void 0?void 0:h.hex)!==null&&a!==void 0?a:undefined,label:{point:c},attributes:v});this.controller.setSelectedPinId(e);break}}}else{this.controller.setSelectedPinId()}}))}getCursorType(){switch(this.controller.getToolType()){case"pin-icon":return u;case"pin-text":return a}}addCursor(i){this.clearCursor();this.cursor=this.ifInitialized((({api:t})=>t.addCursor(i)))}async isDroppableSurface(i){var t;const e=v(i,this.elementRect);const s=await((t=this.api)===null||t===void 0?void 0:t.getEntityTypeAtPoint(e));return s!=null&&this.droppableSurfaces.includes(s)}ifInitialized(i){if(this.element!=null&&this.api!=null){return i({element:this.element,api:this.api})}else{throw new Error("Pins interaction handler not initialized.")}}clearCursor(){var i;(i=this.cursor)===null||i===void 0?void 0:i.dispose();this.cursor=undefined}}const P=()=>`:host{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden;pointer-events:none;--viewer-pin-tool-initial-label-offset-x:20;--viewer-pin-tool-initial-label-offset-y:20}`;const j=t(class i extends e{constructor(i){super();if(i!==false){this.__registerHost()}this.__attachShadow();this.pinModel=new f;this.tool="pin-icon";this.mode="view";this.pins=[];this.stateMap={};this.handleSetProjectionMatrix=()=>{var i,t;this.projectionViewMatrix=(t=(i=this.viewer)===null||i===void 0?void 0:i.frame)===null||t===void 0?void 0:t.scene.camera.projectionViewMatrix}}watchModeChange(){var i;(i=this.pinController)===null||i===void 0?void 0:i.setToolMode(this.mode);this.setupInteractionHandler();if(this.mode==="edit"){this.setFeatureMaps();this.setCameraAndKeyboardControls()}else{this.resetFeatureMaps();this.resetCameraAndKeyboardControls()}}watchTypeChange(){var i;(i=this.pinController)===null||i===void 0?void 0:i.setToolType(this.tool);this.setupInteractionHandler()}watchAccentColorChange(){var i;(i=this.pinController)===null||i===void 0?void 0:i.setAccentColor(this.accentColor);this.setupInteractionHandler()}watchPrimaryColorChange(){var i;(i=this.pinController)===null||i===void 0?void 0:i.setPrimaryColor(this.primaryColor);this.setupInteractionHandler()}watchPinsChange(){if(this.pins.length>0){this.setDepthBuffers();this.setFeatureMaps()}else{this.resetDepthBuffers();this.resetFeatureMaps()}}connectedCallback(){this.setupInteractionHandler();this.setDepthBuffers();this.setFeatureMaps();this.setCameraAndKeyboardControls()}componentWillLoad(){this.updateViewport();this.setupController();this.setupInteractionHandler();this.setDepthBuffers();this.setFeatureMaps();this.setCameraAndKeyboardControls();this.pinModel.onEntitiesChanged((i=>{this.pins=i}));this.pinModel.onSelectionChange((i=>{this.selectedPinId=i}));this.handleViewerChanged(this.viewer,undefined)}componentDidLoad(){this.resizeObserver=new ResizeObserver((()=>this.updateViewport()));this.resizeObserver.observe(this.hostEl)}disconnectedCallback(){this.clearInteractionHandler();this.clearModelListeners();this.resetDepthBuffers();this.resetFeatureMaps();this.resetCameraAndKeyboardControls()}handleViewerChanged(i,t){this.setupInteractionHandler();this.setDepthBuffers();this.setFeatureMaps();this.setCameraAndKeyboardControls();if(t!=null){t.removeEventListener("frameDrawn",this.handleSetProjectionMatrix)}if(i!=null){i.addEventListener("frameDrawn",this.handleSetProjectionMatrix)}this.handleSetProjectionMatrix()}render(){return s(n,{key:"ce2867d4a624dabf607b9de837e73a0a0c40eaf9"},s("vertex-viewer-dom-renderer",{key:"7d2dc3d75ca1818ba7b9b292ccbe1db7ac5c7ac8",viewer:this.viewer,drawMode:"2d"},this.pins.map((i=>s("vertex-viewer-pin-group",{id:`pin-group-${i.id}`,"data-is-dom-group-element":true,pin:i,elementBounds:this.elementBounds,pinModel:this.pinModel,pinController:this.pinController,projectionViewMatrix:this.projectionViewMatrix,selected:this.selectedPinId===i.id})))))}setupController(){const i=this.accentColor||this.primaryColor?{accentColor:this.accentColor,primaryColor:this.primaryColor}:undefined;this.pinController=new r(this.pinModel,this.mode,this.tool,i)}clearInteractionHandler(){var i;(i=this.registeredInteractionHandler)===null||i===void 0?void 0:i.then((i=>i.dispose()));this.registeredInteractionHandler=undefined}setupInteractionHandler(){var i;const t=window.getComputedStyle(this.hostEl);const e=t.getPropertyValue("--viewer-pin-tool-initial-label-offset-x").trim();const s=Number.isFinite(Number.parseInt(e))?Number.parseInt(e):20;const n=t.getPropertyValue("--viewer-pin-tool-initial-label-offset-y").trim();const o=Number.isFinite(Number.parseInt(n))?Number.parseInt(n):20;this.clearInteractionHandler();if(this.pinController!=null){this.registeredInteractionHandler=(i=this.viewer)===null||i===void 0?void 0:i.registerInteractionHandler(new x(this.pinController,s,o))}}clearModelListeners(){var i,t,e;(i=this.onEntitiesChangedHandler)===null||i===void 0?void 0:i.dispose();this.onEntitiesChangedHandler=undefined;(t=this.onEntityAddedHandler)===null||t===void 0?void 0:t.dispose();this.onEntityAddedHandler=undefined;(e=this.resizeObserver)===null||e===void 0?void 0:e.disconnect()}updateViewport(){this.elementBounds=m(this.hostEl)}setDepthBuffers(){if(this.pins.length>0&&this.viewer!=null&&this.viewer.depthBuffers==null){this.stateMap.shouldClearDepthBuffers=true;this.viewer.depthBuffers="final"}}resetDepthBuffers(){if(this.stateMap.shouldClearDepthBuffers&&this.viewer!=null){this.viewer.depthBuffers=undefined;this.stateMap.shouldClearDepthBuffers=undefined}}setFeatureMaps(){if((this.pins.length>0||this.mode==="edit")&&this.viewer!=null&&this.viewer.featureMaps==null){this.stateMap.shouldClearFeatureMaps=true;this.viewer.featureMaps="final"}}resetFeatureMaps(){if(this.stateMap.shouldClearFeatureMaps&&this.viewer!=null){this.viewer.featureMaps=undefined;this.stateMap.shouldClearFeatureMaps=undefined}}setCameraAndKeyboardControls(){if(this.mode==="edit"&&this.viewer!=null){if(this.viewer.cameraControls){this.stateMap.shouldClearCameraControls=true;this.viewer.cameraControls=false}if(this.viewer.keyboardControls){this.stateMap.shouldClearKeyboardControls=true;this.viewer.keyboardControls=false}}}resetCameraAndKeyboardControls(){if(this.viewer!=null){if(this.stateMap.shouldClearCameraControls){this.viewer.cameraControls=true;this.stateMap.shouldClearCameraControls=undefined}if(this.stateMap.shouldClearKeyboardControls){this.viewer.keyboardControls=true;this.stateMap.shouldClearKeyboardControls=undefined}}}get hostEl(){return this}static get watchers(){return{mode:[{watchModeChange:0}],tool:[{watchTypeChange:0}],accentColor:[{watchAccentColorChange:0}],primaryColor:[{watchPrimaryColorChange:0}],pins:[{watchPinsChange:0}],viewer:[{handleViewerChanged:0}]}}static get style(){return P()}},[1,"vertex-viewer-pin-tool",{pinController:[1040],pinModel:[16],viewer:[16],tool:[1025],mode:[1025],primaryColor:[1025,"primary-color"],accentColor:[1025,"accent-color"],pins:[32],selectedPinId:[32],elementBounds:[32],projectionViewMatrix:[32]},undefined,{mode:[{watchModeChange:0}],tool:[{watchTypeChange:0}],accentColor:[{watchAccentColorChange:0}],primaryColor:[{watchPrimaryColorChange:0}],pins:[{watchPinsChange:0}],viewer:[{handleViewerChanged:0}]}]);function B(){if(typeof customElements==="undefined"){return}const t=["vertex-viewer-pin-tool","vertex-viewer-dom-element","vertex-viewer-dom-renderer","vertex-viewer-icon","vertex-viewer-pin-group","vertex-viewer-pin-label","vertex-viewer-pin-label-line"];t.forEach((t=>{switch(t){case"vertex-viewer-pin-tool":if(!customElements.get(i(t))){customElements.define(i(t),j)}break;case"vertex-viewer-dom-element":if(!customElements.get(i(t))){w()}break;case"vertex-viewer-dom-renderer":if(!customElements.get(i(t))){C()}break;case"vertex-viewer-icon":if(!customElements.get(i(t))){b()}break;case"vertex-viewer-pin-group":if(!customElements.get(i(t))){y()}break;case"vertex-viewer-pin-label":if(!customElements.get(i(t))){l()}break;case"vertex-viewer-pin-label-line":if(!customElements.get(i(t))){g()}break}}))}B();const k=j;const E=B;export{k as VertexViewerPinTool,E as defineCustomElement};
|
|
5
5
|
//# sourceMappingURL=vertex-viewer-pin-tool.js.map
|