@vertexvis/viewer 1.0.1-canary.9 → 1.0.1-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/loader.cjs.js +1 -1
- package/dist/cjs/{multiElementInteractionHandler-CV_R_zWs.js → multiElementInteractionHandler-DFzC3VJQ.js} +14 -11
- package/dist/cjs/multiElementInteractionHandler-DFzC3VJQ.js.map +1 -0
- package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js +20 -11
- package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-scene-tree.cjs.entry.js +18 -5
- package/dist/cjs/vertex-scene-tree.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js +7 -5
- package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js +6 -6
- package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js +5 -5
- package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer.cjs.entry.js +18 -12
- package/dist/cjs/vertex-viewer.cjs.entry.js.map +1 -1
- package/dist/cjs/viewer.cjs.js +1 -1
- package/dist/collection/components/scene-tree/scene-tree.js +18 -5
- package/dist/collection/components/scene-tree/scene-tree.js.map +1 -1
- package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js +20 -11
- package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js.map +1 -1
- package/dist/collection/components/viewer-pin-group/viewer-pin-group.js +8 -6
- package/dist/collection/components/viewer-pin-group/viewer-pin-group.js.map +1 -1
- package/dist/collection/components/viewer-pin-label/viewer-pin-label.js +7 -7
- package/dist/collection/components/viewer-pin-label/viewer-pin-label.js.map +1 -1
- package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.js +6 -7
- package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.js.map +1 -1
- package/dist/collection/lib/interactions/baseInteractionHandler.js +12 -9
- package/dist/collection/lib/interactions/baseInteractionHandler.js.map +1 -1
- package/dist/collection/lib/interactions/mouseInteractions.js +17 -11
- package/dist/collection/lib/interactions/mouseInteractions.js.map +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/{p-COS1Inc5.js → p-BQV-PVa_.js} +2 -2
- package/dist/components/p-BQV-PVa_.js.map +1 -0
- package/dist/components/p-CAQf9dsL.js +5 -0
- package/dist/components/p-CAQf9dsL.js.map +1 -0
- package/dist/components/{p-CEXF82El.js → p-CKQId0I1.js} +2 -2
- package/dist/components/p-CKQId0I1.js.map +1 -0
- package/dist/components/{p-CEHeeaoZ.js → p-CUGGgEIf.js} +2 -2
- package/dist/components/{p-CWieLCfP.js → p-CoCastpC.js} +2 -2
- package/dist/components/{p-BNHniQXm.js → p-ae0Zapzr.js} +2 -2
- package/dist/components/p-ae0Zapzr.js.map +1 -0
- package/dist/components/vertex-scene-tree-table-layout.js +1 -1
- package/dist/components/vertex-scene-tree.js +1 -1
- package/dist/components/vertex-scene-tree.js.map +1 -1
- package/dist/components/vertex-viewer-dom-renderer.js +1 -1
- package/dist/components/vertex-viewer-pin-group.js +1 -1
- package/dist/components/vertex-viewer-pin-label.js +1 -1
- package/dist/components/vertex-viewer-pin-tool.js +1 -1
- package/dist/components/vertex-viewer-transform-widget.js +1 -1
- package/dist/components/vertex-viewer-transform-widget.js.map +1 -1
- package/dist/components/vertex-viewer-view-cube.js +1 -1
- package/dist/components/vertex-viewer.js +1 -1
- package/dist/components/vertex-viewer.js.map +1 -1
- package/dist/esm/{controller-zACO6f4n.js → controller-DCFz4xj6.js} +3 -3
- package/dist/esm/{controller-zACO6f4n.js.map → controller-DCFz4xj6.js.map} +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/loader.mjs +1 -1
- package/dist/esm/{multiElementInteractionHandler-CJhrgviV.js → multiElementInteractionHandler-DjlrKVbu.js} +14 -11
- package/dist/esm/multiElementInteractionHandler-DjlrKVbu.js.map +1 -0
- package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js +20 -11
- package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js.map +1 -1
- package/dist/esm/vertex-scene-tree.entry.js +19 -6
- package/dist/esm/vertex-scene-tree.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-dom-element_2.entry.js +1 -1
- package/dist/esm/vertex-viewer-pin-group.entry.js +8 -6
- package/dist/esm/vertex-viewer-pin-group.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-pin-label_2.entry.js +6 -6
- package/dist/esm/vertex-viewer-pin-label_2.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-transform-widget.entry.js +5 -5
- package/dist/esm/vertex-viewer-transform-widget.entry.js.map +1 -1
- package/dist/esm/vertex-viewer.entry.js +18 -12
- package/dist/esm/vertex-viewer.entry.js.map +1 -1
- package/dist/esm/viewer.js +1 -1
- package/dist/types/components/scene-tree/scene-tree.d.ts +2 -0
- package/dist/types/components/scene-tree-table-layout/scene-tree-table-layout.d.ts +2 -0
- package/dist/types/components/viewer-pin-group/viewer-pin-group.d.ts +1 -0
- package/dist/types/components/viewer-transform-widget/viewer-transform-widget.d.ts +1 -1
- package/dist/types/lib/interactions/baseInteractionHandler.d.ts +1 -1
- package/dist/types/lib/interactions/mouseInteractions.d.ts +8 -2
- package/dist/viewer/index.esm.js +1 -1
- package/dist/viewer/p-07214ba9.entry.js +5 -0
- package/dist/viewer/p-07214ba9.entry.js.map +1 -0
- package/dist/viewer/p-1a463ace.entry.js +5 -0
- package/dist/viewer/p-1a463ace.entry.js.map +1 -0
- package/dist/viewer/p-9c18d87a.entry.js +5 -0
- package/dist/viewer/p-9c18d87a.entry.js.map +1 -0
- package/dist/viewer/{p-D4lmv56q.js → p-Dg5Yw3qK.js} +2 -2
- package/dist/viewer/{p-D4lmv56q.js.map → p-Dg5Yw3qK.js.map} +1 -1
- package/dist/viewer/{p-DkLznn4v.js → p-DwjktKp5.js} +2 -2
- package/dist/viewer/p-DwjktKp5.js.map +1 -0
- package/dist/viewer/{p-dcaf1cb9.entry.js → p-b8d8d308.entry.js} +2 -2
- package/dist/viewer/p-d26d4b99.entry.js +5 -0
- package/dist/viewer/{p-76cf5c2a.entry.js.map → p-d26d4b99.entry.js.map} +1 -1
- package/dist/viewer/{p-d4d044fc.entry.js → p-daecf887.entry.js} +2 -2
- package/dist/viewer/p-daecf887.entry.js.map +1 -0
- package/dist/viewer/{p-0cbadaa8.entry.js → p-fe2fdc83.entry.js} +2 -2
- package/dist/viewer/p-fe2fdc83.entry.js.map +1 -0
- package/dist/viewer/viewer.esm.js +1 -1
- package/package.json +7 -7
- package/dist/cjs/multiElementInteractionHandler-CV_R_zWs.js.map +0 -1
- package/dist/components/p-BNHniQXm.js.map +0 -1
- package/dist/components/p-BzhmEGZ5.js +0 -5
- package/dist/components/p-BzhmEGZ5.js.map +0 -1
- package/dist/components/p-CEXF82El.js.map +0 -1
- package/dist/components/p-COS1Inc5.js.map +0 -1
- package/dist/esm/multiElementInteractionHandler-CJhrgviV.js.map +0 -1
- package/dist/viewer/p-0cbadaa8.entry.js.map +0 -1
- package/dist/viewer/p-19c5eeaf.entry.js +0 -5
- package/dist/viewer/p-19c5eeaf.entry.js.map +0 -1
- package/dist/viewer/p-1a82245e.entry.js +0 -5
- package/dist/viewer/p-1a82245e.entry.js.map +0 -1
- package/dist/viewer/p-5ccf054e.entry.js +0 -5
- package/dist/viewer/p-5ccf054e.entry.js.map +0 -1
- package/dist/viewer/p-76cf5c2a.entry.js +0 -5
- package/dist/viewer/p-DkLznn4v.js.map +0 -1
- package/dist/viewer/p-d4d044fc.entry.js.map +0 -1
- /package/dist/components/{p-CEHeeaoZ.js.map → p-CUGGgEIf.js.map} +0 -0
- /package/dist/components/{p-CWieLCfP.js.map → p-CoCastpC.js.map} +0 -0
- /package/dist/viewer/{p-dcaf1cb9.entry.js.map → p-b8d8d308.entry.js.map} +0 -0
|
@@ -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, InteractionConfigProvider } 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 async zoom(delta: number, api: InteractionApi): Promise<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(\n private interactionConfigProvider: InteractionConfigProvider\n ) {\n super();\n }\n\n public async beginDrag(\n event: MouseEvent,\n canvasPosition: Point.Point,\n api: InteractionApi,\n element: HTMLElement\n ): Promise<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 await api.beginInteraction();\n }\n }\n\n public async drag(event: MouseEvent, api: InteractionApi): Promise<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 await 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 async zoom(delta: number, api: InteractionApi): Promise<void> {\n await this.operateWithTimer(api, () =>\n api.zoomCamera(this.getDirectionalDelta(delta))\n );\n }\n\n public async zoomToPoint(\n pt: Point.Point,\n delta: number,\n api: InteractionApi\n ): Promise<void> {\n await this.operateWithTimer(api, () =>\n api.zoomCameraToPoint(pt, this.getDirectionalDelta(delta))\n );\n }\n\n private async beginInteraction(api: InteractionApi): Promise<void> {\n this.didTransformBegin = true;\n await api.beginInteraction();\n }\n\n private async endInteraction(api: InteractionApi): Promise<void> {\n this.didTransformBegin = false;\n await api.endInteraction();\n }\n\n private resetInteractionTimer(api: InteractionApi): void {\n this.stopInteractionTimer();\n this.startInteractionTimer(api);\n }\n\n private getDirectionalDelta(delta: number): number {\n return this.interactionConfigProvider().reverseMouseWheelDirection\n ? -delta\n : delta;\n }\n\n private getInteractionDelay(): number {\n return this.interactionConfigProvider().mouseWheelInteractionEndDebounce;\n }\n\n private startInteractionTimer(api: InteractionApi): void {\n this.interactionTimer = window.setTimeout(async () => {\n this.interactionTimer = undefined;\n await this.endInteraction(api);\n }, this.getInteractionDelay());\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 async operateWithTimer(\n api: InteractionApi,\n f: () => void | Promise<void>\n ): Promise<void> {\n if (!this.didTransformBegin) {\n await 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, InteractionConfigProvider } 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 async zoom(delta: number, api: InteractionApi): Promise<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(\n private interactionConfigProvider: InteractionConfigProvider\n ) {\n super();\n }\n\n public async beginDrag(\n event: MouseEvent,\n canvasPosition: Point.Point,\n api: InteractionApi,\n element: HTMLElement\n ): Promise<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 await api.beginInteraction();\n }\n }\n\n public async drag(event: MouseEvent, api: InteractionApi): Promise<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 await 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 async zoom(\n delta: number,\n api: InteractionApi,\n extraDelayMs?: number\n ): Promise<void> {\n await this.operateWithTimer(\n api,\n () => api.zoomCamera(this.getDirectionalDelta(delta)),\n extraDelayMs\n );\n }\n\n public async zoomToPoint(\n pt: Point.Point,\n delta: number,\n api: InteractionApi,\n extraDelayMs?: number\n ): Promise<void> {\n await this.operateWithTimer(\n api,\n () => api.zoomCameraToPoint(pt, this.getDirectionalDelta(delta)),\n extraDelayMs\n );\n }\n\n private async beginInteraction(api: InteractionApi): Promise<void> {\n this.didTransformBegin = true;\n await api.beginInteraction();\n }\n\n private async endInteraction(api: InteractionApi): Promise<void> {\n this.didTransformBegin = false;\n await api.endInteraction();\n }\n\n private resetInteractionTimer(\n api: InteractionApi,\n extraDelayMs?: number\n ): void {\n this.stopInteractionTimer();\n this.startInteractionTimer(api, extraDelayMs);\n }\n\n private getDirectionalDelta(delta: number): number {\n return this.interactionConfigProvider().reverseMouseWheelDirection\n ? -delta\n : delta;\n }\n\n /**\n * if this value gets too low, can cause animation jitter in certain scenarios\n */\n private getInteractionDelay(): number {\n return this.interactionConfigProvider().mouseWheelInteractionEndDebounce;\n }\n\n /**\n * uses a configured interaction delay, but certain interactions like wheel zoom benefit from extra delay\n */\n private startInteractionTimer(api: InteractionApi, extraDelayMs = 0): void {\n this.interactionTimer = window.setTimeout(async () => {\n this.interactionTimer = undefined;\n await this.endInteraction(api);\n }, extraDelayMs + this.getInteractionDelay());\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 async operateWithTimer(\n api: InteractionApi,\n f: () => void | Promise<void>,\n extraDelayMs?: number\n ): Promise<void> {\n if (!this.didTransformBegin) {\n await this.beginInteraction(api);\n }\n\n this.resetInteractionTimer(api, extraDelayMs);\n await 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"]}
|
package/dist/components/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{g as o}from"./p-Bb32XUUS.js";export{a as getAssetPath,r as render,s as setAssetPath,b as setNonce,c as setPlatformOptions}from"./p-Bb32XUUS.js";export{C as Camera,c as ColorMaterial,a as CrossSectioner,I as ItemOperationBuilder,l as LoadableResource,M as ModelViewController,P as PmiAnnotationOperationsBuilder,b as PmiAnnotationsQueryExecutor,k as PmiController,R as Raycaster,d as RootQuery,S as Scene,e as SceneElementQueryExecutor,f as SceneElementsOperationExecutor,g as SceneItemOperationsBuilder,h as SceneItemQueryExecutor,i as SceneItemsOperationExecutor,s as SceneViewStateIdentifier,j as SynchronizedClock}from"./p-tJ-pMGPU.js";export{S as SceneTreeController}from"./p-
|
|
4
|
+
import{g as o}from"./p-Bb32XUUS.js";export{a as getAssetPath,r as render,s as setAssetPath,b as setNonce,c as setPlatformOptions}from"./p-Bb32XUUS.js";export{C as Camera,c as ColorMaterial,a as CrossSectioner,I as ItemOperationBuilder,l as LoadableResource,M as ModelViewController,P as PmiAnnotationOperationsBuilder,b as PmiAnnotationsQueryExecutor,k as PmiController,R as Raycaster,d as RootQuery,S as Scene,e as SceneElementQueryExecutor,f as SceneElementsOperationExecutor,g as SceneItemOperationsBuilder,h as SceneItemQueryExecutor,i as SceneItemsOperationExecutor,s as SceneViewStateIdentifier,j as SynchronizedClock}from"./p-tJ-pMGPU.js";export{S as SceneTreeController}from"./p-CoCastpC.js";export{f as fromNodeProto,i as isLoadedRow}from"./p-CiSHWNC4.js";export{S as SCENE_ITEM_NAME_METADATA_KEY}from"./p-BZwvQkyb.js";export{C as CursorManager,b as boxQueryCursor,l as labelPinCursor,m as measurementCursor,a as measurementWithArrowCursor,p as pinCursor}from"./p-AZXboIdP.js";export{M as MeasurementController,a as MeasurementEntity}from"./p-C1fXWKQE.js";export{M as MeasurementModel}from"./p-CkUMpn7h.js";export{M as MeasurementOverlayManager}from"./p-CI-uemp_.js";export{m as makeMinimumDistanceResult}from"./p-BKId5xpb.js";import{v as n,q as u,m as x}from"./p-Tvs4yxd5.js";export{T as TransformController}from"./p-B6pxBmYG.js";export{f as flattenPointArray,a as toDegreesTransform,e as toLocalTransform,b as toMatrix,t as toRadiansTransform,c as toTransform,d as toWorldTransform}from"./p-B2SMWIov.js";export{A as AngleUnits,g as AreaUnits,c as CrossSectioning,D as DistanceUnits,E as EntityType,F as FrameCameraBase,O as Orientation,a as ReceivedFrame,b as ReceivedFrameImage,d as ReceivedFrameScene,e as ReceivedOrthographicCamera,f as ReceivedPerspectiveCamera,S as StandardView}from"./p-B6YaQ5xr.js";export{A as ArrowMarkup,C as CircleMarkup,F as FreeformMarkup}from"./p-BvP_LmOT.js";export{V as Viewport}from"./p-Dpyl9pSp.js";export{V as VolumeIntersectionQueryController,a as VolumeIntersectionQueryModel}from"./p-B9lYqrmo.js";const y=.9999;function B(e){const r=n.create(0,e.z,-e.y);const a=n.create(-e.z,0,e.x);const s=n.magnitudeSquared(r)>n.magnitudeSquared(a)?r:a;return n.normalize(n.cross(e,s))}function v(e,r){const a=n.dot(e,r);if(a>y){const r=B(e);const a=u.fromAxisAngle(r,Math.PI);return x.makeRotation(a)}else if(a<=-y){return x.makeIdentity()}else{const a=n.angleTo(r,e);const s=n.normalize(n.cross(e,r));return x.makeRotation(u.fromAxisAngle(s,a+Math.PI))}}function _(e,r,a,s){const o=v(e,a);const t=x.makeTranslation(s);return x.multiply(x.multiply(t,o),x.makeTranslation(n.negate(r)))}var Q=Object.freeze({__proto__:null,ALMOST_ONE:y,calculateOrthogonalCoordinate:B,computeRotationMatrix:v,computeTransformationDelta:_});o();export{Q as TransformationDelta};
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -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-Dc9KNUUp.js";import{p as s}from"./p-Tvs4yxd5.js";import{g as h}from"./p-BSYTUXcE.js";const e=16;const n=1.2;class l{constructor(t,s,h,e,n,l,o,a,r,d){this.downEvent=t;this.upEvent=s;this.moveEvent=h;this.rotateInteraction=e;this.rotatePointInteraction=n;this.zoomInteraction=l;this.panInteraction=o;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}}
|
|
5
|
-
//# sourceMappingURL=p-
|
|
4
|
+
import{E as i,b as t}from"./p-Dc9KNUUp.js";import{p as s}from"./p-Tvs4yxd5.js";import{g as h}from"./p-BSYTUXcE.js";const e=16;const n=1.2;class l{constructor(t,s,h,e,n,l,o,a,r,d){this.downEvent=t;this.upEvent=s;this.moveEvent=h;this.rotateInteraction=e;this.rotatePointInteraction=n;this.zoomInteraction=l;this.panInteraction=o;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.computedBodyStyle==null){this.computedBodyStyle=window.getComputedStyle(document.body)}const s=this.computedBodyStyle.getPropertyValue("fontSize")!=null&&this.computedBodyStyle.getPropertyValue("fontSize")!==""&&!isNaN(parseFloat(this.computedBodyStyle.getPropertyValue("fontSize")))?parseFloat(this.computedBodyStyle.getPropertyValue("fontSize"))*n:e*n;if(t===1){return this.computedBodyStyle.getPropertyValue("lineHeight")!=null&&this.computedBodyStyle.getPropertyValue("lineHeight")!==""&&!isNaN(parseFloat(this.computedBodyStyle.getPropertyValue("lineHeight")))?i*parseFloat(this.computedBodyStyle.getPropertyValue("lineHeight")):i*s}else if(t===2){return this.computedBodyStyle.getPropertyValue("height")!=null&&this.computedBodyStyle.getPropertyValue("height")!==""&&!isNaN(parseFloat(this.computedBodyStyle.getPropertyValue("height")))?i*parseFloat(this.computedBodyStyle.getPropertyValue("height")):i*window.innerHeight}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 o extends l{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{l as B,o as M};
|
|
5
|
+
//# sourceMappingURL=p-BQV-PVa_.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["DEFAULT_FONT_SIZE","DEFAULT_LINE_HEIGHT","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","computedBodyStyle","getComputedStyle","document","body","defaultLineHeight","getPropertyValue","isNaN","parseFloat","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_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 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.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 if (this.computedBodyStyle == null) {\n this.computedBodyStyle = window.getComputedStyle(document.body);\n }\n\n const defaultLineHeight =\n this.computedBodyStyle.getPropertyValue('fontSize') != null &&\n this.computedBodyStyle.getPropertyValue('fontSize') !== '' &&\n !isNaN(parseFloat(this.computedBodyStyle.getPropertyValue('fontSize')))\n ? parseFloat(this.computedBodyStyle.getPropertyValue('fontSize')) *\n 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.getPropertyValue('lineHeight') != null &&\n this.computedBodyStyle.getPropertyValue('lineHeight') !== '' &&\n !isNaN(\n parseFloat(this.computedBodyStyle.getPropertyValue('lineHeight'))\n )\n ? deltaY *\n parseFloat(this.computedBodyStyle.getPropertyValue('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.getPropertyValue('height') != null &&\n this.computedBodyStyle.getPropertyValue('height') !== '' &&\n !isNaN(parseFloat(this.computedBodyStyle.getPropertyValue('height')))\n ? deltaY * parseFloat(this.computedBodyStyle.getPropertyValue('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"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import{h as e,F as i,t,p as n,H as o}from"./p-Bb32XUUS.js";import{p as s,m as r,v as a}from"./p-Tvs4yxd5.js";import"./p-CoCastpC.js";import"./p-AZXboIdP.js";import"./p-DHzKe2d2.js";import"./p-FRKLa468.js";import"./p-ux1ckSDN.js";import"./p-mq2h46Ln.js";import"./p-B6YaQ5xr.js";import"./p-Dupeau9A.js";import{V as l}from"./p-Dpyl9pSp.js";import{d,P as p,t as c}from"./p-ae0Zapzr.js";import{g as h,i as v,a as u,P as m}from"./p-zxYMoA6A.js";import{c as b}from"./p-C6gMOKYg.js";import{d as f}from"./p-DFQf0WFY.js";import{d as w}from"./p-Bkm6H5uq.js";import{d as x}from"./p-2_dBQMni.js";const y=({pin:t,selected:n,occluded:o,detached:s})=>{const{primaryColor:r}=h(t);return e(i,null,u(t)&&e("div",{id:"pin-anchor",class:b("pin-anchor",{selected:n,"pin-occluded":o,"pin-detached":s}),style:{background:r}}),v(t)&&e("vertex-viewer-icon",{name:"pin-fill",size:"lg",class:b("pin",{"pin-selected":n,"pin-occluded":o,"pin-detached":s}),style:{color:r}}))};function g(e,i,t){const n={x:e.x+t.width/2,y:e.y};const o={x:e.x+t.width/2,y:e.y+t.height};const r={x:e.x+t.width,y:e.y+t.height/2};const a={x:e.x,y:e.y+t.height/2};const l=[n,o,a,r];const d=l.map((e=>s.distance(e,i)));const p=d.indexOf(Math.min(...d));return l[p]}const P=()=>`:host{--viewer-annotations-pin-primary-color:var(--blue-700);--viewer-annotations-pin-accent-color:var(--blue-200);--viewer-annotations-pin-dot-color:var(--viewer-annotations-pin-primary-color);--viewer-annotations-pin-color:var(--viewer-annotations-pin-primary-color);--viewer-annotations-pin-font-size:0.75rem;--viewer-annotations-pin-selected-stroke:var(--white);--viewer-annotations-pin-selected-border:2px solid var(--white);--viewer-annotations-pin-label-border:2px solid var(--black);--viewer-annotations-pin-selected-stroke:var(--white);font-size:var(--viewer-annotations-pin-font-size);position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden;pointer-events:none}.pin-anchor{position:absolute;border-radius:50%;transform:translate(-50%, -50%);display:block;width:9px;height:9px;box-sizing:border-box;border:var(--viewer-annotations-pin-label-border);background:var(--viewer-annotations-pin-dot-color);pointer-events:auto;cursor:pointer}.selected{width:13px;height:13px;border:var(--viewer-annotations-pin-selected-border)}.pin{color:var(--viewer-annotations-pin-color);cursor:pointer;transition:opacity 0.3s ease-in;transform:translate(0px, -12px)}.pin-selected{stroke-width:1;stroke:var(--viewer-annotations-pin-selected-stroke)}.pin-occluded{opacity:.3;transition:opacity 0.3s ease-in}.pin-detached{visibility:hidden}`;const k=n(class t extends o{constructor(e){super();if(e!==false){this.__registerHost()}this.matrix=r.makeIdentity();this.projectionViewMatrix=r.makeIdentity();this.pinModel=new m;this.selected=false;this.occluded=false;this.detached=false;this.invalidateStateCounter=0;this.invalidateState=()=>{this.invalidateStateCounter=this.invalidateStateCounter+1}}componentWillLoad(){if(this.pinController==null){this.pinController=new p(this.pinModel)}}componentDidLoad(){var e;this.setLabelObserver();if(this.selected){(e=this.labelEl)===null||e===void 0?void 0:e.setFocus()}}async handleOcclusionStateChanged(e){this.occluded=e.detail}async handleDetachedStateChanged(e){this.detached=e.detail}disconnectedCallback(){var e,i;(e=this.labelEl)===null||e===void 0?void 0:e.removeEventListener("labelChanged",this.invalidateState);(i=this.resizeObserver)===null||i===void 0?void 0:i.disconnect()}render(){var t;if(this.pin==null){throw new Error("Unable to draw pin")}const{pinPoint:n,labelPoint:o}=this.computePinPoints(this.pin);return e(i,{key:"e3a02afe3d6a71677e15a9b4d31251970cb9a85e"},e("vertex-viewer-dom-element",{key:"182ec8f3fb4440045d8d9afef16dcb182087e4dd","data-testid":`drawn-pin-${this.pin.id}`,position:this.pin.worldPosition,onPointerDown:async()=>{var e;await((e=this.labelEl)===null||e===void 0?void 0:e.submit());this.selectPin();this.handleAnchorPointerDown()},detachedOff:false},e(y,{key:"53368cba2d76f71dbdb367760ede137d4b1c3a9e",pin:this.pin,selected:this.selected,occluded:this.occluded,detached:this.detached})),u(this.pin)&&!this.occluded&&!this.detached&&e(i,{key:"5318ed3e3afb2680ec4c4b2050dfb34b663ebd08"},e("vertex-viewer-pin-label-line",{key:"a84145a009f83969b47deef61649d65dd594d1ce",id:`pin-label-line-${(t=this.pin)===null||t===void 0?void 0:t.id}`,pinPoint:n,pin:this.pin,labelPoint:o,onPointerDown:()=>this.selectPin()}),e("vertex-viewer-pin-label",{key:"efce5f94d0e1e7e3803b089a94f0e23671a0f6f4",pin:this.pin,ref:e=>this.labelEl=e,elementBounds:this.elementBounds,pinController:this.pinController,onPointerDown:()=>this.selectPin()})))}setLabelObserver(){if(this.labelEl!=null){this.labelEl.addEventListener("labelChanged",this.invalidateState);this.resizeObserver=new ResizeObserver((()=>this.invalidateState()));this.resizeObserver.observe(this.labelEl)}}computePinPoints(e){if(this.elementBounds!=null&&this.pin!=null){return u(this.pin)&&this.pin.label.point!=null?this.computeTextPinPoints(this.pin,this.elementBounds):this.computeDefaultPinPoints(this.pin,this.elementBounds)}return{pinPoint:e.worldPosition}}computeDefaultPinPoints(e,i){return{pinPoint:this.getFromWorldPosition(e.worldPosition,this.projectionViewMatrix,i)}}computeTextPinPoints(e,i){var t,n,o,s;const{pinPoint:r}=this.computeDefaultPinPoints(e,i);const a=c(e.label.point,i);const l=((n=(t=this.labelEl)===null||t===void 0?void 0:t.firstElementChild)===null||n===void 0?void 0:n.clientWidth)||0;const d=((s=(o=this.labelEl)===null||o===void 0?void 0:o.firstElementChild)===null||s===void 0?void 0:s.clientHeight)||0;return{pinPoint:r,labelPoint:g(a,r,{width:l,height:d})}}handleAnchorPointerDown(){var e,i;if(this.elementBounds!=null&&((e=this.pinController)===null||e===void 0?void 0:e.getToolMode())==="edit"&&this.pin!=null){(i=this.pinController)===null||i===void 0?void 0:i.setDraggable({id:this.pin.id})}}selectPin(){var e,i;(e=this.pinController)===null||e===void 0?void 0:e.setSelectedPinId((i=this.pin)===null||i===void 0?void 0:i.id)}getFromWorldPosition(e,i,t){const n=a.transformMatrix(e,i);return l.fromDimensions(t).transformVectorToViewport(n)}static get style(){return P()}},[0,"vertex-viewer-pin-group",{pin:[16],matrix:[1040],projectionViewMatrix:[16],elementBounds:[1040],pinModel:[16],pinController:[1040],selected:[4],occluded:[1540],detached:[1540],invalidateStateCounter:[32]},[[0,"occlusionStateChanged","handleOcclusionStateChanged"],[0,"detachedStateChanged","handleDetachedStateChanged"]]]);function j(){if(typeof customElements==="undefined"){return}const e=["vertex-viewer-pin-group","vertex-viewer-dom-element","vertex-viewer-icon","vertex-viewer-pin-label","vertex-viewer-pin-label-line"];e.forEach((e=>{switch(e){case"vertex-viewer-pin-group":if(!customElements.get(t(e))){customElements.define(t(e),k)}break;case"vertex-viewer-dom-element":if(!customElements.get(t(e))){f()}break;case"vertex-viewer-icon":if(!customElements.get(t(e))){w()}break;case"vertex-viewer-pin-label":if(!customElements.get(t(e))){d()}break;case"vertex-viewer-pin-label-line":if(!customElements.get(t(e))){x()}break}}))}j();export{k as V,j as d};
|
|
5
|
+
//# sourceMappingURL=p-CAQf9dsL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["PinRenderer","pin","selected","occluded","detached","primaryColor","getPinColors","h","Fragment","isTextPin","id","class","classNames","style","background","isIconPin","name","size","color","getClosestCenterToPoint","boxPoint","pointToMeasure","dimensions","topPoint","x","width","y","bottomPoint","height","rightPoint","leftPoint","candidates","distances","map","candidate","Point","distance","candidateIndex","indexOf","Math","min","viewerPinGroupCss","ViewerPinGroup","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","matrix","Matrix4","makeIdentity","projectionViewMatrix","pinModel","PinModel","invalidateStateCounter","invalidateState","componentWillLoad","pinController","PinController","componentDidLoad","setLabelObserver","_a","labelEl","setFocus","handleOcclusionStateChanged","event","detail","handleDetachedStateChanged","disconnectedCallback","removeEventListener","_b","resizeObserver","disconnect","render","Error","pinPoint","labelPoint","computePinPoints","key","position","worldPosition","onPointerDown","async","submit","selectPin","handleAnchorPointerDown","detachedOff","ref","el","elementBounds","addEventListener","ResizeObserver","observe","label","point","computeTextPinPoints","computeDefaultPinPoints","getFromWorldPosition","screenPosition","translatePointToScreen","labelWidth","firstElementChild","clientWidth","labelHeight","_d","_c","clientHeight","getToolMode","setDraggable","setSelectedPinId","pt","ndcPt","Vector3","transformMatrix","Viewport","fromDimensions","transformVectorToViewport"],"sources":["src/components/viewer-pin-group/pin-renderer.tsx","src/components/viewer-pin-group/utils.ts","src/components/viewer-pin-group/viewer-pin-group.css?tag=vertex-viewer-pin-group","src/components/viewer-pin-group/viewer-pin-group.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { Fragment, FunctionalComponent, h } from '@stencil/core';\nimport classNames from 'classnames';\n\nimport { getPinColors, isIconPin, isTextPin, Pin } from '../../lib/pins/model';\n\ninterface PinRendererProps {\n pin?: Pin;\n selected: boolean;\n occluded: boolean;\n detached: boolean;\n}\n\nexport const PinRenderer: FunctionalComponent<PinRendererProps> = ({\n pin,\n selected,\n occluded,\n detached,\n}) => {\n const { primaryColor } = getPinColors(pin);\n\n return (\n <Fragment>\n {isTextPin(pin) && (\n <div\n id=\"pin-anchor\"\n class={classNames('pin-anchor', {\n selected: selected,\n 'pin-occluded': occluded,\n 'pin-detached': detached,\n })}\n style={{\n background: primaryColor,\n }}\n ></div>\n )}\n\n {isIconPin(pin) && (\n <vertex-viewer-icon\n name=\"pin-fill\"\n size=\"lg\"\n class={classNames('pin', {\n 'pin-selected': selected,\n 'pin-occluded': occluded,\n 'pin-detached': detached,\n })}\n style={{\n color: primaryColor,\n }}\n />\n )}\n </Fragment>\n );\n};\n","import { Dimensions, Point } from '@vertexvis/geometry';\n\nexport function getClosestCenterToPoint(\n boxPoint: Point.Point,\n pointToMeasure: Point.Point,\n dimensions: Dimensions.Dimensions\n): Point.Point {\n const topPoint = {\n x: boxPoint.x + dimensions.width / 2,\n y: boxPoint.y,\n };\n\n const bottomPoint = {\n x: boxPoint.x + dimensions.width / 2,\n y: boxPoint.y + dimensions.height,\n };\n\n const rightPoint = {\n x: boxPoint.x + dimensions.width,\n y: boxPoint.y + dimensions.height / 2,\n };\n\n const leftPoint = {\n x: boxPoint.x,\n y: boxPoint.y + dimensions.height / 2,\n };\n\n const candidates = [topPoint, bottomPoint, leftPoint, rightPoint];\n\n const distances = candidates.map((candidate) =>\n Point.distance(candidate, pointToMeasure)\n );\n\n const candidateIndex = distances.indexOf(Math.min(...distances));\n return candidates[candidateIndex];\n}\n",":host {\n\n /**\n * @prop --viewer-annotations-pin-primary-color: A CSS color that\n * specifies the primary color for the pins. This value gets used for the dot color \n * and borders\n */\n --viewer-annotations-pin-primary-color: var(--blue-700);\n\n /**\n * @prop --viewer-annotations-pin-accent-color: A CSS color that\n * specifies the accent color for the pins. This value gets used for background colors\n * \n */\n\n --viewer-annotations-pin-accent-color: var(--blue-200);\n /**\n * @prop viewer-annotations-pin-dot-color: A CSS color that\n * specifies the color of the anchor dot\n */\n --viewer-annotations-pin-dot-color: var(--viewer-annotations-pin-primary-color);\n\n /**\n * @prop --viewer-annotations-pin-color: A CSS color that\n * specifies the color of the pin\n */\n --viewer-annotations-pin-color: var(--viewer-annotations-pin-primary-color);\n\n /**\n * @prop --viewer-annotations-pin-font-size: A CSS property to specify\n the font size of the pin\n */\n --viewer-annotations-pin-font-size: 0.75rem;\n\n /**\n * @prop --viewer-annotations-pin-selected-stroke: A CSS color that\n * specifies the stroke color of a selected pin\n */\n --viewer-annotations-pin-selected-stroke: var(--white);\n\n /**\n * @prop --viewer-annotations-pin-selected-border: A CSS color that\n * specifies the border of a selected pin\n */\n --viewer-annotations-pin-selected-border: 2px solid var(--white);\n\n /**\n * @prop --viewer-annotations-pin-label-border: A CSS color that\n * specifies the border of a text pin anchor\n */\n --viewer-annotations-pin-label-border: 2px solid var(--black);\n\n /**\n * @prop --viewer-annotations-pin-selected-border: A CSS color that\n * specifies the stroke of a selected default pin\n */\n --viewer-annotations-pin-selected-stroke: var(--white);\n\n font-size: var(--viewer-annotations-pin-font-size);\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n overflow: hidden;\n pointer-events: none;\n}\n\n.pin-anchor {\n position: absolute;\n border-radius: 50%;\n transform: translate(-50%, -50%);\n display: block;\n width: 9px;\n height: 9px;\n box-sizing: border-box;\n border: var(--viewer-annotations-pin-label-border);\n background: var(--viewer-annotations-pin-dot-color);\n pointer-events: auto;\n cursor: pointer;\n}\n\n.selected {\n width: 13px;\n height: 13px;\n border: var(--viewer-annotations-pin-selected-border)\n}\n\n.pin {\n color: var(--viewer-annotations-pin-color);\n cursor: pointer;\n transition: opacity 0.3s ease-in;\n\n /**\n * Place bottom point of the pin at the location instead of the middle of the pin\n */\n transform: translate(0px, -12px);\n}\n\n.pin-selected {\n stroke-width: 1;\n stroke: var(--viewer-annotations-pin-selected-stroke);\n}\n\n.pin-occluded {\n opacity: .3;\n transition: opacity 0.3s ease-in;\n}\n\n.pin-detached {\n visibility: hidden;\n}","import {\n Component,\n Fragment,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n JSX,\n Listen,\n Prop,\n State,\n} from '@stencil/core';\nimport { Dimensions, Matrix4, Point, Vector3 } from '@vertexvis/geometry';\n\nimport { Viewport } from '../..';\nimport { PinController } from '../../lib/pins/controller';\nimport { isTextPin, Pin, TextPin } from '../../lib/pins/model';\nimport { PinModel } from '../../lib/pins/model';\nimport { translatePointToScreen } from '../viewer-pin-tool/utils';\nimport { PinRenderer } from './pin-renderer';\nimport { getClosestCenterToPoint } from './utils';\n\ninterface ComputedPoints {\n pinPoint: Point.Point;\n labelPoint?: Point.Point;\n}\n\n@Component({\n tag: 'vertex-viewer-pin-group',\n styleUrl: 'viewer-pin-group.css',\n shadow: false,\n})\nexport class ViewerPinGroup {\n /**\n * The pin to draw for the group\n */\n @Prop()\n public pin?: Pin;\n\n /**\n * The local matrix of this element.\n */\n @Prop({ mutable: true, attribute: null })\n public matrix: Matrix4.Matrix4 = Matrix4.makeIdentity();\n\n /**\n * Projection view matrix used for computing the position of the pin line\n */\n @Prop()\n public projectionViewMatrix: Matrix4.Matrix4 = Matrix4.makeIdentity();\n\n /**\n * The dimensions of the canvas for the pins\n */\n @Prop({ mutable: true })\n public elementBounds?: DOMRect;\n\n /**\n * The model that contains the entities and outcomes from performing pin operations\n */\n @Prop()\n public pinModel: PinModel = new PinModel();\n\n /**\n * The controller that drives behavior for pin operations\n */\n @Prop({ mutable: true })\n public pinController?: PinController;\n\n /**\n * Whether the pin is \"selected\"\n */\n @Prop()\n public selected = false;\n\n /**\n * @internal\n * Whether the pin is occluded\n */\n @Prop({ mutable: true, reflect: true })\n public occluded = false;\n\n /**\n * @internal\n * Whether the pin is detached\n */\n @Prop({ mutable: true, reflect: true })\n public detached = false;\n\n @State()\n private invalidateStateCounter = 0;\n\n private labelEl: HTMLVertexViewerPinLabelElement | undefined;\n\n private resizeObserver?: ResizeObserver;\n\n protected componentWillLoad(): void {\n if (this.pinController == null) {\n this.pinController = new PinController(this.pinModel);\n }\n }\n\n protected componentDidLoad(): void {\n this.setLabelObserver();\n\n if (this.selected) {\n this.labelEl?.setFocus();\n }\n }\n\n /**\n * @ignore\n */\n @Listen('occlusionStateChanged')\n protected async handleOcclusionStateChanged(\n event: CustomEvent<boolean>\n ): Promise<void> {\n this.occluded = event.detail;\n }\n\n /**\n * @ignore\n */\n @Listen('detachedStateChanged')\n protected async handleDetachedStateChanged(\n event: CustomEvent<boolean>\n ): Promise<void> {\n this.detached = event.detail;\n }\n\n protected disconnectedCallback(): void {\n this.labelEl?.removeEventListener('labelChanged', this.invalidateState);\n this.resizeObserver?.disconnect();\n }\n\n protected render(): JSX.Element {\n if (this.pin == null) {\n throw new Error('Unable to draw pin');\n }\n\n const { pinPoint, labelPoint } = this.computePinPoints(this.pin);\n\n return (\n <Fragment>\n <vertex-viewer-dom-element\n data-testid={`drawn-pin-${this.pin.id}`}\n position={this.pin.worldPosition}\n onPointerDown={async () => {\n await this.labelEl?.submit();\n this.selectPin();\n this.handleAnchorPointerDown();\n }}\n detachedOff={false}\n >\n <PinRenderer\n pin={this.pin}\n selected={this.selected}\n occluded={this.occluded}\n detached={this.detached}\n />\n </vertex-viewer-dom-element>\n\n {isTextPin(this.pin) && !this.occluded && !this.detached && (\n <Fragment>\n <vertex-viewer-pin-label-line\n id={`pin-label-line-${this.pin?.id}`}\n pinPoint={pinPoint}\n pin={this.pin}\n labelPoint={labelPoint}\n onPointerDown={() => this.selectPin()}\n ></vertex-viewer-pin-label-line>\n\n <vertex-viewer-pin-label\n pin={this.pin}\n ref={(el) => (this.labelEl = el)}\n elementBounds={this.elementBounds}\n pinController={this.pinController}\n onPointerDown={() => this.selectPin()}\n ></vertex-viewer-pin-label>\n </Fragment>\n )}\n </Fragment>\n );\n }\n\n private invalidateState = (): void => {\n this.invalidateStateCounter = this.invalidateStateCounter + 1;\n };\n\n private setLabelObserver(): void {\n if (this.labelEl != null) {\n this.labelEl.addEventListener('labelChanged', this.invalidateState);\n\n this.resizeObserver = new ResizeObserver(() => this.invalidateState());\n this.resizeObserver.observe(this.labelEl);\n }\n }\n\n private computePinPoints(pin: Pin): ComputedPoints {\n if (this.elementBounds != null && this.pin != null) {\n return isTextPin(this.pin) && this.pin.label.point != null\n ? this.computeTextPinPoints(this.pin, this.elementBounds)\n : this.computeDefaultPinPoints(this.pin, this.elementBounds);\n }\n\n return { pinPoint: pin.worldPosition };\n }\n\n private computeDefaultPinPoints(\n pin: Pin,\n elementBounds: DOMRect\n ): ComputedPoints {\n return {\n pinPoint: this.getFromWorldPosition(\n pin.worldPosition,\n this.projectionViewMatrix,\n elementBounds\n ),\n };\n }\n\n private computeTextPinPoints(\n pin: TextPin,\n elementBounds: DOMRect\n ): ComputedPoints {\n const { pinPoint } = this.computeDefaultPinPoints(pin, elementBounds);\n\n const screenPosition = translatePointToScreen(\n pin.label.point,\n elementBounds\n );\n\n const labelWidth = this.labelEl?.firstElementChild?.clientWidth || 0;\n const labelHeight = this.labelEl?.firstElementChild?.clientHeight || 0;\n\n return {\n pinPoint,\n labelPoint: getClosestCenterToPoint(screenPosition, pinPoint, {\n width: labelWidth,\n height: labelHeight,\n }),\n };\n }\n\n private handleAnchorPointerDown(): void {\n if (\n this.elementBounds != null &&\n this.pinController?.getToolMode() === 'edit' &&\n this.pin != null\n ) {\n this.pinController?.setDraggable({ id: this.pin.id });\n }\n }\n\n private selectPin(): void {\n this.pinController?.setSelectedPinId(this.pin?.id);\n }\n\n private getFromWorldPosition(\n pt: Vector3.Vector3,\n projectionViewMatrix: Matrix4.Matrix4,\n dimensions: Dimensions.Dimensions\n ): Point.Point {\n const ndcPt = Vector3.transformMatrix(pt, projectionViewMatrix);\n return Viewport.fromDimensions(dimensions).transformVectorToViewport(ndcPt);\n }\n}\n"],"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{t,p as i,H as s,d as e,h as n,e as o}from"./p-Bb32XUUS.js";import{p as h}from"./p-Tvs4yxd5.js";import{_ as r}from"./p-Ck9IspfK.js";import{r as l}from"./p-Cd7kap5W.js";import{i as a}from"./p-CiSHWNC4.js";import{E as d}from"./p-Dc9KNUUp.js";function u(t){return t.clientHeight}function c(t,i){return t.contains(i)}function f(t){return t.toLowerCase()}var v=[/([a-z0-9])([A-Z])/g,/([A-Z])([A-Z][a-z])/g];var p=/[^A-Z0-9]+/gi;function m(t,i){if(i===void 0){i={}}var s=i.splitRegexp,e=s===void 0?v:s,n=i.stripRegexp,o=n===void 0?p:n,h=i.transform,r=h===void 0?f:h,l=i.delimiter,a=l===void 0?" ":l;var d=w(w(t,e,"$1\0$2"),o,"\0");var u=0;var c=d.length;while(d.charAt(u)==="\0")u++;while(d.charAt(c-1)==="\0")c--;return d.slice(u,c).split("\0").map(r).join(a)}function w(t,i,s){if(i instanceof RegExp)return t.replace(i,s);return i.reduce((function(t,i){return t.replace(i,s)}),t)}function g(t,i){var s=t.charAt(0);var e=t.substr(1).toLowerCase();if(i>0&&s>="0"&&s<="9"){return"_"+s+e}return""+s.toUpperCase()+e}function b(t,i){if(i===void 0){i={}}return m(t,r({delimiter:"",transform:g},i))}function y(t,i){if(i===0)return t.toLowerCase();return g(t,i)}function x(t,i){if(i===void 0){i={}}return b(t,r({transform:y},i))}const C=/{{(.+)}}/;class R{constructor(t){this.bindings=t}bind(t){this.bindings.forEach((i=>i.bind(t)))}}class ${constructor(t,i){this.node=t;this.expr=i}}class z extends ${constructor(t,i){super(t,i)}bind(t){const i=L(t,this.expr);if(i!==this.node.textContent){this.node.textContent=i}}}class D extends ${constructor(t,i,s){super(t,i);this.attr=s}bind(t){const i=L(t,this.expr);const s=this.node.getAttribute(this.attr);if(s!==i){this.node.setAttribute(this.attr,i)}}}class E extends ${constructor(t,i,s){super(t,i);this.prop=s}bind(t){const i=M(t,this.expr);const s=this.node[this.prop];if(s!==i){this.node[this.prop]=i}}}class H extends ${constructor(t,i,s){super(t,i);this.eventName=s}bind(t){var i;const s=k(this.expr);if(s!=null){(i=this.disposable)===null||i===void 0?void 0:i.dispose();const e=V(t,s,true);this.node.addEventListener(this.eventName,e);this.disposable={dispose:()=>{this.node.removeEventListener(this.eventName,e)}}}}}function P(t){const i=[];if(t.nodeType===Node.ELEMENT_NODE){const s=t;const e=T(s);e.forEach((t=>{if(t.name.startsWith("event:")){const e=x(t.name.replace("event:",""));i.push(new H(s,t.value,e))}else if(t.name.startsWith("attr:")){i.push(new D(s,t.value,t.name.replace("attr:","")))}else if(t.name.startsWith("prop:")){const e=x(t.name.replace("prop:",""));i.push(new E(s,t.value,e))}}))}else if(t.nodeType===Node.TEXT_NODE&&t.textContent!=null&&C.test(t.textContent)){i.push(new z(t,t.textContent))}for(let s=0;s<t.childNodes.length;s++){i.push(...P(t.childNodes[s]))}return i}function T(t){return Array.from(t.attributes).filter((t=>C.test(t.value)))}function k(t){const i=C.exec(t);return i!=null?i[1]:undefined}function L(t,i){const s=k(i);if(s!=null){const e=V(t,s,true);return i.replace(`{{${s}}}`,e===null||e===void 0?void 0:e.toString())}else{return i}}function M(t,i){const s=k(i);if(s!=null){const i=V(t,s,true);return i}else{return i}}function V(t,i,s=false){const[e,...n]=i.split(".");if(s&&n.length===0){return t}else if(s&&n.length>0){return V(t,n.join("."),false)}else{const i=t[e];if(n.length>0){return V(i,n.join("."),false)}else{return i}}}class W{constructor(t,i){this.container=t;this.elementFactory=i;this.instanceMap=new Map;this.elements=[]}swapHeadToTail(t){const i=this.elements.splice(0,t);this.elements.splice(this.elements.length,0,...i);return this.elements.concat()}swapTailToHead(t){const i=this.elements.splice(-t,t);this.elements.splice(0,0,...i);return this.elements.concat()}updateElements(t){const i=t-this.elements.length;if(i>0){for(let t=0;t<i;t++){this.createElement()}}else{for(let t=0;t<-i;t++){this.deleteElement()}}return this.elements.concat()}updateData(t){this.elements.forEach(((i,s)=>{const e=this.instanceMap.get(i);const n=t(s);e===null||e===void 0?void 0:e.bindings.bind(n)}))}updateElementFactory(t){this.elementFactory=t;this.updateElements(0)}iterateElements(t){this.elements.forEach(((i,s)=>{const e=this.instanceMap.get(i);t(i,e.bindings,s)}))}createElement(){const t=this.elementFactory();this.elements.push(t.element);this.instanceMap.set(t.element,t);this.container.append(t.element);return t}deleteElement(){const t=this.elements.pop();if(t!=null){this.instanceMap.delete(t);t.remove()}}}function I(t){const i=t.content.cloneNode(true);const s=i.firstElementChild;const e=new R(P(i));return{element:s,bindings:e}}function A(t){var i;return(i=t.getBoundingClientRect().top)!==null&&i!==void 0?i:0}function S(t){return t.clientWidth}function j(t,i,s){t.scrollTo({top:i,...s})}class N{constructor(){this.onStateChange=new d}setHovered(t){this.onStateChange.emit(t)}stateChanged(t){return this.onStateChange.on(t)}}function U(t,i,s=200){window.clearTimeout(i);return window.setTimeout(t,s)}const O=()=>`:host{position:relative;display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden;font-size:0.825rem;--scene-tree-table-row-padding:2px 0px;--scene-tree-table-column-gap:0.5rem;--scene-tree-table-column-resize-cursor:col-resize}.header{position:relative;display:grid;width:100%;border-bottom:var(--scene-tree-toolbar-separator)}.table{position:relative;display:grid;width:100%;height:100%;overflow:auto}.resize-overlay{position:absolute;top:0;cursor:var(--scene-tree-table-column-resize-cursor);z-index:1000;width:100%;height:100%}.divider-overlay{position:absolute;top:0;display:grid;pointer-events:none;z-index:2000;width:100%;height:100%}`;const Z=i(class t extends s{constructor(t){super();if(t!==false){this.__registerHost()}this.__attachShadow();this.layoutRendered=e(this,"layoutRendered");this.columnsResized=e(this,"columnsResized");this.rows=[];this.totalRows=0;this.rowHeight=24;this.overScanCount=25;this.layoutOffset=0;this.scrollOffset=0;this.viewportStartIndex=0;this.viewportEndIndex=0;this.columnGridLayout="1fr";this.columnGridFixedLayout="";this.isComputingCellHeight=true;this.isScrolling=false;this.stateMap={viewportRows:[],columnWidths:[],columnWidthPercentages:[]};this.lastStartIndex=0;this.columnElements=[];this.cellHoverController=new N;this.layoutColumns=()=>{const t=this.viewportEndIndex-this.viewportStartIndex+1;const i=this.viewportStartIndex-this.lastStartIndex;this.lastStartIndex=this.viewportStartIndex;this.iterateColumns(((s,e,n)=>{e.updateElements(t);if(i>0){e.swapHeadToTail(i)}else{e.swapTailToHead(-i)}s.style.minHeight=`${this.rowHeight*this.totalRows}px`;const o=n===0?t=>`calc(${t} * 0.5rem)`:()=>`0`;e.iterateElements(((t,i,s)=>{const e=this.stateMap.viewportRows[s];if(a(e)){this.updateCell(e,t,i,s,o)}}))}))};this.updateCell=(t,i,s,e,n)=>{i.style.position="absolute";i.style.top=`${(this.viewportStartIndex+e)*this.rowHeight}px`;i.style.boxSizing="border-box";i.style.height=`${this.rowHeight}px`;i.style.width="100%";i.style.paddingLeft=n(t.node.depth);i.tree=this.tree;i.node=t.node;i.hoverController=this.cellHoverController;i.isScrolling=this.isScrolling;s.bind(t)};this.updateLayoutPosition=()=>{l((()=>{if(this.tableElement!=null){this.layoutOffset=A(this.tableElement)}}))};this.recomputeColumnWidths=()=>{const t=this.getLayoutWidth();if(t!=null&&this.stateMap.columnWidths.length===this.stateMap.columnWidthPercentages.length){this.stateMap.columnWidths=this.stateMap.columnWidthPercentages.map((i=>i*t));this.columnsResized.emit(this.stateMap.columnWidths)}};this.recomputeColumnPercentages=()=>{const t=this.getLayoutWidth();if(t!=null&&this.stateMap.columnWidths.length===this.stateMap.columnWidthPercentages.length){this.stateMap.columnWidthPercentages=this.stateMap.columnWidths.map((i=>i/t))}};this.computeInitialColumnWidths=()=>{this.stateMap.columnWidths=this.columnElements.map((t=>{var i;return(i=t.initialWidth)!==null&&i!==void 0?i:100}));const t=this.getLayoutWidth();if(t!=null){const i=this.stateMap.columnWidths.reduce(((t,i)=>t+i),0);const s=this.stateMap.columnWidths.map((s=>s*(t/i)));this.stateMap.columnWidthPercentages=s.map((i=>i/t));this.stateMap.columnWidths=s}};this.updateColumnElements=()=>{this.columnElements=Array.from(this.hostEl.querySelectorAll("vertex-scene-tree-table-column"))};this.computeCellHeight=async()=>{var t;if(this.isComputingCellHeight&&this.columnElements.length>0){const i={index:0,node:{id:{hex:""},name:"Dummy row",expanded:false,selected:false,visible:false,partiallyVisible:false,isLeaf:false,depth:0,columnsList:[],filterHit:false,hasGeometry:false,phantom:false,endItem:false},metadata:{},data:{}};const{bindings:s,element:e}=this.createColumnCellInstance(this.columnElements[0]);s.bind(i);e.style.visibility="hidden";(t=this.columnElements[0])===null||t===void 0?void 0:t.appendChild(e);if(typeof e.componentOnReady==="function"){await e.componentOnReady()}let n=e.clientHeight;if(n===0){n=await new Promise((t=>{setTimeout((()=>t(e.getBoundingClientRect().height)),5)}))}this.rowHeight=n!==null&&n!==void 0?n:this.rowHeight;e.remove();this.isComputingCellHeight=this.rowHeight===0}};this.computeHeaderHeight=()=>{var t;if(this.stateMap.headerHeight==null){this.stateMap.headerHeight=(t=this.headerElement)===null||t===void 0?void 0:t.getBoundingClientRect().height;this.hostEl.style.setProperty("--header-height",`${this.stateMap.headerHeight}px`)}};this.computeColumnGridLayout=()=>{if(this.stateMap.columnWidths.length===0){this.stateMap.columnWidths=this.columnElements.map((t=>{var i;return(i=t.initialWidth)!==null&&i!==void 0?i:100}))}const t=this.getLayoutWidth();if(t!=null){if(this.stateMap.columnWidthPercentages.length===0){this.stateMap.columnWidthPercentages=this.columnElements.map((i=>{var s;return((s=i.initialWidth)!==null&&s!==void 0?s:100)/t}))}}this.columnGridLayout=`${this.stateMap.columnWidths.slice(0,-1).reduce(((t,i)=>`${t} ${i}px`),"")} 1fr`;this.columnGridFixedLayout=`${this.stateMap.columnWidths.reduce(((t,i)=>`${t} ${i}px`),"")}`};this.bindHeaderData=()=>{if(this.stateMap.headerInstances==null){this.stateMap.headerInstances=this.columnElements.map(((t,i)=>{var s;const e=this.createHeaderInstance(t);if(e!=null){e.element.style.paddingRight=i===this.columnElements.length-1?`0`:`var(--scene-tree-table-column-gap)`;e.element.slot="header";e.element.style.gridColumnStart=`${i+1}`;e.element.style.gridColumnEnd=`${i+2}`;(s=this.hostEl)===null||s===void 0?void 0:s.appendChild(e.element)}return e})).filter((t=>t!=null))}if(this.stateMap.headerDividerInstances==null){this.stateMap.headerDividerInstances=this.columnElements.slice(0,-1).map(((t,i)=>{var s;const e=this.createDividerInstance();e.element.slot="divider";e.element.style.position="absolute";e.element.style.right="0";e.element.style.pointerEvents="auto";e.element.style.gridColumnStart=`${i+1}`;e.element.style.gridColumnEnd=`${i+2}`;(s=this.hostEl)===null||s===void 0?void 0:s.appendChild(e.element);return e}))}};this.rebindHeaderData=()=>{var t,i;this.removeDividerDragListeners();(t=this.stateMap.headerInstances)===null||t===void 0?void 0:t.forEach((t=>t.element.remove()));(i=this.stateMap.headerDividerInstances)===null||i===void 0?void 0:i.forEach((t=>t.element.remove()));this.stateMap.headerInstances=undefined;this.stateMap.headerDividerInstances=undefined;this.bindHeaderData();this.addDividerDragListeners()};this.createDividerPointerDownHandler=t=>i=>{var s,e;i.preventDefault();i.stopPropagation();this.lastDividerPointerPosition=h.create(Math.floor(i.clientX),Math.floor(i.clientY));this.resizingColumnIndex=t;(e=(s=this.stateMap.headerDividerInstances)===null||s===void 0?void 0:s[t])===null||e===void 0?void 0:e.element.classList.add("dragging");window.addEventListener("pointermove",this.handleDividerPointerMove);window.addEventListener("pointerup",this.handleDividerPointerUp)};this.handleDividerPointerMove=t=>{const i=h.create(Math.floor(t.clientX),Math.floor(t.clientY));if(this.lastDividerPointerPosition!=null&&this.resizingColumnIndex!=null){const t=this.resizingColumnIndex;const s=h.subtract(this.lastDividerPointerPosition,i);if(Math.abs(s.x)>=1&&this.isValidResize(s,t)){this.stateMap.columnWidths=this.stateMap.columnWidths.map(((i,e)=>e===t?i-s.x:i));if(t+1<this.stateMap.columnWidths.length){this.stateMap.columnWidths=this.stateMap.columnWidths.map(((i,e)=>e===t+1?i+s.x:i))}this.lastDividerPointerPosition=i;this.computeColumnGridLayout()}}};this.handleDividerPointerUp=()=>{var t,i;if(this.resizingColumnIndex!=null){(i=(t=this.stateMap.headerDividerInstances)===null||t===void 0?void 0:t[this.resizingColumnIndex])===null||i===void 0?void 0:i.element.classList.remove("dragging")}this.lastDividerPointerPosition=undefined;this.resizingColumnIndex=undefined;this.recomputeColumnPercentages();this.recomputeColumnWidths();window.removeEventListener("pointermove",this.handleDividerPointerMove);window.removeEventListener("pointerup",this.handleDividerPointerUp)};this.isValidResize=(t,i)=>{var s,e,n,o;const h=this.columnElements[i];const r=this.columnElements[i+1];const l=this.stateMap.columnWidths[i];const a=this.stateMap.columnWidths[i+1];const d=(s=h.minWidth)!==null&&s!==void 0?s:0;const u=(e=h.maxWidth)!==null&&e!==void 0?e:Number.MAX_SAFE_INTEGER;const c=(n=r.minWidth)!==null&&n!==void 0?n:0;const f=(o=r.maxWidth)!==null&&o!==void 0?o:Number.MAX_SAFE_INTEGER;const v=l-t.x>d&&l-t.x<u;const p=r!=null?a+t.x>c&&a+t.x<f:true;return v&&p};this.handleScrollChanged=async t=>{this.isScrolling=true;this.scrollTimer=U((()=>{this.isScrolling=false}),this.scrollTimer);this.scrollOffset=t.target.scrollTop;await this.computeAndUpdateViewportRows()}}componentWillLoad(){this.updateColumnElements();this.createPools();this.headerResizeObserver=new ResizeObserver((()=>{this.stateMap.headerHeight=undefined;this.computeHeaderHeight();this.updateLayoutPosition()}));this.resizeObserver=new ResizeObserver((()=>{this.updateLayoutPosition();this.clearLayoutHeight();this.clearLayoutWidth();this.recomputeColumnWidths();this.computeColumnGridLayout()}))}async componentDidLoad(){var t,i,s;this.computeInitialColumnWidths();this.computeColumnGridLayout();this.ensureDividerTemplateDefined();this.computeCellHeight();this.computeHeaderHeight();this.rebindHeaderData();(t=this.tableElement)===null||t===void 0?void 0:t.addEventListener("scroll",this.handleScrollChanged,{passive:true});if(this.headerElement!=null){(i=this.headerResizeObserver)===null||i===void 0?void 0:i.observe(this.headerElement)}(s=this.resizeObserver)===null||s===void 0?void 0:s.observe(this.hostEl)}async componentWillRender(){await this.computeAndUpdateViewportRows()}componentDidRender(){this.layoutColumns();this.layoutRendered.emit()}async componentDidUpdate(){if(this.isComputingCellHeight){await this.computeCellHeight()}}disconnectedCallback(){var t,i,s;(t=this.tableElement)===null||t===void 0?void 0:t.removeEventListener("scroll",this.handleScrollChanged);this.removeDividerDragListeners();(i=this.headerResizeObserver)===null||i===void 0?void 0:i.disconnect();(s=this.resizeObserver)===null||s===void 0?void 0:s.disconnect();this.stateMap.columnWidths=[];this.stateMap.columnWidthPercentages=[]}async handleViewportRowsPropsChanged(){await this.computeAndUpdateViewportRows()}async scrollToPosition(t,i){if(this.tableElement!=null){j(this.tableElement,t,i)}}async attemptComputeCellHeight(){this.computeCellHeight()}render(){return n(o,{key:"b2968ba20c38a9e9ddda5b5af54c8ffef30d7682"},n("div",{key:"d17866ac3ac7f26ba76b46ff5682a0ec910faff5",class:"header",ref:t=>this.headerElement=t,style:{gridTemplateColumns:this.columnGridFixedLayout,display:this.columnElements.length<=1?"none":"grid"}},n("slot",{key:"6bd84a11c21b399b848b8e18875117c9bf549278",name:"header"})),n("div",{key:"619f01616e0903d35d806116fb3f0f549ba9e388",class:"table",ref:t=>this.tableElement=t,style:{gridTemplateColumns:this.columnGridLayout}},n("slot",{key:"b0de28b116b31023d2988d5dc13dbd0838b2317d",onSlotchange:()=>{this.ensureDividerTemplateDefined();this.updateColumnElements();this.recreateColumnPools();this.computeInitialColumnWidths();this.rebindHeaderData();this.computeColumnGridLayout()}})),n("div",{key:"7260968b016ab69858dcd96ec2f053654772d432",class:"divider-overlay",style:{gridTemplateColumns:this.columnGridFixedLayout}},n("slot",{key:"9066d169f49953069710e0a20899f4dd5c9c69c9",name:"divider"})),this.resizingColumnIndex!=null&&n("div",{key:"54c202cc30717398d42eb80db613f9288334cd3a",class:"resize-overlay"}))}computeViewportRows(){const t=this.getLayoutHeight();const i=t!=null&&t>0&&!this.isComputingCellHeight;if(i){const i=Math.ceil(t/this.rowHeight);const s=Math.floor(this.scrollOffset/this.rowHeight);const e=s+i;const n=Math.max(0,s-this.overScanCount);const o=Math.min(this.totalRows-1,e+this.overScanCount);const h=this.getViewportRows(n,o);this.viewportStartIndex=n;this.viewportEndIndex=o;this.stateMap.viewportRows=h}}async computeAndUpdateViewportRows(){var t;this.computeViewportRows();if(((t=this.controller)===null||t===void 0?void 0:t.isConnected)&&this.totalRows>0){await this.controller.updateActiveRowRange(this.viewportStartIndex,this.viewportEndIndex)}}createPools(){if(this.stateMap.columnElementPools==null){this.stateMap.columnElementPools=this.columnElements.reduce(((t,i)=>t.set(i,new W(i,(()=>this.createColumnCellInstance(i))))),new WeakMap)}}recreateColumnPools(){this.columnElements.forEach((t=>{var i,s,e;if(((i=this.stateMap.columnElementPools)===null||i===void 0?void 0:i.get(t))==null){(s=this.stateMap.columnElementPools)===null||s===void 0?void 0:s.set(t,new W(t,(()=>this.createColumnCellInstance(t))))}else{(e=this.stateMap.columnElementPools.get(t))===null||e===void 0?void 0:e.updateElementFactory((()=>this.createColumnCellInstance(t)))}}))}iterateColumns(t){this.columnElements.forEach(((i,s)=>{var e;const n=(e=this.stateMap.columnElementPools)===null||e===void 0?void 0:e.get(i);if(n!=null){t(i,n,s)}else{throw new Error("Cannot find pool for column")}}))}ensureDividerTemplateDefined(){const t=this.hostEl.querySelector('template[slot="divider"]');if(t==null){const t=document.createElement("template");t.slot="divider";t.innerHTML=`\n <vertex-scene-tree-table-resize-divider slot="divider">\n </vertex-scene-tree-table-resize-divider>\n `;this.hostEl.appendChild(t)}}createHeaderInstance(t){const i=t.querySelector('template[slot="header"]');if(i!=null){return I(i)}}createDividerInstance(){const t=this.hostEl.querySelector('template[slot="divider"]');if(t!=null){return I(t)}else{throw new Error("Table is missing divider template element")}}createColumnCellInstance(t){const i=t.querySelector('template:not([slot="header"])');if(i!=null){return I(i)}else{throw new Error("Column is missing cell template element")}}addDividerDragListeners(){var t;this.stateMap.headerDividerListeners=(t=this.stateMap.headerDividerInstances)===null||t===void 0?void 0:t.map(((t,i)=>{const s=this.createDividerPointerDownHandler(i);t.element.addEventListener("pointerdown",s);return s}))}removeDividerDragListeners(){var t;if(this.stateMap.headerDividerListeners!=null){const i=this.stateMap.headerDividerListeners;(t=this.stateMap.headerDividerInstances)===null||t===void 0?void 0:t.forEach(((t,s)=>{const e=i[s];if(e!=null){t.element.removeEventListener("pointerdown",e)}}));this.stateMap.headerDividerListeners=undefined}}getViewportRows(t,i){const s=this.rows.slice(t,i+1);return s.map((t=>t!=null?this.populateRowData(t):t))}populateRowData(t){var i;if(this.rowData!=null&&t!=null){const s=((i=this.rowData)===null||i===void 0?void 0:i.call(this,t))||{};return{...t,data:s}}else{return t}}getLayoutHeight(){if(this.layoutHeight==null&&this.tableElement!=null){this.layoutHeight=u(this.tableElement)}return this.layoutHeight}getLayoutWidth(){if(this.layoutWidth==null){const t=S(this.hostEl);if(t>0){this.layoutWidth=t}}return this.layoutWidth}clearLayoutHeight(){this.layoutHeight=undefined}clearLayoutWidth(){this.layoutWidth=undefined}get hostEl(){return this}static get watchers(){return{rows:[{handleViewportRowsPropsChanged:0}],totalRows:[{handleViewportRowsPropsChanged:0}],rowHeight:[{handleViewportRowsPropsChanged:0}]}}static get style(){return O()}},[257,"vertex-scene-tree-table-layout",{tree:[16],controller:[16],rows:[16],totalRows:[2,"total-rows"],rowHeight:[1026,"row-height"],overScanCount:[2,"over-scan-count"],rowData:[16],layoutOffset:[1026,"layout-offset"],scrollOffset:[1026,"scroll-offset"],layoutHeight:[1026,"layout-height"],layoutWidth:[1026,"layout-width"],viewportStartIndex:[1026,"viewport-start-index"],viewportEndIndex:[1026,"viewport-end-index"],columnGridLayout:[32],columnGridFixedLayout:[32],isComputingCellHeight:[32],lastDividerPointerPosition:[32],resizingColumnIndex:[32],isScrolling:[32],scrollTimer:[32],stateMap:[32],scrollToPosition:[64],attemptComputeCellHeight:[64]},undefined,{rows:[{handleViewportRowsPropsChanged:0}],totalRows:[{handleViewportRowsPropsChanged:0}],rowHeight:[{handleViewportRowsPropsChanged:0}]}]);function G(){if(typeof customElements==="undefined"){return}const i=["vertex-scene-tree-table-layout"];i.forEach((i=>{switch(i){case"vertex-scene-tree-table-layout":if(!customElements.get(t(i))){customElements.define(t(i),Z)}break}}))}G();export{Z as S,G as d,c as g};
|
|
5
|
-
//# sourceMappingURL=p-
|
|
4
|
+
import{t,p as i,H as s,d as e,h as n,e as o}from"./p-Bb32XUUS.js";import{p as h}from"./p-Tvs4yxd5.js";import{_ as r}from"./p-Ck9IspfK.js";import{r as l}from"./p-Cd7kap5W.js";import{i as a}from"./p-CiSHWNC4.js";import{E as d}from"./p-Dc9KNUUp.js";function u(t){return t.clientHeight}function c(t,i){return t.contains(i)}function f(t){return t.toLowerCase()}var v=[/([a-z0-9])([A-Z])/g,/([A-Z])([A-Z][a-z])/g];var p=/[^A-Z0-9]+/gi;function m(t,i){if(i===void 0){i={}}var s=i.splitRegexp,e=s===void 0?v:s,n=i.stripRegexp,o=n===void 0?p:n,h=i.transform,r=h===void 0?f:h,l=i.delimiter,a=l===void 0?" ":l;var d=w(w(t,e,"$1\0$2"),o,"\0");var u=0;var c=d.length;while(d.charAt(u)==="\0")u++;while(d.charAt(c-1)==="\0")c--;return d.slice(u,c).split("\0").map(r).join(a)}function w(t,i,s){if(i instanceof RegExp)return t.replace(i,s);return i.reduce((function(t,i){return t.replace(i,s)}),t)}function g(t,i){var s=t.charAt(0);var e=t.substr(1).toLowerCase();if(i>0&&s>="0"&&s<="9"){return"_"+s+e}return""+s.toUpperCase()+e}function y(t,i){if(i===void 0){i={}}return m(t,r({delimiter:"",transform:g},i))}function b(t,i){if(i===0)return t.toLowerCase();return g(t,i)}function x(t,i){if(i===void 0){i={}}return y(t,r({transform:b},i))}const C=/{{(.+)}}/;class R{constructor(t){this.bindings=t}bind(t){this.bindings.forEach((i=>i.bind(t)))}}class z{constructor(t,i){this.node=t;this.expr=i}}class $ extends z{constructor(t,i){super(t,i)}bind(t){const i=k(t,this.expr);if(i!==this.node.textContent){this.node.textContent=i}}}class D extends z{constructor(t,i,s){super(t,i);this.attr=s}bind(t){const i=k(t,this.expr);const s=this.node.getAttribute(this.attr);if(s!==i){this.node.setAttribute(this.attr,i)}}}class P extends z{constructor(t,i,s){super(t,i);this.prop=s}bind(t){const i=M(t,this.expr);const s=this.node[this.prop];if(s!==i){this.node[this.prop]=i}}}class E extends z{constructor(t,i,s){super(t,i);this.eventName=s}bind(t){var i;const s=T(this.expr);if(s!=null){(i=this.disposable)===null||i===void 0?void 0:i.dispose();const e=V(t,s,true);this.node.addEventListener(this.eventName,e);this.disposable={dispose:()=>{this.node.removeEventListener(this.eventName,e)}}}}}function H(t){const i=[];if(t.nodeType===Node.ELEMENT_NODE){const s=t;const e=L(s);e.forEach((t=>{if(t.name.startsWith("event:")){const e=x(t.name.replace("event:",""));i.push(new E(s,t.value,e))}else if(t.name.startsWith("attr:")){i.push(new D(s,t.value,t.name.replace("attr:","")))}else if(t.name.startsWith("prop:")){const e=x(t.name.replace("prop:",""));i.push(new P(s,t.value,e))}}))}else if(t.nodeType===Node.TEXT_NODE&&t.textContent!=null&&C.test(t.textContent)){i.push(new $(t,t.textContent))}for(let s=0;s<t.childNodes.length;s++){i.push(...H(t.childNodes[s]))}return i}function L(t){return Array.from(t.attributes).filter((t=>C.test(t.value)))}function T(t){const i=C.exec(t);return i!=null?i[1]:undefined}function k(t,i){const s=T(i);if(s!=null){const e=V(t,s,true);return i.replace(`{{${s}}}`,e===null||e===void 0?void 0:e.toString())}else{return i}}function M(t,i){const s=T(i);if(s!=null){const i=V(t,s,true);return i}else{return i}}function V(t,i,s=false){const[e,...n]=i.split(".");if(s&&n.length===0){return t}else if(s&&n.length>0){return V(t,n.join("."),false)}else{const i=t[e];if(n.length>0){return V(i,n.join("."),false)}else{return i}}}class W{constructor(t,i){this.container=t;this.elementFactory=i;this.instanceMap=new Map;this.elements=[]}swapHeadToTail(t){const i=this.elements.splice(0,t);this.elements.splice(this.elements.length,0,...i);return this.elements.concat()}swapTailToHead(t){const i=this.elements.splice(-t,t);this.elements.splice(0,0,...i);return this.elements.concat()}updateElements(t){const i=t-this.elements.length;if(i>0){for(let t=0;t<i;t++){this.createElement()}}else{for(let t=0;t<-i;t++){this.deleteElement()}}return this.elements.concat()}updateData(t){this.elements.forEach(((i,s)=>{const e=this.instanceMap.get(i);const n=t(s);e===null||e===void 0?void 0:e.bindings.bind(n)}))}updateElementFactory(t){this.elementFactory=t;this.updateElements(0)}iterateElements(t){this.elements.forEach(((i,s)=>{const e=this.instanceMap.get(i);t(i,e.bindings,s)}))}createElement(){const t=this.elementFactory();this.elements.push(t.element);this.instanceMap.set(t.element,t);this.container.append(t.element);return t}deleteElement(){const t=this.elements.pop();if(t!=null){this.instanceMap.delete(t);t.remove()}}}function I(t){const i=t.content.cloneNode(true);const s=i.firstElementChild;const e=new R(H(i));return{element:s,bindings:e}}function A(t){var i;return(i=t.getBoundingClientRect().top)!==null&&i!==void 0?i:0}function S(t){return t.clientWidth}function j(t,i,s){t.scrollTo({top:i,...s})}class N{constructor(){this.onStateChange=new d}setHovered(t){this.onStateChange.emit(t)}stateChanged(t){return this.onStateChange.on(t)}}function U(t,i,s=200){window.clearTimeout(i);return window.setTimeout(t,s)}const O=()=>`:host{position:relative;display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden;font-size:0.825rem;--scene-tree-table-row-padding:2px 0px;--scene-tree-table-column-gap:0.5rem;--scene-tree-table-column-resize-cursor:col-resize}.header{position:relative;display:grid;width:100%;border-bottom:var(--scene-tree-toolbar-separator)}.table{position:relative;display:grid;width:100%;height:100%;overflow:auto}.resize-overlay{position:absolute;top:0;cursor:var(--scene-tree-table-column-resize-cursor);z-index:1000;width:100%;height:100%}.divider-overlay{position:absolute;top:0;display:grid;pointer-events:none;z-index:2000;width:100%;height:100%}`;const Z=i(class t extends s{constructor(t){super();if(t!==false){this.__registerHost()}this.__attachShadow();this.layoutRendered=e(this,"layoutRendered");this.columnsResized=e(this,"columnsResized");this.rows=[];this.totalRows=0;this.rowHeight=24;this.overScanCount=25;this.layoutOffset=0;this.scrollOffset=0;this.viewportStartIndex=0;this.viewportEndIndex=0;this.columnGridLayout="1fr";this.columnGridFixedLayout="";this.isComputingCellHeight=true;this.isScrolling=false;this.stateMap={viewportRows:[],columnWidths:[],columnWidthPercentages:[]};this.lastStartIndex=0;this.columnElements=[];this.cellHoverController=new N;this.layoutColumns=()=>{const t=this.viewportEndIndex-this.viewportStartIndex+1;const i=this.viewportStartIndex-this.lastStartIndex;this.lastStartIndex=this.viewportStartIndex;this.iterateColumns(((s,e,n)=>{e.updateElements(t);if(i>0){e.swapHeadToTail(i)}else{e.swapTailToHead(-i)}s.style.minHeight=`${this.rowHeight*this.totalRows}px`;const o=n===0?t=>`calc(${t} * 0.5rem)`:()=>`0`;e.iterateElements(((t,i,s)=>{const e=this.stateMap.viewportRows[s];if(a(e)){this.updateCell(e,t,i,s,o)}}))}))};this.updateCell=(t,i,s,e,n)=>{i.style.position="absolute";i.style.top=`${(this.viewportStartIndex+e)*this.rowHeight}px`;i.style.boxSizing="border-box";i.style.height=`${this.rowHeight}px`;i.style.width="100%";i.style.paddingLeft=n(t.node.depth);i.tree=this.tree;i.node=t.node;i.hoverController=this.cellHoverController;i.isScrolling=this.isScrolling;s.bind(t)};this.updateLayoutPosition=()=>{l((()=>{if(this.tableElement!=null){this.layoutOffset=A(this.tableElement)}}))};this.recomputeColumnWidths=()=>{const t=this.getLayoutWidth();if(t!=null&&this.stateMap.columnWidths.length===this.stateMap.columnWidthPercentages.length){this.stateMap.columnWidths=this.stateMap.columnWidthPercentages.map((i=>i*t));this.columnsResized.emit(this.stateMap.columnWidths)}};this.recomputeColumnPercentages=()=>{const t=this.getLayoutWidth();if(t!=null&&this.stateMap.columnWidths.length===this.stateMap.columnWidthPercentages.length){this.stateMap.columnWidthPercentages=this.stateMap.columnWidths.map((i=>i/t))}};this.computeInitialColumnWidths=()=>{this.stateMap.columnWidths=this.columnElements.map((t=>{var i;return(i=t.initialWidth)!==null&&i!==void 0?i:100}));const t=this.getLayoutWidth();if(t!=null){const i=this.stateMap.columnWidths.reduce(((t,i)=>t+i),0);const s=this.stateMap.columnWidths.map((s=>s*(t/i)));this.stateMap.columnWidthPercentages=s.map((i=>i/t));this.stateMap.columnWidths=s}};this.updateColumnElements=()=>{this.columnElements=Array.from(this.hostEl.querySelectorAll("vertex-scene-tree-table-column"))};this.computeCellHeight=async()=>{var t;if(this.isComputingCellHeight&&this.columnElements.length>0){const i={index:0,node:{id:{hex:""},name:"Dummy row",expanded:false,selected:false,visible:false,partiallyVisible:false,isLeaf:false,depth:0,columnsList:[],filterHit:false,hasGeometry:false,phantom:false,endItem:false},metadata:{},data:{}};const{bindings:s,element:e}=this.createColumnCellInstance(this.columnElements[0]);s.bind(i);e.style.visibility="hidden";(t=this.columnElements[0])===null||t===void 0?void 0:t.appendChild(e);if(typeof e.componentOnReady==="function"){await e.componentOnReady()}let n=e.clientHeight;if(n===0){n=await new Promise((t=>{setTimeout((()=>t(e.getBoundingClientRect().height)),5)}))}this.rowHeight=n!==null&&n!==void 0?n:this.rowHeight;e.remove();this.isComputingCellHeight=this.rowHeight===0}};this.computeHeaderHeight=()=>{var t;if(this.stateMap.headerHeight==null){this.stateMap.headerHeight=(t=this.headerElement)===null||t===void 0?void 0:t.getBoundingClientRect().height;this.hostEl.style.setProperty("--header-height",`${this.stateMap.headerHeight}px`)}};this.computeColumnGridLayout=()=>{if(this.stateMap.columnWidths.length===0){this.stateMap.columnWidths=this.columnElements.map((t=>{var i;return(i=t.initialWidth)!==null&&i!==void 0?i:100}))}const t=this.getLayoutWidth();if(t!=null){if(this.stateMap.columnWidthPercentages.length===0){this.stateMap.columnWidthPercentages=this.columnElements.map((i=>{var s;return((s=i.initialWidth)!==null&&s!==void 0?s:100)/t}))}}this.columnGridLayout=`${this.stateMap.columnWidths.slice(0,-1).reduce(((t,i)=>`${t} ${i}px`),"")} 1fr`;this.columnGridFixedLayout=`${this.stateMap.columnWidths.reduce(((t,i)=>`${t} ${i}px`),"")}`};this.bindHeaderData=()=>{if(this.stateMap.headerInstances==null){this.stateMap.headerInstances=this.columnElements.map(((t,i)=>{var s;const e=this.createHeaderInstance(t);if(e!=null){e.element.style.paddingRight=i===this.columnElements.length-1?`0`:`var(--scene-tree-table-column-gap)`;e.element.slot="header";e.element.style.gridColumnStart=`${i+1}`;e.element.style.gridColumnEnd=`${i+2}`;(s=this.hostEl)===null||s===void 0?void 0:s.appendChild(e.element)}return e})).filter((t=>t!=null))}if(this.stateMap.headerDividerInstances==null){this.stateMap.headerDividerInstances=this.columnElements.slice(0,-1).map(((t,i)=>{var s;const e=this.createDividerInstance();e.element.slot="divider";e.element.style.position="absolute";e.element.style.right="0";e.element.style.pointerEvents="auto";e.element.style.gridColumnStart=`${i+1}`;e.element.style.gridColumnEnd=`${i+2}`;(s=this.hostEl)===null||s===void 0?void 0:s.appendChild(e.element);return e}))}};this.rebindHeaderData=()=>{var t,i;this.removeDividerDragListeners();(t=this.stateMap.headerInstances)===null||t===void 0?void 0:t.forEach((t=>t.element.remove()));(i=this.stateMap.headerDividerInstances)===null||i===void 0?void 0:i.forEach((t=>t.element.remove()));this.stateMap.headerInstances=undefined;this.stateMap.headerDividerInstances=undefined;this.bindHeaderData();this.addDividerDragListeners()};this.createDividerPointerDownHandler=t=>i=>{var s,e;i.preventDefault();i.stopPropagation();this.lastDividerPointerPosition=h.create(Math.floor(i.clientX),Math.floor(i.clientY));this.resizingColumnIndex=t;(e=(s=this.stateMap.headerDividerInstances)===null||s===void 0?void 0:s[t])===null||e===void 0?void 0:e.element.classList.add("dragging");window.addEventListener("pointermove",this.handleDividerPointerMove);window.addEventListener("pointerup",this.handleDividerPointerUp)};this.handleDividerPointerMove=t=>{const i=h.create(Math.floor(t.clientX),Math.floor(t.clientY));if(this.lastDividerPointerPosition!=null&&this.resizingColumnIndex!=null){const t=this.resizingColumnIndex;const s=h.subtract(this.lastDividerPointerPosition,i);if(Math.abs(s.x)>=1&&this.isValidResize(s,t)){this.stateMap.columnWidths=this.stateMap.columnWidths.map(((i,e)=>e===t?i-s.x:i));if(t+1<this.stateMap.columnWidths.length){this.stateMap.columnWidths=this.stateMap.columnWidths.map(((i,e)=>e===t+1?i+s.x:i))}this.lastDividerPointerPosition=i;this.computeColumnGridLayout()}}};this.handleDividerPointerUp=()=>{var t,i;if(this.resizingColumnIndex!=null){(i=(t=this.stateMap.headerDividerInstances)===null||t===void 0?void 0:t[this.resizingColumnIndex])===null||i===void 0?void 0:i.element.classList.remove("dragging")}this.lastDividerPointerPosition=undefined;this.resizingColumnIndex=undefined;this.recomputeColumnPercentages();this.recomputeColumnWidths();window.removeEventListener("pointermove",this.handleDividerPointerMove);window.removeEventListener("pointerup",this.handleDividerPointerUp)};this.isValidResize=(t,i)=>{var s,e,n,o;const h=this.columnElements[i];const r=this.columnElements[i+1];const l=this.stateMap.columnWidths[i];const a=this.stateMap.columnWidths[i+1];const d=(s=h.minWidth)!==null&&s!==void 0?s:0;const u=(e=h.maxWidth)!==null&&e!==void 0?e:Number.MAX_SAFE_INTEGER;const c=(n=r.minWidth)!==null&&n!==void 0?n:0;const f=(o=r.maxWidth)!==null&&o!==void 0?o:Number.MAX_SAFE_INTEGER;const v=l-t.x>d&&l-t.x<u;const p=r!=null?a+t.x>c&&a+t.x<f:true;return v&&p};this.handleScrollChanged=async t=>{this.isScrolling=true;this.scrollTimer=U((()=>{this.isScrolling=false}),this.scrollTimer);this.scrollOffset=t.target.scrollTop;await this.computeAndUpdateViewportRows()}}componentWillLoad(){this.updateColumnElements();this.createPools();this.initializeColumnLayout();this.headerResizeObserver=new ResizeObserver((()=>{this.stateMap.headerHeight=undefined;this.computeHeaderHeight();this.updateLayoutPosition()}));this.resizeObserver=new ResizeObserver((()=>{this.updateLayoutPosition();this.clearLayoutHeight();this.clearLayoutWidth();this.recomputeColumnWidths();this.computeColumnGridLayout()}))}async componentDidLoad(){var t,i,s;(t=this.tableElement)===null||t===void 0?void 0:t.addEventListener("scroll",this.handleScrollChanged,{passive:true});if(this.headerElement!=null){(i=this.headerResizeObserver)===null||i===void 0?void 0:i.observe(this.headerElement)}(s=this.resizeObserver)===null||s===void 0?void 0:s.observe(this.hostEl);await Promise.resolve();await this.initializeMeasuredLayout()}async componentWillRender(){await this.computeAndUpdateViewportRows()}componentDidRender(){this.layoutColumns();this.layoutRendered.emit()}async componentDidUpdate(){if(this.isComputingCellHeight){await this.computeCellHeight()}}disconnectedCallback(){var t,i,s;(t=this.tableElement)===null||t===void 0?void 0:t.removeEventListener("scroll",this.handleScrollChanged);this.removeDividerDragListeners();(i=this.headerResizeObserver)===null||i===void 0?void 0:i.disconnect();(s=this.resizeObserver)===null||s===void 0?void 0:s.disconnect();this.stateMap.columnWidths=[];this.stateMap.columnWidthPercentages=[]}async handleViewportRowsPropsChanged(){await this.computeAndUpdateViewportRows()}async scrollToPosition(t,i){if(this.tableElement!=null){j(this.tableElement,t,i)}}async attemptComputeCellHeight(){this.computeCellHeight()}render(){return n(o,{key:"d03ad68c3f972ae06117323ee2d93ea72fba68df"},n("div",{key:"f0bf6530a25bf37a898792c2547e5617d96f0e8f",class:"header",ref:t=>this.headerElement=t,style:{gridTemplateColumns:this.columnGridFixedLayout,display:this.columnElements.length<=1?"none":"grid"}},n("slot",{key:"859ae58af0f796e3334c02e3a32613fa6eb46aa3",name:"header"})),n("div",{key:"0554485cbc8a6640a76f2999c783fe8802db0535",class:"table",ref:t=>this.tableElement=t,style:{gridTemplateColumns:this.columnGridLayout}},n("slot",{key:"03bbe18d7b24f8d54816e2c967990fda96c85c1d",onSlotchange:()=>{this.ensureDividerTemplateDefined();this.updateColumnElements();this.recreateColumnPools();this.computeInitialColumnWidths();this.rebindHeaderData();this.computeColumnGridLayout()}})),n("div",{key:"a70e34447a0414fd268233cb3cdc41389a339990",class:"divider-overlay",style:{gridTemplateColumns:this.columnGridFixedLayout}},n("slot",{key:"cf0f78b06877eca19a28c9b49f1182e79c57e78f",name:"divider"})),this.resizingColumnIndex!=null&&n("div",{key:"12ef4a77e9921c018f0598b51a80764c1649a5e5",class:"resize-overlay"}))}computeViewportRows(){const t=this.getLayoutHeight();const i=t!=null&&t>0&&!this.isComputingCellHeight;if(i){const i=Math.ceil(t/this.rowHeight);const s=Math.floor(this.scrollOffset/this.rowHeight);const e=s+i;const n=Math.max(0,s-this.overScanCount);const o=Math.min(this.totalRows-1,e+this.overScanCount);const h=this.getViewportRows(n,o);this.viewportStartIndex=n;this.viewportEndIndex=o;this.stateMap.viewportRows=h}}initializeColumnLayout(){this.computeInitialColumnWidths();this.computeColumnGridLayout();this.ensureDividerTemplateDefined();this.rebindHeaderData()}async initializeMeasuredLayout(){await this.computeCellHeight();this.computeHeaderHeight()}async computeAndUpdateViewportRows(){var t;this.computeViewportRows();if(((t=this.controller)===null||t===void 0?void 0:t.isConnected)&&this.totalRows>0){await this.controller.updateActiveRowRange(this.viewportStartIndex,this.viewportEndIndex)}}createPools(){if(this.stateMap.columnElementPools==null){this.stateMap.columnElementPools=this.columnElements.reduce(((t,i)=>t.set(i,new W(i,(()=>this.createColumnCellInstance(i))))),new WeakMap)}}recreateColumnPools(){this.columnElements.forEach((t=>{var i,s,e;if(((i=this.stateMap.columnElementPools)===null||i===void 0?void 0:i.get(t))==null){(s=this.stateMap.columnElementPools)===null||s===void 0?void 0:s.set(t,new W(t,(()=>this.createColumnCellInstance(t))))}else{(e=this.stateMap.columnElementPools.get(t))===null||e===void 0?void 0:e.updateElementFactory((()=>this.createColumnCellInstance(t)))}}))}iterateColumns(t){this.columnElements.forEach(((i,s)=>{var e;const n=(e=this.stateMap.columnElementPools)===null||e===void 0?void 0:e.get(i);if(n!=null){t(i,n,s)}else{throw new Error("Cannot find pool for column")}}))}ensureDividerTemplateDefined(){const t=this.hostEl.querySelector('template[slot="divider"]');if(t==null){const t=document.createElement("template");t.slot="divider";t.innerHTML=`\n <vertex-scene-tree-table-resize-divider slot="divider">\n </vertex-scene-tree-table-resize-divider>\n `;this.hostEl.appendChild(t)}}createHeaderInstance(t){const i=t.querySelector('template[slot="header"]');if(i!=null){return I(i)}}createDividerInstance(){const t=this.hostEl.querySelector('template[slot="divider"]');if(t!=null){return I(t)}else{throw new Error("Table is missing divider template element")}}createColumnCellInstance(t){const i=t.querySelector('template:not([slot="header"])');if(i!=null){return I(i)}else{throw new Error("Column is missing cell template element")}}addDividerDragListeners(){var t;this.stateMap.headerDividerListeners=(t=this.stateMap.headerDividerInstances)===null||t===void 0?void 0:t.map(((t,i)=>{const s=this.createDividerPointerDownHandler(i);t.element.addEventListener("pointerdown",s);return s}))}removeDividerDragListeners(){var t;if(this.stateMap.headerDividerListeners!=null){const i=this.stateMap.headerDividerListeners;(t=this.stateMap.headerDividerInstances)===null||t===void 0?void 0:t.forEach(((t,s)=>{const e=i[s];if(e!=null){t.element.removeEventListener("pointerdown",e)}}));this.stateMap.headerDividerListeners=undefined}}getViewportRows(t,i){const s=this.rows.slice(t,i+1);return s.map((t=>t!=null?this.populateRowData(t):t))}populateRowData(t){var i;if(this.rowData!=null&&t!=null){const s=((i=this.rowData)===null||i===void 0?void 0:i.call(this,t))||{};return{...t,data:s}}else{return t}}getLayoutHeight(){if(this.layoutHeight==null&&this.tableElement!=null){this.layoutHeight=u(this.tableElement)}return this.layoutHeight}getLayoutWidth(){if(this.layoutWidth==null){const t=S(this.hostEl);if(t>0){this.layoutWidth=t}}return this.layoutWidth}clearLayoutHeight(){this.layoutHeight=undefined}clearLayoutWidth(){this.layoutWidth=undefined}get hostEl(){return this}static get watchers(){return{rows:[{handleViewportRowsPropsChanged:0}],totalRows:[{handleViewportRowsPropsChanged:0}],rowHeight:[{handleViewportRowsPropsChanged:0}]}}static get style(){return O()}},[257,"vertex-scene-tree-table-layout",{tree:[16],controller:[16],rows:[16],totalRows:[2,"total-rows"],rowHeight:[1026,"row-height"],overScanCount:[2,"over-scan-count"],rowData:[16],layoutOffset:[1026,"layout-offset"],scrollOffset:[1026,"scroll-offset"],layoutHeight:[1026,"layout-height"],layoutWidth:[1026,"layout-width"],viewportStartIndex:[1026,"viewport-start-index"],viewportEndIndex:[1026,"viewport-end-index"],columnGridLayout:[32],columnGridFixedLayout:[32],isComputingCellHeight:[32],lastDividerPointerPosition:[32],resizingColumnIndex:[32],isScrolling:[32],scrollTimer:[32],stateMap:[32],scrollToPosition:[64],attemptComputeCellHeight:[64]},undefined,{rows:[{handleViewportRowsPropsChanged:0}],totalRows:[{handleViewportRowsPropsChanged:0}],rowHeight:[{handleViewportRowsPropsChanged:0}]}]);function G(){if(typeof customElements==="undefined"){return}const i=["vertex-scene-tree-table-layout"];i.forEach((i=>{switch(i){case"vertex-scene-tree-table-layout":if(!customElements.get(t(i))){customElements.define(t(i),Z)}break}}))}G();export{Z as S,G as d,c as g};
|
|
5
|
+
//# sourceMappingURL=p-CKQId0I1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["getSceneTreeViewportHeight","el","clientHeight","getSceneTreeContainsElement","other","contains","lowerCase","str","toLowerCase","DEFAULT_SPLIT_REGEXP","DEFAULT_STRIP_REGEXP","noCase","input","options","_a","splitRegexp","_b","stripRegexp","_c","transform","_d","delimiter","result","replace","start","end","length","charAt","slice","split","map","join","re","value","RegExp","reduce","pascalCaseTransform","index","firstChar","lowerChars","substr","toUpperCase","pascalCase","__assign","camelCaseTransform","camelCase","bindingRegEx","CollectionBinding","constructor","bindings","this","bind","data","forEach","binding","NodeBinding","node","expr","TextNodeBinding","super","newContent","replaceBindingString","textContent","AttributeBinding","attr","newValue","oldValue","getAttribute","setAttribute","PropertyBinding","prop","replaceBinding","EventHandlerBinding","eventName","path","extractBindingPath","disposable","dispose","listener","getBindableValue","addEventListener","removeEventListener","generateBindings","nodeType","Node","ELEMENT_NODE","bindableAttributes","getBindableAttributes","name","startsWith","push","propName","TEXT_NODE","test","i","childNodes","element","Array","from","attributes","filter","exec","undefined","toString","isHead","head","tail","ElementPool","container","elementFactory","instanceMap","Map","elements","swapHeadToTail","count","sliced","splice","concat","swapTailToHead","updateElements","diff","createElement","deleteElement","updateData","f","instance","get","updateElementFactory","iterateElements","set","append","pop","delete","remove","generateInstanceFromTemplate","template","fragment","content","cloneNode","firstElementChild","getSceneTreeTableOffsetTop","getBoundingClientRect","top","getSceneTreeTableViewportWidth","clientWidth","scrollToTop","scrollTo","SceneTreeCellHoverController","onStateChange","EventDispatcher","setHovered","id","emit","stateChanged","on","restartTimeout","fn","existingTimeout","delay","window","clearTimeout","setTimeout","sceneTreeTableLayoutCss","SceneTreeTableLayout","__stencil_proxyCustomElement","HTMLElement","registerHost","rows","totalRows","rowHeight","overScanCount","layoutOffset","scrollOffset","viewportStartIndex","viewportEndIndex","columnGridLayout","columnGridFixedLayout","isComputingCellHeight","isScrolling","stateMap","viewportRows","columnWidths","columnWidthPercentages","lastStartIndex","columnElements","cellHoverController","layoutColumns","visibleRowCount","iterateColumns","col","pool","colIndex","style","minHeight","cellPaddingLeft","depth","rowIndex","row","isLoadedRow","updateCell","cell","position","boxSizing","height","width","paddingLeft","tree","hoverController","updateLayoutPosition","readDOM","tableElement","recomputeColumnWidths","layoutWidth","getLayoutWidth","w","columnsResized","recomputeColumnPercentages","computeInitialColumnWidths","c","initialWidth","columnWidthSum","scaledColumnWidths","updateColumnElements","hostEl","querySelectorAll","computeCellHeight","async","dummyData","hex","expanded","selected","visible","partiallyVisible","isLeaf","columnsList","filterHit","hasGeometry","phantom","endItem","metadata","createColumnCellInstance","visibility","appendChild","componentOnReady","Promise","resolve","computeHeaderHeight","headerHeight","headerElement","setProperty","computeColumnGridLayout","res","bindHeaderData","headerInstances","createHeaderInstance","paddingRight","slot","gridColumnStart","gridColumnEnd","headerDividerInstances","_","createDividerInstance","right","pointerEvents","rebindHeaderData","removeDividerDragListeners","addDividerDragListeners","createDividerPointerDownHandler","event","preventDefault","stopPropagation","lastDividerPointerPosition","Point","create","Math","floor","clientX","clientY","resizingColumnIndex","classList","add","handleDividerPointerMove","handleDividerPointerUp","current","resizingIndex","subtract","abs","x","isValidResize","currentColumn","nextColumn","currentWidth","nextWidth","currentMinWidth","minWidth","currentMaxWidth","maxWidth","Number","MAX_SAFE_INTEGER","nextMinWidth","nextMaxWidth","currentIsValid","nextIsValid","handleScrollChanged","scrollTimer","target","scrollTop","computeAndUpdateViewportRows","componentWillLoad","createPools","initializeColumnLayout","headerResizeObserver","ResizeObserver","resizeObserver","clearLayoutHeight","clearLayoutWidth","componentDidLoad","passive","observe","initializeMeasuredLayout","componentWillRender","componentDidRender","layoutRendered","componentDidUpdate","disconnectedCallback","disconnect","handleViewportRowsPropsChanged","scrollToPosition","attemptComputeCellHeight","render","h","Host","key","class","ref","gridTemplateColumns","display","onSlotchange","ensureDividerTemplateDefined","recreateColumnPools","computeViewportRows","viewportHeight","getLayoutHeight","canComputeIndices","viewportCount","ceil","startIndex","max","endIndex","min","getViewportRows","controller","isConnected","updateActiveRowRange","columnElementPools","WeakMap","column","Error","querySelector","defaultDividerTemplate","document","innerHTML","headerDividerListeners","d","listeners","populateRowData","rowData","call","layoutHeight","computedWidth"],"sources":["src/components/scene-tree/lib/dom.ts","../html-templates/dist/bundle.js","src/components/scene-tree-table-layout/lib/dom.ts","src/components/scene-tree-table-layout/lib/hover-controller.ts","src/components/scene-tree-table-layout/lib/window.ts","src/components/scene-tree-table-layout/scene-tree-table-layout.css?tag=vertex-scene-tree-table-layout&encapsulation=shadow","src/components/scene-tree-table-layout/scene-tree-table-layout.tsx"],"sourcesContent":["export function getSceneTreeViewportHeight(el: HTMLElement): number {\n return el.clientHeight;\n}\n\nexport function getSceneTreeOffsetTop(el: HTMLElement): number {\n return el.offsetTop;\n}\n\nexport function getSceneTreeContainsElement(\n el: Element,\n other: Element\n): boolean {\n return el.contains(other);\n}\n","import { __assign } from 'tslib';\n\n/**\n * Source: ftp://ftp.unicode.org/Public/UCD/latest/ucd/SpecialCasing.txt\n */\n/**\n * Lower case as a function.\n */\nfunction lowerCase(str) {\n return str.toLowerCase();\n}\n\n// Support camel case (\"camelCase\" -> \"camel Case\" and \"CAMELCase\" -> \"CAMEL Case\").\nvar DEFAULT_SPLIT_REGEXP = [/([a-z0-9])([A-Z])/g, /([A-Z])([A-Z][a-z])/g];\n// Remove all non-word characters.\nvar DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi;\n/**\n * Normalize the string into something other libraries can manipulate easier.\n */\nfunction noCase(input, options) {\n if (options === void 0) { options = {}; }\n var _a = options.splitRegexp, splitRegexp = _a === void 0 ? DEFAULT_SPLIT_REGEXP : _a, _b = options.stripRegexp, stripRegexp = _b === void 0 ? DEFAULT_STRIP_REGEXP : _b, _c = options.transform, transform = _c === void 0 ? lowerCase : _c, _d = options.delimiter, delimiter = _d === void 0 ? \" \" : _d;\n var result = replace(replace(input, splitRegexp, \"$1\\0$2\"), stripRegexp, \"\\0\");\n var start = 0;\n var end = result.length;\n // Trim the delimiter from around the output string.\n while (result.charAt(start) === \"\\0\")\n start++;\n while (result.charAt(end - 1) === \"\\0\")\n end--;\n // Transform each token independently.\n return result.slice(start, end).split(\"\\0\").map(transform).join(delimiter);\n}\n/**\n * Replace `re` in the input string with the replacement value.\n */\nfunction replace(input, re, value) {\n if (re instanceof RegExp)\n return input.replace(re, value);\n return re.reduce(function (input, re) { return input.replace(re, value); }, input);\n}\n\nfunction pascalCaseTransform(input, index) {\n var firstChar = input.charAt(0);\n var lowerChars = input.substr(1).toLowerCase();\n if (index > 0 && firstChar >= \"0\" && firstChar <= \"9\") {\n return \"_\" + firstChar + lowerChars;\n }\n return \"\" + firstChar.toUpperCase() + lowerChars;\n}\nfunction pascalCase(input, options) {\n if (options === void 0) { options = {}; }\n return noCase(input, __assign({ delimiter: \"\", transform: pascalCaseTransform }, options));\n}\n\nfunction camelCaseTransform(input, index) {\n if (index === 0)\n return input.toLowerCase();\n return pascalCaseTransform(input, index);\n}\nfunction camelCase(input, options) {\n if (options === void 0) { options = {}; }\n return pascalCase(input, __assign({ transform: camelCaseTransform }, options));\n}\n\nconst bindingRegEx = /{{(.+)}}/;\nclass CollectionBinding {\n constructor(bindings) {\n this.bindings = bindings;\n }\n bind(data) {\n this.bindings.forEach((binding) => binding.bind(data));\n }\n}\nclass NodeBinding {\n constructor(node, expr) {\n this.node = node;\n this.expr = expr;\n }\n}\nclass TextNodeBinding extends NodeBinding {\n constructor(node, expr) {\n super(node, expr);\n }\n bind(data) {\n const newContent = replaceBindingString(data, this.expr);\n if (newContent !== this.node.textContent) {\n this.node.textContent = newContent;\n }\n }\n}\nclass AttributeBinding extends NodeBinding {\n constructor(node, expr, attr) {\n super(node, expr);\n this.attr = attr;\n }\n bind(data) {\n const newValue = replaceBindingString(data, this.expr);\n const oldValue = this.node.getAttribute(this.attr);\n if (oldValue !== newValue) {\n this.node.setAttribute(this.attr, newValue);\n }\n }\n}\nclass PropertyBinding extends NodeBinding {\n constructor(node, expr, prop) {\n super(node, expr);\n this.prop = prop;\n }\n bind(data) {\n const newValue = replaceBinding(data, this.expr);\n /* eslint-disable @typescript-eslint/no-explicit-any */\n const oldValue = this.node[this.prop];\n if (oldValue !== newValue) {\n this.node[this.prop] = newValue;\n }\n /* eslint-enable @typescript-eslint/no-explicit-any */\n }\n}\nclass EventHandlerBinding extends NodeBinding {\n constructor(node, expr, eventName) {\n super(node, expr);\n this.eventName = eventName;\n }\n bind(data) {\n var _a;\n const path = extractBindingPath(this.expr);\n if (path != null) {\n (_a = this.disposable) === null || _a === void 0 ? void 0 : _a.dispose();\n const listener = getBindableValue(data, path, true);\n this.node.addEventListener(this.eventName, listener);\n this.disposable = {\n dispose: () => {\n this.node.removeEventListener(this.eventName, listener);\n },\n };\n }\n }\n}\nfunction generateBindings(node) {\n const bindings = [];\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node;\n const bindableAttributes = getBindableAttributes(el);\n bindableAttributes.forEach((attr) => {\n if (attr.name.startsWith('event:')) {\n const eventName = camelCase(attr.name.replace('event:', ''));\n bindings.push(new EventHandlerBinding(el, attr.value, eventName));\n }\n else if (attr.name.startsWith('attr:')) {\n bindings.push(new AttributeBinding(el, attr.value, attr.name.replace('attr:', '')));\n }\n else if (attr.name.startsWith('prop:')) {\n const propName = camelCase(attr.name.replace('prop:', ''));\n bindings.push(new PropertyBinding(el, attr.value, propName));\n }\n });\n }\n else if (node.nodeType === Node.TEXT_NODE &&\n node.textContent != null &&\n bindingRegEx.test(node.textContent)) {\n bindings.push(new TextNodeBinding(node, node.textContent));\n }\n for (let i = 0; i < node.childNodes.length; i++) {\n bindings.push(...generateBindings(node.childNodes[i]));\n }\n return bindings;\n}\nfunction getBindableAttributes(element) {\n return Array.from(element.attributes).filter((attr) => bindingRegEx.test(attr.value));\n}\nfunction extractBindingPath(expr) {\n const result = bindingRegEx.exec(expr);\n return result != null ? result[1] : undefined;\n}\nfunction replaceBindingString(data, expr) {\n const path = extractBindingPath(expr);\n if (path != null) {\n const value = getBindableValue(data, path, true);\n return expr.replace(`{{${path}}}`, value === null || value === void 0 ? void 0 : value.toString());\n }\n else {\n return expr;\n }\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction replaceBinding(data, expr) {\n const path = extractBindingPath(expr);\n if (path != null) {\n const value = getBindableValue(data, path, true);\n return value;\n }\n else {\n return expr;\n }\n}\nfunction getBindableValue(data, path, isHead = false\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n) {\n const [head, ...tail] = path.split('.');\n if (isHead && tail.length === 0) {\n return data;\n }\n else if (isHead && tail.length > 0) {\n return getBindableValue(data, tail.join('.'), false);\n }\n else {\n const value = data[head];\n if (tail.length > 0) {\n return getBindableValue(value, tail.join('.'), false);\n }\n else {\n return value;\n }\n }\n}\n\nclass ElementPool {\n constructor(container, elementFactory) {\n this.container = container;\n this.elementFactory = elementFactory;\n this.instanceMap = new Map();\n this.elements = [];\n }\n swapHeadToTail(count) {\n const sliced = this.elements.splice(0, count);\n this.elements.splice(this.elements.length, 0, ...sliced);\n return this.elements.concat();\n }\n swapTailToHead(count) {\n const sliced = this.elements.splice(-count, count);\n this.elements.splice(0, 0, ...sliced);\n return this.elements.concat();\n }\n updateElements(count) {\n const diff = count - this.elements.length;\n if (diff > 0) {\n for (let i = 0; i < diff; i++) {\n this.createElement();\n }\n }\n else {\n for (let i = 0; i < -diff; i++) {\n this.deleteElement();\n }\n }\n return this.elements.concat();\n }\n updateData(f) {\n this.elements.forEach((el, i) => {\n const instance = this.instanceMap.get(el);\n const data = f(i);\n instance === null || instance === void 0 ? void 0 : instance.bindings.bind(data);\n });\n }\n updateElementFactory(elementFactory) {\n this.elementFactory = elementFactory;\n this.updateElements(0);\n }\n iterateElements(f) {\n this.elements.forEach((el, i) => {\n const instance = this.instanceMap.get(el);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n f(el, instance.bindings, i);\n });\n }\n createElement() {\n const instance = this.elementFactory();\n this.elements.push(instance.element);\n this.instanceMap.set(instance.element, instance);\n this.container.append(instance.element);\n return instance;\n }\n deleteElement() {\n const element = this.elements.pop();\n if (element != null) {\n this.instanceMap.delete(element);\n element.remove();\n }\n }\n}\n\nfunction append(container, element, data) {\n const bindings = new CollectionBinding(generateBindings(element));\n bindings.bind(data);\n container.appendChild(element);\n const created = container.lastElementChild;\n if (created != null) {\n return { element: created, bindings };\n }\n else {\n throw new Error('Failed to append element');\n }\n}\nfunction generateInstanceFromTemplate(template) {\n const fragment = template.content.cloneNode(true);\n const element = fragment.firstElementChild;\n const bindings = new CollectionBinding(generateBindings(fragment));\n return { element, bindings };\n}\n\nexport { AttributeBinding, CollectionBinding, ElementPool, EventHandlerBinding, NodeBinding, PropertyBinding, TextNodeBinding, append, generateBindings, generateInstanceFromTemplate };\n//# sourceMappingURL=bundle.js.map\n","export type DomScrollToOptions = ScrollToOptions;\n\nexport function getSceneTreeTableOffsetTop(el: HTMLElement): number {\n return el.getBoundingClientRect().top ?? 0;\n}\n\nexport function getSceneTreeTableViewportWidth(el: HTMLElement): number {\n return el.clientWidth;\n}\n\nexport function scrollToTop(\n el: HTMLElement,\n top: number,\n options: Pick<DomScrollToOptions, 'behavior'>\n): void {\n el.scrollTo({ top, ...options });\n}\n","import { Disposable, EventDispatcher, Listener } from '@vertexvis/utils';\n\nexport class SceneTreeCellHoverController {\n public onStateChange = new EventDispatcher<string | undefined>();\n\n public setHovered(id?: string): void {\n this.onStateChange.emit(id);\n }\n\n public stateChanged(listener: Listener<string | undefined>): Disposable {\n return this.onStateChange.on(listener);\n }\n}\n","export function restartTimeout(\n fn: VoidFunction,\n existingTimeout?: number,\n delay = 200\n): number {\n window.clearTimeout(existingTimeout);\n return window.setTimeout(fn, delay);\n}\n",":host {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n overflow: hidden;\n font-size: 0.825rem;\n\n /**\n * @prop --scene-tree-table-row-padding: CSS lengths that specifies the amount of\n * padding between the row's border and content.\n */\n --scene-tree-table-row-padding: 2px 0px;\n\n /**\n * @prop --scene-tree-table-column-gap: CSS length that specifies the amount of\n * padding between columns in the table.\n */\n --scene-tree-table-column-gap: 0.5rem;\n\n /**\n * @prop --scene-tree-table-column-resize-cursor: A CSS cursor value that will\n * be displayed when resizing a column. Defaults to `col-resize`.\n */\n --scene-tree-table-column-resize-cursor: col-resize;\n}\n\n.header {\n position: relative;\n display: grid;\n width: 100%;\n border-bottom: var(--scene-tree-toolbar-separator);\n}\n\n.table {\n position: relative;\n display: grid;\n width: 100%;\n height: 100%;\n overflow: auto;\n}\n\n.resize-overlay {\n position: absolute;\n top: 0;\n cursor: var(--scene-tree-table-column-resize-cursor);\n z-index: 1000;\n width: 100%;\n height: 100%;\n}\n\n.divider-overlay {\n position: absolute;\n top: 0;\n display: grid;\n pointer-events: none;\n z-index: 2000;\n width: 100%;\n height: 100%;\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Point } from '@vertexvis/geometry';\nimport {\n Binding,\n ElementPool,\n generateInstanceFromTemplate,\n InstancedTemplate,\n} from '@vertexvis/html-templates';\n\nimport { readDOM } from '../../lib/stencil';\nimport { SceneTreeController } from '../scene-tree/lib/controller';\nimport { getSceneTreeViewportHeight } from '../scene-tree/lib/dom';\nimport { isLoadedRow, LoadedRow, Row } from '../scene-tree/lib/row';\nimport { RowDataProvider } from '../scene-tree/types';\nimport {\n DomScrollToOptions,\n getSceneTreeTableOffsetTop,\n getSceneTreeTableViewportWidth,\n scrollToTop,\n} from './lib/dom';\nimport { SceneTreeCellHoverController } from './lib/hover-controller';\nimport { restartTimeout } from './lib/window';\n\ninterface StateMap {\n columnElementPools?: WeakMap<\n HTMLVertexSceneTreeTableColumnElement,\n ElementPool\n >;\n headerInstances?: Array<InstancedTemplate<HTMLElement>>;\n headerDividerInstances?: Array<InstancedTemplate<HTMLElement>>;\n headerDividerListeners?: Array<(event: PointerEvent) => void>;\n\n viewportRows: Row[];\n\n headerHeight?: number;\n columnWidths: number[];\n columnWidthPercentages: number[];\n}\n\n@Component({\n tag: 'vertex-scene-tree-table-layout',\n styleUrl: 'scene-tree-table-layout.css',\n shadow: true,\n})\nexport class SceneTreeTableLayout {\n /**\n * A reference to the scene tree to perform operations for interactions. Such\n * as expansion, visibility and selection.\n */\n @Prop()\n public tree?: HTMLVertexSceneTreeElement;\n\n /**\n * @internal\n */\n @Prop()\n public controller?: SceneTreeController;\n\n /**\n * @internal\n */\n @Prop()\n public rows: Row[] = [];\n\n /**\n * @internal\n */\n @Prop()\n public totalRows = 0;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public rowHeight = 24;\n\n /**\n * The number of offscreen rows above and below the viewport to render. Having\n * a higher number reduces the chance of the browser not displaying a row\n * while scrolling.\n *\n * This prop will be automatically populated based on the `overScanCount` prop\n * specified in the parent `<vertex-scene-tree />` element.\n */\n @Prop()\n public overScanCount = 25;\n\n /**\n * A callback that is invoked immediately before a row is about to be rendered.\n * This callback can return additional data that can be bound to in a\n * template.\n *\n * This prop will be automatically populated based on the `rowData` prop\n * specified in the parent `<vertex-scene-tree />` element.\n *\n * @example\n *\n * ```html\n * <script>\n * const table = document.querySelector('vertex-scene-tree-table');\n * table.rowData = (row) => {\n * return { func: () => console.log('row', row.node.name) };\n * }\n * </script>\n *\n * <vertex-scene-tree>\n * <vertex-scene-tree-table>\n * <vertex-scene-tree-table-column>\n * <template>\n * <button event:click=\"{{row.data.func}}\">Hi</button>\n * </template>\n * </vertex-scene-tree-table-column>\n * </vertex-scene-tree-table>\n * </vertex-scene-tree>\n * ```\n */\n @Prop()\n public rowData?: RowDataProvider;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public layoutOffset = 0;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public scrollOffset = 0;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public layoutHeight?: number;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public layoutWidth?: number;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public viewportStartIndex = 0;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public viewportEndIndex = 0;\n\n /**\n * @internal\n */\n @Event()\n public layoutRendered!: EventEmitter<void>;\n\n /**\n * An event that is emitted when the columns of this `<vertex-scene-tree-table-layout>`\n * are resized with an array containing the widths of the columns in pixels.\n */\n @Event({ bubbles: true })\n public columnsResized!: EventEmitter<number[]>;\n\n @Element()\n private hostEl!: HTMLElement;\n\n @State()\n private columnGridLayout = '1fr';\n\n @State()\n private columnGridFixedLayout = '';\n\n @State()\n private isComputingCellHeight = true;\n\n @State()\n private lastDividerPointerPosition?: Point.Point;\n\n @State()\n private resizingColumnIndex?: number;\n\n @State()\n private isScrolling = false;\n\n @State()\n private scrollTimer: number | undefined;\n\n /**\n * This stores internal state that you want to preserve across live-reloads,\n * but shouldn't trigger a refresh if the data changes. Marking this with\n * @State to allow to preserve state across live-reloads.\n */\n @State()\n private stateMap: StateMap = {\n viewportRows: [],\n columnWidths: [],\n columnWidthPercentages: [],\n };\n\n private lastStartIndex = 0;\n private resizeObserver?: ResizeObserver;\n private headerResizeObserver?: ResizeObserver;\n\n private tableElement?: HTMLDivElement;\n private headerElement?: HTMLDivElement;\n private columnElements: HTMLVertexSceneTreeTableColumnElement[] = [];\n\n private cellHoverController = new SceneTreeCellHoverController();\n\n public componentWillLoad(): void {\n this.updateColumnElements();\n this.createPools();\n this.initializeColumnLayout();\n\n this.headerResizeObserver = new ResizeObserver(() => {\n this.stateMap.headerHeight = undefined;\n this.computeHeaderHeight();\n this.updateLayoutPosition();\n });\n\n this.resizeObserver = new ResizeObserver(() => {\n this.updateLayoutPosition();\n this.clearLayoutHeight();\n this.clearLayoutWidth();\n this.recomputeColumnWidths();\n this.computeColumnGridLayout();\n });\n }\n\n public async componentDidLoad(): Promise<void> {\n this.tableElement?.addEventListener('scroll', this.handleScrollChanged, {\n passive: true,\n });\n\n if (this.headerElement != null) {\n this.headerResizeObserver?.observe(this.headerElement);\n }\n\n this.resizeObserver?.observe(this.hostEl);\n\n // These measurements require rendered DOM, but mutating tracked values\n // directly in componentDidLoad triggers Stencil dev warnings.\n await Promise.resolve();\n await this.initializeMeasuredLayout();\n }\n\n public async componentWillRender(): Promise<void> {\n await this.computeAndUpdateViewportRows();\n }\n\n public componentDidRender(): void {\n this.layoutColumns();\n\n this.layoutRendered.emit();\n }\n\n public async componentDidUpdate(): Promise<void> {\n if (this.isComputingCellHeight) {\n await this.computeCellHeight();\n }\n }\n\n public disconnectedCallback(): void {\n this.tableElement?.removeEventListener('scroll', this.handleScrollChanged);\n this.removeDividerDragListeners();\n this.headerResizeObserver?.disconnect();\n this.resizeObserver?.disconnect();\n this.stateMap.columnWidths = [];\n this.stateMap.columnWidthPercentages = [];\n }\n\n @Watch('rows')\n @Watch('totalRows')\n @Watch('rowHeight')\n protected async handleViewportRowsPropsChanged(): Promise<void> {\n await this.computeAndUpdateViewportRows();\n }\n\n /**\n * Scrolls the table to the provided top value.\n *\n * @param top The position to scroll to.\n * @param options A set of options to configure the scrolling behavior.\n */\n @Method()\n public async scrollToPosition(\n top: number,\n options: Pick<DomScrollToOptions, 'behavior'>\n ): Promise<void> {\n if (this.tableElement != null) {\n scrollToTop(this.tableElement, top, options);\n }\n }\n\n /**\n * Attempts to compute the height of templated cells. Used for internals\n * or testing.\n *\n * @internal\n * @ignore\n */\n @Method()\n public async attemptComputeCellHeight(): Promise<void> {\n this.computeCellHeight();\n }\n\n public render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <div\n class=\"header\"\n ref={(ref) => (this.headerElement = ref)}\n style={{\n gridTemplateColumns: this.columnGridFixedLayout,\n display: this.columnElements.length <= 1 ? 'none' : 'grid',\n }}\n >\n <slot name=\"header\" />\n </div>\n <div\n class=\"table\"\n ref={(ref) => (this.tableElement = ref)}\n style={{\n gridTemplateColumns: this.columnGridLayout,\n }}\n >\n <slot\n onSlotchange={() => {\n this.ensureDividerTemplateDefined();\n this.updateColumnElements();\n this.recreateColumnPools();\n this.computeInitialColumnWidths();\n this.rebindHeaderData();\n this.computeColumnGridLayout();\n }}\n />\n </div>\n <div\n class=\"divider-overlay\"\n style={{\n gridTemplateColumns: this.columnGridFixedLayout,\n }}\n >\n <slot name=\"divider\" />\n </div>\n {this.resizingColumnIndex != null && <div class=\"resize-overlay\" />}\n </Host>\n );\n }\n\n private computeViewportRows(): void {\n const viewportHeight = this.getLayoutHeight();\n const canComputeIndices =\n viewportHeight != null &&\n viewportHeight > 0 &&\n !this.isComputingCellHeight;\n\n if (canComputeIndices) {\n const viewportCount = Math.ceil(viewportHeight / this.rowHeight);\n\n const viewportStartIndex = Math.floor(this.scrollOffset / this.rowHeight);\n const viewportEndIndex = viewportStartIndex + viewportCount;\n\n const startIndex = Math.max(0, viewportStartIndex - this.overScanCount);\n const endIndex = Math.min(\n this.totalRows - 1,\n viewportEndIndex + this.overScanCount\n );\n\n const rows = this.getViewportRows(startIndex, endIndex);\n\n this.viewportStartIndex = startIndex;\n this.viewportEndIndex = endIndex;\n this.stateMap.viewportRows = rows;\n }\n }\n\n private initializeColumnLayout(): void {\n this.computeInitialColumnWidths();\n this.computeColumnGridLayout();\n this.ensureDividerTemplateDefined();\n this.rebindHeaderData();\n }\n\n private async initializeMeasuredLayout(): Promise<void> {\n await this.computeCellHeight();\n this.computeHeaderHeight();\n }\n\n private async computeAndUpdateViewportRows(): Promise<void> {\n this.computeViewportRows();\n\n if (this.controller?.isConnected && this.totalRows > 0) {\n await this.controller.updateActiveRowRange(\n this.viewportStartIndex,\n this.viewportEndIndex\n );\n }\n }\n\n private layoutColumns = (): void => {\n const visibleRowCount = this.viewportEndIndex - this.viewportStartIndex + 1;\n const diff = this.viewportStartIndex - this.lastStartIndex;\n this.lastStartIndex = this.viewportStartIndex;\n\n this.iterateColumns((col, pool, colIndex) => {\n pool.updateElements(visibleRowCount);\n\n if (diff > 0) {\n pool.swapHeadToTail(diff);\n } else {\n pool.swapTailToHead(-diff);\n }\n\n col.style.minHeight = `${this.rowHeight * this.totalRows}px`;\n\n const cellPaddingLeft =\n colIndex === 0\n ? (depth: number) => `calc(${depth} * 0.5rem)`\n : () => `0`;\n\n pool.iterateElements((el, binding, rowIndex) => {\n const row = this.stateMap.viewportRows[rowIndex];\n\n if (isLoadedRow(row)) {\n this.updateCell(row, el, binding, rowIndex, cellPaddingLeft);\n }\n });\n });\n };\n\n private updateCell = (\n row: LoadedRow,\n cell: HTMLElement,\n binding: Binding,\n rowIndex: number,\n cellPaddingLeft: (depth: number) => string\n ): void => {\n cell.style.position = 'absolute';\n cell.style.top = `${\n (this.viewportStartIndex + rowIndex) * this.rowHeight\n }px`;\n cell.style.boxSizing = 'border-box';\n cell.style.height = `${this.rowHeight}px`;\n cell.style.width = '100%';\n cell.style.paddingLeft = cellPaddingLeft(row.node.depth);\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n (cell as any).tree = this.tree;\n (cell as any).node = row.node;\n (cell as any).hoverController = this.cellHoverController;\n (cell as any).isScrolling = this.isScrolling;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n\n binding.bind(row);\n };\n\n private updateLayoutPosition = (): void => {\n readDOM(() => {\n if (this.tableElement != null) {\n this.layoutOffset = getSceneTreeTableOffsetTop(this.tableElement);\n }\n });\n };\n\n private recomputeColumnWidths = (): void => {\n const layoutWidth = this.getLayoutWidth();\n if (\n layoutWidth != null &&\n this.stateMap.columnWidths.length ===\n this.stateMap.columnWidthPercentages.length\n ) {\n this.stateMap.columnWidths = this.stateMap.columnWidthPercentages.map(\n (w) => w * layoutWidth\n );\n\n this.columnsResized.emit(this.stateMap.columnWidths);\n }\n };\n\n private recomputeColumnPercentages = (): void => {\n const layoutWidth = this.getLayoutWidth();\n if (\n layoutWidth != null &&\n this.stateMap.columnWidths.length ===\n this.stateMap.columnWidthPercentages.length\n ) {\n this.stateMap.columnWidthPercentages = this.stateMap.columnWidths.map(\n (w) => w / layoutWidth\n );\n }\n };\n\n private computeInitialColumnWidths = (): void => {\n this.stateMap.columnWidths = this.columnElements.map(\n (c) => c.initialWidth ?? 100\n );\n\n const layoutWidth = this.getLayoutWidth();\n if (layoutWidth != null) {\n const columnWidthSum = this.stateMap.columnWidths.reduce(\n (result, w) => result + w,\n 0\n );\n const scaledColumnWidths = this.stateMap.columnWidths.map(\n (w) => w * (layoutWidth / columnWidthSum)\n );\n\n this.stateMap.columnWidthPercentages = scaledColumnWidths.map(\n (w) => w / layoutWidth\n );\n this.stateMap.columnWidths = scaledColumnWidths;\n }\n };\n\n private updateColumnElements = (): void => {\n this.columnElements = Array.from(\n this.hostEl.querySelectorAll('vertex-scene-tree-table-column')\n ) as Array<HTMLVertexSceneTreeTableColumnElement>;\n };\n\n private createPools(): void {\n if (this.stateMap.columnElementPools == null) {\n this.stateMap.columnElementPools = this.columnElements.reduce(\n (map, c) =>\n map.set(\n c,\n new ElementPool(c, () => this.createColumnCellInstance(c))\n ),\n new WeakMap()\n );\n }\n }\n\n private recreateColumnPools(): void {\n this.columnElements.forEach((c) => {\n if (this.stateMap.columnElementPools?.get(c) == null) {\n this.stateMap.columnElementPools?.set(\n c,\n new ElementPool(c, () => this.createColumnCellInstance(c))\n );\n } else {\n this.stateMap.columnElementPools\n .get(c)\n ?.updateElementFactory(() => this.createColumnCellInstance(c));\n }\n });\n }\n\n private iterateColumns(\n f: (\n column: HTMLVertexSceneTreeTableColumnElement,\n pool: ElementPool,\n index: number\n ) => void\n ): void {\n this.columnElements.forEach((column, i) => {\n const pool = this.stateMap.columnElementPools?.get(column);\n if (pool != null) {\n f(column, pool, i);\n } else {\n throw new Error('Cannot find pool for column');\n }\n });\n }\n\n private ensureDividerTemplateDefined(): void {\n const template = this.hostEl.querySelector(\n 'template[slot=\"divider\"]'\n ) as HTMLTemplateElement;\n if (template == null) {\n const defaultDividerTemplate = document.createElement('template');\n defaultDividerTemplate.slot = 'divider';\n defaultDividerTemplate.innerHTML = `\n <vertex-scene-tree-table-resize-divider slot=\"divider\">\n </vertex-scene-tree-table-resize-divider>\n `;\n this.hostEl.appendChild(defaultDividerTemplate);\n }\n }\n\n private createHeaderInstance(\n column: HTMLVertexSceneTreeTableColumnElement\n ): InstancedTemplate<HTMLElement> | undefined {\n const template = column.querySelector(\n 'template[slot=\"header\"]'\n ) as HTMLTemplateElement;\n if (template != null) {\n return generateInstanceFromTemplate(template);\n }\n }\n\n private createDividerInstance(): InstancedTemplate<HTMLElement> {\n const template = this.hostEl.querySelector(\n 'template[slot=\"divider\"]'\n ) as HTMLTemplateElement;\n if (template != null) {\n return generateInstanceFromTemplate(template);\n } else {\n throw new Error('Table is missing divider template element');\n }\n }\n\n private createColumnCellInstance(\n column: HTMLVertexSceneTreeTableColumnElement\n ): InstancedTemplate<HTMLElement> {\n const template = column.querySelector(\n 'template:not([slot=\"header\"])'\n ) as HTMLTemplateElement;\n if (template != null) {\n return generateInstanceFromTemplate(template);\n } else {\n throw new Error('Column is missing cell template element');\n }\n }\n\n private computeCellHeight = async (): Promise<void> => {\n if (this.isComputingCellHeight && this.columnElements.length > 0) {\n const dummyData: LoadedRow = {\n index: 0,\n node: {\n id: { hex: '' },\n name: 'Dummy row',\n expanded: false,\n selected: false,\n visible: false,\n partiallyVisible: false,\n isLeaf: false,\n depth: 0,\n columnsList: [],\n filterHit: false,\n hasGeometry: false,\n phantom: false,\n endItem: false,\n },\n metadata: {},\n data: {},\n };\n const { bindings, element } = this.createColumnCellInstance(\n this.columnElements[0]\n );\n bindings.bind(dummyData);\n element.style.visibility = 'hidden';\n\n this.columnElements[0]?.appendChild(element);\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n if (typeof (element as any).componentOnReady === 'function') {\n await (element as any).componentOnReady();\n }\n /* eslint-enable @typescript-eslint/no-explicit-any */\n\n let height = element.clientHeight;\n if (height === 0) {\n height = await new Promise((resolve) => {\n setTimeout(() => resolve(element.getBoundingClientRect().height), 5);\n });\n }\n\n this.rowHeight = height ?? this.rowHeight;\n element.remove();\n this.isComputingCellHeight = this.rowHeight === 0;\n }\n };\n\n private computeHeaderHeight = (): void => {\n if (this.stateMap.headerHeight == null) {\n this.stateMap.headerHeight =\n this.headerElement?.getBoundingClientRect().height;\n this.hostEl.style.setProperty(\n '--header-height',\n `${this.stateMap.headerHeight}px`\n );\n }\n };\n\n private computeColumnGridLayout = (): void => {\n if (this.stateMap.columnWidths.length === 0) {\n this.stateMap.columnWidths = this.columnElements.map(\n (c) => c.initialWidth ?? 100\n );\n }\n\n const layoutWidth = this.getLayoutWidth();\n if (layoutWidth != null) {\n if (this.stateMap.columnWidthPercentages.length === 0) {\n this.stateMap.columnWidthPercentages = this.columnElements.map(\n (c) => (c.initialWidth ?? 100) / layoutWidth\n );\n }\n }\n\n /**\n * This layout uses `1fr` instead of the final column width to\n * allow the final column to shrink when a scrollbar appears.\n *\n * This flex behavior is not desired for the header and divider\n * elements since they are not scrollable, and `columnGridFixedLayout`\n * should be used instead.\n */\n this.columnGridLayout = `${this.stateMap.columnWidths\n .slice(0, -1)\n .reduce((res, w) => `${res} ${w}px`, '')} 1fr`;\n\n this.columnGridFixedLayout = `${this.stateMap.columnWidths.reduce(\n (res, w) => `${res} ${w}px`,\n ''\n )}`;\n };\n\n private bindHeaderData = (): void => {\n if (this.stateMap.headerInstances == null) {\n this.stateMap.headerInstances = this.columnElements\n .map((c, i) => {\n const instance = this.createHeaderInstance(c);\n\n if (instance != null) {\n instance.element.style.paddingRight =\n i === this.columnElements.length - 1\n ? `0`\n : `var(--scene-tree-table-column-gap)`;\n instance.element.slot = 'header';\n instance.element.style.gridColumnStart = `${i + 1}`;\n instance.element.style.gridColumnEnd = `${i + 2}`;\n this.hostEl?.appendChild(instance.element);\n }\n\n return instance;\n })\n .filter((i) => i != null) as Array<InstancedTemplate<HTMLElement>>;\n }\n\n if (this.stateMap.headerDividerInstances == null) {\n this.stateMap.headerDividerInstances = this.columnElements\n .slice(0, -1)\n .map((_, i) => {\n const instance = this.createDividerInstance();\n\n instance.element.slot = 'divider';\n instance.element.style.position = 'absolute';\n instance.element.style.right = '0';\n instance.element.style.pointerEvents = 'auto';\n instance.element.style.gridColumnStart = `${i + 1}`;\n instance.element.style.gridColumnEnd = `${i + 2}`;\n this.hostEl?.appendChild(instance.element);\n\n return instance;\n });\n }\n };\n\n private rebindHeaderData = (): void => {\n this.removeDividerDragListeners();\n\n this.stateMap.headerInstances?.forEach((i) => i.element.remove());\n this.stateMap.headerDividerInstances?.forEach((i) => i.element.remove());\n this.stateMap.headerInstances = undefined;\n this.stateMap.headerDividerInstances = undefined;\n\n this.bindHeaderData();\n this.addDividerDragListeners();\n };\n\n private addDividerDragListeners(): void {\n this.stateMap.headerDividerListeners =\n this.stateMap.headerDividerInstances?.map((d, i) => {\n const listener = this.createDividerPointerDownHandler(i);\n\n d.element.addEventListener('pointerdown', listener);\n\n return listener;\n });\n }\n\n private removeDividerDragListeners(): void {\n if (this.stateMap.headerDividerListeners != null) {\n const listeners = this.stateMap.headerDividerListeners;\n\n this.stateMap.headerDividerInstances?.forEach((d, i) => {\n const listener = listeners[i];\n if (listener != null) {\n d.element.removeEventListener('pointerdown', listener);\n }\n });\n this.stateMap.headerDividerListeners = undefined;\n }\n }\n\n private createDividerPointerDownHandler = (\n index: number\n ): ((event: PointerEvent) => void) => {\n return (event: PointerEvent): void => {\n event.preventDefault();\n event.stopPropagation();\n\n this.lastDividerPointerPosition = Point.create(\n Math.floor(event.clientX),\n Math.floor(event.clientY)\n );\n this.resizingColumnIndex = index;\n this.stateMap.headerDividerInstances?.[index]?.element.classList.add(\n 'dragging'\n );\n\n window.addEventListener('pointermove', this.handleDividerPointerMove);\n window.addEventListener('pointerup', this.handleDividerPointerUp);\n };\n };\n\n private handleDividerPointerMove = (event: PointerEvent): void => {\n const current = Point.create(\n Math.floor(event.clientX),\n Math.floor(event.clientY)\n );\n\n if (\n this.lastDividerPointerPosition != null &&\n this.resizingColumnIndex != null\n ) {\n const resizingIndex = this.resizingColumnIndex;\n const diff = Point.subtract(this.lastDividerPointerPosition, current);\n\n if (Math.abs(diff.x) >= 1 && this.isValidResize(diff, resizingIndex)) {\n this.stateMap.columnWidths = this.stateMap.columnWidths.map((w, i) =>\n i === resizingIndex ? w - diff.x : w\n );\n\n if (resizingIndex + 1 < this.stateMap.columnWidths.length) {\n this.stateMap.columnWidths = this.stateMap.columnWidths.map((w, i) =>\n i === resizingIndex + 1 ? w + diff.x : w\n );\n }\n\n this.lastDividerPointerPosition = current;\n this.computeColumnGridLayout();\n }\n }\n };\n\n private handleDividerPointerUp = (): void => {\n if (this.resizingColumnIndex != null) {\n this.stateMap.headerDividerInstances?.[\n this.resizingColumnIndex\n ]?.element.classList.remove('dragging');\n }\n this.lastDividerPointerPosition = undefined;\n this.resizingColumnIndex = undefined;\n\n this.recomputeColumnPercentages();\n this.recomputeColumnWidths();\n\n window.removeEventListener('pointermove', this.handleDividerPointerMove);\n window.removeEventListener('pointerup', this.handleDividerPointerUp);\n };\n\n private isValidResize = (diff: Point.Point, index: number): boolean => {\n const currentColumn = this.columnElements[index];\n const nextColumn = this.columnElements[index + 1];\n const currentWidth = this.stateMap.columnWidths[index];\n const nextWidth = this.stateMap.columnWidths[index + 1];\n const currentMinWidth = currentColumn.minWidth ?? 0;\n const currentMaxWidth = currentColumn.maxWidth ?? Number.MAX_SAFE_INTEGER;\n const nextMinWidth = nextColumn.minWidth ?? 0;\n const nextMaxWidth = nextColumn.maxWidth ?? Number.MAX_SAFE_INTEGER;\n\n const currentIsValid =\n currentWidth - diff.x > currentMinWidth &&\n currentWidth - diff.x < currentMaxWidth;\n const nextIsValid =\n nextColumn != null\n ? nextWidth + diff.x > nextMinWidth && nextWidth + diff.x < nextMaxWidth\n : true;\n\n return currentIsValid && nextIsValid;\n };\n\n private handleScrollChanged = async (event: Event): Promise<void> => {\n this.isScrolling = true;\n\n this.scrollTimer = restartTimeout(() => {\n this.isScrolling = false;\n }, this.scrollTimer);\n\n this.scrollOffset = (event.target as HTMLElement).scrollTop;\n await this.computeAndUpdateViewportRows();\n };\n\n private getViewportRows(startIndex: number, endIndex: number): Row[] {\n const rows = this.rows.slice(startIndex, endIndex + 1);\n return rows.map((row) => (row != null ? this.populateRowData(row) : row));\n }\n\n private populateRowData(row: Row): Row {\n if (this.rowData != null && row != null) {\n const data = this.rowData?.(row) || {};\n return { ...row, data };\n } else {\n return row;\n }\n }\n\n private getLayoutHeight(): number | undefined {\n if (this.layoutHeight == null && this.tableElement != null) {\n this.layoutHeight = getSceneTreeViewportHeight(this.tableElement);\n }\n return this.layoutHeight;\n }\n\n private getLayoutWidth(): number | undefined {\n if (this.layoutWidth == null) {\n const computedWidth = getSceneTreeTableViewportWidth(this.hostEl);\n if (computedWidth > 0) {\n this.layoutWidth = computedWidth;\n }\n }\n return this.layoutWidth;\n }\n\n private clearLayoutHeight(): void {\n this.layoutHeight = undefined;\n }\n\n private clearLayoutWidth(): void {\n this.layoutWidth = undefined;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|