@ray-js/robot-map-sdk 0.0.3-beta-2 → 0.0.3-beta-4
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/LICENSE +21 -0
- package/dist/application/AppContainer.js +1 -0
- package/dist/application/AppService.js +1 -0
- package/dist/application/Interaction.js +1 -0
- package/dist/application/MapApplication.js +1 -0
- package/dist/application/ViewportContainer.js +1 -0
- package/dist/assets/carpet.png.js +1 -0
- package/dist/assets/chargingStation.png.js +1 -0
- package/dist/assets/checkmark.png.js +1 -0
- package/dist/assets/cleanMode0.png.js +1 -0
- package/dist/assets/cleanMode1.png.js +1 -0
- package/dist/assets/cleanMode2.png.js +1 -0
- package/dist/assets/cleanMode3.png.js +1 -0
- package/dist/assets/cleanTimes1.png.js +1 -0
- package/dist/assets/cleanTimes2.png.js +1 -0
- package/dist/assets/controlDelete.png.js +1 -0
- package/dist/assets/controlMove.png.js +1 -0
- package/dist/assets/controlRotate.png.js +1 -0
- package/dist/assets/controlScale.png.js +1 -0
- package/dist/assets/fan0.png.js +1 -0
- package/dist/assets/fan1.png.js +1 -0
- package/dist/assets/fan2.png.js +1 -0
- package/dist/assets/fan3.png.js +1 -0
- package/dist/assets/fan4.png.js +1 -0
- package/dist/assets/floorType.png.js +1 -0
- package/dist/assets/robot.png.js +1 -0
- package/dist/assets/sleep.json.js +1 -0
- package/dist/assets/spot.png.js +1 -0
- package/dist/assets/water0.png.js +1 -0
- package/dist/assets/water1.png.js +1 -0
- package/dist/assets/water2.png.js +1 -0
- package/dist/assets/water3.png.js +1 -0
- package/dist/components/Base/BaseControlButton.js +1 -0
- package/dist/components/Base/Border.js +1 -0
- package/dist/components/Base/ControlFill.js +1 -0
- package/dist/components/Base/DashLine.js +1 -0
- package/dist/components/Base/EndPoint.js +1 -0
- package/dist/components/Base/EnhancedAnimatedSprite.js +1 -0
- package/dist/components/Base/EnhancedGifSprite.js +1 -0
- package/dist/components/Base/EnhancedSprite.js +1 -0
- package/dist/components/Base/FixedSizeContainer.js +1 -0
- package/dist/components/Base/FixedSizeDOMContainer.js +1 -0
- package/dist/components/Base/FixedSizeText.js +1 -0
- package/dist/components/Base/MoveControlButton.js +1 -0
- package/dist/components/Base/RemoveControlButton.js +1 -0
- package/dist/components/Base/Ring.js +1 -0
- package/dist/components/Base/RotateControlButton.js +1 -0
- package/dist/components/Base/ScaleControlButton.js +1 -0
- package/dist/components/Base/Zone.js +1 -0
- package/dist/components/ChargingStation/ChargingStationIcon.js +1 -0
- package/dist/components/ChargingStation/index.js +1 -0
- package/dist/components/Controls/CleanZone.js +1 -0
- package/dist/components/Controls/Divider.js +1 -0
- package/dist/components/Controls/ForbiddenMopZone.js +1 -0
- package/dist/components/Controls/ForbiddenSweepZone.js +1 -0
- package/dist/components/Controls/Spot.js +1 -0
- package/dist/components/Controls/VirtualWall.js +1 -0
- package/dist/components/CustomElements/CustomGif.js +1 -0
- package/dist/components/CustomElements/CustomHTML.js +1 -0
- package/dist/components/CustomElements/CustomImage.js +1 -0
- package/dist/components/DetectedObject/index.js +1 -0
- package/dist/components/Heatmap/index.js +1 -0
- package/dist/components/Map/Carpet.js +1 -0
- package/dist/components/Map/Free.js +1 -0
- package/dist/components/Map/Obstacle.js +1 -0
- package/dist/components/Map/RoomFill.js +1 -0
- package/dist/components/Path/index.js +1 -0
- package/dist/components/Robot/RobotIcon.js +1 -0
- package/dist/components/Robot/SleepAnimation.js +1 -0
- package/dist/components/Robot/index.js +1 -0
- package/dist/components/RoomFloorType/index.js +1 -0
- package/dist/components/RoomInfo/RoomName.js +1 -0
- package/dist/components/RoomInfo/RoomProperty.js +1 -0
- package/dist/components/RoomInfo/RoomSelectionIndicator.js +1 -0
- package/dist/components/RoomInfo/index.js +1 -0
- package/dist/constant/config.js +1 -0
- package/dist/constant/index.js +1 -0
- package/dist/constant/methods.js +1 -0
- package/dist/index.d.ts +7 -1
- package/dist/index.js +1 -0
- package/dist/managers/ControlsManager.js +1 -0
- package/dist/managers/CustomElementsManager.js +1 -0
- package/dist/managers/DetectedObjectManager.js +1 -0
- package/dist/managers/HeatmapManager.js +1 -0
- package/dist/managers/MapManager.js +1 -0
- package/dist/managers/PathManager.js +1 -0
- package/dist/managers/RoomManager.js +1 -0
- package/dist/mixins/ClickHandler.js +1 -0
- package/dist/utils/algorithm.js +1 -0
- package/dist/utils/browser.js +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/logger.js +1 -0
- package/dist-app/assets/{index-BEkoTlnr.js → index-Cnc23j8F.js} +1 -1
- package/dist-app/index.html +1 -1
- package/dist-docs/404.html +1 -1
- package/dist-docs/assets/{guide_getting-started.md.DYgZJpKh.js → guide_getting-started.md.K-Md02vP.js} +1 -1
- package/dist-docs/guide/advanced-usage.html +1 -1
- package/dist-docs/guide/concepts.html +1 -1
- package/dist-docs/guide/getting-started.html +3 -3
- package/dist-docs/hashmap.json +1 -1
- package/dist-docs/index.html +1 -1
- package/dist-docs/reference/callbacks.html +1 -1
- package/dist-docs/reference/config.html +1 -1
- package/dist-docs/reference/data.html +1 -1
- package/dist-docs/reference/methods.html +1 -1
- package/dist-docs/reference/runtime.html +1 -1
- package/dist-docs/reference/types.html +1 -1
- package/dist-docs/reference/utils.html +1 -1
- package/package.json +14 -4
- package/dist/index.cjs.js +0 -1
- package/dist/index.es.js +0 -1
- /package/dist-docs/assets/{guide_getting-started.md.DYgZJpKh.lean.js → guide_getting-started.md.K-Md02vP.lean.js} +0 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Tuya Inc.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Logger as e}from"../utils/logger.js";import{Container as t}from"pixi.js";import{useAppService as r}from"./AppService.js";const i="interaction",o="roomFill",s="free",n="roomFloorType",a="carpet",l="obstacle",c="heatmap",h="path",d="controls",p="roomInfo",y="detectedObject",m="customElement",u="customElementGif",g="chargingStation",b="robot",v=[i,o,s,n,a,l,c,h,p,y,m,u,g,b,d];class L extends t{layers=new Map;constructor(){super();const e=r().getApp().getViewportBounds();this.position.set(Math.round(e.width/2),Math.round(e.height/2)),this.initializeLayers()}initializeLayers(){Object.values(v).forEach(e=>{const r=new t;r.label=e,e===d&&(r.isRenderGroup=!0),e!==n&&e!==a||(r.eventMode="none"),this.layers.set(e,r),this.addChild(r)})}getLayer(e){return this.layers.get(e)}addToLayer(t,r,i){const o=this.layers.get(t);return o?(void 0!==i&&(r.zIndex=i),o.addChild(r),!0):(e.warn("[AppContainer Debug] Layer not found:",t),!1)}removeFromLayer(e,t){const r=this.layers.get(e);return!!r&&t.parent===r&&(r.removeChild(t),!0)}clearLayer(e){const t=this.layers.get(e);return!!t&&(t.removeChildren(),!0)}setLayerVisibility(e,t){const r=this.layers.get(e);return!!r&&(r.visible=t,!0)}getLayerVisibility(e){const t=this.layers.get(e);return!!t&&t.visible}}export{L as AppContainer,v as LAYERS,a as LAYER_CARPET,g as LAYER_CHARGING_STATION,d as LAYER_CONTROLS,m as LAYER_CUSTOM_ELEMENT,u as LAYER_CUSTOM_ELEMENT_GIF,y as LAYER_DETECTED_OBJECT,s as LAYER_FREE,c as LAYER_HEATMAP,i as LAYER_INTERACTION,l as LAYER_OBSTACLE,h as LAYER_PATH,b as LAYER_ROBOT,o as LAYER_ROOM_FILL,n as LAYER_ROOM_FLOOR_TYPE,p as LAYER_ROOM_INFO};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function t(){return r.getService()}import{snapshot as e}from"valtio/vanilla";import{MAIN_INSTANCE_KEY as n}from"../constant/index.js";class r{static contextStack=[];static instanceMap=new Map;static serviceCache=new WeakMap;static registerInstance(t,e){this.instanceMap.set(t,e)}static unregisterInstance(t){this.instanceMap.delete(t)}static getService(){const t=this.useContext();let e=this.serviceCache.get(t);return e||(e=new a,this.serviceCache.set(t,e)),e}static provide(t,e){this.contextStack.push(t);try{return e()}finally{this.contextStack.pop()}}static async provideAsync(t,e){this.contextStack.push(t);try{return await e()}finally{this.contextStack.pop()}}static useContext(){const t=this.contextStack[this.contextStack.length-1];if(!t){const t=this.instanceMap.get(n);if(!t)throw new Error("No MapApplication context found. Make sure you are calling useAppService() within a MapApplication context.");return t}return t}static hasContext(){return this.contextStack.length>0||this.instanceMap.has(n)}static clear(){this.contextStack.length=0,this.instanceMap.clear()}}class a{getApp(){return r.useContext()}getConfig(){return this.getApp().config}getRoomData(t){return this.getApp().managers.roomsManager.getRoomPropertyById(t)}metersToPixels(t){return this.getApp().metersToPixels(t)}pixelsToMeters(t){return this.getApp().pixelsToMeters(t)}get ticker(){return this.getApp().ticker}get mapState(){return this.getApp().mapState}get gloalConfig(){return this.getConfig().global}get mapConfig(){return this.getConfig().map}get roomConfig(){return this.getConfig().room}get heatMapConfig(){return this.getConfig().heatmap}get pathConfig(){return this.getConfig().path}get carpetConfig(){return this.getConfig().carpet}get robotConfig(){return this.getConfig().robot}get chargingStationConfig(){return this.getConfig().chargingStation}get interactionConfig(){return this.getConfig().interaction}get controlsConfig(){return this.getConfig().controls}get dividerConfig(){return this.getConfig().divider}get detectedObjectConfig(){return this.getConfig().detectedObject}get snapshotConfig(){return this.getConfig().snapshot}get appContainer(){return this.getApp().components.appContainer}get interaction(){return this.getApp().components.interaction}get viewportContainer(){return this.getApp().components.viewportContainer}get mapManager(){return this.getApp().managers.mapManager}get pathManager(){return this.getApp().managers.pathManager}get heatmapManager(){return this.getApp().managers.heatmapManager}get controlsManager(){return this.getApp().managers.controlsManager}get detectedObjectManager(){return this.getApp().managers.detectedObjectManager}get customElementsManager(){return this.getApp().managers.customElementsManager}get roomsManager(){return this.getApp().managers.roomsManager}get runtime(){return this.getApp().runtime}get runtimeSnapshot(){return e(this.getApp().runtime)}get events(){return this.getApp().events}get baseScale(){return this.getApp().components.interaction.targetScale.x}get currentScale(){return this.getApp().components.appContainer.scale.x}get emitter(){return this.getApp().emitter}}export{r as AppContext,t as useAppService};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Container as t,Graphics as i}from"pixi.js";import{easeInOutCubic as e}from"../utils/index.js";import{getDistance as s}from"../utils/algorithm.js";import{Logger as n}from"../utils/logger.js";import{debounce as a}from"lodash-es";import{useAppService as o}from"./AppService.js";class h extends t{dragStart=null;initialTouchDistance=null;initialScale=null;activeTouches=new Map;firstTouchId=null;secondTouchId=null;zoomFactor=.8;scaleMin=.2;scaleMax=5;originalPosition={x:0,y:0};targetPosition={x:0,y:0};centerPosition={x:0,y:0};originalScale={x:1,y:1};targetScale={x:1,y:1};defaultScale={x:1,y:1};transitionDuration=500;transitionStartTime=null;initialPinchCenter=null;isGestureValid=!0;lastTapTime=0;doubleTapDelay=300;doubleTapZoomFactor=1.5;lastTapPosition=null;tapDistanceThreshold=20;tapDetectionEnabled=!0;isGestureHijacked=!1;hijackedPointerId=null;isHijackPaused=!1;interactionGraphics;viewportBounds;boundResetAnimation;debouncedStopWheelRender;interactionState={isInteracting:!1,isAnimating:!1,interactionTimer:null,renderReasons:new Set};constructor(){super();const t=o().getApp();this.viewportBounds=t.getViewportBounds(),this.eventMode="static",this.interactionGraphics=new i,this.interactionGraphics.rect(this.viewportBounds.x,this.viewportBounds.y,this.viewportBounds.width,this.viewportBounds.height).fill({color:"#ffffff",alpha:0}),this.addChild(this.interactionGraphics),this.scaleMax=t.scaleMax,this.scaleMin=t.scaleMin,this.centerPosition={x:Math.round(this.viewportBounds.x+this.viewportBounds.width/2),y:Math.round(this.viewportBounds.y+this.viewportBounds.height/2)},this.originalPosition={x:Math.round(this.viewportBounds.width/2),y:Math.round(this.viewportBounds.height/2)},this.targetPosition={x:Math.round(this.viewportBounds.width/2),y:Math.round(this.viewportBounds.height/2)},this.boundResetAnimation=this.resetAnimation.bind(this),this.debouncedStopWheelRender=a(()=>{t.stopRender("wheel")},300),this.setupInteraction()}setupInteraction(){this.on("pointerdown",t=>this.onPointerDown(t)),this.on("pointerup",t=>this.onPointerUp(t)),this.on("pointerupoutside",t=>this.onPointerUp(t)),this.on("pointermove",t=>this.onPointerMove(t)),this.on("wheel",t=>this.onWheel(t)),o().emitter.on("gestureHijackStart",this.handleGestureHijacked),document.addEventListener("pointercancel",()=>{this.clearTouches()})}resetPan(t){const i=o(),e=i.getApp(),s=i.appContainer;null!==this.transitionStartTime&&(e.ticker.remove(this.boundResetAnimation),this.transitionStartTime=null);const n=this.centerPosition.x-t.x*s.scale.x,a=this.centerPosition.y-t.y*s.scale.y;this.originalPosition={x:s.x,y:s.y},this.targetPosition={x:n,y:a},this.originalScale={x:s.scale.x,y:s.scale.y},this.targetScale={x:s.scale.x,y:s.scale.y};const h=(r=Math.sqrt((s.x-n)**2+(s.y-a)**2),Math.pow(Math.min(1,r/1e3),.5));var r;this.transitionDuration=500+1e3*Math.min(1,Math.pow(h,2)),this.transitionStartTime=e.ticker.lastTime,e.ticker.add(this.boundResetAnimation)}setPanZoom({targetPosition:t,targetScale:i,setCenter:e=!1,setScale:s=!1}={},a=!0){const h=o(),r=h.getApp(),l=h.appContainer;if(e&&t&&(this.centerPosition={x:t.x,y:t.y},n.debug("[Interaction] Set center position:",this.centerPosition)),s&&i&&(this.defaultScale={x:i.x,y:i.y},this.scaleMin=i.x*r.scaleMin,this.scaleMax=i.x*r.scaleMax,n.debug("[Interaction] Set scale:",this.defaultScale)),this.originalPosition={x:l.x,y:l.y},this.originalScale={x:l.scale.x,y:l.scale.y},this.targetPosition=t||{x:this.centerPosition.x,y:this.centerPosition.y},this.targetScale=i||this.defaultScale,!a)return l.position.set(this.targetPosition.x,this.targetPosition.y),l.scale.set(this.targetScale.x,this.targetScale.y),this.antiScale(this.targetScale.x),void(null!==this.transitionStartTime&&(r.ticker.remove(this.boundResetAnimation),this.transitionStartTime=null));var c,u,d;const p=.8*(c=Math.sqrt((l.x-this.targetPosition.x)**2+(l.y-this.targetPosition.y)**2),Math.pow(Math.min(1,c/1e3),.5))+.2*(u=l.scale.x,d=this.targetScale.x,Math.pow(Math.min(1,Math.abs(u-d)/Math.abs(-.8)),.5));this.transitionDuration=500+1e3*Math.min(1,Math.pow(p,2)),null!==this.transitionStartTime&&(r.ticker.remove(this.boundResetAnimation),this.interactionState.isAnimating=!1,r.stopRender("animation")),this.interactionState.isAnimating=!0,r.requestRender("animation",!0),this.transitionStartTime=r.ticker.lastTime,r.ticker.add(this.boundResetAnimation)}clearTouches(){const t=o().getApp();this.activeTouches.clear(),this.firstTouchId=null,this.secondTouchId=null,this.dragStart=null,this.initialTouchDistance=null,this.initialScale=null,this.initialPinchCenter=null,this.isGestureValid=!0,null!==this.transitionStartTime&&(t.ticker.remove(this.boundResetAnimation),this.transitionStartTime=null),this.interactionState.isInteracting=!1,t.stopRender("interaction")}checkEventListeners(){return{wheel:this.listenerCount("wheel"),pointerdown:this.listenerCount("pointerdown"),pointerup:this.listenerCount("pointerup"),pointerupoutside:this.listenerCount("pointerupoutside"),pointermove:this.listenerCount("pointermove")}}destroy(){this.checkEventListeners(),this.interactionState.interactionTimer&&clearTimeout(this.interactionState.interactionTimer),this.interactionState.renderReasons.clear(),this.interactionState.isInteracting=!1,this.interactionState.isAnimating=!1,this.debouncedStopWheelRender.cancel(),o().emitter.off("gestureHijackStart",this.handleGestureHijacked),super.destroy()}handleGestureHijacked=t=>{this.isGestureHijacked=!0,this.hijackedPointerId=t.pointerId,this.isHijackPaused=!1,this.clearTouches(),this.activeTouches.set(t.pointerId,{x:t.global.x,y:t.global.y}),this.firstTouchId=t.pointerId,this.dragStart={x:t.global.x,y:t.global.y}};exitGestureHijacked(){null===this.hijackedPointerId||this.isHijackPaused||(this.activeTouches.delete(this.hijackedPointerId),this.firstTouchId===this.hijackedPointerId&&(this.firstTouchId=null,this.dragStart=null),this.secondTouchId===this.hijackedPointerId&&(this.secondTouchId=null)),this.isGestureHijacked=!1,this.hijackedPointerId=null,this.isHijackPaused=!1}pauseGestureHijack(){this.isHijackPaused=!0}resumeGestureHijack(){this.isHijackPaused=!1}antiScale(t){o().emitter.emit("antiScale",t)}resetAnimation(){const t=o(),i=t.getApp(),s=t.appContainer;if(null===this.transitionStartTime)return;const{targetPosition:n,targetScale:a}=this,h=i.ticker.lastTime,r=Math.min(1,(h-this.transitionStartTime)/this.transitionDuration);if(r>=1)s.position.set(n.x,n.y),s.scale.set(a.x,a.y),this.antiScale(a.x),i.ticker.remove(this.boundResetAnimation),this.transitionStartTime=null,this.interactionState.isAnimating=!1,i.stopRender("animation");else{const t=e(r),i=this.originalPosition.x+(n.x-this.originalPosition.x)*t,o=this.originalPosition.y+(n.y-this.originalPosition.y)*t,h=this.originalScale.x+(a.x-this.originalScale.x)*t,l=this.originalScale.y+(a.y-this.originalScale.y)*t;s.position.set(i,o),s.scale.set(h,l),this.antiScale(h)}}onWheel(t){const i=o();if(this.isGestureHijacked)return void n.warn("⚠️ [onWheel] 被手势劫持阻止执行",{isGestureHijacked:this.isGestureHijacked,hijackedPointerId:this.hijackedPointerId,isHijackPaused:this.isHijackPaused});i.getApp().requestRender("wheel",!0),this.debouncedStopWheelRender();const{scaleMin:e,scaleMax:s}=this,a=i.appContainer;t.preventDefault();const h=t.clientX,r=t.clientY,l=(h-a.x)/a.scale.x,c=(r-a.y)/a.scale.y,u=t.deltaY>0?.95:1.05;let d=a.scale.x*u,p=a.scale.y*u;if(d=Math.max(e,Math.min(s,d)),p=Math.max(e,Math.min(s,p)),d===a.scale.x&&p===a.scale.y)return;const x=h-l*d,m=r-c*p;try{a.scale.set(d,p),a.position.set(x,m),this.antiScale(d)}catch(t){n.error("❌ [onWheel] 应用缩放时发生错误:",t)}}onPointerDown(t){const i=o();this.interactionState.isInteracting=!0,i.getApp().requestRender("interaction",!0),this.isGestureHijacked&&(t.pointerId===this.hijackedPointerId||this.isHijackPaused||this.pauseGestureHijack());const e=i.getApp(),s=i.appContainer;if(null!==this.transitionStartTime&&(e.ticker.remove(this.boundResetAnimation),this.transitionStartTime=null),this.activeTouches.has(t.pointerId-2)&&this.activeTouches.delete(t.pointerId-2),0===this.activeTouches.size&&(this.isGestureValid=!0,this.initialTouchDistance=null,this.initialScale=null,this.initialPinchCenter=null,this.dragStart=null,this.firstTouchId=null,this.secondTouchId=null),this.activeTouches.has(t.pointerId)&&1===this.activeTouches.size&&(this.isGestureValid=!0),this.activeTouches.set(t.pointerId,{x:t.global.x,y:t.global.y}),1===this.activeTouches.size)this.firstTouchId=t.pointerId,this.dragStart={x:t.global.x,y:t.global.y};else if(2===this.activeTouches.size){const i=Array.from(this.activeTouches.keys());this.secondTouchId=i.find(t=>t!==this.firstTouchId)||t.pointerId,this.setInitialScaleAndDistance(s),this.tapDetectionEnabled=!1}}onPointerUp(t){const i=o();if(this.isGestureHijacked){if(t.pointerId===this.hijackedPointerId)return i.emitter.emit("gestureHijackPointerUp",t),void this.exitGestureHijacked();this.isHijackPaused}if(!this.activeTouches.has(t.pointerId))return;const e=null!==this.initialTouchDistance&&null!==this.initialScale;this.activeTouches.delete(t.pointerId),e&&1===this.activeTouches.size&&(this.isGestureValid=!1,this.initialTouchDistance=null,this.initialScale=null,this.initialPinchCenter=null),t.pointerId===this.firstTouchId?(this.firstTouchId=null,this.dragStart=null,0===this.activeTouches.size&&this.tapDetectionEnabled&&this.detectDoubleTap(t)):t.pointerId===this.secondTouchId&&(this.secondTouchId=null),this.isGestureHijacked&&this.isHijackPaused&&1===this.activeTouches.size&&Array.from(this.activeTouches.keys())[0]===this.hijackedPointerId&&this.resumeGestureHijack(),0===this.activeTouches.size&&(this.isGestureValid=!0,this.initialTouchDistance=null,this.initialScale=null,this.initialPinchCenter=null,this.firstTouchId=null,this.secondTouchId=null,this.dragStart=null,this.tapDetectionEnabled=!0,this.interactionState.isInteracting=!1,i.getApp().stopRender("interaction"))}detectDoubleTap(t){const i=o(),{interactionConfig:e}=i;if(!e.enableDoubleTapZoom)return;const n=performance.now(),a={x:t.global.x,y:t.global.y};n-this.lastTapTime<this.doubleTapDelay&&this.lastTapPosition&&s(a,this.lastTapPosition)<this.tapDistanceThreshold?(this.handleDoubleTap(a),this.lastTapTime=0,this.lastTapPosition=null):(this.lastTapTime=n,this.lastTapPosition=a)}handleDoubleTap(t){const i=o(),e=i.getApp(),s=i.appContainer,{scaleMin:n,scaleMax:a,doubleTapZoomFactor:h}=this,r=t.x,l=t.y,c=(r-s.x)/s.scale.x,u=(l-s.y)/s.scale.y;let d=s.scale.x*h,p=s.scale.y*h;d=Math.max(n,Math.min(a,d)),p=Math.max(n,Math.min(a,p)),this.originalPosition={x:s.x,y:s.y},this.originalScale={x:s.scale.x,y:s.scale.y};const x=r-c*d,m=l-u*p;this.targetPosition={x:x,y:m},this.targetScale={x:d,y:p},this.interactionState.isAnimating=!0,e.requestRender("animation",!0),this.transitionDuration=300,this.transitionStartTime=e.ticker.lastTime,e.ticker.add(this.boundResetAnimation)}onPointerMove(t){if(this.isGestureHijacked&&!this.isHijackPaused)return t.pointerId===this.hijackedPointerId?(this.activeTouches.set(t.pointerId,{x:t.global.x,y:t.global.y}),void o().emitter.emit("gestureHijackPointerMove",t)):void 0;this.activeTouches.has(t.pointerId)&&this.isGestureValid&&(this.activeTouches.set(t.pointerId,{x:t.global.x,y:t.global.y}),2===this.activeTouches.size&&null!==this.initialTouchDistance&&null!==this.initialScale&&this.applyPinchZoom(),1!==this.activeTouches.size||null===this.initialTouchDistance&&null===this.initialScale||(this.initialTouchDistance=null,this.initialScale=null,this.initialPinchCenter=null,this.secondTouchId=null),1===this.activeTouches.size&&t.pointerId===this.firstTouchId&&null!==this.dragStart&&this.applyPan(t))}applyPan(t){const i=o(),e=this.activeTouches.get(t.pointerId),s=i.appContainer,{x:n,y:a}=this.dragStart;s.position.set(s.x+e.x-n,s.y+e.y-a),this.dragStart={x:e.x,y:e.y}}applyPinchZoom(){const t=o().appContainer,i=Array.from(this.activeTouches.values());if(i.length<2||!this.initialTouchDistance||!this.initialScale||!this.initialPinchCenter)return;const e=s(i[0],i[1]),n={x:(i[0].x+i[1].x)/2,y:(i[0].y+i[1].y)/2},a=(n.x-t.position.x)/t.scale.x,h=(n.y-t.position.y)/t.scale.y,r=(e/this.initialTouchDistance)**this.zoomFactor,l=Math.max(this.scaleMin,Math.min(this.scaleMax,this.initialScale.x*r)),c=Math.max(this.scaleMin,Math.min(this.scaleMax,this.initialScale.y*r));t.scale.set(l,c);let u=n.x-a*l,d=n.y-h*c;u+=n.x-this.initialPinchCenter.x,d+=n.y-this.initialPinchCenter.y,t.position.set(u,d),this.antiScale(l),this.initialPinchCenter=n}setInitialScaleAndDistance(t){const i=Array.from(this.activeTouches.values());i.length<2||(this.initialTouchDistance=s(i[0],i[1]),this.initialScale={x:t.scale.x,y:t.scale.y},this.initialPinchCenter={x:(i[0].x+i[1].x)/2,y:(i[0].y+i[1].y)/2})}}export{h as Interaction};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Application as e,isMobile as t,Assets as a}from"pixi.js";import{Interaction as n}from"./Interaction.js";import{merge as r}from"lodash-es";import{proxy as i}from"valtio/vanilla";import{MAIN_INSTANCE_KEY as s}from"../constant/index.js";import o from"mitt";import{Logger as c}from"../utils/logger.js";import{AppContext as h}from"./AppService.js";import{nanoid as d}from"nanoid/non-secure";import{calculateLineEndpoints as p}from"../utils/algorithm.js";import{ViewportContainer as m}from"./ViewportContainer.js";import{AppContainer as l}from"./AppContainer.js";import{MapManager as g}from"../managers/MapManager.js";import{PathManager as u}from"../managers/PathManager.js";import{HeatmapManager as w}from"../managers/HeatmapManager.js";import{ControlsManager as M}from"../managers/ControlsManager.js";import{DetectedObjectManager as y}from"../managers/DetectedObjectManager.js";import{CustomElementsManager as f}from"../managers/CustomElementsManager.js";import{RoomManager as x}from"../managers/RoomManager.js";import{getOptimalAntialiasingStrategy as S}from"../utils/browser.js";import{DEFAULT_CONFIG as b,DEFAULT_RUNTIME_CONFIG as v}from"../constant/config.js";class C extends e{mapState=null;components={};managers={};config=b;runtime;scaleMin=.5;scaleMax=5;events={};instanceKey;containerElement;emitter=o();tickerState={renderReasons:new Set,renderTimer:null};pendingAsyncRender=!1;isFirstMapDraw=!0;constructor(e=s){super(),this.instanceKey=e,h.registerInstance(e,this),globalThis.__PIXI_APP__=this}async initialize(e){return h.provideAsync(this,async()=>{const{resizeTo:a,events:n,config:o,runtime:c={},...h}=e;this.config=r(this.config,o??{}),this.runtime=i(Object.assign({},v,c));const d=this.instanceKey===s;this.containerElement=a;const p=d?{textureGCMaxIdle:t.any?180:3600,textureGCCheckCountMax:t.any?100:50,autoStart:!1,eventFeatures:{move:!0,globalMove:!1,click:!0,wheel:!0}}:{textureGCMaxIdle:60,textureGCCheckCountMax:10,autoStart:!1,eventFeatures:{move:!1,globalMove:!1,click:!1,wheel:!1}};await this.init({resizeTo:d?a:void 0,preferWebGLVersion:2,resolution:window.devicePixelRatio||1,antialias:S(),autoDensity:!0,backgroundColor:this.config.global.backgroundColor,...p,...h}),this.preloadAssets(),this.scaleMax=this.config.interaction.zoomRange.max,this.scaleMin=this.config.interaction.zoomRange.min,this.events=n,this.initializeViewportContainer(),this.initializeInteraction(),this.initializeAppContainer(),this.managers.mapManager=new g,this.managers.heatmapManager=new w,this.managers.pathManager=new u,this.managers.controlsManager=new M,this.managers.detectedObjectManager=new y,this.managers.customElementsManager=new f,this.managers.roomsManager=new x,document.addEventListener("visibilitychange",this.onVisibilityChange)})}async drawMap(e){return h.provideAsync(this,async()=>{c.log("[Map] drawMap",e);const{size:t,resolution:a,origin:n}=e;n[0]===this.mapState?.origin.x&&n[1]===this.mapState?.origin.y||(this.managers.pathManager.updatePositionByOrigin(...n),this.managers.controlsManager.updatePositionByOrigin(...n),this.managers.detectedObjectManager.updatePositionByOrigin(...n),this.managers.customElementsManager.updatePositionByOrigin(...n)),this.mapState={id:e.id,status:1===e.status,origin:{x:n[0],y:n[1]},charger:{x:e.charger.coordinate[0],y:e.charger.coordinate[1]},chargerDirection:e.charger.angle??0,resolution:a,width:t[0],height:t[1]},this.isFirstMapDraw&&(this.isFirstMapDraw=!1,this.events?.onMapFirstDrawed?.(this.mapState)),this.events?.onMapDrawed?.(this.mapState),await this.managers.mapManager.drawMap(e),this.renderOnce()})}async drawRasterMap(e){return h.provideAsync(this,async()=>{c.log("[Map] drawRasterMap",e);const{mapHeader:t,mapData:a}=e,{originX:n,originY:r}=t;n===this.mapState?.origin.x&&r===this.mapState?.origin.y||(this.managers.pathManager.updatePositionByOrigin(n,r),this.managers.controlsManager.updatePositionByOrigin(n,r),this.managers.detectedObjectManager.updatePositionByOrigin(n,r),this.managers.customElementsManager.updatePositionByOrigin(n,r)),this.mapState={id:t.id,status:t.mapStable,origin:{x:n,y:r},charger:{x:t.chargeX,y:t.chargeY},chargerDirection:t.chargeDirection??0,resolution:100*t.mapResolution,width:t.mapWidth,height:t.mapHeight,version:t.version},this.isFirstMapDraw&&(this.isFirstMapDraw=!1,this.events?.onMapFirstDrawed?.(this.mapState)),this.events?.onMapDrawed?.(this.mapState),await this.managers.mapManager.drawRasterMap(a.parsed,this.mapState),this.renderOnce()})}drawPath(e){return h.provide(this,()=>{c.log("[Path] drawPath",e),this.events?.onPathDrawed?.({id:e.pathHeader.pathId,type:e.pathHeader.type,direction:e.pathHeader.direction,count:e.pathHeader.count,initFlag:e.pathHeader.initFlag,robotPosition:e.pathPoints[e.pathPoints.length-1]??null}),this.managers.pathManager.draw(e),this.renderOnce()})}async drawRoomProperty(e){return h.provide(this,()=>{c.log("[Room] drawRoomProperty",e),this.events?.onRoomPropertiesDrawed?.(e),this.managers.roomsManager.drawRoomProperty(e),this.renderOnceNextFrame()})}drawHeatmap({mapData:e,heatmapPoints:t,useGradient:a=!0}){return h.provide(this,()=>{c.log("[Heatmap] drawHeatmap",t),this.managers.heatmapManager.draw({mapData:e,heatmapPoints:t,useGradient:a}),this.renderOnce()})}drawForbiddenSweepZones(e){return h.provide(this,()=>{c.log("[Controls] drawForbiddenSweepZones",e),this.managers.controlsManager.drawForbiddenSweepZones(e),this.renderOnceNextFrame()})}drawForbiddenMopZones(e){return h.provide(this,()=>{c.log("[Controls] drawForbiddenMopZones",e),this.managers.controlsManager.drawForbiddenMopZones(e),this.renderOnceNextFrame()})}drawCleanZones(e){return h.provide(this,()=>{c.log("[Controls] drawCleanZones",e),this.managers.controlsManager.drawCleanZones(e),this.renderOnceNextFrame()})}drawVirtualWalls(e){return h.provide(this,()=>{c.log("[Controls] drawVirtualWalls",e),this.managers.controlsManager.drawVirtualWalls(e),this.renderOnceNextFrame()})}drawSpots(e){return h.provide(this,()=>{c.log("[Controls] drawSpots",e),this.managers.controlsManager.drawSpots(e),this.renderOnceNextFrame()})}async drawDetectedObjects(e){return h.provideAsync(this,async()=>{c.log("[DetectedObject] drawDetectedObjects",e),await this.managers.detectedObjectManager.drawDetectedObjects(e),this.renderOnceNextFrame()})}async drawCustomElements(e){return h.provideAsync(this,async()=>{c.log("[CustomElements] drawCustomElements",e),await this.managers.customElementsManager.drawCustomElements(e),this.renderOnceNextFrame()})}getForbiddenSweepZones(){return this.managers.controlsManager.getForbiddenSweepZones()}getForbiddenMopZones(){return this.managers.controlsManager.getForbiddenMopZones()}getCleanZones(){return this.managers.controlsManager.getCleanZones()}getVirtualWalls(){return this.managers.controlsManager.getVirtualWalls()}getSpots(){return this.managers.controlsManager.getSpots()}getEffectiveDividerPoints(){return this.managers.controlsManager.getEffectiveDividerPoints()}getDividerEndPoints(){return this.managers.controlsManager.getDividerEndPoints()}resetPanZoom(){this.components.interaction.setPanZoom()}fitMapToView(e,t=!1,a=!0){return h.provide(this,()=>{if(!e||e.minX===e.maxX||e.minY===e.maxY)return void c.warn("地图边界无效,无法自动适配视图");const n=this.config.map.autoPaddingPercent||.1,r=this.getViewportBounds(),i=e.maxX-e.minX,s=e.maxY-e.minY,o=r.width,h=r.height,d=o*(1-2*n)/i,p=h*(1-2*n)/s,m=Math.min(d,p),l=Math.max(this.scaleMin,Math.min(this.scaleMax,m)),g=o/2-(e.minX+i/2)*l,u=h/2-(e.minY+s/2)*l;this.components.interaction.setPanZoom({targetPosition:{x:g,y:u},targetScale:{x:l,y:l},setCenter:!0,setScale:!0},t),a&&this.emitter.emit("cacheAsTexture",Math.ceil(this.components.interaction.targetScale.x*this.scaleMax))})}getViewportBounds(){return this.components.viewportContainer?.getViewportBounds()||{x:0,y:0,width:this.renderer.width,height:this.renderer.height}}updateRuntime(e){Object.assign(this.runtime,e),this.renderOnceNextFrame()}metersToPixels(e){return this.mapState?.resolution?e*(1/(this.mapState.resolution/100)):(c.warn("Map resolution not available, using default resolution (5cm/pixel)"),20*e)}pixelsToMeters(e){return this.mapState?.resolution?e*(this.mapState.resolution/100):(c.warn("Map resolution not available, using default resolution (5cm/pixel)"),.05*e)}toFixedSize(e,t){return e/(t??this.components.appContainer.scale.x)}fromFixedSize(e,t){return e*(t??this.components.appContainer.scale.x)}getViewportCenterPoint(){if(!this.mapState)return c.warn("Map state not available, cannot calculate center point"),null;const e=this.getViewportBounds(),t=e.x+e.width/2,a=e.y+e.height/2,n=this.components.appContainer,r=n.scale.x,i=(t-n.x)/r,s=(a-n.y)/r;return{x:i-this.mapState.origin.x,y:s-this.mapState.origin.y}}getMapCenterPoint(){if(!this.mapState)return c.warn("Map state not available, cannot calculate map center point"),null;const e=this.managers.mapManager.mapBounds;if(e.minX===1/0||e.minY===1/0||e.maxX===-1/0||e.maxY===-1/0)return c.warn("Invalid map bounds, cannot calculate map center point"),null;const t=(e.minX+e.maxX)/2,a=(e.minY+e.maxY)/2;return{x:t-this.mapState.origin.x,y:a-this.mapState.origin.y}}getWallPointsByViewportCenter(e){const{width:t=this.config.controls.virtualWall.minWidth,direction:a="horizontal",offsetX:n=0,offsetY:r=0}=e||{},i=this.getViewportCenterPoint()||{x:0,y:0},s=this.metersToPixels(t);return p(i.x,i.y,s,a).map(e=>({x:e.x+n,y:e.y+r}))}getForbiddenSweepZonePointsByViewportCenter(e){const t=this.config.controls.forbiddenSweepZone,{size:a=t.minSize,offsetX:n=0,offsetY:r=0}=e||{};return this.generateZonePoints(a,n,r)}getForbiddenMopZonePointsByViewportCenter(e){const t=this.config.controls.forbiddenMopZone,{size:a=t.minSize,offsetX:n=0,offsetY:r=0}=e||{};return this.generateZonePoints(a,n,r)}getCleanZonePointsByViewportCenter(e){const t=this.config.controls.cleanZone,{size:a=t.minSize,offsetX:n=0,offsetY:r=0}=e||{};return this.generateZonePoints(a,n,r)}getSpotPointByViewportCenter(e){const{offsetX:t=0,offsetY:a=0}=e||{},n=this.getViewportCenterPoint()||{x:0,y:0};return{x:n.x+t,y:n.y+a}}async snapshot(){this.render(),await new Promise(e=>setTimeout(e,0));const{snapshot:e}=this.config;return await this.renderer.extract.base64({target:this.components.appContainer,format:e.format,quality:e.quality,resolution:e.resolution,antialias:e.antialias})}async snapshotByData({map:e,path:t,roomProperties:a,customElements:n,forbiddenSweepZones:r,forbiddenMopZones:i,virtualWalls:s,detectedObjects:o},h={}){const p=`SNAPSHOT_${d()}`;c.log(`[MapApplication] ${p} snapshot start`);const m=new C(p);try{if(await m.initialize({config:this.config,runtime:h}),!e)throw new Error("Map data is required");if(e.startsWith("7b22")){const{decodeMapStructured:t}=await import("@ray-js/robot-protocol"),a=t(e);await m.drawMap(a)}else{const{decodeMap:t}=await import("@ray-js/robot-protocol"),a=t(e);if(!a)throw new Error("Failed to decode raster map data");await m.drawRasterMap(a)}if(t){const{decodePath:e}=await import("@ray-js/robot-protocol"),a=e(t);m.drawPath(a)}a&&a.length>0&&m.drawRoomProperty(a),r&&r.length>0&&m.drawForbiddenSweepZones(r),i&&i.length>0&&m.drawForbiddenMopZones(i),s&&s.length>0&&m.drawVirtualWalls(s),o&&o.length>0&&await m.drawDetectedObjects(o),n&&n.length>0&&await m.drawCustomElements(n);const d=await m.snapshot();return c.log(`[MapApplication] ${p} snapshot completed successfully`),d}catch(e){throw c.error(`[MapApplication] ${p} snapshot other map failed:`,e),e}finally{c.log(`[MapApplication] ${p} destroy`),m.destroy()}}renderOnce(){c.log("[Pixi] renderOnce"),this.render()}renderOnceNextFrame(){this.pendingAsyncRender||(this.pendingAsyncRender=!0,requestAnimationFrame(()=>{c.log("[Pixi] renderOnceNextFrame"),this.render(),this.pendingAsyncRender=!1}))}requestRender(e,t=!1){t?(this.tickerState.renderReasons.add(e),this.ticker.started||(c.debug(`🎬 [Ticker] START: ${e}`),this.ticker.start())):this.renderOnceNextFrame()}stopRender(e){this.tickerState.renderReasons.delete(e),0===this.tickerState.renderReasons.size&&this.scheduleStopRender("final",100)}destroy(){h.unregisterInstance(this.instanceKey),this.tickerState.renderTimer&&clearTimeout(this.tickerState.renderTimer),this.tickerState.renderReasons.clear(),this.emitter.all.clear(),document.removeEventListener("visibilitychange",this.onVisibilityChange),this.managers.pathManager.destroy(),this.managers.mapManager.destroy(),this.managers.controlsManager.destroy(),this.managers.detectedObjectManager.destroy(),this.managers.customElementsManager.destroy(),this.managers.roomsManager.destroy(),this.components.interaction.destroy(),this.components.viewportContainer.destroy(),this.components.appContainer.destroy(),super.destroy()}initializeViewportContainer(){this.components.viewportContainer=new m(this.config,this.containerElement),this.stage.addChild(this.components.viewportContainer)}initializeAppContainer(){this.components.appContainer=new l,this.components.interaction.addChild(this.components.appContainer)}initializeInteraction(){this.components.interaction=new n,this.components.viewportContainer.addChild(this.components.interaction)}scheduleStopRender(e,t){this.tickerState.renderTimer&&clearTimeout(this.tickerState.renderTimer),this.tickerState.renderTimer=setTimeout(()=>{this.tickerState.renderReasons.delete(e),0===this.tickerState.renderReasons.size&&(c.debug("⏸️ [Ticker] STOP"),this.ticker.stop())},t)}generateZonePoints(e,t,a){const n=this.getViewportCenterPoint()||{x:0,y:0},r=this.metersToPixels(e)/2,i=n.x+t,s=n.y+a;return[{x:i-r,y:s-r},{x:i+r,y:s-r},{x:i+r,y:s+r},{x:i-r,y:s+r}]}preloadAssets(){const e=this.config.robot.icon.src,t=this.config.chargingStation.icon.src,n=[];a.add({alias:"robot",src:e}),n.push("robot"),a.add({alias:"chargingStation",src:t}),n.push("chargingStation"),a.add({alias:"deleteIcon",src:this.config.controls.deleteIconSrc}),n.push("deleteIcon"),a.add({alias:"rotateIcon",src:this.config.controls.rotateIconSrc}),n.push("rotateIcon"),a.add({alias:"scaleIcon",src:this.config.controls.scaleIconSrc}),n.push("scaleIcon"),a.add({alias:"moveIcon",src:this.config.controls.moveIconSrc}),n.push("moveIcon"),a.add({alias:"checkmark",src:this.config.room.selectionIndicator.iconSrc}),n.push("checkmark"),a.add({alias:"spotIcon",src:this.config.controls.spot.iconSrc}),n.push("spotIcon"),this.config.room.property.cleanMode.assets.forEach((e,t)=>{const r=`cleanMode_${t}`;a.add({alias:r,src:e}),n.push(r)}),this.config.room.property.suction.assets.forEach((e,t)=>{const r=`fan_${t}`;a.add({alias:r,src:e}),n.push(r)}),this.config.room.property.cistern.assets.forEach((e,t)=>{const r=`water_${t}`;a.add({alias:r,src:e}),n.push(r)}),this.config.room.property.cleanTimes.assets.forEach((e,t)=>{const r=`cleanTimes${t+1}`;a.add({alias:r,src:e}),n.push(r)}),a.backgroundLoad(n)}onVisibilityChange=()=>{"visible"===document.visibilityState||this.components.interaction?.clearTouches()}}export{C as MapApplication};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Container as i,Graphics as t}from"pixi.js";import{Logger as e}from"../utils/logger.js";class n extends i{viewportBounds={x:0,y:0,width:0,height:0};maskGraphics=null;containerElement=null;constructor(i,t){super(),this.containerElement=t||window,this.calculateViewportBounds(i.global),this.position.set(this.viewportBounds.x,this.viewportBounds.y),this.createMask()}calculateViewportBounds(i){const{containerTop:t,containerLeft:e,containerWidth:n,containerHeight:s}=i,{width:r,height:h}=this.getContainerSize(),o=this.parseSize(e,r),a=this.parseSize(t,h),d=this.parseSize(n,r),w=this.parseSize(s,h);this.viewportBounds={x:o,y:a,width:d,height:w}}getContainerSize(){if(!this.containerElement)return{width:window.innerWidth,height:window.innerHeight};if(this.containerElement===window)return{width:window.innerWidth,height:window.innerHeight};const i=this.containerElement;return{width:i.clientWidth||window.innerWidth,height:i.clientHeight||window.innerHeight}}createMask(){this.maskGraphics=new t,this.maskGraphics.rect(0,0,this.viewportBounds.width,this.viewportBounds.height).fill(16777215),this.addChild(this.maskGraphics),this.mask=this.maskGraphics}parseSize(i,t){if(!isNaN(Number(i)))return Number(i);if((i=i.trim()).endsWith("%"))return t*(parseFloat(i)/100);if(i.endsWith("vw")){const t=parseFloat(i)/100;return window.innerWidth*t}if(i.endsWith("vh")){const t=parseFloat(i)/100;return window.innerHeight*t}return i.endsWith("rpx")?parseFloat(i)*(window.innerWidth/750):i.endsWith("px")||!isNaN(parseFloat(i))?parseFloat(i):(e.warn(`Cannot parse size value: ${i}`),0)}getViewportBounds(){return{...this.viewportBounds}}updateViewport(i){this.calculateViewportBounds(i.global),this.position.set(this.viewportBounds.x,this.viewportBounds.y),this.maskGraphics?.clear(),this.maskGraphics?.rect(0,0,this.viewportBounds.width,this.viewportBounds.height).fill(16777215)}addContent(i){this.addChild(i)}}export{n as ViewportContainer};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAOklEQVR4AeySSQoAMAgDp/3/n9v4ABc8eRCSUyAwmgu8xIp9WYGfFpItgBk3OPpW5HAnMxBE0NciwAcAAP//bVPdOAAAAAZJREFUAwDM4hAZDjaEjwAAAABJRU5ErkJggg==";export{A as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAaVBMVEUAAAA3yFI4x1E3yFM4x1Q3yFI4x1I3yFM3ylVAz1BEzF44yFI3ylI3yFI2yVNGzF9GzGA3yFM4x1JKzWJY0nB62or///83yFL///+b46hQz2jN8dRp1n1Ey13y+/SC3ZPm+Om06r6n57PA80FIAAAAF3RSTlMA3yC/QO9grzAQ75+PcFDfz8+Ar2AwEAVwkmAAAANrSURBVGje1ZtpktowEEZbkiVvmG1m+Ixg1vsfMqnUVPWPkLG6W+DKu8CrJ7UBG5nEnLrtsQ1h5yIwOLcP45ReerovXWoPuIlrJ0/3wad2wI/Ep1S/PLUoIjQ13X4cUEzcNJW0TYCQUEP9zNpHqr2DHLvajzCwUY9ZcjARJ13uAWaCl3u3DhWI4p0+opTrwk7LlnmHYi74mb2/z0V0nbGAKzZ3DoLgRTFcVzhWUeB9n+daI5Yg4aNEDKRlbwOIgsvE2C7ub5QFl4pjV2WeOZjFgtk2e1/fWGwz7yHiPAvE2P3buwFkwSIxjtaB5mAWW0bb80ALglms3uYARhAsEONwyzuBEQSzWPkJ1kcwgmCZ2Hn1RHOwRoxRPdEcrBLDKyeLg5ViZw5WivFsDFaLgyn4a1aL0RiC82wQB0Pwp0UMr76G82wSj+oPrU+beNCudJ5tYiTlaF2s4vZ7pSHjOpvEPF4JMi42Ma/1EwRwsFbMay2c6YtNzHPtIYCDTWJ08p88F6OYN7mFAA7WinmTHSRc6ogP0quYg5nzDV6xwIleIOEyF3EpmK4kCy7jWnA3M60SjCONAu97tWC0oq+mj2rBCLR/bDCL3SrB2JFbJRiOBhTyWjMYkVDKuWYwQMXBb1WCWRzXCR7IrRPsaPfYYBaHVYKxp7BKMAK1qwRjpOMqwZhou0owEnWrBOOFTljm/fw3X6Zg9EQHqMimYCf+Qc9iU3ArvktlsSUY029xBxVZG8x35gM0ZEtwJFJvcrYEPxGpNzlrg/lRhIeGbAhGT/q1zobgQKRf66wL5ue32rnO+uDY0zcj5GRVMB+UUI9XVgej0TwoZ7E6OKj+GmCxJdiSnC3BzDOkZFMw4yAk24L1g52twdprOSuvYfPpvGz80GISRGRV8EQ3OEBCVn8tGRc7K4Kjp5tsISArghvbQT0Wc7Buopkdisni4H2dQ0ZZEFz1eFPmYInXfpAsy4Jjxw7baGdZcFPtsGAWPgAooIlFYkFw3FY8EJrLg11X8whsLg52ksO3+2VxafDOk4TNorgw+CiQ8oiZcVsS4wPMHDxpmKIxN5GSfgMDo6/7OoroInq4Ojz/vy/h/FFvBGM2jJ7q0Zdmt4lq06enuNDapru91za1Djc5tKmj+9K/pGkMe+cGILpdCO1x251Iyi/g4vimU9Z1kQAAAABJRU5ErkJggg==";export{A as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAANlBMVEUAAAD////////////////////////////////////////////////////////////////////xY8b8AAAAEXRSTlMA3yB/YL9Az5+QEK/vj3BQMNgNE0EAAAEySURBVGje7dnLbsJAFIPhk2RmcoO2ef+X7SJSvaJe2VWF/7UPn1AEC6iUUkoppZRS+q2x9d6XucyN6brbvPRy/TR5ZLiQjzIEFz3LEFz0sLxluKiVIbhoL0Nw0VbC4LrfMVz+jLUumksXXP6Ite7r78y4ceNK3K/20Ybfbes9XLzucZKtyK2VrFXuQvYqdyYXKrcauVG5dZIrlVud3KncOsmlyq2d3KrcGuRa5dbxeHEvctEneQXiuj6L/EYj8wuNzPcama81Mt9qZL7UyHynkflKI/ONRuYLpcxdhcxdjcxcnUxcnfwkrkzWuZDdLmS3C9ntQna7kN0uZLcL2e1CdruQ/S7kf/e7mUDWupDdLmS3C9nvQv77/4LhWmrTddfheppbX6d1H5VSSimllFJ6674BgnCK71i7vw8AAAAASUVORK5CYII=";export{A as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAPFBMVEUAAAD////////////////////////////////////////////////////////////////////////////YSWgTAAAAE3RSTlMAYN+fgL9AIO8QcFDPfzCQr49fa1RRAwAAAnlJREFUaN7t2NmumzAQgOHxvhEgnfd/17ZKDhMMSmobz+mR/F1Fraq/jAeywDAMwzAMwzB8N6EfHPBS+ORn4GRxY4CToLCED9jD4bYa8Q3hMOEfU+AMUxdRcYdXfFK8YYWbO2f4hi9uPGHqUpkrHDHziydsMednjrDz21/J7ZXrH3YvNXo9he5h83qV83b1qneYFnren3fsGxYUyjfc9gzTYml40jT6juFtmZaTp6fpFqYDlgE2QdL0O4UdTfV0/t71CdOgE+wkGnaXcKTFyiw07B5hQ3+Sm76GHa4P06QdkPyY79eFJ/iij4M+HoO7LGyy+2YCcjJs1SEMTk2TDh++e4Qrw5/R6mnusKPFZg3TJVveMJ2y4g3Tfe6Zw/TgdLxheq9IvGHaa8EdBnzQPyEsVvO0qr8Mhb3au7sLR33HAvLTjZwKtqKIhXORPukXPHMKxA/PTOgV1u/nNsE/c3oTxVGye+79oizAy3k6YlaKlp7VDWsemLN9ECf0UTjrVl0wlklnXbrgXrfTcW+dwbpfJBYsY7Kfjz1Wfjk3WCjQdkSDxJd1A5ay9NBo+Z0tYSlNO9XQBYWlTPb9sfR86Z8X8ie34RqgkMNyNt9KaWs+X5WL++0wAiqsWG79+k9LxElbqCKxnKeDClBpxhoOmkWsEaGZwRoKmmEVCa0sEtZDXrCOgEYT1lmgTUDCesgJa4XWT8PEKLXuLkotBonX2iNJ0ETu98Vm96rYD1dedsgOq8MGWogsnLK3IJuFLzvkNQuL7AOOexO20MBkYV0QTpeNWh/DkIWve5uIk5TSPCQAoV7cAOD5ctFaR4CotXhIMwzDMAzDMAz/j98ceskaOhA77AAAAABJRU5ErkJggg==";export{A as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAM1BMVEUAAAD///////////////////////////////////////////////////////////////+3leKCAAAAEHRSTlMAYJ+Av0Df7xBwIJBQz68wzE7woAAAAVNJREFUaN7t2d1ugzAMhmHHSUj4Kfj+r3asmxrIClKYlwzpe8446XuQgi0gAAAAgNuIxj4ZqmsI8s1RVSwvnmpyKWzpBMIII4zwWdjQCYQRRhhhhBE+hDDCCCOMMHX/IOzpxG3D0fJeSGHHe0b35VKBntSMUqLTvHlKhFZhGUiLsVu9ecNvENxP9MlkfurtzkRaeml0I89SJpKSIGUM6fBSaCQdVgo99J6YTQ45SjFPGiYpNtaexrofox5SLGgc8iDS5pCNJFX3LpYLnOIKXXvvWuSSRWMktjnkWS5hjZHY5JC9XDTUHYmJqTsSE1YciczcycbMHCRxlvU2vin7Kc4eyJ0klrzeMsBZ2GVhdxw2eiPxTXg+Do8KIzGFuyzMWVhr41vycMjCYxZW+3e5LCxZ2B6Gw0S/Mbjuk3tar3lrDfvXhbWeol2ZL5EAAAAAAOCvfQALwYE8tktFzgAAAABJRU5ErkJggg==";export{A as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAANlBMVEUAAAD////////////////////////////////////////////////////////////////////xY8b8AAAAEnRSTlMA5VZzrI86yR0O12VHK4GeumR+Sig+AAAB1ElEQVRo3u3aYW+jMAyAYTuExEkItP//z550VHCVOGMzl02an6+b+i4hIRQNnHPOOed+KkoruNmAL7nAnQg3M9wp7OEMDA972MMe9vDvDkdgeNjDHvawhz38Xx72sIc9/H1hasNfLazGPZzDu8R8StG/XFIY4FCPFfERlC+XVBJ3cWZNeNKFA/u3N91S+upcx+2ntShGHDfLeGB4dzTVbxNyI2ImhGEbbnCnvIc7qNAUJFKBQ8+tu2iqZcgoNRIAs6wzKbpJluU/el7v7PSJbcy/tKcwtASqrtZotBP0ikG3ZNSbDMIjXtBOBkPCiba9yBQR61yAF9F6xJQlT0wJLyHBtZvsrzA+gVFFe66iXg3AwZdoPdO5y1bNDIym71YC3iQ5LGZ9OMielWs33kxZ9u2gFetdPIOJaH2z7LGKwos+fLqwPnRCzGePfLIRN9vFlcT/UjChWuKeZcSLr+jDD2ZIHbFOadXLyUVRG4twl0SyvXVhDvxZvAvW53FdhjCld+s8lLDEl4qIXb2hDBYdPdivMyUbh3eF39S9Xm6N/+qHKxe48jZm64Oq8mGgi+Vwfi7H01+5YuBFyVMDjfgJA5yj8LDO1qf8ZYSlVMA555xz7rv9AZlKFXj5dr43AAAAAElFTkSuQmCC";export{A as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAOVBMVEUAAAD///////////////////////////////////////////////////////////////////////8KOjVvAAAAEnRSTlMAQCBggN+/nxDvcM8wkFCwoI+ASc+UAAACfUlEQVRo3u3Z7XajIBCAYWAAAVET7v9iN6my6CR0lmo+Np3nV3vSkzcKQmkFY4wxxhhj78EFfQVOPJDr05cgCpNmVjyQuo3IlEVRPDUsxePEV4UlhzmcfVy44zCHPzkMnx2GV4eHV4X1W4WVKDjMYQ6/fRh+TTiswnJ2TtkoVw7+FLqEVfqeFjecNsl3amc4JoKrnOq93BeWVFgKpEsz7/bdav0lwOzUmw1rI77glIU94XblFnXPDZdJMfw8HBTiBM3n8Eh+xuu4pYycw6MttKovAkZQhku3t4su0xlk8kJcwug5rtwvq8TBZKLKSneDFIeLxIN8BJVFuQCAgMLTkUX7zagPKGzEsxhqtc5gsnBk+ITCorhdtI07aNTLg0qtjJBnfRXo2blbTHZhspIZ8bTua5e0zAVLjBmtLMAeff/DsGrIzu9j18tHlaQ2GmgK+zzI9M6niU82pSYyXwv9G6cKQRLbWIMghCuXXxcVuebT8ArZ5xldv1ibB5eYfG2DPJBXbBIZ7lMjtdqSVf02Do76T08rWA2yrocjeUxq1ZU1p/r2LiWjZ6BqK3krs94nPNSeYWqRMamZ2+wT5jxGtTHfyd7MKuWY2o3EzECTqL+7YwcyQ+8T2O30Dbdhm9rZO+tsDwVu5HuNT1j7Bpk+7MC9M8VIJKh9IvOySvtkHPEwGV++vOjt3+9td+VX+4RvmY31hykot3n6DFpOYfPTU9PksPG2q9AQDShscbjsDU7V0QdMQOEJhU8ofNhfnCYUtv8YDnvDHoV7FB62r/uyT+wjEwobFNbb1w87LgW8geBlbzTLmV2Kq+XcBiB3ht0IMMqL6ARjjDHGGGP/qT+Hf7FSTq027wAAAABJRU5ErkJggg==";export{A as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAM1BMVEUAAAD///////////////////////////////////////////////////////////////+3leKCAAAAEHRSTlMA378ggBAw78+fYECPcFCv86Xy/gAAAk9JREFUaN7t2WlPwzAMgGGnjnP2yP//tWgg0GavaVCOCpH3K1WfHWnjMpjNZrPZbDabzf5cZg8BYXTGq/TIBRgYBpd+8jAoCkt6aYURRZ9EBmQdvliZh77tKr3PQdd0Og16FtNNsL8LVv8OXu6C17tgfJYWNQ6G7ZtRHgEHwhDVJxsIAMAxuG8m7ObdWoMR/TkYg9Y7Qb6o143awto+DrQRMqFKj1ZqB9P34Raz7leOqmG5w6hTmRybLKpguaUqKtj+Yj0sb7dHwZyxNoKP9JyGN4X03NIFThuIjE3PHY3gcDUPI9vtdSOY2HkVigX9kqUy2MJVaJlM2XkuQBms4DLD5CM3OG/QDJayPl8BGlrCYOTbyr+keji/tOWCroelLJc2Oe42h6VMckGv0AOG7VVxyBe0hz4wc0QeKuAK2UEFXCE76gmDrnElXC8rhB6wlKXbHYY143aF4eCuRRgCo7yAx8B0F6w5rMbAxiaeHgGjTTLdB5ajrJS7wNKVbV1g6cpCF1i6sr0HLF2ZNV1gOdmpsDsm94GJMSieqhQ2gqXLH/uRyx1g//byMYnJzWF/csPYuNwY9qf7kWYyNYV1ZrJb+d8awjr7eTomN4Kla03+vuJbwVreG/Py2gaO1/uQ4RtGE/j6Z195UTWBXyeOpejrwBZw2WXq28Ou6MZEruhfbAf78HKFso0PVckFFX4zp6my8QZtyQ17+cWDDzr+EvMDtzL5k5UPaaTt43w7XGQ+347HgpOlA6EkMtEUHbdHhMtMjASz2Ww2m81ms9mIPgCfVZZTXlzW2AAAAABJRU5ErkJggg==";export{A as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAM1BMVEUAAAD///////////////////////////////////////////////////////////////+3leKCAAAAEHRSTlMAgCDf7xAwz0BwYL+fj1CvJC6qIwAAAtFJREFUaN7tmUlu7CAURelbg9n/av/kKyX7GnjGppRInGmED/AaoMIWi8VisVgsFou/gnE5hOAE+yIi7Lb8YLesGTLBassZFR2bjNjKNXPVmpc6cV64hSwtlGdz4KUHZ8BUL5rne+ebfaERXva6QkSKd+tIQvHw7FxIEczb1ABv4lPaqhx5dcnHj++Hb4s4b8m5nbnpGOUXxYcGnRiwH8xuzk5L3eul/jWvgPU0N3t/TRzKh9ifWpzStTghGAzJPAXd0TjOvatWsWGXxPJB4ZbJ/rEpIp7qHD7azutq+2mYtb3oubmfOBuuGL1FiWbFYqTkz0jTWzHGWCvCEcKvDzhh/4/LrIItHyyk5qkLIKFaFTyqYrkgtZit1VATu8CogZ6LdeybJxvvXiLl6P3EtO8QHhN66Hjrl7E9mQ0m9Ogh45oTFrJ5O+IP7osbTBjM1dQO4B1MLaVZ17xDQoOXRIR66Zl57Q9p/MotGMXsbyc0IlR/KG6pgeToeBELC6aYpcCEtvqON0HwiGb3zOuhUKrkAox7HUSuQXjv0SUU5CrF/Nwrbyaln+ClBYm/4dUSBg+a1T2vhcGDZmVu7bOFwaNmdy++w5NW5wKe40XkSRy/5HWYWjO9OPbD/kXv0HFo1HPvyEXLPfBq8NLNAZrdvZ4zavYPvaNm/qS5x9LCT/NuJ1Hey4HwHW/ALchTvAk2ltwQtideDi8Gmhm9asCLTdLAYrql4B94rSaXJ5ZCGPdKQU+chPeVxK/wWTebDkYytcyu3CCd1KGzV7bxbI/lDrb5cuF4YlWHa7IT16RV9endf52bm+JYD2FEL35fQIiJSIhg5znpK/ddcVOsQEz7ERVDJcdXvHdbIkbEQEUQSZViCrRfNCJuRR9s41u9kDC18XnvFX2j3bHLR/A2zSqzAzpzGh/tYdKy29xFhH9cPsZkxwho5wRbLBaLxWKxWCx+I/8ANf2/u2NhQhAAAAAASUVORK5CYII=";export{A as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8BAMAAADI0sRBAAAAG1BMVEUAAAD////////////////////////////////rTT7CAAAACHRSTlMAgL9g36+fQGFJCmkAAADFSURBVDjL3dS7DcJAEIRhniJ1SIgEBSAqQFRARguEJBTgxJqy7cDeX7ZGmtwX+fbu8+t2d7Pqsb99lqHH617XX6mZr26lrrCkdr58ljTxnTRxsHQZJwfBwXqWhoP1rmfDwfrVFA5mO3Ozm4DHRCwmZDExjwlaDPcYDrYcbDnYcrDlYM/BnoM9b+Jyvnl+tfxh+beA4elIwoGmdAjJlFIxJHIqg1hEuQRzAZ9c+dN6jmB4bj2hcYW2F5omLfe6PMH/0HLXPHpWgenjpk040QAAAABJRU5ErkJggg==";export{A as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8BAMAAADI0sRBAAAAJFBMVEUAAAD///////////////////////////////////////////+0CY3pAAAAC3RSTlMAYIDvMBDPv4+fcLUOqFYAAAEWSURBVDjLvZW9isJAFIXHkLCw1S5ss9ikt00h2ETyAqn0CaxsbHwCSyvfwN7KEUQ8L2dilJPE4Z5GPFXgy5efOzP3um6i1FkZeYtGQGrJgDflSrfkSjdk6kGZekimHpTHwIZ6Xz5Ngb9JWB8C2QD4KYBrAM9wymscT7AI4GSZuRq74ly6QOZ5g+O1C6fBzHvwd9nHSfu20aKPZ75dsHPZxckSKWVg1cVfgG9XO+/iuK485az/7uKpUyamTpmYOmVi6o18+X3kH9g9r7d3PYKRtJKNeIHFw8WniR8TZRFFFUsiFlRsB7mZ9FZ0g9eNvP/AIdIHWB9/3TwObD1H0bhE2xNNU7Rc0bAN3ethoUeNHlR6zIkheQMcOzccp+sDkgAAAABJRU5ErkJggg==";export{A as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAMAAAANIilAAAAAM1BMVEUAAAD///////////////////////////////////////////////////////////////+3leKCAAAAEHRSTlMA32CAIEAQ779wz4+fUDCvilaH/gAAAZdJREFUSMftltuOxCAIhsWiVqst7/+0m5jsEIUqm72d/64M33BSWvfVP9WgzKZ4wqRyayhWojwbMwlVhfVAdAnrIeHmVK/TGWAvfOJDRAn3cGqSLURc8AJOSrcqcdIrGBT26r8EFd4FbsSBN2kDzgUnnsAOJohKwZSiBZ6PQpBG+5xP6gpWGGRgiksYDhGax0TFrWBAVzn03GqqK7igcwgces46L+DSS/IfuHDWopBBvrNdHBrdaAnuRdlH/p8xzfj7fLutkLr4JN+cyV7P535MqQQDzHnff4eRRu+DZ2dQ4Y4N8GGBK3sPa/mxwJnhoWawwG2EAxlnNXpnbqC5Yzg5Jz41VpgHe3LeVpg3hxebLV7HDgZ+Hi1YiNqmYZX339B/hNXlnpvrOTR2dgFfYlnCh66dXcCPGIwnThxoCSd5A4FYSzhwYLZZ4UO7+pcRTupRBBMciLQPFwQLfL68HTDt4fD2Jr4N8Ply91oSaeuBS9SO7BaOoLMHGeCq15tJwppTyk6qGuBG9KC6Hk6Y9ERRGXj31f/0A2zyPsVxnMRtAAAAAElFTkSuQmCC";export{A as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8BAMAAADI0sRBAAAAIVBMVEUAAAD////////////////////////////////////////PIev5AAAACnRSTlMA7zC/QN+fgCAQTQcGNgAAAMRJREFUOMvd0jEKwkAURdFPBEkdsLFKyAYk2UIqO1uXYOUSXIJbCCiCqzTDe8Ei3qmDrz3caebH+7tHLLZ6fvZpHfFYhwaPV8jOiZ0zn5QTd3vlwIdGOXGhnDiUIytHdk7sHNk5sXNi53dg5a9lPQxDHc6vQUu5YlqjmFbGv++W1W2V5ctY5+L534vpt37E89lspr9eaKmzIfbVIfvqzJSbKTdjLsZczLkYczHmrZjyXWLKtaDcTLkZc+K2TzsTH/Xu2vkDlC8AMDsTJN8AAAAASUVORK5CYII=";export{A as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAOVBMVEUAAAD///////////////////////////////////////////////////////////////////////8KOjVvAAAAEnRSTlMAgH/fIL9gcEDvoBDPsJCPUDD8BuiCAAACCklEQVRo3u3Zza6bMBCG4Y/434aQzP1fbCt14SOZSac+zPQs/C4jwaME7ICN1Wq1Wq1W87VYd0dEe9gy7MqBvuQi9OusHp3PenqMPeiix31uZU5YiVTlB3PCk5jSTXChS9kTV2m3uG/mR0zEtt0Ce7qWKw873FK5livx+VvgRJdyIr6IW9ou5Ux8T2jKgYcrNOXMwwGq8qYM83IqLKws+8rB2jISA+vLkbmr9eUnM1mry819+GO0Hs8ZPdPx3NCzlB16pvKBnqkc0TOVPXqWskPPVH6iZyp79CzlHUM2csSQiewwZCNHDJnIAUM2cgOTosy35CUvecn/W37H83C/C8nbyT6FMhjqcnsE6pnJOdBFTVPu7FiEqvwOxJTAyeN1KrQf8Z/ck9gyZPLL0Z+cF7N+l6yX8rL3r7P0z8tb6jreLV7pLba77K01IWcR/MlNwIycxDsS/Er8lFwFrv/szslBAEeJK5fl8CFx5bIc3jn3AKblQwBzrmuYl5/fgD0wL78EcOEv8Lzsp6cPB3xDDhBUmZlyWpYenZgvPC8Lj27cfta8HCEq0Fi2eN7OzFjSlwMDq8u+MLC6nAYYsJGfw3aWlVyH6cNK3obpw0qOrrsehnLfN9299Zu7j4FKiD97zeBvcgKfqlwaDNukI1JT3mBalyNs26RzgZb8gnlxpxIyVqvVarVarb70C7CyrCEVukMsAAAAAElFTkSuQmCC";export{A as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAPFBMVEUAAAD////////////////////////////////////////////////////////////////////////////YSWgTAAAAE3RSTlMA3yC/EECAYM+f73CQr1Awj6BvNXOp4gAAAlpJREFUaN7s1t1ugzAMhmE7TgghgdL5/u91ndBK11SYfFonTcpzXl7yR0Nd13Vd13Xd/+VWVk6OAD7PzCxDIMCHbtrTQfQbR2o1oD/2q97A6agPBjrPsd4BU+ZZgfLehQcd9acMdKEXF31yoVNYX0uewAewb9mRtfFkmaHZcroDy1qZfMMCweULtEGCHprJlrU2kiXpsRXanPbG9mrJZIjQzxY12O/O0BoVNbFHTiPDe3q32lu6NtnzZAv257Zmn32bGP9LaBgfsh9VwameoCHbXRVgjWtTc1eLEZ71FNfa1WCEIxS2u0wWAcOO9UiknblBphLdTViKTMb7W12mEyJv2cHTLpRRd0PjRLGjU0IecvDVoLLo5ko3IY0yx2prGF2Qi/PI8lVzsj/TvLbg3YMl3cp6oHgC2MddjsMS6Bddnj8NAmQRw/OlJgBZxFUfpNf3Dsme6P1hCqx3k5SloYpO9XA//SWlVPLi6G1Cdev8K/I407Z3fUBweFnQLi5+tmcGOQzCMBA0EBKSllz4/1/b+x6QVXmqVp4PrBDGeHfP7ei7JX9LmXM1nlKHIwUK+JaMQbfHw1C6RCoMTQ57iEUMAkOTIwDiEGsCoGddMYouthdiiNFnmBJtQHQNohkWV7YRYJrol6wZ+DCE05kjBawteK4d0VnAbEGPfF8cTAvhPnAcq0VTHTkWIKwdLySsBQkgDBxBsjHJ2W6qB9zYskDADVbGpSB+Zru+NF4TEHb3UtUi2aHhUqq3aPn9H4XV4MLDU06PWgyhbaCsNlDjrbmcz8wzkyRJkuRDXlF2skMkf3lIAAAAAElFTkSuQmCC";export{A as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAPFBMVEUAAAD////////////////////////////////////////////////////////////////////////////YSWgTAAAAE3RSTlMA359AIL+QYBDvMIBwr6CPz1BvDk7raQAAAplJREFUaN7t2tuO3CAMBmDbQALkOOv3f9dKrVbWMiSQTHGqiu96oz94OGeh67qu67rP+JF2ZObdTQb0GMcscAQdnlgoRkfkdxM0ZyVXN5k4b4bGkPOChbb4yAAJreDgoSnkIwaaGpif6V6RjxAktJq8QGMr5zlobUTdYGFRsdTlZAIFRm+dKPewF2iw/CaCioVToMMojyYRdJdFMagsTuVaB9DilacP4RQqXf6REfSMCtuP8uRlQRE2GcTezLQ4t9D0isWFAu1fK+MWmIXbzOlIHuFA3JAZqfq9vgKnAr1nY6nQ23dFIlSZOAu/bNKecJ5L8qi/lSu2n9F2RSRTM97o6vj84PBv8eLMhnxqu5XL7n6D02QzE80WDpj0/f1HDZaq+YV/I59tLnFqLC6zRSSFzHdYs+Seutel05WIjk4Q3myBc3Y456qCY3Zfa8fNnTx1bq8q9fC+JBpCPgXnuCjYZFdNcu3WKFjm3TUJtoHbBn9PkGmpiYv228PYDaPNDjorT51wtzpXGIw/6vwEVcHTjRuOxUDK/5xAVi4yl6fq/P7BrjJl1sx3ePGAwHj4pnYmmqNsss+NFw8I5W1cXTJCkbmUK0a812Cx1vy9IUw3j3a43aXTDsvr+fYxxPRXxxu5ItZvWyFl1szOeIZKdkVmHGJ5yGX3+YP7OffYBvd6dFS01/TnADTLjPe5rXqU/CfH0zkZn2pQ9XZLmGSVVUPpAUFL+Dcu9J67wgygxPFDl6dqH1/KX/gsaHjpfvYRk9732/K2GzWKvfBDya7yEkohWKmHLfXXX206l/oXvvmp/wMxfAShKR/4CLQ1PBVsg26py92LoLWJ9abNcjJGUPB++CcPGtJoZ0CPmdzOzLjT6KHruq7ruo/8Ani9wIJR4hr/AAAAAElFTkSuQmCC";export{A as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAOVBMVEUAAAD///////////////////////////////////////////////////////////////////////8KOjVvAAAAEnRSTlMAIN9A7xC/gGDPn3BQkK8wj6DdtO0oAAADPElEQVRo3u2Z2Y7rIAyGwWYnS8fv/7BHlTpi0gacsuTc8N1VivqDF2yMmEwmk8lk0h9nFJHfohT90HEDIlLG5f810C/GdZJFQwkrznnQH3yPXUtDB0CefkVHbLPuooguKAd649GoaylRUlb0TmjW/cQwlm7fc6RzHleEKdbHFeXYr3ypdK0wUA7D+LgttB3lceLI2nPLQHlAHEHqt2WkEu6KrU2V8EolzBXzqCphQ0XwyteyRthTkfXK11gj/EMJPmRVP2Ekuh5emk7RI5wc+FWCqEJC2dZ8NQliiDKy1kFRi/OUJ3LlxIgGtJRyX34YQzqmhtUjLZRCB5iFtSA/d12OaZCiEw5yB2KoOC5bolwyjU8/9HYq7NhS3I49OxAhoztKGVJo8brtxA8vhqH+TaBK6XJqaYViDBKOaUpHvBTDWNYQdaYHWMVtGEp4FPeBybtR3IBecH9ZHuiJt7pbGDkbjIcnxjwifgwKAF/S1kbsN3BR9M62vB/brrffDJ0T9DF3Vdfk2Q1l8U/lZUz6RCphj/cqKFsuQBqPcVgqot5uGaU4Mb+rW+rv4wl5EPbXGgdsaaZTGV4utHS7/a7VDZQn/QUc2xBtN2NMeESHuD/7YffwXzb3WrGWPtjFpl9lLFd4qIxyL49sf04uIJ6tzdJ+T8GwuD0tlgVa7qYqZvOPhxFWJWtJMU6YsgAymT9IeNUioa0hCDplAg/UmVrhySEDOo3EWEzVHNHLE900PtZADHwV27KlMGE+LjE7b+yloiR6nYsldz2+uMqI/A0bziqEqzi4uOjCfPLA4bmmBH7fBoRS+Gm2nvLJlEtKLFWR5fNprHoAZMsz562QJLYul86Tciu+t5hL7YsXl8BiaDHvHQ4aBk+xEFobF63SQv2F2eYXq3jvyeOubc0sbdMZNzB5gj/wcsUqvx0gKlIbZr3AnwwanXO76MXGZMowPPMoMgzmTXcYO3P+D2D0YLrqnuGHKXPlHhYxGFdxJRsrTFEMZaEcaqyfJdM3j0MVZjJDMUzjPIzI9HPD0IoRHoZlfDwOzzygD0MC/adKIf1tdYL3s9XiFuSriUyd5H3gap7iYFbUYjKZTCaTSRP/AEYn9FrTdrbUAAAAAElFTkSuQmCC";export{A as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAOVBMVEUAAAD///////////////////////////////////////////////////////////////////////8KOjVvAAAAEnRSTlMA3yCAEGC/759AcFDPkDCvoI+BJCYaAAADo0lEQVRo3u2a2barIAyGCSQMjpX3f9izzunqoYoxbhD3jd9d6/CXEDJA1cPDw8PDw0MNYZkhxgh26VHdBhoXv/Ba3UPn4obljlGjjzlww6BtjL+iTHEfaG1tGxkW1RaIHIyx2wuPiqG1MKimvCJLW/cKvHCvmmJZYVJN0Y4T7lRbJs6/zOY+6vXFY36dEO6HusSlQ5hybzXiHC9VOTMsb6ta2j49Cl5tatKHtnyyx715DvuZxE0/06W190InLmdkwpugLE6j1cfL2SV/LkrWvPtArxJ9/sOSsbhLMr24YNDxF7vioKZPxIiR9y1TnLl85PC8e+Fq/ouGrGOUlZGdR4w5tmDAnLUtNyYqTdYYDzH7k6yPixQqqGCZ0NgztjTFFZkXhJ3eMQwJDjKX1xgJm5sUpJU4KBkXJbpU920GjEMsF44iDpMvrAc8C1aqFI7jZjZJdI+53tRpyHbzVpyF2RFI0yS8J6S0l+a3orMyp2yd7rQ6+XPNFKeMJ4fs6WV9yNdRaZKYkrIbvDHeDkINLen6s/l4/hRa+LFCP67Ew490B1Rn0Z33Y8D1d2TZEXhBt5ik7WJ0b0MHD2BJTmgjqkvQeuX8Fo+bVwjqWug7emg20hhUFwMrR3P3yK6NO+7Xw85eYuSJusV7b/q88vb/PsN6Zj3VDxb7ZciaqGkbPnX3vsnBPJJW1WBnd8MQup32VGuNF83k7LjAaxrubwV7lGperfZttRX28GhosmDIyckV9X//62hSMpXVAO0fFoDv2+qOfDfttssXzQzDfH55kZjk+A7AmoD/t40+XmFKG/PEC9+3LNYSWw8P1nu/Woq+dsCv790Gn7olkVNjHqTHzfdHPCXsUNbVki6t3+ZOKYeKzXCT5+J1i15Z4ZKgS5ulNV01ySSsX8jCdlNh2Lvssl37mrZtYjcgcp+fsr28irMSPPzBeu/rWRaeyk61gNlL9OsNbB5XmCKIiS5u1ejV9m3TQWOtmbjQV0xxwvKGImaVCA4G6hSB7+hn9oqR45bMyL5+EPapK49acWCiFh55TXfBqbaG/WGFw5dOwIbLMmV/dFphmadEXVkZ9KE1jRADTGmpOWih/DRHBZvrSs5NIVWImbuzJ4AE2TlZgTbK/xHIOyiaP3V2UBdhzv7zJfR0RVcjL1Wj2kJ82muLFhJ9O4BPA20xvyWMrqBTaOnXoJpjCpZTO2Wj7oCA2RtuDhIwm7TtCaP9Kw6zCerh4eHh4eFq/gDsgRtLdqAVbwAAAABJRU5ErkJggg==";export{A as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAPElEQVR4AezXMQoAMAgDwND//9n2B51EhxNcQ7gtJ7NX0wWiAAECBAgQIECAAAECBAgQWCFQb6G3/Sc7FwAA//+f4+OPAAAABklEQVQDAI04ICFaxIVcAAAAAElFTkSuQmCC";export{A as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const v="data:image/png;base64,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";export{v as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const I="data:application/json;base64,eyJmcmFtZXMiOiB7Cgoic2xlZXBfMDAwLnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDAxLnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6ODAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkicm90YXRlZCI6IGZhbHNlLAoJInRyaW1tZWQiOiBmYWxzZSwKCSJzcHJpdGVTb3VyY2VTaXplIjogeyJ4IjowLCJ5IjowLCJ3Ijo4MCwiaCI6ODB9LAoJInNvdXJjZVNpemUiOiB7InciOjgwLCJoIjo4MH0sCgkiYW5jaG9yIjogeyJ4IjowLjUsInkiOjAuNX0KfSwKInNsZWVwXzAwMi5wbmciOgp7CgkiZnJhbWUiOiB7IngiOjE2MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDAzLnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MjQwLCJ5IjowLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wMDQucG5nIjoKewoJImZyYW1lIjogeyJ4IjozMjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkicm90YXRlZCI6IGZhbHNlLAoJInRyaW1tZWQiOiBmYWxzZSwKCSJzcHJpdGVTb3VyY2VTaXplIjogeyJ4IjowLCJ5IjowLCJ3Ijo4MCwiaCI6ODB9LAoJInNvdXJjZVNpemUiOiB7InciOjgwLCJoIjo4MH0sCgkiYW5jaG9yIjogeyJ4IjowLjUsInkiOjAuNX0KfSwKInNsZWVwXzAwNS5wbmciOgp7CgkiZnJhbWUiOiB7IngiOjQwMCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDA2LnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MCwieSI6ODAsInciOjgwLCJoIjo4MH0sCgkicm90YXRlZCI6IGZhbHNlLAoJInRyaW1tZWQiOiBmYWxzZSwKCSJzcHJpdGVTb3VyY2VTaXplIjogeyJ4IjowLCJ5IjowLCJ3Ijo4MCwiaCI6ODB9LAoJInNvdXJjZVNpemUiOiB7InciOjgwLCJoIjo4MH0sCgkiYW5jaG9yIjogeyJ4IjowLjUsInkiOjAuNX0KfSwKInNsZWVwXzAwNy5wbmciOgp7CgkiZnJhbWUiOiB7IngiOjgwLCJ5Ijo4MCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDA4LnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MTYwLCJ5Ijo4MCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDA5LnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MjQwLCJ5Ijo4MCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDEwLnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MzIwLCJ5Ijo4MCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDExLnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6NDAwLCJ5Ijo4MCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDEyLnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MCwieSI6MTYwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wMTMucG5nIjoKewoJImZyYW1lIjogeyJ4Ijo4MCwieSI6MTYwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wMTQucG5nIjoKewoJImZyYW1lIjogeyJ4IjoxNjAsInkiOjE2MCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDE1LnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MjQwLCJ5IjoxNjAsInciOjgwLCJoIjo4MH0sCgkicm90YXRlZCI6IGZhbHNlLAoJInRyaW1tZWQiOiBmYWxzZSwKCSJzcHJpdGVTb3VyY2VTaXplIjogeyJ4IjowLCJ5IjowLCJ3Ijo4MCwiaCI6ODB9LAoJInNvdXJjZVNpemUiOiB7InciOjgwLCJoIjo4MH0sCgkiYW5jaG9yIjogeyJ4IjowLjUsInkiOjAuNX0KfSwKInNsZWVwXzAxNi5wbmciOgp7CgkiZnJhbWUiOiB7IngiOjMyMCwieSI6MTYwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wMTcucG5nIjoKewoJImZyYW1lIjogeyJ4Ijo0MDAsInkiOjE2MCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDE4LnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MCwieSI6MjQwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wMTkucG5nIjoKewoJImZyYW1lIjogeyJ4Ijo4MCwieSI6MjQwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wMjAucG5nIjoKewoJImZyYW1lIjogeyJ4IjoxNjAsInkiOjI0MCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDIxLnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MjQwLCJ5IjoyNDAsInciOjgwLCJoIjo4MH0sCgkicm90YXRlZCI6IGZhbHNlLAoJInRyaW1tZWQiOiBmYWxzZSwKCSJzcHJpdGVTb3VyY2VTaXplIjogeyJ4IjowLCJ5IjowLCJ3Ijo4MCwiaCI6ODB9LAoJInNvdXJjZVNpemUiOiB7InciOjgwLCJoIjo4MH0sCgkiYW5jaG9yIjogeyJ4IjowLjUsInkiOjAuNX0KfSwKInNsZWVwXzAyMi5wbmciOgp7CgkiZnJhbWUiOiB7IngiOjMyMCwieSI6MjQwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wMjMucG5nIjoKewoJImZyYW1lIjogeyJ4Ijo0MDAsInkiOjI0MCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDI0LnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MCwieSI6MzIwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wMjUucG5nIjoKewoJImZyYW1lIjogeyJ4Ijo4MCwieSI6MzIwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wMjYucG5nIjoKewoJImZyYW1lIjogeyJ4IjoxNjAsInkiOjMyMCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDI3LnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MjQwLCJ5IjozMjAsInciOjgwLCJoIjo4MH0sCgkicm90YXRlZCI6IGZhbHNlLAoJInRyaW1tZWQiOiBmYWxzZSwKCSJzcHJpdGVTb3VyY2VTaXplIjogeyJ4IjowLCJ5IjowLCJ3Ijo4MCwiaCI6ODB9LAoJInNvdXJjZVNpemUiOiB7InciOjgwLCJoIjo4MH0sCgkiYW5jaG9yIjogeyJ4IjowLjUsInkiOjAuNX0KfSwKInNsZWVwXzAyOC5wbmciOgp7CgkiZnJhbWUiOiB7IngiOjMyMCwieSI6MzIwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wMjkucG5nIjoKewoJImZyYW1lIjogeyJ4Ijo0MDAsInkiOjMyMCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDMwLnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MCwieSI6NDAwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wMzEucG5nIjoKewoJImZyYW1lIjogeyJ4Ijo4MCwieSI6NDAwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wMzIucG5nIjoKewoJImZyYW1lIjogeyJ4IjoxNjAsInkiOjQwMCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDMzLnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MjQwLCJ5Ijo0MDAsInciOjgwLCJoIjo4MH0sCgkicm90YXRlZCI6IGZhbHNlLAoJInRyaW1tZWQiOiBmYWxzZSwKCSJzcHJpdGVTb3VyY2VTaXplIjogeyJ4IjowLCJ5IjowLCJ3Ijo4MCwiaCI6ODB9LAoJInNvdXJjZVNpemUiOiB7InciOjgwLCJoIjo4MH0sCgkiYW5jaG9yIjogeyJ4IjowLjUsInkiOjAuNX0KfSwKInNsZWVwXzAzNC5wbmciOgp7CgkiZnJhbWUiOiB7IngiOjMyMCwieSI6NDAwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wMzUucG5nIjoKewoJImZyYW1lIjogeyJ4Ijo0MDAsInkiOjQwMCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDM2LnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MCwieSI6NDgwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wMzcucG5nIjoKewoJImZyYW1lIjogeyJ4Ijo4MCwieSI6NDgwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wMzgucG5nIjoKewoJImZyYW1lIjogeyJ4IjoxNjAsInkiOjQ4MCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDM5LnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MjQwLCJ5Ijo0ODAsInciOjgwLCJoIjo4MH0sCgkicm90YXRlZCI6IGZhbHNlLAoJInRyaW1tZWQiOiBmYWxzZSwKCSJzcHJpdGVTb3VyY2VTaXplIjogeyJ4IjowLCJ5IjowLCJ3Ijo4MCwiaCI6ODB9LAoJInNvdXJjZVNpemUiOiB7InciOjgwLCJoIjo4MH0sCgkiYW5jaG9yIjogeyJ4IjowLjUsInkiOjAuNX0KfSwKInNsZWVwXzA0MC5wbmciOgp7CgkiZnJhbWUiOiB7IngiOjMyMCwieSI6NDgwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wNDEucG5nIjoKewoJImZyYW1lIjogeyJ4Ijo0MDAsInkiOjQ4MCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDQyLnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MCwieSI6NTYwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wNDMucG5nIjoKewoJImZyYW1lIjogeyJ4Ijo4MCwieSI6NTYwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wNDQucG5nIjoKewoJImZyYW1lIjogeyJ4IjoxNjAsInkiOjU2MCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDQ1LnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MjQwLCJ5Ijo1NjAsInciOjgwLCJoIjo4MH0sCgkicm90YXRlZCI6IGZhbHNlLAoJInRyaW1tZWQiOiBmYWxzZSwKCSJzcHJpdGVTb3VyY2VTaXplIjogeyJ4IjowLCJ5IjowLCJ3Ijo4MCwiaCI6ODB9LAoJInNvdXJjZVNpemUiOiB7InciOjgwLCJoIjo4MH0sCgkiYW5jaG9yIjogeyJ4IjowLjUsInkiOjAuNX0KfSwKInNsZWVwXzA0Ni5wbmciOgp7CgkiZnJhbWUiOiB7IngiOjMyMCwieSI6NTYwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wNDcucG5nIjoKewoJImZyYW1lIjogeyJ4Ijo0MDAsInkiOjU2MCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDQ4LnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MCwieSI6NjQwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wNDkucG5nIjoKewoJImZyYW1lIjogeyJ4Ijo4MCwieSI6NjQwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wNTAucG5nIjoKewoJImZyYW1lIjogeyJ4IjoxNjAsInkiOjY0MCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDUxLnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MjQwLCJ5Ijo2NDAsInciOjgwLCJoIjo4MH0sCgkicm90YXRlZCI6IGZhbHNlLAoJInRyaW1tZWQiOiBmYWxzZSwKCSJzcHJpdGVTb3VyY2VTaXplIjogeyJ4IjowLCJ5IjowLCJ3Ijo4MCwiaCI6ODB9LAoJInNvdXJjZVNpemUiOiB7InciOjgwLCJoIjo4MH0sCgkiYW5jaG9yIjogeyJ4IjowLjUsInkiOjAuNX0KfSwKInNsZWVwXzA1Mi5wbmciOgp7CgkiZnJhbWUiOiB7IngiOjMyMCwieSI6NjQwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wNTMucG5nIjoKewoJImZyYW1lIjogeyJ4Ijo0MDAsInkiOjY0MCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDU0LnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MCwieSI6NzIwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wNTUucG5nIjoKewoJImZyYW1lIjogeyJ4Ijo4MCwieSI6NzIwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wNTYucG5nIjoKewoJImZyYW1lIjogeyJ4IjoxNjAsInkiOjcyMCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDU3LnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MjQwLCJ5Ijo3MjAsInciOjgwLCJoIjo4MH0sCgkicm90YXRlZCI6IGZhbHNlLAoJInRyaW1tZWQiOiBmYWxzZSwKCSJzcHJpdGVTb3VyY2VTaXplIjogeyJ4IjowLCJ5IjowLCJ3Ijo4MCwiaCI6ODB9LAoJInNvdXJjZVNpemUiOiB7InciOjgwLCJoIjo4MH0sCgkiYW5jaG9yIjogeyJ4IjowLjUsInkiOjAuNX0KfSwKInNsZWVwXzA1OC5wbmciOgp7CgkiZnJhbWUiOiB7IngiOjMyMCwieSI6NzIwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wNTkucG5nIjoKewoJImZyYW1lIjogeyJ4Ijo0MDAsInkiOjcyMCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDYwLnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MCwieSI6ODAwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wNjEucG5nIjoKewoJImZyYW1lIjogeyJ4Ijo4MCwieSI6ODAwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wNjIucG5nIjoKewoJImZyYW1lIjogeyJ4IjoxNjAsInkiOjgwMCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDYzLnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MjQwLCJ5Ijo4MDAsInciOjgwLCJoIjo4MH0sCgkicm90YXRlZCI6IGZhbHNlLAoJInRyaW1tZWQiOiBmYWxzZSwKCSJzcHJpdGVTb3VyY2VTaXplIjogeyJ4IjowLCJ5IjowLCJ3Ijo4MCwiaCI6ODB9LAoJInNvdXJjZVNpemUiOiB7InciOjgwLCJoIjo4MH0sCgkiYW5jaG9yIjogeyJ4IjowLjUsInkiOjAuNX0KfSwKInNsZWVwXzA2NC5wbmciOgp7CgkiZnJhbWUiOiB7IngiOjMyMCwieSI6ODAwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wNjUucG5nIjoKewoJImZyYW1lIjogeyJ4Ijo0MDAsInkiOjgwMCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDY2LnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MCwieSI6ODgwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wNjcucG5nIjoKewoJImZyYW1lIjogeyJ4Ijo4MCwieSI6ODgwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wNjgucG5nIjoKewoJImZyYW1lIjogeyJ4IjoxNjAsInkiOjg4MCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDY5LnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MjQwLCJ5Ijo4ODAsInciOjgwLCJoIjo4MH0sCgkicm90YXRlZCI6IGZhbHNlLAoJInRyaW1tZWQiOiBmYWxzZSwKCSJzcHJpdGVTb3VyY2VTaXplIjogeyJ4IjowLCJ5IjowLCJ3Ijo4MCwiaCI6ODB9LAoJInNvdXJjZVNpemUiOiB7InciOjgwLCJoIjo4MH0sCgkiYW5jaG9yIjogeyJ4IjowLjUsInkiOjAuNX0KfSwKInNsZWVwXzA3MC5wbmciOgp7CgkiZnJhbWUiOiB7IngiOjMyMCwieSI6ODgwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wNzEucG5nIjoKewoJImZyYW1lIjogeyJ4Ijo0MDAsInkiOjg4MCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDcyLnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MCwieSI6OTYwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wNzMucG5nIjoKewoJImZyYW1lIjogeyJ4Ijo4MCwieSI6OTYwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wNzQucG5nIjoKewoJImZyYW1lIjogeyJ4IjoxNjAsInkiOjk2MCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDc1LnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MjQwLCJ5Ijo5NjAsInciOjgwLCJoIjo4MH0sCgkicm90YXRlZCI6IGZhbHNlLAoJInRyaW1tZWQiOiBmYWxzZSwKCSJzcHJpdGVTb3VyY2VTaXplIjogeyJ4IjowLCJ5IjowLCJ3Ijo4MCwiaCI6ODB9LAoJInNvdXJjZVNpemUiOiB7InciOjgwLCJoIjo4MH0sCgkiYW5jaG9yIjogeyJ4IjowLjUsInkiOjAuNX0KfSwKInNsZWVwXzA3Ni5wbmciOgp7CgkiZnJhbWUiOiB7IngiOjMyMCwieSI6OTYwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wNzcucG5nIjoKewoJImZyYW1lIjogeyJ4Ijo0MDAsInkiOjk2MCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDc4LnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MCwieSI6MTA0MCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDc5LnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6ODAsInkiOjEwNDAsInciOjgwLCJoIjo4MH0sCgkicm90YXRlZCI6IGZhbHNlLAoJInRyaW1tZWQiOiBmYWxzZSwKCSJzcHJpdGVTb3VyY2VTaXplIjogeyJ4IjowLCJ5IjowLCJ3Ijo4MCwiaCI6ODB9LAoJInNvdXJjZVNpemUiOiB7InciOjgwLCJoIjo4MH0sCgkiYW5jaG9yIjogeyJ4IjowLjUsInkiOjAuNX0KfSwKInNsZWVwXzA4MC5wbmciOgp7CgkiZnJhbWUiOiB7IngiOjE2MCwieSI6MTA0MCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDgxLnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MjQwLCJ5IjoxMDQwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wODIucG5nIjoKewoJImZyYW1lIjogeyJ4IjozMjAsInkiOjEwNDAsInciOjgwLCJoIjo4MH0sCgkicm90YXRlZCI6IGZhbHNlLAoJInRyaW1tZWQiOiBmYWxzZSwKCSJzcHJpdGVTb3VyY2VTaXplIjogeyJ4IjowLCJ5IjowLCJ3Ijo4MCwiaCI6ODB9LAoJInNvdXJjZVNpemUiOiB7InciOjgwLCJoIjo4MH0sCgkiYW5jaG9yIjogeyJ4IjowLjUsInkiOjAuNX0KfSwKInNsZWVwXzA4My5wbmciOgp7CgkiZnJhbWUiOiB7IngiOjQwMCwieSI6MTA0MCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDg0LnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MCwieSI6MTEyMCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDg1LnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6ODAsInkiOjExMjAsInciOjgwLCJoIjo4MH0sCgkicm90YXRlZCI6IGZhbHNlLAoJInRyaW1tZWQiOiBmYWxzZSwKCSJzcHJpdGVTb3VyY2VTaXplIjogeyJ4IjowLCJ5IjowLCJ3Ijo4MCwiaCI6ODB9LAoJInNvdXJjZVNpemUiOiB7InciOjgwLCJoIjo4MH0sCgkiYW5jaG9yIjogeyJ4IjowLjUsInkiOjAuNX0KfSwKInNsZWVwXzA4Ni5wbmciOgp7CgkiZnJhbWUiOiB7IngiOjE2MCwieSI6MTEyMCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDg3LnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MjQwLCJ5IjoxMTIwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wODgucG5nIjoKewoJImZyYW1lIjogeyJ4IjozMjAsInkiOjExMjAsInciOjgwLCJoIjo4MH0sCgkicm90YXRlZCI6IGZhbHNlLAoJInRyaW1tZWQiOiBmYWxzZSwKCSJzcHJpdGVTb3VyY2VTaXplIjogeyJ4IjowLCJ5IjowLCJ3Ijo4MCwiaCI6ODB9LAoJInNvdXJjZVNpemUiOiB7InciOjgwLCJoIjo4MH0sCgkiYW5jaG9yIjogeyJ4IjowLjUsInkiOjAuNX0KfSwKInNsZWVwXzA4OS5wbmciOgp7CgkiZnJhbWUiOiB7IngiOjQwMCwieSI6MTEyMCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDkwLnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MCwieSI6MTIwMCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDkxLnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6ODAsInkiOjEyMDAsInciOjgwLCJoIjo4MH0sCgkicm90YXRlZCI6IGZhbHNlLAoJInRyaW1tZWQiOiBmYWxzZSwKCSJzcHJpdGVTb3VyY2VTaXplIjogeyJ4IjowLCJ5IjowLCJ3Ijo4MCwiaCI6ODB9LAoJInNvdXJjZVNpemUiOiB7InciOjgwLCJoIjo4MH0sCgkiYW5jaG9yIjogeyJ4IjowLjUsInkiOjAuNX0KfSwKInNsZWVwXzA5Mi5wbmciOgp7CgkiZnJhbWUiOiB7IngiOjE2MCwieSI6MTIwMCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9LAoic2xlZXBfMDkzLnBuZyI6CnsKCSJmcmFtZSI6IHsieCI6MjQwLCJ5IjoxMjAwLCJ3Ijo4MCwiaCI6ODB9LAoJInJvdGF0ZWQiOiBmYWxzZSwKCSJ0cmltbWVkIjogZmFsc2UsCgkic3ByaXRlU291cmNlU2l6ZSI6IHsieCI6MCwieSI6MCwidyI6ODAsImgiOjgwfSwKCSJzb3VyY2VTaXplIjogeyJ3Ijo4MCwiaCI6ODB9LAoJImFuY2hvciI6IHsieCI6MC41LCJ5IjowLjV9Cn0sCiJzbGVlcF8wOTQucG5nIjoKewoJImZyYW1lIjogeyJ4IjozMjAsInkiOjEyMDAsInciOjgwLCJoIjo4MH0sCgkicm90YXRlZCI6IGZhbHNlLAoJInRyaW1tZWQiOiBmYWxzZSwKCSJzcHJpdGVTb3VyY2VTaXplIjogeyJ4IjowLCJ5IjowLCJ3Ijo4MCwiaCI6ODB9LAoJInNvdXJjZVNpemUiOiB7InciOjgwLCJoIjo4MH0sCgkiYW5jaG9yIjogeyJ4IjowLjUsInkiOjAuNX0KfSwKInNsZWVwXzA5NS5wbmciOgp7CgkiZnJhbWUiOiB7IngiOjQwMCwieSI6MTIwMCwidyI6ODAsImgiOjgwfSwKCSJyb3RhdGVkIjogZmFsc2UsCgkidHJpbW1lZCI6IGZhbHNlLAoJInNwcml0ZVNvdXJjZVNpemUiOiB7IngiOjAsInkiOjAsInciOjgwLCJoIjo4MH0sCgkic291cmNlU2l6ZSI6IHsidyI6ODAsImgiOjgwfSwKCSJhbmNob3IiOiB7IngiOjAuNSwieSI6MC41fQp9fSwKImFuaW1hdGlvbnMiOiB7Cgkic2xlZXAiOiBbInNsZWVwXzAwMC5wbmciLCJzbGVlcF8wMDEucG5nIiwic2xlZXBfMDAyLnBuZyIsInNsZWVwXzAwMy5wbmciLCJzbGVlcF8wMDQucG5nIiwic2xlZXBfMDA1LnBuZyIsInNsZWVwXzAwNi5wbmciLCJzbGVlcF8wMDcucG5nIiwic2xlZXBfMDA4LnBuZyIsInNsZWVwXzAwOS5wbmciLCJzbGVlcF8wMTAucG5nIiwic2xlZXBfMDExLnBuZyIsInNsZWVwXzAxMi5wbmciLCJzbGVlcF8wMTMucG5nIiwic2xlZXBfMDE0LnBuZyIsInNsZWVwXzAxNS5wbmciLCJzbGVlcF8wMTYucG5nIiwic2xlZXBfMDE3LnBuZyIsInNsZWVwXzAxOC5wbmciLCJzbGVlcF8wMTkucG5nIiwic2xlZXBfMDIwLnBuZyIsInNsZWVwXzAyMS5wbmciLCJzbGVlcF8wMjIucG5nIiwic2xlZXBfMDIzLnBuZyIsInNsZWVwXzAyNC5wbmciLCJzbGVlcF8wMjUucG5nIiwic2xlZXBfMDI2LnBuZyIsInNsZWVwXzAyNy5wbmciLCJzbGVlcF8wMjgucG5nIiwic2xlZXBfMDI5LnBuZyIsInNsZWVwXzAzMC5wbmciLCJzbGVlcF8wMzEucG5nIiwic2xlZXBfMDMyLnBuZyIsInNsZWVwXzAzMy5wbmciLCJzbGVlcF8wMzQucG5nIiwic2xlZXBfMDM1LnBuZyIsInNsZWVwXzAzNi5wbmciLCJzbGVlcF8wMzcucG5nIiwic2xlZXBfMDM4LnBuZyIsInNsZWVwXzAzOS5wbmciLCJzbGVlcF8wNDAucG5nIiwic2xlZXBfMDQxLnBuZyIsInNsZWVwXzA0Mi5wbmciLCJzbGVlcF8wNDMucG5nIiwic2xlZXBfMDQ0LnBuZyIsInNsZWVwXzA0NS5wbmciLCJzbGVlcF8wNDYucG5nIiwic2xlZXBfMDQ3LnBuZyIsInNsZWVwXzA0OC5wbmciLCJzbGVlcF8wNDkucG5nIiwic2xlZXBfMDUwLnBuZyIsInNsZWVwXzA1MS5wbmciLCJzbGVlcF8wNTIucG5nIiwic2xlZXBfMDUzLnBuZyIsInNsZWVwXzA1NC5wbmciLCJzbGVlcF8wNTUucG5nIiwic2xlZXBfMDU2LnBuZyIsInNsZWVwXzA1Ny5wbmciLCJzbGVlcF8wNTgucG5nIiwic2xlZXBfMDU5LnBuZyIsInNsZWVwXzA2MC5wbmciLCJzbGVlcF8wNjEucG5nIiwic2xlZXBfMDYyLnBuZyIsInNsZWVwXzA2My5wbmciLCJzbGVlcF8wNjQucG5nIiwic2xlZXBfMDY1LnBuZyIsInNsZWVwXzA2Ni5wbmciLCJzbGVlcF8wNjcucG5nIiwic2xlZXBfMDY4LnBuZyIsInNsZWVwXzA2OS5wbmciLCJzbGVlcF8wNzAucG5nIiwic2xlZXBfMDcxLnBuZyIsInNsZWVwXzA3Mi5wbmciLCJzbGVlcF8wNzMucG5nIiwic2xlZXBfMDc0LnBuZyIsInNsZWVwXzA3NS5wbmciLCJzbGVlcF8wNzYucG5nIiwic2xlZXBfMDc3LnBuZyIsInNsZWVwXzA3OC5wbmciLCJzbGVlcF8wNzkucG5nIiwic2xlZXBfMDgwLnBuZyIsInNsZWVwXzA4MS5wbmciLCJzbGVlcF8wODIucG5nIiwic2xlZXBfMDgzLnBuZyIsInNsZWVwXzA4NC5wbmciLCJzbGVlcF8wODUucG5nIiwic2xlZXBfMDg2LnBuZyIsInNsZWVwXzA4Ny5wbmciLCJzbGVlcF8wODgucG5nIiwic2xlZXBfMDg5LnBuZyIsInNsZWVwXzA5MC5wbmciLCJzbGVlcF8wOTEucG5nIiwic2xlZXBfMDkyLnBuZyIsInNsZWVwXzA5My5wbmciLCJzbGVlcF8wOTQucG5nIiwic2xlZXBfMDk1LnBuZyJdCn0sCiJtZXRhIjogewoJImFwcCI6ICJodHRwczovL3d3dy5jb2RlYW5kd2ViLmNvbS90ZXh0dXJlcGFja2VyIiwKCSJ2ZXJzaW9uIjogIjEuMSIsCgkiaW1hZ2UiOiAic2xlZXAucG5nIiwKCSJmb3JtYXQiOiAiUkdCQTg4ODgiLAoJInNpemUiOiB7InciOjQ4MCwiaCI6MTI4MH0sCgkic2NhbGUiOiAiMSIsCgkic21hcnR1cGRhdGUiOiAiJFRleHR1cmVQYWNrZXI6U21hcnRVcGRhdGU6NjYyMDEzY2I2NDMwZGNjYWFjM2ExYTBiYjVlOTc4MzM6NTE3ZDlkN2RjOGI2MDBkMmQ2ZWIyOTVjMzc5ZTJmZmI6ZmViYzA4ZWVlMDM4NjliMDAwNmM5ZmQxNWI3NDMzOTkkIgp9Cn0K";export{I as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const A="data:image/png;base64,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";export{A as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAM1BMVEUAAAD///////////////////////////////////////////////////////////////+3leKCAAAAEHRSTlMA3yBgv58Q74BwQK+PzzBQHgQBUQAAAqhJREFUaN7t2etu8yAMBmBO4ZgQ7v9qv2na+kpVEgKOqfQN/1vK+hRjE9KKGTNmzJgxYwY9VCrOKDE8lCxfIR+SYwjx3ki7le+Qz03iXvrW8hOe7tov9276QnlFJMO+lLuycoDpyyxvvBdyg1iocLk3CyzwU8u83ZKxwAhispdyS8YCYzC1m27JyMy6INn8MhbYCPxD5Jfj78tO4Q+MZZPRSTt6Hz3FJ6fXAr81v2aV0Umb/RmPoYwyOsm9rgfUGqNsfi+Ho2t8MmZ3NNwpLjmXQ0JjA+ORcXk/2Ws9s7yejlassrQY15BsuhwvbmyBUV6vBjvFJ9ujwRqNxiPXTxF6rIyxUg2WNW6Qg2Uke7CMZNvBssYZYayMZKvBsnLYOcfKHvU1WEYzD5YVmnmwjPoaK2OcEYNl/VR9GdUoy2dayhfZKOdHDiPWlWZ5wQDKhEurjJbypAl3yJ56l8Ijy9ZU21aSC9sgaS2yxuftCayWs439LInbl8eEW2QUdiBmOopGORP3TYc9qEVGrl2fm3GEapOR69wFa3RFq7zjQZpQW1k0y5mweSFfVjTLlnQQWVAhbTLqMlG6SYpWGWVt6HBdHgBXZCKM70tFh0wqrhVV3SLTq9pjq26QyX2M7Sf0fweoSXv1IrplRbw79cpOCFJZx145dcL6MtdaVeVAOHOdLlUosipb8imz7xkDbm+unTp6qSKTQp6usikccv1p15fCKWPKbn93eWVMuSR0c4TBJ0u8l1l1jDEsuMQp53IQQ+TwMdl/TE6fku32B+XlD1ZYdJ+SbRosI2K1xozgukte0lJXToCUiOaMTfvV2VPQw4bk3lGXtLo+9UbxSGS9Jim/p7KZVef6eTuIAQGZDNPlKMYF/TcZuiyVGB3Wy7ItSsyYMWPG/xD/AIrSnldXeREbAAAAAElFTkSuQmCC";export{A as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAM1BMVEUAAAD///////////////////////////////////////////////////////////////+3leKCAAAAEXRSTlMA5cgdcw7XjzlWrIFkup0rSDjdhakAAAKOSURBVGje7ZnbkqQgDEAj95va//+1W7u1NVGpHiEJPHEep0ZPJyYBERaLxWKxWPDRaXPphOnE7S8uwmTM9p9JZvT+YGAG6J1rRu9cM3rnmtE714zeuWb0zjWjl2vme5XaLhQYSLx5tUbz2Bl23r0Ad/MJg9Du4X2YnYYRoAS99R8HYGtFbbYgz1F7a/MB4pjKi2ZCO5MayZ2PYndDmqq+d4AHn2GlbdXvMZW6wOQLy7xVgAcxyvtt84aUERNr/5ZINeAx71Ujvcw1Jd/BoW0FMdJLUmn9gVo20eml9kWTXdo7VCvBAWbd6wNGAmmFfO3P3PXfHliEvlFolVR9paZEIx+hkEP3fbxMyBiws93j1TMCJswiIxFyrgN+R/FDto4yfCM/5HILmBByZJeWoe0LE5DQtIBBc3Nd6mHZ28uRmekAXQRmrt1PpgHpLC/eziMDUHMdWI/4A53gUlFYY8tCJ5aQLORg7J8UVhfj4oPREDunqD1047Eh+sF5yXkHWOIGOC2ROc9YSRSX4rwzJdYM4PTi3BkAmV4glrXfK/QlJlSLBPFq1m9m5CvR9y4WCOzUy60jFTV/zxar2UPdR6Qpu0TE0fbHodqP03PtaZcd/LdUTboqABGFR5ikl3mgEgknskXkYFF1n8hqxygtxPSemFnFChhRt5Pqd+8u9Ykgbk1m9CIBWPir+SXb+uo9RD8ofo9C/mNf2K5k2/gtPUh/nFfxSzFguNj2ImZUlypqjdqqk/gFhrgU9dV6bA88gLQZ5bvPxmSfcFJJejHbHRgQpLhmbwFRTtWmVRqEsbkpzRbkCelNmzDcmeoUYBwhf6syH2AsNvrKrXy0MAMd87Grf8r9yJ8TFovFYrFYcPgDfFESW2IpAiAAAAAASUVORK5CYII=";export{A as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAM1BMVEUAAAD///////////////////////////////////////////////////////////////+3leKCAAAAEHRSTlMAgN8g7xBgcECfj6+/zzBQ4swJLwAAAaxJREFUaN7t2lluwzAMBFBq9SLbnfuftigQYD5SZLGpaQPoXWBgiqQdKDYMwzAMw3Wp5dySyVX8yNXEAm5kycy9CabAXG0yc7XJzNUmM1ebzFxtMnPVyczVJzP33mQdVRD132EHHjqsk5TxUE7WRYp4InZJLhFPxWL+Gl7QjPoMkmycK0DCoToySNjabCxxgzW8YTE3E94yeW8s+THveFNUTrD/NB84IWkLTdG9o2ULrGSc4PCGXAESrpEZJO2vDact4gempH1gWsS7g5K2pWkRzzAV7dKiqm0t2k5WGpclbaWpOlRaWOuMy7J4e9ChPWKatGuL1vO/HvTdFeFg9whWfW3CxQj+z2f8Z8G7Y7B+gbRPWpkTHFTtrwiatZ9cVOyEXfuOoFXbW/QlPmLKuCgXO2XRVppmcaUpahc1VfG3LUWX1lLv62AXRO0JU3VoafEsN9cLReVdzCEuNAWcMH3ynQRfzPorr1X8vBTEuTRlvChP5ojzrP+bQAl4QSjmL214oiXrY34Yvc3Wz7xm/Couyfoq8xLvU6tJpBqWPUYgx72Fr2TDMAzDMFzxDf7xFoVjSQNhAAAAAElFTkSuQmCC";export{A as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAMAAAAOusbgAAAAM1BMVEUAAAD///////////////////////////////////////////////////////////////+3leKCAAAAEHRSTlMAgN8g72AQn0Bwv4+vMM9QQt7wKQAAArJJREFUaN7tmtHOpCAMhbUgoqL2/Z92s5t/0/wtkRE4c8V3eTKZMy2lRZlpMBgMBoNBLS55n5zSdvb7OUFZ+C9+yWpAZv5hedRwvszzfy1mNKCvuNhfA/XFO1tf63IoDeVrXZLSwL7iEkhpYF9xccoZ5mudvdJAvsL285Hbau0snEH3q1lr7Zz8yCmbSmmNOM+PeCelrbQmHHEBcvaT1OwciItQkFpQWj2JPyBlljmBNlJ+O5PSABspv6mc0mo5PStKpT0rDVVYtphIaajCElZJttJes/ErNkm2aP06VnmZqXWZL34JZXYCYXZwfjfvSmseSWWc1JdosETbxK5KA1W0bVZOaS8InqsgJyFXTciDK1kl5Jo2ErkaCbmmvnbmtpCj0tABS3iX0sABS3iL0kC9w4bnlIYqaRteUhpuDwvB5podqGnZVhWUhistYZevUdojgZtxmcQ5cKYlr1Fp6ExLXrVWwnMzPhcBsHsIpx0UHMFLLKfaTWm4tiUc8lZEtPLTQ6fqiu+qi7gDV2ZOXN8wpkwn8gVj7kLuq4YxZo2tsf+asdPaMxfQGN9AUqaBpK+1zMWcAfFDYqkYEpE7ECvGYmCh7YC7aw1f1lfmKEPg5wipLae1EnenJV60hj/t+SC1xaIVWbtkeqLXT22xS6ad0cpQj9E0m9FUZulwtp12rnixSO2lFa2GfEKW4GatwUMmeaugrgjAqxwlZ7akgXs5ZVKWel0olu9iFqWB35NLUklpyJuB8kUM/k4i+MI47DuYZRAkpWGdpUtE6wvINuiPGdvnt6lb5nXVhvuDgL3wOJRWS5g/SnOw82WeGnE7F0jOnhR30eqJj9Z7tDfs+zL1IR6es9DqJu3r1zj1I8SVrOvvwG7/TwtTb9wyrxcRs6crzbdexXs/7nMaDAaDwWDwnj/NQlzrb+J5OQAAAABJRU5ErkJggg==";export{A as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Graphics as i,Rectangle as o}from"pixi.js";import{FixedSizeContainer as t}from"./FixedSizeContainer.js";import{Logger as r}from"../../utils/logger.js";import{EnhancedSprite as e}from"./EnhancedSprite.js";import{useAppService as n}from"../../application/AppService.js";class s extends t{background;icon;options;constructor(o){super(),this.options=o,this.background=new i,this.addChild(this.background),this.icon=new e,this.addChild(this.icon),this.eventMode="static",this.render(),this.setupHitArea(),this.setupEvents()}setupHitArea(){const i=n().controlsConfig,t=i.iconWrapperWidth+16,r=i.iconWrapperHeight+16;this.hitArea=new o(-t/2,-r/2,t,r)}async render(){this.renderBackground(),this.renderIcon()}renderBackground(){const i=n().controlsConfig;this.background.clear(),this.background.roundRect(-i.iconWrapperWidth/2,-i.iconWrapperHeight/2,i.iconWrapperWidth,i.iconWrapperHeight,i.iconWrapperBorderRadius).fill(this.options.backgroundColor)}async renderIcon(){try{const i=n().controlsConfig;await this.icon.loadTextureAndSetSize(this.options.iconAlias,{width:i.iconWidth,height:i.iconHeight,sizeFixed:!1}),this.icon.visible=!0}catch(i){r.error(`Failed to load icon: ${this.options.iconAlias}`,i)}}destroy(){super.destroy()}}export{s as BaseControlButton};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Container as t,Graphics as i}from"pixi.js";import{Logger as s}from"../../utils/logger.js";import{useAppService as e}from"../../application/AppService.js";class r extends t{borderOptions;solidLine=null;dashGraphics=null;fillGraphics=null;constructor(t){super(),this.borderOptions={...t},this.drawBorder(),this.setupAntiScaleListener(),this.eventMode="none"}setupAntiScaleListener(){e().emitter.on("antiScale",this.handleAntiScale)}handleAntiScale=()=>{this.drawBorder()};drawBorder(){const{points:t=[],closePath:i=!1,style:s}=this.borderOptions;t.length<2||(this.clearBorder(),void 0!==s.fillColor&&i&&this.drawFill(t,s),s.isDashed?this.drawContinuousDashedBorder(t,i,s):this.drawSolidBorder(t,i,s))}drawFill(t,s){if(s.fillColor&&!(t.length<3)){this.fillGraphics&&(this.removeChild(this.fillGraphics),this.fillGraphics.destroy()),this.fillGraphics=new i,this.fillGraphics.setFillStyle({color:s.fillColor}),this.fillGraphics.moveTo(t[0].x,t[0].y);for(let i=1;i<t.length;i++)this.fillGraphics.lineTo(t[i].x,t[i].y);this.fillGraphics.closePath(),this.fillGraphics.fill(),this.addChild(this.fillGraphics)}}drawSolidBorder(t,s,r){const h=e();this.solidLine&&(this.removeChild(this.solidLine),this.solidLine.destroy()),this.solidLine=new i;const o=h.getApp().toFixedSize(r.width);this.solidLine.setStrokeStyle({color:r.color,width:o}),this.solidLine.moveTo(t[0].x,t[0].y);for(let i=1;i<t.length;i++)this.solidLine.lineTo(t[i].x,t[i].y);s&&this.solidLine.lineTo(t[0].x,t[0].y),this.solidLine.stroke(),this.addChild(this.solidLine)}drawContinuousDashedBorder(t,r,h){if(t.length<2)return;if(!h.dashArray||2!==h.dashArray.length||h.dashArray[0]<=0||h.dashArray[1]<=0)return void s.warn("Invalid dashArray:",h.dashArray);const o=e();this.dashGraphics=new i;const l=o.getApp().toFixedSize(h.width);this.dashGraphics.setStrokeStyle({color:h.color,width:l});const a=Math.max(o.getApp().toFixedSize(h.dashArray[0]),1),n=Math.max(o.getApp().toFixedSize(h.dashArray[1]),1),d=r?[...t,t[0]]:t;this.drawContinuousPathDashes(this.dashGraphics,d,a,n),this.dashGraphics.stroke(),this.addChild(this.dashGraphics)}drawContinuousPathDashes(t,i,e,r){if(i.length<2)return;if(e<=0||r<=0)return void s.warn("Invalid dash parameters:",{dashLength:e,gapLength:r});const h=this.calculatePathSegments(i),o=h.reduce((t,i)=>t+i.length,0);if(0===o)return;const l=e+r;let a=0;for(;a<o;){const i=a+e;i<=o?this.drawContinuousDashSegment(t,h,a,i):this.drawContinuousDashSegment(t,h,a,o),a+=l}}calculatePathSegments(t){const i=[];for(let s=0;s<t.length-1;s++){const e=t[s],r=t[s+1],h=r.x-e.x,o=r.y-e.y,l=Math.sqrt(h*h+o*o);i.push({start:e,end:r,length:l})}return i}drawContinuousDashSegment(t,i,s,e){if(s>=e)return;let r=0,h=!1,o=null;for(const l of i){const i=r,a=r+l.length;if(a>s&&i<e){const r=Math.max(s,i),n=Math.min(e,a),d=(r-i)/l.length,c=(n-i)/l.length,p={x:l.start.x+(l.end.x-l.start.x)*d,y:l.start.y+(l.end.y-l.start.y)*d},y={x:l.start.x+(l.end.x-l.start.x)*c,y:l.start.y+(l.end.y-l.start.y)*c};h?o&&Math.sqrt(Math.pow(p.x-o.x,2)+Math.pow(p.y-o.y,2))>.1&&t.lineTo(p.x,p.y):(t.moveTo(p.x,p.y),h=!0),t.lineTo(y.x,y.y),o=y}if(r+=l.length,r>=e)break}}clearBorder(){this.fillGraphics&&(this.removeChild(this.fillGraphics),this.fillGraphics.destroy(),this.fillGraphics=null),this.solidLine&&(this.removeChild(this.solidLine),this.solidLine.destroy(),this.solidLine=null),this.dashGraphics&&(this.removeChild(this.dashGraphics),this.dashGraphics.destroy(),this.dashGraphics=null)}updateStyle(t){this.borderOptions.style={...this.borderOptions.style,...t},this.drawBorder()}updatePoints(t){this.borderOptions.points=t,this.drawBorder()}setClosePath(t){this.borderOptions.closePath=t,this.drawBorder()}getOptions(){return{...this.borderOptions}}destroy(){e().emitter.off("antiScale",this.handleAntiScale),this.clearBorder(),super.destroy()}}export{r as Border};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Graphics as t}from"pixi.js";import{useAppService as i}from"../../application/AppService.js";class n extends t{fillOptions;isDragging=!1;dragStartPosition=null;constructor(t){super(),this.fillOptions=t,this.setupInteraction(),this.setupDragEventListeners(),this.draw()}setupInteraction(){this.fillOptions.enableInteraction&&(this.eventMode="static",this.on("pointerdown",this.handlePointerDown))}setupDragEventListeners(){const{emitter:t}=i();t.on("gestureHijackPointerMove",this.handleDragPointerMove),t.on("gestureHijackPointerUp",this.handleDragPointerUp),t.on("gestureHijackCancel",this.handleDragCancel)}cleanupDragEventListeners(){const{emitter:t}=i();t.off("gestureHijackPointerMove",this.handleDragPointerMove),t.off("gestureHijackPointerUp",this.handleDragPointerUp),t.off("gestureHijackCancel",this.handleDragCancel)}handlePointerDown=t=>{t.stopPropagation(),this.startDragging(t)};startDragging(t){this.isDragging=!0;const n=this.parent.toLocal(t.global);this.dragStartPosition={x:n.x,y:n.y},this.fillOptions.onDragStart?.(t),i().emitter.emit("gestureHijackStart",t)}handleDragPointerMove=t=>{this.isDragging&&this.dragStartPosition&&this.fillOptions.onDragMove?.(t)};handleDragPointerUp=()=>{this.isDragging&&(this.isDragging=!1,this.dragStartPosition=null,this.fillOptions.onDragEnd?.())};handleDragCancel=()=>{this.isDragging&&(this.isDragging=!1,this.dragStartPosition=null,this.fillOptions.onDragEnd?.())};draw(){const{points:t,fillColor:i}=this.fillOptions;if(t.length<3)return;this.clear();const n=t.flatMap(t=>[t.x,t.y]);this.setFillStyle({color:i}).poly(n).fill()}getDragStartPosition(){return this.dragStartPosition}updateOptions(t){this.fillOptions={...this.fillOptions,...t},void 0!==t.enableInteraction&&(this.off("pointerdown",this.handlePointerDown),this.setupInteraction()),this.draw()}updatePoints(t){this.fillOptions.points=t,this.draw()}updateFillColor(t){this.fillOptions.fillColor=t,this.draw()}stopDragging(){this.isDragging&&(this.isDragging=!1,this.dragStartPosition=null)}isCurrentlyDragging(){return this.isDragging}setInteractionEnabled(t){this.fillOptions.enableInteraction=t,t?(this.eventMode="static",this.on("pointerdown",this.handlePointerDown)):(this.eventMode="auto",this.off("pointerdown",this.handlePointerDown),this.isDragging&&this.stopDragging())}destroy(){this.stopDragging(),this.cleanupDragEventListeners(),this.off("pointerdown",this.handlePointerDown),super.destroy()}}export{n as ControlFill};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Graphics as t,GraphicsContext as e}from"pixi.js";import{useAppService as s}from"../../application/AppService.js";class i extends t{lineOptions;strokeContext=null;constructor(t){super(),this.lineOptions={...t},this.eventMode="static",this.drawDashLine(),this.setupAntiScaleListener()}setupAntiScaleListener(){s().emitter.on("antiScale",this.drawDashLine)}drawDashLine=()=>{const{start:t,end:i,style:o}=this.lineOptions;this.clear(),this.strokeContext&&this.strokeContext.destroy();const n=s();this.strokeContext=new e;const r=n.getApp().toFixedSize(o.width);this.strokeContext.setStrokeStyle({color:o.color,width:r}),this.drawDashedLineToContext(this.strokeContext,t.x,t.y,i.x,i.y,o.dashArray[0],o.dashArray[1]),this.strokeContext.stroke(),this.context=this.strokeContext};drawDashedLineToContext(t,e,i,o,n,r,h){const a=o-e,d=n-i,p=Math.sqrt(a*a+d*d);if(0===p)return;const l=s(),c=l.getApp().toFixedSize(r),x=c+l.getApp().toFixedSize(h),k=p/x,y=Math.round(k);if(0===y)return t.moveTo(e,i),void t.lineTo(o,n);const u=p/y,C=u*(c/x),w=a/p,S=d/p;for(let s=0;s<y;s++){const o=s*u,n=o+C;if(o>=p)break;const r=Math.min(n,p),h=e+o*w,a=i+o*S,d=e+r*w,l=i+r*S;t.moveTo(h,a),t.lineTo(d,l)}}updatePoints(t,e){this.lineOptions.start=t,this.lineOptions.end=e,this.drawDashLine()}updateStyle(t){this.lineOptions.style={...this.lineOptions.style,...t},this.drawDashLine()}getOptions(){return{...this.lineOptions}}destroy(){s().emitter.off("antiScale",this.drawDashLine),this.strokeContext&&this.strokeContext.destroy(),super.destroy()}}export{i as DashLine};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Graphics as t,Circle as i}from"pixi.js";import{useAppService as n}from"../../application/AppService.js";class o extends t{constructor(t){super(),this.options=t,this.initialPosition={...t.position},this.position.set(t.position.x,t.position.y),this.eventMode="static",this.cursor="pointer",this.setupEvents(),this.draw(),this.setupDragEventListeners()}isDragging=!1;dragStartPosition=null;initialPosition;draw(){const t=n(),{config:i}=this.options,o=t.getApp().toFixedSize(i.endPointSize),s=t.getApp().toFixedSize(i.endPointStrokeWidth);this.clear(),this.circle(0,0,o/2),this.fill({color:i.endPointColor}),this.stroke({color:i.endPointStrokeColor,width:s}),this.setupHitArea()}setupHitArea(){const t=n(),{config:o}=this.options,s=Math.max(o.endPointSize/2+10,20),e=t.getApp().toFixedSize(s);this.hitArea=new i(0,0,e)}setupEvents(){this.on("pointerdown",this.handlePointerDown.bind(this))}setupDragEventListeners(){const{emitter:t}=n();t.on("gestureHijackPointerMove",this.handleDragPointerMove),t.on("gestureHijackPointerUp",this.handleDragPointerUp),t.on("gestureHijackCancel",this.handleDragCancel)}cleanupDragEventListeners(){const{emitter:t}=n();t.off("gestureHijackPointerMove",this.handleDragPointerMove),t.off("gestureHijackPointerUp",this.handleDragPointerUp),t.off("gestureHijackCancel",this.handleDragCancel)}handlePointerDown(t){t.stopPropagation(),this.startDragging(t)}startDragging(t){const i=n();this.isDragging=!0,this.dragStartPosition=this.parent.toLocal(t.global),this.initialPosition={x:this.x,y:this.y},this.options.onDragStart?.(),i.getApp().requestRender("endpoint-drag",!0),n().emitter.emit("gestureHijackStart",t)}handleDragPointerMove=t=>{if(!this.isDragging||!this.dragStartPosition)return;const i=this.parent.toLocal(t.global),n=i.x-this.dragStartPosition.x,o=i.y-this.dragStartPosition.y,s={x:this.initialPosition.x+n,y:this.initialPosition.y+o};this.position.set(s.x,s.y),this.options.onDragMove?.(s)};handleDragPointerUp=()=>{if(!this.isDragging)return;const t=n();this.isDragging=!1,this.dragStartPosition=null,t.getApp().stopRender("endpoint-drag"),this.options.onDragEnd?.()};handleDragCancel=()=>{if(!this.isDragging)return;const t=n();this.isDragging=!1,this.dragStartPosition=null,t.getApp().stopRender("endpoint-drag"),this.options.onDragEnd?.()};updatePosition(t){this.position.set(t.x,t.y),this.initialPosition={...t}}getPosition(){return{x:this.x,y:this.y}}redraw(){this.draw()}destroy(){this.isDragging&&(this.isDragging=!1,this.dragStartPosition=null),this.cleanupDragEventListeners(),this.off("pointerdown",this.handlePointerDown),super.destroy()}}export{o as EndPoint};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{AnimatedSprite as i,Assets as t,Texture as e,Ticker as s}from"pixi.js";import{throttle as a}from"lodash-es";import{Logger as r}from"../../utils/logger.js";import{useAppService as n}from"../../application/AppService.js";class h extends i{throttledUpdateScale;fixedWidth=0;fixedHeight=0;isFixedSizeSet=!1;sizeFixed=!0;baselineScale=1;static animationTicker=null;static animatedSprites=new Set;constructor(i){super(i||[]),this.anchor.set(.5),this.visible=!1,this.throttledUpdateScale=a(this.updateScale.bind(this),30,{leading:!0,trailing:!0}),this.registerScaleListener()}setFixedSize(i,t){this.fixedWidth=i,this.fixedHeight=t,this.isFixedSizeSet=!0,this.applySize()}setSizeFixed(i){this.sizeFixed=i,this.baselineScale=1,(i&&this.isFixedSizeSet||!i&&this.isFixedSizeSet)&&this.applySize()}set width(i){this.isFixedSizeSet||this.setFixedSize(i,this.fixedHeight||i)}set height(i){this.isFixedSizeSet||this.setFixedSize(this.fixedWidth||i,i)}get width(){return this.fixedWidth||super.width}get height(){return this.fixedHeight||super.height}registerScaleListener(){n().emitter.on("antiScale",this.throttledUpdateScale)}applySize(){if(!this.isFixedSizeSet||!this.textures||0===this.textures.length||!this.textures[0]||0===this.textures[0].width||0===this.textures[0].height)return;const i=n(),t=this.textures[0],e=this.fixedWidth/t.width,s=this.fixedHeight/t.height;if(this.sizeFixed){const t=i.currentScale;if(0===t||!isFinite(t)){const i=e,t=s;return void super.scale.set(i,t)}const a=e/t,r=s/t;super.scale.set(a,r)}else super.scale.set(e/this.baselineScale,s/this.baselineScale)}updateScale(i){this.sizeFixed&&(this.isFixedSizeSet?this.applySize():0!==i&&super.scale.set(1/i))}static async loadAnimationTextures(i,s="sleep_",a=96){try{await t.load(i);const r=[];for(let i=0;i<a;i++){const t=`${s}${i.toString().padStart(3,"0")}.png`,a=e.from(t);a&&r.push(a)}return r}catch(i){return[]}}setupAnimation(i){void 0!==i.sizeFixed&&this.setSizeFixed(i.sizeFixed),this.setFixedSize(i.width,i.height),this.animationSpeed=.5,this.loop=!0,r.log(`Animation setup complete, visible=${this.visible}, scale=(${this.scale.x.toFixed(3)}, ${this.scale.y.toFixed(3)})`)}draw(i,t){const{x:e,y:s,rotation:a=0}=i;t&&!this.visible?this.visible=t():t||this.visible||(this.visible=!0),this.rotation=a,this.position.set(e,s)}play(){this.textures&&this.textures.length>0&&(super.play(),h.animatedSprites.add(this),h.startAnimationTicker())}stop(){super.stop(),h.animatedSprites.delete(this),h.updateAnimationTicker()}set textures(i){super.textures=i,this.isFixedSizeSet&&i&&i.length>0&&i[0]&&i[0].width>0&&i[0].height>0&&this.applySize()}get textures(){return super.textures}static startAnimationTicker(){h.animationTicker?.started||(h.animationTicker||(h.animationTicker=new s,h.animationTicker.maxFPS=24,h.animationTicker.add(()=>{h.updateAnimations()})),h.animationTicker.start(),r.log("🎬 [AnimationTicker] Started animation ticker"))}static updateAnimationTicker(){h.animatedSprites.size>0?h.startAnimationTicker():h.stopAnimationTicker()}static stopAnimationTicker(){h.animationTicker?.started&&(r.log("⏸️ [AnimationTicker] Stopped animation ticker"),h.animationTicker.stop())}static updateAnimations(){if(0===h.animatedSprites.size)return;const i=n().getApp();i.renderer.render(i.stage)}destroy(i){h.animatedSprites.delete(this),h.updateAnimationTicker(),n().emitter.off("antiScale",this.throttledUpdateScale),super.destroy(i)}}export{h as EnhancedAnimatedSprite};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Assets as e}from"pixi.js";import{GifSprite as i}from"pixi.js/gif";import{throttle as t}from"lodash-es";import{Logger as s}from"../../utils/logger.js";import{useAppService as h}from"../../application/AppService.js";class r extends i{throttledUpdateScale;fixedWidth=0;fixedHeight=0;isFixedSizeSet=!1;sizeFixed=!0;baselineScale=1;constructor(e){super(e),this.anchor.set(.5),this.visible=!1,this.throttledUpdateScale=t(this.updateScale.bind(this),30,{leading:!0,trailing:!0}),this.registerScaleListener()}setFixedSize(e,i){this.fixedWidth=e,this.fixedHeight=i,this.isFixedSizeSet=!0,this.applySize()}setSizeFixed(e){this.sizeFixed=e,this.baselineScale=1,(e&&this.isFixedSizeSet||!e&&this.isFixedSizeSet)&&this.applySize()}set width(e){this.isFixedSizeSet?s.warn("EnhancedGifSprite: 使用 setFixedSize() 方法来设置宽度"):this.setFixedSize(e,this.fixedHeight||e)}set height(e){this.isFixedSizeSet?s.warn("EnhancedGifSprite: 使用 setFixedSize() 方法来设置高度"):this.setFixedSize(this.fixedWidth||e,e)}get width(){return this.fixedWidth||super.width}get height(){return this.fixedHeight||super.height}registerScaleListener(){h().emitter.on("antiScale",this.throttledUpdateScale)}applySize(){if(!this.isFixedSizeSet||!this.texture||0===this.texture.width||0===this.texture.height)return;const e=h(),i=this.fixedWidth/this.texture.width,t=this.fixedHeight/this.texture.height;if(this.sizeFixed){const s=e.currentScale;if(0===s)return;const h=i/s,r=t/s;super.scale.set(h,r)}else super.scale.set(i/this.baselineScale,t/this.baselineScale)}updateScale(e){this.sizeFixed&&(this.isFixedSizeSet?this.applySize():0!==e&&super.scale.set(1/e))}static async createFromSrc(i,t){try{const s=await e.load(i),h=new r({source:s});return void 0!==t.sizeFixed&&h.setSizeFixed(t.sizeFixed),h.setFixedSize(t.width,t.height),h}catch(e){throw s.error(`Failed to load GIF "${i}":`,e),e}}draw(e,i){const{x:t,y:s,rotation:h=0}=e;i&&!this.visible?this.visible=i():i||this.visible||(this.visible=!0),this.rotation=h,this.position.set(t,s)}destroy(e){h().emitter.off("antiScale",this.throttledUpdateScale),super.destroy(e)}}export{r as EnhancedGifSprite};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Sprite as e,Assets as i}from"pixi.js";import{throttle as t}from"lodash-es";import{Logger as s}from"../../utils/logger.js";import{useAppService as h}from"../../application/AppService.js";class r extends e{throttledUpdateScale;fixedWidth=0;fixedHeight=0;isFixedSizeSet=!1;sizeFixed=!0;baselineScale=1;constructor(e){super(e),this.anchor.set(.5),this.visible=!1,this.throttledUpdateScale=t(this.updateScale.bind(this),30,{leading:!0,trailing:!0}),this.registerScaleListener()}setFixedSize(e,i){this.fixedWidth=e,this.fixedHeight=i,this.isFixedSizeSet=!0,this.applySize()}setSizeFixed(e){this.sizeFixed=e,this.baselineScale=1,(e&&this.isFixedSizeSet||!e&&this.isFixedSizeSet)&&this.applySize()}set width(e){this.isFixedSizeSet?s.warn("EnhancedSprite: 使用 setFixedSize() 方法来设置宽度"):this.setFixedSize(e,this.fixedHeight||e)}set height(e){this.isFixedSizeSet?s.warn("EnhancedSprite: 使用 setFixedSize() 方法来设置高度"):this.setFixedSize(this.fixedWidth||e,e)}get width(){return this.fixedWidth||super.width}get height(){return this.fixedHeight||super.height}registerScaleListener(){h().emitter.on("antiScale",this.throttledUpdateScale)}applySize(){if(!this.isFixedSizeSet||!this.texture||0===this.texture.width||0===this.texture.height)return;const e=h(),i=this.fixedWidth/this.texture.width,t=this.fixedHeight/this.texture.height;if(this.sizeFixed){const s=e.currentScale;if(0===s)return;const h=i/s,r=t/s;super.scale.set(h,r)}else super.scale.set(i/this.baselineScale,t/this.baselineScale)}updateScale(e){this.sizeFixed&&(this.isFixedSizeSet?this.applySize():0!==e&&super.scale.set(1/e))}async loadTextureAndSetSize(e,t){try{const s=h(),r=await i.load(e);this.texture=r,void 0!==t.sizeFixed&&this.setSizeFixed(t.sizeFixed),this.setFixedSize(t.width,t.height),s.getApp().renderOnceNextFrame()}catch(i){s.error(`Failed to load texture "${e}":`,i)}}draw(e,i){const{x:t,y:s,rotation:h=0}=e;i&&!this.visible?this.visible=i():i||this.visible||(this.visible=!0),this.rotation=h,this.position.set(t,s)}set texture(e){super.texture=e,this.isFixedSizeSet&&e&&e.width>0&&e.height>0&&this.applySize()}get texture(){return super.texture}destroy(e){h().emitter.off("antiScale",this.throttledUpdateScale),super.destroy(e)}}export{r as EnhancedSprite};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Container as t}from"pixi.js";import{throttle as e}from"lodash-es";import{useAppService as r}from"../../application/AppService.js";class a extends t{throttledUpdateScale;constructor(){super(),this.throttledUpdateScale=e(this.updateScale.bind(this),30,{leading:!0,trailing:!0});const t=r();this.updateScale(t.currentScale),this.registerScaleListener()}registerScaleListener(){r().emitter.on("antiScale",this.throttledUpdateScale)}updateScale(t){0!==t&&this.scale.set(1/t)}destroy(t){r().emitter.off("antiScale",this.throttledUpdateScale),super.destroy(t)}}export{a as FixedSizeContainer};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{DOMContainer as e}from"pixi.js";import{throttle as t}from"lodash-es";import{useAppService as i}from"../../application/AppService.js";class s extends e{throttledUpdateScale;fixedWidth=0;fixedHeight=0;isFixedSizeSet=!1;constructor(e){super(e),this.anchor.set(.5),this.throttledUpdateScale=t(this.updateScale.bind(this),30,{leading:!0,trailing:!0}),this.registerScaleListener()}setFixedSize(e,t){this.fixedWidth=e,this.fixedHeight=t,this.isFixedSizeSet=!0,this.applyFixedSize()}registerScaleListener(){i().emitter.on("antiScale",this.throttledUpdateScale)}applyFixedSize(){if(!this.isFixedSizeSet)return;const e=i().currentScale;if(0===e)return;const t=1/e;this.scale.set(t),this.element&&(this.element.style.width=`${this.fixedWidth}px`,this.element.style.height=`${this.fixedHeight}px`)}updateScale(e){this.isFixedSizeSet&&0!==e&&this.applyFixedSize()}destroy(e){i().emitter.off("antiScale",this.throttledUpdateScale),super.destroy(e)}}export{s as FixedSizeDOMContainer};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Text as t}from"pixi.js";import{throttle as e}from"lodash-es";import{useAppService as s}from"../../application/AppService.js";class i extends t{throttledUpdateScale;constructor({text:t,style:i}){super({text:t,style:i}),this.throttledUpdateScale=e(this.updateScale.bind(this),20,{leading:!0,trailing:!0}),this.registerScaleListener(),this.updateScale(s().currentScale)}registerScaleListener(){s().emitter.on("antiScale",this.throttledUpdateScale)}updateScale(t){t<=0||this.scale.set(1/t)}setBaseFontSize(t){this.style.fontSize=t}updateText(t){this.text=t}destroy(t){s().emitter.off("antiScale",this.throttledUpdateScale),super.destroy(t)}}export{i as FixedSizeText};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{BaseControlButton as t}from"./BaseControlButton.js";import{useAppService as i}from"../../application/AppService.js";class o extends t{isMoving=!1;dragStartPosition=null;constructor(t){super(t),this.setupMoveEventListeners()}setupMoveEventListeners(){const{emitter:t}=i();t.on("gestureHijackPointerMove",this.handleMovePointerMove),t.on("gestureHijackPointerUp",this.handleMovePointerUp),t.on("gestureHijackCancel",this.handleMoveCancel)}cleanupMoveEventListeners(){const{emitter:t}=i();t.off("gestureHijackPointerMove",this.handleMovePointerMove),t.off("gestureHijackPointerUp",this.handleMovePointerUp),t.off("gestureHijackCancel",this.handleMoveCancel)}setupEvents(){this.on("pointerdown",this.handlePointerDown.bind(this))}handlePointerDown(t){t.stopPropagation(),this.startMoving(t)}startMoving(t){this.isMoving=!0,this.dragStartPosition=this.parent.toLocal(t.global),this.options.onMoveStart?.(),i().emitter.emit("gestureHijackStart",t)}handleMovePointerMove=t=>{this.isMoving&&this.dragStartPosition&&this.options.onMoveMove?.(t)};handleMovePointerUp=()=>{this.isMoving&&(this.isMoving=!1,this.dragStartPosition=null,this.options.onMoveEnd?.())};handleMoveCancel=()=>{this.isMoving&&(this.isMoving=!1,this.dragStartPosition=null,this.options.onMoveEnd?.())};isCurrentlyMoving(){return this.isMoving}getDragStartPosition(){return this.dragStartPosition?{...this.dragStartPosition}:null}stopMoving(){this.isMoving&&(this.isMoving=!1,this.dragStartPosition=null,this.options.onMoveEnd?.())}destroy(){this.stopMoving(),this.cleanupMoveEventListeners(),this.off("pointerdown",this.handlePointerDown),super.destroy()}}export{o as MoveControlButton};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{BaseControlButton as s}from"./BaseControlButton.js";import{ClickHandler as t}from"../../mixins/ClickHandler.js";class o extends s{clickHandler=null;constructor(s){super(s)}setupEvents(){this.clickHandler=new t(this,{onClick:this.options.onClick,stopPropagation:!0})}destroy(){this.clickHandler?.destroy(),super.destroy()}}export{o as RemoveControlButton};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Graphics as t}from"pixi.js";import{useAppService as i}from"../../application/AppService.js";class e extends t{currentPosition=null;config;constructor(t){super(),this.setupAntiScaleListener(),this.config=t.config}setupAntiScaleListener(){i().emitter.on("antiScale",this.handleScaleChange.bind(this))}handleScaleChange=()=>{this.redraw()};draw(t){const e=i();this.currentPosition=t;const{ringSize:o,ringColor:r,ringStrokeWidth:s,ringStrokeColor:n,ringStrokeDashed:c,ringStrokeDashArray:a}=this.config;this.clear();const h=e.metersToPixels(o),l=e.getApp().toFixedSize(s);this.setFillStyle({color:r}),c&&a.length>=2?this.drawDashedCircle(t,h,n,l,a):this.circle(t.x,t.y,h).fill().stroke({color:n,width:l,cap:"round",join:"round"})}drawDashedCircle(t,e,o,r,s){const n=i();this.circle(t.x,t.y,e).fill();const c=n.getApp().toFixedSize(s[0]),a=n.getApp().toFixedSize(s[1]),h=2*Math.PI*e,l=c+a,d=Math.floor(h/l);if(0===d)return void this.circle(t.x,t.y,e).stroke({color:o,width:r,cap:"round",join:"round"});const p=h/d,g=p*(c/l);for(let i=0;i<d;i++){const o=i*p/e,r=(i*p+g)/e,s=Math.max(4,Math.ceil(Math.abs(r-o)*e/2)),n=(r-o)/s;for(let i=0;i<=s;i++){const r=o+n*i,s=t.x+e*Math.cos(r),c=t.y+e*Math.sin(r);0===i?this.moveTo(s,c):this.lineTo(s,c)}}this.stroke({color:o,width:r,cap:"round",join:"round"})}redraw(){this.currentPosition&&this.draw(this.currentPosition)}destroy(){i().emitter.off("antiScale",this.handleScaleChange),super.destroy()}}export{e as Ring};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{BaseControlButton as t}from"./BaseControlButton.js";import{calculateCenter as o}from"../../utils/algorithm.js";import{useAppService as i}from"../../application/AppService.js";class n extends t{isRotating=!1;rotationCenter={x:0,y:0};lastAngle=0;constructor(t){super(t),this.setupRotationEventListeners()}setupRotationEventListeners(){const{emitter:t}=i();i().emitter.on("gestureHijackPointerMove",this.handleRotationPointerMove),t.on("gestureHijackPointerUp",this.handleRotationPointerUp),t.on("gestureHijackCancel",this.handleRotationCancel)}cleanupRotationEventListeners(){const{emitter:t}=i();t.off("gestureHijackPointerMove",this.handleRotationPointerMove),t.off("gestureHijackPointerUp",this.handleRotationPointerUp),t.off("gestureHijackCancel",this.handleRotationCancel)}setupEvents(){this.on("pointerdown",this.handlePointerDown.bind(this))}handlePointerDown(t){t.stopPropagation(),this.startRotation(t)}startRotation(t){this.isRotating=!0;const n=this.options.getTargetPoints();this.rotationCenter=o(n);const e=this.parent.toLocal(t.global);this.lastAngle=Math.atan2(e.y-this.rotationCenter.y,e.x-this.rotationCenter.x),this.options.onRotationStart?.(this.rotationCenter),i().emitter.emit("gestureHijackStart",t)}handleRotationPointerMove=t=>{if(!this.isRotating)return;const o=this.parent.toLocal(t.global),i=Math.atan2(o.y-this.rotationCenter.y,o.x-this.rotationCenter.x),n=i-this.lastAngle;this.options.onRotationMove?.(n),this.lastAngle=i};handleRotationPointerUp=()=>{this.isRotating&&(this.isRotating=!1,this.options.onRotationEnd?.())};handleRotationCancel=()=>{this.isRotating&&(this.isRotating=!1,this.options.onRotationEnd?.())};isCurrentlyRotating(){return this.isRotating}stopRotation(){this.isRotating&&(this.isRotating=!1,this.options.onRotationEnd?.())}destroy(){this.stopRotation(),this.cleanupRotationEventListeners(),this.off("pointerdown",this.handlePointerDown),super.destroy()}}export{n as RotateControlButton};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{BaseControlButton as t}from"./BaseControlButton.js";import{useAppService as i}from"../../application/AppService.js";class n extends t{isScaling=!1;initialButtonPosition=null;dragStartPosition=null;constructor(t){super(t),this.setupScaleEventListeners()}setupScaleEventListeners(){const{emitter:t}=i();t.on("gestureHijackPointerMove",this.handleScalePointerMove),t.on("gestureHijackPointerUp",this.handleScalePointerUp),t.on("gestureHijackCancel",this.handleScaleCancel)}cleanupScaleEventListeners(){const{emitter:t}=i();t.off("gestureHijackPointerMove",this.handleScalePointerMove),t.off("gestureHijackPointerUp",this.handleScalePointerUp),t.off("gestureHijackCancel",this.handleScaleCancel)}setupEvents(){this.on("pointerdown",this.handlePointerDown.bind(this))}handlePointerDown(t){t.stopPropagation(),this.startScaling(t)}startScaling(t){this.isScaling=!0,this.dragStartPosition=this.parent.toLocal(t.global);const n=this.options.getTargetPoints(),o=this.options.getButtonIndex();o>=0&&o<n.length&&(this.initialButtonPosition={...n[o]}),this.options.onScaleStart?.(o),i().emitter.emit("gestureHijackStart",t)}handleScalePointerMove=t=>{if(!this.isScaling||!this.initialButtonPosition||!this.dragStartPosition)return;const i=this.parent.toLocal(t.global),n=i.x-this.dragStartPosition.x,o=i.y-this.dragStartPosition.y,s={x:this.initialButtonPosition.x+n,y:this.initialButtonPosition.y+o};this.options.onScaleMove?.(s)};handleScalePointerUp=()=>{this.isScaling&&(this.isScaling=!1,this.initialButtonPosition=null,this.dragStartPosition=null,this.options.onScaleEnd?.())};handleScaleCancel=()=>{this.isScaling&&(this.isScaling=!1,this.initialButtonPosition=null,this.dragStartPosition=null,this.options.onScaleEnd?.())};isCurrentlyScaling(){return this.isScaling}stopScaling(){this.isScaling&&(this.isScaling=!1,this.initialButtonPosition=null,this.dragStartPosition=null,this.options.onScaleEnd?.())}destroy(){this.stopScaling(),this.cleanupScaleEventListeners(),this.off("pointerdown",this.handlePointerDown),super.destroy()}}export{n as ScaleControlButton};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Container as t}from"pixi.js";import{RotateControlButton as o}from"./RotateControlButton.js";import{RemoveControlButton as e}from"./RemoveControlButton.js";import{ScaleControlButton as i}from"./ScaleControlButton.js";import{MoveControlButton as n}from"./MoveControlButton.js";import{ControlFill as s}from"./ControlFill.js";import{normalizeToRectangle as a,getDistance as l,calculateCenter as r,normalizeVector as h,createVector as d,calculatePolygonOutline as u,calculateUprightLineAngle as c,calculateCornerExtension as p,rotatePointsAroundCenter as g,getVectorLength as C,calculateScaleRatio as y}from"../../utils/algorithm.js";import{ClickHandler as x}from"../../mixins/ClickHandler.js";import{throttle as z}from"lodash-es";import{Border as B}from"./Border.js";import{FixedSizeText as S}from"./FixedSizeText.js";import{useAppService as f}from"../../application/AppService.js";class v extends t{static BUTTON_INDICES={REMOVE:0,ROTATE:1,SCALE:2,MOVE:3,FIXED:0};zoneData;zoneType;zoneConfig;controlsConfig;zoneEvents;controlFill;zoneBorder;outlineBorder;moveLine;sizeText;controlButtons;deleteButton=null;rotateButton=null;scaleButton=null;moveButton=null;totalRotationAngle=0;rotationCenter=null;initialZonePoints=[];clickHandler=null;throttledUpdateOutline;constructor(t){super();const{zoneData:o,zoneType:e,events:i={}}=t;this.zoneType=e,this.zoneEvents=i,this.zoneConfig=this.getZoneConfig(),this.controlsConfig=this.getControlsConfig();const n=this.validateAndCorrectZoneSize(o.points),s=a(n);this.zoneData={...o,points:s},this.throttledUpdateOutline=z(this.updateOutlineForScale.bind(this),30,{leading:!0,trailing:!0}),this.initializeComponents(),this.createControlButtons(),this.updateEditState(),this.setupClickHandler(),this.registerScaleListener()}registerScaleListener(){f().emitter.on("antiScale",this.throttledUpdateOutline)}updateOutlineForScale(){this.isEditingEnabled()&&(this.updateOutlineBorder(),this.updateMoveLine(),this.updateControlButtonsPosition(),this.updateSizeTextPosition())}getZoneConfig(){const t=f(),{controls:o}=t.getConfig();return o[this.zoneType]}getControlsConfig(){const t=f(),{controls:o}=t.getConfig();return o}validateAndCorrectZoneSize(t){const o=f();if(t.length<4)return t;const e=o.metersToPixels(this.zoneConfig.minSize),[i,n,,s]=t,a=l(i,n),u=l(i,s);if(a>=e&&u>=e)return t;const c=r(t),p=h(d(i,n)),g=h(d(i,s)),C=Math.max(a,e)/2,y=Math.max(u,e)/2;return[{x:c.x-p.x*C-g.x*y,y:c.y-p.y*C-g.y*y},{x:c.x+p.x*C-g.x*y,y:c.y+p.y*C-g.y*y},{x:c.x+p.x*C+g.x*y,y:c.y+p.y*C+g.y*y},{x:c.x-p.x*C+g.x*y,y:c.y-p.y*C+g.y*y}]}getEditingIdsKey(){switch(this.zoneType){case"forbiddenSweepZone":default:return"editingForbiddenSweepZoneIds";case"forbiddenMopZone":return"editingForbiddenMopZoneIds";case"cleanZone":return"editingCleanZoneIds"}}isEditingEnabled(){const t=this.getEditingIdsKey();return f().runtimeSnapshot[t].includes(this.zoneData.id)}initializeComponents(){this.outlineBorder=this.createOutlineBorder(),this.addChild(this.outlineBorder),this.controlFill=this.createControlFill(),this.addChild(this.controlFill),this.zoneBorder=this.createBorder(),this.addChild(this.zoneBorder),this.moveLine=this.createMoveLine(),this.addChild(this.moveLine),this.sizeText=this.createSizeText(),this.addChild(this.sizeText),this.controlButtons=new t,this.controlButtons.visible=this.isEditingEnabled(),this.addChild(this.controlButtons),this.drawZone()}createControlButtons(){const t=this.calculateOutlinePoints();if(t.length<4)return;this.deleteButton=new e({iconAlias:"deleteIcon",backgroundColor:this.zoneConfig.iconWrapperFillColor,onClick:this.handleDelete}),this.deleteButton.position.set(t[v.BUTTON_INDICES.REMOVE].x,t[v.BUTTON_INDICES.REMOVE].y),this.rotateButton=new o({iconAlias:"rotateIcon",backgroundColor:this.zoneConfig.iconWrapperFillColor,getTargetPoints:()=>this.zoneData.points,onRotationStart:this.handleRotationStart,onRotationMove:this.handleRotationMove,onRotationEnd:this.handleRotationEnd}),this.rotateButton.position.set(t[v.BUTTON_INDICES.ROTATE].x,t[v.BUTTON_INDICES.ROTATE].y),this.scaleButton=new i({iconAlias:"scaleIcon",backgroundColor:this.zoneConfig.iconWrapperFillColor,getTargetPoints:()=>this.zoneData.points,getButtonIndex:()=>v.BUTTON_INDICES.SCALE,onScaleStart:this.handleScaleStart,onScaleMove:this.handleScaleMove,onScaleEnd:this.handleScaleEnd}),this.scaleButton.position.set(t[v.BUTTON_INDICES.SCALE].x,t[v.BUTTON_INDICES.SCALE].y);const s=this.calculateMoveButtonPosition();this.moveButton=new n({iconAlias:"moveIcon",backgroundColor:this.zoneConfig.iconWrapperFillColor,onMoveStart:this.handleMoveStart,onMoveMove:this.handleMove,onMoveEnd:this.handleMoveEnd}),this.moveButton.position.set(s.x,s.y),this.controlButtons.addChild(this.deleteButton),this.controlButtons.addChild(this.rotateButton),this.controlButtons.addChild(this.scaleButton),this.controlButtons.addChild(this.moveButton)}createControlFill(){const t=this.isEditingEnabled();return new s({points:this.zoneData.points,fillColor:this.zoneConfig.fillColor,enableInteraction:t,onDragStart:this.handleDragStart,onDragMove:this.handleDragMove,onDragEnd:this.handleDragEnd})}createBorder(){const t=this.isEditingEnabled()?this.zoneConfig.editing:this.zoneConfig.normal;return new B({points:this.zoneData.points,closePath:!0,style:{color:this.zoneConfig.strokeColor,width:this.zoneConfig.strokeWidth,isDashed:t.isDashed,dashArray:t.dashArray}})}createOutlineBorder(){const t=this.calculateOutlinePoints();return new B({points:t,closePath:!0,style:{color:this.zoneConfig.outlineStrokeColor,width:this.zoneConfig.outlineStrokeWidth,isDashed:this.zoneConfig.outlineDashed,dashArray:this.zoneConfig.outlineDashArray,fillColor:this.zoneConfig.outlineFillColor}})}createMoveLine(){const t=this.calculateOutlinePoints(),o=this.calculateMoveLinePoints(t);return new B({points:o,closePath:!1,style:{color:this.zoneConfig.outlineStrokeColor,width:this.zoneConfig.outlineStrokeWidth,isDashed:this.zoneConfig.outlineDashed,dashArray:this.zoneConfig.outlineDashArray}})}calculateOutlinePoints(){const{points:t}=this.zoneData;if(t.length<4)return t;const o=f().getApp().toFixedSize(this.zoneConfig.outlineOffset);return u(t,o)}calculateMoveLinePoints(t){return t.length<4?[]:[t[v.BUTTON_INDICES.MOVE],this.calculateMoveButtonPosition()]}createSizeText(){const t=this.calculateZoneSizeText(),o=new S({text:t,style:{fontSize:this.controlsConfig.textFontSize,fontFamily:this.controlsConfig.textFontFamily,fontWeight:this.controlsConfig.textFontWeight,fill:this.zoneConfig.textColor,align:"center"}});o.anchor.set(.5);const e=this.calculateSizeTextPosition();o.position.set(e.x,e.y);const i=this.calculateSizeTextRotation();return o.rotation=i,o.eventMode="none",o}calculateZoneSizeText(){const{points:t}=this.zoneData;if(t.length<4)return"0m*0m";const[o,e,,i]=t,n=l(o,e),s=l(o,i),a=f(),r=a.pixelsToMeters(n),h=a.pixelsToMeters(s);return`${r.toFixed(1)}${this.controlsConfig.unitLabel}*${h.toFixed(1)}${this.controlsConfig.unitLabel}`}calculateSizeTextPosition(){const{points:t}=this.zoneData;if(t.length<4)return{x:0,y:0};const[o,e,i,n]=t,{textPosition:s,textOffset:a}=this.zoneConfig,l=f().getApp().toFixedSize(a);let r,u;switch(s){case"top":{r={x:(o.x+e.x)/2,y:(o.y+e.y)/2};const t=h(d(e,o)),i={x:t.y,y:-t.x};u={x:i.x*l,y:i.y*l};break}case"right":{r={x:(e.x+i.x)/2,y:(e.y+i.y)/2};const t=h(d(e,i)),o={x:t.y,y:-t.x};u={x:o.x*l,y:o.y*l};break}case"bottom":{r={x:(n.x+i.x)/2,y:(n.y+i.y)/2};const t=h(d(n,i)),o={x:-t.y,y:t.x};u={x:o.x*l,y:o.y*l};break}case"left":{r={x:(o.x+n.x)/2,y:(o.y+n.y)/2};const t=h(d(n,o)),e={x:t.y,y:-t.x};u={x:e.x*l,y:e.y*l};break}default:r={x:(o.x+e.x)/2,y:(o.y+e.y)/2},u={x:0,y:l}}return{x:r.x+u.x,y:r.y+u.y}}calculateSizeTextRotation(){const{points:t}=this.zoneData;if(t.length<4)return 0;const[o,e,i,n]=t,{textPosition:s}=this.zoneConfig;let a,l;switch(s){case"top":default:a=o,l=e;break;case"right":a=e,l=i;break;case"bottom":a=i,l=n;break;case"left":a=n,l=o}return c(a,l)}calculateMoveButtonPosition(){const t=this.calculateOutlinePoints();if(t.length<4)return{x:0,y:0};const o=f(),{controls:e}=o.getConfig(),i=t[v.BUTTON_INDICES.MOVE],n=t[2],s=t[0],a=o.getApp().toFixedSize(e.moveButtonOffset);return p(i,n,s,a)}handleDragStart=()=>{if(!this.isEditingEnabled())return;const t=f();this.initialZonePoints=this.zoneData.points.map(t=>({...t})),t.getApp().requestRender("zone-drag",!0)};handleDragMove=t=>{if(!this.isEditingEnabled()||0===this.initialZonePoints.length)return;const o=this.parent.toLocal(t.global),e=this.controlFill.getDragStartPosition();if(!e)return;const i=o.x-e.x,n=o.y-e.y;this.applyTranslation(i,n)};handleDragEnd=()=>{const t=f();this.initialZonePoints=[],t.getApp().stopRender("zone-drag"),this.zoneEvents.onUpdate?.(this.getZoneData())};applyTranslation(t,o){this.zoneData.points=this.initialZonePoints.map(e=>({x:e.x+t,y:e.y+o})),this.drawZone(),this.updateControlButtonsPosition()}handleRotationStart=t=>{const o=f();this.totalRotationAngle=0,this.rotationCenter=t,this.initialZonePoints=this.zoneData.points.map(t=>({...t})),o.getApp().requestRender("zone-rotate",!0)};handleRotationMove=t=>{this.totalRotationAngle+=t,this.applyRotation(t)};handleRotationEnd=()=>{const t=f();this.rotationCenter=null,this.totalRotationAngle=0,this.initialZonePoints=[],t.getApp().stopRender("zone-rotate"),this.zoneEvents.onUpdate?.(this.getZoneData())};applyRotation(t){this.rotationCenter&&(this.zoneData.points=g(this.zoneData.points,this.rotationCenter,t),this.drawZone(),this.updateControlButtonsPosition())}handleScaleStart=()=>{const t=f();this.initialZonePoints=this.zoneData.points.map(t=>({...t})),t.getApp().requestRender("zone-scale",!0)};handleScaleMove=t=>{0!==this.initialZonePoints.length&&this.applyEdgeBasedScale(t)};handleScaleEnd=()=>{const t=f();this.initialZonePoints=[],t.getApp().stopRender("zone-scale"),this.zoneEvents.onUpdate?.(this.getZoneData())};applyEdgeBasedScale(t){if(this.initialZonePoints.length<4)return;const o=f(),{FIXED:e}=v.BUTTON_INDICES,{x:i,y:n}=this.initialZonePoints[e],[,s,,a]=this.initialZonePoints,l={x:i,y:n},r=d(l,s),h=d(l,a),u=d(l,t),c=C(r),p=C(h);if(0===c||0===p)return;const g=o.metersToPixels(this.zoneConfig.minSize),[x,z]=[y(u,r,c,g),y(u,h,p,g)];this.zoneData.points=[l,{x:i+r.x*x,y:n+r.y*x},{x:i+r.x*x+h.x*z,y:n+r.y*x+h.y*z},{x:i+h.x*z,y:n+h.y*z}],this.drawZone(),this.updateControlButtonsPosition()}handleMoveStart=()=>{const t=f();this.initialZonePoints=this.zoneData.points.map(t=>({...t})),t.getApp().requestRender("zone-move",!0)};handleMove=t=>{if(!this.isEditingEnabled()||0===this.initialZonePoints.length)return;const o=this.parent.toLocal(t.global),e=this.moveButton?.getDragStartPosition();if(!e)return;const i=o.x-e.x,n=o.y-e.y;this.applyTranslation(i,n)};handleMoveEnd=()=>{const t=f();this.initialZonePoints=[],t.getApp().stopRender("zone-move"),this.zoneEvents.onUpdate?.(this.getZoneData())};handleDelete=()=>{this.zoneEvents.onRemove?.(this.zoneData.id)};setupClickHandler(){this.clickHandler=new x(this,{onClick:()=>{this.isEditingEnabled()||this.zoneEvents?.onClick?.(this.getZoneData())},stopPropagation:!1})}drawZone(){const{points:t}=this.zoneData;t.length<4||(this.controlFill.updatePoints(t),this.zoneBorder.updatePoints(t),this.updateOutlineBorder(),this.updateMoveLine(),this.updateSizeText())}updateOutlineBorder(){const t=this.calculateOutlinePoints();this.outlineBorder.updatePoints(t)}updateMoveLine(){const t=this.calculateOutlinePoints(),o=this.calculateMoveLinePoints(t);this.moveLine.updatePoints(o)}updateSizeText(){if(!this.sizeText)return;const t=this.calculateZoneSizeText();this.sizeText.updateText(t),this.updateSizeTextPosition()}updateSizeTextPosition(){if(!this.sizeText)return;const t=this.calculateSizeTextPosition();this.sizeText.position.set(t.x,t.y);const o=this.calculateSizeTextRotation();this.sizeText.rotation=o}updateControlButtonsPosition(){if(!(this.deleteButton&&this.rotateButton&&this.scaleButton&&this.moveButton))return;const t=this.calculateOutlinePoints();if(t.length<4)return;const{REMOVE:o,ROTATE:e,SCALE:i}=v.BUTTON_INDICES,n=this.calculateMoveButtonPosition();[{button:this.deleteButton,point:t[o]},{button:this.rotateButton,point:t[e]},{button:this.scaleButton,point:t[i]},{button:this.moveButton,point:n}].forEach(({button:t,point:o})=>t.position.set(o.x,o.y))}updateEditState(){const t=this.isEditingEnabled();this.controlButtons.visible=t,!t&&this.getCurrentOperationState().hasAnyOperation&&this.stopAllOperations(),this.outlineBorder.visible=t,this.moveLine.visible=t,this.sizeText&&(this.sizeText.visible=t),t&&(this.updateOutlineBorder(),this.updateMoveLine(),this.updateControlButtonsPosition(),this.updateSizeTextPosition()),this.controlFill.setInteractionEnabled(t),this.updateBorderStyle(t?this.zoneConfig.editing:this.zoneConfig.normal),this.zIndex=t?1e3:0}updateBorderStyle(t){this.zoneBorder.updateStyle({isDashed:t.isDashed,dashArray:t.dashArray})}getCurrentOperationState(){const t=this.controlFill.isCurrentlyDragging(),o=this.scaleButton?.isCurrentlyScaling()||!1,e=this.rotateButton?.isCurrentlyRotating()||!1,i=this.moveButton?.isCurrentlyMoving()||!1;return{isDragging:t,isScaling:o,isRotating:e,isMoving:i,hasAnyOperation:t||o||e||i}}stopAllOperations(){this.controlFill.stopDragging(),this.scaleButton?.stopScaling(),this.rotateButton?.stopRotation(),this.moveButton?.stopMoving()}stopDragging(){this.controlFill.stopDragging()}stopScaling(){this.scaleButton?.stopScaling()}stopRotating(){this.rotateButton?.stopRotation()}stopMoving(){this.moveButton?.stopMoving()}isCurrentlyDragging(){return this.controlFill.isCurrentlyDragging()}isCurrentlyScaling(){return this.scaleButton?.isCurrentlyScaling()||!1}isCurrentlyRotating(){return this.rotateButton?.isCurrentlyRotating()||!1}isCurrentlyMoving(){return this.moveButton?.isCurrentlyMoving()||!1}updateZoneData(t){const o=this.validateAndCorrectZoneSize(t.points),e=a(o);this.zoneData={...t,points:e},this.drawZone(),this.updateControlButtonsPosition(),this.updateEditState()}getZoneData(){return{...this.zoneData}}destroy(){f().emitter.off("antiScale",this.throttledUpdateOutline),this.clickHandler?.destroy(),this.clickHandler=null,this.deleteButton?.destroy(),this.rotateButton?.destroy(),this.scaleButton?.destroy(),this.moveButton?.destroy(),this.deleteButton=null,this.rotateButton=null,this.scaleButton=null,this.moveButton=null,this.zoneBorder?.destroy(),this.outlineBorder?.destroy(),this.moveLine?.destroy(),this.sizeText?.destroy(),this.controlFill?.destroy(),this.controlButtons?.destroy(),super.destroy()}}export{v as Zone};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{EnhancedSprite as i}from"../Base/EnhancedSprite.js";import{useAppService as t}from"../../application/AppService.js";class n extends i{constructor(){super(),this.initializeSprite()}async initializeSprite(){const i=t();await this.loadTextureAndSetSize("chargingStation",i.chargingStationConfig.icon)}async draw({x:i,y:n,rotation:a}){const o=t();super.draw({x:i,y:n,rotation:a},()=>o.runtimeSnapshot.showChargingStation)}}export{n as ChargingStationIcon};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Container as i}from"pixi.js";import{ChargingStationIcon as t}from"./ChargingStationIcon.js";import{LAYER_CHARGING_STATION as n}from"../../application/AppContainer.js";import{subscribeKey as r}from"valtio/vanilla/utils";import{Logger as s}from"../../utils/logger.js";import{useAppService as o}from"../../application/AppService.js";import{Ring as a}from"../Base/Ring.js";class g extends i{chargingStation;ring;unsubscribeFns=[];constructor(){super();const i=o();i.appContainer.addToLayer(n,this),this.ring=new a({config:i.chargingStationConfig}),this.ring.visible=i.runtimeSnapshot.showChargingStationRing,this.addChild(this.ring),this.chargingStation=new t,this.addChild(this.chargingStation);const g=r(i.runtime,"showChargingStationRing",i=>{s.log(`[runtime] showChargingStationRing: ${i}`),this.ring.visible=i});this.unsubscribeFns.push(g)}async draw({x:i,y:t,rotation:n}){0===i&&0===t||(this.ring.draw({x:i,y:t}),await this.chargingStation.draw({x:i,y:t,rotation:n}))}destroy(){this.unsubscribeFns.forEach(i=>i()),this.unsubscribeFns=[],this.ring.destroy(),super.destroy()}}export{g as ChargingStation};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Zone as e}from"../Base/Zone.js";import{useAppService as n}from"../../application/AppService.js";class o extends e{constructor(e){const o=n();super({zoneData:e.zoneData,zoneType:"cleanZone",events:{onRemove:e=>{o.events?.onRemoveCleanZone?.(e)},onUpdate:e=>{o.events?.onUpdateCleanZone?.(e)},onClick:e=>{o.events?.onClickCleanZone?.(e)}}})}static create(e){return new o({zoneData:e})}}export{o as CleanZone};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Container as i,Polygon as t,Graphics as e}from"pixi.js";import{calculateLineEndpoints as n,calculateLineSegmentHitArea as s,sampleLinePoints as o,getDistance as r,extendLineSegment as d,isPointInPolygon as a,lineIntersectsBox as h}from"../../utils/algorithm.js";import{throttle as l}from"lodash-es";import{Logger as g}from"../../utils/logger.js";import{useAppService as c}from"../../application/AppService.js";import{DashLine as u}from"../Base/DashLine.js";import{EndPoint as p}from"../Base/EndPoint.js";class P extends i{endPoints;dividerConfig;dividerEvents;roomId;roomGeometry=null;dashLine;solidLine=null;startEndPoint;endEndPoint;solidLinePoints=null;initialDividerPoints=[];isDragging=!1;dragStartPosition=null;throttledHandleScaleChange;constructor(i){super();const{endPoints:t,roomId:e,events:n={}}=i;this.dividerEvents=n,this.roomId=e;const s=c();this.dividerConfig=s.dividerConfig,this.roomGeometry=s.mapManager.getRoomById(this.roomId)||null,this.endPoints=t?this.validateDividerPoints(t):this.createDefaultdividerPoints(),this.throttledHandleScaleChange=l(this.handleScaleChange.bind(this),30,{leading:!0,trailing:!0}),this.initializeComponents(),this.calculateAndCreateSolidLine(),this.registerScaleListener(),this.setupDragEventListeners()}validateDividerPoints(i){if(i.length>=2)return i.slice(0,2);const t=i[0]||{x:0,y:0};return[t,{x:t.x+50,y:t.y}]}createDefaultdividerPoints(){if(!this.roomGeometry)return g.warn("Room geometry not available, creating fallback divider"),[{x:0,y:0},{x:100,y:0}];const i=c(),t=i.getApp().mapState;if(!t)return g.warn("Map state not available, creating fallback divider"),[{x:0,y:0},{x:100,y:0}];const{boundingBox:e}=this.roomGeometry,s=i.getApp().toFixedSize(this.dividerConfig.defaultExtension),o=this.dividerConfig.defaultDirection,r=e.x+e.width/2,d=e.y+e.height/2,a="horizontal"===o?e.width+2*s:e.height+2*s;return n(r,d,a,o).map(i=>({x:i.x-t.origin.x,y:i.y-t.origin.y}))}initializeComponents(){this.createDashLine(),this.addChild(this.dashLine),this.createEndPoints(),this.addChild(this.startEndPoint),this.addChild(this.endEndPoint),this.setupDashLineInteraction()}createDashLine(){const i=this.endPoints;if(i.length<2)return;const{dashLineWidth:t,dashLineDashArray:e,lineColor:n}=this.dividerConfig;this.dashLine=new u({start:i[0],end:i[1],style:{color:n.toString(),width:t,dashArray:e}})}createEndPoints(){const i=this.endPoints;this.startEndPoint=new p({position:i[0],config:this.dividerConfig,onDragStart:this.handleEndPointDragStart,onDragMove:i=>this.handleEndPointDragMove(0,i),onDragEnd:this.handleEndPointDragEnd}),this.endEndPoint=new p({position:i[1],config:this.dividerConfig,onDragStart:this.handleEndPointDragStart,onDragMove:i=>this.handleEndPointDragMove(1,i),onDragEnd:this.handleEndPointDragEnd})}setupDashLineInteraction(){this.dashLine&&(this.setupDashLineHitArea(),this.dashLine.off("pointerdown",this.handleDashLinePointerDown),this.dashLine.on("pointerdown",this.handleDashLinePointerDown))}setupDashLineHitArea(){const i=c();if(!this.dashLine)return;const e=this.endPoints;if(e.length<2)return;const{hitAreaThickness:n}=this.dividerConfig,o=i.getApp().toFixedSize(n),r=s(e[0],e[1],o);if(0===r.length)return;const d=new t(r);this.dashLine.hitArea=d}handleEndPointDragStart=()=>{const i=c();this.initialDividerPoints=this.endPoints.map(i=>({...i})),this.clearSolidLine(),i.getApp().requestRender("divider-endpoint-drag",!0)};handleEndPointDragMove=(i,t)=>{0!==this.initialDividerPoints.length&&(this.endPoints[i]=t,this.updateDashLine(),this.updateSolidLine(),this.setupDashLineHitArea())};handleEndPointDragEnd=()=>{const i=c();this.initialDividerPoints=[],i.getApp().stopRender("divider-endpoint-drag"),this.calculateAndCreateSolidLine(),this.checkAndResetIfOutOfRoom(),this.dividerEvents.onUpdate?.(this.getDividerEndPoints())};handleDashLinePointerDown=i=>{i.stopPropagation(),this.startDragging(i)};startDragging(i){const t=c();this.isDragging=!0;const e=this.parent.toLocal(i.global);this.dragStartPosition={x:e.x,y:e.y},this.initialDividerPoints=this.endPoints.map(i=>({...i})),this.clearSolidLine(),t.getApp().requestRender("divider-drag",!0),c().emitter.emit("gestureHijackStart",i)}setupDragEventListeners(){const{emitter:i}=c();i.on("gestureHijackPointerMove",this.handleDragPointerMove),i.on("gestureHijackPointerUp",this.handleDragPointerUp),i.on("gestureHijackCancel",this.handleDragCancel)}cleanupDragEventListeners(){const{emitter:i}=c();i.off("gestureHijackPointerMove",this.handleDragPointerMove),i.off("gestureHijackPointerUp",this.handleDragPointerUp),i.off("gestureHijackCancel",this.handleDragCancel)}handleDragPointerMove=i=>{if(!this.isDragging||!this.dragStartPosition||0===this.initialDividerPoints.length)return;const t=this.parent.toLocal(i.global),e=t.x-this.dragStartPosition.x,n=t.y-this.dragStartPosition.y;this.endPoints=this.initialDividerPoints.map(i=>({x:i.x+e,y:i.y+n})),this.updateAllComponents()};handleDragPointerUp=()=>{const i=c();this.isDragging&&(this.isDragging=!1,this.dragStartPosition=null,this.initialDividerPoints=[],i.getApp().stopRender("divider-drag"),this.calculateAndCreateSolidLine(),this.checkAndResetIfOutOfRoom(),this.dividerEvents.onUpdate?.(this.getDividerEndPoints()))};handleDragCancel=()=>{const i=c();this.isDragging&&(this.isDragging=!1,this.dragStartPosition=null,this.initialDividerPoints=[],i.getApp().stopRender("divider-drag"),this.calculateAndCreateSolidLine(),this.checkAndResetIfOutOfRoom(),this.dividerEvents.onUpdate?.(this.getDividerEndPoints()))};updateAllComponents(){this.updateDashLine(),this.updateSolidLine(),this.updateEndPoints(),this.setupDashLineHitArea()}updateDashLine(){const i=this.endPoints;i.length<2||!this.dashLine||this.dashLine.updatePoints(i[0],i[1])}updateSolidLine(){if(!this.solidLine||!this.solidLinePoints)return;const{solidLineWidth:i,lineColor:t}=this.dividerConfig,e=c().getApp().toFixedSize(i);this.solidLine.clear(),this.solidLine.setStrokeStyle({color:t.toString(),width:e}).moveTo(this.solidLinePoints[0].x,this.solidLinePoints[0].y).lineTo(this.solidLinePoints[1].x,this.solidLinePoints[1].y).stroke()}updateEndPoints(){const i=this.endPoints;this.startEndPoint&&this.startEndPoint.updatePosition(i[0]),this.endEndPoint&&this.endEndPoint.updatePosition(i[1])}registerScaleListener(){const{emitter:i}=c();i.on("antiScale",this.throttledHandleScaleChange)}handleScaleChange=()=>{this.startEndPoint?.redraw(),this.endEndPoint?.redraw(),this.updateSolidLine(),this.setupDashLineHitArea()};getDividerEndPoints(){return[...this.endPoints]}getEffectiveDividerPoints(){return this.solidLinePoints?[...this.solidLinePoints]:null}calculateAndCreateSolidLine(){if(this.clearSolidLine(),!this.roomId)return;if(!this.getRoomGraphics())return;const i=this.calculateLineRoomIntersection();i&&i.length>=2&&(this.solidLinePoints=[i[0],i[i.length-1]],this.createSolidLine())}getRoomGraphics(){const i=c().mapManager.roomFill;return i&&this.roomId&&i.getRoomGraphicsMap().get(this.roomId)||null}calculateLineRoomIntersection(){const i=this.endPoints;if(i.length<2)return null;if(!this.roomId)return null;const[t,e]=i,n=this.isPointInRoomFill(t),s=this.isPointInRoomFill(e);if(n||s)return null;const a=o(t,e),h=[];for(const i of a)this.isPointInRoomFill(i)&&h.push(i);if(0===h.length)return null;const l=h[0],g=h[h.length-1];return r(l,g)<3?null:d(l,g,.5)}isPointInRoomFill(i){if(!this.roomId)return!1;const t=c().getApp().mapState;if(!t)return!1;const e={x:i.x+t.origin.x,y:i.y+t.origin.y};return this.isRasterData()?this.isPointInRasterRoomFill(e):this.isPointInStructuredRoomFill(e)}isPointInRasterRoomFill(i){i.x-=.5,i.y-=.5;const t=c(),e=t.getApp().mapState,n=t.mapManager.roomFill;if(!e||!n)return!1;const s=n.getRasterRoomData(this.roomId);if(!s)return!1;const o=n.getMapWidth();if(0===o)return!1;const r=Math.round(i.y)*o+Math.round(i.x);for(let i=0;i<s.pixelIndices.length;i++)if(s.pixelIndices[i]===r)return!0;return!1}isPointInStructuredRoomFill(i){const t={x:Math.round(i.x),y:Math.round(i.y)},e=c(),n=e.getApp().mapState,s=e.mapManager.getRoomById(this.roomId);return!!(n&&s&&s.outlinePoints)&&a(t,s.outlinePoints,!0)}isRasterData(){const i=c().mapManager.getRoomById(this.roomId);return!i||!i.outlinePoints||0===i.outlinePoints.length}isDividerCompletelyOutOfRoom(){if(!this.roomGeometry)return!1;const{boundingBox:i}=this.roomGeometry,t=this.endPoints;if(t.length<2)return!1;const e=c().getApp().mapState;if(!e)return!1;const n={x:t[0].x+e.origin.x,y:t[0].y+e.origin.y},s={x:t[1].x+e.origin.x,y:t[1].y+e.origin.y};return!h(n,s,i.x,i.y,i.width,i.height)}checkAndResetIfOutOfRoom(){const i=c(),{resetDividerWhenOutOfRoom:t}=i.dividerConfig;t&&this.isDividerCompletelyOutOfRoom()&&this.resetToDefaultState()}resetToDefaultState(){this.endPoints=this.createDefaultdividerPoints(),this.calculateAndCreateSolidLine(),this.updateComponents(),this.dividerEvents.onUpdate?.(this.endPoints)}updateComponents(){const i=this.endPoints;i.length>=2&&(this.dashLine.updatePoints(i[0],i[1]),this.startEndPoint.position.set(i[0].x,i[0].y),this.endEndPoint.position.set(i[1].x,i[1].y),this.setupDashLineInteraction())}createSolidLine(){if(!this.solidLinePoints)return;const{solidLineWidth:i,lineColor:t}=this.dividerConfig,n=c();this.solidLine=new e,this.solidLine.eventMode="none";const s=n.getApp().toFixedSize(i);this.solidLine.setStrokeStyle({color:t.toString(),width:s}).moveTo(this.solidLinePoints[0].x,this.solidLinePoints[0].y).lineTo(this.solidLinePoints[1].x,this.solidLinePoints[1].y).stroke(),this.addChildAt(this.solidLine,0)}clearSolidLine(){this.solidLine&&(this.removeChild(this.solidLine),this.solidLine.destroy(),this.solidLine=null),this.solidLinePoints=null}updatedividerPoints(i){this.endPoints=this.validateDividerPoints(i),this.updateAllComponents(),this.calculateAndCreateSolidLine()}destroy(){c().emitter.off("antiScale",this.throttledHandleScaleChange),this.cleanupDragEventListeners(),this.isDragging&&(this.isDragging=!1,this.dragStartPosition=null,this.initialDividerPoints=[]),this.dashLine&&this.dashLine.off("pointerdown",this.handleDashLinePointerDown),this.clearSolidLine(),this.dashLine?.destroy(),this.startEndPoint?.destroy(),this.endEndPoint?.destroy(),super.destroy()}}export{P as Divider};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Zone as e}from"../Base/Zone.js";import{useAppService as o}from"../../application/AppService.js";class n extends e{constructor(e){const n=o();super({zoneData:e.zoneData,zoneType:"forbiddenMopZone",events:{onRemove:e=>{n.events?.onRemoveForbiddenMopZone?.(e)},onUpdate:e=>{n.events?.onUpdateForbiddenMopZone?.(e)},onClick:e=>{n.events?.onClickForbiddenMopZone?.(e)}}})}static create(e){return new n({zoneData:e})}}export{n as ForbiddenMopZone};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Zone as e}from"../Base/Zone.js";import{useAppService as o}from"../../application/AppService.js";class n extends e{constructor(e){const n=o();super({zoneData:e.zoneData,zoneType:"forbiddenSweepZone",events:{onRemove:e=>{n.events?.onRemoveForbiddenSweepZone?.(e)},onUpdate:e=>{n.events?.onUpdateForbiddenSweepZone?.(e)},onClick:e=>{n.events?.onClickForbiddenSweepZone?.(e)}}})}static create(e){return new n({zoneData:e})}}export{n as ForbiddenSweepZone};
|