{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/components/RulerY.vue?1875","webpack:///./src/components/Level.vue?115d","webpack:///./src/assets/logo/Logo_Flui3d.svg","webpack:///./src/components/SvgCanvas.vue?9d22","webpack:///./src/components/ComponentPropertyBoard.vue?48ad","webpack:///./src/components/OutputOptionModal.vue?7580","webpack:///./src/components/PanelLevel.vue?1c3d","webpack:///./src/components/STLPreview.vue?7b45","webpack:///./src/components/PopperWrapperGreen.vue?b45f","webpack:///./src/components/PanelRight.vue?22a7","webpack:///./src/components/SvgChannelDraw.vue?bde3","webpack:///./src/components/TheHeader.vue?ffc3","webpack:///./src/components/PanelRightItems/PanelRightDRC.vue?6981","webpack:///./src/App.vue","webpack:///./src/components/Toolbar.vue","webpack:///./src/components/ToolbarButton.vue","webpack:///./src/library/hardCodedValues.ts","webpack:///./src/library/other.ts","webpack:///./src/library/payloadPrimitives.ts","webpack:///./src/library/primitives.ts","webpack:///./src/library/modules/moduleTemplate.ts","webpack:///./src/library/utilities/channelPayloadBuilder.ts","webpack:///./src/library/inletOutlet.ts","webpack:///./src/library/levelConnection.ts","webpack:///./src/library/channel.ts","webpack:///./src/library/bridge.ts","webpack:///./src/stores/history.ts","webpack:///./src/stores/channelSegmentInput.ts","webpack:///./src/stores/coordinate.ts","webpack:///./src/library/modules/moduleCreatorTemplate.ts","webpack:///./src/library/modules/chamber.ts","webpack:///./src/library/modules/chamberCreator.ts","webpack:///./src/library/modules/filter.ts","webpack:///./src/library/modules/filterCreator.ts","webpack:///./src/library/modules/delayChannel.ts","webpack:///./src/library/modules/delayChannelCreator.ts","webpack:///./src/library/modules/teslaValve.ts","webpack:///./src/library/modules/teslaValveCreator.ts","webpack:///./src/library/modules/droplet.ts","webpack:///./src/library/modules/dropletCreator.ts","webpack:///./src/library/modules/transitionWidth.ts","webpack:///./src/library/modules/transitionWidthCreator.ts","webpack:///./src/library/modules/transitionHeight.ts","webpack:///./src/library/modules/transitionHeightCreator.ts","webpack:///./src/library/modules/moduleFactory.ts","webpack:///./src/stores/module.ts","webpack:///./src/library/componentPolygon.ts","webpack:///./src/library/componentCircle.ts","webpack:///./src/stores/control.ts","webpack:///./src/library/utilities/payloadBuilder.ts","webpack:///./src/stores/content.ts","webpack:///./src/components/ToolbarIcon.vue","webpack:///./src/components/ToolbarIcon.vue?3be9","webpack:///./src/components/ToolbarButton.vue?8bc6","webpack:///./src/assets/icons/select-icon.vue","webpack:///./src/assets/icons/select-icon.vue?3f02","webpack:///./src/assets/icons/component-icon.vue","webpack:///./src/assets/icons/component-icon.vue?05e4","webpack:///./src/assets/icons/bridge-icon.vue","webpack:///./src/assets/icons/bridge-icon.vue?545b","webpack:///./src/assets/icons/inlet-outlet-icon.vue","webpack:///./src/assets/icons/inlet-outlet-icon.vue?405e","webpack:///./src/assets/icons/channel-icon.vue","webpack:///./src/assets/icons/channel-icon.vue?c7a9","webpack:///./src/assets/icons/circle-icon.vue","webpack:///./src/assets/icons/circle-icon.vue?d524","webpack:///./src/assets/icons/rounded-corner-icon.vue","webpack:///./src/assets/icons/rounded-corner-icon.vue?ff91","webpack:///./src/assets/icons/level-connection-icon.vue","webpack:///./src/assets/icons/level-connection-icon.vue?f823","webpack:///./src/assets/icons/polygon-icon.vue","webpack:///./src/assets/icons/polygon-icon.vue?cbc7","webpack:///./src/components/ToolbarChannelType.vue","webpack:///./src/assets/icons/node-round-icon.vue","webpack:///./src/assets/icons/node-round-icon.vue?facf","webpack:///./src/assets/icons/node-square-icon.vue","webpack:///./src/assets/icons/node-square-icon.vue?0e00","webpack:///./src/components/ToolbarChannelType.vue?751e","webpack:///./src/components/ToolbarRadius.vue","webpack:///./src/components/ToolbarShapeType.vue","webpack:///./src/components/ToolbarShapeType.vue?0c09","webpack:///./src/components/ToolbarRadius.vue?41bc","webpack:///./src/components/ToolbarChannelWidth.vue","webpack:///./src/components/ToolbarChannelWidth.vue?1e71","webpack:///./src/components/ToolbarCustomized.vue","webpack:///./src/components/ToolbarCustomized.vue?18cd","webpack:///./src/components/Toolbar.vue?7c92","webpack:///./src/components/SvgCanvas.vue?8590","webpack:///./src/components/SvgElement.vue","webpack:///./src/components/SvgPolygon.vue?4e94","webpack:///./src/components/SvgPolygon.vue","webpack:///./src/components/SvgPolygon.vue?2d94","webpack:///./src/components/SvgCircle.vue?10bf","webpack:///./src/components/SvgCircle.vue","webpack:///./src/components/SvgCircle.vue?a026","webpack:///./src/components/SvgChannel.vue","webpack:///./src/components/SvgChannel.vue?553e","webpack:///./src/components/SvgFlowControlNode.vue","webpack:///./src/components/SvgFlowControlNode.vue?9e07","webpack:///./src/components/SvgBridge.vue","webpack:///./src/components/SvgBridge.vue?d447","webpack:///./src/components/SvgLevelConnection.vue","webpack:///./src/components/SvgLevelConnection.vue?2c11","webpack:///./src/components/SvgModule.vue","webpack:///./src/components/SvgModulePrimitives/PrimitiveChannel.vue","webpack:///./src/components/SvgModulePrimitives/PrimitiveChannel.vue?ce66","webpack:///./src/components/SvgModulePrimitives/PrimitiveCircle.vue","webpack:///./src/components/SvgModulePrimitives/PrimitiveCircle.vue?7579","webpack:///./src/components/SvgModulePrimitives/PrimitivePolygon.vue","webpack:///./src/components/SvgModulePrimitives/PrimitivePolygon.vue?24bc","webpack:///./src/components/SvgModulePrimitives/PrimitiveRectangle.vue","webpack:///./src/components/SvgModulePrimitives/PrimitiveRectangle.vue?8876","webpack:///./src/components/SvgModule.vue?32a9","webpack:///./src/components/SvgElement.vue?92fd","webpack:///./src/components/SvgChannelDraw.vue?f5b5","webpack:///./src/components/SvgChannelDraw.vue","webpack:///./src/components/SvgChannelDraw.vue?420a","webpack:///./src/components/SvgCursor.vue","webpack:///./src/components/SvgCursor.vue?0405","webpack:///./src/components/ChannelSegmentsForBridgePlacement.vue?2172","webpack:///./src/components/ChannelSegmentsForBridgePlacement.vue","webpack:///./src/components/ChannelSegmentsForBridgePlacement.vue?f13d","webpack:///./src/components/SvgEditElement.vue","webpack:///./src/components/SvgElementHighlight.vue","webpack:///./src/components/SvgElementHighlight.vue?5fbb","webpack:///./src/components/SvgEditElement.vue?7be3","webpack:///./src/components/SvgChannelPorts.vue?a5ef","webpack:///./src/components/SvgChannelPorts.vue","webpack:///./src/components/SvgChannelPorts.vue?64e7","webpack:///./src/components/SvgChannelPointsRounded.vue?6ebc","webpack:///./src/components/SvgChannelPointsRounded.vue","webpack:///./src/components/SvgChannelPointsRounded.vue?bd47","webpack:///./src/components/SvgLevelConnectionAll.vue?85e0","webpack:///./src/components/SvgLevelConnectionAll.vue","webpack:///./src/components/SvgLevelConnectionAll.vue?5c75","webpack:///./src/components/SvgEditGroup.vue?aa19","webpack:///./src/components/SvgEditGroup.vue","webpack:///./src/components/SvgEditGroup.vue?da5c","webpack:///./src/components/SvgPolygonDraw.vue","webpack:///./src/components/SvgPolygonDraw.vue?d279","webpack:///./src/components/SvgCanvas.vue","webpack:///./src/components/SvgCanvas.vue?776f","webpack:///./src/components/TheFooter.vue?6803","webpack:///./src/components/Level.vue","webpack:///./src/components/Level.vue?014d","webpack:///./src/components/PanelLevel.vue","webpack:///./src/components/PanelLevel.vue?9178","webpack:///./src/components/PopperWrapperGreen.vue","webpack:///./src/components/PopperWrapperGreen.vue?c4c2","webpack:///./src/components/TheFooter.vue","webpack:///./src/components/TheFooter.vue?3cef","webpack:///./src/library/utilities/designLoader.ts","webpack:///./src/components/TheHeader.vue","webpack:///./src/components/TheHeader.vue?687e","webpack:///./src/components/RulerX.vue?dfb5","webpack:///./src/components/RulerX.vue","webpack:///./src/components/RulerX.vue?ebd1","webpack:///./src/components/RulerY.vue?4fa8","webpack:///./src/components/RulerY.vue","webpack:///./src/components/RulerY.vue?d21f","webpack:///./src/components/ZoomPanel.vue","webpack:///./src/components/ZoomPanel.vue?c8ca","webpack:///./src/components/ComponentBoard.vue","webpack:///./src/components/ComponentBoardItem.vue","webpack:///./src/assets/moduleSamples/SampleChamber.vue","webpack:///./src/assets/moduleSamples/SampleChamber.vue?94b9","webpack:///./src/assets/moduleSamples/SampleDelayChannel.vue","webpack:///./src/assets/moduleSamples/SampleDelayChannel.vue?001e","webpack:///./src/assets/moduleSamples/SampleFilter.vue","webpack:///./src/assets/moduleSamples/SampleFilter.vue?790e","webpack:///./src/assets/moduleSamples/SampleTeslaValve.vue","webpack:///./src/assets/moduleSamples/SampleTeslaValve.vue?df6d","webpack:///./src/assets/moduleSamples/SampleDroplet.vue","webpack:///./src/assets/moduleSamples/SampleDroplet.vue?b677","webpack:///./src/assets/moduleSamples/SampleTransition.vue","webpack:///./src/assets/moduleSamples/SampleTransition.vue?8ce8","webpack:///./src/components/ComponentBoardItem.vue?51ba","webpack:///./src/components/ComponentPropertyBoard.vue","webpack:///./src/components/ComponentPropertyBoard.vue?1200","webpack:///./src/components/ComponentBoard.vue?c809","webpack:///./src/components/PanelRight.vue","webpack:///./src/components/PanelRightItems/PanelRightProperty.vue","webpack:///./src/components/PanelRightItems/PanelRightProperty.vue?5342","webpack:///./src/components/PanelRightItems/PanelRightDRC.vue?9633","webpack:///./src/library/utilities/designRuleCheck.ts","webpack:///./src/components/PanelRightItems/PartListButton.vue?3844","webpack:///./src/components/PanelRightItems/PartListButton.vue","webpack:///./src/components/PanelRightItems/PartListButton.vue?3fad","webpack:///./src/components/PanelRightItems/PanelRightDRC.vue","webpack:///./src/components/PanelRightItems/PanelRightDRC.vue?0583","webpack:///./src/components/PanelRightItems/PanelRightPartList.vue?d210","webpack:///./src/components/PanelRightItems/PanelRightPartList.vue","webpack:///./src/components/PanelRightItems/PanelRightPartList.vue?00e1","webpack:///./src/components/PanelRight.vue?86ef","webpack:///./src/components/StartModal.vue","webpack:///./src/components/StartModal.vue?5fbc","webpack:///./src/components/ChannelSegLengthInput.vue","webpack:///./src/components/ChannelSegLengthInput.vue?40d1","webpack:///./src/components/RadiusInput.vue","webpack:///./src/components/RadiusInput.vue?f3be","webpack:///./src/components/OutputOptionModal.vue","webpack:///./src/components/STLPreview.vue","webpack:///./src/components/STLPreviewWindow.vue","webpack:///./src/components/STLPreviewWindow.vue?68f0","webpack:///./src/components/STLPreview.vue?8629","webpack:///./src/components/OutputOptionModal.vue?06cf","webpack:///./src/components/Help.vue","webpack:///./src/components/Help.vue?8aa5","webpack:///./src/App.vue?8ecf","webpack:///./src/lang/EN.js","webpack:///./src/lang/index.js","webpack:///./src/main.ts","webpack:///./src/assets/logo/Logo.svg","webpack:///./src/App.vue?fad6","webpack:///./src/components/TheFooter.vue?fb02","webpack:///./src/components/SvgLevelConnectionAll.vue?b8c0","webpack:///./src/components/RulerX.vue?6559","webpack:///./src/components/Toolbar.vue?ade3","webpack:///./src/components/ZoomPanel.vue?a75a","webpack:///./src/components/SvgElementHighlight.vue?2643"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","_createElementVNode","id","viewBox","refX","refY","markerWidth","markerHeight","orient","fill","x","y","width","height","fill-opacity","mask","class","xmlns","_createElementBlock","onMousemove","_ctx","$event","onMouseenter","onMouseleave","_createVNode","_component_TheHeader","_component_Toolbar","_component_TheFooter","style","transform","transform-origin","ref","tabindex","onWheel","onMousedown","handleMouseDownLeft","onMouseup","handleMouseUpLeft","onContextmenu","onKeydown","deleteCrtElement","undo","redo","copy","paste","startPanning","togglePrecision","onKeyup","stopPanning","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","globalToWindow","chipProperties","_hoisted_7","stroke","marker-start","marker-end","_component_SvgCanvas","_component_RulerX","_component_RulerY","selectionState","_hoisted_11","w","h","stroke-width","stroke-dasharray","_component_ZoomPanel","showInput","_createBlock","_component_ChannelSegLengthInputVue","editingNodeElement","_component_RadiusInputVue","_component_PanelRight","_component_ComponentBoard","_component_StartModal","_component_PanelLevel","_component_OutputOptionModalVue","_component_HelpVue","role","data-bs-toggle","data-bs-target","_hoisted_1","_Fragment","tool","idx","_component_ToolbarButton","title","_resolveDynamicComponent","icon","Component","toggled","_component_ComponentIcon","Channel","Polygon","InletOutlet","InterLayer","RoundedCorner","Circle","_component_ToolbarCustomizedVue","_component_ToolbarIconVue","onClick","isActive","_renderSlot","defaultPropertyStep","layerColorDefault","postUrl","gridSizeList","hundredthViewBoxSize","ChannelPort","constructor","elm","this","position","elementId","dummyChannelPort","ChannelPoint","point","Array","buildOutput","isConnectedToPort","roundedRadius","connectedPort","connectedPortElement","connectedPortIndex","clone","cid","channelWidth","pointCopy","bridges","forEach","b","bridgeCopy","makeCopy","contentStore","useContentStore","addElmentToContent","resetBridges","ChannelPortWithSize","super","portWidth","portHeight","ContentUnitGeneral","layer","ContentUnit","BasicPart","setTranslate","translate","resetTranslate","ShapeType","STLLoadingState","Mode","SelectionState","MouseOperation","ChannelType","Vector3","z","Point","chipLengthY","PayloadShape","PayloadPolygon","points","dir_X","dir_Y","dir_Z","direction","PayloadCircle","center","radius","PayloadChamfer","radius_top","PayloadLine","start","end","PayloadCurve","corner","tangent","PayloadChannel","shapes","pointTransform","px","py","origin","Math","PI","cosR","cos","sinR","sin","x0","y0","x1","y1","Rectangle","vueComponent","isFilled","buildPayload","rotation","res","x2","x3","x4","y2","y3","y4","octPoints","circleCenter","distX","distY","map","p0","cornerPoints","ps","cx","cy","polyPath","polygonPathDefinition","pathSegments","makeAbsolute","parseSVG","vertices","addPolygonPoints","plPoints","err","console","log","Path","sW","strokeWidth","buildPayloadPathPrimitive","buildPayloadPolygonPrimitive","parsePathSegment","command","addTransitionCircle","channelHeight","lastCommand","seg","roundedCornerCenter","st","ed","rx","ry","additional","calculateCenterTangent","sweep","largeArc","addLine","tx","ty","tmp0X","tmp0Y","h2","sqrt","cosA","min","sinA","k","tmpX","tmpY","initializeChannelPortsWithoutSize","numberOfChannelPorts","channelPorts","initializeChannelPortsWithSize","ModuleTemplate","pos","topLeftCorner","centerPoint","borderShapes","maskShapes","getHeight","properties","Map","entries","set","fromEntries","moduleIdx","getModuleIndex","updatePort","updatePortHelper","initializeChannelPorts","portSizeFixed","updatePosition","updateRender","setRotation","elementsToRender","hOffset","channels","ss","concat","ports","getDirection","p1","p2","shiftPointWithDirection","dist","ratio","calculateCoordsWithDirection","distance","getBorderPoints","bridge","bridge_dx","bridge_dy","lengthLeft","lengthRight","channelSegLen","a_x","channelSegment","posOnSeg","a_y","a_z","kb","b_x","b_y","kc","c_x","c_y","left","right","top","buildBridgePayload","slopL","slopeL","slopR","slopeR","max","positiveDir","negativeDir","tan","dist1","dist2","center1","start1","end1","end1_proj","tmp","dist5","p5","dist6","p6","p5_z","start3","end3","p7","center3","end1shifted","start3shifted","dist3","p3","dist4","p4","center2","start2","end2","end2_proj","end3Shifted","end2Shifted","startPoint","endPoint","channel","channelDef","addPortTransition","buildChannelPayload","lastPoint","sort","b1","b2","bridgePayload","tmp_v","B","A","C","AB","AC","dAB","dAC","tanAHalf","d0","ratio1","ratio2","arc_start","arc_end","P","ratio3","AP","arc_center","updateChannelPortPosition","channelPort","r1","step","unit","r2","channelType","count","contentMap","has","content","output","contenStore","offsetX","offsetY","chipThickness","h1","circle","chamfer","poly","SQRT2","LevelConnection","shape","startLv","endLv","calculateLocalCompensation","getLevelHeight","undefined","channelPoints","channelPoint","getElement","firstPoint","newId","setId","clonePoint","dummyChannelPoint","Bridge","connectedChannel","startPointIdx","display","show","cs","actDescription","newElm","move","delete","moveVertex","setProperty","setRoundedCorner","SetRoundedCorner","newVal","pre","oldVal","oldState","DeleteLevelAct","level","levelContent","levelId","label","layers","removeLevelSafely","CreateLevelAct","SetRotationAct","offset","ChangeChipPropertyAct","prop","ChangeStringPropertyAct","oldString","newString","subAct","rerenderIfIsModule","ChangeContentUnitPropertyAct","SetChannelSize","offsetW","offsetH","MovePolygonVertexAct","oldPos","polygonPoint","MoveChannelVertexAct","connectedToPortBefore","connectedToPortAfter","setChannelSize","newPos","MoveBridgeAct","oldChannelSeg","element","oldPosOnSeg","newChannelSeg","newPosOnSeg","MoveModuleAct","MoveNodeElmAct","MoveGroupAct","group","DeleteBasicElmAct","lv","DeleteGroupAct","PasteAct","BasicElementAct","useControlStore","crtId","crtGroupId","indexOf","controlStore","resetFlags","type","levelConnectionIds","pop","getLevelElmIds","useHistoryStore","defineStore","state","activities","actLenMax","actions","setPosition","baforeAddingNewActivity","addActivity","act","undoAct","redoAct","changePosition","toChange","reference","dir","changePositionAction","connectedToPort","historyStore","changePositionDraw","dirRef","R","atan2","R45","round","useChannelSegInputStore","lengthValue","channelPoint1","channelPoint2","lengthLocked","getters","positionX","coordinateStore","useCoordinateStore","svgXToWindow","positionY","svgYToWindow","lockedDistance","parseInt","segLength","cp1","cp2","toFixed","hideChannelSegLengthInput","showChannelSegLengthInput","setLengthDraw","newLength","isNaN","setLengthValue","updateChannelSegDirection","roundedGlobalCoords","globalCoords","globalToWindowHelper","g","windowToGlobalHelper","zoomInTranslate","zoomIdx","gridSize","globalTranslateX","globalTranslateY","mousePosition","innerWidth","innerHeight","zoomOutTranslate","windowCoords","snapping","coordsVisible","minPrecision","canvasSide","startX","ceil","startY","endX","floor","endY","precisionGrid","precision","windowTranslate","t0","t1","globalTransform","panWithMovement","movementX","movementY","windowToGlobal","roundCoords","changeCoords","glX","glY","channelInput","range","stop","from","_","zoomIn","zoomOut","zoomInAtMouse","zoomOutAtMouse","resetView","chipLengthX","setGlobalTranslate","ModuleCreatorTemplate","createModule","pendingModule","setNewModuleId","parseModule","Chamber","lengthX","lengthY","cornerRadius","ChamberCreator","updatePendingModule","resetModule","updatePendingModulePosition","Filter","pillarRow","pillarCol","pillarRadius","stepX","pillarX","stepY","pillarY","FilterCreator","DelayChannel","channelDist","turningsNum","turningRadius","portLength","pl","hHalf","pathDef","rep","repeat","DelayChannelCreator","TeslaValve","segPairNum","segLenX","segLenY","TeslaValveCreator","Droplet","disperseW","continuousW","dropletW","dropletL","connectionL","continuousPath","dispersePath","dropletPath","DropletCreator","TransitionWidth","transitionL","width1","width2","w1","w2","widthMax","connection1","connection2","TransitionWidthCreator","TransitionHeight","height_after","toBuild","v1","v2","v3","v4","TransitionHeightCreator","useMoudleStore","moduleFactory","ModuleFactory","selectedModuleIdx","selectedModuleCreator","selectModule","initiallizeModuleFactory","creator","moduleCreator","ComponentPolygon","shapeType","comp","Solid","Hollow","ComponentCircle","cw","c1","c2","dummyPoint","dummyChannel","dummyPolygon","dummyChannelSegment","isTheSamePoint","Select","moduleBoardVisible","isAddingChannel","isAddingPolygon","selectRect","operation","Idle","crtChannel","crtPolygon","editSettings","circleRadius","isPlacingModule","canPlaceBridge","showLevelPopper","startRotation","crtVertexIdx","channelSeg","channelSegPre","posOnSegPre","roundedChannelRadius","selectedChannelPoints","movingChannelPoint","movingPointConnectedToPort","isPanning","defaultShapeType","defaultChannelWidth","defaultPortRadius","defaultViaRadius","isEditingBridge","MovingBridge","isEditingChannelPoint","MovingChannelVertex","editingCircleRadius","coordinate","editingStrokeWidth","focusOnWorkarea","document","getElementById","focus","hidePopper","resetAppSettings","coordinateSrtore","channelSegInput","$reset","resetCount","mouseup","setSelectionState","hideElm","EditingdSingleElement","crtElement","crtLayer","EditingGroup","removeSelectedRoundedCorner","isSelected","addSelectedRounedCorner","confirmEditingRoundedCorner","discardEditingRoundedCorner","setChannelType","setRoundedChannelRadius","setCircleRadius","startRotatingModule","RotatingComponent","stopRotatingModule","offSet","bindChannelPort","port","newPoint","newAct","setPosOnSeg","setBridgeChannelSeg","startMovingChanelVertex","startMovingPolygonVertex","MovingPolygonVertex","stopMovingPolygonVertex","stopMovingChannelVertex","setLevelEnd","l2","abortCrtOperation","stepOutChannel","stepOutPolygon","switchMode","showModuleBoard","heightOfCrtLayer","stopMivingGroup","stopMovingBridge","stopMovingElement","updateGroupPosition","updateCrtElmPosition","startMovingGroup","MovingGroup","startMovingElement","MovingElement","finishBridgePlacement","newBridge","crtLayerIds","enableBridgePlacement","disableBridgePlacement","finishLevelConnectionPlacement","newLevel","finishCtrlNodePlacement","newCtrlNode","startModulePlacement","moduleStore","coordsStore","cancelModulePlacement","finishModulePlacement","newModule","e","finishCirclePlacement","addNewChannel","defaultModuleHeight","addNewPolygon","setCrtModuleRotation","setCrtChannelEnd","abs","addChannelPoint","addPolygonPoint","stopAddingChannel","Selecting","IsSelectingGroup","getSelectedGroup","initializeSelectRect","selectElement","mouseDownOnElement","hideModuleBoard","setSelectRect","normalizeSelectRect","resetSelectRect","hasIntersection","rect","getBoundingClientRect","isInsideSelectRest","selectedGroup","setGroupSelect","globalCompensationPolygon","elevation","localCompMin","minAt","localCompMax","maxAt","maxmin","buildRequestBody","globalCompCheck","globalComp","localCompCheck","requestBody","crosslayerConnections","relation","general","thickness","size","layersArr","values","l1","components","localComp","contentIds","connection","newLayer","compensation","JSON","stringify","sweepingFlag","a","getChannelSegDefinition","flag","levelCount","color","defaultChipProperties","stlData","ArrayBuffer","stlLoadingState","clipboard","showRadiusInput","maxLevelHeight","colorOfCrtLayer","bottomElevation","crtNodeElmRadiusProperty","channelSegmentsForBridgePlacement","channelPointsCanBeRounded","reduce","channelDefinition","addToContent","history","removeFromSelected","target","findIndex","resetCrtGroup","discardSelected","editOnCrtElement","keys","next","deleteLevel","tid","transition","getColorByIdx","createNewLevel","newLevelInfo","initializeContent","chipPropertyValues","changeCrtLayer","control","moduleTransform","requestNewStlData","binary","Loading","token","localStorage","header","Headers","append","fetch","method","headers","body","then","resp","ok","arrayBuffer","Succeed","catch","Fail","changeChipProperty","val","active","defineComponent","props","String","Boolean","Number","__exports__","ToolbarIconVue","setup","setMode","fill-rule","clip-rule","script","_hoisted_6","_component_NodeRoundIcon","_component_NodeSquareIcon","NodeRoundIcon","NodeSquareIcon","positionStyle","computed","btnPosY","_hoisted_9","_component_ToolbarShapeTypeVue","for","ToolbarShapeTypeVue","_component_ToolbarChannelWidthVue","_component_ToolbarChannelTypeVue","_component_ToolbarRadiusVue","ToolbarChannelTypeVue","ToolbarRadiusVue","ToolbarChannelWidthVue","ToolbarButton","ComponentIcon","SelectIcon","BridgeIcon","InletOutletIcon","ChannelIcon","RoundedCornerIcon","LevelConnectionIcon","PolygonIcon","CircleIcon","ToolbarCustomizedVue","tools","opacity","render","_cache","$props","$setup","$data","$options","_component_SvgElement","_resolveComponent","_component_SvgLevelConnectionAllVue","_component_SvgCursor","_component_SvgChannelDraw","_component_SvgPolygonDrawVue","_component_SvgEditElement","_component_SvgEditGroupVue","_component_SvgChannelPortsVue","_component_ChannelSegmentsForBridgePlacementVue","_component_SvgChannelPointsRoundedVue","_openBlock","_renderList","_normalizeClass","crtLayerElm","_withModifiers","shiftKey","ctrlKey","_createCommentVNode","polygon","_component_SvgModule","required","hightlightOffset","default","stroke-linejoin","gradientId","gradientRef","topOffset","vx","vy","insersect","PrimitiveChannel","PrimitiveCircle","PrimitivePolygon","PrimitiveRectangle","maskId","maskRef","SvgChannelVue","SvgFlowControlNodeVue","SvgBridgeVue","SvgModule","SvgLevelConnectionVue","SvgPolygonVue","SvgCircleVue","_toDisplayString","vertex","index","_component_SvgModuleVue","_component_SvgFlowControlNodeVue","_component_SvgBridgeVue","bridgeRotation","bridgeWidth","_hoisted_10","_component_SvgLevelConnectionVue","SvgModuleVue","updateModulePosition","onMouseLeave","line","mouseMoveOnSegment","mouseClickOnSegment","mouseEnterSegment","ab","ac","bc","onBeforeUnmount","_component_SvgElementHighlight","mouseDownOnChannelPoint","mouseDownOnPolygonPoint","showNumberInput","pos_x","pageX","pos_y","pageY","SvgElementHighlight","hover","hoverPort","portsOnCrtLevel","setHoverPort","canBeRounded","pointer","_component_SvgElementHighlightVue","mouseDownOnSelected","SvgElementHighlightVue","stroke-linecap","SvgElement","SvgChannelDraw","SvgCursor","ChannelSegmentsForBridgePlacementVue","SvgEditElement","SvgChannelPortsVue","SvgChannelPointsRoundedVue","SvgLevelConnectionAllVue","SvgEditGroupVue","SvgPolygonDrawVue","_component_PanelLevelVue","_component_Popper","_component_LevelVue","_component_PopperWrapperGreen","_withCtx","arrow","showPopper","levelPreviewStart","levelPreviewPoint","layerButtonColorStyle","backgroundColor","changeLevelHeight","addNewLevel","_mergeProps","Popper","LevelVue","PanelLevelVue","PopperWrapperGreen","loadDesign","file","reader","FileReader","onload","design","parse","levelConnections","levelConnection","polygons","circles","inOutlets","inOutlet","filter","readAsText","generateDesign","chip","layerId","textBlob","Blob","createElement","download","href","URL","createObjectURL","click","isEditingName","newTitle","moduleNameInput","onSubmit","$patch","startEditingTitle","nextTick","designLoader","coordinateStrore","nums","num","_withScopeId","_pushScopeId","_popScopeId","_hoisted_8","_defineComponent","__name","__props","args","_unref","disabled","aria-hidden","data-bs-dismiss","aria-label","_component_ComponentBoardItem","_component_ComponentPropertyBoard","sample","moduleName","description","SampleChamber","SampleDelayChannel","SampleFilter","SampleTeslaValve","SampleDroplet","SampleTransition","fillColor","data-bs-backdrop","data-bs-keyboard","onInput","_hoisted_12","_hoisted_13","_hoisted_15","_hoisted_16","onValueChange","newValue","deltaY","ComponentBoardItem","ComponentPropertyBoard","data-bs-scroll","aria-labelledby","aria-expanded","aria-controls","_component_PanelRightPropertyVue","_component_PanelRightPartListVue","_component_PanelRightDRCVue","activity","onChange","selected","onBlur","_hoisted_21","_hoisted_22","_hoisted_24","_hoisted_26","_hoisted_27","_hoisted_29","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_36","valueCache","onElmPropInput","onFocusProp","onFocusRotation","onRotationPropChange","setTimeout","onElmPropChange","onChipPropChange","propIdx","changeStartLv","changeEndLv","changePropertyOnWheel","activeElement","onWheelEditElement","_hoisted_14","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_23","_hoisted_25","_component_PartListButtonVue","runDRC","_createTextVNode","designRules","designRule","_withDirectives","isChecked","_vModelCheckbox","channelWidthMin","_vModelText","compDistMin","minPortRadius","minViaRadius","failedItems","failedElm","designRuleDescription","channelWidthCheck","compMinDistCheck","overlappingCheck","layerOverlappingCheck","elmOutOfBoundaryCheck","minPortRadiusCheck","minViaRadiusCheck","reactive","runCheck","distCheckFailed","id1","id2","rect1","rect2","DOMRect","coordonateStore","dWindow","distLessThan","fullCoverage","outOfBondCheck","chipBoundary","heightLimit","dr","PartListButtonVue","_normalizeStyle","eid","elmIdx","PanelRightPropertyVue","PanelRightDRCVue","PanelRightPartListVue","selectFromPartList","accept","files","restoreDefaultChipProps","initializeChip","autocomplete","maxlength","formStyle","onMounted","inputRef","select","workArea","valueCacheR2","onFocus","_component_STLPreviewVue","_hoisted_28","_hoisted_30","_hoisted_35","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_44","_hoisted_46","_hoisted_47","_hoisted_48","_hoisted_49","_component_STLPreviewWindow","isBinary","DataView","face_size","n_faces","getUint32","expect","byteLength","solid","off","getUint8","parseBinary","faces","hasColors","colors","Float32Array","defaultR","defaultG","defaultB","dataOffset","faceLength","geometry","THREE","normals","face","normalX","getFloat32","normalY","normalZ","packedColor","getUint16","vertexstart","componentIdx","setAttribute","parseASCII","patternSolid","patternFace","faceCounter","patternFloat","source","patternVertex","RegExp","patternNormal","normal","groupCount","startVertex","endVertex","exec","vertexCountPerFace","normalCountPerFace","text","parseFloat","error","addGroup","ensureString","buffer","decodeText","Uint8Array","ensureBinary","array_buffer","charCodeAt","parseSTL","binData","addMaterialAndRender","scene","material1","transparent","side","mesh","add","light1","light2","camera","lookAt","renderer","antialias","setSize","setClearColor","container","childNodes","replaceChild","domElement","controls","OrbitControls","addEventListener","init","scale","downloadSTL","STLPreviewWindow","STLPreviewVue","precisionIdx","precisionValue","globalChecked","localChecked","globalCompensation","localCompensationMin","localCompensationMax","showStlPreview","loadSTL","downloadSVGZip","zip","JSZip","svgTag","svgContent","layerContent","svgData","innerHTML","generateAsync","saveAs","myModalEl","Toolbar","TheFooter","TheHeader","RulerX","RulerY","ZoomPanel","ComponentBoard","SvgCanvas","PanelRight","StartModal","PanelLevel","ChannelSegLengthInputVue","RadiusInputVue","OutputOptionModalVue","HelpVue","created","handleMouseMove","clientX","clientY","handleMouseUpRight","selectRectAttr","originTransform","bgTransform","bgSize","pathOfOrigin","showCoords","hideCoords","showInputDraw","mounted","$nextTick","beforeUnmount","removeEventListener","welcomeWord","en","app","createApp","App","use","createPinia","i18n","createI18n","locale","fallbackLocale","messages","languages","mount"],"mappings":"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","file":"js/app.d43d5462.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./RulerY.vue?vue&type=style&index=0&id=1beffa4e&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Level.vue?vue&type=style&index=0&id=00cff219&scoped=true&lang=css\"","module.exports = __webpack_public_path__ + \"img/Logo_Flui3d.34525e19.svg\";","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./SvgCanvas.vue?vue&type=style&index=0&id=42fce650&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ComponentPropertyBoard.vue?vue&type=style&index=0&id=8d925614&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./OutputOptionModal.vue?vue&type=style&index=0&id=6ac1a8a4&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./PanelLevel.vue?vue&type=style&index=0&id=ca2f9c40&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./STLPreview.vue?vue&type=style&index=0&id=296ddd4c&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./PopperWrapperGreen.vue?vue&type=style&index=0&id=37b09007&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./PanelRight.vue?vue&type=style&index=0&id=017111a3&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./SvgChannelDraw.vue?vue&type=style&index=0&id=5be8b522&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./TheHeader.vue?vue&type=style&index=0&id=9b5b1b92&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./PanelRightDRC.vue?vue&type=style&index=0&id=2bdce20e&scoped=true&lang=css\"","\n\n\n\n\n","\n\n\n\n","\n\n","const defaultPropertyStep = 50;\n\n// default color = layerColorDefault[idx % layerColorDefault.length]\nconst layerColorDefault = [\n \"#0d6efd\",\n \"#6610f2\",\n \"#dc3545\",\n \"#fd7e14\",\n \"#198754\",\n \"#0dcaf0\"\n];\n\nconst postUrl = \"https://api.flui3d.org/generate\";\n\nconst gridSizeList = [\n 1, 1.1, 1.25, 1.5, 1.75, 2, 2.5, 3, 3.5, 4, 5, 6, 7, 8, 9, 10, 11, 12.5, 15,\n 17.5, 20, 22.5, 25, 27.5, 30, 35\n]; // 100 um displayed in px\nconst hundredthViewBoxSize = 10000;\nexport {\n defaultPropertyStep,\n layerColorDefault,\n postUrl,\n gridSizeList,\n hundredthViewBoxSize\n};\n","import { useContentStore } from \"@/stores/content\";\nimport { Bridge } from \"./bridge\";\nimport { ChannelPointOutput, ContentUnitOutput } from \"./typeDefinations\";\n\nexport class ChannelPort {\n elementId: string;\n idx: number;\n position = [0, 0];\n isConnected = false;\n constructor(x: number, y: number, elm: string, idx = 0) {\n this.position[0] = x;\n this.position[1] = y;\n this.elementId = elm;\n this.idx = idx;\n }\n}\n\nconst dummyChannelPort = new ChannelPort(0, 0, \"\");\n\nexport class ChannelPoint {\n position: number[];\n isConnectedToPort = false;\n connectedPort = dummyChannelPort;\n roundedRadius = 0;\n bridges = Array();\n isSelected = false; // (in rounded corner mode)\n constructor(point: number[]) {\n this.position = point;\n }\n\n buildOutput(): ChannelPointOutput {\n const point = {\n position: this.position,\n isConnectedToPort: this.isConnectedToPort,\n roundedRadius: this.roundedRadius,\n connectedPort: {\n connectedPortElement: this.connectedPort.elementId,\n connectedPortIndex: this.connectedPort.idx\n }\n };\n return point;\n }\n\n // bridge's channelSeg.end will be set in channel\n clone(cid: string, channelWidth: number, idx: number): ChannelPoint {\n const pointCopy = new ChannelPoint(this.position.slice());\n pointCopy.roundedRadius = this.roundedRadius;\n this.bridges.forEach((b) => {\n const bridgeCopy = b.makeCopy(pointCopy, cid, channelWidth, idx);\n // add to content\n const contentStore = useContentStore();\n contentStore.addElmentToContent(bridgeCopy);\n pointCopy.bridges.push(bridgeCopy);\n });\n return pointCopy;\n }\n\n resetBridges(): void {\n this.bridges = Array();\n }\n}\n\nexport class ChannelPortWithSize extends ChannelPort {\n portWidth: number;\n portHeight: number;\n constructor(\n x: number,\n y: number,\n cid: string,\n idx: number,\n w: number,\n h: number\n ) {\n super(x, y, cid, idx);\n this.portWidth = w;\n this.portHeight = h;\n }\n}\n\nexport type ChannelSegment = {\n cid: string;\n idx: number;\n start: ChannelPoint;\n end: ChannelPoint;\n width: number;\n};\n\nexport abstract class ContentUnitGeneral {\n static count = 0;\n layer: string;\n abstract id: string;\n abstract get type(): string;\n abstract buildOutput(layer: string): ContentUnitOutput;\n constructor(layer: string) {\n this.layer = layer;\n }\n}\n\nexport abstract class ContentUnit extends ContentUnitGeneral {\n display = true;\n constructor(layer: string) {\n super(layer);\n }\n}\n\nexport abstract class BasicPart extends ContentUnit {\n id = \"\";\n translate = [0, 0];\n // called with paste\n abstract clone(): BasicPart;\n abstract updatePosition(x: number, y: number): void;\n setTranslate(x: number, y: number): void {\n this.translate[0] = x;\n this.translate[1] = y;\n }\n resetTranslate(): void {\n this.translate[0] = this.translate[1] = 0;\n }\n}\n\nexport enum ShapeType {\n Hollow,\n Solid,\n Channel\n}\n\nexport enum STLLoadingState {\n Idle,\n Loading,\n Succeed,\n Fail\n}\n\nexport enum Mode {\n Select,\n Channel,\n Polygon,\n Circle,\n InletOutlet,\n Bridge,\n RoundedCorner,\n InterLayer,\n Component\n}\n\nexport enum SelectionState {\n Idle,\n IsSelectingGroup,\n EditingdSingleElement,\n EditingGroup\n}\n\nexport enum MouseOperation {\n Idle,\n Selecting,\n MovingElement,\n MovingBridge,\n MovingChannelVertex,\n MovingGroup,\n RotatingComponent,\n MovingPolygonVertex\n}\n\nexport enum ChannelType {\n Round,\n Square\n}\n","import { useContentStore } from \"@/stores/content\";\n\nclass Vector3 {\n x: number;\n y: number;\n z: number;\n constructor(x: number, y: number, z: number) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n}\n\nclass Point {\n x: number;\n y: number;\n z: number;\n constructor(x: number, y: number, z: number) {\n const contentStore = useContentStore();\n this.x = x;\n this.y = contentStore.chipLengthY - y;\n this.z = z;\n }\n}\n\nabstract class PayloadShape {\n fill: boolean;\n height?: number;\n constructor(fill: boolean, height?: number) {\n this.fill = fill;\n if (height) this.height = height;\n }\n}\n\nclass PayloadPolygon extends PayloadShape {\n type = \"Polygon\";\n points: Point[];\n direction: Point;\n constructor(\n points: Point[],\n fill: boolean,\n dir_X: number,\n dir_Y: number,\n dir_Z: number\n ) {\n super(fill);\n this.points = points;\n this.direction = new Vector3(dir_X, -dir_Y, dir_Z);\n }\n}\n\nclass PayloadCircle extends PayloadShape {\n type = \"Circle\";\n center: Point;\n radius: number;\n constructor(center: Point, fill: boolean, height: number, radius: number) {\n super(fill, height);\n this.center = center;\n this.radius = radius;\n }\n}\n\nclass PayloadChamfer extends PayloadCircle {\n type = \"Chamfer\";\n radius_top: number;\n constructor(\n center: Point,\n fill: boolean,\n height: number,\n radius: number,\n radius_top: number\n ) {\n super(center, fill, height, radius);\n this.radius_top = radius_top;\n }\n}\n\nclass PayloadLine {\n type = \"Line\";\n start: Point;\n end: Point;\n height: number;\n width: number;\n constructor(start: Point, end: Point, width: number, height: number) {\n this.start = start;\n this.end = end;\n this.width = width;\n this.height = height;\n }\n}\n\n// width : parallel to the plane\n// height :perpendicular to the plane\nclass PayloadCurve extends PayloadLine {\n type = \"Curve\";\n center: Point;\n tangent: Point;\n constructor(\n center: Point,\n start: Point,\n end: Point,\n corner: Point,\n width: number,\n height: number\n ) {\n super(start, end, width, height);\n this.center = center;\n this.tangent = new Vector3(\n (corner.x - start.x) / 1000,\n (corner.y - start.y) / 1000,\n (corner.z - start.z) / 1000\n );\n }\n}\n\nclass PayloadChannel {\n shapes: (PayloadLine | PayloadCircle)[];\n constructor(shapes: (PayloadLine | PayloadCircle)[]) {\n this.shapes = shapes;\n }\n}\n\nexport {\n Point,\n Vector3,\n PayloadCircle,\n PayloadPolygon,\n PayloadShape,\n PayloadLine,\n PayloadCurve,\n PayloadChamfer,\n PayloadChannel\n};\n","import { useContentStore } from \"@/stores/content\";\nimport { parseSVG, makeAbsolute, CommandMadeAbsolute } from \"svg-path-parser\";\nimport {\n PayloadCircle,\n Point,\n PayloadPolygon,\n PayloadShape,\n PayloadLine,\n PayloadCurve,\n PayloadChannel\n} from \"./payloadPrimitives\";\n\nexport const pointTransform = (\n px: number,\n py: number,\n translate: number[],\n r: number,\n origin: number[]\n): [number, number] => {\n if (r === 0 && translate[0] === 0 && translate[1] === 0) {\n return [px, py];\n }\n // rotate -> translate\n const radius = (r / 180) * Math.PI;\n const cosR = Math.cos(radius);\n const sinR = Math.sin(radius);\n const x0 = px - origin[0];\n const y0 = py - origin[1];\n const x1 = x0 * cosR - y0 * sinR;\n const y1 = x0 * sinR + y0 * cosR;\n return [x1 + origin[0] + translate[0], y1 + origin[1] + translate[1]];\n};\n\nexport class Rectangle {\n x: number;\n y: number;\n r: number;\n width: number;\n height: number;\n isFilled: boolean;\n static vueComponent = \"PrimitiveRectangle\";\n get vueComponent(): string {\n return Rectangle.vueComponent;\n }\n constructor(\n x: number,\n y: number,\n r: number,\n width: number,\n height: number,\n fill: boolean\n ) {\n this.x = x;\n this.y = y;\n this.r = r;\n this.width = width;\n this.height = height;\n this.isFilled = fill;\n }\n buildPayload(\n z: number,\n height: number,\n translate: number[],\n rotation: number,\n origin: number[]\n ): PayloadShape[] | void {\n if (this.width === 0 || this.height === 0) return;\n const res = Array();\n\n const x2 = this.x + this.r;\n const x3 = this.x + this.width - this.r;\n const x4 = this.x + this.width;\n\n const y2 = this.y + this.r;\n const y3 = this.y + this.height - this.r;\n const y4 = this.y + this.height;\n\n if (this.r > 0) {\n const octPoints = Array<[number, number]>();\n const circleCenter = Array<[number, number]>();\n const distX = x2 - x3 !== 0;\n const distY = y2 - y3 !== 0;\n octPoints.push([x2, this.y]);\n if (distX) octPoints.push([x3, this.y]);\n octPoints.push([x4, y2]);\n if (distY) octPoints.push([x4, y3]);\n octPoints.push([x3, y4]);\n if (distX) octPoints.push([x2, y4]);\n octPoints.push([this.x, y3]);\n if (distY) octPoints.push([this.x, y2]);\n\n circleCenter.push([x2, y2]);\n if (distX) circleCenter.push([x3, y2]);\n if (distY) circleCenter.push([x3, y3]);\n if (distX && distY) circleCenter.push([x2, y3]);\n\n res.push(\n new PayloadPolygon(\n octPoints.map((p0) => {\n const p = pointTransform(p0[0], p0[1], translate, rotation, origin);\n return new Point(p[0], p[1], z);\n }),\n this.isFilled,\n 0,\n 0,\n height\n )\n );\n circleCenter.forEach((p0) => {\n const p = pointTransform(p0[0], p0[1], translate, rotation, origin);\n res.push(\n new PayloadCircle(\n new Point(p[0], p[1], z),\n this.isFilled,\n height,\n this.r\n )\n );\n });\n } else {\n const cornerPoints = Array<[number, number]>();\n cornerPoints.push([this.x, this.y]);\n cornerPoints.push([x4, this.y]);\n cornerPoints.push([x4, y4]);\n cornerPoints.push([this.x, y4]);\n const ps = cornerPoints.map((p0) => {\n const p = pointTransform(p0[0], p0[1], translate, rotation, origin);\n return new Point(p[0], p[1], z);\n });\n res.push(new PayloadPolygon(ps, this.isFilled, 0, 0, height));\n }\n return res;\n }\n}\n\nexport class Circle {\n cx: number;\n cy: number;\n r: number;\n isFilled: boolean;\n static vueComponent = \"PrimitiveCircle\";\n\n get vueComponent(): string {\n return Circle.vueComponent;\n }\n constructor(cx: number, cy: number, r: number, fill: boolean) {\n this.cx = cx;\n this.cy = cy;\n this.r = r;\n this.isFilled = fill;\n }\n\n buildPayload(\n z: number,\n height: number,\n translate: number[],\n rotation: number,\n origin: number[]\n ): [PayloadCircle] | void {\n if (this.r === 0) return;\n const p = pointTransform(this.cx, this.cy, translate, rotation, origin);\n return [\n new PayloadCircle(new Point(p[0], p[1], z), this.isFilled, height, this.r)\n ];\n }\n}\n\n// (rounded) polygons, solid only\nexport class Polygon {\n points: number[][];\n isFilled: boolean;\n r: number;\n static vueComponent = \"PrimitivePolygon\";\n get vueComponent(): string {\n return Polygon.vueComponent;\n }\n constructor(points: number[][], fill: boolean, r?: number) {\n this.points = points;\n this.isFilled = fill;\n this.r = r ? r : 0;\n }\n buildPayload(\n z: number,\n height: number,\n translate: number[],\n r: number,\n origin: number[]\n ): PayloadShape[] | void {\n try {\n if (this.r > 0) {\n const shapes = Array();\n const contentStore = useContentStore();\n const polyPath = contentStore.polygonPathDefinition(this.points, r);\n const pathSegments = makeAbsolute(parseSVG(polyPath));\n const circleCenter = Array();\n const vertices = Array();\n for (let i = 1; i < pathSegments.length; ++i) {\n addPolygonPoints(\n pathSegments[i],\n z,\n translate,\n r,\n origin,\n circleCenter,\n vertices\n );\n }\n shapes.push(new PayloadPolygon(vertices, this.isFilled, 0, 0, height));\n circleCenter.forEach((c) => {\n shapes.push(new PayloadCircle(c, this.isFilled, height, this.r));\n });\n return shapes;\n } else {\n const plPoints = this.points.map((p0) => {\n const p = pointTransform(p0[0], p0[1], translate, r, origin);\n return new Point(p[0], p[1], z);\n });\n return [new PayloadPolygon(plPoints, this.isFilled, 0, 0, height)];\n }\n } catch (err) {\n console.log(err);\n }\n }\n}\n\n// closed or open\nexport class Path {\n d: string;\n strokeWidth: number;\n isFilled: boolean;\n static vueComponent = \"PrimitiveChannel\";\n get vueComponent(): string {\n return Path.vueComponent;\n }\n constructor(d: string, sW: number, fill: boolean) {\n this.d = d;\n this.strokeWidth = sW;\n this.isFilled = fill;\n }\n buildPayload(\n z: number,\n height: number,\n translate: number[],\n rotation: number,\n origin: number[]\n ): PayloadChannel {\n return buildPayloadPathPrimitive(\n this.d,\n z + height / 2,\n height,\n this.strokeWidth,\n translate,\n rotation,\n origin\n );\n }\n}\n\nexport const buildPayloadPolygonPrimitive = (\n points: number[][],\n isFilled: boolean,\n radius: number,\n z: number,\n height: number,\n translate: number[],\n rotation: number,\n origin: number[]\n): PayloadShape[] | void => {\n try {\n if (radius > 0) {\n const shapes = Array();\n const contentStore = useContentStore();\n const polyPath = contentStore.polygonPathDefinition(points, radius);\n const pathSegments = makeAbsolute(parseSVG(polyPath));\n const circleCenter = Array();\n const vertices = Array();\n for (let i = 1; i < pathSegments.length; ++i) {\n addPolygonPoints(\n pathSegments[i],\n z,\n translate,\n rotation,\n origin,\n circleCenter,\n vertices\n );\n }\n shapes.push(new PayloadPolygon(vertices, isFilled, 0, 0, height));\n circleCenter.forEach((c) => {\n shapes.push(new PayloadCircle(c, isFilled, height, radius));\n });\n return shapes;\n } else {\n const plPoints = points.map((p0) => {\n const p = pointTransform(p0[0], p0[1], translate, rotation, origin);\n return new Point(p[0], p[1], z);\n });\n return [new PayloadPolygon(plPoints, isFilled, 0, 0, height)];\n }\n } catch (err) {\n console.log(err);\n }\n};\n\nexport const buildPayloadPathPrimitive = (\n d: string,\n z: number,\n height: number,\n width: number,\n translate: number[],\n rotation: number,\n origin: number[]\n): PayloadChannel => {\n const shapes = Array();\n const pathSegments = makeAbsolute(parseSVG(d));\n for (let i = 1; i < pathSegments.length; ++i) {\n parsePathSegment(\n pathSegments[i],\n z,\n translate,\n rotation,\n origin,\n height,\n width,\n pathSegments[i - 1].command,\n shapes\n );\n }\n return new PayloadChannel(shapes);\n};\n\nconst addTransitionCircle = (\n z: number,\n cx: number,\n cy: number,\n channelHeight: number,\n channelWidth: number,\n lastCommand: string,\n shapes: (PayloadLine | PayloadCircle)[]\n) => {\n if (\n lastCommand === \"lineto\" ||\n lastCommand === \"vertical lineto\" ||\n lastCommand === \"horizontal lineto\" ||\n lastCommand === \"elliptical arc\"\n ) {\n shapes.push(\n new PayloadCircle(\n new Point(cx, cy, z - channelHeight / 2),\n false,\n channelHeight,\n channelWidth / 2\n )\n );\n }\n};\n\n// for polygons / rounded polygons, solid only\nconst addPolygonPoints = (\n seg: CommandMadeAbsolute,\n z: number,\n translate: number[],\n rotation: number,\n origin: number[],\n roundedCornerCenter: Point[],\n vertices: Point[]\n) => {\n const st = pointTransform(seg.x0, seg.y0, translate, rotation, origin);\n const ed = pointTransform(seg.x, seg.y, translate, rotation, origin);\n switch (seg.command) {\n case \"lineto\":\n case \"vertical lineto\":\n case \"horizontal lineto\":\n case \"closepath\": {\n if (seg.x0 === seg.x && seg.y0 === seg.y) return;\n vertices.push(new Point(ed[0], ed[1], z));\n break;\n }\n case \"elliptical arc\": {\n if (seg.rx === seg.ry && seg.rx !== 0) {\n if (seg.x0 === seg.x && seg.y0 === seg.y) return;\n const additional = calculateCenterTangent(\n st[0],\n st[1],\n ed[0],\n ed[1],\n seg.rx,\n seg.sweep,\n seg.largeArc\n );\n roundedCornerCenter.push(new Point(additional.cx, additional.cy, z));\n vertices.push(new Point(ed[0], ed[1], z));\n } else {\n console.log(\"invalid arc: rx !== ry or rx === 0\");\n }\n break;\n }\n }\n};\n\nconst addLine = (\n z: number,\n st: number[],\n ed: number[],\n channelHeight: number,\n channelWidth: number,\n lastCommand: string,\n shapes: (PayloadLine | PayloadCircle)[]\n) => {\n addTransitionCircle(\n z,\n st[0],\n st[1],\n channelHeight,\n channelWidth,\n lastCommand,\n shapes\n );\n shapes.push(\n new PayloadLine(\n new Point(st[0], st[1], z),\n new Point(ed[0], ed[1], z),\n channelWidth,\n channelHeight\n )\n );\n};\nconst parsePathSegment = (\n seg: CommandMadeAbsolute,\n z: number,\n translate: number[],\n rotation: number,\n origin: number[],\n channelHeight: number,\n channelWidth: number,\n lastCommand: string,\n shapes: (PayloadLine | PayloadCircle)[]\n) => {\n const st = pointTransform(seg.x0, seg.y0, translate, rotation, origin);\n const ed = pointTransform(seg.x, seg.y, translate, rotation, origin);\n switch (seg.command) {\n case \"closepath\": {\n if (seg.x0 === seg.x && seg.y0 === seg.y) return;\n addLine(z, st, ed, channelHeight, channelWidth, lastCommand, shapes);\n addTransitionCircle(\n z,\n ed[0],\n ed[1],\n channelHeight,\n channelWidth,\n lastCommand,\n shapes\n );\n break;\n }\n case \"lineto\":\n case \"vertical lineto\":\n case \"horizontal lineto\": {\n if (seg.x0 === seg.x && seg.y0 === seg.y) return;\n addLine(z, st, ed, channelHeight, channelWidth, lastCommand, shapes);\n break;\n }\n case \"elliptical arc\": {\n if (seg.rx === seg.ry && seg.rx !== 0) {\n if (seg.x0 === seg.x && seg.y0 === seg.y) return;\n addTransitionCircle(\n z,\n st[0],\n st[1],\n channelHeight,\n channelWidth,\n lastCommand,\n shapes\n );\n const additional = calculateCenterTangent(\n st[0],\n st[1],\n ed[0],\n ed[1],\n seg.rx,\n seg.sweep,\n seg.largeArc\n );\n // console.log(additional);\n shapes.push(\n new PayloadCurve(\n new Point(additional.cx, additional.cy, z),\n new Point(st[0], st[1], z),\n new Point(ed[0], ed[1], z),\n new Point(additional.tx, additional.ty, z),\n channelWidth,\n channelHeight\n )\n );\n } else {\n console.log(\"invalid arc: rx !== ry or rx === 0\");\n }\n break;\n }\n }\n};\n\nconst calculateCenterTangent = (\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n radius: number,\n sweep: boolean,\n largeArc: boolean\n) => {\n const tmp0X = x1 - x0;\n const tmp0Y = y1 - y0;\n const h2 = Math.sqrt(tmp0X ** 2 + tmp0Y ** 2);\n const cosA = Math.min(1, h2 / 2 / radius);\n const sinA = Math.sqrt(1 - cosA ** 2);\n const k = radius / h2;\n\n const tmpX = tmp0X * k;\n const tmpY = tmp0Y * k;\n\n if (sweep !== largeArc) {\n // c1\n const cx = tmpX * cosA - tmpY * sinA + x0;\n const cy = tmpX * sinA + tmpY * cosA + y0;\n if (sweep) {\n const tx = tmp0X * sinA + tmp0Y * cosA + x0;\n const ty = -tmp0X * cosA + tmp0Y * sinA + y0;\n return { cx, cy, tx, ty };\n } else {\n const tx = -tmp0X * sinA - tmp0Y * cosA + x0;\n const ty = tmp0X * cosA - tmp0Y * sinA + y0;\n return { cx, cy, tx, ty };\n }\n } else {\n // c2\n const cx = tmpX * cosA + tmpY * sinA + x0;\n const cy = tmpY * cosA - tmpX * sinA + y0;\n if (sweep) {\n const tx = -tmp0X * sinA + tmp0Y * cosA + x0;\n const ty = -tmp0X * cosA - tmp0Y * sinA + y0;\n return { cx, cy, tx, ty };\n } else {\n const tx = tmp0X * sinA - tmp0Y * cosA + x0;\n const ty = tmp0X * cosA + tmp0Y * sinA + y0;\n return { cx, cy, tx, ty };\n }\n }\n};\n","import { ModuleOutput, ModuleProperty, Shape } from \"../typeDefinations\";\nimport { ChannelPort, ChannelPortWithSize, ContentUnit } from \"../other\";\nimport { PayloadChannel, PayloadShape } from \"../payloadPrimitives\";\nimport { ComponentObject } from \"../typeDefinations\";\nimport { Path } from \"../primitives\";\n\nconst initializeChannelPortsWithoutSize = (m: ModuleTemplate) => {\n for (let i = 0; i < m.numberOfChannelPorts; i++) {\n m.channelPorts.push(new ChannelPort(0, 0, m.id, i));\n }\n};\n\n// set size separately in updatePortHelper(), or override this function if size is fixed for all instances\nconst initializeChannelPortsWithSize = (m: ModuleTemplate) => {\n for (let i = 0; i < m.numberOfChannelPorts; i++) {\n m.channelPorts.push(new ChannelPortWithSize(0, 0, m.id, i, 0, 0));\n }\n};\n\nexport default abstract class ModuleTemplate extends ContentUnit {\n translate = [0, 0]; // for temporary position\n position: number[];\n rotation: number;\n abstract id: string;\n // abstract properties: { height: { value: number; name: string } };\n abstract properties: ModuleProperty;\n // isRotatable = true;\n abstract get numberOfChannelPorts(): number;\n get type(): string {\n return \"module\";\n }\n elementsToRender = {\n topLeftCorner: [0, 0], // for mask boundary\n centerPoint: [0, 0], // as rotation origin\n borderShapes: Array(),\n maskShapes: Array() // mask elements\n };\n channelPorts = Array();\n static count = 0;\n\n constructor(pos: number[], layer: string, rotation = 0) {\n super(layer);\n this.position = [...pos];\n this.rotation = rotation;\n }\n\n abstract updateRender(): void;\n abstract updatePortHelper(): void;\n abstract clone(): ModuleTemplate;\n abstract setNewModuleId(): void;\n abstract get getModuleIndex(): number;\n abstract get portSizeFixed(): boolean;\n\n getHeight(): number {\n return this.properties.height.value;\n }\n\n buildOutput(layer: string): ModuleOutput {\n const properties = new Map();\n for (const [key, value] of Object.entries(this.properties)) {\n properties.set(key, value.value);\n }\n return {\n id: this.id,\n position: this.position,\n rotation: this.rotation,\n properties: Object.fromEntries(properties),\n moduleIdx: this.getModuleIndex,\n layer\n };\n }\n\n updatePort(): void {\n if (this.channelPorts.length === this.numberOfChannelPorts) {\n this.updatePortHelper();\n }\n }\n\n initializeChannelPorts(): void {\n if (this.portSizeFixed) {\n initializeChannelPortsWithSize(this);\n } else {\n initializeChannelPortsWithoutSize(this);\n }\n }\n\n updatePosition(): void {\n this.position[0] += this.translate[0];\n this.position[1] += this.translate[1];\n this.translate = [0, 0];\n this.updateRender();\n }\n\n setTranslate(tx: number, ty: number): void {\n // set channel ports accordingly\n this.channelPorts.forEach((p) => {\n p.position[0] += tx - this.translate[0];\n p.position[1] += ty - this.translate[1];\n });\n this.translate[0] = tx;\n this.translate[1] = ty;\n }\n\n setRotation(r: number): void {\n // counterclockwise rotation\n // make sure translate == [0, 0]\n // set channel ports accordingly\n const radius = ((r - this.rotation) / 180) * Math.PI;\n const cosR = Math.cos(radius);\n const sinR = Math.sin(radius);\n this.channelPorts.forEach((p) => {\n const x0 = p.position[0] - this.elementsToRender.centerPoint[0];\n const y0 = p.position[1] - this.elementsToRender.centerPoint[1];\n const x1 = x0 * cosR - y0 * sinR;\n const y1 = x0 * sinR + y0 * cosR;\n p.position[0] = x1 + this.elementsToRender.centerPoint[0];\n p.position[1] = y1 + this.elementsToRender.centerPoint[1];\n });\n this.rotation = r;\n }\n\n buildPayload(z: number, hOffset: number): ComponentObject {\n let shapes = Array();\n const channels = Array();\n this.elementsToRender.borderShapes.forEach((elm) => {\n if (elm instanceof Path) {\n channels.push(\n elm.buildPayload(\n z,\n this.properties.height.value + hOffset,\n this.translate,\n this.rotation,\n this.elementsToRender.centerPoint\n )\n );\n } else {\n const ss = elm.buildPayload(\n z,\n this.properties.height.value + hOffset,\n this.translate,\n this.rotation,\n this.elementsToRender.centerPoint\n );\n if (ss) shapes = shapes.concat(ss);\n }\n });\n this.elementsToRender.maskShapes.forEach((elm) => {\n if (elm instanceof Path) {\n channels.push(\n elm.buildPayload(\n z,\n this.properties.height.value + hOffset,\n this.translate,\n this.rotation,\n this.elementsToRender.centerPoint\n )\n );\n } else {\n const ss = elm.buildPayload(\n z,\n this.properties.height.value + hOffset,\n this.translate,\n this.rotation,\n this.elementsToRender.centerPoint\n );\n if (ss) shapes = shapes.concat(ss);\n }\n });\n return {\n id: this.id,\n shapes: shapes,\n channels: channels,\n ports: Array()\n };\n }\n}\n","import { Bridge } from \"../bridge\";\nimport { Channel } from \"../channel\";\nimport {\n PayloadChannel,\n PayloadCircle,\n PayloadCurve,\n PayloadLine,\n Point,\n Vector3\n} from \"../payloadPrimitives\";\n\nconst getDirection = (p1: Point, p2: Point) => {\n return [p2.x - p1.x, p2.y - p1.y, p2.z - p1.z];\n};\nconst shiftPointWithDirection = (p: Point, p1: Point, p2: Point) => {\n const dist = 10;\n const direction = getDirection(p1, p2);\n const k = Math.sqrt(\n direction[0] ** 2 + direction[1] ** 2 + direction[2] ** 2\n );\n const ratio = dist / k;\n const x = direction[0] * ratio + p.x;\n const y = direction[1] * ratio + p.y;\n const z = direction[2] * ratio + p.z;\n return new Vector3(x, y, z);\n};\n\nconst calculateCoordsWithDirection = (\n px: number,\n py: number,\n direction: number[],\n distance: number\n) => {\n // rotate vector [distance, 0] into direction\n // translate to p\n const k = Math.sqrt(direction[0] ** 2 + direction[1] ** 2);\n const cosR = direction[0] / k;\n const sinR = direction[1] / k;\n const x = distance * cosR + px;\n const y = distance * sinR + py;\n return { x, y };\n};\n\nconst getBorderPoints = (\n bridge: Bridge,\n z: number,\n bridge_dx: number,\n bridge_dy: number,\n lengthLeft: number,\n lengthRight: number\n) => {\n const channelSegLen = Math.sqrt(bridge_dx ** 2 + bridge_dy ** 2);\n\n // the highest point of the bridge\n const a_x =\n bridge.channelSegment.start.position[0] + bridge_dx * bridge.posOnSeg;\n const a_y =\n bridge.channelSegment.start.position[1] + bridge_dy * bridge.posOnSeg;\n const a_z = z + bridge.properties.height.value;\n\n // left\n const kb = bridge.posOnSeg - lengthLeft / channelSegLen;\n const b_x = bridge.channelSegment.start.position[0] + bridge_dx * kb;\n const b_y = bridge.channelSegment.start.position[1] + bridge_dy * kb;\n //right\n const kc = bridge.posOnSeg + lengthRight / channelSegLen;\n const c_x = bridge.channelSegment.start.position[0] + bridge_dx * kc;\n const c_y = bridge.channelSegment.start.position[1] + bridge_dy * kc;\n return {\n left: new Vector3(b_x, b_y, z),\n right: new Vector3(c_x, c_y, z),\n top: new Vector3(a_x, a_y, a_z)\n };\n};\n\nconst buildBridgePayload = (\n bridge: Bridge,\n z: number,\n channelWidth: number,\n channelHeight: number\n) => {\n const slopL = bridge.properties.slopeL.value;\n const slopR = bridge.properties.slopeR.value;\n const height = bridge.properties.height.value;\n const radius = Math.max(\n channelHeight + 1,\n bridge.properties.roundedRadius.value\n );\n const positiveDir = [\n bridge.channelSegment.end.position[0] -\n bridge.channelSegment.start.position[0],\n bridge.channelSegment.end.position[1] -\n bridge.channelSegment.start.position[1]\n ];\n const negativeDir = positiveDir.map((x) => -x);\n const lengthLeft =\n bridge.properties.height.value / Math.tan((slopL / 180) * Math.PI);\n const lengthRight =\n bridge.properties.height.value / Math.tan((slopR / 180) * Math.PI);\n\n const { left, right, top } = getBorderPoints(\n bridge,\n z,\n positiveDir[0],\n positiveDir[1],\n lengthLeft,\n lengthRight\n );\n const shapes = Array();\n // curve at start\n const dist1 = radius / Math.tan(((180 - slopL) / 360) * Math.PI);\n const p1 = calculateCoordsWithDirection(left.x, left.y, negativeDir, dist1);\n const dist2 = dist1 * Math.cos((slopL / 180) * Math.PI);\n const p2 = calculateCoordsWithDirection(left.x, left.y, positiveDir, dist2);\n const center1 = new Point(p1.x, p1.y, z + radius);\n const start1 = new Point(p1.x, p1.y, z);\n const end1 = new Point(\n p2.x,\n p2.y,\n z + dist1 * Math.sin((slopL / 180) * Math.PI)\n );\n const end1_proj = new Point(p2.x, p2.y, z);\n shapes.push(\n new PayloadCurve(\n center1,\n start1,\n end1,\n end1_proj,\n channelHeight,\n channelWidth\n )\n );\n\n // curve at top\n const tmp = radius / Math.tan(((180 - slopL - slopR) / 360) * Math.PI);\n const dist5 = tmp * Math.cos((slopL / 180) * Math.PI);\n const p5 = calculateCoordsWithDirection(top.x, top.y, negativeDir, dist5);\n const dist6 = tmp * Math.cos((slopR / 180) * Math.PI);\n const p6 = calculateCoordsWithDirection(top.x, top.y, positiveDir, dist6);\n const p5_z = z + height - tmp * Math.sin((slopL / 180) * Math.PI);\n const start3 = new Point(p5.x, p5.y, p5_z);\n const end3 = new Point(\n p6.x,\n p6.y,\n z + height - tmp * Math.sin((slopR / 180) * Math.PI)\n );\n // center top\n const p7 = calculateCoordsWithDirection(\n p5.x,\n p5.y,\n positiveDir,\n radius * Math.sin((slopL / 180) * Math.PI)\n );\n const center3 = new Point(\n p7.x,\n p7.y,\n p5_z - radius * Math.cos((slopL / 180) * Math.PI)\n );\n const end1shifted = shiftPointWithDirection(end1, start3, end1);\n const start3shifted = shiftPointWithDirection(start3, end1, start3);\n shapes.push(\n new PayloadLine(end1shifted, start3shifted, channelWidth, channelHeight)\n );\n shapes.push(\n new PayloadCurve(\n center3,\n start3,\n end3,\n new Point(top.x, top.y, z + height),\n channelHeight,\n channelWidth\n )\n );\n // const dist1 = radius / Math.tan(((180 - slopL) / 360) * Math.PI);\n // const p1 = calculateCoordsWithDirection(left.x, left.y, negativeDir, dist1);\n // const dist2 = dist1 * Math.cos((slopL / 180) * Math.PI);\n // const p2 = calculateCoordsWithDirection(left.x, left.y, positiveDir, dist2);\n // const center1 = new Point(p1.x, p1.y, z + radius);\n // const start1 = new Point(p1.x, p1.y, z);\n // const end1 = new Point(\n // p2.x,\n // p2.y,\n // z + dist1 * Math.sin((slopL / 180) * Math.PI)\n // );\n // const end1_proj = new Point(p2.x, p2.y, z);\n //curve at end\n const dist3 = radius / Math.tan(((180 - slopR) / 360) * Math.PI);\n const p3 = calculateCoordsWithDirection(right.x, right.y, positiveDir, dist3);\n const dist4 = dist3 * Math.cos((slopR / 180) * Math.PI);\n const p4 = calculateCoordsWithDirection(right.x, right.y, negativeDir, dist4);\n const center2 = new Point(p3.x, p3.y, z + radius);\n const start2 = new Point(p3.x, p3.y, z);\n const end2 = new Point(\n p4.x,\n p4.y,\n z + dist3 * Math.sin((slopR / 180) * Math.PI)\n );\n const end2_proj = new Point(p4.x, p4.y, z);\n const end3Shifted = shiftPointWithDirection(end3, end2, end3);\n const end2Shifted = shiftPointWithDirection(end2, end3, end2);\n shapes.push(\n new PayloadLine(end3Shifted, end2Shifted, channelWidth, channelHeight)\n );\n shapes.push(\n new PayloadCurve(\n center2,\n start2,\n end2,\n end2_proj,\n channelHeight,\n channelWidth\n )\n );\n\n return { shapes, startPoint: start1, endPoint: start2 };\n};\n\nconst addTransitionCircle = (\n shapes: (PayloadLine | PayloadCircle)[],\n cx: number,\n cy: number,\n channel: Channel,\n z: number,\n i: number,\n channelHeight: number\n) => {\n if (i < channel.channelDef.length - 1) {\n const center = new Point(cx, cy, z - channelHeight / 2);\n shapes.push(\n new PayloadCircle(\n center,\n false,\n channelHeight,\n channel.properties.channelWidth.value / 2\n )\n );\n }\n};\n\nconst addPortTransition = (\n shapes: (PayloadLine | PayloadCircle)[],\n channel: Channel,\n z: number,\n channelHeight: number\n) => {\n if (channel.channelDef[0].isConnectedToPort) {\n const center = new Point(\n channel.channelDef[0].position[0],\n channel.channelDef[0].position[1],\n z - channelHeight / 2\n );\n shapes.push(\n new PayloadCircle(\n center,\n false,\n channelHeight,\n channel.properties.channelWidth.value / 2\n )\n );\n }\n if (channel.channelDef[channel.channelDef.length - 1].isConnectedToPort) {\n const center = new Point(\n channel.channelDef[channel.channelDef.length - 1].position[0],\n channel.channelDef[channel.channelDef.length - 1].position[1],\n z - channelHeight / 2\n );\n shapes.push(\n new PayloadCircle(\n center,\n false,\n channelHeight,\n channel.properties.channelWidth.value / 2\n )\n );\n }\n};\n\nconst buildChannelPayload = (\n channel: Channel,\n z: number,\n channelHeight: number\n): PayloadChannel => {\n let shapes = Array();\n const channelWidth = channel.properties.channelWidth.value;\n addPortTransition(shapes, channel, z, channelHeight);\n let lastPoint = new Point(\n channel.channelDef[0].position[0],\n channel.channelDef[0].position[1],\n z\n );\n if (channel.channelDef[0].isConnectedToPort) {\n addTransitionCircle(\n shapes,\n channel.channelDef[0].position[0],\n channel.channelDef[0].position[1],\n channel,\n z,\n 0,\n channelHeight\n );\n }\n for (let i = 1; i < channel.channelDef.length; ++i) {\n if (channel.channelDef[i - 1].bridges.length > 0) {\n // sort if >= 2 bridges\n channel.channelDef[i - 1].bridges.sort(\n (b1, b2) => b1.posOnSeg - b2.posOnSeg\n );\n\n channel.channelDef[i - 1].bridges.forEach((bridge) => {\n const bridgePayload = buildBridgePayload(\n bridge,\n z,\n channelWidth,\n channelHeight\n );\n shapes.push(\n new PayloadLine(\n lastPoint,\n bridgePayload.startPoint,\n channelWidth,\n channelHeight\n )\n );\n shapes = shapes.concat(bridgePayload.shapes);\n lastPoint = bridgePayload.endPoint;\n });\n }\n const tmp_v = new Point(\n channel.channelDef[i].position[0],\n channel.channelDef[i].position[1],\n z\n );\n if (\n i < channel.channelDef.length - 1 &&\n channel.channelDef[i].roundedRadius > 0\n ) {\n const r = channel.channelDef[i].roundedRadius;\n const B = channel.channelDef[i - 1].position;\n const A = channel.channelDef[i].position;\n const C = channel.channelDef[i + 1].position;\n const AB = [B[0] - A[0], B[1] - A[1]];\n const AC = [C[0] - A[0], C[1] - A[1]];\n const dAB = Math.sqrt(AB[0] ** 2 + AB[1] ** 2);\n const dAC = Math.sqrt(AC[0] ** 2 + AC[1] ** 2);\n const cosA = (AB[0] * AC[0] + AB[1] * AC[1]) / (dAB * dAC);\n const tanAHalf = Math.sqrt((1 - cosA) / (1 + cosA));\n const d0 = r / tanAHalf;\n if (d0 > dAB || d0 > dAC) {\n // invalid rounded corner will be ignored\n shapes.push(\n new PayloadLine(lastPoint, tmp_v, channelWidth, channelHeight)\n );\n addTransitionCircle(\n shapes,\n channel.channelDef[i].position[0],\n channel.channelDef[i].position[1],\n channel,\n z,\n i,\n channelHeight\n );\n lastPoint = tmp_v;\n } else {\n const ratio1 = d0 / dAB;\n const ratio2 = d0 / dAC;\n const p1 = [A[0] + AB[0] * ratio1, A[1] + AB[1] * ratio1];\n const p2 = [A[0] + AC[0] * ratio2, A[1] + AC[1] * ratio2];\n const arc_start = new Point(p1[0], p1[1], z);\n const arc_end = new Point(p2[0], p2[1], z);\n const P = [(p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2];\n const ratio3 = (r / d0) ** 2 + 1;\n const AP = [P[0] - A[0], P[1] - A[1]];\n const c_x = A[0] + AP[0] * ratio3;\n const c_y = A[1] + AP[1] * ratio3;\n const arc_center = new Point(c_x, c_y, z);\n shapes.push(\n new PayloadLine(lastPoint, arc_start, channelWidth, channelHeight)\n );\n shapes.push(\n new PayloadCurve(\n arc_center,\n arc_start,\n arc_end,\n tmp_v,\n channelWidth,\n channelHeight\n )\n );\n lastPoint = arc_end;\n }\n } else {\n shapes.push(\n new PayloadLine(lastPoint, tmp_v, channelWidth, channelHeight)\n );\n addTransitionCircle(\n shapes,\n channel.channelDef[i].position[0],\n channel.channelDef[i].position[1],\n channel,\n z,\n i,\n channelHeight\n );\n lastPoint = tmp_v;\n }\n }\n return new PayloadChannel(shapes);\n};\n\nexport { buildChannelPayload };\n","import { useContentStore } from \"@/stores/content\";\nimport { defaultPropertyStep } from \"./hardCodedValues\";\nimport { BasicPart, ChannelPort } from \"./other\";\nimport {\n PayloadChamfer,\n PayloadCircle,\n PayloadPolygon,\n Point\n} from \"./payloadPrimitives\";\nimport { BasicPartOutput } from \"./typeDefinations\";\n\nexport class InletOutlet extends BasicPart {\n properties = {\n r1: {\n value: 200,\n name: \"Radius of Port\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n r2: {\n value: 400,\n name: \"Radius of Chamfer\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n h: {\n value: 200,\n name: \"Depth of Chamfer\",\n step: defaultPropertyStep,\n unit: \"µm\"\n }\n };\n channelType: number;\n x: number;\n y: number;\n // height is dependant on the layer height\n\n get type(): string {\n return \"inlet/outlet\";\n }\n get vueComponent(): string {\n return \"SvgFlowControlNodeVue\";\n }\n channelPort = new ChannelPort(0, 0, \"\");\n private updateChannelPortPosition() {\n this.channelPort.position[0] = this.x;\n this.channelPort.position[1] = this.y;\n }\n constructor(position: number[], r1: number, t: number, layer: string) {\n super(layer);\n this.x = position[0];\n this.y = position[1];\n this.updateChannelPortPosition();\n this.channelType = t;\n this.properties.r1.value = r1;\n this.properties.r2.value = r1 + 200;\n InletOutlet.count++;\n const contentStore = useContentStore();\n while (contentStore.contentMap.has(\"Port-\" + InletOutlet.count)) {\n InletOutlet.count++;\n }\n this.id = \"Port-\" + InletOutlet.count;\n this.channelPort.elementId = this.id;\n }\n\n static resetCount(): void {\n InletOutlet.count = 0;\n }\n static parse(content: BasicPartOutput): InletOutlet {\n const res = new InletOutlet(\n content.position,\n content.properties.r1,\n content.channelType,\n content.layer\n );\n res.properties.r2.value = content.properties.r2;\n res.properties.h.value = content.properties.h;\n res.id = res.channelPort.elementId = content.id;\n return res;\n }\n\n buildOutput(layer: string): BasicPartOutput {\n const properties = new Map();\n for (const [key, value] of Object.entries(this.properties)) {\n properties.set(key, value.value);\n }\n const output = {\n id: this.id,\n position: [this.x, this.y],\n properties: Object.fromEntries(properties),\n channelType: this.channelType,\n layer\n };\n return output;\n }\n\n clone(): InletOutlet {\n const copy = new InletOutlet(\n [this.x, this.y],\n this.properties.r1.value,\n this.channelType,\n this.layer\n );\n copy.properties.r2.value = this.properties.r2.value;\n const contenStore = useContentStore();\n contenStore.addElmentToContent(copy);\n return copy;\n }\n\n updatePosition(x: number, y: number): void {\n const offsetX = x - this.translate[0];\n const offsetY = y - this.translate[1];\n this.x += offsetX;\n this.y += offsetY;\n this.updateChannelPortPosition();\n this.setTranslate(x, y);\n }\n buildPayload(\n z: number,\n chipThickness: number\n ): { shapes: [PayloadCircle | PayloadPolygon, PayloadChamfer] } | void {\n const height = this.properties.h.value;\n const r1 = this.properties.r1.value;\n const r2 = this.properties.r2.value;\n\n const h1 = chipThickness - z - height;\n\n if (height > 0 && h1 > 0 && r1 > 0 && r2 > 0) {\n if (this.channelType === 0) {\n const circle = new PayloadCircle(\n new Point(this.x, this.y, z),\n false,\n h1,\n r1\n );\n const chamfer = new PayloadChamfer(\n new Point(this.x, this.y, z + h1),\n false,\n height,\n r1,\n r2\n );\n return { shapes: [circle, chamfer] };\n } else {\n const s = this.properties.r1.value;\n const p1 = new Point(this.x - s, this.y - s, z);\n const p2 = new Point(this.x + s, this.y - s, z);\n const p3 = new Point(this.x + s, this.y + s, z);\n const p4 = new Point(this.x - s, this.y + s, z);\n const poly = new PayloadPolygon([p1, p2, p3, p4], false, 0, 0, h1);\n const chamfer = new PayloadChamfer(\n new Point(this.x, this.y, z + h1),\n false,\n height,\n r1 * Math.SQRT2,\n r2\n );\n return { shapes: [poly, chamfer] };\n }\n }\n }\n}\n","import { useContentStore } from \"@/stores/content\";\nimport { defaultPropertyStep } from \"./hardCodedValues\";\nimport { BasicPart, ChannelPort } from \"./other\";\nimport { PayloadCircle, PayloadPolygon, Point } from \"./payloadPrimitives\";\nimport { BasicPartOutput } from \"./typeDefinations\";\n\nexport class LevelConnection extends BasicPart {\n properties = {\n r: {\n value: 200,\n name: \"Connection Channel Radius\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n // id of the start level\n startLv: {\n value: \"\",\n name: \"From\"\n },\n // id of the terminal level\n endLv: {\n value: \"\",\n name: \"To\"\n }\n };\n x: number;\n y: number;\n channelType: number;\n\n get type(): string {\n return \"level connection\";\n }\n get vueComponent(): string {\n return \"SvgLevelConnectionVue\";\n }\n channelPort = new ChannelPort(0, 0, \"\");\n private updateChannelPortPosition() {\n this.channelPort.position[0] = this.x;\n this.channelPort.position[1] = this.y;\n }\n constructor(\n position: number[],\n r: number,\n s: string,\n t: string,\n shape: number\n ) {\n super(\"\");\n this.x = position[0];\n this.y = position[1];\n this.updateChannelPortPosition();\n this.properties.r.value = r;\n this.properties.startLv.value = s;\n this.properties.endLv.value = t;\n this.channelType = shape;\n LevelConnection.count++;\n const contentStore = useContentStore();\n while (contentStore.contentMap.has(\"Via-\" + LevelConnection.count)) {\n LevelConnection.count++;\n }\n this.id = \"Via-\" + LevelConnection.count;\n this.channelPort.elementId = this.id;\n }\n static resetCount(): void {\n LevelConnection.count = 0;\n }\n static parse(content: BasicPartOutput): LevelConnection {\n const res = new LevelConnection(\n content.position,\n content.properties.r,\n content.properties.startLv,\n content.properties.endLv,\n content.channelType\n );\n res.id = res.channelPort.elementId = content.id;\n return res;\n }\n\n buildOutput(): BasicPartOutput {\n const properties = new Map();\n for (const [key, value] of Object.entries(this.properties)) {\n properties.set(key, value.value);\n }\n const output = {\n id: this.id,\n position: [this.x, this.y],\n properties: Object.fromEntries(properties),\n channelType: this.channelType,\n layer: this.layer\n };\n return output;\n }\n\n clone(): LevelConnection {\n const copy = new LevelConnection(\n [this.x, this.y],\n this.properties.r.value,\n this.properties.startLv.value,\n this.properties.endLv.value,\n this.channelType\n );\n const contentStore = useContentStore();\n contentStore.addElmentToContent(copy);\n return copy;\n }\n\n updatePosition(x: number, y: number): void {\n const offsetX = x - this.translate[0];\n const offsetY = y - this.translate[1];\n this.x += offsetX;\n this.y += offsetY;\n this.updateChannelPortPosition();\n this.setTranslate(x, y);\n }\n buildPayload(\n calculateLocalCompensation: (z: number) => number\n ): { shapes: [PayloadCircle | PayloadPolygon] } | undefined {\n const contentStore = useContentStore();\n const r = this.properties.r.value;\n let h1 = contentStore.getLevelHeight(this.properties.startLv.value);\n let h2 = contentStore.getLevelHeight(this.properties.endLv.value);\n\n if (h1 !== undefined && h2 !== undefined && r > 0) {\n if (h1 > h2) {\n [h1, h2] = [h2, h1];\n }\n const hOffset = calculateLocalCompensation(h1);\n h1 -= hOffset;\n // round\n if (this.channelType === 0) {\n const p = new PayloadCircle(\n new Point(this.x, this.y, h1),\n false,\n h2 - h1,\n r\n );\n return { shapes: [p] };\n } else {\n // square\n const p1 = new Point(this.x - r, this.y - r, h1);\n const p2 = new Point(this.x + r, this.y - r, h1);\n const p3 = new Point(this.x + r, this.y + r, h1);\n const p4 = new Point(this.x - r, this.y + r, h1);\n const p = new PayloadPolygon([p1, p2, p3, p4], false, 0, 0, h2 - h1);\n return { shapes: [p] };\n }\n }\n }\n}\n","import { useContentStore } from \"@/stores/content\";\nimport { buildChannelPayload } from \"./utilities/channelPayloadBuilder\";\nimport { defaultPropertyStep } from \"./hardCodedValues\";\nimport { InletOutlet } from \"./inletOutlet\";\nimport { LevelConnection } from \"./levelConnection\";\nimport ModuleTemplate from \"./modules/moduleTemplate\";\nimport { BasicPart, ChannelPoint } from \"./other\";\nimport { PayloadChannel } from \"./payloadPrimitives\";\nimport { ChannelOutput, ChannelPointOutput } from \"./typeDefinations\";\n\nexport class Channel extends BasicPart {\n channelDef = Array();\n properties = {\n channelWidth: {\n value: 0,\n name: \"Channel Width\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n channelHeight: {\n value: 0,\n name: \"Channel Height\",\n step: defaultPropertyStep,\n unit: \"µm\"\n }\n };\n static resetCount(): void {\n Channel.count = 0;\n }\n\n static parse(content: ChannelOutput): Channel {\n const contentStore = useContentStore();\n try {\n const channel = new Channel(\n content.channelWidth,\n content.channelHeight,\n content.layer\n );\n channel.id = content.id;\n Channel.count++;\n // Build channeDef\n content.channelPoints.forEach((point: ChannelPointOutput) => {\n const channelPoint = new ChannelPoint(point.position);\n channelPoint.roundedRadius = point.roundedRadius;\n channelPoint.isConnectedToPort = point.isConnectedToPort;\n if (point.isConnectedToPort) {\n try {\n const elm = contentStore.getElement(\n point.connectedPort.connectedPortElement\n );\n if (elm instanceof ModuleTemplate) {\n channelPoint.connectedPort =\n elm.channelPorts[point.connectedPort.connectedPortIndex];\n channelPoint.position =\n elm.channelPorts[\n point.connectedPort.connectedPortIndex\n ].position;\n } else if (\n elm instanceof LevelConnection ||\n elm instanceof InletOutlet\n ) {\n channelPoint.connectedPort = elm.channelPort;\n channelPoint.position = elm.channelPort.position;\n }\n } catch (err) {\n console.log(err);\n console.log(\"invalid port\");\n channelPoint.isConnectedToPort = false;\n }\n }\n channel.channelDef.push(channelPoint);\n });\n return channel;\n } catch (err) {\n console.log(err);\n throw \"invalid channel content\";\n }\n }\n\n buildOutput(layer: string): ChannelOutput {\n const channelPoints = Array();\n this.channelDef.forEach((point) => {\n channelPoints.push(point.buildOutput());\n });\n const content = {\n id: this.id,\n channelWidth: this.properties.channelWidth.value,\n channelHeight: this.properties.channelHeight.value,\n channelPoints,\n layer\n };\n return content;\n }\n\n get type(): string {\n return \"channel\";\n }\n get vueComponent(): string {\n return \"SvgChannelVue\";\n }\n constructor(\n channelWidth: number,\n channelHeight: number,\n layer: string,\n firstPoint?: ChannelPoint\n ) {\n super(layer);\n if (firstPoint) {\n this.channelDef.push(firstPoint);\n }\n this.properties.channelWidth.value = channelWidth;\n this.properties.channelHeight.value = channelHeight;\n }\n getHeight(): number {\n return this.properties.channelHeight.value;\n }\n\n newId(): string {\n Channel.count++;\n const contentStore = useContentStore();\n while (contentStore.contentMap.has(\"Channel-\" + Channel.count)) {\n Channel.count++;\n }\n return \"Channel-\" + Channel.count;\n }\n\n setId(): void {\n this.id = this.newId();\n }\n\n clonePoint(point: ChannelPoint, id: string, idx: number): ChannelPoint {\n return point.clone(id, this.properties.channelWidth.value, idx);\n }\n\n clone(): Channel {\n // assume bridges are bound to starting channel point\n // clone all the points\n const id = this.newId();\n const copy = new Channel(\n this.properties.channelWidth.value,\n this.properties.channelHeight.value,\n this.layer\n );\n copy.id = id;\n const contentStore = useContentStore();\n contentStore.addElmentToContent(copy);\n this.channelDef.forEach((p, idx) => {\n copy.channelDef.push(this.clonePoint(p, id, idx));\n });\n\n // then set bridge ends\n for (let i = 0; i < this.channelDef.length - 1; ++i) {\n copy.channelDef[i].bridges.forEach((b) => {\n b.channelSegment.end = copy.channelDef[i + 1];\n });\n }\n return copy;\n }\n\n updatePosition(x: number, y: number): void {\n const offsetX = x - this.translate[0];\n const offsetY = y - this.translate[1];\n this.channelDef.forEach((p) => {\n if (!p.isConnectedToPort) {\n p.position[0] += offsetX;\n p.position[1] += offsetY;\n }\n });\n this.setTranslate(x, y);\n }\n resetBridges(): void {\n this.channelDef.forEach((point) => {\n point.resetBridges();\n });\n }\n\n buildPayload(z: number, hOffset: number): PayloadChannel {\n const channelHeight = this.properties.channelHeight.value + hOffset;\n return buildChannelPayload(this, z + channelHeight / 2, channelHeight);\n }\n}\n","// unlike other parts, bridges are dependant on the channel on which it was placed (width, rotation, etc)\n\nimport { useContentStore } from \"@/stores/content\";\nimport { Channel } from \"./channel\";\nimport { defaultPropertyStep } from \"./hardCodedValues\";\nimport { ChannelPoint, ChannelSegment, ContentUnitGeneral } from \"./other\";\nimport { Bridgeoutput } from \"./typeDefinations\";\nconst dummyChannelPoint = new ChannelPoint([0, 0]);\n// to maintain this connection, a bridge only knows which channel segment it is bound to\nexport class Bridge extends ContentUnitGeneral {\n id = \"\";\n // x: number;\n // y: number;\n // width: number;\n channelSegment: ChannelSegment;\n posOnSeg: number; // 0 <= value <= 1, indecate the relative position on the channel segment\n properties = {\n height: {\n value: 800,\n name: \"Height\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n slopeL: {\n value: 30,\n name: \"Left Slope\",\n step: 1,\n unit: \"°\"\n },\n slopeR: {\n value: 30,\n name: \"Right Slope\",\n step: 1,\n unit: \"°\"\n },\n\n roundedRadius: {\n value: 400,\n name: \"Rounded Radius\",\n step: defaultPropertyStep,\n unit: \"µm\"\n }\n };\n static parse(content: Bridgeoutput): Bridge {\n const contentStore = useContentStore();\n const channel = contentStore.getElement(content.connectedChannel);\n const start = channel.channelDef[content.startPointIdx];\n const end = channel.channelDef[content.startPointIdx + 1];\n const channelSegment = {\n cid: content.connectedChannel,\n idx: content.startPointIdx,\n start,\n end,\n width: channel.properties.channelWidth.value\n };\n const res = new Bridge(channelSegment, content.position, content.layer);\n res.id = content.id;\n return res;\n }\n static resetCount(): void {\n Bridge.count = 0;\n }\n getHeight(): number {\n const contentStore = useContentStore();\n const c = contentStore.getElement(this.channelSegment.cid);\n return (\n this.properties.height.value + (c instanceof Channel ? c.getHeight() : 0)\n );\n }\n\n buildOutput(layer: string): Bridgeoutput {\n const properties = new Map();\n for (const [key, value] of Object.entries(this.properties)) {\n properties.set(key, value.value);\n }\n const output = {\n id: this.id,\n position: this.posOnSeg,\n connectedChannel: this.channelSegment.cid,\n startPointIdx: this.channelSegment.idx,\n properties: Object.fromEntries(properties),\n layer\n };\n return output;\n }\n\n show = true;\n\n get type(): string {\n return \"bridge\";\n }\n get vueComponent(): string {\n return \"SvgBridgeVue\";\n }\n get display(): boolean {\n const contentStore = useContentStore();\n const c = contentStore.getElement(this.channelSegment.cid);\n return c instanceof Channel && c.display && this.show;\n }\n static count = 0;\n constructor(cs: ChannelSegment, pos: number, layer: string) {\n super(layer);\n this.channelSegment = cs;\n this.posOnSeg = pos;\n Bridge.count++;\n const contentStore = useContentStore();\n while (contentStore.contentMap.has(\"Bridge-\" + Bridge.count)) {\n Bridge.count++;\n }\n this.id = \"Bridge-\" + Bridge.count;\n }\n\n // channel seg end is a place holder\n makeCopy(\n start: ChannelPoint,\n cid: string,\n width: number,\n idx: number\n ): Bridge {\n return new Bridge(\n { start, cid, width, end: dummyChannelPoint, idx },\n this.posOnSeg,\n this.layer\n );\n }\n}\n","import {\n BasicPart,\n ChannelPoint,\n ChannelSegment,\n ContentUnit,\n ContentUnitGeneral\n} from \"@/library/other\";\nimport { defineStore } from \"pinia\";\nimport { useContentStore } from \"./content\";\nimport { useControlStore } from \"./control\";\nimport ModuleTemplate from \"@/library/modules/moduleTemplate\";\nimport { Channel } from \"@/library/channel\";\nimport { LevelConnection } from \"@/library/levelConnection\";\nimport { Bridge } from \"@/library/bridge\";\nimport { InletOutlet } from \"@/library/inletOutlet\";\n\ninterface Activity {\n description: string;\n undo(): void;\n redo(): void;\n}\n\nconst actDescription = {\n newElm: \"New \",\n move: \"Move \",\n delete: \"Delete \",\n moveVertex: \"Move Vertex\",\n setProperty: \"Change Property of\",\n setRotation: \"Set Rotation of\",\n setRoundedCorner: \"Set Rounded Corners\"\n};\nexport class SetRoundedCorner implements Activity {\n oldState: { point: ChannelPoint; oldVal: number }[];\n newVal: number;\n constructor(points: ChannelPoint[], newVal: number) {\n const pre = Array<{ point: ChannelPoint; oldVal: number }>();\n points.forEach((p) => {\n pre.push({ point: p, oldVal: p.roundedRadius });\n });\n this.oldState = pre;\n this.newVal = newVal;\n }\n get description(): string {\n return `${actDescription.setRoundedCorner}`;\n }\n undo(): void {\n this.oldState.forEach((s) => {\n s.point.roundedRadius = s.oldVal;\n });\n }\n redo(): void {\n this.oldState.forEach((s) => {\n s.point.roundedRadius = this.newVal;\n });\n }\n}\nexport class DeleteLevelAct implements Activity {\n contentStore = useContentStore();\n level: {\n height: number;\n color: string;\n label: string;\n id: string;\n contentIds: string[];\n };\n levelId: string;\n levelContent: string[];\n constructor(\n level: {\n height: number;\n color: string;\n label: string;\n id: string;\n contentIds: string[];\n },\n id: string,\n levelContent: string[]\n ) {\n this.level = level;\n this.levelId = id;\n this.levelContent = levelContent;\n }\n get description(): string {\n return `${actDescription.delete} ${this.level.label}`;\n }\n undo(): void {\n this.contentStore.layers.set(this.levelId, this.level);\n }\n redo(): void {\n this.contentStore.removeLevelSafely(this.levelId);\n }\n}\n\nexport class CreateLevelAct implements Activity {\n contentStore = useContentStore();\n level: {\n height: number;\n color: string;\n label: string;\n id: string;\n contentIds: string[];\n };\n levelId: string;\n constructor(\n level: {\n height: number;\n color: string;\n label: string;\n id: string;\n contentIds: string[];\n },\n id: string\n ) {\n this.level = level;\n this.levelId = id;\n }\n get description(): string {\n return `${actDescription.newElm} ${this.level.label}`;\n }\n undo(): void {\n this.contentStore.removeLevelSafely(this.levelId);\n }\n redo(): void {\n this.contentStore.layers.set(this.levelId, this.level);\n }\n}\n\nexport class SetRotationAct implements Activity {\n module: ModuleTemplate;\n offset: number;\n constructor(module: ModuleTemplate, offset: number) {\n this.module = module;\n this.offset = offset;\n }\n get description(): string {\n return `${actDescription.setRotation} ${this.module.id}`;\n }\n undo(): void {\n this.module.setRotation(this.module.rotation - this.offset);\n }\n\n redo(): void {\n this.module.setRotation(this.module.rotation + this.offset);\n }\n}\nexport class ChangeChipPropertyAct implements Activity {\n property: { name: string; value: number };\n offset: number;\n constructor(prop: { name: string; value: number }, offset: number) {\n this.property = prop;\n this.offset = offset;\n }\n get description(): string {\n return `${actDescription.setProperty} Chip [${this.property.name}]`;\n }\n undo(): void {\n this.property.value -= this.offset;\n }\n\n redo(): void {\n this.property.value += this.offset;\n }\n}\n\nexport class ChangeStringPropertyAct implements Activity {\n elm: ContentUnit;\n property: { name: string; value: string };\n oldString: string;\n newString: string;\n subAct?: Activity;\n constructor(\n elm: ContentUnit,\n prop: { name: string; value: string },\n oldString: string,\n newString: string,\n subAct?: Activity\n ) {\n this.elm = elm;\n this.property = prop;\n this.newString = newString;\n this.oldString = oldString;\n if (subAct) this.subAct = subAct;\n }\n\n get description(): string {\n return `${actDescription.setProperty} ${this.elm.id} [${this.property.name}]`;\n }\n\n rerenderIfIsModule(): void {\n if (this.elm instanceof ModuleTemplate) {\n this.elm.updateRender();\n }\n }\n undo(): void {\n this.property.value = this.oldString;\n this.rerenderIfIsModule();\n if (this.subAct) {\n this.subAct.undo();\n }\n }\n\n redo(): void {\n this.property.value = this.newString;\n this.rerenderIfIsModule();\n if (this.subAct) {\n this.subAct.redo();\n }\n }\n}\n\nexport class ChangeContentUnitPropertyAct extends ChangeChipPropertyAct {\n elm: ContentUnitGeneral;\n subAct?: Activity;\n constructor(\n elm: ContentUnitGeneral,\n prop: { name: string; value: number },\n offset: number,\n subAct?: Activity\n ) {\n super(prop, offset);\n this.elm = elm;\n if (subAct) this.subAct = subAct;\n }\n get description(): string {\n return `${actDescription.setProperty} ${this.elm.id} [${this.property.name}]`;\n }\n rerenderIfIsModule(): void {\n if (this.elm instanceof ModuleTemplate) {\n this.elm.updateRender();\n }\n }\n undo(): void {\n this.property.value -= this.offset;\n this.rerenderIfIsModule();\n if (this.subAct) {\n this.subAct.undo();\n }\n }\n\n redo(): void {\n this.property.value += this.offset;\n this.rerenderIfIsModule();\n if (this.subAct) {\n this.subAct.redo();\n }\n }\n}\n\nexport class SetChannelSize implements Activity {\n channel: Channel;\n offsetW: number;\n offsetH: number;\n constructor(channel: Channel, offsetW: number, offsetH: number) {\n this.channel = channel;\n this.offsetW = offsetW;\n this.offsetH = offsetH;\n }\n get description(): string {\n return actDescription.setProperty + \"[channel size] \" + this.channel.id;\n }\n undo(): void {\n this.channel.properties.channelWidth.value -= this.offsetW;\n this.channel.properties.channelHeight.value -= this.offsetH;\n }\n\n redo(): void {\n this.channel.properties.channelWidth.value += this.offsetW;\n this.channel.properties.channelHeight.value += this.offsetH;\n }\n}\nexport class MovePolygonVertexAct implements Activity {\n offsetX: number;\n offsetY: number;\n polygonPoint: number[];\n constructor(oldPos: number[], point: number[]) {\n this.offsetX = point[0] - oldPos[0];\n this.offsetY = point[1] - oldPos[1];\n this.polygonPoint = point;\n }\n\n get description(): string {\n return actDescription.moveVertex;\n }\n\n undo(): void {\n this.polygonPoint[0] -= this.offsetX;\n this.polygonPoint[1] -= this.offsetY;\n }\n\n redo(): void {\n this.polygonPoint[0] += this.offsetX;\n this.polygonPoint[1] += this.offsetY;\n }\n}\n\nexport class MoveChannelVertexAct implements Activity {\n oldPos: number[];\n newPos: number[];\n connectedToPortBefore: boolean;\n connectedToPortAfter: boolean;\n channelPoint: ChannelPoint;\n setChannelSize: undefined | SetChannelSize;\n constructor(\n oldPos: number[],\n channelPoint: ChannelPoint,\n connectedToPortBefore: boolean,\n connectedToPortAfter: boolean,\n setChannelSize = undefined\n ) {\n this.oldPos = oldPos;\n this.newPos = channelPoint.position;\n this.connectedToPortBefore = connectedToPortBefore;\n this.connectedToPortAfter = connectedToPortAfter;\n this.channelPoint = channelPoint;\n this.setChannelSize = setChannelSize;\n }\n\n get description(): string {\n return actDescription.moveVertex;\n }\n\n undo(): void {\n this.channelPoint.position = this.oldPos;\n this.channelPoint.isConnectedToPort = this.connectedToPortBefore;\n if (this.setChannelSize) {\n this.setChannelSize.undo();\n }\n }\n\n redo(): void {\n this.channelPoint.position = this.newPos;\n this.channelPoint.isConnectedToPort = this.connectedToPortAfter;\n if (this.setChannelSize) {\n this.setChannelSize.redo();\n }\n }\n}\n\nexport class MoveBridgeAct implements Activity {\n oldChannelSeg: ChannelSegment;\n newChannelSeg: ChannelSegment;\n oldPosOnSeg: number;\n newPosOnSeg: number;\n element: Bridge;\n constructor(elm: Bridge, oldChannelSeg: ChannelSegment, oldPos: number) {\n this.element = elm;\n this.oldChannelSeg = oldChannelSeg;\n this.oldPosOnSeg = oldPos;\n this.newChannelSeg = this.element.channelSegment;\n this.newPosOnSeg = this.element.posOnSeg;\n }\n\n get description(): string {\n return actDescription.move + this.element.id;\n }\n\n undo(): void {\n this.element.channelSegment = this.oldChannelSeg;\n this.element.posOnSeg = this.oldPosOnSeg;\n }\n\n redo(): void {\n this.element.channelSegment = this.newChannelSeg;\n this.element.posOnSeg = this.newPosOnSeg;\n }\n}\n\nexport class MoveModuleAct implements Activity {\n offsetX: number;\n offsetY: number;\n element: ModuleTemplate;\n constructor(elm: ModuleTemplate, x: number, y: number) {\n this.element = elm;\n this.offsetX = x;\n this.offsetY = y;\n }\n\n get description(): string {\n return actDescription.move + this.element.id;\n }\n\n undo(): void {\n this.element.setTranslate(-this.offsetX, -this.offsetY);\n this.element.updatePosition();\n }\n\n redo(): void {\n this.element.setTranslate(this.offsetX, this.offsetY);\n this.element.updatePosition();\n }\n}\n\nexport class MoveNodeElmAct implements Activity {\n offsetX: number;\n offsetY: number;\n element: BasicPart;\n constructor(elm: BasicPart, x: number, y: number) {\n this.element = elm;\n this.offsetX = x;\n this.offsetY = y;\n }\n\n get description(): string {\n return actDescription.move + this.element.id;\n }\n\n undo(): void {\n this.element.updatePosition(-this.offsetX, -this.offsetY);\n this.element.resetTranslate();\n }\n\n redo(): void {\n this.element.updatePosition(this.offsetX, this.offsetY);\n this.element.resetTranslate();\n }\n}\n\nexport class MoveGroupAct implements Activity {\n offsetX: number;\n offsetY: number;\n group: Array;\n constructor(group: Array, x: number, y: number) {\n this.group = group;\n this.offsetX = x;\n this.offsetY = y;\n }\n get description(): string {\n return actDescription.move + \"group\";\n }\n\n undo(): void {\n this.group.forEach((elm) => {\n if (\n elm instanceof Channel ||\n elm instanceof LevelConnection ||\n elm instanceof InletOutlet\n ) {\n elm.updatePosition(-this.offsetX, -this.offsetY);\n elm.resetTranslate();\n } else if (elm instanceof ModuleTemplate) {\n elm.setTranslate(-this.offsetX, -this.offsetY);\n elm.updatePosition();\n }\n });\n }\n\n redo(): void {\n this.group.forEach((elm) => {\n if (\n elm instanceof Channel ||\n elm instanceof LevelConnection ||\n elm instanceof InletOutlet\n ) {\n elm.updatePosition(this.offsetX, this.offsetY);\n elm.resetTranslate();\n } else if (elm instanceof ModuleTemplate) {\n elm.setTranslate(this.offsetX, this.offsetY);\n elm.updatePosition();\n }\n });\n }\n}\n\nexport class DeleteBasicElmAct implements Activity {\n element: ContentUnitGeneral;\n level: string;\n constructor(elm: ContentUnitGeneral, lv: string) {\n this.element = elm;\n this.level = lv;\n }\n\n get description(): string {\n return actDescription.delete + this.element.id;\n }\n\n undo(): void {\n if (this.element instanceof Bridge) {\n this.element.show = true;\n } else if (this.element instanceof ContentUnit) {\n this.element.display = true;\n }\n }\n\n redo(): void {\n if (this.element instanceof Bridge) {\n this.element.show = false;\n } else if (this.element instanceof ContentUnit) {\n this.element.display = false;\n }\n }\n}\n\n// bridges not included\nexport class DeleteGroupAct implements Activity {\n group: ContentUnit[];\n level: string;\n constructor(elm: ContentUnit[], lv: string) {\n this.group = elm;\n this.level = lv;\n }\n\n get description(): string {\n return actDescription.delete + \"group\";\n }\n\n undo(): void {\n this.group.forEach((elm) => {\n elm.display = true;\n });\n }\n\n redo(): void {\n this.group.forEach((elm) => {\n elm.display = false;\n });\n }\n}\n\nexport class PasteAct extends DeleteGroupAct {\n constructor(elm: ContentUnit[], lv: string) {\n super(elm, lv);\n }\n get description(): string {\n return \"Paste\";\n }\n\n undo(): void {\n this.group.forEach((elm) => {\n elm.display = false;\n });\n }\n\n redo(): void {\n this.group.forEach((elm) => {\n elm.display = true;\n });\n }\n}\n\nexport class BasicElementAct implements Activity {\n contentStore = useContentStore();\n controlStore = useControlStore();\n element: ContentUnit;\n level: string;\n constructor(elm: ContentUnit, lv: string) {\n this.element = elm;\n this.level = lv;\n }\n\n get description(): string {\n return actDescription.newElm + this.element.id;\n }\n\n undo(): void {\n if (\n this.element.id === this.contentStore.crtId ||\n this.contentStore.crtGroupId.indexOf(this.element.id) >= 0\n ) {\n this.controlStore.resetFlags();\n }\n if (this.element.type === \"level connection\") {\n this.contentStore.levelConnectionIds.pop();\n } else {\n this.contentStore.getLevelElmIds(this.level)?.pop();\n }\n this.contentStore.contentMap.delete(this.element.id);\n }\n\n redo(): void {\n if (this.element.type === \"level connection\") {\n this.contentStore.levelConnectionIds.push(this.element.id);\n } else {\n this.contentStore.getLevelElmIds(this.level)?.push(this.element.id);\n }\n\n this.contentStore.contentMap.set(this.element.id, this.element);\n }\n}\n\nexport const useHistoryStore = defineStore(\"history\", {\n state: () => ({\n activities: Array(),\n position: -1, // index of the newest activity already done\n actLenMax: 50\n }),\n actions: {\n setPosition(n: number) {\n while (n > this.position) {\n this.redo();\n }\n while (n < this.position) {\n this.undo();\n }\n },\n\n baforeAddingNewActivity() {\n if (this.position < this.activities.length - 1) {\n this.activities = this.activities.slice(0, this.position + 1);\n } else if (this.activities.length == this.actLenMax) {\n this.activities.shift();\n this.position -= 1;\n }\n },\n\n addActivity(act: Activity) {\n this.baforeAddingNewActivity();\n this.activities.push(act);\n this.position += 1;\n },\n\n undo() {\n if (this.position >= 0) {\n const undoAct = this.activities[this.position];\n this.position -= 1;\n undoAct.undo();\n }\n },\n\n redo() {\n if (this.position < this.activities.length - 1) {\n this.position += 1;\n const redoAct = this.activities[this.position];\n redoAct.redo();\n }\n }\n }\n});\n","import { ChannelPoint } from \"@/library/other\";\nimport { defineStore } from \"pinia\";\nimport { useCoordinateStore } from \"./coordinate\";\nimport { MoveChannelVertexAct, useHistoryStore } from \"./history\";\n\nconst dummyChannelPoint = new ChannelPoint([0, 0]);\nconst calculateCoordsWithDirection = (\n px: number,\n py: number,\n direction: number[],\n distance: number\n) => {\n // rotate vector [distance, 0] into direction\n // translate to p\n const k = Math.sqrt(direction[0] ** 2 + direction[1] ** 2);\n const cosR = direction[0] / k;\n const sinR = direction[1] / k;\n const x = distance * cosR + px;\n const y = distance * sinR + py;\n return { x, y };\n};\nconst getDirection = (p1: number[], p2: number[]) => {\n return [p2[0] - p1[0], p2[1] - p1[1]];\n};\nconst changePosition = (\n toChange: ChannelPoint,\n reference: ChannelPoint,\n distance: number\n) => {\n const dir = getDirection(reference.position, toChange.position);\n if (dir[0] !== 0 || dir[1] !== 0) {\n const p = calculateCoordsWithDirection(\n reference.position[0],\n reference.position[1],\n dir,\n distance\n );\n // break potential binding\n if (toChange.isConnectedToPort) {\n toChange.isConnectedToPort = false;\n toChange.position = [p.x, p.y];\n } else {\n toChange.position[0] = p.x;\n toChange.position[1] = p.y;\n }\n }\n};\nconst changePositionAction = (\n toChange: ChannelPoint,\n reference: ChannelPoint,\n distance: number\n) => {\n const connectedToPort = toChange.isConnectedToPort;\n const startPoint = toChange.position;\n toChange.position = toChange.position.slice();\n changePosition(toChange, reference, distance);\n const historyStore = useHistoryStore();\n historyStore.addActivity(\n new MoveChannelVertexAct(startPoint, toChange, connectedToPort, false)\n );\n};\n\nconst changePositionDraw = (\n toChange: number[],\n reference: ChannelPoint,\n distance: number,\n dirRef: number[],\n shift: boolean\n) => {\n const dir = getDirection(reference.position, dirRef);\n if (dir[0] !== 0 || dir[1] !== 0) {\n if (shift) {\n const R = (Math.atan2(dir[1], dir[0]) * 180) / Math.PI;\n const R45 = (Math.round(R / 45) + 8) % 8;\n switch (R45) {\n case 0: {\n dir[0] = 1;\n dir[1] = 0;\n break;\n }\n case 1: {\n dir[0] = 1;\n dir[1] = 1;\n break;\n }\n case 2: {\n dir[0] = 0;\n dir[1] = 1;\n break;\n }\n case 3: {\n dir[0] = -1;\n dir[1] = 1;\n break;\n }\n case 4: {\n dir[0] = -1;\n dir[1] = 0;\n break;\n }\n case 5: {\n dir[0] = -1;\n dir[1] = -1;\n break;\n }\n case 6: {\n dir[0] = 0;\n dir[1] = -1;\n break;\n }\n case 7: {\n dir[0] = 1;\n dir[1] = -1;\n break;\n }\n }\n }\n const p = calculateCoordsWithDirection(\n reference.position[0],\n reference.position[1],\n dir,\n distance\n );\n toChange[0] = p.x;\n toChange[1] = p.y;\n }\n};\n\nexport const useChannelSegInputStore = defineStore(\"channelSegInput\", {\n state: () => ({\n showInput: false,\n lengthValue: \"\",\n channelPoint1: dummyChannelPoint,\n channelPoint2: dummyChannelPoint,\n lengthLocked: false\n }),\n getters: {\n positionX(): number {\n const coordinateStore = useCoordinateStore();\n return coordinateStore.svgXToWindow(\n (this.channelPoint1.position[0] + this.channelPoint2.position[0]) / 2\n );\n },\n positionY(): number {\n const coordinateStore = useCoordinateStore();\n return coordinateStore.svgYToWindow(\n (this.channelPoint1.position[1] + this.channelPoint2.position[1]) / 2\n );\n },\n lockedDistance(): number {\n return parseInt(this.lengthValue);\n }\n },\n actions: {\n segLength(cp1: ChannelPoint, cp2: ChannelPoint) {\n const x = cp1.position[0] - cp2.position[0];\n const y = cp1.position[1] - cp2.position[1];\n return Math.sqrt(x ** 2 + y ** 2).toFixed();\n },\n hideChannelSegLengthInput() {\n this.showInput = false;\n },\n showChannelSegLengthInput(cp1: ChannelPoint, cp2: ChannelPoint) {\n this.channelPoint1 = cp1;\n this.channelPoint2 = cp2;\n this.lengthValue = this.segLength(cp1, cp2);\n this.showInput = true;\n },\n setLengthDraw(newLength: string) {\n const x = parseInt(newLength);\n if (!isNaN(x) && x !== 0) {\n // change channelPoint2 position\n changePosition(this.channelPoint2, this.channelPoint1, x);\n this.lengthValue = newLength;\n this.lengthLocked = true;\n this.channelPoint2.isConnectedToPort = false;\n }\n this.hideChannelSegLengthInput();\n },\n setLengthValue(newLength: string) {\n if (newLength !== this.lengthValue) {\n const x = parseInt(newLength);\n if (!isNaN(x) && x !== 0) {\n if (!this.channelPoint2.isConnectedToPort) {\n // change channelPoint2 position\n changePositionAction(this.channelPoint2, this.channelPoint1, x);\n } else if (!this.channelPoint1.isConnectedToPort) {\n // change channelPoint1\n changePositionAction(this.channelPoint1, this.channelPoint2, x);\n } else {\n // break binding of channelPoint2\n changePositionAction(this.channelPoint2, this.channelPoint1, x);\n }\n }\n }\n this.hideChannelSegLengthInput();\n },\n // called with locked seg length\n updateChannelSegDirection(shift: boolean) {\n const coordinateStore = useCoordinateStore();\n changePositionDraw(\n coordinateStore.roundedGlobalCoords,\n this.channelPoint1,\n this.lockedDistance,\n coordinateStore.globalCoords,\n shift\n );\n }\n }\n});\n","import { gridSizeList, hundredthViewBoxSize } from \"@/library/hardCodedValues\";\nimport { defineStore } from \"pinia\";\nimport { useChannelSegInputStore } from \"./channelSegmentInput\";\nimport { useContentStore } from \"./content\";\n\nfunction globalToWindowHelper(d: number, g: number) {\n return (d * g) / 100;\n}\nfunction windowToGlobalHelper(d: number, g: number) {\n return (d * 100) / g;\n}\nfunction zoomInTranslate(\n gridSizeList: number[],\n zoomIdx: number,\n gridSize: number,\n globalTranslateX: number,\n globalTranslateY: number,\n mousePosition: number[]\n) {\n return [\n globalTranslateX +\n (window.innerWidth / gridSizeList[zoomIdx + 1] -\n window.innerWidth / gridSize) *\n 50 +\n (((window.innerWidth / 2 - mousePosition[0]) * 100) /\n gridSizeList[zoomIdx + 1]) *\n (gridSizeList[zoomIdx + 1] / gridSize - 1),\n globalTranslateY +\n (window.innerHeight / gridSizeList[zoomIdx + 1] -\n window.innerHeight / gridSize) *\n 50 +\n (((window.innerHeight / 2 - mousePosition[1]) * 100) /\n gridSizeList[zoomIdx + 1]) *\n (gridSizeList[zoomIdx + 1] / gridSize - 1)\n ];\n}\nfunction zoomOutTranslate(\n gridSizeList: number[],\n zoomIdx: number,\n gridSize: number,\n globalTranslateX: number,\n globalTranslateY: number,\n mousePosition: number[]\n) {\n return [\n globalTranslateX +\n (window.innerWidth / gridSizeList[zoomIdx - 1] -\n window.innerWidth / gridSize) *\n 50 +\n (((window.innerWidth / 2 - mousePosition[0]) * 100) /\n gridSizeList[zoomIdx - 1]) *\n (gridSizeList[zoomIdx - 1] / gridSize - 1),\n globalTranslateY +\n (window.innerHeight / gridSizeList[zoomIdx - 1] -\n window.innerHeight / gridSize) *\n 50 +\n (((window.innerHeight / 2 - mousePosition[1]) * 100) /\n gridSizeList[zoomIdx - 1]) *\n (gridSizeList[zoomIdx - 1] / gridSize - 1)\n ];\n}\n\nexport const useCoordinateStore = defineStore(\"coordinate\", {\n state: () => ({\n windowCoords: [0, 0],\n globalCoords: [0, 0],\n roundedGlobalCoords: [0, 0],\n // initially 1px represents 40 um\n globalTranslateX: (window.innerWidth / 2) * 40,\n globalTranslateY: (window.innerHeight / 2) * 40,\n zoomIdx: 6,\n snapping: false,\n coordsVisible: false,\n minPrecision: false // toggle with TAB\n }),\n getters: {\n gridSize(): number {\n return gridSizeList[this.zoomIdx];\n },\n canvasSide(): number {\n return this.gridSize * hundredthViewBoxSize;\n },\n step(): number {\n if (this.gridSize < 1.5) return 10000;\n if (this.gridSize < 5) return 5000;\n if (this.gridSize < 10) return 2000;\n if (this.gridSize > 18) return 500;\n return 1000;\n },\n startX(): number {\n return Math.ceil(-this.globalTranslateX / this.step) * this.step;\n },\n startY(): number {\n return Math.ceil(-this.globalTranslateY / this.step) * this.step;\n },\n endX(): number {\n return (\n Math.floor(\n (windowToGlobalHelper(window.innerWidth, this.gridSize) -\n this.globalTranslateX) /\n this.step\n ) * this.step\n );\n },\n endY(): number {\n return (\n Math.floor(\n (windowToGlobalHelper(window.innerHeight, this.gridSize) -\n this.globalTranslateY) /\n this.step\n ) * this.step\n );\n },\n precisionGrid(): number {\n if (this.gridSize < 1.5) return 1000;\n if (this.gridSize < 5) return 500;\n if (this.gridSize < 10) return 200;\n if (this.gridSize > 18) return 50;\n return 100;\n },\n precision(): number {\n if (this.minPrecision) return 50;\n return this.precisionGrid;\n },\n\n windowTranslate(): string {\n const t0 = globalToWindowHelper(this.globalTranslateX, this.gridSize),\n t1 = globalToWindowHelper(this.globalTranslateY, this.gridSize);\n return `translate(${t0} ${t1})`;\n },\n globalTransform(): string {\n return `translate(${this.globalTranslateX} ${this.globalTranslateY})`;\n }\n },\n actions: {\n togglePrecision() {\n this.minPrecision = !this.minPrecision;\n },\n panWithMovement(movementX: number, movementY: number) {\n this.globalTranslateX += this.windowToGlobal(movementX);\n this.globalTranslateY += this.windowToGlobal(movementY);\n },\n roundCoords(x: number) {\n return Math.round(x / this.precision) * this.precision;\n },\n svgXToWindow(x: number) {\n return this.globalToWindow(x + this.globalTranslateX);\n },\n svgYToWindow(y: number) {\n return this.globalToWindow(y + this.globalTranslateY);\n },\n changeCoords(x: number, y: number) {\n this.windowCoords[0] = x;\n this.windowCoords[1] = y;\n const glX = (x / this.gridSize) * 100 - this.globalTranslateX;\n const glY = (y / this.gridSize) * 100 - this.globalTranslateY;\n this.globalCoords[0] = glX;\n this.globalCoords[1] = glY;\n const channelInput = useChannelSegInputStore();\n if (!this.snapping && !channelInput.lengthLocked) {\n this.roundedGlobalCoords[0] =\n Math.round(glX / this.precision) * this.precision;\n this.roundedGlobalCoords[1] =\n Math.round(glY / this.precision) * this.precision;\n }\n },\n range(start: number, stop: number, step: number) {\n return Array.from(\n { length: (stop - start) / step + 1 },\n (_, i) => start + i * step\n );\n },\n globalToWindow(d: number) {\n return (d * this.gridSize) / 100;\n },\n windowToGlobal(d: number) {\n return (d * 100) / this.gridSize;\n },\n zoomIn() {\n if (this.zoomIdx + 1 < gridSizeList.length) {\n const x =\n this.globalTranslateX +\n (window.innerWidth / gridSizeList[this.zoomIdx + 1] -\n window.innerWidth / this.gridSize) *\n 50,\n y =\n this.globalTranslateY +\n (window.innerHeight / gridSizeList[this.zoomIdx + 1] -\n window.innerHeight / this.gridSize) *\n 50;\n this.globalTranslateX = x;\n this.globalTranslateY = y;\n this.zoomIdx++;\n }\n },\n zoomOut() {\n if (this.zoomIdx - 1 >= 0) {\n const x =\n this.globalTranslateX +\n (window.innerWidth / gridSizeList[this.zoomIdx - 1] -\n window.innerWidth / this.gridSize) *\n 50,\n y =\n this.globalTranslateY +\n (window.innerHeight / gridSizeList[this.zoomIdx - 1] -\n window.innerHeight / this.gridSize) *\n 50;\n this.globalTranslateX = x;\n this.globalTranslateY = y;\n this.zoomIdx--;\n }\n },\n\n zoomInAtMouse() {\n if (this.zoomIdx + 1 < gridSizeList.length) {\n const [x, y] = zoomInTranslate(\n gridSizeList,\n this.zoomIdx,\n this.gridSize,\n this.globalTranslateX,\n this.globalTranslateY,\n this.windowCoords\n );\n this.globalTranslateX = x;\n this.globalTranslateY = y;\n this.zoomIdx++;\n }\n },\n zoomOutAtMouse() {\n if (this.zoomIdx - 1 >= 0) {\n const [x, y] = zoomOutTranslate(\n gridSizeList,\n this.zoomIdx,\n this.gridSize,\n this.globalTranslateX,\n this.globalTranslateY,\n this.windowCoords\n );\n this.globalTranslateX = x;\n this.globalTranslateY = y;\n this.zoomIdx--;\n }\n },\n resetView() {\n const contentStore = useContentStore();\n this.globalTranslateX =\n (window.innerWidth / this.gridSize) * 50 - contentStore.chipLengthX / 2;\n this.globalTranslateY =\n (window.innerHeight / this.gridSize) * 50 -\n contentStore.chipLengthY / 2;\n },\n setGlobalTranslate(x: number[]) {\n this.globalTranslateX = x[0];\n this.globalTranslateY = x[1];\n }\n }\n});\n","import ModuleTemplate from \"./moduleTemplate\";\nimport { ModuleOutput } from \"../typeDefinations\";\n\n// maintains the default module properties and create modules\nexport default abstract class ModuleCreatorTemplate {\n abstract moduleName: string;\n\n // might add \"unit\", \"step\" etc. for each property\n // defaultProperties: ModuleProperties;\n abstract description: string;\n abstract sample: string;\n abstract portSizeFixed: boolean;\n\n // for preview on module property board\n //pendingModule = new Module(defaultposition, args);\n abstract pendingModule: ModuleTemplate;\n // update preview, note that the position may need to be modified accordingly, which will not affect the placement\n abstract updatePendingModule(): void;\n\n abstract resetModule(): void;\n\n // initializeChannelPorts(m: ModuleTemplate): void {\n // if (this.portSizeFixed) {\n // m.initializeChannelPortsWithSize();\n // } else {\n // m.initializeChannelPortsWithoutSize();\n // }\n // }\n // add pending module to content and create a clone of pending module\n createModule(): ModuleTemplate {\n const res = this.pendingModule.clone();\n // reset position\n this.pendingModule.position = [\n this.pendingModule.position[0] -\n this.pendingModule.elementsToRender.topLeftCorner[0] +\n 400,\n this.pendingModule.position[1] -\n this.pendingModule.elementsToRender.topLeftCorner[1] +\n 400\n ];\n this.pendingModule.updateRender();\n res.setNewModuleId();\n res.initializeChannelPorts();\n res.updateRender();\n return res;\n }\n parseModule(content: ModuleOutput): ModuleTemplate {\n const res = this.pendingModule.clone();\n res.position = content.position;\n res.rotation = content.rotation;\n res.id = content.id;\n for (const [key, value] of Object.entries(content.properties)) {\n if (key in res.properties) {\n res.properties[key].value = value;\n } else {\n throw `invalid property ${key}`;\n }\n }\n res.layer = content.layer;\n res.initializeChannelPorts();\n res.updateRender();\n return res;\n }\n}\n","import { useContentStore } from \"@/stores/content\";\nimport { defaultPropertyStep } from \"../hardCodedValues\";\nimport ModuleTemplate from \"./moduleTemplate\";\nimport { Rectangle } from \"../primitives\";\nimport { ModuleProperty } from \"../typeDefinations\";\n\nexport default class Chamber extends ModuleTemplate {\n id = \"\";\n properties: ModuleProperty = {\n lengthX: {\n value: 4000,\n name: \"Length\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n lengthY: {\n value: 3200,\n name: \"Width\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n cornerRadius: {\n value: 400,\n name: \"Border Radius\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n height: {\n value: 400,\n name: \"Module Height\",\n step: defaultPropertyStep,\n unit: \"µm\"\n }\n };\n\n clone(): Chamber {\n const copy = new Chamber(this.position, this.layer, this.rotation);\n copy.properties.lengthX.value = this.properties.lengthX.value;\n copy.properties.lengthY.value = this.properties.lengthY.value;\n copy.properties.cornerRadius.value = this.properties.cornerRadius.value;\n copy.properties.height.value = this.properties.height.value;\n return copy;\n }\n\n setNewModuleId(): void {\n Chamber.count++;\n const contentStore = useContentStore();\n while (contentStore.contentMap.has(\"Chamber-\" + Chamber.count)) {\n Chamber.count++;\n }\n this.id = \"Chamber-\" + Chamber.count;\n }\n\n get getModuleIndex(): number {\n return 0;\n }\n get numberOfChannelPorts(): number {\n return 4;\n }\n get portSizeFixed(): boolean {\n return false;\n }\n\n // 2\n // 0 1\n // 3\n\n updatePortHelper(): void {\n this.channelPorts[0].position[0] = this.elementsToRender.topLeftCorner[0];\n this.channelPorts[0].position[1] = this.elementsToRender.centerPoint[1];\n this.channelPorts[1].position[0] =\n this.elementsToRender.topLeftCorner[0] + this.properties.lengthX.value;\n this.channelPorts[1].position[1] = this.elementsToRender.centerPoint[1];\n\n this.channelPorts[2].position[0] = this.elementsToRender.centerPoint[0];\n this.channelPorts[2].position[1] = this.elementsToRender.topLeftCorner[1];\n this.channelPorts[3].position[0] = this.elementsToRender.centerPoint[0];\n this.channelPorts[3].position[1] =\n this.elementsToRender.topLeftCorner[1] + this.properties.lengthY.value;\n if (this.rotation != 0) {\n const r = this.rotation;\n this.rotation = 0;\n this.setRotation(r);\n }\n }\n updateRender(): void {\n // Rotation may affect the result!!!\n // 1. set rotation = 0\n // 2. calculate new conterPoint\n // 3. resume rotation\n this.elementsToRender.topLeftCorner = [\n this.position[0],\n this.position[1] - this.properties.lengthY.value / 2\n ];\n this.elementsToRender.centerPoint = [\n this.position[0] + this.properties.lengthX.value / 2,\n this.position[1]\n ];\n this.elementsToRender.borderShapes = [\n new Rectangle(\n this.position[0],\n this.position[1] - this.properties.lengthY.value / 2,\n this.properties.cornerRadius.value,\n this.properties.lengthX.value,\n this.properties.lengthY.value,\n false\n )\n ];\n this.updatePort();\n }\n}\n","import ModuleCreatorTemplate from \"./moduleCreatorTemplate\";\nimport Chamber from \"./chamber\";\n\nexport default class ChamberCreator extends ModuleCreatorTemplate {\n moduleName = \"Chamber\";\n description =\n \"A microfluidic chamber is a device that can be utilized for various purposes, including but not limited to, fluid storage and cell culture.\";\n portSizeFixed = false;\n sample = \"SampleChamber\";\n pendingModule = new Chamber([500, 1600], \"\");\n constructor() {\n super();\n this.pendingModule.id = \"preview\";\n this.updatePendingModule();\n }\n resetModule(): void {\n Chamber.count = 0;\n this.pendingModule.properties.lengthX.value = 4000;\n this.pendingModule.properties.lengthY.value = 3200;\n this.pendingModule.properties.cornerRadius.value = 400;\n this.pendingModule.properties.height.value = 400;\n this.pendingModule.updateRender();\n }\n\n updatePendingModule(): void {\n this.pendingModule.position[1] =\n this.pendingModule.properties.lengthY.value / 2;\n this.pendingModule.updateRender();\n }\n updatePendingModulePosition(pos: number[]): void {\n this.pendingModule.position = [...pos];\n this.pendingModule.updateRender();\n }\n}\n","import { Rectangle, Circle } from \"../primitives\";\nimport ModuleTemplate from \"./moduleTemplate\";\nimport { defaultPropertyStep } from \"../hardCodedValues\";\nimport { ModuleOutput, ModuleProperty, Shape } from \"../typeDefinations\";\nimport { useContentStore } from \"@/stores/content\";\n\nexport default class Filter extends ModuleTemplate {\n id = \"\";\n properties: ModuleProperty = {\n lengthX: {\n value: 4000,\n name: \"Length\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n lengthY: {\n value: 3200,\n name: \"Width\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n cornerRadius: {\n value: 400,\n name: \"Border Radius\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n pillarRow: { value: 3, name: \"Number of pillar rows\", step: 1, unit: \"\" },\n pillarCol: {\n value: 4,\n name: \"Number of Pillar Columns\",\n step: 1,\n unit: \"\"\n },\n pillarRadius: {\n value: 200,\n name: \"Pillar Radius\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n height: {\n value: 400,\n name: \"Module Height\",\n step: defaultPropertyStep,\n unit: \"µm\"\n }\n };\n\n get getModuleIndex(): number {\n return 1;\n }\n get numberOfChannelPorts(): number {\n return 4;\n }\n get portSizeFixed(): boolean {\n return false;\n }\n static parse(content: ModuleOutput): Filter {\n const res = new Filter(content.position, content.layer);\n res.rotation = content.rotation;\n for (const [key, value] of Object.entries(content.properties)) {\n if (key in res.properties) {\n res.properties[key].value = value;\n } else {\n throw `invalid property ${key}`;\n }\n }\n res.updateRender();\n return res;\n }\n clone(): Filter {\n const copy = new Filter(this.position, this.layer, this.rotation);\n copy.properties.lengthX.value = this.properties.lengthX.value;\n copy.properties.lengthY.value = this.properties.lengthY.value;\n copy.properties.cornerRadius.value = this.properties.cornerRadius.value;\n copy.properties.pillarRow.value = this.properties.pillarRow.value;\n copy.properties.pillarCol.value = this.properties.pillarCol.value;\n copy.properties.pillarRadius.value = this.properties.pillarRadius.value;\n copy.properties.height.value = this.properties.height.value;\n return copy;\n }\n setNewModuleId(): void {\n Filter.count++;\n const contentStore = useContentStore();\n while (contentStore.contentMap.has(\"Filter-\" + Filter.count)) {\n Filter.count++;\n }\n this.id = \"Filter-\" + Filter.count;\n }\n updatePortHelper(): void {\n this.channelPorts[0].position[0] = this.elementsToRender.topLeftCorner[0];\n this.channelPorts[0].position[1] = this.elementsToRender.centerPoint[1];\n this.channelPorts[1].position[0] =\n this.elementsToRender.topLeftCorner[0] + this.properties.lengthX.value;\n this.channelPorts[1].position[1] = this.elementsToRender.centerPoint[1];\n\n this.channelPorts[2].position[0] = this.elementsToRender.centerPoint[0];\n this.channelPorts[2].position[1] = this.elementsToRender.topLeftCorner[1];\n this.channelPorts[3].position[0] = this.elementsToRender.centerPoint[0];\n this.channelPorts[3].position[1] =\n this.elementsToRender.topLeftCorner[1] + this.properties.lengthY.value;\n if (this.rotation != 0) {\n const r = this.rotation;\n this.rotation = 0;\n this.setRotation(r);\n }\n }\n updateRender(): void {\n this.elementsToRender.topLeftCorner = [\n this.position[0],\n this.position[1] - this.properties.lengthY.value / 2\n ];\n this.elementsToRender.centerPoint = [\n this.position[0] + this.properties.lengthX.value / 2,\n this.position[1]\n ];\n this.elementsToRender.borderShapes = [\n new Rectangle(\n this.position[0],\n this.position[1] - this.properties.lengthY.value / 2,\n this.properties.cornerRadius.value,\n this.properties.lengthX.value,\n this.properties.lengthY.value,\n false\n )\n ];\n\n // compute mask\n const maskShapes = Array();\n const startX =\n (this.properties.lengthX.value -\n this.properties.pillarRadius.value *\n 2 *\n this.properties.pillarCol.value) /\n (this.properties.pillarCol.value + 1) +\n this.properties.pillarRadius.value;\n const stepX = startX + this.properties.pillarRadius.value;\n const pillarX = Array.from(\n { length: this.properties.pillarCol.value },\n (_, i) => this.elementsToRender.topLeftCorner[0] + startX + i * stepX\n );\n const startY =\n (this.properties.lengthY.value -\n this.properties.pillarRadius.value *\n 2 *\n this.properties.pillarRow.value) /\n (this.properties.pillarRow.value + 1) +\n this.properties.pillarRadius.value;\n const stepY = startY + this.properties.pillarRadius.value;\n const pillarY = Array.from(\n { length: this.properties.pillarRow.value },\n (_, i) => this.elementsToRender.topLeftCorner[1] + startY + i * stepY\n );\n pillarX.forEach((x) => {\n pillarY.forEach((y) => {\n maskShapes.push(\n new Circle(x, y, this.properties.pillarRadius.value, true)\n );\n });\n });\n this.elementsToRender.maskShapes = maskShapes;\n this.updatePort();\n }\n}\n","import ModuleCreatorTemplate from \"./moduleCreatorTemplate\";\nimport Filter from \"./filter\";\n\nexport default class FilterCreator extends ModuleCreatorTemplate {\n moduleName = \"Filter\";\n description =\n \"A chamber equipped with multiple pillars, can be utilized for a variety of applications such as filtering and mixing.\";\n sample = \"SampleFilter\";\n portSizeFixed = false;\n pendingModule = new Filter([500, 1600], \"\");\n constructor() {\n super();\n this.pendingModule.id = \"preview\";\n this.updatePendingModule();\n }\n resetModule(): void {\n Filter.count = 0;\n this.pendingModule.properties.lengthX.value = 4000;\n this.pendingModule.properties.lengthY.value = 3200;\n this.pendingModule.properties.cornerRadius.value = 400;\n this.pendingModule.properties.pillarRow.value = 3;\n this.pendingModule.properties.pillarCol.value = 4;\n this.pendingModule.properties.pillarRadius.value = 200;\n this.pendingModule.properties.height.value = 400;\n this.pendingModule.updateRender();\n }\n\n updatePendingModule(): void {\n this.pendingModule.position[1] =\n this.pendingModule.properties.lengthY.value / 2;\n this.pendingModule.updateRender();\n }\n\n updatePendingModulePosition(pos: number[]): void {\n this.pendingModule.position = [...pos];\n this.pendingModule.updateRender();\n }\n}\n","import { useContentStore } from \"@/stores/content\";\nimport { defaultPropertyStep } from \"../hardCodedValues\";\nimport ModuleTemplate from \"./moduleTemplate\";\nimport { Path } from \"../primitives\";\nimport { ModuleProperty } from \"../typeDefinations\";\n\nexport default class DelayChannel extends ModuleTemplate {\n id = \"\";\n properties: ModuleProperty = {\n width: {\n value: 4000,\n name: \"Width\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n channelWidth: {\n value: 400,\n name: \"Channel Width\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n channelDist: {\n value: 800,\n name: \"Channel Distance\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n turningsNum: { value: 4, name: \"Number of Turnings\", step: 1, unit: \"\" },\n turningRadius: {\n value: 400,\n name: \"Turning Radius\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n portLength: {\n value: 500,\n name: \"Length of connection channel\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n height: {\n value: 400,\n name: \"Module Height\",\n step: defaultPropertyStep,\n unit: \"µm\"\n }\n };\n get getModuleIndex(): number {\n return 2;\n }\n get numberOfChannelPorts(): number {\n return 2;\n }\n get portSizeFixed(): boolean {\n return false;\n }\n\n clone(): DelayChannel {\n const copy = new DelayChannel(this.position, this.layer, this.rotation);\n copy.properties.channelWidth.value = this.properties.channelWidth.value;\n copy.properties.channelDist.value = this.properties.channelDist.value;\n copy.properties.width.value = this.properties.width.value;\n copy.properties.turningsNum.value = this.properties.turningsNum.value;\n copy.properties.height.value = this.properties.height.value;\n copy.properties.turningRadius.value = this.properties.turningRadius.value;\n copy.properties.portLength.value = this.properties.portLength.value;\n return copy;\n }\n setNewModuleId(): void {\n DelayChannel.count++;\n const contentStore = useContentStore();\n while (contentStore.contentMap.has(\"DelayChannel-\" + DelayChannel.count)) {\n DelayChannel.count++;\n }\n this.id = \"DelayChannel-\" + DelayChannel.count;\n }\n\n updatePortHelper(): void {\n this.channelPorts[0].position[0] = this.position[0];\n this.channelPorts[0].position[1] = this.position[1];\n this.channelPorts[1].position[0] =\n this.position[0] +\n this.properties.channelDist.value * this.properties.turningsNum.value +\n this.properties.portLength.value * 2;\n this.channelPorts[1].position[1] = this.position[1];\n\n if (this.rotation != 0) {\n const r = this.rotation;\n this.rotation = 0;\n this.setRotation(r);\n }\n }\n updateRender(): void {\n // fix invalid properties\n // this.properties.channelWidth.value / 2 <= r <= this.properties.channelDist.value/ 2\n\n // this.properties.turningRadius.value =\n // this.properties.turningRadius.value <\n // this.properties.channelWidth.value / 2\n // ? this.properties.channelWidth.value / 2\n // : this.properties.turningRadius.value >\n // this.properties.channelDist.value / 2\n // ? this.properties.channelDist.value / 2\n // : this.properties.turningRadius.value;\n\n if (this.properties.turningsNum.value < 1)\n this.properties.turningsNum.value = 1;\n\n const r = this.properties.turningRadius.value;\n const pl = this.properties.portLength.value;\n const x = pl - this.properties.channelWidth.value / 2;\n this.elementsToRender.topLeftCorner = [\n this.position[0] - this.properties.channelWidth.value / 2,\n this.position[1] -\n this.properties.width.value / 2 -\n this.properties.channelWidth.value / 2\n ];\n this.elementsToRender.centerPoint = [\n this.position[0] +\n (this.properties.channelDist.value *\n this.properties.turningsNum.value) /\n 2 +\n r +\n (x > 0 ? pl : 0),\n this.position[1]\n ];\n // length of vertical lines\n const h = this.properties.width.value - 2 * r;\n\n const hHalf = h / 2 - r;\n const dist = this.properties.channelDist.value - r * 2;\n let pathDef = `M ${this.position[0]} ${this.position[1]}`;\n if (pl > this.properties.channelWidth.value / 2)\n pathDef += `h${pl >= r ? pl - r : pl}`;\n pathDef +=\n r > 0 && pl >= r\n ? `a${r} ${r} 0 0 0 ${r} ${-r} v${-hHalf}`\n : `v${-h / 2}`;\n const rep =\n r > 0\n ? `a${r} ${r} 0 0 1 ${r} ${-r} h${dist} a${r} ${r} 0 0 1 ${r} ${r} v${h} a${r} ${r} 0 0 0 ${r} ${r} h${dist} a${r} ${r} 0 0 0 ${r} ${-r} v${-h}`\n : `h${dist} v${h} h${dist} v${-h}`;\n pathDef += rep.repeat((this.properties.turningsNum.value - 1) / 2);\n pathDef +=\n r > 0\n ? `a${r} ${r} 0 0 1 ${r} ${-r} h${dist} a${r} ${r} 0 0 1 ${r} ${r}`\n : `h${dist}`;\n if (this.properties.turningsNum.value % 2) {\n pathDef +=\n r > 0 && pl >= r ? `v${hHalf} a${r} ${r} 0 0 0 ${r} ${r}` : `v${h / 2}`;\n } else {\n pathDef +=\n r > 0 && pl >= r\n ? `v${h} a${r} ${r} 0 0 0 ${r} ${r} h${dist} a${r} ${r} 0 0 0 ${r} ${-r} v${-hHalf} a${r} ${r} 0 0 1 ${r} ${-r}`\n : `v${h} a${r} ${r} 0 0 0 ${r} ${r} h${dist} a${r} ${r} 0 0 0 ${r} ${-r} v${\n -h / 2\n }`;\n }\n if (pl > this.properties.channelWidth.value / 2)\n pathDef += `h${pl >= r ? pl - r : pl}`;\n this.elementsToRender.borderShapes = [\n new Path(pathDef, this.properties.channelWidth.value, false)\n ];\n this.updatePort();\n }\n}\n","import ModuleCreatorTemplate from \"./moduleCreatorTemplate\";\nimport DelayChannel from \"./delayChannel\";\n\nexport default class DelayChannelCreator extends ModuleCreatorTemplate {\n moduleName = \"Serpentine Channel\";\n description =\n \"A serpentine-shaped channel can be used to passively mix fluids or delay their flow.\";\n portSizeFixed = false;\n sample = \"SampleDelayChannel\";\n pendingModule = new DelayChannel([500, 2400], \"\");\n constructor() {\n super();\n this.pendingModule.id = \"preview\";\n this.updatePendingModule();\n }\n resetModule(): void {\n DelayChannel.count = 0;\n this.pendingModule.properties.width.value = 4000;\n this.pendingModule.properties.channelWidth.value = 400;\n this.pendingModule.properties.channelDist.value = 800;\n this.pendingModule.properties.turningsNum.value = 4;\n this.pendingModule.properties.turningRadius.value = 400;\n this.pendingModule.properties.height.value = 400;\n this.pendingModule.updateRender();\n }\n updatePendingModule(): void {\n this.pendingModule.position[1] =\n this.pendingModule.properties.width.value / 2 +\n this.pendingModule.properties.channelWidth.value;\n this.pendingModule.updateRender();\n }\n updatePendingModulePosition(pos: number[]): void {\n this.pendingModule.position = [...pos];\n this.pendingModule.updateRender();\n }\n}\n","import { useContentStore } from \"@/stores/content\";\nimport { defaultPropertyStep } from \"../hardCodedValues\";\nimport ModuleTemplate from \"./moduleTemplate\";\nimport { Path } from \"../primitives\";\nimport { ModuleProperty } from \"../typeDefinations\";\n\nexport default class TeslaValve extends ModuleTemplate {\n id = \"\";\n properties: ModuleProperty = {\n channelWidth: {\n value: 400,\n name: \"Channel Width\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n segPairNum: {\n value: 2,\n name: \"Number of Segment Pairs\",\n step: 1,\n unit: \"\"\n },\n segLenX: {\n value: 2000,\n name: \"Segment Length\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n segLenY: {\n value: 1200,\n name: \"Segment Width\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n height: {\n value: 400,\n name: \"Module Height\",\n step: defaultPropertyStep,\n unit: \"µm\"\n }\n };\n\n get getModuleIndex(): number {\n return 3;\n }\n get numberOfChannelPorts(): number {\n return 2;\n }\n get portSizeFixed(): boolean {\n return false;\n }\n\n clone(): TeslaValve {\n const copy = new TeslaValve(this.position, this.layer, this.rotation);\n copy.properties.channelWidth.value = this.properties.channelWidth.value;\n copy.properties.segPairNum.value = this.properties.segPairNum.value;\n copy.properties.segLenX.value = this.properties.segLenX.value;\n copy.properties.height.value = this.properties.height.value;\n copy.properties.segLenY.value = this.properties.segLenY.value;\n copy.updateRender();\n return copy;\n }\n setNewModuleId(): void {\n TeslaValve.count++;\n const contentStore = useContentStore();\n while (contentStore.contentMap.has(\"TeslaValve-\" + TeslaValve.count)) {\n TeslaValve.count++;\n }\n this.id = \"TeslaValve-\" + TeslaValve.count;\n }\n\n updatePortHelper(): void {\n this.channelPorts[0].position[0] = this.position[0];\n this.channelPorts[0].position[1] = this.position[1];\n this.channelPorts[1].position[0] =\n this.position[0] +\n this.properties.segLenX.value * this.properties.segPairNum.value * 2 +\n this.properties.segLenY.value / 2;\n this.channelPorts[1].position[1] = this.position[1];\n\n if (this.rotation != 0) {\n const r = this.rotation;\n this.rotation = 0;\n this.setRotation(r);\n }\n }\n updateRender(): void {\n this.elementsToRender.topLeftCorner = [\n this.position[0],\n this.position[1] - this.properties.segLenY.value\n ];\n this.elementsToRender.centerPoint = [\n this.position[0] +\n this.properties.segLenX.value * this.properties.segPairNum.value +\n this.properties.segLenY.value / 4,\n this.position[1]\n ];\n\n const r = this.properties.segLenY.value / 2;\n\n let pathDef = `M${this.position[0]} ${this.position[1]}`;\n const rep = `l${this.properties.segLenX.value} ${-r} a${r} ${r} 0 0 1 0 ${\n this.properties.segLenY.value\n } m${-this.properties.segLenX.value} ${-r} l${\n this.properties.segLenX.value * 2\n } ${this.properties.segLenY.value} a${r} ${r} 0 0 0 0 ${-this.properties\n .segLenY.value} m${-this.properties.segLenX.value} ${r} l${\n this.properties.segLenX.value\n } ${-r}`;\n pathDef += rep.repeat(this.properties.segPairNum.value);\n pathDef += `l${r} 0`;\n\n this.elementsToRender.borderShapes = [\n new Path(pathDef, this.properties.channelWidth.value, false)\n ];\n this.updatePort();\n }\n}\n","import ModuleCreatorTemplate from \"./moduleCreatorTemplate\";\nimport TeslaValve from \"./teslaValve\";\n\nexport default class TeslaValveCreator extends ModuleCreatorTemplate {\n moduleName = \"Tesla Valve\";\n description =\n \"Tesla valves are commonly used for applications such as flow control, mixing, and droplet generation.\";\n\n sample = \"SampleTeslaValve\";\n portSizeFixed = false;\n pendingModule = new TeslaValve([500, 1000], \"\");\n constructor() {\n super();\n this.pendingModule.id = \"preview\";\n this.updatePendingModule();\n }\n resetModule(): void {\n TeslaValve.count = 0;\n this.pendingModule.properties.channelWidth.value = 400;\n this.pendingModule.properties.segPairNum.value = 2;\n this.pendingModule.properties.segLenX.value = 2000;\n this.pendingModule.properties.segLenY.value = 1200;\n this.pendingModule.properties.height.value = 400;\n this.pendingModule.updateRender();\n }\n updatePendingModule(): void {\n this.pendingModule.position[1] =\n this.pendingModule.properties.segLenY.value / 2 +\n this.pendingModule.properties.channelWidth.value;\n this.pendingModule.updateRender();\n }\n updatePendingModulePosition(pos: number[]): void {\n this.pendingModule.position = [...pos];\n this.pendingModule.updateRender();\n }\n}\n","import { useContentStore } from \"@/stores/content\";\nimport { defaultPropertyStep } from \"../hardCodedValues\";\nimport ModuleTemplate from \"./moduleTemplate\";\nimport { Path } from \"../primitives\";\nimport { ModuleOutput, ModuleProperty } from \"../typeDefinations\";\n\nexport default class Droplet extends ModuleTemplate {\n id = \"\";\n properties: ModuleProperty = {\n disperseW: {\n value: 400,\n name: \"Width of Disperse Channel\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n continuousW: {\n value: 400,\n name: \"Width of Continuous Channel\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n dropletW: {\n value: 200,\n name: \"Width of Droplet Channel\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n dropletL: {\n value: 360,\n name: \"Length of Droplet Channel\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n connectionL: {\n value: 1200,\n name: \"Length of Connectors\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n height: {\n value: 400,\n name: \"Module Height\",\n step: defaultPropertyStep,\n unit: \"µm\"\n }\n };\n\n get getModuleIndex(): number {\n return 4;\n }\n get numberOfChannelPorts(): number {\n return 4;\n }\n get portSizeFixed(): boolean {\n return false;\n }\n static parse(content: ModuleOutput): Droplet {\n const res = new Droplet(content.position, content.layer);\n res.rotation = content.rotation;\n for (const [key, value] of Object.entries(content.properties)) {\n if (key in res.properties) {\n res.properties[key].value = value;\n } else {\n throw `invalid property ${key}`;\n }\n }\n res.updateRender();\n return res;\n }\n clone(): Droplet {\n const copy = new Droplet(this.position, this.layer, this.rotation);\n copy.properties.disperseW.value = this.properties.disperseW.value;\n copy.properties.continuousW.value = this.properties.continuousW.value;\n copy.properties.dropletW.value = this.properties.dropletW.value;\n copy.properties.height.value = this.properties.height.value;\n copy.properties.dropletL.value = this.properties.dropletL.value;\n copy.properties.connectionL.value = this.properties.connectionL.value;\n copy.updateRender();\n return copy;\n }\n setNewModuleId(): void {\n Droplet.count++;\n const contentStore = useContentStore();\n while (contentStore.contentMap.has(\"Droplet-\" + Droplet.count)) {\n Droplet.count++;\n }\n this.id = \"Droplet-\" + Droplet.count;\n }\n\n updatePortHelper(): void {\n this.channelPorts[0].position[0] = this.position[0];\n this.channelPorts[0].position[1] = this.position[1];\n\n this.channelPorts[1].position[0] =\n this.position[0] + this.properties.connectionL.value;\n this.channelPorts[1].position[1] =\n this.position[1] - this.properties.connectionL.value;\n\n this.channelPorts[2].position[0] =\n this.position[0] +\n this.properties.connectionL.value * 2 +\n this.properties.dropletL.value;\n this.channelPorts[2].position[1] = this.position[1];\n\n this.channelPorts[3].position[0] =\n this.position[0] + this.properties.connectionL.value;\n this.channelPorts[3].position[1] =\n this.position[1] + this.properties.connectionL.value;\n\n if (this.rotation != 0) {\n const r = this.rotation;\n this.rotation = 0;\n this.setRotation(r);\n }\n }\n updateRender(): void {\n this.elementsToRender.topLeftCorner = [\n this.position[0],\n this.position[1] - this.properties.connectionL.value\n ];\n this.elementsToRender.centerPoint = [\n this.position[0] +\n this.properties.connectionL.value +\n this.properties.dropletL.value / 2,\n this.position[1]\n ];\n\n const continuousPath = `M ${\n this.position[0] + this.properties.connectionL.value\n } ${this.position[1] - this.properties.connectionL.value} v ${\n this.properties.connectionL.value * 2\n }`;\n\n const dispersePath = `M ${this.position[0]} ${this.position[1]} h ${this.properties.connectionL.value} m ${this.properties.dropletL.value} 0 h ${this.properties.connectionL.value}`;\n\n const dropletPath = `M ${\n this.position[0] + this.properties.connectionL.value\n } ${this.position[1]} h ${this.properties.dropletL.value}`;\n\n this.elementsToRender.borderShapes = [\n new Path(continuousPath, this.properties.continuousW.value, false),\n new Path(dispersePath, this.properties.disperseW.value, false),\n new Path(dropletPath, this.properties.dropletW.value, false)\n ];\n this.updatePort();\n }\n}\n","import ModuleCreatorTemplate from \"./moduleCreatorTemplate\";\nimport Droplet from \"./droplet\";\n\nexport default class DropletCreator extends ModuleCreatorTemplate {\n moduleName = \"Droplet\";\n description =\n \"A droplet generator is a component that creates tiny droplets of fluid. It is used for applications such as drug discovery, cell encapsulation, and chemical synthesis.\";\n portSizeFixed = false;\n sample = \"SampleDroplet\";\n pendingModule = new Droplet([500, 1200], \"\");\n constructor() {\n super();\n this.pendingModule.id = \"preview\";\n this.updatePendingModule();\n }\n resetModule(): void {\n Droplet.count = 0;\n this.pendingModule.properties.disperseW.value = 400;\n this.pendingModule.properties.continuousW.value = 400;\n this.pendingModule.properties.dropletW.value = 200;\n this.pendingModule.properties.dropletL.value = 360;\n this.pendingModule.properties.connectionL.value = 1200;\n this.pendingModule.properties.height.value = 400;\n this.pendingModule.updateRender();\n }\n updatePendingModule(): void {\n this.pendingModule.position[1] =\n this.pendingModule.properties.connectionL.value;\n this.pendingModule.updateRender();\n }\n updatePendingModulePosition(pos: number[]): void {\n this.pendingModule.position = [...pos];\n this.pendingModule.updateRender();\n }\n}\n","import ModuleTemplate from \"./moduleTemplate\";\nimport { Polygon, Path } from \"../primitives\";\nimport { ChannelPortWithSize } from \"../other\";\nimport { defaultPropertyStep } from \"../hardCodedValues\";\nimport { ModuleProperty } from \"../typeDefinations\";\nimport { useContentStore } from \"@/stores/content\";\n\nexport default class TransitionWidth extends ModuleTemplate {\n id = \"\";\n properties: ModuleProperty = {\n transitionL: {\n value: 400,\n name: \"Transition Length\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n width1: {\n value: 400,\n name: \"Transition Width Left\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n width2: {\n value: 200,\n name: \"Transition Width Right\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n connectionL: {\n value: 400,\n name: \"Connection Channel Length\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n height: {\n value: 400,\n name: \"Module Height\",\n step: defaultPropertyStep,\n unit: \"µm\"\n }\n };\n widthMax: number;\n\n constructor(position: number[], layer: string, rotation = 0) {\n super(position, layer, rotation);\n const w1 = this.properties.width1.value;\n const w2 = this.properties.width2.value;\n this.widthMax = Math.max(w1, w2);\n this.updateRender();\n }\n get getModuleIndex(): number {\n return 5;\n }\n get numberOfChannelPorts(): number {\n return 2;\n }\n get portSizeFixed(): boolean {\n return true;\n }\n\n clone(): TransitionWidth {\n const copy = new TransitionWidth(this.position, this.layer, this.rotation);\n copy.properties.transitionL.value = this.properties.transitionL.value;\n copy.properties.width1.value = this.properties.width1.value;\n copy.properties.width2.value = this.properties.width2.value;\n copy.properties.height.value = this.properties.height.value;\n copy.properties.connectionL.value = this.properties.connectionL.value;\n return copy;\n }\n setNewModuleId(): void {\n TransitionWidth.count++;\n const contentStore = useContentStore();\n while (\n contentStore.contentMap.has(\"TransitionWidth-\" + TransitionWidth.count)\n ) {\n TransitionWidth.count++;\n }\n this.id = \"TransitionWidth-\" + TransitionWidth.count;\n }\n\n updatePortHelper(): void {\n this.channelPorts[0].position[0] = this.position[0];\n this.channelPorts[0].position[1] = this.position[1];\n\n this.channelPorts[1].position[0] =\n this.position[0] +\n this.properties.transitionL.value +\n this.properties.connectionL.value * 2;\n this.channelPorts[1].position[1] = this.position[1];\n\n if (this.channelPorts[0] instanceof ChannelPortWithSize) {\n this.channelPorts[0].portWidth = this.properties.width1.value;\n this.channelPorts[0].portHeight = this.properties.height.value;\n }\n\n if (this.channelPorts[1] instanceof ChannelPortWithSize) {\n this.channelPorts[1].portWidth = this.properties.width2.value;\n this.channelPorts[1].portHeight = this.properties.height.value;\n }\n\n if (this.rotation != 0) {\n const r = this.rotation;\n this.rotation = 0;\n this.setRotation(r);\n }\n }\n updateRender(): void {\n this.widthMax = Math.max(\n this.properties.width1.value,\n this.properties.width2.value\n );\n this.elementsToRender.topLeftCorner = [\n this.position[0],\n this.position[1] - this.widthMax / 2\n ];\n this.elementsToRender.centerPoint = [\n this.position[0] +\n this.properties.transitionL.value / 2 +\n this.properties.connectionL.value,\n this.position[1]\n ];\n\n const points = [\n [\n this.position[0] + this.properties.connectionL.value,\n this.position[1] + this.properties.width1.value / 2\n ],\n [\n this.position[0] + this.properties.connectionL.value,\n this.position[1] - this.properties.width1.value / 2\n ],\n [\n this.position[0] +\n this.properties.connectionL.value +\n this.properties.transitionL.value,\n this.position[1] - this.properties.width2.value / 2\n ],\n [\n this.position[0] +\n this.properties.connectionL.value +\n this.properties.transitionL.value,\n this.position[1] + this.properties.width2.value / 2\n ]\n ];\n this.elementsToRender.borderShapes = [new Polygon(points, false)];\n if (this.properties.connectionL.value > 0) {\n const connection1 = `M ${this.position[0]} ${this.position[1]} h ${this.properties.connectionL.value}`;\n const connection2 = `M ${\n this.position[0] +\n this.properties.connectionL.value +\n this.properties.transitionL.value\n } ${this.position[1]} h ${this.properties.connectionL.value}`;\n this.elementsToRender.borderShapes.push(\n new Path(connection1, this.properties.width1.value, false)\n );\n this.elementsToRender.borderShapes.push(\n new Path(connection2, this.properties.width2.value, false)\n );\n }\n\n this.updatePort();\n }\n}\n","import ModuleCreatorTemplate from \"./moduleCreatorTemplate\";\nimport TransitionWidth from \"./transitionWidth\";\n\nexport default class TransitionWidthCreator extends ModuleCreatorTemplate {\n moduleName = \"Width Transition\";\n description =\n \"A component that is used to connect two channels that have different widths. It serves as a connector between the channels, allowing fluid to flow from one channel to another smoothly.\";\n\n sample = \"SampleTransition\";\n portSizeFixed = true;\n pendingModule = new TransitionWidth([500, 200], \"\");\n constructor() {\n super();\n this.pendingModule.id = \"preview\";\n this.updatePendingModule();\n }\n resetModule(): void {\n TransitionWidth.count = 0;\n this.pendingModule.properties.transitionL.value = 400;\n this.pendingModule.properties.width1.value = 400;\n this.pendingModule.properties.width2.value = 200;\n this.pendingModule.properties.connectionL.value = 400;\n this.pendingModule.properties.height.value = 400;\n this.pendingModule.updateRender();\n }\n updatePendingModule(): void {\n this.pendingModule.position[1] =\n Math.max(\n this.pendingModule.properties.width1.value,\n this.pendingModule.properties.width2.value\n ) / 2;\n this.pendingModule.updateRender();\n }\n updatePendingModulePosition(pos: number[]): void {\n this.pendingModule.position = [...pos];\n this.pendingModule.updateRender();\n }\n}\n","import ModuleTemplate from \"./moduleTemplate\";\nimport { Polygon, Path, pointTransform } from \"../primitives\";\nimport { ChannelPortWithSize } from \"../other\";\nimport { ComponentObject, ModuleProperty } from \"../typeDefinations\";\nimport {\n PayloadChannel,\n PayloadPolygon,\n PayloadShape,\n Point\n} from \"../payloadPrimitives\";\nimport { defaultPropertyStep } from \"../hardCodedValues\";\nimport { useContentStore } from \"@/stores/content\";\n\nexport default class TransitionHeight extends ModuleTemplate {\n id = \"\";\n properties: ModuleProperty = {\n transitionL: {\n value: 400,\n name: \"Transition Length\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n height: {\n value: 400,\n name: \"Transition Height Left\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n height_after: {\n value: 200,\n name: \"Transition Height Right\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n connectionL: {\n value: 400,\n name: \"Connection Channel Length\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n width: {\n value: 400,\n name: \"Transition Width\",\n step: defaultPropertyStep,\n unit: \"µm\"\n }\n };\n get getModuleIndex(): number {\n return 6;\n }\n get numberOfChannelPorts(): number {\n return 2;\n }\n get portSizeFixed(): boolean {\n return true;\n }\n\n getHeight(): number {\n return Math.max(\n this.properties.height.value,\n this.properties.height_after.value\n );\n }\n\n clone(): TransitionHeight {\n const copy = new TransitionHeight(this.position, this.layer, this.rotation);\n copy.properties.transitionL.value = this.properties.transitionL.value;\n copy.properties.height.value = this.properties.height.value;\n copy.properties.height_after.value = this.properties.height_after.value;\n copy.properties.width.value = this.properties.width.value;\n copy.properties.connectionL.value = this.properties.connectionL.value;\n return copy;\n }\n setNewModuleId(): void {\n TransitionHeight.count++;\n const contentStore = useContentStore();\n while (\n contentStore.contentMap.has(\"TransitionHeight-\" + TransitionHeight.count)\n ) {\n TransitionHeight.count++;\n }\n this.id = \"TransitionHeight-\" + TransitionHeight.count;\n }\n updatePortHelper(): void {\n this.channelPorts[0].position[0] = this.position[0];\n this.channelPorts[0].position[1] = this.position[1];\n\n this.channelPorts[1].position[0] =\n this.position[0] +\n this.properties.transitionL.value +\n this.properties.connectionL.value * 2;\n this.channelPorts[1].position[1] = this.position[1];\n\n if (this.channelPorts[0] instanceof ChannelPortWithSize) {\n this.channelPorts[0].portWidth = this.properties.width.value;\n this.channelPorts[0].portHeight = this.properties.height.value;\n }\n\n if (this.channelPorts[1] instanceof ChannelPortWithSize) {\n this.channelPorts[1].portWidth = this.properties.width.value;\n this.channelPorts[1].portHeight = this.properties.height_after.value;\n }\n\n if (this.rotation != 0) {\n const r = this.rotation;\n this.rotation = 0;\n this.setRotation(r);\n }\n }\n updateRender(): void {\n this.elementsToRender.topLeftCorner = [\n this.position[0],\n this.position[1] - this.properties.width.value / 2\n ];\n this.elementsToRender.centerPoint = [\n this.position[0] +\n this.properties.transitionL.value / 2 +\n this.properties.connectionL.value,\n this.position[1]\n ];\n\n // 1--2\n // 0--3\n const points = [\n [\n this.position[0] + this.properties.connectionL.value,\n this.position[1] + this.properties.width.value / 2\n ],\n [\n this.position[0] + this.properties.connectionL.value,\n this.position[1] - this.properties.width.value / 2\n ],\n [\n this.position[0] +\n this.properties.connectionL.value +\n this.properties.transitionL.value,\n this.position[1] - this.properties.width.value / 2\n ],\n [\n this.position[0] +\n this.properties.connectionL.value +\n this.properties.transitionL.value,\n this.position[1] + this.properties.width.value / 2\n ]\n ];\n this.elementsToRender.borderShapes = [new Polygon(points, false)];\n if (this.properties.connectionL.value > 0) {\n const connection1 = `M ${this.position[0]} ${this.position[1]} h ${this.properties.connectionL.value}`;\n const connection2 = `M ${\n this.position[0] +\n this.properties.connectionL.value +\n this.properties.transitionL.value\n } ${this.position[1]} h ${this.properties.connectionL.value}`;\n this.elementsToRender.borderShapes.push(\n new Path(connection1, this.properties.width.value, false)\n );\n this.elementsToRender.borderShapes.push(\n new Path(connection2, this.properties.width.value, false)\n );\n }\n\n this.updatePort();\n }\n\n //override\n buildPayload(z: number): ComponentObject {\n const shapes = Array();\n const channels = Array();\n const toBuild = this.elementsToRender.borderShapes;\n if (toBuild[0] instanceof Polygon) {\n const p1 = pointTransform(\n this.position[0] + this.properties.connectionL.value,\n this.position[1] - this.properties.width.value / 2,\n this.translate,\n this.rotation,\n this.elementsToRender.centerPoint\n );\n const p2 = pointTransform(\n this.position[0] +\n this.properties.connectionL.value +\n this.properties.transitionL.value,\n this.position[1] - this.properties.width.value / 2,\n this.translate,\n this.rotation,\n this.elementsToRender.centerPoint\n );\n const p3 = pointTransform(\n this.position[0] + this.properties.connectionL.value,\n this.position[1] + this.properties.width.value / 2,\n this.translate,\n this.rotation,\n this.elementsToRender.centerPoint\n );\n const v1 = new Point(p1[0], p1[1], z);\n const v2 = new Point(p2[0], p2[1], z);\n const v3 = new Point(\n p2[0],\n p2[1],\n z + this.properties.height_after.value\n );\n const v4 = new Point(p1[0], p1[1], z + this.properties.height.value);\n shapes.push(\n new PayloadPolygon(\n [v1, v2, v3, v4],\n false,\n p3[0] - p1[0],\n p3[1] - p1[1],\n 0\n )\n );\n }\n if (toBuild[1] instanceof Path)\n channels.push(\n toBuild[1].buildPayload(\n z,\n this.properties.height.value,\n this.translate,\n this.rotation,\n this.elementsToRender.centerPoint\n )\n );\n if (toBuild[2] instanceof Path)\n channels.push(\n toBuild[2].buildPayload(\n z,\n this.properties.height_after.value,\n this.translate,\n this.rotation,\n this.elementsToRender.centerPoint\n )\n );\n return {\n id: this.id,\n shapes: shapes,\n channels: channels,\n ports: Array()\n };\n }\n}\n","import ModuleCreatorTemplate from \"./moduleCreatorTemplate\";\nimport TransitionHeight from \"./transitionHeight\";\n\nexport default class TransitionHeightCreator extends ModuleCreatorTemplate {\n moduleName = \"Height Transition\";\n description =\n \"A component that is used to connect two channels that have different heights. It serves as a connector between the channels, allowing fluid to flow from one channel to another smoothly.\";\n\n sample = \"SampleTransition\";\n portSizeFixed = true;\n pendingModule = new TransitionHeight([500, 200], \"\");\n constructor() {\n super();\n this.pendingModule.id = \"preview\";\n this.updatePendingModule();\n }\n resetModule(): void {\n TransitionHeight.count = 0;\n this.pendingModule.properties.transitionL.value = 400;\n this.pendingModule.properties.height_after.value = 200;\n this.pendingModule.properties.connectionL.value = 400;\n this.pendingModule.properties.width.value = 400;\n this.pendingModule.properties.height.value = 400;\n this.pendingModule.updateRender();\n }\n updatePendingModule(): void {\n this.pendingModule.position[1] =\n this.pendingModule.properties.width.value / 2;\n this.pendingModule.updateRender();\n }\n updatePendingModulePosition(pos: number[]): void {\n this.pendingModule.position = [...pos];\n this.pendingModule.updateRender();\n }\n}\n","import ChamberCreator from \"./chamberCreator\";\nimport FilterCreator from \"./filterCreator\";\nimport DelayChannelCreator from \"./delayChannelCreator\";\nimport TeslaValveCreator from \"./teslaValveCreator\";\nimport DropletCreator from \"./dropletCreator\";\nimport TransitionWidthCreator from \"./transitionWidthCreator\";\nimport TransitionHeightCreator from \"./transitionHeightCreator\";\n\nexport default [\n new ChamberCreator(),\n new FilterCreator(),\n new DelayChannelCreator(),\n new TeslaValveCreator(),\n new DropletCreator(),\n new TransitionWidthCreator(),\n new TransitionHeightCreator(),\n];\n","import { defineStore } from \"pinia\";\nimport ModuleFactory from \"@/library/modules/moduleFactory\";\nimport { useContentStore } from \"./content\";\n// import ComponentCircleCreator from \"../library/componentCircleCreator\";\n\n// store of default module settings\n// pos, translate and rotation are common propertyName for all the modules\nexport const useMoudleStore = defineStore(\"module\", {\n state: () => ({\n moduleFactory: ModuleFactory,\n selectedModuleIdx: 0\n }),\n\n getters: {\n selectedModuleCreator(state) {\n return state.moduleFactory[state.selectedModuleIdx];\n }\n },\n\n actions: {\n selectModule(idx: number) {\n this.selectedModuleIdx = idx;\n },\n\n // invoked when initialize design\n initiallizeModuleFactory() {\n this.moduleFactory.forEach((creator) => {\n creator.resetModule();\n });\n const contentStore = useContentStore();\n this.moduleFactory.forEach((moduleCreator) => {\n moduleCreator.pendingModule.properties.height.value =\n contentStore.chipProperties[4].value;\n if (\"channelWidth\" in moduleCreator.pendingModule.properties) {\n moduleCreator.pendingModule.properties.channelWidth.value =\n contentStore.chipProperties[3].value;\n }\n });\n }\n }\n});\n","import { useContentStore } from \"@/stores/content\";\nimport { defaultPropertyStep } from \"./hardCodedValues\";\nimport { BasicPart, ShapeType } from \"./other\";\nimport { PayloadChannel, PayloadShape } from \"./payloadPrimitives\";\nimport {\n buildPayloadPathPrimitive,\n buildPayloadPolygonPrimitive\n} from \"./primitives\";\nimport { ComponentObject, PolygonOutput } from \"./typeDefinations\";\n\nexport default class ComponentPolygon extends BasicPart {\n points = Array();\n properties = {\n radius: {\n value: 0,\n name: \"Corner radius\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n channelWidth: {\n value: 400,\n name: \"Channel (stroke) width of hollow polygon\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n height: {\n value: 400,\n name: \"Height\",\n step: defaultPropertyStep,\n unit: \"µm\"\n }\n };\n shapeType: ShapeType;\n\n get type(): string {\n return \"polygon\";\n }\n get vueComponent(): string {\n return \"SvgPolygonVue\";\n }\n constructor(\n channelWidth: number,\n h: number,\n shapeType: ShapeType,\n layer: string,\n firstPoint?: number[]\n ) {\n super(layer);\n if (firstPoint) {\n this.points.push(firstPoint);\n }\n this.properties.height.value = h;\n this.properties.channelWidth.value = channelWidth;\n this.shapeType = shapeType;\n }\n static resetCount(): void {\n ComponentPolygon.count = 0;\n }\n static parse(content: PolygonOutput): ComponentPolygon {\n const res = new ComponentPolygon(\n content.properties.channelWidth,\n content.properties.height,\n content.shapeType,\n content.layer\n );\n res.points = content.points;\n res.id = content.id;\n return res;\n }\n buildOutput(layer: string): PolygonOutput {\n const properties = new Map();\n for (const [key, value] of Object.entries(this.properties)) {\n properties.set(key, value.value);\n }\n const output = {\n id: this.id,\n properties: Object.fromEntries(properties),\n points: this.points,\n layer,\n shapeType: this.shapeType\n };\n return output;\n }\n\n newId(): string {\n ComponentPolygon.count++;\n const contentStore = useContentStore();\n while (contentStore.contentMap.has(\"Polygon-\" + ComponentPolygon.count)) {\n ComponentPolygon.count++;\n }\n return \"Polygon-\" + ComponentPolygon.count;\n }\n\n setId(): void {\n this.id = this.newId();\n }\n\n clone(): ComponentPolygon {\n const id = this.newId();\n const copy = new ComponentPolygon(\n this.properties.channelWidth.value,\n this.properties.height.value,\n this.shapeType,\n this.layer\n );\n copy.id = id;\n const contentStore = useContentStore();\n contentStore.addElmentToContent(copy);\n this.points.forEach((p) => {\n copy.points.push(p.slice());\n });\n return copy;\n }\n\n updatePosition(x: number, y: number): void {\n const offsetX = x - this.translate[0];\n const offsetY = y - this.translate[1];\n this.points.forEach((p) => {\n p[0] += offsetX;\n p[1] += offsetY;\n });\n this.setTranslate(x, y);\n }\n\n buildPayload(z: number, hOffset: number): ComponentObject {\n const comp = {\n id: this.id,\n shapes: Array(),\n channels: Array(),\n ports: Array()\n };\n switch (this.shapeType) {\n case ShapeType.Solid: {\n const shapes = buildPayloadPolygonPrimitive(\n this.points,\n true,\n this.properties.radius.value,\n z,\n this.properties.height.value + hOffset,\n [0, 0],\n 0,\n [0, 0]\n );\n if (shapes) comp.shapes = shapes;\n break;\n }\n case ShapeType.Hollow: {\n const shapes = buildPayloadPolygonPrimitive(\n this.points,\n false,\n this.properties.radius.value,\n z,\n this.properties.height.value + hOffset,\n [0, 0],\n 0,\n [0, 0]\n );\n if (shapes) comp.shapes = shapes;\n break;\n }\n case ShapeType.Channel: {\n const contentStore = useContentStore();\n const d = contentStore.polygonPathDefinition(\n this.points,\n this.properties.radius.value\n );\n const channelHeight = this.properties.height.value + hOffset;\n const channel = buildPayloadPathPrimitive(\n d,\n z + channelHeight / 2,\n channelHeight,\n this.properties.channelWidth.value,\n [0, 0],\n 0,\n [0, 0]\n );\n comp.channels.push(channel);\n break;\n }\n }\n return comp;\n }\n}\n","import { defaultPropertyStep } from \"./hardCodedValues\";\nimport { BasicPart, ShapeType } from \"./other\";\nimport { ComponentCircleOutput, ComponentObject } from \"./typeDefinations\";\nimport { useContentStore } from \"../stores/content\";\nimport {\n PayloadChannel,\n PayloadCircle,\n PayloadShape,\n Point\n} from \"./payloadPrimitives\";\n\nexport default class ComponentCircle extends BasicPart {\n x: number;\n y: number;\n properties = {\n radius: {\n value: 1000,\n name: \"Radius\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n height: {\n value: 400,\n name: \"Component height\",\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n channelWidth: {\n value: 400,\n name: \"Channel (stroke) width of hollow circle\",\n step: defaultPropertyStep,\n unit: \"µm\"\n }\n };\n shapeType: ShapeType;\n get type(): string {\n return \"circle\";\n }\n get vueComponent(): string {\n return \"SvgCircleVue\";\n }\n constructor(\n position: number[],\n r: number,\n shapeType: ShapeType,\n layer: string\n ) {\n super(layer);\n this.x = position[0];\n this.y = position[1];\n this.properties.radius.value = r;\n this.shapeType = shapeType;\n ComponentCircle.count++;\n const contentStore = useContentStore();\n while (contentStore.contentMap.has(\"Circle-\" + ComponentCircle.count)) {\n ComponentCircle.count++;\n }\n this.id = \"Circle-\" + ComponentCircle.count;\n }\n static resetCount(): void {\n ComponentCircle.count = 0;\n }\n\n static parse(content: ComponentCircleOutput): ComponentCircle {\n const res = new ComponentCircle(\n content.position,\n content.properties.radius,\n content.shapeType,\n content.layer\n );\n res.id = content.id;\n res.properties.height.value = content.properties.height;\n return res;\n }\n\n buildOutput(layer: string): ComponentCircleOutput {\n const properties = new Map();\n for (const [key, value] of Object.entries(this.properties)) {\n properties.set(key, value.value);\n }\n const output = {\n id: this.id,\n position: [this.x, this.y],\n properties: Object.fromEntries(properties),\n layer,\n shapeType: this.shapeType\n };\n return output;\n }\n\n clone(): ComponentCircle {\n const copy = new ComponentCircle(\n [this.x, this.y],\n this.properties.radius.value,\n this.shapeType,\n this.layer\n );\n copy.shapeType = this.shapeType;\n const contenStore = useContentStore();\n contenStore.addElmentToContent(copy);\n return copy;\n }\n\n updatePosition(x: number, y: number): void {\n const offsetX = x - this.translate[0];\n const offsetY = y - this.translate[1];\n this.x += offsetX;\n this.y += offsetY;\n this.setTranslate(x, y);\n }\n buildPayload(z: number, hOffset: number): ComponentObject | void {\n const r = this.properties.radius.value;\n const h = this.properties.height.value + hOffset;\n if (r > 0 && h > 0) {\n const comp = {\n id: this.id,\n shapes: Array(),\n channels: Array(),\n ports: Array()\n };\n switch (this.shapeType) {\n case ShapeType.Solid: {\n const circle = new PayloadCircle(\n new Point(this.x, this.y, z),\n true,\n h,\n r\n );\n comp.shapes.push(circle);\n break;\n }\n case ShapeType.Hollow: {\n const circle = new PayloadCircle(\n new Point(this.x, this.y, z),\n false,\n h,\n r\n );\n comp.shapes.push(circle);\n break;\n }\n case ShapeType.Channel: {\n // 2 circles\n const cw = this.properties.channelWidth.value;\n if (cw > 0) {\n const c1 = new PayloadCircle(\n new Point(this.x, this.y, z),\n false,\n h,\n r + cw / 2\n );\n const c2 = new PayloadCircle(\n new Point(this.x, this.y, z),\n true,\n h,\n r - cw / 2\n );\n comp.shapes.push(c1);\n comp.shapes.push(c2);\n }\n }\n }\n\n return comp;\n }\n }\n}\n","import { defineStore } from \"pinia\";\nimport { useCoordinateStore } from \"./coordinate\";\nimport { useContentStore } from \"@/stores/content\";\nimport { useMoudleStore } from \"./module\";\nimport {\n ChannelPortWithSize,\n ContentUnit,\n ContentUnitGeneral,\n Mode,\n MouseOperation,\n SelectionState,\n ShapeType\n} from \"../library/other\";\nimport {\n MoveModuleAct,\n MoveNodeElmAct,\n MoveChannelVertexAct,\n SetChannelSize,\n MoveGroupAct,\n DeleteGroupAct,\n SetRotationAct,\n SetRoundedCorner,\n MovePolygonVertexAct,\n BasicElementAct,\n DeleteBasicElmAct,\n useHistoryStore,\n MoveBridgeAct\n} from \"./history\";\nimport { ChannelSegment, ChannelPort, ChannelPoint } from \"@/library/other\";\nimport ModuleTemplate from \"@/library/modules/moduleTemplate\";\nimport { useChannelSegInputStore } from \"./channelSegmentInput\";\nimport { Channel } from \"@/library/channel\";\nimport { LevelConnection } from \"@/library/levelConnection\";\nimport { Bridge } from \"@/library/bridge\";\nimport { InletOutlet } from \"@/library/inletOutlet\";\nimport ComponentPolygon from \"@/library/componentPolygon\";\nimport ComponentCircle from \"@/library/componentCircle\";\n\nconst dummyPoint = [0, 0];\nconst dummyChannelPoint = new ChannelPoint(dummyPoint);\nconst dummyChannel = new Channel(400, 400, \"\", dummyChannelPoint);\nconst dummyPolygon = new ComponentPolygon(400, 400, ShapeType.Hollow, \"\");\nconst dummyChannelSegment = {\n cid: \"\",\n idx: 0,\n start: dummyChannelPoint,\n end: dummyChannelPoint,\n width: 0\n};\nconst isTheSamePoint = (p1: number[], p2: number[]) => {\n return p1[0] === p2[0] && p1[1] === p2[1];\n};\nexport const useControlStore = defineStore(\"control\", {\n state: () => ({\n mode: Mode.Select,\n moduleBoardVisible: false,\n isAddingChannel: false,\n isAddingPolygon: false,\n selectRect: { x1: -1, x2: -1, y1: -1, y2: -1 },\n operation: MouseOperation.Idle,\n selectionState: SelectionState.Idle,\n crtChannel: dummyChannel,\n crtPolygon: dummyPolygon,\n editSettings: {\n //px\n circleRadius: 5,\n strokeWidth: 1\n },\n\n isPlacingModule: false,\n canPlaceBridge: false,\n showLevelPopper: false,\n startPoint: dummyPoint,\n startRotation: 0,\n crtVertexIdx: 0,\n level: { start: \"\", end: \"\", h1: 0, h2: 0 },\n channelSeg: dummyChannelSegment,\n channelSegPre: dummyChannelSegment,\n posOnSeg: -1,\n posOnSegPre: -1,\n roundedChannelRadius: 400,\n circleRadius: 1000,\n channelType: 0, // 0: round, 1: square\n selectedChannelPoints: new Array(),\n movingChannelPoint: dummyChannelPoint,\n movingPointConnectedToPort: false,\n isPanning: false,\n defaultShapeType: ShapeType.Hollow,\n defaultChannelWidth: 400,\n defaultPortRadius: 200,\n defaultViaRadius: 200\n }),\n getters: {\n isEditingBridge(): boolean {\n return (\n this.mode === Mode.Bridge ||\n this.operation === MouseOperation.MovingBridge\n );\n },\n isEditingChannelPoint(): boolean {\n return (\n this.isAddingChannel ||\n this.operation === MouseOperation.MovingChannelVertex\n );\n },\n editingCircleRadius(): number {\n const coordinate = useCoordinateStore();\n return coordinate.windowToGlobal(this.editSettings.circleRadius);\n },\n editingStrokeWidth(): number {\n const coordinate = useCoordinateStore();\n return coordinate.windowToGlobal(this.editSettings.strokeWidth);\n }\n },\n actions: {\n focusOnWorkarea() {\n document.getElementById(\"workarea\")?.focus();\n },\n startPanning() {\n this.isPanning = true;\n },\n stopPanning() {\n this.isPanning = false;\n },\n hidePopper() {\n this.showLevelPopper = false;\n },\n // invoked after resetting contentStore\n resetAppSettings() {\n const coordinateSrtore = useCoordinateStore();\n const historyStore = useHistoryStore();\n const contentStore = useContentStore();\n const channelSegInput = useChannelSegInputStore();\n channelSegInput.$reset();\n coordinateSrtore.$reset();\n coordinateSrtore.resetView();\n historyStore.$reset();\n this.$reset();\n this.defaultChannelWidth = contentStore.defaultChannelWidth;\n // reset content unit count\n Channel.resetCount();\n Bridge.resetCount();\n InletOutlet.resetCount();\n LevelConnection.resetCount();\n ComponentPolygon.resetCount();\n },\n mouseup() {\n this.operation = MouseOperation.Idle;\n },\n setSelectionState(n: number) {\n this.selectionState = n;\n },\n hideElm(elm: ContentUnitGeneral) {\n if (elm instanceof Bridge) {\n elm.show = false;\n } else if (elm instanceof ContentUnit) {\n elm.display = false;\n }\n },\n deleteCrtElement() {\n if (this.selectionState === SelectionState.EditingdSingleElement) {\n this.selectionState = SelectionState.Idle;\n const contentStore = useContentStore();\n this.hideElm(contentStore.crtElement);\n const historyStore = useHistoryStore();\n historyStore.addActivity(\n new DeleteBasicElmAct(contentStore.crtElement, contentStore.crtLayer)\n );\n contentStore.crtId = \"\";\n } else if (this.selectionState === SelectionState.EditingGroup) {\n this.selectionState = SelectionState.Idle;\n const contentStore = useContentStore();\n const group = Array();\n contentStore.crtGroupId.forEach((id) => {\n const elm = contentStore.getElement(id);\n group.push(elm);\n this.hideElm(elm);\n });\n const historyStore = useHistoryStore();\n historyStore.addActivity(\n new DeleteGroupAct(group, contentStore.crtLayer)\n );\n contentStore.crtId = \"\";\n }\n },\n resetFlags() {\n const contentStore = useContentStore();\n contentStore.crtId = \"\";\n this.selectionState = SelectionState.Idle;\n this.operation = MouseOperation.Idle;\n },\n removeSelectedRoundedCorner(p: ChannelPoint) {\n p.isSelected = false;\n const idx = this.selectedChannelPoints.indexOf(p);\n if (idx >= 0) {\n this.selectedChannelPoints.splice(idx, 1);\n }\n },\n addSelectedRounedCorner(p: ChannelPoint) {\n p.isSelected = true;\n this.selectedChannelPoints.push(p);\n },\n confirmEditingRoundedCorner() {\n const historyStore = useHistoryStore();\n historyStore.addActivity(\n new SetRoundedCorner(\n this.selectedChannelPoints,\n this.roundedChannelRadius\n )\n );\n this.selectedChannelPoints.forEach((p) => {\n p.roundedRadius = this.roundedChannelRadius;\n p.isSelected = false;\n });\n this.selectedChannelPoints = new Array();\n },\n discardEditingRoundedCorner() {\n this.selectedChannelPoints.forEach((p) => {\n p.isSelected = false;\n });\n this.selectedChannelPoints = new Array();\n },\n setChannelType(t: number) {\n this.channelType = t;\n },\n setRoundedChannelRadius(r: number) {\n this.roundedChannelRadius = r;\n },\n setCircleRadius(r: number) {\n this.circleRadius = r;\n },\n startRotatingModule(r: number) {\n if (this.operation === MouseOperation.Idle) {\n const coordinate = useCoordinateStore();\n this.startPoint = [...coordinate.globalCoords];\n this.startRotation = r;\n this.operation = MouseOperation.RotatingComponent;\n } else {\n this.handleMouseDownLeft();\n }\n },\n stopRotatingModule(module: ModuleTemplate) {\n module.rotation = ((module.rotation % 360) + 360) % 360;\n const offSet = module.rotation - this.startRotation;\n // console.log(offSet);\n if (offSet !== 0) {\n const historyStore = useHistoryStore();\n historyStore.addActivity(new SetRotationAct(module, offSet));\n }\n this.startPoint[0] = this.startPoint[1] = this.startRotation = 0;\n this.mouseup();\n },\n bindChannelPort(port: ChannelPort) {\n // controlStore.mode === \"channel\" || controlStore.operation === 4;\n // triggered by mouseup =>\n // isAddingChannel || controlStore.operation === 4;\n if (this.isAddingChannel) {\n // insert port position at the 2nd last idx\n const newPoint = new ChannelPoint(port.position);\n newPoint.isConnectedToPort = true;\n newPoint.connectedPort = port;\n this.crtChannel.channelDef.splice(\n this.crtChannel.channelDef.length - 1,\n 0,\n newPoint\n );\n // set channel width if possible\n if (port instanceof ChannelPortWithSize) {\n console.log(\"set channel size\");\n this.crtChannel.properties.channelWidth.value = port.portWidth;\n this.crtChannel.properties.channelHeight.value = port.portHeight;\n }\n } else if (this.operation === MouseOperation.MovingChannelVertex) {\n // bind the port to the channel vertex\n const coordinate = useCoordinateStore();\n this.movingChannelPoint.position = port.position;\n this.movingChannelPoint.connectedPort = port;\n coordinate.roundedGlobalCoords = coordinate.roundedGlobalCoords.slice();\n const newAct = new MoveChannelVertexAct(\n this.startPoint,\n this.movingChannelPoint,\n this.movingChannelPoint.isConnectedToPort,\n true\n );\n this.movingChannelPoint.isConnectedToPort = true;\n // set channel width if possible\n if (port instanceof ChannelPortWithSize) {\n newAct.setChannelSize = new SetChannelSize(\n this.crtChannel,\n port.portWidth - this.crtChannel.properties.channelWidth.value,\n port.portHeight - this.crtChannel.properties.channelHeight.value\n );\n this.crtChannel.properties.channelWidth.value = port.portWidth;\n this.crtChannel.properties.channelHeight.value = port.portHeight;\n }\n\n const historyStore = useHistoryStore();\n historyStore.addActivity(newAct);\n this.crtVertexIdx = 0;\n this.startPoint = dummyPoint;\n this.operation = MouseOperation.Idle;\n }\n },\n setPosOnSeg(value: number) {\n this.posOnSeg = value;\n },\n setBridgeChannelSeg(seg: ChannelSegment) {\n this.channelSeg = seg;\n },\n startMovingChanelVertex(elm: Channel, point: ChannelPoint) {\n if (this.operation === MouseOperation.Idle) {\n this.crtChannel = elm;\n this.movingChannelPoint = point;\n const coordinate = useCoordinateStore();\n // make a copy for new act\n this.startPoint = point.position;\n // break bindings on the vertex\n point.position = point.position.slice();\n this.movingPointConnectedToPort = point.isConnectedToPort;\n point.isConnectedToPort = false;\n coordinate.roundedGlobalCoords = point.position;\n this.operation = MouseOperation.MovingChannelVertex;\n } else {\n this.handleMouseDownLeft();\n }\n },\n\n startMovingPolygonVertex(elm: ComponentPolygon, point: number[]) {\n if (this.operation === MouseOperation.Idle) {\n this.crtPolygon = elm;\n const coordinate = useCoordinateStore();\n // make a copy for new act\n this.startPoint = point.slice();\n coordinate.roundedGlobalCoords = point;\n this.operation = MouseOperation.MovingPolygonVertex;\n } else {\n this.handleMouseDownLeft();\n }\n },\n\n stopMovingPolygonVertex() {\n const coordinate = useCoordinateStore();\n const historyStore = useHistoryStore();\n historyStore.addActivity(\n new MovePolygonVertexAct(\n this.startPoint,\n coordinate.roundedGlobalCoords\n )\n );\n coordinate.roundedGlobalCoords = coordinate.roundedGlobalCoords.slice();\n this.startPoint = dummyPoint;\n this.operation = MouseOperation.Idle;\n this.crtPolygon = dummyPolygon;\n },\n\n stopMovingChannelVertex() {\n const coordinate = useCoordinateStore();\n coordinate.roundedGlobalCoords = coordinate.roundedGlobalCoords.slice();\n const historyStore = useHistoryStore();\n historyStore.addActivity(\n new MoveChannelVertexAct(\n this.startPoint,\n this.movingChannelPoint,\n this.movingPointConnectedToPort,\n false\n )\n );\n this.startPoint = dummyPoint;\n this.operation = MouseOperation.Idle;\n this.movingChannelPoint = dummyChannelPoint;\n this.crtChannel = dummyChannel;\n },\n\n setLevelEnd(l2: string) {\n const content = useContentStore();\n this.level.end = l2;\n const x = content.layers.get(l2)?.height;\n this.level.h1 = x ? x : 0;\n },\n abortCrtOperation() {\n // reset selection\n this.selectionState = SelectionState.Idle;\n if (this.isAddingChannel) this.stepOutChannel();\n if (this.isAddingPolygon) this.stepOutPolygon();\n if (this.mode === Mode.RoundedCorner) {\n this.confirmEditingRoundedCorner();\n }\n },\n switchMode(mode: number) {\n this.abortCrtOperation();\n if (mode !== this.mode) {\n switch (mode) {\n case Mode.Component: {\n this.showModuleBoard();\n break;\n }\n case Mode.InterLayer: {\n const content = useContentStore();\n this.level.start = this.level.end = content.crtLayer;\n this.level.h1 = this.level.h2 = content.heightOfCrtLayer\n ? content.heightOfCrtLayer\n : 0;\n this.showLevelPopper = true;\n break;\n }\n }\n this.mode = mode;\n }\n this.focusOnWorkarea();\n },\n\n stopMivingGroup() {\n const content = useContentStore();\n const historyStore = useHistoryStore();\n const coordinateStore = useCoordinateStore();\n const offsetX =\n coordinateStore.roundedGlobalCoords[0] - this.startPoint[0];\n const offsetY =\n coordinateStore.roundedGlobalCoords[1] - this.startPoint[1];\n if (offsetX !== 0 || offsetY !== 0) {\n const group = Array();\n content.crtGroupId.forEach((id) => {\n const elm = content.getElement(id);\n group.push(elm);\n switch (elm.type) {\n case \"module\": {\n elm.updatePosition();\n break;\n }\n default: {\n elm.resetTranslate();\n }\n }\n });\n historyStore.addActivity(new MoveGroupAct(group, offsetX, offsetY));\n }\n },\n\n stopMovingBridge() {\n const content = useContentStore();\n if (!this.canPlaceBridge) {\n content.crtElement.channelSegment = this.channelSegPre;\n content.crtElement.posOnSeg = this.posOnSegPre;\n console.log(\"INVALID BRIDGE PLACEMENT\");\n // TODO: add alert\n } else {\n const historyStore = useHistoryStore();\n historyStore.addActivity(\n new MoveBridgeAct(\n content.crtElement,\n this.channelSegPre,\n this.posOnSegPre\n )\n );\n }\n },\n\n stopMovingElement() {\n const content = useContentStore();\n const historyStore = useHistoryStore();\n const coordinateStore = useCoordinateStore();\n const offsetX =\n coordinateStore.roundedGlobalCoords[0] - this.startPoint[0];\n const offsetY =\n coordinateStore.roundedGlobalCoords[1] - this.startPoint[1];\n if (offsetX !== 0 || offsetY !== 0) {\n switch (content.crtElement.type) {\n case \"module\": {\n content.crtElement.updatePosition();\n historyStore.addActivity(\n new MoveModuleAct(content.crtElement, offsetX, offsetY)\n );\n break;\n }\n default: {\n content.crtElement.resetTranslate();\n historyStore.addActivity(\n new MoveNodeElmAct(content.crtElement, offsetX, offsetY)\n );\n content.crtElement.resetTranslate();\n }\n }\n }\n },\n updateGroupPosition() {\n const content = useContentStore();\n const coordinate = useCoordinateStore();\n content.crtGroupId.forEach((id) => {\n const elm = content.getElement(id);\n switch (elm.type) {\n case \"module\": {\n elm.setTranslate(\n coordinate.roundedGlobalCoords[0] - this.startPoint[0],\n coordinate.roundedGlobalCoords[1] - this.startPoint[1]\n );\n break;\n }\n default: {\n elm.updatePosition(\n coordinate.roundedGlobalCoords[0] - this.startPoint[0],\n coordinate.roundedGlobalCoords[1] - this.startPoint[1]\n );\n }\n }\n });\n },\n\n updateCrtElmPosition() {\n const coordinate = useCoordinateStore();\n const content = useContentStore();\n if (content.crtElement.type === \"module\") {\n content.crtElement.setTranslate(\n coordinate.roundedGlobalCoords[0] - this.startPoint[0],\n coordinate.roundedGlobalCoords[1] - this.startPoint[1]\n );\n }\n // BasicParts\n else {\n // move by offset\n content.crtElement.updatePosition(\n coordinate.roundedGlobalCoords[0] - this.startPoint[0],\n coordinate.roundedGlobalCoords[1] - this.startPoint[1]\n );\n }\n },\n startMovingGroup() {\n if (this.operation === MouseOperation.Idle) {\n const coordinate = useCoordinateStore();\n this.startPoint = [...coordinate.roundedGlobalCoords];\n this.operation = MouseOperation.MovingGroup;\n } else {\n this.handleMouseDownLeft();\n }\n },\n\n startMovingElement() {\n if (this.operation === MouseOperation.Idle) {\n const coordinate = useCoordinateStore();\n const content = useContentStore();\n switch (content.crtElement.type) {\n case \"bridge\": {\n this.channelSeg = content.crtElement.channelSegment;\n this.channelSegPre = content.crtElement.channelSegment;\n this.posOnSegPre = content.crtElement.posOnSeg;\n this.operation = MouseOperation.MovingBridge;\n break;\n }\n case \"channel\":\n case \"polygon\":\n case \"module\": {\n this.startPoint = [...coordinate.roundedGlobalCoords];\n this.operation = MouseOperation.MovingElement;\n break;\n }\n default: {\n this.startPoint = [content.crtElement.x, content.crtElement.y];\n this.operation = MouseOperation.MovingElement;\n }\n }\n } else {\n this.handleMouseDownLeft();\n }\n },\n\n finishBridgePlacement() {\n if (this.canPlaceBridge) {\n const contentStore = useContentStore();\n const newBridge = new Bridge(\n this.channelSeg,\n this.posOnSeg,\n contentStore.crtLayer\n );\n contentStore.contentMap.set(newBridge.id, newBridge);\n contentStore.crtLayerIds?.push(newBridge.id);\n // add to history\n const historyStore = useHistoryStore();\n historyStore.addActivity(\n new BasicElementAct(newBridge, contentStore.crtLayer)\n );\n }\n },\n\n enableBridgePlacement() {\n this.canPlaceBridge = true;\n },\n disableBridgePlacement() {\n this.canPlaceBridge = false;\n this.posOnSeg = -1;\n },\n\n finishLevelConnectionPlacement() {\n if (this.level.end !== \"\" && this.level.end !== this.level.start) {\n const coordinateStore = useCoordinateStore();\n const contentStore = useContentStore();\n const s = this.level.start;\n const t = this.level.end;\n const newLevel = new LevelConnection(\n coordinateStore.roundedGlobalCoords,\n this.defaultViaRadius,\n s,\n t,\n this.channelType\n );\n contentStore.contentMap.set(newLevel.id, newLevel);\n contentStore.levelConnectionIds.push(newLevel.id);\n // contentStore.crtLayerIds?.push(newLevel.id);\n // add to history\n const historyStore = useHistoryStore();\n historyStore.addActivity(\n new BasicElementAct(newLevel, contentStore.crtLayer)\n );\n }\n },\n finishCtrlNodePlacement() {\n const coordinateStore = useCoordinateStore();\n const contentStore = useContentStore();\n const newCtrlNode = new InletOutlet(\n coordinateStore.roundedGlobalCoords,\n this.defaultPortRadius,\n this.channelType,\n contentStore.crtLayer\n );\n contentStore.contentMap.set(newCtrlNode.id, newCtrlNode);\n contentStore.crtLayerIds?.push(newCtrlNode.id);\n // add to history\n const historyStore = useHistoryStore();\n historyStore.addActivity(\n new BasicElementAct(newCtrlNode, contentStore.crtLayer)\n );\n },\n startModulePlacement() {\n const moduleStore = useMoudleStore();\n const coordsStore = useCoordinateStore();\n moduleStore.selectedModuleCreator.pendingModule.position = [\n ...coordsStore.roundedGlobalCoords\n ];\n moduleStore.selectedModuleCreator.pendingModule.updateRender();\n this.isPlacingModule = true;\n this.focusOnWorkarea();\n },\n cancelModulePlacement() {\n this.isPlacingModule = false;\n this.mode = Mode.Select;\n },\n\n finishModulePlacement() {\n try {\n const moduleStore = useMoudleStore();\n const contentStore = useContentStore();\n // const coordinateStore = useCoordinateStore();\n const newModule = moduleStore.selectedModuleCreator.createModule();\n newModule.layer = contentStore.crtLayer;\n contentStore.contentMap.set(newModule.id, newModule);\n contentStore.crtLayerIds?.push(newModule.id);\n // add to history\n const historyStore = useHistoryStore();\n historyStore.addActivity(\n new BasicElementAct(newModule, contentStore.crtLayer)\n );\n this.isPlacingModule = false;\n this.mode = Mode.Select;\n } catch (e) {\n console.log(e);\n }\n },\n\n finishCirclePlacement() {\n const coordinateStore = useCoordinateStore();\n const contentStore = useContentStore();\n const circle = new ComponentCircle(\n coordinateStore.roundedGlobalCoords,\n this.circleRadius,\n this.defaultShapeType,\n contentStore.crtLayer\n );\n contentStore.contentMap.set(circle.id, circle);\n contentStore.crtLayerIds?.push(circle.id);\n // add to history\n const historyStore = useHistoryStore();\n historyStore.addActivity(\n new BasicElementAct(circle, contentStore.crtLayer)\n );\n },\n // triggered by mouse down\n addNewChannel() {\n const contentStore = useContentStore();\n const coordinateStore = useCoordinateStore();\n this.crtChannel = new Channel(\n contentStore.defaultChannelWidth,\n contentStore.defaultModuleHeight,\n contentStore.crtLayer,\n new ChannelPoint(coordinateStore.roundedGlobalCoords)\n );\n this.isAddingChannel = true;\n },\n addNewPolygon() {\n const contentStore = useContentStore();\n const coordinateStore = useCoordinateStore();\n this.crtPolygon = new ComponentPolygon(\n contentStore.defaultChannelWidth,\n contentStore.defaultModuleHeight,\n this.defaultShapeType,\n contentStore.crtLayer,\n coordinateStore.roundedGlobalCoords\n );\n this.isAddingPolygon = true;\n },\n setCrtModuleRotation(r: number, shift: boolean, module: ModuleTemplate) {\n if (shift) {\n r += 7.5;\n r = r - (r % 15);\n }\n module.setRotation(r % 360);\n },\n setCrtChannelEnd(shift: boolean) {\n const coordinateStore = useCoordinateStore();\n const channelSegInput = useChannelSegInputStore();\n let x = coordinateStore.globalCoords[0];\n let y = coordinateStore.globalCoords[1];\n if (\n shift &&\n !channelSegInput.lengthLocked &&\n this.crtChannel.channelDef.length >= 2\n ) {\n const i = this.crtChannel.channelDef.length - 2,\n x0 = this.crtChannel.channelDef[i].position[0],\n y0 = this.crtChannel.channelDef[i].position[1];\n if (Math.abs(x - x0) > Math.abs(y - y0)) {\n y = y0;\n x = coordinateStore.roundCoords(x);\n } else {\n x = x0;\n y = coordinateStore.roundCoords(y);\n }\n coordinateStore.roundedGlobalCoords[0] = x;\n coordinateStore.roundedGlobalCoords[1] = y;\n }\n },\n // triggered by mouse up\n addChannelPoint() {\n const coordinateStore = useCoordinateStore();\n const channelSegInput = useChannelSegInputStore();\n // add point if the crt point is different from the last point\n const n = this.crtChannel.channelDef.length;\n if (\n n < 2 ||\n !isTheSamePoint(\n this.crtChannel.channelDef[n - 1].position,\n this.crtChannel.channelDef[n - 2].position\n )\n ) {\n // insert a copy of roundedGlobalCoords at the 2nd last idx\n this.crtChannel.channelDef.splice(\n this.crtChannel.channelDef.length - 1,\n 0,\n new ChannelPoint([...coordinateStore.roundedGlobalCoords])\n );\n coordinateStore.snapping = false;\n channelSegInput.lengthLocked = false;\n }\n },\n addPolygonPoint() {\n const coordinateStore = useCoordinateStore();\n // insert a copy of roundedGlobalCoords at the 2nd last idx\n this.crtPolygon.points.splice(this.crtPolygon.points.length - 1, 0, [\n ...coordinateStore.roundedGlobalCoords\n ]);\n },\n stopAddingChannel() {\n const channelInput = useChannelSegInputStore();\n channelInput.lengthLocked = false;\n this.isAddingChannel = false;\n },\n stepOutChannel() {\n const channelInput = useChannelSegInputStore();\n if (channelInput.lengthLocked) {\n channelInput.lengthLocked = false;\n } else {\n this.crtChannel.channelDef.pop();\n if (this.crtChannel.channelDef.length > 1) {\n // add to content\n const contentStore = useContentStore();\n this.crtChannel.setId();\n contentStore.contentMap.set(this.crtChannel.id, this.crtChannel);\n contentStore.crtLayerIds?.push(this.crtChannel.id);\n // add to history\n const historyStore = useHistoryStore();\n historyStore.addActivity(\n new BasicElementAct(this.crtChannel, contentStore.crtLayer)\n );\n this.crtChannel = dummyChannel;\n }\n this.stopAddingChannel();\n }\n },\n stepOutPolygon() {\n this.crtPolygon.points.pop();\n if (this.crtPolygon.points.length > 2) {\n // add to content\n const contentStore = useContentStore();\n this.crtPolygon.setId();\n contentStore.contentMap.set(this.crtPolygon.id, this.crtPolygon);\n contentStore.crtLayerIds?.push(this.crtPolygon.id);\n // add to history\n const historyStore = useHistoryStore();\n historyStore.addActivity(\n new BasicElementAct(this.crtPolygon, contentStore.crtLayer)\n );\n this.crtPolygon = dummyPolygon;\n }\n this.isAddingPolygon = false;\n },\n handleMouseUpLeft() {\n if (this.isAddingChannel) {\n this.addChannelPoint();\n } else if (this.isAddingPolygon) {\n this.addPolygonPoint();\n } else {\n // mode === 'select'\n switch (this.operation) {\n case MouseOperation.Idle:\n case MouseOperation.RotatingComponent:\n break;\n case MouseOperation.Selecting: {\n if (this.selectionState === SelectionState.IsSelectingGroup) {\n this.getSelectedGroup();\n } else {\n this.resetFlags();\n }\n break;\n }\n case MouseOperation.MovingElement: {\n this.stopMovingElement();\n break;\n }\n case MouseOperation.MovingBridge: {\n this.stopMovingBridge();\n break;\n }\n case MouseOperation.MovingChannelVertex: {\n this.stopMovingChannelVertex();\n break;\n }\n case MouseOperation.MovingPolygonVertex: {\n this.stopMovingPolygonVertex();\n break;\n }\n case MouseOperation.MovingGroup: {\n this.stopMivingGroup();\n break;\n }\n }\n }\n this.mouseup();\n },\n\n handleMouseDownLeft() {\n // initiallize selectRect\n switch (this.mode) {\n case Mode.Select: {\n if (this.operation === MouseOperation.Idle)\n this.initializeSelectRect();\n break;\n }\n case Mode.Polygon: {\n if (!this.isAddingPolygon) {\n this.addNewPolygon();\n }\n break;\n }\n case Mode.Channel: {\n if (!this.isAddingChannel) {\n this.addNewChannel();\n }\n break;\n }\n }\n },\n selectElement(id: string) {\n const contentStore = useContentStore();\n contentStore.selectElement(id);\n this.selectionState = SelectionState.EditingdSingleElement;\n },\n\n mouseDownOnElement(id: string, shift: boolean) {\n if (this.mode === Mode.Select) {\n const contentStore = useContentStore();\n // editing something\n if (shift && this.selectionState >= 2) {\n if (this.selectionState === SelectionState.EditingdSingleElement) {\n contentStore.crtGroupId = [contentStore.crtId];\n this.selectionState = SelectionState.EditingGroup;\n }\n contentStore.crtGroupId.push(id);\n }\n // not\n else {\n this.selectElement(id);\n }\n } else {\n this.handleMouseDownLeft();\n }\n },\n\n hideModuleBoard() {\n this.moduleBoardVisible = false;\n },\n showModuleBoard() {\n this.moduleBoardVisible = true;\n },\n initializeSelectRect() {\n const coordinate = useCoordinateStore();\n this.selectRect.x1 = this.selectRect.x2 = coordinate.windowCoords[0];\n this.selectRect.y1 = this.selectRect.y2 = coordinate.windowCoords[1];\n this.operation = MouseOperation.Selecting;\n },\n setSelectRect() {\n this.selectionState = 1;\n const coordinate = useCoordinateStore();\n this.selectRect.x2 = coordinate.windowCoords[0];\n this.selectRect.y2 = coordinate.windowCoords[1];\n },\n normalizeSelectRect() {\n const x1 = Math.min(this.selectRect.x1, this.selectRect.x2),\n y1 = Math.min(this.selectRect.y1, this.selectRect.y2),\n x2 = Math.max(this.selectRect.x1, this.selectRect.x2),\n y2 = Math.max(this.selectRect.y1, this.selectRect.y2);\n this.selectRect.x1 = x1;\n this.selectRect.x2 = x2;\n this.selectRect.y1 = y1;\n this.selectRect.y2 = y2;\n },\n resetSelectRect() {\n this.selectRect.x1 =\n this.selectRect.x2 =\n this.selectRect.y1 =\n this.selectRect.y2 =\n -1;\n },\n hasIntersection(id: string) {\n const rect = document.getElementById(id)?.getBoundingClientRect();\n return rect\n ? rect.x + rect.width >= this.selectRect.x1 &&\n rect.x <= this.selectRect.x2 &&\n rect.y + rect.height >= this.selectRect.y1 &&\n rect.y <= this.selectRect.y2\n : false;\n },\n isInsideSelectRest(id: string) {\n const rect = document.getElementById(id)?.getBoundingClientRect();\n return rect\n ? rect.x + rect.width <= this.selectRect.x1 &&\n rect.x >= this.selectRect.x2 &&\n rect.y + rect.height <= this.selectRect.y1 &&\n rect.y >= this.selectRect.y2\n : false;\n },\n getSelectedGroup() {\n if (this.selectionState === SelectionState.IsSelectingGroup) {\n this.normalizeSelectRect();\n const contentStore = useContentStore();\n const selectedGroup = Array();\n contentStore.crtLayerIds?.forEach((id) => {\n const elm = contentStore.getElement(id);\n if (\n elm.display &&\n elm.type !== \"bridge\" &&\n this.hasIntersection(id)\n ) {\n selectedGroup.push(id);\n }\n });\n contentStore.crtGroupId = selectedGroup;\n this.setGroupSelect();\n this.resetSelectRect();\n }\n },\n setGroupSelect() {\n const contentStore = useContentStore();\n if (contentStore.crtGroupId.length === 0) {\n this.selectionState = SelectionState.Idle;\n } else if (contentStore.crtGroupId.length === 1) {\n contentStore.selectElement(contentStore.crtGroupId[0]);\n this.selectionState = SelectionState.EditingdSingleElement;\n } else {\n this.selectionState = SelectionState.EditingGroup;\n }\n }\n }\n});\n","import { useContentStore } from \"../../stores/content\";\nimport {\n ComponentObject,\n CrossLayerConnection,\n PayloadLayer\n} from \"../typeDefinations\";\nimport ModuleTemplate from \"../modules/moduleTemplate\";\nimport {\n PayloadChannel,\n PayloadPolygon,\n Point\n} from \"@/library/payloadPrimitives\";\nimport { Channel } from \"@/library/channel\";\nimport { LevelConnection } from \"@/library/levelConnection\";\nimport { InletOutlet } from \"@/library/inletOutlet\";\nimport { Bridge } from \"@/library/bridge\";\nimport ComponentPolygon from \"@/library/componentPolygon\";\nimport ComponentCircle from \"@/library/componentCircle\";\n\nconst globalCompensationPolygon = (\n h: number,\n elevation: number\n): PayloadPolygon => {\n const z = elevation - h;\n const contentStore = useContentStore();\n const x = contentStore.chipLengthX;\n const y = contentStore.chipLengthY;\n const p1 = new Point(0, 0, z);\n const p2 = new Point(x, 0, z);\n const p3 = new Point(x, y, z);\n const p4 = new Point(0, y, z);\n return new PayloadPolygon([p1, p2, p3, p4], false, 0, 0, h);\n};\nconst calculateLocalCompensation = (\n z: number,\n localCompMin: number,\n minAt: number,\n localCompMax: number,\n maxAt: number\n): number => {\n if (localCompMin === 0) {\n localCompMin = 10 ** -9;\n }\n try {\n const maxmin = localCompMax / localCompMin;\n return (\n localCompMax +\n localCompMin -\n localCompMin * maxmin ** ((maxAt - z) / (maxAt - minAt))\n );\n } catch (err) {\n console.log(err);\n return 0;\n }\n};\n\nexport const buildRequestBody = (\n precision: string,\n globalCompCheck: boolean,\n globalComp: number,\n localCompCheck: boolean,\n localCompMin: number,\n minAt: number,\n localCompMax: number,\n maxAt: number\n): string => {\n const contentStore = useContentStore();\n const requestBody = {\n layers: Array(),\n crosslayerConnections: Array(),\n // {id:string, shapes: [connection (+ chamfer)]}\n relation: [],\n general: {\n length: contentStore.chipProperties[0].value,\n width: contentStore.chipProperties[1].value,\n thickness: contentStore.chipProperties[2].value,\n precision: precision\n }\n };\n if (globalCompCheck) {\n requestBody.general.thickness += globalComp * contentStore.layers.size;\n } else {\n globalComp = 0;\n }\n // sort layers\n const layersArr = Array.from(contentStore.layers.values());\n layersArr.sort((l1, l2) => {\n return l1.height - l2.height;\n });\n\n layersArr.forEach((layer, idx) => {\n const components = Array();\n const channels = Array();\n\n const elevation = layer.height + globalComp * (idx + 1);\n const localComp = localCompCheck\n ? calculateLocalCompensation(\n elevation,\n localCompMin,\n minAt,\n localCompMax,\n maxAt\n )\n : 0;\n\n // reset channel points\n layer.contentIds.forEach((id) => {\n const elm = contentStore.getElement(id);\n if (elm instanceof Channel) {\n elm.resetBridges();\n }\n });\n // bind bridges to channel points\n layer.contentIds.forEach((id) => {\n const elm = contentStore.getElement(id);\n if (elm.display && elm instanceof Bridge) {\n elm.channelSegment.start.bridges.push(elm);\n }\n });\n // build\n layer.contentIds.forEach((id) => {\n const elm = contentStore.getElement(id);\n if (elm.display) {\n if (\n elm instanceof ModuleTemplate ||\n elm instanceof ComponentPolygon ||\n elm instanceof ComponentCircle\n ) {\n const p = elm.buildPayload(elevation - localComp, localComp);\n if (p) components.push(p);\n } else if (elm instanceof Channel) {\n channels.push(elm.buildPayload(elevation - localComp, localComp));\n } else if (elm instanceof InletOutlet) {\n const connection = elm.buildPayload(\n elevation - localComp,\n requestBody.general.thickness\n );\n if (connection) requestBody.crosslayerConnections.push(connection);\n }\n }\n });\n const newLayer: PayloadLayer = {\n elevation: elevation,\n components: components,\n channels: channels\n };\n if (globalCompCheck) {\n newLayer.compensation = globalCompensationPolygon(\n globalComp,\n elevation - localComp\n );\n }\n requestBody.layers.push(newLayer);\n });\n // build level connection\n contentStore.levelConnectionIds.forEach((id) => {\n const elm = contentStore.getElement(id);\n if (elm instanceof LevelConnection && elm.display) {\n const p = elm.buildPayload((x: number) => {\n if (localCompCheck)\n return calculateLocalCompensation(\n x,\n localCompMin,\n minAt,\n localCompMax,\n maxAt\n );\n else return 0;\n });\n\n if (p) {\n requestBody.crosslayerConnections.push(p);\n }\n }\n });\n // download for testing\n // const textBlob = new Blob([JSON.stringify(requestBody)], {\n // type: \"text/plain\"\n // });\n // const a = document.createElement(\"a\");\n // a.download = `requestBody.json`;\n // a.href = window.URL.createObjectURL(textBlob);\n // a.click();\n\n return JSON.stringify(requestBody);\n};\n","import { defineStore } from \"pinia\";\nimport { useControlStore } from \"./control\";\nimport {\n ChannelSegment,\n ChannelPoint,\n ContentUnit,\n BasicPart,\n ContentUnitGeneral,\n STLLoadingState,\n Mode\n} from \"../library/other\";\nimport {\n CreateLevelAct,\n useHistoryStore,\n DeleteLevelAct,\n PasteAct\n} from \"./history\";\nimport {\n defaultPropertyStep,\n layerColorDefault,\n postUrl\n} from \"@/library/hardCodedValues\";\nimport ModuleTemplate from \"@/library/modules/moduleTemplate\";\nimport { Channel } from \"@/library/channel\";\nimport { Bridge } from \"@/library/bridge\";\nimport { LevelConnection } from \"@/library/levelConnection\";\nimport { InletOutlet } from \"@/library/inletOutlet\";\nimport { buildRequestBody } from \"@/library/utilities/payloadBuilder\";\nimport { useMoudleStore } from \"./module\";\nconst sweepingFlag = (a: number[], b: number[], p: number[]) => {\n const x = (p[1] - a[1]) * (b[0] - a[0]) - (p[0] - a[0]) * (b[1] - a[1]);\n return x > 0 ? 0 : 1;\n};\nconst getChannelSegDefinition = (\n A: number[],\n B: number[],\n C: number[],\n r: number,\n command?: string\n) => {\n const AB = [B[0] - A[0], B[1] - A[1]];\n const AC = [C[0] - A[0], C[1] - A[1]];\n const dAB = Math.sqrt(AB[0] ** 2 + AB[1] ** 2);\n const dAC = Math.sqrt(AC[0] ** 2 + AC[1] ** 2);\n const cosA = (AB[0] * AC[0] + AB[1] * AC[1]) / (dAB * dAC);\n const tanAHalf = Math.sqrt((1 - cosA) / (1 + cosA));\n const d0 = r / tanAHalf;\n command = command ? command : \"L\";\n if (d0 > dAB || d0 > dAC) {\n return ` ${command} ${A[0]} ${A[1]}`;\n } else {\n const ratio1 = d0 / dAB;\n const ratio2 = d0 / dAC;\n const p1 = [A[0] + AB[0] * ratio1, A[1] + AB[1] * ratio1];\n const p2 = [A[0] + AC[0] * ratio2, A[1] + AC[1] * ratio2];\n const flag = sweepingFlag(B, C, A);\n return ` ${command} ${p1[0]} ${p1[1]} A ${r} ${r} 0 0 ${flag} ${p2[0]} ${p2[1]}`;\n }\n};\n\nexport const useContentStore = defineStore(\"content\", {\n state: () => ({\n title: \"my_new_design\",\n crtLayer: \"Lv0\",\n levelCount: 1,\n layers: new Map([\n [\n \"Lv0\",\n {\n height: 200,\n color: \"#0d6efd\",\n label: \"Lv0\",\n id: \"Lv0\",\n contentIds: Array()\n }\n ]\n ]),\n contentMap: new Map(),\n chipProperties: [\n {\n name: \"Device Length\",\n value: 20000,\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n {\n name: \"Device Width\",\n value: 15000,\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n {\n name: \"Device Thickness\",\n value: 4000,\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n {\n name: \"Channel Width\",\n value: 400,\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n {\n name: \"Module Height\",\n value: 400,\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n {\n name: \"Layer Distance\",\n value: 600,\n step: defaultPropertyStep,\n unit: \"µm\"\n },\n { name: \"Number of Levels\", value: 1, step: 1, unit: \"\" },\n {\n name: \"Bottom Layer Elevation\",\n value: 200,\n step: defaultPropertyStep,\n unit: \"µm\"\n }\n ],\n defaultChipProperties: [20000, 15000, 4000, 400, 400, 600, 1, 200], //hard coded\n stlData: new ArrayBuffer(0),\n stlLoadingState: STLLoadingState.Idle,\n crtId: \"\",\n levelConnectionIds: Array(),\n crtGroupId: Array(),\n clipboard: Array(),\n showRadiusInput: false\n }),\n getters: {\n editingNodeElement(): boolean {\n return (\n this.crtElement instanceof LevelConnection ||\n this.crtElement instanceof InletOutlet\n );\n },\n maxLevelHeight(state) {\n return state.chipProperties[2].value - state.chipProperties[4].value;\n },\n heightOfCrtLayer(state) {\n return state.layers.get(state.crtLayer)?.height;\n },\n colorOfCrtLayer(state) {\n return state.layers.get(state.crtLayer)?.color;\n },\n crtLayerIds(state) {\n return state.layers.get(state.crtLayer)?.contentIds;\n },\n crtElement(state) {\n if (state.crtId !== \"\") return state.contentMap.get(state.crtId);\n else return null;\n },\n chipThickness(state) {\n return state.chipProperties[2].value;\n },\n chipLengthX(state) {\n return state.chipProperties[0].value;\n },\n chipLengthY(state) {\n return state.chipProperties[1].value;\n },\n defaultChannelWidth(state) {\n return state.chipProperties[3].value;\n },\n defaultModuleHeight(state) {\n return state.chipProperties[4].value;\n },\n bottomElevation(state) {\n return state.chipProperties[7].value;\n },\n crtNodeElmRadiusProperty(): { value: number } {\n if (this.crtElement instanceof LevelConnection) {\n return this.crtElement.properties.r;\n } else if (this.crtElement instanceof InletOutlet) {\n return this.crtElement.properties.r1;\n } else {\n throw \"invalid element\";\n }\n },\n\n // these two getters can be repleced with a state that mutates when a channel is added or deleted\n channelSegmentsForBridgePlacement(state) {\n // console.log(\"updating channel segments\");\n const channelSeg = Array();\n state.layers.get(state.crtLayer)?.contentIds.forEach((id) => {\n if (id !== this.crtId) {\n const channel = state.contentMap.get(id);\n if (channel instanceof Channel && channel.display) {\n for (let i = 0; i < channel.channelDef.length - 1; ++i) {\n channelSeg.push({\n cid: channel.id,\n idx: i,\n start: channel.channelDef[i],\n end: channel.channelDef[i + 1],\n width: channel.properties.channelWidth.value\n });\n }\n }\n }\n });\n return channelSeg;\n },\n channelPointsCanBeRounded(state) {\n // console.log(\"computing roundable channel point\");\n return state.layers.get(state.crtLayer)?.contentIds.reduce((pre, id) => {\n const c = state.contentMap.get(id);\n if (c instanceof Channel) {\n const end = c.channelDef.length - 1;\n return pre.concat(c.channelDef.slice(1, end));\n } else return pre;\n }, Array());\n }\n },\n actions: {\n // for both hollow and solid polygons\n polygonPathDefinition(points: number[][], r?: number): string {\n try {\n if (points.length < 3) {\n throw \"polygon has <3 vertices\";\n }\n let d = \"\";\n if (r && r > 0) {\n let A = points[0];\n let B = points[points.length - 1];\n let C = points[1];\n d += getChannelSegDefinition(A, B, C, r, \"M\");\n for (let i = 1; i < points.length; i++) {\n B = A;\n A = C;\n C = points[(i + 1) % points.length];\n d += getChannelSegDefinition(A, B, C, r);\n }\n } else {\n d += `M ${points[0][0]} ${points[0][1]}`;\n for (let i = 1; i < points.length; i++) {\n d += ` L ${points[i][0]} ${points[i][1]}`;\n }\n }\n return d + \"Z\";\n } catch (err) {\n console.log(err);\n return \"\";\n }\n },\n channelDefinition(channel: Channel): string {\n try {\n if (channel.channelDef.length < 2) {\n throw `${channel.id} has <2 vertices`;\n }\n const controlStore = useControlStore();\n let d = `M ${channel.channelDef[0].position[0]} ${channel.channelDef[0].position[1]}`;\n for (let i = 1; i < channel.channelDef.length - 1; i++) {\n if (\n channel.channelDef[i].isSelected ||\n channel.channelDef[i].roundedRadius > 0\n ) {\n const r = channel.channelDef[i].isSelected\n ? controlStore.roundedChannelRadius\n : channel.channelDef[i].roundedRadius;\n const A = channel.channelDef[i].position;\n const B = channel.channelDef[i - 1].position;\n const C = channel.channelDef[i + 1].position;\n d += getChannelSegDefinition(A, B, C, r);\n } else {\n d += ` L ${channel.channelDef[i].position[0]} ${channel.channelDef[i].position[1]}`;\n }\n }\n d += ` L ${\n channel.channelDef[channel.channelDef.length - 1].position[0]\n } ${channel.channelDef[channel.channelDef.length - 1].position[1]}`;\n return d;\n } catch (err) {\n console.log(err);\n return \"\";\n }\n },\n paste() {\n if (this.clipboard.length > 0) {\n const controlStore = useControlStore();\n if (controlStore.mode === Mode.Select && this.clipboard.length > 0) {\n this.crtGroupId = Array();\n const group = Array();\n this.clipboard.forEach((elm) => {\n if (elm instanceof BasicPart || elm instanceof ModuleTemplate) {\n const copy = elm.clone();\n if (copy instanceof ModuleTemplate) {\n copy.setNewModuleId();\n copy.initializeChannelPorts();\n this.addToContent(copy);\n this.crtLayerIds?.push(copy.id);\n // move by offset\n copy.setTranslate(1000, 1000);\n copy.updatePosition();\n } else {\n copy.updatePosition(1000, 1000);\n copy.resetTranslate();\n }\n copy.layer = this.crtLayer;\n this.crtGroupId.push(copy.id);\n group.push(copy);\n }\n });\n const history = useHistoryStore();\n history.addActivity(new PasteAct(group, this.crtLayer));\n controlStore.setGroupSelect();\n }\n }\n },\n copy() {\n this.clipboard = Array();\n // reset channel points\n this.crtLayerIds?.forEach((id) => {\n const elm = this.getElement(id);\n if (elm instanceof Channel) {\n elm.resetBridges();\n }\n });\n // bind bridges to channel points\n this.crtLayerIds?.forEach((id) => {\n const elm = this.getElement(id);\n if (elm && elm.display && elm instanceof Bridge) {\n elm.channelSegment.start.bridges.push(elm);\n }\n });\n const controlStore = useControlStore();\n if (controlStore.selectionState === 2) {\n this.clipboard.push(this.crtElement);\n } else if (controlStore.selectionState === 3) {\n this.crtGroupId.forEach((id) => {\n this.clipboard.push(this.getElement(id));\n });\n }\n },\n addToContent(newElm: ContentUnitGeneral) {\n this.contentMap.set(newElm.id, newElm);\n },\n addElmentToContent(elm: ContentUnitGeneral) {\n this.addToContent(elm);\n if (elm instanceof LevelConnection) {\n this.levelConnectionIds.push(elm.id);\n } else {\n this.crtLayerIds?.push(elm.id);\n }\n },\n removeFromSelected(target: string) {\n const i = this.crtGroupId.findIndex((id) => id === target);\n if (i >= 0) this.crtGroupId.splice(i, 1);\n },\n resetCrtGroup() {\n this.crtGroupId = Array();\n },\n getLevelElmIds(levelId: string) {\n return this.layers.get(levelId)?.contentIds;\n },\n getLevelHeight(levelId: string) {\n return this.layers.get(levelId)?.height;\n },\n getElement(id: string) {\n return this.contentMap.get(id);\n },\n discardSelected() {\n this.crtId = \"\";\n },\n editOnCrtElement() {\n if (this.crtElement.type === \"module\") {\n this.crtElement.updateRender();\n }\n },\n selectElement(id: string): void {\n this.crtId = id;\n },\n removeLevelSafely(id: string) {\n if (this.crtLayer === id) {\n this.crtLayer = this.layers.keys().next().value;\n }\n this.layers.delete(id);\n },\n\n deleteLevel(id: string) {\n // cannot delete the only level\n if (this.layers.size <= 1) {\n console.log(\"cannot delete the only level\");\n return;\n }\n // check dependency of level transition\n for (const tid of this.levelConnectionIds) {\n const transition = this.contentMap.get(tid);\n if (\n transition.properties.startLv.value === id ||\n transition.properties.endLv.value === id\n ) {\n console.log(\"invalid delete\");\n return;\n }\n }\n\n const level = this.layers.get(id);\n const levelContent = this.layers.get(id)?.contentIds;\n if (level !== undefined && levelContent !== undefined) {\n const historyStore = useHistoryStore();\n historyStore.addActivity(new DeleteLevelAct(level, id, levelContent));\n this.removeLevelSafely(id);\n }\n },\n\n getColorByIdx(idx: number) {\n return layerColorDefault[idx % layerColorDefault.length];\n },\n\n createNewLevel(h: number) {\n while (this.layers.has(`Lv${this.levelCount}`)) {\n this.levelCount++;\n }\n const label = `Lv${this.levelCount}`;\n const newLevelInfo = {\n height: h,\n color: this.getColorByIdx(this.levelCount),\n label: label,\n id: label,\n contentIds: new Array()\n };\n this.layers.set(label, newLevelInfo);\n const historyStore = useHistoryStore();\n historyStore.addActivity(new CreateLevelAct(newLevelInfo, label));\n },\n initializeContent(chipPropertyValues: number[]) {\n this.$reset();\n this.chipProperties.forEach((p, idx) => {\n p.value = chipPropertyValues[idx];\n });\n // reset component properties\n const moduleStore = useMoudleStore();\n moduleStore.initiallizeModuleFactory();\n const controlStore = useControlStore();\n controlStore.resetAppSettings();\n this.levelCount = this.chipProperties[6].value;\n for (let i = 0; i < this.levelCount; ++i) {\n const label = `Lv${i}`;\n this.layers.set(label, {\n height:\n this.chipProperties[7].value + i * this.chipProperties[5].value,\n color: layerColorDefault[i % layerColorDefault.length],\n label: label,\n id: label,\n contentIds: new Array()\n });\n }\n },\n\n changeCrtLayer(idx: string) {\n this.crtId = \"\";\n this.crtLayer = idx;\n const control = useControlStore();\n control.resetFlags();\n if (control.mode === Mode.InterLayer) {\n control.level.start = idx;\n }\n },\n moduleTransform(translate: number[], rotation = 0, center = [0, 0]) {\n return `translate(${translate[0]} ${translate[1]}) rotate(${rotation} ${center[0]} ${center[1]})`;\n },\n requestNewStlData(\n precision: string,\n globalCompCheck: boolean,\n globalComp: number,\n localCompCheck: boolean,\n localCompMin: number,\n minAt: number,\n localCompMax: number,\n maxAt: number,\n binary: boolean\n ) {\n this.stlLoadingState = STLLoadingState.Loading;\n const requestBody = buildRequestBody(\n precision,\n globalCompCheck,\n globalComp,\n localCompCheck,\n localCompMin,\n minAt,\n localCompMax,\n maxAt\n );\n const token = window.localStorage[\"jwtTokenFMT\"];\n const header = new Headers();\n if (token) {\n header.append(\"x-access-token\", `${token}`);\n }\n header.append(\"Content-Type\", \"application/x-www-form-urlencoded\");\n fetch(postUrl, {\n method: \"POST\",\n headers: header,\n body: `chip=${requestBody}&binary=${binary}`\n })\n .then((resp: Response) => {\n if (resp.ok) {\n return resp.arrayBuffer();\n }\n throw \"request failed\";\n })\n .then((data: ArrayBuffer) => {\n this.stlData = data;\n this.stlLoadingState = STLLoadingState.Succeed;\n console.log(\"stl loaded\");\n })\n .catch((e) => {\n // display error msg\n this.stlLoadingState = STLLoadingState.Fail;\n console.log(e);\n });\n },\n changeChipProperty(idx: number, val: number) {\n this.chipProperties[idx].value = +val;\n }\n }\n});\n","\n\n","import { render } from \"./ToolbarIcon.vue?vue&type=template&id=dd22323c\"\nimport script from \"./ToolbarIcon.vue?vue&type=script&lang=js\"\nexport * from \"./ToolbarIcon.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./ToolbarButton.vue?vue&type=template&id=54267cda\"\nimport script from \"./ToolbarButton.vue?vue&type=script&lang=js\"\nexport * from \"./ToolbarButton.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n","import { render } from \"./select-icon.vue?vue&type=template&id=7e069957\"\nconst script = {}\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n","import { render } from \"./component-icon.vue?vue&type=template&id=ba1b603a\"\nconst script = {}\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n","import { render } from \"./bridge-icon.vue?vue&type=template&id=c7a7e964\"\nconst script = {}\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n","import { render } from \"./inlet-outlet-icon.vue?vue&type=template&id=27ff22da\"\nconst script = {}\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","","import { render } from \"./channel-icon.vue?vue&type=template&id=acf2452a\"\nconst script = {}\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n","import { render } from \"./circle-icon.vue?vue&type=template&id=6f9badb8\"\nconst script = {}\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n","import { render } from \"./rounded-corner-icon.vue?vue&type=template&id=19863a86\"\nconst script = {}\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n","import { render } from \"./level-connection-icon.vue?vue&type=template&id=dd9341fe\"\nconst script = {}\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n","import { render } from \"./polygon-icon.vue?vue&type=template&id=1d25d4f8\"\nconst script = {}\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n","\n","import { render } from \"./node-round-icon.vue?vue&type=template&id=0789fe75\"\nconst script = {}\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n","import { render } from \"./node-square-icon.vue?vue&type=template&id=2e1ba95e\"\nconst script = {}\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./ToolbarChannelType.vue?vue&type=template&id=6b4aa104\"\nimport script from \"./ToolbarChannelType.vue?vue&type=script&lang=js\"\nexport * from \"./ToolbarChannelType.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n","\n\n","import { render } from \"./ToolbarShapeType.vue?vue&type=template&id=dea2c006\"\nimport script from \"./ToolbarShapeType.vue?vue&type=script&lang=js\"\nexport * from \"./ToolbarShapeType.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./ToolbarRadius.vue?vue&type=template&id=088e5138\"\nimport script from \"./ToolbarRadius.vue?vue&type=script&lang=js\"\nexport * from \"./ToolbarRadius.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n","import { render } from \"./ToolbarChannelWidth.vue?vue&type=template&id=4e3c1999\"\nimport script from \"./ToolbarChannelWidth.vue?vue&type=script&lang=js\"\nexport * from \"./ToolbarChannelWidth.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n","import { render } from \"./ToolbarCustomized.vue?vue&type=template&id=0c30f6fe\"\nimport script from \"./ToolbarCustomized.vue?vue&type=script&lang=js\"\nexport * from \"./ToolbarCustomized.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./Toolbar.vue?vue&type=template&id=ecc9203e&scoped=true\"\nimport script from \"./Toolbar.vue?vue&type=script&lang=js\"\nexport * from \"./Toolbar.vue?vue&type=script&lang=js\"\n\nimport \"./Toolbar.vue?vue&type=style&index=0&id=ecc9203e&scoped=true&lang=css\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-ecc9203e\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createBlock as _createBlock, createElementVNode as _createElementVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass, createVNode as _createVNode, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = [\"width\", \"height\"]\nconst _hoisted_2 = [\"transform\"]\nconst _hoisted_3 = {\n opacity: \"0.3\",\n id: \"svgContent\"\n}\nconst _hoisted_4 = [\"stroke\", \"fill\", \"id\"]\nconst _hoisted_5 = [\"stroke\", \"fill\"]\nconst _hoisted_6 = [\"cx\", \"cy\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_SvgElement = _resolveComponent(\"SvgElement\")!\n const _component_SvgLevelConnectionAllVue = _resolveComponent(\"SvgLevelConnectionAllVue\")!\n const _component_SvgCursor = _resolveComponent(\"SvgCursor\")!\n const _component_SvgChannelDraw = _resolveComponent(\"SvgChannelDraw\")!\n const _component_SvgPolygonDrawVue = _resolveComponent(\"SvgPolygonDrawVue\")!\n const _component_SvgEditElement = _resolveComponent(\"SvgEditElement\")!\n const _component_SvgEditGroupVue = _resolveComponent(\"SvgEditGroupVue\")!\n const _component_SvgChannelPortsVue = _resolveComponent(\"SvgChannelPortsVue\")!\n const _component_ChannelSegmentsForBridgePlacementVue = _resolveComponent(\"ChannelSegmentsForBridgePlacementVue\")!\n const _component_SvgChannelPointsRoundedVue = _resolveComponent(\"SvgChannelPointsRoundedVue\")!\n\n return (_openBlock(), _createElementBlock(\"svg\", {\n class: \"svg_canvas\",\n width: _ctx.coordinateStore.canvasSide,\n height: _ctx.coordinateStore.canvasSide,\n viewBox: \"0 0 1000000 1000000\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, [\n _createElementVNode(\"g\", {\n transform: _ctx.coordinateStore.globalTransform\n }, [\n _createElementVNode(\"g\", _hoisted_3, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(Array.from(_ctx.contentStore.layers.values()), (layer, idx) => {\n return (_openBlock(), _createElementBlock(\"g\", {\n key: idx,\n stroke: layer.color,\n fill: layer.color,\n id: layer.id\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.contentStore.layers.get(layer.id)?.contentIds, (id) => {\n return (_openBlock(), _createBlock(_component_SvgElement, {\n element: (_ctx.contentStore.contentMap.get(id) as ContentUnitGeneral),\n key: id\n }, null, 8, [\"element\"]))\n }), 128))\n ], 8, _hoisted_4))\n }), 128))\n ]),\n _createElementVNode(\"g\", {\n stroke: _ctx.contentStore.colorOfCrtLayer,\n fill: _ctx.contentStore.colorOfCrtLayer\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.contentStore.crtLayerIds, (id) => {\n return (_openBlock(), _createBlock(_component_SvgElement, {\n element: (_ctx.contentStore.contentMap.get(id) as ContentUnitGeneral),\n class: _normalizeClass({ crtLayerElm: _ctx.controlStore.mode === _ctx.Mode.Select }),\n key: id,\n onMousedown: _withModifiers(($event: any) => (\n _ctx.controlStore.mouseDownOnElement(\n id,\n $event.shiftKey || $event.ctrlKey\n )\n ), [\"left\",\"stop\"])\n }, null, 8, [\"element\", \"class\", \"onMousedown\"]))\n }), 128)),\n _createVNode(_component_SvgLevelConnectionAllVue),\n (\n _ctx.controlStore.mode === _ctx.Mode.Channel ||\n _ctx.controlStore.mode === _ctx.Mode.Polygon ||\n _ctx.controlStore.mode === _ctx.Mode.InletOutlet ||\n _ctx.controlStore.mode === _ctx.Mode.Bridge ||\n _ctx.controlStore.mode === _ctx.Mode.InterLayer ||\n _ctx.controlStore.mode === _ctx.Mode.Circle ||\n _ctx.controlStore.isPlacingModule\n )\n ? (_openBlock(), _createBlock(_component_SvgCursor, { key: 0 }))\n : _createCommentVNode(\"\", true),\n (_ctx.controlStore.isAddingChannel)\n ? (_openBlock(), _createBlock(_component_SvgChannelDraw, {\n key: 1,\n channel: _ctx.controlStore.crtChannel\n }, null, 8, [\"channel\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.controlStore.isAddingPolygon)\n ? (_openBlock(), _createBlock(_component_SvgPolygonDrawVue, {\n key: 2,\n polygon: _ctx.controlStore.crtPolygon\n }, null, 8, [\"polygon\"]))\n : _createCommentVNode(\"\", true),\n (\n _ctx.controlStore.selectionState === _ctx.SelectionState.EditingdSingleElement\n )\n ? (_openBlock(), _createBlock(_component_SvgEditElement, {\n key: 3,\n element: _ctx.contentStore.crtElement\n }, null, 8, [\"element\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.controlStore.selectionState === _ctx.SelectionState.EditingGroup)\n ? (_openBlock(), _createBlock(_component_SvgEditGroupVue, { key: 4 }))\n : _createCommentVNode(\"\", true),\n (\n _ctx.controlStore.mode === _ctx.Mode.Channel ||\n _ctx.controlStore.operation === _ctx.MouseOperation.MovingChannelVertex\n )\n ? (_openBlock(), _createBlock(_component_SvgChannelPortsVue, { key: 5 }))\n : _createCommentVNode(\"\", true),\n (\n _ctx.controlStore.isEditingBridge ||\n (_ctx.controlStore.isAddingChannel && !_ctx.channelSegInput.lengthLocked) ||\n (_ctx.controlStore.selectionState ===\n _ctx.SelectionState.EditingdSingleElement &&\n _ctx.controlStore.isEditingChannelPoint)\n )\n ? (_openBlock(), _createBlock(_component_ChannelSegmentsForBridgePlacementVue, { key: 6 }))\n : _createCommentVNode(\"\", true),\n (_ctx.controlStore.mode === _ctx.Mode.RoundedCorner)\n ? (_openBlock(), _createBlock(_component_SvgChannelPointsRoundedVue, { key: 7 }))\n : _createCommentVNode(\"\", true),\n (_ctx.controlStore.isPanning)\n ? (_openBlock(), _createElementBlock(\"circle\", {\n key: 8,\n style: {\"cursor\":\"grabbing\"},\n cx: _ctx.coordinateStore.globalCoords[0],\n cy: _ctx.coordinateStore.globalCoords[1],\n r: \"10000\",\n fill: \"transparent\",\n stroke: \"none\",\n onMousemove: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (\n _ctx.coordinateStore.panWithMovement($event.movementX, $event.movementY)\n ), [\"stop\"]))\n }, null, 40, _hoisted_6))\n : _createCommentVNode(\"\", true)\n ], 8, _hoisted_5)\n ], 8, _hoisted_2)\n ], 8, _hoisted_1))\n}","\n\n\n","import { openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"d\", \"stroke-width\", \"fill\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"path\", {\n d: _ctx.pathDef,\n stroke: \"inherit\",\n \"stroke-width\": _ctx.strokeWidth,\n \"stroke-linejoin\": \"round\",\n fill: _ctx.fill\n }, null, 8, _hoisted_1))\n}","\nimport ComponentPolygon from \"@/library/componentPolygon\";\nimport { ShapeType } from \"@/library/other\";\nimport { useContentStore } from \"@/stores/content\";\nimport { defineComponent, computed } from \"vue\";\nexport default defineComponent({\n props: {\n element: { type: ComponentPolygon, required: true },\n hightlightOffset: {\n type: Number,\n default: 0\n }\n },\n setup(props) {\n // hollow : fill=iherit, stroke-width=0\n // solid: fill= white, stroke=1\n // channel: fill = none, stroke=channel width\n const contentStore = useContentStore();\n const pathDef = computed(() =>\n contentStore.polygonPathDefinition(\n props.element.points,\n props.element.properties.radius.value\n )\n );\n const strokeWidth = computed(\n () =>\n props.hightlightOffset +\n (props.element.shapeType === ShapeType.Channel\n ? props.element.properties.channelWidth.value\n : 0)\n );\n const fill = computed(() =>\n props.element.shapeType === ShapeType.Hollow\n ? \"inherit\"\n : props.element.shapeType === ShapeType.Solid\n ? \"white\"\n : \"none\"\n );\n return { pathDef, ShapeType, strokeWidth, fill };\n }\n});\n","import { render } from \"./SvgPolygon.vue?vue&type=template&id=e76964b8&ts=true\"\nimport script from \"./SvgPolygon.vue?vue&type=script&lang=ts\"\nexport * from \"./SvgPolygon.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"cx\", \"cy\", \"r\", \"stroke-width\", \"fill\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"circle\", {\n cx: _ctx.element.x,\n cy: _ctx.element.y,\n r: _ctx.element.properties.radius.value,\n stroke: \"inherit\",\n \"stroke-width\": _ctx.strokeWidth,\n fill: _ctx.fill\n }, null, 8, _hoisted_1))\n}","\nimport ComponentCircle from \"@/library/componentCircle\";\nimport { ShapeType } from \"@/library/other\";\nimport { defineComponent, computed } from \"vue\";\nexport default defineComponent({\n props: {\n element: { type: ComponentCircle, required: true },\n hightlightOffset: {\n type: Number,\n default: 0\n }\n },\n setup(props) {\n // hollow : fill=iherit, stroke-width=0\n // solid: fill= white, stroke=1\n // channel: fill = none, stroke=channel width\n const strokeWidth = computed(\n () =>\n props.hightlightOffset +\n (props.element.shapeType === ShapeType.Channel\n ? props.element.properties.channelWidth.value\n : 0)\n );\n const fill = computed(() =>\n props.element.shapeType === ShapeType.Hollow\n ? \"inherit\"\n : props.element.shapeType === ShapeType.Solid\n ? \"white\"\n : \"none\"\n );\n return { ShapeType, strokeWidth, fill };\n }\n});\n","import { render } from \"./SvgCircle.vue?vue&type=template&id=39a3d4ea&ts=true\"\nimport script from \"./SvgCircle.vue?vue&type=script&lang=ts\"\nexport * from \"./SvgCircle.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n","import { render } from \"./SvgChannel.vue?vue&type=template&id=47d47cf0\"\nimport script from \"./SvgChannel.vue?vue&type=script&lang=js\"\nexport * from \"./SvgChannel.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n","import { render } from \"./SvgFlowControlNode.vue?vue&type=template&id=3e365ffc\"\nimport script from \"./SvgFlowControlNode.vue?vue&type=script&lang=js\"\nexport * from \"./SvgFlowControlNode.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n","import { render } from \"./SvgBridge.vue?vue&type=template&id=72fbe9a0\"\nimport script from \"./SvgBridge.vue?vue&type=script&lang=js\"\nexport * from \"./SvgBridge.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n","import { render } from \"./SvgLevelConnection.vue?vue&type=template&id=3345150b\"\nimport script from \"./SvgLevelConnection.vue?vue&type=script&lang=js\"\nexport * from \"./SvgLevelConnection.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","\n\n","import { render } from \"./PrimitiveChannel.vue?vue&type=template&id=34df85a0\"\nimport script from \"./PrimitiveChannel.vue?vue&type=script&lang=js\"\nexport * from \"./PrimitiveChannel.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n","import { render } from \"./PrimitiveCircle.vue?vue&type=template&id=3f75eeef\"\nimport script from \"./PrimitiveCircle.vue?vue&type=script&lang=js\"\nexport * from \"./PrimitiveCircle.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n","import { render } from \"./PrimitivePolygon.vue?vue&type=template&id=76f7a536\"\nimport script from \"./PrimitivePolygon.vue?vue&type=script&lang=js\"\nexport * from \"./PrimitivePolygon.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n","import { render } from \"./PrimitiveRectangle.vue?vue&type=template&id=5c2d68ec\"\nimport script from \"./PrimitiveRectangle.vue?vue&type=script&lang=js\"\nexport * from \"./PrimitiveRectangle.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./SvgModule.vue?vue&type=template&id=678da408\"\nimport script from \"./SvgModule.vue?vue&type=script&lang=js\"\nexport * from \"./SvgModule.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./SvgElement.vue?vue&type=template&id=36d67ce0\"\nimport script from \"./SvgElement.vue?vue&type=script&lang=js\"\nexport * from \"./SvgElement.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-5be8b522\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { key: 0 }\nconst _hoisted_2 = [\"d\", \"stroke-width\"]\nconst _hoisted_3 = [\"d\"]\nconst _hoisted_4 = [\"x\", \"y\"]\nconst _hoisted_5 = [\"cx\", \"cy\", \"r\", \"stroke-width\"]\nconst _hoisted_6 = [\"cx\", \"cy\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_ctx.channel.channelDef.length > 1)\n ? (_openBlock(), _createElementBlock(\"g\", _hoisted_1, [\n _createElementVNode(\"path\", {\n d: _ctx.pathDef,\n stroke: \"inherit\",\n fill: \"none\",\n \"stroke-width\": _ctx.channel.properties.channelWidth.value,\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n }, null, 8, _hoisted_2),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList([...Array(_ctx.channel.channelDef.length - 1).keys()], (i) => {\n return (_openBlock(), _createElementBlock(\"g\", { key: i }, [\n _createElementVNode(\"path\", {\n d: `M${_ctx.channel.channelDef[i].position[0]} ${\n _ctx.channel.channelDef[i].position[1]\n } L${_ctx.channel.channelDef[i + 1].position[0]} ${\n _ctx.channel.channelDef[i + 1].position[1]\n }`,\n stroke: \"white\",\n fill: \"none\",\n \"stroke-width\": \"20\",\n \"stroke-dasharray\": \"50,50\",\n \"stroke-linejoin\": \"round\",\n \"marker-start\": \"url(#arrowWhite)\",\n \"marker-end\": \"url(#arrowWhite)\",\n opacity: \"0.7\"\n }, null, 8, _hoisted_3),\n _createElementVNode(\"text\", {\n x: \n (_ctx.channel.channelDef[i].position[0] +\n _ctx.channel.channelDef[i + 1].position[0]) /\n 2\n ,\n y: \n (_ctx.channel.channelDef[i].position[1] +\n _ctx.channel.channelDef[i + 1].position[1]) /\n 2\n ,\n class: \"channelSegnemtLength\"\n }, _toDisplayString(_ctx.channelSegInput.segLength(\n _ctx.channel.channelDef[i],\n _ctx.channel.channelDef[i + 1]\n )) + \" µm\", 9, _hoisted_4)\n ]))\n }), 128)),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.channel.channelDef, (vertex, index) => {\n return (_openBlock(), _createElementBlock(\"circle\", {\n key: index,\n cx: vertex.position[0],\n cy: vertex.position[1],\n r: _ctx.controlStore.editingCircleRadius,\n fill: \"white\",\n \"stroke-width\": _ctx.controlStore.editingStrokeWidth\n }, null, 8, _hoisted_5))\n }), 128)),\n (_ctx.channelSegInput.lengthLocked)\n ? (_openBlock(), _createElementBlock(\"circle\", {\n key: 0,\n cx: _ctx.coordinateStore.globalCoords[0],\n cy: _ctx.coordinateStore.globalCoords[1],\n r: \"10000\",\n fill: \"transparent\",\n stroke: \"transparent\",\n onMousemove: _cache[0] || (_cache[0] = ($event: any) => (_ctx.channelSegInput.updateChannelSegDirection($event.shiftKey)))\n }, null, 40, _hoisted_6))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n}","\nimport { Channel } from \"@/library/channel\";\nimport { useChannelSegInputStore } from \"@/stores/channelSegmentInput\";\nimport { useControlStore } from \"@/stores/control\";\nimport { useCoordinateStore } from \"@/stores/coordinate\";\nimport { computed, defineComponent } from \"vue\";\nexport default defineComponent({\n props: {\n channel: { type: Channel, required: true }\n },\n setup(props) {\n const controlStore = useControlStore();\n const channelSegInput = useChannelSegInputStore();\n const coordinateStore = useCoordinateStore();\n const pathDef = computed(() => {\n let d = `M${props.channel.channelDef[0].position[0]} ${props.channel.channelDef[0].position[1]}`;\n for (let i = 1; i < props.channel.channelDef.length; ++i) {\n d += ` L${props.channel.channelDef[i].position[0]} ${props.channel.channelDef[i].position[1]}`;\n }\n return d;\n });\n\n return { controlStore, channelSegInput, pathDef, coordinateStore };\n }\n});\n","import { render } from \"./SvgChannelDraw.vue?vue&type=template&id=5be8b522&scoped=true&ts=true\"\nimport script from \"./SvgChannelDraw.vue?vue&type=script&lang=ts\"\nexport * from \"./SvgChannelDraw.vue?vue&type=script&lang=ts\"\n\nimport \"./SvgChannelDraw.vue?vue&type=style&index=0&id=5be8b522&scoped=true&lang=css\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5be8b522\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./SvgCursor.vue?vue&type=template&id=75b889d1\"\nimport script from \"./SvgCursor.vue?vue&type=script&lang=js\"\nexport * from \"./SvgCursor.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, withModifiers as _withModifiers } from \"vue\"\n\nconst _hoisted_1 = [\"cx\", \"cy\"]\nconst _hoisted_2 = [\"x1\", \"y1\", \"x2\", \"y2\", \"stroke-width\", \"onMousemove\", \"onMouseenter\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"g\", {\n onMouseenter: _cache[1] || (_cache[1] = ($event: any) => (_ctx.controlStore.enableBridgePlacement())),\n onMouseleave: _cache[2] || (_cache[2] = ($event: any) => (_ctx.onMouseLeave()))\n }, [\n (_ctx.coordinateStore.snapping)\n ? (_openBlock(), _createElementBlock(\"circle\", {\n key: 0,\n cx: _ctx.coordinateStore.roundedGlobalCoords[0],\n cy: _ctx.coordinateStore.roundedGlobalCoords[1],\n r: \"200\",\n fill: \"cyan\",\n opacity: \"0.7\"\n }, null, 8, _hoisted_1))\n : _createCommentVNode(\"\", true),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.contentStore.channelSegmentsForBridgePlacement, (line, idx) => {\n return (_openBlock(), _createElementBlock(\"line\", {\n key: idx,\n x1: line.start.position[0],\n y1: line.start.position[1],\n x2: line.end.position[0],\n y2: line.end.position[1],\n stroke: \"transparent\",\n \"stroke-width\": line.width,\n onMousemove: ($event: any) => (_ctx.mouseMoveOnSegment(line)),\n onMouseup: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.mouseClickOnSegment()), [\"stop\"])),\n onMouseenter: ($event: any) => (_ctx.mouseEnterSegment(line))\n }, null, 40, _hoisted_2))\n }), 128))\n ], 32))\n}","\nimport { ChannelSegment, Mode } from \"@/library/other\";\nimport { useContentStore } from \"@/stores/content\";\nimport { useControlStore } from \"@/stores/control\";\nimport { useCoordinateStore } from \"@/stores/coordinate\";\nimport { defineComponent, onBeforeUnmount } from \"vue\";\n\nexport default defineComponent({\n setup() {\n const contentStore = useContentStore();\n const controlStore = useControlStore();\n const coordinateStore = useCoordinateStore();\n\n const mouseEnterSegment = (line: ChannelSegment) => {\n if (controlStore.isEditingBridge) {\n controlStore.setBridgeChannelSeg(line);\n } else {\n // adding/editing channel point\n coordinateStore.snapping = true;\n }\n };\n const mouseClickOnSegment = () => {\n if (controlStore.mode === Mode.Bridge) {\n controlStore.finishBridgePlacement();\n } else {\n // editing bridge / adding/editing channel point\n controlStore.handleMouseUpLeft();\n }\n };\n const mouseMoveOnSegment = (line: ChannelSegment) => {\n const x0 = coordinateStore.globalCoords[0];\n const y0 = coordinateStore.globalCoords[1];\n const ab = [\n line.end.position[0] - line.start.position[0],\n line.end.position[1] - line.start.position[1]\n ];\n const ac = [x0 - line.start.position[0], y0 - line.start.position[1]];\n const bc = [x0 - line.end.position[0], y0 - line.end.position[1]];\n // ac * ab\n const l1 = Math.abs(ab[0] * ac[0] + ab[1] * ac[1]);\n // bc * ab\n const l2 = Math.abs(ab[0] * bc[0] + ab[1] * bc[1]);\n const ratio = l1 / (l1 + l2);\n if (controlStore.isEditingBridge) {\n controlStore.setPosOnSeg(ratio);\n } else {\n // adding/editing channel point\n const x = ab[0] * ratio + line.start.position[0];\n const y = ab[1] * ratio + line.start.position[1];\n coordinateStore.roundedGlobalCoords[0] = x;\n coordinateStore.roundedGlobalCoords[1] = y;\n }\n };\n\n const onMouseLeave = () => {\n coordinateStore.snapping = false;\n controlStore.disableBridgePlacement();\n };\n onBeforeUnmount(() => {\n onMouseLeave();\n });\n\n return {\n contentStore,\n controlStore,\n coordinateStore,\n onMouseLeave,\n mouseEnterSegment,\n mouseMoveOnSegment,\n mouseClickOnSegment\n };\n }\n});\n","import { render } from \"./ChannelSegmentsForBridgePlacement.vue?vue&type=template&id=4b513732&ts=true\"\nimport script from \"./ChannelSegmentsForBridgePlacement.vue?vue&type=script&lang=ts\"\nexport * from \"./ChannelSegmentsForBridgePlacement.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","\n\n\n\n","import { render } from \"./SvgElementHighlight.vue?vue&type=template&id=052d1358&scoped=true\"\nimport script from \"./SvgElementHighlight.vue?vue&type=script&lang=js\"\nexport * from \"./SvgElementHighlight.vue?vue&type=script&lang=js\"\n\nimport \"./SvgElementHighlight.vue?vue&type=style&index=0&id=052d1358&scoped=true&lang=css\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-052d1358\"]])\n\nexport default __exports__","import { render } from \"./SvgEditElement.vue?vue&type=template&id=68e801f7\"\nimport script from \"./SvgEditElement.vue?vue&type=script&lang=js\"\nexport * from \"./SvgEditElement.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, withModifiers as _withModifiers } from \"vue\"\n\nconst _hoisted_1 = [\"cx\", \"cy\"]\nconst _hoisted_2 = [\"cx\", \"cy\", \"onMouseenter\", \"onMouseup\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"g\", {\n stroke: \"none\",\n onMouseleave: _cache[1] || (_cache[1] = ($event: any) => (_ctx.hover = false))\n }, [\n (_ctx.hover)\n ? (_openBlock(), _createElementBlock(\"circle\", {\n key: 0,\n cx: _ctx.hoverPort[0],\n cy: _ctx.hoverPort[1],\n r: \"200\",\n fill: \"cyan\",\n opacity: \"0.7\"\n }, null, 8, _hoisted_1))\n : _createCommentVNode(\"\", true),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.portsOnCrtLevel, (port, index) => {\n return (_openBlock(), _createElementBlock(\"circle\", {\n key: index,\n cx: port.position[0],\n cy: port.position[1],\n r: \"400\",\n fill: \"transparent\",\n onMouseenter: ($event: any) => (_ctx.setHoverPort(port.position)),\n onMousemove: _cache[0] || (_cache[0] = _withModifiers(() => {}, [\"stop\"])),\n onMouseup: _withModifiers(($event: any) => (_ctx.bindChannelPort(port)), [\"left\",\"stop\"])\n }, null, 40, _hoisted_2))\n }), 128))\n ], 32))\n}","\nimport { computed, defineComponent, ref } from \"vue\";\nimport { useControlStore } from \"@/stores/control\";\nimport { useContentStore } from \"../stores/content\";\nimport { useCoordinateStore } from \"@/stores/coordinate\";\nimport { ChannelPort } from \"@/library/other\";\nimport ModuleTemplate from \"@/library/modules/moduleTemplate\";\nimport { InletOutlet } from \"@/library/inletOutlet\";\nexport default defineComponent({\n setup() {\n const controlStore = useControlStore();\n const contentStore = useContentStore();\n const coordinateStore = useCoordinateStore();\n const hoverPort = ref([0, 0]);\n const hover = ref(false);\n const setHoverPort = (port: number[]) => {\n hoverPort.value = port;\n coordinateStore.roundedGlobalCoords[0] = hoverPort.value[0];\n coordinateStore.roundedGlobalCoords[1] = hoverPort.value[1];\n hover.value = true;\n };\n const portsOnCrtLevel = computed(() => {\n const ports = Array();\n contentStore.crtLayerIds?.forEach((id) => {\n const elm = contentStore.getElement(id);\n if (elm.display) {\n if (elm instanceof ModuleTemplate) {\n if (elm.channelPorts) {\n elm.channelPorts.forEach((p) => {\n ports.push(p);\n });\n }\n }\n if (elm instanceof InletOutlet) {\n ports.push(elm.channelPort);\n }\n }\n });\n contentStore.levelConnectionIds.forEach((id) => {\n const elm = contentStore.getElement(id);\n if (elm.display) {\n ports.push(elm.channelPort);\n }\n });\n return ports;\n });\n const bindChannelPort = (port: ChannelPort) => {\n controlStore.bindChannelPort(port);\n };\n return {\n hover,\n hoverPort,\n controlStore,\n contentStore,\n portsOnCrtLevel,\n setHoverPort,\n bindChannelPort\n };\n }\n});\n","import { render } from \"./SvgChannelPorts.vue?vue&type=template&id=7be9706c&ts=true\"\nimport script from \"./SvgChannelPorts.vue?vue&type=script&lang=ts\"\nexport * from \"./SvgChannelPorts.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"cx\", \"cy\", \"r\", \"stroke-width\", \"onClick\"]\nconst _hoisted_2 = [\"cx\", \"cy\", \"r\", \"stroke-width\", \"onClick\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"g\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.canBeRounded, (point, index) => {\n return (_openBlock(), _createElementBlock(\"circle\", {\n key: index,\n cx: point.position[0],\n cy: point.position[1],\n r: _ctx.controlStore.editingCircleRadius,\n fill: \"white\",\n \"stroke-width\": _ctx.controlStore.editingStrokeWidth,\n onClick: ($event: any) => (_ctx.controlStore.addSelectedRounedCorner(point)),\n style: {\"cursor\":\"pointer\"}\n }, null, 8, _hoisted_1))\n }), 128)),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.controlStore.selectedChannelPoints, (point, index) => {\n return (_openBlock(), _createElementBlock(\"circle\", {\n key: index,\n cx: point.position[0],\n cy: point.position[1],\n r: _ctx.controlStore.editingCircleRadius,\n fill: \"gold\",\n \"stroke-width\": _ctx.controlStore.editingStrokeWidth,\n onClick: ($event: any) => (_ctx.controlStore.removeSelectedRoundedCorner(point)),\n style: {\"cursor\":\"pointer\"}\n }, null, 8, _hoisted_2))\n }), 128))\n ]))\n}","\nimport { computed, defineComponent } from \"vue\";\nimport { useControlStore } from \"@/stores/control\";\nimport { useContentStore } from \"../stores/content\";\nimport { Channel } from \"@/library/channel\";\nimport { ChannelPoint } from \"@/library/other\";\nexport default defineComponent({\n setup() {\n const controlStore = useControlStore();\n const contentStore = useContentStore();\n const canBeRounded = computed(() =>\n contentStore.crtLayerIds?.reduce((pre, id) => {\n const c = contentStore.getElement(id);\n if (c instanceof Channel && c.display) {\n const end = c.channelDef.length - 1;\n return pre.concat(c.channelDef.slice(1, end));\n } else return pre;\n }, Array())\n );\n return {\n canBeRounded,\n controlStore,\n contentStore\n };\n }\n});\n","import { render } from \"./SvgChannelPointsRounded.vue?vue&type=template&id=3f32ae0e&ts=true\"\nimport script from \"./SvgChannelPointsRounded.vue?vue&type=script&lang=ts\"\nexport * from \"./SvgChannelPointsRounded.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, withModifiers as _withModifiers, createBlock as _createBlock, normalizeClass as _normalizeClass } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_SvgLevelConnectionVue = _resolveComponent(\"SvgLevelConnectionVue\")!\n\n return (_openBlock(), _createElementBlock(\"g\", {\n class: _normalizeClass({ pointer: _ctx.controlStore.mode === _ctx.Mode.Select })\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.contentStore.levelConnectionIds, (id, idx) => {\n return (_openBlock(), _createBlock(_component_SvgLevelConnectionVue, {\n class: \"crtLayerElm\",\n key: idx,\n element: _ctx.contentStore.getElement(id),\n onMousedown: _withModifiers(($event: any) => (\n _ctx.controlStore.mouseDownOnElement(id, $event.shiftKey || $event.ctrlKey)\n ), [\"stop\"])\n }, null, 8, [\"element\", \"onMousedown\"]))\n }), 128))\n ], 2))\n}","\nimport { useContentStore } from \"@/stores/content\";\nimport { useControlStore } from \"@/stores/control\";\nimport { defineComponent } from \"vue\";\nimport SvgLevelConnectionVue from \"./SvgLevelConnection.vue\";\nimport { Mode } from \"@/library/other\";\nexport default defineComponent({\n components: {\n SvgLevelConnectionVue\n },\n setup() {\n const contentStore = useContentStore();\n const controlStore = useControlStore();\n return {\n contentStore,\n controlStore,\n Mode\n };\n }\n});\n","import { render } from \"./SvgLevelConnectionAll.vue?vue&type=template&id=1337e979&scoped=true&ts=true\"\nimport script from \"./SvgLevelConnectionAll.vue?vue&type=script&lang=ts\"\nexport * from \"./SvgLevelConnectionAll.vue?vue&type=script&lang=ts\"\n\nimport \"./SvgLevelConnectionAll.vue?vue&type=style&index=0&id=1337e979&scoped=true&lang=css\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-1337e979\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, withModifiers as _withModifiers, createBlock as _createBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_SvgElementHighlightVue = _resolveComponent(\"SvgElementHighlightVue\")!\n\n return (_openBlock(), _createElementBlock(\"g\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.contentStore.crtGroupId, (id, idx) => {\n return (_openBlock(), _createBlock(_component_SvgElementHighlightVue, {\n key: idx,\n element: _ctx.contentStore.getElement(id),\n onMousedown: _withModifiers(($event: any) => (\n _ctx.mouseDownOnSelected($event.shiftKey || $event.ctrlKey, id)\n ), [\"stop\"])\n }, null, 8, [\"element\", \"onMousedown\"]))\n }), 128))\n ]))\n}","\n import { useContentStore } from \"@/stores/content\";\n import { useControlStore } from \"@/stores/control\";\n import { useCoordinateStore } from \"@/stores/coordinate\";\n import { defineComponent } from \"vue\";\n import SvgElementHighlightVue from \"./SvgElementHighlight.vue\";\n\n export default defineComponent({\n components: {\n SvgElementHighlightVue,\n },\n setup() {\n const controlStore = useControlStore();\n const contentStore = useContentStore();\n const coordinateStore = useCoordinateStore();\n const mouseDownOnSelected = (shift: boolean, id: string) => {\n if (shift) {\n contentStore.removeFromSelected(id);\n if (contentStore.crtGroupId.length === 1) {\n contentStore.selectElement(contentStore.crtGroupId[0]);\n controlStore.setSelectionState(2);\n contentStore.resetCrtGroup();\n }\n } else {\n controlStore.startMovingGroup();\n }\n };\n return {\n contentStore,\n controlStore,\n coordinateStore,\n mouseDownOnSelected,\n };\n },\n });\n","import { render } from \"./SvgEditGroup.vue?vue&type=template&id=64a1aaea&ts=true\"\nimport script from \"./SvgEditGroup.vue?vue&type=script&lang=ts\"\nexport * from \"./SvgEditGroup.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n","import { render } from \"./SvgPolygonDraw.vue?vue&type=template&id=1b63e514\"\nimport script from \"./SvgPolygonDraw.vue?vue&type=script&lang=js\"\nexport * from \"./SvgPolygonDraw.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { useCoordinateStore } from \"@/stores/coordinate\";\nimport { useContentStore } from \"@/stores/content\";\nimport SvgElement from \"./SvgElement.vue\";\nimport { defineComponent } from \"vue\";\nimport SvgChannelDraw from \"./SvgChannelDraw.vue\";\nimport { useControlStore } from \"@/stores/control\";\nimport SvgCursor from \"./SvgCursor.vue\";\nimport ChannelSegmentsForBridgePlacementVue from \"./ChannelSegmentsForBridgePlacement.vue\";\nimport SvgEditElement from \"./SvgEditElement.vue\";\nimport SvgChannelPortsVue from \"./SvgChannelPorts.vue\";\nimport SvgChannelPointsRoundedVue from \"./SvgChannelPointsRounded.vue\";\nimport SvgLevelConnectionAllVue from \"./SvgLevelConnectionAll.vue\";\nimport SvgEditGroupVue from \"./SvgEditGroup.vue\";\nimport SvgPolygonDrawVue from \"./SvgPolygonDraw.vue\";\nimport { useChannelSegInputStore } from \"@/stores/channelSegmentInput\";\nimport {\n Mode,\n SelectionState,\n MouseOperation,\n ContentUnitGeneral\n} from \"@/library/other\";\n\nexport default defineComponent({\n components: {\n SvgElement,\n SvgChannelDraw,\n SvgCursor,\n ChannelSegmentsForBridgePlacementVue,\n SvgEditElement,\n SvgChannelPortsVue,\n SvgChannelPointsRoundedVue,\n SvgLevelConnectionAllVue,\n SvgEditGroupVue,\n SvgPolygonDrawVue\n },\n props: {\n isActive: Boolean,\n idx: Number\n },\n setup() {\n const coordinateStore = useCoordinateStore();\n const contentStore = useContentStore();\n const controlStore = useControlStore();\n const channelSegInput = useChannelSegInputStore();\n return {\n coordinateStore,\n channelSegInput,\n contentStore,\n controlStore,\n Mode,\n SelectionState,\n MouseOperation,\n ContentUnitGeneral\n };\n }\n});\n","import { render } from \"./SvgCanvas.vue?vue&type=template&id=42fce650&ts=true\"\nimport script from \"./SvgCanvas.vue?vue&type=script&lang=ts\"\nexport * from \"./SvgCanvas.vue?vue&type=script&lang=ts\"\n\nimport \"./SvgCanvas.vue?vue&type=style&index=0&id=42fce650&lang=css\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n class: \"container-fluid d-flex justify-content-between position-fixed start-0 bottom-0 border-top bg-light px-5\",\n style: {\"z-index\":\"1046\",\"height\":\"22px\",\"min-width\":\"950px\"}\n}\nconst _hoisted_2 = { class: \"d-flex\" }\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"button\", {\n class: \"btn btn-sm py-0 mx-1\",\n title: \"Level Inspection\"\n}, [\n /*#__PURE__*/_createElementVNode(\"i\", { class: \"fa-solid fa-list\" })\n], -1)\nconst _hoisted_4 = { id: \"popperVia\" }\nconst _hoisted_5 = { style: {\"min-width\":\"300px\"} }\nconst _hoisted_6 = { class: \"mx-2\" }\nconst _hoisted_7 = { class: \"mx-2\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_PanelLevelVue = _resolveComponent(\"PanelLevelVue\")!\n const _component_Popper = _resolveComponent(\"Popper\")!\n const _component_LevelVue = _resolveComponent(\"LevelVue\")!\n const _component_PopperWrapperGreen = _resolveComponent(\"PopperWrapperGreen\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_component_Popper, null, {\n content: _withCtx(() => [\n _createVNode(_component_PanelLevelVue)\n ]),\n default: _withCtx(() => [\n _hoisted_3\n ]),\n _: 1\n }),\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(_component_PopperWrapperGreen, {\n content: \"Please select the layer to which the via should connect.\",\n arrow: true,\n show: _ctx.showPopper\n }, {\n default: _withCtx(() => [\n _createVNode(_component_LevelVue, {\n onMouseenter: _cache[0] || (_cache[0] = ($event: any) => (_ctx.controlStore.hidePopper()))\n })\n ]),\n _: 1\n }, 8, [\"show\"])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"span\", _hoisted_6, \"Snap Precision: \" + _toDisplayString(_ctx.coordinate.precision) + \" μm\", 1),\n _createElementVNode(\"span\", _hoisted_7, \"Grid Size: \" + _toDisplayString(_ctx.coordinate.precisionGrid) + \" μm\", 1)\n ]),\n _createElementVNode(\"span\", null, \"X: \" + _toDisplayString(_ctx.coordinate.roundedGlobalCoords[0].toFixed()) + \" µm, Y: \" + _toDisplayString(_ctx.coordinate.roundedGlobalCoords[1].toFixed()) + \" µm\", 1)\n ]))\n}","\n\n\n","import script from \"./Level.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./Level.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./Level.vue?vue&type=style&index=0&id=00cff219&scoped=true&lang=css\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-00cff219\"]])\n\nexport default __exports__","\n\n\n\n","import script from \"./PanelLevel.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./PanelLevel.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./PanelLevel.vue?vue&type=style&index=0&id=ca2f9c40&scoped=true&lang=css\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-ca2f9c40\"]])\n\nexport default __exports__","\n\n\n\n","import { render } from \"./PopperWrapperGreen.vue?vue&type=template&id=37b09007&scoped=true\"\nimport script from \"./PopperWrapperGreen.vue?vue&type=script&lang=js\"\nexport * from \"./PopperWrapperGreen.vue?vue&type=script&lang=js\"\n\nimport \"./PopperWrapperGreen.vue?vue&type=style&index=0&id=37b09007&scoped=true&lang=css\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-37b09007\"]])\n\nexport default __exports__","\nimport { defineComponent } from \"vue\";\nimport Popper from \"vue3-popper\";\nimport { useCoordinateStore } from \"@/stores/coordinate\";\nimport { useControlStore } from \"@/stores/control\";\nimport LevelVue from \"./Level.vue\";\nimport { computed } from \"@vue/reactivity\";\nimport { Mode } from \"@/library/other\";\nimport PanelLevelVue from \"./PanelLevel.vue\";\nimport PopperWrapperGreen from \"./PopperWrapperGreen.vue\";\nexport default defineComponent({\n components: {\n LevelVue,\n Popper,\n PanelLevelVue,\n PopperWrapperGreen\n },\n setup() {\n const controlStore = useControlStore();\n const showPopper = computed(\n () =>\n controlStore.mode === Mode.InterLayer && controlStore.showLevelPopper\n );\n const coordinate = useCoordinateStore();\n return { showPopper, coordinate, controlStore };\n }\n});\n","import { render } from \"./TheFooter.vue?vue&type=template&id=c42b4e5a&ts=true\"\nimport script from \"./TheFooter.vue?vue&type=script&lang=ts\"\nexport * from \"./TheFooter.vue?vue&type=script&lang=ts\"\n\nimport \"./TheFooter.vue?vue&type=style&index=0&id=c42b4e5a&lang=css\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { Bridge } from \"@/library/bridge\";\nimport { Channel } from \"@/library/channel\";\nimport ComponentPolygon from \"@/library/componentPolygon\";\nimport { InletOutlet } from \"@/library/inletOutlet\";\nimport { LevelConnection } from \"@/library/levelConnection\";\nimport ModuleTemplate from \"@/library/modules/moduleTemplate\";\nimport {\n BasicPartOutput,\n Bridgeoutput,\n ChannelOutput,\n ComponentCircleOutput,\n ModuleOutput,\n PolygonOutput\n} from \"@/library/typeDefinations\";\nimport { useContentStore } from \"../../stores/content\";\nimport { useControlStore } from \"../../stores/control\";\nimport { useMoudleStore } from \"../../stores/module\";\nimport ComponentCircle from \"../componentCircle\";\n\nconst loadDesign = (file: Blob): void => {\n try {\n const controlStore = useControlStore();\n controlStore.resetAppSettings();\n const contentStore = useContentStore();\n const reader = new FileReader();\n reader.onload = () => {\n console.log(\"loaded\");\n if (typeof reader.result === \"string\") {\n const design = JSON.parse(reader.result);\n // parse chipProperties\n contentStore.initializeContent(design.chipProperties);\n contentStore.title = design.title;\n // parse content\n design.content.levelConnections.forEach(\n (levelConnection: BasicPartOutput) => {\n const res = LevelConnection.parse(levelConnection);\n contentStore.contentMap.set(res.id, res);\n contentStore.levelConnectionIds.push(res.id);\n }\n );\n const moduleStore = useMoudleStore();\n design.content.modules?.forEach((module: ModuleOutput) => {\n // const res = this.parseModule(module);\n const res =\n moduleStore.moduleFactory[module.moduleIdx].parseModule(module);\n contentStore.contentMap.set(res.id, res);\n });\n design.content.polygons?.forEach((polygon: PolygonOutput) => {\n const res = ComponentPolygon.parse(polygon);\n contentStore.contentMap.set(res.id, res);\n });\n design.content.circles?.forEach((circle: ComponentCircleOutput) => {\n const res = ComponentCircle.parse(circle);\n contentStore.contentMap.set(res.id, res);\n });\n // console.log(\"loading inlet outlet\");\n design.content.inOutlets?.forEach((inOutlet: BasicPartOutput) => {\n const res = InletOutlet.parse(inOutlet);\n contentStore.contentMap.set(res.id, res);\n });\n design.content.channels?.forEach((channel: ChannelOutput) => {\n const res = Channel.parse(channel);\n contentStore.contentMap.set(res.id, res);\n });\n design.content.bridges?.forEach((bridge: Bridgeoutput) => {\n const res = Bridge.parse(bridge);\n contentStore.contentMap.set(res.id, res);\n });\n // parse layers\n contentStore.levelCount = design.layers.length;\n contentStore.layers = new Map<\n string,\n {\n height: number;\n color: string;\n label: string;\n id: string;\n contentIds: string[];\n }\n >();\n design.layers.forEach(\n (\n layer: {\n height: number;\n label: string;\n id: string;\n contentIds: string[];\n },\n idx: number\n ) => {\n const newLayer = {\n height: layer.height,\n color: contentStore.getColorByIdx(idx),\n label: layer.label,\n id: layer.id,\n contentIds: layer.contentIds.filter((id) => {\n const elm = contentStore.getElement(id);\n return elm && elm.display;\n })\n };\n contentStore.layers.set(layer.id, newLayer);\n }\n );\n } else throw \"invalid file!\";\n };\n reader.readAsText(file);\n } catch (err) {\n console.log(err);\n }\n};\n\nconst generateDesign = (): void => {\n const contentStore = useContentStore();\n const chip = {\n title: contentStore.title,\n layers: Array.from(contentStore.layers.values()).map((layer) => ({\n height: layer.height,\n label: layer.label,\n id: layer.id,\n contentIds: layer.contentIds\n })),\n chipProperties: contentStore.chipProperties.map((p) => p.value),\n content: {\n modules: Array(),\n polygons: Array(),\n circles: Array(),\n inOutlets: Array(),\n channels: Array(),\n bridges: Array(),\n levelConnections: Array()\n }\n };\n // don't add hidden elements\n contentStore.layers.forEach((layer, layerId) => {\n layer.contentIds.forEach((id) => {\n const elm = contentStore.getElement(id);\n if (elm.display) {\n if (elm instanceof ModuleTemplate) {\n chip.content.modules.push(elm.buildOutput(layerId));\n } else if (elm instanceof Channel) {\n chip.content.channels.push(elm.buildOutput(layerId));\n } else if (elm instanceof InletOutlet) {\n chip.content.inOutlets.push(elm.buildOutput(layerId));\n } else if (elm instanceof ComponentPolygon) {\n chip.content.polygons.push(elm.buildOutput(layerId));\n } else if (elm instanceof Bridge) {\n chip.content.bridges.push(elm.buildOutput(layerId));\n } else if (elm instanceof ComponentCircle) {\n chip.content.circles.push(elm.buildOutput(layerId));\n }\n }\n });\n });\n contentStore.levelConnectionIds.forEach((id) => {\n const elm = contentStore.getElement(id);\n if (elm.display && elm instanceof LevelConnection) {\n chip.content.levelConnections.push(elm.buildOutput());\n }\n });\n\n // download design\n const textBlob = new Blob([JSON.stringify(chip)], {\n type: \"text/plain\"\n });\n const a = document.createElement(\"a\");\n a.download = `${contentStore.title}.json`;\n a.href = window.URL.createObjectURL(textBlob);\n a.click();\n};\nexport default { loadDesign, generateDesign };\n","\n\n\n\n\n","import script from \"./TheHeader.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./TheHeader.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./TheHeader.vue?vue&type=style&index=0&id=9b5b1b92&scoped=true&lang=css\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-9b5b1b92\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-d5cc5636\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"transform\"]\nconst _hoisted_2 = [\"x\", \"y\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"g\", {\n transform: _ctx.coordinateStrore.windowTranslate,\n class: \"ruler\"\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.nums, (num) => {\n return (_openBlock(), _createElementBlock(\"text\", {\n key: num,\n x: _ctx.coordinateStrore.globalToWindow(num),\n y: \n _ctx.coordinateStrore.globalToWindow(-_ctx.coordinateStrore.globalTranslateY) + 50\n ,\n fill: \"grey\",\n \"font-size\": \"small\",\n \"text-anchor\": \"middle\"\n }, _toDisplayString(num), 9, _hoisted_2))\n }), 128))\n ], 8, _hoisted_1))\n}","\nimport { computed, defineComponent } from \"vue\";\nimport { useCoordinateStore } from \"@/stores/coordinate\";\n\nexport default defineComponent({\n setup() {\n const coordinateStrore = useCoordinateStore();\n const nums = computed(() =>\n coordinateStrore.range(\n coordinateStrore.startX,\n coordinateStrore.endX,\n coordinateStrore.step\n )\n );\n\n return {\n coordinateStrore,\n nums\n };\n }\n});\n","import { render } from \"./RulerX.vue?vue&type=template&id=d5cc5636&scoped=true&ts=true\"\nimport script from \"./RulerX.vue?vue&type=script&lang=ts\"\nexport * from \"./RulerX.vue?vue&type=script&lang=ts\"\n\nimport \"./RulerX.vue?vue&type=style&index=0&id=d5cc5636&scoped=true&lang=css\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-d5cc5636\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-1beffa4e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"transform\"]\nconst _hoisted_2 = [\"x\", \"y\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"g\", {\n transform: _ctx.coordinateStrore.windowTranslate,\n class: \"ruler\"\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.nums, (num) => {\n return (_openBlock(), _createElementBlock(\"text\", {\n key: num,\n x: \n _ctx.coordinateStrore.globalToWindow(-_ctx.coordinateStrore.globalTranslateX) + 70\n ,\n y: _ctx.coordinateStrore.globalToWindow(num),\n fill: \"grey\",\n \"font-size\": \"small\",\n \"text-anchor\": \"middle\"\n }, _toDisplayString(num), 9, _hoisted_2))\n }), 128))\n ], 8, _hoisted_1))\n}","\nimport { computed, defineComponent } from \"vue\";\nimport { useCoordinateStore } from \"@/stores/coordinate\";\nimport { useContentStore } from \"@/stores/content\";\n\nexport default defineComponent({\n setup() {\n const coordinateStrore = useCoordinateStore();\n const contentStore = useContentStore();\n const nums = computed(() => {\n return coordinateStrore.range(\n coordinateStrore.startY,\n coordinateStrore.endY,\n coordinateStrore.step\n );\n });\n return {\n contentStore,\n coordinateStrore,\n nums\n };\n }\n});\n","import { render } from \"./RulerY.vue?vue&type=template&id=1beffa4e&scoped=true&ts=true\"\nimport script from \"./RulerY.vue?vue&type=script&lang=ts\"\nexport * from \"./RulerY.vue?vue&type=script&lang=ts\"\n\nimport \"./RulerY.vue?vue&type=style&index=0&id=1beffa4e&scoped=true&lang=css\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-1beffa4e\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, unref as _unref, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-76954176\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { id: \"zoom\" }\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", { class: \"fas fa-compress\" }, null, -1))\nconst _hoisted_3 = [\n _hoisted_2\n]\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", { class: \"fas fa-search-plus\" }, null, -1))\nconst _hoisted_5 = [\n _hoisted_4\n]\nconst _hoisted_6 = [\"max\", \"value\"]\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", { class: \"fas fa-search-minus\" }, null, -1))\nconst _hoisted_8 = [\n _hoisted_7\n]\n\nimport { gridSizeList } from \"@/library/hardCodedValues\";\nimport { useCoordinateStore } from \"@/stores/coordinate\";\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'ZoomPanel',\n setup(__props) {\n\nconst coordinate = useCoordinateStore();\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: \"zoom_icon\",\n title: \"Reset view\",\n onClick: _cache[0] || (_cache[0] = \n//@ts-ignore\n(...args) => (_unref(coordinate).resetView && _unref(coordinate).resetView(...args)))\n }, _hoisted_3),\n _createElementVNode(\"div\", {\n class: \"zoom_icon\",\n title: \"Zoom in\",\n onClick: _cache[1] || (_cache[1] = \n//@ts-ignore\n(...args) => (_unref(coordinate).zoomIn && _unref(coordinate).zoomIn(...args)))\n }, _hoisted_5),\n _createElementVNode(\"input\", {\n type: \"range\",\n id: \"zoom_range\",\n title: \"zoom\",\n name: \"zoom\",\n min: \"0\",\n max: _unref(gridSizeList).length - 1,\n value: _unref(coordinate).zoomIdx,\n disabled: \"true\",\n orient: \"vertical\"\n }, null, 8, _hoisted_6),\n _createElementVNode(\"div\", {\n class: \"zoom_icon\",\n title: \"Zoom out\",\n onClick: _cache[2] || (_cache[2] = \n//@ts-ignore\n(...args) => (_unref(coordinate).zoomOut && _unref(coordinate).zoomOut(...args)))\n }, _hoisted_8)\n ]))\n}\n}\n\n})","import script from \"./ZoomPanel.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./ZoomPanel.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./ZoomPanel.vue?vue&type=style&index=0&id=76954176&scoped=true&lang=css\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-76954176\"]])\n\nexport default __exports__","\n\n","\n\n\n\n>\n","","import { render } from \"./SampleChamber.vue?vue&type=template&id=0178f707\"\nconst script = {}\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n","import { render } from \"./SampleDelayChannel.vue?vue&type=template&id=297c67e1\"\nconst script = {}\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","","import { render } from \"./SampleFilter.vue?vue&type=template&id=58ad44eb\"\nconst script = {}\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","","import { render } from \"./SampleTeslaValve.vue?vue&type=template&id=c174fd4a\"\nconst script = {}\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","","import { render } from \"./SampleDroplet.vue?vue&type=template&id=772d4907\"\nconst script = {}\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n","import { render } from \"./SampleTransition.vue?vue&type=template&id=4f7a090a\"\nconst script = {}\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./ComponentBoardItem.vue?vue&type=template&id=9cebeeb4\"\nimport script from \"./ComponentBoardItem.vue?vue&type=script&lang=js\"\nexport * from \"./ComponentBoardItem.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n\n","import { render } from \"./ComponentPropertyBoard.vue?vue&type=template&id=8d925614&scoped=true\"\nimport script from \"./ComponentPropertyBoard.vue?vue&type=script&lang=js\"\nexport * from \"./ComponentPropertyBoard.vue?vue&type=script&lang=js\"\n\nimport \"./ComponentPropertyBoard.vue?vue&type=style&index=0&id=8d925614&scoped=true&lang=css\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-8d925614\"]])\n\nexport default __exports__","import { render } from \"./ComponentBoard.vue?vue&type=template&id=7d526abd\"\nimport script from \"./ComponentBoard.vue?vue&type=script&lang=js\"\nexport * from \"./ComponentBoard.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n\n","\n\n","import { render } from \"./PanelRightProperty.vue?vue&type=template&id=3684a5e2\"\nimport script from \"./PanelRightProperty.vue?vue&type=script&lang=js\"\nexport * from \"./PanelRightProperty.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, vModelCheckbox as _vModelCheckbox, withDirectives as _withDirectives, toDisplayString as _toDisplayString, vModelText as _vModelText, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-2bdce20e\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"accordion-item\" }\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"h2\", {\n class: \"accordion-header\",\n id: \"panelsStayOpen-headingTwo\"\n}, [\n /*#__PURE__*/_createElementVNode(\"button\", {\n class: \"accordion-button collapsed\",\n type: \"button\",\n \"data-bs-toggle\": \"collapse\",\n \"data-bs-target\": \"#panelsStayOpen-collapseTwo\",\n \"aria-expanded\": \"false\",\n \"aria-controls\": \"panelsStayOpen-collapseTwo\"\n }, \" DESIGN RULE CHECK \")\n], -1))\nconst _hoisted_3 = {\n id: \"panelsStayOpen-collapseTwo\",\n class: \"accordion-collapse collapse\",\n \"aria-labelledby\": \"panelsStayOpen-headingTwo\"\n}\nconst _hoisted_4 = {\n class: \"accordion-body panel-item-height\",\n style: {\"max-height\":\"500px\"}\n}\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", { class: \"fa-solid fa-magnifying-glass\" }, null, -1))\nconst _hoisted_6 = { class: \"list-group list-group-flush\" }\nconst _hoisted_7 = { class: \"form-check form-switch\" }\nconst _hoisted_8 = { class: \"d-flex justify-content-between align-items-center\" }\nconst _hoisted_9 = [\"onUpdate:modelValue\"]\nconst _hoisted_10 = { class: \"form-check-label me-2\" }\nconst _hoisted_11 = {\n key: 0,\n class: \"input-group flex-nowrap my-2 w-auto\"\n}\nconst _hoisted_12 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"input-group-text p-1\" }, \"µm\", -1))\nconst _hoisted_13 = {\n key: 1,\n class: \"input-group flex-nowrap my-2 w-auto\"\n}\nconst _hoisted_14 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"input-group-text p-1\" }, \"µm\", -1))\nconst _hoisted_15 = {\n key: 2,\n class: \"input-group flex-nowrap my-2 w-auto\"\n}\nconst _hoisted_16 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"input-group-text p-1\" }, \"µm\", -1))\nconst _hoisted_17 = {\n key: 3,\n class: \"input-group flex-nowrap my-2 w-auto\"\n}\nconst _hoisted_18 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"input-group-text p-1\" }, \"µm\", -1))\nconst _hoisted_19 = { key: 0 }\nconst _hoisted_20 = {\n key: 0,\n class: \"fa-solid fa-check text-success\"\n}\nconst _hoisted_21 = [\"data-bs-target\", \"aria-controls\"]\nconst _hoisted_22 = [\"id\"]\nconst _hoisted_23 = { class: \"card card-body py-0 border-warning\" }\nconst _hoisted_24 = { class: \"list-group list-group-flush list-group-numbered\" }\nconst _hoisted_25 = { key: 1 }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_PartListButtonVue = _resolveComponent(\"PartListButtonVue\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _hoisted_2,\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"button\", {\n class: \"btn btn-primary btn-sm mb-3 me-3\",\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.runDRC()))\n }, [\n _hoisted_5,\n _createTextVNode(\" Run DRC \")\n ]),\n _createElementVNode(\"ul\", _hoisted_6, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.designRules, (designRule, idx) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n class: \"list-group-item px-0\",\n key: idx\n }, [\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"div\", null, [\n _withDirectives(_createElementVNode(\"input\", {\n class: \"form-check-input\",\n type: \"checkbox\",\n role: \"switch\",\n \"onUpdate:modelValue\": ($event: any) => ((designRule.isChecked) = $event)\n }, null, 8, _hoisted_9), [\n [_vModelCheckbox, designRule.isChecked]\n ]),\n _createElementVNode(\"label\", _hoisted_10, _toDisplayString(designRule.description), 1)\n ]),\n (idx === 0)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n _withDirectives(_createElementVNode(\"input\", {\n class: \"form-control p-1\",\n style: {\"width\":\"100px\"},\n type: \"number\",\n min: \"10\",\n step: \"10\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((_ctx.channelWidthMin) = $event))\n }, null, 512), [\n [_vModelText, _ctx.channelWidthMin]\n ]),\n _hoisted_12\n ]))\n : (idx === 1)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n _withDirectives(_createElementVNode(\"input\", {\n class: \"form-control p-1\",\n style: {\"width\":\"100px\"},\n type: \"number\",\n min: \"10\",\n step: \"10\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((_ctx.compDistMin) = $event))\n }, null, 512), [\n [_vModelText, _ctx.compDistMin]\n ]),\n _hoisted_14\n ]))\n : (idx === 2)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_15, [\n _withDirectives(_createElementVNode(\"input\", {\n class: \"form-control p-1\",\n style: {\"width\":\"100px\"},\n type: \"number\",\n min: \"10\",\n step: \"10\",\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((_ctx.minPortRadius) = $event))\n }, null, 512), [\n [_vModelText, _ctx.minPortRadius]\n ]),\n _hoisted_16\n ]))\n : (idx === 3)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n _withDirectives(_createElementVNode(\"input\", {\n class: \"form-control p-1\",\n style: {\"width\":\"100px\"},\n type: \"number\",\n min: \"10\",\n step: \"10\",\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event: any) => ((_ctx.minViaRadius) = $event))\n }, null, 512), [\n [_vModelText, _ctx.minViaRadius]\n ]),\n _hoisted_18\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n (designRule.isChecked)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_19, [\n (designRule.result === 0)\n ? (_openBlock(), _createElementBlock(\"i\", _hoisted_20))\n : (designRule.result > 0)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 1,\n class: \"btn btn-warning\",\n style: {\"--bs-btn-padding-y\":\"0\",\"--bs-btn-padding-x\":\"0.25rem\",\"--bs-btn-font-size\":\"0.75rem\"},\n type: \"button\",\n \"data-bs-toggle\": \"collapse\",\n \"data-bs-target\": `#collapse${idx}`,\n \"aria-expanded\": \"false\",\n \"aria-controls\": `#collapse${idx}`\n }, _toDisplayString(designRule.result) + \" \" + _toDisplayString(designRule.result === 1 ? \"warning\" : \"warnings\"), 9, _hoisted_21))\n : _createCommentVNode(\"\", true),\n (designRule.result > 0)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 2,\n class: \"collapse mt-2\",\n id: `collapse${idx}`\n }, [\n _createElementVNode(\"div\", _hoisted_23, [\n _createElementVNode(\"ol\", _hoisted_24, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(designRule.failedItems, (failedElm, idx) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n class: \"list-group-item px-0 d-flex\",\n key: idx\n }, [\n (typeof failedElm === 'string')\n ? (_openBlock(), _createBlock(_component_PartListButtonVue, {\n key: 0,\n id: failedElm\n }, null, 8, [\"id\"]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_25, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(failedElm, (id, idx) => {\n return (_openBlock(), _createBlock(_component_PartListButtonVue, {\n key: idx,\n id: id\n }, null, 8, [\"id\"]))\n }), 128))\n ]))\n ]))\n }), 128))\n ])\n ])\n ], 8, _hoisted_22))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n }), 128))\n ])\n ])\n ])\n ]))\n}","import { Channel } from \"@/library/channel\";\nimport ModuleTemplate from \"@/library/modules/moduleTemplate\";\nimport { useContentStore } from \"@/stores/content\";\nimport { useCoordinateStore } from \"@/stores/coordinate\";\nimport { ref, reactive } from \"vue\";\nimport { Bridge } from \"../bridge\";\nimport { InletOutlet } from \"../inletOutlet\";\nimport { LevelConnection } from \"../levelConnection\";\n\nconst channelWidthMin = ref(100);\nconst compDistMin = ref(100);\nconst minPortRadius = ref(100);\nconst minViaRadius = ref(100);\n\ninterface DesignRule {\n isChecked: boolean;\n result: number; // result -1: unknown, 0: passed, >=1: (number of) failed\n description: string;\n failedItems: (string | string[])[];\n runCheck: () => void;\n}\n\nconst designRuleDescription = {\n channelWidthCheck: \"Minimum channel width\",\n compMinDistCheck: \"Minimum distance between components\",\n overlappingCheck: \"Overlapping check on components\",\n layerOverlappingCheck: \"Overlapping check on layers\",\n elmOutOfBoundaryCheck: \"Out of boundary check\",\n minPortRadiusCheck: \"Minimum port radius\",\n minViaRadiusCheck: \"Minimum via radius\"\n};\n\n// design rules start\nconst channelWidthCheck: DesignRule = reactive({\n description: designRuleDescription.channelWidthCheck,\n isChecked: true,\n result: -1,\n failedItems: Array(),\n runCheck: function () {\n this.failedItems = Array();\n const contentStore = useContentStore();\n contentStore.layers.forEach((layer) => {\n layer.contentIds.forEach((id) => {\n const elm = contentStore.getElement(id);\n if (elm instanceof Channel && elm.display) {\n if (elm.properties.channelWidth.value < channelWidthMin.value) {\n this.failedItems.push(elm.id);\n }\n }\n });\n });\n this.result = this.failedItems.length;\n }\n});\n\n// return true if the distance between the two elements < d(global)\nconst distCheckFailed = (id1: string, id2: string, d: number): boolean => {\n const rect1 = document.getElementById(id1)?.getBoundingClientRect();\n const rect2 = document.getElementById(id2)?.getBoundingClientRect();\n if (rect1 instanceof DOMRect && rect2 instanceof DOMRect) {\n const coordonateStore = useCoordinateStore();\n const dWindow = coordonateStore.globalToWindow(d);\n return distLessThan(rect1, rect2, dWindow);\n } else {\n return false;\n }\n};\n\n// window scale\nconst distLessThan = (r1: DOMRect, r2: DOMRect, d: number): boolean =>\n r1.x + r1.width + d > r2.x &&\n r1.x - d < r2.x + r2.width &&\n r1.y + r1.height + d > r2.y &&\n r1.y - d < r2.y + r2.height;\n\n// return true if r1 fully covers r2\nconst fullCoverage = (r1: DOMRect, r2: DOMRect): boolean =>\n r1.x < r2.x &&\n r1.x + r1.width > r2.x + r2.width &&\n r1.y < r2.y &&\n r1.y + r1.height > r2.y + r2.height;\n\nconst compMinDistCheck: DesignRule = reactive({\n description: designRuleDescription.compMinDistCheck,\n isChecked: true,\n result: -1,\n failedItems: Array(),\n runCheck: function () {\n this.failedItems = Array();\n const contentStore = useContentStore();\n contentStore.layers.forEach((layer) => {\n // get all components in the layer\n const components = Array();\n layer.contentIds.forEach((id) => {\n const elm = contentStore.getElement(id);\n if (elm instanceof ModuleTemplate && elm.display) {\n components.push(id);\n }\n });\n // run dist check\n if (components.length > 1) {\n for (let i = 0; i < components.length - 1; i++) {\n for (let j = i + 1; j < components.length; j++) {\n if (\n distCheckFailed(components[i], components[j], compDistMin.value)\n ) {\n this.failedItems.push([components[i], components[j]]);\n }\n }\n }\n }\n });\n this.result = this.failedItems.length;\n }\n});\n\nconst outOfBondCheck: DesignRule = reactive({\n description: designRuleDescription.elmOutOfBoundaryCheck,\n isChecked: true,\n result: -1,\n failedItems: Array(),\n runCheck: function () {\n this.failedItems = Array();\n const contentStore = useContentStore();\n const chipBoundary = document\n .getElementById(\"chipBoundary\")\n ?.getBoundingClientRect();\n contentStore.layers.forEach((layer) => {\n layer.contentIds.forEach((id) => {\n const elm = contentStore.getElement(id);\n if (\n elm.display &&\n !fullCoverage(\n chipBoundary,\n document.getElementById(elm.id)?.getBoundingClientRect()\n )\n ) {\n this.failedItems.push(elm.id);\n }\n });\n });\n this.result = this.failedItems.length;\n }\n});\n\n// const compOverlappingCheck: DesignRule = reactive({\n// description: designRuleDescription.overlappingCheck,\n// isChecked: true,\n// result: -1,\n// failedItems: Array(),\n// runCheck: function () {\n// this.failedItems = Array();\n// const contentStore = useContentStore();\n// contentStore.layers.forEach((layer) => {\n// // get all components in the layer\n// const components = Array();\n// layer.contentIds.forEach((id) => {\n// const elm = contentStore.getElement(id);\n// if (elm instanceof ModuleTemplate && elm.display) {\n// components.push(id);\n// }\n// });\n// // run dist check\n// if (components.length > 1) {\n// for (let i = 0; i < components.length - 1; i++) {\n// for (let j = i + 1; j < components.length; j++) {\n// if (distCheckFailed(components[i], components[j], 0)) {\n// this.failedItems.push([components[i], components[j]]);\n// }\n// }\n// }\n// }\n// });\n// this.result = this.failedItems.length;\n// }\n// });\n\nconst layerOverlappingCheck = reactive({\n description: designRuleDescription.layerOverlappingCheck,\n isChecked: true,\n result: -1,\n failedItems: Array(),\n runCheck: function () {\n this.failedItems = Array();\n const contentStore = useContentStore();\n // sort layers\n const layersArr = Array.from(contentStore.layers.values());\n // only check components, channels and bridges\n for (let i = 0; i < layersArr.length - 1; ++i) {\n const heightLimit = layersArr[i + 1].height - layersArr[i].height;\n layersArr[i].contentIds.forEach((id) => {\n const elm = contentStore.getElement(id);\n if (\n (elm instanceof ModuleTemplate ||\n elm instanceof Channel ||\n elm instanceof Bridge) &&\n elm.display &&\n elm.getHeight() >= heightLimit\n ) {\n this.failedItems.push(elm.id);\n }\n });\n }\n this.result = this.failedItems.length;\n }\n});\n\nconst minPortRadiusCheck = reactive({\n description: designRuleDescription.minPortRadiusCheck,\n isChecked: true,\n result: -1,\n failedItems: Array(),\n runCheck: function () {\n this.failedItems = Array();\n const contentStore = useContentStore();\n contentStore.layers.forEach((layer) => {\n layer.contentIds.forEach((id) => {\n const elm = contentStore.getElement(id);\n if (elm instanceof InletOutlet && elm.display) {\n if (elm.properties.r1.value < minPortRadius.value) {\n this.failedItems.push(elm.id);\n }\n }\n });\n });\n this.result = this.failedItems.length;\n }\n});\n\nconst minViaRadiusCheck = reactive({\n description: designRuleDescription.minViaRadiusCheck,\n isChecked: true,\n result: -1,\n failedItems: Array(),\n runCheck: function () {\n this.failedItems = Array();\n const contentStore = useContentStore();\n contentStore.layers.forEach((layer) => {\n layer.contentIds.forEach((id) => {\n const elm = contentStore.getElement(id);\n if (elm instanceof LevelConnection && elm.display) {\n if (elm.properties.r.value < minViaRadius.value) {\n this.failedItems.push(elm.id);\n }\n }\n });\n });\n this.result = this.failedItems.length;\n }\n});\n// end design rules\n\nconst designRules: DesignRule[] = [\n channelWidthCheck,\n compMinDistCheck,\n minPortRadiusCheck,\n minViaRadiusCheck,\n outOfBondCheck,\n // compOverlappingCheck,\n layerOverlappingCheck\n];\n\nconst runDRC = (): void => {\n designRules.forEach((dr) => {\n if (dr.isChecked) {\n dr.runCheck();\n } else {\n dr.result = -1;\n }\n });\n};\n\nexport {\n DesignRule,\n compDistMin,\n channelWidthMin,\n minPortRadius,\n minViaRadius,\n designRules,\n runDRC\n};\n","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"button\", {\n class: \"btn btn-light btn-sm me-2 mb-1\",\n onClick: _cache[0] || (_cache[0] = \n//@ts-ignore\n(...args) => (_ctx.selectElement && _ctx.selectElement(...args)))\n }, _toDisplayString(_ctx.id), 1))\n}","\nimport { LevelConnection } from \"@/library/levelConnection\";\nimport { ContentUnitGeneral, Mode } from \"@/library/other\";\nimport { useContentStore } from \"@/stores/content\";\nimport { useControlStore } from \"@/stores/control\";\nimport { defineComponent } from \"vue\";\n\nexport default defineComponent({\n props: {\n id: {\n type: String,\n required: true\n }\n },\n setup(props) {\n const contentStore = useContentStore();\n const controlStore = useControlStore();\n const selectElement = () => {\n const elm = contentStore.getElement(props.id);\n if (elm instanceof ContentUnitGeneral) {\n controlStore.switchMode(Mode.Select);\n if (!(elm instanceof LevelConnection)) {\n contentStore.changeCrtLayer(elm.layer);\n }\n controlStore.selectElement(props.id);\n }\n };\n return { contentStore, selectElement };\n }\n});\n","import { render } from \"./PartListButton.vue?vue&type=template&id=63ef6156&ts=true\"\nimport script from \"./PartListButton.vue?vue&type=script&lang=ts\"\nexport * from \"./PartListButton.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport {\n runDRC,\n designRules,\n channelWidthMin,\n compDistMin,\n minPortRadius,\n minViaRadius\n} from \"@/library/utilities/designRuleCheck\";\nimport { defineComponent } from \"vue\";\nimport PartListButtonVue from \"./PartListButton.vue\";\nexport default defineComponent({\n components: {\n PartListButtonVue\n },\n setup() {\n return {\n runDRC,\n designRules,\n channelWidthMin,\n compDistMin,\n minPortRadius,\n minViaRadius\n };\n }\n});\n","import { render } from \"./PanelRightDRC.vue?vue&type=template&id=2bdce20e&scoped=true&ts=true\"\nimport script from \"./PanelRightDRC.vue?vue&type=script&lang=ts\"\nexport * from \"./PanelRightDRC.vue?vue&type=script&lang=ts\"\n\nimport \"./PanelRightDRC.vue?vue&type=style&index=0&id=2bdce20e&scoped=true&lang=css\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2bdce20e\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeStyle as _normalizeStyle, resolveComponent as _resolveComponent, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"accordion-item\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"h2\", {\n class: \"accordion-header\",\n id: \"panelsStayOpen-partListHeading\"\n}, [\n /*#__PURE__*/_createElementVNode(\"button\", {\n class: \"accordion-button collapsed\",\n type: \"button\",\n \"data-bs-toggle\": \"collapse\",\n \"data-bs-target\": \"#panelsStayOpen-partList\",\n \"aria-expanded\": \"false\",\n \"aria-controls\": \"panelsStayOpen-partList\"\n }, \" PART LIST \")\n], -1)\nconst _hoisted_3 = {\n id: \"panelsStayOpen-partList\",\n class: \"accordion-collapse collapse\",\n \"aria-labelledby\": \"panelsStayOpen-partListHeading\"\n}\nconst _hoisted_4 = { class: \"accordion-body panel-item-height\" }\nconst _hoisted_5 = {\n class: \"p-2\",\n style: {\"border-top\":\"grey 1px solid\"}\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_PartListButtonVue = _resolveComponent(\"PartListButtonVue\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _hoisted_2,\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.contentStore.layers, (layer, idx) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: idx,\n class: \"d-flex p-2\",\n style: _normalizeStyle(`border-top:${layer[1].color} 1px solid`)\n }, [\n _createElementVNode(\"div\", {\n class: \"me-3 p-1\",\n style: _normalizeStyle(`color:${layer[1].color}`)\n }, _toDisplayString(layer[1].label), 5),\n _createElementVNode(\"div\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(layer[1].contentIds.filter(\n (eid) => _ctx.contentStore.getElement(eid).display\n ), (id, elmIdx) => {\n return (_openBlock(), _createBlock(_component_PartListButtonVue, {\n key: elmIdx,\n id: id\n }, null, 8, [\"id\"]))\n }), 128))\n ])\n ], 4))\n }), 128)),\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.contentStore.levelConnectionIds.filter(\n (eid) => _ctx.contentStore.getElement(eid).display\n ), (id, elmIdx) => {\n return (_openBlock(), _createBlock(_component_PartListButtonVue, {\n key: elmIdx,\n id: id\n }, null, 8, [\"id\"]))\n }), 128))\n ])\n ])\n ])\n ])\n ]))\n}","\nimport { useContentStore } from \"@/stores/content\";\nimport { defineComponent } from \"vue\";\nimport PartListButtonVue from \"./PartListButton.vue\";\nexport default defineComponent({\n components: {\n PartListButtonVue\n },\n setup() {\n const contentStore = useContentStore();\n return { contentStore };\n }\n});\n","import { render } from \"./PanelRightPartList.vue?vue&type=template&id=90050c84&ts=true\"\nimport script from \"./PanelRightPartList.vue?vue&type=script&lang=ts\"\nexport * from \"./PanelRightPartList.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./PanelRight.vue?vue&type=template&id=017111a3\"\nimport script from \"./PanelRight.vue?vue&type=script&lang=js\"\nexport * from \"./PanelRight.vue?vue&type=script&lang=js\"\n\nimport \"./PanelRight.vue?vue&type=style&index=0&id=017111a3&lang=css\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./StartModal.vue?vue&type=template&id=6ce38706\"\nimport script from \"./StartModal.vue?vue&type=script&lang=js\"\nexport * from \"./StartModal.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n \n \n ","import { render } from \"./ChannelSegLengthInput.vue?vue&type=template&id=67a96ad2\"\nimport script from \"./ChannelSegLengthInput.vue?vue&type=script&lang=js\"\nexport * from \"./ChannelSegLengthInput.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n","import { render } from \"./RadiusInput.vue?vue&type=template&id=6576b34e\"\nimport script from \"./RadiusInput.vue?vue&type=script&lang=js\"\nexport * from \"./RadiusInput.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n\n","\n\n\n\n","\n\n","import { render } from \"./STLPreviewWindow.vue?vue&type=template&id=6ccc19a2\"\nimport script from \"./STLPreviewWindow.vue?vue&type=script&lang=js\"\nexport * from \"./STLPreviewWindow.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./STLPreview.vue?vue&type=template&id=296ddd4c&scoped=true\"\nimport script from \"./STLPreview.vue?vue&type=script&lang=js\"\nexport * from \"./STLPreview.vue?vue&type=script&lang=js\"\n\nimport \"./STLPreview.vue?vue&type=style&index=0&id=296ddd4c&scoped=true&lang=css\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-296ddd4c\"]])\n\nexport default __exports__","import { render } from \"./OutputOptionModal.vue?vue&type=template&id=6ac1a8a4&scoped=true\"\nimport script from \"./OutputOptionModal.vue?vue&type=script&lang=js\"\nexport * from \"./OutputOptionModal.vue?vue&type=script&lang=js\"\n\nimport \"./OutputOptionModal.vue?vue&type=style&index=0&id=6ac1a8a4&scoped=true&lang=css\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6ac1a8a4\"]])\n\nexport default __exports__","\n","import { render } from \"./Help.vue?vue&type=template&id=1b3bacaf\"\nconst script = {}\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./App.vue?vue&type=template&id=c2555a16\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\n\nimport \"./App.vue?vue&type=style&index=0&id=c2555a16&lang=css\"\n\nimport exportComponent from \"/Users/yushenzhang/IdeaProjects/Flui3d/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","export default {\n welcomeWord: 'Online Design Tool for 3D-Printed Microfluidics',\n}","\nimport en from './EN.js'\nexport default { en }","import { createPinia } from 'pinia'\nimport { createApp } from 'vue'\nimport App from './App.vue'\nimport { createI18n } from 'vue-i18n'\nimport languages from './lang'\n\n\nconst app = createApp(App)\napp.use(createPinia())\n\nconst i18n = createI18n({\n locale: 'en', // set locale\n fallbackLocale: 'en',\n messages: languages\n})\n\napp.use(i18n)\napp.mount('#app')\n\n","module.exports = __webpack_public_path__ + \"img/Logo.7c747dbb.svg\";","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../node_modules/vue-loader-v16/dist/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./App.vue?vue&type=style&index=0&id=c2555a16&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./TheFooter.vue?vue&type=style&index=0&id=c42b4e5a&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./SvgLevelConnectionAll.vue?vue&type=style&index=0&id=1337e979&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./RulerX.vue?vue&type=style&index=0&id=d5cc5636&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Toolbar.vue?vue&type=style&index=0&id=ecc9203e&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./ZoomPanel.vue?vue&type=style&index=0&id=76954176&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./SvgElementHighlight.vue?vue&type=style&index=0&id=052d1358&scoped=true&lang=css\""],"sourceRoot":""}