@ray-js/robot-map-sdk 0.0.3-beta-3 → 0.0.3-beta-5
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.js +1 -0
- package/dist/index.rjs.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-docs/404.html +2 -2
- package/dist-docs/assets/{app.BjqhSYbb.js → app.DRu3YfJm.js} +1 -1
- package/dist-docs/assets/chunks/@localSearchIndexroot.DYDlqEvf.js +1 -0
- package/dist-docs/assets/chunks/{VPLocalSearchBox.BzWMSFd6.js → VPLocalSearchBox.rCdV2UMG.js} +1 -1
- package/dist-docs/assets/chunks/{theme.DDGgl7pm.js → theme.CKuAZ0Ki.js} +2 -2
- package/dist-docs/assets/{guide_getting-started.md.GyXzwIxc.js → guide_getting-started.md.Bn2rTf61.js} +1 -1
- package/dist-docs/guide/advanced-usage.html +3 -3
- package/dist-docs/guide/concepts.html +3 -3
- package/dist-docs/guide/getting-started.html +5 -5
- package/dist-docs/hashmap.json +1 -1
- package/dist-docs/index.html +3 -3
- package/dist-docs/reference/callbacks.html +3 -3
- package/dist-docs/reference/config.html +3 -3
- package/dist-docs/reference/data.html +3 -3
- package/dist-docs/reference/methods.html +3 -3
- package/dist-docs/reference/runtime.html +3 -3
- package/dist-docs/reference/types.html +3 -3
- package/dist-docs/reference/utils.html +3 -3
- package/package.json +20 -5
- package/dist/index.cjs.js +0 -1
- package/dist/index.es.js +0 -1
- package/dist-docs/assets/chunks/@localSearchIndexroot.Daqgr44U.js +0 -1
- /package/dist-docs/assets/{guide_getting-started.md.GyXzwIxc.lean.js → guide_getting-started.md.Bn2rTf61.lean.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Container as t}from"pixi.js";import{ControlFill as i}from"../Base/ControlFill.js";import{Border as e}from"../Base/Border.js";import{FixedSizeText as s}from"../Base/FixedSizeText.js";import{ClickHandler as o}from"../../mixins/ClickHandler.js";import{throttle as n}from"lodash-es";import{useAppService as a}from"../../application/AppService.js";import{EnhancedSprite as r}from"../Base/EnhancedSprite.js";class l extends t{spotData;spotConfig;controlsConfig;spotEvents;controlFill;spotBorder;centerIcon;sizeText;clickHandler=null;initialSpotPoint=null;throttledUpdateScale;constructor(t){super();const{spotData:i,events:e={}}=t,s=a();this.spotData=i,this.spotEvents=e,this.controlsConfig=s.controlsConfig,this.spotConfig=s.controlsConfig.spot,this.throttledUpdateScale=n(this.updateScale.bind(this),30,{leading:!0,trailing:!0}),this.initializeComponents(),this.updateEditState(),this.setupClickHandler(),this.registerScaleListener()}registerScaleListener(){a().emitter.on("antiScale",this.throttledUpdateScale)}updateScale(){this.isEditingEnabled()&&this.updateSizeTextPosition()}isEditingEnabled(){return a().runtimeSnapshot.editingSpotIds.includes(this.spotData.id)}calculateRectanglePoints(){const t=a(),{point:i}=this.spotData,{size:e}=this.spotConfig,s=t.metersToPixels(e)/2;return[{x:i.x-s,y:i.y-s},{x:i.x+s,y:i.y-s},{x:i.x+s,y:i.y+s},{x:i.x-s,y:i.y+s}]}initializeComponents(){const t=this.calculateRectanglePoints();this.controlFill=this.createControlFill(t),this.addChild(this.controlFill),this.spotBorder=this.createBorder(t),this.addChild(this.spotBorder),this.centerIcon=this.createCenterIcon(),this.addChild(this.centerIcon),this.sizeText=this.createSizeText(),this.addChild(this.sizeText),this.drawSpot()}createControlFill(t){const e=this.isEditingEnabled();return new i({points:t,fillColor:this.spotConfig.fillColor,enableInteraction:e,onDragStart:this.handleDragStart,onDragMove:this.handleDragMove,onDragEnd:this.handleDragEnd})}createBorder(t){const i=this.isEditingEnabled()?this.spotConfig.editing:this.spotConfig.normal;return new e({points:t,closePath:!0,style:{color:this.spotConfig.strokeColor,width:this.spotConfig.strokeWidth,isDashed:i.isDashed,dashArray:i.dashArray}})}createCenterIcon(){const t=new r;return this.loadIconTexture(t),t.position.set(this.spotData.point.x,this.spotData.point.y),t.eventMode="none",t.visible=!1,t}async loadIconTexture(t){const{iconSize:i}=this.spotConfig;await t.loadTextureAndSetSize("spotIcon",{width:i,height:i,sizeFixed:!1}),t.visible=this.isEditingEnabled()}createSizeText(){const t=this.calculateSpotSizeText(),i=new s({text:t,style:{fontSize:this.controlsConfig.textFontSize,fontFamily:this.controlsConfig.textFontFamily,fontWeight:this.controlsConfig.textFontWeight,fill:this.spotConfig.textColor,align:"center"}});i.anchor.set(.5);const e=this.calculateSizeTextPosition();return i.position.set(e.x,e.y),i.eventMode="none",i}calculateSpotSizeText(){const{size:t}=this.spotConfig;return`${t.toFixed(1)}${this.controlsConfig.unitLabel}*${t.toFixed(1)}${this.controlsConfig.unitLabel}`}calculateSizeTextPosition(){const t=a(),i=this.calculateRectanglePoints();if(i.length<4)return{x:0,y:0};const[e,s,o,n]=i,{textPosition:r,textOffset:l}=this.spotConfig,h=t.getApp().toFixedSize(l);let c,d;switch(r){case"top":default:c={x:(e.x+s.x)/2,y:(e.y+s.y)/2},d={x:c.x,y:c.y+h};break;case"right":c={x:(s.x+o.x)/2,y:(s.y+o.y)/2},d={x:c.x+h,y:c.y};break;case"bottom":c={x:(n.x+o.x)/2,y:(n.y+o.y)/2},d={x:c.x,y:c.y+h};break;case"left":c={x:(e.x+n.x)/2,y:(e.y+n.y)/2},d={x:c.x-h,y:c.y}}return d}handleDragStart=()=>{const t=a();this.isEditingEnabled()&&(this.initialSpotPoint={...this.spotData.point},t.getApp().requestRender("spot-drag",!0))};handleDragMove=t=>{if(!this.isEditingEnabled()||!this.initialSpotPoint)return;const i=this.parent.toLocal(t.global),e=this.controlFill.getDragStartPosition();if(!e)return;const s=i.x-e.x,o=i.y-e.y;this.applyTranslation(s,o)};handleDragEnd=()=>{const t=a();this.initialSpotPoint=null,t.getApp().stopRender("spot-drag"),this.spotEvents.onUpdate?.(this.getSpotData())};applyTranslation(t,i){this.initialSpotPoint&&(this.spotData.point={x:this.initialSpotPoint.x+t,y:this.initialSpotPoint.y+i},this.drawSpot())}setupClickHandler(){this.clickHandler=new o(this,{onClick:()=>{this.isEditingEnabled()||this.spotEvents?.onClick?.(this.getSpotData())},stopPropagation:!1})}drawSpot(){const t=this.calculateRectanglePoints();this.controlFill.updatePoints(t),this.spotBorder.updatePoints(t),this.centerIcon.position.set(this.spotData.point.x,this.spotData.point.y),this.updateSizeText()}updateSizeText(){if(!this.sizeText)return;const t=this.calculateSpotSizeText();this.sizeText.updateText(t),this.updateSizeTextPosition()}updateSizeTextPosition(){if(!this.sizeText)return;const t=this.calculateSizeTextPosition();this.sizeText.position.set(t.x,t.y)}updateEditState(){const t=this.isEditingEnabled();if(this.sizeText&&(this.sizeText.visible=t),this.centerIcon&&(this.centerIcon.visible=t),this.controlFill&&this.controlFill.setInteractionEnabled(t),this.spotBorder){const i=t?this.spotConfig.editing:this.spotConfig.normal;this.spotBorder.updateStyle({isDashed:i.isDashed,dashArray:i.dashArray})}this.zIndex=t?1e3:0}updateSpotData(t){this.spotData={...t},this.drawSpot(),this.updateEditState()}getSpotData(){return{...this.spotData}}destroy(){a().emitter.off("antiScale",this.throttledUpdateScale),this.clickHandler?.destroy(),this.clickHandler=null,this.controlFill?.destroy(),this.spotBorder?.destroy(),this.centerIcon?.destroy(),this.sizeText?.destroy(),super.destroy()}static create(t){const i=a();return new l({spotData:t,events:{onUpdate:t=>{i.events?.onUpdateSpot?.(t)},onClick:t=>{i.events?.onClickSpot?.(t)}}})}}export{l as Spot};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Container as t,Graphics as i,Polygon as e}from"pixi.js";import{getDistance as n,normalizeVector as l,createVector as o,calculateLineMidpointOffset as s,calculateUprightLineAngle as a,calculateLineSegmentOutline as r,calculateCornerExtension as h,calculateLineSegmentHitArea as d}from"../../utils/algorithm.js";import{throttle as c}from"lodash-es";import{ClickHandler as u}from"../../mixins/ClickHandler.js";import{useAppService as g}from"../../application/AppService.js";import{DashLine as p}from"../Base/DashLine.js";import{FixedSizeText as w}from"../Base/FixedSizeText.js";import{Border as C}from"../Base/Border.js";import{RemoveControlButton as f}from"../Base/RemoveControlButton.js";import{ScaleControlButton as L}from"../Base/ScaleControlButton.js";import{MoveControlButton as v}from"../Base/MoveControlButton.js";class m extends t{static BUTTON_INDICES={REMOVE:0,SCALE:2,MOVE:3};wallData;wallConfig;controlsConfig;wallEvents;wallLine;outlineBorder;moveLine;lengthText;controlButtons;removeButton=null;scaleButton=null;moveButton=null;initialWallPoints=[];isDragging=!1;dragStartPosition=null;throttledUpdateOutline;throttledHandleScaleChange;wallLineClickHandler=null;constructor(t){super();const{wallData:i,events:e={}}=t;this.wallEvents=e;const n=g();this.wallConfig=n.controlsConfig.virtualWall,this.controlsConfig=n.controlsConfig,this.wallData={...i,points:this.validateAndCorrectWallLength(i.points)},this.throttledHandleScaleChange=c(this.handleScaleChange.bind(this),30,{leading:!0,trailing:!0}),this.throttledUpdateOutline=c(this.updateOutlineForScale.bind(this),30,{leading:!0,trailing:!0}),this.initializeComponents(),this.updateEditState(),this.registerScaleListener(),this.setupDragEventListeners()}validateAndCorrectWallLength(t){const i=g();if(t.length<2)return t;const[e,s]=t,a=i.metersToPixels(this.wallConfig.minWidth),r=n(e,s);if(r>=a)return t;if(0===r)return[e,{x:e.x+a,y:e.y}];const h=l(o(e,s));return[e,{x:e.x+h.x*a,y:e.y+h.y*a}]}isEditingEnabled(){return g().runtimeSnapshot.editingVirtualWallIds.includes(this.wallData.id)}updateOutlineForScale(){this.isEditingEnabled()&&(this.updateOutlineComponents(),this.updateControlButtonsPosition(),this.updateLengthTextPosition())}initializeComponents(){this.outlineBorder=this.createOutlineBorder(),this.addChild(this.outlineBorder),this.createWallLine(!1),this.addChild(this.wallLine),this.lengthText=this.createLengthText(),this.addChild(this.lengthText),this.moveLine=this.createMoveLine(),this.addChild(this.moveLine),this.controlButtons=new t,this.controlButtons.visible=this.isEditingEnabled(),this.addChild(this.controlButtons),this.createControlButtons()}createWallLine(t=!0){const{points:i}=this.wallData;if(i.length<2)return;const{lineWidth:e,lineColor:n,editing:l,normal:o}=this.wallConfig,s=this.isEditingEnabled()?l:o;s.isDashed?this.wallLine=new p({start:i[0],end:i[1],style:{color:n.toString(),width:e,dashArray:s.dashArray}}):this.wallLine=this.createSolidLine(i[0],i[1],e,n.toString()),t&&this.setupWallLineInteraction()}createLengthText(){const t=this.calculateWallLengthInMeters(),i=this.formatLengthText(t),e=new w({text:i,style:{fontSize:this.controlsConfig.textFontSize,fontFamily:this.controlsConfig.textFontFamily,fontWeight:this.controlsConfig.textFontWeight,fill:this.wallConfig.textColor,align:"center"}});e.anchor.set(.5);const n=this.calculateTextPosition();e.position.set(n.x,n.y);const l=this.calculateTextRotation();return e.rotation=l,e.eventMode="none",e}calculateWallLengthInMeters(){const t=g(),{points:i}=this.wallData;if(i.length<2)return 0;const e=n(i[0],i[1]);return t.pixelsToMeters(e)}formatLengthText(t){return`${t.toFixed(1)}${this.controlsConfig.unitLabel}`}calculateTextPosition(){const t=g(),{points:i}=this.wallData;if(i.length<2)return{x:0,y:0};const[e,n]=i,l=t.getApp().toFixedSize(this.wallConfig.textOffset);return s(e,n,l)}calculateTextRotation(){const{points:t}=this.wallData;if(t.length<2)return 0;const[i,e]=t;return a(i,e)}getOutlineStyle(){return{color:this.wallConfig.outlineStrokeColor,width:this.wallConfig.outlineStrokeWidth,isDashed:this.wallConfig.outlineDashed,dashArray:this.wallConfig.outlineDashArray,fillColor:this.wallConfig.outlineFillColor}}createOutlineBorder(){const t=this.calculateOutlinePoints();return new C({points:t,closePath:!0,style:this.getOutlineStyle()})}createMoveLine(){const t=this.calculateOutlinePoints(),i=this.calculateMoveLinePoints(t);return new C({points:i,closePath:!1,style:this.getOutlineStyle()})}calculateOutlinePoints(t){const i=g(),e=t||this.wallData.points;if(e.length<2)return e;const n=i.getApp().toFixedSize(this.wallConfig.outlineOffset),l=r(e[0],e[1],n);return[l[3],l[2],l[1],l[0]]}calculateMoveLinePoints(t){if(t.length<4)return[];const{MOVE:i}=m.BUTTON_INDICES;return[t[i],this.calculateMoveButtonPosition()]}calculateMoveButtonPosition(){const t=g(),{moveButtonOffset:i}=this.controlsConfig,e=this.calculateOutlinePoints();if(e.length<4)return{x:0,y:0};const{MOVE:n}=m.BUTTON_INDICES,l=e[n],o=e[(n+3)%4],s=e[(n+1)%4],a=t.getApp().toFixedSize(i);return h(l,s,o,a)}createControlButtons(){const t=this.calculateOutlinePoints();if(t.length<4)return;const{REMOVE:i,SCALE:e}=m.BUTTON_INDICES;this.removeButton=new f({iconAlias:"deleteIcon",backgroundColor:this.wallConfig.iconWrapperFillColor,onClick:this.handleRemove}),this.removeButton.position.set(t[i].x,t[i].y),this.scaleButton=new L({iconAlias:"scaleIcon",backgroundColor:this.wallConfig.iconWrapperFillColor,getTargetPoints:()=>this.calculateOutlinePoints(),getButtonIndex:()=>e,onScaleStart:this.handleScaleStart,onScaleMove:this.handleScaleMove,onScaleEnd:this.handleScaleEnd}),this.scaleButton.position.set(t[e].x,t[e].y);const n=this.calculateMoveButtonPosition();this.moveButton=new v({iconAlias:"moveIcon",backgroundColor:this.wallConfig.iconWrapperFillColor,onMoveStart:this.handleMoveStart,onMoveMove:this.handleMove,onMoveEnd:this.handleMoveEnd}),this.moveButton.position.set(n.x,n.y),this.controlButtons.addChild(this.removeButton),this.controlButtons.addChild(this.scaleButton),this.controlButtons.addChild(this.moveButton)}handleRemove=()=>{this.wallEvents.onRemove?.(this.wallData.id)};initializeOperation=()=>{this.initialWallPoints=this.wallData.points.map(t=>({...t}))};finalizeOperation=()=>{this.initialWallPoints=[],this.wallEvents.onUpdate?.(this.getWallData())};handleScaleStart=()=>{const t=g();this.initializeOperation(),t.getApp().requestRender("virtualwall-scale",!0)};handleScaleMove=t=>{0!==this.initialWallPoints.length&&this.applyScaleAndRotation(t)};handleScaleEnd=()=>{const t=g();this.finalizeOperation(),t.getApp().stopRender("virtualwall-scale")};handleMoveStart=()=>{const t=g();this.initializeOperation(),t.getApp().requestRender("virtualwall-move",!0)};handleMove=t=>{if(0===this.initialWallPoints.length)return;const i=this.parent.toLocal(t.global),e=this.getDragStartPosition()||this.moveButton?.getDragStartPosition();if(!e)return;const n=i.x-e.x,l=i.y-e.y;this.applyTranslation(n,l)};handleMoveEnd=()=>{const t=g();this.finalizeOperation(),t.getApp().stopRender("virtualwall-move")};applyScaleAndRotation(t){const i=g();if(this.initialWallPoints.length<2)return;const[e,s]=this.initialWallPoints,a=e,r=this.calculateOutlinePoints(this.initialWallPoints);if(r.length<4)return;const h=r[m.BUTTON_INDICES.SCALE],d=o(s,h),c={x:t.x-d.x,y:t.y-d.y},u=o(a,c),p=n(a,c),w=i.metersToPixels(this.wallConfig.minWidth);let C;if(p<w)if(0===p)C={x:a.x+w,y:a.y};else{const t=l(u);C={x:a.x+t.x*w,y:a.y+t.y*w}}else C=c;this.wallData.points=[a,C],this.updateAllComponents(),this.updateControlButtonsPosition()}applyTranslation(t,i){this.wallData.points=this.initialWallPoints.map(e=>({x:e.x+t,y:e.y+i})),this.updateAllComponents(),this.updateControlButtonsPosition()}updateAllComponents(){this.updateWallLine(),this.updateLengthText(),this.updateOutlineComponents()}updateWallLine(){const{points:t}=this.wallData;t.length<2||(this.wallLine instanceof p?this.wallLine.updatePoints(t[0],t[1]):this.redrawSolidLine(),this.setupWallLineHitArea())}updateLengthText(){if(!this.lengthText)return;const t=this.calculateWallLengthInMeters(),i=this.formatLengthText(t);this.lengthText.updateText(i),this.updateLengthTextPosition()}updateLengthTextPosition(){if(!this.lengthText)return;const t=this.calculateTextPosition();this.lengthText.position.set(t.x,t.y);const i=this.calculateTextRotation();this.lengthText.rotation=i}updateOutlineComponents(){const t=this.calculateOutlinePoints();this.outlineBorder.updatePoints(t);const i=this.calculateMoveLinePoints(t);this.moveLine.updatePoints(i)}updateControlButtonsPosition(){if(!this.removeButton||!this.scaleButton||!this.moveButton)return;const t=this.calculateOutlinePoints();if(t.length<4)return;const{REMOVE:i,SCALE:e}=m.BUTTON_INDICES,n=this.calculateMoveButtonPosition();this.removeButton.position.set(t[i].x,t[i].y),this.scaleButton.position.set(t[e].x,t[e].y),this.moveButton.position.set(n.x,n.y)}updateEditState(){const t=this.isEditingEnabled();this.controlButtons.visible=t,this.outlineBorder.visible=t,this.moveLine.visible=t,this.lengthText&&(this.lengthText.visible=t),t&&(this.updateOutlineComponents(),this.updateControlButtonsPosition(),this.updateLengthTextPosition()),this.updateWallLineStyle(),this.setupWallLineInteraction(),this.zIndex=t?1e3:0}createSolidLine(t,e,n,l){const o=g(),s=new i;s.eventMode="static";const a=o.getApp().toFixedSize(n);return s.moveTo(t.x,t.y),s.lineTo(e.x,e.y),s.stroke({color:l,width:a}),s}updateWallLineStyle(){const t=this.isEditingEnabled(),{editing:i,normal:e,lineWidth:n,lineColor:l}=this.wallConfig,o=t?i:e;this.wallLine instanceof p!==o.isDashed?(this.removeChild(this.wallLine),this.wallLine.destroy(),this.createWallLine(!1),this.addChild(this.wallLine)):this.wallLine instanceof p?this.wallLine.updateStyle({color:l.toString(),width:n,dashArray:o.dashArray}):this.redrawSolidLine()}registerScaleListener(){const{emitter:t}=g();t.on("antiScale",this.throttledUpdateOutline),t.on("antiScale",this.throttledHandleScaleChange)}redrawSolidLine(){const t=g();if(!this.wallLine||this.wallLine instanceof p)return;const{points:i}=this.wallData;if(i.length<2)return;const{lineWidth:e,lineColor:n}=this.wallConfig,l=t.getApp().toFixedSize(e);this.wallLine.clear(),this.wallLine.setStrokeStyle({color:n.toString(),width:l}).moveTo(i[0].x,i[0].y).lineTo(i[1].x,i[1].y).stroke()}handleScaleChange=()=>{this.redrawSolidLine(),this.setupWallLineHitArea()};setupWallLineInteraction(){if(!this.wallLine)return;this.setupWallLineHitArea();const t=this.isEditingEnabled();this.wallLineClickHandler?.destroy(),this.wallLineClickHandler=null,this.wallLine.off("pointerdown",this.handleWallLinePointerDown),t?this.wallLine.on("pointerdown",this.handleWallLinePointerDown):this.wallLineClickHandler=new u(this.wallLine,{onClick:()=>{this.wallEvents?.onClick?.(this.getWallData())},stopPropagation:!1})}setupDragEventListeners(){const{emitter:t}=g();t.on("gestureHijackPointerMove",this.handleDragPointerMove),t.on("gestureHijackPointerUp",this.handleDragPointerUp),t.on("gestureHijackCancel",this.handleDragCancel)}cleanupDragEventListeners(){const{emitter:t}=g();t.off("gestureHijackPointerMove",this.handleDragPointerMove),t.off("gestureHijackPointerUp",this.handleDragPointerUp),t.off("gestureHijackCancel",this.handleDragCancel)}handleWallLinePointerDown=t=>{this.isEditingEnabled()&&(t.stopPropagation(),this.startDragging(t))};startDragging(t){const i=g();this.isDragging=!0;const e=this.parent.toLocal(t.global);this.dragStartPosition={x:e.x,y:e.y},this.initializeOperation(),i.getApp().requestRender("virtualwall-drag",!0),g().emitter.emit("gestureHijackStart",t)}handleDragPointerMove=t=>{this.isDragging&&this.dragStartPosition&&this.handleMove(t)};handleDragPointerUp=()=>{const t=g();this.isDragging&&(this.isDragging=!1,this.dragStartPosition=null,t.getApp().stopRender("virtualwall-drag"),this.finalizeOperation())};handleDragCancel=()=>{const t=g();this.isDragging&&(this.isDragging=!1,this.dragStartPosition=null,t.getApp().stopRender("virtualwall-drag"),this.handleMoveEnd())};getDragStartPosition(){return this.dragStartPosition}setupWallLineHitArea(){const t=g();if(!this.wallLine)return;const{points:i}=this.wallData;if(i.length<2)return;const{hitAreaThickness:n}=this.wallConfig,l=t.getApp().toFixedSize(n),o=d(i[0],i[1],l);if(0===o.length)return;const s=new e(o);this.wallLine.hitArea=s}getWallData(){return{...this.wallData}}updateWallData(t){this.wallData={...t,points:this.validateAndCorrectWallLength(t.points)},this.updateAllComponents(),this.updateControlButtonsPosition()}updateEditingState(){this.updateEditState()}destroy(){g().emitter.off("antiScale",this.throttledUpdateOutline),g().emitter.off("antiScale",this.throttledHandleScaleChange),this.cleanupDragEventListeners(),this.isDragging&&(this.isDragging=!1,this.dragStartPosition=null),this.wallLine&&this.wallLine.off("pointerdown",this.handleWallLinePointerDown),this.wallLineClickHandler?.destroy(),this.wallLineClickHandler=null,this.wallLine?.destroy(),this.lengthText?.destroy(),this.outlineBorder?.destroy(),this.moveLine?.destroy(),this.controlButtons?.destroy(),this.removeButton?.destroy(),this.scaleButton?.destroy(),this.moveButton?.destroy(),this.removeButton=null,this.scaleButton=null,this.moveButton=null,super.destroy()}}export{m as VirtualWall};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ClickHandler as t}from"../../mixins/ClickHandler.js";import{EnhancedGifSprite as e}from"../Base/EnhancedGifSprite.js";import{useAppService as i}from"../../application/AppService.js";class a extends e{elementData;clickHandler=null;constructor(t,e){super({source:t}),this.elementData=e}async initialize(){this.setFixedSize(this.elementData.width,this.elementData.height),this.position.set(this.elementData.x,this.elementData.y),void 0!==this.elementData.rotation&&(this.rotation=this.elementData.rotation),void 0!==this.elementData.opacity&&(this.alpha=this.elementData.opacity),this.visible=!0,this.elementData.interactive?this.setupClickHandler():this.eventMode="none"}setupClickHandler(){this.clickHandler&&this.clickHandler.destroy(),this.clickHandler=new t(this,{onClick:()=>this.handleClick(),stopPropagation:!1})}handleClick(){const t=i();t.events?.onClickCustomElement?.(this.getElementData())}getElementData(){return{...this.elementData}}async updateElementData(t){const e=this.elementData;if(this.elementData=t,e.src!==t.src)throw new Error("GIF source change requires recreation of instance");e.width===t.width&&e.height===t.height||this.setFixedSize(t.width,t.height),this.position.set(t.x,t.y),void 0!==t.rotation&&(this.rotation=t.rotation),void 0!==t.opacity&&(this.alpha=t.opacity),t.interactive?this.clickHandler||this.setupClickHandler():(this.clickHandler&&(this.clickHandler.destroy(),this.clickHandler=null),this.eventMode="none")}isSameData(t){return this.elementData.id===t.id&&this.elementData.type===t.type&&this.elementData.src===t.src&&this.elementData.x===t.x&&this.elementData.y===t.y&&this.elementData.width===t.width&&this.elementData.height===t.height&&this.elementData.rotation===t.rotation&&this.elementData.opacity===t.opacity&&this.elementData.interactive===t.interactive}destroy(){this.clickHandler&&(this.clickHandler.destroy(),this.clickHandler=null),super.destroy()}}export{a as CustomGif};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{FixedSizeDOMContainer as e}from"../Base/FixedSizeDOMContainer.js";import{useAppService as t}from"../../application/AppService.js";class i extends e{elementData;domClickHandler=null;resizeObserver=null;constructor(e){const t=document.createElement("div");i.setupDefaultStyles(t,e),t.innerHTML=e.htmlContent,super({element:t}),this.elementData=e}async initialize(){this.alpha=0,this.position.set(this.elementData.x,this.elementData.y),void 0!==this.elementData.rotation&&(this.rotation=this.elementData.rotation),this.elementData.width&&this.elementData.height?(this.setFixedSize(this.elementData.width,this.elementData.height),this.waitForElementInsertion()):this.setupAutoSize(),this.elementData.interactive?this.setupClickHandler():this.eventMode="none"}setupAutoSize(){this.element&&(this.element.style.width="auto",this.element.style.height="auto",this.waitForElementDimensions())}waitForElementInsertion(){if(!this.element)return;const e=()=>{this.element&&(this.element.isConnected?this.showElement():requestAnimationFrame(e))};requestAnimationFrame(e)}waitForElementDimensions(){this.element&&("undefined"!=typeof ResizeObserver?(this.resizeObserver=new ResizeObserver(e=>{const t=e[0];t&&t.contentRect.width>0&&t.contentRect.height>0&&(this.setFixedSize(t.contentRect.width,t.contentRect.height),0===this.alpha&&this.showElement(),this.resizeObserver?.disconnect(),this.resizeObserver=null)}),this.resizeObserver.observe(this.element)):this.pollForElementDimensions())}pollForElementDimensions(){if(!this.element)return;const e=()=>{if(!this.element)return;if(!this.element.isConnected)return void requestAnimationFrame(e);const t=this.element.getBoundingClientRect();t.width>0&&t.height>0?(this.setFixedSize(t.width,t.height),0===this.alpha&&this.showElement()):requestAnimationFrame(e)};requestAnimationFrame(e)}showElement(){this.alpha=this.elementData.opacity??1,this.element.style.pointerEvents=this.elementData.interactive?"auto":"none",this.interactive=this.elementData.interactive??!1,this.elementData.interactive&&this.element&&(this.element.style.setProperty("-webkit-tap-highlight-color","transparent"),this.element.style.setProperty("-webkit-touch-callout","none"))}setupClickHandler(){this.element&&(this.domClickHandler=e=>{e.preventDefault(),e.stopPropagation(),this.handleClick()},this.element.addEventListener("click",this.domClickHandler))}handleClick(){const e=t();e.events?.onClickCustomElement?.(this.getElementData())}getElementData(){return{...this.elementData}}async updateElementData(e){const t=this.elementData;this.elementData=e,t.htmlContent!==e.htmlContent&&this.element&&(this.element.innerHTML=e.htmlContent,e.width&&e.height||this.waitForElementDimensions()),t.width===e.width&&t.height===e.height||(e.width&&e.height?(this.setFixedSize(e.width,e.height),this.element&&(this.element.style.width=`${e.width}px`,this.element.style.height=`${e.height}px`)):this.setupAutoSize()),this.position.set(e.x,e.y),this.rotation=e.rotation??0,this.alpha=e.opacity??1,e.interactive?this.domClickHandler||this.setupClickHandler():(this.eventMode="none",this.domClickHandler&&this.element&&(this.element.removeEventListener("click",this.domClickHandler),this.domClickHandler=null))}isSameData(e){return this.elementData.id===e.id&&this.elementData.type===e.type&&this.elementData.htmlContent===e.htmlContent&&this.elementData.x===e.x&&this.elementData.y===e.y&&this.elementData.width===e.width&&this.elementData.height===e.height&&this.elementData.rotation===e.rotation&&this.elementData.opacity===e.opacity&&this.elementData.interactive===e.interactive}static setupDefaultStyles(e,t){const i={position:"relative",boxSizing:"border-box",webkitFontSmoothing:"antialiased",textRendering:"optimizeLegibility",background:"transparent",userSelect:"auto",webkitUserSelect:"auto",transformOrigin:"50% 50%"};t.width&&t.height?(i.width=`${t.width}px`,i.height=`${t.height}px`,i.overflow="hidden"):(i.width=t.width?`${t.width}px`:"auto",i.height=t.height?`${t.height}px`:"auto",i.overflow="visible"),Object.assign(e.style,i),e.style.setProperty("-webkit-tap-highlight-color","transparent"),e.style.setProperty("-webkit-touch-callout","none")}destroy(){this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null),this.domClickHandler&&this.element&&(this.element.removeEventListener("click",this.domClickHandler),this.domClickHandler=null),super.destroy()}}export{i as CustomHTML};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ClickHandler as t}from"../../mixins/ClickHandler.js";import{EnhancedSprite as e}from"../Base/EnhancedSprite.js";import{useAppService as i}from"../../application/AppService.js";class a extends e{elementData;clickHandler=null;constructor(t){super(),this.elementData=t}async initialize(){await this.loadTextureAndSetSize(this.elementData.src,{width:this.elementData.width,height:this.elementData.height}),this.position.set(this.elementData.x,this.elementData.y),void 0!==this.elementData.rotation&&(this.rotation=this.elementData.rotation),void 0!==this.elementData.opacity&&(this.alpha=this.elementData.opacity),this.visible=!0,this.elementData.interactive?this.setupClickHandler():this.eventMode="none"}setupClickHandler(){this.clickHandler&&this.clickHandler.destroy(),this.clickHandler=new t(this,{onClick:()=>this.handleClick(),stopPropagation:!1})}handleClick(){const t=i();t.events?.onClickCustomElement?.(this.getElementData())}getElementData(){return{...this.elementData}}async updateElementData(t){const e=this.elementData;this.elementData=t,e.src!==t.src&&await this.loadTextureAndSetSize(t.src,{width:t.width,height:t.height}),e.width===t.width&&e.height===t.height||this.setFixedSize(t.width,t.height),this.position.set(t.x,t.y),void 0!==t.rotation&&(this.rotation=t.rotation),void 0!==t.opacity&&(this.alpha=t.opacity),t.interactive?this.clickHandler||this.setupClickHandler():(this.clickHandler&&(this.clickHandler.destroy(),this.clickHandler=null),this.eventMode="none")}isSameData(t){return this.elementData.id===t.id&&this.elementData.type===t.type&&this.elementData.src===t.src&&this.elementData.x===t.x&&this.elementData.y===t.y&&this.elementData.width===t.width&&this.elementData.height===t.height&&this.elementData.rotation===t.rotation&&this.elementData.opacity===t.opacity&&this.elementData.interactive===t.interactive}destroy(){this.clickHandler&&(this.clickHandler.destroy(),this.clickHandler=null),super.destroy()}}export{a as CustomImage};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ClickHandler as t}from"../../mixins/ClickHandler.js";import{EnhancedSprite as i}from"../Base/EnhancedSprite.js";import{useAppService as e}from"../../application/AppService.js";class s extends i{objectData;clickHandler=null;constructor(t){super(),this.objectData=t}async initializeSprite(){const t=e().detectedObjectConfig,i=this.objectData.width||t.width,s=this.objectData.height||t.height;await this.loadTextureAndSetSize(this.objectData.src,{width:i,height:s}),this.position.set(this.objectData.x,this.objectData.y),this.visible=!0,t.interactive?this.setupClickHandler():this.eventMode="none"}setupClickHandler(){this.clickHandler&&this.clickHandler.destroy(),this.clickHandler=new t(this,{onClick:()=>this.handleClick(),stopPropagation:!1})}handleClick(){const t=e();t.events?.onClickDetectedObject?.(this.getObjectData())}getObjectData(){return{...this.objectData}}async updateObjectData(t){const i=e(),s=this.objectData;this.objectData=t;const a=i.detectedObjectConfig;if(s.src!==t.src){const i=t.width||a.width,e=t.height||a.height;await this.loadTextureAndSetSize(t.src,{width:i,height:e})}if(s.width!==t.width||s.height!==t.height){const i=t.width||a.width,e=t.height||a.height;this.setFixedSize(i,e)}this.position.set(t.x,t.y),a.interactive?this.clickHandler||this.setupClickHandler():this.clickHandler&&(this.clickHandler.destroy(),this.clickHandler=null)}isSameData(t){return this.objectData.id===t.id&&this.objectData.src===t.src&&this.objectData.x===t.x&&this.objectData.y===t.y&&this.objectData.width===t.width&&this.objectData.height===t.height}destroy(){this.clickHandler&&(this.clickHandler.destroy(),this.clickHandler=null),super.destroy()}}export{s as DetectedObject};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Container as n,Color as o,Graphics as r,Geometry as i,Shader as l,GlProgram as t,Mesh as a}from"pixi.js";import{LAYER_HEATMAP as e}from"../../application/AppContainer.js";import{useAppService as s}from"../../application/AppService.js";class c extends n{colorGradients=[];cellSize=2;constructor(){super();const n=s();n.appContainer.addToLayer(e,this);const r=n.heatMapConfig;this.colorGradients=r.colorGradients.map(n=>new o(n).toArray().slice(0,3).join(",")),this.cellSize=r.cellSize}draw(n,o=!0,r=.8){this.removeChildren();const i=o?this.gradientDrawing(n):this.gridDrawing(n);this.croppingHeatmap(i),i.alpha=r,this.addChild(i),this.cacheAsTexture(!0)}croppingHeatmap(n){const o=s().mapManager.roomFill.children.filter(n=>n instanceof r),i=new r;for(const n of o)i.context.instructions.push(...n.context.instructions);i.context.dirty=!0,n.setMask({mask:i}),this.addChild(i)}gridDrawing(n){const o=[],r=[],e=n.length,s=n[0].length;for(let i=0;i<e;i++)for(let l=0;l<s;l++){const t=n[i][l],a=this.cellSize/2,e=t.x-a,s=t.y-a,c=t.x+a,g=t.y+a;o.push(e,s),r.push(t.signal),o.push(c,s),r.push(t.signal),o.push(c,g),r.push(t.signal),o.push(e,s),r.push(t.signal),o.push(c,g),r.push(t.signal),o.push(e,g),r.push(t.signal)}const c=new i({attributes:{aPosition:new Float32Array(o),aSignal:new Float32Array(r)}}),g=new l({glProgram:new t({vertex:"\n in vec2 aPosition;\n in float aSignal;\n uniform mat3 uProjectionMatrix;\n uniform mat3 uWorldTransformMatrix;\n uniform mat3 uTransformMatrix;\n \n out float vSignal;\n \n void main() {\n mat3 mvp = uProjectionMatrix * uWorldTransformMatrix * uTransformMatrix;\n gl_Position = vec4((mvp * vec3(aPosition, 1.0)).xy, 0.0, 1.0);\n vSignal = aSignal;\n }\n ",fragment:`\n precision mediump float;\n \n in float vSignal;\n \n void main() {\n vec3 color;\n \n if (vSignal > 0.875) {\n color = vec3(${this.colorGradients[0]});\n } else if (vSignal > 0.75) {\n color = vec3(${this.colorGradients[1]});\n } else if (vSignal > 0.625) {\n color = vec3(${this.colorGradients[2]});\n } else if (vSignal > 0.5) {\n color = vec3(${this.colorGradients[3]});\n } else if (vSignal > 0.375) {\n color = vec3(${this.colorGradients[4]});\n } else if (vSignal > 0.25) {\n color = vec3(${this.colorGradients[5]});\n } else if (vSignal > 0.125) {\n color = vec3(${this.colorGradients[6]});\n } else {\n color = vec3(${this.colorGradients[7]});\n }\n gl_FragColor = vec4(color, 1.0);\n }\n `})}),h=new a({geometry:c,shader:g});return h.alpha=.8,h}gradientDrawing(n){const o=[],r=[],e=n.length,s=n[0].length;for(let i=0;i<e;i++)for(let l=0;l<s;l++){const t=n[i][l],a=this.cellSize/2,c=(o,r)=>o<0||o>=e||r<0||r>=s?t.signal:n[o][r].signal,g=(c(i-1,l-1)+c(i-1,l)+c(i,l-1)+t.signal)/4,h=(c(i-1,l)+c(i-1,l+1)+t.signal+c(i,l+1))/4,v=(t.signal+c(i,l+1)+c(i+1,l)+c(i+1,l+1))/4,p=(c(i,l-1)+t.signal+c(i+1,l-1)+c(i+1,l))/4,f=t.x-a,m=t.y-a,u=t.x+a,d=t.y+a;o.push(f,m,u,m,u,d),r.push(g,h,v),o.push(f,m,u,d,f,d),r.push(g,v,p)}const c=new i({attributes:{aPosition:new Float32Array(o),aSignal:new Float32Array(r)}}),g=new l({glProgram:new t({vertex:"\n in vec2 aPosition;\n in float aSignal;\n uniform mat3 uProjectionMatrix;\n uniform mat3 uWorldTransformMatrix;\n uniform mat3 uTransformMatrix;\n \n out float vSignal;\n \n void main() {\n mat3 mvp = uProjectionMatrix * uWorldTransformMatrix * uTransformMatrix;\n gl_Position = vec4((mvp * vec3(aPosition, 1.0)).xy, 0.0, 1.0);\n vSignal = aSignal;\n }\n ",fragment:`\n precision mediump float;\n \n in float vSignal;\n \n // 颜色插值函数\n vec3 interpolateColor(vec3 color1, vec3 color2, float t) {\n return mix(color1, color2, t);\n }\n \n void main() {\n vec3 color;\n float signal = clamp(vSignal, 0.0, 1.0);\n \n vec3 color1 = vec3(${this.colorGradients[7]});\n vec3 color2 = vec3(${this.colorGradients[6]});\n vec3 color3 = vec3(${this.colorGradients[5]});\n vec3 color4 = vec3(${this.colorGradients[4]});\n vec3 color5 = vec3(${this.colorGradients[3]});\n vec3 color6 = vec3(${this.colorGradients[2]});\n vec3 color7 = vec3(${this.colorGradients[1]});\n vec3 color8 = vec3(${this.colorGradients[0]});\n \n if (signal <= 0.125) {\n float t = signal / 0.125;\n color = interpolateColor(color1, color2, t);\n } else if (signal <= 0.25) {\n float t = (signal - 0.125) / 0.125;\n color = interpolateColor(color2, color3, t);\n } else if (signal <= 0.375) {\n float t = (signal - 0.25) / 0.125;\n color = interpolateColor(color3, color4, t);\n } else if (signal <= 0.5) {\n float t = (signal - 0.375) / 0.125;\n color = interpolateColor(color4, color5, t);\n } else if (signal <= 0.625) {\n float t = (signal - 0.5) / 0.125;\n color = interpolateColor(color5, color6, t);\n } else if (signal <= 0.75) {\n float t = (signal - 0.625) / 0.125;\n color = interpolateColor(color6, color7, t);\n } else if (signal <= 0.875) {\n float t = (signal - 0.75) / 0.125;\n color = interpolateColor(color7, color8, t);\n } else {\n color = color8;\n }\n \n gl_FragColor = vec4(color, 1.0);\n }\n `})}),h=new a({geometry:c,shader:g});return h.alpha=.8,h}closeCacheAsTexture(){this.cacheAsTexture(!1)}}export{c as Heatmap};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Container as t,Assets as r,TilingSprite as e,Graphics as a}from"pixi.js";import{LAYER_CARPET as i}from"../../application/AppContainer.js";import{Logger as s}from"../../utils/logger.js";import{useAppService as c}from"../../application/AppService.js";class o extends t{carpetSprite=null;carpetMask=null;constructor(){super({isRenderGroup:!0}),c().appContainer.addToLayer(i,this)}async createCarpetFromRasterData(a,i){const o=c();if(!o.runtimeSnapshot.showCarpet)return;if(this.clearCarpet(),0===a.length)return;const{src:n,opacity:p,scale:h}=o.carpetConfig,l=await r.load(n);if(!l)return void s.warn(`Carpet texture not found: ${n}`);const d=this.createCarpetGraphics(a,i),u=d.getLocalBounds();if(0===u.width||0===u.height)return;const f=new e({texture:l,width:u.width,height:u.height});f.x=u.x,f.y=u.y,f.alpha=p,f.tileScale.set(h);const C=new t;C.addChild(d),f.mask=C,this.addChild(f),this.carpetSprite=f,this.carpetMask=C,o.getApp().renderOnceNextFrame()}createCarpetGraphics(t,r){const e=new a;for(let a=0;a<t.length;a++){const i=t[a],s=i%r,c=Math.floor(i/r);e.rect(s,c,1,1)}return e.fill(16777215),e}clearCarpet(){if(this.carpetSprite){try{this.removeChild(this.carpetSprite),this.carpetSprite.destroy()}catch(t){s.warn("Error destroying carpet sprite:",t)}this.carpetSprite=null}if(this.carpetMask){try{this.carpetMask.destroy()}catch(t){s.warn("Error destroying carpet mask:",t)}this.carpetMask=null}}async createCarpetFromStructuredData(a){const i=c();if(!i.runtimeSnapshot.showCarpet)return;if(this.clearCarpet(),0===a.length)return;const{src:o,opacity:n,scale:p}=i.carpetConfig,h=await r.load(o);if(!h)return void s.warn(`Carpet texture not found: ${o}`);const l=this.createCarpetGraphicsFromStructuredData(a),d=l.getLocalBounds();if(0===d.width||0===d.height)return;const u=new e({texture:h,width:d.width,height:d.height});u.x=d.x,u.y=d.y,u.alpha=n,u.tileScale.set(p);const f=new t;f.addChild(l),u.mask=f,this.addChild(u),this.carpetSprite=u,this.carpetMask=f,i.getApp().renderOnceNextFrame()}createCarpetGraphicsFromStructuredData(t){const r=new a;for(const e of t){const t=e.coordinates;for(let e=0;e<t.length;e+=2){const a=t[e],i=t[e+1];r.rect(a,i,1,1)}}return r.fill(16777215),r}destroy(){this.clearCarpet(),super.destroy()}}export{o as Carpet};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Graphics as t}from"pixi.js";import{LAYER_FREE as e}from"../../application/AppContainer.js";import{useAppService as o}from"../../application/AppService.js";class r extends t{constructor(){super();const t=o();t.appContainer.addToLayer(e,this),t.emitter.on("cacheAsTexture",t=>{this.cacheAsTexture(!1),this.cacheAsTexture({resolution:t})})}draw(t){const e=o();this.clear(),this.setFillStyle({color:e.mapConfig.freeColor});for(const e of t){const t=e.coordinates;for(let e=0;e<t.length;e+=2){const o=t[e],r=t[e+1];this.rect(o,r,1,1)}}this.fill(),this.updateCacheTexture()}}export{r as Free};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Graphics as t}from"pixi.js";import{LAYER_OBSTACLE as o}from"../../application/AppContainer.js";import{RASTER_CHUNK_SIZE as e}from"../../constant/index.js";import{useAppService as s}from"../../application/AppService.js";class r extends t{constructor(){super();const t=s();t.appContainer.addToLayer(o,this),t.emitter.on("cacheAsTexture",t=>{this.cacheAsTexture(!1),this.cacheAsTexture({resolution:t})})}draw(t){const o=s();this.clear(),this.setFillStyle({color:o.mapConfig.obstacleColor});for(const o of t){const t=o.coordinates;for(let o=0;o<t.length;o+=2){const e=t[o],s=t[o+1];this.rect(e,s,1,1)}}this.fill(),this.updateCacheTexture()}drawRaster(t,o){const r=s();if(this.clear(),0!==t.length){this.setFillStyle({color:r.mapConfig.obstacleColor});for(let s=0;s<t.length;s+=e){const i=Math.min(s+e,t.length);for(let e=s;e<i;e++){const s=t[e],r=s%o,i=Math.floor(s/o);this.rect(r,i,1,1)}this.fill(),i<t.length&&this.setFillStyle({color:r.mapConfig.obstacleColor})}this.updateCacheTexture()}}}export{r as Obstacle};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Container as t,Graphics as o,GraphicsContext as e}from"pixi.js";import{RASTER_CHUNK_SIZE as i}from"../../constant/index.js";import{LAYER_ROOM_FILL as s}from"../../application/AppContainer.js";import{ClickHandler as r}from"../../mixins/ClickHandler.js";import{Logger as a}from"../../utils/logger.js";import{useAppService as n}from"../../application/AppService.js";class l extends t{roomGraphicsMap=new Map;roomContextMap=new Map;roomClickHandlerMap=new Map;unsubscribeFns=[];mapWidth=0;rasterRoomDataMap=new Map;constructor(){super({isRenderGroup:!0}),n().appContainer.addToLayer(s,this)}draw(t){const i=n();this.clearRooms();const s=i.roomConfig,{selectRoomIds:a,enableRoomSelection:l}=i.runtimeSnapshot;t.forEach((t,i)=>{const n=t.id>=255,c=new o,h=new e,p=new e;if(n)h.setFillStyle({color:t.color}),p.setFillStyle({color:t.color});else{const t=i%s.colors.active.length,o=i%s.colors.inactive.length,e=s.colors.active[t],r=s.colors.inactive[o];h.setFillStyle({color:e}),p.setFillStyle({color:r})}if(h.poly(t.polyPoints).fill(),p.poly(t.polyPoints).fill(),t.outlinePoints.forEach(t=>{h.rect(t.x,t.y,1,1).fill(),p.rect(t.x,t.y,1,1).fill()}),c.context=n?h:l&&!a.includes(t.id)?p:h,!n){const o=new r(c,{clickThreshold:10,onClick:()=>{this.handleRoomClick(t.id)}});this.roomClickHandlerMap.set(t.id,o)}this.roomGraphicsMap.set(t.id,c),this.roomContextMap.set(t.id,{activeContext:h,inactiveContext:p}),this.addChild(c)})}drawRaster(t){const o=n();if(this.clearRooms(),this.mapWidth=t.width,0===t.sortedRooms.length)return;const{selectRoomIds:e,enableRoomSelection:i}=o.runtimeSnapshot;t.sortedRooms.forEach(t=>{this.drawRasterRoom(t,i,e)})}drawRasterRoom(t,s,a){const{roomId:n,pixelIndices:l,activeColor:c,inactiveColor:h}=t,p=new o,m=new e,d=new e;m.setFillStyle({color:c}),d.setFillStyle({color:h}),this.drawPixelPointsInBatches(m,l,i,this.mapWidth),this.drawPixelPointsInBatches(d,l,i,this.mapWidth);const f="number"==typeof n,C=!s||f&&a.includes(n);if(p.context=s&&f&&!C?d:m,f){const t=new r(p,{clickThreshold:10,onClick:()=>{this.handleRoomClick(n)}});this.roomClickHandlerMap.set(n,t)}this.roomGraphicsMap.set(n,p),this.roomContextMap.set(n,{activeContext:m,inactiveContext:d}),this.rasterRoomDataMap.set(n,t),this.addChild(p)}drawPixelPointsInBatches(t,o,e,i){for(let s=0;s<o.length;s+=e){const r=Math.min(s+e,o.length);for(let e=s;e<r;e++){const s=o[e],r=s%i,a=Math.floor(s/i);t.rect(r,a,1,1)}t.fill()}}handleRoomClick(t){const o=n();o.events?.onClickRoom?.(o.getRoomData(t)??{id:t})}setRoomStateBySelectIds(t){const o=n(),{enableRoomSelection:e}=o.runtimeSnapshot;this.roomGraphicsMap.forEach((o,i)=>{if("number"==typeof i){const s=!e||t.includes(i),r=this.roomContextMap.get(i);r&&(o.context=s?r.activeContext:r.inactiveContext)}})}setRoomState(t,o){const e=this.roomGraphicsMap.get(t),i=this.roomContextMap.get(t);e&&i?"number"==typeof t&&(e.context=o?i.activeContext:i.inactiveContext):a.warn(`Room ${t} not found`)}setAllRoomsState(t){this.roomGraphicsMap.forEach((o,e)=>{"number"==typeof e&&this.setRoomState(e,t)})}getRoomGraphicsMap(){const t=new Map;return this.roomGraphicsMap.forEach((o,e)=>{"number"==typeof e&&t.set(e,o)}),t}getRasterRoomData(t){return this.rasterRoomDataMap.get(t)||null}getMapWidth(){return this.mapWidth}clearRooms(){0===this.children.length&&0===this.roomGraphicsMap.size||(this.removeChildren(),this.roomClickHandlerMap.forEach(t=>{try{t.destroy()}catch(t){a.warn("Error destroying click handler:",t)}}),this.roomClickHandlerMap.clear(),this.roomGraphicsMap.clear(),this.roomContextMap.clear(),this.rasterRoomDataMap.clear())}destroy(){this.unsubscribeFns.forEach(t=>t()),this.unsubscribeFns=[],this.clearRooms(),super.destroy()}}export{l as RoomFill};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Container as t,Graphics as i}from"pixi.js";import{throttle as o}from"lodash-es";import{LAYER_PATH as a}from"../../application/AppContainer.js";import{Logger as s}from"../../utils/logger.js";import{useAppService as e}from"../../application/AppService.js";class h extends t{commonPath;chargePath;transitionsPath;mopPath;pathData=null;lastPointCount=0;lastDrawnPosition=null;isRealTimeDrawing=!1;throttledUpdateLineWidth;throttledHandleRobotPosition;constructor(){super({isRenderGroup:!0});const t=e();t.appContainer.addToLayer(a,this),this.eventMode="none",this.commonPath=new i,this.chargePath=new i,this.transitionsPath=new i,this.mopPath=new i,this.addChild(this.commonPath),this.addChild(this.chargePath),this.addChild(this.transitionsPath),this.addChild(this.mopPath),this.visible=t.runtimeSnapshot.showPath,this.chargePath.visible=!1,this.transitionsPath.visible=!1,this.mopPath.visible=!1,this.throttledUpdateLineWidth=o(this.updateLineWidth.bind(this),50,{leading:!0,trailing:!0}),this.throttledHandleRobotPosition=o(this.handleRobotPositionUpdate.bind(this),0),this.registerEventListeners()}registerEventListeners(){const{emitter:t}=e();t.on("antiScale",this.throttledUpdateLineWidth.bind(this)),t.on("robotPositionUpdate",this.throttledHandleRobotPosition),t.on("robotAnimationComplete",this.handleRobotAnimationComplete.bind(this))}handleRobotAnimationComplete(){this.isRealTimeDrawing&&this.stopRealTimeDrawing()}handleRobotPositionUpdate(t){if(!this.isRealTimeDrawing||!this.lastDrawnPosition)return;let i;switch(t.pathType||"common"){case"common":default:i=this.commonPath;break;case"charge":i=this.chargePath;break;case"transitions":i=this.transitionsPath;break;case"mop":i=this.mopPath}i.moveTo(this.lastDrawnPosition.x,this.lastDrawnPosition.y),i.lineTo(t.x,t.y),i.stroke(),this.lastDrawnPosition={x:t.x,y:t.y}}updateLineWidth(){const t=e();this.pathData&&t.pathConfig.lineWidthFixed&&this.redrawPaths(this.pathData)}redrawPaths(t){const{pathPoints:i}=t;i&&0!==i.length&&(this.commonPath.clear(),this.chargePath.clear(),this.transitionsPath.clear(),this.mopPath.clear(),this.setupPathStyles(),this.drawPathSegments(i),this.commonPath.stroke(),this.chargePath.stroke(),this.transitionsPath.stroke(),this.mopPath.stroke())}setupPathStyles(){const t=e(),i=t.pathConfig,o=o=>i.lineWidthFixed?t.getApp().toFixedSize(o):o;this.commonPath.setStrokeStyle({width:o(i.commonPath.width),color:i.commonPath.color,join:"round",cap:"round"}),this.chargePath.setStrokeStyle({width:o(i.chargePath.width),color:i.chargePath.color,join:"round",cap:"round"}),this.transitionsPath.setStrokeStyle({width:o(i.transitionPath.width),color:i.transitionPath.color,join:"round",cap:"round"}),this.mopPath.setStrokeStyle({width:0,color:0,alpha:0,join:"round",cap:"round"})}drawPathSegments(t){let i=null,o=null;for(let a=0;a<t.length;a++){const s=t[a],e=s.type||"common";let h;switch(e){case"common":default:h=this.commonPath;break;case"charge":h=this.chargePath;break;case"transitions":h=this.transitionsPath;break;case"mop":h=this.mopPath}0===a||e!==i?h.moveTo(s.x,s.y):h===o&&h.lineTo(s.x,s.y),i=e,o=h}}updatePositionByOrigin(t,i){this.position.set(t,i)}drawFull(t){s.debug("[Path] Draw Full Path",t),this.pathData=t,this.redrawPaths(t),this.lastPointCount=t.pathPoints?.length||0}drawIncremental(t){const i=e(),o=this.lastPointCount,a=t.pathPoints?.slice(o)||[];if(a.length>0)if(this.setupPathStyles(),s.debug("[Path] Draw Incremental Path",a),i.robotConfig.speed>0){if(this.isRealTimeDrawing=!0,o>0&&this.pathData?.pathPoints){const t=this.pathData.pathPoints[o-1];this.lastDrawnPosition={x:t.x,y:t.y}}}else this.drawNewPathSegments(a,o,t.pathPoints,this.pathData?.pathPoints);this.pathData=t,this.lastPointCount=t.pathPoints?.length||0}drawNewPathSegments(t,i,o,a){if(!o||0===t.length)return;let s=null;i>0&&(a&&a[i-1]?s=a[i-1]:o[i-1]&&(s=o[i-1]));let e=null,h=null,n=!1;for(let i=0;i<t.length;i++){const o=t[i],a=o.type||"common";let r;switch(a){case"common":default:r=this.commonPath;break;case"charge":r=this.chargePath;break;case"transitions":r=this.transitionsPath;break;case"mop":r=this.mopPath}a!==e||0===i?(h&&n&&h.stroke(),e=a,h=r,n=!0,s&&0===i&&s.type===a?(r.moveTo(s.x,s.y),r.lineTo(o.x,o.y)):r.moveTo(o.x,o.y)):r.lineTo(o.x,o.y)}h&&n&&h.stroke()}stopRealTimeDrawing(){this.isRealTimeDrawing=!1,this.lastDrawnPosition=null}destroy(t){const{emitter:i}=e();i.off("antiScale",this.updateLineWidth.bind(this)),i.off("robotPositionUpdate",this.throttledHandleRobotPosition),i.off("robotAnimationComplete",this.handleRobotAnimationComplete.bind(this)),this.stopRealTimeDrawing(),super.destroy(t)}}export{h as Path};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{EnhancedSprite as i}from"../Base/EnhancedSprite.js";import{useAppService as t}from"../../application/AppService.js";class o extends i{constructor(){super(),this.initializeSprite()}async initializeSprite(){const i=t();await this.loadTextureAndSetSize("robot",i.robotConfig.icon)}async draw({x:i,y:t,rotation:o}){super.draw({x:i,y:t,rotation:o})}}export{o as RobotIcon};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{EnhancedAnimatedSprite as t}from"../Base/EnhancedAnimatedSprite.js";import{subscribeKey as i}from"valtio/vanilla/utils";import{Logger as e}from"../../utils/logger.js";import{Texture as s}from"pixi.js";import{throttle as o}from"lodash-es";import{useAppService as n}from"../../application/AppService.js";class r extends t{unsubscribeFns=[];throttledUpdateOffset;fixedOffsetX=0;fixedOffsetY=0;constructor(t){super(t),this.throttledUpdateOffset=o(this.updateOffset.bind(this),30,{leading:!0,trailing:!0}),this.initializeAnimation()}static async create(){const i=n().robotConfig,o=await t.loadAnimationTextures(i.sleepAnimation.jsonSrc,i.sleepAnimation.framePrefix,i.sleepAnimation.frameCount);0===o.length&&(e.warn("No textures loaded for sleep animation"),o.push(s.EMPTY));const a=new r(o);return a.setupAnimation({width:i.sleepAnimation.width,height:i.sleepAnimation.height,sizeFixed:i.sleepAnimation.sizeFixed}),a}initializeAnimation(){const t=n();this.visible=!1,this.fixedOffsetX=t.robotConfig.sleepAnimation.offsetX,this.fixedOffsetY=t.robotConfig.sleepAnimation.offsetY,t.emitter.on("antiScale",this.throttledUpdateOffset);const s=i(t.runtime,"showRobotSleepAnimation",t=>{e.log(`[runtime] showRobotSleepAnimation: ${t}`),this.updateVisibility()});this.unsubscribeFns.push(s)}shouldShow(){const t=n().runtimeSnapshot.showRobotSleepAnimation,i=this.parent,e=!!i&&i.visible,s=i&&(0!==i.x||0!==i.y);return t&&e&&!!s}updateVisibility(){const t=this.shouldShow();t&&!this.visible?(this.visible=!0,this.textures&&this.textures.length>0&&this.play()):!t&&this.visible?(this.visible=!1,this.stop()):!t&&this.playing&&this.stop()}updateOffset(t){}draw(t){const i=n(),e=i.getApp().toFixedSize(i.robotConfig.sleepAnimation.offsetX),s=i.getApp().toFixedSize(i.robotConfig.sleepAnimation.offsetY),o={...t,x:t.x+e,y:t.y+s};super.draw(o,()=>this.shouldShow()),this.updateVisibility()}onRobotVisibilityChanged(){this.updateVisibility()}set visible(t){const i=super.visible;super.visible=t,t&&!i&&this.textures&&this.textures.length>0?this.play():!t&&i&&this.playing&&this.stop()}get visible(){return super.visible}destroy(t){n().emitter.off("antiScale",this.throttledUpdateOffset),this.unsubscribeFns.forEach(t=>t()),this.unsubscribeFns=[],this.stop(),super.destroy(t)}}export{r as SleepAnimation};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Container as t}from"pixi.js";import{RobotIcon as i}from"./RobotIcon.js";import{SleepAnimation as o}from"./SleepAnimation.js";import{LAYER_ROBOT as s}from"../../application/AppContainer.js";import{subscribeKey as e}from"valtio/vanilla/utils";import{Logger as n}from"../../utils/logger.js";import{useAppService as a}from"../../application/AppService.js";import{Ring as r}from"../Base/Ring.js";class h extends t{robot;ring;sleepAnimation=null;unsubscribeFns=[];targetPosition=null;targetRotation=null;isMoving=!1;pathQueue=[];lastPosition=null;currentPathType=void 0;lastUpdateTime=0;constructor(){super();const t=a();t.appContainer.addToLayer(s,this),this.visible=t.runtimeSnapshot.showPath,this.ring=new r({config:t.robotConfig}),this.ring.visible=t.runtimeSnapshot.showRobotRing,this.addChild(this.ring),this.robot=new i,this.addChild(this.robot),this.lastUpdateTime=Date.now(),t.robotConfig.speed>0&&t.getApp().ticker.add(this.update,this);const o=e(t.runtime,"showRobotRing",t=>{n.log(`[runtime] showRobotRing: ${t}`),this.ring.visible=t});this.unsubscribeFns.push(o)}async initializeSleepAnimation(){try{this.sleepAnimation=await o.create(),this.addChild(this.sleepAnimation),n.log("Sleep animation added to robot")}catch(t){n.error("Failed to initialize sleep animation:",t)}}updatePositionByOrigin(t,i){this.position.set(t,i)}async draw({x:t,y:i,rotation:o}){this.ring.draw({x:t,y:i}),await this.robot.draw({x:t,y:i,rotation:o}),this.sleepAnimation||await this.initializeSleepAnimation(),this.sleepAnimation.draw({x:t,y:i,rotation:o}),this.lastPosition={x:t,y:i}}moveTo(t){this.pathQueue.push(t),this.isMoving||this.processNextPathPoint()}batchProcessQueue(t=!1){if(0===this.pathQueue.length)return;const i=[...this.pathQueue];if(t){const t=i[i.length-1];this.robot.position.set(t.x,t.y),void 0!==t.rotation&&(this.robot.rotation=t.rotation),this.lastPosition={x:t.x,y:t.y},this.pathQueue=[],this.isMoving=!1,this.targetPosition=null}else this.pathQueue.splice(0,i.length),0===this.pathQueue.length?(this.isMoving=!1,this.targetPosition=null):this.processNextPathPoint()}processNextPathPoint(){if(0===this.pathQueue.length)return this.isMoving=!1,this.currentPathType=void 0,this.stopRobotAnimation(),void a().emitter.emit("robotAnimationComplete");this.isMoving||this.startRobotAnimation(),this.isMoving=!0;const t=this.pathQueue[0];this.targetPosition={x:t.x,y:t.y},this.currentPathType=t.type,void 0!==t.rotation&&(this.targetRotation=t.rotation),this.lastPosition||(this.lastPosition={x:this.robot.x,y:this.robot.y})}update(){const t=a(),i=Date.now();if(0===this.lastUpdateTime)return void(this.lastUpdateTime=i);let o=i-this.lastUpdateTime;if(this.lastUpdateTime=i,o>500&&(o=16.67),this.targetPosition){const i=this.targetPosition.x-this.robot.x,s=this.targetPosition.y-this.robot.y,e=Math.sqrt(i*i+s*s),n=t.robotConfig.speed,r=t.getApp().metersToPixels(n);if(0===n)return this.robot.position.set(this.targetPosition.x,this.targetPosition.y),null!==this.targetRotation&&(this.robot.rotation=this.targetRotation,this.targetRotation=null),this.targetPosition=null,this.lastPosition={x:this.robot.x,y:this.robot.y},this.pathQueue.shift(),void this.processNextPathPoint();const h=r*(o/1e3);e<h?(this.robot.position.set(this.targetPosition.x,this.targetPosition.y),null!==this.targetRotation&&(this.robot.rotation=this.targetRotation,this.targetRotation=null),this.targetPosition=null,this.lastPosition={x:this.robot.x,y:this.robot.y},this.pathQueue.shift(),this.processNextPathPoint()):(this.robot.x+=i*(h/e),this.robot.y+=s*(h/e),a().emitter.emit("robotPositionUpdate",{x:this.robot.x,y:this.robot.y,pathType:this.currentPathType}),this.lastPosition={x:this.robot.x,y:this.robot.y})}}startRobotAnimation(){a().getApp().requestRender("robot-animation",!0)}set visible(t){super.visible=t,this.sleepAnimation&&this.sleepAnimation.onRobotVisibilityChanged()}get visible(){return super.visible}stopRobotAnimation(){a().getApp().stopRender("robot-animation")}remove(){this.pathQueue=[],this.isMoving=!1,this.targetPosition=null,this.stopRobotAnimation()}destroy(t){const i=a();this.unsubscribeFns.forEach(t=>t()),this.unsubscribeFns=[],this.stopRobotAnimation(),i.robotConfig.speed>0&&i.getApp().ticker.remove(this.update,this),this.ring.destroy(),super.destroy(t)}}export{h as Robot};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Container as o,Assets as r,TilingSprite as e,Graphics as t}from"pixi.js";import{calculateMergedBounds as s}from"../../utils/algorithm.js";import{LAYER_ROOM_FLOOR_TYPE as a}from"../../application/AppContainer.js";import{Logger as p}from"../../utils/logger.js";import{useAppService as i}from"../../application/AppService.js";class l extends o{floorTypeMap=new Map;floorTypeMasks=new Map;floorTypeToRooms=new Map;constructor(){super({isRenderGroup:!0}),i().appContainer.addToLayer(a,this)}async createFloorTypes(o){if(!i().runtimeSnapshot.showRoomFloorType)return;this.clearFloorTypes();const r=this.groupRoomsByFloorType(o),e=[];for(const[o,t]of r)e.push(this.createMergedFloorType(o,t));await Promise.all(e)}groupRoomsByFloorType(o){const r=new Map,e=i();return o.forEach((o,t)=>{const s=e.getRoomData(t),a=s?.floorType||0;a>=0&&(r.has(a)||r.set(a,[]),r.get(a).push({roomId:t,graphics:o}))}),r}async createMergedFloorType(o,t){const a=i(),{assets:l,opacity:n,scale:c}=a.roomConfig.floorType,h=l[o%l.length];if(!h)return void p.warn(`No texture asset configured for floorType: ${o}`);const y=await r.load(h);if(!y)return void p.warn(`Floor material texture not found: ${h}`);const f=t.map(({graphics:o})=>o.getLocalBounds()),d=s(f),m=new e({texture:y,width:d.width,height:d.height});m.x=d.x,m.y=d.y,m.alpha=n,m.tileScale.set(c);const T=this.createMergedMask(t.map(({graphics:o})=>o));m.mask=T,this.addChild(m),this.floorTypeMap.set(o,m),this.floorTypeMasks.set(o,T),this.floorTypeToRooms.set(o,new Set(t.map(({roomId:o})=>o)))}createMergedMask(r){const e=new o;return r.forEach(o=>{const r=new t;r.context=o.context.clone(),e.addChild(r)}),e}clearFloorTypes(){this.floorTypeMap.forEach(o=>{try{this.removeChild(o),o.destroy()}catch(o){p.warn("Error destroying floor material:",o)}}),this.floorTypeMap.clear(),this.floorTypeMasks.forEach(o=>{try{o.destroy()}catch(o){p.warn("Error destroying floor mask:",o)}}),this.floorTypeMasks.clear(),this.floorTypeToRooms.clear()}destroy(){this.clearFloorTypes(),super.destroy()}}export{l as RoomFloorType};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Text as o,TextStyle as e}from"pixi.js";import{useAppService as t}from"../../application/AppService.js";class n extends o{roomId;roomIndex;constructor(o){const n=t(),{nameLabel:i,colors:r}=n.roomConfig,m=r.name[o.index%r.name.length],s=new e({fontSize:i.fontSize,fontFamily:i.fontFamily,fontWeight:i.fontWeight,fill:m,align:"center"});super({text:o.name||"Unknown",style:s}),this.roomId=o.id,this.roomIndex=o.index,this.anchor.set(.5)}updateName(o){this.text=o}updateColor(o){const e=t(),{colors:n}=e.roomConfig,i=o??n.name[this.roomIndex%n.name.length];this.style.fill=i}}export{n as RoomName};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Container as e,Graphics as t,Text as i,TextStyle as o}from"pixi.js";import{useAppService as n}from"../../application/AppService.js";import{EnhancedSprite as s}from"../Base/EnhancedSprite.js";class r extends e{background;cleanModeIcon;suctionIcon;cisternIcon;cleanTimesIcon;orderContainer;orderBackground;orderText;bubble=null;isFolded=!1;roomId;constructor(r){super();const l=n(),c=l.roomConfig;this.roomId=r.id,this.background=new t;const{property:h,colors:{propertyTheme:d}}=c;c.property.foldable&&(this.bubble=new t);const a=d[r.index%d.length];this.cleanModeIcon=new s,this.cleanModeIcon.tint=a,this.cleanModeIcon.anchor.set(0,0),this.suctionIcon=new s,this.suctionIcon.tint=a,this.suctionIcon.anchor.set(0,0),this.cisternIcon=new s,this.cisternIcon.tint=a,this.cisternIcon.anchor.set(0,0),this.cleanTimesIcon=new s,this.cleanTimesIcon.tint=a,this.cleanTimesIcon.anchor.set(0,0),this.orderContainer=new e,this.orderBackground=new t,this.orderText=new i({text:"",style:new o({fontSize:h.cleanOrder.fontSize,fontFamily:h.cleanOrder.fontFamily,fontWeight:h.cleanOrder.fontWeight,fill:h.cleanOrder.color,align:"center",trim:!0})}),this.orderText.anchor.set(.5,.5),this.orderContainer.addChild(this.orderBackground),this.orderContainer.addChild(this.orderText),this.addChild(this.background),this.bubble&&this.addChild(this.bubble),this.addChild(this.cleanModeIcon),this.addChild(this.suctionIcon),this.addChild(this.cisternIcon),this.addChild(this.cleanTimesIcon),this.addChild(this.orderContainer),this.visible=l.runtimeSnapshot.showRoomProperty,this.updateProperty(r)}async updateProperty(e){await this.updateIcons(e),this.updateBackground()}getDisplayElements(e){const t=n(),{displayOrders:i,cleanMode:o,suction:s,cistern:r}=t.roomConfig.property,{showRoomOrder:l,showRoomProperty:c}=t.runtimeSnapshot,h=e.order||0,d=l&&h>0,a=c&&i.includes("cleanMode"),u=c&&i.includes("suction"),b=c&&i.includes("cistern"),p=c&&i.includes("cleanTimes")&&e.cleanTimes>0,g={cleanMode:{element:this.cleanModeIcon,show:a,isOrder:!1},suction:{element:this.suctionIcon,show:u,isOrder:!1},cistern:{element:this.cisternIcon,show:b,isOrder:!1},cleanTimes:{element:this.cleanTimesIcon,show:p,isOrder:!1}},m=[];return d&&m.push({element:this.orderContainer,show:!0,isOrder:!0}),i.forEach(e=>{const t=g[e];t&&t.show&&m.push(t)}),{shouldShowOrder:d,shouldShowCleanMode:a,shouldShowSuction:u,shouldShowCistern:b,shouldShowCleanTimes:p,elementsToShow:m,orderValue:h}}async updateIcons(e){const t=n(),{iconWidth:i,iconHeight:o,container:s,cleanOrder:r,foldable:l,iconGap:c}=t.roomConfig.property,{propertyTheme:h}=t.roomConfig.colors,{paddingHorizontal:d,paddingVertical:a}=s,{shouldShowOrder:u,shouldShowCleanMode:b,shouldShowSuction:p,shouldShowCistern:g,shouldShowCleanTimes:m,elementsToShow:I,orderValue:C}=this.getDisplayElements(e);this.orderContainer.visible=u,this.cleanModeIcon.visible=b,this.suctionIcon.visible=p,this.cisternIcon.visible=g,this.cleanTimesIcon.visible=m,l&&this.isFolded&&(this.orderContainer.visible=!1,this.cleanModeIcon.visible=!1,this.suctionIcon.visible=!1,this.cisternIcon.visible=!1,this.cleanTimesIcon.visible=!1);const f=[];if(b&&f.push(this.cleanModeIcon.loadTextureAndSetSize(`cleanMode_${e.cleanMode}`,{width:i,height:o,sizeFixed:!1})),p&&f.push(this.suctionIcon.loadTextureAndSetSize(`fan_${e.suction}`,{width:i,height:o,sizeFixed:!1})),g&&f.push(this.cisternIcon.loadTextureAndSetSize(`water_${e.cistern}`,{width:i,height:o,sizeFixed:!1})),m){const t=e.cleanTimes||1;f.push(this.cleanTimesIcon.loadTextureAndSetSize(`cleanTimes${t}`,{width:i,height:o,sizeFixed:!1}))}await Promise.all(f),u&&(this.orderText.text=C.toString(),this.orderBackground.clear(),this.orderBackground.setFillStyle({color:h[e.index%h.length]}),this.orderBackground.circle(i/2,o/2,i/2).fill(),this.orderText.position.set(i/2,o/2));let w=d;I.forEach((e,t)=>{const{element:o,isOrder:n}=e;o.position.set(w,a),w+=i,t<I.length-1&&(w+=n?r.gapRight:c)})}updateBackground(){const e=n().roomConfig,{container:t,foldable:i}=e.property,{borderRadius:o,tailHeight:s,tailWidth:r,backgroundColor:l}=t,c=this.calculateContentWidth(),h=this.calculateContentHeight(),d=Math.min(r,c/2);if(this.background.clear(),this.bubble&&this.bubble.clear(),this.background.setFillStyle({color:l}),this.background.roundRect(0,0,c,h,o).fill(),i&&this.bubble){const e=(c-d)/2;this.bubble.setFillStyle({color:l}),this.bubble.poly([e,h-1,e+d,h-1,e+d/2,h+s]).fill()}}calculateContentWidth(){const e=n(),{iconWidth:t,container:i,cleanOrder:o,iconGap:s}=e.roomConfig.property,{paddingHorizontal:r}=i,l=e.getRoomData(this.roomId);if(!l)return 2*r;const{elementsToShow:c}=this.getDisplayElements(l);let h=r;return c.forEach((e,i)=>{const{isOrder:n}=e;h+=t,i<c.length-1&&(h+=n?o.gapRight:s)}),h+=r,h}calculateContentHeight(){const e=n().roomConfig,{iconHeight:t,container:i}=e.property;return i.paddingVertical+t+i.paddingVertical}getTotalHeight(){const e=n(),{foldable:t,container:i}=e.roomConfig.property,{tailHeight:o}=i;return this.calculateContentHeight()+(t?o:0)}getTotalWidth(){return this.calculateContentWidth()}setFolded(e){const t=n(),{foldable:i}=t.roomConfig.property;if(i)if(this.isFolded=e,e)this.background.visible=!1,this.cleanModeIcon.visible=!1,this.suctionIcon.visible=!1,this.cisternIcon.visible=!1,this.cleanTimesIcon.visible=!1,this.orderContainer.visible=!1,this.bubble&&(this.bubble.visible=!0,this.bubble.rotation=Math.PI,this.repositionFoldedBubble());else{this.background.visible=!0,this.bubble&&(this.bubble.visible=!0,this.bubble.rotation=0,this.bubble.position.set(0,0)),this.updateBackground();const e=t.getRoomData(this.roomId);e&&this.updateIcons(e)}}isFoldedState(){const e=n(),{foldable:t}=e.roomConfig.property;return!!t&&this.isFolded}repositionFoldedBubble(){const e=n(),{foldable:t}=e.roomConfig.property;if(!t||!this.bubble)return;const i=e.roomConfig,{tailHeight:o}=i.property.container,s=this.calculateContentWidth(),r=this.calculateContentHeight(),l=s/2;this.bubble.position.set(l,r+o/2)}}export{r as RoomProperty};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Container as t,Graphics as o}from"pixi.js";import{useAppService as i}from"../../application/AppService.js";import{EnhancedSprite as e}from"../Base/EnhancedSprite.js";class c extends t{background;checkmarkIcon;bubble;roomId;constructor(t){super();const c=i().roomConfig;this.roomId=t.id,this.background=new o,this.bubble=new o;const{colors:{selectionIndicatorIcon:n}}=c;this.checkmarkIcon=new e,this.checkmarkIcon.tint=n[t.index%n.length],this.checkmarkIcon.anchor.set(0,0),this.addChild(this.background),this.addChild(this.bubble),this.addChild(this.checkmarkIcon),this.updateIndicator(t)}async updateIndicator(t){const o=i(),{roomSelectionMode:e,enableRoomSelection:c,selectRoomIds:n}=o.runtimeSnapshot;if(!c||"checkmark"!==e)return void(this.visible=!1);const r=n.includes(t.id);await this.showCheckmarkMode(r),this.updateBackground()}async showCheckmarkMode(t){const o=i(),{selectionIndicator:e}=o.roomConfig,{iconWidth:c,iconHeight:n}=e;if(t){this.visible=!0,this.checkmarkIcon.visible=!0,await this.checkmarkIcon.loadTextureAndSetSize("checkmark",{width:c,height:n,sizeFixed:!1});const t=e.containerWidth/2,o=e.containerHeight/2;this.checkmarkIcon.position.set(t-c/2,o-n/2)}else this.visible=!1}updateBackground(){const t=i(),{selectionIndicator:o,colors:e}=t.roomConfig,{containerWidth:c,containerHeight:n,strokeWidth:r,strokeColor:s,borderRadius:a,tailHeight:h,tailWidth:d}=o,l=t.getRoomData(this.roomId);if(!l)return;const k=e.selectionIndicatorBackground[l.index%e.selectionIndicatorBackground.length];if(this.background.clear(),this.bubble.clear(),this.background.setFillStyle({color:k}).roundRect(0,0,c,n,a).fill().setStrokeStyle({color:s,width:r,alignment:0}).stroke(),h>0&&d>0){const t=(c-d)/2;this.bubble.setFillStyle({color:s});const o=n+r;this.bubble.poly([t,o-1,t+d,o-1,t+d/2,o+h]).fill()}}getTotalHeight(){const t=i(),{selectionIndicator:o}=t.roomConfig,{containerHeight:e,tailHeight:c,strokeWidth:n}=o;return e+n+(c>0?c:0)}getTotalWidth(){const t=i(),{selectionIndicator:o}=t.roomConfig;return o.containerWidth}}export{c as RoomSelectionIndicator};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{RoomName as o}from"./RoomName.js";import{RoomProperty as t}from"./RoomProperty.js";import{RoomSelectionIndicator as i}from"./RoomSelectionIndicator.js";import{ClickHandler as e}from"../../mixins/ClickHandler.js";import{FixedSizeContainer as r}from"../Base/FixedSizeContainer.js";import{useAppService as s}from"../../application/AppService.js";class n extends r{roomId;roomName;roomProperty=null;roomSelectionIndicator=null;clickHandler=null;constructor(t){super();const i=s();this.enableRenderGroup(),this.roomId=t.id,t.centerPoint&&this.position.set(t.centerPoint.x,t.centerPoint.y),this.roomName=new o(t),this.roomName.visible=i.runtimeSnapshot.showRoomName,this.createRoomProperty(t),this.createRoomSelectionIndicator(t),this.updateLayout(),this.clickHandler=new e(this,{onClick:()=>{i.events?.onClickRoomProperties?.(t)}})}shouldShowRoomProperty(){const o=s(),{showRoomOrder:t,showRoomProperty:i,enableRoomSelection:e,roomSelectionMode:r}=o.runtimeSnapshot,n=o.getRoomData(this.roomId);if(!n)return!1;if(e&&"checkmark"===r)return!1;const m=t&&(n.order||0)>0,a=i&&(n.suction&&o.roomConfig.property.displayOrders.includes("suction")||n.cistern&&o.roomConfig.property.displayOrders.includes("cistern")||n.cleanTimes>0&&o.roomConfig.property.displayOrders.includes("cleanTimes"));return m||a}shouldShowRoomSelectionIndicator(){const o=s(),{enableRoomSelection:t,roomSelectionMode:i}=o.runtimeSnapshot;return t&&"checkmark"===i}updateRoomPropertyVisibility(){const o=s();if(this.roomProperty){if(this.shouldShowRoomProperty()){this.roomProperty.visible=!0;const t=o.runtimeSnapshot.roomPropertyFoldIds.includes(this.roomId);this.roomProperty.setFolded(t);const i=o.getRoomData(this.roomId);i&&this.roomProperty.updateProperty(i)}else this.roomProperty.visible=!1;this.updateLayout()}}async updateRoomSelectionIndicatorVisibility(){const o=s();if(this.roomSelectionIndicator){if(this.shouldShowRoomSelectionIndicator()){const t=o.getRoomData(this.roomId);t&&await this.roomSelectionIndicator.updateIndicator(t)}else this.roomSelectionIndicator.visible=!1;this.updateLayout()}}async createRoomProperty(o){const i=s();this.roomProperty&&(this.removeChild(this.roomProperty),this.roomProperty.destroy()),this.roomProperty=new t(o),await this.roomProperty.updateProperty(o),this.addChild(this.roomProperty),this.addChild(this.roomName),this.roomName.visible=i.runtimeSnapshot.showRoomName,this.updateRoomPropertyVisibility()}async createRoomSelectionIndicator(o){this.roomSelectionIndicator&&(this.removeChild(this.roomSelectionIndicator),this.roomSelectionIndicator.destroy()),this.roomSelectionIndicator=new i(o),this.addChild(this.roomSelectionIndicator),await this.updateRoomSelectionIndicatorVisibility()}updateLayout(){const o=s(),{property:{offsetY:t,offsetX:i},selectionIndicator:{offsetY:e,offsetX:r}}=o.roomConfig,n=this.roomProperty?.visible||!1,m=this.roomName.visible,a=this.roomSelectionIndicator?.visible||!1;if(n&&this.roomProperty)if(this.roomProperty.isFoldedState())this.roomProperty.position.set(i,-t);else{const o=this.roomProperty.getTotalHeight(),e=this.roomProperty.getTotalWidth();m?(this.roomProperty.position.set(-e/2+i,-t-o),this.roomName.position.set(0,0)):this.roomProperty.position.set(-e/2+i,-o/2-t)}if(a&&this.roomSelectionIndicator){const o=this.roomSelectionIndicator.getTotalHeight(),t=this.roomSelectionIndicator.getTotalWidth();m?(this.roomSelectionIndicator.position.set(-t/2+r,-e-o),this.roomName.position.set(0,0)):this.roomSelectionIndicator.position.set(-t/2+r,-o/2-e)}!m||n||a||this.roomName.position.set(0,0)}updateName(o){this.roomName.updateName(o)}updateRoomNameVisibility(o){this.roomName.visible=o,this.updateLayout()}updatePosition(o){this.position.set(o.x,o.y)}destroy(){this.clickHandler?.destroy(),this.clickHandler=null,super.destroy()}}export{n as RoomInfo};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import e from"../assets/chargingStation.png.js";import o from"../assets/robot.png.js";import t from"../assets/fan0.png.js";import i from"../assets/fan1.png.js";import r from"../assets/fan2.png.js";import s from"../assets/fan3.png.js";import a from"../assets/fan4.png.js";import n from"../assets/water0.png.js";import f from"../assets/water1.png.js";import l from"../assets/water2.png.js";import d from"../assets/water3.png.js";import c from"../assets/cleanMode0.png.js";import h from"../assets/cleanMode1.png.js";import p from"../assets/cleanMode2.png.js";import m from"../assets/cleanMode3.png.js";import g from"../assets/cleanTimes1.png.js";import b from"../assets/cleanTimes2.png.js";import S from"../assets/controlScale.png.js";import C from"../assets/controlDelete.png.js";import u from"../assets/controlRotate.png.js";import W from"../assets/controlMove.png.js";import k from"../assets/checkmark.png.js";import y from"../assets/spot.png.js";import D from"../assets/floorType.png.js";import j from"../assets/carpet.png.js";import F from"../assets/sleep.json.js";import{SPECIAL_ROOM_IDS as x}from"@ray-js/robot-protocol";const A="system-ui, -apple-system, sans-serif",O=["#d7bb46","#4990d7","#58a789","#749cd7","#f2646c","#91be76","#4ec7b1","#4bb3c8","#e7858a","#7fa96e","#efa667","#a3d774","#6b82d8","#75b551","#b392cd","#ed5454"],w={global:{containerTop:"0px",containerLeft:"0px",containerWidth:"100%",containerHeight:"100%",backgroundColor:"#f6f6f6"},map:{autoPaddingPercent:.05,obstacleColor:"#999999",freeColor:"#ebebeb"},room:{colors:{active:["#fae9a3","#a6d0fa","#9ce3c8","#d1e2fa","#fed8da","#d4f0c3","#a1f3e4","#a0e5f3","#fee6e8","#c1e5b1","#fee9d7","#e4fad1","#c8d3fa","#b8ea9c","#f0e5f9","#fdc4c4"],inactive:["#fef5d2","#d5e9fe","#c0f2df","#e7f0fe","#fef0f1","#f0fbe9","#ccfbf3","#caf3fc","#fff3f4","#def5d4","#fef1e6","#f2fee7","#e6ebfe","#d5f7c2","#f3e9fb","#fee2e2"],name:O,propertyTheme:O,selectionIndicatorBackground:O,selectionIndicatorIcon:["#ffffff"],[x.NO_ROOM_DATA]:"#ebebeb",[x.ROOM_GAP]:"#ebebeb",[x.OBSTACLE_ROOM]:"#ebebeb",[x.UNKNOWN_ROOM]:"#ebebeb"},nameLabel:{fontSize:10,fontFamily:A,fontWeight:"500"},property:{displayOrders:["cleanMode","suction","cistern","cleanTimes"],iconWidth:12,iconHeight:12,foldable:!0,offsetX:0,offsetY:4,iconGap:0,container:{backgroundColor:"#ffffff",paddingVertical:1.5,paddingHorizontal:1.5,borderRadius:16,tailHeight:2,tailWidth:10},suction:{assets:[t,i,r,s,a]},cistern:{assets:[n,f,l,d]},cleanMode:{assets:[c,h,p,m]},cleanTimes:{assets:[g,b]},cleanOrder:{color:"#ffffff",fontFamily:A,fontWeight:"400",fontSize:8,gapRight:2}},selectionIndicator:{iconSrc:k,iconWidth:12,iconHeight:12,containerWidth:16,containerHeight:16,strokeWidth:2,strokeColor:"#ffffff",borderRadius:16,offsetY:4,offsetX:0,tailHeight:2,tailWidth:6},floorType:{assets:["",D,D,D],opacity:.1,scale:.2}},path:{lineWidthFixed:!1,incrementalThreshold:5,commonPath:{color:16777215,width:.5},transitionPath:{color:"transparent",width:.5},chargePath:{color:"transparent",width:.5}},carpet:{src:j,opacity:.5,scale:.2},robot:{icon:{sizeFixed:!1,width:8,height:8,src:o},speed:0,rotationCorrection:0,sleepAnimation:{jsonSrc:F,framePrefix:"sleep_",width:16,height:16,sizeFixed:!1,frameCount:96,offsetX:8,offsetY:-8},ringSize:1,ringColor:"rgba(255, 68, 68, 0.2)",ringStrokeWidth:1,ringStrokeColor:"#ffffff",ringStrokeDashed:!0,ringStrokeDashArray:[4,4]},chargingStation:{icon:{sizeFixed:!1,width:8,height:8,src:e},rotationCorrection:0,ringSize:1,ringColor:"rgba(255, 68, 68, 0.2)",ringStrokeWidth:1,ringStrokeColor:"#ffffff",ringStrokeDashed:!0,ringStrokeDashArray:[4,4]},interaction:{zoomRange:{min:.5,max:5},enableDoubleTapZoom:!0},controls:{iconWrapperWidth:24,iconWrapperHeight:24,iconWrapperBorderRadius:16,iconWidth:12,iconHeight:12,deleteIconSrc:C,rotateIconSrc:u,scaleIconSrc:S,moveIconSrc:W,moveButtonOffset:30,textFontSize:12,textFontFamily:A,textFontWeight:"400",unitLabel:"m",forbiddenSweepZone:{minSize:1,iconWrapperFillColor:"#ff4444",strokeColor:"#ff4444",strokeWidth:2,fillColor:"rgba(255, 68, 68, 0.1)",outlineOffset:20,outlineStrokeColor:"#ff4444",outlineStrokeWidth:2,outlineDashed:!0,outlineDashArray:[4,3],outlineFillColor:"rgba(255, 68, 68, 0.05)",textColor:"#ff4444",textPosition:"bottom",textOffset:10,editing:{isDashed:!1,dashArray:[0,0]},normal:{isDashed:!1,dashArray:[0,0]}},forbiddenMopZone:{minSize:1,iconWrapperFillColor:"#fe8a07",strokeColor:"#fe8a07",strokeWidth:2,fillColor:"rgba(254, 138, 7, 0.1)",outlineOffset:20,outlineStrokeColor:"#fe8a07",outlineStrokeWidth:2,outlineDashed:!0,outlineDashArray:[4,3],outlineFillColor:"rgba(254, 138, 7, 0.05)",textColor:"#fe8a07",textPosition:"bottom",textOffset:10,editing:{isDashed:!1,dashArray:[0,0]},normal:{isDashed:!1,dashArray:[0,0]}},cleanZone:{minSize:1,iconWrapperFillColor:"#5d68fe",strokeColor:"#5d68fe",strokeWidth:2,fillColor:"rgba(93, 104, 254, 0.1)",outlineOffset:20,outlineStrokeColor:"#5d68fe",outlineStrokeWidth:2,outlineDashed:!0,outlineDashArray:[4,3],outlineFillColor:"rgba(93, 104, 254, 0.05)",textColor:"#5d68fe",textPosition:"bottom",textOffset:10,editing:{isDashed:!1,dashArray:[0,0]},normal:{isDashed:!1,dashArray:[0,0]}},virtualWall:{iconWrapperFillColor:"#ff4444",lineWidth:2,lineColor:"#ff4444",hitAreaThickness:30,outlineOffset:20,outlineStrokeColor:"#ff4444",outlineStrokeWidth:2,outlineDashed:!0,outlineDashArray:[4,3],outlineFillColor:"rgba(255, 68, 68, 0.05)",minWidth:1,textColor:"#ff4444",textOffset:10,editing:{isDashed:!1,dashArray:[0,0]},normal:{isDashed:!1,dashArray:[0,0]}},spot:{iconSrc:y,iconSize:8,size:1,strokeColor:"#5d68fe",strokeWidth:2,fillColor:"rgba(93, 104, 254, 0.1)",textColor:"#5d68fe",textPosition:"bottom",textOffset:10,editing:{isDashed:!1,dashArray:[0,0]},normal:{isDashed:!1,dashArray:[0,0]}}},divider:{lineColor:"#ff4444",dashLineWidth:2,dashLineDashArray:[4,3],solidLineWidth:2,endPointSize:12,endPointColor:"#ff4444",endPointStrokeColor:"#ffffff",endPointStrokeWidth:2,hitAreaThickness:30,resetDividerWhenOutOfRoom:!0,defaultExtension:20,defaultDirection:"horizontal"},detectedObject:{height:43,width:38,interactive:!1},heatmap:{cellSize:2,maxDistance:14,smoothIterations:10,heatmapAlpha:.8,colorGradients:["#FF3B30","#FF7A00","#FFA100","#FFD700","#99DD70","#2EC070","#40E0D0","#88D0E9"]},snapshot:{format:"png",quality:1,antialias:!0,resolution:window?.devicePixelRatio||1}},R={dividingRoomId:null,enableRoomSelection:!1,editingForbiddenSweepZoneIds:[],editingForbiddenMopZoneIds:[],editingCleanZoneIds:[],editingVirtualWallIds:[],editingSpotIds:[],roomPropertyFoldIds:[],roomSelectionMode:"checkmark",selectRoomIds:[],showRoomProperty:!1,showRoomOrder:!0,showRoomName:!0,showPath:!0,showChargingStation:!0,showRoomFloorType:!0,showCarpet:!0,showChargingStationRing:!1,showRobotRing:!1,showRobotSleepAnimation:!1};export{w as DEFAULT_CONFIG,R as DEFAULT_RUNTIME_CONFIG,A as TEXT_FONT_FAMILY};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e="MAIN",o=5e3;export{e as MAIN_INSTANCE_KEY,o as RASTER_CHUNK_SIZE};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=["resetPanZoom","getForbiddenSweepZones","getForbiddenMopZones","getCleanZones","getVirtualWalls","getSpots","getViewportCenterPoint","getMapCenterPoint","getWallPointsByViewportCenter","getForbiddenSweepZonePointsByViewportCenter","getForbiddenMopZonePointsByViewportCenter","getCleanZonePointsByViewportCenter","getSpotPointByViewportCenter","getEffectiveDividerPoints","getDividerEndPoints","snapshot","snapshotByData"],o=["onMapFirstDrawed","onMapDrawed","onPathDrawed","onRoomPropertiesDrawed","onClickRoom","onClickRoomProperties","onRemoveForbiddenSweepZone","onRemoveForbiddenMopZone","onRemoveCleanZone","onRemoveVirtualWall","onUpdateForbiddenSweepZone","onUpdateForbiddenMopZone","onUpdateCleanZone","onUpdateVirtualWall","onUpdateSpot","onUpdateDivider","onClickForbiddenSweepZone","onClickForbiddenMopZone","onClickCleanZone","onClickVirtualWall","onClickSpot","onClickDetectedObject","onClickCustomElement"];export{e as MAP_API_METHODS,o as MAP_CALLBACK_METHODS};
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{decodeRoomProperties as o}from"./utils/index.js";import{MapApplication as p}from"./application/MapApplication.js";import{AppContext as i,useAppService as t}from"./application/AppService.js";import{MAP_API_METHODS as r,MAP_CALLBACK_METHODS as m}from"./constant/methods.js";export{i as AppContext,r as MAP_API_METHODS,m as MAP_CALLBACK_METHODS,p as MapApplication,o as decodeRoomProperties,t as useAppService};
|