@ue-too/board 0.7.3 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.js.map CHANGED
@@ -1 +1,46 @@
1
- {"version":3,"file":"index.js","sources":["../src/utils/observable.ts","../src/camera/update-publisher.ts","../src/camera/utils/matrix.ts","../src/camera/utils/coordinate-conversion.ts","../src/camera/utils/position.ts","../src/camera/utils/zoom.ts","../src/camera/utils/rotation.ts","../src/camera/base.ts","../src/camera/default-camera.ts","../src/input-interpretation/raw-input-parser/vanilla-kmt-event-parser.ts","../src/input-interpretation/raw-input-parser/vanilla-touch-event-parser.ts","../src/utils/coorindate-conversion.ts","../src/utils/ruler.ts","../src/utils/handler-pipeline.ts","../src/utils/canvas-position-dimension.ts","../src/utils/drawing-utils.ts","../src/utils/drawing.ts","../src/utils/zoomlevel-adjustment.ts","../src/camera/camera-rig/zoom-handler.ts","../src/camera/camera-rig/pan-handler.ts","../src/camera/camera-rig/rotation-handler.ts","../src/camera/camera-rig/update-batcher/position-update-batcher.ts","../src/camera/camera-rig/update-batcher/rotation-update-batcher.ts","../src/camera/camera-rig/update-batcher/zoom-udpate-batcher.ts","../src/camera/camera-rig/camera-rig.ts","../src/camera/camera-mux/relay.ts","../src/camera/camera-mux/animation-and-lock/pan-control-state-machine.ts","../src/camera/camera-mux/animation-and-lock/zoom-control-state-machine.ts","../src/camera/camera-mux/animation-and-lock/rotation-control-state-machine.ts","../src/camera/camera-mux/animation-and-lock/animation-and-lock.ts","../src/input-interpretation/raw-input-publisher/raw-input-publisher.ts","../src/input-interpretation/input-state-machine/kmt-input-context.ts","../src/input-interpretation/input-state-machine/touch-input-context.ts","../src/input-interpretation/input-state-machine/touch-input-state-machine.ts","../src/input-interpretation/input-state-machine/kmt-input-state-machine.ts","../src/camera/camera-edge-auto-input.ts","../src/boardify/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["AsyncObservable","constructor","this","observers","subscribe","observer","options","push","signal","aborted","filter","o","abortHandler","removeEventListener","addEventListener","notify","data","forEach","queueMicrotask","SynchronousObservable","CameraUpdatePublisher","pan","zoom","rotate","all","notifyPan","event","cameraState","type","diff","notifyZoom","deltaZoomAmount","notifyRotate","deltaRotation","on","eventName","callback","Error","decomposeCameraMatrix","transformMatrix","devicePixelRatio","canvasWidth","canvasHeight","a","b","c","d","tx","e","ty","f","rotation","Math","atan2","sqrt","reverse","cos_r","cos","sin_r","sin","position","x","y","createCameraMatrix","cameraPos","multipliedMatrix","multiplyMatrix","rotatedMatrix","zoomedMatrix","m1","m2","a1","b1","c1","d1","tx1","ty1","a2","b2","c2","d2","tx2","ty2","decomposeTRS","matrix","translation","det","abs","scaleX","scaleY","finalRotation","finalScaleX","finalScaleY","PI","scale","createTRSMatrix","decomposeTRSSVD","m11","m12","m21","m22","mtm11","mtm12","mtm21","mtm22","trace","discriminant","sqrtDisc","lambda1","lambda2","s1","max","v11","v12","v21","v22","vNorm1","vNorm2","v11n","v21n","u11","u21","convert2WorldSpaceWRT","targetPosition","interestPoint","viewPortWidth","viewPortHeight","cameraZoomLevel","cameraRotation","cameraFrameCenter","delta2Point","PointCal","subVector","multiplyVectorByScalar","rotatePoint","addVector","convert2WorldSpace","point","cameraPosition","convert2WorldSpaceAnchorAtCenter","scaledBack","rotatedBack","convert2ViewPortSpaceAnchorAtCenter","withOffset","scaled","invertFromWorldSpace","pointIsInViewPort","pointInCameraFrame","convertDeltaInViewPortToWorldSpace","delta","convertDeltaInWorldToViewPortSpace","cameraPositionToGet","pointInWorld","toPointInViewPort","rotated","transformationMatrixFromCamera","trMatrix","convert2WorldSpaceWithTransformationMatrix","transformationMatrix","withinBoundaries","boundaries","undefined","leftSide","rightSide","topSide","bottomSide","min","isValidBoundaries","minX","maxX","minY","maxY","boundariesFullyDefined","clampPoint","manipulatePoint","limit","translationWidthOf","halfTranslationWidthOf","translationWidth","translationHeightOf","halfTranslationHeightOf","translationHeight","clampPointEntireViewPort","topLeftCorner","bottomLeftCorner","topRightCorner","bottomRightCorner","topLeftCornerClamped","topRightCornerClamped","bottomLeftCornerClamped","bottomRightCornerClamped","diffs","maxXDiff","maxYDiff","isValidZoomLevelLimits","zoomLevelLimits","clampZoomLevel","zoomLevel","zoomLevelWithinLimits","clampRotation","rotationLimits","rotationWithinLimits","normalizeAngleZero2TwoPI","angleSpanFromStart","angleSpan","start","angleSpanFromEnd","end","ccw","startAsTieBreaker","normalizedRotation","rotationWithinBoundary","rotationBoundary","angleFromStart","positiveDirection","angleRange","angle","from","to","angleDiff","deg2rad","deg","rad2deg","rad","BaseCamera","zoomLevelBoundaries","rotationBoundaries","_position","_zoomLevel","_rotation","_viewPortHeight","_viewPortWidth","_zoomBoundaries","_rotationBoundaries","_boundaries","width","height","setPosition","destination","magnitude","zoomBoundaries","newZoomBoundaries","temp","setMaxZoomLevel","maxZoomLevel","console","setMinZoomLevel","minZoomLevel","setZoomLevel","getTransform","alignCoorindate","currentCachedTransform","transform","cached","s","s2","getTRS","setUsingTransformationMatrix","decomposed","setRotation","getCameraOriginInWindow","centerInWindow","convertFromViewPort2WorldSpace","convertFromWorld2ViewPort","invertFromWorldSpace2ViewPort","setHorizontalBoundaries","setVerticalBoundaries","DEFAULT_BOARD_CAMERA_VIEWPORT_WIDTH","DEFAULT_BOARD_CAMERA_VIEWPORT_HEIGHT","DEFAULT_BOARD_CAMERA_ZOOM_BOUNDARIES","DEFAULT_BOARD_CAMERA_BOUNDARIES","DEFAULT_BOARD_CAMERA_ROTATION_BOUNDARIES","DefaultBoardCamera","_baseCamera","_observer","currentPosition","currentZoomLevel","currentRotation","alignCoordinateSystem","VanillaKMTEventParser","kmtInputStateMachine","canvas","_disabled","_canvas","bindFunctions","_abortController","AbortController","_stateMachine","_keyfirstPressed","Map","disabled","value","stateMachine","addEventListeners","pointerDownHandler","pointerUpHandler","pointerMoveHandler","scrollHandler","window","keypressHandler","keyupHandler","setUp","tearDown","abort","bind","button","pointerType","happens","clientX","clientY","buttons","preventDefault","ctrlKey","deltaX","deltaY","target","document","body","has","key","set","delete","attach","VanillaTouchEventParser","touchInputStateMachine","_panDisabled","_zoomDisabled","_rotateDisabled","touchSM","bindListeners","touchStateMachine","touchstartHandler","touchendHandler","touchcancelHandler","touchmoveHandler","enableStrategy","disableStrategy","panDisabled","zoomDisabled","rotateDisabled","pointsAdded","i","changedTouches","length","ident","identifier","points","pointsRemoved","pointsMoved","targetTouches","pointConversion","cos30","cos60","z","calculateOrderOfMagnitude","count","divisor","createHandlerChain","handlers","normalizedHandlers","Array","isArray","args","reduce","acc","handler","CanvasPositionDimensionPublisher","_observers","resizeObserver","ResizeObserver","entries","entry","trueRect","getTrueRect","getBoundingClientRect","getComputedStyle","rectChanged","lastRect","publishPositionUpdate","intersectionObserver","IntersectionObserver","isIntersecting","boundingClientRect","attributeCallBack","mutationObserver","MutationObserver","dispose","disconnect","resizeHandler","observe","attributes","attributeFilter","passive","rect","onPositionUpdate","mutationsList","mutation","attributeName","style","styleWidth","parseFloat","styleHeight","newWidth","newHeight","computedStyle","paddingLeft","paddingTop","paddingRight","paddingBottom","borderLeft","borderLeftWidth","borderTop","borderTopWidth","borderRight","borderRightWidth","borderBottom","borderBottomWidth","trueLeft","left","trueTop","top","trueWidth","trueHeight","DOMRect","r1","r2","methodsToFlip","fillRect","strokeRect","fillText","strokeText","lineTo","moveTo","quadraticCurveTo","bezierCurveTo","arc","drawImage","roundRect","reverseYAxis","context","Proxy","get","prop","receiver","Reflect","newArgs","convertedArgs","invertYAxisForDrawImageWith9Args","apply","yIndices","index","imageHeight","drawCrossHair","pos","size","color","halfSize","beginPath","strokeStyle","lineWidth","stroke","drawBoundingBox","curMin","curMinX","curMinY","drawAxis","drawGrid","leftRightDirection","unitVectorFromA2B","topDownDirection","distanceBetweenPoints","orderOfMagnitude","subDivisor","pow","minHorizontalSmallTick","ceil","maxHorizontalSmallTick","floor","minVerticalSmallTick","maxVerticalSmallTick","startPoint","endPoint","fillStyle","drawRulerLegacy","halfDivisor","scaling","minHorizontalLargeTick","maxHorizontalLargeTick","minVerticalLargeTick","minHorizontalMediumTick","maxHorizontalMediumTick","minVerticalMediumTick","maxVerticalMediumTick","halfDivisorInActualPixel","subDivisorInActualPixel","font","midBaseLineTextDimensions","measureText","midBaseLineHeight","fontBoundingBoxAscent","fontBoundingBoxDescent","subBaseLineTextDimensions","subBaseLineHeight","largeHorizontalStep","resPoint","textAlign","textBaseline","textDimensions","toFixed","largeVerticalStep","mediumHorizontalStep","flipYAxis","mediumVerticalStep","smallHorizontalStep","smallVerticalStep","drawPositionText","offset","drawReferenceCircle","drawArrow","arrowRatio","arrowHeight","offsetLength","offsetPoint","linearInterpolation","unitVector","arrowPoint1","arrowPoint2","closePath","fill","MAJOR_TICK_LENGTH","MINOR_TICK_LENGTH","HALF_TICK_LENGTH","TEXT_MAJOR_TICK_OFFSET","TEXT_HALF_TICK_OFFSET","TEXT_MAJOR_TICK_FONT_SIZE","TEXT_HALF_TICK_FONT_SIZE","drawRuler","minMajorTickValue","maxMajorTickValue","majorTickStep","minMinTickValue","maxMaxTickValue","minTickStep","minHalfTickValue","maxHalfTickValue","halfTickStep","calibrationMultiplier","normalizedOrderOfMagnitude","calculateTickValues","save","drawXAxisTick","textOffset","fontSize","restore","vMinMajorTickValue","vMaxMajorTickValue","vMajorTickStep","vMinMinTickValue","vMaxMaxTickValue","vMinTickStep","vMinHalfTickValue","vMaxHalfTickValue","vHalfTickStep","vCalibrationMultiplier","drawYAxisTick","majorTickPoint","majorTickLength","tickValue","textOption","drawText","tickValueText","minValue","maxValue","trueMinValue","trueMaxValue","trueOrderOfMagnitude","minTickOrderOfMagnitude","minZoomLevelBaseOnDimensions","log","minZoomLevelWidthWidth","minZoomLevelHeightWidth","minZoomLevelWidthHeight","minZoomLevelHeightHeight","Infinity","minZoomLevelHeight","minZoomLevelWidth","zoomLevelBoundariesShouldUpdate","targetMinZoomLevel","minZoomLevelBaseOnWidth","widthWidthProjection","widthHeightProjection","minZoomLevelBaseOnHeight","clampZoomToHandler","camera","config","clampZoom","clampZoomByHandler","targetZoom","restrictZoomToHandler","restrictZoom","restrictZoomByHandler","createDefaultZoomToOnlyHandler","createDefaultZoomByOnlyHandler","createDefaultPanToHandler","restrictPanToHandler","clampToHandler","createDefaultPanByHandler","restrictPanByHandler","clampByHandler","convertDeltaToComplyWithRestriction","clampTranslation","actualDest","limitEntireViewPort","actualDelta","restrictXTranslation","restrictYTranslation","restrictRelativeXTranslation","restrictRelativeYTranslation","upDirection","dotProduct","rightDirection","convertUserInputDeltaToCameraDelta","clampRotateByHandler","clampedRotation","restrictRotateByHandler","restrictRotation","clampRotateToHandler","targetRotation","restrictRotateToHandler","createDefaultRotateByHandler","createDefaultRotateToHandler","CameraPositionUpdateBatcher","nextPosition","queuePositionUpdateCount","queuePositionUpdateToCount","queuePositionUpdateByCount","lastUpdateCount","observable","queuePositionUpdate","queuePositionUpdateTo","queuePositionUpdateBy","processQueuedUpdates","update","getDebugInfo","lastUpdateTotalCalls","queuePositionUpdateCalls","queuePositionUpdateToCalls","queuePositionUpdateByCalls","CameraRotationUpdateBatcher","nextRotation","queueRotationUpdateCount","queueRotationUpdateToCount","queueRotationUpdateByCount","queueRotationUpdate","queueRotationUpdateTo","queueRotationUpdateBy","queueRotationUpdateCalls","queueRotationUpdateToCalls","queueRotationUpdateByCalls","CameraZoomUpdateBatcher","nextZoom","anchor","anchorCoordinateSystem","queueZoomUpdateCount","queueZoomUpdateToCount","queueZoomUpdateTo","queueZoomUpdateBy","queueZoomByAtWorld","worldAnchor","queueZoomToAtWorld","queueZoomUpdateCalls","queueZoomUpdateToCalls","CameraRigWithUpdateBatcher","_panBy","_panTo","_zoomTo","_zoomBy","_rotateBy","_rotateTo","_config","_camera","_positionBatcher","_zoomBatcher","_rotationBatcher","zoomToAt","at","zoomByAt","zoomTo","zoomBy","zoomToAtWorld","zoomByAtWorld","_actualPanByWorld","transformedDelta","_actualPanToWorld","transformedTarget","panByWorld","panByViewPort","diffInWorld","panToWorld","panToViewPort","targetInWorld","rotateBy","rotateTo","updatePosition","positionUpdate","updateZoom","op","_zoomToAtWorld","_zoomByAtWorld","_zoomToAtViewPort","_zoomByAtViewPort","updateRotation","originalAnchorInWorld","anchorInWorldAfterZoom","cameraPositionDiff","transformedCameraPositionDiff","originalAnchorInViewPort","anchorInViewPortAfterZoom","anchorInViewPortBeforeZoom","transformedDiff","configure","cleanup","setup","createDefaultCameraRigWithUpdateBatcher","DefaultCameraRig","transformTarget","convertedDelta","cameraPositionDiffInWorld","createDefaultCameraRig","Relay","cameraRig","_cameraRig","notifyPanInput","notifyZoomInput","anchorPoint","notifyRotationInput","createDefaultCameraMux","createDefaultCameraMuxWithCameraRig","PanControlStateMachine","TemplateStateMachine","states","initialState","super","notifyPanToAnimationInput","initateTransition","_context","AcceptingUserInputState","TemplateState","eventReactions","userPanByInput","action","userPanByInputHandler","defaultTargetState","userPanToInput","userPanToInputHandler","lockedOnObjectPanByInput","lockedOnObjectPanByInputHandler","lockedOnObjectPanToInput","lockedOnObjectPanToInputHandler","NO_OP","payload","TransitionState","transitionPanByInput","transitionPanByInputHandler","transitionPanToInput","transitionPanToInputHandler","LockedOnObjectState","unlock","createDefaultPanControlStates","ACCEPTING_USER_INPUT","TRANSITION","LOCKED_ON_OBJECT","createDefaultPanControlStateMachine","ZoomAcceptingUserInputState","_eventReactions","userZoomByAtInput","userZoomToAtInput","initiateTransition","deltaZoom","ZoomTransitionState","lockedOnObjectZoomByAtInput","lockedOnObjectZoomToAtInput","transitionZoomByAtInput","transitionZoomToAtInput","transitionZoomToAtCenterInput","transitionZoomToAtWorldInput","transitionZoomByAtCenterInput","ZoomLockedOnObjectState","ZoomControlStateMachine","notifyZoomByAtInput","notifyZoomByAtInputAnimation","notifyZoomToAtCenterInput","notifyZoomToAtWorldInput","createDefaultZoomControlStates","createDefaultZoomControlStateMachine","RotateControlStateMachine","notifyRotateByInput","notifyRotateToAnimationInput","RotationAcceptingUserInputState","userRotateByInput","userRotateByInputHandler","userRotateToInput","userRotateToInputHandler","lockedOnObjectRotateByInput","lockedOnObjectRotateByInputHandler","lockedOnObjectRotateToInput","lockedOnObjectRotateToInputHandler","RotationTransitionState","transitionRotateByInput","transitionRotateByInputHandler","transitionRotateToInput","transitionRotateToInputHandler","RotationLockedOnObjectState","createDefaultRotateControlStates","createDefaultRotateControlStateMachine","CameraMuxWithAnimationAndLock","panStateMachine","zoomStateMachine","rotateStateMachine","_panStateMachine","_zoomStateMachine","_rotateStateMachine","notifyZoomInputAnimation","notifyZoomInputAnimationWorld","error","initatePanTransition","initateZoomTransition","initateRotateTransition","createCameraMuxWithAnimationAndLock","createCameraMuxWithAnimationAndLockWithCameraRig","RawUserInputPublisher","cameraMux","_cameraMux","createDefaultRawUserInputPublisher","RawUserInputPublisherWithWebWorkerRelay","webWorker","postMessage","CursorStyle","DummyCanvas","setCursor","dimensions","detached","CanvasCacheInWebWorker","postMessageFunction","_width","_height","_postMessageFunction","CanvasProxy","_internalSizeUpdateObservable","_canvasPositionDimensionPublisher","setWidth","setHeight","cursor","logCanvasTrueSize","WorkerRelayCanvas","canvasDiemsionPublisher","boundingRect","_webWorker","_canvasDiemsionPublisher","DummyKmtInputContext","initialCursorPosition","toggleOnEdgeAutoCameraInput","toggleOffEdgeAutoCameraInput","setCursorPosition","notifyOnPan","notifyOnZoom","zoomAmount","notifyOnRotate","setInitialCursorPosition","cancelCurrentAction","ObservableInputTracker","canvasOperator","inputPublisher","edgeAutoCameraInput","_padding","_alignCoordinateSystem","_canvasOperator","_inputPublisher","_initialCursorPosition","_edgeAutoCameraInput","toggleOn","toggleOff","boundingBox","padding","withinEdgeOfCanvas","horizontalEdge","pointInWhichHorizontalEdgeOfCanvas","verticalEdge","pointInWhichVerticalEdgeOfCanvas","setDirection","TouchInputTracker","_touchPointsMap","addTouchPoints","removeTouchPoints","identifiers","getCurrentTouchPointsCount","getInitialTouchPointsPositions","idents","res","updateTouchPoints","IdleState","touchstart","touchend","_guards","touchPointsCount","_eventGuards","guard","map","p","PendingState","touchmove","initialPositions","currentPositions","initialStartAndEndDistance","currentStartAndEndDistance","midPoint","currentMidPoint","midPointDelta","cameraCenterInWindow","midPointInViewPort","panZoom","warn","InProgressState","createTouchInputStateMachine","IDLE","PENDING","IN_PROGRESS","convertFromWindow2ViewPort","canvasBoundingRect","right","bottom","convertFromWindow2ViewPortWithCanvasOperator","convertFromWindow2ViewPortCanvasOperator","KmtIdleState","isIdle","spacebarDown","spacebarDownHandler","scroll","scrollWithCtrl","scrollWithCtrlHandler","middlePointerDown","middlePointerDownHandler","disable","pointerMove","uponEnter","DEFAULT","scrollSensitivity","ReadyToSelectState","leftPointerMove","viewportPoint","setSelectionEndPoint","toggleSelectionBox","leftPointerUp","DisabledState","beforeExit","enable","eventPayload","ReadyToPanViaSpaceBarState","spacebarUp","leftPointerDown","leftPointerDownHandler","GRAB","InitialPanState","leftPointerMoveHandler","GRABBING","ReadyToPanViaScrollWheelState","middlePointerUp","middlePointerMove","PanState","PanViaScrollWheelState","middlePointerMoveHandler","KmtEmptyState","createKmtInputStateMachine","READY_TO_PAN_VIA_SPACEBAR","INITIAL_PAN","PAN","READY_TO_PAN_VIA_SCROLL_WHEEL","PAN_VIA_SCROLL_WHEEL","DISABLED","KmtInputStateMachineWebWorkerProxy","webworker","_webworker","handled","nextState","EdgeAutoCameraInput","_state","_speed","_horizontalDirection","_verticalDirection","horizontalDirection","verticalDirection","deltaTime","direction","distance","deltaVector","Board","debug","_fullScreen","_canvasSizeUpdateQueue","lastUpdateTime","bound","_canvasProxy","canvasDimensions","boardInputPublisher","_observableInputTracker","_touchInputTracker","_kmtParser","_touchParser","syncViewPortDimensions","newContext","getContext","willReadFrequently","syncCameraZoomLevel","_reversedContext","step","align","fullScreen","innerWidth","innerHeight","kmtParser","parser","touchParser","cameraMovementOnMouseEdge","timestamp","reset","clearRect","transfromMatrix","setTransform","convertWindowPoint2WorldCoord","clickPointInWindow","pointInViewPort","onInput","maxHalfTransHeight","maxHalfTransWidth","setMaxTransWidthWithFixedMinBoundary","curBoundaries","curHorizontalMin","setMaxTransWidthWithFixedMaxBoundary","curMax","curHorizontalMax","getCameraRig"],"mappings":"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"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/camera/default-camera.ts", "../src/utils/observable.ts", "../src/camera/update-publisher.ts", "../src/camera/utils/coordinate-conversion.ts", "../src/camera/utils/matrix.ts", "../src/camera/utils/position.ts", "../src/camera/utils/zoom.ts", "../src/camera/utils/rotation.ts", "../src/camera/base.ts", "../src/input-interpretation/raw-input-parser/vanilla-kmt-event-parser.ts", "../src/input-interpretation/raw-input-parser/vanilla-touch-event-parser.ts", "../src/utils/coorindate-conversion.ts", "../src/utils/ruler.ts", "../src/utils/handler-pipeline.ts", "../src/utils/canvas-position-dimension.ts", "../src/utils/drawing-utils.ts", "../src/utils/drawing.ts", "../src/utils/zoomlevel-adjustment.ts", "../src/boardify/index.ts", "../src/camera/camera-rig/zoom-handler.ts", "../src/camera/camera-rig/pan-handler.ts", "../src/camera/camera-rig/rotation-handler.ts", "../src/camera/camera-rig/camera-rig.ts", "../src/camera/camera-rig/update-batcher/position-update-batcher.ts", "../src/camera/camera-rig/update-batcher/rotation-update-batcher.ts", "../src/camera/camera-rig/update-batcher/zoom-udpate-batcher.ts", "../src/camera/camera-mux/relay.ts", "../src/camera/camera-mux/animation-and-lock/pan-control-state-machine.ts", "../src/camera/camera-mux/animation-and-lock/zoom-control-state-machine.ts", "../src/camera/camera-mux/animation-and-lock/rotation-control-state-machine.ts", "../src/camera/camera-mux/animation-and-lock/animation-and-lock.ts", "../src/input-interpretation/raw-input-publisher/raw-input-publisher.ts", "../src/input-interpretation/input-state-machine/kmt-input-context.ts", "../src/input-interpretation/input-state-machine/touch-input-context.ts", "../src/input-interpretation/input-state-machine/touch-input-state-machine.ts", "../src/input-interpretation/input-state-machine/kmt-input-state-machine.ts", "../src/camera/camera-edge-auto-input.ts"],
4
+ "sourcesContent": [
5
+ "import { Point, PointCal } from '@ue-too/math';\nimport { Boundaries } from './utils/position';\nimport { TransformationMatrix } from './utils/matrix';\nimport { CameraUpdatePublisher, UnSubscribe } from './update-publisher';\nimport { ZoomLevelLimits } from './utils/zoom';\nimport { RotationLimits } from './utils/rotation';\nimport { convert2WorldSpaceAnchorAtCenter, convert2ViewPortSpaceAnchorAtCenter } from './utils/coordinate-conversion';\nimport { CameraEventMap, CameraState } from './update-publisher';\nimport { ObservableBoardCamera } from './interface';\nimport BaseCamera from './base';\nimport { SubscriptionOptions } from '../utils/observable';\n\nexport const DEFAULT_BOARD_CAMERA_VIEWPORT_WIDTH = 1000;\nexport const DEFAULT_BOARD_CAMERA_VIEWPORT_HEIGHT = 1000;\n\nexport const DEFAULT_BOARD_CAMERA_ZOOM_BOUNDARIES: ZoomLevelLimits = {min: 0.1, max: 10};\nexport const DEFAULT_BOARD_CAMERA_BOUNDARIES: Boundaries = {min: {x: -10000, y: -10000}, max: {x: 10000, y: 10000}};\nexport const DEFAULT_BOARD_CAMERA_ROTATION_BOUNDARIES: RotationLimits | undefined = undefined;\n\n/**\n * @description The default board camera. This is basically the same as the {@link BaseCamera} class.\n * But it's observable.\n * \n * @category Camera\n */\nexport default class DefaultBoardCamera implements ObservableBoardCamera {\n\n private _baseCamera: BaseCamera;\n private _observer: CameraUpdatePublisher;\n /**\n * @param position The position of the camera in the world coordinate system\n * @param rotation The rotation of the camera in the world coordinate system\n * @param zoomLevel The zoom level of the camera\n * @param viewPortWidth The width of the viewport. (The width of the canvas in css pixels)\n * @param viewPortHeight The height of the viewport. (The height of the canvas in css pixels)\n * @param boundaries The boundaries of the camera in the world coordinate system\n * @param zoomLevelBoundaries The boundaries of the zoom level of the camera\n * @param rotationBoundaries The boundaries of the rotation of the camera\n */\n constructor(viewPortWidth: number = DEFAULT_BOARD_CAMERA_VIEWPORT_WIDTH, viewPortHeight: number = DEFAULT_BOARD_CAMERA_VIEWPORT_HEIGHT, position: Point = {x: 0, y: 0}, rotation: number = 0, zoomLevel: number = 1, boundaries: Boundaries = DEFAULT_BOARD_CAMERA_BOUNDARIES, zoomLevelBoundaries: ZoomLevelLimits = DEFAULT_BOARD_CAMERA_ZOOM_BOUNDARIES, rotationBoundaries: RotationLimits | undefined = DEFAULT_BOARD_CAMERA_ROTATION_BOUNDARIES){\n this._baseCamera = new BaseCamera(viewPortWidth, viewPortHeight, position, rotation, zoomLevel, boundaries, zoomLevelBoundaries, rotationBoundaries);\n this._observer = new CameraUpdatePublisher();\n }\n\n /**\n * @description The boundaries of the camera in the world coordinate system.\n * \n * @category Camera\n */\n get boundaries(): Boundaries | undefined{\n return this._baseCamera.boundaries;\n }\n\n set boundaries(boundaries: Boundaries | undefined){\n this._baseCamera.boundaries = boundaries;\n }\n\n /**\n * @description The width of the viewport. (The width of the canvas in css pixels)\n * \n * @category Camera\n */\n get viewPortWidth(): number{\n return this._baseCamera.viewPortWidth;\n }\n\n set viewPortWidth(width: number){\n this._baseCamera.viewPortWidth = width;\n }\n\n /**\n * @description The height of the viewport. (The height of the canvas in css pixels)\n * \n * @category Camera\n */\n get viewPortHeight(): number{\n return this._baseCamera.viewPortHeight;\n }\n\n set viewPortHeight(height: number){\n this._baseCamera.viewPortHeight = height;\n }\n\n /**\n * @description The position of the camera in the world coordinate system.\n * \n * @category Camera\n */\n get position(): Point{\n return this._baseCamera.position;\n }\n\n /**\n * @description This function is used to set the position of the camera.\n * @param destination The destination point of the camera.\n * @returns Whether the position is set successfully.\n * \n * @description This function has a guard that checks if the destination point is within the boundaries of the camera.\n * If the destination point is not within the boundaries, the function will return false and the position will not be updated.\n * If the destination point is within the boundaries, the function will return true and the position will be updated.\n */\n setPosition(destination: Point){\n const currentPosition = {...this._baseCamera.position};\n if(!this._baseCamera.setPosition(destination)){\n return false;\n }\n this._observer.notifyPan({diff: PointCal.subVector(destination, currentPosition)}, {position: this._baseCamera.position, rotation: this._baseCamera.rotation, zoomLevel: this._baseCamera.zoomLevel});\n return true;\n }\n\n /**\n * @description The zoom level of the camera.\n * \n * @category Camera\n */\n get zoomLevel(): number{\n return this._baseCamera.zoomLevel;\n }\n\n /**\n * @description The boundaries of the zoom level of the camera.\n * \n * @category Camera\n */\n get zoomBoundaries(): ZoomLevelLimits | undefined{\n return this._baseCamera.zoomBoundaries;\n }\n\n set zoomBoundaries(zoomBoundaries: ZoomLevelLimits | undefined){\n this._baseCamera.zoomBoundaries = zoomBoundaries;\n }\n\n setMaxZoomLevel(maxZoomLevel: number){\n const currentZoomLevel = this._baseCamera.zoomLevel;\n if(!this._baseCamera.setMaxZoomLevel(maxZoomLevel)){\n return false;\n }\n this._observer.notifyZoom({deltaZoomAmount: maxZoomLevel - currentZoomLevel}, {position: this._baseCamera.position, rotation: this._baseCamera.rotation, zoomLevel: this._baseCamera.zoomLevel});\n return true;\n }\n\n setMinZoomLevel(minZoomLevel: number){\n if(!this._baseCamera.setMinZoomLevel(minZoomLevel)){\n return false;\n }\n return true;\n }\n\n setZoomLevel(zoomLevel: number){\n const currentZoomLevel = this._baseCamera.zoomLevel;\n if(!this._baseCamera.setZoomLevel(zoomLevel)){\n return false;\n }\n this._observer.notifyZoom({deltaZoomAmount: this._baseCamera.zoomLevel - currentZoomLevel}, {position: this._baseCamera.position, rotation: this._baseCamera.rotation, zoomLevel: this._baseCamera.zoomLevel});\n return true;\n }\n\n /**\n * @description The rotation of the camera in the world coordinate system.\n * \n * @category Camera\n */\n get rotation(): number{\n return this._baseCamera.rotation;\n }\n\n /**\n * @description The boundaries of the rotation of the camera.\n * \n * @category Camera\n */\n get rotationBoundaries(): RotationLimits | undefined{\n return this._baseCamera.rotationBoundaries;\n }\n\n set rotationBoundaries(rotationBoundaries: RotationLimits | undefined){\n this._baseCamera.rotationBoundaries = rotationBoundaries;\n }\n\n /**\n * @description The order of the transformation is as follows:\n * 1. Scale (scale the context using the device pixel ratio)\n * 2. Translation (move the origin of the context to the center of the canvas)\n * 3. Rotation (rotate the context negatively the rotation of the camera)\n * 4. Zoom (scale the context using the zoom level of the camera)\n * 5. Translation (move the origin of the context to the position of the camera in the context coordinate system)\n * \n * @param devicePixelRatio The device pixel ratio of the canvas\n * @param alignCoorindate Whether to align the coordinate system to the camera's position\n * @returns The transformation matrix\n */\n getTransform(devicePixelRatio: number, alignCoorindate: boolean = true): TransformationMatrix {\n return this._baseCamera.getTransform(devicePixelRatio, alignCoorindate);\n }\n\n /**\n * @description This function is used to set the rotation of the camera.\n * @param rotation The rotation of the camera in the world coordinate system.\n * @returns Whether the rotation is set successfully.\n */\n setRotation(rotation: number){\n const currentRotation = this._baseCamera.rotation;\n if(!this._baseCamera.setRotation(rotation)){\n return false;\n }\n this._observer.notifyRotate({deltaRotation: rotation - currentRotation}, {position: this._baseCamera.position, rotation: this._baseCamera.rotation, zoomLevel: this._baseCamera.zoomLevel});\n return true;\n }\n\n /**\n * @description The origin of the camera in the window coordinate system.\n * @deprecated\n * \n * @param centerInWindow The center of the camera in the window coordinate system.\n * @returns The origin of the camera in the window coordinate system.\n */\n getCameraOriginInWindow(centerInWindow: Point): Point{\n return centerInWindow;\n }\n\n /**\n * @description Converts a point from the viewport coordinate system to the world coordinate system.\n * \n * @param point The point in the viewport coordinate system.\n * @returns The point in the world coordinate system.\n */\n convertFromViewPort2WorldSpace(point: Point): Point{\n return convert2WorldSpaceAnchorAtCenter(point, this._baseCamera.position, this._baseCamera.zoomLevel, this._baseCamera.rotation);\n }\n\n /**\n * @description Converts a point from the world coordinate system to the viewport coordinate system.\n * \n * @param point The point in the world coordinate system.\n * @returns The point in the viewport coordinate system.\n */\n convertFromWorld2ViewPort(point: Point): Point{\n return convert2ViewPortSpaceAnchorAtCenter(point, this._baseCamera.position, this._baseCamera.zoomLevel, this._baseCamera.rotation);\n }\n\n /**\n * @description Inverts a point from the world coordinate system to the viewport coordinate system.\n * \n * @param point The point in the world coordinate system.\n * @returns The point in the viewport coordinate system.\n */\n invertFromWorldSpace2ViewPort(point: Point): Point{\n let cameraFrameCenter = {x: this._baseCamera.viewPortWidth / 2, y: this._baseCamera.viewPortHeight / 2};\n let delta2Point = PointCal.subVector(point, this._baseCamera.position);\n delta2Point = PointCal.rotatePoint(delta2Point, -this._baseCamera.rotation);\n delta2Point = PointCal.multiplyVectorByScalar(delta2Point, this._baseCamera.zoomLevel);\n return PointCal.addVector(cameraFrameCenter, delta2Point);\n }\n\n setHorizontalBoundaries(min: number, max: number){\n if (min > max){\n let temp = max;\n max = min;\n min = temp;\n }\n if(this._baseCamera.boundaries == undefined){\n this._baseCamera.boundaries = {min: undefined, max: undefined};\n }\n if(this._baseCamera.boundaries.min == undefined){\n this._baseCamera.boundaries.min = {x: undefined, y: undefined};\n }\n if(this._baseCamera.boundaries.max == undefined){\n this._baseCamera.boundaries.max = {x: undefined, y: undefined};\n }\n this._baseCamera.boundaries.min.x = min;\n this._baseCamera.boundaries.max.x = max;\n //NOTE leave for future optimization when setting the boundaries if the camera lies outside the boundaries clamp the position of the camera\n // if(!this.withinBoundaries(this.position)){\n // this.position = this.clampPoint(this.position);\n // }\n }\n\n setVerticalBoundaries(min: number, max: number){\n if (min > max){\n let temp = max;\n max = min;\n min = temp;\n }\n if(this._baseCamera.boundaries == undefined){\n this._baseCamera.boundaries = {min: undefined, max: undefined};\n }\n if(this._baseCamera.boundaries.min == undefined){\n this._baseCamera.boundaries.min = {x: undefined, y: undefined};\n }\n if(this._baseCamera.boundaries.max == undefined){\n this._baseCamera.boundaries.max = {x: undefined, y: undefined};\n }\n this._baseCamera.boundaries.min.y = min;\n this._baseCamera.boundaries.max.y = max;\n }\n\n /**\n * @description This function is used to subscribe to the camera events.\n * @param eventName The name of the event to subscribe to.\n * @param callback The callback function to be called when the event is triggered.\n * @param options The options for the subscription.\n * @returns The unsubscribe function.\n */\n on<K extends keyof CameraEventMap>(eventName: K, callback: (event: CameraEventMap[K], cameraState: CameraState)=>void, options?: SubscriptionOptions): UnSubscribe {\n return this._observer.on(eventName, callback, options);\n }\n\n getTRS(devicePixelRatio: number, alignCoordinateSystem: boolean): {scale: {x: number, y: number}, rotation: number, translation: {x: number, y: number}} {\n return this._baseCamera.getTRS(devicePixelRatio, alignCoordinateSystem);\n }\n\n viewPortInWorldSpace(alignCoordinate: boolean = true): {top: {left: Point, right: Point}, bottom: {left: Point, right: Point}}{\n return this._baseCamera.viewPortInWorldSpace(alignCoordinate);\n }\n\n viewPortAABB(alignCoordinate: boolean = true): {min: Point, max: Point}{\n return this._baseCamera.viewPortAABB(alignCoordinate);\n }\n}\n",
6
+ "export type Observer<T extends any[]> = (...data: T) => void;\n\nexport interface SubscriptionOptions {\n signal?: AbortSignal;\n}\n\nexport interface Observable<T extends any[]> {\n subscribe(observer: Observer<T>, options?: SubscriptionOptions): () => void;\n notify(...data: T): void;\n}\n\nexport class AsyncObservable<T extends any[]> implements Observable<T> {\n private observers: Observer<T>[] = [];\n\n subscribe(observer: Observer<T>, options?: SubscriptionOptions): () => void {\n this.observers.push(observer);\n\n // Handle AbortSignal\n if (options?.signal) {\n // If signal is already aborted, don't add the observer\n if (options.signal.aborted) {\n this.observers = this.observers.filter(o => o !== observer);\n return () => {};\n }\n\n // Add abort handler\n const abortHandler = () => {\n this.observers = this.observers.filter(o => o !== observer);\n options.signal?.removeEventListener('abort', abortHandler);\n };\n\n options.signal.addEventListener('abort', abortHandler);\n }\n\n // Return unsubscribe function\n return () => {\n this.observers = this.observers.filter(o => o !== observer);\n };\n }\n\n notify(...data: T): void {\n this.observers.forEach(observer => queueMicrotask(() => observer(...data)));\n }\n}\n\nexport class SynchronousObservable<T extends any[]> implements Observable<T> {\n private observers: Observer<T>[] = [];\n\n subscribe(observer: Observer<T>, options?: SubscriptionOptions): () => void {\n this.observers.push(observer);\n\n // Handle AbortSignal\n if (options?.signal) {\n // If signal is already aborted, don't add the observer\n if (options.signal.aborted) {\n this.observers = this.observers.filter(o => o !== observer);\n return () => {};\n }\n\n // Add abort handler\n const abortHandler = () => {\n this.observers = this.observers.filter(o => o !== observer);\n options.signal?.removeEventListener('abort', abortHandler);\n };\n\n options.signal.addEventListener('abort', abortHandler);\n }\n\n // Return unsubscribe function\n return () => {\n this.observers = this.observers.filter(o => o !== observer);\n };\n }\n\n notify(...data: T): void {\n this.observers.forEach(observer => observer(...data));\n }\n}\n\n// Usage example\n// const observable = new Observable<[string]>();\n\n// Create an AbortController\n// const controller = new AbortController();\n\n// Subscribe with AbortSignal\n// const unsubscribe = observable.subscribe(\n// (data) => console.log('Received:', data),\n// { signal: controller.signal }\n// );\n\n// Example notifications\n// observable.notify('Hello!'); // Observer will receive this\n\n// Abort the subscription\n// controller.abort();\n\n// Observer won't receive this notification\n// observable.notify('World!');\n\n// Alternative way to unsubscribe using the returned function\n// unsubscribe();\n",
7
+ "import { Point } from \"@ue-too/math\";\nimport { AsyncObservable, Observable, Observer, SubscriptionOptions } from \"../utils/observable\";\n\n/**\n * @description The payload for the pan event.\n * \n * @category Camera\n */\nexport type CameraPanEventPayload = {\n diff: Point;\n}\n\n/**\n * @description The payload for the zoom event.\n * \n * @category Camera\n */\nexport type CameraZoomEventPayload = {\n deltaZoomAmount: number;\n}\n\n/**\n * @description The payload for the rotate event.\n * \n * @category Camera\n */\nexport type CameraRotateEventPayload = {\n deltaRotation: number;\n}\n\n/**\n * @description The mapping of the camera events.\n * This is primarily used for type inference.\n * \n * @category Camera\n */\nexport type CameraEventMap = {\n \"pan\": CameraPanEventPayload,\n \"zoom\": CameraZoomEventPayload,\n \"rotate\": CameraRotateEventPayload,\n \"all\": AllCameraEventPayload,\n}\n\n/**\n * @description The type of the camera rotate event.\n * The type is for discriminating the event type when the all event is triggered.\n * \n * @category Camera\n */\nexport type CameraRotateEvent = {\n type: \"rotate\",\n} & CameraRotateEventPayload;\n\n/**\n * @description The type of the camera pan event.\n * The type is for discriminating the event type when the all event is triggered.\n * \n * @category Camera\n */\nexport type CameraPanEvent = {\n type: \"pan\",\n} & CameraPanEventPayload;\n\n/**\n * @description The type of the camera zoom event.\n * The type is for discriminating the event type when the all event is triggered.\n * \n * @category Camera\n */\nexport type CameraZoomEvent = {\n type: \"zoom\",\n} & CameraZoomEventPayload;\n\n/**\n * @description The type of the camera state.\n * \n * @category Camera\n */\nexport type CameraState = {\n position: Point;\n zoomLevel: number;\n rotation: number;\n}\n\n/**\n * @description The payload type of the \"all\" camera event payload.\n * \n * @category Camera\n */\nexport type AllCameraEventPayload = CameraRotateEvent | CameraPanEvent | CameraZoomEvent;\n\n/**\n * @description The callback function type for the camera event.\n * \n * @category Camera\n */\nexport type Callback<K extends keyof CameraEventMap> = (event: CameraEventMap[K], cameraState: CameraState)=>void;\n\n/**\n * @description The callback function type for the \"all\" camera event.\n * \n * @category Camera\n */\nexport type ConslidateCallback = (payload: AllCameraEventPayload, cameraState: CameraState) => void;\n\n/**\n * @description The type of the unsubscribe function.\n * \n * @category Camera\n */\nexport type UnSubscribe = () => void;\n\n/**\n * @description The observer type for the pan event.\n * \n * @category Camera\n */\nexport type PanObserver = Callback<\"pan\">;\n\n/**\n * @description The observer type for the zoom event.\n * \n * @category Camera\n */\nexport type ZoomObserver = Callback<\"zoom\">;\n\n/**\n * @description The observer type for the rotate event.\n * \n * @category Camera\n */\nexport type RotateObserver = Callback<\"rotate\">;\n\n/**\n * @description The observer type for the \"all\" camera event.\n * \n * @category Camera\n */\nexport type AllObserver = Callback<\"all\">;\n\n/**\n * @description The camera update publisher.\n * \n * @category Camera\n */\nexport class CameraUpdatePublisher {\n\n private pan: Observable<Parameters<Callback<\"pan\">>>;\n private zoom: Observable<Parameters<Callback<\"zoom\">>>;\n private rotate: Observable<Parameters<Callback<\"rotate\">>>;\n private all: Observable<Parameters<Callback<\"all\">>>;\n\n constructor() {\n this.pan = new AsyncObservable<Parameters<Callback<\"pan\">>>();\n this.zoom = new AsyncObservable<Parameters<Callback<\"zoom\">>>();\n this.rotate = new AsyncObservable<Parameters<Callback<\"rotate\">>>();\n this.all = new AsyncObservable<Parameters<Callback<\"all\">>>();\n }\n\n /**\n * @description Notify the pan event.\n * Will also notify the \"all\" event.\n * \n * @category Camera\n */\n notifyPan(event: CameraEventMap[\"pan\"], cameraState: CameraState): void {\n this.pan.notify(event, cameraState);\n this.all.notify({type: \"pan\", diff: event.diff}, cameraState);\n }\n\n /**\n * @description Notify the zoom event.\n * Will also notify the \"all\" event.\n * \n * @category Camera\n */\n notifyZoom(event: CameraEventMap[\"zoom\"], cameraState: CameraState): void {\n this.zoom.notify(event, cameraState);\n this.all.notify({type: \"zoom\", deltaZoomAmount: event.deltaZoomAmount}, cameraState);\n }\n\n /**\n * @description Notify the rotate event.\n * Will also notify the \"all\" event.\n * \n * @category Camera\n */\n notifyRotate(event: CameraEventMap[\"rotate\"], cameraState: CameraState): void {\n this.rotate.notify(event, cameraState);\n this.all.notify({type: \"rotate\", deltaRotation: event.deltaRotation}, cameraState);\n }\n \n /**\n * @description Subscribe to the camera event.\n * You can also pass in the abort controller signal within the options to cancel the subscription. Like this:\n * ```ts\n * const controller = new AbortController();\n * const unSubscribe = on(\"pan\", (event, cameraState)=>{}, {signal: controller.signal});\n * \n * // later in other place where you want to unsubscribe\n * controller.abort();\n *\n * ```\n * This means you can cancel multiple subscriptions by aborting the same controller. Just like regular event listeners.\n * \n * @category Camera\n */\n on<K extends keyof CameraEventMap>(eventName: K, callback: (event: CameraEventMap[K], cameraState: CameraState)=>void, options?: SubscriptionOptions): UnSubscribe {\n switch (eventName){\n case \"pan\":\n return this.pan.subscribe(callback as Observer<Parameters<Callback<\"pan\">>>, options);\n case \"zoom\":\n return this.zoom.subscribe(callback as Observer<Parameters<Callback<\"zoom\">>>, options);\n case \"rotate\":\n return this.rotate.subscribe(callback as Observer<Parameters<Callback<\"rotate\">>>, options);\n case \"all\":\n return this.all.subscribe(callback as Observer<Parameters<Callback<\"all\">>>, options);\n default:\n throw new Error(`Invalid event name: ${eventName}`);\n }\n }\n}\n",
8
+ "import { Point, PointCal } from \"@ue-too/math\";\nimport { multiplyMatrix, TransformationMatrix } from \"./matrix\";\n\n/**\n * @description Finds the world space coordinate of the interest point if the camera is at target position.\n * The target position is the \"would be\" position of the camera in world space.\n * The interest point is the point in view port space where the \"bottom left\" corner is the origin.\n * \n * @category Camera\n */\nexport function convert2WorldSpaceWRT(targetPosition: Point, interestPoint: Point, viewPortWidth: number, viewPortHeight: number, cameraZoomLevel: number, cameraRotation: number): Point{\n let cameraFrameCenter = {x: viewPortWidth / 2, y: viewPortHeight / 2};\n let delta2Point = PointCal.subVector(interestPoint, cameraFrameCenter);\n delta2Point = PointCal.multiplyVectorByScalar(delta2Point, 1 / cameraZoomLevel);\n delta2Point = PointCal.rotatePoint(delta2Point, cameraRotation);\n return PointCal.addVector(targetPosition, delta2Point);\n}\n\n/**\n * @description Converts the point to world space.\n * The point is in the viewport space where the \"bottom left\" corner is the origin.\n * Camera position is the position of the camera in world space.\n * \n * @category Camera\n */\nexport function convert2WorldSpace(point: Point, viewPortWidth: number, viewPortHeight: number, cameraPosition: Point, cameraZoomLevel: number, cameraRotation: number): Point{\n let cameraFrameCenter = {x: viewPortWidth / 2, y: viewPortHeight / 2};\n let delta2Point = PointCal.subVector(point, cameraFrameCenter);\n delta2Point = PointCal.multiplyVectorByScalar(delta2Point, 1 / cameraZoomLevel);\n delta2Point = PointCal.rotatePoint(delta2Point, cameraRotation);\n return PointCal.addVector(cameraPosition, delta2Point);\n}\n\n/**\n * @description Converts the point to world space.\n * The point is in the viewport space where the origin is at the center of the viewport.\n * Camera position is the position of the camera in world space.\n * \n * @category Camera\n */\nexport function convert2WorldSpaceAnchorAtCenter(point: Point, cameraPosition: Point, cameraZoomLevel: number, cameraRotation: number): Point{\n const scaledBack = PointCal.multiplyVectorByScalar(point, 1 / cameraZoomLevel);\n const rotatedBack = PointCal.rotatePoint(scaledBack, cameraRotation);\n const withOffset = PointCal.addVector(rotatedBack, cameraPosition);\n return withOffset;\n}\n\n/**\n * @description Converts a point in \"stage/context/world\" space to view port space.\n * The origin of the viewport is at the center of the viewport.\n * The point is in world space.\n * The camera position is the position of the camera in world space.\n * \n * @category Camera\n */\nexport function convert2ViewPortSpaceAnchorAtCenter(point: Point, cameraPosition: Point, cameraZoomLevel: number, cameraRotation: number): Point{\n const withOffset = PointCal.subVector(point, cameraPosition);\n const scaled = PointCal.multiplyVectorByScalar(withOffset, cameraZoomLevel);\n const rotated = PointCal.rotatePoint(scaled, -cameraRotation);\n return rotated;\n}\n\n/**\n * @description Converts a point in \"stage/context/world\" space to view port space.\n * The origin of the view port is at the bottom left corner.\n * The point is in world space.\n * The camera position is the position of the camera in world space.\n * \n * @category Camera\n */\nexport function invertFromWorldSpace(point: Point, viewPortWidth: number, viewPortHeight: number, cameraPosition: Point, cameraZoomLevel: number, cameraRotation: number): Point{\n let cameraFrameCenter = {x: viewPortWidth / 2, y: viewPortHeight / 2};\n let delta2Point = PointCal.subVector(point, cameraPosition);\n delta2Point = PointCal.rotatePoint(delta2Point, -cameraRotation);\n delta2Point = PointCal.multiplyVectorByScalar(delta2Point, cameraZoomLevel);\n return PointCal.addVector(cameraFrameCenter, delta2Point);\n}\n\n/**\n * @description Checks if a point is in the view port.\n * The point is in world space.\n * The camera position is the position of the camera in world space.\n * \n * @category Camera\n */\nexport function pointIsInViewPort(point: Point, viewPortWidth: number, viewPortHeight: number, cameraPosition: Point, cameraZoomLevel: number, cameraRotation: number): boolean{\n const pointInCameraFrame = invertFromWorldSpace(point, viewPortWidth, viewPortHeight, cameraPosition, cameraZoomLevel, cameraRotation);\n if(pointInCameraFrame.x < 0 || pointInCameraFrame.x > viewPortWidth || pointInCameraFrame.y < 0 || pointInCameraFrame.y > viewPortHeight){\n return false;\n }\n return true;\n}\n\n/**\n * @description Converts a delta in view port space to world space.\n * The delta is in view port space.\n * \n * @category Camera\n */\nexport function convertDeltaInViewPortToWorldSpace(delta: Point, cameraZoomLevel: number, cameraRotation: number): Point{\n return PointCal.multiplyVectorByScalar(PointCal.rotatePoint(delta, cameraRotation), 1 / cameraZoomLevel);\n}\n\n/**\n * @description Converts a delta in world space to view port space.\n * The delta is in world space.\n * \n * @category Camera\n */\nexport function convertDeltaInWorldToViewPortSpace(delta: Point, cameraZoomLevel: number, cameraRotation: number): Point{\n return PointCal.multiplyVectorByScalar(PointCal.rotatePoint(delta, -cameraRotation), cameraZoomLevel);\n}\n\n/**\n * @description Calculates the camera position to get a point in \"stage/context/world\" space to be at a certain point in view port space.\n * This is useful to coordinate camera pan and zoom at the same time.\n * \n * @category Camera\n */\nexport function cameraPositionToGet(pointInWorld: Point, toPointInViewPort: Point, cameraZoomLevel: number, cameraRotation: number): Point {\n const scaled = PointCal.multiplyVectorByScalar(toPointInViewPort, 1 / cameraZoomLevel);\n const rotated = PointCal.rotatePoint(scaled, cameraRotation);\n return PointCal.subVector(pointInWorld, rotated);\n}\n\nexport function transformationMatrixFromCamera(cameraPosition: Point, cameraZoomLevel: number, cameraRotation: number): TransformationMatrix{\n const cos = Math.cos(cameraRotation);\n const sin = Math.sin(cameraRotation);\n const trMatrix = multiplyMatrix({\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: cameraPosition.x,\n f: cameraPosition.y\n }, {\n a: cos,\n b: sin,\n c: -sin,\n d: cos,\n e: 0,\n f: 0\n });\n const trsMatrix = multiplyMatrix(trMatrix, {\n a: 1 / cameraZoomLevel,\n b: 0,\n c: 0,\n d: 1 / cameraZoomLevel,\n e: 0,\n f: 0\n });\n return trsMatrix;\n}\n\nexport function convert2WorldSpaceWithTransformationMatrix(point: Point, transformationMatrix: TransformationMatrix): Point{\n return {\n x: point.x * transformationMatrix.a + point.y * transformationMatrix.c + transformationMatrix.e,\n y: point.x * transformationMatrix.b + point.y * transformationMatrix.d + transformationMatrix.f\n }\n}\n",
9
+ "/**\n * @description The transform matrix for the camera.\n * It's in the format like this:\n * ```\n * | a c e |\n * | b d f |\n * | 0 0 1 |\n * ```\n * \n * @category Camera\n */\nexport type TransformationMatrix = {\n a: number;\n b: number;\n c: number;\n d: number;\n e: number;\n f: number;\n};\n\n/**\n * Decomposes a camera transformation matrix back to camera parameters\n * \n * Transformation order:\n * 1. Scale by device pixel ratio\n * 2. Translate to canvas center\n * 3. Rotate by -camera.rotation\n * 4. Scale by zoom level\n * 5. Translate by -camera.position\n * \n * Final matrix: M = S1 * T1 * R * S2 * T2\n */\n\nexport function decomposeCameraMatrix(transformMatrix: TransformationMatrix, devicePixelRatio: number, canvasWidth: number, canvasHeight: number) {\n // Extract matrix elements (assuming 2D transformation matrix)\n // [a c tx] [m00 m02 m04]\n // [b d ty] = [m01 m03 m05]\n // [0 0 1 ] [0 0 1 ]\n \n const a = transformMatrix.a; // m00\n const b = transformMatrix.b; // m01 \n const c = transformMatrix.c; // m02\n const d = transformMatrix.d; // m03\n const tx = transformMatrix.e; // m04\n const ty = transformMatrix.f; // m05\n \n // Step 1: Extract rotation\n // The rotation is preserved in the orientation of the transformation\n const rotation = -Math.atan2(b, a); // Negative because we applied -camera.rotation\n \n // Step 2: Extract total scale and zoom\n const totalScale = Math.sqrt(a * a + b * b);\n const zoom = totalScale / devicePixelRatio;\n \n // Step 3: Extract camera position\n // We need to reverse the transformation chain:\n // Final translation = DPR * (center + R * Z * (-camera_position))\n \n // Start with the matrix translation\n let reverse = [tx, ty];\n \n // Remove DPR scaling\n reverse = [reverse[0] / devicePixelRatio, reverse[1] / devicePixelRatio];\n \n // Remove canvas center translation\n reverse = [reverse[0] - canvasWidth/2, reverse[1] - canvasHeight/2];\n \n // Apply inverse rotation (rotate by positive camera rotation)\n const cos_r = Math.cos(rotation); // Note: positive for inverse\n const sin_r = Math.sin(rotation);\n reverse = [\n cos_r * reverse[0] - sin_r * reverse[1],\n sin_r * reverse[0] + cos_r * reverse[1]\n ];\n \n // Apply inverse zoom scaling\n reverse = [reverse[0] / zoom, reverse[1] / zoom];\n \n // Negate to get original camera position (since we applied -camera.position)\n const cameraX = -reverse[0];\n const cameraY = -reverse[1];\n \n return {\n position: { x: cameraX, y: cameraY },\n zoom: zoom,\n rotation: rotation\n };\n}\n\n// Alternative implementation using matrix operations for clarity\nfunction decomposeCameraMatrixVerbose(transformMatrix: TransformationMatrix, devicePixelRatio: number, canvasWidth: number, canvasHeight: number) {\n const a = transformMatrix.a;\n const b = transformMatrix.b;\n const c = transformMatrix.c;\n const d = transformMatrix.d;\n const tx = transformMatrix.e;\n const ty = transformMatrix.f;\n \n console.log('Input matrix:');\n console.log(`[${a.toFixed(3)}, ${c.toFixed(3)}, ${tx.toFixed(3)}]`);\n console.log(`[${b.toFixed(3)}, ${d.toFixed(3)}, ${ty.toFixed(3)}]`);\n console.log('[0.000, 0.000, 1.000]');\n \n // Extract rotation\n const rotation = -Math.atan2(b, a);\n console.log(`\\nExtracted rotation: ${(rotation * 180 / Math.PI).toFixed(2)}°`);\n \n // Extract zoom\n const totalScale = Math.sqrt(a * a + b * b);\n const zoom = totalScale / devicePixelRatio;\n console.log(`Extracted zoom: ${zoom.toFixed(3)}`);\n \n // Extract camera position\n const centerX = canvasWidth / 2;\n const centerY = canvasHeight / 2;\n \n // First remove DPR scaling from the final translation\n const unscaledTx = tx / devicePixelRatio;\n const unscaledTy = ty / devicePixelRatio;\n console.log(`After removing DPR: [${unscaledTx.toFixed(3)}, ${unscaledTy.toFixed(3)}]`);\n \n // Then remove canvas center offset\n const adjustedTx = unscaledTx - centerX;\n const adjustedTy = unscaledTy - centerY;\n console.log(`After removing canvas center: [${adjustedTx.toFixed(3)}, ${adjustedTy.toFixed(3)}]`);\n \n // Reverse rotation\n const cos_r = Math.cos(-rotation);\n const sin_r = Math.sin(-rotation);\n const rotatedBackX = cos_r * adjustedTx + sin_r * adjustedTy;\n const rotatedBackY = -sin_r * adjustedTx + cos_r * adjustedTy;\n console.log(`After inverse rotation: [${rotatedBackX.toFixed(3)}, ${rotatedBackY.toFixed(3)}]`);\n \n // Reverse zoom scaling and negate (because we applied -camera.position)\n const cameraX = -rotatedBackX / zoom;\n const cameraY = -rotatedBackY / zoom;\n console.log(`Final camera position: [${cameraX.toFixed(3)}, ${cameraY.toFixed(3)}]`);\n \n return {\n position: { x: cameraX, y: cameraY },\n zoom: zoom,\n rotation: rotation\n };\n}\n\n// Helper function to create the transformation matrix from camera parameters\n// canvas width and height are the css style width and height, not the canvas.width and canvas.height\nexport function createCameraMatrix(cameraPos: {x: number, y: number}, zoom: number, rotation: number, devicePixelRatio: number, canvasWidth: number, canvasHeight: number) {\n // Step 1: Scale by device pixel ratio\n let matrix: TransformationMatrix = {\n a: devicePixelRatio,\n b: 0,\n c: 0,\n d: devicePixelRatio,\n e: 0,\n f: 0\n };\n \n // Step 2: Translate to canvas center\n const multipliedMatrix = multiplyMatrix(matrix, {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: canvasWidth/2,\n f: canvasHeight/2\n });\n \n // Step 3: Rotate (negative camera rotation)\n const cos_r = Math.cos(-rotation);\n const sin_r = Math.sin(-rotation);\n const rotatedMatrix = multiplyMatrix(multipliedMatrix, {\n a: cos_r,\n b: sin_r,\n c: -sin_r,\n d: cos_r,\n e: 0,\n f: 0\n });\n \n // Step 4: Scale by zoom\n const zoomedMatrix = multiplyMatrix(rotatedMatrix, {\n a: zoom,\n b: 0,\n c: 0,\n d: zoom,\n e: 0,\n f: 0\n });\n \n // Step 5: Translate by negative camera position\n const translatedMatrix = multiplyMatrix(zoomedMatrix, {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: -cameraPos.x,\n f: -cameraPos.y\n });\n return translatedMatrix;\n}\n\n// Matrix multiplication helper (2D transformation matrices)\nexport function multiplyMatrix(m1: TransformationMatrix, m2: TransformationMatrix) {\n const a1 = m1.a;\n const b1 = m1.b;\n const c1 = m1.c;\n const d1 = m1.d;\n const tx1 = m1.e;\n const ty1 = m1.f;\n\n const a2 = m2.a;\n const b2 = m2.b;\n const c2 = m2.c;\n const d2 = m2.d;\n const tx2 = m2.e;\n const ty2 = m2.f;\n \n return {\n a: a1 * a2 + c1 * b2, // a\n b: b1 * a2 + d1 * b2, // b\n c: a1 * c2 + c1 * d2, // c\n d: b1 * c2 + d1 * d2, // d\n e: a1 * tx2 + c1 * ty2 + tx1, // tx\n f: b1 * tx2 + d1 * ty2 + ty1 // ty\n };\n}\n\n/**\n * Decomposes a 2D transformation matrix into Translation, Rotation, and Scale (TRS)\n * \n * @param matrix - The transformation matrix to decompose\n * @returns Object containing translation, rotation (in radians), and scale components\n * \n * @category Matrix\n */\nexport function decomposeTRS(matrix: TransformationMatrix): {\n translation: { x: number; y: number };\n rotation: number;\n scale: { x: number; y: number };\n} {\n const { a, b, c, d, e, f } = matrix;\n \n // Translation is directly available in the matrix\n const translation = { x: e, y: f };\n \n // Extract rotation and scale using QR decomposition\n // For 2D matrices, we can use a simpler approach\n \n // Calculate the determinant to check if the matrix is valid\n const det = a * d - b * c;\n if (Math.abs(det) < 1e-10) {\n // Matrix is singular or nearly singular\n throw new Error('Matrix is singular and cannot be decomposed');\n }\n \n // Extract rotation using atan2\n // The rotation is the angle of the first column vector (a, b)\n const rotation = Math.atan2(b, a);\n \n // Extract scale by normalizing the rotation component\n const cos_r = Math.cos(rotation);\n const sin_r = Math.sin(rotation);\n \n // Remove rotation from the matrix to get pure scaling\n // R^(-1) * M = S\n const scaleX = a * cos_r + b * sin_r;\n const scaleY = c * (-sin_r) + d * cos_r;\n \n // Handle negative scales by adjusting rotation\n let finalRotation = rotation;\n let finalScaleX = scaleX;\n let finalScaleY = scaleY;\n \n if (scaleX < 0) {\n finalScaleX = -scaleX;\n finalRotation += Math.PI;\n }\n if (scaleY < 0) {\n finalScaleY = -scaleY;\n finalRotation += Math.PI;\n }\n \n // Normalize rotation to [-π, π]\n while (finalRotation > Math.PI) finalRotation -= 2 * Math.PI;\n while (finalRotation < -Math.PI) finalRotation += 2 * Math.PI;\n \n return {\n translation,\n rotation: finalRotation,\n scale: { x: finalScaleX, y: finalScaleY }\n };\n}\n\n/**\n * Creates a transformation matrix from TRS components\n * \n * @param translation - Translation vector\n * @param rotation - Rotation in radians\n * @param scale - Scale vector\n * @returns Transformation matrix\n * \n * @category Matrix\n */\nexport function createTRSMatrix(\n translation: { x: number; y: number },\n rotation: number,\n scale: { x: number; y: number }\n): TransformationMatrix {\n const cos_r = Math.cos(rotation);\n const sin_r = Math.sin(rotation);\n \n return {\n a: scale.x * cos_r,\n b: scale.x * sin_r,\n c: -scale.y * sin_r,\n d: scale.y * cos_r,\n e: translation.x,\n f: translation.y\n };\n}\n\n/**\n * Decomposes a matrix using SVD (Singular Value Decomposition) approach\n * This is an alternative method that can handle more complex transformations\n * \n * @param matrix - The transformation matrix to decompose\n * @returns Object containing translation, rotation, and scale components\n * \n * @category Matrix\n */\nexport function decomposeTRSSVD(matrix: TransformationMatrix): {\n translation: { x: number; y: number };\n rotation: number;\n scale: { x: number; y: number };\n} {\n const { a, b, c, d, e, f } = matrix;\n \n // Translation is directly available\n const translation = { x: e, y: f };\n \n // Extract the 2x2 transformation part\n const m11 = a, m12 = c;\n const m21 = b, m22 = d;\n \n // Compute SVD: M = U * S * V^T\n // For 2x2 matrices, we can compute this analytically\n \n // Compute M^T * M = V * S^2 * V^T\n const mtm11 = m11 * m11 + m21 * m21;\n const mtm12 = m11 * m12 + m21 * m22;\n const mtm21 = mtm12;\n const mtm22 = m12 * m12 + m22 * m22;\n \n // Compute eigenvalues of M^T * M\n const trace = mtm11 + mtm22;\n const det = mtm11 * mtm22 - mtm12 * mtm21;\n const discriminant = trace * trace - 4 * det;\n \n if (discriminant < 0) {\n throw new Error('Invalid transformation matrix');\n }\n \n const sqrtDisc = Math.sqrt(discriminant);\n const lambda1 = (trace + sqrtDisc) / 2;\n const lambda2 = (trace - sqrtDisc) / 2;\n \n // Singular values are square roots of eigenvalues\n const s1 = Math.sqrt(Math.max(0, lambda1));\n const s2 = Math.sqrt(Math.max(0, lambda2));\n \n // Scale is the singular values\n const scale = { x: s1, y: s2 };\n \n // Compute rotation from U matrix\n // U = M * V * S^(-1)\n let rotation = 0;\n \n if (s1 > 1e-10) {\n // Compute V matrix (eigenvectors of M^T * M)\n const v11 = mtm12;\n const v12 = lambda1 - mtm11;\n const v21 = lambda2 - mtm22;\n const v22 = mtm21;\n \n // Normalize V\n const vNorm1 = Math.sqrt(v11 * v11 + v21 * v21);\n const vNorm2 = Math.sqrt(v12 * v12 + v22 * v22);\n \n if (vNorm1 > 1e-10 && vNorm2 > 1e-10) {\n const v11n = v11 / vNorm1;\n const v21n = v21 / vNorm1;\n const v12n = v12 / vNorm2;\n const v22n = v22 / vNorm2;\n \n // Compute U = M * V * S^(-1)\n const u11 = (m11 * v11n + m12 * v21n) / s1;\n const u21 = (m21 * v11n + m22 * v21n) / s1;\n \n rotation = Math.atan2(u21, u11);\n }\n }\n \n return {\n translation,\n rotation,\n scale\n };\n}\n\n// Example usage and test\nfunction testDecomposition() {\n // Test parameters\n const originalCamera = {\n position: { x: 100, y: 50 },\n zoom: 2.0,\n rotation: Math.PI / 6 // 30 degrees\n };\n const devicePixelRatio = 1.5;\n const canvasWidth = 800;\n const canvasHeight = 600;\n \n console.log('=== Testing Camera Matrix Decomposition ===');\n console.log('Original camera parameters:');\n console.log(`Position: (${originalCamera.position.x}, ${originalCamera.position.y})`);\n console.log(`Zoom: ${originalCamera.zoom}`);\n console.log(`Rotation: ${(originalCamera.rotation * 180 / Math.PI).toFixed(2)}°`);\n console.log(`Device Pixel Ratio: ${devicePixelRatio}`);\n console.log(`Canvas: ${canvasWidth}x${canvasHeight}`);\n \n // Create transformation matrix\n const matrix = createCameraMatrix(\n originalCamera.position, \n originalCamera.zoom, \n originalCamera.rotation, \n devicePixelRatio, \n canvasWidth, \n canvasHeight\n );\n \n console.log('\\n=== Decomposition Process ===');\n \n // Decompose the matrix\n const decomposed = decomposeCameraMatrixVerbose(\n matrix, \n devicePixelRatio, \n canvasWidth, \n canvasHeight\n );\n \n console.log('\\n=== Results ===');\n console.log('Decomposed camera parameters:');\n console.log(`Position: (${decomposed.position.x.toFixed(3)}, ${decomposed.position.y.toFixed(3)})`);\n console.log(`Zoom: ${decomposed.zoom.toFixed(3)}`);\n console.log(`Rotation: ${(decomposed.rotation * 180 / Math.PI).toFixed(2)}°`);\n \n // Check accuracy\n const posError = Math.sqrt(\n Math.pow(originalCamera.position.x - decomposed.position.x, 2) + \n Math.pow(originalCamera.position.y - decomposed.position.y, 2)\n );\n const zoomError = Math.abs(originalCamera.zoom - decomposed.zoom);\n const rotError = Math.abs(originalCamera.rotation - decomposed.rotation);\n \n console.log('\\n=== Accuracy Check ===');\n console.log(`Position error: ${posError.toFixed(6)}`);\n console.log(`Zoom error: ${zoomError.toFixed(6)}`);\n console.log(`Rotation error: ${rotError.toFixed(6)} radians`);\n}\n\n/**\n * Test function for TRS decomposition\n */\nfunction testTRSDecomposition() {\n console.log('=== Testing TRS Decomposition ===');\n \n // Test case 1: Simple translation\n console.log('\\n--- Test 1: Simple Translation ---');\n const translation = { x: 10, y: 20 };\n const rotation = 0;\n const scale = { x: 1, y: 1 };\n \n const matrix1 = createTRSMatrix(translation, rotation, scale);\n const decomposed1 = decomposeTRS(matrix1);\n \n console.log('Original:', { translation, rotation, scale });\n console.log('Decomposed:', decomposed1);\n \n // Test case 2: Translation + Rotation\n console.log('\\n--- Test 2: Translation + Rotation ---');\n const translation2 = { x: 15, y: 25 };\n const rotation2 = Math.PI / 4; // 45 degrees\n const scale2 = { x: 1, y: 1 };\n \n const matrix2 = createTRSMatrix(translation2, rotation2, scale2);\n const decomposed2 = decomposeTRS(matrix2);\n \n console.log('Original:', { translation: translation2, rotation: rotation2, scale: scale2 });\n console.log('Decomposed:', decomposed2);\n \n // Test case 3: Translation + Rotation + Scale\n console.log('\\n--- Test 3: Translation + Rotation + Scale ---');\n const translation3 = { x: 30, y: 40 };\n const rotation3 = Math.PI / 3; // 60 degrees\n const scale3 = { x: 2, y: 1.5 };\n \n const matrix3 = createTRSMatrix(translation3, rotation3, scale3);\n const decomposed3 = decomposeTRS(matrix3);\n \n console.log('Original:', { translation: translation3, rotation: rotation3, scale: scale3 });\n console.log('Decomposed:', decomposed3);\n \n // Test case 4: Negative scale\n console.log('\\n--- Test 4: Negative Scale ---');\n const translation4 = { x: 50, y: 60 };\n const rotation4 = Math.PI / 6; // 30 degrees\n const scale4 = { x: -1.5, y: 2 };\n \n const matrix4 = createTRSMatrix(translation4, rotation4, scale4);\n const decomposed4 = decomposeTRS(matrix4);\n \n console.log('Original:', { translation: translation4, rotation: rotation4, scale: scale4 });\n console.log('Decomposed:', decomposed4);\n \n // Test case 5: Compare with SVD method\n console.log('\\n--- Test 5: Compare TRS vs SVD ---');\n const decomposed5TRS = decomposeTRS(matrix3);\n const decomposed5SVD = decomposeTRSSVD(matrix3);\n \n console.log('TRS method:', decomposed5TRS);\n console.log('SVD method:', decomposed5SVD);\n \n // Test reconstruction\n console.log('\\n--- Test 6: Matrix Reconstruction ---');\n const reconstructed = createTRSMatrix(\n decomposed3.translation,\n decomposed3.rotation,\n decomposed3.scale\n );\n \n console.log('Original matrix:', matrix3);\n console.log('Reconstructed matrix:', reconstructed);\n \n const matrixError = Math.sqrt(\n Math.pow(matrix3.a - reconstructed.a, 2) +\n Math.pow(matrix3.b - reconstructed.b, 2) +\n Math.pow(matrix3.c - reconstructed.c, 2) +\n Math.pow(matrix3.d - reconstructed.d, 2) +\n Math.pow(matrix3.e - reconstructed.e, 2) +\n Math.pow(matrix3.f - reconstructed.f, 2)\n );\n \n console.log(`Matrix reconstruction error: ${matrixError.toFixed(10)}`);\n}\n\n// Run the test\n// testDecomposition();\n// testTRSDecomposition();\n",
10
+ "import { Point, PointCal } from \"@ue-too/math\";\nimport { convert2WorldSpaceWRT } from \"./coordinate-conversion\";\n\n/**\n * @description The boundaries of a camera.\n * The x and y are in world space.\n * \n * @category Camera\n */\nexport type Boundaries = {\n min?: {x?: number, y?: number};\n max?: {x?: number, y?: number};\n}\n\n/**\n * @description Checks if a point is within the boundaries.\n * \n * @category Camera\n */\nexport function withinBoundaries(point: Point, boundaries: Boundaries | undefined): boolean{\n if(boundaries == undefined){\n // no boundaries \n return true;\n }\n let leftSide = false;\n let rightSide = false;\n let topSide = false;\n let bottomSide = false;\n // check within boundaries horizontally\n if(boundaries.max == undefined || boundaries.max.x == undefined || point.x <= boundaries.max.x){\n rightSide = true;\n }\n if(boundaries.min == undefined || boundaries.min.x == undefined || point.x >= boundaries.min.x){\n leftSide = true;\n }\n if(boundaries.max == undefined || boundaries.max.y == undefined || point.y <= boundaries.max.y){\n topSide = true;\n }\n if(boundaries.min == undefined || boundaries.min.y == undefined || point.y >= boundaries.min.y){\n bottomSide = true;\n }\n return leftSide && rightSide && topSide && bottomSide;\n}\n\n/**\n * @description Checks if the boundaries are valid.\n * \n * @category Camera\n */\nexport function isValidBoundaries(boundaries: Boundaries | undefined): boolean{\n if(boundaries == undefined){\n return true;\n }\n const minX = boundaries.min?.x;\n const maxX = boundaries.max?.x;\n if (minX != undefined && maxX != undefined && minX >= maxX){\n return false;\n }\n const minY = boundaries.min?.y;\n const maxY = boundaries.max?.y;\n if (minY != undefined && maxY != undefined && minY >= maxY){\n return false;\n }\n return true;\n}\n\n/**\n * @description Checks if the boundaries are fully defined.\n * \n * @category Camera\n */\nexport function boundariesFullyDefined(boundaries: Boundaries | undefined): boolean{\n if(boundaries == undefined){\n return false;\n }\n if(boundaries.max == undefined || boundaries.min == undefined){\n return false;\n }\n if(boundaries.max.x == undefined || boundaries.max.y == undefined || boundaries.min.x == undefined || boundaries.min.y == undefined){\n return false;\n }\n return true;\n}\n\n/**\n * @description Clamps a point to the boundaries.\n * \n * @category Camera\n */\nexport function clampPoint(point: Point, boundaries: Boundaries | undefined): Point{\n if(withinBoundaries(point, boundaries) || boundaries == undefined){\n return point;\n }\n let manipulatePoint = {x: point.x, y: point.y};\n let limit = boundaries.min;\n if (limit != undefined){\n if(limit.x != undefined){\n manipulatePoint.x = Math.max(manipulatePoint.x, limit.x);\n }\n if(limit.y != undefined){\n manipulatePoint.y = Math.max(manipulatePoint.y, limit.y);\n }\n }\n limit = boundaries.max;\n if(limit != undefined){\n if(limit.x != undefined){\n manipulatePoint.x = Math.min(manipulatePoint.x, limit.x);\n }\n if(limit.y != undefined){\n manipulatePoint.y = Math.min(manipulatePoint.y, limit.y);\n }\n }\n return manipulatePoint;\n}\n\n/**\n * @description Gets the translation width of the boundaries.\n * \n * @category Camera\n */\nexport function translationWidthOf(boundaries: Boundaries | undefined): number | undefined{\n if(boundaries == undefined || boundaries.min == undefined || boundaries.max == undefined || boundaries.min.x == undefined || boundaries.max.x == undefined){\n return undefined;\n }\n return boundaries.max.x - boundaries.min.x;\n}\n\n/**\n * @description Gets the half translation width of the boundaries.\n * \n * @category Camera\n */\nexport function halfTranslationWidthOf(boundaries: Boundaries | undefined): number | undefined{\n const translationWidth = translationWidthOf(boundaries);\n return translationWidth != undefined ? translationWidth / 2 : undefined;\n}\n\n/**\n * @description Gets the translation height of the boundaries.\n * \n * @category Camera\n */\nexport function translationHeightOf(boundaries: Boundaries | undefined): number | undefined{\n if(boundaries == undefined || boundaries.min == undefined || boundaries.max == undefined || boundaries.min.y == undefined || boundaries.max.y == undefined){\n return undefined;\n }\n return boundaries.max.y - boundaries.min.y;\n}\n\n/**\n * @description Gets the half translation height of the boundaries.\n * \n * @category Camera\n */\nexport function halfTranslationHeightOf(boundaries: Boundaries | undefined): number | undefined{\n const translationHeight = translationHeightOf(boundaries);\n return translationHeight != undefined ? translationHeight / 2 : undefined;\n}\n\n/**\n * @description Clamps the entire viewport within the boundaries\n * \n * @category Camera\n */\nexport function clampPointEntireViewPort(point: Point, viewPortWidth: number, viewPortHeight: number, boundaries: Boundaries | undefined, cameraZoomLevel: number, cameraRotation: number): Point{\n if(boundaries == undefined){\n return point;\n }\n let topLeftCorner = convert2WorldSpaceWRT(point, {x: 0, y: viewPortHeight}, viewPortWidth, viewPortHeight, cameraZoomLevel, cameraRotation);\n let bottomLeftCorner = convert2WorldSpaceWRT(point, {x: 0, y: 0}, viewPortWidth, viewPortHeight, cameraZoomLevel, cameraRotation);\n let topRightCorner = convert2WorldSpaceWRT(point, {x: viewPortWidth, y: viewPortHeight}, viewPortWidth, viewPortHeight, cameraZoomLevel, cameraRotation);\n let bottomRightCorner = convert2WorldSpaceWRT(point, {x: viewPortWidth, y: 0}, viewPortWidth, viewPortHeight, cameraZoomLevel, cameraRotation);\n let topLeftCornerClamped = clampPoint(topLeftCorner, boundaries);\n let topRightCornerClamped = clampPoint(topRightCorner, boundaries);\n let bottomLeftCornerClamped = clampPoint(bottomLeftCorner, boundaries);\n let bottomRightCornerClamped = clampPoint(bottomRightCorner, boundaries);\n let topLeftCornerDiff = PointCal.subVector(topLeftCornerClamped, topLeftCorner);\n let topRightCornerDiff = PointCal.subVector(topRightCornerClamped, topRightCorner);\n let bottomLeftCornerDiff = PointCal.subVector(bottomLeftCornerClamped, bottomLeftCorner);\n let bottomRightCornerDiff = PointCal.subVector(bottomRightCornerClamped, bottomRightCorner);\n let diffs = [topLeftCornerDiff, topRightCornerDiff, bottomLeftCornerDiff, bottomRightCornerDiff];\n let maxXDiff = Math.abs(diffs[0].x);\n let maxYDiff = Math.abs(diffs[0].y);\n let delta = diffs[0];\n diffs.forEach((diff)=>{\n if(Math.abs(diff.x) > maxXDiff){\n maxXDiff = Math.abs(diff.x);\n delta.x = diff.x;\n }\n if(Math.abs(diff.y) > maxYDiff){\n maxYDiff = Math.abs(diff.y);\n delta.y = diff.y;\n }\n });\n return PointCal.addVector(point, delta);\n}\n",
11
+ "/**\n * @description The limits of the zoom level.\n * \n * @category Camera\n */\nexport type ZoomLevelLimits = {min?: number, max?: number};\n\n/**\n * @description Checks if the zoom level limits are valid.\n */\nexport function isValidZoomLevelLimits(zoomLevelLimits: ZoomLevelLimits | undefined): boolean{\n if(zoomLevelLimits === undefined){\n return true;\n }\n if(zoomLevelLimits.min !== undefined && zoomLevelLimits.max !== undefined && zoomLevelLimits.min > zoomLevelLimits.max){\n return false;\n }\n return true;\n}\n\n/**\n * @description Clamps the zoom level within the limits.\n * \n * @category Camera\n */\nexport function clampZoomLevel(zoomLevel: number, zoomLevelLimits?: ZoomLevelLimits): number{\n if(zoomLevelWithinLimits(zoomLevel, zoomLevelLimits) || zoomLevelLimits === undefined){\n return zoomLevel;\n }\n if(zoomLevelLimits.max){\n zoomLevel = Math.min(zoomLevelLimits.max, zoomLevel);\n }\n if(zoomLevelLimits.min){\n zoomLevel = Math.max(zoomLevelLimits.min, zoomLevel);\n }\n return zoomLevel;\n}\n\n/**\n * @description Checks if the zoom level is within the limits.\n * \n * @category Camera\n */\nexport function zoomLevelWithinLimits(zoomLevel: number, zoomLevelLimits?: ZoomLevelLimits): boolean{\n if(zoomLevelLimits === undefined){\n return true;\n }\n if(zoomLevel <= 0 || (zoomLevelLimits !== undefined && \n ((zoomLevelLimits.max !== undefined && zoomLevelLimits.max < zoomLevel) || \n (zoomLevelLimits.min !== undefined && zoomLevelLimits.min > zoomLevel)\n ))){\n return false;\n }\n return true;\n}\n",
12
+ "/**\n * @description The limits of the rotation.\n * \n * @category Camera\n */\nexport type RotationLimits = {start: number, end: number, ccw: boolean, startAsTieBreaker: boolean};\n\n/**\n * @description The boundary of the rotation. (experimental)\n * \n * @category Camera\n */\nexport type RotationBoundary = {start: number, end: number, positiveDirection: boolean, startAsTieBreaker: boolean};\n\n/**\n * @description Clamps the rotation within the limits.\n * \n * @category Camera\n */\nexport function clampRotation(rotation: number, rotationLimits?: RotationLimits): number{\n if(rotationWithinLimits(rotation, rotationLimits) || rotationLimits === undefined){\n return rotation;\n }\n rotation = normalizeAngleZero2TwoPI(rotation);\n const angleSpanFromStart = angleSpan(rotationLimits.start, rotation);\n const angleSpanFromEnd = angleSpan(rotationLimits.end, rotation);\n if((rotationLimits.ccw && (angleSpanFromStart < 0 || angleSpanFromEnd > 0)) || (!rotationLimits.ccw && (angleSpanFromStart > 0 || angleSpanFromEnd < 0))){\n // ccw out of bounds\n if(Math.abs(angleSpanFromStart) === Math.abs(angleSpanFromEnd)){\n // console.log(\"tie\", \"start:\", rotationLimits.start, \"end:\", rotationLimits.end, \"rotation:\", rotation);\n return rotationLimits.startAsTieBreaker ? rotationLimits.start : rotationLimits.end;\n }\n const closerToStart = Math.abs(angleSpanFromStart) < Math.abs(angleSpanFromEnd);\n return closerToStart ? rotationLimits.start : rotationLimits.end;\n }\n return rotation;\n}\n\n/**\n * @description Checks if the rotation is within the limits.\n * \n * @category Camera\n */\nexport function rotationWithinLimits(rotation: number, rotationLimits?: RotationLimits): boolean{\n if(rotationLimits === undefined){\n return true;\n }\n if(normalizeAngleZero2TwoPI(rotationLimits.start) === normalizeAngleZero2TwoPI(rotationLimits.end)){\n return true;\n }\n if(normalizeAngleZero2TwoPI(rotationLimits.start + 0.01) === normalizeAngleZero2TwoPI(rotationLimits.end + 0.01)){\n return true;\n }\n const normalizedRotation = normalizeAngleZero2TwoPI(rotation);\n const angleSpanFromStart = angleSpan(rotationLimits.start, normalizedRotation);\n const angleSpanFromEnd = angleSpan(rotationLimits.end, normalizedRotation);\n if((rotationLimits.ccw && (angleSpanFromStart < 0 || angleSpanFromEnd > 0)) || (!rotationLimits.ccw && (angleSpanFromStart > 0 || angleSpanFromEnd < 0))){\n return false;\n }\n return true;\n}\n\n/**\n * @description Checks if the rotation is within the boundary. (experimental)\n * \n * @category Camera\n */\nexport function rotationWithinBoundary(rotation: number, rotationBoundary: RotationBoundary): boolean {\n if(normalizeAngleZero2TwoPI(rotationBoundary.start) === normalizeAngleZero2TwoPI(rotationBoundary.end)){\n return true;\n }\n if(normalizeAngleZero2TwoPI(rotationBoundary.start + 0.01) === normalizeAngleZero2TwoPI(rotationBoundary.end + 0.01)){\n return true;\n }\n const normalizedRotation = normalizeAngleZero2TwoPI(rotation);\n\n let angleFromStart = normalizedRotation - normalizeAngleZero2TwoPI(rotationBoundary.start);\n if (angleFromStart < 0){\n angleFromStart += (Math.PI * 2);\n }\n if (!rotationBoundary.positiveDirection && angleFromStart > 0){\n angleFromStart = Math.PI * 2 - angleFromStart;\n }\n\n let angleRange = normalizeAngleZero2TwoPI(rotationBoundary.end) - normalizeAngleZero2TwoPI(rotationBoundary.start);\n if(angleRange < 0){\n angleRange += (Math.PI * 2);\n }\n if(!rotationBoundary.positiveDirection && angleRange > 0){\n angleRange = Math.PI * 2 - angleRange;\n }\n\n return angleRange >= angleFromStart;\n}\n\n/**\n * @description Normalizes the angle to be between 0 and 2π.\n * \n * @category Camera\n */\nexport function normalizeAngleZero2TwoPI(angle: number){\n // reduce the angle \n angle = angle % (Math.PI * 2);\n\n // force it to be the positive remainder, so that 0 <= angle < 2 * Math.PI \n angle = (angle + Math.PI * 2) % (Math.PI * 2); \n return angle;\n}\n\n/**\n * @description Gets the smaller angle span between two angles. (in radians)\n * \n * @category Camera\n */\nexport function angleSpan(from: number, to: number): number{\n // in radians\n from = normalizeAngleZero2TwoPI(from);\n to = normalizeAngleZero2TwoPI(to);\n let angleDiff = to - from;\n \n if(angleDiff > Math.PI){\n angleDiff = - (Math.PI * 2 - angleDiff);\n }\n\n if(angleDiff < -Math.PI){\n angleDiff += (Math.PI * 2);\n }\n return angleDiff;\n}\n\n/**\n * @description Converts degrees to radians.\n * \n * @category Camera\n */\nexport function deg2rad(deg: number): number{\n return deg * Math.PI / 180;\n}\n\n/**\n * @description Converts radians to degrees.\n * \n * @category Camera\n */\nexport function rad2deg(rad: number): number{\n return rad * 180 / Math.PI;\n}\n",
13
+ "import { Point } from '@ue-too/math';\nimport { Boundaries, withinBoundaries } from './utils/position';\nimport { zoomLevelWithinLimits, ZoomLevelLimits, clampZoomLevel } from './utils/zoom';\nimport { RotationLimits, rotationWithinLimits, normalizeAngleZero2TwoPI, clampRotation } from './utils/rotation';\nimport { convert2WorldSpaceAnchorAtCenter, convert2ViewPortSpaceAnchorAtCenter } from './utils/coordinate-conversion';\nimport { PointCal } from '@ue-too/math';\nimport { BoardCamera } from './interface';\nimport { decomposeCameraMatrix, decomposeTRS, TransformationMatrix } from './utils/matrix';\n\n/**\n * \n * @description This is the base class for the camera. It is used to create a camera that can be used to view a board.\n * \n * If there's only one class that you want to use in this library, it is this one. The is the back bone of the board camera system.\n * \n * With the {@link CameraRig} class, you can create a camera system that can be used to achieve the infinite canvas effect.\n * \n * This class is not observable (you can not register a callback for camera state changes). If you need to observe the camera state, use the {@link DefaultBoardCamera} class instead.\n * @category Camera\n */\nexport default class BaseCamera implements BoardCamera {\n\n private _position: Point;\n private _rotation: number;\n private _zoomLevel: number;\n\n private currentCachedTransform: {transform: {a: number, b: number, c: number, d: number, e: number, f: number}, position: Point, rotation: number, zoomLevel: number, alignCoorindate: boolean, devicePixelRatio: number, viewPortWidth: number, viewPortHeight: number} | undefined;\n\n private _viewPortWidth: number;\n private _viewPortHeight: number;\n\n private _boundaries?: Boundaries;\n private _zoomBoundaries?: ZoomLevelLimits;\n private _rotationBoundaries?: RotationLimits;\n\n /**\n * @param position The position of the camera in the world coordinate system\n * @param rotation The rotation of the camera in the world coordinate system\n * @param zoomLevel The zoom level of the camera\n * @param viewPortWidth The width of the viewport. (The width of the canvas in css pixels)\n * @param viewPortHeight The height of the viewport. (The height of the canvas in css pixels)\n * @param boundaries The boundaries of the camera in the world coordinate system\n * @param zoomLevelBoundaries The boundaries of the zoom level of the camera\n * @param rotationBoundaries The boundaries of the rotation of the camera\n */\n constructor(viewPortWidth: number = 1000, viewPortHeight: number = 1000, position: Point = {x: 0, y: 0}, rotation: number = 0, zoomLevel: number = 1, boundaries: Boundaries = {min: {x: -10000, y: -10000}, max: {x: 10000, y: 10000}}, zoomLevelBoundaries: ZoomLevelLimits = {min: 0.1, max: 10}, rotationBoundaries: RotationLimits | undefined = undefined){\n this._position = position;\n this._zoomLevel = zoomLevel;\n this._rotation = rotation;\n this._viewPortHeight = viewPortHeight;\n this._viewPortWidth = viewPortWidth;\n this._zoomBoundaries = zoomLevelBoundaries;\n this._rotationBoundaries = rotationBoundaries;\n this._boundaries = boundaries;\n }\n\n /**\n * @description The translation boundaries of the camera in the world coordinate system.\n * \n * @category Camera\n */\n get boundaries(): Boundaries | undefined{\n return this._boundaries;\n }\n\n set boundaries(boundaries: Boundaries | undefined){\n this._boundaries = boundaries;\n }\n\n /**\n * @description The width of the viewport. (The width of the canvas in css pixels)\n * \n * @category Camera\n */\n get viewPortWidth(): number{\n return this._viewPortWidth;\n }\n\n set viewPortWidth(width: number){\n this._viewPortWidth = width;\n }\n\n /**\n * @description The height of the viewport. (The height of the canvas in css pixels)\n * \n * @category Camera\n */\n get viewPortHeight(): number{\n return this._viewPortHeight;\n }\n\n set viewPortHeight(height: number){\n this._viewPortHeight = height;\n }\n\n /**\n * @description The position of the camera in the world coordinate system.\n * \n * @category Camera\n */\n get position(): Point{\n return this._position;\n }\n\n /**\n * @description This function is used to set the position of the camera.\n * @param destination The destination point of the camera.\n * @returns Whether the position is set successfully.\n * \n * @description This function has a guard that checks if the destination point is within the boundaries of the camera.\n * If the destination point is not within the boundaries, the function will return false and the position will not be updated.\n * If the destination point is within the boundaries, the function will return true and the position will be updated.\n */\n setPosition(destination: Point){\n if(!withinBoundaries(destination, this._boundaries)){\n return false;\n }\n const diff = PointCal.subVector(destination, this._position);\n if(PointCal.magnitude(diff) < 10E-10 && PointCal.magnitude(diff) < 1 / this._zoomLevel){\n return false;\n }\n this._position = destination;\n return true;\n }\n\n /**\n * @description The zoom level of the camera.\n * \n * @category Camera\n */\n get zoomLevel(): number{\n return this._zoomLevel;\n }\n\n /**\n * @description The boundaries of the zoom level of the camera.\n * \n * @category Camera\n */\n get zoomBoundaries(): ZoomLevelLimits | undefined{\n return this._zoomBoundaries;\n }\n\n /**\n * @description The boundaries of the zoom level of the camera.\n * \n * @category Camera\n */\n set zoomBoundaries(zoomBoundaries: ZoomLevelLimits | undefined){\n const newZoomBoundaries = {...zoomBoundaries};\n if(newZoomBoundaries !== undefined && newZoomBoundaries.min !== undefined && newZoomBoundaries.max !== undefined && newZoomBoundaries.min > newZoomBoundaries.max){\n let temp = newZoomBoundaries.max;\n newZoomBoundaries.max = newZoomBoundaries.min;\n newZoomBoundaries.min = temp;\n }\n this._zoomBoundaries = newZoomBoundaries;\n }\n\n setMaxZoomLevel(maxZoomLevel: number){\n if(this._zoomBoundaries == undefined){\n this._zoomBoundaries = {min: undefined, max: undefined};\n }\n if((this._zoomBoundaries.min != undefined && this._zoomBoundaries.min > maxZoomLevel) || this._zoomLevel > maxZoomLevel){\n return false;\n }\n this._zoomBoundaries.max = maxZoomLevel;\n console.trace('setMaxZoomLevel', maxZoomLevel);\n return true\n }\n\n setMinZoomLevel(minZoomLevel: number){\n if(this._zoomBoundaries == undefined){\n this._zoomBoundaries = {min: undefined, max: undefined};\n }\n if((this._zoomBoundaries.max != undefined && this._zoomBoundaries.max < minZoomLevel)){\n return false;\n }\n this._zoomBoundaries.min = minZoomLevel;\n if(this._zoomLevel < minZoomLevel){\n this._zoomLevel = minZoomLevel;\n }\n console.trace('setMinZoomLevel', minZoomLevel);\n return true;\n }\n\n /**\n * @description This function is used to set the zoom level of the camera.\n * @param zoomLevel The zoom level of the camera.\n * @returns Whether the zoom level is set successfully.\n * \n * @description This function has a guard that checks if the zoom level is within the boundaries of the camera.\n * If the zoom level is not within the boundaries, the function will return false and the zoom level will not be updated.\n * If the zoom level is within the boundaries, the function will return true and the zoom level will be updated.\n */\n setZoomLevel(zoomLevel: number){\n if(!zoomLevelWithinLimits(zoomLevel, this._zoomBoundaries)){\n return false;\n }\n if(this._zoomBoundaries !== undefined && this._zoomBoundaries.max !== undefined && clampZoomLevel(zoomLevel, this._zoomBoundaries) == this._zoomBoundaries.max && this._zoomLevel == this._zoomBoundaries.max){\n return false;\n }\n if(this._zoomBoundaries !== undefined && this._zoomBoundaries.min !== undefined && clampZoomLevel(zoomLevel, this._zoomBoundaries) == this._zoomBoundaries.min && this._zoomLevel == this._zoomBoundaries.min){\n return false;\n }\n this._zoomLevel = zoomLevel;\n return true;\n }\n\n get rotation(): number{\n return this._rotation;\n }\n\n get rotationBoundaries(): RotationLimits | undefined{\n return this._rotationBoundaries;\n }\n\n set rotationBoundaries(rotationBoundaries: RotationLimits | undefined){\n if(rotationBoundaries !== undefined && rotationBoundaries.start !== undefined && rotationBoundaries.end !== undefined && rotationBoundaries.start > rotationBoundaries.end){\n let temp = rotationBoundaries.end;\n rotationBoundaries.end = rotationBoundaries.start;\n rotationBoundaries.start = temp;\n }\n this._rotationBoundaries = rotationBoundaries;\n }\n\n /**\n * @description The order of the transformation is as follows:\n * 1. Scale (scale the context using the device pixel ratio)\n * 2. Translation (move the origin of the context to the center of the canvas)\n * 3. Rotation (rotate the context negatively the rotation of the camera)\n * 4. Zoom (scale the context using the zoom level of the camera)\n * 5. Translation (move the origin of the context to the position of the camera in the context coordinate system)\n * \n * @param devicePixelRatio The device pixel ratio of the canvas\n * @param alignCoorindate Whether to align the coordinate system to the camera's position\n * @returns The transformation matrix\n */\n getTransform(devicePixelRatio: number, alignCoorindate: boolean) {\n if(this.currentCachedTransform !== undefined\n && this.currentCachedTransform.devicePixelRatio === devicePixelRatio\n && this.currentCachedTransform.alignCoorindate === alignCoorindate\n && this.currentCachedTransform.position.x === this._position.x\n && this.currentCachedTransform.position.y === this._position.y\n && this.currentCachedTransform.rotation === this._rotation\n && this.currentCachedTransform.zoomLevel === this._zoomLevel\n && this.currentCachedTransform.viewPortWidth === this._viewPortWidth\n && this.currentCachedTransform.viewPortHeight === this._viewPortHeight\n ){\n return {...this.currentCachedTransform.transform, cached: true};\n }\n const tx = devicePixelRatio * this._viewPortWidth / 2;\n const ty = devicePixelRatio * this._viewPortHeight / 2;\n const tx2 = -this._position.x;\n const ty2 = alignCoorindate ? -this._position.y : this._position.y;\n\n const s = devicePixelRatio;\n const s2 = this._zoomLevel;\n const θ = alignCoorindate ? -this._rotation : this._rotation;\n\n const sin = Math.sin(θ);\n const cos = Math.cos(θ);\n\n const a = s2 * s * cos;\n const b = s2 * s * sin;\n const c = -s * s2 * sin;\n const d = s2 * s * cos;\n const e = s * s2 * cos * tx2 - s * s2 * sin * ty2 + tx;\n const f = s * s2 * sin * tx2 + s * s2 * cos * ty2 + ty;\n this.currentCachedTransform = {transform: {a, b, c, d, e, f}, position: this._position, rotation: this._rotation, zoomLevel: this._zoomLevel, alignCoorindate, devicePixelRatio, viewPortWidth: this._viewPortWidth, viewPortHeight: this._viewPortHeight};\n return {a, b, c, d, e, f, cached: false};\n }\n\n getTRS(devicePixelRatio: number, alignCoorindate: boolean){\n const transform = this.getTransform(devicePixelRatio, alignCoorindate);\n const decompositionRes = decomposeTRS(transform);\n return decompositionRes;\n }\n\n /**\n * @description This function is used to set the camera using a transformation matrix.\n * The transformation matrix is the same as the one returned by the {@link getTransform} function. (by performing the transformations in the same order)\n * The transformation matrix would be decomposed into SCALE(devicePixelRatio), TRANSLATION(center of the canvas), ROTATION(-rotation), SCALE(zoom level), and TRANSLATION(position).\n * The position, zoom level, and rotation are still bounded by the boundaries of the camera.\n * \n * @param transformationMatrix The transformation matrix.\n * \n * @category Camera\n */\n setUsingTransformationMatrix(transformationMatrix: TransformationMatrix){\n const decomposed = decomposeCameraMatrix(transformationMatrix, this._viewPortWidth, this._viewPortHeight, this._zoomLevel);\n this.setPosition(decomposed.position);\n this.setRotation(decomposed.rotation);\n this.setZoomLevel(decomposed.zoom);\n }\n\n setRotation(rotation: number){\n if(!rotationWithinLimits(rotation, this._rotationBoundaries)){\n return false;\n }\n rotation = normalizeAngleZero2TwoPI(rotation);\n if(this._rotationBoundaries !== undefined && this._rotationBoundaries.end !== undefined && clampRotation(rotation, this._rotationBoundaries) == this._rotationBoundaries.end && this._rotation == this._rotationBoundaries.end){\n return false;\n }\n if(this._rotationBoundaries !== undefined && this._rotationBoundaries.start !== undefined && clampRotation(rotation, this._rotationBoundaries) == this._rotationBoundaries.start && this._rotation == this._rotationBoundaries.start){\n return false;\n }\n this._rotation = rotation;\n return true;\n }\n\n /**\n * @description The origin of the camera in the window coordinate system.\n * @deprecated\n * \n * @category Camera\n */\n getCameraOriginInWindow(centerInWindow: Point): Point{\n return centerInWindow;\n }\n\n /**\n * @description Converts a point from the viewport coordinate system to the world coordinate system.\n * \n * @param point The point in the viewport coordinate system.\n * @returns The point in the world coordinate system.\n * \n * @category Camera\n */\n convertFromViewPort2WorldSpace(point: Point): Point{\n return convert2WorldSpaceAnchorAtCenter(point, this._position, this._zoomLevel, this._rotation);\n }\n\n /**\n * @description Converts a point from the world coordinate system to the viewport coordinate system.\n * \n * @param point The point in the world coordinate system.\n * @returns The point in the viewport coordinate system.\n * \n * @category Camera\n */\n convertFromWorld2ViewPort(point: Point): Point{\n return convert2ViewPortSpaceAnchorAtCenter(point, this._position, this._zoomLevel, this._rotation);\n }\n\n /**\n * @description Inverts a point from the world coordinate system to the viewport coordinate system.\n * \n * @param point The point in the world coordinate system.\n * @returns The point in the viewport coordinate system.\n * \n * @category Camera\n */\n invertFromWorldSpace2ViewPort(point: Point): Point{\n let cameraFrameCenter = {x: this.viewPortWidth / 2, y: this._viewPortHeight / 2};\n let delta2Point = PointCal.subVector(point, this._position);\n delta2Point = PointCal.rotatePoint(delta2Point, -this._rotation);\n delta2Point = PointCal.multiplyVectorByScalar(delta2Point, this._zoomLevel);\n return PointCal.addVector(cameraFrameCenter, delta2Point);\n }\n\n setHorizontalBoundaries(min: number, max: number){\n if (min > max){\n let temp = max;\n max = min;\n min = temp;\n }\n if(this._boundaries == undefined){\n this._boundaries = {min: {x: undefined, y: undefined}, max: {x: undefined, y: undefined}};\n }\n if(this._boundaries.min == undefined){\n this._boundaries.min = {x: undefined, y: undefined};\n }\n if(this._boundaries.max == undefined){\n this._boundaries.max = {x: undefined, y: undefined};\n }\n this._boundaries.min.x = min;\n this._boundaries.max.x = max;\n //NOTE leave for future optimization when setting the boundaries if the camera lies outside the boundaries clamp the position of the camera\n // if(!this.withinBoundaries(this.position)){\n // this.position = this.clampPoint(this.position);\n // }\n }\n\n setVerticalBoundaries(min: number, max: number){\n if (min > max){\n let temp = max;\n max = min;\n min = temp;\n }\n if(this._boundaries == undefined){\n this._boundaries = {min: {x: undefined, y: undefined}, max: {x: undefined, y: undefined}};\n }\n if(this._boundaries.min == undefined){\n this._boundaries.min = {x: undefined, y: undefined};\n }\n if(this._boundaries.max == undefined){\n this._boundaries.max = {x: undefined, y: undefined};\n }\n this._boundaries.min.y = min;\n this._boundaries.max.y = max;\n }\n\n viewPortInWorldSpace(alignCoordinate: boolean = true): {top: {left: Point, right: Point}, bottom: {left: Point, right: Point}}{\n const topLeftCorner = convert2WorldSpaceAnchorAtCenter({x: -this._viewPortWidth / 2, y: alignCoordinate ? -this._viewPortHeight / 2 : this._viewPortHeight / 2}, this._position, this._zoomLevel, this._rotation);\n const topRightCorner = convert2WorldSpaceAnchorAtCenter({x: this._viewPortWidth / 2, y: alignCoordinate ? -this._viewPortHeight / 2 : this._viewPortHeight / 2}, this._position, this._zoomLevel, this._rotation);\n const bottomLeftCorner = convert2WorldSpaceAnchorAtCenter({x: -this._viewPortWidth / 2, y: alignCoordinate ? this._viewPortHeight / 2 : -this._viewPortHeight / 2}, this._position, this._zoomLevel, this._rotation);\n const bottomRightCorner = convert2WorldSpaceAnchorAtCenter({x: this._viewPortWidth / 2, y: alignCoordinate ? this._viewPortHeight / 2 : -this._viewPortHeight / 2}, this._position, this._zoomLevel, this._rotation);\n\n return {\n top: {left: topLeftCorner, right: topRightCorner},\n bottom: {left: bottomLeftCorner, right: bottomRightCorner},\n }\n }\n\n viewPortAABB(alignCoordinate?: boolean): {min: Point, max: Point}{\n const {top: {left: topLeft, right: topRight}, bottom: {left: bottomLeft, right: bottomRight}} = this.viewPortInWorldSpace(alignCoordinate);\n\n return {\n min: {x: Math.min(topLeft.x, bottomLeft.x, topRight.x, bottomRight.x), y: Math.min(topLeft.y, bottomLeft.y, topRight.y, bottomRight.y)},\n max: {x: Math.max(topLeft.x, bottomLeft.x, topRight.x, bottomRight.x), y: Math.max(topLeft.y, bottomLeft.y, topRight.y, bottomRight.y)},\n };\n }\n}\n",
14
+ "import type { KmtInputStateMachine } from \"../../input-interpretation/input-state-machine\";\n\n/**\n * @category Event Parser\n */\n\nexport interface KMTEventParser {\n disabled: boolean;\n setUp(): void;\n tearDown(): void;\n attach(canvas: HTMLCanvasElement): void;\n stateMachine: KmtInputStateMachine;\n}\n\n/**\n * @description The minimum pointer event.\n * This is for the interoperability between the vanilla javascript and the pixijs event system.\n * \n * @category Event Parser\n */\nexport type MinimumPointerEvent = {\n button: number;\n pointerType: string;\n clientX: number;\n clientY: number;\n buttons: number;\n}\n\n/**\n * @description The minimum wheel event.\n * This is for the interoperability between the vanilla javascript and the pixijs event system.\n * \n * @category Event Parser\n */\nexport type MinimumWheelEvent = {\n preventDefault: () => void;\n deltaX: number;\n deltaY: number;\n ctrlKey: boolean;\n clientX: number;\n clientY: number;\n}\n\n/**\n * @description The minimum keyboard event.\n * This is for the interoperability between the vanilla javascript and the pixijs event system.\n * \n * @category Event Parser\n */\nexport type MinimumKeyboardEvent = {\n preventDefault: () => void;\n key: string;\n};\n\n/**\n * @description The event target with pointer events.\n * This is for the interoperability between the vanilla javascript and the pixijs event system.\n * \n * @category Event Parser\n */\nexport type EventTargetWithPointerEvents = {\n addEventListener: (type: string, listener: (event: any) => void, options?: {passive: boolean}) => void;\n removeEventListener: (type: string, listener: (event: any) => void) => void;\n};\n\n\n/**\n * @description The vanilla keyboard mouse and trackpad(KMT) event parser.\n * This parser converts the raw events to events that can be used by the input state machine.\n * \n * @category Event Parser\n */\nexport class VanillaKMTEventParser implements KMTEventParser {\n\n private _disabled: boolean = false;\n private _stateMachine: KmtInputStateMachine;\n private _keyfirstPressed: Map<string, boolean>;\n private _abortController: AbortController;\n private _canvas?: HTMLCanvasElement;\n\n\n constructor(kmtInputStateMachine: KmtInputStateMachine, canvas?: HTMLCanvasElement){\n this._canvas = canvas;\n this.bindFunctions();\n this._abortController = new AbortController();\n this._stateMachine = kmtInputStateMachine;\n this._keyfirstPressed = new Map();\n }\n\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(value: boolean){\n this._disabled = value;\n }\n\n get stateMachine(): KmtInputStateMachine {\n return this._stateMachine;\n }\n\n addEventListeners(signal: AbortSignal){\n if(this._canvas == undefined){\n return;\n }\n this._canvas.addEventListener('pointerdown', this.pointerDownHandler, {signal});\n this._canvas.addEventListener('pointerup', this.pointerUpHandler, {signal});\n this._canvas.addEventListener('pointermove', this.pointerMoveHandler, {signal});\n this._canvas.addEventListener('wheel', this.scrollHandler, {signal});\n window.addEventListener('keydown', this.keypressHandler, {signal});\n window.addEventListener('keyup', this.keyupHandler, {signal});\n }\n \n setUp(): void {\n if(this._abortController.signal.aborted){\n this._abortController = new AbortController();\n }\n this.addEventListeners(this._abortController.signal);\n }\n\n tearDown(): void {\n this._abortController.abort();\n this._abortController = new AbortController();\n this._canvas = undefined;\n }\n\n bindFunctions(): void {\n this.pointerDownHandler = this.pointerDownHandler.bind(this);\n this.pointerUpHandler = this.pointerUpHandler.bind(this);\n this.pointerMoveHandler = this.pointerMoveHandler.bind(this);\n this.scrollHandler = this.scrollHandler.bind(this);\n this.keypressHandler = this.keypressHandler.bind(this);\n this.keyupHandler = this.keyupHandler.bind(this);\n }\n\n pointerDownHandler(e: MinimumPointerEvent){\n if(this._disabled){\n return;\n }\n if(e.button === 0 && e.pointerType === \"mouse\"){\n this.stateMachine.happens(\"leftPointerDown\", {x: e.clientX, y: e.clientY});\n return;\n }\n if(e.button === 1 && e.pointerType === \"mouse\"){\n this.stateMachine.happens(\"middlePointerDown\", {x: e.clientX, y: e.clientY});\n return;\n }\n }\n\n pointerUpHandler(e: MinimumPointerEvent){\n if(this._disabled){\n return;\n }\n if(e.button === 0 && e.pointerType === \"mouse\"){\n this.stateMachine.happens(\"leftPointerUp\", {x: e.clientX, y: e.clientY});\n return;\n }\n if(e.button === 1 && e.pointerType === \"mouse\"){\n this.stateMachine.happens(\"middlePointerUp\", {x: e.clientX, y: e.clientY});\n return;\n }\n }\n\n pointerMoveHandler(e: MinimumPointerEvent){\n if(this._disabled){\n return;\n }\n if((e.buttons === 1) && e.pointerType === \"mouse\"){\n this.stateMachine.happens(\"leftPointerMove\", {x: e.clientX, y: e.clientY});\n return;\n }\n if((e.buttons === 4) && e.pointerType === \"mouse\"){\n this.stateMachine.happens(\"middlePointerMove\", {x: e.clientX, y: e.clientY});\n return;\n }\n this.stateMachine.happens(\"pointerMove\", {x: e.clientX, y: e.clientY});\n }\n\n scrollHandler(e: MinimumWheelEvent){\n if(this._disabled) return;\n e.preventDefault();\n if(e.ctrlKey){\n this.stateMachine.happens(\"scrollWithCtrl\", {x: e.clientX, y: e.clientY, deltaX: e.deltaX, deltaY: e.deltaY});\n } else {\n this.stateMachine.happens(\"scroll\", {deltaX: e.deltaX, deltaY: e.deltaY});\n }\n }\n\n keypressHandler(e: KeyboardEvent){\n if(e.target !== document.body){\n return;\n }\n if(this._keyfirstPressed.has(e.key)){\n return;\n }\n this._keyfirstPressed.set(e.key, true);\n if(e.key === \" \"){\n this.stateMachine.happens(\"spacebarDown\");\n }\n }\n\n keyupHandler(e: KeyboardEvent){\n if(this._keyfirstPressed.has(e.key)){\n this._keyfirstPressed.delete(e.key);\n }\n if(e.key === \" \"){\n this.stateMachine.happens(\"spacebarUp\");\n }\n }\n\n attach(canvas: HTMLCanvasElement){\n this.tearDown();\n this._canvas = canvas;\n this.setUp();\n }\n}\n",
15
+ "import { TouchInputStateMachine } from \"../../input-interpretation/input-state-machine/touch-input-state-machine\";\nimport { TouchInputTracker, TouchPoints } from \"../../input-interpretation/input-state-machine/touch-input-context\";\n\n/**\n * @description The touch event parser.\n * This is for the interoperability between the vanilla javascript and the pixijs event system.\n * \n * @category Event Parser\n */\nexport interface TouchEventParser {\n disabled: boolean;\n panDisabled: boolean;\n zoomDisabled: boolean;\n rotateDisabled: boolean;\n setUp(): void;\n tearDown(): void;\n attach(canvas: HTMLCanvasElement): void;\n}\n\n/**\n * @description The vanilla touch event parser.\n * This parser converts the raw events to events that can be used by the input state machine.\n * \n * @category Event Parser\n */\nexport class VanillaTouchEventParser implements TouchEventParser {\n\n private _canvas?: HTMLCanvasElement;\n private _disabled: boolean;\n private _panDisabled: boolean = false;\n private _zoomDisabled: boolean = false;\n private _rotateDisabled: boolean = false;\n\n private touchSM: TouchInputStateMachine;\n\n private _abortController: AbortController;\n\n constructor(touchInputStateMachine: TouchInputStateMachine, canvas?: HTMLCanvasElement){\n this._canvas = canvas;\n this._disabled = false;\n this.touchSM = touchInputStateMachine;\n this._abortController = new AbortController();\n\n this.bindListeners();\n }\n\n get touchStateMachine(): TouchInputStateMachine {\n return this.touchSM;\n }\n\n bindListeners(): void{\n this.touchstartHandler = this.touchstartHandler.bind(this);\n this.touchendHandler = this.touchendHandler.bind(this);\n this.touchcancelHandler = this.touchcancelHandler.bind(this);\n this.touchmoveHandler = this.touchmoveHandler.bind(this);\n }\n\n enableStrategy(): void {\n this._disabled = false;\n }\n\n disableStrategy(): void {\n this._disabled = true;\n }\n\n setUp(): void {\n if(this._canvas == undefined){\n return;\n }\n if(this._abortController.signal.aborted){\n this._abortController = new AbortController();\n }\n this._canvas.addEventListener('touchstart', this.touchstartHandler, {signal: this._abortController.signal});\n this._canvas.addEventListener('touchend', this.touchendHandler, {signal: this._abortController.signal});\n this._canvas.addEventListener('touchcancel', this.touchcancelHandler, {signal: this._abortController.signal});\n this._canvas.addEventListener('touchmove', this.touchmoveHandler, {signal: this._abortController.signal});\n }\n\n tearDown(): void {\n this._abortController.abort();\n this._abortController = new AbortController();\n this._canvas = undefined;\n }\n\n get disabled(): boolean {\n return this._disabled;\n }\n\n get panDisabled(): boolean {\n return this._panDisabled;\n }\n\n set panDisabled(panDisabled: boolean){\n this._panDisabled = panDisabled;\n }\n\n get zoomDisabled(): boolean {\n return this._zoomDisabled;\n }\n\n set zoomDisabled(zoomDisabled: boolean){\n this._zoomDisabled = zoomDisabled;\n }\n\n get rotateDisabled(): boolean {\n return this._rotateDisabled;\n }\n\n set rotateDisabled(rotateDisabled: boolean){\n this._rotateDisabled = rotateDisabled;\n }\n\n touchstartHandler(e: TouchEvent){\n if(this._disabled) {\n return;\n }\n\n const pointsAdded: TouchPoints[] = [];\n for (let i = 0; i < e.changedTouches.length; i++) {\n pointsAdded.push({ident: e.changedTouches[i].identifier, x: e.changedTouches[i].clientX, y: e.changedTouches[i].clientY});\n }\n this.touchSM.happens(\"touchstart\", {points: pointsAdded});\n e.preventDefault();\n }\n\n touchcancelHandler(e: TouchEvent){\n if(this._disabled) {\n return;\n }\n const pointsRemoved: TouchPoints[] = [];\n for (let i = 0; i < e.changedTouches.length; i++) {\n pointsRemoved.push({ident: e.changedTouches[i].identifier, x: e.changedTouches[i].clientX, y: e.changedTouches[i].clientY});\n }\n this.touchSM.happens(\"touchend\", {points: pointsRemoved});\n }\n\n touchendHandler(e: TouchEvent){\n if(this._disabled) {\n return;\n }\n const pointsRemoved: TouchPoints[] = [];\n for (let i = 0; i < e.changedTouches.length; i++) {\n pointsRemoved.push({ident: e.changedTouches[i].identifier, x: e.changedTouches[i].clientX, y: e.changedTouches[i].clientY});\n }\n this.touchSM.happens(\"touchend\", {points: pointsRemoved});\n }\n\n touchmoveHandler(e: TouchEvent){\n if(this._disabled) {\n return;\n }\n e.preventDefault();\n const pointsMoved: TouchPoints[] = [];\n for (let i = 0; i < e.targetTouches.length; i++) {\n pointsMoved.push({ident: e.targetTouches[i].identifier, x: e.targetTouches[i].clientX, y: e.targetTouches[i].clientY});\n }\n this.touchSM.happens(\"touchmove\", {points: pointsMoved});\n }\n\n attach(canvas: HTMLCanvasElement){\n this.tearDown();\n this._canvas = canvas;\n this.setUp();\n }\n}\n",
16
+ "import { Point } from \"@ue-too/math\";\n\n// isometric point to flat world point\nexport function pointConversion(point: Point) {\n const cos30 = Math.cos(Math.PI / 6);\n const cos60 = Math.cos(Math.PI / 3);\n\n return {\n x: point.x * cos30 - point.y * cos30,\n y: point.x * cos60 + point.y * cos60 + (point.z ?? 0)\n }\n}\n",
17
+ "export function calculateOrderOfMagnitude(value: number): number{\n if (value <= 0) return 0;\n let count = 0;\n if (value < 1) {\n let divisor = 1;\n while (divisor > value){\n divisor /= 10;\n count--;\n }\n } else {\n let divisor = 1;\n while (divisor * 10 <= value){\n divisor *= 10;\n count++;\n }\n }\n return count;\n}\n",
18
+ "/**\n * @description Type definition for a handler function that takes a generic value and additional arguments\n * The handler must return the same type as its first argument\n * This is a utility type to be used in the handler pipeline. (Probably don't need to use this directly)\n * Using the {@link createHandlerChain} function to create a handler chain would have typescript infer the correct type for the handler chain.\n * \n * @category Utils\n */\nexport type Handler<T, Args extends any[]> = (value: T, ...args: Args) => T;\n\n/**\n * @description Creates a handler chain from an array of handlers.\n * \n * Use it like this:\n * ```typescript\n * const handlerChain = createHandlerChain(handler1, handler2, handler3);\n * ```\n * or like this:\n * ```typescript\n * const handlers = [handler1, handler2, handler3];\n * const handlerChain = createHandlerChain(handlers);\n * ```\n * \n * The function signature of all the handlers must be the same. (if they're not, you need to explicitly specify the type for the handler chain)\n * \n * @param handlers Array of handler functions to be chained\n * @returns A single handler function that executes all handlers in sequence\n * \n * @category Utils\n */\nexport function createHandlerChain<T, Args extends any[]>(\n ...handlers: Handler<T, Args>[] | [Handler<T, Args>[]]\n): Handler<T, Args> {\n const normalizedHandlers = Array.isArray(handlers[0]) ? handlers[0] : handlers as Handler<T, Args>[];\n return (value: T, ...args: Args): T => {\n return normalizedHandlers.reduce(\n (acc, handler) => handler(acc, ...args),\n value\n );\n };\n}\n",
19
+ "// Track position changes with ResizeObserver\nimport { Observable, Observer, SubscriptionOptions, SynchronousObservable } from \"../utils/observable\";\n\nexport type CanvasUpdateObserver = (rect: DOMRect) => void;\n\nexport class CanvasPositionDimensionPublisher {\n\n private lastRect?: DOMRect;\n private resizeObserver: ResizeObserver;\n private intersectionObserver: IntersectionObserver;\n private mutationObserver: MutationObserver;\n private scrollHandler?: (() => void);\n private resizeHandler?: (() => void);\n private _observers: SynchronousObservable<Parameters<CanvasUpdateObserver>>;\n\n constructor(canvas?: HTMLCanvasElement) {\n this._observers = new SynchronousObservable<Parameters<CanvasUpdateObserver>>();\n\n this.resizeObserver = new ResizeObserver(((entries: ResizeObserverEntry[]) => {\n for (const entry of entries) {\n const newRect = entry.target.getBoundingClientRect();\n const trueRect = getTrueRect(newRect, window.getComputedStyle(entry.target));\n if (rectChanged(this.lastRect, trueRect)) {\n this.publishPositionUpdate(trueRect);\n this.lastRect = trueRect;\n }\n }\n }).bind(this));\n\n this.intersectionObserver = new IntersectionObserver(((entries: IntersectionObserverEntry[]) => {\n if(this.lastRect === undefined){\n return;\n }\n for (const entry of entries) {\n if (entry.isIntersecting) {\n const newRect = entry.boundingClientRect;\n const trueRect = getTrueRect(newRect, window.getComputedStyle(entry.target));\n if (rectChanged(this.lastRect, trueRect)) {\n this.publishPositionUpdate(trueRect);\n this.lastRect = trueRect;\n }\n }\n }\n }).bind(this));\n\n this.attributeCallBack = this.attributeCallBack.bind(this);\n this.mutationObserver = new MutationObserver(this.attributeCallBack);\n\n if(canvas){\n this.attach(canvas);\n }\n }\n \n public dispose(): void {\n this.resizeObserver.disconnect();\n this.intersectionObserver.disconnect();\n this.mutationObserver.disconnect();\n if(this.scrollHandler){\n window.removeEventListener('scroll', this.scrollHandler);\n }\n if(this.resizeHandler){\n window.removeEventListener('resize', this.resizeHandler);\n }\n }\n\n attach(canvas: HTMLCanvasElement) {\n this.dispose();\n this.resizeObserver.observe(canvas);\n this.intersectionObserver.observe(canvas);\n this.mutationObserver.observe(canvas, {\n attributes: true,\n attributeFilter: [\"width\", \"height\", \"style\"]\n });\n const boundingRect = canvas.getBoundingClientRect();\n const trueRect = getTrueRect(boundingRect, window.getComputedStyle(canvas));\n this.lastRect = trueRect;\n\n this.scrollHandler = (() => {\n if(this.lastRect === undefined){\n return;\n }\n const newRect = canvas.getBoundingClientRect();\n const trueRect = getTrueRect(newRect, window.getComputedStyle(canvas));\n if (rectChanged(this.lastRect, trueRect)) {\n this.publishPositionUpdate(trueRect);\n this.lastRect = trueRect;\n }\n }).bind(this);\n this.resizeHandler = (() => {\n if(this.lastRect === undefined){\n return;\n }\n const newRect = canvas.getBoundingClientRect();\n const trueRect = getTrueRect(newRect, window.getComputedStyle(canvas));\n if (rectChanged(this.lastRect, trueRect)) {\n this.publishPositionUpdate(trueRect);\n this.lastRect = trueRect;\n }\n }).bind(this);\n window.addEventListener(\"scroll\", this.scrollHandler, { passive: true });\n window.addEventListener(\"resize\", this.resizeHandler, { passive: true });\n }\n\n private publishPositionUpdate(rect: DOMRect) {\n this._observers.notify(rect);\n }\n\n onPositionUpdate(observer: Observer<[DOMRect]>, options?: SubscriptionOptions) {\n return this._observers.subscribe(observer, options);\n }\n\n private attributeCallBack(mutationsList: MutationRecord[], observer: MutationObserver){\n for(let mutation of mutationsList){\n if(mutation.type === \"attributes\"){\n if(mutation.attributeName === \"width\"){\n const canvas = mutation.target as HTMLCanvasElement;\n canvas.style.width = canvas.width / window.devicePixelRatio + \"px\";\n const newRect = (mutation.target as HTMLCanvasElement).getBoundingClientRect();\n const trueRect = getTrueRect(newRect, window.getComputedStyle(mutation.target as HTMLCanvasElement));\n if (rectChanged(this.lastRect, trueRect)) {\n this.publishPositionUpdate(trueRect);\n this.lastRect = trueRect;\n }\n } else if(mutation.attributeName === \"height\"){\n const canvas = mutation.target as HTMLCanvasElement;\n canvas.style.height = canvas.height / window.devicePixelRatio + \"px\";\n const newRect = canvas.getBoundingClientRect();\n const trueRect = getTrueRect(newRect, window.getComputedStyle(mutation.target as HTMLCanvasElement));\n if (rectChanged(this.lastRect, trueRect)) {\n this.publishPositionUpdate(trueRect);\n this.lastRect = trueRect;\n }\n } else if (mutation.attributeName === \"style\"){\n const canvas = mutation.target as HTMLCanvasElement;\n const styleWidth = parseFloat((mutation.target as HTMLCanvasElement).style.width);\n const styleHeight = parseFloat((mutation.target as HTMLCanvasElement).style.height);\n const newWidth = styleWidth * window.devicePixelRatio;\n const newHeight = styleHeight * window.devicePixelRatio;\n if(newWidth != canvas.width){\n canvas.width = newWidth;\n }\n if(newHeight != canvas.height){\n canvas.height = newHeight;\n }\n const newRect = (mutation.target as HTMLCanvasElement).getBoundingClientRect();\n const trueRect = getTrueRect(newRect, window.getComputedStyle(mutation.target as HTMLCanvasElement));\n if (rectChanged(this.lastRect, trueRect)) {\n this.publishPositionUpdate(trueRect);\n this.lastRect = trueRect;\n }\n }\n }\n }\n }\n}\n\nexport function getTrueRect(rect: DOMRect, computedStyle: CSSStyleDeclaration) {\n const paddingLeft = parseFloat(computedStyle.paddingLeft);\n const paddingTop = parseFloat(computedStyle.paddingTop);\n const paddingRight = parseFloat(computedStyle.paddingRight);\n const paddingBottom = parseFloat(computedStyle.paddingBottom);\n\n const borderLeft = parseFloat(computedStyle.borderLeftWidth);\n const borderTop = parseFloat(computedStyle.borderTopWidth);\n const borderRight = parseFloat(computedStyle.borderRightWidth);\n const borderBottom = parseFloat(computedStyle.borderBottomWidth);\n\n const trueLeft = rect.left + paddingLeft + borderLeft;\n const trueTop = rect.top + paddingTop + borderTop;\n const trueWidth = rect.width - paddingLeft - paddingRight - borderLeft - borderRight;\n const trueHeight = rect.height - paddingTop - paddingBottom - borderTop - borderBottom;\n return new DOMRect(trueLeft, trueTop, trueWidth, trueHeight);\n}\n\nfunction rectChanged(r1: DOMRect | undefined, r2: DOMRect) {\n if(r1 === undefined){\n return true;\n }\n return r1.top !== r2.top || r1.left !== r2.left || \n r1.width !== r2.width || r1.height !== r2.height;\n}\n\n/**\n * This is for proxying the canvas context methods that need to flip the y-coordinates.\n * @internal\n */\nconst methodsToFlip: Record<string, number[]> = {\n fillRect: [1], // [yIndex] - indices of y-coordinates to flip\n strokeRect: [1],\n fillText: [2],\n strokeText: [1],\n lineTo: [1],\n moveTo: [1],\n quadraticCurveTo: [1, 3],\n bezierCurveTo: [1, 3, 5],\n arc: [1],\n drawImage: [2], // Base case for first two signatures\n rect: [1],\n roundRect: [1],\n};\n\nexport function reverseYAxis(context: CanvasRenderingContext2D): CanvasRenderingContext2D {\n return new Proxy(context, {\n get(target: CanvasRenderingContext2D, prop: string | symbol, receiver: any): any {\n const value = Reflect.get(target, prop, target);\n \n // Check if this is a method that needs y-coordinate flipping\n if (typeof prop === 'string' && prop in methodsToFlip && typeof value === 'function') {\n return function(...args: any[]) {\n // Create a copy of the arguments\n const newArgs = [...args];\n \n // Special handling for drawImage with 9 arguments (third signature of drawImage)\n if (prop === 'drawImage' && args.length === 9) {\n const convertedArgs = invertYAxisForDrawImageWith9Args(args);\n return value.apply(target, convertedArgs);\n } else {\n // Flip the y-coordinates based on methodsToFlip configuration\n const yIndices = methodsToFlip[prop];\n for (const index of yIndices) {\n if (index < newArgs.length) {\n newArgs[index] = -newArgs[index];\n }\n }\n // Special handling for drawImage with 5 arguments (first signature of drawImage)\n if(prop === \"drawImage\" && args.length === 5){\n newArgs[2] -= newArgs[4];\n }\n }\n \n // Call the original method with the modified arguments\n return value.apply(target, newArgs);\n };\n }\n \n // Return the original value for properties and methods that don't need modification\n if (typeof value === 'function') {\n return function(...args: any[]) {\n return value.apply(target, args);\n };\n }\n \n return value;\n },\n set(target, prop, value): boolean {\n return Reflect.set(target, prop, value);\n }\n });\n}\n\nexport function invertYAxisForDrawImageWith9Args(args: any[]): typeof args {\n if(args.length !== 9){\n return args;\n }\n const newArgs = [...args];\n const imageHeight = args[0].height;\n if(imageHeight !== undefined){\n newArgs[2] = imageHeight - newArgs[2];\n newArgs[6] = -newArgs[6];\n newArgs[6] -= newArgs[8];\n newArgs[4] = -newArgs[4];\n }\n return newArgs;\n}\n",
20
+ "import type { Point } from \"@ue-too/math\";\nimport { PointCal } from \"@ue-too/math\";\nimport { calculateOrderOfMagnitude } from \"./ruler\";\nimport { boundariesFullyDefined, translationHeightOf, translationWidthOf, Boundaries } from \"../camera/utils/position\";\n\n/**\n * @description Draws a crosshair on the canvas.\n * @deprecated\n * \n * @category Board\n */\nexport function drawCrossHair(context: CanvasRenderingContext2D, pos: Point, cameraZoomLevel: number, alignCoordinateSystem: boolean, size: number, color: string = \"red\"): void{\n // size is the pixel shown in the viewport\n let halfSize = size / 2;\n halfSize = halfSize / cameraZoomLevel;\n context.beginPath();\n context.strokeStyle = color;\n context.lineWidth = 2 / cameraZoomLevel;\n if(alignCoordinateSystem){\n context.moveTo(pos.x - halfSize, pos.y);\n context.lineTo(pos.x + halfSize, pos.y);\n context.moveTo(pos.x, pos.y - halfSize);\n context.lineTo(pos.x, pos.y + halfSize);\n } else {\n context.moveTo(pos.x - halfSize, -pos.y);\n context.lineTo(pos.x + halfSize, -pos.y);\n context.moveTo(pos.x, -pos.y - halfSize);\n context.lineTo(pos.x, -pos.y + halfSize);\n }\n context.stroke();\n context.lineWidth = 3;\n}\n\n/**\n * @description Draws a bounding box on the canvas.\n * @deprecated\n * \n * @category Board\n */\nexport function drawBoundingBox(context: CanvasRenderingContext2D, boundaries: Boundaries, alignCoordinateSystem: boolean): void{\n if(!boundariesFullyDefined(boundaries)){\n return;\n }\n const width = translationWidthOf(boundaries);\n const height = translationHeightOf(boundaries);\n const curMin = boundaries == undefined ? undefined: boundaries.min;\n const curMinX = curMin == undefined ? undefined: curMin.x;\n const curMinY = curMin == undefined ? undefined: curMin.y;\n if(curMinX == undefined || curMinY == undefined || width == undefined || height == undefined){\n return;\n }\n context.beginPath();\n context.strokeStyle = \"blue\";\n context.lineWidth = 100;\n if(alignCoordinateSystem){\n context.roundRect(curMinX, curMinY, width, height, 5);\n } else {\n context.roundRect(curMinX, -curMinY, width, -height, 5);\n }\n context.stroke();\n context.lineWidth = 3;\n context.strokeStyle = \"black\";\n}\n\n/**\n * @description Draws the axis of the board.\n * @deprecated\n * \n * @category Board\n */\nexport function drawAxis(context: CanvasRenderingContext2D, boundaries: Boundaries, zoomLevel: number, alignCoordinateSystem: boolean): void{\n if(!boundariesFullyDefined(boundaries)){\n // one of the direction is not defined\n return;\n }\n const width = translationWidthOf(boundaries);\n const height = translationHeightOf(boundaries);\n const curMin = boundaries == undefined ? undefined: boundaries.min;\n const curMinX = curMin == undefined ? undefined: curMin.x;\n const curMinY = curMin == undefined ? undefined: curMin.y;\n if(curMinX == undefined || curMinY == undefined || width == undefined || height == undefined){\n return;\n }\n context.lineWidth = 1 / zoomLevel;\n // y axis\n context.beginPath();\n context.strokeStyle = `rgba(87, 173, 72, 0.8)`;\n context.moveTo(0, 0);\n if(alignCoordinateSystem){\n context.lineTo(0, curMinY + (height));\n } else {\n context.lineTo(0, -curMinY - (height));\n }\n context.stroke();\n \n // x axis\n context.beginPath();\n context.strokeStyle = `rgba(220, 59, 59, 0.8)`;\n context.moveTo(0, 0);\n context.lineTo(curMinX + width, 0);\n context.stroke();\n context.strokeStyle = \"black\";\n}\n\n/**\n * @description Draws the grid of the board.\n * argument points are in world space\n * @deprecated\n * \n * @category Board\n */\nexport function drawGrid(context: CanvasRenderingContext2D, topLeftCorner: Point, topRightCorner: Point, bottomLeftCorner: Point, bottomRightCorner: Point, alignCoordinateSystem: boolean, cameraZoomLevel: number): void{\n let leftRightDirection = PointCal.unitVectorFromA2B(topLeftCorner, topRightCorner);\n let topDownDirection = PointCal.unitVectorFromA2B(bottomLeftCorner, topLeftCorner);\n let width = PointCal.distanceBetweenPoints(topLeftCorner, topRightCorner);\n let height = PointCal.distanceBetweenPoints(topLeftCorner, bottomLeftCorner);\n let orderOfMagnitude = calculateOrderOfMagnitude(width);\n let divisor = Math.pow(10, orderOfMagnitude);\n let subDivisor = divisor / 10;\n let minHorizontalSmallTick = Math.ceil(topLeftCorner.x / subDivisor) * subDivisor;\n let maxHorizontalSmallTick = Math.floor(topRightCorner.x / subDivisor) * subDivisor;\n let minVerticalSmallTick = alignCoordinateSystem ? Math.floor(topLeftCorner.y / subDivisor) * subDivisor : Math.ceil(bottomLeftCorner.y / subDivisor) * subDivisor;\n let maxVerticalSmallTick = alignCoordinateSystem ? Math.ceil(bottomLeftCorner.y / subDivisor) * subDivisor : Math.floor(topLeftCorner.y / subDivisor) * subDivisor;;\n\n // vertical lines\n for(let i = minHorizontalSmallTick; i <= maxHorizontalSmallTick; i += subDivisor){\n const startPoint = PointCal.addVector({x: i, y: topLeftCorner.y}, PointCal.multiplyVectorByScalar(leftRightDirection, subDivisor));\n const endPoint = PointCal.addVector({x: i, y: bottomLeftCorner.y}, PointCal.multiplyVectorByScalar(leftRightDirection, subDivisor));\n context.beginPath();\n context.strokeStyle = \"black\";\n context.fillStyle = \"black\";\n context.lineWidth = 0.5 / cameraZoomLevel;\n context.moveTo(startPoint.x, startPoint.y);\n context.lineTo(endPoint.x, endPoint.y);\n context.stroke();\n }\n for(let i = minVerticalSmallTick; i <= maxVerticalSmallTick; i += subDivisor){\n const startPoint = PointCal.addVector({x: topLeftCorner.x, y: i}, PointCal.multiplyVectorByScalar(topDownDirection, subDivisor));\n const endPoint = PointCal.addVector({x: topRightCorner.x, y: i}, PointCal.multiplyVectorByScalar(topDownDirection, subDivisor));\n context.beginPath();\n context.strokeStyle = \"black\";\n context.fillStyle = \"black\";\n context.lineWidth = 0.5 / cameraZoomLevel;\n context.moveTo(startPoint.x, startPoint.y);\n context.lineTo(endPoint.x, endPoint.y);\n context.stroke();\n }\n}\n\n/**\n * @description Draws a ruler on the canvas.\n * argument points are in world space\n * @deprecated\n * \n * @category Board\n */\nexport function drawRulerLegacy(context: CanvasRenderingContext2D, topLeftCorner: Point, topRightCorner: Point, bottomLeftCorner: Point, bottomRightCorner: Point, alignCoordinateSystem: boolean, cameraZoomLevel: number): void{\n let leftRightDirection = PointCal.unitVectorFromA2B(topLeftCorner, topRightCorner);\n let topDownDirection = PointCal.unitVectorFromA2B(bottomLeftCorner, topLeftCorner);\n let width = PointCal.distanceBetweenPoints(topLeftCorner, topRightCorner);\n let orderOfMagnitude = calculateOrderOfMagnitude(width);\n let divisor = Math.pow(10, orderOfMagnitude);\n // console.log(\"divisor\", divisor);\n let halfDivisor = divisor / 2;\n let subDivisor = divisor / 10;\n let scaling = 1;\n if (orderOfMagnitude <= 0){\n scaling = Math.pow(10, -orderOfMagnitude + 1);\n }\n let minHorizontalLargeTick = Math.ceil(topLeftCorner.x / divisor) * divisor;\n let maxHorizontalLargeTick = Math.floor(topRightCorner.x / divisor) * divisor;\n let minVerticalLargeTick = alignCoordinateSystem ? Math.ceil(topLeftCorner.y / divisor) * divisor : Math.floor(bottomLeftCorner.y / divisor) * divisor;\n let maxVerticalLargeTick = alignCoordinateSystem ? Math.floor(bottomLeftCorner.y / divisor) * divisor : Math.ceil(topLeftCorner.y / divisor) * divisor;\n let minHorizontalMediumTick = Math.ceil(topLeftCorner.x / halfDivisor) * halfDivisor;\n let maxHorizontalMediumTick = Math.floor(topRightCorner.x / halfDivisor) * halfDivisor;\n let minVerticalMediumTick = alignCoordinateSystem ? Math.ceil(topLeftCorner.y / halfDivisor) * halfDivisor : Math.floor(bottomLeftCorner.y / halfDivisor) * halfDivisor;\n let maxVerticalMediumTick = alignCoordinateSystem ? Math.floor(bottomLeftCorner.y / halfDivisor) * halfDivisor : Math.ceil(topLeftCorner.y / halfDivisor) * halfDivisor;\n let minHorizontalSmallTick = Math.ceil(topLeftCorner.x / subDivisor) * subDivisor;\n let maxHorizontalSmallTick = Math.floor(topRightCorner.x / subDivisor) * subDivisor;\n let minVerticalSmallTick = alignCoordinateSystem ? Math.ceil(topLeftCorner.y / subDivisor) * subDivisor : Math.floor(bottomLeftCorner.y / subDivisor) * subDivisor;\n let maxVerticalSmallTick = alignCoordinateSystem ? Math.floor(bottomLeftCorner.y / subDivisor) * subDivisor : Math.ceil(topLeftCorner.y / subDivisor) * subDivisor;\n \n let divisorInActualPixel = divisor * cameraZoomLevel;\n let halfDivisorInActualPixel = halfDivisor * cameraZoomLevel;\n let subDivisorInActualPixel = subDivisor * cameraZoomLevel;\n\n \n context.font = `bold ${20 / cameraZoomLevel}px Helvetica`;\n const midBaseLineTextDimensions = context.measureText(`${-(halfDivisor + minHorizontalMediumTick)}`);\n const midBaseLineHeight = midBaseLineTextDimensions.fontBoundingBoxAscent + midBaseLineTextDimensions.fontBoundingBoxDescent;\n const subBaseLineTextDimensions = context.measureText(`${-(subDivisor + minHorizontalSmallTick)}`);\n const subBaseLineHeight = subBaseLineTextDimensions.fontBoundingBoxAscent + subBaseLineTextDimensions.fontBoundingBoxDescent;\n\n const largeHorizontalStep = Math.ceil((maxHorizontalLargeTick - minHorizontalLargeTick) / divisor);\n for(let index = 0; index <= largeHorizontalStep; index ++){\n const i = minHorizontalLargeTick + index * divisor;\n context.beginPath();\n context.strokeStyle = \"black\";\n context.fillStyle = \"black\";\n context.lineWidth = 5 / cameraZoomLevel;\n let resPoint = PointCal.addVector({x: i, y: topLeftCorner.y}, PointCal.multiplyVectorByScalar(topDownDirection, 50 / cameraZoomLevel));\n if(!alignCoordinateSystem){\n context.moveTo(resPoint.x, -resPoint.y);\n } else {\n context.moveTo(resPoint.x, resPoint.y);\n }\n resPoint = PointCal.addVector({x: i, y: topLeftCorner.y}, PointCal.multiplyVectorByScalar(topDownDirection, -50 / cameraZoomLevel));\n if(!alignCoordinateSystem){\n context.lineTo(resPoint.x, -resPoint.y);\n } else {\n context.lineTo(resPoint.x, resPoint.y);\n }\n context.textAlign = \"center\";\n context.textBaseline = \"middle\";\n context.font = `bold ${20 / cameraZoomLevel}px Helvetica`;\n const textDimensions = context.measureText(`${Math.abs(i) % 1 == 0 ? i.toFixed(0) : i.toFixed(2)}`);\n const height = textDimensions.fontBoundingBoxAscent + textDimensions.fontBoundingBoxDescent;\n if(!alignCoordinateSystem){\n resPoint = PointCal.addVector(resPoint, {x: 0, y: -height / 2 - height * 0.2})\n context.fillText(`${Math.abs(i) % 1 == 0 ? i.toFixed(0) : i.toFixed(2)}`, resPoint.x , -resPoint.y);\n } else {\n resPoint = PointCal.addVector(resPoint, {x: 0, y: height / 2 + height * 0.2})\n context.fillText(`${Math.abs(i) % 1 == 0 ? i.toFixed(0) : i.toFixed(2)}`, resPoint.x , resPoint.y);\n }\n context.stroke();\n }\n const largeVerticalStep = Math.ceil((maxHorizontalLargeTick - minHorizontalLargeTick) / divisor);\n for(let index = 0; index <= largeVerticalStep; index++){\n const i = minVerticalLargeTick + index * divisor;\n context.beginPath();\n context.strokeStyle = \"black\";\n context.fillStyle = \"black\";\n context.lineWidth = 5 / cameraZoomLevel;\n let resPoint = PointCal.addVector({x: topLeftCorner.x, y: i}, PointCal.multiplyVectorByScalar(leftRightDirection, -50 / cameraZoomLevel));\n if(!alignCoordinateSystem){\n context.moveTo(resPoint.x, -resPoint.y);\n } else {\n context.moveTo(resPoint.x, resPoint.y);\n }\n resPoint = PointCal.addVector({x: topLeftCorner.x, y: i}, PointCal.multiplyVectorByScalar(leftRightDirection, 50 / cameraZoomLevel));\n if(!alignCoordinateSystem){\n context.lineTo(resPoint.x, -resPoint.y);\n } else {\n context.lineTo(resPoint.x, resPoint.y);\n }\n context.textAlign = \"center\";\n context.textBaseline = \"middle\";\n context.font = `bold ${20 / cameraZoomLevel}px Helvetica`;\n \n const textDimensions = context.measureText(`${Math.abs(i) % 1 == 0 ? i.toFixed(0) : i.toFixed(2)}`);\n resPoint = PointCal.addVector(resPoint, {x: textDimensions.width / 2 + textDimensions.width * 0.3, y: 0});\n if(!alignCoordinateSystem){\n context.fillText(`${Math.abs(i) % 1 == 0 ? i.toFixed(0) : i.toFixed(2)}`, resPoint.x, -resPoint.y);\n } else {\n context.fillText(`${Math.abs(i) % 1 == 0 ? i.toFixed(0) : i.toFixed(2)}`, resPoint.x, resPoint.y);\n }\n context.stroke();\n }\n\n const mediumHorizontalStep = Math.ceil((maxHorizontalMediumTick - minHorizontalMediumTick) / halfDivisor);\n for(let index = 0; index <= mediumHorizontalStep; index++ ){\n const i = minHorizontalMediumTick + index * halfDivisor;\n if(Math.floor(i * scaling) % Math.floor(divisor * scaling )== 0) continue;\n context.beginPath();\n context.strokeStyle = \"black\";\n context.fillStyle = \"black\";\n context.lineWidth = 3 / cameraZoomLevel;\n let resPoint = PointCal.addVector({x: i, y: topLeftCorner.y}, PointCal.multiplyVectorByScalar(topDownDirection, 25 / cameraZoomLevel));\n if(!alignCoordinateSystem){\n context.moveTo(resPoint.x, -resPoint.y);\n } else {\n context.moveTo(resPoint.x, resPoint.y);\n }\n resPoint = PointCal.addVector({x: i, y: topLeftCorner.y}, PointCal.multiplyVectorByScalar(topDownDirection, -25 / cameraZoomLevel));\n if(!alignCoordinateSystem){\n context.lineTo(resPoint.x, -resPoint.y);\n } else {\n context.lineTo(resPoint.x, resPoint.y);\n }\n context.font = `${15 / cameraZoomLevel}px Helvetica`;\n const textDimensions = context.measureText(`${Math.abs(i) % 1 == 0 ? i.toFixed(0) : i.toFixed(2)}`);\n if(halfDivisorInActualPixel > midBaseLineTextDimensions.width * 2) {\n context.textAlign = \"center\";\n context.textBaseline = \"middle\";\n const height = textDimensions.fontBoundingBoxAscent + textDimensions.fontBoundingBoxDescent;\n if(!alignCoordinateSystem){\n resPoint = PointCal.addVector(resPoint, {x: 0, y: -height / 2 - height * 0.2});\n resPoint = PointCal.flipYAxis(resPoint);\n } else {\n resPoint = PointCal.addVector(resPoint, {x: 0, y: height / 2 + height * 0.2});\n }\n context.fillText(`${Math.abs(i) % 1 == 0 ? i.toFixed(0) : i.toFixed(2)}`, resPoint.x , resPoint.y);\n }\n context.stroke();\n }\n const mediumVerticalStep = Math.ceil((maxVerticalMediumTick - minVerticalMediumTick) / halfDivisor);\n for(let index = 0; index <= mediumVerticalStep; index++){\n const i = minVerticalMediumTick + index * halfDivisor;\n if(Math.floor(i * scaling) % Math.floor(divisor * scaling)== 0) continue;\n context.beginPath();\n context.strokeStyle = \"black\";\n context.fillStyle = \"black\";\n context.lineWidth = 3 / cameraZoomLevel;\n let resPoint = PointCal.addVector({x: topLeftCorner.x, y: i}, PointCal.multiplyVectorByScalar(leftRightDirection, -25 / cameraZoomLevel));\n if(!alignCoordinateSystem){\n context.moveTo(resPoint.x, -resPoint.y);\n } else {\n context.moveTo(resPoint.x, resPoint.y);\n }\n resPoint = PointCal.addVector({x: topLeftCorner.x, y: i}, PointCal.multiplyVectorByScalar(leftRightDirection, 25 / cameraZoomLevel));\n if(!alignCoordinateSystem){\n context.lineTo(resPoint.x, -resPoint.y);\n } else {\n context.lineTo(resPoint.x, resPoint.y);\n }\n context.font = `${18 / cameraZoomLevel}px Helvetica`;\n const textDimensions = context.measureText(`${Math.abs(i) % 1 == 0 ? i.toFixed(0) : i.toFixed(2)}`);\n const height = textDimensions.fontBoundingBoxAscent + textDimensions.fontBoundingBoxDescent;\n if(halfDivisorInActualPixel > midBaseLineHeight * 2) {\n context.textAlign = \"center\";\n context.textBaseline = \"middle\";\n resPoint = PointCal.addVector(resPoint, {x: textDimensions.width / 2 + textDimensions.width * 0.3, y: 0});\n if(!alignCoordinateSystem){\n resPoint = PointCal.flipYAxis(resPoint);\n }\n context.fillText(`${Math.abs(i) % 1 == 0 ? i.toFixed(0) : i.toFixed(2)}`, resPoint.x, resPoint.y );\n }\n context.stroke();\n }\n const smallHorizontalStep = Math.ceil((maxHorizontalSmallTick - minHorizontalSmallTick) / subDivisor);\n for(let index = 0; index <= smallHorizontalStep; index++){\n const i = minHorizontalSmallTick + index * subDivisor;\n if(Math.floor(i * scaling) % Math.floor(divisor * scaling) == 0 || Math.floor(i * scaling) % Math.floor(halfDivisor * scaling) == 0) continue;\n context.beginPath();\n context.strokeStyle = \"black\";\n context.fillStyle = \"black\";\n context.lineWidth = 1 / cameraZoomLevel;\n let resPoint = PointCal.addVector({x: i, y: topLeftCorner.y}, PointCal.multiplyVectorByScalar(topDownDirection, 12.5 / cameraZoomLevel));\n if(!alignCoordinateSystem){\n context.moveTo(resPoint.x, -resPoint.y);\n } else {\n context.moveTo(resPoint.x, resPoint.y);\n }\n resPoint = PointCal.addVector({x: i, y: topLeftCorner.y}, PointCal.multiplyVectorByScalar(topDownDirection, -12.5 / cameraZoomLevel));\n if(!alignCoordinateSystem){\n context.lineTo(resPoint.x, -resPoint.y);\n } else {\n context.lineTo(resPoint.x, resPoint.y);\n }\n context.font = `${10 / cameraZoomLevel}px Helvetica`;\n const textDimensions = context.measureText(`${Math.abs(i) % 1 == 0 ? i.toFixed(0) : i.toFixed(2)}`);\n if(subDivisorInActualPixel > subBaseLineTextDimensions.width * 2) {\n context.textAlign = \"center\";\n context.textBaseline = \"middle\";\n const height = textDimensions.fontBoundingBoxAscent + textDimensions.fontBoundingBoxDescent;\n if(!alignCoordinateSystem){\n resPoint = PointCal.addVector(resPoint, {x: 0, y: -height / 2 - height * 0.2});\n resPoint = PointCal.flipYAxis(resPoint);\n } else {\n resPoint = PointCal.addVector(resPoint, {x: 0, y: height / 2 + height * 0.2});\n }\n context.fillText(`${Math.abs(i) % 1 == 0 ? i.toFixed(0) : i.toFixed(2)}`, resPoint.x , resPoint.y);\n }\n context.stroke();\n }\n const smallVerticalStep = Math.ceil((maxVerticalSmallTick - minVerticalSmallTick) / subDivisor);\n for(let index = 0; index <= smallVerticalStep; index++){\n const i = minVerticalSmallTick + index * subDivisor;\n if(Math.floor(i * scaling) % Math.floor(divisor * scaling) == 0 || Math.floor(i * scaling) % Math.floor(halfDivisor * scaling) == 0) continue;\n context.beginPath();\n context.strokeStyle = \"black\";\n context.fillStyle = \"black\";\n context.lineWidth = 1 / cameraZoomLevel;\n let resPoint = PointCal.addVector({x: topLeftCorner.x, y: i}, PointCal.multiplyVectorByScalar(leftRightDirection, -12.5 / cameraZoomLevel));\n if(!alignCoordinateSystem){\n context.moveTo(resPoint.x, -resPoint.y);\n } else {\n context.moveTo(resPoint.x, resPoint.y);\n }\n resPoint = PointCal.addVector({x: topLeftCorner.x, y: i}, PointCal.multiplyVectorByScalar(leftRightDirection, 12.5 / cameraZoomLevel));\n if(!alignCoordinateSystem){\n context.lineTo(resPoint.x, -resPoint.y);\n } else {\n context.lineTo(resPoint.x, resPoint.y);\n }\n context.font = `${12 / cameraZoomLevel}px Helvetica`;\n const textDimensions = context.measureText(`${Math.abs(i) % 1 == 0 ? i.toFixed(0) : i.toFixed(2)}`);\n const height = textDimensions.fontBoundingBoxAscent + textDimensions.fontBoundingBoxDescent;\n if(subDivisorInActualPixel > subBaseLineHeight * 2) {\n context.textAlign = \"center\";\n context.textBaseline = \"middle\";\n resPoint = PointCal.addVector(resPoint, {x: textDimensions.width / 2 + textDimensions.width * 0.3, y: 0});\n if(!alignCoordinateSystem){\n resPoint = PointCal.flipYAxis(resPoint);\n }\n context.fillText(`${Math.abs(i) % 1 == 0 ? i.toFixed(0) : i.toFixed(2)}`, resPoint.x, resPoint.y );\n }\n context.stroke();\n }\n}\n\n/**\n * @description Draws the position text on the canvas.\n * argument points are in world space\n * @deprecated\n * \n * @category Board\n */\nexport function drawPositionText(context: CanvasRenderingContext2D, pos: Point, cameraZoomLevel: number, alignCoordinateSystem: boolean, offset: number = 20, color: string=\"red\"): void{\n offset = offset / cameraZoomLevel; \n context.font = `${20 / cameraZoomLevel}px Arial`;\n context.fillStyle = color;\n if(alignCoordinateSystem){\n context.fillText(`x: ${pos.x.toFixed(2)}, y: ${pos.y.toFixed(2)}`, pos.x + offset, pos.y + offset);\n } else {\n context.fillText(`x: ${pos.x.toFixed(2)}, y: ${pos.y.toFixed(2)}`, pos.x + offset, -pos.y - offset);\n }\n context.fillStyle = \"black\";\n}\n\n/**\n * @description Draws a reference circle on the canvas.\n * argument points are in world space\n * @deprecated\n * \n * @category Board\n */\nexport function drawReferenceCircle(context: CanvasRenderingContext2D, pos: Point, alignCoordinateSystem: boolean): void {\n context.beginPath();\n context.strokeStyle = `rgba(87, 173, 72, 0.8)`;\n // context.moveTo(pos.x, -pos.y);\n if(alignCoordinateSystem){\n context.arc(pos.x, pos.y, 5, 0, 2 * Math.PI);\n } else {\n context.arc(pos.x, -pos.y, 5, 0, 2 * Math.PI);\n }\n context.stroke();\n context.strokeStyle = \"black\";\n}\n",
21
+ "import { Point, PointCal } from \"@ue-too/math\";\nimport { calculateOrderOfMagnitude } from \"./ruler\";\n\nexport function drawArrow(context: CanvasRenderingContext2D, cameraZoomLevel: number, startPoint: Point, endPoint: Point, width: number = 1, arrowRatio: number = 0.3) {\n const length = PointCal.distanceBetweenPoints(startPoint, endPoint);\n const arrowHeight = 10 < length * cameraZoomLevel * 0.5 ? 10 / cameraZoomLevel : length * 0.5;\n const offsetLength = length - arrowHeight;\n const offsetPoint = PointCal.linearInterpolation(startPoint, endPoint, offsetLength / length);\n context.beginPath();\n context.lineWidth = width / cameraZoomLevel;\n context.moveTo(startPoint.x, startPoint.y);\n context.lineTo(offsetPoint.x, offsetPoint.y);\n context.stroke();\n const unitVector = PointCal.rotatePoint(PointCal.unitVectorFromA2B(endPoint, startPoint), Math.PI / 2);\n const arrowPoint1 = PointCal.addVector(offsetPoint, PointCal.multiplyVectorByScalar(unitVector, arrowHeight * 0.5));\n const arrowPoint2 = PointCal.subVector(offsetPoint, PointCal.multiplyVectorByScalar(unitVector, arrowHeight * 0.5));\n context.beginPath();\n context.moveTo(endPoint.x, endPoint.y);\n context.lineTo(arrowPoint1.x, arrowPoint1.y);\n context.lineTo(arrowPoint2.x, arrowPoint2.y);\n context.closePath();\n context.fill();\n}\n\nexport const MAJOR_TICK_LENGTH = 30;\nexport const MINOR_TICK_LENGTH = MAJOR_TICK_LENGTH * 0.3;\nexport const HALF_TICK_LENGTH = MAJOR_TICK_LENGTH * 0.5;\nexport const TEXT_MAJOR_TICK_OFFSET = 10;\nexport const TEXT_HALF_TICK_OFFSET = 2.5;\nexport const TEXT_MAJOR_TICK_FONT_SIZE = 20;\nexport const TEXT_HALF_TICK_FONT_SIZE = 10;\n\n/**\n * @description Draws a ruler on the canvas.\n * argument points are in world space\n * \n * @category Utils\n * \n */\nexport function drawRuler(\n context: CanvasRenderingContext2D, \n topLeftCorner: Point, \n topRightCorner: Point, \n bottomLeftCorner: Point, \n alignCoordinateSystem: boolean,\n cameraZoomLevel: number,\n): void{\n\n // NOTE horizontal ruler\n const {\n minMajorTickValue, \n maxMajorTickValue, \n majorTickStep, \n minMinTickValue, \n maxMaxTickValue, \n minTickStep, \n minHalfTickValue, \n maxHalfTickValue, \n halfTickStep, \n calibrationMultiplier, \n normalizedOrderOfMagnitude,\n } = calculateTickValues(topLeftCorner.x, topRightCorner.x);\n\n context.save();\n context.strokeStyle = 'red';\n for(let i = minMajorTickValue; i <= maxMajorTickValue; i += majorTickStep){\n const majorTickPoint = {x: i * calibrationMultiplier, y: topLeftCorner.y};\n const majorTickLength = alignCoordinateSystem ? MAJOR_TICK_LENGTH / cameraZoomLevel : -MAJOR_TICK_LENGTH / cameraZoomLevel;\n const textOffset = alignCoordinateSystem ? TEXT_MAJOR_TICK_OFFSET / cameraZoomLevel : -TEXT_MAJOR_TICK_OFFSET / cameraZoomLevel;\n drawXAxisTick(context, cameraZoomLevel, majorTickPoint, majorTickLength, i * calibrationMultiplier, {textOffset, fontSize: TEXT_MAJOR_TICK_FONT_SIZE});\n }\n\n for(let i = minMinTickValue; i <= maxMaxTickValue; i += minTickStep){\n if(i % majorTickStep === 0){\n continue;\n }\n if(i % halfTickStep === 0){\n continue;\n }\n const minTickPoint = {x: i * calibrationMultiplier, y: topLeftCorner.y};\n const minTickLength = alignCoordinateSystem ? MINOR_TICK_LENGTH / cameraZoomLevel : -MINOR_TICK_LENGTH / cameraZoomLevel;\n drawXAxisTick(context, cameraZoomLevel, minTickPoint, minTickLength, i);\n }\n\n for(let i = minHalfTickValue; i <= maxHalfTickValue; i += halfTickStep){\n if(i % majorTickStep === 0){\n continue;\n }\n const halfTickPoint = {x: i * calibrationMultiplier, y: topLeftCorner.y};\n const halfTickLength = alignCoordinateSystem ? HALF_TICK_LENGTH / cameraZoomLevel : -HALF_TICK_LENGTH / cameraZoomLevel;\n const textOffset = alignCoordinateSystem ? TEXT_HALF_TICK_OFFSET / cameraZoomLevel : -TEXT_HALF_TICK_OFFSET / cameraZoomLevel;\n drawXAxisTick(context, cameraZoomLevel, halfTickPoint, halfTickLength, i * calibrationMultiplier, {textOffset, fontSize: TEXT_HALF_TICK_FONT_SIZE, color: 'red'});\n }\n\n context.restore();\n\n // NOTE vertical ruler\n const {\n minMajorTickValue: vMinMajorTickValue, maxMajorTickValue: vMaxMajorTickValue, majorTickStep: vMajorTickStep, \n minMinTickValue: vMinMinTickValue, maxMaxTickValue: vMaxMaxTickValue, \n minTickStep: vMinTickStep, \n minHalfTickValue: vMinHalfTickValue, maxHalfTickValue: vMaxHalfTickValue, \n halfTickStep: vHalfTickStep, \n calibrationMultiplier: vCalibrationMultiplier,\n } = calculateTickValues(topLeftCorner.y, bottomLeftCorner.y, normalizedOrderOfMagnitude);\n\n context.save();\n context.strokeStyle = 'green';\n for(let i = vMinMajorTickValue; i <= vMaxMajorTickValue; i += vMajorTickStep){\n const majorTickPoint = {x: topLeftCorner.x, y: i * vCalibrationMultiplier};\n const majorTickLength = MAJOR_TICK_LENGTH / cameraZoomLevel;\n const textOffset = TEXT_MAJOR_TICK_OFFSET / cameraZoomLevel;\n drawYAxisTick(context, cameraZoomLevel, majorTickPoint, majorTickLength, i, {textOffset, fontSize: TEXT_MAJOR_TICK_FONT_SIZE});\n }\n\n for(let i = vMinHalfTickValue; i <= vMaxHalfTickValue; i += vHalfTickStep){\n if(i % vMajorTickStep === 0){\n continue;\n }\n const halfTickPoint = {x: topLeftCorner.x, y: i * vCalibrationMultiplier};\n const halfTickLength = HALF_TICK_LENGTH / cameraZoomLevel;\n const textOffset = TEXT_HALF_TICK_OFFSET / cameraZoomLevel;\n drawYAxisTick(context, cameraZoomLevel, halfTickPoint, halfTickLength, i, {textOffset, fontSize: TEXT_HALF_TICK_FONT_SIZE});\n }\n\n for(let i = vMinMinTickValue; i <= vMaxMaxTickValue; i += vMinTickStep){\n if(i % vMajorTickStep === 0){\n continue;\n }\n const minTickPoint = {x: topLeftCorner.x, y: i * vCalibrationMultiplier};\n const minTickLength = MINOR_TICK_LENGTH / cameraZoomLevel;\n drawYAxisTick(context, cameraZoomLevel, minTickPoint, minTickLength, i);\n }\n context.restore();\n}\n\nfunction drawYAxisTick(\n context: CanvasRenderingContext2D, \n cameraZoomLevel: number, \n majorTickPoint: { x: number; y: number; }, \n majorTickLength: number, \n tickValue: number, \n textOption?: {\n textOffset: number,\n fontSize: number,\n color?: string,\n }\n) {\n const drawText = textOption !== undefined;\n context.save();\n context.lineWidth = 1 / cameraZoomLevel;\n context.beginPath();\n context.moveTo(majorTickPoint.x, majorTickPoint.y);\n context.lineTo(majorTickPoint.x + majorTickLength, majorTickPoint.y);\n context.stroke();\n context.restore();\n if(!drawText){\n return;\n }\n const color = textOption.color ?? 'green';\n context.save();\n context.textAlign = \"left\";\n context.textBaseline = \"middle\";\n context.fillStyle = color;\n context.font = `${textOption.fontSize / cameraZoomLevel}px Arial`;\n const tickValueText = tickValue % 1 == 0 ? tickValue : tickValue.toFixed(2);\n context.fillText(`${tickValueText}`, majorTickPoint.x + majorTickLength + textOption.textOffset, majorTickPoint.y);\n context.restore();\n}\n\nfunction drawXAxisTick(\n context: CanvasRenderingContext2D, \n cameraZoomLevel: number, \n majorTickPoint: { x: number; y: number; }, \n majorTickLength: number, \n tickValue: number, \n textOption?: {\n textOffset: number,\n fontSize: number,\n color?: string,\n }\n) {\n const drawText = textOption !== undefined;\n context.save();\n context.lineWidth = 1 / cameraZoomLevel;\n context.beginPath();\n context.moveTo(majorTickPoint.x, majorTickPoint.y);\n context.lineTo(majorTickPoint.x, majorTickPoint.y + majorTickLength);\n context.stroke();\n context.restore();\n if(!drawText){\n return;\n }\n const color = textOption.color ?? 'red';\n context.save();\n context.textAlign = \"center\";\n context.textBaseline = \"top\";\n context.fillStyle = color;\n context.font = `${textOption.fontSize / cameraZoomLevel}px Arial`;\n const tickValueText = tickValue % 1 == 0 ? tickValue : tickValue.toFixed(2);\n context.fillText(`${tickValueText}`, majorTickPoint.x, majorTickPoint.y + majorTickLength + textOption.textOffset);\n context.restore();\n}\n\nexport function calculateTickValues(minValue: number, maxValue: number, orderOfMagnitude?: number){\n const trueMinValue = Math.min(minValue, maxValue);\n const trueMaxValue = Math.max(minValue, maxValue);\n\n const width = trueMaxValue - trueMinValue;\n const trueOrderOfMagnitude = orderOfMagnitude ? orderOfMagnitude : calculateOrderOfMagnitude(width);\n\n const normalizedOrderOfMagnitude = Math.max(1, trueOrderOfMagnitude);\n const calibrationMultiplier = Math.pow(10, normalizedOrderOfMagnitude - trueOrderOfMagnitude); // this is the multiplier to calibrate the ruler to the correct length\n\n const minMajorTickMultiplier = \n minValue > 0 ? \n Math.floor(trueMinValue * calibrationMultiplier / Math.pow(10, normalizedOrderOfMagnitude)) : \n Math.ceil(trueMinValue * calibrationMultiplier / Math.pow(10, normalizedOrderOfMagnitude));\n const minMajorTickValue = minMajorTickMultiplier * Math.pow(10, normalizedOrderOfMagnitude);\n const maxMajorTickMultiplier = \n maxValue > 0 ? \n Math.floor(trueMaxValue * calibrationMultiplier / Math.pow(10, normalizedOrderOfMagnitude)) : \n Math.ceil(trueMaxValue * calibrationMultiplier / Math.pow(10, normalizedOrderOfMagnitude));\n const maxMajorTickValue = maxMajorTickMultiplier * Math.pow(10, normalizedOrderOfMagnitude);\n const majorTickStep = Math.pow(10, normalizedOrderOfMagnitude);\n\n // minor tick\n const minTickOrderOfMagnitude = normalizedOrderOfMagnitude - 1;\n const minMinTickMultiplier = \n minValue > 0 ? \n Math.floor(trueMinValue * calibrationMultiplier / Math.pow(10, minTickOrderOfMagnitude)) : \n Math.ceil(trueMinValue * calibrationMultiplier / Math.pow(10, minTickOrderOfMagnitude));\n const minMinTickValue = minMinTickMultiplier * Math.pow(10, minTickOrderOfMagnitude);\n const maxMaxTickMultiplier = \n maxValue > 0 ? \n Math.floor(trueMaxValue * calibrationMultiplier / Math.pow(10, minTickOrderOfMagnitude)) :\n Math.ceil(trueMaxValue * calibrationMultiplier / Math.pow(10, minTickOrderOfMagnitude));\n const maxMaxTickValue = maxMaxTickMultiplier * Math.pow(10, minTickOrderOfMagnitude);\n const minTickStep = Math.pow(10, minTickOrderOfMagnitude);\n\n const halfTickStep = majorTickStep / 2;\n const minHalfTickMultiplier = \n minValue > 0 ? \n Math.floor(trueMinValue * calibrationMultiplier / halfTickStep) : \n Math.ceil(trueMinValue * calibrationMultiplier / halfTickStep);\n const minHalfTickValue = minHalfTickMultiplier * halfTickStep;\n const maxHalfTickMultiplier = \n maxValue > 0 ? \n Math.floor(trueMaxValue * calibrationMultiplier / halfTickStep) : \n Math.ceil(trueMaxValue * calibrationMultiplier / halfTickStep);\n const maxHalfTickValue = maxHalfTickMultiplier * halfTickStep;\n\n return {\n minMajorTickValue,\n maxMajorTickValue,\n majorTickStep,\n minMinTickValue,\n maxMaxTickValue,\n minTickStep,\n minHalfTickValue,\n maxHalfTickValue,\n halfTickStep,\n calibrationMultiplier: 1 / calibrationMultiplier,\n normalizedOrderOfMagnitude,\n }\n}\n",
22
+ "import { Boundaries, translationHeightOf, translationWidthOf } from \"../camera/utils/position\";\nimport { ZoomLevelLimits } from \"../camera/utils/zoom\";\n\n/**\n * @description Calculates the minimum zoom level based on the dimensions of the boundaries.\n * Used when the canvas on the html is resized.\n * \n * @category Camera\n */\nexport function minZoomLevelBaseOnDimensions(boundaries: Boundaries | undefined, canvasWidth: number, canvasHeight: number, cameraRotation: number): number | undefined{\n const width = translationWidthOf(boundaries);\n const height = translationHeightOf(boundaries);\n if(width == undefined || height == undefined){\n return undefined;\n }\n // console.log(canvasHeight, canvasWidth);\n const widthWidthProjection = Math.abs(width * Math.cos(cameraRotation));\n const heightWidthProjection = Math.abs(height * Math.cos(cameraRotation));\n const widthHeightProjection = Math.abs(width * Math.sin(cameraRotation));\n const heightHeightProjection = Math.abs(height * Math.sin(cameraRotation));\n let minZoomLevelWidthWidth = canvasWidth / widthWidthProjection;\n let minZoomLevelHeightWidth = canvasWidth / heightWidthProjection;\n let minZoomLevelWidthHeight = canvasHeight / widthHeightProjection;\n let minZoomLevelHeightHeight = canvasHeight / heightHeightProjection;\n if(minZoomLevelWidthWidth == Infinity){\n minZoomLevelWidthWidth = 0;\n }\n if(minZoomLevelHeightWidth == Infinity){\n minZoomLevelHeightWidth = 0;\n }\n if(minZoomLevelWidthHeight == Infinity){\n minZoomLevelWidthHeight = 0;\n }\n if(minZoomLevelHeightHeight == Infinity){\n minZoomLevelHeightHeight = 0;\n }\n\n // console.log(minZoomLevelWidthWidth, minZoomLevelHeightWidth, minZoomLevelWidthHeight, minZoomLevelHeightHeight);\n\n const minZoomLevelHeight = canvasHeight / height;\n const minZoomLevelWidth = canvasWidth / width;\n const minZoomLevel = Math.max(minZoomLevelHeight, minZoomLevelWidth, minZoomLevelWidthWidth, minZoomLevelHeightWidth, minZoomLevelWidthHeight, minZoomLevelHeightHeight);\n return minZoomLevel;\n}\n\n/**\n * @description Determines if the zoom level boundaries should be updated when the canvas is resized.\n * Zoom level boundaries adjustment only tightens the zoom level boundaries; it does not relax them.\n * \n * @category Camera\n */\nexport function zoomLevelBoundariesShouldUpdate(zoomLevelBoundaries: ZoomLevelLimits | undefined, targetMinZoomLevel: number | undefined): targetMinZoomLevel is number{\n if(targetMinZoomLevel == undefined){\n return false;\n }\n if(zoomLevelBoundaries == undefined){\n return true;\n }\n if(targetMinZoomLevel == Infinity){\n return false;\n }\n if(zoomLevelBoundaries !== undefined && (zoomLevelBoundaries.min == undefined || targetMinZoomLevel > zoomLevelBoundaries.min)){\n return true;\n }\n return false;\n}\n\n/**\n * @description Calculates the minimum zoom level based on the width of the boundaries.\n * Used when the canvas on the html is resized.\n * @category Camera\n */\nexport function minZoomLevelBaseOnWidth(boundaries: Boundaries | undefined, canvasWidth: number, canvasHeight: number, cameraRotation: number): number | undefined{\n const width = translationWidthOf(boundaries);\n if(width == undefined){\n return undefined;\n }\n const widthWidthProjection = Math.abs(width * Math.cos(cameraRotation));\n const widthHeightProjection = Math.abs(width * Math.sin(cameraRotation));\n const minZoomLevelWidthWidth = canvasWidth / widthWidthProjection;\n const minZoomLevelWidthHeight = canvasHeight / widthHeightProjection;\n if(minZoomLevelWidthWidth == Infinity){\n return minZoomLevelWidthHeight;\n }\n const minZoomLevel = Math.max(canvasWidth / widthWidthProjection, canvasHeight / widthHeightProjection);\n return minZoomLevel;\n}\n\n/**\n * @description Calculates the minimum zoom level based on the height of the boundaries.\n * Used when the canvas on the html is resized.\n * @category Camera\n */\nexport function minZoomLevelBaseOnHeight(boundaries: Boundaries | undefined, canvasWidth: number, canvasHeight: number, cameraRotation: number): number | undefined{\n const height = translationHeightOf(boundaries);\n if(height == undefined){\n return undefined;\n }\n const heightWidthProjection = Math.abs(height * Math.cos(cameraRotation));\n const heightHeightProjection = Math.abs(height * Math.sin(cameraRotation));\n const minZoomLevelHeightWidth = canvasWidth / heightWidthProjection;\n const minZoomLevelHeightHeight = canvasHeight / heightHeightProjection;\n if(minZoomLevelHeightHeight == Infinity){\n return minZoomLevelHeightWidth;\n }\n const minZoomLevel = Math.max(minZoomLevelHeightWidth, minZoomLevelHeightHeight);\n return minZoomLevel;\n}\n",
23
+ "import { ObservableBoardCamera } from '../camera/interface';\nimport DefaultBoardCamera from '../camera/default-camera';\nimport { halfTranslationHeightOf, halfTranslationWidthOf } from '../camera/utils/position';\nimport { KMTEventParser, VanillaKMTEventParser } from '../input-interpretation/raw-input-parser';\nimport { TouchEventParser, VanillaTouchEventParser } from '../input-interpretation/raw-input-parser';\nimport { Point } from '@ue-too/math';\nimport { reverseYAxis } from '../utils';\nimport { PointCal } from '@ue-too/math';\n\nimport { CameraEventMap, CameraState, UnSubscribe } from '../camera/update-publisher';\nimport { minZoomLevelBaseOnDimensions, minZoomLevelBaseOnWidth, zoomLevelBoundariesShouldUpdate } from '../utils';\nimport { UnsubscribeToUserRawInput, RawUserInputEventMap, RawUserInputPublisher } from '../input-interpretation/raw-input-publisher';\n\nimport { CameraMux, createCameraMuxWithAnimationAndLockWithCameraRig } from '../camera/camera-mux';\nimport { CameraRig, DefaultCameraRig } from '../camera/camera-rig';\nimport { CanvasDimensions, CanvasProxy, createKmtInputStateMachine, createTouchInputStateMachine, ObservableInputTracker, TouchInputTracker } from '../input-interpretation/input-state-machine';\nimport { EdgeAutoCameraInput } from '../camera/camera-edge-auto-input';\n\n/**\n * Usage\n * ```typescript\n * const canvasElement = document.querySelector(\"canvas\") as HTMLCanvasElement;\n * const board = new Board(canvasElement);\n * \n * function draw(timestamp: number) {\n * board.step(timestamp);\n * \n * // because board can be initialized without a canvas element, the context can be undefined until the canvas is attached\n * if(board.context == undefined) {\n * return;\n * }\n * \n * // draw after the board has stepped\n * // the coordinate system is the same as before; just that (0, 0) is at the center of the canvas when the camera position is at (0, 0)\n * board.context.beginPath();\n * board.context.rect(0, 0, 100, 100);\n * board.context.fill();\n * \n * requestAnimationFrame(draw);\n * }\n * \n * ```\n * @category Board\n * \n */\nexport default class Board {\n \n private _context?: CanvasRenderingContext2D;\n private _reversedContext?: CanvasRenderingContext2D;\n private _canvasProxy: CanvasProxy;\n\n private _kmtParser: KMTEventParser;\n private _touchParser: TouchEventParser;\n\n private _alignCoordinateSystem: boolean = true;\n private _fullScreen: boolean = false;\n \n private cameraRig: CameraRig;\n private boardInputPublisher: RawUserInputPublisher;\n private _edgeAutoCameraInput: EdgeAutoCameraInput;\n private _observableInputTracker: ObservableInputTracker;\n private _touchInputTracker: TouchInputTracker;\n\n private _canvasSizeUpdateQueue: CanvasDimensions | undefined = undefined;\n\n private lastUpdateTime: number = 0;\n\n constructor(canvas?: HTMLCanvasElement, debug: boolean = false){\n const camera = new DefaultBoardCamera();\n const bound = 50000;\n camera.boundaries = {min: {x: -bound, y: -bound}, max: {x: bound, y: bound}};\n\n this.bindFunctions();\n\n this._canvasProxy = new CanvasProxy(canvas);\n\n this._canvasProxy.subscribe((canvasDimensions)=>{\n this._canvasSizeUpdateQueue = canvasDimensions;\n });\n\n this.cameraRig = new DefaultCameraRig({\n limitEntireViewPort: true,\n restrictRelativeXTranslation: false,\n restrictRelativeYTranslation: false,\n restrictXTranslation: false,\n restrictYTranslation: false,\n restrictZoom: false,\n clampTranslation: true,\n clampZoom: true,\n }, camera);\n\n this.boardInputPublisher = new RawUserInputPublisher(createCameraMuxWithAnimationAndLockWithCameraRig(this.cameraRig));\n\n this._edgeAutoCameraInput = new EdgeAutoCameraInput(this.boardInputPublisher.cameraMux);\n this._observableInputTracker = new ObservableInputTracker(this._canvasProxy, this.boardInputPublisher, this._edgeAutoCameraInput);\n this._touchInputTracker = new TouchInputTracker(this._canvasProxy, this.boardInputPublisher);\n\n const kmtInputStateMachine = createKmtInputStateMachine(this._observableInputTracker);\n const touchInputStateMachine = createTouchInputStateMachine(this._touchInputTracker);\n\n \n this._kmtParser = new VanillaKMTEventParser(kmtInputStateMachine, canvas);\n this._touchParser = new VanillaTouchEventParser(touchInputStateMachine, canvas);\n\n if(canvas != undefined){\n console.log('canvas exists on creation of board');\n this.attach(canvas, debug);\n this.syncViewPortDimensions({width: canvas.width, height: canvas.height});\n }\n }\n\n private syncViewPortDimensions(canvasDimensions: {width: number, height: number}){\n this.camera.viewPortHeight = canvasDimensions.height;\n this.camera.viewPortWidth = canvasDimensions.width;\n }\n\n attach(canvas: HTMLCanvasElement, debug: boolean = false){\n const newContext = canvas.getContext('2d', {willReadFrequently: debug});\n if(newContext == null){\n console.error(\"new canvas context is null\");\n return;\n }\n this._kmtParser.attach(canvas);\n this._touchParser.attach(canvas);\n this._canvasProxy.attach(canvas);\n\n if(this.limitEntireViewPort) {\n this.syncCameraZoomLevel(this._canvasProxy.dimensions);\n }\n\n this._context = newContext;\n this._reversedContext = reverseYAxis(this._context);\n }\n\n /**\n * @group LifeCycle\n * @description This function is used to clean up the board. It removes all the event listeners and disconnects the resize observer and the attribute observer. \n */\n tearDown(){\n this._kmtParser.tearDown();\n this._touchParser.tearDown();\n this._canvasProxy.tearDown();\n }\n\n private bindFunctions(){\n this.step = this.step.bind(this);\n }\n\n get width(): number {\n return this._canvasProxy.width;\n }\n\n get height(): number {\n return this._canvasProxy.height;\n }\n\n /**\n * @description This is an attribute that determines if the coordinate system should be aligned with the one of the HTML canvas element. The default is true.\n * If you set this to true, the coordinate system will be aligned with the one of the HTML canvas element.\n * If you change this value during runtime, you should update the context to be aligned with the new coordinate system. (just call board.context again)\n */\n set alignCoordinateSystem(align: boolean){\n this._alignCoordinateSystem = align;\n this._observableInputTracker.alignCoordinateSystem = align;\n this._touchInputTracker.alignCoordinateSystem = align;\n }\n\n get alignCoordinateSystem(): boolean{\n return this._alignCoordinateSystem;\n }\n\n /**\n * @description Determines if the board should be full screen. If this is set to true, the width and height of the board will be set to the window's inner width and inner height respectively, \n * and the width and height of the board will resize with the window.\n */\n get fullScreen(): boolean {\n return this._fullScreen;\n }\n\n set fullScreen(value: boolean) {\n this._fullScreen = value;\n if(this._fullScreen){\n this._canvasProxy.setWidth(window.innerWidth);\n this._canvasProxy.setHeight(window.innerHeight);\n }\n }\n\n /**\n * @description The context used to draw on the canvas.\n * If alignCoordinateSystem is false, this returns a proxy that automatically negates y-coordinates for relevant drawing methods.\n */\n get context(): CanvasRenderingContext2D | undefined {\n if (!this._alignCoordinateSystem) {\n return this._reversedContext;\n }\n return this._context;\n }\n\n /**\n * @description Determines the behavior of the camera when the camera is at the edge of the boundaries. If set to true, the entire view port would not move beyond the boundaries.\n * If set to false, only the center of the camera is bounded by the boundaries.\n */\n set limitEntireViewPort(value: boolean){\n this.cameraRig.limitEntireViewPort = value;\n if(this._canvasProxy.detached){\n return;\n }\n if(value){\n this.syncCameraZoomLevel(this._canvasProxy.dimensions);\n }\n }\n\n get limitEntireViewPort(): boolean{\n return this.cameraRig.limitEntireViewPort;\n }\n\n /**\n * @description The strategy used to handle the keyboard, mouse events. The default strategy is the DefaultBoardKMTStrategy. \n * You can implement your own strategy by implementing the BoardKMTStrategy interface.\n */\n set kmtParser(parser: KMTEventParser){\n this._kmtParser.tearDown();\n parser.setUp();\n this._kmtParser = parser;\n }\n\n get kmtParser(): KMTEventParser{\n return this._kmtParser;\n }\n\n /**\n * @description The parser used to handle touch events. The default parser is the DefaultTouchParser.\n * You can have your own parser by implementing the BoardTouchParser interface.\n */\n set touchParser(parser: TouchEventParser){\n this._touchParser.tearDown();\n parser.setUp();\n this._touchParser = parser;\n }\n\n get touchParser(): TouchEventParser{\n return this._touchParser;\n }\n\n /**\n * @description The underlying camera of the board. The camera of the board can be switched.\n * The boundaries are based on camera meaning you can have cameras with different boundaries, and you can switch between them during runtime.\n */\n get camera(): ObservableBoardCamera{\n return this.cameraRig.camera;\n }\n\n set camera(camera: ObservableBoardCamera){\n if(!this._canvasProxy.detached){\n camera.viewPortHeight = this._canvasProxy.height / window.devicePixelRatio;\n camera.viewPortWidth = this._canvasProxy.width / window.devicePixelRatio;\n }\n this.cameraRig.camera = camera;\n }\n\n get cameraMux(): CameraMux{\n return this.boardInputPublisher.cameraMux;\n }\n\n set cameraMux(cameraMux: CameraMux){\n this.boardInputPublisher.cameraMux = cameraMux;\n }\n\n get cameraMovementOnMouseEdge(): EdgeAutoCameraInput{\n return this._edgeAutoCameraInput;\n }\n\n /**\n * @description This is the step function that is called in the animation frame. This function is responsible for updating the canvas context and the camera state.\n * @param timestamp \n */\n public step(timestamp: number){\n if(this._canvasProxy.detached || this._context == undefined){\n return;\n }\n\n this.cameraRig.update();\n let deltaTime = timestamp - this.lastUpdateTime;\n this.lastUpdateTime = timestamp;\n deltaTime = deltaTime / 1000;\n\n this._context.reset();\n this._context.clearRect(0, 0, this._canvasProxy.width * window.devicePixelRatio, this._canvasProxy.height * window.devicePixelRatio);\n\n if(this._fullScreen && (this._canvasProxy.width != window.innerWidth || this._canvasProxy.height != window.innerHeight)){\n this._canvasProxy.setWidth(window.innerWidth);\n this._canvasProxy.setHeight(window.innerHeight);\n }\n\n if(this._canvasSizeUpdateQueue != undefined){\n this.syncViewPortDimensions(this._canvasSizeUpdateQueue);\n this.syncCameraZoomLevel(this._canvasSizeUpdateQueue);\n this._canvasSizeUpdateQueue = undefined;\n }\n\n this._edgeAutoCameraInput.update(deltaTime);\n\n const transfromMatrix = this.camera.getTransform(window.devicePixelRatio, this._alignCoordinateSystem);\n this._context.setTransform(transfromMatrix.a, transfromMatrix.b, transfromMatrix.c, transfromMatrix.d, transfromMatrix.e, transfromMatrix.f);\n }\n\n /**\n * @description Converts a point from window coordinates to world coordinates.\n * @param clickPointInWindow The point in window coordinates to convert.\n * @returns The converted point in world coordinates.\n */\n convertWindowPoint2WorldCoord(clickPointInWindow: Point): Point {\n const boundingRect = this._canvasProxy.dimensions;\n const cameraCenterInWindow = {x: boundingRect.position.x + boundingRect.width / 2, y: boundingRect.position.y + boundingRect.height / 2};\n const pointInViewPort = PointCal.subVector(clickPointInWindow, cameraCenterInWindow);\n if(!this._alignCoordinateSystem){\n pointInViewPort.y = -pointInViewPort.y;\n }\n return this.camera.convertFromViewPort2WorldSpace(pointInViewPort);\n }\n\n /**\n * @description Add an camera movement event listener. The events are \"pan\", \"zoom\", and \"rotate\".\n * There's also an \"all\" event that will be triggered when any of the above events are triggered.\n * @param eventName The event name to listen for. The events are \"pan\", \"zoom\", and \"rotate\".\n * @param callback The callback function to call when the event is triggered. The event provided to the callback is different for the different events.\n * @returns The converted point in world coordinates.\n */\n on<K extends keyof CameraEventMap>(eventName: K, callback: (event: CameraEventMap[K], cameraState: CameraState)=>void): UnSubscribe {\n return this.camera.on(eventName, callback);\n }\n\n /**\n * @description Add an input event listener. The events are \"pan\", \"zoom\", and \"rotate\". This is different from the camera event listener as this is for input events. \n * There's also an \"all\" event that will be triggered when any of the above events are triggered.\n * Input event does not necesarily mean that the camera will move. The input events are the events triggered when the user interacts with the board.\n * @param eventName \n * @param callback \n * @returns \n */\n onInput<K extends keyof RawUserInputEventMap>(eventName: K, callback: (event: RawUserInputEventMap[K])=> void): UnsubscribeToUserRawInput {\n return this.boardInputPublisher.on(eventName, callback);\n }\n\n /**\n * @description The max translation height of the camera. This is the maximum distance the camera can move in the vertical direction.\n */\n get maxHalfTransHeight(): number | undefined{\n return halfTranslationHeightOf(this.camera.boundaries);\n }\n\n /**\n * @description The max translation width of the camera. This is the maximum distance the camera can move in the horizontal direction.\n */\n get maxHalfTransWidth(): number | undefined{\n return halfTranslationWidthOf(this.camera.boundaries);\n }\n\n private syncCameraZoomLevel(canvasDimensions: CanvasDimensions){\n if(this.limitEntireViewPort){\n const targetMinZoomLevel = minZoomLevelBaseOnDimensions(this.camera.boundaries, canvasDimensions.width, canvasDimensions.height, this.camera.rotation);\n if(targetMinZoomLevel != undefined && zoomLevelBoundariesShouldUpdate(this.camera.zoomBoundaries, targetMinZoomLevel)){\n this.camera.setMinZoomLevel(targetMinZoomLevel);\n }\n }\n\n }\n\n /**\n * @group Helper Methods\n * @description This function sets the max translation width of the camera while fixing the minimum x boundary.\n */\n setMaxTransWidthWithFixedMinBoundary(value: number){\n const curBoundaries = this.camera.boundaries;\n const curMin = curBoundaries == undefined ? undefined: curBoundaries.min;\n const curHorizontalMin = curMin == undefined ? undefined: curMin.x;\n if(curHorizontalMin == undefined){\n this.camera.setHorizontalBoundaries(-value, value);\n } else {\n this.camera.setHorizontalBoundaries(curHorizontalMin, curHorizontalMin + value * 2);\n }\n if(this.limitEntireViewPort){\n const targetMinZoomLevel = minZoomLevelBaseOnWidth(this.camera.boundaries, this.camera.viewPortWidth, this.camera.viewPortHeight, this.camera.rotation);\n if(zoomLevelBoundariesShouldUpdate(this.camera.zoomBoundaries, targetMinZoomLevel)){\n this.camera.setMinZoomLevel(targetMinZoomLevel);\n }\n }\n }\n\n /**\n * @group Helper Methods\n * @description This function sets the max translation width of the camera while fixing the minimum x boundary.\n */\n setMaxTransWidthWithFixedMaxBoundary(value: number){\n const curBoundaries = this.camera.boundaries;\n const curMax = curBoundaries == undefined ? undefined: curBoundaries.max;\n const curHorizontalMax = curMax == undefined ? undefined: curMax.x;\n if(curHorizontalMax == undefined){\n this.camera.setHorizontalBoundaries(-value, value);\n } else {\n this.camera.setHorizontalBoundaries(curHorizontalMax - value * 2, curHorizontalMax);\n }\n if(this.limitEntireViewPort){\n const targetMinZoomLevel = minZoomLevelBaseOnWidth(this.camera.boundaries, this.camera.viewPortWidth, this.camera.viewPortHeight, this.camera.rotation);\n if(zoomLevelBoundariesShouldUpdate(this.camera.zoomBoundaries, targetMinZoomLevel)){\n this.camera.setMinZoomLevel(targetMinZoomLevel);\n }\n }\n }\n\n get restrictRelativeXTranslation(): boolean{\n return this.cameraRig.config.restrictRelativeXTranslation;\n }\n\n get restrictRelativeYTranslation(): boolean{\n return this.cameraRig.config.restrictRelativeYTranslation;\n }\n\n get restrictXTranslation(): boolean{\n return this.cameraRig.config.restrictXTranslation;\n }\n\n get restrictYTranslation(): boolean{\n return this.cameraRig.config.restrictYTranslation;\n }\n \n set restrictRelativeXTranslation(value: boolean){\n this.cameraRig.config.restrictRelativeXTranslation = value;\n }\n\n set restrictRelativeYTranslation(value: boolean){\n this.cameraRig.configure({restrictRelativeYTranslation: value});\n }\n\n set restrictXTranslation(value: boolean){\n this.cameraRig.configure({restrictXTranslation: value});\n }\n \n set restrictYTranslation(value: boolean){\n this.cameraRig.configure({restrictYTranslation: value});\n }\n\n get restrictZoom(): boolean{\n return this.cameraRig.config.restrictZoom;\n }\n\n set restrictZoom(value: boolean){\n this.cameraRig.configure({restrictZoom: value});\n }\n\n get restrictRotation(): boolean{\n return this.cameraRig.config.restrictRotation;\n }\n\n set restrictRotation(value: boolean){\n this.cameraRig.configure({restrictRotation: value});\n }\n\n get clampTranslation(): boolean{\n return this.cameraRig.config.clampTranslation;\n }\n\n set clampTranslation(value: boolean){\n this.cameraRig.configure({clampTranslation: value});\n }\n \n get clampZoom(): boolean{\n return this.cameraRig.config.clampZoom;\n }\n\n set clampZoom(value: boolean){\n this.cameraRig.configure({clampZoom: value});\n }\n\n get clampRotation(): boolean{\n return this.cameraRig.config.clampRotation;\n }\n\n set clampRotation(value: boolean){\n this.cameraRig.configure({clampRotation: value});\n }\n\n getCameraRig(): CameraRig {\n return this.cameraRig;\n }\n}\n",
24
+ "import { BoardCamera } from \"../interface\";\nimport { createHandlerChain } from \"../../utils/handler-pipeline\";\nimport { clampZoomLevel } from \"../utils/zoom\";\n\n/**\n * @description The configuration for the base zoom handler.\n * \n * @category Camera\n */\nexport type ZoomHandlerConfig = ZoomHandlerClampConfig & ZoomHandlerRestrictConfig;\n\nexport type ZoomHandlerClampConfig = {\n /**\n * @description Whether to clamp the zoom level.\n */\n clampZoom: boolean;\n};\n\nexport type ZoomHandlerRestrictConfig = {\n /**\n * @description Whether to restrict the zoom level.\n */\n restrictZoom: boolean;\n};\n\n/**\n * @description The function signature for the zoom to handler.\n * \n * @category Camera\n */\nexport type ZoomToHandlerFunction = (destination: number, camera: BoardCamera, config: ZoomHandlerConfig) => number;\n\n/**\n * @description The function signature for the zoom by handler.\n * \n * @category Camera\n */\nexport type ZoomByHandlerFunction = (delta: number, camera: BoardCamera, config: ZoomHandlerConfig) => number;\n\n/**\n * @description The function that is part of the zoom to handler pipeline.\n * Clamps the zoom level to the zoom boundaries.\n * \n * @see {@link createHandlerChain}\n * @category Camera\n */\nexport function clampZoomToHandler(destination: number, camera: BoardCamera, config: ZoomHandlerClampConfig): number {\n if(!config.clampZoom){\n return destination;\n }\n return clampZoomLevel(destination, camera.zoomBoundaries);\n}\n\n/**\n * @description The function that is part of the zoom by handler pipeline.\n * Clamps the zoom level to the zoom boundaries.\n * \n * @see {@link createHandlerChain}\n * @category Camera\n */\nexport function clampZoomByHandler(delta: number, camera: BoardCamera, config: ZoomHandlerClampConfig): number {\n if(!config.clampZoom){\n return delta;\n }\n let targetZoom = camera.zoomLevel + delta;\n targetZoom = clampZoomLevel(targetZoom, camera.zoomBoundaries);\n delta = targetZoom - camera.zoomLevel;\n return delta;\n}\n\n/**\n * @description The function that is part of the zoom to handler pipeline.\n * Restricts the zoom level to the zoom boundaries.\n * \n * @see {@link createHandlerChain}\n * @category Camera\n */\nexport function restrictZoomToHandler(destination: number, camera: BoardCamera, config: ZoomHandlerRestrictConfig): number {\n if(config.restrictZoom){\n return camera.zoomLevel;\n }\n return destination;\n}\n\n/**\n * @description The function that is part of the zoom by handler pipeline.\n * Restricts the zoom level to the zoom boundaries.\n * \n * @see {@link createHandlerChain}\n * @category Camera\n */\nexport function restrictZoomByHandler(delta: number, camera: BoardCamera, config: ZoomHandlerRestrictConfig): number {\n if(config.restrictZoom){\n return 0;\n }\n return delta;\n}\n\n/**\n * @description The function that creates the default zoom to only handler.\n * clamp -> restrict -> base\n * @see {@link createHandlerChain}\n * @category Camera\n */\nexport function createDefaultZoomToOnlyHandler(): ZoomToHandlerFunction {\n return createHandlerChain<number, [BoardCamera, ZoomHandlerConfig]>(\n clampZoomToHandler,\n restrictZoomToHandler,\n );\n}\n\n/**\n * @description The function that creates the default zoom by only handler.\n * clamp -> restrict -> base\n * @see {@link createHandlerChain}\n * @category Camera\n */\nexport function createDefaultZoomByOnlyHandler(): ZoomByHandlerFunction {\n return createHandlerChain<number, [BoardCamera, ZoomHandlerConfig]>(\n clampZoomByHandler,\n restrictZoomByHandler,\n );\n}\n",
25
+ "import { Point, PointCal } from \"@ue-too/math\";\nimport { BoardCamera } from \"../interface\";\nimport { createHandlerChain } from \"../../utils/handler-pipeline\";\nimport { clampPoint, clampPointEntireViewPort } from \"../utils/position\";\n\n/**\n * @description Configuration for the pan handler functions.\n * \n * @category Camera\n */\nexport type PanHandlerConfig = PanHandlerRestrictionConfig & PanHandlerClampConfig;\n\nexport type PanHandlerClampConfig = {\n /**\n * @description Whether to limit the pan to the entire view port.\n */\n limitEntireViewPort: boolean;\n /**\n * @description Whether to clamp the translation.\n */\n clampTranslation: boolean;\n};\n\nexport type PanHandlerRestrictionConfig = {\n /**\n * @description Whether to restrict the x translation.\n */\n restrictXTranslation: boolean;\n /**\n * @description Whether to restrict the y translation.\n */\n restrictYTranslation: boolean;\n /**\n * @description Whether to restrict the relative x translation. (because the camera can be rotated, the relative x translation is the horizontal direction of what the user sees on the screen)\n */\n restrictRelativeXTranslation: boolean;\n /**\n * @description Whether to restrict the relative y translation. (because the camera can be rotated, the relative y translation is the vertical direction of what the user sees on the screen)\n */\n restrictRelativeYTranslation: boolean;\n};\n\n/**\n * @description Function Type that is used to define the \"pan to\" handler.\n * The destination is in \"stage/context/world\" space.\n * This is structured as a handler pipeline. \n * @see {@link createHandlerChain}\n * @category Camera\n */\nexport type PanToHandlerFunction = (destination: Point, camera: BoardCamera, config: PanHandlerConfig) => Point;\n/**\n * @description Function Type that is used to define the \"pan by\" handler.\n * The delta is in \"stage/context/world\" space.\n * This is structured as a handler pipeline. \n * @see {@link createHandlerChain}\n * @category Camera\n */\nexport type PanByHandlerFunction = (delta: Point, camera: BoardCamera, config: PanHandlerConfig) => Point;\n\n/**\n * @description Helper function that creates a default \"pan to\" handler.\n * The default pan to handler will first restrict the pan to the view port, then clamp the pan to the boundaries, and then pan to the destination.\n * This handler chain works in the world coordinate system.\n * \n * @see {@link createHandlerChain} to create your own custom pan handler pipeline. (you can also use this function as a part of your own custom pan handler pipeline)\n * @category Camera\n */\nexport function createDefaultPanToHandler(): PanToHandlerFunction {\n return createHandlerChain<Point, [BoardCamera, PanHandlerConfig]>(\n restrictPanToHandler,\n clampToHandler,\n );\n}\n\n/**\n * @description Helper function that creates a default \"pan by\" handler.\n * The resulting pan by handler takes in a delta that is in \"stage/context/world\" space.\n * The default pan by handler will first restrict the pan by the view port, then clamp the pan by the boundaries, and then pan by the delta.\n * \n * @see {@link createHandlerChain} to create your own custom pan handler pipeline. (you can also use this function as a part of your own custom pan handler pipeline)\n * @category Camera\n */\nexport function createDefaultPanByHandler(): PanByHandlerFunction {\n return createHandlerChain<Point, [BoardCamera, PanHandlerConfig]>(\n restrictPanByHandler,\n clampByHandler,\n );\n}\n\n/**\n * @description Function that is part of the \"pan to\" handler pipeline. It restricts the \"pan to\" destination to within a single axis based on the config. (relative to the current camera position)\n * You can use this function standalone to restrict the \"pan to\" destination to within a single axis based on the config. \n * But it is recommended to use this kind of function as part of the pan handler pipeline. (to include this function in your own custom pan handler pipeline)\n * \n * @category Camera\n */\nexport function restrictPanToHandler(destination: Point, camera: BoardCamera, config: PanHandlerRestrictionConfig): Point {\n let delta = PointCal.subVector(destination, camera.position);\n delta = convertDeltaToComplyWithRestriction(delta, camera, config);\n if (delta.x === 0 && delta.y === 0) {\n return destination;\n }\n const dest = PointCal.addVector(camera.position, delta);\n return dest;\n}\n\n/**\n * @description Function that is part of the \"pan by\" handler pipeline. It restricts the pan delta to within a single axis based on the config. (relative to the current camera position)\n * You can use this function standalone to restrict the pan delta to within a single axis based on the config. \n * But it is recommended to use this kind of function as part of the pan handler pipeline. (to include this function in your own custom pan handler pipeline)\n * \n * @category Camera\n */\nexport function restrictPanByHandler(delta: Point, camera: BoardCamera, config: PanHandlerRestrictionConfig): Point {\n delta = convertDeltaToComplyWithRestriction(delta, camera, config);\n return delta;\n}\n\n/**\n * @description Function that is part of the \"pan to\" handler pipeline. It clamps the pan destination within the boundaries of the view port.\n * You can use this function standalone to clamp the pan destination within the boundaries of the view port. \n * But it is recommended to use this kind of function as part of the pan handler pipeline. (to include this function in your own custom pan handler pipeline)\n * \n * @category Camera\n */\nexport function clampToHandler(destination: Point, camera: BoardCamera, config: PanHandlerClampConfig): Point {\n if(!config.clampTranslation){\n return destination;\n }\n let actualDest = clampPoint(destination, camera.boundaries);\n if(config.limitEntireViewPort){\n actualDest = clampPointEntireViewPort(destination, camera.viewPortWidth, camera.viewPortHeight, camera.boundaries, camera.zoomLevel, camera.rotation);\n }\n return actualDest;\n}\n\n/**\n * @description Function that is part of the \"pan by\" handler pipeline. It clamps the pan delta within the boundaries of the view port.\n * You can use this function standalone to clamp the pan delta within the boundaries of the view port. \n * But it is recommended to use this kind of function as part of the pan handler pipeline. (to include this function in your own custom pan handler pipeline)\n * \n * @category Camera\n */\nexport function clampByHandler(delta: Point, camera: BoardCamera, config: PanHandlerClampConfig): Point {\n if(!config.clampTranslation){\n return delta;\n }\n let actualDelta = PointCal.subVector(clampPoint(PointCal.addVector(camera.position, delta), camera.boundaries), camera.position);\n if(config.limitEntireViewPort){\n actualDelta = PointCal.subVector(clampPointEntireViewPort(PointCal.addVector(camera.position, delta), camera.viewPortWidth, camera.viewPortHeight, camera.boundaries, camera.zoomLevel, camera.rotation), camera.position);\n }\n return actualDelta;\n}\n\n/**\n * @description Helper function that converts the delta to comply with the restrictions of the config.\n * \n * @category Camera\n */\nexport function convertDeltaToComplyWithRestriction(delta: Point, camera: BoardCamera, config: PanHandlerRestrictionConfig): Point {\n if(config.restrictXTranslation && config.restrictYTranslation){\n return {x: 0, y: 0};\n }\n if(config.restrictRelativeXTranslation && config.restrictRelativeYTranslation){\n return {x: 0, y: 0};\n }\n if(config.restrictXTranslation){\n delta.x = 0;\n }\n if(config.restrictYTranslation){\n delta.y = 0;\n }\n if(config.restrictRelativeXTranslation){\n const upDirection = PointCal.rotatePoint({x: 0, y: 1}, camera.rotation);\n const value = PointCal.dotProduct(upDirection, delta);\n delta = PointCal.multiplyVectorByScalar(upDirection, value);\n }\n if(config.restrictRelativeYTranslation){\n const rightDirection = PointCal.rotatePoint({x: 1, y: 0}, camera.rotation);\n const value = PointCal.dotProduct(rightDirection, delta);\n delta = PointCal.multiplyVectorByScalar(rightDirection, value);\n }\n return delta;\n}\n\n/**\n * @description Helper function that converts the user input delta to the camera delta.\n * \n * @category Camera\n */\nexport function convertUserInputDeltaToCameraDelta(delta: Point, camera: BoardCamera): Point {\n return PointCal.multiplyVectorByScalar(PointCal.rotatePoint(delta, camera.rotation), 1 / camera.zoomLevel);\n}\n",
26
+ "import { BoardCamera } from \"../interface\";\nimport { createHandlerChain } from \"../../utils/handler-pipeline\";\nimport { normalizeAngleZero2TwoPI, angleSpan, clampRotation } from \"../utils/rotation\";\n\n/**\n * @description This is the configuration for the rotation handler functions.\n * This is the configuration object that is passed to the rotation handler functions.\n * \n * @category Camera\n */\nexport type RotationHandlerConfig = RotationHandlerRestrictConfig & RotationHandlerClampConfig;\n\nexport type RotationHandlerRestrictConfig = {\n /**\n * @description Whether to restrict the rotation. (if true, rotation input will be ignored)\n */\n restrictRotation: boolean;\n}\n\nexport type RotationHandlerClampConfig = {\n /**\n * @description Whether to clamp the rotation if the rotation is out of the rotation boundaries.\n */\n clampRotation: boolean;\n}\n\n/**\n * @description The function that is used to rotate the camera by a specific delta. \n * The delta is in radians.\n * This is structured as a handler pipeline. \n * \n * @see {@link createHandlerChain}\n * @category Camera\n */\nexport type RotateByHandlerFunction = (delta: number, camera: BoardCamera, config: RotationHandlerConfig) => number;\n/**\n * @description The function that is used to rotate the camera to a specific target rotation.\n * The target rotation is in radians.\n * This is structured as a handler pipeline. \n * \n * @see {@link createHandlerChain}\n * @category Camera\n */\nexport type RotateToHandlerFunction = (targetRotation: number, camera: BoardCamera, config: RotationHandlerConfig) => number;\n\n/**\n * @description This is the clamp handler for the \"rotate by\" handler pipeline.\n * It clamps the delta to the range of the camera's rotation boundaries.\n * \n * @category Camera\n */\nexport function clampRotateByHandler(delta: number, camera: BoardCamera, config: RotationHandlerClampConfig): number {\n if(!config.clampRotation){\n return delta;\n }\n const targetRotation = normalizeAngleZero2TwoPI(camera.rotation + delta);\n const clampedRotation = clampRotation(targetRotation, camera.rotationBoundaries);\n const diff = angleSpan(camera.rotation, clampedRotation);\n return diff;\n}\n\n/**\n * @description This is the restrict handler for the \"rotate by\" handler pipeline.\n * It restricts the delta to the range of the camera's rotation boundaries.\n * \n * @category Camera\n */\nexport function restrictRotateByHandler(delta: number, camera: BoardCamera, config: RotationHandlerRestrictConfig): number {\n if(config.restrictRotation){\n return 0;\n }\n return delta;\n}\n\n/**\n * @description This is the clamp handler for the \"rotate to\" handler pipeline.\n * It clamps the target rotation to the range of the camera's rotation boundaries.\n * \n * @category Camera\n */\nexport function clampRotateToHandler(targetRotation: number, camera: BoardCamera, config: RotationHandlerClampConfig): number {\n if(!config.clampRotation){\n return targetRotation;\n }\n const clampedRotation = clampRotation(targetRotation, camera.rotationBoundaries);\n return clampedRotation;\n}\n\n/**\n * @description This is the restrict handler for the \"rotate to\" handler pipeline.\n * It restricts the target rotation to the range of the camera's rotation boundaries.\n * \n * @category Camera\n */\nexport function restrictRotateToHandler(targetRotation: number, camera: BoardCamera, config: RotationHandlerRestrictConfig): number {\n if(config.restrictRotation){\n return camera.rotation;\n }\n return targetRotation;\n}\n\n/**\n * @description This is the create default handler chain function for the \"rotate by\" handler pipeline.\n * \n * @category Camera\n */\nexport function createDefaultRotateByHandler(): RotateByHandlerFunction {\n return createHandlerChain<number, [BoardCamera, RotationHandlerConfig]>(\n restrictRotateByHandler,\n clampRotateByHandler,\n );\n}\n\n/**\n * @description This is the create default handler chain function for the \"rotate to\" handler pipeline.\n * \n * @category Camera\n */\nexport function createDefaultRotateToHandler(): RotateToHandlerFunction {\n return createHandlerChain<number, [BoardCamera, RotationHandlerConfig]>(\n restrictRotateToHandler,\n clampRotateToHandler,\n );\n}\n",
27
+ "import { PointCal } from \"@ue-too/math\";\n\nimport { \n createDefaultPanByHandler, \n createDefaultPanToHandler, \n PanByHandlerFunction, \n PanHandlerConfig, \n PanToHandlerFunction } from \"./pan-handler\";\nimport { \n ZoomHandlerConfig, \n ZoomToHandlerFunction, \n createDefaultZoomToOnlyHandler, \n ZoomByHandlerFunction, \n createDefaultZoomByOnlyHandler, \n} from \"./zoom-handler\";\nimport DefaultBoardCamera from \"../default-camera\";\nimport { createDefaultRotateToHandler, createDefaultRotateByHandler } from \"./rotation-handler\";\nimport type { RotateToHandlerFunction, RotateByHandlerFunction, RotationHandlerConfig } from \"./rotation-handler\";\nimport { ObservableBoardCamera } from \"../interface\";\nimport { PanContext } from \"../camera-mux/animation-and-lock/pan-control-state-machine\";\nimport { ZoomContext } from \"../camera-mux/animation-and-lock/zoom-control-state-machine\";\nimport { Point } from \"@ue-too/math\";\nimport { RotateContext } from \"../camera-mux/animation-and-lock/rotation-control-state-machine\";\nimport { CameraPositionUpdateBatcher, CameraRotationUpdateBatcher, CameraZoomUpdateBatcher } from \"./update-batcher\";\nimport { convertDeltaInViewPortToWorldSpace } from \"../utils\";\n\n/**\n * @description The config for the camera rig.\n * Camera rig combines pan, zoom and rotation handlers.\n * \n * @category Input Flow Control\n */\nexport type CameraRigConfig = PanHandlerConfig & ZoomHandlerConfig & RotationHandlerConfig;\n\nexport interface CameraRig extends PanContext, ZoomContext, RotateContext {\n camera: ObservableBoardCamera;\n config: CameraRigConfig;\n configure(config: Partial<CameraRigConfig>): void;\n update(): void;\n}\n\n\n/**\n * @description The camera rig.\n * \n * This is a consolidated handler function for pan, zoom and rotation.\n * Essentially, it is a controller that controls the camera, so you don't have to figure out some of the math that is involved in panning, zooming and rotating the camera.\n * \n * @category Camera\n */\nexport class CameraRigWithUpdateBatcher implements CameraRig { // this is used as a context passed to the pan and zoom state machines; essentially a consolidated handler function for pan and zoom\n\n private _panBy: PanByHandlerFunction;\n private _panTo: PanToHandlerFunction;\n private _zoomTo: ZoomToHandlerFunction;\n private _zoomBy: ZoomByHandlerFunction;\n private _rotateBy: RotateByHandlerFunction;\n private _rotateTo: RotateToHandlerFunction;\n private _config: CameraRigConfig;\n private _camera: ObservableBoardCamera;\n private _positionBatcher: CameraPositionUpdateBatcher; // all queued destination and delta updates are in world coordinate system\n private _zoomBatcher: CameraZoomUpdateBatcher;\n private _rotationBatcher: CameraRotationUpdateBatcher;\n constructor(config: PanHandlerConfig & ZoomHandlerConfig, camera: ObservableBoardCamera = new DefaultBoardCamera()){\n this._panBy = createDefaultPanByHandler();\n this._panTo = createDefaultPanToHandler();\n this._zoomTo = createDefaultZoomToOnlyHandler();\n this._zoomBy = createDefaultZoomByOnlyHandler();\n this._rotateBy = createDefaultRotateByHandler();\n this._rotateTo = createDefaultRotateToHandler();\n this._config = {...config, restrictRotation: false, clampRotation: true};\n this._camera = camera;\n this._positionBatcher = new CameraPositionUpdateBatcher();\n this._zoomBatcher = new CameraZoomUpdateBatcher();\n this._rotationBatcher = new CameraRotationUpdateBatcher();\n }\n\n /**\n * @description Zoom to a certain zoom level at a certain point. The point is in the viewport coordinate system.\n */\n zoomToAt(targetZoom: number, at: Point): void {\n this._zoomBatcher.queueZoomUpdateTo(targetZoom, at);\n }\n\n /**\n * @description Zoom by a certain amount at a certain point. The point is in the viewport coordinate system.\n */\n zoomByAt(delta: number, at: Point): void {\n this._zoomBatcher.queueZoomUpdateBy(delta, at);\n }\n\n /**\n * @description Zoom to a certain zoom level with respect to the center of the viewport.\n */\n zoomTo(targetZoom: number): void {\n this._zoomBatcher.queueZoomUpdateTo(targetZoom);\n }\n\n /**\n * @description Zoom by a certain amount with respect to the center of the viewport.\n */\n zoomBy(delta: number): void {\n this._zoomBatcher.queueZoomUpdateBy(delta);\n }\n\n /**\n * @description Zoom to a certain zoom level with respect to a point in the world coordinate system.\n */\n zoomToAtWorld(targetZoom: number, at: Point): void {\n this._zoomBatcher.queueZoomToAtWorld(targetZoom, at);\n }\n\n /**\n * @description Zoom by a certain amount with respect to a point in the world coordinate system.\n */\n zoomByAtWorld(delta: number, at: Point): void {\n this._zoomBatcher.queueZoomByAtWorld(delta, at);\n }\n\n\n /**\n * @description Pan to a certain point. (target is in the world coordinate system)\n */\n private _actualPanByWorld(delta: Point): void {\n const transformedDelta = this._panBy(delta, this._camera, this._config);\n this._camera.setPosition(PointCal.addVector(this._camera.position, transformedDelta));\n }\n\n /**\n * @description Pan to a certain point. (target is in the world coordinate system)\n */\n private _actualPanToWorld(target: Point): void {\n const transformedTarget = this._panTo(target, this._camera, this._config);\n this._camera.setPosition(transformedTarget);\n }\n\n public panByWorld(delta: Point): void {\n this._positionBatcher.queuePositionUpdateBy(delta);\n }\n\n public panByViewPort(delta: Point): void {\n const diffInWorld = PointCal.multiplyVectorByScalar(PointCal.rotatePoint(delta, this._camera.rotation), 1 / this._camera.zoomLevel);\n this._positionBatcher.queuePositionUpdateBy(diffInWorld);\n }\n\n public panToWorld(target: Point): void {\n this._positionBatcher.queuePositionUpdateTo(target);\n }\n\n public panToViewPort(target: Point): void {\n const targetInWorld = this._camera.convertFromViewPort2WorldSpace(target);\n this._positionBatcher.queuePositionUpdateTo(targetInWorld);\n }\n\n /**\n * @description Rotate by a certain amount.\n */\n rotateBy(delta: number): void {\n this._rotationBatcher.queueRotationUpdateBy(delta);\n }\n\n /**\n * @description Rotate to a certain angle.\n */\n rotateTo(target: number): void {\n this._rotationBatcher.queueRotationUpdateTo(target);\n }\n\n set limitEntireViewPort(limit: boolean){\n this._config.limitEntireViewPort = limit;\n }\n\n /**\n * @description Whether the entire view port is limited.\n */\n get limitEntireViewPort(): boolean {\n return this._config.limitEntireViewPort;\n }\n\n get camera(): ObservableBoardCamera {\n return this._camera;\n }\n\n get config(): CameraRigConfig {\n return this._config;\n }\n\n set config(config: CameraRigConfig){\n this._config = {...config};\n }\n\n updatePosition(){\n const positionUpdate = this._positionBatcher.processQueuedUpdates();\n if(positionUpdate == null){\n return;\n }\n switch(positionUpdate.type){\n case 'destination':\n this._actualPanToWorld(positionUpdate);\n break;\n case 'delta':\n this._actualPanByWorld(positionUpdate);\n break;\n default:\n throw new Error(\"Invalid position update type\");\n }\n }\n\n updateZoom(){\n const op = this._zoomBatcher.processQueuedUpdates();\n if(op == null){\n return;\n }\n if(op.anchorCoordinateSystem === 'world'){\n switch(op.update.type){\n case 'destination':\n if(op.update.anchor){\n this._zoomToAtWorld(op.update.destination, op.update.anchor);\n } else {\n const targetZoom = this._zoomTo(op.update.destination, this._camera, this._config);\n this._camera.setZoomLevel(targetZoom);\n }\n break;\n case 'delta':\n if(op.update.anchor){\n this._zoomByAtWorld(op.update.delta, op.update.anchor);\n } else {\n const transformedDelta = this._zoomBy(op.update.delta, this._camera, this._config);\n this._camera.setZoomLevel(this._camera.zoomLevel + transformedDelta);\n }\n break;\n }\n } else {\n switch(op.update.type){\n case 'destination':\n if(op.update.anchor){\n this._zoomToAtViewPort(op.update.destination, op.update.anchor);\n } else {\n const targetZoom = this._zoomTo(op.update.destination, this._camera, this._config);\n this._camera.setZoomLevel(targetZoom);\n }\n break;\n case 'delta':\n if(op.update.anchor){\n this._zoomByAtViewPort(op.update.delta, op.update.anchor);\n } else {\n const transformedDelta = this._zoomBy(op.update.delta, this._camera, this._config);\n this._camera.setZoomLevel(this._camera.zoomLevel + transformedDelta);\n }\n break;\n }\n }\n }\n\n updateRotation(){\n const op = this._rotationBatcher.processQueuedUpdates();\n if(op == null){\n return;\n }\n switch(op.type){\n case 'destination':\n const transformedTarget = this._rotateTo(op.destination, this._camera, this._config);\n this._camera.setRotation(transformedTarget);\n break;\n case 'delta':\n const transformedDelta = this._rotateBy(op.delta, this._camera, this._config);\n this._camera.setRotation(this._camera.rotation + transformedDelta);\n break;\n default:\n throw new Error(\"Invalid rotation update type\");\n }\n }\n\n update(){\n this.updateZoom();\n this.updatePosition();\n this.updateRotation();\n }\n\n private _zoomToAtViewPort(targetZoom: number, at: Point): void {\n const originalAnchorInWorld = this._camera.convertFromViewPort2WorldSpace(at);\n const transformedTarget = this._zoomTo(targetZoom, this._camera, this._config);\n this._camera.setZoomLevel(transformedTarget);\n const anchorInWorldAfterZoom = this._camera.convertFromViewPort2WorldSpace(at);\n const cameraPositionDiff = PointCal.subVector(originalAnchorInWorld, anchorInWorldAfterZoom);\n const transformedCameraPositionDiff = this._panBy(cameraPositionDiff, this._camera, this._config);\n this._camera.setPosition(PointCal.addVector(this._camera.position, transformedCameraPositionDiff));\n }\n \n private _zoomToAtWorld(targetZoom: number, at: Point): void {\n let originalAnchorInViewPort = this._camera.convertFromWorld2ViewPort(at);\n const transformedTarget = this._zoomTo(targetZoom, this._camera, this._config);\n this._camera.setZoomLevel(transformedTarget);\n let anchorInViewPortAfterZoom = this._camera.convertFromWorld2ViewPort(at);\n const cameraPositionDiff = PointCal.subVector(originalAnchorInViewPort, anchorInViewPortAfterZoom);\n const transformedCameraPositionDiff = this._panBy(cameraPositionDiff, this._camera, this._config);\n this._camera.setPosition(PointCal.addVector(this._camera.position, transformedCameraPositionDiff));\n }\n\n private _zoomByAtViewPort(delta: number, at: Point): void {\n const originalAnchorInWorld = this._camera.convertFromViewPort2WorldSpace(at);\n const transformedDelta = this._zoomBy(delta, this._camera, this._config);\n this._camera.setZoomLevel(this._camera.zoomLevel + transformedDelta);\n const anchorInWorldAfterZoom = this._camera.convertFromViewPort2WorldSpace(at);\n const cameraPositionDiff = PointCal.subVector(originalAnchorInWorld, anchorInWorldAfterZoom);\n const transformedCameraPositionDiff = this._panBy(cameraPositionDiff, this._camera, this._config);\n this._camera.setPosition(PointCal.addVector(this._camera.position, transformedCameraPositionDiff));\n }\n\n private _zoomByAtWorld(delta: number, at: Point): void {\n let anchorInViewPortBeforeZoom = this._camera.convertFromWorld2ViewPort(at);\n const transformedDelta = this._zoomBy(delta, this._camera, this._config);\n this._camera.setZoomLevel(this._camera.zoomLevel + transformedDelta);\n let anchorInViewPortAfterZoom = this._camera.convertFromWorld2ViewPort(at);\n const diffInViewPort = PointCal.subVector(anchorInViewPortBeforeZoom, anchorInViewPortAfterZoom);\n const diffInWorld = convertDeltaInViewPortToWorldSpace(diffInViewPort, this._camera.zoomLevel, this._camera.rotation);\n const transformedDiff = this._panBy(diffInWorld, this._camera, this._config);\n this._camera.setPosition(PointCal.addVector(this._camera.position, transformedDiff));\n }\n\n /**\n * @description Configure the camera rig.\n */\n configure(config: Partial<CameraRigConfig>){\n this._config = {...this._config, ...config};\n }\n\n /**\n * @description Cleanup the camera rig.\n */\n cleanup(): void {\n }\n\n /**\n * @description Setup the camera rig.\n */\n setup(): void {\n }\n}\n\n/**\n * @description Create a default camera rig with update batcher.\n * \n * @category Camera\n */\nexport function createDefaultCameraRigWithUpdateBatcher(camera: ObservableBoardCamera): CameraRigWithUpdateBatcher{\n return new CameraRigWithUpdateBatcher({\n limitEntireViewPort: true,\n restrictRelativeXTranslation: false,\n restrictRelativeYTranslation: false,\n restrictXTranslation: false,\n restrictYTranslation: false,\n restrictZoom: false,\n clampTranslation: true,\n clampZoom: true,\n }, camera);\n}\n\nexport class DefaultCameraRig implements CameraRig { // this is used as a context passed to the pan and zoom state machines; essentially a consolidated handler function for pan and zoom\n\n private _panBy: PanByHandlerFunction;\n private _panTo: PanToHandlerFunction;\n private _zoomTo: ZoomToHandlerFunction;\n private _zoomBy: ZoomByHandlerFunction;\n private _rotateBy: RotateByHandlerFunction;\n private _rotateTo: RotateToHandlerFunction;\n private _config: CameraRigConfig;\n private _camera: ObservableBoardCamera;\n\n constructor(config: PanHandlerConfig & ZoomHandlerConfig, camera: ObservableBoardCamera = new DefaultBoardCamera()){\n this._panBy = createDefaultPanByHandler();\n this._panTo = createDefaultPanToHandler();\n this._zoomTo = createDefaultZoomToOnlyHandler();\n this._zoomBy = createDefaultZoomByOnlyHandler();\n this._rotateBy = createDefaultRotateByHandler();\n this._rotateTo = createDefaultRotateToHandler();\n this._config = {...config, restrictRotation: false, clampRotation: true};\n this._camera = camera;\n }\n\n /**\n * @description Zoom to a certain zoom level at a certain point. The point is in the viewport coordinate system.\n */\n zoomToAt(targetZoom: number, at: Point): void {\n let originalAnchorInWorld = this._camera.convertFromViewPort2WorldSpace(at);\n const transformTarget = this._zoomTo(targetZoom, this._camera, this._config);\n this._camera.setZoomLevel(transformTarget);\n let anchorInWorldAfterZoom = this._camera.convertFromViewPort2WorldSpace(at);\n const cameraPositionDiff = PointCal.subVector(originalAnchorInWorld, anchorInWorldAfterZoom);\n const transformedCameraPositionDiff = this._panBy(cameraPositionDiff, this._camera, this._config);\n this._camera.setPosition(PointCal.addVector(this._camera.position, transformedCameraPositionDiff));\n }\n\n /**\n * @description Zoom by a certain amount at a certain point. The point is in the viewport coordinate system.\n */\n zoomByAt(delta: number, at: Point): void {\n const convertedDelta = delta * this._camera.zoomLevel;\n let originalAnchorInWorld = this._camera.convertFromViewPort2WorldSpace(at);\n const transformedDelta = this._zoomBy(convertedDelta, this._camera, this._config);\n this._camera.setZoomLevel(this._camera.zoomLevel + transformedDelta);\n let anchorInWorldAfterZoom = this._camera.convertFromViewPort2WorldSpace(at);\n const diff = PointCal.subVector(originalAnchorInWorld, anchorInWorldAfterZoom);\n const transformedDiff = this._panBy(diff, this._camera, this._config);\n this._camera.setPosition(PointCal.addVector(this._camera.position, transformedDiff));\n }\n\n /**\n * @description Zoom to a certain zoom level with respect to the center of the viewport.\n */\n zoomTo(targetZoom: number): void {\n this._zoomTo(targetZoom, this._camera, this._config);\n }\n\n /**\n * @description Zoom by a certain amount with respect to the center of the viewport.\n */\n zoomBy(delta: number): void {\n this._zoomBy(delta, this._camera, this._config);\n }\n\n /**\n * @description Zoom to a certain zoom level with respect to a point in the world coordinate system.\n */\n zoomToAtWorld(targetZoom: number, at: Point): void {\n let originalAnchorInViewPort = this._camera.convertFromWorld2ViewPort(at);\n const transformedTarget = this._zoomTo(targetZoom, this._camera, this._config);\n this._camera.setZoomLevel(transformedTarget);\n let anchorInViewPortAfterZoom = this._camera.convertFromWorld2ViewPort(at);\n const cameraPositionDiffInViewPort = PointCal.subVector(anchorInViewPortAfterZoom, originalAnchorInViewPort);\n const cameraPositionDiffInWorld = convertDeltaInViewPortToWorldSpace(cameraPositionDiffInViewPort, this._camera.zoomLevel, this._camera.rotation);\n const transformedCameraPositionDiff = this._panBy(cameraPositionDiffInWorld, this._camera, this._config);\n this._camera.setPosition(PointCal.addVector(this._camera.position, transformedCameraPositionDiff));\n }\n\n /**\n * @description Zoom by a certain amount with respect to a point in the world coordinate system.\n */\n zoomByAtWorld(delta: number, at: Point): void {\n let anchorInViewPortBeforeZoom = this._camera.convertFromWorld2ViewPort(at);\n const transformedDelta = this._zoomBy(delta, this._camera, this._config);\n this._camera.setZoomLevel(this._camera.zoomLevel + transformedDelta);\n let anchorInViewPortAfterZoom = this._camera.convertFromWorld2ViewPort(at);\n const diffInViewPort = PointCal.subVector(anchorInViewPortAfterZoom, anchorInViewPortBeforeZoom);\n const diffInWorld = convertDeltaInViewPortToWorldSpace(diffInViewPort, this._camera.zoomLevel, this._camera.rotation);\n const transformedDiff = this._panBy(diffInWorld, this._camera, this._config);\n this._camera.setPosition(PointCal.addVector(this._camera.position, transformedDiff));\n }\n\n /**\n * @description Pan By a certain amount. (delta is in the viewport coordinate system)\n */\n panByViewPort(delta: Point): void {\n const diffInWorld = PointCal.multiplyVectorByScalar(PointCal.rotatePoint(delta, this._camera.rotation), 1 / this._camera.zoomLevel);\n this.panByWorld(diffInWorld);\n }\n\n /**\n * @description Pan to a certain point. (target is in the world coordinate system)\n */\n panByWorld(delta: Point): void {\n const transformedDelta = this._panBy(delta, this._camera, this._config);\n this._camera.setPosition(PointCal.addVector(this._camera.position, transformedDelta));\n }\n\n /**\n * @description Pan to a certain point. (target is in the world coordinate system)\n */\n panToWorld(target: Point): void {\n const transformedTarget = this._panTo(target, this._camera, this._config);\n this._camera.setPosition(transformedTarget);\n }\n\n /**\n * @description Pan to a certain point. (target is in the viewport coordinate system)\n */\n panToViewPort(target: Point): void {\n const targetInWorld = this._camera.convertFromViewPort2WorldSpace(target);\n this.panToWorld(targetInWorld);\n }\n\n /**\n * @description Rotate by a certain amount.\n */\n rotateBy(delta: number): void {\n const transformedDelta = this._rotateBy(delta, this._camera, this._config);\n this._camera.setRotation(this._camera.rotation + transformedDelta);\n }\n\n /**\n * @description Rotate to a certain angle.\n */\n rotateTo(target: number): void {\n const transformedTarget = this._rotateTo(target, this._camera, this._config);\n this._camera.setRotation(transformedTarget);\n }\n\n set limitEntireViewPort(limit: boolean){\n this._config.limitEntireViewPort = limit;\n }\n\n /**\n * @description Whether the entire view port is limited.\n */\n get limitEntireViewPort(): boolean {\n return this._config.limitEntireViewPort;\n }\n\n get camera(): ObservableBoardCamera {\n return this._camera;\n }\n\n set camera(camera: ObservableBoardCamera){\n this._camera = camera;\n }\n\n get config(): CameraRigConfig {\n return this._config;\n }\n\n set config(config: CameraRigConfig){\n this._config = {...config};\n }\n\n /**\n * @description Configure the camera rig.\n */\n configure(config: Partial<CameraRigConfig>){\n this._config = {...this._config, ...config};\n }\n\n /**\n * @description Cleanup the camera rig.\n */\n cleanup(): void {\n }\n\n /**\n * @description Setup the camera rig.\n */\n setup(): void {\n }\n\n update(): void {\n }\n}\n\n/**\n * @description Create a default camera rig.\n * \n * @category Camera\n */\nexport function createDefaultCameraRig(camera: ObservableBoardCamera): CameraRig{\n return new DefaultCameraRig({\n limitEntireViewPort: true,\n restrictRelativeXTranslation: false,\n restrictRelativeYTranslation: false,\n restrictXTranslation: false,\n restrictYTranslation: false,\n restrictZoom: false,\n clampTranslation: true,\n clampZoom: true,\n }, camera);\n}\n",
28
+ "import { AsyncObservable, Observable, Observer, SubscriptionOptions } from \"../../../utils/observable\";\n\nexport type Position = {\n x: number;\n y: number;\n};\n\nexport type Velocity = {\n vx: number;\n vy: number;\n};\n\nexport type DestinationUpdate = Position & {\n type: 'destination';\n};\n\nexport type DeltaUpdate = Position & {\n type: 'delta';\n};\n\nexport type PositionUpdate = DestinationUpdate | DeltaUpdate;\n\nexport class CameraPositionUpdateBatcher {\n private nextPosition: Position | null = null;\n private delta: Position = { x: 0, y: 0 };\n private observable: Observable<[PositionUpdate]>;\n // Debug counters\n private queuePositionUpdateCount: number = 0;\n private queuePositionUpdateToCount: number = 0;\n private queuePositionUpdateByCount: number = 0;\n private lastUpdateCount: number = 0;\n \n constructor() {\n this.observable = new AsyncObservable<[PositionUpdate]>();\n }\n\n /**\n * Queue an absolute position update to be processed in the next animation frame\n */\n public queuePositionUpdate(x: number, y: number): void {\n this.queuePositionUpdateCount++;\n this.queuePositionUpdateTo({ x, y });\n }\n\n /**\n * Queue a position update to a specific destination to be processed in the next animation frame\n * This will override any pending delta updates\n */\n public queuePositionUpdateTo(destination: Position): void {\n this.queuePositionUpdateToCount++;\n this.nextPosition = { ...destination };\n this.delta = { x: 0, y: 0 }; // Reset any pending deltas\n }\n\n /**\n * Queue a position update by delta to be processed in the next animation frame\n * This will be ignored if there's a pending destination update\n */\n public queuePositionUpdateBy(delta: Position): void {\n this.queuePositionUpdateByCount++;\n \n // If we have a pending destination update, add the delta to it\n if (this.nextPosition !== null) {\n this.nextPosition = {\n x: this.nextPosition.x + delta.x,\n y: this.nextPosition.y + delta.y\n };\n return;\n }\n \n this.delta = {\n x: this.delta.x + delta.x,\n y: this.delta.y + delta.y\n };\n }\n\n /**\n * Process and clear all queued position updates\n * @returns the update to apply to the position, with type information\n */\n public processQueuedUpdates(): PositionUpdate | null {\n this.lastUpdateCount = this.queuePositionUpdateCount + this.queuePositionUpdateToCount + this.queuePositionUpdateByCount;\n // Reset counters after update\n this.queuePositionUpdateCount = 0;\n this.queuePositionUpdateToCount = 0;\n this.queuePositionUpdateByCount = 0;\n \n if (this.nextPosition !== null) {\n const update: DestinationUpdate = {\n ...this.nextPosition,\n type: 'destination'\n };\n this.nextPosition = null;\n this.delta = { x: 0, y: 0 };\n this.observable.notify(update);\n return update;\n } else if (this.delta.x !== 0 || this.delta.y !== 0) {\n const update: DeltaUpdate = {\n ...this.delta,\n type: 'delta'\n };\n this.delta = { x: 0, y: 0 };\n this.observable.notify(update);\n return update;\n }\n \n return null;\n }\n\n /**\n * Subscribe to position updates\n */\n public subscribe(observer: Observer<[PositionUpdate]>, options?: SubscriptionOptions): () => void {\n return this.observable.subscribe(observer, options);\n }\n\n /**\n * Get debug information about queue method calls since last update\n */\n public getDebugInfo(): {\n lastUpdateTotalCalls: number;\n queuePositionUpdateCalls: number;\n queuePositionUpdateToCalls: number;\n queuePositionUpdateByCalls: number;\n } {\n return {\n lastUpdateTotalCalls: this.lastUpdateCount,\n queuePositionUpdateCalls: this.queuePositionUpdateCount,\n queuePositionUpdateToCalls: this.queuePositionUpdateToCount,\n queuePositionUpdateByCalls: this.queuePositionUpdateByCount\n };\n }\n}\n",
29
+ "import { AsyncObservable, Observable, Observer, SubscriptionOptions } from \"../../../utils/observable\";\n\nexport type Rotation = number; // in radians\n\nexport type RotationVelocity = number; // in radians per millisecond\n\nexport type RotationDestinationUpdate = {\n type: 'destination';\n destination: Rotation;\n};\n\nexport type RotationDeltaUpdate = {\n type: 'delta';\n delta: Rotation;\n};\n\nexport type RotationUpdate = RotationDestinationUpdate | RotationDeltaUpdate;\n\nexport class CameraRotationUpdateBatcher {\n private nextRotation: Rotation | null = null;\n private delta: Rotation = 0;\n private observable: Observable<[RotationUpdate]>;\n // Debug counters\n private queueRotationUpdateCount: number = 0;\n private queueRotationUpdateToCount: number = 0;\n private queueRotationUpdateByCount: number = 0;\n private lastUpdateCount: number = 0;\n \n constructor() {\n this.observable = new AsyncObservable<[RotationUpdate]>();\n }\n\n /**\n * Queue an absolute rotation update to be processed in the next animation frame\n */\n public queueRotationUpdate(rotation: Rotation): void {\n this.queueRotationUpdateCount++;\n this.queueRotationUpdateTo(rotation);\n }\n\n /**\n * Queue a rotation update to a specific destination to be processed in the next animation frame\n * This will override any pending delta updates\n */\n public queueRotationUpdateTo(destination: Rotation): void {\n this.queueRotationUpdateToCount++;\n this.nextRotation = destination;\n this.delta = 0; // Reset any pending deltas\n }\n\n /**\n * Queue a rotation update by delta to be processed in the next animation frame\n * This will be ignored if there's a pending destination update\n */\n public queueRotationUpdateBy(delta: Rotation): void {\n this.queueRotationUpdateByCount++;\n \n // If we have a pending destination update, add the delta to it\n if (this.nextRotation !== null) {\n this.nextRotation = this.nextRotation + delta;\n return;\n }\n \n this.delta = this.delta + delta;\n }\n\n /**\n * Process and clear all queued rotation updates\n * @returns the update to apply to the rotation, with type information\n */\n public processQueuedUpdates(): RotationUpdate | null {\n this.lastUpdateCount = this.queueRotationUpdateCount + this.queueRotationUpdateToCount + this.queueRotationUpdateByCount;\n // Reset counters after update\n this.queueRotationUpdateCount = 0;\n this.queueRotationUpdateToCount = 0;\n this.queueRotationUpdateByCount = 0;\n \n if (this.nextRotation !== null) {\n const update: RotationDestinationUpdate = {\n destination: this.nextRotation,\n type: 'destination'\n };\n this.nextRotation = null;\n this.delta = 0;\n this.observable.notify(update);\n return update;\n } else if (this.delta !== 0) {\n const update: RotationDeltaUpdate = {\n delta: this.delta,\n type: 'delta'\n };\n this.delta = 0;\n this.observable.notify(update);\n return update;\n }\n \n return null;\n }\n\n /**\n * Subscribe to rotation updates\n */\n public subscribe(observer: Observer<[RotationUpdate]>, options?: SubscriptionOptions): () => void {\n return this.observable.subscribe(observer, options);\n }\n\n /**\n * Get debug information about queue method calls since last update\n */\n public getDebugInfo(): {\n lastUpdateTotalCalls: number;\n queueRotationUpdateCalls: number;\n queueRotationUpdateToCalls: number;\n queueRotationUpdateByCalls: number;\n } {\n return {\n lastUpdateTotalCalls: this.lastUpdateCount,\n queueRotationUpdateCalls: this.queueRotationUpdateCount,\n queueRotationUpdateToCalls: this.queueRotationUpdateToCount,\n queueRotationUpdateByCalls: this.queueRotationUpdateByCount\n };\n }\n}\n",
30
+ "import { AsyncObservable, Observable, Observer, SubscriptionOptions } from \"../../../utils/observable\";\nimport { Point } from \"@ue-too/math\";\n\nexport type DestinationZoomUpdate = {\n type: 'destination';\n destination: number;\n anchor?: Point;\n};\n\nexport type DeltaZoomUpdate = {\n type: 'delta';\n delta: number;\n anchor?: Point;\n}\n\nexport type ZoomUpdate = {\n anchorCoordinateSystem: 'world' | 'viewport';\n update: DestinationZoomUpdate | DeltaZoomUpdate;\n}\n\nexport class CameraZoomUpdateBatcher {\n private nextZoom: number | null = null;\n private observable: Observable<[ZoomUpdate]>;\n private anchor: Point | null = null;\n private delta: number = 0;\n private anchorCoordinateSystem: 'world' | 'viewport' = 'viewport';\n // Debug counters\n private queueZoomUpdateCount: number = 0;\n private queueZoomUpdateToCount: number = 0;\n private lastUpdateCount: number = 0;\n \n constructor() {\n this.observable = new AsyncObservable<[ZoomUpdate]>();\n }\n\n /**\n * Queue a zoom update to a specific destination to be processed in the next animation frame\n */\n public queueZoomUpdateTo(destination: number, anchor?: Point): void {\n if(this.anchorCoordinateSystem === 'world'){\n this.anchorCoordinateSystem = 'viewport';\n this.nextZoom = null;\n this.delta = 0;\n }\n this.anchor = anchor ?? null;\n this.nextZoom = destination;\n if(this.delta !== 0){\n this.delta = 0;\n }\n }\n\n /**\n * Queue a zoom update by delta to be processed in the next animation frame\n */\n public queueZoomUpdateBy(delta: number, anchor?: Point): void {\n if(this.anchorCoordinateSystem === 'world'){\n this.anchorCoordinateSystem = 'viewport';\n this.nextZoom = null;\n this.delta = 0;\n }\n if (this.nextZoom === null) {\n this.delta += delta;\n } else {\n this.nextZoom += delta;\n }\n this.anchor = anchor ?? null;\n }\n\n /**\n * Queue a zoom update by delta at a world anchor to be processed in the next animation frame\n */\n public queueZoomByAtWorld(delta: number, worldAnchor: Point): void {\n if(this.anchorCoordinateSystem === 'viewport'){\n this.anchorCoordinateSystem = 'world';\n this.nextZoom = null;\n this.delta = 0;\n }\n this.anchor = worldAnchor;\n if (this.nextZoom === null) {\n this.delta += delta;\n } else {\n this.nextZoom += delta;\n }\n }\n\n /**\n * Queue a zoom update to a specific destination at a world anchor to be processed in the next animation frame\n */\n public queueZoomToAtWorld(destination: number, worldAnchor: Point): void {\n if(this.anchorCoordinateSystem === 'viewport'){\n this.anchorCoordinateSystem = 'world';\n this.nextZoom = null;\n this.delta = 0;\n }\n this.anchor = worldAnchor;\n this.nextZoom = destination;\n if(this.delta !== 0){\n this.delta = 0;\n }\n }\n\n /**\n * Process and clear all queued zoom updates\n * @returns the update to apply to the zoom level, with type information\n */\n public processQueuedUpdates(): ZoomUpdate | null {\n if(this.nextZoom === null && this.delta === 0){\n return null;\n }\n const delta = this.delta;\n const nextZoom = this.nextZoom;\n const anchor = this.anchor;\n this.delta = 0;\n this.nextZoom = null;\n this.anchor = null;\n if(delta !== 0){\n return {\n anchorCoordinateSystem: this.anchorCoordinateSystem,\n update: {\n type: 'delta',\n delta: delta,\n anchor: anchor ?? undefined,\n }\n }\n }\n return {\n anchorCoordinateSystem: this.anchorCoordinateSystem,\n update: {\n type: 'destination',\n destination: nextZoom ?? 0,\n anchor: anchor ?? undefined,\n }\n }\n }\n\n /**\n * Subscribe to zoom updates\n */\n public subscribe(observer: Observer<[ZoomUpdate]>, options?: SubscriptionOptions): () => void {\n return this.observable.subscribe(observer, options);\n }\n\n /**\n * Get debug information about queue method calls since last update\n */\n public getDebugInfo(): {\n lastUpdateTotalCalls: number;\n queueZoomUpdateCalls: number;\n queueZoomUpdateToCalls: number;\n } {\n return {\n lastUpdateTotalCalls: this.lastUpdateCount,\n queueZoomUpdateCalls: this.queueZoomUpdateCount,\n queueZoomUpdateToCalls: this.queueZoomUpdateToCount\n };\n }\n}\n",
31
+ "import DefaultBoardCamera from \"../default-camera\";\nimport { ObservableBoardCamera } from \"../interface\";\nimport { CameraRig, createDefaultCameraRig } from \"../camera-rig\";\nimport { CameraMux } from \"./interface\";\nimport { Point } from \"@ue-too/math\";\n\n/**\n * @description The simple relay flow control.\n * This would be the default flow control for {@link Board}.\n * \n * @category Input Flow Control\n */\nexport class Relay implements CameraMux {\n\n private _cameraRig: CameraRig;\n\n constructor(cameraRig: CameraRig = createDefaultCameraRig(new DefaultBoardCamera())) {\n this._cameraRig = cameraRig;\n }\n\n notifyPanInput(diff: Point): void {\n this._cameraRig.panByViewPort(diff);\n }\n \n notifyZoomInput(deltaZoomAmount: number, anchorPoint: Point): void {\n this._cameraRig.zoomByAt(deltaZoomAmount, anchorPoint);\n }\n\n notifyRotationInput(deltaRotation: number): void {\n this._cameraRig.rotateBy(deltaRotation);\n }\n \n}\n\n/**\n * @description Create a default relay control center.\n * \n * @category Input Flow Control\n */\nexport function createDefaultCameraMux(camera: ObservableBoardCamera): CameraMux {\n const context = createDefaultCameraRig(camera);\n return new Relay(context);\n}\n\n/**\n * \n */\nexport function createDefaultCameraMuxWithCameraRig(cameraRig: CameraRig): CameraMux {\n return new Relay(cameraRig);\n}\n",
32
+ "import { Point } from \"@ue-too/math\";\nimport type { EventReactions, State, BaseContext } from \"@ue-too/being\";\nimport { NO_OP, TemplateState, TemplateStateMachine } from \"@ue-too/being\";\nimport { BoardCamera } from \"../../interface\";\n\n/**\n * @description The states of the pan control state machine.\n * \n * @category Input Flow Control\n */\nexport type PanControlStates = \"ACCEPTING_USER_INPUT\" | \"TRANSITION\" | \"LOCKED_ON_OBJECT\";\n\n/**\n * @description The payload for the pan by input event.\n * \n * @category Input Flow Control\n */\nexport type PanByInputEventPayload = {\n diff: Point;\n};\n\n/**\n * @description The payload for the pan to input event.\n * \n * @category Input Flow Control\n */\nexport type PanToInputEventPayload = {\n target: Point;\n};\n\ntype EmptyPayload = {};\n\n/**\n * @description The payload mapping for the events of the pan control state machine.\n * \n * @category Input Flow Control\n */\nexport type PanEventPayloadMapping = {\n \"userPanByInput\": PanByInputEventPayload,\n \"userPanToInput\": PanToInputEventPayload,\n \"transitionPanByInput\": PanByInputEventPayload,\n \"transitionPanToInput\": PanToInputEventPayload,\n \"lockedOnObjectPanByInput\": PanByInputEventPayload,\n \"lockedOnObjectPanToInput\": PanToInputEventPayload,\n \"unlock\": EmptyPayload,\n \"initateTransition\": EmptyPayload,\n};\n\n/**\n * @description The context for the pan control state machine.\n * \n * @category Input Flow Control\n */\nexport interface PanContext extends BaseContext {\n camera: BoardCamera;\n limitEntireViewPort: boolean;\n panByViewPort: (delta: Point) => void;\n panToViewPort: (target: Point) => void;\n panByWorld: (delta: Point) => void;\n panToWorld: (target: Point) => void;\n};\n\n/**\n * @description The pan control state machine.\n * It's not created directly using the TemplateStateMachine class.\n * A few helper functions are in place to make it easier to use. (user don't have to memorize the event names)\n * \n * @category Input Flow Control\n */\nexport class PanControlStateMachine extends TemplateStateMachine<PanEventPayloadMapping, PanContext, PanControlStates> {\n\n constructor(states: Record<PanControlStates, State<PanEventPayloadMapping, PanContext, PanControlStates>>, initialState: PanControlStates, context: PanContext){\n super(states, initialState, context);\n }\n\n /**\n * @description Notify the pan input event.\n * \n * @category Input Flow Control\n */\n notifyPanInput(diff: Point): void{\n this.happens(\"userPanByInput\", {diff: diff});\n }\n\n /**\n * @description Notify the pan to animation input event.\n * \n * @category Input Flow Control\n */\n notifyPanToAnimationInput(target: Point): void{\n this.happens(\"transitionPanToInput\", {target: target});\n }\n\n /**\n * @description Initate the transition.\n * \n * @category Input Flow Control\n */\n initateTransition(): void{\n this.happens(\"initateTransition\");\n }\n\n set limitEntireViewPort(limit: boolean){\n this._context.limitEntireViewPort = limit;\n }\n\n get limitEntireViewPort(): boolean {\n return this._context.limitEntireViewPort;\n }\n}\n\n/**\n * @description The accepting user input state of the pan control state machine.\n * \n * @category Input Flow Control\n */\nexport class AcceptingUserInputState extends TemplateState<PanEventPayloadMapping, PanContext, PanControlStates> {\n\n constructor(){\n super();\n }\n\n eventReactions: EventReactions<PanEventPayloadMapping, PanContext, PanControlStates> = {\n userPanByInput: {action: this.userPanByInputHandler, defaultTargetState: \"ACCEPTING_USER_INPUT\"},\n userPanToInput: {action: this.userPanToInputHandler, defaultTargetState: \"ACCEPTING_USER_INPUT\"},\n lockedOnObjectPanByInput: {action: this.lockedOnObjectPanByInputHandler, defaultTargetState: \"LOCKED_ON_OBJECT\"},\n lockedOnObjectPanToInput: {action: this.lockedOnObjectPanToInputHandler, defaultTargetState: \"LOCKED_ON_OBJECT\"},\n initateTransition: {action: NO_OP, defaultTargetState: \"TRANSITION\"},\n }\n\n userPanByInputHandler(context: PanContext, payload: PanByInputEventPayload): void {\n context.panByViewPort(payload.diff);\n }\n\n userPanToInputHandler(context: PanContext, payload: PanToInputEventPayload): void {\n context.panToWorld(payload.target);\n }\n\n lockedOnObjectPanByInputHandler(context: PanContext, payload: PanByInputEventPayload): void {\n context.panByViewPort(payload.diff);\n }\n\n lockedOnObjectPanToInputHandler(context: PanContext, payload: PanToInputEventPayload): void {\n context.panToWorld(payload.target);\n }\n\n}\n\n/**\n * @description The transition state of the pan control state machine.\n * \n * @category Input Flow Control\n */\nexport class TransitionState extends TemplateState<PanEventPayloadMapping, PanContext, PanControlStates> {\n\n constructor(){\n super();\n }\n\n eventReactions: EventReactions<PanEventPayloadMapping, PanContext, PanControlStates> = {\n userPanByInput: {action: this.userPanByInputHandler, defaultTargetState: \"ACCEPTING_USER_INPUT\"},\n userPanToInput: {action: this.userPanToInputHandler, defaultTargetState: \"ACCEPTING_USER_INPUT\"},\n transitionPanByInput: {action: this.transitionPanByInputHandler, defaultTargetState: \"TRANSITION\"},\n transitionPanToInput: {action: this.transitionPanToInputHandler, defaultTargetState: \"TRANSITION\"},\n lockedOnObjectPanByInput: {action: this.lockedOnObjectPanByInputHandler, defaultTargetState: \"LOCKED_ON_OBJECT\"},\n lockedOnObjectPanToInput: {action: this.lockedOnObjectPanToInputHandler, defaultTargetState: \"LOCKED_ON_OBJECT\"},\n }\n\n userPanByInputHandler(context: PanContext, payload: PanByInputEventPayload): PanControlStates {\n context.panByViewPort(payload.diff);\n return \"ACCEPTING_USER_INPUT\";\n }\n\n userPanToInputHandler(context: PanContext, payload: PanToInputEventPayload): PanControlStates {\n context.panToWorld(payload.target);\n return \"ACCEPTING_USER_INPUT\";\n }\n\n transitionPanByInputHandler(context: PanContext, payload: PanByInputEventPayload): PanControlStates {\n context.panByViewPort(payload.diff);\n return \"TRANSITION\";\n }\n\n transitionPanToInputHandler(context: PanContext, payload: PanToInputEventPayload): PanControlStates {\n context.panToWorld(payload.target);\n return \"TRANSITION\";\n }\n\n lockedOnObjectPanByInputHandler(context: PanContext, payload: PanByInputEventPayload): PanControlStates {\n context.panByViewPort(payload.diff);\n return \"LOCKED_ON_OBJECT\";\n }\n\n lockedOnObjectPanToInputHandler(context: PanContext, payload: PanToInputEventPayload): PanControlStates {\n context.panToWorld(payload.target);\n return \"LOCKED_ON_OBJECT\";\n }\n\n}\n\n/**\n * @description The locked on object state of the pan control state machine.\n * \n * @category Input Flow Control\n */\nexport class LockedOnObjectState extends TemplateState<PanEventPayloadMapping, PanContext, PanControlStates> {\n\n constructor(){\n super();\n }\n\n eventReactions: EventReactions<PanEventPayloadMapping, PanContext, PanControlStates> = {\n unlock: {action: NO_OP, defaultTargetState: \"ACCEPTING_USER_INPUT\"},\n lockedOnObjectPanByInput: {action: this.lockedOnObjectPanByInputHandler, defaultTargetState: \"LOCKED_ON_OBJECT\"},\n lockedOnObjectPanToInput: {action: this.lockedOnObjectPanToInputHandler, defaultTargetState: \"LOCKED_ON_OBJECT\"},\n }\n\n lockedOnObjectPanByInputHandler(context: PanContext, payload: PanByInputEventPayload): void {\n context.panByViewPort(payload.diff);\n }\n\n lockedOnObjectPanToInputHandler(context: PanContext, payload: PanToInputEventPayload): void {\n context.panToWorld(payload.target);\n }\n\n}\n\n/**\n * @description Create the object containing the default pan control states.\n * \n * @category Input Flow Control\n */\nexport function createDefaultPanControlStates(): Record<PanControlStates, State<PanEventPayloadMapping, PanContext, PanControlStates>> {\n return {\n ACCEPTING_USER_INPUT: new AcceptingUserInputState(),\n TRANSITION: new TransitionState(),\n LOCKED_ON_OBJECT: new LockedOnObjectState(),\n }\n}\n\n/**\n * @description Create the default pan control state machine.\n * \n * @category Input Flow Control\n */\nexport function createDefaultPanControlStateMachine(context: PanContext): PanControlStateMachine {\n return new PanControlStateMachine(createDefaultPanControlStates(), \"ACCEPTING_USER_INPUT\", context);\n}\n",
33
+ "import type { State, EventReactions, BaseContext } from \"@ue-too/being\";\nimport { NO_OP, TemplateState, TemplateStateMachine } from \"@ue-too/being\";\nimport { Point } from \"@ue-too/math\";\n\n/**\n * @description The possible states of the zoom control state machine.\n * \n * @category Input Flow Control\n */\nexport type ZoomControlStates = \"ACCEPTING_USER_INPUT\" | \"TRANSITION\" | \"LOCKED_ON_OBJECT\";\n\n/**\n * @description The payload for the zoom by at input event.\n * \n * @category Input Flow Control\n */\nexport type ZoomByAtInputPayload = {\n deltaZoom: number;\n anchorPoint: Point;\n}\n\n/**\n * @description The payload for the zoom to at input event.\n * \n * @category Input Flow Control\n */\nexport type ZoomToAtInputPayload = {\n targetZoom: number;\n anchorPoint: Point;\n}\n\n/**\n * @description The payload for the zoom by payload.\n * \n * @category Input Flow Control\n */\nexport type ZoomByPayload = {\n deltaZoom: number;\n}\n\n/**\n * @description The payload for the zoom to payload.\n * \n * @category Input Flow Control\n */\nexport type ZoomToPayload = {\n targetZoom: number;\n}\n\n/**\n * @description The payload mapping for the events of the zoom control state machine.\n * \n * @category Input Flow Control\n */\nexport type ZoomEventPayloadMapping = {\n \"userZoomByAtInput\": ZoomByAtInputPayload,\n \"userZoomToAtInput\": ZoomToAtInputPayload,\n \"transitionZoomByAtInput\": ZoomByAtInputPayload,\n \"transitionZoomToAtInput\": ZoomToAtInputPayload,\n \"transitionZoomByAtCenterInput\": ZoomByPayload,\n \"transitionZoomToAtCenterInput\": ZoomToAtInputPayload,\n \"transitionZoomToAtWorldInput\": ZoomToAtInputPayload,\n \"lockedOnObjectZoomByAtInput\": ZoomByAtInputPayload,\n \"lockedOnObjectZoomToAtInput\": ZoomToAtInputPayload,\n \"unlock\": {},\n \"initiateTransition\": {},\n};\n\n/**\n * @description The context for the zoom control state machine.\n * \n * @category Input Flow Control\n */\nexport interface ZoomContext extends BaseContext {\n zoomToAt: (targetZoom: number, at: Point) => void;\n zoomByAt: (delta: number, at: Point) => void;\n zoomTo: (targetZoom: number) => void;\n zoomBy: (delta: number) => void;\n zoomToAtWorld: (targetZoom: number, at: Point) => void;\n zoomByAtWorld: (delta: number, at: Point) => void;\n};\n\n/**\n * @description The accepting user input state of the zoom control state machine.\n * \n * @category Input Flow Control\n */\nexport class ZoomAcceptingUserInputState extends TemplateState<ZoomEventPayloadMapping, ZoomContext, ZoomControlStates> {\n\n private _eventReactions: EventReactions<ZoomEventPayloadMapping, ZoomContext, ZoomControlStates> = {\n userZoomByAtInput: {action: this.userZoomByAtInput, defaultTargetState: \"ACCEPTING_USER_INPUT\"},\n userZoomToAtInput: {action: this.userZoomToAtInput, defaultTargetState: \"ACCEPTING_USER_INPUT\"},\n initiateTransition: {action: NO_OP, defaultTargetState: \"TRANSITION\"},\n };\n\n get eventReactions(): EventReactions<ZoomEventPayloadMapping, ZoomContext, ZoomControlStates> {\n return this._eventReactions;\n }\n\n userZoomByAtInput(context: ZoomContext, payload: ZoomEventPayloadMapping[\"userZoomByAtInput\"]): void {\n context.zoomByAt(payload.deltaZoom, payload.anchorPoint);\n }\n\n userZoomToAtInput(context: ZoomContext, payload: ZoomEventPayloadMapping[\"userZoomToAtInput\"]): void {\n context.zoomToAt(payload.targetZoom, payload.anchorPoint);\n }\n}\n\n/**\n * @description The transition state of the zoom control state machine.\n * \n * @category Input Flow Control\n */\nexport class ZoomTransitionState extends TemplateState<ZoomEventPayloadMapping, ZoomContext, ZoomControlStates> {\n\n constructor(){\n super();\n }\n\n private _eventReactions: EventReactions<ZoomEventPayloadMapping, ZoomContext, ZoomControlStates> = {\n lockedOnObjectZoomByAtInput: {action: this.lockedOnObjectZoomByAtInput, defaultTargetState: \"LOCKED_ON_OBJECT\"},\n lockedOnObjectZoomToAtInput: {action: this.lockedOnObjectZoomToAtInput, defaultTargetState: \"LOCKED_ON_OBJECT\"},\n transitionZoomByAtInput: {action: this.transitionZoomByAtInput, defaultTargetState: \"TRANSITION\"},\n transitionZoomToAtInput: {action: this.transitionZoomToAtInput, defaultTargetState: \"TRANSITION\"},\n transitionZoomToAtCenterInput: {action: this.transitionZoomToAtCenterInput, defaultTargetState: \"TRANSITION\"},\n transitionZoomToAtWorldInput: {action: this.transitionZoomToAtWorldInput, defaultTargetState: \"TRANSITION\"},\n userZoomByAtInput: {action: this.userZoomByAtInput, defaultTargetState: \"ACCEPTING_USER_INPUT\"},\n userZoomToAtInput: {action: this.userZoomToAtInput, defaultTargetState: \"ACCEPTING_USER_INPUT\"},\n }\n\n get eventReactions(): EventReactions<ZoomEventPayloadMapping, ZoomContext, ZoomControlStates> {\n return this._eventReactions;\n }\n\n lockedOnObjectZoomByAtInput(context: ZoomContext, payload: ZoomEventPayloadMapping[\"lockedOnObjectZoomByAtInput\"]): void {\n context.zoomBy(payload.deltaZoom);\n }\n\n lockedOnObjectZoomToAtInput(context: ZoomContext, payload: ZoomEventPayloadMapping[\"lockedOnObjectZoomToAtInput\"]): void {\n context.zoomTo(payload.targetZoom);\n }\n\n userZoomByAtInput(context: ZoomContext, payload: ZoomEventPayloadMapping[\"userZoomByAtInput\"]): void {\n context.zoomByAt(payload.deltaZoom, payload.anchorPoint);\n }\n\n userZoomToAtInput(context: ZoomContext, payload: ZoomEventPayloadMapping[\"userZoomToAtInput\"]): void {\n context.zoomToAt(payload.targetZoom, payload.anchorPoint);\n }\n\n transitionZoomByAtInput(context: ZoomContext, payload: ZoomEventPayloadMapping[\"transitionZoomByAtInput\"]): void {\n context.zoomByAt(payload.deltaZoom, payload.anchorPoint);\n }\n\n transitionZoomByAtCenterInput(context: ZoomContext, payload: ZoomEventPayloadMapping[\"transitionZoomByAtCenterInput\"]): void {\n context.zoomBy(payload.deltaZoom);\n }\n\n transitionZoomToAtInput(context: ZoomContext, payload: ZoomEventPayloadMapping[\"transitionZoomToAtInput\"]): void {\n context.zoomToAt(payload.targetZoom, payload.anchorPoint);\n }\n\n transitionZoomToAtCenterInput(context: ZoomContext, payload: ZoomEventPayloadMapping[\"transitionZoomToAtCenterInput\"]): void {\n context.zoomTo(payload.targetZoom);\n }\n\n transitionZoomToAtWorldInput(context: ZoomContext, payload: ZoomEventPayloadMapping[\"transitionZoomToAtWorldInput\"]): void {\n context.zoomToAtWorld(payload.targetZoom, payload.anchorPoint);\n }\n}\n\n/**\n * @description The locked on object state of the zoom control state machine.\n * \n * @category Input Flow Control\n */\nexport class ZoomLockedOnObjectState extends TemplateState<ZoomEventPayloadMapping, ZoomContext, ZoomControlStates> {\n\n constructor(){\n super();\n }\n\n private _eventReactions: EventReactions<ZoomEventPayloadMapping, ZoomContext, ZoomControlStates> = {\n lockedOnObjectZoomByAtInput: {action: this.lockedOnObjectZoomByAtInput, defaultTargetState: \"LOCKED_ON_OBJECT\"},\n lockedOnObjectZoomToAtInput: {action: this.lockedOnObjectZoomToAtInput, defaultTargetState: \"LOCKED_ON_OBJECT\"},\n userZoomByAtInput: {action: this.userZoomByAtInput, defaultTargetState: \"ACCEPTING_USER_INPUT\"},\n userZoomToAtInput: {action: this.userZoomToAtInput, defaultTargetState: \"ACCEPTING_USER_INPUT\"},\n }\n\n get eventReactions(): EventReactions<ZoomEventPayloadMapping, ZoomContext, ZoomControlStates> {\n return this._eventReactions;\n }\n\n lockedOnObjectZoomByAtInput(context: ZoomContext, payload: ZoomEventPayloadMapping[\"lockedOnObjectZoomByAtInput\"]): void {\n context.zoomByAt(payload.deltaZoom, payload.anchorPoint);\n }\n\n lockedOnObjectZoomToAtInput(context: ZoomContext, payload: ZoomEventPayloadMapping[\"lockedOnObjectZoomToAtInput\"]): void {\n context.zoomToAt(payload.targetZoom, payload.anchorPoint);\n }\n\n userZoomByAtInput(context: ZoomContext, payload: ZoomEventPayloadMapping[\"userZoomByAtInput\"]): void {\n context.zoomByAt(payload.deltaZoom, payload.anchorPoint);\n }\n\n userZoomToAtInput(context: ZoomContext, payload: ZoomEventPayloadMapping[\"userZoomToAtInput\"]): void {\n context.zoomToAt(payload.targetZoom, payload.anchorPoint);\n }\n}\n\n/**\n * @description The zoom control state machine.\n * \n * @category Input Flow Control\n */\nexport class ZoomControlStateMachine extends TemplateStateMachine<ZoomEventPayloadMapping, ZoomContext, ZoomControlStates> {\n\n constructor(states: Record<ZoomControlStates, State<ZoomEventPayloadMapping, ZoomContext, ZoomControlStates>>, initialState: ZoomControlStates, context: ZoomContext){\n super(states, initialState, context);\n }\n\n notifyZoomByAtInput(delta: number, at: Point): void {\n this.happens(\"userZoomByAtInput\", {deltaZoom: delta, anchorPoint: at});\n }\n\n notifyZoomByAtInputAnimation(delta: number, at: Point): void {\n this.happens(\"transitionZoomByAtInput\", {deltaZoom: delta, anchorPoint: at});\n }\n\n notifyZoomToAtCenterInput(targetZoom: number, at: Point): void {\n this.happens(\"transitionZoomToAtCenterInput\", {targetZoom: targetZoom, anchorPoint: at});\n }\n\n notifyZoomToAtWorldInput(targetZoom: number, at: Point): void {\n this.happens(\"transitionZoomToAtWorldInput\", {targetZoom: targetZoom, anchorPoint: at});\n }\n\n initateTransition(): void {\n this.happens(\"initiateTransition\");\n }\n}\n\n/**\n * @description Create the object containing the default zoom control states.\n * \n * @category Input Flow Control\n */\nexport function createDefaultZoomControlStates(): Record<ZoomControlStates, State<ZoomEventPayloadMapping, ZoomContext, ZoomControlStates>> {\n return {\n ACCEPTING_USER_INPUT: new ZoomAcceptingUserInputState(),\n TRANSITION: new ZoomTransitionState(),\n LOCKED_ON_OBJECT: new ZoomLockedOnObjectState(),\n }\n}\n\n/**\n * @description Create the default zoom control state machine.\n * \n * @category Input Flow Control\n */\nexport function createDefaultZoomControlStateMachine(context: ZoomContext): ZoomControlStateMachine {\n return new ZoomControlStateMachine(createDefaultZoomControlStates(), \"ACCEPTING_USER_INPUT\", context);\n}\n",
34
+ "import type { EventReactions, State, BaseContext } from \"@ue-too/being\";\nimport { NO_OP, TemplateState, TemplateStateMachine } from \"@ue-too/being\";\nimport { BoardCamera } from \"../../interface\";\n\n/**\n * @description The states of the pan control state machine.\n * \n * @category Input Flow Control\n */\nexport type RotateControlStates = \"ACCEPTING_USER_INPUT\" | \"TRANSITION\" | \"LOCKED_ON_OBJECT\";\n\n/**\n * @description The payload for the rotate by input event.\n * \n * @category Input Flow Control\n */\nexport type RotateByInputEventPayload = {\n diff: number;\n};\n\n/**\n * @description The payload for the rotate to input event.\n * \n * @category Input Flow Control\n */\nexport type RotateToInputEventPayload = {\n target: number;\n};\n\ntype EmptyPayload = {};\n\n/**\n * @description The payload mapping for the events of the rotate control state machine.\n * \n * @category Input Flow Control\n */\nexport type RotateEventPayloadMapping = {\n \"userRotateByInput\": RotateByInputEventPayload,\n \"userRotateToInput\": RotateToInputEventPayload,\n \"transitionRotateByInput\": RotateByInputEventPayload,\n \"transitionRotateToInput\": RotateToInputEventPayload,\n \"lockedOnObjectRotateByInput\": RotateByInputEventPayload,\n \"lockedOnObjectRotateToInput\": RotateToInputEventPayload,\n \"unlock\": EmptyPayload,\n \"initateTransition\": EmptyPayload,\n};\n\n/**\n * @description The context for the rotate control state machine.\n * \n * @category Input Flow Control\n */\nexport interface RotateContext extends BaseContext {\n camera: BoardCamera;\n rotateBy: (delta: number) => void;\n rotateTo: (target: number) => void;\n};\n\n/**\n * @description The pan control state machine.\n * It's not created directly using the TemplateStateMachine class.\n * A few helper functions are in place to make it easier to use. (user don't have to memorize the event names)\n * \n * @category Input Flow Control\n */\nexport class RotateControlStateMachine extends TemplateStateMachine<RotateEventPayloadMapping, RotateContext, RotateControlStates> {\n\n constructor(states: Record<RotateControlStates, State<RotateEventPayloadMapping, RotateContext, RotateControlStates>>, initialState: RotateControlStates, context: RotateContext){\n super(states, initialState, context);\n }\n\n /**\n * @description Notify the pan input event.\n * \n * @category Input Flow Control\n */\n notifyRotateByInput(diff: number): void{\n this.happens(\"userRotateByInput\", {diff: diff});\n }\n\n /**\n * @description Notify the rotate to animation input event.\n * \n * @category Input Flow Control\n */\n notifyRotateToAnimationInput(target: number): void{\n this.happens(\"transitionRotateToInput\", {target: target});\n }\n\n /**\n * @description Initate the transition.\n * \n * @category Input Flow Control\n */\n initateTransition(): void{\n this.happens(\"initateTransition\");\n }\n\n}\n\n/**\n * @description The accepting user input state of the rotate control state machine.\n * \n * @category Input Flow Control\n */\nexport class RotationAcceptingUserInputState extends TemplateState<RotateEventPayloadMapping, RotateContext, RotateControlStates> {\n\n constructor(){\n super();\n }\n\n eventReactions: EventReactions<RotateEventPayloadMapping, RotateContext, RotateControlStates> = {\n userRotateByInput: {action: this.userRotateByInputHandler, defaultTargetState: \"ACCEPTING_USER_INPUT\"},\n userRotateToInput: {action: this.userRotateToInputHandler, defaultTargetState: \"ACCEPTING_USER_INPUT\"},\n lockedOnObjectRotateByInput: {action: this.lockedOnObjectRotateByInputHandler, defaultTargetState: \"LOCKED_ON_OBJECT\"},\n lockedOnObjectRotateToInput: {action: this.lockedOnObjectRotateToInputHandler, defaultTargetState: \"LOCKED_ON_OBJECT\"},\n initateTransition: {action: NO_OP, defaultTargetState: \"TRANSITION\"},\n }\n\n userRotateByInputHandler(context: RotateContext, payload: RotateByInputEventPayload): void {\n context.rotateBy(payload.diff);\n }\n\n userRotateToInputHandler(context: RotateContext, payload: RotateToInputEventPayload): void {\n context.rotateTo(payload.target);\n }\n\n lockedOnObjectRotateByInputHandler(context: RotateContext, payload: RotateByInputEventPayload): void {\n context.rotateBy(payload.diff);\n }\n\n lockedOnObjectRotateToInputHandler(context: RotateContext, payload: RotateToInputEventPayload): void {\n context.rotateTo(payload.target);\n }\n\n}\n\n/**\n * @description The transition state of the rotate control state machine.\n * \n * @category Input Flow Control\n */\nexport class RotationTransitionState extends TemplateState<RotateEventPayloadMapping, RotateContext, RotateControlStates> {\n\n constructor(){\n super();\n }\n\n eventReactions: EventReactions<RotateEventPayloadMapping, RotateContext, RotateControlStates> = {\n userRotateByInput: {action: this.userRotateByInputHandler, defaultTargetState: \"ACCEPTING_USER_INPUT\"},\n userRotateToInput: {action: this.userRotateToInputHandler, defaultTargetState: \"ACCEPTING_USER_INPUT\"},\n transitionRotateByInput: {action: this.transitionRotateByInputHandler, defaultTargetState: \"TRANSITION\"},\n transitionRotateToInput: {action: this.transitionRotateToInputHandler, defaultTargetState: \"TRANSITION\"},\n lockedOnObjectRotateByInput: {action: this.lockedOnObjectRotateByInputHandler, defaultTargetState: \"LOCKED_ON_OBJECT\"},\n lockedOnObjectRotateToInput: {action: this.lockedOnObjectRotateToInputHandler, defaultTargetState: \"LOCKED_ON_OBJECT\"},\n }\n\n userRotateByInputHandler(context: RotateContext, payload: RotateByInputEventPayload): RotateControlStates {\n context.rotateBy(payload.diff);\n return \"ACCEPTING_USER_INPUT\";\n }\n\n userRotateToInputHandler(context: RotateContext, payload: RotateToInputEventPayload): RotateControlStates {\n context.rotateTo(payload.target);\n return \"ACCEPTING_USER_INPUT\";\n }\n\n transitionRotateByInputHandler(context: RotateContext, payload: RotateByInputEventPayload): RotateControlStates {\n context.rotateBy(payload.diff);\n return \"TRANSITION\";\n }\n\n transitionRotateToInputHandler(context: RotateContext, payload: RotateToInputEventPayload): RotateControlStates {\n context.rotateTo(payload.target);\n return \"TRANSITION\";\n }\n\n lockedOnObjectRotateByInputHandler(context: RotateContext, payload: RotateByInputEventPayload): RotateControlStates {\n context.rotateBy(payload.diff);\n return \"LOCKED_ON_OBJECT\";\n }\n\n lockedOnObjectRotateToInputHandler(context: RotateContext, payload: RotateToInputEventPayload): RotateControlStates {\n context.rotateTo(payload.target);\n return \"LOCKED_ON_OBJECT\";\n }\n\n}\n\n/**\n * @description The locked on object state of the pan control state machine.\n * \n * @category Input Flow Control\n */\nexport class RotationLockedOnObjectState extends TemplateState<RotateEventPayloadMapping, RotateContext, RotateControlStates> {\n\n constructor(){\n super();\n }\n\n eventReactions: EventReactions<RotateEventPayloadMapping, RotateContext, RotateControlStates> = {\n unlock: {action: NO_OP, defaultTargetState: \"ACCEPTING_USER_INPUT\"},\n lockedOnObjectRotateByInput: {action: this.lockedOnObjectRotateByInputHandler, defaultTargetState: \"LOCKED_ON_OBJECT\"},\n lockedOnObjectRotateToInput: {action: this.lockedOnObjectRotateToInputHandler, defaultTargetState: \"LOCKED_ON_OBJECT\"},\n }\n\n lockedOnObjectRotateByInputHandler(context: RotateContext, payload: RotateByInputEventPayload): void {\n context.rotateBy(payload.diff);\n }\n\n lockedOnObjectRotateToInputHandler(context: RotateContext, payload: RotateToInputEventPayload): void {\n context.rotateTo(payload.target);\n }\n\n}\n\n/**\n * @description Create the object containing the default pan control states.\n * \n * @category Input Flow Control\n */\nexport function createDefaultRotateControlStates(): Record<RotateControlStates, State<RotateEventPayloadMapping, RotateContext, RotateControlStates>> {\n return {\n ACCEPTING_USER_INPUT: new RotationAcceptingUserInputState(),\n TRANSITION: new RotationTransitionState(),\n LOCKED_ON_OBJECT: new RotationLockedOnObjectState(),\n }\n}\n\n/**\n * @description Create the default rotate control state machine.\n * \n * @category Input Flow Control\n */\nexport function createDefaultRotateControlStateMachine(context: RotateContext): RotateControlStateMachine {\n return new RotateControlStateMachine(createDefaultRotateControlStates(), \"ACCEPTING_USER_INPUT\", context);\n}\n",
35
+ "\nimport { CameraMux } from \"../interface\";\nimport { Point } from \"@ue-too/math\";\nimport { ObservableBoardCamera } from \"../../interface\";\nimport { createDefaultPanControlStateMachine, PanControlStateMachine } from \"./pan-control-state-machine\";\nimport { createDefaultZoomControlStateMachine, ZoomControlStateMachine } from \"./zoom-control-state-machine\";\nimport { createDefaultRotateControlStateMachine, RotateControlStateMachine } from \"./rotation-control-state-machine\";\nimport { CameraRig } from \"../../camera-rig\";\nimport { createDefaultCameraRig } from \"../../camera-rig\";\n\n/**\n * @description The flow control with animation and lock input.\n * \n * This is a customized input flow control that suits a specific use case.\n * \n * You can use the default one ({@link SimpleRelayFlowControl}) instead or implement your own.\n * \n * The internal ruleset on which input is used and which is ignored is controlled by the state machines.\n * \n * @category Input Flow Control\n */\nexport class CameraMuxWithAnimationAndLock implements CameraMux {\n\n private _panStateMachine: PanControlStateMachine;\n private _zoomStateMachine: ZoomControlStateMachine;\n private _rotateStateMachine: RotateControlStateMachine;\n\n constructor(panStateMachine: PanControlStateMachine, zoomStateMachine: ZoomControlStateMachine, rotateStateMachine: RotateControlStateMachine){\n this._panStateMachine = panStateMachine;\n this._zoomStateMachine = zoomStateMachine;\n this._rotateStateMachine = rotateStateMachine;\n }\n\n notifyPanToAnimationInput(target: Point): void {\n this._panStateMachine.notifyPanToAnimationInput(target);\n }\n\n notifyPanInput(delta: Point): void {\n this._panStateMachine.notifyPanInput(delta);\n }\n\n notifyZoomInput(delta: number, at: Point): void {\n this._zoomStateMachine.notifyZoomByAtInput(delta, at);\n }\n\n notifyRotateByInput(delta: number): void {\n this._rotateStateMachine.notifyRotateByInput(delta);\n }\n\n notifyRotateToAnimationInput(target: number): void {\n this._rotateStateMachine.notifyRotateToAnimationInput(target);\n }\n\n notifyZoomInputAnimation(targetZoom: number, at: Point = {x: 0, y: 0}): void {\n this._zoomStateMachine.notifyZoomToAtCenterInput(targetZoom, at);\n }\n\n notifyZoomInputAnimationWorld(targetZoom: number, at: Point = {x: 0, y: 0}): void {\n this._zoomStateMachine.notifyZoomToAtWorldInput(targetZoom, at);\n }\n\n notifyRotationInput(delta: number): void {\n console.error(\"Rotation input is not implemented\");\n }\n\n initatePanTransition(): void {\n this._panStateMachine.initateTransition();\n }\n\n initateZoomTransition(): void {\n this._zoomStateMachine.initateTransition();\n }\n\n initateRotateTransition(): void {\n this._rotateStateMachine.initateTransition();\n }\n\n get rotateStateMachine(): RotateControlStateMachine {\n return this._rotateStateMachine;\n }\n\n get panStateMachine(): PanControlStateMachine {\n return this._panStateMachine;\n }\n\n get zoomStateMachine(): ZoomControlStateMachine {\n return this._zoomStateMachine;\n }\n}\n\n/**\n * @description Create a flow control that allows animation and lock inputs.\n * \n * @category Input Flow Control\n */\nexport function createCameraMuxWithAnimationAndLock(camera: ObservableBoardCamera): CameraMux {\n const context = createDefaultCameraRig(camera);\n const panStateMachine = createDefaultPanControlStateMachine(context);\n const zoomStateMachine = createDefaultZoomControlStateMachine(context);\n const rotateStateMachine = createDefaultRotateControlStateMachine(context);\n return new CameraMuxWithAnimationAndLock(panStateMachine, zoomStateMachine, rotateStateMachine);\n}\n\n/**\n * @description Create a default flow control with a camera rig.\n * \n * @category Input Flow Control\n */\nexport function createCameraMuxWithAnimationAndLockWithCameraRig(cameraRig: CameraRig): CameraMux {\n const panStateMachine = createDefaultPanControlStateMachine(cameraRig);\n const zoomStateMachine = createDefaultZoomControlStateMachine(cameraRig);\n const rotateStateMachine = createDefaultRotateControlStateMachine(cameraRig);\n return new CameraMuxWithAnimationAndLock(panStateMachine, zoomStateMachine, rotateStateMachine);\n}\n",
36
+ "import type { Point } from \"@ue-too/math\";\nimport { createDefaultCameraMux, CameraMux } from \"../../camera/camera-mux\";\nimport { ObservableBoardCamera } from \"../../camera/interface\";\nimport { AsyncObservable, Observable, Observer } from \"../../utils/observable\";\n\n/**\n * @description The unsubscribe to user raw input.\n * \n * @category Event Parser\n */\nexport type UnsubscribeToUserRawInput = () => void;\n\n/**\n * @description The raw user pan input event payload.\n * \n * @category Event Parser\n */\nexport type RawUserPanInputEventPayload = {\n diff: Point;\n}\n\n/**\n * @description The raw user pan input event.\n * Use type to discriminate between pan, zoom, and rotate events.\n * \n * @category Event Parser\n */\nexport type RawUserPanInputEvent = {\n type: \"pan\",\n} & RawUserPanInputEventPayload;\n\n/**\n * @description The raw user zoom input event payload.\n * \n * @category Event Parser\n */\nexport type RawUserZoomInputEventPayload = {\n deltaZoomAmount: number;\n anchorPoint: Point;\n}\n\n/**\n * @description The raw user zoom input event.\n * Use type to discriminate between pan, zoom, and rotate events.\n * \n * @category Event Parser\n */\nexport type RawUserZoomInputEvent = {\n type: \"zoom\",\n} & RawUserZoomInputEventPayload;\n\n/**\n * @description The raw user rotate input event payload.\n * \n * @category Event Parser\n */\nexport type RawUserRotateInputEventPayload = {\n deltaRotation: number;\n}\n\n/**\n * @description The raw user rotate input event.\n * Use type to discriminate between pan, zoom, and rotate events.\n * \n * @category Event Parser\n */\nexport type RawUserRotateInputEvent = {\n type: \"rotate\",\n} & RawUserRotateInputEventPayload;\n\n/**\n * @description The raw user input event map.\n * \n * @category Event Parser\n */\nexport type RawUserInputEventMap = {\n \"pan\": RawUserPanInputEventPayload,\n \"zoom\": RawUserZoomInputEventPayload,\n \"rotate\": RawUserRotateInputEventPayload,\n \"all\": RawUserInputEvent,\n}\n\n/**\n * @description The raw user input event.\n * Use type to discriminate between pan, zoom, and rotate events.\n * \n * @category Event Parser\n */\nexport type RawUserInputEvent = RawUserPanInputEvent | RawUserZoomInputEvent | RawUserRotateInputEvent;\n\n/**\n * @description The raw user input callback.\n * This is the function type of callbacks for raw user input events.\n * \n * @category Event Parser\n */\nexport type RawUserInputCallback<K extends keyof RawUserInputEventMap> = (event: RawUserInputEventMap[K])=>void;\n\nexport interface UserInputPublisher {\n notifyPan(diff: Point): void;\n notifyZoom(deltaZoomAmount: number, anchorPoint: Point): void;\n notifyRotate(deltaRotation: number): void;\n on<K extends keyof RawUserInputEventMap>(eventName: K, callback: (event: RawUserInputEventMap[K])=>void): UnsubscribeToUserRawInput;\n}\n\n/**\n * @description The raw user input publisher.\n * Publishs raw user input events to the input flow control, and subscribers.\n * \n * @category Event Parser\n */\nexport class RawUserInputPublisher implements UserInputPublisher {\n\n private pan: Observable<Parameters<RawUserInputCallback<\"pan\">>>;\n private zoom: Observable<Parameters<RawUserInputCallback<\"zoom\">>>;\n private rotate: Observable<Parameters<RawUserInputCallback<\"rotate\">>>;\n private all: Observable<Parameters<RawUserInputCallback<\"all\">>>;\n private _cameraMux: CameraMux;\n\n constructor(cameraMux: CameraMux){\n this.pan = new AsyncObservable<Parameters<RawUserInputCallback<\"pan\">>>();\n this.zoom = new AsyncObservable<Parameters<RawUserInputCallback<\"zoom\">>>();\n this.rotate = new AsyncObservable<Parameters<RawUserInputCallback<\"rotate\">>>();\n this.all = new AsyncObservable<Parameters<RawUserInputCallback<\"all\">>>();\n this._cameraMux = cameraMux;\n }\n\n notifyPan(diff: Point): void {\n this._cameraMux.notifyPanInput(diff);\n this.pan.notify({diff: diff});\n this.all.notify({type: \"pan\", diff: diff});\n }\n\n notifyZoom(deltaZoomAmount: number, anchorPoint: Point): void {\n this._cameraMux.notifyZoomInput(deltaZoomAmount, anchorPoint);\n this.zoom.notify({deltaZoomAmount: deltaZoomAmount, anchorPoint: anchorPoint});\n this.all.notify({type: \"zoom\", deltaZoomAmount: deltaZoomAmount, anchorPoint: anchorPoint});\n }\n\n notifyRotate(deltaRotation: number): void {\n this._cameraMux.notifyRotationInput(deltaRotation);\n this.rotate.notify({deltaRotation: deltaRotation});\n this.all.notify({type: \"rotate\", deltaRotation: deltaRotation});\n }\n \n on<K extends keyof RawUserInputEventMap>(eventName: K, callback: (event: RawUserInputEventMap[K])=>void): UnsubscribeToUserRawInput {\n switch (eventName){\n case \"pan\":\n return this.pan.subscribe(callback as Observer<Parameters<RawUserInputCallback<\"pan\">>>);\n case \"zoom\":\n return this.zoom.subscribe(callback as Observer<Parameters<RawUserInputCallback<\"zoom\">>>);\n case \"rotate\":\n return this.rotate.subscribe(callback as Observer<Parameters<RawUserInputCallback<\"rotate\">>>);\n case \"all\":\n return this.all.subscribe(callback as Observer<Parameters<RawUserInputCallback<\"all\">>>);\n default:\n throw new Error(\"Invalid raw user input event name\");\n }\n }\n\n get cameraMux(): CameraMux {\n return this._cameraMux;\n }\n\n set cameraMux(cameraMux: CameraMux){\n this._cameraMux = cameraMux;\n }\n}\n\n/**\n * @description Creates a default raw user input publisher.\n * \n * @category Event Parser\n */\nexport function createDefaultRawUserInputPublisher(camera: ObservableBoardCamera): RawUserInputPublisher {\n return new RawUserInputPublisher(createDefaultCameraMux(camera));\n}\n\nexport class RawUserInputPublisherWithWebWorkerRelay implements UserInputPublisher {\n\n private pan: Observable<Parameters<RawUserInputCallback<\"pan\">>>;\n private zoom: Observable<Parameters<RawUserInputCallback<\"zoom\">>>;\n private rotate: Observable<Parameters<RawUserInputCallback<\"rotate\">>>;\n private all: Observable<Parameters<RawUserInputCallback<\"all\">>>;\n private webWorker: Worker;\n\n constructor(webWorker: Worker){\n this.pan = new AsyncObservable<Parameters<RawUserInputCallback<\"pan\">>>();\n this.zoom = new AsyncObservable<Parameters<RawUserInputCallback<\"zoom\">>>();\n this.rotate = new AsyncObservable<Parameters<RawUserInputCallback<\"rotate\">>>();\n this.all = new AsyncObservable<Parameters<RawUserInputCallback<\"all\">>>();\n this.webWorker = webWorker;\n }\n\n notifyPan(diff: Point): void {\n this.webWorker.postMessage({type: \"notifyUserInput\", payload: {type: \"pan\", diff: diff}});\n this.pan.notify({diff: diff});\n this.all.notify({type: \"pan\", diff: diff});\n }\n\n notifyZoom(deltaZoomAmount: number, anchorPoint: Point): void {\n this.webWorker.postMessage({type: \"notifyUserInput\", payload: {type: \"zoom\", deltaZoomAmount: deltaZoomAmount, anchorPoint: anchorPoint}});\n this.zoom.notify({deltaZoomAmount: deltaZoomAmount, anchorPoint: anchorPoint});\n this.all.notify({type: \"zoom\", deltaZoomAmount: deltaZoomAmount, anchorPoint: anchorPoint});\n }\n\n notifyRotate(deltaRotation: number): void {\n this.webWorker.postMessage({type: \"notifyUserInput\", payload: {type: \"rotate\", deltaRotation: deltaRotation}});\n this.rotate.notify({deltaRotation: deltaRotation});\n this.all.notify({type: \"rotate\", deltaRotation: deltaRotation});\n }\n \n on<K extends keyof RawUserInputEventMap>(eventName: K, callback: (event: RawUserInputEventMap[K])=>void): UnsubscribeToUserRawInput {\n switch (eventName){\n case \"pan\":\n return this.pan.subscribe(callback as Observer<Parameters<RawUserInputCallback<\"pan\">>>);\n case \"zoom\":\n return this.zoom.subscribe(callback as Observer<Parameters<RawUserInputCallback<\"zoom\">>>);\n case \"rotate\":\n return this.rotate.subscribe(callback as Observer<Parameters<RawUserInputCallback<\"rotate\">>>);\n case \"all\":\n return this.all.subscribe(callback as Observer<Parameters<RawUserInputCallback<\"all\">>>);\n default:\n throw new Error(\"Invalid raw user input event name\");\n }\n }\n}\n",
37
+ "import { Point } from \"@ue-too/math\";\nimport { BaseContext, NO_OP } from \"@ue-too/being\";\nimport { UserInputPublisher } from \"../raw-input-publisher\";\nimport { CanvasPositionDimensionPublisher, getTrueRect, Observable, Observer, SubscriptionOptions, SynchronousObservable } from \"../../utils\";\nimport { EdgeAutoCameraInput } from \"src/camera\";\n\nexport enum CursorStyle {\n GRAB = \"grab\",\n DEFAULT = \"default\",\n GRABBING = \"grabbing\"\n}\n\n/**\n * @description A proxy for the canvas so that client code that needs to access \n * the canvas dimensions and position does not need to access the DOM directly.\n */\nexport interface Canvas {\n width: number;\n height: number;\n position: Point;\n setCursor: (style: CursorStyle) => void;\n dimensions: CanvasDimensions;\n detached: boolean;\n tearDown: () => void;\n}\n\nexport type CanvasDimensions = {width: number, height: number, position: Point};\n\n/**\n * @description A dummy implementation of the CanvasOperator interface. \n * This is specifically for the case where a input state machine that is for the relay of the input events to the web worker.\n * The input state machine needs a canvas operator in its context, but this context does not have any functionality.\n * @see DummyKmtInputContext\n */\nexport class DummyCanvas implements Canvas {\n width: number = 0;\n height: number = 0;\n position: Point = {x: 0, y: 0};\n setCursor: (style: CursorStyle) => void = NO_OP;\n dimensions: {width: number, height: number, position: Point} = {width: 0, height: 0, position: {x: 0, y: 0}};\n detached: boolean = false;\n tearDown: () => void = NO_OP;\n}\n\nexport class CanvasCacheInWebWorker implements Canvas {\n\n private _width: number;\n private _height: number;\n private _position: Point;\n private _postMessageFunction: typeof postMessage;\n\n constructor(postMessageFunction: typeof postMessage){\n this._width = 0;\n this._height = 0;\n this._position = {x: 0, y: 0};\n this._postMessageFunction = postMessageFunction;\n }\n\n get dimensions(): {width: number, height: number, position: Point} {\n return {width: this._width, height: this._height, position: this._position};\n }\n\n tearDown(): void {\n }\n\n set width(width: number){\n this._width = width;\n }\n\n set height(height: number){\n this._height = height;\n }\n\n set position(position: Point){\n this._position = position;\n }\n\n get width(): number {\n return this._width;\n }\n\n get height(): number {\n return this._height;\n }\n\n get position(): Point {\n return this._position;\n }\n\n setCursor(style: \"grab\" | \"default\" | \"grabbing\"): void {\n this._postMessageFunction({type: \"setCursor\", style});\n }\n\n get detached(): boolean {\n return false;\n }\n}\n\nexport class CanvasProxy implements Canvas, Observable<[CanvasDimensions]> {\n\n private _width: number = 0;\n private _height: number = 0;\n private _position: Point = {x: 0, y: 0};\n private _canvasPositionDimensionPublisher: CanvasPositionDimensionPublisher;\n private _canvas: HTMLCanvasElement | undefined;\n private _internalSizeUpdateObservable: Observable<[CanvasDimensions]>;\n\n constructor(canvas?: HTMLCanvasElement) {\n this._internalSizeUpdateObservable = new SynchronousObservable<[CanvasDimensions]>();\n\n if(canvas){\n const boundingRect = canvas.getBoundingClientRect();\n const trueRect = getTrueRect(boundingRect, window.getComputedStyle(canvas));\n this._width = trueRect.width;\n this._height = trueRect.height;\n this._position = {x: trueRect.left, y: trueRect.top};\n this._canvas = canvas;\n }\n\n this._canvasPositionDimensionPublisher = new CanvasPositionDimensionPublisher(canvas);\n this._canvasPositionDimensionPublisher.onPositionUpdate((rect)=>{\n // the rect is the canvas dimension in the DOM (the width and height attribute would need to multiply by the device pixel ratio)\n if(this._canvas == undefined){\n console.error('is not attached to any canvas should not have getting any updates');\n return;\n }\n\n this._width = rect.width;\n this._height = rect.height;\n this._position = {x: rect.left, y: rect.top};\n\n this._internalSizeUpdateObservable.notify({\n width: this._width,\n height: this._height,\n position: this._position\n });\n });\n }\n\n subscribe(observer: Observer<[CanvasDimensions]>, options?: SubscriptionOptions): () => void {\n return this._internalSizeUpdateObservable.subscribe(observer, options);\n }\n\n notify(...data: [CanvasDimensions]): void {\n this._internalSizeUpdateObservable.notify(...data);\n }\n\n get detached(): boolean {\n return this._canvas === undefined;\n }\n\n get dimensions(): {width: number, height: number, position: Point} {\n return {width: this._width, height: this._height, position: this._position};\n }\n\n get width(): number {\n return this._width;\n }\n\n /**\n * set the width of the canvas\n * the width is synonymous with the canvas style width not the canvas width\n */\n setWidth(width: number){\n if(this._canvas){\n this._canvas.width = width * window.devicePixelRatio;\n this._canvas.style.width = width + \"px\";\n }\n }\n\n /**\n * set the height of the canvas\n * the height is synonymous with the canvas style height not the canvas height\n */\n setHeight(height: number){\n if(this._canvas){\n this._canvas.height = height * window.devicePixelRatio;\n this._canvas.style.height = height + \"px\";\n }\n }\n\n get height(): number {\n return this._height;\n }\n\n get position(): Point {\n return this._position;\n }\n\n setCursor(style: \"grab\" | \"default\" | \"grabbing\"): void {\n if(this._canvas){\n this._canvas.style.cursor = style;\n }\n }\n\n tearDown(): void {\n this._canvasPositionDimensionPublisher.dispose();\n this._canvas = undefined;\n this._width = 0;\n this._height = 0;\n this._position = {x: 0, y: 0};\n }\n\n attach(canvas: HTMLCanvasElement){\n this._canvasPositionDimensionPublisher.attach(canvas);\n this._canvas = canvas;\n const boundingRect = canvas.getBoundingClientRect();\n const trueRect = getTrueRect(boundingRect, window.getComputedStyle(canvas));\n this._canvas.width = trueRect.width * window.devicePixelRatio;\n this._canvas.height = trueRect.height * window.devicePixelRatio;\n this._canvas.style.width = trueRect.width + \"px\";\n this._canvas.style.height = trueRect.height + \"px\";\n this._width = trueRect.width;\n this._height = trueRect.height;\n this._position = {x: trueRect.left, y: trueRect.top};\n this._internalSizeUpdateObservable.notify({\n width: this._width,\n height: this._height,\n position: this._position\n });\n }\n\n logCanvasTrueSize(){\n if(this._canvas === undefined){\n return;\n }\n console.log('canvas true size');\n console.log('style width', this._canvas.style.width);\n console.log('style height', this._canvas.style.height);\n console.log('width', this._canvas.width);\n console.log('height', this._canvas.height);\n console.log('proxy width', this._width);\n console.log('proxy height', this._height);\n }\n\n}\n\n/**\n * @description A proxy for the canvas that is used to communicate with the web worker.\n * The primary purpose of this class is to cache the canvas dimensions and position in the DOM to reduce the calling of the getBoundingClientRect method.\n * This class only serves as a relay of the updated canvas dimensions and position to the web worker.\n * \n */\nexport class WorkerRelayCanvas implements Canvas {\n\n private _width: number;\n private _height: number;\n private _position: Point;\n private _webWorker: Worker;\n private _canvas: HTMLCanvasElement;\n private _canvasDiemsionPublisher: CanvasPositionDimensionPublisher;\n\n constructor(canvas: HTMLCanvasElement, webWorker: Worker, canvasDiemsionPublisher: CanvasPositionDimensionPublisher){\n const boundingRect = canvas.getBoundingClientRect();\n this._canvas = canvas;\n this._webWorker = webWorker;\n const trueRect = getTrueRect(boundingRect, window.getComputedStyle(canvas));\n this._width = trueRect.width;\n this._height = trueRect.height;\n this._position = {x: trueRect.left, y: trueRect.top};\n this._webWorker.postMessage({type: \"setCanvasDimensions\", width: boundingRect.width, height: boundingRect.height, position: {x: boundingRect.left, y: boundingRect.top}});\n canvasDiemsionPublisher.onPositionUpdate((rect)=>{\n this._width = rect.width;\n this._height = rect.height;\n this._position = {x: rect.left, y: rect.top};\n this._webWorker.postMessage({type: \"updateCanvasDimensions\", width: rect.width, height: rect.height, position: {x: rect.left, y: rect.top}});\n });\n this._canvasDiemsionPublisher = canvasDiemsionPublisher;\n }\n\n get width(): number {\n return this._width;\n }\n\n get height(): number {\n return this._height;\n }\n\n tearDown(): void {\n this._canvasDiemsionPublisher.dispose();\n }\n\n get position(): Point {\n return this._position;\n }\n\n get dimensions(): {width: number, height: number, position: Point} {\n return {width: this._width, height: this._height, position: this._position};\n }\n\n get detached(): boolean {\n return false;\n }\n\n setCursor(style: \"grab\" | \"default\" | \"grabbing\"): void {\n this._canvas.style.cursor = style;\n }\n}\n\n/**\n * @description The context for the keyboard mouse and trackpad input state machine.\n * \n * @category Input State Machine\n */\nexport interface KmtInputContext extends BaseContext {\n alignCoordinateSystem: boolean;\n canvas: Canvas;\n notifyOnPan: (delta: Point) => void;\n notifyOnZoom: (zoomAmount: number, anchorPoint: Point) => void;\n notifyOnRotate: (deltaRotation: number) => void;\n setInitialCursorPosition: (position: Point) => void;\n cancelCurrentAction: () => void;\n initialCursorPosition: Point;\n setCursorPosition: (position: Point) => void;\n toggleOnEdgeAutoCameraInput: () => void;\n toggleOffEdgeAutoCameraInput: () => void;\n}\n\n/**\n * @description A dummy implementation of the KmtInputContext interface.\n * This is specifically for the case where a input state machine that is for the relay of the input events to the web worker.\n * The input state machine needs a context, but this context does not have any functionality.\n */\nexport class DummyKmtInputContext implements KmtInputContext {\n\n public alignCoordinateSystem: boolean = false;\n public canvas: Canvas = new DummyCanvas();\n public initialCursorPosition: Point = {x: 0, y: 0};\n\n constructor(){\n\n }\n\n toggleOnEdgeAutoCameraInput: () => void = NO_OP;\n toggleOffEdgeAutoCameraInput: () => void = NO_OP;\n setCursorPosition: (position: Point) => void = NO_OP;\n\n notifyOnPan(delta: Point): void {\n }\n\n notifyOnZoom(zoomAmount: number, anchorPoint: Point): void {\n }\n\n notifyOnRotate(deltaRotation: number): void {\n }\n \n setInitialCursorPosition(position: Point): void {\n }\n\n cleanup(): void {\n }\n\n setup(): void {\n }\n\n cancelCurrentAction(): void {\n }\n}\n\n/**\n * @description The observable input tracker.\n * This is used as the context for the keyboard mouse and trackpad input state machine.\n * \n * @category Input State Machine\n */\nexport class ObservableInputTracker implements KmtInputContext {\n\n private _alignCoordinateSystem: boolean;\n private _canvasOperator: Canvas;\n private _inputPublisher: UserInputPublisher;\n private _initialCursorPosition: Point;\n private _edgeAutoCameraInput: EdgeAutoCameraInput;\n private _padding: number = 50;\n\n constructor(canvasOperator: Canvas, inputPublisher: UserInputPublisher, edgeAutoCameraInput: EdgeAutoCameraInput){\n this._alignCoordinateSystem = true;\n this._canvasOperator = canvasOperator;\n this._inputPublisher = inputPublisher;\n this._initialCursorPosition = {x: 0, y: 0};\n this._edgeAutoCameraInput = edgeAutoCameraInput;\n }\n\n get alignCoordinateSystem(): boolean {\n return this._alignCoordinateSystem;\n }\n\n get canvas(): Canvas {\n return this._canvasOperator;\n }\n\n get initialCursorPosition(): Point {\n return this._initialCursorPosition;\n }\n\n set alignCoordinateSystem(value: boolean){\n this._alignCoordinateSystem = value;\n }\n\n notifyOnPan(delta: Point): void {\n this._inputPublisher.notifyPan(delta);\n }\n\n notifyOnZoom(zoomAmount: number, anchorPoint: Point): void {\n this._inputPublisher.notifyZoom(zoomAmount, anchorPoint);\n }\n\n notifyOnRotate(deltaRotation: number): void {\n this._inputPublisher.notifyRotate(deltaRotation);\n }\n\n cancelCurrentAction(): void {\n this._initialCursorPosition = {x: 0, y: 0};\n }\n\n setInitialCursorPosition(position: Point): void {\n this._initialCursorPosition = position;\n }\n\n toggleOnEdgeAutoCameraInput(): void {\n this._edgeAutoCameraInput.toggleOn();\n }\n\n toggleOffEdgeAutoCameraInput(): void {\n this._edgeAutoCameraInput.toggleOff();\n }\n\n setCursorPosition(position: Point): void {\n if(withinEdgeOfCanvas(position, {left: this._canvasOperator.dimensions.position.x, top: this._canvasOperator.dimensions.position.y, width: this._canvasOperator.dimensions.width, height: this._canvasOperator.dimensions.height}, this._padding)){\n const horizontalEdge = pointInWhichHorizontalEdgeOfCanvas(position, {left: this._canvasOperator.dimensions.position.x, top: this._canvasOperator.dimensions.position.y, width: this._canvasOperator.dimensions.width, height: this._canvasOperator.dimensions.height}, this._padding);\n const verticalEdge = pointInWhichVerticalEdgeOfCanvas(position, {left: this._canvasOperator.dimensions.position.x, top: this._canvasOperator.dimensions.position.y, width: this._canvasOperator.dimensions.width, height: this._canvasOperator.dimensions.height}, this._padding);\n this._edgeAutoCameraInput.setDirection(horizontalEdge, verticalEdge);\n } else {\n this._edgeAutoCameraInput.setDirection('none', 'none');\n }\n }\n\n cleanup(): void {\n }\n\n setup(): void {\n }\n}\n\nfunction withinEdgeOfCanvas(position: Point, boundingBox: {left: number, top: number, width: number, height: number}, padding: number): boolean {\n return position.x <= boundingBox.left + padding || position.x >= boundingBox.left + boundingBox.width - padding || position.y <= boundingBox.top + padding || position.y >= boundingBox.top + boundingBox.height - padding;\n}\n\nfunction pointInWhichHorizontalEdgeOfCanvas(position: Point, boundingBox: {left: number, top: number, width: number, height: number}, padding: number): 'left' | 'right' | 'none' {\n if(position.x <= boundingBox.left + padding){\n return 'left';\n }\n if(position.x >= boundingBox.left + boundingBox.width - padding){\n return 'right';\n }\n return 'none';\n}\n\nfunction pointInWhichVerticalEdgeOfCanvas(position: Point, boundingBox: {left: number, top: number, width: number, height: number}, padding: number): 'up' | 'down' | 'none' {\n if(position.y <= boundingBox.top + padding){\n return 'up';\n }\n if(position.y >= boundingBox.top + boundingBox.height - padding){\n return 'down';\n }\n return 'none';\n}\n",
38
+ "import type { Point } from \"@ue-too/math\";\nimport { RawUserInputPublisher } from \"../raw-input-publisher\";\nimport { BaseContext } from \"@ue-too/being\";\nimport { Canvas } from \"./kmt-input-context\";\n\n/**\n * @description The touch points.\n * \n * @category Input State Machine\n */\nexport type TouchPoints = {\n ident: number,\n x: number,\n y: number,\n}\n\nexport interface TouchContext extends BaseContext{\n addTouchPoints: (points: TouchPoints[]) => void;\n removeTouchPoints: (idents: number[]) => void;\n getCurrentTouchPointsCount: () => number;\n getInitialTouchPointsPositions: (idents: number[]) => TouchPoints[];\n updateTouchPoints: (pointsMoved: TouchPoints[]) => void;\n notifyOnPan: (delta: Point) => void;\n notifyOnZoom: (zoomAmount: number, anchorPoint: Point) => void; \n alignCoordinateSystem: boolean;\n canvas: Canvas;\n}\n\nexport class TouchInputTracker implements TouchContext {\n\n private _inputPublisher: RawUserInputPublisher;\n private _touchPointsMap: Map<number, TouchPoints> = new Map<number, TouchPoints>();\n private _canvas: Canvas;\n private _alignCoordinateSystem: boolean;\n\n constructor(canvas: Canvas, inputPublisher: RawUserInputPublisher) {\n this._canvas = canvas;\n this._inputPublisher = inputPublisher;\n this._alignCoordinateSystem = true;\n }\n\n addTouchPoints(points: TouchPoints[]): void {\n points.forEach((point)=>{\n this._touchPointsMap.set(point.ident, {...point});\n });\n }\n\n removeTouchPoints(identifiers: number[]): void {\n identifiers.forEach((ident)=>{\n if(this._touchPointsMap.has(ident)){\n this._touchPointsMap.delete(ident);\n }\n });\n }\n\n getCurrentTouchPointsCount(): number {\n return this._touchPointsMap.size;\n }\n\n getInitialTouchPointsPositions(idents: number[]): TouchPoints[] {\n const res: TouchPoints[] = [];\n idents.forEach((ident)=>{\n if(this._touchPointsMap.has(ident)){\n const point = this._touchPointsMap.get(ident);\n if(point){\n res.push(point);\n }\n }\n });\n return res; \n }\n\n updateTouchPoints(pointsMoved: TouchPoints[]): void {\n pointsMoved.forEach((point)=>{\n if(this._touchPointsMap.has(point.ident)){\n this._touchPointsMap.set(point.ident, {...point});\n }\n });\n }\n\n notifyOnPan(delta: Point): void {\n this._inputPublisher.notifyPan(delta);\n }\n\n notifyOnZoom(zoomAmount: number, anchorPoint: Point): void {\n this._inputPublisher.notifyZoom(zoomAmount, anchorPoint);\n }\n\n get alignCoordinateSystem(): boolean {\n return this._alignCoordinateSystem;\n }\n\n set alignCoordinateSystem(value: boolean) {\n this._alignCoordinateSystem = value;\n }\n\n get canvas(): Canvas {\n return this._canvas;\n }\n\n cleanup(): void {\n }\n\n setup(): void {\n }\n}\n",
39
+ "import { PointCal } from \"@ue-too/math\";\nimport { EventReactions, EventGuards, Guard, TemplateState, TemplateStateMachine } from \"@ue-too/being\";\nimport { TouchContext, TouchPoints } from \"./touch-input-context\";\n\nexport type TouchStates = \"IDLE\" | \"PENDING\" | \"IN_PROGRESS\";\n\n/**\n * @description The touch event payload.\n * \n * @category Input State Machine\n */\nexport type TouchEventPayload = {\n points: TouchPoints[];\n};\n\n/**\n * @description The touch event mapping.\n * \n * @category Input State Machine\n */\nexport type TouchEventMapping = {\n touchstart: TouchEventPayload;\n touchmove: TouchEventPayload;\n touchend: TouchEventPayload;\n}\n\n/**\n * @description The idle state of the touch input state machine.\n * \n * @category Input State Machine\n */\nexport class IdleState extends TemplateState<TouchEventMapping, TouchContext, TouchStates> {\n\n private _eventReactions: EventReactions<TouchEventMapping, TouchContext, TouchStates> = {\n touchstart: {\n action: this.touchstart,\n defaultTargetState: \"IDLE\",\n },\n touchend: {\n action: this.touchend,\n defaultTargetState: \"IDLE\",\n },\n };\n\n protected _guards: Guard<TouchContext, \"touchPointsCount\"> = {\n touchPointsCount: ((context: TouchContext) => {\n return context.getCurrentTouchPointsCount() === 2;\n }).bind(this)\n };\n\n protected _eventGuards: Partial<EventGuards<TouchEventMapping, TouchStates, TouchContext, typeof this._guards>> = {\n touchstart: [{\n guard: \"touchPointsCount\",\n target: \"PENDING\",\n }],\n touchend: [{\n guard: \"touchPointsCount\",\n target: \"PENDING\",\n }],\n };\n\n get eventReactions(): EventReactions<TouchEventMapping, TouchContext, TouchStates> {\n return this._eventReactions;\n }\n\n touchstart(context: TouchContext, payload: TouchEventPayload): void {\n context.addTouchPoints(payload.points);\n }\n\n touchend(context: TouchContext, payload: TouchEventPayload): void {\n context.removeTouchPoints(payload.points.map(p => p.ident));\n }\n}\n\n/**\n * @description The pending state of the touch input state machine.\n * \n * @category Input State Machine\n */\nexport class PendingState extends TemplateState<TouchEventMapping, TouchContext, TouchStates> {\n\n private _eventReactions: EventReactions<TouchEventMapping, TouchContext, TouchStates> = {\n touchstart: {\n action: this.touchstart,\n defaultTargetState: \"IDLE\",\n },\n touchend: {\n action: this.touchend,\n defaultTargetState: \"IDLE\",\n },\n touchmove: {\n action: this.touchmove,\n defaultTargetState: \"IN_PROGRESS\",\n },\n };\n\n get eventReactions(): EventReactions<TouchEventMapping, TouchContext, TouchStates> {\n return this._eventReactions;\n }\n\n touchstart(context: TouchContext, payload: TouchEventPayload): void {\n context.addTouchPoints(payload.points);\n }\n\n touchend(context: TouchContext, payload: TouchEventPayload): void {\n context.removeTouchPoints(payload.points.map(p => p.ident));\n }\n\n touchmove(context: TouchContext, payload: TouchEventPayload): void {\n const idents = payload.points.map(p => p.ident);\n const initialPositions = context.getInitialTouchPointsPositions(idents);\n const currentPositions = payload.points;\n const initialStartAndEndDistance = PointCal.distanceBetweenPoints(initialPositions[0], initialPositions[1]);\n const currentStartAndEndDistance = PointCal.distanceBetweenPoints(currentPositions[0], currentPositions[1]);\n const midPoint = PointCal.linearInterpolation(initialPositions[0], initialPositions[1], 0.5);\n const currentMidPoint = PointCal.linearInterpolation(currentPositions[0], currentPositions[1], 0.5);\n const midPointDelta = PointCal.subVector(midPoint, currentMidPoint);\n const cameraCenterInWindow = {x: context.canvas.position.x + context.canvas.width / 2, y: context.canvas.position.y + context.canvas.height / 2};\n const midPointInViewPort = PointCal.subVector(midPoint, cameraCenterInWindow);\n let panZoom = Math.abs(currentStartAndEndDistance - initialStartAndEndDistance) > PointCal.distanceBetweenPoints(midPoint, currentMidPoint) ? \"ZOOMING\" : \"PANNING\";\n \n context.updateTouchPoints(currentPositions);\n switch(panZoom){\n case \"ZOOMING\":\n context.notifyOnZoom((currentStartAndEndDistance - initialStartAndEndDistance) * 0.005, midPointInViewPort);\n break;\n case \"PANNING\":\n context.notifyOnPan(midPointDelta);\n break;\n default:\n console.warn(\"Unknown panZoom state\", panZoom);\n break;\n }\n }\n}\n\n/**\n * @description The in progress state of the touch input state machine.\n * \n * @category Input State Machine\n */\nexport class InProgressState extends TemplateState<TouchEventMapping, TouchContext, TouchStates> {\n\n private _eventReactions: EventReactions<TouchEventMapping, TouchContext, TouchStates> = {\n touchmove: {\n action: this.touchmove,\n defaultTargetState: \"IN_PROGRESS\",\n },\n touchend: {\n action: this.touchend,\n defaultTargetState: \"IDLE\",\n },\n touchstart: {\n action: ()=> \"IDLE\",\n defaultTargetState: \"IDLE\",\n },\n };\n\n get eventReactions(): EventReactions<TouchEventMapping, TouchContext, TouchStates> {\n return this._eventReactions;\n }\n\n touchmove(context: TouchContext, payload: TouchEventPayload): void {\n const idents = payload.points.map(p => p.ident);\n const initialPositions = context.getInitialTouchPointsPositions(idents);\n const currentPositions = payload.points;\n const initialStartAndEndDistance = PointCal.distanceBetweenPoints(initialPositions[0], initialPositions[1]);\n const currentStartAndEndDistance = PointCal.distanceBetweenPoints(currentPositions[0], currentPositions[1]);\n const midPoint = PointCal.linearInterpolation(initialPositions[0], initialPositions[1], 0.5);\n const currentMidPoint = PointCal.linearInterpolation(currentPositions[0], currentPositions[1], 0.5);\n const midPointDelta = PointCal.subVector(midPoint, currentMidPoint);\n const cameraCenterInWindow = {x: context.canvas.position.x + context.canvas.width / 2, y: context.canvas.position.y + context.canvas.height / 2};\n const midPointInViewPort = PointCal.subVector(midPoint, cameraCenterInWindow);\n let panZoom = Math.abs(currentStartAndEndDistance - initialStartAndEndDistance) > PointCal.distanceBetweenPoints(midPoint, currentMidPoint) ? \"ZOOMING\" : \"PANNING\";\n \n context.updateTouchPoints(currentPositions);\n switch(panZoom){\n case \"ZOOMING\":\n if(!context.alignCoordinateSystem){\n midPointInViewPort.y = -midPointInViewPort.y;\n }\n context.notifyOnZoom(-(initialStartAndEndDistance - currentStartAndEndDistance) * 0.005, midPointInViewPort);\n break;\n case \"PANNING\":\n if(!context.alignCoordinateSystem){\n midPointDelta.y = -midPointDelta.y;\n }\n context.notifyOnPan(midPointDelta);\n break;\n default:\n console.warn(\"Unknown panZoom state\", panZoom);\n break;\n }\n }\n\n touchend(context: TouchContext, payload: TouchEventPayload): void {\n context.removeTouchPoints(payload.points.map(p => p.ident));\n }\n}\n\n/**\n * @description The touch input state machine.\n * \n * @category Input State Machine\n */\nexport type TouchInputStateMachine = TemplateStateMachine<TouchEventMapping, TouchContext, TouchStates>;\n\nexport function createTouchInputStateMachine(context: TouchContext): TouchInputStateMachine {\n return new TemplateStateMachine<TouchEventMapping, TouchContext, TouchStates>(\n {\n IDLE: new IdleState(),\n PENDING: new PendingState(),\n IN_PROGRESS: new InProgressState(),\n }, \"IDLE\", context);\n}\n",
40
+ "import { EventReactions, EventGuards, Guard, TemplateState, TemplateStateMachine, NO_OP, StateMachine, EventArgs, EventHandledResult, CreateStateType } from \"@ue-too/being\";\nimport type { Point } from \"@ue-too/math\";\nimport { PointCal } from \"@ue-too/math\";\nimport { Canvas, CursorStyle, DummyKmtInputContext, KmtInputContext } from \"./kmt-input-context\";\n\nconst KMT_INPUT_STATES = [\"IDLE\", \"READY_TO_PAN_VIA_SPACEBAR\", \"READY_TO_PAN_VIA_SCROLL_WHEEL\", \"PAN\", \"INITIAL_PAN\", \"PAN_VIA_SCROLL_WHEEL\", \"DISABLED\"] as const;\n/**\n * @description The possible states of the keyboard mouse and trackpad input state machine.\n * \n * @category Input State Machine\n */\nexport type KmtInputStates = CreateStateType<typeof KMT_INPUT_STATES>;\n\n/**\n * @description The payload for the pointer event.\n * \n * @category Input State Machine\n */\nexport type PointerEventPayload = {\n x: number;\n y: number;\n}\n\ntype EmptyPayload = {};\n\n/**\n * @description The payload for the scroll event.\n * \n * @category Input State Machine\n */\nexport type ScrollEventPayload = {\n deltaX: number;\n deltaY: number;\n}\n\n/**\n * @description The payload for the scroll with ctrl event.\n * \n * @category Input State Machine\n */\nexport type ScrollWithCtrlEventPayload = {\n deltaX: number;\n deltaY: number;\n x: number;\n y: number;\n}\n\n/**\n * @description The payload mapping for the events of the keyboard mouse and trackpad input state machine.\n * \n * @category Input State Machine\n */\nexport type KmtInputEventMapping = {\n leftPointerDown: PointerEventPayload;\n leftPointerUp: PointerEventPayload;\n leftPointerMove: PointerEventPayload;\n spacebarDown: EmptyPayload;\n spacebarUp: EmptyPayload;\n stayIdle: EmptyPayload;\n cursorOnElement: EmptyPayload;\n scroll: ScrollEventPayload;\n scrollWithCtrl: ScrollWithCtrlEventPayload;\n middlePointerDown: PointerEventPayload;\n middlePointerUp: PointerEventPayload;\n middlePointerMove: PointerEventPayload;\n disable: EmptyPayload;\n enable: EmptyPayload;\n pointerMove: PointerEventPayload;\n}\n\n/**\n * @description Converts the point from window coordinates(browser) to view port coordinates.\n * \n * @category Input State Machine\n */\nexport function convertFromWindow2ViewPort(point: Point, canvas: HTMLCanvasElement): Point {\n const canvasBoundingRect = canvas.getBoundingClientRect();\n const cameraCenterInWindow = {x: canvasBoundingRect.left + (canvasBoundingRect.right - canvasBoundingRect.left) / 2, y: canvasBoundingRect.top + (canvasBoundingRect.bottom - canvasBoundingRect.top) / 2};\n return PointCal.subVector(point, cameraCenterInWindow);\n}\n\nexport function convertFromWindow2ViewPortWithCanvasOperator(point: Point, canvasOperator: Canvas): Point {\n const cameraCenterInWindow = {x: canvasOperator.position.x + (canvasOperator.width / 2), y: canvasOperator.position.y + (canvasOperator.height / 2)};\n return PointCal.subVector(point, cameraCenterInWindow);\n}\n\nexport function convertFromWindow2ViewPortCanvasOperator(point: Point, canvasOperator: Canvas): Point {\n const cameraCenterInWindow = {x: canvasOperator.position.x + (canvasOperator.width / 2), y: canvasOperator.position.y + (canvasOperator.height / 2)};\n return PointCal.subVector(point, cameraCenterInWindow);\n}\n\n/**\n * @description The possible target states of the idle state.\n * \n * @category Input State Machine\n */\nexport type KmtIdleStatePossibleTargetStates = \"IDLE\" | \"READY_TO_PAN_VIA_SPACEBAR\" | \"READY_TO_PAN_VIA_SCROLL_WHEEL\" | \"DISABLED\";\n\n/**\n * @description The idle state of the keyboard mouse and trackpad input state machine.\n * \n * @category Input State Machine\n */\nexport class KmtIdleState extends TemplateState<KmtInputEventMapping, KmtInputContext, KmtInputStates> {\n\n constructor() {\n super();\n }\n\n protected _guards: Guard<KmtInputContext, \"isIdle\"> = {\n isIdle: () => true,\n }\n\n protected _eventGuards: Partial<EventGuards<KmtInputEventMapping, KmtInputStates, KmtInputContext, Guard<KmtInputContext>>> = {\n }\n\n get eventReactions(): EventReactions<KmtInputEventMapping, KmtInputContext, KmtInputStates> {\n return this._eventReactions;\n }\n\n protected _eventReactions: EventReactions<KmtInputEventMapping, KmtInputContext, KmtInputStates> = {\n spacebarDown: {\n action: this.spacebarDownHandler,\n defaultTargetState: \"READY_TO_PAN_VIA_SPACEBAR\",\n },\n scroll: {\n action: this.scrollHandler,\n defaultTargetState: \"IDLE\",\n },\n scrollWithCtrl: {\n action: this.scrollWithCtrlHandler,\n defaultTargetState: \"IDLE\",\n },\n middlePointerDown: {\n action: this.middlePointerDownHandler,\n defaultTargetState: \"READY_TO_PAN_VIA_SCROLL_WHEEL\",\n },\n disable: {\n action: NO_OP,\n defaultTargetState: \"DISABLED\",\n },\n pointerMove: {\n action: this.pointerMoveHandler,\n defaultTargetState: \"IDLE\",\n },\n }\n\n uponEnter(context: KmtInputContext): void {\n context.canvas.setCursor(CursorStyle.DEFAULT);\n }\n\n scrollHandler(context: KmtInputContext, payload: ScrollEventPayload): void {\n const delta = {...payload}\n if(!context.alignCoordinateSystem){\n delta.deltaY = -delta.deltaY;\n }\n context.notifyOnPan({x: delta.deltaX, y: delta.deltaY});\n }\n\n scrollWithCtrlHandler(context: KmtInputContext, payload: ScrollWithCtrlEventPayload): void {\n let scrollSensitivity = 0.005;\n if(Math.abs(payload.deltaY) > 100){\n scrollSensitivity = 0.0005;\n }\n const zoomAmount = payload.deltaY * scrollSensitivity;\n const cursorPosition = {x: payload.x, y: payload.y};\n const anchorPoint = convertFromWindow2ViewPortCanvasOperator(cursorPosition, context.canvas);\n if(!context.alignCoordinateSystem){\n anchorPoint.y = -anchorPoint.y;\n }\n context.notifyOnZoom(-(zoomAmount * 5), anchorPoint);\n }\n\n spacebarDownHandler(context: KmtInputContext, payload: EmptyPayload): void {\n // context.canvas.setCursor(CursorStyle.GRAB);\n }\n\n middlePointerDownHandler(context: KmtInputContext, payload: PointerEventPayload): void {\n context.setInitialCursorPosition({x: payload.x, y: payload.y});\n // context.canvas.setCursor(CursorStyle.GRABBING);\n }\n\n pointerMoveHandler(context: KmtInputContext, payload: PointerEventPayload): void {\n context.setCursorPosition(payload);\n }\n}\n\n/**\n * @description The possible target states of the ready to select state.\n * \n * @category Input State Machine\n */\nexport type ReadyToSelectStatePossibleTargetStates = \"IDLE\" | \"SELECTING\" | \"DISABLED\";\n\n/**\n * @description The context for the ready to select state.\n * \n * @category Input State Machine\n */\nexport type SelectionContext = {\n setSelectionEndPoint: (point: Point) => void;\n toggleSelectionBox: (show: boolean) => void;\n cleanup: () => void;\n setup: () => void;\n canvas: HTMLCanvasElement;\n}\n\n/**\n * @description The ready to select state of the keyboard mouse and trackpad input state machine.\n * \n * @category Input State Machine\n */\nexport class ReadyToSelectState extends TemplateState<KmtInputEventMapping, SelectionContext, ReadyToSelectStatePossibleTargetStates> {\n\n constructor() {\n super();\n }\n\n leftPointerMove = ((context: SelectionContext, payload: PointerEventPayload): void => {\n const viewportPoint = convertFromWindow2ViewPort({x: payload.x, y: payload.y}, context.canvas);\n context.setSelectionEndPoint(viewportPoint);\n context.toggleSelectionBox(true);\n }).bind(this);\n\n protected _eventReactions: EventReactions<KmtInputEventMapping, SelectionContext, ReadyToSelectStatePossibleTargetStates> = {\n leftPointerUp: {\n action: () => \"IDLE\",\n defaultTargetState: \"IDLE\",\n },\n leftPointerMove: {\n action: this.leftPointerMove,\n defaultTargetState: \"SELECTING\",\n },\n disable: {\n action: NO_OP,\n defaultTargetState: \"DISABLED\",\n },\n }\n\n get eventReactions(): EventReactions<KmtInputEventMapping, SelectionContext, ReadyToSelectStatePossibleTargetStates> {\n return this._eventReactions;\n }\n\n}\n\nexport class DisabledState extends TemplateState<KmtInputEventMapping, KmtInputContext, KmtInputStates> {\n constructor() {\n super();\n }\n\n uponEnter(context: KmtInputContext): void {\n context.canvas.setCursor(CursorStyle.DEFAULT);\n // context.toggleOnEdgeAutoCameraInput();\n }\n\n beforeExit(context: KmtInputContext): void {\n // context.toggleOffEdgeAutoCameraInput();\n }\n\n get eventReactions(): EventReactions<KmtInputEventMapping, KmtInputContext, KmtInputStates> {\n return {\n \"enable\": {\n action: NO_OP,\n defaultTargetState: \"IDLE\",\n },\n \"pointerMove\": {\n action: (context, eventPayload) => {\n context.setCursorPosition({x: eventPayload.x, y: eventPayload.y});\n }\n }\n };\n }\n}\n\n/**\n * @description The ready to pan via space bar state of the keyboard mouse and trackpad input state machine.\n * \n * @category Input State Machine\n */\nexport class ReadyToPanViaSpaceBarState extends TemplateState<KmtInputEventMapping, KmtInputContext, KmtInputStates> {\n\n constructor() {\n super();\n }\n\n protected _eventReactions: EventReactions<KmtInputEventMapping, KmtInputContext, KmtInputStates> = {\n spacebarUp: {\n action: NO_OP,\n defaultTargetState: \"IDLE\",\n },\n leftPointerDown: {\n action: this.leftPointerDownHandler,\n defaultTargetState: \"INITIAL_PAN\",\n },\n disable: {\n action: (context) => context.cancelCurrentAction(),\n defaultTargetState: \"DISABLED\",\n },\n leftPointerMove: {\n action: NO_OP,\n defaultTargetState: \"READY_TO_PAN_VIA_SPACEBAR\",\n }\n }\n\n uponEnter(context: KmtInputContext): void {\n context.canvas.setCursor(CursorStyle.GRAB);\n }\n\n get eventReactions(): EventReactions<KmtInputEventMapping, KmtInputContext, KmtInputStates> {\n return this._eventReactions;\n }\n\n leftPointerDownHandler(context: KmtInputContext, payload: PointerEventPayload): void {\n context.setInitialCursorPosition({x: payload.x, y: payload.y});\n }\n}\n\n/**\n * @description The initial pan state of the keyboard mouse and trackpad input state machine.\n * \n * @category Input State Machine\n */\nexport class InitialPanState extends TemplateState<KmtInputEventMapping, KmtInputContext, KmtInputStates> {\n\n constructor() {\n super();\n }\n\n protected _eventReactions: EventReactions<KmtInputEventMapping, KmtInputContext, KmtInputStates> = {\n leftPointerUp: {\n action: NO_OP,\n defaultTargetState: \"READY_TO_PAN_VIA_SPACEBAR\",\n },\n leftPointerMove: {\n action: this.leftPointerMoveHandler,\n defaultTargetState: \"PAN\",\n },\n spacebarUp: {\n action: () => \"IDLE\",\n defaultTargetState: \"IDLE\",\n },\n leftPointerDown: {\n action: () => \"PAN\",\n defaultTargetState: \"PAN\",\n },\n }\n\n get eventReactions(): EventReactions<KmtInputEventMapping, KmtInputContext, KmtInputStates> {\n return this._eventReactions;\n }\n\n uponEnter(context: KmtInputContext): void {\n context.canvas.setCursor(CursorStyle.GRABBING);\n }\n\n leftPointerMoveHandler(context: KmtInputContext, payload: PointerEventPayload): void {\n const delta = {\n x: context.initialCursorPosition.x - payload.x,\n y: context.initialCursorPosition.y - payload.y,\n };\n if(!context.alignCoordinateSystem){\n delta.y = -delta.y;\n }\n context.notifyOnPan(delta);\n context.setInitialCursorPosition({x: payload.x, y: payload.y});\n }\n}\n\n/**\n * @description The ready to pan via scroll wheel state of the keyboard mouse and trackpad input state machine.\n * \n * @category Input State Machine\n */\nexport class ReadyToPanViaScrollWheelState extends TemplateState<KmtInputEventMapping, KmtInputContext, KmtInputStates> {\n\n constructor() {\n super();\n }\n\n protected _eventReactions: EventReactions<KmtInputEventMapping, KmtInputContext, KmtInputStates> = {\n middlePointerUp: {\n action: NO_OP,\n defaultTargetState: \"IDLE\",\n },\n middlePointerMove: {\n action: NO_OP,\n defaultTargetState: \"PAN_VIA_SCROLL_WHEEL\",\n },\n }\n\n get eventReactions(): EventReactions<KmtInputEventMapping, KmtInputContext, KmtInputStates> {\n return this._eventReactions;\n }\n\n uponEnter(context: KmtInputContext): void {\n context.canvas.setCursor(CursorStyle.GRABBING);\n }\n}\n\n/**\n * @description The pan state of the keyboard mouse and trackpad input state machine.\n * \n * @category Input State Machine\n */\nexport class PanState extends TemplateState<KmtInputEventMapping, KmtInputContext, KmtInputStates> {\n\n constructor() {\n super();\n }\n\n protected _eventReactions: EventReactions<KmtInputEventMapping, KmtInputContext, KmtInputStates> = {\n leftPointerUp: {\n action: NO_OP,\n defaultTargetState: \"READY_TO_PAN_VIA_SPACEBAR\",\n },\n leftPointerMove: {\n action: this.leftPointerMoveHandler,\n defaultTargetState: \"PAN\",\n },\n spacebarUp: {\n action: NO_OP, \n defaultTargetState: \"IDLE\",\n },\n }\n\n get eventReactions(): EventReactions<KmtInputEventMapping, KmtInputContext, KmtInputStates> {\n return this._eventReactions;\n }\n\n uponEnter(context: KmtInputContext): void {\n context.canvas.setCursor(CursorStyle.GRABBING);\n }\n\n beforeExit(context: KmtInputContext): void {\n context.canvas.setCursor(CursorStyle.DEFAULT);\n }\n\n leftPointerMoveHandler(context: KmtInputContext, payload: PointerEventPayload): void {\n const delta = {\n x: context.initialCursorPosition.x - payload.x,\n y: context.initialCursorPosition.y - payload.y,\n };\n if(!context.alignCoordinateSystem){\n delta.y = -delta.y;\n }\n context.notifyOnPan(delta);\n context.setInitialCursorPosition({x: payload.x, y: payload.y});\n }\n}\n\n/**\n * @description The pan via scroll wheel state of the keyboard mouse and trackpad input state machine.\n * \n * @category Input State Machine\n */\nexport class PanViaScrollWheelState extends TemplateState<KmtInputEventMapping, KmtInputContext, KmtInputStates> {\n\n protected _eventReactions: EventReactions<KmtInputEventMapping, KmtInputContext, KmtInputStates> = {\n middlePointerUp: {\n action: NO_OP,\n defaultTargetState: \"IDLE\",\n },\n middlePointerMove: {\n action: this.middlePointerMoveHandler,\n defaultTargetState: \"PAN_VIA_SCROLL_WHEEL\",\n },\n }\n\n get eventReactions(): EventReactions<KmtInputEventMapping, KmtInputContext, KmtInputStates> {\n return this._eventReactions;\n }\n\n middlePointerMoveHandler(context: KmtInputContext, payload: PointerEventPayload): void {\n const delta = {\n x: context.initialCursorPosition.x - payload.x,\n y: context.initialCursorPosition.y - payload.y,\n };\n if(!context.alignCoordinateSystem){\n delta.y = -delta.y;\n }\n context.notifyOnPan(delta);\n context.setInitialCursorPosition({x: payload.x, y: payload.y});\n }\n\n uponEnter(context: KmtInputContext): void {\n context.canvas.setCursor(CursorStyle.GRABBING);\n }\n}\n\nexport class KmtEmptyState extends TemplateState<KmtInputEventMapping, KmtInputContext, KmtInputStates> {\n\n constructor() {\n super();\n }\n\n get eventReactions(): EventReactions<KmtInputEventMapping, KmtInputContext, KmtInputStates> {\n return {};\n }\n \n}\n\nexport type KmtInputStateMachine = TemplateStateMachine<KmtInputEventMapping, KmtInputContext, KmtInputStates>;\n\n/**\n * @description Creates the keyboard mouse and trackpad input state machine.\n * \n * @category Input State Machine\n */\nexport function createKmtInputStateMachine(context: KmtInputContext): KmtInputStateMachine {\n const states = {\n IDLE: new KmtIdleState(),\n READY_TO_PAN_VIA_SPACEBAR: new ReadyToPanViaSpaceBarState(),\n INITIAL_PAN: new InitialPanState(),\n PAN: new PanState(),\n READY_TO_PAN_VIA_SCROLL_WHEEL: new ReadyToPanViaScrollWheelState(),\n PAN_VIA_SCROLL_WHEEL: new PanViaScrollWheelState(),\n DISABLED: new DisabledState(),\n }\n return new TemplateStateMachine(states, \"IDLE\", context);\n}\n\nexport class KmtInputStateMachineWebWorkerProxy extends TemplateStateMachine<KmtInputEventMapping, KmtInputContext, KmtInputStates> {\n\n private _webworker: Worker;\n\n constructor(webworker: Worker){\n super({\n \"IDLE\": new KmtEmptyState(),\n \"READY_TO_PAN_VIA_SPACEBAR\": new KmtEmptyState(),\n \"INITIAL_PAN\": new KmtEmptyState(),\n \"PAN\": new KmtEmptyState(),\n \"READY_TO_PAN_VIA_SCROLL_WHEEL\": new KmtEmptyState(),\n \"PAN_VIA_SCROLL_WHEEL\": new KmtEmptyState(),\n \"DISABLED\": new DisabledState(),\n }, \"IDLE\", new DummyKmtInputContext());\n this._webworker = webworker;\n }\n\n happens(...args: EventArgs<KmtInputEventMapping, keyof KmtInputEventMapping | string>): EventHandledResult<KmtInputStates> { \n this._webworker.postMessage({\n type: \"kmtInputStateMachine\",\n event: args[0],\n payload: args[1],\n });\n return {handled: true, nextState: \"IDLE\"};\n }\n}\n",
41
+ "import { CameraMux } from \"./camera-mux\";\nimport { PointCal } from \"@ue-too/math\";\n\nexport class EdgeAutoCameraInput {\n\n private _cameraMux: CameraMux;\n private _state: 'idle' | 'moving' = 'idle';\n private _speed: number = 100; // pixels per second in viewport space\n\n private _horizontalDirection: 'left' | 'right' | 'none' = 'none';\n private _verticalDirection: 'up' | 'down' | 'none' = 'none';\n\n constructor(cameraMux: CameraMux) {\n this._cameraMux = cameraMux;\n }\n\n toggleOff(){\n this._state = 'idle';\n }\n\n toggleOn(){\n this._state = 'moving';\n }\n\n setDirection(horizontalDirection: 'left' | 'right' | 'none', verticalDirection: 'up' | 'down' | 'none'): void {\n this._horizontalDirection = horizontalDirection;\n this._verticalDirection = verticalDirection;\n }\n\n update(deltaTime: number){\n\n if(this._state === 'idle') {\n return;\n }\n\n const direction = {\n x: this._horizontalDirection === 'left' ? -1 : this._horizontalDirection === 'right' ? 1 : 0,\n y: this._verticalDirection === 'up' ? -1 : this._verticalDirection === 'down' ? 1 : 0\n };\n\n const distance = this._speed * deltaTime;\n\n const deltaVector = PointCal.multiplyVectorByScalar(direction, distance);\n\n this._cameraMux.notifyPanInput(deltaVector);\n }\n}\n"
42
+ ],
43
+ "mappings": "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",
44
+ "debugId": "F27402F8B58E843264756E2164756E21",
45
+ "names": []
46
+ }