@vertexvis/viewer 0.22.0-canary.3 → 0.22.0-testing.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs.js +4 -1
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/cjs/multiElementInteractionHandler-93bd9593.js.map +1 -1
- package/dist/cjs/{queries-d9cd5ec1.js → queries-918bb133.js} +315 -41
- package/dist/cjs/queries-918bb133.js.map +1 -0
- package/dist/cjs/vertex-viewer.cjs.entry.js +3 -256
- package/dist/cjs/vertex-viewer.cjs.entry.js.map +1 -1
- package/dist/collection/index.js +1 -0
- package/dist/collection/index.js.map +1 -1
- package/dist/collection/lib/interactions/baseInteractionHandler.js.map +1 -1
- package/dist/collection/lib/interactions/index.js +1 -0
- package/dist/collection/lib/interactions/index.js.map +1 -1
- package/dist/collection/lib/interactions/mouseInteractions.js +6 -0
- package/dist/collection/lib/interactions/mouseInteractions.js.map +1 -1
- package/dist/collection/lib/interactions/pointerInteractionHandler.js +6 -0
- package/dist/collection/lib/interactions/pointerInteractionHandler.js.map +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/multiElementInteractionHandler.js.map +1 -1
- package/dist/components/queries.js +269 -2
- package/dist/components/queries.js.map +1 -1
- package/dist/components/vertex-viewer.js +3 -256
- package/dist/components/vertex-viewer.js.map +1 -1
- package/dist/esm/index.js +3 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.mjs +3 -1
- package/dist/esm/multiElementInteractionHandler-8b48d16e.js.map +1 -1
- package/dist/esm/{queries-2834b01d.js → queries-e3684cb0.js} +270 -3
- package/dist/esm/queries-e3684cb0.js.map +1 -0
- package/dist/esm/vertex-viewer.entry.js +3 -256
- package/dist/esm/vertex-viewer.entry.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/lib/interactions/baseInteractionHandler.d.ts +6 -6
- package/dist/types/lib/interactions/index.d.ts +1 -0
- package/dist/types/lib/interactions/mouseInteractions.d.ts +2 -0
- package/dist/types/lib/interactions/pointerInteractionHandler.d.ts +2 -0
- package/dist/viewer/index.esm.js +1 -1
- package/dist/viewer/index.esm.js.map +1 -1
- package/dist/viewer/p-0ab3b3cc.js +5 -0
- package/dist/viewer/p-0ab3b3cc.js.map +1 -0
- package/dist/viewer/p-8a56c008.entry.js +5 -0
- package/dist/viewer/p-8a56c008.entry.js.map +1 -0
- package/dist/viewer/p-bf67f570.js.map +1 -1
- package/dist/viewer/viewer.esm.js +1 -1
- package/package.json +7 -7
- package/dist/cjs/queries-d9cd5ec1.js.map +0 -1
- package/dist/esm/queries-2834b01d.js.map +0 -1
- package/dist/viewer/p-339774b3.js +0 -5
- package/dist/viewer/p-339774b3.js.map +0 -1
- package/dist/viewer/p-b8dfa0c1.entry.js +0 -5
- package/dist/viewer/p-b8dfa0c1.entry.js.map +0 -1
package/dist/collection/index.js
CHANGED
|
@@ -16,6 +16,7 @@ export * from './lib/cursors';
|
|
|
16
16
|
export * from './lib/formatter';
|
|
17
17
|
export * from './lib/interactions/interactionHandler';
|
|
18
18
|
export * from './lib/interactions/keyInteraction';
|
|
19
|
+
export * from './lib/interactions/pointerInteractionHandler';
|
|
19
20
|
export * from './lib/measurement';
|
|
20
21
|
export * from './lib/pins';
|
|
21
22
|
export { Camera, CrossSectioner, Raycaster, RootQuery, Scene, SceneItemOperationsBuilder, SceneItemQueryExecutor, SceneOperationBuilder, } from './lib/scenes';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,aAAa,EAAE,CAAC;AAEzB,cAAc,cAAc,CAAC;AAC7B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0CAA0C,CAAC;AACzD,cAAc,mCAAmC,CAAC;AAClD,cAAc,yCAAyC,CAAC;AAExD,cAAc,eAAe,CAAC;AAE9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uCAAuC,CAAC;AACtD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,MAAM,EACN,cAAc,EACd,SAAS,EAGT,SAAS,EACT,KAAK,EAEL,0BAA0B,EAC1B,sBAAsB,EACtB,qBAAqB,GAGtB,MAAM,cAAc,CAAC;AACtB,cAAc,kBAAkB,CAAC;AACjC,OAAO,EACL,eAAe,EACf,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,KAAK,IAAI,aAAa,EACtB,UAAU,IAAI,kBAAkB,EAChC,UAAU,IAAI,kBAAkB,EAChC,uBAAuB,IAAI,0BAA0B,EACrD,sBAAsB,IAAI,yBAAyB,EACnD,wBAAwB,EACxB,YAAY,EACZ,iBAAiB,EACjB,QAAQ,GACT,MAAM,aAAa,CAAC;AACrB,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC","sourcesContent":["/**\n * @module Viewer\n */\nimport * as ColorMaterial from './lib/scenes/colorMaterial';\n\nexport { ColorMaterial };\n\nexport * from './components';\nexport * from './components/scene-tree/lib';\nexport * from './components/scene-tree/types';\nexport * from './components/viewer-box-query-tool/types';\nexport * from './components/viewer-toolbar/types';\nexport * from './components/viewer-toolbar-group/types';\nexport { Config } from './lib/config';\nexport * from './lib/cursors';\nexport { Environment } from './lib/environment';\nexport * from './lib/formatter';\nexport * from './lib/interactions/interactionHandler';\nexport * from './lib/interactions/keyInteraction';\nexport * from './lib/measurement';\nexport * from './lib/pins';\nexport {\n Camera,\n CrossSectioner,\n Raycaster,\n RaycasterOptions,\n ResetViewOptions,\n RootQuery,\n Scene,\n SceneExecutionOptions,\n SceneItemOperationsBuilder,\n SceneItemQueryExecutor,\n SceneOperationBuilder,\n SceneViewStateFeature,\n TerminalItemOperationBuilder,\n} from './lib/scenes';\nexport * from './lib/transforms';\nexport {\n CrossSectioning,\n EntityType,\n FrameCameraBase,\n LoadableResource,\n Frame as ReceivedFrame,\n FrameImage as ReceivedFrameImage,\n FrameScene as ReceivedFrameScene,\n FrameOrthographicCamera as ReceivedOrthographicCamera,\n FramePerspectiveCamera as ReceivedPerspectiveCamera,\n SceneViewStateIdentifier,\n StandardView,\n SynchronizedClock,\n Viewport,\n} from './lib/types';\nexport * from './lib/types/distanceUnits';\nexport * from './lib/types/markup';\nexport * from './lib/volume-intersection';\n\nimport { TapEventDetails } from './lib/interactions/tapEventDetails';\n\nexport { TapEventDetails };\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,aAAa,EAAE,CAAC;AAEzB,cAAc,cAAc,CAAC;AAC7B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0CAA0C,CAAC;AACzD,cAAc,mCAAmC,CAAC;AAClD,cAAc,yCAAyC,CAAC;AAExD,cAAc,eAAe,CAAC;AAE9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uCAAuC,CAAC;AACtD,cAAc,mCAAmC,CAAC;AAClD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,MAAM,EACN,cAAc,EACd,SAAS,EAGT,SAAS,EACT,KAAK,EAEL,0BAA0B,EAC1B,sBAAsB,EACtB,qBAAqB,GAGtB,MAAM,cAAc,CAAC;AACtB,cAAc,kBAAkB,CAAC;AACjC,OAAO,EACL,eAAe,EACf,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,KAAK,IAAI,aAAa,EACtB,UAAU,IAAI,kBAAkB,EAChC,UAAU,IAAI,kBAAkB,EAChC,uBAAuB,IAAI,0BAA0B,EACrD,sBAAsB,IAAI,yBAAyB,EACnD,wBAAwB,EACxB,YAAY,EACZ,iBAAiB,EACjB,QAAQ,GACT,MAAM,aAAa,CAAC;AACrB,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC","sourcesContent":["/**\n * @module Viewer\n */\nimport * as ColorMaterial from './lib/scenes/colorMaterial';\n\nexport { ColorMaterial };\n\nexport * from './components';\nexport * from './components/scene-tree/lib';\nexport * from './components/scene-tree/types';\nexport * from './components/viewer-box-query-tool/types';\nexport * from './components/viewer-toolbar/types';\nexport * from './components/viewer-toolbar-group/types';\nexport { Config } from './lib/config';\nexport * from './lib/cursors';\nexport { Environment } from './lib/environment';\nexport * from './lib/formatter';\nexport * from './lib/interactions/interactionHandler';\nexport * from './lib/interactions/keyInteraction';\nexport * from './lib/interactions/pointerInteractionHandler';\nexport * from './lib/measurement';\nexport * from './lib/pins';\nexport {\n Camera,\n CrossSectioner,\n Raycaster,\n RaycasterOptions,\n ResetViewOptions,\n RootQuery,\n Scene,\n SceneExecutionOptions,\n SceneItemOperationsBuilder,\n SceneItemQueryExecutor,\n SceneOperationBuilder,\n SceneViewStateFeature,\n TerminalItemOperationBuilder,\n} from './lib/scenes';\nexport * from './lib/transforms';\nexport {\n CrossSectioning,\n EntityType,\n FrameCameraBase,\n LoadableResource,\n Frame as ReceivedFrame,\n FrameImage as ReceivedFrameImage,\n FrameScene as ReceivedFrameScene,\n FrameOrthographicCamera as ReceivedOrthographicCamera,\n FramePerspectiveCamera as ReceivedPerspectiveCamera,\n SceneViewStateIdentifier,\n StandardView,\n SynchronizedClock,\n Viewport,\n} from './lib/types';\nexport * from './lib/types/distanceUnits';\nexport * from './lib/types/markup';\nexport * from './lib/volume-intersection';\n\nimport { TapEventDetails } from './lib/interactions/tapEventDetails';\n\nexport { TapEventDetails };\n"]}
|
|
@@ -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 SCROLL_WHEEL_DELTA_PERCENTAGES = [0.2, 0.15, 0.25, 0.25, 0.15];\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 = this.rotateInteraction;\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 computedBodyStyle?: CSSStyleDeclaration;\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.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 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\n SCROLL_WHEEL_DELTA_PERCENTAGES.forEach((percentage, index) => {\n window.setTimeout(() => {\n if (this.interactionApi != null) {\n const zoomDelta = delta * percentage;\n this.zoomInteraction.zoomToPoint(\n point,\n zoomDelta,\n this.interactionApi\n );\n }\n }, index * 2);\n });\n }\n }\n\n protected wheelDeltaToPixels(deltaY: number, deltaMode: number): number {\n if (this.computedBodyStyle == null) {\n this.computedBodyStyle = window.getComputedStyle(document.body);\n }\n\n const defaultLineHeight =\n this.computedBodyStyle.fontSize != null &&\n this.computedBodyStyle.fontSize !== '' &&\n !isNaN(parseFloat(this.computedBodyStyle.fontSize))\n ? parseFloat(this.computedBodyStyle.fontSize) * DEFAULT_LINE_HEIGHT\n : DEFAULT_FONT_SIZE * DEFAULT_LINE_HEIGHT;\n\n if (deltaMode === 1) {\n // deltaMode 1 corresponds to DOM_DELTA_LINE, which computes deltas in lines\n return this.computedBodyStyle.lineHeight != null &&\n this.computedBodyStyle.lineHeight !== '' &&\n !isNaN(parseFloat(this.computedBodyStyle.lineHeight))\n ? deltaY * parseFloat(this.computedBodyStyle.lineHeight)\n : deltaY * defaultLineHeight;\n } else if (deltaMode === 2) {\n // deltaMode 2 corresponds to DOM_DELTA_PAGE, which computes deltas in pages\n return this.computedBodyStyle.height != null &&\n this.computedBodyStyle.height !== '' &&\n !isNaN(parseFloat(this.computedBodyStyle.height))\n ? deltaY * parseFloat(this.computedBodyStyle.height)\n : deltaY * window.innerHeight;\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 SCROLL_WHEEL_DELTA_PERCENTAGES = [0.2, 0.15, 0.25, 0.25, 0.15];\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 = this.rotateInteraction;\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 computedBodyStyle?: CSSStyleDeclaration;\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 protected rotateInteraction: RotateInteraction,\n protected rotatePointInteraction: RotatePointInteraction,\n protected zoomInteraction: ZoomInteraction,\n protected panInteraction: PanInteraction,\n protected twistInteraction: TwistInteraction,\n protected pivotInteraction: PivotInteraction,\n private getConfig: ConfigProvider\n ) {\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 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\n SCROLL_WHEEL_DELTA_PERCENTAGES.forEach((percentage, index) => {\n window.setTimeout(() => {\n if (this.interactionApi != null) {\n const zoomDelta = delta * percentage;\n this.zoomInteraction.zoomToPoint(\n point,\n zoomDelta,\n this.interactionApi\n );\n }\n }, index * 2);\n });\n }\n }\n\n protected wheelDeltaToPixels(deltaY: number, deltaMode: number): number {\n if (this.computedBodyStyle == null) {\n this.computedBodyStyle = window.getComputedStyle(document.body);\n }\n\n const defaultLineHeight =\n this.computedBodyStyle.fontSize != null &&\n this.computedBodyStyle.fontSize !== '' &&\n !isNaN(parseFloat(this.computedBodyStyle.fontSize))\n ? parseFloat(this.computedBodyStyle.fontSize) * DEFAULT_LINE_HEIGHT\n : DEFAULT_FONT_SIZE * DEFAULT_LINE_HEIGHT;\n\n if (deltaMode === 1) {\n // deltaMode 1 corresponds to DOM_DELTA_LINE, which computes deltas in lines\n return this.computedBodyStyle.lineHeight != null &&\n this.computedBodyStyle.lineHeight !== '' &&\n !isNaN(parseFloat(this.computedBodyStyle.lineHeight))\n ? deltaY * parseFloat(this.computedBodyStyle.lineHeight)\n : deltaY * defaultLineHeight;\n } else if (deltaMode === 2) {\n // deltaMode 2 corresponds to DOM_DELTA_PAGE, which computes deltas in pages\n return this.computedBodyStyle.height != null &&\n this.computedBodyStyle.height !== '' &&\n !isNaN(parseFloat(this.computedBodyStyle.height))\n ? deltaY * parseFloat(this.computedBodyStyle.height)\n : deltaY * window.innerHeight;\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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/lib/interactions/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,0BAA0B;AAC1B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC","sourcesContent":["/**\n * @module Interactions\n */\n/* istanbul ignore file */\nexport * from './flyToPartKeyInteraction';\nexport * from './interactionApi';\nexport * from './interactionApiOrthographic';\nexport * from './interactionApiPerspective';\nexport * from './interactionEvent';\nexport * from './interactionHandler';\nexport * from './interactionHandler';\nexport * from './keyInteraction';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/lib/interactions/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,0BAA0B;AAC1B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC","sourcesContent":["/**\n * @module Interactions\n */\n/* istanbul ignore file */\nexport * from './flyToPartKeyInteraction';\nexport * from './interactionApi';\nexport * from './interactionApiOrthographic';\nexport * from './interactionApiPerspective';\nexport * from './interactionEvent';\nexport * from './interactionHandler';\nexport * from './interactionHandler';\nexport * from './keyInteraction';\nexport * from './pointerInteractionHandler';\n"]}
|
|
@@ -102,6 +102,12 @@ export class ZoomInteraction extends MouseInteraction {
|
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
|
+
setInteractionTimeout(ms) {
|
|
106
|
+
this.interactionTimeout = ms;
|
|
107
|
+
}
|
|
108
|
+
getInteractionTimeout() {
|
|
109
|
+
return this.interactionTimeout;
|
|
110
|
+
}
|
|
105
111
|
endDrag(event, api) {
|
|
106
112
|
super.endDrag(event, api);
|
|
107
113
|
this.stopInteractionTimer();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mouseInteractions.js","sourceRoot":"","sources":["../../../../../src/lib/interactions/mouseInteractions.ts"],"names":[],"mappings":"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","sourcesContent":["import { Point } from '@vertexvis/geometry';\n\nimport { getMouseClientPosition } from '../dom';\nimport { InteractionType } from './baseInteractionHandler';\nimport { InteractionApi } from './interactionApi';\n\nexport abstract class MouseInteraction {\n protected currentPosition: Point.Point | undefined;\n\n protected abstract type: InteractionType;\n\n public setPosition(position?: Point.Point): void {\n this.currentPosition = position;\n }\n\n public getPosition(): Point.Point | undefined {\n return this.currentPosition;\n }\n\n public getType(): InteractionType {\n return this.type;\n }\n\n public beginDrag(\n event: MouseEvent,\n canvasPosition: Point.Point,\n api: InteractionApi,\n element: HTMLElement\n ): void {\n // noop\n }\n\n public drag(event: MouseEvent, api: InteractionApi): void {\n // noop\n }\n\n public endDrag(event: MouseEvent, api: InteractionApi): void {\n if (this.currentPosition != null) {\n api.endInteraction();\n this.currentPosition = undefined;\n }\n }\n\n public zoom(delta: number, api: InteractionApi): void {\n // noop\n }\n}\n\nexport class RotateInteraction extends MouseInteraction {\n public type: InteractionType = 'rotate';\n\n public beginDrag(\n event: MouseEvent,\n canvasPosition: Point.Point,\n api: InteractionApi\n ): void {\n if (this.currentPosition == null) {\n this.currentPosition = Point.create(event.screenX, event.screenY);\n api.beginInteraction();\n }\n }\n\n public drag(event: MouseEvent, api: InteractionApi): void {\n if (this.currentPosition != null) {\n const position = Point.create(event.screenX, event.screenY);\n const delta = Point.subtract(position, this.currentPosition);\n\n api.rotateCamera(delta);\n this.currentPosition = position;\n }\n }\n\n public endDrag(event: MouseEvent, api: InteractionApi): void {\n super.endDrag(event, api);\n }\n}\n\nexport class RotatePointInteraction extends MouseInteraction {\n public type: InteractionType = 'rotate-point';\n\n private startingPosition?: Point.Point;\n\n public beginDrag(\n event: MouseEvent,\n canvasPosition: Point.Point,\n api: InteractionApi\n ): void {\n if (this.currentPosition == null) {\n this.currentPosition = Point.create(event.screenX, event.screenY);\n this.startingPosition = canvasPosition;\n api.beginInteraction();\n }\n }\n\n public drag(event: MouseEvent, api: InteractionApi): void {\n if (this.currentPosition != null && this.startingPosition != null) {\n const position = Point.create(event.screenX, event.screenY);\n const delta = Point.subtract(position, this.currentPosition);\n\n api.rotateCameraAtPoint(delta, this.startingPosition);\n this.currentPosition = position;\n }\n }\n\n public endDrag(event: MouseEvent, api: InteractionApi): void {\n super.endDrag(event, api);\n }\n}\n\nexport class ZoomInteraction extends MouseInteraction {\n public type: InteractionType = 'zoom';\n\n private didTransformBegin = false;\n private interactionTimer: number | undefined;\n private startPt?: Point.Point;\n\n public constructor(private interactionTimeout = 1000) {\n super();\n }\n\n public beginDrag(\n event: MouseEvent,\n canvasPosition: Point.Point,\n api: InteractionApi,\n element: HTMLElement\n ): void {\n if (this.currentPosition == null) {\n this.currentPosition = Point.create(event.clientX, event.clientY);\n const rect = element.getBoundingClientRect();\n const point = getMouseClientPosition(event, rect);\n this.startPt = point;\n api.beginInteraction();\n }\n }\n\n public drag(event: MouseEvent, api: InteractionApi): void {\n if (this.currentPosition != null) {\n const position = Point.create(event.clientX, event.clientY);\n const delta = Point.subtract(position, this.currentPosition);\n\n if (this.startPt != null) {\n api.zoomCameraToPoint(this.startPt, delta.y);\n this.currentPosition = position;\n }\n }\n }\n\n public endDrag(event: MouseEvent, api: InteractionApi): void {\n super.endDrag(event, api);\n this.stopInteractionTimer();\n this.didTransformBegin = false;\n this.startPt = undefined;\n }\n\n public zoom(delta: number, api: InteractionApi): void {\n this.operateWithTimer(api, () => api.zoomCamera(delta));\n }\n\n public zoomToPoint(\n pt: Point.Point,\n delta: number,\n api: InteractionApi\n ): void {\n this.operateWithTimer(api, () => api.zoomCameraToPoint(pt, delta));\n }\n\n private beginInteraction(api: InteractionApi): void {\n this.didTransformBegin = true;\n api.beginInteraction();\n }\n\n private endInteraction(api: InteractionApi): void {\n this.didTransformBegin = false;\n api.endInteraction();\n }\n\n private resetInteractionTimer(api: InteractionApi): void {\n this.stopInteractionTimer();\n this.startInteractionTimer(api);\n }\n\n private startInteractionTimer(api: InteractionApi): void {\n this.interactionTimer = window.setTimeout(() => {\n this.interactionTimer = undefined;\n this.endInteraction(api);\n }, this.interactionTimeout);\n }\n\n private stopInteractionTimer(): void {\n if (this.interactionTimer != null) {\n window.clearTimeout(this.interactionTimer);\n this.interactionTimer = undefined;\n }\n }\n\n private operateWithTimer(\n api: InteractionApi,\n f: () => void | Promise<void>\n ): void {\n if (!this.didTransformBegin) {\n this.beginInteraction(api);\n }\n\n this.resetInteractionTimer(api);\n f();\n }\n}\n\nexport class PanInteraction extends MouseInteraction {\n public type: InteractionType = 'pan';\n\n private canvasRect?: DOMRect;\n\n public beginDrag(\n event: MouseEvent,\n canvasPosition: Point.Point,\n api: InteractionApi,\n element: HTMLElement\n ): void {\n if (this.currentPosition == null) {\n this.currentPosition = Point.create(event.screenX, event.screenY);\n this.canvasRect = element.getBoundingClientRect();\n api.beginInteraction();\n }\n }\n\n public drag(event: MouseEvent, api: InteractionApi): void {\n if (this.currentPosition != null && this.canvasRect != null) {\n const position = getMouseClientPosition(event, this.canvasRect);\n api.panCameraToScreenPoint(position);\n this.currentPosition = position;\n }\n }\n\n public endDrag(event: MouseEvent, api: InteractionApi): void {\n super.endDrag(event, api);\n }\n}\n\nexport class TwistInteraction extends MouseInteraction {\n public type: InteractionType = 'twist';\n\n private canvasRect?: DOMRect;\n\n public beginDrag(\n event: MouseEvent,\n canvasPosition: Point.Point,\n api: InteractionApi,\n element: HTMLElement\n ): void {\n this.currentPosition = Point.create(event.offsetX, event.offsetY);\n this.canvasRect = element.getBoundingClientRect();\n api.beginInteraction();\n }\n\n public drag(event: MouseEvent, api: InteractionApi): void {\n const position = getMouseClientPosition(event, this.canvasRect);\n this.currentPosition = position;\n\n api.twistCamera(position);\n }\n\n public endDrag(event: MouseEvent, api: InteractionApi): void {\n super.endDrag(event, api);\n }\n}\n\nexport class PivotInteraction extends MouseInteraction {\n public type: InteractionType = 'pivot';\n\n public beginDrag(\n event: MouseEvent,\n canvasPosition: Point.Point,\n api: InteractionApi\n ): void {\n if (this.currentPosition == null) {\n this.currentPosition = Point.create(event.screenX, event.screenY);\n api.beginInteraction();\n }\n }\n\n public drag(event: MouseEvent, api: InteractionApi): void {\n if (this.currentPosition != null) {\n const position = Point.create(event.screenX, event.screenY);\n const delta = Point.subtract(position, this.currentPosition);\n\n api.pivotCamera(-0.25 * delta.y, 0.25 * delta.x);\n this.currentPosition = position;\n }\n }\n\n public endDrag(event: MouseEvent, api: InteractionApi): void {\n super.endDrag(event, api);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"mouseInteractions.js","sourceRoot":"","sources":["../../../../../src/lib/interactions/mouseInteractions.ts"],"names":[],"mappings":"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","sourcesContent":["import { Point } from '@vertexvis/geometry';\n\nimport { getMouseClientPosition } from '../dom';\nimport { InteractionType } from './baseInteractionHandler';\nimport { InteractionApi } from './interactionApi';\n\nexport abstract class MouseInteraction {\n protected currentPosition: Point.Point | undefined;\n\n protected abstract type: InteractionType;\n\n public setPosition(position?: Point.Point): void {\n this.currentPosition = position;\n }\n\n public getPosition(): Point.Point | undefined {\n return this.currentPosition;\n }\n\n public getType(): InteractionType {\n return this.type;\n }\n\n public beginDrag(\n event: MouseEvent,\n canvasPosition: Point.Point,\n api: InteractionApi,\n element: HTMLElement\n ): void {\n // noop\n }\n\n public drag(event: MouseEvent, api: InteractionApi): void {\n // noop\n }\n\n public endDrag(event: MouseEvent, api: InteractionApi): void {\n if (this.currentPosition != null) {\n api.endInteraction();\n this.currentPosition = undefined;\n }\n }\n\n public zoom(delta: number, api: InteractionApi): void {\n // noop\n }\n}\n\nexport class RotateInteraction extends MouseInteraction {\n public type: InteractionType = 'rotate';\n\n public beginDrag(\n event: MouseEvent,\n canvasPosition: Point.Point,\n api: InteractionApi\n ): void {\n if (this.currentPosition == null) {\n this.currentPosition = Point.create(event.screenX, event.screenY);\n api.beginInteraction();\n }\n }\n\n public drag(event: MouseEvent, api: InteractionApi): void {\n if (this.currentPosition != null) {\n const position = Point.create(event.screenX, event.screenY);\n const delta = Point.subtract(position, this.currentPosition);\n\n api.rotateCamera(delta);\n this.currentPosition = position;\n }\n }\n\n public endDrag(event: MouseEvent, api: InteractionApi): void {\n super.endDrag(event, api);\n }\n}\n\nexport class RotatePointInteraction extends MouseInteraction {\n public type: InteractionType = 'rotate-point';\n\n private startingPosition?: Point.Point;\n\n public beginDrag(\n event: MouseEvent,\n canvasPosition: Point.Point,\n api: InteractionApi\n ): void {\n if (this.currentPosition == null) {\n this.currentPosition = Point.create(event.screenX, event.screenY);\n this.startingPosition = canvasPosition;\n api.beginInteraction();\n }\n }\n\n public drag(event: MouseEvent, api: InteractionApi): void {\n if (this.currentPosition != null && this.startingPosition != null) {\n const position = Point.create(event.screenX, event.screenY);\n const delta = Point.subtract(position, this.currentPosition);\n\n api.rotateCameraAtPoint(delta, this.startingPosition);\n this.currentPosition = position;\n }\n }\n\n public endDrag(event: MouseEvent, api: InteractionApi): void {\n super.endDrag(event, api);\n }\n}\n\nexport class ZoomInteraction extends MouseInteraction {\n public type: InteractionType = 'zoom';\n\n private didTransformBegin = false;\n private interactionTimer: number | undefined;\n private startPt?: Point.Point;\n\n public constructor(private interactionTimeout = 1000) {\n super();\n }\n\n public beginDrag(\n event: MouseEvent,\n canvasPosition: Point.Point,\n api: InteractionApi,\n element: HTMLElement\n ): void {\n if (this.currentPosition == null) {\n this.currentPosition = Point.create(event.clientX, event.clientY);\n const rect = element.getBoundingClientRect();\n const point = getMouseClientPosition(event, rect);\n this.startPt = point;\n api.beginInteraction();\n }\n }\n\n public drag(event: MouseEvent, api: InteractionApi): void {\n if (this.currentPosition != null) {\n const position = Point.create(event.clientX, event.clientY);\n const delta = Point.subtract(position, this.currentPosition);\n\n if (this.startPt != null) {\n api.zoomCameraToPoint(this.startPt, delta.y);\n this.currentPosition = position;\n }\n }\n }\n\n public setInteractionTimeout(ms: number): void {\n this.interactionTimeout = ms;\n }\n\n public getInteractionTimeout(): number {\n return this.interactionTimeout;\n }\n\n public endDrag(event: MouseEvent, api: InteractionApi): void {\n super.endDrag(event, api);\n this.stopInteractionTimer();\n this.didTransformBegin = false;\n this.startPt = undefined;\n }\n\n public zoom(delta: number, api: InteractionApi): void {\n this.operateWithTimer(api, () => api.zoomCamera(delta));\n }\n\n public zoomToPoint(\n pt: Point.Point,\n delta: number,\n api: InteractionApi\n ): void {\n this.operateWithTimer(api, () => api.zoomCameraToPoint(pt, delta));\n }\n\n private beginInteraction(api: InteractionApi): void {\n this.didTransformBegin = true;\n api.beginInteraction();\n }\n\n private endInteraction(api: InteractionApi): void {\n this.didTransformBegin = false;\n api.endInteraction();\n }\n\n private resetInteractionTimer(api: InteractionApi): void {\n this.stopInteractionTimer();\n this.startInteractionTimer(api);\n }\n\n private startInteractionTimer(api: InteractionApi): void {\n this.interactionTimer = window.setTimeout(() => {\n this.interactionTimer = undefined;\n this.endInteraction(api);\n }, this.interactionTimeout);\n }\n\n private stopInteractionTimer(): void {\n if (this.interactionTimer != null) {\n window.clearTimeout(this.interactionTimer);\n this.interactionTimer = undefined;\n }\n }\n\n private operateWithTimer(\n api: InteractionApi,\n f: () => void | Promise<void>\n ): void {\n if (!this.didTransformBegin) {\n this.beginInteraction(api);\n }\n\n this.resetInteractionTimer(api);\n f();\n }\n}\n\nexport class PanInteraction extends MouseInteraction {\n public type: InteractionType = 'pan';\n\n private canvasRect?: DOMRect;\n\n public beginDrag(\n event: MouseEvent,\n canvasPosition: Point.Point,\n api: InteractionApi,\n element: HTMLElement\n ): void {\n if (this.currentPosition == null) {\n this.currentPosition = Point.create(event.screenX, event.screenY);\n this.canvasRect = element.getBoundingClientRect();\n api.beginInteraction();\n }\n }\n\n public drag(event: MouseEvent, api: InteractionApi): void {\n if (this.currentPosition != null && this.canvasRect != null) {\n const position = getMouseClientPosition(event, this.canvasRect);\n api.panCameraToScreenPoint(position);\n this.currentPosition = position;\n }\n }\n\n public endDrag(event: MouseEvent, api: InteractionApi): void {\n super.endDrag(event, api);\n }\n}\n\nexport class TwistInteraction extends MouseInteraction {\n public type: InteractionType = 'twist';\n\n private canvasRect?: DOMRect;\n\n public beginDrag(\n event: MouseEvent,\n canvasPosition: Point.Point,\n api: InteractionApi,\n element: HTMLElement\n ): void {\n this.currentPosition = Point.create(event.offsetX, event.offsetY);\n this.canvasRect = element.getBoundingClientRect();\n api.beginInteraction();\n }\n\n public drag(event: MouseEvent, api: InteractionApi): void {\n const position = getMouseClientPosition(event, this.canvasRect);\n this.currentPosition = position;\n\n api.twistCamera(position);\n }\n\n public endDrag(event: MouseEvent, api: InteractionApi): void {\n super.endDrag(event, api);\n }\n}\n\nexport class PivotInteraction extends MouseInteraction {\n public type: InteractionType = 'pivot';\n\n public beginDrag(\n event: MouseEvent,\n canvasPosition: Point.Point,\n api: InteractionApi\n ): void {\n if (this.currentPosition == null) {\n this.currentPosition = Point.create(event.screenX, event.screenY);\n api.beginInteraction();\n }\n }\n\n public drag(event: MouseEvent, api: InteractionApi): void {\n if (this.currentPosition != null) {\n const position = Point.create(event.screenX, event.screenY);\n const delta = Point.subtract(position, this.currentPosition);\n\n api.pivotCamera(-0.25 * delta.y, 0.25 * delta.x);\n this.currentPosition = position;\n }\n }\n\n public endDrag(event: MouseEvent, api: InteractionApi): void {\n super.endDrag(event, api);\n }\n}\n"]}
|
|
@@ -15,6 +15,12 @@ export class PointerInteractionHandler extends MultiElementInteractionHandler {
|
|
|
15
15
|
super.initialize(element, api);
|
|
16
16
|
element.addEventListener('pointerdown', this.handlePointerDown);
|
|
17
17
|
}
|
|
18
|
+
setZoomInteractionTimeout(ms) {
|
|
19
|
+
this.zoomInteraction.setInteractionTimeout(ms);
|
|
20
|
+
}
|
|
21
|
+
getZoomInteractionTimeout() {
|
|
22
|
+
return this.zoomInteraction.getInteractionTimeout();
|
|
23
|
+
}
|
|
18
24
|
addEventListenersToElement(element) {
|
|
19
25
|
element.addEventListener(this.downEvent, this.handleDownEvent);
|
|
20
26
|
element.addEventListener('wheel', this.handleMouseWheel, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pointerInteractionHandler.js","sourceRoot":"","sources":["../../../../../src/lib/interactions/pointerInteractionHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import { Point } from '@vertexvis/geometry';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { ConfigProvider } from '../config';\nimport { InteractionApi } from './interactionApi';\nimport {\n PanInteraction,\n PivotInteraction,\n RotateInteraction,\n RotatePointInteraction,\n TwistInteraction,\n ZoomInteraction,\n} from './mouseInteractions';\nimport { MultiElementInteractionHandler } from './multiElementInteractionHandler';\n\nexport class PointerInteractionHandler extends MultiElementInteractionHandler {\n private touchPoints: Set<number>;\n\n public constructor(\n getConfig: ConfigProvider,\n rotateInteraction = new RotateInteraction(),\n rotatePointInteraction = new RotatePointInteraction(),\n zoomInteraction = new ZoomInteraction(),\n panInteraction = new PanInteraction(),\n twistInteraction = new TwistInteraction(),\n pivotInteraction = new PivotInteraction()\n ) {\n super(\n 'pointerdown',\n 'pointerup',\n 'pointermove',\n rotateInteraction,\n rotatePointInteraction,\n zoomInteraction,\n panInteraction,\n twistInteraction,\n pivotInteraction,\n getConfig\n );\n this.touchPoints = new Set();\n this.handlePointerDown = this.handlePointerDown.bind(this);\n this.handlePointerUp = this.handlePointerUp.bind(this);\n }\n\n public initialize(element: HTMLElement, api: InteractionApi): void {\n super.initialize(element, api);\n\n element.addEventListener('pointerdown', this.handlePointerDown);\n }\n\n public addEventListenersToElement(element: HTMLElement): Disposable {\n element.addEventListener(this.downEvent, this.handleDownEvent);\n element.addEventListener('wheel', this.handleMouseWheel, {\n passive: false,\n });\n\n return {\n dispose: () => {\n element.removeEventListener(this.downEvent, this.handleDownEvent);\n element.removeEventListener('wheel', this.handleMouseWheel);\n },\n };\n }\n\n private handlePointerDown(event: PointerEvent): void {\n this.downPosition = Point.create(event.screenX, event.screenY);\n this.touchPoints.add(event.pointerId);\n\n if (this.touchPoints.size === 1) {\n window.addEventListener('pointerup', this.handlePointerUp);\n }\n\n if (this.touchPoints.size === 2) {\n this.disableIndividualInteractions = true;\n }\n }\n\n private handlePointerUp(event: PointerEvent): void {\n this.touchPoints.delete(event.pointerId);\n\n if (this.touchPoints.size < 2) {\n this.disableIndividualInteractions = false;\n }\n\n if (this.touchPoints.size === 0) {\n window.removeEventListener('pointerup', this.handlePointerUp);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"pointerInteractionHandler.js","sourceRoot":"","sources":["../../../../../src/lib/interactions/pointerInteractionHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import { Point } from '@vertexvis/geometry';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { ConfigProvider } from '../config';\nimport { InteractionApi } from './interactionApi';\nimport {\n PanInteraction,\n PivotInteraction,\n RotateInteraction,\n RotatePointInteraction,\n TwistInteraction,\n ZoomInteraction,\n} from './mouseInteractions';\nimport { MultiElementInteractionHandler } from './multiElementInteractionHandler';\n\nexport class PointerInteractionHandler extends MultiElementInteractionHandler {\n private touchPoints: Set<number>;\n\n public constructor(\n getConfig: ConfigProvider,\n rotateInteraction = new RotateInteraction(),\n rotatePointInteraction = new RotatePointInteraction(),\n zoomInteraction = new ZoomInteraction(),\n panInteraction = new PanInteraction(),\n twistInteraction = new TwistInteraction(),\n pivotInteraction = new PivotInteraction()\n ) {\n super(\n 'pointerdown',\n 'pointerup',\n 'pointermove',\n rotateInteraction,\n rotatePointInteraction,\n zoomInteraction,\n panInteraction,\n twistInteraction,\n pivotInteraction,\n getConfig\n );\n this.touchPoints = new Set();\n this.handlePointerDown = this.handlePointerDown.bind(this);\n this.handlePointerUp = this.handlePointerUp.bind(this);\n }\n\n public initialize(element: HTMLElement, api: InteractionApi): void {\n super.initialize(element, api);\n\n element.addEventListener('pointerdown', this.handlePointerDown);\n }\n\n public setZoomInteractionTimeout(ms: number): void {\n this.zoomInteraction.setInteractionTimeout(ms);\n }\n\n public getZoomInteractionTimeout(): number {\n return this.zoomInteraction.getInteractionTimeout();\n }\n\n public addEventListenersToElement(element: HTMLElement): Disposable {\n element.addEventListener(this.downEvent, this.handleDownEvent);\n element.addEventListener('wheel', this.handleMouseWheel, {\n passive: false,\n });\n\n return {\n dispose: () => {\n element.removeEventListener(this.downEvent, this.handleDownEvent);\n element.removeEventListener('wheel', this.handleMouseWheel);\n },\n };\n }\n\n private handlePointerDown(event: PointerEvent): void {\n this.downPosition = Point.create(event.screenX, event.screenY);\n this.touchPoints.add(event.pointerId);\n\n if (this.touchPoints.size === 1) {\n window.addEventListener('pointerup', this.handlePointerUp);\n }\n\n if (this.touchPoints.size === 2) {\n this.disableIndividualInteractions = true;\n }\n }\n\n private handlePointerUp(event: PointerEvent): void {\n this.touchPoints.delete(event.pointerId);\n\n if (this.touchPoints.size < 2) {\n this.disableIndividualInteractions = false;\n }\n\n if (this.touchPoints.size === 0) {\n window.removeEventListener('pointerup', this.handlePointerUp);\n }\n }\n}\n"]}
|
package/dist/components/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Copyright (c) 2024 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
4
|
export { setAssetPath, setPlatformOptions } from '@stencil/core/internal/client';
|
|
5
|
-
export { C as Camera, c as ColorMaterial, a as CrossSectioner, l as LoadableResource, R as Raycaster, b as RootQuery, S as Scene, d as SceneItemOperationsBuilder, e as SceneItemQueryExecutor, f as SceneOperationBuilder, s as SceneViewStateIdentifier, g as SynchronizedClock } from './queries.js';
|
|
5
|
+
export { C as Camera, c as ColorMaterial, a as CrossSectioner, l as LoadableResource, P as PointerInteractionHandler, R as Raycaster, b as RootQuery, S as Scene, d as SceneItemOperationsBuilder, e as SceneItemQueryExecutor, f as SceneOperationBuilder, s as SceneViewStateIdentifier, g as SynchronizedClock } from './queries.js';
|
|
6
6
|
export { S as SceneTreeController } from './controller.js';
|
|
7
7
|
export { f as fromNodeProto, i as isLoadedRow } from './row.js';
|
|
8
8
|
export { C as CursorManager, b as boxQueryCursor, l as labelPinCursor, m as measurementCursor, a as measurementWithArrowCursor, p as pinCursor } from './cursors.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"multiElementInteractionHandler.js","mappings":"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","names":["Point","UUID"],"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 SCROLL_WHEEL_DELTA_PERCENTAGES = [0.2, 0.15, 0.25, 0.25, 0.15];\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 = this.rotateInteraction;\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 computedBodyStyle?: CSSStyleDeclaration;\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.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 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\n SCROLL_WHEEL_DELTA_PERCENTAGES.forEach((percentage, index) => {\n window.setTimeout(() => {\n if (this.interactionApi != null) {\n const zoomDelta = delta * percentage;\n this.zoomInteraction.zoomToPoint(\n point,\n zoomDelta,\n this.interactionApi\n );\n }\n }, index * 2);\n });\n }\n }\n\n protected wheelDeltaToPixels(deltaY: number, deltaMode: number): number {\n if (this.computedBodyStyle == null) {\n this.computedBodyStyle = window.getComputedStyle(document.body);\n }\n\n const defaultLineHeight =\n this.computedBodyStyle.fontSize != null &&\n this.computedBodyStyle.fontSize !== '' &&\n !isNaN(parseFloat(this.computedBodyStyle.fontSize))\n ? parseFloat(this.computedBodyStyle.fontSize) * DEFAULT_LINE_HEIGHT\n : DEFAULT_FONT_SIZE * DEFAULT_LINE_HEIGHT;\n\n if (deltaMode === 1) {\n // deltaMode 1 corresponds to DOM_DELTA_LINE, which computes deltas in lines\n return this.computedBodyStyle.lineHeight != null &&\n this.computedBodyStyle.lineHeight !== '' &&\n !isNaN(parseFloat(this.computedBodyStyle.lineHeight))\n ? deltaY * parseFloat(this.computedBodyStyle.lineHeight)\n : deltaY * defaultLineHeight;\n } else if (deltaMode === 2) {\n // deltaMode 2 corresponds to DOM_DELTA_PAGE, which computes deltas in pages\n return this.computedBodyStyle.height != null &&\n this.computedBodyStyle.height !== '' &&\n !isNaN(parseFloat(this.computedBodyStyle.height))\n ? deltaY * parseFloat(this.computedBodyStyle.height)\n : deltaY * window.innerHeight;\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"],"version":3}
|
|
1
|
+
{"file":"multiElementInteractionHandler.js","mappings":"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","names":["Point","UUID"],"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 SCROLL_WHEEL_DELTA_PERCENTAGES = [0.2, 0.15, 0.25, 0.25, 0.15];\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 = this.rotateInteraction;\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 computedBodyStyle?: CSSStyleDeclaration;\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 protected rotateInteraction: RotateInteraction,\n protected rotatePointInteraction: RotatePointInteraction,\n protected zoomInteraction: ZoomInteraction,\n protected panInteraction: PanInteraction,\n protected twistInteraction: TwistInteraction,\n protected pivotInteraction: PivotInteraction,\n private getConfig: ConfigProvider\n ) {\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 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\n SCROLL_WHEEL_DELTA_PERCENTAGES.forEach((percentage, index) => {\n window.setTimeout(() => {\n if (this.interactionApi != null) {\n const zoomDelta = delta * percentage;\n this.zoomInteraction.zoomToPoint(\n point,\n zoomDelta,\n this.interactionApi\n );\n }\n }, index * 2);\n });\n }\n }\n\n protected wheelDeltaToPixels(deltaY: number, deltaMode: number): number {\n if (this.computedBodyStyle == null) {\n this.computedBodyStyle = window.getComputedStyle(document.body);\n }\n\n const defaultLineHeight =\n this.computedBodyStyle.fontSize != null &&\n this.computedBodyStyle.fontSize !== '' &&\n !isNaN(parseFloat(this.computedBodyStyle.fontSize))\n ? parseFloat(this.computedBodyStyle.fontSize) * DEFAULT_LINE_HEIGHT\n : DEFAULT_FONT_SIZE * DEFAULT_LINE_HEIGHT;\n\n if (deltaMode === 1) {\n // deltaMode 1 corresponds to DOM_DELTA_LINE, which computes deltas in lines\n return this.computedBodyStyle.lineHeight != null &&\n this.computedBodyStyle.lineHeight !== '' &&\n !isNaN(parseFloat(this.computedBodyStyle.lineHeight))\n ? deltaY * parseFloat(this.computedBodyStyle.lineHeight)\n : deltaY * defaultLineHeight;\n } else if (deltaMode === 2) {\n // deltaMode 2 corresponds to DOM_DELTA_PAGE, which computes deltas in pages\n return this.computedBodyStyle.height != null &&\n this.computedBodyStyle.height !== '' &&\n !isNaN(parseFloat(this.computedBodyStyle.height))\n ? deltaY * parseFloat(this.computedBodyStyle.height)\n : deltaY * window.innerHeight;\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"],"version":3}
|