@leafer-ui/core 1.0.0-rc.12 → 1.0.0-rc.16

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/lib/core.cjs CHANGED
@@ -1269,7 +1269,7 @@ draw$1.UI.prototype.__updateHitCanvas = function () {
1269
1269
  h.setStrokeOptions(this.__);
1270
1270
  };
1271
1271
  draw$1.UI.prototype.__hit = function (inner) {
1272
- if (draw$1.Platform.name === 'miniapp')
1272
+ if (core.Platform.name === 'miniapp')
1273
1273
  this.__drawHitPath(this.__hitCanvas);
1274
1274
  const { fill, hitFill, windingRule } = this.__;
1275
1275
  const needHitFill = (fill && hitFill === 'path') || hitFill === 'all';
package/lib/core.esm.js CHANGED
@@ -1,6 +1,6 @@
1
- import { Leafer, Leaf, BoundsHelper as BoundsHelper$1, PointHelper as PointHelper$1, UI, Platform, Rect, Group } from '@leafer-ui/draw';
1
+ import { Leafer, Leaf, BoundsHelper as BoundsHelper$1, PointHelper as PointHelper$1, UI, Rect, Group } from '@leafer-ui/draw';
2
2
  export * from '@leafer-ui/draw';
3
- import { registerUI, Creator, PropertyEvent, Debug, DataHelper, canvasSizeAttrs, LayoutEvent, RenderEvent, Event, EventCreator, registerUIEvent, LeafList, PointHelper, LeafHelper, BoundsHelper, Bounds, ResizeEvent, LeaferEvent, CanvasManager } from '@leafer/core';
3
+ import { registerUI, Creator, PropertyEvent, Debug, DataHelper, canvasSizeAttrs, LayoutEvent, RenderEvent, Event, EventCreator, registerUIEvent, LeafList, PointHelper, LeafHelper, BoundsHelper, Bounds, ResizeEvent, LeaferEvent, CanvasManager, Platform } from '@leafer/core';
4
4
 
5
5
  /******************************************************************************
6
6
  Copyright (c) Microsoft Corporation.
@@ -1 +1 @@
1
- import{Leafer as t,Leaf as e,BoundsHelper as i,PointHelper as a,UI as s,Platform as r,Rect as n,Group as o}from"@leafer-ui/draw";export*from"@leafer-ui/draw";import{registerUI as h,Creator as d,PropertyEvent as g,Debug as c,DataHelper as l,canvasSizeAttrs as u,LayoutEvent as p,RenderEvent as m,Event as v,EventCreator as _,registerUIEvent as f,LeafList as D,PointHelper as E,LeafHelper as y,BoundsHelper as O,Bounds as T,ResizeEvent as R,LeaferEvent as P,CanvasManager as w}from"@leafer/core";function C(t,e,i,a){var s,r=arguments.length,n=r<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,i):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(t,e,i,a);else for(var o=t.length-1;o>=0;o--)(s=t[o])&&(n=(r<3?s(n):r>3?s(e,i,n):s(e,i))||n);return r>3&&n&&Object.defineProperty(e,i,n),n}"function"==typeof SuppressedError&&SuppressedError;let L=class extends t{get __tag(){return"App"}get isApp(){return!0}constructor(t,e){super(t,e)}init(t,e){if(super.init(t,e),t){const{ground:e,tree:i,sky:a,editor:s}=t;e&&(this.ground=this.addLeafer(e)),(i||s)&&(this.tree=this.addLeafer(i)),(a||s)&&(this.sky=this.addLeafer(a||{type:"draw",usePartRender:!1})),s&&(this.editor=d.editor(s),this.sky.add(this.editor))}}__setApp(){const{canvas:t}=this,{realCanvas:e,view:i}=this.config;e||i===this.canvas.view||!t.parentView?this.realCanvas=!0:t.unrealCanvas(),this.leafer=this,this.watcher.disable(),this.layouter.disable(),this.__eventIds.push(this.on_(g.CHANGE,this.__onPropertyChange,this))}start(){super.start(),this.children.forEach((t=>t.start()))}stop(){this.children.forEach((t=>t.stop())),super.stop()}unlockLayout(){super.unlockLayout(),this.children.forEach((t=>t.unlockLayout()))}lockLayout(){super.lockLayout(),this.children.forEach((t=>t.lockLayout()))}forceRender(t){this.children.forEach((e=>e.forceRender(t)))}addLeafer(e){const i=new t(e);return this.add(i),i}add(t){if(!t.view){if(this.realCanvas&&!this.canvas.bounds)return void setTimeout((()=>this.add(t)),10);t.init(this.__getChildConfig(t.userConfig),this)}super.add(t),this.__listenChildEvents(t)}__onPropertyChange(){c.showHitView&&this.children.forEach((t=>t.forceUpdate("surface")))}__onCreated(){this.created=this.children.every((t=>t.created))}__onReady(){this.children.every((t=>t.ready))&&super.__onReady()}__onViewReady(){this.children.every((t=>t.viewReady))&&super.__onViewReady()}__onChildRenderEnd(t){this.renderer.addBlock(t.renderBounds),this.viewReady&&this.renderer.update()}__render(t,e){this.children.forEach((e=>t.copyWorld(e.canvas)))}__onResize(t){this.children.forEach((e=>e.resize(t))),super.__onResize(t)}__checkUpdateLayout(){this.children.forEach((t=>t.__layout.update()))}__getChildConfig(t){let e=Object.assign({},this.config);return e.hittable=e.realCanvas=void 0,t&&l.assign(e,t),this.autoLayout&&l.copyAttrs(e,this,u),e.view=this.realCanvas?void 0:this.view,e.fill=void 0,e}__listenChildEvents(t){t.once(p.END,(()=>this.__onReady())),t.once(m.START,(()=>this.__onCreated())),t.once(m.END,(()=>this.__onViewReady())),this.realCanvas&&this.__eventIds.push(t.on_(m.END,this.__onChildRenderEnd,this))}};L=C([h()],L);const b={},M={isHoldSpaceKey:()=>M.isHold("Space"),isHold:t=>b[t],setDownCode(t){b[t]||(b[t]=!0)},setUpCode(t){b[t]=!1}},A={LEFT:1,RIGHT:2,MIDDLE:4,defaultLeft(t){t.buttons||(t.buttons=1)},left:t=>1===t.buttons,right:t=>2===t.buttons,middle:t=>4===t.buttons};class x extends v{get spaceKey(){return M.isHoldSpaceKey()}get left(){return A.left(this)}get right(){return A.right(this)}get middle(){return A.middle(this)}constructor(t){super(t.type),this.bubbles=!0,Object.assign(this,t)}getPage(){return this.current.getPagePoint(this)}getInner(t){return t||(t=this.current),t.getInnerPoint(this)}getLocal(t){return t||(t=this.current),t.getLocalPoint(this)}static changeName(t,e){_.changeName(t,e)}}let B=class extends x{};B.POINTER="pointer",B.BEFORE_DOWN="pointer.before_down",B.BEFORE_MOVE="pointer.before_move",B.BEFORE_UP="pointer.before_up",B.DOWN="pointer.down",B.MOVE="pointer.move",B.UP="pointer.up",B.OVER="pointer.over",B.OUT="pointer.out",B.ENTER="pointer.enter",B.LEAVE="pointer.leave",B.TAP="tap",B.DOUBLE_TAP="double_tap",B.CLICK="click",B.DOUBLE_CLICK="double_click",B.LONG_PRESS="long_press",B.LONG_TAP="long_tap",B.MENU="pointer.menu",B.MENU_TAP="pointer.menu_tap",B=C([f()],B);const k={};let S=class extends B{static setList(t){this.list=t instanceof D?t:new D(t)}static setData(t){this.data=t}getPageMove(t){return this.assignMove(t),this.current.getPagePoint(k,null,!0)}getInnerMove(t,e){return t||(t=this.current),this.assignMove(e),t.getInnerPoint(k,null,!0)}getLocalMove(t,e){return t||(t=this.current),this.assignMove(e),t.getLocalPoint(k,null,!0)}getPageTotal(){return this.getPageMove(!0)}getInnerTotal(t){return this.getInnerMove(t,!0)}getLocalTotal(t){return this.getLocalMove(t,!0)}assignMove(t){k.x=t?this.totalX:this.moveX,k.y=t?this.totalY:this.moveY}};S.BEFORE_DRAG="drag.before_drag",S.START="drag.start",S.DRAG="drag",S.END="drag.end",S.OVER="drag.over",S.OUT="drag.out",S.ENTER="drag.enter",S.LEAVE="drag.leave",S=C([f()],S);let N=class extends B{static setList(t){S.setList(t)}static setData(t){S.setData(t)}};N.DROP="drop",N=C([f()],N);let W=class extends S{};W.BEFORE_MOVE="move.before_move",W.START="move.start",W.MOVE="move",W.END="move.end",W=C([f()],W);let j=class extends x{};j.BEFORE_ROTATE="rotate.before_rotate",j.START="rotate.start",j.ROTATE="rotate",j.END="rotate.end",j=C([f()],j);let z=class extends S{};z.SWIPE="swipe",z.LEFT="swipe.left",z.RIGHT="swipe.right",z.UP="swipe.up",z.DOWN="swipe.down",z=C([f()],z);let H=class extends x{};H.BEFORE_ZOOM="zoom.before_zoom",H.START="zoom.start",H.ZOOM="zoom",H.END="zoom.end",H=C([f()],H);let I=class extends x{};I.DOWN="key.down",I.HOLD="key.hold",I.UP="key.up",I=C([f()],I);const U=c.get("LeaferTypeCreator"),V={list:{},register(t,e){K[t]?U.repeat(t):K[t]=e},run(t,e){const i=K[t];i?i(e):U.error("no",t)}},{list:K,register:F}=V;F("draw",(function(t){const{config:e}=t;e.move.dragOut=!1})),F("design",(function(t){t.isApp||t.__eventIds.push(t.on_(W.BEFORE_MOVE,(e=>t.zoomLayer.move(e.moveX,e.moveY))),t.on_(H.BEFORE_ZOOM,(e=>{const{zoomLayer:i}=t,{scaleX:a}=i.__,{min:s,max:r}=t.app.config.zoom;let{scale:n}=e,o=Math.abs(a*n);o<s?n=s/a:o>r&&(n=r/a),1!==n&&(E.scaleOf(i,e,n),i.scale=a*n)})))})),t.prototype.initType=function(t){V.run(t,this)};class X{constructor(t){this.interaction=t}move(t){const{interaction:e}=this;if(!this.moveData){const{path:i}=e.selector.getByPoint(t,e.hitRadius);t.path=i,this.moveData=Object.assign(Object.assign({},t),{moveX:0,moveY:0}),e.emit(W.START,this.moveData)}t.path=this.moveData.path,e.emit(W.BEFORE_MOVE,t),e.emit(W.MOVE,t),this.transformEndWait()}zoom(t){const{interaction:e}=this;if(!this.zoomData){const{path:i}=e.selector.getByPoint(t,e.hitRadius);t.path=i,this.zoomData=Object.assign(Object.assign({},t),{scale:1}),e.emit(H.START,this.zoomData)}t.path=this.zoomData.path,e.emit(H.BEFORE_ZOOM,t),e.emit(H.ZOOM,t),this.transformEndWait()}rotate(t){const{interaction:e}=this;if(!this.rotateData){const{path:i}=e.selector.getByPoint(t,e.hitRadius);t.path=i,this.rotateData=Object.assign(Object.assign({},t),{rotation:0}),e.emit(j.START,this.rotateData)}t.path=this.rotateData.path,e.emit(j.BEFORE_ROTATE,t),e.emit(j.ROTATE,t),this.transformEndWait()}transformEndWait(){clearTimeout(this.transformTimer),this.transformTimer=setTimeout((()=>{this.transformEnd()}),this.interaction.config.pointer.transformTime)}transformEnd(){this.moveEnd(),this.zoomEnd(),this.rotateEnd()}moveEnd(){this.moveData&&(this.interaction.emit(W.END,this.moveData),this.moveData=null)}zoomEnd(){this.zoomData&&(this.interaction.emit(H.END,this.zoomData),this.zoomData=null)}rotateEnd(){this.rotateData&&(this.interaction.emit(j.END,this.rotateData),this.rotateData=null)}destroy(){this.zoomData=this.moveData=this.rotateData=null}}const Y={getMoveEventData:(t,e,i)=>Object.assign(Object.assign({},i),{x:t.x,y:t.y,moveX:e.x,moveY:e.y}),getRotateEventData:(t,e,i)=>Object.assign(Object.assign({},i),{x:t.x,y:t.y,rotation:e}),getZoomEventData:(t,e,i)=>Object.assign(Object.assign({},i),{x:t.x,y:t.y,scale:e}),getDragEventData:(t,e,i)=>Object.assign(Object.assign({},i),{x:i.x,y:i.y,moveX:i.x-e.x,moveY:i.y-e.y,totalX:i.x-t.x,totalY:i.y-t.y}),getDropEventData:(t,e,i)=>Object.assign(Object.assign({},t),{list:e,data:i}),getSwipeDirection:t=>t<-45&&t>-135?z.UP:t>45&&t<135?z.DOWN:t<=45&&t>=-45?z.RIGHT:z.LEFT,getSwipeEventData:(t,e,i)=>Object.assign(Object.assign({},i),{moveX:e.moveX,moveY:e.moveY,totalX:i.x-t.x,totalY:i.y-t.y,type:G.getSwipeDirection(E.getAngle(t,i))}),getBase(t){const e=1===t.button?4:t.button;return{altKey:t.altKey,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,metaKey:t.metaKey,buttons:void 0===t.buttons?1:0===t.buttons?e:t.buttons,origin:t}},pathHasEventType(t,e){const{list:i}=t;for(let t=0,a=i.length;t<a;t++)if(i[t].hasEvent(e))return!0;return!1},filterPathByEventType(t,e){const i=new D,{list:a}=t;for(let t=0,s=a.length;t<s;t++)a[t].hasEvent(e)&&i.add(a[t]);return i}},G=Y,Z=new D,{getDragEventData:q,getDropEventData:J,getSwipeEventData:Q}=Y;class ${constructor(t){this.interaction=t}setDragData(t){this.animateWait&&this.dragEndReal(),this.downData=this.interaction.downData,this.dragData=q(t,t,t)}getList(){const{proxy:t}=this.interaction.selector;return!this.dragging||t&&t.list.length?Z:S.list||this.dragableList||Z}checkDrag(t,e){const{interaction:i}=this;if(this.moving&&t.buttons<1)return this.canAnimate=!1,void i.pointerCancel();this.canAnimate=!0,!this.moving&&e&&(this.moving=i.moveMode||i.isHoldRightKey)&&i.emit(W.START,this.dragData),this.moving||this.dragStart(t,e),this.drag(t)}dragStart(t,e){this.dragging||(this.dragging=e&&A.left(t),this.dragging&&(this.interaction.emit(S.START,this.dragData),this.getDragableList(this.dragData.path)))}getDragableList(t){let e;for(let i=0,a=t.length;i<a;i++)if(e=t.list[i],(e.__.draggable||e.__.editable)&&e.__.hitSelf&&!e.__.locked){this.dragableList=new D(e);break}}drag(t){const{interaction:e,dragData:i,downData:a}=this,{path:s,throughPath:r}=a;this.dragData=q(a,i,t),r&&(this.dragData.throughPath=r),this.dragData.path=s,this.moving?(e.emit(W.BEFORE_MOVE,this.dragData),e.emit(W.MOVE,this.dragData)):this.dragging&&(this.dragReal(),e.emit(S.BEFORE_DRAG,this.dragData),e.emit(S.DRAG,this.dragData))}dragReal(){const{running:t}=this.interaction,e=this.getList();if(e.length&&t){const{moveX:t,moveY:i}=this.dragData;e.forEach((e=>y.moveWorld(e,t,i)))}}dragOverOrOut(t){const{interaction:e}=this,{dragOverPath:i}=this,{path:a}=t;i?a.indexAt(0)!==i.indexAt(0)&&(e.emit(S.OUT,t,i),e.emit(S.OVER,t,a)):e.emit(S.OVER,t,a),this.dragOverPath=a}dragEnterOrLeave(t){const{interaction:e}=this,{dragEnterPath:i}=this,{path:a}=t;e.emit(S.LEAVE,t,i,a),e.emit(S.ENTER,t,a,i),this.dragEnterPath=a}dragEnd(t,e){if(!this.dragData)return;const{moveX:i,moveY:a}=this.dragData;this.canAnimate&&this.moving&&(Math.abs(i)>1||Math.abs(a)>1)?(t=Object.assign({},t),e=.9*(e||("touch"===t.pointerType?2:1)),E.move(t,i*e,a*e),this.drag(t),this.animate((()=>{this.dragEnd(t,1)}))):this.dragEndReal(t)}dragEndReal(t){const{interaction:e,downData:i,dragData:a}=this;t||(t=a);const{path:s,throughPath:r}=i,n=q(i,t,t);r&&(n.throughPath=r),n.path=s,this.moving&&e.emit(W.END,n),this.dragging&&(e.emit(S.END,n),this.swipe(t,n),this.drop(t)),this.autoMoveCancel(),this.dragReset(),this.animate(null,"off")}animate(t,e){const i=t||this.animateWait;i&&this.interaction.target.nextRender(i,e),this.animateWait=t}swipe(t,e){const{interaction:i}=this,{downData:a}=i;if(E.getDistance(a,t)>i.config.pointer.swipeDistance){const t=Q(a,this.dragData,e);this.interaction.emit(t.type,t)}}drop(t){const e=J(t,this.getList(),S.data);e.path=this.dragEnterPath,this.interaction.emit(N.DROP,e),this.interaction.emit(S.LEAVE,t,this.dragEnterPath)}dragReset(){S.list=S.data=this.dragableList=this.dragData=this.downData=this.dragOverPath=this.dragEnterPath=null,this.dragging=this.moving=!1}checkDragOut(t){const{interaction:e}=this;this.autoMoveCancel(),this.dragging&&!e.shrinkCanvasBounds.hitPoint(t)&&this.autoMoveOnDragOut(t)}autoMoveOnDragOut(t){const{interaction:e,downData:i}=this,{autoDistance:a,dragOut:s}=e.config.move;if(!s||!a)return;const r=e.shrinkCanvasBounds,{x:n,y:o}=r,h=O.maxX(r),d=O.maxY(r),g=t.x<n?a:h<t.x?-a:0,c=t.y<o?a:d<t.y?-a:0;let l=0,u=0;this.autoMoveTimer=setInterval((()=>{l+=g,u+=c,E.move(i,g,c),E.move(this.dragData,g,c),e.move(Object.assign(Object.assign({},t),{moveX:g,moveY:c,totalX:l,totalY:u})),e.pointerMoveReal(t)}),10)}autoMoveCancel(){this.autoMoveTimer&&(clearInterval(this.autoMoveTimer),this.autoMoveTimer=0)}destroy(){this.dragReset()}}const tt=c.get("emit");const et=["move","zoom","rotate","key"];function it(t,e,i,a,s){if(et.some((t=>e.startsWith(t)))&&t.__.hitChildren&&!st(t,s)){let r;for(let n=0,o=t.children.length;n<o;n++)r=t.children[n],!i.path.has(r)&&r.__.hittable&&at(r,e,i,a,s)}}function at(t,e,i,a,s){if(t.destroyed)return!0;if(t.__.hitSelf&&t.hasEvent(e,a)&&!st(t,s)){i.phase=a?1:t===i.target?2:3;const s=_.get(e,i);if(t.emitEvent(s,a),s.isStop)return!0}return!1}function st(t,e){return e&&e.has(t)}const rt={getData(t){const e=t[0],i=t[1],a=E.getCenter(e.from,i.from),s=E.getCenter(e.to,i.to),r={x:s.x-a.x,y:s.y-a.y},n=E.getDistance(e.from,i.from);return{move:r,scale:E.getDistance(e.to,i.to)/n,angle:E.getRotation(e.from,i.from,e.to,i.to),center:s}}},nt={wheel:{zoomMode:!1,zoomSpeed:.5,moveSpeed:.5,rotateSpeed:.5,delta:{x:20,y:8},preventDefault:!0},pointer:{hitRadius:5,through:!1,tapTime:120,longPressTime:800,transformTime:500,dragHover:!0,dragDistance:2,swipeDistance:20,ignoreMove:!1,preventDefaultMenu:!0},cursor:{}},{pathHasEventType:ot,getMoveEventData:ht,getZoomEventData:dt,getRotateEventData:gt}=Y;class ct{get dragging(){return this.dragger.dragging}get isDragEmpty(){return this.config.move.dragEmpty&&this.hoverData&&this.hoverData.path.list[0].isLeafer&&(!this.downData||this.downData.path.list[0].isLeafer)}get isHoldRightKey(){return this.config.move.holdRightKey&&this.downData&&A.right(this.downData)}get moveMode(){return this.config.move.drag||this.config.move.holdSpaceKey&&M.isHoldSpaceKey()||this.downData&&(this.config.move.holdMiddleKey&&A.middle(this.downData)||this.isHoldRightKey&&this.dragger.moving)||this.isDragEmpty}get hitRadius(){return this.config.pointer.hitRadius}constructor(t,e,i,a){this.config=nt,this.tapCount=0,this.downKeyMap={},this.target=t,this.canvas=e,this.selector=i,this.defaultPath=new D(t),this.transformer=new X(this),this.dragger=new $(this),a&&(this.config=l.default(a,this.config)),this.__listenEvents()}start(){this.running=!0}stop(){this.running=!1}receive(t){}pointerDown(t,e){t||(t=this.hoverData),t&&(A.defaultLeft(t),this.updateDownData(t),e&&(t.path=this.defaultPath),this.emit(B.BEFORE_DOWN,t),this.emit(B.DOWN,t),this.downTime=Date.now(),this.dragger.setDragData(t),A.left(t)?(this.tapWait(),this.longPressWait(t)):A.right(t)&&(this.waitMenuTap=!0),this.updateCursor(t))}pointerMove(t){if(t||(t=this.hoverData),!t)return;this.downData&&A.defaultLeft(t);const e=this.canvas.bounds.hitPoint(t);(e||this.downData)&&(e&&!this.downData&&A.left(t)&&this.pointerDown(t,!0),this.pointerMoveReal(t),this.dragger.checkDragOut(t))}pointerMoveReal(t){if(this.emit(B.BEFORE_MOVE,t,this.defaultPath),this.downData){const e=E.getDistance(this.downData,t)>this.config.pointer.dragDistance;e&&(this.waitTap&&this.pointerWaitCancel(),this.waitMenuTap=!1),this.dragger.checkDrag(t,e)}this.dragger.moving||(this.updateHoverData(t),this.emit(B.MOVE,t),this.pointerOverOrOut(t),this.pointerEnterOrLeave(t),this.dragger.dragging&&(this.dragger.dragOverOrOut(t),this.dragger.dragEnterOrLeave(t))),this.updateCursor(this.downData||t)}pointerUp(t){t||(t=this.downData),this.downData&&(A.defaultLeft(t),this.findPath(t),this.emit(B.BEFORE_UP,t),this.emit(B.UP,t),this.oldDownData&&this.emit(B.UP,this.oldDownData,void 0,t.path),this.emit(B.UP,this.downData,void 0,t.path),this.touchLeave(t),this.tap(t),this.menuTap(t),this.dragger.dragEnd(t),this.downData=this.oldDownData=null,this.updateCursor(t))}pointerCancel(){this.pointerUp(this.dragger.dragData)}multiTouch(t,e){const{move:i,angle:a,scale:s,center:r}=rt.getData(e);this.rotate(gt(r,a,t)),this.zoom(dt(r,s,t)),this.move(ht(r,i,t))}menu(t){this.findPath(t),this.emit(B.MENU,t)}menuTap(t){this.waitMenuTap&&this.emit(B.MENU_TAP,t)}move(t){this.transformer.move(t)}zoom(t){this.transformer.zoom(t)}rotate(t){this.transformer.rotate(t)}transformEnd(){this.transformer.transformEnd()}keyDown(t){const{code:e}=t;this.downKeyMap[e]||(this.downKeyMap[e]=!0,M.setDownCode(e),this.emit(I.HOLD,t,this.defaultPath),this.moveMode&&this.updateCursor()),this.emit(I.DOWN,t,this.defaultPath)}keyUp(t){const{code:e}=t;this.downKeyMap[e]=!1,M.setUpCode(e),this.emit(I.UP,t,this.defaultPath),"grab"===this.cursor&&this.updateCursor()}pointerOverOrOut(t){if(this.dragger.moving)return;if(this.dragging&&!this.config.pointer.dragHover)return;const{path:e}=t;this.overPath?e.indexAt(0)!==this.overPath.indexAt(0)&&(this.emit(B.OUT,t,this.overPath),this.emit(B.OVER,t,e)):this.emit(B.OVER,t,e),this.overPath=e}pointerEnterOrLeave(t){if(this.dragger.moving)return;if(this.dragging&&!this.config.pointer.dragHover)return;const{path:e}=t;this.emit(B.LEAVE,t,this.enterPath,e),this.emit(B.ENTER,t,e,this.enterPath),this.enterPath=e}touchLeave(t){"touch"===t.pointerType&&this.enterPath&&(this.emit(B.LEAVE,t),this.dragger.dragging&&this.emit(N.LEAVE,t))}tap(t){const{pointer:e}=this.config,i=this.longTap(t);if(!e.tapMore&&i)return;if(!this.waitTap)return;e.tapMore&&this.emitTap(t);const a=Date.now()-this.downTime,s=[B.DOUBLE_TAP,B.DOUBLE_CLICK].some((e=>ot(t.path,e)));a<e.tapTime+50&&s?(this.tapCount++,2===this.tapCount?(this.tapWaitCancel(),this.emitDoubleTap(t)):(clearTimeout(this.tapTimer),this.tapTimer=setTimeout((()=>{e.tapMore||(this.tapWaitCancel(),this.emitTap(t))}),e.tapTime))):e.tapMore||(this.tapWaitCancel(),this.emitTap(t))}findPath(t,e){const{hitRadius:i,through:a}=this.config.pointer,s=this.selector.getByPoint(t,i,e||{through:a});return s.throughPath&&(t.throughPath=s.throughPath),t.path=s.path,s.path}isDrag(t){return this.dragger.getList().has(t)}updateDownData(t,e){const{downData:i}=this;!t&&i&&(t=Object.assign({},i)),t&&(this.oldDownData=i,this.findPath(t,e),this.downData=t)}updateHoverData(t){t||(t=this.hoverData),t&&(this.findPath(t,{exclude:this.dragger.getList(),name:B.MOVE}),this.hoverData=t)}updateCursor(t){if(this.config.cursor.stop)return;if(t||(this.updateHoverData(),t=this.downData||this.hoverData),this.dragger.moving)return this.setCursor("grabbing");if(this.moveMode)return this.setCursor(this.downData?"grabbing":"grab");if(!t)return;let e,i;const{path:a}=t;for(let t=0,s=a.length;t<s&&(e=a.list[t],i=e.cursor,!i);t++);this.setCursor(i)}setCursor(t){this.cursor=t}emitTap(t){this.emit(B.TAP,t),this.emit(B.CLICK,t)}emitDoubleTap(t){this.emit(B.DOUBLE_TAP,t),this.emit(B.DOUBLE_CLICK,t)}pointerWaitCancel(){this.tapWaitCancel(),this.longPressWaitCancel()}tapWait(){clearTimeout(this.tapTimer),this.waitTap=!0}tapWaitCancel(){clearTimeout(this.tapTimer),this.waitTap=!1,this.tapCount=0}longPressWait(t){clearTimeout(this.longPressTimer),this.longPressTimer=setTimeout((()=>{this.longPressed=!0,this.emit(B.LONG_PRESS,t)}),this.config.pointer.longPressTime)}longTap(t){let e;return this.longPressed&&(this.emit(B.LONG_TAP,t),ot(t.path,B.LONG_TAP)&&(e=!0)),this.longPressWaitCancel(),e}longPressWaitCancel(){clearTimeout(this.longPressTimer),this.longPressed=!1}__onResize(){this.shrinkCanvasBounds=new T(this.canvas.bounds),this.shrinkCanvasBounds.spread(-2)}__listenEvents(){const{target:t}=this;this.__eventIds=[t.on_(R.RESIZE,this.__onResize,this)],t.once(P.READY,(()=>this.__onResize()))}__removeListenEvents(){this.target.off_(this.__eventIds),this.__eventIds.length=0}emit(t,e,i,a){this.running&&function(t,e,i,a){if(!i&&!e.path)return;let s;e.type=t,i?e=Object.assign(Object.assign({},e),{path:i}):i=e.path,e.target=i.indexAt(0);try{for(let r=i.length-1;r>-1;r--){if(s=i.list[r],at(s,t,e,!0,a))return;s.isApp&&it(s,t,e,!0,a)}for(let r=0,n=i.length;r<n;r++)if(s=i.list[r],s.isApp&&it(s,t,e,!1,a),at(s,t,e,!1,a))return}catch(t){tt.error(t)}}(t,e,i,a)}destroy(){this.__eventIds.length&&(this.stop(),this.__removeListenEvents(),this.dragger.destroy(),this.transformer.destroy(),this.downData=this.overPath=this.enterPath=null)}}class lt{static set(t,e){this.custom[t]=e}static get(t){return this.custom[t]}}lt.custom={};class ut extends w{constructor(){super(...arguments),this.pathTypeList=new D,this.imageTypeList=new D}getImageType(t,e){return this.imageTypeList.add(t),d.hitCanvas(e)}getPathType(t){return this.pathTypeList.add(t),d.hitCanvas()}clearImageType(){this.__clearLeafList(this.imageTypeList)}clearPathType(){this.__clearLeafList(this.pathTypeList)}__clearLeafList(t){t.length&&(t.forEach((t=>{t.__hitCanvas&&(t.__hitCanvas.destroy(),t.__hitCanvas=null)})),t.reset())}clear(){this.clearPathType(),this.clearImageType()}}const{toInnerRadiusPointOf:pt,copy:mt,setRadius:vt}=a,_t={};e.prototype.__hitWorld=function(t){return!this.__layout.hitCanvasChanged&&this.__hitCanvas||(this.__updateHitCanvas(),this.__layout.hitCanvasChanged=!1),this.__.hitRadius&&(mt(_t,t),vt(t=_t,this.__.hitRadius)),pt(t,this.__world,_t),!(!this.__.hitBox||!i.hitRadiusPoint(this.__layout.boxBounds,_t))||this.__hit(_t)},s.prototype.__updateHitCanvas=function(){this.__hitCanvas||(this.__hitCanvas=this.leafer.hitCanvasManager.getPathType(this));const t=this.__hitCanvas;this.__drawHitPath(t),t.setStrokeOptions(this.__)},s.prototype.__hit=function(t){"miniapp"===r.name&&this.__drawHitPath(this.__hitCanvas);const{fill:e,hitFill:i,windingRule:a}=this.__,s=e&&"path"===i||"all"===i,n=this.__hitFill(t,a);if(s&&n)return!0;const{stroke:o,hitStroke:h,__strokeWidth:d,strokeAlign:g}=this.__,c=o&&"path"===h||"all"===h,l=2*t.radiusX;let u=l;if(c)switch(g){case"inside":if(u+=2*d,!s&&n&&this.__hitStroke(t,u))return!0;u=l;break;case"center":u+=d;break;case"outside":if(u+=2*d,!s){if(!n&&this.__hitStroke(t,u))return!0;u=l}}return!!u&&this.__hitStroke(t,u)};const ft=new s;n.prototype.__updateHitCanvas=function(){(this.stroke||this.cornerRadius)&&ft.__updateHitCanvas.call(this)},n.prototype.__hitFill=function(t,e){return this.__hitCanvas?ft.__hitFill.call(this,t,e):i.hitRadiusPoint(this.__layout.boxBounds,t)},s.prototype.find=function(t,e){return this.leafer?this.leafer.selector.getBy(t,this,!1,e):[]},s.prototype.findOne=function(t,e){return this.leafer?this.leafer.selector.getBy(t,this,!0,e):null},o.prototype.pick=function(t,e){return this.__layout.update(),e||(e={}),this.leafer?this.leafer.selector.getByPoint(t,e.hitRadius||0,Object.assign(Object.assign({},e),{target:this})):null};export{L as App,lt as Cursor,S as DragEvent,N as DropEvent,ut as HitCanvasManager,ct as InteractionBase,Y as InteractionHelper,I as KeyEvent,M as Keyboard,V as LeaferTypeCreator,W as MoveEvent,rt as MultiTouchHelper,A as PointerButton,B as PointerEvent,j as RotateEvent,z as SwipeEvent,x as UIEvent,H as ZoomEvent};
1
+ import{Leafer as t,Leaf as e,BoundsHelper as i,PointHelper as a,UI as s,Rect as r,Group as n}from"@leafer-ui/draw";export*from"@leafer-ui/draw";import{registerUI as o,Creator as h,PropertyEvent as d,Debug as g,DataHelper as c,canvasSizeAttrs as l,LayoutEvent as u,RenderEvent as p,Event as m,EventCreator as v,registerUIEvent as _,LeafList as f,PointHelper as D,LeafHelper as E,BoundsHelper as y,Bounds as O,ResizeEvent as T,LeaferEvent as R,CanvasManager as P,Platform as w}from"@leafer/core";function C(t,e,i,a){var s,r=arguments.length,n=r<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,i):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(t,e,i,a);else for(var o=t.length-1;o>=0;o--)(s=t[o])&&(n=(r<3?s(n):r>3?s(e,i,n):s(e,i))||n);return r>3&&n&&Object.defineProperty(e,i,n),n}"function"==typeof SuppressedError&&SuppressedError;let L=class extends t{get __tag(){return"App"}get isApp(){return!0}constructor(t,e){super(t,e)}init(t,e){if(super.init(t,e),t){const{ground:e,tree:i,sky:a,editor:s}=t;e&&(this.ground=this.addLeafer(e)),(i||s)&&(this.tree=this.addLeafer(i)),(a||s)&&(this.sky=this.addLeafer(a||{type:"draw",usePartRender:!1})),s&&(this.editor=h.editor(s),this.sky.add(this.editor))}}__setApp(){const{canvas:t}=this,{realCanvas:e,view:i}=this.config;e||i===this.canvas.view||!t.parentView?this.realCanvas=!0:t.unrealCanvas(),this.leafer=this,this.watcher.disable(),this.layouter.disable(),this.__eventIds.push(this.on_(d.CHANGE,this.__onPropertyChange,this))}start(){super.start(),this.children.forEach((t=>t.start()))}stop(){this.children.forEach((t=>t.stop())),super.stop()}unlockLayout(){super.unlockLayout(),this.children.forEach((t=>t.unlockLayout()))}lockLayout(){super.lockLayout(),this.children.forEach((t=>t.lockLayout()))}forceRender(t){this.children.forEach((e=>e.forceRender(t)))}addLeafer(e){const i=new t(e);return this.add(i),i}add(t){if(!t.view){if(this.realCanvas&&!this.canvas.bounds)return void setTimeout((()=>this.add(t)),10);t.init(this.__getChildConfig(t.userConfig),this)}super.add(t),this.__listenChildEvents(t)}__onPropertyChange(){g.showHitView&&this.children.forEach((t=>t.forceUpdate("surface")))}__onCreated(){this.created=this.children.every((t=>t.created))}__onReady(){this.children.every((t=>t.ready))&&super.__onReady()}__onViewReady(){this.children.every((t=>t.viewReady))&&super.__onViewReady()}__onChildRenderEnd(t){this.renderer.addBlock(t.renderBounds),this.viewReady&&this.renderer.update()}__render(t,e){this.children.forEach((e=>t.copyWorld(e.canvas)))}__onResize(t){this.children.forEach((e=>e.resize(t))),super.__onResize(t)}__checkUpdateLayout(){this.children.forEach((t=>t.__layout.update()))}__getChildConfig(t){let e=Object.assign({},this.config);return e.hittable=e.realCanvas=void 0,t&&c.assign(e,t),this.autoLayout&&c.copyAttrs(e,this,l),e.view=this.realCanvas?void 0:this.view,e.fill=void 0,e}__listenChildEvents(t){t.once(u.END,(()=>this.__onReady())),t.once(p.START,(()=>this.__onCreated())),t.once(p.END,(()=>this.__onViewReady())),this.realCanvas&&this.__eventIds.push(t.on_(p.END,this.__onChildRenderEnd,this))}};L=C([o()],L);const b={},M={isHoldSpaceKey:()=>M.isHold("Space"),isHold:t=>b[t],setDownCode(t){b[t]||(b[t]=!0)},setUpCode(t){b[t]=!1}},A={LEFT:1,RIGHT:2,MIDDLE:4,defaultLeft(t){t.buttons||(t.buttons=1)},left:t=>1===t.buttons,right:t=>2===t.buttons,middle:t=>4===t.buttons};class x extends m{get spaceKey(){return M.isHoldSpaceKey()}get left(){return A.left(this)}get right(){return A.right(this)}get middle(){return A.middle(this)}constructor(t){super(t.type),this.bubbles=!0,Object.assign(this,t)}getPage(){return this.current.getPagePoint(this)}getInner(t){return t||(t=this.current),t.getInnerPoint(this)}getLocal(t){return t||(t=this.current),t.getLocalPoint(this)}static changeName(t,e){v.changeName(t,e)}}let B=class extends x{};B.POINTER="pointer",B.BEFORE_DOWN="pointer.before_down",B.BEFORE_MOVE="pointer.before_move",B.BEFORE_UP="pointer.before_up",B.DOWN="pointer.down",B.MOVE="pointer.move",B.UP="pointer.up",B.OVER="pointer.over",B.OUT="pointer.out",B.ENTER="pointer.enter",B.LEAVE="pointer.leave",B.TAP="tap",B.DOUBLE_TAP="double_tap",B.CLICK="click",B.DOUBLE_CLICK="double_click",B.LONG_PRESS="long_press",B.LONG_TAP="long_tap",B.MENU="pointer.menu",B.MENU_TAP="pointer.menu_tap",B=C([_()],B);const k={};let S=class extends B{static setList(t){this.list=t instanceof f?t:new f(t)}static setData(t){this.data=t}getPageMove(t){return this.assignMove(t),this.current.getPagePoint(k,null,!0)}getInnerMove(t,e){return t||(t=this.current),this.assignMove(e),t.getInnerPoint(k,null,!0)}getLocalMove(t,e){return t||(t=this.current),this.assignMove(e),t.getLocalPoint(k,null,!0)}getPageTotal(){return this.getPageMove(!0)}getInnerTotal(t){return this.getInnerMove(t,!0)}getLocalTotal(t){return this.getLocalMove(t,!0)}assignMove(t){k.x=t?this.totalX:this.moveX,k.y=t?this.totalY:this.moveY}};S.BEFORE_DRAG="drag.before_drag",S.START="drag.start",S.DRAG="drag",S.END="drag.end",S.OVER="drag.over",S.OUT="drag.out",S.ENTER="drag.enter",S.LEAVE="drag.leave",S=C([_()],S);let N=class extends B{static setList(t){S.setList(t)}static setData(t){S.setData(t)}};N.DROP="drop",N=C([_()],N);let W=class extends S{};W.BEFORE_MOVE="move.before_move",W.START="move.start",W.MOVE="move",W.END="move.end",W=C([_()],W);let j=class extends x{};j.BEFORE_ROTATE="rotate.before_rotate",j.START="rotate.start",j.ROTATE="rotate",j.END="rotate.end",j=C([_()],j);let z=class extends S{};z.SWIPE="swipe",z.LEFT="swipe.left",z.RIGHT="swipe.right",z.UP="swipe.up",z.DOWN="swipe.down",z=C([_()],z);let H=class extends x{};H.BEFORE_ZOOM="zoom.before_zoom",H.START="zoom.start",H.ZOOM="zoom",H.END="zoom.end",H=C([_()],H);let I=class extends x{};I.DOWN="key.down",I.HOLD="key.hold",I.UP="key.up",I=C([_()],I);const U=g.get("LeaferTypeCreator"),V={list:{},register(t,e){K[t]?U.repeat(t):K[t]=e},run(t,e){const i=K[t];i?i(e):U.error("no",t)}},{list:K,register:F}=V;F("draw",(function(t){const{config:e}=t;e.move.dragOut=!1})),F("design",(function(t){t.isApp||t.__eventIds.push(t.on_(W.BEFORE_MOVE,(e=>t.zoomLayer.move(e.moveX,e.moveY))),t.on_(H.BEFORE_ZOOM,(e=>{const{zoomLayer:i}=t,{scaleX:a}=i.__,{min:s,max:r}=t.app.config.zoom;let{scale:n}=e,o=Math.abs(a*n);o<s?n=s/a:o>r&&(n=r/a),1!==n&&(D.scaleOf(i,e,n),i.scale=a*n)})))})),t.prototype.initType=function(t){V.run(t,this)};class X{constructor(t){this.interaction=t}move(t){const{interaction:e}=this;if(!this.moveData){const{path:i}=e.selector.getByPoint(t,e.hitRadius);t.path=i,this.moveData=Object.assign(Object.assign({},t),{moveX:0,moveY:0}),e.emit(W.START,this.moveData)}t.path=this.moveData.path,e.emit(W.BEFORE_MOVE,t),e.emit(W.MOVE,t),this.transformEndWait()}zoom(t){const{interaction:e}=this;if(!this.zoomData){const{path:i}=e.selector.getByPoint(t,e.hitRadius);t.path=i,this.zoomData=Object.assign(Object.assign({},t),{scale:1}),e.emit(H.START,this.zoomData)}t.path=this.zoomData.path,e.emit(H.BEFORE_ZOOM,t),e.emit(H.ZOOM,t),this.transformEndWait()}rotate(t){const{interaction:e}=this;if(!this.rotateData){const{path:i}=e.selector.getByPoint(t,e.hitRadius);t.path=i,this.rotateData=Object.assign(Object.assign({},t),{rotation:0}),e.emit(j.START,this.rotateData)}t.path=this.rotateData.path,e.emit(j.BEFORE_ROTATE,t),e.emit(j.ROTATE,t),this.transformEndWait()}transformEndWait(){clearTimeout(this.transformTimer),this.transformTimer=setTimeout((()=>{this.transformEnd()}),this.interaction.config.pointer.transformTime)}transformEnd(){this.moveEnd(),this.zoomEnd(),this.rotateEnd()}moveEnd(){this.moveData&&(this.interaction.emit(W.END,this.moveData),this.moveData=null)}zoomEnd(){this.zoomData&&(this.interaction.emit(H.END,this.zoomData),this.zoomData=null)}rotateEnd(){this.rotateData&&(this.interaction.emit(j.END,this.rotateData),this.rotateData=null)}destroy(){this.zoomData=this.moveData=this.rotateData=null}}const Y={getMoveEventData:(t,e,i)=>Object.assign(Object.assign({},i),{x:t.x,y:t.y,moveX:e.x,moveY:e.y}),getRotateEventData:(t,e,i)=>Object.assign(Object.assign({},i),{x:t.x,y:t.y,rotation:e}),getZoomEventData:(t,e,i)=>Object.assign(Object.assign({},i),{x:t.x,y:t.y,scale:e}),getDragEventData:(t,e,i)=>Object.assign(Object.assign({},i),{x:i.x,y:i.y,moveX:i.x-e.x,moveY:i.y-e.y,totalX:i.x-t.x,totalY:i.y-t.y}),getDropEventData:(t,e,i)=>Object.assign(Object.assign({},t),{list:e,data:i}),getSwipeDirection:t=>t<-45&&t>-135?z.UP:t>45&&t<135?z.DOWN:t<=45&&t>=-45?z.RIGHT:z.LEFT,getSwipeEventData:(t,e,i)=>Object.assign(Object.assign({},i),{moveX:e.moveX,moveY:e.moveY,totalX:i.x-t.x,totalY:i.y-t.y,type:G.getSwipeDirection(D.getAngle(t,i))}),getBase(t){const e=1===t.button?4:t.button;return{altKey:t.altKey,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,metaKey:t.metaKey,buttons:void 0===t.buttons?1:0===t.buttons?e:t.buttons,origin:t}},pathHasEventType(t,e){const{list:i}=t;for(let t=0,a=i.length;t<a;t++)if(i[t].hasEvent(e))return!0;return!1},filterPathByEventType(t,e){const i=new f,{list:a}=t;for(let t=0,s=a.length;t<s;t++)a[t].hasEvent(e)&&i.add(a[t]);return i}},G=Y,Z=new f,{getDragEventData:q,getDropEventData:J,getSwipeEventData:Q}=Y;class ${constructor(t){this.interaction=t}setDragData(t){this.animateWait&&this.dragEndReal(),this.downData=this.interaction.downData,this.dragData=q(t,t,t)}getList(){const{proxy:t}=this.interaction.selector;return!this.dragging||t&&t.list.length?Z:S.list||this.dragableList||Z}checkDrag(t,e){const{interaction:i}=this;if(this.moving&&t.buttons<1)return this.canAnimate=!1,void i.pointerCancel();this.canAnimate=!0,!this.moving&&e&&(this.moving=i.moveMode||i.isHoldRightKey)&&i.emit(W.START,this.dragData),this.moving||this.dragStart(t,e),this.drag(t)}dragStart(t,e){this.dragging||(this.dragging=e&&A.left(t),this.dragging&&(this.interaction.emit(S.START,this.dragData),this.getDragableList(this.dragData.path)))}getDragableList(t){let e;for(let i=0,a=t.length;i<a;i++)if(e=t.list[i],(e.__.draggable||e.__.editable)&&e.__.hitSelf&&!e.__.locked){this.dragableList=new f(e);break}}drag(t){const{interaction:e,dragData:i,downData:a}=this,{path:s,throughPath:r}=a;this.dragData=q(a,i,t),r&&(this.dragData.throughPath=r),this.dragData.path=s,this.moving?(e.emit(W.BEFORE_MOVE,this.dragData),e.emit(W.MOVE,this.dragData)):this.dragging&&(this.dragReal(),e.emit(S.BEFORE_DRAG,this.dragData),e.emit(S.DRAG,this.dragData))}dragReal(){const{running:t}=this.interaction,e=this.getList();if(e.length&&t){const{moveX:t,moveY:i}=this.dragData;e.forEach((e=>E.moveWorld(e,t,i)))}}dragOverOrOut(t){const{interaction:e}=this,{dragOverPath:i}=this,{path:a}=t;i?a.indexAt(0)!==i.indexAt(0)&&(e.emit(S.OUT,t,i),e.emit(S.OVER,t,a)):e.emit(S.OVER,t,a),this.dragOverPath=a}dragEnterOrLeave(t){const{interaction:e}=this,{dragEnterPath:i}=this,{path:a}=t;e.emit(S.LEAVE,t,i,a),e.emit(S.ENTER,t,a,i),this.dragEnterPath=a}dragEnd(t,e){if(!this.dragData)return;const{moveX:i,moveY:a}=this.dragData;this.canAnimate&&this.moving&&(Math.abs(i)>1||Math.abs(a)>1)?(t=Object.assign({},t),e=.9*(e||("touch"===t.pointerType?2:1)),D.move(t,i*e,a*e),this.drag(t),this.animate((()=>{this.dragEnd(t,1)}))):this.dragEndReal(t)}dragEndReal(t){const{interaction:e,downData:i,dragData:a}=this;t||(t=a);const{path:s,throughPath:r}=i,n=q(i,t,t);r&&(n.throughPath=r),n.path=s,this.moving&&e.emit(W.END,n),this.dragging&&(e.emit(S.END,n),this.swipe(t,n),this.drop(t)),this.autoMoveCancel(),this.dragReset(),this.animate(null,"off")}animate(t,e){const i=t||this.animateWait;i&&this.interaction.target.nextRender(i,e),this.animateWait=t}swipe(t,e){const{interaction:i}=this,{downData:a}=i;if(D.getDistance(a,t)>i.config.pointer.swipeDistance){const t=Q(a,this.dragData,e);this.interaction.emit(t.type,t)}}drop(t){const e=J(t,this.getList(),S.data);e.path=this.dragEnterPath,this.interaction.emit(N.DROP,e),this.interaction.emit(S.LEAVE,t,this.dragEnterPath)}dragReset(){S.list=S.data=this.dragableList=this.dragData=this.downData=this.dragOverPath=this.dragEnterPath=null,this.dragging=this.moving=!1}checkDragOut(t){const{interaction:e}=this;this.autoMoveCancel(),this.dragging&&!e.shrinkCanvasBounds.hitPoint(t)&&this.autoMoveOnDragOut(t)}autoMoveOnDragOut(t){const{interaction:e,downData:i}=this,{autoDistance:a,dragOut:s}=e.config.move;if(!s||!a)return;const r=e.shrinkCanvasBounds,{x:n,y:o}=r,h=y.maxX(r),d=y.maxY(r),g=t.x<n?a:h<t.x?-a:0,c=t.y<o?a:d<t.y?-a:0;let l=0,u=0;this.autoMoveTimer=setInterval((()=>{l+=g,u+=c,D.move(i,g,c),D.move(this.dragData,g,c),e.move(Object.assign(Object.assign({},t),{moveX:g,moveY:c,totalX:l,totalY:u})),e.pointerMoveReal(t)}),10)}autoMoveCancel(){this.autoMoveTimer&&(clearInterval(this.autoMoveTimer),this.autoMoveTimer=0)}destroy(){this.dragReset()}}const tt=g.get("emit");const et=["move","zoom","rotate","key"];function it(t,e,i,a,s){if(et.some((t=>e.startsWith(t)))&&t.__.hitChildren&&!st(t,s)){let r;for(let n=0,o=t.children.length;n<o;n++)r=t.children[n],!i.path.has(r)&&r.__.hittable&&at(r,e,i,a,s)}}function at(t,e,i,a,s){if(t.destroyed)return!0;if(t.__.hitSelf&&t.hasEvent(e,a)&&!st(t,s)){i.phase=a?1:t===i.target?2:3;const s=v.get(e,i);if(t.emitEvent(s,a),s.isStop)return!0}return!1}function st(t,e){return e&&e.has(t)}const rt={getData(t){const e=t[0],i=t[1],a=D.getCenter(e.from,i.from),s=D.getCenter(e.to,i.to),r={x:s.x-a.x,y:s.y-a.y},n=D.getDistance(e.from,i.from);return{move:r,scale:D.getDistance(e.to,i.to)/n,angle:D.getRotation(e.from,i.from,e.to,i.to),center:s}}},nt={wheel:{zoomMode:!1,zoomSpeed:.5,moveSpeed:.5,rotateSpeed:.5,delta:{x:20,y:8},preventDefault:!0},pointer:{hitRadius:5,through:!1,tapTime:120,longPressTime:800,transformTime:500,dragHover:!0,dragDistance:2,swipeDistance:20,ignoreMove:!1,preventDefaultMenu:!0},cursor:{}},{pathHasEventType:ot,getMoveEventData:ht,getZoomEventData:dt,getRotateEventData:gt}=Y;class ct{get dragging(){return this.dragger.dragging}get isDragEmpty(){return this.config.move.dragEmpty&&this.hoverData&&this.hoverData.path.list[0].isLeafer&&(!this.downData||this.downData.path.list[0].isLeafer)}get isHoldRightKey(){return this.config.move.holdRightKey&&this.downData&&A.right(this.downData)}get moveMode(){return this.config.move.drag||this.config.move.holdSpaceKey&&M.isHoldSpaceKey()||this.downData&&(this.config.move.holdMiddleKey&&A.middle(this.downData)||this.isHoldRightKey&&this.dragger.moving)||this.isDragEmpty}get hitRadius(){return this.config.pointer.hitRadius}constructor(t,e,i,a){this.config=nt,this.tapCount=0,this.downKeyMap={},this.target=t,this.canvas=e,this.selector=i,this.defaultPath=new f(t),this.transformer=new X(this),this.dragger=new $(this),a&&(this.config=c.default(a,this.config)),this.__listenEvents()}start(){this.running=!0}stop(){this.running=!1}receive(t){}pointerDown(t,e){t||(t=this.hoverData),t&&(A.defaultLeft(t),this.updateDownData(t),e&&(t.path=this.defaultPath),this.emit(B.BEFORE_DOWN,t),this.emit(B.DOWN,t),this.downTime=Date.now(),this.dragger.setDragData(t),A.left(t)?(this.tapWait(),this.longPressWait(t)):A.right(t)&&(this.waitMenuTap=!0),this.updateCursor(t))}pointerMove(t){if(t||(t=this.hoverData),!t)return;this.downData&&A.defaultLeft(t);const e=this.canvas.bounds.hitPoint(t);(e||this.downData)&&(e&&!this.downData&&A.left(t)&&this.pointerDown(t,!0),this.pointerMoveReal(t),this.dragger.checkDragOut(t))}pointerMoveReal(t){if(this.emit(B.BEFORE_MOVE,t,this.defaultPath),this.downData){const e=D.getDistance(this.downData,t)>this.config.pointer.dragDistance;e&&(this.waitTap&&this.pointerWaitCancel(),this.waitMenuTap=!1),this.dragger.checkDrag(t,e)}this.dragger.moving||(this.updateHoverData(t),this.emit(B.MOVE,t),this.pointerOverOrOut(t),this.pointerEnterOrLeave(t),this.dragger.dragging&&(this.dragger.dragOverOrOut(t),this.dragger.dragEnterOrLeave(t))),this.updateCursor(this.downData||t)}pointerUp(t){t||(t=this.downData),this.downData&&(A.defaultLeft(t),this.findPath(t),this.emit(B.BEFORE_UP,t),this.emit(B.UP,t),this.oldDownData&&this.emit(B.UP,this.oldDownData,void 0,t.path),this.emit(B.UP,this.downData,void 0,t.path),this.touchLeave(t),this.tap(t),this.menuTap(t),this.dragger.dragEnd(t),this.downData=this.oldDownData=null,this.updateCursor(t))}pointerCancel(){this.pointerUp(this.dragger.dragData)}multiTouch(t,e){const{move:i,angle:a,scale:s,center:r}=rt.getData(e);this.rotate(gt(r,a,t)),this.zoom(dt(r,s,t)),this.move(ht(r,i,t))}menu(t){this.findPath(t),this.emit(B.MENU,t)}menuTap(t){this.waitMenuTap&&this.emit(B.MENU_TAP,t)}move(t){this.transformer.move(t)}zoom(t){this.transformer.zoom(t)}rotate(t){this.transformer.rotate(t)}transformEnd(){this.transformer.transformEnd()}keyDown(t){const{code:e}=t;this.downKeyMap[e]||(this.downKeyMap[e]=!0,M.setDownCode(e),this.emit(I.HOLD,t,this.defaultPath),this.moveMode&&this.updateCursor()),this.emit(I.DOWN,t,this.defaultPath)}keyUp(t){const{code:e}=t;this.downKeyMap[e]=!1,M.setUpCode(e),this.emit(I.UP,t,this.defaultPath),"grab"===this.cursor&&this.updateCursor()}pointerOverOrOut(t){if(this.dragger.moving)return;if(this.dragging&&!this.config.pointer.dragHover)return;const{path:e}=t;this.overPath?e.indexAt(0)!==this.overPath.indexAt(0)&&(this.emit(B.OUT,t,this.overPath),this.emit(B.OVER,t,e)):this.emit(B.OVER,t,e),this.overPath=e}pointerEnterOrLeave(t){if(this.dragger.moving)return;if(this.dragging&&!this.config.pointer.dragHover)return;const{path:e}=t;this.emit(B.LEAVE,t,this.enterPath,e),this.emit(B.ENTER,t,e,this.enterPath),this.enterPath=e}touchLeave(t){"touch"===t.pointerType&&this.enterPath&&(this.emit(B.LEAVE,t),this.dragger.dragging&&this.emit(N.LEAVE,t))}tap(t){const{pointer:e}=this.config,i=this.longTap(t);if(!e.tapMore&&i)return;if(!this.waitTap)return;e.tapMore&&this.emitTap(t);const a=Date.now()-this.downTime,s=[B.DOUBLE_TAP,B.DOUBLE_CLICK].some((e=>ot(t.path,e)));a<e.tapTime+50&&s?(this.tapCount++,2===this.tapCount?(this.tapWaitCancel(),this.emitDoubleTap(t)):(clearTimeout(this.tapTimer),this.tapTimer=setTimeout((()=>{e.tapMore||(this.tapWaitCancel(),this.emitTap(t))}),e.tapTime))):e.tapMore||(this.tapWaitCancel(),this.emitTap(t))}findPath(t,e){const{hitRadius:i,through:a}=this.config.pointer,s=this.selector.getByPoint(t,i,e||{through:a});return s.throughPath&&(t.throughPath=s.throughPath),t.path=s.path,s.path}isDrag(t){return this.dragger.getList().has(t)}updateDownData(t,e){const{downData:i}=this;!t&&i&&(t=Object.assign({},i)),t&&(this.oldDownData=i,this.findPath(t,e),this.downData=t)}updateHoverData(t){t||(t=this.hoverData),t&&(this.findPath(t,{exclude:this.dragger.getList(),name:B.MOVE}),this.hoverData=t)}updateCursor(t){if(this.config.cursor.stop)return;if(t||(this.updateHoverData(),t=this.downData||this.hoverData),this.dragger.moving)return this.setCursor("grabbing");if(this.moveMode)return this.setCursor(this.downData?"grabbing":"grab");if(!t)return;let e,i;const{path:a}=t;for(let t=0,s=a.length;t<s&&(e=a.list[t],i=e.cursor,!i);t++);this.setCursor(i)}setCursor(t){this.cursor=t}emitTap(t){this.emit(B.TAP,t),this.emit(B.CLICK,t)}emitDoubleTap(t){this.emit(B.DOUBLE_TAP,t),this.emit(B.DOUBLE_CLICK,t)}pointerWaitCancel(){this.tapWaitCancel(),this.longPressWaitCancel()}tapWait(){clearTimeout(this.tapTimer),this.waitTap=!0}tapWaitCancel(){clearTimeout(this.tapTimer),this.waitTap=!1,this.tapCount=0}longPressWait(t){clearTimeout(this.longPressTimer),this.longPressTimer=setTimeout((()=>{this.longPressed=!0,this.emit(B.LONG_PRESS,t)}),this.config.pointer.longPressTime)}longTap(t){let e;return this.longPressed&&(this.emit(B.LONG_TAP,t),ot(t.path,B.LONG_TAP)&&(e=!0)),this.longPressWaitCancel(),e}longPressWaitCancel(){clearTimeout(this.longPressTimer),this.longPressed=!1}__onResize(){this.shrinkCanvasBounds=new O(this.canvas.bounds),this.shrinkCanvasBounds.spread(-2)}__listenEvents(){const{target:t}=this;this.__eventIds=[t.on_(T.RESIZE,this.__onResize,this)],t.once(R.READY,(()=>this.__onResize()))}__removeListenEvents(){this.target.off_(this.__eventIds),this.__eventIds.length=0}emit(t,e,i,a){this.running&&function(t,e,i,a){if(!i&&!e.path)return;let s;e.type=t,i?e=Object.assign(Object.assign({},e),{path:i}):i=e.path,e.target=i.indexAt(0);try{for(let r=i.length-1;r>-1;r--){if(s=i.list[r],at(s,t,e,!0,a))return;s.isApp&&it(s,t,e,!0,a)}for(let r=0,n=i.length;r<n;r++)if(s=i.list[r],s.isApp&&it(s,t,e,!1,a),at(s,t,e,!1,a))return}catch(t){tt.error(t)}}(t,e,i,a)}destroy(){this.__eventIds.length&&(this.stop(),this.__removeListenEvents(),this.dragger.destroy(),this.transformer.destroy(),this.downData=this.overPath=this.enterPath=null)}}class lt{static set(t,e){this.custom[t]=e}static get(t){return this.custom[t]}}lt.custom={};class ut extends P{constructor(){super(...arguments),this.pathTypeList=new f,this.imageTypeList=new f}getImageType(t,e){return this.imageTypeList.add(t),h.hitCanvas(e)}getPathType(t){return this.pathTypeList.add(t),h.hitCanvas()}clearImageType(){this.__clearLeafList(this.imageTypeList)}clearPathType(){this.__clearLeafList(this.pathTypeList)}__clearLeafList(t){t.length&&(t.forEach((t=>{t.__hitCanvas&&(t.__hitCanvas.destroy(),t.__hitCanvas=null)})),t.reset())}clear(){this.clearPathType(),this.clearImageType()}}const{toInnerRadiusPointOf:pt,copy:mt,setRadius:vt}=a,_t={};e.prototype.__hitWorld=function(t){return!this.__layout.hitCanvasChanged&&this.__hitCanvas||(this.__updateHitCanvas(),this.__layout.hitCanvasChanged=!1),this.__.hitRadius&&(mt(_t,t),vt(t=_t,this.__.hitRadius)),pt(t,this.__world,_t),!(!this.__.hitBox||!i.hitRadiusPoint(this.__layout.boxBounds,_t))||this.__hit(_t)},s.prototype.__updateHitCanvas=function(){this.__hitCanvas||(this.__hitCanvas=this.leafer.hitCanvasManager.getPathType(this));const t=this.__hitCanvas;this.__drawHitPath(t),t.setStrokeOptions(this.__)},s.prototype.__hit=function(t){"miniapp"===w.name&&this.__drawHitPath(this.__hitCanvas);const{fill:e,hitFill:i,windingRule:a}=this.__,s=e&&"path"===i||"all"===i,r=this.__hitFill(t,a);if(s&&r)return!0;const{stroke:n,hitStroke:o,__strokeWidth:h,strokeAlign:d}=this.__,g=n&&"path"===o||"all"===o,c=2*t.radiusX;let l=c;if(g)switch(d){case"inside":if(l+=2*h,!s&&r&&this.__hitStroke(t,l))return!0;l=c;break;case"center":l+=h;break;case"outside":if(l+=2*h,!s){if(!r&&this.__hitStroke(t,l))return!0;l=c}}return!!l&&this.__hitStroke(t,l)};const ft=new s;r.prototype.__updateHitCanvas=function(){(this.stroke||this.cornerRadius)&&ft.__updateHitCanvas.call(this)},r.prototype.__hitFill=function(t,e){return this.__hitCanvas?ft.__hitFill.call(this,t,e):i.hitRadiusPoint(this.__layout.boxBounds,t)},s.prototype.find=function(t,e){return this.leafer?this.leafer.selector.getBy(t,this,!1,e):[]},s.prototype.findOne=function(t,e){return this.leafer?this.leafer.selector.getBy(t,this,!0,e):null},n.prototype.pick=function(t,e){return this.__layout.update(),e||(e={}),this.leafer?this.leafer.selector.getByPoint(t,e.hitRadius||0,Object.assign(Object.assign({},e),{target:this})):null};export{L as App,lt as Cursor,S as DragEvent,N as DropEvent,ut as HitCanvasManager,ct as InteractionBase,Y as InteractionHelper,I as KeyEvent,M as Keyboard,V as LeaferTypeCreator,W as MoveEvent,rt as MultiTouchHelper,A as PointerButton,B as PointerEvent,j as RotateEvent,z as SwipeEvent,x as UIEvent,H as ZoomEvent};
package/lib/core.min.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var t=require("@leafer-ui/draw"),e=require("@leafer/core");function i(t,e,i,s){var r,a=arguments.length,o=a<3?e:null===s?s=Object.getOwnPropertyDescriptor(e,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(t,e,i,s);else for(var n=t.length-1;n>=0;n--)(r=t[n])&&(o=(a<3?r(o):a>3?r(e,i,o):r(e,i))||o);return a>3&&o&&Object.defineProperty(e,i,o),o}"function"==typeof SuppressedError&&SuppressedError,exports.App=class extends t.Leafer{get __tag(){return"App"}get isApp(){return!0}constructor(t,e){super(t,e)}init(t,i){if(super.init(t,i),t){const{ground:i,tree:s,sky:r,editor:a}=t;i&&(this.ground=this.addLeafer(i)),(s||a)&&(this.tree=this.addLeafer(s)),(r||a)&&(this.sky=this.addLeafer(r||{type:"draw",usePartRender:!1})),a&&(this.editor=e.Creator.editor(a),this.sky.add(this.editor))}}__setApp(){const{canvas:t}=this,{realCanvas:i,view:s}=this.config;i||s===this.canvas.view||!t.parentView?this.realCanvas=!0:t.unrealCanvas(),this.leafer=this,this.watcher.disable(),this.layouter.disable(),this.__eventIds.push(this.on_(e.PropertyEvent.CHANGE,this.__onPropertyChange,this))}start(){super.start(),this.children.forEach((t=>t.start()))}stop(){this.children.forEach((t=>t.stop())),super.stop()}unlockLayout(){super.unlockLayout(),this.children.forEach((t=>t.unlockLayout()))}lockLayout(){super.lockLayout(),this.children.forEach((t=>t.lockLayout()))}forceRender(t){this.children.forEach((e=>e.forceRender(t)))}addLeafer(e){const i=new t.Leafer(e);return this.add(i),i}add(t){if(!t.view){if(this.realCanvas&&!this.canvas.bounds)return void setTimeout((()=>this.add(t)),10);t.init(this.__getChildConfig(t.userConfig),this)}super.add(t),this.__listenChildEvents(t)}__onPropertyChange(){e.Debug.showHitView&&this.children.forEach((t=>t.forceUpdate("surface")))}__onCreated(){this.created=this.children.every((t=>t.created))}__onReady(){this.children.every((t=>t.ready))&&super.__onReady()}__onViewReady(){this.children.every((t=>t.viewReady))&&super.__onViewReady()}__onChildRenderEnd(t){this.renderer.addBlock(t.renderBounds),this.viewReady&&this.renderer.update()}__render(t,e){this.children.forEach((e=>t.copyWorld(e.canvas)))}__onResize(t){this.children.forEach((e=>e.resize(t))),super.__onResize(t)}__checkUpdateLayout(){this.children.forEach((t=>t.__layout.update()))}__getChildConfig(t){let i=Object.assign({},this.config);return i.hittable=i.realCanvas=void 0,t&&e.DataHelper.assign(i,t),this.autoLayout&&e.DataHelper.copyAttrs(i,this,e.canvasSizeAttrs),i.view=this.realCanvas?void 0:this.view,i.fill=void 0,i}__listenChildEvents(t){t.once(e.LayoutEvent.END,(()=>this.__onReady())),t.once(e.RenderEvent.START,(()=>this.__onCreated())),t.once(e.RenderEvent.END,(()=>this.__onViewReady())),this.realCanvas&&this.__eventIds.push(t.on_(e.RenderEvent.END,this.__onChildRenderEnd,this))}},exports.App=i([e.registerUI()],exports.App);const s={},r={isHoldSpaceKey:()=>r.isHold("Space"),isHold:t=>s[t],setDownCode(t){s[t]||(s[t]=!0)},setUpCode(t){s[t]=!1}},a={LEFT:1,RIGHT:2,MIDDLE:4,defaultLeft(t){t.buttons||(t.buttons=1)},left:t=>1===t.buttons,right:t=>2===t.buttons,middle:t=>4===t.buttons};class o extends e.Event{get spaceKey(){return r.isHoldSpaceKey()}get left(){return a.left(this)}get right(){return a.right(this)}get middle(){return a.middle(this)}constructor(t){super(t.type),this.bubbles=!0,Object.assign(this,t)}getPage(){return this.current.getPagePoint(this)}getInner(t){return t||(t=this.current),t.getInnerPoint(this)}getLocal(t){return t||(t=this.current),t.getLocalPoint(this)}static changeName(t,i){e.EventCreator.changeName(t,i)}}exports.PointerEvent=class extends o{},exports.PointerEvent.POINTER="pointer",exports.PointerEvent.BEFORE_DOWN="pointer.before_down",exports.PointerEvent.BEFORE_MOVE="pointer.before_move",exports.PointerEvent.BEFORE_UP="pointer.before_up",exports.PointerEvent.DOWN="pointer.down",exports.PointerEvent.MOVE="pointer.move",exports.PointerEvent.UP="pointer.up",exports.PointerEvent.OVER="pointer.over",exports.PointerEvent.OUT="pointer.out",exports.PointerEvent.ENTER="pointer.enter",exports.PointerEvent.LEAVE="pointer.leave",exports.PointerEvent.TAP="tap",exports.PointerEvent.DOUBLE_TAP="double_tap",exports.PointerEvent.CLICK="click",exports.PointerEvent.DOUBLE_CLICK="double_click",exports.PointerEvent.LONG_PRESS="long_press",exports.PointerEvent.LONG_TAP="long_tap",exports.PointerEvent.MENU="pointer.menu",exports.PointerEvent.MENU_TAP="pointer.menu_tap",exports.PointerEvent=i([e.registerUIEvent()],exports.PointerEvent);const n={};exports.DragEvent=class extends exports.PointerEvent{static setList(t){this.list=t instanceof e.LeafList?t:new e.LeafList(t)}static setData(t){this.data=t}getPageMove(t){return this.assignMove(t),this.current.getPagePoint(n,null,!0)}getInnerMove(t,e){return t||(t=this.current),this.assignMove(e),t.getInnerPoint(n,null,!0)}getLocalMove(t,e){return t||(t=this.current),this.assignMove(e),t.getLocalPoint(n,null,!0)}getPageTotal(){return this.getPageMove(!0)}getInnerTotal(t){return this.getInnerMove(t,!0)}getLocalTotal(t){return this.getLocalMove(t,!0)}assignMove(t){n.x=t?this.totalX:this.moveX,n.y=t?this.totalY:this.moveY}},exports.DragEvent.BEFORE_DRAG="drag.before_drag",exports.DragEvent.START="drag.start",exports.DragEvent.DRAG="drag",exports.DragEvent.END="drag.end",exports.DragEvent.OVER="drag.over",exports.DragEvent.OUT="drag.out",exports.DragEvent.ENTER="drag.enter",exports.DragEvent.LEAVE="drag.leave",exports.DragEvent=i([e.registerUIEvent()],exports.DragEvent),exports.DropEvent=class extends exports.PointerEvent{static setList(t){exports.DragEvent.setList(t)}static setData(t){exports.DragEvent.setData(t)}},exports.DropEvent.DROP="drop",exports.DropEvent=i([e.registerUIEvent()],exports.DropEvent),exports.MoveEvent=class extends exports.DragEvent{},exports.MoveEvent.BEFORE_MOVE="move.before_move",exports.MoveEvent.START="move.start",exports.MoveEvent.MOVE="move",exports.MoveEvent.END="move.end",exports.MoveEvent=i([e.registerUIEvent()],exports.MoveEvent),exports.RotateEvent=class extends o{},exports.RotateEvent.BEFORE_ROTATE="rotate.before_rotate",exports.RotateEvent.START="rotate.start",exports.RotateEvent.ROTATE="rotate",exports.RotateEvent.END="rotate.end",exports.RotateEvent=i([e.registerUIEvent()],exports.RotateEvent),exports.SwipeEvent=class extends exports.DragEvent{},exports.SwipeEvent.SWIPE="swipe",exports.SwipeEvent.LEFT="swipe.left",exports.SwipeEvent.RIGHT="swipe.right",exports.SwipeEvent.UP="swipe.up",exports.SwipeEvent.DOWN="swipe.down",exports.SwipeEvent=i([e.registerUIEvent()],exports.SwipeEvent),exports.ZoomEvent=class extends o{},exports.ZoomEvent.BEFORE_ZOOM="zoom.before_zoom",exports.ZoomEvent.START="zoom.start",exports.ZoomEvent.ZOOM="zoom",exports.ZoomEvent.END="zoom.end",exports.ZoomEvent=i([e.registerUIEvent()],exports.ZoomEvent),exports.KeyEvent=class extends o{},exports.KeyEvent.DOWN="key.down",exports.KeyEvent.HOLD="key.hold",exports.KeyEvent.UP="key.up",exports.KeyEvent=i([e.registerUIEvent()],exports.KeyEvent);const h=e.Debug.get("LeaferTypeCreator"),p={list:{},register(t,e){g[t]?h.repeat(t):g[t]=e},run(t,e){const i=g[t];i?i(e):h.error("no",t)}},{list:g,register:d}=p;d("draw",(function(t){const{config:e}=t;e.move.dragOut=!1})),d("design",(function(t){t.isApp||t.__eventIds.push(t.on_(exports.MoveEvent.BEFORE_MOVE,(e=>t.zoomLayer.move(e.moveX,e.moveY))),t.on_(exports.ZoomEvent.BEFORE_ZOOM,(i=>{const{zoomLayer:s}=t,{scaleX:r}=s.__,{min:a,max:o}=t.app.config.zoom;let{scale:n}=i,h=Math.abs(r*n);h<a?n=a/r:h>o&&(n=o/r),1!==n&&(e.PointHelper.scaleOf(s,i,n),s.scale=r*n)})))})),t.Leafer.prototype.initType=function(t){p.run(t,this)};class v{constructor(t){this.interaction=t}move(t){const{interaction:e}=this;if(!this.moveData){const{path:i}=e.selector.getByPoint(t,e.hitRadius);t.path=i,this.moveData=Object.assign(Object.assign({},t),{moveX:0,moveY:0}),e.emit(exports.MoveEvent.START,this.moveData)}t.path=this.moveData.path,e.emit(exports.MoveEvent.BEFORE_MOVE,t),e.emit(exports.MoveEvent.MOVE,t),this.transformEndWait()}zoom(t){const{interaction:e}=this;if(!this.zoomData){const{path:i}=e.selector.getByPoint(t,e.hitRadius);t.path=i,this.zoomData=Object.assign(Object.assign({},t),{scale:1}),e.emit(exports.ZoomEvent.START,this.zoomData)}t.path=this.zoomData.path,e.emit(exports.ZoomEvent.BEFORE_ZOOM,t),e.emit(exports.ZoomEvent.ZOOM,t),this.transformEndWait()}rotate(t){const{interaction:e}=this;if(!this.rotateData){const{path:i}=e.selector.getByPoint(t,e.hitRadius);t.path=i,this.rotateData=Object.assign(Object.assign({},t),{rotation:0}),e.emit(exports.RotateEvent.START,this.rotateData)}t.path=this.rotateData.path,e.emit(exports.RotateEvent.BEFORE_ROTATE,t),e.emit(exports.RotateEvent.ROTATE,t),this.transformEndWait()}transformEndWait(){clearTimeout(this.transformTimer),this.transformTimer=setTimeout((()=>{this.transformEnd()}),this.interaction.config.pointer.transformTime)}transformEnd(){this.moveEnd(),this.zoomEnd(),this.rotateEnd()}moveEnd(){this.moveData&&(this.interaction.emit(exports.MoveEvent.END,this.moveData),this.moveData=null)}zoomEnd(){this.zoomData&&(this.interaction.emit(exports.ZoomEvent.END,this.zoomData),this.zoomData=null)}rotateEnd(){this.rotateData&&(this.interaction.emit(exports.RotateEvent.END,this.rotateData),this.rotateData=null)}destroy(){this.zoomData=this.moveData=this.rotateData=null}}const c={getMoveEventData:(t,e,i)=>Object.assign(Object.assign({},i),{x:t.x,y:t.y,moveX:e.x,moveY:e.y}),getRotateEventData:(t,e,i)=>Object.assign(Object.assign({},i),{x:t.x,y:t.y,rotation:e}),getZoomEventData:(t,e,i)=>Object.assign(Object.assign({},i),{x:t.x,y:t.y,scale:e}),getDragEventData:(t,e,i)=>Object.assign(Object.assign({},i),{x:i.x,y:i.y,moveX:i.x-e.x,moveY:i.y-e.y,totalX:i.x-t.x,totalY:i.y-t.y}),getDropEventData:(t,e,i)=>Object.assign(Object.assign({},t),{list:e,data:i}),getSwipeDirection:t=>t<-45&&t>-135?exports.SwipeEvent.UP:t>45&&t<135?exports.SwipeEvent.DOWN:t<=45&&t>=-45?exports.SwipeEvent.RIGHT:exports.SwipeEvent.LEFT,getSwipeEventData:(t,i,s)=>Object.assign(Object.assign({},s),{moveX:i.moveX,moveY:i.moveY,totalX:s.x-t.x,totalY:s.y-t.y,type:l.getSwipeDirection(e.PointHelper.getAngle(t,s))}),getBase(t){const e=1===t.button?4:t.button;return{altKey:t.altKey,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,metaKey:t.metaKey,buttons:void 0===t.buttons?1:0===t.buttons?e:t.buttons,origin:t}},pathHasEventType(t,e){const{list:i}=t;for(let t=0,s=i.length;t<s;t++)if(i[t].hasEvent(e))return!0;return!1},filterPathByEventType(t,i){const s=new e.LeafList,{list:r}=t;for(let t=0,e=r.length;t<e;t++)r[t].hasEvent(i)&&s.add(r[t]);return s}},l=c,E=new e.LeafList,{getDragEventData:u,getDropEventData:m,getSwipeEventData:D}=c;class f{constructor(t){this.interaction=t}setDragData(t){this.animateWait&&this.dragEndReal(),this.downData=this.interaction.downData,this.dragData=u(t,t,t)}getList(){const{proxy:t}=this.interaction.selector;return!this.dragging||t&&t.list.length?E:exports.DragEvent.list||this.dragableList||E}checkDrag(t,e){const{interaction:i}=this;if(this.moving&&t.buttons<1)return this.canAnimate=!1,void i.pointerCancel();this.canAnimate=!0,!this.moving&&e&&(this.moving=i.moveMode||i.isHoldRightKey)&&i.emit(exports.MoveEvent.START,this.dragData),this.moving||this.dragStart(t,e),this.drag(t)}dragStart(t,e){this.dragging||(this.dragging=e&&a.left(t),this.dragging&&(this.interaction.emit(exports.DragEvent.START,this.dragData),this.getDragableList(this.dragData.path)))}getDragableList(t){let i;for(let s=0,r=t.length;s<r;s++)if(i=t.list[s],(i.__.draggable||i.__.editable)&&i.__.hitSelf&&!i.__.locked){this.dragableList=new e.LeafList(i);break}}drag(t){const{interaction:e,dragData:i,downData:s}=this,{path:r,throughPath:a}=s;this.dragData=u(s,i,t),a&&(this.dragData.throughPath=a),this.dragData.path=r,this.moving?(e.emit(exports.MoveEvent.BEFORE_MOVE,this.dragData),e.emit(exports.MoveEvent.MOVE,this.dragData)):this.dragging&&(this.dragReal(),e.emit(exports.DragEvent.BEFORE_DRAG,this.dragData),e.emit(exports.DragEvent.DRAG,this.dragData))}dragReal(){const{running:t}=this.interaction,i=this.getList();if(i.length&&t){const{moveX:t,moveY:s}=this.dragData;i.forEach((i=>e.LeafHelper.moveWorld(i,t,s)))}}dragOverOrOut(t){const{interaction:e}=this,{dragOverPath:i}=this,{path:s}=t;i?s.indexAt(0)!==i.indexAt(0)&&(e.emit(exports.DragEvent.OUT,t,i),e.emit(exports.DragEvent.OVER,t,s)):e.emit(exports.DragEvent.OVER,t,s),this.dragOverPath=s}dragEnterOrLeave(t){const{interaction:e}=this,{dragEnterPath:i}=this,{path:s}=t;e.emit(exports.DragEvent.LEAVE,t,i,s),e.emit(exports.DragEvent.ENTER,t,s,i),this.dragEnterPath=s}dragEnd(t,i){if(!this.dragData)return;const{moveX:s,moveY:r}=this.dragData;this.canAnimate&&this.moving&&(Math.abs(s)>1||Math.abs(r)>1)?(t=Object.assign({},t),i=.9*(i||("touch"===t.pointerType?2:1)),e.PointHelper.move(t,s*i,r*i),this.drag(t),this.animate((()=>{this.dragEnd(t,1)}))):this.dragEndReal(t)}dragEndReal(t){const{interaction:e,downData:i,dragData:s}=this;t||(t=s);const{path:r,throughPath:a}=i,o=u(i,t,t);a&&(o.throughPath=a),o.path=r,this.moving&&e.emit(exports.MoveEvent.END,o),this.dragging&&(e.emit(exports.DragEvent.END,o),this.swipe(t,o),this.drop(t)),this.autoMoveCancel(),this.dragReset(),this.animate(null,"off")}animate(t,e){const i=t||this.animateWait;i&&this.interaction.target.nextRender(i,e),this.animateWait=t}swipe(t,i){const{interaction:s}=this,{downData:r}=s;if(e.PointHelper.getDistance(r,t)>s.config.pointer.swipeDistance){const t=D(r,this.dragData,i);this.interaction.emit(t.type,t)}}drop(t){const e=m(t,this.getList(),exports.DragEvent.data);e.path=this.dragEnterPath,this.interaction.emit(exports.DropEvent.DROP,e),this.interaction.emit(exports.DragEvent.LEAVE,t,this.dragEnterPath)}dragReset(){exports.DragEvent.list=exports.DragEvent.data=this.dragableList=this.dragData=this.downData=this.dragOverPath=this.dragEnterPath=null,this.dragging=this.moving=!1}checkDragOut(t){const{interaction:e}=this;this.autoMoveCancel(),this.dragging&&!e.shrinkCanvasBounds.hitPoint(t)&&this.autoMoveOnDragOut(t)}autoMoveOnDragOut(t){const{interaction:i,downData:s}=this,{autoDistance:r,dragOut:a}=i.config.move;if(!a||!r)return;const o=i.shrinkCanvasBounds,{x:n,y:h}=o,p=e.BoundsHelper.maxX(o),g=e.BoundsHelper.maxY(o),d=t.x<n?r:p<t.x?-r:0,v=t.y<h?r:g<t.y?-r:0;let c=0,l=0;this.autoMoveTimer=setInterval((()=>{c+=d,l+=v,e.PointHelper.move(s,d,v),e.PointHelper.move(this.dragData,d,v),i.move(Object.assign(Object.assign({},t),{moveX:d,moveY:v,totalX:c,totalY:l})),i.pointerMoveReal(t)}),10)}autoMoveCancel(){this.autoMoveTimer&&(clearInterval(this.autoMoveTimer),this.autoMoveTimer=0)}destroy(){this.dragReset()}}const _=e.Debug.get("emit");const x=["move","zoom","rotate","key"];function P(t,e,i,s,r){if(x.some((t=>e.startsWith(t)))&&t.__.hitChildren&&!O(t,r)){let a;for(let o=0,n=t.children.length;o<n;o++)a=t.children[o],!i.path.has(a)&&a.__.hittable&&y(a,e,i,s,r)}}function y(t,i,s,r,a){if(t.destroyed)return!0;if(t.__.hitSelf&&t.hasEvent(i,r)&&!O(t,a)){s.phase=r?1:t===s.target?2:3;const a=e.EventCreator.get(i,s);if(t.emitEvent(a,r),a.isStop)return!0}return!1}function O(t,e){return e&&e.has(t)}const R={getData(t){const i=t[0],s=t[1],r=e.PointHelper.getCenter(i.from,s.from),a=e.PointHelper.getCenter(i.to,s.to),o={x:a.x-r.x,y:a.y-r.y},n=e.PointHelper.getDistance(i.from,s.from);return{move:o,scale:e.PointHelper.getDistance(i.to,s.to)/n,angle:e.PointHelper.getRotation(i.from,s.from,i.to,s.to),center:a}}},T={wheel:{zoomMode:!1,zoomSpeed:.5,moveSpeed:.5,rotateSpeed:.5,delta:{x:20,y:8},preventDefault:!0},pointer:{hitRadius:5,through:!1,tapTime:120,longPressTime:800,transformTime:500,dragHover:!0,dragDistance:2,swipeDistance:20,ignoreMove:!1,preventDefaultMenu:!0},cursor:{}},{pathHasEventType:w,getMoveEventData:L,getZoomEventData:C,getRotateEventData:b}=c;class M{static set(t,e){this.custom[t]=e}static get(t){return this.custom[t]}}M.custom={};class A extends e.CanvasManager{constructor(){super(...arguments),this.pathTypeList=new e.LeafList,this.imageTypeList=new e.LeafList}getImageType(t,i){return this.imageTypeList.add(t),e.Creator.hitCanvas(i)}getPathType(t){return this.pathTypeList.add(t),e.Creator.hitCanvas()}clearImageType(){this.__clearLeafList(this.imageTypeList)}clearPathType(){this.__clearLeafList(this.pathTypeList)}__clearLeafList(t){t.length&&(t.forEach((t=>{t.__hitCanvas&&(t.__hitCanvas.destroy(),t.__hitCanvas=null)})),t.reset())}clear(){this.clearPathType(),this.clearImageType()}}const{toInnerRadiusPointOf:H,copy:S,setRadius:B}=t.PointHelper,I={};t.Leaf.prototype.__hitWorld=function(e){return!this.__layout.hitCanvasChanged&&this.__hitCanvas||(this.__updateHitCanvas(),this.__layout.hitCanvasChanged=!1),this.__.hitRadius&&(S(I,e),B(e=I,this.__.hitRadius)),H(e,this.__world,I),!(!this.__.hitBox||!t.BoundsHelper.hitRadiusPoint(this.__layout.boxBounds,I))||this.__hit(I)},t.UI.prototype.__updateHitCanvas=function(){this.__hitCanvas||(this.__hitCanvas=this.leafer.hitCanvasManager.getPathType(this));const t=this.__hitCanvas;this.__drawHitPath(t),t.setStrokeOptions(this.__)},t.UI.prototype.__hit=function(e){"miniapp"===t.Platform.name&&this.__drawHitPath(this.__hitCanvas);const{fill:i,hitFill:s,windingRule:r}=this.__,a=i&&"path"===s||"all"===s,o=this.__hitFill(e,r);if(a&&o)return!0;const{stroke:n,hitStroke:h,__strokeWidth:p,strokeAlign:g}=this.__,d=n&&"path"===h||"all"===h,v=2*e.radiusX;let c=v;if(d)switch(g){case"inside":if(c+=2*p,!a&&o&&this.__hitStroke(e,c))return!0;c=v;break;case"center":c+=p;break;case"outside":if(c+=2*p,!a){if(!o&&this.__hitStroke(e,c))return!0;c=v}}return!!c&&this.__hitStroke(e,c)};const U=new t.UI;t.Rect.prototype.__updateHitCanvas=function(){(this.stroke||this.cornerRadius)&&U.__updateHitCanvas.call(this)},t.Rect.prototype.__hitFill=function(e,i){return this.__hitCanvas?U.__hitFill.call(this,e,i):t.BoundsHelper.hitRadiusPoint(this.__layout.boxBounds,e)},t.UI.prototype.find=function(t,e){return this.leafer?this.leafer.selector.getBy(t,this,!1,e):[]},t.UI.prototype.findOne=function(t,e){return this.leafer?this.leafer.selector.getBy(t,this,!0,e):null},t.Group.prototype.pick=function(t,e){return this.__layout.update(),e||(e={}),this.leafer?this.leafer.selector.getByPoint(t,e.hitRadius||0,Object.assign(Object.assign({},e),{target:this})):null},exports.Cursor=M,exports.HitCanvasManager=A,exports.InteractionBase=class{get dragging(){return this.dragger.dragging}get isDragEmpty(){return this.config.move.dragEmpty&&this.hoverData&&this.hoverData.path.list[0].isLeafer&&(!this.downData||this.downData.path.list[0].isLeafer)}get isHoldRightKey(){return this.config.move.holdRightKey&&this.downData&&a.right(this.downData)}get moveMode(){return this.config.move.drag||this.config.move.holdSpaceKey&&r.isHoldSpaceKey()||this.downData&&(this.config.move.holdMiddleKey&&a.middle(this.downData)||this.isHoldRightKey&&this.dragger.moving)||this.isDragEmpty}get hitRadius(){return this.config.pointer.hitRadius}constructor(t,i,s,r){this.config=T,this.tapCount=0,this.downKeyMap={},this.target=t,this.canvas=i,this.selector=s,this.defaultPath=new e.LeafList(t),this.transformer=new v(this),this.dragger=new f(this),r&&(this.config=e.DataHelper.default(r,this.config)),this.__listenEvents()}start(){this.running=!0}stop(){this.running=!1}receive(t){}pointerDown(t,e){t||(t=this.hoverData),t&&(a.defaultLeft(t),this.updateDownData(t),e&&(t.path=this.defaultPath),this.emit(exports.PointerEvent.BEFORE_DOWN,t),this.emit(exports.PointerEvent.DOWN,t),this.downTime=Date.now(),this.dragger.setDragData(t),a.left(t)?(this.tapWait(),this.longPressWait(t)):a.right(t)&&(this.waitMenuTap=!0),this.updateCursor(t))}pointerMove(t){if(t||(t=this.hoverData),!t)return;this.downData&&a.defaultLeft(t);const e=this.canvas.bounds.hitPoint(t);(e||this.downData)&&(e&&!this.downData&&a.left(t)&&this.pointerDown(t,!0),this.pointerMoveReal(t),this.dragger.checkDragOut(t))}pointerMoveReal(t){if(this.emit(exports.PointerEvent.BEFORE_MOVE,t,this.defaultPath),this.downData){const i=e.PointHelper.getDistance(this.downData,t)>this.config.pointer.dragDistance;i&&(this.waitTap&&this.pointerWaitCancel(),this.waitMenuTap=!1),this.dragger.checkDrag(t,i)}this.dragger.moving||(this.updateHoverData(t),this.emit(exports.PointerEvent.MOVE,t),this.pointerOverOrOut(t),this.pointerEnterOrLeave(t),this.dragger.dragging&&(this.dragger.dragOverOrOut(t),this.dragger.dragEnterOrLeave(t))),this.updateCursor(this.downData||t)}pointerUp(t){t||(t=this.downData),this.downData&&(a.defaultLeft(t),this.findPath(t),this.emit(exports.PointerEvent.BEFORE_UP,t),this.emit(exports.PointerEvent.UP,t),this.oldDownData&&this.emit(exports.PointerEvent.UP,this.oldDownData,void 0,t.path),this.emit(exports.PointerEvent.UP,this.downData,void 0,t.path),this.touchLeave(t),this.tap(t),this.menuTap(t),this.dragger.dragEnd(t),this.downData=this.oldDownData=null,this.updateCursor(t))}pointerCancel(){this.pointerUp(this.dragger.dragData)}multiTouch(t,e){const{move:i,angle:s,scale:r,center:a}=R.getData(e);this.rotate(b(a,s,t)),this.zoom(C(a,r,t)),this.move(L(a,i,t))}menu(t){this.findPath(t),this.emit(exports.PointerEvent.MENU,t)}menuTap(t){this.waitMenuTap&&this.emit(exports.PointerEvent.MENU_TAP,t)}move(t){this.transformer.move(t)}zoom(t){this.transformer.zoom(t)}rotate(t){this.transformer.rotate(t)}transformEnd(){this.transformer.transformEnd()}keyDown(t){const{code:e}=t;this.downKeyMap[e]||(this.downKeyMap[e]=!0,r.setDownCode(e),this.emit(exports.KeyEvent.HOLD,t,this.defaultPath),this.moveMode&&this.updateCursor()),this.emit(exports.KeyEvent.DOWN,t,this.defaultPath)}keyUp(t){const{code:e}=t;this.downKeyMap[e]=!1,r.setUpCode(e),this.emit(exports.KeyEvent.UP,t,this.defaultPath),"grab"===this.cursor&&this.updateCursor()}pointerOverOrOut(t){if(this.dragger.moving)return;if(this.dragging&&!this.config.pointer.dragHover)return;const{path:e}=t;this.overPath?e.indexAt(0)!==this.overPath.indexAt(0)&&(this.emit(exports.PointerEvent.OUT,t,this.overPath),this.emit(exports.PointerEvent.OVER,t,e)):this.emit(exports.PointerEvent.OVER,t,e),this.overPath=e}pointerEnterOrLeave(t){if(this.dragger.moving)return;if(this.dragging&&!this.config.pointer.dragHover)return;const{path:e}=t;this.emit(exports.PointerEvent.LEAVE,t,this.enterPath,e),this.emit(exports.PointerEvent.ENTER,t,e,this.enterPath),this.enterPath=e}touchLeave(t){"touch"===t.pointerType&&this.enterPath&&(this.emit(exports.PointerEvent.LEAVE,t),this.dragger.dragging&&this.emit(exports.DropEvent.LEAVE,t))}tap(t){const{pointer:e}=this.config,i=this.longTap(t);if(!e.tapMore&&i)return;if(!this.waitTap)return;e.tapMore&&this.emitTap(t);const s=Date.now()-this.downTime,r=[exports.PointerEvent.DOUBLE_TAP,exports.PointerEvent.DOUBLE_CLICK].some((e=>w(t.path,e)));s<e.tapTime+50&&r?(this.tapCount++,2===this.tapCount?(this.tapWaitCancel(),this.emitDoubleTap(t)):(clearTimeout(this.tapTimer),this.tapTimer=setTimeout((()=>{e.tapMore||(this.tapWaitCancel(),this.emitTap(t))}),e.tapTime))):e.tapMore||(this.tapWaitCancel(),this.emitTap(t))}findPath(t,e){const{hitRadius:i,through:s}=this.config.pointer,r=this.selector.getByPoint(t,i,e||{through:s});return r.throughPath&&(t.throughPath=r.throughPath),t.path=r.path,r.path}isDrag(t){return this.dragger.getList().has(t)}updateDownData(t,e){const{downData:i}=this;!t&&i&&(t=Object.assign({},i)),t&&(this.oldDownData=i,this.findPath(t,e),this.downData=t)}updateHoverData(t){t||(t=this.hoverData),t&&(this.findPath(t,{exclude:this.dragger.getList(),name:exports.PointerEvent.MOVE}),this.hoverData=t)}updateCursor(t){if(this.config.cursor.stop)return;if(t||(this.updateHoverData(),t=this.downData||this.hoverData),this.dragger.moving)return this.setCursor("grabbing");if(this.moveMode)return this.setCursor(this.downData?"grabbing":"grab");if(!t)return;let e,i;const{path:s}=t;for(let t=0,r=s.length;t<r&&(e=s.list[t],i=e.cursor,!i);t++);this.setCursor(i)}setCursor(t){this.cursor=t}emitTap(t){this.emit(exports.PointerEvent.TAP,t),this.emit(exports.PointerEvent.CLICK,t)}emitDoubleTap(t){this.emit(exports.PointerEvent.DOUBLE_TAP,t),this.emit(exports.PointerEvent.DOUBLE_CLICK,t)}pointerWaitCancel(){this.tapWaitCancel(),this.longPressWaitCancel()}tapWait(){clearTimeout(this.tapTimer),this.waitTap=!0}tapWaitCancel(){clearTimeout(this.tapTimer),this.waitTap=!1,this.tapCount=0}longPressWait(t){clearTimeout(this.longPressTimer),this.longPressTimer=setTimeout((()=>{this.longPressed=!0,this.emit(exports.PointerEvent.LONG_PRESS,t)}),this.config.pointer.longPressTime)}longTap(t){let e;return this.longPressed&&(this.emit(exports.PointerEvent.LONG_TAP,t),w(t.path,exports.PointerEvent.LONG_TAP)&&(e=!0)),this.longPressWaitCancel(),e}longPressWaitCancel(){clearTimeout(this.longPressTimer),this.longPressed=!1}__onResize(){this.shrinkCanvasBounds=new e.Bounds(this.canvas.bounds),this.shrinkCanvasBounds.spread(-2)}__listenEvents(){const{target:t}=this;this.__eventIds=[t.on_(e.ResizeEvent.RESIZE,this.__onResize,this)],t.once(e.LeaferEvent.READY,(()=>this.__onResize()))}__removeListenEvents(){this.target.off_(this.__eventIds),this.__eventIds.length=0}emit(t,e,i,s){this.running&&function(t,e,i,s){if(!i&&!e.path)return;let r;e.type=t,i?e=Object.assign(Object.assign({},e),{path:i}):i=e.path,e.target=i.indexAt(0);try{for(let a=i.length-1;a>-1;a--){if(r=i.list[a],y(r,t,e,!0,s))return;r.isApp&&P(r,t,e,!0,s)}for(let a=0,o=i.length;a<o;a++)if(r=i.list[a],r.isApp&&P(r,t,e,!1,s),y(r,t,e,!1,s))return}catch(t){_.error(t)}}(t,e,i,s)}destroy(){this.__eventIds.length&&(this.stop(),this.__removeListenEvents(),this.dragger.destroy(),this.transformer.destroy(),this.downData=this.overPath=this.enterPath=null)}},exports.InteractionHelper=c,exports.Keyboard=r,exports.LeaferTypeCreator=p,exports.MultiTouchHelper=R,exports.PointerButton=a,exports.UIEvent=o,Object.keys(t).forEach((function(e){"default"===e||Object.prototype.hasOwnProperty.call(exports,e)||Object.defineProperty(exports,e,{enumerable:!0,get:function(){return t[e]}})}));
1
+ "use strict";var t=require("@leafer-ui/draw"),e=require("@leafer/core");function i(t,e,i,s){var r,a=arguments.length,o=a<3?e:null===s?s=Object.getOwnPropertyDescriptor(e,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(t,e,i,s);else for(var n=t.length-1;n>=0;n--)(r=t[n])&&(o=(a<3?r(o):a>3?r(e,i,o):r(e,i))||o);return a>3&&o&&Object.defineProperty(e,i,o),o}"function"==typeof SuppressedError&&SuppressedError,exports.App=class extends t.Leafer{get __tag(){return"App"}get isApp(){return!0}constructor(t,e){super(t,e)}init(t,i){if(super.init(t,i),t){const{ground:i,tree:s,sky:r,editor:a}=t;i&&(this.ground=this.addLeafer(i)),(s||a)&&(this.tree=this.addLeafer(s)),(r||a)&&(this.sky=this.addLeafer(r||{type:"draw",usePartRender:!1})),a&&(this.editor=e.Creator.editor(a),this.sky.add(this.editor))}}__setApp(){const{canvas:t}=this,{realCanvas:i,view:s}=this.config;i||s===this.canvas.view||!t.parentView?this.realCanvas=!0:t.unrealCanvas(),this.leafer=this,this.watcher.disable(),this.layouter.disable(),this.__eventIds.push(this.on_(e.PropertyEvent.CHANGE,this.__onPropertyChange,this))}start(){super.start(),this.children.forEach((t=>t.start()))}stop(){this.children.forEach((t=>t.stop())),super.stop()}unlockLayout(){super.unlockLayout(),this.children.forEach((t=>t.unlockLayout()))}lockLayout(){super.lockLayout(),this.children.forEach((t=>t.lockLayout()))}forceRender(t){this.children.forEach((e=>e.forceRender(t)))}addLeafer(e){const i=new t.Leafer(e);return this.add(i),i}add(t){if(!t.view){if(this.realCanvas&&!this.canvas.bounds)return void setTimeout((()=>this.add(t)),10);t.init(this.__getChildConfig(t.userConfig),this)}super.add(t),this.__listenChildEvents(t)}__onPropertyChange(){e.Debug.showHitView&&this.children.forEach((t=>t.forceUpdate("surface")))}__onCreated(){this.created=this.children.every((t=>t.created))}__onReady(){this.children.every((t=>t.ready))&&super.__onReady()}__onViewReady(){this.children.every((t=>t.viewReady))&&super.__onViewReady()}__onChildRenderEnd(t){this.renderer.addBlock(t.renderBounds),this.viewReady&&this.renderer.update()}__render(t,e){this.children.forEach((e=>t.copyWorld(e.canvas)))}__onResize(t){this.children.forEach((e=>e.resize(t))),super.__onResize(t)}__checkUpdateLayout(){this.children.forEach((t=>t.__layout.update()))}__getChildConfig(t){let i=Object.assign({},this.config);return i.hittable=i.realCanvas=void 0,t&&e.DataHelper.assign(i,t),this.autoLayout&&e.DataHelper.copyAttrs(i,this,e.canvasSizeAttrs),i.view=this.realCanvas?void 0:this.view,i.fill=void 0,i}__listenChildEvents(t){t.once(e.LayoutEvent.END,(()=>this.__onReady())),t.once(e.RenderEvent.START,(()=>this.__onCreated())),t.once(e.RenderEvent.END,(()=>this.__onViewReady())),this.realCanvas&&this.__eventIds.push(t.on_(e.RenderEvent.END,this.__onChildRenderEnd,this))}},exports.App=i([e.registerUI()],exports.App);const s={},r={isHoldSpaceKey:()=>r.isHold("Space"),isHold:t=>s[t],setDownCode(t){s[t]||(s[t]=!0)},setUpCode(t){s[t]=!1}},a={LEFT:1,RIGHT:2,MIDDLE:4,defaultLeft(t){t.buttons||(t.buttons=1)},left:t=>1===t.buttons,right:t=>2===t.buttons,middle:t=>4===t.buttons};class o extends e.Event{get spaceKey(){return r.isHoldSpaceKey()}get left(){return a.left(this)}get right(){return a.right(this)}get middle(){return a.middle(this)}constructor(t){super(t.type),this.bubbles=!0,Object.assign(this,t)}getPage(){return this.current.getPagePoint(this)}getInner(t){return t||(t=this.current),t.getInnerPoint(this)}getLocal(t){return t||(t=this.current),t.getLocalPoint(this)}static changeName(t,i){e.EventCreator.changeName(t,i)}}exports.PointerEvent=class extends o{},exports.PointerEvent.POINTER="pointer",exports.PointerEvent.BEFORE_DOWN="pointer.before_down",exports.PointerEvent.BEFORE_MOVE="pointer.before_move",exports.PointerEvent.BEFORE_UP="pointer.before_up",exports.PointerEvent.DOWN="pointer.down",exports.PointerEvent.MOVE="pointer.move",exports.PointerEvent.UP="pointer.up",exports.PointerEvent.OVER="pointer.over",exports.PointerEvent.OUT="pointer.out",exports.PointerEvent.ENTER="pointer.enter",exports.PointerEvent.LEAVE="pointer.leave",exports.PointerEvent.TAP="tap",exports.PointerEvent.DOUBLE_TAP="double_tap",exports.PointerEvent.CLICK="click",exports.PointerEvent.DOUBLE_CLICK="double_click",exports.PointerEvent.LONG_PRESS="long_press",exports.PointerEvent.LONG_TAP="long_tap",exports.PointerEvent.MENU="pointer.menu",exports.PointerEvent.MENU_TAP="pointer.menu_tap",exports.PointerEvent=i([e.registerUIEvent()],exports.PointerEvent);const n={};exports.DragEvent=class extends exports.PointerEvent{static setList(t){this.list=t instanceof e.LeafList?t:new e.LeafList(t)}static setData(t){this.data=t}getPageMove(t){return this.assignMove(t),this.current.getPagePoint(n,null,!0)}getInnerMove(t,e){return t||(t=this.current),this.assignMove(e),t.getInnerPoint(n,null,!0)}getLocalMove(t,e){return t||(t=this.current),this.assignMove(e),t.getLocalPoint(n,null,!0)}getPageTotal(){return this.getPageMove(!0)}getInnerTotal(t){return this.getInnerMove(t,!0)}getLocalTotal(t){return this.getLocalMove(t,!0)}assignMove(t){n.x=t?this.totalX:this.moveX,n.y=t?this.totalY:this.moveY}},exports.DragEvent.BEFORE_DRAG="drag.before_drag",exports.DragEvent.START="drag.start",exports.DragEvent.DRAG="drag",exports.DragEvent.END="drag.end",exports.DragEvent.OVER="drag.over",exports.DragEvent.OUT="drag.out",exports.DragEvent.ENTER="drag.enter",exports.DragEvent.LEAVE="drag.leave",exports.DragEvent=i([e.registerUIEvent()],exports.DragEvent),exports.DropEvent=class extends exports.PointerEvent{static setList(t){exports.DragEvent.setList(t)}static setData(t){exports.DragEvent.setData(t)}},exports.DropEvent.DROP="drop",exports.DropEvent=i([e.registerUIEvent()],exports.DropEvent),exports.MoveEvent=class extends exports.DragEvent{},exports.MoveEvent.BEFORE_MOVE="move.before_move",exports.MoveEvent.START="move.start",exports.MoveEvent.MOVE="move",exports.MoveEvent.END="move.end",exports.MoveEvent=i([e.registerUIEvent()],exports.MoveEvent),exports.RotateEvent=class extends o{},exports.RotateEvent.BEFORE_ROTATE="rotate.before_rotate",exports.RotateEvent.START="rotate.start",exports.RotateEvent.ROTATE="rotate",exports.RotateEvent.END="rotate.end",exports.RotateEvent=i([e.registerUIEvent()],exports.RotateEvent),exports.SwipeEvent=class extends exports.DragEvent{},exports.SwipeEvent.SWIPE="swipe",exports.SwipeEvent.LEFT="swipe.left",exports.SwipeEvent.RIGHT="swipe.right",exports.SwipeEvent.UP="swipe.up",exports.SwipeEvent.DOWN="swipe.down",exports.SwipeEvent=i([e.registerUIEvent()],exports.SwipeEvent),exports.ZoomEvent=class extends o{},exports.ZoomEvent.BEFORE_ZOOM="zoom.before_zoom",exports.ZoomEvent.START="zoom.start",exports.ZoomEvent.ZOOM="zoom",exports.ZoomEvent.END="zoom.end",exports.ZoomEvent=i([e.registerUIEvent()],exports.ZoomEvent),exports.KeyEvent=class extends o{},exports.KeyEvent.DOWN="key.down",exports.KeyEvent.HOLD="key.hold",exports.KeyEvent.UP="key.up",exports.KeyEvent=i([e.registerUIEvent()],exports.KeyEvent);const h=e.Debug.get("LeaferTypeCreator"),p={list:{},register(t,e){g[t]?h.repeat(t):g[t]=e},run(t,e){const i=g[t];i?i(e):h.error("no",t)}},{list:g,register:d}=p;d("draw",(function(t){const{config:e}=t;e.move.dragOut=!1})),d("design",(function(t){t.isApp||t.__eventIds.push(t.on_(exports.MoveEvent.BEFORE_MOVE,(e=>t.zoomLayer.move(e.moveX,e.moveY))),t.on_(exports.ZoomEvent.BEFORE_ZOOM,(i=>{const{zoomLayer:s}=t,{scaleX:r}=s.__,{min:a,max:o}=t.app.config.zoom;let{scale:n}=i,h=Math.abs(r*n);h<a?n=a/r:h>o&&(n=o/r),1!==n&&(e.PointHelper.scaleOf(s,i,n),s.scale=r*n)})))})),t.Leafer.prototype.initType=function(t){p.run(t,this)};class v{constructor(t){this.interaction=t}move(t){const{interaction:e}=this;if(!this.moveData){const{path:i}=e.selector.getByPoint(t,e.hitRadius);t.path=i,this.moveData=Object.assign(Object.assign({},t),{moveX:0,moveY:0}),e.emit(exports.MoveEvent.START,this.moveData)}t.path=this.moveData.path,e.emit(exports.MoveEvent.BEFORE_MOVE,t),e.emit(exports.MoveEvent.MOVE,t),this.transformEndWait()}zoom(t){const{interaction:e}=this;if(!this.zoomData){const{path:i}=e.selector.getByPoint(t,e.hitRadius);t.path=i,this.zoomData=Object.assign(Object.assign({},t),{scale:1}),e.emit(exports.ZoomEvent.START,this.zoomData)}t.path=this.zoomData.path,e.emit(exports.ZoomEvent.BEFORE_ZOOM,t),e.emit(exports.ZoomEvent.ZOOM,t),this.transformEndWait()}rotate(t){const{interaction:e}=this;if(!this.rotateData){const{path:i}=e.selector.getByPoint(t,e.hitRadius);t.path=i,this.rotateData=Object.assign(Object.assign({},t),{rotation:0}),e.emit(exports.RotateEvent.START,this.rotateData)}t.path=this.rotateData.path,e.emit(exports.RotateEvent.BEFORE_ROTATE,t),e.emit(exports.RotateEvent.ROTATE,t),this.transformEndWait()}transformEndWait(){clearTimeout(this.transformTimer),this.transformTimer=setTimeout((()=>{this.transformEnd()}),this.interaction.config.pointer.transformTime)}transformEnd(){this.moveEnd(),this.zoomEnd(),this.rotateEnd()}moveEnd(){this.moveData&&(this.interaction.emit(exports.MoveEvent.END,this.moveData),this.moveData=null)}zoomEnd(){this.zoomData&&(this.interaction.emit(exports.ZoomEvent.END,this.zoomData),this.zoomData=null)}rotateEnd(){this.rotateData&&(this.interaction.emit(exports.RotateEvent.END,this.rotateData),this.rotateData=null)}destroy(){this.zoomData=this.moveData=this.rotateData=null}}const c={getMoveEventData:(t,e,i)=>Object.assign(Object.assign({},i),{x:t.x,y:t.y,moveX:e.x,moveY:e.y}),getRotateEventData:(t,e,i)=>Object.assign(Object.assign({},i),{x:t.x,y:t.y,rotation:e}),getZoomEventData:(t,e,i)=>Object.assign(Object.assign({},i),{x:t.x,y:t.y,scale:e}),getDragEventData:(t,e,i)=>Object.assign(Object.assign({},i),{x:i.x,y:i.y,moveX:i.x-e.x,moveY:i.y-e.y,totalX:i.x-t.x,totalY:i.y-t.y}),getDropEventData:(t,e,i)=>Object.assign(Object.assign({},t),{list:e,data:i}),getSwipeDirection:t=>t<-45&&t>-135?exports.SwipeEvent.UP:t>45&&t<135?exports.SwipeEvent.DOWN:t<=45&&t>=-45?exports.SwipeEvent.RIGHT:exports.SwipeEvent.LEFT,getSwipeEventData:(t,i,s)=>Object.assign(Object.assign({},s),{moveX:i.moveX,moveY:i.moveY,totalX:s.x-t.x,totalY:s.y-t.y,type:l.getSwipeDirection(e.PointHelper.getAngle(t,s))}),getBase(t){const e=1===t.button?4:t.button;return{altKey:t.altKey,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,metaKey:t.metaKey,buttons:void 0===t.buttons?1:0===t.buttons?e:t.buttons,origin:t}},pathHasEventType(t,e){const{list:i}=t;for(let t=0,s=i.length;t<s;t++)if(i[t].hasEvent(e))return!0;return!1},filterPathByEventType(t,i){const s=new e.LeafList,{list:r}=t;for(let t=0,e=r.length;t<e;t++)r[t].hasEvent(i)&&s.add(r[t]);return s}},l=c,E=new e.LeafList,{getDragEventData:u,getDropEventData:m,getSwipeEventData:D}=c;class f{constructor(t){this.interaction=t}setDragData(t){this.animateWait&&this.dragEndReal(),this.downData=this.interaction.downData,this.dragData=u(t,t,t)}getList(){const{proxy:t}=this.interaction.selector;return!this.dragging||t&&t.list.length?E:exports.DragEvent.list||this.dragableList||E}checkDrag(t,e){const{interaction:i}=this;if(this.moving&&t.buttons<1)return this.canAnimate=!1,void i.pointerCancel();this.canAnimate=!0,!this.moving&&e&&(this.moving=i.moveMode||i.isHoldRightKey)&&i.emit(exports.MoveEvent.START,this.dragData),this.moving||this.dragStart(t,e),this.drag(t)}dragStart(t,e){this.dragging||(this.dragging=e&&a.left(t),this.dragging&&(this.interaction.emit(exports.DragEvent.START,this.dragData),this.getDragableList(this.dragData.path)))}getDragableList(t){let i;for(let s=0,r=t.length;s<r;s++)if(i=t.list[s],(i.__.draggable||i.__.editable)&&i.__.hitSelf&&!i.__.locked){this.dragableList=new e.LeafList(i);break}}drag(t){const{interaction:e,dragData:i,downData:s}=this,{path:r,throughPath:a}=s;this.dragData=u(s,i,t),a&&(this.dragData.throughPath=a),this.dragData.path=r,this.moving?(e.emit(exports.MoveEvent.BEFORE_MOVE,this.dragData),e.emit(exports.MoveEvent.MOVE,this.dragData)):this.dragging&&(this.dragReal(),e.emit(exports.DragEvent.BEFORE_DRAG,this.dragData),e.emit(exports.DragEvent.DRAG,this.dragData))}dragReal(){const{running:t}=this.interaction,i=this.getList();if(i.length&&t){const{moveX:t,moveY:s}=this.dragData;i.forEach((i=>e.LeafHelper.moveWorld(i,t,s)))}}dragOverOrOut(t){const{interaction:e}=this,{dragOverPath:i}=this,{path:s}=t;i?s.indexAt(0)!==i.indexAt(0)&&(e.emit(exports.DragEvent.OUT,t,i),e.emit(exports.DragEvent.OVER,t,s)):e.emit(exports.DragEvent.OVER,t,s),this.dragOverPath=s}dragEnterOrLeave(t){const{interaction:e}=this,{dragEnterPath:i}=this,{path:s}=t;e.emit(exports.DragEvent.LEAVE,t,i,s),e.emit(exports.DragEvent.ENTER,t,s,i),this.dragEnterPath=s}dragEnd(t,i){if(!this.dragData)return;const{moveX:s,moveY:r}=this.dragData;this.canAnimate&&this.moving&&(Math.abs(s)>1||Math.abs(r)>1)?(t=Object.assign({},t),i=.9*(i||("touch"===t.pointerType?2:1)),e.PointHelper.move(t,s*i,r*i),this.drag(t),this.animate((()=>{this.dragEnd(t,1)}))):this.dragEndReal(t)}dragEndReal(t){const{interaction:e,downData:i,dragData:s}=this;t||(t=s);const{path:r,throughPath:a}=i,o=u(i,t,t);a&&(o.throughPath=a),o.path=r,this.moving&&e.emit(exports.MoveEvent.END,o),this.dragging&&(e.emit(exports.DragEvent.END,o),this.swipe(t,o),this.drop(t)),this.autoMoveCancel(),this.dragReset(),this.animate(null,"off")}animate(t,e){const i=t||this.animateWait;i&&this.interaction.target.nextRender(i,e),this.animateWait=t}swipe(t,i){const{interaction:s}=this,{downData:r}=s;if(e.PointHelper.getDistance(r,t)>s.config.pointer.swipeDistance){const t=D(r,this.dragData,i);this.interaction.emit(t.type,t)}}drop(t){const e=m(t,this.getList(),exports.DragEvent.data);e.path=this.dragEnterPath,this.interaction.emit(exports.DropEvent.DROP,e),this.interaction.emit(exports.DragEvent.LEAVE,t,this.dragEnterPath)}dragReset(){exports.DragEvent.list=exports.DragEvent.data=this.dragableList=this.dragData=this.downData=this.dragOverPath=this.dragEnterPath=null,this.dragging=this.moving=!1}checkDragOut(t){const{interaction:e}=this;this.autoMoveCancel(),this.dragging&&!e.shrinkCanvasBounds.hitPoint(t)&&this.autoMoveOnDragOut(t)}autoMoveOnDragOut(t){const{interaction:i,downData:s}=this,{autoDistance:r,dragOut:a}=i.config.move;if(!a||!r)return;const o=i.shrinkCanvasBounds,{x:n,y:h}=o,p=e.BoundsHelper.maxX(o),g=e.BoundsHelper.maxY(o),d=t.x<n?r:p<t.x?-r:0,v=t.y<h?r:g<t.y?-r:0;let c=0,l=0;this.autoMoveTimer=setInterval((()=>{c+=d,l+=v,e.PointHelper.move(s,d,v),e.PointHelper.move(this.dragData,d,v),i.move(Object.assign(Object.assign({},t),{moveX:d,moveY:v,totalX:c,totalY:l})),i.pointerMoveReal(t)}),10)}autoMoveCancel(){this.autoMoveTimer&&(clearInterval(this.autoMoveTimer),this.autoMoveTimer=0)}destroy(){this.dragReset()}}const _=e.Debug.get("emit");const x=["move","zoom","rotate","key"];function P(t,e,i,s,r){if(x.some((t=>e.startsWith(t)))&&t.__.hitChildren&&!O(t,r)){let a;for(let o=0,n=t.children.length;o<n;o++)a=t.children[o],!i.path.has(a)&&a.__.hittable&&y(a,e,i,s,r)}}function y(t,i,s,r,a){if(t.destroyed)return!0;if(t.__.hitSelf&&t.hasEvent(i,r)&&!O(t,a)){s.phase=r?1:t===s.target?2:3;const a=e.EventCreator.get(i,s);if(t.emitEvent(a,r),a.isStop)return!0}return!1}function O(t,e){return e&&e.has(t)}const R={getData(t){const i=t[0],s=t[1],r=e.PointHelper.getCenter(i.from,s.from),a=e.PointHelper.getCenter(i.to,s.to),o={x:a.x-r.x,y:a.y-r.y},n=e.PointHelper.getDistance(i.from,s.from);return{move:o,scale:e.PointHelper.getDistance(i.to,s.to)/n,angle:e.PointHelper.getRotation(i.from,s.from,i.to,s.to),center:a}}},T={wheel:{zoomMode:!1,zoomSpeed:.5,moveSpeed:.5,rotateSpeed:.5,delta:{x:20,y:8},preventDefault:!0},pointer:{hitRadius:5,through:!1,tapTime:120,longPressTime:800,transformTime:500,dragHover:!0,dragDistance:2,swipeDistance:20,ignoreMove:!1,preventDefaultMenu:!0},cursor:{}},{pathHasEventType:w,getMoveEventData:L,getZoomEventData:C,getRotateEventData:b}=c;class M{static set(t,e){this.custom[t]=e}static get(t){return this.custom[t]}}M.custom={};class A extends e.CanvasManager{constructor(){super(...arguments),this.pathTypeList=new e.LeafList,this.imageTypeList=new e.LeafList}getImageType(t,i){return this.imageTypeList.add(t),e.Creator.hitCanvas(i)}getPathType(t){return this.pathTypeList.add(t),e.Creator.hitCanvas()}clearImageType(){this.__clearLeafList(this.imageTypeList)}clearPathType(){this.__clearLeafList(this.pathTypeList)}__clearLeafList(t){t.length&&(t.forEach((t=>{t.__hitCanvas&&(t.__hitCanvas.destroy(),t.__hitCanvas=null)})),t.reset())}clear(){this.clearPathType(),this.clearImageType()}}const{toInnerRadiusPointOf:H,copy:S,setRadius:B}=t.PointHelper,I={};t.Leaf.prototype.__hitWorld=function(e){return!this.__layout.hitCanvasChanged&&this.__hitCanvas||(this.__updateHitCanvas(),this.__layout.hitCanvasChanged=!1),this.__.hitRadius&&(S(I,e),B(e=I,this.__.hitRadius)),H(e,this.__world,I),!(!this.__.hitBox||!t.BoundsHelper.hitRadiusPoint(this.__layout.boxBounds,I))||this.__hit(I)},t.UI.prototype.__updateHitCanvas=function(){this.__hitCanvas||(this.__hitCanvas=this.leafer.hitCanvasManager.getPathType(this));const t=this.__hitCanvas;this.__drawHitPath(t),t.setStrokeOptions(this.__)},t.UI.prototype.__hit=function(t){"miniapp"===e.Platform.name&&this.__drawHitPath(this.__hitCanvas);const{fill:i,hitFill:s,windingRule:r}=this.__,a=i&&"path"===s||"all"===s,o=this.__hitFill(t,r);if(a&&o)return!0;const{stroke:n,hitStroke:h,__strokeWidth:p,strokeAlign:g}=this.__,d=n&&"path"===h||"all"===h,v=2*t.radiusX;let c=v;if(d)switch(g){case"inside":if(c+=2*p,!a&&o&&this.__hitStroke(t,c))return!0;c=v;break;case"center":c+=p;break;case"outside":if(c+=2*p,!a){if(!o&&this.__hitStroke(t,c))return!0;c=v}}return!!c&&this.__hitStroke(t,c)};const U=new t.UI;t.Rect.prototype.__updateHitCanvas=function(){(this.stroke||this.cornerRadius)&&U.__updateHitCanvas.call(this)},t.Rect.prototype.__hitFill=function(e,i){return this.__hitCanvas?U.__hitFill.call(this,e,i):t.BoundsHelper.hitRadiusPoint(this.__layout.boxBounds,e)},t.UI.prototype.find=function(t,e){return this.leafer?this.leafer.selector.getBy(t,this,!1,e):[]},t.UI.prototype.findOne=function(t,e){return this.leafer?this.leafer.selector.getBy(t,this,!0,e):null},t.Group.prototype.pick=function(t,e){return this.__layout.update(),e||(e={}),this.leafer?this.leafer.selector.getByPoint(t,e.hitRadius||0,Object.assign(Object.assign({},e),{target:this})):null},exports.Cursor=M,exports.HitCanvasManager=A,exports.InteractionBase=class{get dragging(){return this.dragger.dragging}get isDragEmpty(){return this.config.move.dragEmpty&&this.hoverData&&this.hoverData.path.list[0].isLeafer&&(!this.downData||this.downData.path.list[0].isLeafer)}get isHoldRightKey(){return this.config.move.holdRightKey&&this.downData&&a.right(this.downData)}get moveMode(){return this.config.move.drag||this.config.move.holdSpaceKey&&r.isHoldSpaceKey()||this.downData&&(this.config.move.holdMiddleKey&&a.middle(this.downData)||this.isHoldRightKey&&this.dragger.moving)||this.isDragEmpty}get hitRadius(){return this.config.pointer.hitRadius}constructor(t,i,s,r){this.config=T,this.tapCount=0,this.downKeyMap={},this.target=t,this.canvas=i,this.selector=s,this.defaultPath=new e.LeafList(t),this.transformer=new v(this),this.dragger=new f(this),r&&(this.config=e.DataHelper.default(r,this.config)),this.__listenEvents()}start(){this.running=!0}stop(){this.running=!1}receive(t){}pointerDown(t,e){t||(t=this.hoverData),t&&(a.defaultLeft(t),this.updateDownData(t),e&&(t.path=this.defaultPath),this.emit(exports.PointerEvent.BEFORE_DOWN,t),this.emit(exports.PointerEvent.DOWN,t),this.downTime=Date.now(),this.dragger.setDragData(t),a.left(t)?(this.tapWait(),this.longPressWait(t)):a.right(t)&&(this.waitMenuTap=!0),this.updateCursor(t))}pointerMove(t){if(t||(t=this.hoverData),!t)return;this.downData&&a.defaultLeft(t);const e=this.canvas.bounds.hitPoint(t);(e||this.downData)&&(e&&!this.downData&&a.left(t)&&this.pointerDown(t,!0),this.pointerMoveReal(t),this.dragger.checkDragOut(t))}pointerMoveReal(t){if(this.emit(exports.PointerEvent.BEFORE_MOVE,t,this.defaultPath),this.downData){const i=e.PointHelper.getDistance(this.downData,t)>this.config.pointer.dragDistance;i&&(this.waitTap&&this.pointerWaitCancel(),this.waitMenuTap=!1),this.dragger.checkDrag(t,i)}this.dragger.moving||(this.updateHoverData(t),this.emit(exports.PointerEvent.MOVE,t),this.pointerOverOrOut(t),this.pointerEnterOrLeave(t),this.dragger.dragging&&(this.dragger.dragOverOrOut(t),this.dragger.dragEnterOrLeave(t))),this.updateCursor(this.downData||t)}pointerUp(t){t||(t=this.downData),this.downData&&(a.defaultLeft(t),this.findPath(t),this.emit(exports.PointerEvent.BEFORE_UP,t),this.emit(exports.PointerEvent.UP,t),this.oldDownData&&this.emit(exports.PointerEvent.UP,this.oldDownData,void 0,t.path),this.emit(exports.PointerEvent.UP,this.downData,void 0,t.path),this.touchLeave(t),this.tap(t),this.menuTap(t),this.dragger.dragEnd(t),this.downData=this.oldDownData=null,this.updateCursor(t))}pointerCancel(){this.pointerUp(this.dragger.dragData)}multiTouch(t,e){const{move:i,angle:s,scale:r,center:a}=R.getData(e);this.rotate(b(a,s,t)),this.zoom(C(a,r,t)),this.move(L(a,i,t))}menu(t){this.findPath(t),this.emit(exports.PointerEvent.MENU,t)}menuTap(t){this.waitMenuTap&&this.emit(exports.PointerEvent.MENU_TAP,t)}move(t){this.transformer.move(t)}zoom(t){this.transformer.zoom(t)}rotate(t){this.transformer.rotate(t)}transformEnd(){this.transformer.transformEnd()}keyDown(t){const{code:e}=t;this.downKeyMap[e]||(this.downKeyMap[e]=!0,r.setDownCode(e),this.emit(exports.KeyEvent.HOLD,t,this.defaultPath),this.moveMode&&this.updateCursor()),this.emit(exports.KeyEvent.DOWN,t,this.defaultPath)}keyUp(t){const{code:e}=t;this.downKeyMap[e]=!1,r.setUpCode(e),this.emit(exports.KeyEvent.UP,t,this.defaultPath),"grab"===this.cursor&&this.updateCursor()}pointerOverOrOut(t){if(this.dragger.moving)return;if(this.dragging&&!this.config.pointer.dragHover)return;const{path:e}=t;this.overPath?e.indexAt(0)!==this.overPath.indexAt(0)&&(this.emit(exports.PointerEvent.OUT,t,this.overPath),this.emit(exports.PointerEvent.OVER,t,e)):this.emit(exports.PointerEvent.OVER,t,e),this.overPath=e}pointerEnterOrLeave(t){if(this.dragger.moving)return;if(this.dragging&&!this.config.pointer.dragHover)return;const{path:e}=t;this.emit(exports.PointerEvent.LEAVE,t,this.enterPath,e),this.emit(exports.PointerEvent.ENTER,t,e,this.enterPath),this.enterPath=e}touchLeave(t){"touch"===t.pointerType&&this.enterPath&&(this.emit(exports.PointerEvent.LEAVE,t),this.dragger.dragging&&this.emit(exports.DropEvent.LEAVE,t))}tap(t){const{pointer:e}=this.config,i=this.longTap(t);if(!e.tapMore&&i)return;if(!this.waitTap)return;e.tapMore&&this.emitTap(t);const s=Date.now()-this.downTime,r=[exports.PointerEvent.DOUBLE_TAP,exports.PointerEvent.DOUBLE_CLICK].some((e=>w(t.path,e)));s<e.tapTime+50&&r?(this.tapCount++,2===this.tapCount?(this.tapWaitCancel(),this.emitDoubleTap(t)):(clearTimeout(this.tapTimer),this.tapTimer=setTimeout((()=>{e.tapMore||(this.tapWaitCancel(),this.emitTap(t))}),e.tapTime))):e.tapMore||(this.tapWaitCancel(),this.emitTap(t))}findPath(t,e){const{hitRadius:i,through:s}=this.config.pointer,r=this.selector.getByPoint(t,i,e||{through:s});return r.throughPath&&(t.throughPath=r.throughPath),t.path=r.path,r.path}isDrag(t){return this.dragger.getList().has(t)}updateDownData(t,e){const{downData:i}=this;!t&&i&&(t=Object.assign({},i)),t&&(this.oldDownData=i,this.findPath(t,e),this.downData=t)}updateHoverData(t){t||(t=this.hoverData),t&&(this.findPath(t,{exclude:this.dragger.getList(),name:exports.PointerEvent.MOVE}),this.hoverData=t)}updateCursor(t){if(this.config.cursor.stop)return;if(t||(this.updateHoverData(),t=this.downData||this.hoverData),this.dragger.moving)return this.setCursor("grabbing");if(this.moveMode)return this.setCursor(this.downData?"grabbing":"grab");if(!t)return;let e,i;const{path:s}=t;for(let t=0,r=s.length;t<r&&(e=s.list[t],i=e.cursor,!i);t++);this.setCursor(i)}setCursor(t){this.cursor=t}emitTap(t){this.emit(exports.PointerEvent.TAP,t),this.emit(exports.PointerEvent.CLICK,t)}emitDoubleTap(t){this.emit(exports.PointerEvent.DOUBLE_TAP,t),this.emit(exports.PointerEvent.DOUBLE_CLICK,t)}pointerWaitCancel(){this.tapWaitCancel(),this.longPressWaitCancel()}tapWait(){clearTimeout(this.tapTimer),this.waitTap=!0}tapWaitCancel(){clearTimeout(this.tapTimer),this.waitTap=!1,this.tapCount=0}longPressWait(t){clearTimeout(this.longPressTimer),this.longPressTimer=setTimeout((()=>{this.longPressed=!0,this.emit(exports.PointerEvent.LONG_PRESS,t)}),this.config.pointer.longPressTime)}longTap(t){let e;return this.longPressed&&(this.emit(exports.PointerEvent.LONG_TAP,t),w(t.path,exports.PointerEvent.LONG_TAP)&&(e=!0)),this.longPressWaitCancel(),e}longPressWaitCancel(){clearTimeout(this.longPressTimer),this.longPressed=!1}__onResize(){this.shrinkCanvasBounds=new e.Bounds(this.canvas.bounds),this.shrinkCanvasBounds.spread(-2)}__listenEvents(){const{target:t}=this;this.__eventIds=[t.on_(e.ResizeEvent.RESIZE,this.__onResize,this)],t.once(e.LeaferEvent.READY,(()=>this.__onResize()))}__removeListenEvents(){this.target.off_(this.__eventIds),this.__eventIds.length=0}emit(t,e,i,s){this.running&&function(t,e,i,s){if(!i&&!e.path)return;let r;e.type=t,i?e=Object.assign(Object.assign({},e),{path:i}):i=e.path,e.target=i.indexAt(0);try{for(let a=i.length-1;a>-1;a--){if(r=i.list[a],y(r,t,e,!0,s))return;r.isApp&&P(r,t,e,!0,s)}for(let a=0,o=i.length;a<o;a++)if(r=i.list[a],r.isApp&&P(r,t,e,!1,s),y(r,t,e,!1,s))return}catch(t){_.error(t)}}(t,e,i,s)}destroy(){this.__eventIds.length&&(this.stop(),this.__removeListenEvents(),this.dragger.destroy(),this.transformer.destroy(),this.downData=this.overPath=this.enterPath=null)}},exports.InteractionHelper=c,exports.Keyboard=r,exports.LeaferTypeCreator=p,exports.MultiTouchHelper=R,exports.PointerButton=a,exports.UIEvent=o,Object.keys(t).forEach((function(e){"default"===e||Object.prototype.hasOwnProperty.call(exports,e)||Object.defineProperty(exports,e,{enumerable:!0,get:function(){return t[e]}})}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leafer-ui/core",
3
- "version": "1.0.0-rc.12",
3
+ "version": "1.0.0-rc.16",
4
4
  "description": "@leafer-ui/core",
5
5
  "author": "Chao (Leafer) Wan",
6
6
  "license": "MIT",
@@ -29,11 +29,11 @@
29
29
  "leaferjs"
30
30
  ],
31
31
  "dependencies": {
32
- "@leafer-ui/draw": "1.0.0-rc.12",
33
- "@leafer-ui/app": "1.0.0-rc.12",
34
- "@leafer-ui/type": "1.0.0-rc.12",
35
- "@leafer-ui/interaction": "1.0.0-rc.12",
36
- "@leafer-ui/event": "1.0.0-rc.12",
37
- "@leafer-ui/hit": "1.0.0-rc.12"
32
+ "@leafer-ui/draw": "1.0.0-rc.16",
33
+ "@leafer-ui/app": "1.0.0-rc.16",
34
+ "@leafer-ui/type": "1.0.0-rc.16",
35
+ "@leafer-ui/interaction": "1.0.0-rc.16",
36
+ "@leafer-ui/event": "1.0.0-rc.16",
37
+ "@leafer-ui/hit": "1.0.0-rc.16"
38
38
  }
39
39
  }