{"version":3,"sources":["jsdelivr-header.js","/npm/react-easy-diagram@0.11.3/src/utils/result.ts","/npm/react-easy-diagram@0.11.3/src/commands/addNode.ts","/npm/react-easy-diagram@0.11.3/src/utils/point.ts","/npm/react-easy-diagram@0.11.3/src/commands/clone.ts","/npm/react-easy-diagram@0.11.3/src/commands/remove.ts","/npm/react-easy-diagram@0.11.3/src/states/callbacks.ts","/npm/react-easy-diagram@0.11.3/src/components/background/SvgBackground.tsx","/npm/react-easy-diagram@0.11.3/src/states/visualComponentState.ts","/npm/react-easy-diagram@0.11.3/src/states/visualComponentWithDefault.ts","/npm/react-easy-diagram@0.11.3/src/components/Icons.tsx","/npm/react-easy-diagram@0.11.3/src/utils/common.ts","/npm/react-easy-diagram@0.11.3/src/components/miniControl/MiniControlDefault.tsx","/npm/react-easy-diagram@0.11.3/src/states/userInteractionSettings.ts","/npm/react-easy-diagram@0.11.3/src/states/diagramSettings.ts","/npm/react-easy-diagram@0.11.3/src/states/htmlElementRefState.ts","/npm/react-easy-diagram@0.11.3/src/states/diagramState.ts","/npm/react-easy-diagram@0.11.3/src/hooks/useStyling.ts","/npm/react-easy-diagram@0.11.3/src/components/link/LinkDefault.tsx","/npm/react-easy-diagram@0.11.3/src/linkConstructors/utils.ts","/npm/react-easy-diagram@0.11.3/src/linkConstructors/curved.ts","/npm/react-easy-diagram@0.11.3/src/states/linkPointEndpointState.ts","/npm/react-easy-diagram@0.11.3/src/states/linkPortEndpointState.ts","/npm/react-easy-diagram@0.11.3/src/states/visualComponents.ts","/npm/react-easy-diagram@0.11.3/src/states/linkState.ts","/npm/react-easy-diagram@0.11.3/src/states/linkCreationState.ts","/npm/react-easy-diagram@0.11.3/src/components/link/Markers.tsx","/npm/react-easy-diagram@0.11.3/src/states/linksSettings.ts","/npm/react-easy-diagram@0.11.3/src/states/portState.ts","/npm/react-easy-diagram@0.11.3/src/utils/guid.ts","/npm/react-easy-diagram@0.11.3/src/states/linksStore.ts","/npm/react-easy-diagram@0.11.3/src/components/node/NodeLabel.tsx","/npm/react-easy-diagram@0.11.3/src/hooks/userInteractions/common.ts","/npm/react-easy-diagram@0.11.3/src/hooks/useRootStore.ts","/npm/react-easy-diagram@0.11.3/src/hooks/userInteractions/useCursor.ts","/npm/react-easy-diagram@0.11.3/src/hooks/userInteractions/useNodeUserInteraction.ts","/npm/react-easy-diagram@0.11.3/src/components/node/NodeWrapper.tsx","/npm/react-easy-diagram@0.11.3/src/hooks/useRelativePositionStyles.ts","/npm/react-easy-diagram@0.11.3/src/hooks/userInteractions/usePortUserInteraction.ts","/npm/react-easy-diagram@0.11.3/src/components/port/Port.tsx","/npm/react-easy-diagram@0.11.3/src/components/node/NodeDefault.tsx","/npm/react-easy-diagram@0.11.3/src/states/nodesSettings.ts","/npm/react-easy-diagram@0.11.3/src/utils/transformation.ts","/npm/react-easy-diagram@0.11.3/src/states/nodeState.ts","/npm/react-easy-diagram@0.11.3/src/states/nodesStore.ts","/npm/react-easy-diagram@0.11.3/src/components/port/PortInnerDefault.tsx","/npm/react-easy-diagram@0.11.3/src/states/portsSettings.ts","/npm/react-easy-diagram@0.11.3/src/states/selectionState.ts","/npm/react-easy-diagram@0.11.3/src/states/dragState.ts","/npm/react-easy-diagram@0.11.3/src/states/commandExecutor.ts","/npm/react-easy-diagram@0.11.3/src/states/rootStore.ts","/npm/react-easy-diagram@0.11.3/src/components/DiagramContext.tsx","/npm/react-easy-diagram@0.11.3/src/hooks/useNotifyRef.ts","/npm/react-easy-diagram@0.11.3/src/hooks/userInteractions/useLinkUserInteraction.ts","/npm/react-easy-diagram@0.11.3/src/components/link/LinkWrapper.tsx","/npm/react-easy-diagram@0.11.3/src/components/link/LinksLayer.tsx","/npm/react-easy-diagram@0.11.3/src/components/node/NodesLayer.tsx","/npm/react-easy-diagram@0.11.3/src/hooks/userInteractions/useDiagramDragHandlers.ts","/npm/react-easy-diagram@0.11.3/src/hooks/userInteractions/useDiagramPinchHandlers.ts","/npm/react-easy-diagram@0.11.3/src/hooks/userInteractions/useDiagramWheelHandler.ts","/npm/react-easy-diagram@0.11.3/src/hooks/userInteractions/useDiagramUserInteraction.ts","/npm/react-easy-diagram@0.11.3/src/components/background/BackgroundWrapper.tsx","/npm/react-easy-diagram@0.11.3/src/components/miniControl/MiniControlWrapper.tsx","/npm/node_modules/style-inject/dist/style-inject.es.js","/npm/react-easy-diagram@0.11.3/src/components/DiagramInner.tsx","/npm/react-easy-diagram@0.11.3/src/components/Diagram.tsx","/npm/react-easy-diagram@0.11.3/src/components/dragAndDrop/DragAndDropItem.tsx","/npm/react-easy-diagram@0.11.3/src/components/dragAndDrop/DragAndDropContainer.tsx","/npm/react-easy-diagram@0.11.3/src/utils/position.ts","/npm/react-easy-diagram@0.11.3/src/components/port/PortsContainer.tsx","/npm/react-easy-diagram@0.11.3/src/hooks/useDiagram.tsx","/npm/react-easy-diagram@0.11.3/src/linkConstructors/straight.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,6UCMM,SAAU,UACd,GAEA,OAAO,EAAO,OAChB,CAEM,SAAU,QACd,GAEA,OAAQ,EAAO,OACjB,C,SAEgB,gBACd,MAAO,CAAE,SAAS,EACpB,CAEM,SAAU,mBACd,GAEA,MAAO,CAAE,SAAS,EAAM,MAAK,EAC/B,CAEM,SAAU,YAAY,GAC1B,MAAO,CAAE,SAAS,EAAO,MAAK,EAChC,CAEgB,SAAA,iBACd,EACA,GAEA,MAAO,CAAE,SAAS,EAAO,MAAK,EAAE,MAAK,EACvC,C,ICvCa,eAAiB,SAAC,GAAqB,OAClD,QAAA,SAAQ,GACN,IAAM,EAAS,EAAU,WAAW,QAAQ,GAAM,GAC9C,UAAU,IACZ,EAAU,eAAe,OAAO,EAAO,OAAO,E,EAGlD,ECTI,SAAU,QAAQ,GACtB,OACE,MAAM,QAAQ,IACG,IAAjB,EAAM,QACN,EAAM,OAAM,SAAC,GAAM,OAAA,OAAO,SAAS,EAAE,GAEzC,CAEa,IAAA,sBAAwB,SAAC,EAAU,GAC9C,OAAA,KAAK,KAAK,KAAK,IAAI,EAAE,GAAK,EAAE,GAAI,GAAK,KAAK,IAAI,EAAE,GAAK,EAAE,GAAI,GAA3D,EAEW,WAAa,SAAC,GACzB,OAAC,KAAK,MAAM,EAAM,IAAK,KAAK,MAAM,EAAM,IAAxC,EAEW,UAAY,W,UAAwC,EAAA,GAAA,EAAA,EAAvC,EAAuC,UAAA,OAAvC,IAAA,EAAuC,GAAA,UAAA,GAC/D,OAQM,QARN,EAAA,EAAO,QAAO,SAAC,EAAM,GACnB,OAAI,EACK,EACJ,EAAO,EAAK,GAAK,GAAK,EAAK,IAC3B,EAAO,EAAK,GAAK,GAAK,EAAK,IAEvB,CAEX,WAAM,IAAA,IAAA,CAAC,EAAG,E,EAEC,eAAiB,W,IAAC,IAAkB,EAAA,GAAA,EAAA,EAAlB,EAAkB,UAAA,OAAlB,IAAA,EAAkB,GAAA,UAAA,GAC/C,OAAA,EAAO,QAAO,SAAC,EAAM,GACnB,OAAA,EAAO,CAAC,EAAK,GAAK,EAAK,GAAI,EAAK,GAAK,EAAK,IAAM,CAAhD,GADF,EAIW,cAAgB,SAAC,EAAU,GAAqB,OAC3D,EAAE,GAAK,EACP,EAAE,GAAK,EACR,EAEY,eAAiB,SAAC,EAAW,GACxC,OAAA,IAAM,GAAM,QAAQ,IAAM,QAAQ,IAAM,EAAE,KAAO,EAAE,IAAM,EAAE,KAAO,EAAE,EAApE,EClCW,0BAA4B,CACvC,QAAA,SAAQ,GACN,IAAM,EAAa,EAAU,eAAe,cAAc,KAAI,SAAC,GAC7D,IAAM,EAAY,EAAK,SAKvB,OAJA,EAAU,QAAK,EACf,EAAU,MAAQ,EAAU,MAC5B,EAAU,SAAW,UAAU,EAAU,SAAU,CAAC,GAAI,KAEjD,CACT,IAEA,EAAU,WAAW,SAAS,GAAY,E,GCbjC,sBAAwB,CACnC,QAAA,SAAQ,GACN,2BAA2B,QAAQ,GACnC,2BAA2B,QAAQ,E,GAI1B,2BAA6B,CACxC,QAAA,SAAQ,GACN,EAAU,WAAW,YACnB,EAAU,eAAe,cAAc,KAAI,SAAC,GAAM,OAAA,EAAE,EAAF,I,GAK3C,2BAA6B,CACxC,QAAA,SAAQ,GACN,EAAU,WAAW,YACnB,EAAU,eAAe,cAAc,KAAI,SAAC,GAAM,OAAA,EAAE,EAAF,I,GCbxD,UAqBE,SAAY,GAAZ,IAGC,EAAA,KAvBD,OAAA,eAAA,KAAA,qB,yDACA,OAAA,eAAA,KAAA,wB,yDACA,OAAA,eAAA,KAAA,0B,yDACA,OAAA,eAAA,KAAA,uB,yDACA,OAAA,eAAA,KAAA,sB,yDACA,OAAA,eAAA,KAAA,sB,yDACA,OAAA,eAAA,KAAA,oC,yDACA,OAAA,eAAA,KAAA,+B,yDACA,OAAA,eAAA,KAAA,kB,yDACA,OAAA,eAAA,KAAA,W,yDACA,OAAA,eAAA,KAAA,gB,yDACA,OAAA,eAAA,KAAA,4B,yDACA,OAAA,eAAA,KAAA,qB,yDACA,OAAA,eAAA,KAAA,qB,yDACA,OAAA,eAAA,KAAA,wB,yDACA,OAAA,eAAA,KAAA,qB,yDACA,OAAA,eAAA,KAAA,mB,yDAEA,OAAA,eAAA,KAAA,c,yDAOA,OAAA,eAAA,KAAA,U,0CAAS,MAAA,SAAC,GACR,EAAK,kBAAoB,aAAA,EAAA,EAAW,iBACpC,EAAK,kBAAoB,aAAA,EAAA,EAAW,iBACpC,EAAK,qBAAuB,aAAA,EAAA,EAAW,oBACvC,EAAK,uBAAyB,aAAA,EAAA,EAAW,sBACzC,EAAK,oBAAsB,aAAA,EAAA,EAAW,mBACtC,EAAK,mBAAqB,aAAA,EAAA,EAAW,kBACrC,EAAK,mBAAqB,aAAA,EAAA,EAAW,kBACrC,EAAK,iCACH,aAAA,EAAA,EAAW,gCACb,EAAK,4BAA8B,aAAA,EAAA,EAAW,2BAC9C,EAAK,eAAiB,aAAA,EAAA,EAAW,cACjC,EAAK,QAAU,aAAA,EAAA,EAAW,OAC1B,EAAK,aAAe,aAAA,EAAA,EAAW,YAC/B,EAAK,yBAA2B,aAAA,EAAA,EAAW,wBAC3C,EAAK,kBAAoB,aAAA,EAAA,EAAW,iBACpC,EAAK,qBAAuB,aAAA,EAAA,EAAW,oBACvC,EAAK,kBAAoB,aAAA,EAAA,EAAW,iBACpC,EAAK,gBAAkB,aAAA,EAAA,EAAW,c,IAGpC,OAAA,eAAA,KAAA,U,0CAAS,MAAA,WAAkB,OACzB,iBAAkB,EAAK,kBACvB,oBAAqB,EAAK,qBAC1B,sBAAuB,EAAK,uBAC5B,mBAAoB,EAAK,oBACzB,kBAAmB,EAAK,mBACxB,kBAAmB,EAAK,mBACxB,gCAAiC,EAAK,iCACtC,2BAA4B,EAAK,4BACjC,cAAe,EAAK,eACpB,OAAQ,EAAK,QACb,YAAa,EAAK,aAClB,wBAAyB,EAAK,yBAC9B,iBAAkB,EAAK,kBACvB,iBAAkB,EAAK,kBACvB,oBAAqB,EAAK,qBAC1B,iBAAkB,EAAK,kBACvB,eAAgB,EAAK,gBACtB,IAED,OAAA,eAAA,KAAA,kB,0CAAiB,MAAA,SAAC,GAChB,OAAI,EAAK,mBACA,EAAK,kBAAkB,EAAM,EAAK,W,IAI7C,OAAA,eAAA,KAAA,c,0CAAa,MAAA,SAAC,GAEV,EAAK,oBACJ,EAAK,WAAW,OAAS,GAAK,EAAK,iBAAiB,OAAS,IAE9D,EAAK,kBAAkB,EAAM,EAAK,W,IAItC,OAAA,eAAA,KAAA,gB,0CAAe,MAAA,SAAC,GAEZ,EAAK,uBACJ,EAAK,aAAa,OAAS,GAAK,EAAK,sBAAsB,OAAS,IAErE,EAAK,qBAAqB,EAAM,EAAK,W,IAIzC,OAAA,eAAA,KAAA,uB,gDAAsB,SAAC,EAAiB,GAClC,EAAK,wBACP,EAAK,uBACH,CACE,SAAU,EAAO,SACjB,SAAU,EAAO,SACjB,KAAM,GAER,EAAK,W,IAKX,OAAA,eAAA,KAAA,mB,gDAAkB,SAChB,EACA,GAEI,EAAK,oBACP,EAAK,mBACH,CACE,SAAU,EAAO,SACjB,SAAU,EAAO,SACjB,KAAM,GAER,EAAK,W,IAKX,OAAA,eAAA,KAAA,oB,gDAAmB,SACjB,EACA,GAEI,EAAK,qBACP,EAAK,oBACH,CACE,SAAU,EAAO,SACjB,SAAU,EAAO,SACjB,KAAM,GAER,EAAK,W,IAKX,OAAA,eAAA,KAAA,mB,gDAAkB,SAAC,EAAiB,GAC9B,EAAK,oBACP,EAAK,mBACH,CACE,SAAU,EAAO,SACjB,SAAU,EAAO,SACjB,KAAM,GAER,EAAK,W,IAKX,OAAA,eAAA,KAAA,iC,gDAAgC,SAC9B,EACA,GAEI,EAAK,kCACP,EAAK,iCACH,CACE,SAAU,EAAO,SACjB,SAAU,EAAO,SACjB,KAAM,GAER,EAAK,W,IAKX,OAAA,eAAA,KAAA,4B,gDAA2B,SACzB,EACA,GAEI,EAAK,6BACP,EAAK,4BACH,CACE,SAAU,EAAO,SACjB,SAAU,EAAO,SACjB,KAAM,GAER,EAAK,W,IAKX,OAAA,eAAA,KAAA,e,0CAAc,MAAA,SAAC,GACT,EAAK,gBACP,EAAK,eAAe,EAAM,EAAK,W,IAInC,OAAA,eAAA,KAAA,Q,0CAAO,MAAA,SAAC,GACF,EAAK,SACP,EAAK,QAAQ,EAAM,EAAK,W,IAI5B,OAAA,eAAA,KAAA,a,0CAAY,MAAA,SAAC,GACP,EAAK,cACP,EAAK,aAAa,EAAM,EAAK,W,IAIjC,OAAA,eAAA,KAAA,yB,0CAAwB,MAAA,WAClB,EAAK,WAAW,gBAAgB,kBAAkB,mBACpD,EAAK,WAAW,aAAa,YAG3B,EAAK,0BACP,EAAK,yBAAyB,EAAK,W,IAIvC,OAAA,eAAA,KAAA,c,0CAAa,MAAA,SAAC,GAEV,EAAK,oBACJ,EAAK,WAAW,OAAS,GAAK,EAAK,iBAAiB,OAAS,IAE9D,EAAK,kBAAkB,EAAM,EAAK,W,IAItC,OAAA,eAAA,KAAA,gB,0CAAe,MAAA,SAAC,GAEZ,EAAK,uBACJ,EAAK,aAAa,OAAS,GAAK,EAAK,sBAAsB,OAAS,IAErE,EAAK,qBAAqB,EAAM,EAAK,W,IAIzC,OAAA,eAAA,KAAA,kB,0CAAiB,MAAA,SAAC,GACZ,EAAK,mBACP,EAAK,kBAAkB,EAAM,EAAK,W,IAItC,OAAA,eAAA,KAAA,gB,0CAAe,MAAA,SAAC,GACV,EAAK,iBACP,EAAK,gBAAgB,EAAM,EAAK,W,IArNlC,KAAK,WAAa,EAClB,KAAK,Q,2aCzBT,IAAM,cAEF,wBAAS,SAAC,GAAE,IAAA,EAAa,EAAA,cAAE,EAAW,EAAA,YAAE,EAAQ,EAAA,SAC5C,EAAgB,UAAY,kBAE5B,EAAkB,eACtB,WACE,OAAA,EAAc,eACV,EAAc,eAAe,IAAM,EAAa,IAAM,QACtD,C,GACN,CAAC,EAAe,EAAc,eAAgB,IAGhD,OACE,uBACE,cAAA,OAAA,UAAU,gCACV,MAAO,CACL,gBAAiB,EAAc,MAC/B,gBAAe,EACf,mBAAuB,EAAc,GAAE,MAAM,EAAc,GAAM,OAIzE,IAEM,mBAAqB,SACzB,EACA,EACA,EACA,EACA,GAGA,MAAO,6EACL,EAAQ,EAER,aAAA,EAAS,EACwD,oEALnE,EAAa,EAAW,QAAQ,IAAK,QAK2D,mBAAA,EAAY,o/CAC9G,EAEa,yBAA2B,SACtC,EACA,EACA,GACgC,gBAAC,EAAe,GAChD,OAAA,mBACE,EACA,EACA,EACA,EACA,EALF,CAMC,EAEG,mBAAqB,SACzB,EACA,EACA,EACA,EACA,EACA,GAIA,MAAO,0CACL,GAHF,GAAoB,IAGO,aAEzB,EAAS,EAC8D,0EALzE,EAAY,EAAU,QAAQ,IAAK,QAK+C,mBAAmB,EAAW,sDAAsD,EAA+C,qCAAA,EAAU,4BACjO,EAEa,yBAA2B,SACtC,EACA,EACA,EACA,GACgC,gBAAC,EAAe,GAChD,OAAA,mBACE,EACA,EACA,EACA,EACA,EACA,EANF,CAOC,EAEG,sBAAwB,SAC5B,EACA,EACA,EACA,EACA,GAGA,MAAO,0CACL,EAAQ,EAER,aAAA,EAAS,EACqG,iHALhH,EAAQ,EAAM,QAAQ,IAAK,QAK6G,mBAAA,EAAO,uLACjJ,EAEa,4BAA8B,SACzC,EACA,EACA,GACgC,gBAAC,EAAe,GAChD,OAAA,sBAAsB,EAAO,EAAQ,EAAmB,EAAO,EAA/D,CAAuE,EAEnE,kBAA0C,CAC9C,eAAgB,4BAA4B,GAAK,UAAW,IAC5D,MAAO,WAGI,oBAAsB,SACjC,GAKA,IAAM,EACD,kBAAA,GAAA,mBACC,GAAsB,IAG5B,MAAO,CACL,UAAW,cACX,SAAU,EAEd,EC7HA,qBAAA,WAIE,SAAA,EACE,GADF,IAaC,EAAA,KAhBD,OAAA,eAAA,KAAA,c,yDACA,OAAA,eAAA,KAAA,a,gDAAsC,OAiBtC,OAAA,eAAA,KAAA,U,0CAAS,MAAA,SACP,G,MAII,cAAe,GACjB,EAAK,WAAa,EAAa,UAC/B,EAAK,UAAiC,QAArB,EAAA,EAAa,gBAAQ,IAAA,IAAI,OAE1C,EAAK,WAAa,EAClB,EAAK,UAAY,K,IApBnB,KAAK,OAAO,GACZ,oBAA6F,KAAM,CACjG,WAAY,gBAAW,IACvB,UAAW,gBAAW,IACtB,UAAW,cACX,SAAU,cACV,OAAQ,a,CAwBd,OANE,OAAA,eAAI,EAAS,UAAA,aAAb,IAAA,WACE,OAAO,KAAK,U,kCAEd,OAAA,eAAI,EAAQ,UAAA,YAAZ,IAAA,WACE,OAAO,KAAK,S,kCAEf,CAAD,CAvCA,GCAA,2BAAA,WAIE,SAAA,EAAY,GAAZ,IAMC,EAAA,KATD,OAAA,eAAA,KAAA,mB,yDACA,OAAA,eAAA,KAAA,qB,yDAkBA,OAAA,eAAA,KAAA,U,0CAAS,MAAA,SACP,GAIA,EAAK,gBAAkB,EACnB,IAAI,qBAA2C,GAC/C,EAAK,iB,IAtBT,KAAK,gBAAkB,IAAI,qBACzB,GAEF,KAAK,kBAAoB,KAAK,gBAC9B,wBAAmB,K,CAoBvB,OAjBE,OAAA,eAAI,EAAS,UAAA,aAAb,IAAA,WACE,OAAO,KAAK,gBAAgB,S,kCAG9B,OAAA,eAAI,EAAQ,UAAA,YAAZ,IAAA,WACE,OAAO,KAAK,gBAAgB,Q,kCAY/B,CAAD,CA7BA,GCHa,eAA2B,WAAM,OAC5C,uBAAA,cAAA,OAAK,QAAQ,aACX,uBAAM,cAAA,QAAA,EAAE,gNAEX,EAEY,SAAqB,WAAM,OACtC,uBAAA,cAAA,OAAK,QAAQ,aACX,uBAAM,cAAA,QAAA,EAAE,yIAEX,EAEY,sBAAkC,WAAM,OACnD,uBAAA,cAAA,OAAK,QAAQ,aACX,uBAAM,cAAA,QAAA,EAAE,wMAEX,EAEY,SAAqB,WAAM,OACtC,uBAAA,cAAA,OAAK,QAAQ,aACX,uBAAM,cAAA,QAAA,EAAE,sOAEX,EAEY,WAAuB,WAAM,OACxC,uBAAA,cAAA,OAAK,QAAQ,aACX,uBAAM,cAAA,QAAA,EAAE,4OAEX,EClBK,SAAU,SAAS,GACvB,OAAO,OAAO,SAAS,EACzB,CAEM,SAAU,SAAS,GACvB,OAAgB,MAAT,GAAiC,iBAAT,IAAsB,MAAM,QAAQ,EACrE,CAEM,SAAU,UAAU,GACxB,OAAgB,MAAT,GAAiC,kBAAT,CACjC,CAEgB,SAAA,WAAW,EAAe,GACxC,OAAO,KAAK,IAAI,KAAK,IAAI,EAAO,EAAS,IAAK,EAAS,GACzD,CAEM,SAAU,SAAiB,GAC/B,OAAO,KAAK,MAAM,KAAK,UAAU,GACnC,C,SAEgB,gB,IACd,IAAmC,EAAA,GAAA,EAAA,EAAnC,EAAmC,UAAA,OAAnC,IAAA,EAAmC,GAAA,UAAA,GAEnC,IAAM,EAAqB,GAE3B,OADA,EAAO,SAAQ,SAAC,GAAC,OAAK,aAAC,EAAD,EAAG,SAAQ,SAAC,GAAM,OAAA,GAAK,EAAS,KAAK,EAAE,OACtD,CACT,CCxBA,IAAM,mBAEF,wBACF,SAAC,GACC,IAAA,EAAA,EAAA,UACE,EAAe,EAAA,gBACf,EAAY,EAAA,aACZ,EAAe,EAAA,gBACf,EAAc,EAAA,eAEhB,EAAQ,EAAA,SAEF,EAAgB,UAAY,kBAE5B,EAAY,eAChB,WACE,OAAA,cACE,CAAC,0CACD,aAAA,EAAA,EAAe,SACf,KAAK,IAHP,GAIF,CAAC,IAGG,EAAQ,eACZ,WAAM,OAAA,kBAAA,GACD,gBAAgB,IAChB,aAAA,EAAA,EAAe,MAClB,GACF,CAAC,IAGH,OAAI,OAAO,OAAO,EAAc,SAAS,OAAM,SAAC,GAAM,OAAM,IAAN,CAAW,IACxD,KAGP,4CAAK,UAAW,EAAW,MAAO,GAC/B,EAAc,QAAQ,iBACrB,EAAe,cAAc,OAAS,GACpC,uBAAC,cAAA,OACC,CAAA,KAAM,EAAc,YACpB,QAAS,WAAM,OAAA,EAAgB,QAAQ,sBAAsB,GAE7D,uBAAC,cAAA,eAAiB,OAGvB,EAAc,QAAQ,oBACrB,EAAe,cAAc,OAAS,GACpC,uBAAC,cAAA,OACC,CAAA,KAAM,EAAc,YACpB,QAAS,WAAM,OAAA,EAAgB,QAAQ,0BAA0B,GAEjE,uBAAC,cAAA,SAAW,OAGjB,EAAc,QAAQ,QACrB,uBAAC,cAAA,OACC,CAAA,KAAM,EAAc,YACpB,QAAS,EAAa,OACtB,SAAS,MAGZ,EAAc,QAAQ,SACrB,uBAAC,cAAA,OACC,CAAA,KAAM,EAAc,YACpB,QAAS,EAAa,QACtB,SAAS,MAGZ,EAAc,QAAQ,WACrB,qCAAC,OAAM,CACL,KAAM,EAAc,YACpB,QAAS,EAAa,WAEtB,uBAAC,cAAA,sBAAwB,OAG5B,EAAc,QAAQ,+BACrB,uBAAC,cAAA,OACC,CAAA,KAAM,EAAc,YACpB,QAAS,WAEL,EAAgB,gBAAgB,+BAEhC,EAAgB,gBAAgB,8BAC9B,GAGF,EAAgB,gBAAgB,+BAC9B,E,GAIL,EAAgB,gBAAgB,+BAC/B,uBAAA,cAAC,SAAQ,MAET,uBAAC,cAAA,WAAa,OAM1B,IAGF,SAAS,gBAAgB,GACvB,MAAO,CACL,IACuB,YAArB,EAAS,UAA+C,aAArB,EAAS,SACxC,EAAS,kBACT,EACN,MACuB,gBAArB,EAAS,UAAmD,aAArB,EAAS,SAC5C,EAAS,kBACT,EACN,OACuB,eAArB,EAAS,UAAkD,gBAArB,EAAS,SAC3C,EAAS,kBACT,EACN,KACuB,YAArB,EAAS,UAA+C,eAArB,EAAS,SACxC,EAAS,kBACT,EAEV,C,IAEa,OAIR,SAAC,GAAU,OACd,uBAAA,cAAA,UACE,QAAS,EAAM,QACf,UAAU,qCACV,MAAO,CACL,MAAO,EAAM,KAAO,KACpB,OAAQ,EAAM,KAAO,KACrB,QAAS,IAGV,EAAM,SAEV,EAEY,yBAA2B,SACtC,GAKA,IAAM,EACD,kBAAA,GAAA,mBACC,GAAsB,IAG5B,MAAO,CACL,UAAW,mBACX,SAAU,EAEd,EAEM,kBAA+C,CACnD,SAAU,cACV,YAAa,GACb,QAAS,CACP,QAAQ,EACR,SAAS,EACT,iBAAiB,EACjB,oBAAoB,EACpB,WAAW,EACX,+BAA+B,GAEjC,aAAc,ICzLhB,wBAAA,WAUE,SAAA,IAAA,IAGC,EAAA,KAZD,OAAA,eAAA,KAAA,gB,yDACA,OAAA,eAAA,KAAA,e,yDACA,OAAA,eAAA,KAAA,a,yDACA,OAAA,eAAA,KAAA,mB,yDACA,OAAA,eAAA,KAAA,kB,yDACA,OAAA,eAAA,KAAA,kB,yDACA,OAAA,eAAA,KAAA,sB,yDACA,OAAA,eAAA,KAAA,yC,yDAOA,OAAA,eAAA,KAAA,U,0CAAS,MAAA,SAAC,G,kBACR,EAAK,aAAmC,QAApB,EAAA,aAAA,EAAA,EAAK,mBAAe,IAAA,KACxC,EAAK,YAAiC,QAAnB,EAAA,aAAA,EAAA,EAAK,kBAAc,IAAA,KACtC,EAAK,UAA6B,QAAjB,EAAA,aAAA,EAAA,EAAK,gBAAY,IAAA,KAClC,EAAK,gBAAyC,QAAvB,EAAA,aAAA,EAAA,EAAK,sBAAkB,IAAA,KAC9C,EAAK,eAAuC,QAAtB,EAAA,aAAA,EAAA,EAAK,qBAAiB,IAAA,KAC5C,EAAK,eAAuC,QAAtB,EAAA,aAAA,EAAA,EAAK,qBAAiB,IAAA,KAC5C,EAAK,mBAA+C,QAA1B,EAAA,aAAA,EAAA,EAAK,yBAAqB,IAAA,IAAA,QACpD,EAAK,uCACH,aAAG,EAAH,EAAK,qCAAsC,EAAI,C,IA2DnD,OAAA,eAAA,KAAA,iC,0CAAgC,MAAA,SAAC,QAAA,IAAA,OAAsB,GACrD,EAAK,sCAAwC,EACzC,EACA,EAAK,sCAAwC,C,IAGnD,OAAA,eAAA,KAAA,gC,0CAA+B,MAAA,SAAC,QAAA,IAAA,OAAsB,GACpD,EAAK,sCAAwC,EACzC,EACA,EAAK,sCAAwC,C,IAOnD,OAAA,eAAA,KAAA,qC,0CAAoC,MAAA,SAClC,EACA,EACA,EACA,GAEA,OAAQ,EAAK,mBACX,IAAK,MACH,OAAO,EACT,IAAK,OACH,OAAO,EACT,IAAK,OACH,OAAO,EACT,IAAK,QACH,OAAO,EACT,QACE,OAAO,E,IAxGX,KAAK,SACL,wBAAmB,K,CA0GvB,OA3FE,OAAA,eAAI,EAAW,UAAA,eAAf,IAAA,WACE,OAAO,KAAK,Y,EAGd,IAAA,SAAgB,GACd,KAAK,aAAe,C,kCAGtB,OAAA,eAAI,EAAU,UAAA,cAAd,IAAA,WACE,OAAO,KAAK,W,EAGd,IAAA,SAAe,GACb,KAAK,YAAc,C,kCAGrB,OAAA,eAAI,EAAQ,UAAA,YAAZ,IAAA,WACE,OAAO,KAAK,S,EAGd,IAAA,SAAa,GACX,KAAK,UAAY,C,kCAGnB,OAAA,eAAI,EAAc,UAAA,kBAAlB,IAAA,WACE,OAAO,KAAK,e,EAGd,IAAA,SAAmB,GACjB,KAAK,gBAAkB,C,kCAGzB,OAAA,eAAI,EAAa,UAAA,iBAAjB,IAAA,WACE,OAAO,KAAK,c,EAGd,IAAA,SAAkB,GAChB,KAAK,eAAiB,C,kCAGxB,OAAA,eAAI,EAAa,UAAA,iBAAjB,IAAA,WACE,OAAO,KAAK,c,EAGd,IAAA,SAAkB,GAChB,KAAK,eAAiB,C,kCAGxB,OAAA,eAAI,EAAiB,UAAA,qBAArB,IAAA,WACE,OAAO,KAAK,kB,EAGd,IAAA,SAAsB,GACpB,KAAK,mBAAqB,C,kCAe5B,OAAA,eAAI,EAA8B,UAAA,kCAAlC,IAAA,WACE,OAAO,KAAK,sCAAwC,C,kCAsBvD,CAAD,CAtHA,GCaA,gBAAA,WAOE,SAAA,IAAA,IAsBC,EAAA,KA5BD,OAAA,eAAA,KAAA,6B,yDACA,OAAA,eAAA,KAAA,8B,yDACA,OAAA,eAAA,KAAA,iB,yDACA,OAAA,eAAA,KAAA,sB,yDACA,OAAA,eAAA,KAAA,oB,yDA0BA,OAAA,eAAA,KAAA,U,0CAAS,MAAA,SAAC,GACR,EAAK,0BAA0B,OAAO,aAAA,EAAA,EAAK,qBAC3C,EAAK,2BAA2B,OAAO,aAAA,EAAA,EAAK,sBAC5C,EAAK,gBAAgB,aAAG,EAAH,EAAK,cAC1B,EAAK,mBACA,kBAAA,GAAA,0BACA,aAAA,EAAA,EAAK,mBAEV,EAAK,iBAAiB,OAAO,aAAA,EAAA,EAAK,gB,IAmBpC,OAAA,eAAA,KAAA,mB,0CAAkB,MAAA,SAAC,GACjB,EAAK,cAAgB,UAAS,mB,IAnD9B,KAAK,0BACH,IAAI,2BACF,uBAEJ,KAAK,2BACH,IAAI,2BACF,4BAEJ,KAAK,iBAAmB,IAAI,wBAE5B,KAAK,OAAO,CACV,aAAc,oBACd,kBAAmB,2BAGrB,wBAAmB,KAAM,CAEvB,gBAAiB,YAEjB,cAAe,gBAAW,K,CAsChC,OAvBE,OAAA,eAAI,EAAwB,UAAA,4BAA5B,IAAA,WACE,OAAO,KAAK,yB,kCAGd,OAAA,eAAI,EAAyB,UAAA,6BAA7B,IAAA,WACE,OAAO,KAAK,0B,kCAGd,OAAA,eAAI,EAAY,UAAA,gBAAhB,IAAA,WACE,OAAO,KAAK,a,kCAGd,OAAA,eAAI,EAAiB,UAAA,qBAArB,IAAA,WACE,OAAO,KAAK,kB,kCAOd,OAAA,eAAI,EAAe,UAAA,mBAAnB,IAAA,WACE,OAAO,KAAK,gB,kCAEf,CAAD,CAjEA,GAmEM,oBAA6B,CAAC,GAAK,GACnC,yBAA+C,CACnD,QAAS,CAAC,GAAI,IACd,aAAc,CAAC,GAAK,KACpB,mBAAmB,GClFrB,oBAAA,WAME,SAAY,EAAA,EAAkC,GAA9C,IAQC,EAAA,KAbD,OAAA,eAAA,KAAA,iB,yDAEA,OAAA,eAAA,KAAA,oB,yDACA,OAAA,eAAA,KAAA,qC,gDAAoD,IAkEpD,OAAA,eAAA,KAAA,oB,0CAAmB,MAAA,SAAC,GAClB,OAAI,EAAK,QACA,EAAK,QAAQ,aAAa,GAG5B,I,IAGT,OAAA,eAAA,KAAA,8B,0CAA6B,MAAA,WAC3B,EAAK,mCAAqC,C,IAxE1C,KAAK,iBAAmB,EACxB,wBAAmB,KAAM,CACvB,kBAAmB,cAAS,CAAE,WAAW,IACzC,sBAAuB,cAAS,CAAE,WAAW,IAC7C,aAAc,cAAS,CAAE,WAAW,MAEtC,KAAK,cAAgB,C,CAoEzB,OAjEE,OAAA,eAAI,EAAO,UAAA,WAAX,IAAA,WACE,OAAO,KAAK,gB,EAGd,IAAA,SAAY,GACV,KAAK,iBAAmB,C,kCAM1B,OAAA,eAAI,EAAiB,UAAA,qBAArB,IAAA,WACE,OAAI,KAAK,cAAgB,KAAK,aAAa,YAClC,cACL,KAAK,aAAa,KAClB,EAAI,KAAK,aAAa,aAGnB,I,kCAMT,OAAA,eAAI,EAAqB,UAAA,yBAAzB,IAAA,WACE,OAAI,KAAK,cAAgB,KAAK,aAAa,YAClC,cACL,KAAK,aAAa,SAClB,EAAI,KAAK,aAAa,aAGnB,I,kCAGT,OAAA,eAAI,EAAY,UAAA,gBAAhB,IAAA,WAEE,OADA,KAAK,kCACE,KAAK,qB,qIAGd,MAAA,WACE,GAAI,KAAK,QAAS,CAChB,IAAM,EAAO,KAAK,QAAQ,wBACpB,EAAO,KAAK,cAAc,kBAEhC,MAAO,CACL,SAAU,CAAC,EAAK,EAAG,EAAK,GACxB,KAAM,CAAC,EAAK,MAAO,EAAK,QACxB,YAAa,EAEhB,CAED,OAAO,I,IAcV,CAAD,CAjFA,GCMA,aAAA,WAUE,SAAA,EAAY,GAAZ,IAQC,EAAA,KAfD,OAAA,eAAA,KAAA,W,yDACA,OAAA,eAAA,KAAA,S,yDACA,OAAA,eAAA,KAAA,Q,yDACA,OAAA,eAAA,KAAA,c,yDAEA,OAAA,eAAA,KAAA,uB,0CAAsC,OAAC,IAYvC,OAAA,eAAA,KAAA,U,0CAAS,MAAA,SAAC,GACR,EAAK,UAAU,aAAK,EAAL,EAAO,QACtB,EAAK,QAAQ,aAAK,EAAL,EAAO,K,IAGtB,OAAA,eAAA,KAAA,U,0CAAS,MAAA,WACP,OAAA,SAAS,CACP,OAAQ,EAAK,QACb,KAAM,EAAK,O,IAGf,OAAA,eAAA,KAAA,a,0CAAY,MAAA,SAAC,GACX,EAAK,QAAU,UAAa,CAAC,EAAG,E,IAGlC,OAAA,eAAA,KAAA,W,0CAAU,MAAA,SAAC,GACT,EAAK,MAAQ,WACX,UAAW,EACX,EAAK,WAAW,gBAAgB,a,IAIpC,OAAA,eAAA,KAAA,+B,0CAA8B,MAAA,WAC5B,EAAK,qB,IAOP,OAAA,eAAA,KAAA,U,gDAAS,WAAM,OAAA,EAAK,eAAe,KAAQ,IAC3C,OAAA,eAAA,KAAA,W,gDAAU,WAAM,OAAA,EAAK,eAAe,GAAI,IAGxC,OAAA,eAAA,KAAA,Y,gDAAW,SAAC,EAAwB,GAClC,IAAM,EAAU,WACd,EAAK,MAAQ,EACb,EAAK,WAAW,gBAAgB,cAG5B,EAA6B,cACjC,eAAe,EAAiB,EAAK,SACrC,EAAU,EAAK,OAGjB,EAAK,kBAEH,eAAe,EAAiB,GAChC,E,IAIJ,OAAA,eAAA,KAAA,qB,gDAAoB,SAAC,EAAkB,GACrC,EAAK,UAAU,GACf,EAAK,QAAQ,E,IAGf,OAAA,eAAA,KAAA,a,0CAAY,MAAA,SAAC,GACX,EAAK,UAAU,UAAU,EAAK,QAAS,G,IAGzC,OAAA,eAAA,KAAA,wB,0CAAuB,MAAA,SACrB,EACA,EACA,GAEA,EAAK,UAAU,GACf,EAAK,SAAS,EAAiB,E,IAGjC,OAAA,eAAA,KAAA,kB,0CAAiB,MAAA,SAAC,GACZ,EAAK,IAAI,cACX,EAAK,SACH,cAAc,EAAK,IAAI,aAAa,KAAM,IAC1C,E,IA0BN,OAAA,eAAA,KAAA,wB,0CAAuB,MAAA,SAAC,G,MAChB,EAA2B,QAAhB,EAAA,EAAK,IAAI,eAAO,IAAA,OAAA,EAAA,EAAE,wBACnC,OAAI,EACK,cACL,eACE,EACA,CAAC,EAAS,KAAM,EAAS,KACzB,EAAK,QAEP,EAAI,EAAK,MAEC,CAAC,EAAG,E,IAGpB,OAAA,eAAA,KAAA,a,0CAAY,MAAA,W,MACJ,EAAmB,EAAK,kCAExB,EAA8C,QAAhC,EAAA,EAAK,IAAI,6BAAuB,IAAA,OAAA,EAAA,EAAA,KACpD,GAAK,EAAL,CAKA,IAAM,EAAU,WACd,iCAAiC,EAAa,GAC9C,EAAK,WAAW,gBAAgB,kBAAkB,cAEpD,EAAK,QAAQ,GAEb,EAAK,UACH,mCAAmC,EAAa,EAAS,GAT1D,MAFC,QAAQ,KAAK,+B,IAejB,OAAA,eAAA,KAAA,mC,0CAA0C,MAAA,WACxC,IAAM,EAAmB,EAAK,WAAW,WAAW,sBAC9C,EAAU,EAAK,WAAW,gBAAgB,kBAAkB,QAclE,OAbA,EAAiB,cAAgB,eAC/B,EAAiB,cACjB,GAEF,EAAiB,kBAAoB,UACnC,EAAiB,kBACjB,GAEF,EAAiB,KAAO,eACtB,EAAiB,kBACjB,EAAiB,eAGZ,C,IA/JP,KAAK,KAAO,IAAI,oBAAoB,KAAM,MAC1C,KAAK,WAAa,EAClB,KAAK,SAEL,wBAA+C,KAAM,CACnD,YAAY,G,CA4JlB,OA9HE,OAAA,eAAI,EAAkB,UAAA,sBAAtB,IAAA,WACE,OAAO,KAAK,mB,kCAoDd,OAAA,eAAI,EAAG,UAAA,OAAP,IAAA,WACE,OAAO,KAAK,I,kCAGd,OAAA,eAAI,EAAM,UAAA,UAAV,IAAA,WACE,OAAO,KAAK,O,kCAGd,OAAA,eAAI,EAAI,UAAA,QAAR,IAAA,WACE,OAAO,KAAK,K,iIAGd,MAAA,WACE,IAAM,EAAO,KAAK,IAAI,iBAAiB,aACvC,OAAO,EAAO,OAAO,GAAQ,I,IA2DhC,CAAD,CA5KA,GA8KA,SAAS,iCACP,EACA,GAOA,OAJgB,KAAK,IACnB,EAAY,GAAK,EAAY,KAAK,GAClC,EAAY,GAAK,EAAY,KAAK,GAGtC,CAEA,SAAS,mCACP,EACA,EACA,GAGA,IAAM,EAAsB,cAAc,EAAY,KAAM,GACtD,EAAwB,cAAc,EAAY,cAAe,GACjE,EAAoC,eACxC,EACA,GAEF,OAAO,UACL,cAAc,GAAwB,GACtC,cAAc,EAAmC,IAErD,CCvMgB,SAAA,WACd,EACA,GAEA,OAAO,eAAQ,WACb,MAAO,CACL,UAAW,kBAAkB,EAAS,GACtC,MAAO,cAAc,EAAS,GAElC,GAAG,CAAC,EAAS,GACf,CAEA,SAAS,kBAAkB,EAA6B,GAiBtD,OAAO,cAfJ,EAAQ,sBAAwB,EAAQ,YAAc,OAEnD,EADA,iBAAiB,EAAQ,UAAW,EAAQ,eAAgB,GAG1C,EAAQ,0BAE5B,EADA,iBAAiB,EAAO,EAAQ,eAAgB,GAIlD,EAAQ,YAAc,EAClB,iBAAiB,EAAQ,UAAW,EAAQ,QAAS,QACrD,EAEU,iBAAiB,EAAO,EAAQ,QAAS,IAOvD,KAAK,IACT,CAEA,SAAS,cAAc,EAA6B,GAClD,IAAM,EACJ,EAAQ,YAAc,EAClB,iBAAiB,EAAQ,UAAW,EAAQ,aAAc,QAC1D,EAEA,EAAgB,iBAAiB,EAAO,EAAQ,aAAc,GAE9D,EACJ,EAAQ,YAAc,EAClB,iBAAiB,EAAQ,UAAW,EAAQ,MAAO,QACnD,EAEA,EAAS,iBAAiB,EAAO,EAAQ,MAAO,GAEtD,OAAA,oCAAA,GACK,GACA,GACA,GACA,EAEP,CAEA,SAAS,iBACP,EACA,EACA,G,MAEA,GAAI,GAAQ,EAAO,CACjB,IAAI,EAAM,EAAK,GACf,IAAK,IAA0B,QAAnB,EAAA,EAAQ,mBAAW,IAAA,OAAA,EAAA,EAAG,IAEhC,IADA,IAAM,EAAc,EAAQ,YAAY,GAC/B,EAAI,EAAG,EAAI,EAAY,OAAQ,IAAK,CAG3C,GADA,EAAM,EADa,EAAY,IAEtB,KACV,CAEH,OAAO,CACR,CACH,CCpFa,IAAA,YAET,wBAAS,SAAC,GAAE,IAAA,EAAM,EAAA,OAAE,EAAQ,EAAA,SAAE,EAAI,EAAA,KAC9B,EAAqB,eACzB,W,QACE,OACE,qBAAsB,aAAA,EAAA,EAAU,qBAChC,UAAW,OACX,QAA2B,QAApB,EAAE,aAAQ,EAAR,EAAU,gBAAQ,IAAA,OAAA,EAAA,EAAE,QAC7B,eAAgB,2BAChB,MAAyB,QAApB,EAAE,aAAQ,EAAR,EAAU,gBAAQ,IAAA,OAAA,EAAA,EAAE,MAC3B,YAAa,CAAE,mBAAoB,CAAC,WAAY,YAChD,GACJ,CAAC,IAGG,EAA0B,eAC9B,W,QACE,OACE,qBAAsB,aAAA,EAAA,EAAU,qBAChC,UAAW,OACX,QAAgC,QAAzB,EAAE,aAAQ,EAAR,EAAU,qBAAa,IAAA,OAAA,EAAA,EAAE,QAClC,eAAgB,gCAChB,MAA8B,QAAzB,EAAE,aAAQ,EAAR,EAAU,qBAAa,IAAA,OAAA,EAAA,EAAE,MAChC,YAAa,CAAE,mBAAoB,CAAC,WAAY,YAChD,GACJ,CAAC,IAGC,EAAQ,OACR,EAAO,UAAY,EAAO,QAAS,EAAQ,mBACtC,EAAO,SAAU,EAAQ,WACzB,EAAO,UAAS,EAAQ,WAEjC,IAAM,EAAc,WAAW,EAAoB,GAC7C,EAAmB,WAAW,EAAyB,GAE7D,OAAK,EAAO,KAGV,uBAAA,cAAA,SACE,uBAAA,cAAA,QACE,EAAG,EAAO,KAAK,QACf,UAAW,EAAY,UACvB,MAAO,EAAY,QAErB,uBACE,cAAA,OAAA,SAAA,CAAA,EAAG,EAAO,KAAK,QACf,UAAW,EAAiB,UAC5B,MAAO,EAAiB,OACpB,OAbe,IAiB3B,IAqBa,2BAET,CACF,KAAM,CAAC,uCACP,QAAS,CAAC,+CACV,SAAU,CAAC,iDAGA,gCAET,CACF,KAAM,CACJ,sCACA,gDAEF,QAAS,CACP,8CACA,wDAEF,mBAAoB,CAClB,+CACA,yDAIE,SAAU,kBACd,GAKA,MAAO,CACL,UAAW,YACX,SAAU,EAEd,CCjHM,SAAU,UACd,GAEA,OAAQ,GACN,IAAK,OACH,OAAO,IACT,IAAK,KACH,OAAO,GACT,IAAK,QACH,OAAO,EACT,IAAK,OACH,OAAO,IACT,IAAK,UACH,OAAO,IACT,IAAK,WACH,OAAO,GACT,IAAK,aACH,OAAO,IACT,IAAK,YACH,OAAO,IACT,QACE,OAEN,CAEM,SAAU,UACd,GAEA,IAAM,EAAS,UAAU,GACzB,YAAkB,IAAX,EAAwB,EAAS,KAAK,GAAM,SAAM,CAC3D,C,SAEgB,aACd,EACA,EACA,GAEA,MAAO,CACL,EAAE,GAAK,QAA4B,IAAlB,EAA8B,KAAK,IAAI,GAAiB,GACzE,EAAE,GACA,QAA4B,IAAlB,GAA+B,KAAK,IAAI,GAAiB,GAEzE,CAEM,SAAU,SAAS,GACvB,MAAO,KAAO,oBAAoB,EACpC,CAEM,SAAU,SACd,EACA,EACA,EACA,GAEA,OACE,SAAS,GACT,MACA,oBAAoB,GACpB,IACA,oBAAoB,GACpB,IACA,oBAAoB,EAExB,CAEM,SAAU,oBAAoB,GAClC,OAAU,EAAM,GAAE,IAAI,EAAM,EAC9B,CC/DA,SAAS,0BACP,EACA,EACA,GAEA,IAAK,IAAW,EAAQ,MAAO,GAE/B,IAAM,EAAkB,EAAS,oCAC/B,sBAAsB,EAAO,MAAO,EAAO,OAC3C,EAAS,iBAGX,OAAO,SACL,EAAO,MACP,aAAa,EAAO,MAAO,EAAiB,UAAU,EAAO,YAC7D,aAAa,EAAO,MAAO,EAAiB,UAAU,EAAO,YAC7D,EAAO,MAEX,CAUA,IAAM,gBAAsD,CAC1D,gBAAiB,GACjB,oCAAqC,SAAC,EAAU,GAC9C,OAAI,EAAW,IACN,GAAmB,EAAW,KAEhC,C,GAIL,SAAU,gCACd,GAEA,OAAO,SACL,EACA,GAEA,OAAA,0BACE,EACA,EACA,EAAU,kBAAA,GAAM,iBAAoB,GAAa,gBAHnD,CAKJ,CCrDA,IAAA,uBAAA,WAGE,SAAA,EAAY,GAAZ,IAGC,EAAA,KALD,OAAA,eAAA,KAAA,U,yDAWA,OAAA,eAAA,KAAA,e,0CAAc,MAAA,SAAC,GACb,EAAK,OAAS,UAAU,EAAK,OAAQ,E,IATrC,KAAK,OAAS,EACd,wBAAmB,K,CAUvB,OAPE,OAAA,eAAI,EAAK,UAAA,SAAT,IAAA,WACE,OAAO,KAAK,M,kCAMf,CAAD,CAfA,GCEA,sBAAA,WAKE,SAAY,EAAA,EAAiB,GAA7B,IAIC,EAAA,KARD,OAAA,eAAA,KAAA,S,yDAEA,OAAA,eAAA,KAAA,c,yDAQA,OAAA,eAAA,KAAA,U,0CAAS,MAAA,WACP,OAAA,SAAS,CACP,OAAQ,EAAK,MAAM,OACnB,OAAQ,EAAK,MAAM,I,IARrB,KAAK,MAAQ,EACb,wBAAmB,MACnB,KAAK,WAAa,C,CAkCtB,OAzBE,OAAA,eAAI,EAAI,UAAA,QAAR,IAAA,WACE,OAAO,KAAK,K,kCAGd,OAAA,eAAI,EAAK,UAAA,SAAT,IAAA,WACE,GAAI,KAAK,KAAK,sBAAwB,KAAK,KAAK,IAAI,kBAClD,OAAO,UACL,KAAK,KAAK,KAAK,SACf,UACE,KAAK,KAAK,qBACV,cAAc,KAAK,KAAK,IAAI,kBAAmB,K,kCAQvD,OAAA,eAAI,EAAM,UAAA,UAAV,IAAA,WACE,OAAO,KAAK,KAAK,E,kCAGnB,OAAA,eAAI,EAAM,UAAA,UAAV,IAAA,WACE,OAAO,KAAK,KAAK,KAAK,E,kCAEzB,CAAD,CA1CA,GAiDgB,SAAA,wBACd,EACA,GAEA,OAAO,EAAE,SAAW,EAAE,QAAU,EAAE,SAAW,EAAE,MACjD,CCnDA,IAAA,iBAOE,SACE,GADF,IAUC,EAAA,KAbD,OAAA,eAAA,KAAA,sB,yDACA,OAAA,eAAA,KAAA,e,yDAcA,OAAA,eAAA,KAAA,U,0CAAS,MAAA,SAAC,GACR,EAAK,YACA,kBAAA,GAAA,EAAK,oBACL,EAAK,2BAA2B,aAAA,EAAA,EAAK,Y,IAI5C,OAAA,eAAA,KAAA,gB,0CAAe,MAAA,SACb,G,MAEM,EAAqB,UAAQ,uBACnC,OAC0C,QAAxC,EAAA,EAAK,YAAY,UAAuB,IAAA,IAAA,EAAK,YAAY,uB,IAI7D,OAAA,eAAA,KAAA,8B,0CAAqC,MAAA,SACnC,GAIA,IAAM,EAA2E,GAOjF,OALA,GACE,OAAO,QAAQ,GAAmB,SAAQ,SAAC,G,IAAC,EAAG,EAAA,GAAE,EAAK,EAAA,GACpD,EAAW,GAAO,IAAI,qBAAiD,EACzE,IAEK,C,IAnCP,KAAK,mBAAqB,KAAK,2BAC7B,GAEF,KAAK,YAAW,SAAA,GAAQ,KAAK,oBAC7B,wBAAmB,K,EAmCV,uBAAyB,UCjDtC,UAAA,WAeE,SAAA,EAAY,EAAsB,EAAY,GAA9C,IAYC,EAAA,KA1BD,OAAA,eAAA,KAAA,O,yDACA,OAAA,eAAA,KAAA,S,yDACA,OAAA,eAAA,KAAA,W,yDACA,OAAA,eAAA,KAAA,mB,yDACA,OAAA,eAAA,KAAA,W,yDACA,OAAA,eAAA,KAAA,mB,yDACA,OAAA,eAAA,KAAA,a,yDACA,OAAA,eAAA,KAAA,a,yDACA,OAAA,eAAA,KAAA,Y,yDACA,OAAA,eAAA,KAAA,S,yDACA,OAAA,eAAA,KAAA,uB,yDAEA,OAAA,eAAA,KAAA,c,yDAgBA,OAAA,eAAA,KAAA,U,0CAAS,MAAA,SAAC,GACR,EAAK,gBAAkB,CACrB,OAAQ,EAAM,OAAO,OACrB,OAAQ,EAAM,OAAO,QAEvB,EAAK,gBAAkB,CACrB,OAAQ,EAAM,OAAO,OACrB,OAAQ,EAAM,OAAO,QAEvB,EAAK,QAAQ,EAAM,MACnB,EAAK,YAAY,EAAM,UACvB,EAAK,QAAQ,EAAM,MACnB,EAAK,sBAAsB,aAAK,EAAL,EAAO,mB,IAGpC,OAAA,eAAA,KAAA,U,0CAAS,MAAA,W,MAAwB,OAAA,SAAA,GAC5B,SAAS,CACV,GAAI,EAAK,IACT,OAAQ,EAAK,gBACb,OAAQ,EAAK,gBACb,KAAM,EAAK,KACX,SAAU,EAAK,SACf,KAAM,EAAK,KACX,mBAA4C,QAAxB,EAAA,EAAK,2BAAmB,IAAA,SAAI,IAElD,IAUF,OAAA,eAAA,KAAA,W,0CAAU,MAAA,SAAC,GACT,EAAK,MAAQ,UAAS,sB,IAOxB,OAAA,eAAA,KAAA,e,0CAAc,MAAA,SAAC,GACb,EAAK,UAAY,UAAS,E,IAoD5B,OAAA,eAAA,KAAA,iB,0CAAgB,MAAA,WACd,IAAM,EAAM,EAAK,eACjB,EAAK,gBAAkB,EAAK,eAC5B,EAAK,gBAAkB,C,IAGzB,OAAA,eAAA,KAAA,W,0CAAU,MAAA,SAAC,GACT,EAAK,MAAQ,UAAS,I,IASxB,OAAA,eAAA,KAAA,yB,0CAAwB,MAAA,SAAC,GACvB,EAAK,oBAAsB,UAAU,GAAS,EAAQ,I,IAGxD,OAAA,eAAA,KAAA,wB,0CAA+B,MAAA,SAC7B,GAEA,IAAM,EAAO,EAAK,WAAW,WAAW,QAAQ,EAAS,QACzD,GAAK,EAAL,CACA,IAAM,EAAO,EAAK,QAAQ,EAAS,QACnC,GAAK,EAEL,OAAO,IAAI,sBAAsB,EAAM,EAAK,WAJjB,C,IArI3B,KAAK,WAAa,EAElB,KAAK,IAAM,EACX,KAAK,WAAY,EACjB,KAAK,UAAW,EAChB,KAAK,OAAO,GAEZ,wBAAmB,KAAM,CAEvB,YAAY,G,CAkIlB,OAnGE,OAAA,eAAI,EAAE,UAAA,MAAN,IAAA,WACE,OAAO,KAAK,G,kCAGd,OAAA,eAAI,EAAI,UAAA,QAAR,IAAA,WACE,OAAO,KAAK,K,kCAOd,OAAA,eAAI,EAAQ,UAAA,YAAZ,IAAA,WACE,OAAO,KAAK,S,kCAOd,OAAA,eAAI,EAAI,UAAA,QAAR,IAAA,WACE,GAAI,KAAK,QAAU,KAAK,OACtB,OAAO,eAAe,KAAK,WAAY,KAAK,OAAQ,KAAK,O,kCAM7D,OAAA,eAAI,EAAmB,UAAA,uBAAvB,IAAA,WAEE,OAD6B,KAAK,WAAW,cAAa,iBAClC,aAAa,KAAK,K,kCAG5C,OAAA,eAAI,EAAQ,UAAA,YAAZ,IAAA,WACE,OAAO,KAAK,S,EAGd,IAAA,SAAa,GACX,KAAK,UAAY,C,kCAGnB,OAAA,eAAI,EAAO,UAAA,WAAX,IAAA,WACE,OAAO,KAAK,Q,EAGd,IAAA,SAAY,GACV,KAAK,SAAW,C,kCAGlB,OAAA,eAAI,EAAI,UAAA,QAAR,IAAA,WACE,OAAO,KAAK,K,kCAGd,OAAA,eAAI,EAAM,UAAA,UAAV,IAAA,WACE,OAAO,KAAK,qBAAqB,KAAK,e,kCAGxC,OAAA,eAAI,EAAc,UAAA,kBAAlB,IAAA,WACE,OAAO,KAAK,e,kCAGd,OAAA,eAAI,EAAM,UAAA,UAAV,IAAA,WACE,OAAO,KAAK,qBAAqB,KAAK,e,kCAGxC,OAAA,eAAI,EAAc,UAAA,kBAAlB,IAAA,WACE,OAAO,KAAK,e,kCAad,OAAA,eAAI,EAAkB,UAAA,sBAAtB,IAAA,WACE,OAAoC,OAA7B,KAAK,oBACR,KAAK,WAAW,gBAAgB,gBAAgB,cAChD,KAAK,mB,kCAiBZ,CAAD,CA3JA,G,SA6JgB,eACd,EACA,EACA,GAEQ,IAAA,EAAkB,EAAS,cACnC,MACG,EAAO,MACP,aAAkB,wBAA0B,EAAO,OACnD,EAAO,OACP,EAAO,MAwBV,MAAO,CACL,QApBc,EAAc,gBAC5B,CACE,MAAO,EAAO,MACd,SAAU,EAAO,KAAK,KACtB,UAAW,EAAO,KAAK,eAEzB,CACE,MAAO,EAAO,MACd,SACE,aAAkB,4BACd,EACA,EAAO,KAAM,KACnB,UACE,aAAkB,4BACd,EACA,EAAO,KAAM,gBAMrB,OAAQ,EAAO,MACf,OAAQ,EAAO,MAEnB,CClMA,IAAA,kBAAA,WAOE,SAAA,EAAY,GAAZ,IAGC,EAAA,KATD,OAAA,eAAA,KAAA,W,qDAA0C,IAC1C,OAAA,eAAA,KAAA,W,qDAA2C,IAC3C,OAAA,eAAA,KAAA,wB,qDAA2C,IAE3C,OAAA,eAAA,KAAA,c,yDA+BA,OAAA,eAAA,KAAA,gB,gDAAe,SAAC,EAAsB,GACpC,EAAK,cACL,EAAK,QAAU,IAAI,sBAAsB,EAAW,EAAK,YAEzD,IAAM,EAAc,EAAK,QAAQ,MAC3B,EAAW,EAAK,QAAQ,KAAM,IAAI,kBACxC,IAAI,IAAe,EAcjB,OADA,EAAK,eACE,EAZP,IAAM,EAAqB,eACzB,EACA,cAAc,EAAU,KAiB5B,OAfE,EAAK,QAAU,IAAI,uBACjB,UACE,EACA,cAAc,EAAa,EAAI,EAAK,WAAW,aAAa,QAQlE,EAAK,WAAW,UAAU,eAAe,CACvC,WAAY,KAGP,C,IAGT,OAAA,eAAA,KAAA,0B,0CAAyB,MAAA,SAAC,GACxB,GAAK,EAAK,QAAV,CAEA,IAAM,EAAa,EAAK,WAAW,WAAW,aAAa,CACzD,OAAQ,CACN,OAAQ,EAAK,QAAQ,KAAK,OAC1B,OAAQ,EAAK,QAAQ,KAAK,IAE5B,OAAQ,CACN,OAAQ,EAAU,OAClB,OAAQ,EAAU,MAItB,EAAK,qBAAuB,EACxB,EAAW,QACb,EAAU,oBAAqB,EAE/B,EAAU,oBAAqB,CAjBd,C,IAqBrB,OAAA,eAAA,KAAA,4B,0CAA2B,MAAA,SAAC,GACtB,EAAK,uBAAyB,IAChC,EAAK,0BAAuB,GAE9B,EAAU,oBAAqB,C,IAGjC,OAAA,eAAA,KAAA,e,0CAAc,MAAA,WACZ,IAAI,GAAS,EACb,GAAI,EAAK,sBAAwB,EAAK,QAAS,CAC7C,IAAM,EAAS,EAAK,WAAW,WAAW,QAAQ,CAChD,OAAQ,CACN,OAAQ,EAAK,QAAQ,KAAK,OAC1B,OAAQ,EAAK,QAAQ,KAAK,IAE5B,OAAQ,CACN,OAAQ,EAAK,qBAAqB,OAClC,OAAQ,EAAK,qBAAqB,MAIlC,EAAO,SACT,EAAK,WAAW,eAAe,OAAO,EAAO,OAAO,GAGtD,EAAS,EAAO,OACjB,CAEG,EAAK,SACP,EAAK,WAAW,UAAU,aAAa,CACrC,WAAY,EAAK,QAAQ,KACzB,WAAY,EAAK,qBACjB,OAAQ,IAIZ,EAAK,a,IAaP,OAAA,eAAA,KAAA,e,0CAAsB,MAAA,WAChB,EAAK,UACH,EAAK,QAAQ,OACf,EAAK,QAAQ,KAAK,oBAAqB,GAEzC,EAAK,aAAU,GAEjB,EAAK,aAAU,EACX,EAAK,uBACP,EAAK,qBAAqB,oBAAqB,EAC/C,EAAK,0BAAuB,E,IA3I9B,wBAAmB,MACnB,KAAK,WAAa,C,CA6ItB,OA1IE,OAAA,eAAI,EAAQ,UAAA,YAAZ,IAAA,WACE,OAAO,C,kCAGT,OAAA,eAAI,EAAO,UAAA,WAAX,IAAA,WACE,OAAO,C,kCAGT,OAAA,eAAI,EAAM,UAAA,UAAV,IAAA,WACE,OAAO,KAAK,O,kCAGd,OAAA,eAAI,EAAM,UAAA,UAAV,IAAA,WACE,OAAO,KAAK,O,kCAGd,OAAA,eAAI,EAAmB,UAAA,uBAAvB,IAAA,WACE,OAAO,KAAK,oB,kCAGd,OAAA,eAAI,EAAS,UAAA,aAAb,IAAA,WACE,QAAS,KAAK,O,kCA8FhB,OAAA,eAAI,EAAmB,UAAA,uBAAvB,IAAA,WAEE,OAD6B,KAAK,WAAW,cAAa,iBAClC,aAAa,6B,kCAGvC,OAAA,eAAI,EAAI,UAAA,QAAR,IAAA,WACE,OAAK,KAAK,SAAY,KAAK,QACf,eAAe,KAAK,WAAY,KAAK,QAAS,KAAK,cAD3B,C,kCAiBvC,CAAD,CAtJA,GAwJa,6BAAuC,eC1J9C,aAAe,uBAAM,MAAK,SAAC,G,MACzB,EAA0C,CAC9C,GAAI,EAAM,GACV,OAAoB,QAAZ,EAAA,EAAM,cAAM,IAAA,IAAI,EACxB,MACE,SAAA,CAAA,OAAQ,OACR,KAAM,sBACH,EAAM,QAGb,OACE,uBAAA,cAAA,UACE,GAAI,EAAc,GAClB,SAAS,UACT,YAAY,kBAEZ,uBAAA,cAAA,UAAQ,EAAG,EAAc,OAAQ,MAAO,EAAc,QAG5D,IAEM,SAAU,mBACd,GAEA,OAAO,WAAM,OAAA,uBAAC,cAAA,aAAY,SAAA,GAAK,GAAlB,CACf,CAOA,IAAM,YAAc,uBAAM,MAAK,SAAC,G,QACxB,EAAgB,CACpB,GAAI,EAAM,GACV,OAAoB,QAAZ,EAAA,EAAM,cAAM,IAAA,IAAI,GACxB,MAAkB,QAAX,EAAA,EAAM,aAAK,IAAA,IAAI,GACtB,MACE,SAAA,CAAA,OAAQ,OACR,KAAM,sBACH,EAAM,QAGb,OACE,+CACE,GAAI,EAAc,GAClB,SAAS,UACT,YAAY,iBACZ,KAAK,OACL,OAAO,QAEP,uBAAA,cAAA,QACE,EAAG,UAAU,EAAc,MAAK,KAAK,EAAc,OAAS,EAAC,KAC3D,EAAc,MACZ,IAAA,EAAc,OAAS,EAAC,KAC5B,MAAO,EAAc,QAI7B,IAEM,SAAU,kBACd,GAEA,OAAO,WAAM,OAAA,uBAAC,cAAA,YAAW,SAAA,GAAK,GAAjB,CACf,CCzDA,IAAA,cAAA,WAyDE,SAAA,I,MAGC,EAAA,KA3DD,OAAA,eAAA,KAAA,oB,yDACA,OAAA,eAAA,KAAA,qB,0CAA4B,MAAA,IAAI,kBAAgB,EAAA,GAI9C,EAAC,wBAAyB,oBAC1B,EAAC,8BAA+B,kBAAkB,CAChD,SAAU,CACR,MAAO,CACL,KAAM,CAAE,UAAW,2CAIzB,MACF,OAAA,eAAA,KAAA,yB,yDAEA,OAAA,eAAA,KAAA,sB,0CAAwD,MAAA,CACtD,mBAAmB,CACjB,GAAI,wBACJ,MAAO,CACL,KAAM,aAGV,mBAAmB,CACjB,GAAI,iCACJ,MAAO,CACL,KAAM,aAGV,mBAAmB,CACjB,GAAI,gCACJ,MAAO,CACL,KAAM,aAGV,kBAAkB,CAChB,GAAI,uBACJ,MAAO,CACL,KAAM,aAGV,kBAAkB,CAChB,GAAI,gCACJ,MAAO,CACL,KAAM,aAGV,kBAAkB,CAChB,GAAI,+BACJ,MAAO,CACL,KAAM,gBAIZ,OAAA,eAAA,KAAA,e,gDAAiD,KAOjD,OAAA,eAAA,KAAA,U,0CAAS,MAAA,SAAC,G,MACR,EAAK,kBAAkB,OAAO,GAC9B,EAAK,mBAAmB,aAAG,EAAH,EAAK,iBAC7B,EAAK,sBAAqD,QAA7B,EAAA,aAAA,EAAA,EAAK,4BAAwB,IAAA,IAAA,aAC1D,EAAK,aAAc,aAAA,EAAA,EAAK,YAChB,eAAA,EAAI,WAAe,EAAK,oBAC5B,EAAK,kB,IAOX,OAAA,eAAA,KAAA,sB,0CAAqB,MAAA,SAAC,GACpB,EAAK,iBAAmB,UAAS,sB,IAlBjC,KAAK,SACL,wBAAmB,K,CA+BvB,OAnBE,OAAA,eAAI,EAAe,UAAA,mBAAnB,IAAA,WACE,OAAO,KAAK,gB,kCAOd,OAAA,eAAI,EAAgB,UAAA,oBAApB,IAAA,WACE,OAAO,KAAK,iB,kCAGd,OAAA,eAAI,EAAoB,UAAA,wBAAxB,IAAA,WACE,OAAO,KAAK,qB,kCAGd,OAAA,eAAI,EAAU,UAAA,cAAd,IAAA,WACE,OAAO,KAAK,W,kCAEf,CAAD,CA1FA,GA4FM,uBAAyB,kCCpG/B,UAAA,WAsBE,SAAA,EACE,EACA,EACA,EACA,GAJF,IAgCC,EAAA,KArDD,OAAA,eAAA,KAAA,O,yDACA,OAAA,eAAA,KAAA,U,yDACA,OAAA,eAAA,KAAA,S,yDACA,OAAA,eAAA,KAAA,S,yDACA,OAAA,eAAA,KAAA,kB,yDACA,OAAA,eAAA,KAAA,wB,yDACA,OAAA,eAAA,KAAA,a,yDACA,OAAA,eAAA,KAAA,yB,yDACA,OAAA,eAAA,KAAA,qB,yDAEA,OAAA,eAAA,KAAA,Q,yDACA,OAAA,eAAA,KAAA,a,iDAA6B,IAC7B,OAAA,eAAA,KAAA,Y,iDAA4B,IAC5B,OAAA,eAAA,KAAA,uB,iDAAuC,IAEvC,OAAA,eAAA,KAAA,iC,gDAAgD,IAChD,OAAA,eAAA,KAAA,+B,gDAA8C,IAE9C,OAAA,eAAA,KAAA,S,yDACA,OAAA,eAAA,KAAA,c,yDAwFA,OAAA,eAAA,KAAA,Y,0CAAW,MAAA,SAAC,GACV,EAAK,OAAS,C,IAWhB,OAAA,eAAA,KAAA,W,0CAAU,MAAA,SAAC,GACT,EAAK,MAAQ,C,IASf,OAAA,eAAA,KAAA,e,0CAAc,MAAA,SAAC,GACb,EAAK,UAAY,C,IASnB,OAAA,eAAA,KAAA,2B,0CAA0B,MAAA,SAAC,GACzB,EAAK,sBAAwB,C,IAS/B,OAAA,eAAA,KAAA,uB,0CAAsB,MAAA,SAAC,GACrB,EAAK,kBAAoB,C,IAM3B,OAAA,eAAA,KAAA,U,0CAAS,MAAA,SAAC,GACR,EAAK,QAAQ,aAAK,EAAL,EAAO,MACpB,EAAK,SAAS,aAAK,EAAL,EAAO,OACrB,EAAK,QAAQ,aAAK,EAAL,EAAO,MACpB,EAAK,iBAAiB,aAAK,EAAL,EAAO,eAC7B,EAAK,uBAAuB,aAAK,EAAL,EAAO,qBACnC,EAAK,YAAY,aAAK,EAAL,EAAO,UACxB,EAAK,wBAAwB,aAAK,EAAL,EAAO,sBACpC,EAAK,oBAAoB,aAAK,EAAL,EAAO,iB,IAMlC,OAAA,eAAA,KAAA,U,0CAAS,MAAA,SAAC,GACH,SAEW,IAAhB,EAAM,OAAuB,EAAK,SAAS,EAAM,YAClC,IAAf,EAAM,MAAsB,EAAK,QAAQ,EAAM,WAChC,IAAf,EAAM,MAAsB,EAAK,QAAQ,EAAM,WACvB,IAAxB,EAAM,eACJ,EAAK,iBAAiB,EAAM,oBACA,IAA9B,EAAM,qBACJ,EAAK,uBAAuB,EAAM,0BACjB,IAAnB,EAAM,UAA0B,EAAK,YAAY,aAAK,EAAL,EAAO,eACzB,IAA/B,EAAM,sBACJ,EAAK,wBAAwB,aAAK,EAAL,EAAO,2BACX,IAA3B,EAAM,kBACJ,EAAK,oBAAoB,aAAK,EAAL,EAAO,kB,IAGpC,OAAA,eAAA,KAAA,U,0CAAS,MAAA,WACP,OAAA,SAAS,CACP,GAAI,EAAK,IACT,OAAQ,EAAK,OACb,MAAO,EAAK,OACZ,KAAM,EAAK,MACX,KAAM,EAAK,MACX,cAAe,EAAK,eACpB,oBAAqB,EAAK,qBAC1B,SAAU,EAAK,UACf,qBAAsB,EAAK,sBAC3B,iBAAkB,EAAK,mB,IAS3B,OAAA,eAAA,KAAA,W,0CAAU,MAAA,SAAC,GACT,EAAK,MAAQ,C,IA0Cf,OAAA,eAAA,KAAA,qB,0CAAoB,MAAA,WAClB,EAAK,+BAAiC,C,IAGxC,OAAA,eAAA,KAAA,gC,0CAA+B,MAAA,WAC7B,EAAK,6BAA+B,C,IAgDtC,OAAA,eAAA,KAAA,oB,0CAAmB,MAAA,SAAC,GAClB,EAAK,eAAiB,C,IAYxB,OAAA,eAAA,KAAA,0B,0CAAyB,MAAA,SAAC,GACxB,EAAK,qBAAuB,C,IAlS5B,KAAK,IAAM,EACX,KAAK,MAAQ,EACb,KAAK,WAAa,EAClB,KAAK,KAAO,IAAI,oBAAoB,KAAM,EAAU,cACpD,KAAK,OAAO,GAEZ,wBAA+D,KAAM,CACnE,OAAO,EACP,MAAM,EACN,YAAY,EACZ,MAAM,IAGR,eACE,WAAM,OACJ,EAAK,OACL,EAAK,MACL,EAAK,MACL,EAAK,UACL,EAAK,sBACL,EAAK,kBACN,IACD,WACE,EAAK,mBACP,G,CA4QN,OAxQE,OAAA,eAAI,EAAsB,UAAA,0BAA1B,IAAA,e,IAIC,EAAA,KAHC,OAAoD,QAA7C,EAAsC,QAAtC,EAAA,KAAK,KAAK,oBAAoB,gBAAQ,IAAA,OAAA,EAAA,EAAE,aAAK,IAAA,OAAA,EAAA,EAAE,MACpD,SAAC,GAAM,OAAA,EAAE,KAAO,EAAK,GAAd,G,kCAIX,OAAA,eAAI,EAAE,UAAA,MAAN,IAAA,WACE,OAAO,KAAK,G,kCAGd,OAAA,eAAI,EAAM,UAAA,UAAV,IAAA,WACE,OAAO,KAAK,KAAK,E,kCAGnB,OAAA,eAAI,EAAM,UAAA,UAAV,IAAA,WACE,OAAO,iBAAiB,KAAK,OAAQ,KAAK,G,kCAG5C,OAAA,eAAI,EAAG,UAAA,OAAP,IAAA,WACE,OAAO,KAAK,I,kCAGd,OAAA,eAAI,EAAQ,UAAA,YAAZ,IAAA,WACE,OAAO,KAAK,S,EAGd,IAAA,SAAa,GACX,KAAK,UAAY,C,kCAGnB,OAAA,eAAI,EAAO,UAAA,WAAX,IAAA,WACE,OAAO,KAAK,Q,EAGd,IAAA,SAAY,GACV,KAAK,SAAW,C,kCAGlB,OAAA,eAAI,EAAkB,UAAA,sBAAtB,IAAA,WACE,OAAO,KAAK,mB,EAGd,IAAA,SAAuB,GACrB,KAAK,oBAAsB,C,kCAG7B,OAAA,eAAI,EAAK,UAAA,SAAT,IAAA,W,QACE,YAAuB,IAAhB,KAAK,OACmB,QAA3B,EAAA,KAAK,8BAAsB,IAAA,OAAA,EAAA,EAAE,MAClB,QAAZ,EAAC,KAAK,cAAM,IAAA,SAAI,C,kCAOrB,OAAA,eAAI,EAAI,UAAA,QAAR,IAAA,W,QACE,OAGqB,QAHrB,OACkB,IAAf,KAAK,MACyB,QAA7B,EAAE,KAAK,8BAAsB,IAAA,OAAA,EAAA,EAAE,KAC7B,KAAK,aAAU,IAAA,IAAA,sB,kCAQvB,OAAA,eAAI,EAAQ,UAAA,YAAZ,IAAA,W,QACE,YAA0B,IAAnB,KAAK,UACmB,QAA3B,EAAA,KAAK,8BAAsB,IAAA,OAAA,EAAA,EAAE,SACf,QAAf,EAAC,KAAK,iBAAS,IAAA,SAAI,C,kCAOxB,OAAA,eAAI,EAAoB,UAAA,wBAAxB,IAAA,W,QACE,YAAsC,IAA/B,KAAK,sBACmB,QAA3B,EAAA,KAAK,8BAAsB,IAAA,OAAA,EAAA,EAAE,qBACH,QAA3B,EAAC,KAAK,6BAAqB,IAAA,SAAI,C,kCAOpC,OAAA,eAAI,EAAgB,UAAA,oBAApB,IAAA,W,QACE,YAAkC,IAA3B,KAAK,kBACmB,QAA3B,EAAA,KAAK,8BAAsB,IAAA,OAAA,EAAA,EAAE,iBACP,QAAvB,EAAC,KAAK,yBAAiB,IAAA,SAAI,C,kCAuDhC,OAAA,eAAI,EAAI,UAAA,QAAR,IAAA,W,MACE,YAAsB,IAAf,KAAK,MACqB,QAA7B,EAAA,KAAK,8BAAwB,IAAA,OAAA,EAAA,EAAA,KAC7B,KAAK,K,kCAOX,OAAA,eAAI,EAAI,UAAA,QAAR,IAAA,WACE,OAAO,KAAK,K,kCAOd,OAAA,eAAI,EAAoB,UAAA,wBAAxB,IAAA,WAUE,GANA,KAAK,4BAMD,KAAK,IAAI,SAAW,KAAK,KAAK,IAAI,QAAS,CAM7C,IALA,IAAI,EAAc,KAAK,IAAI,QACvB,EAAmB,KACnB,EAAW,EACX,EAAU,EAEP,KAAK,KAAK,IAAI,UAAY,GAAe,GAAa,CAC3D,IAAK,GAAoB,IAAqB,EAAa,CACzD,IAAM,EAAY,aAAa,GAC/B,GAAY,EAAY,WAAa,EAAU,GAC/C,GAAW,EAAY,UAAY,EAAU,GAC7C,EAAmB,EAAY,YAChC,CACD,EAAc,EAAY,aAC3B,CACD,MAAO,CAAC,EAAU,EACnB,CAED,OAAO,I,kCAcT,OAAA,eAAI,EAA4B,UAAA,gCAAhC,IAAA,WACE,OAAO,KAAK,6B,kCAGd,OAAA,eAAI,EAAmB,UAAA,uBAAvB,IAAA,WAEE,OADiC,KAAK,WAAW,cAAa,qBAClC,aAAa,KAAK,K,kCAGhD,OAAA,eAAI,EAAc,UAAA,kBAAlB,IAAA,WACE,OAAO,KAAK,WAAW,WAAW,aAAa,KAAK,OAAQ,KAAK,G,kCAGnE,OAAA,eAAI,EAAc,UAAA,kBAAlB,IAAA,eAMC,EAAA,KALC,OAAO,KAAK,eACT,KAAI,SAAC,GAAC,IAAA,EAAA,EACL,OAAA,EAAE,eAAe,SAAW,EAAK,IAAgB,QAAV,EAAA,EAAE,cAAQ,IAAA,OAAA,EAAA,EAAA,KAAe,QAAT,EAAC,EAAE,cAAM,IAAA,OAAA,EAAA,EAAE,IAAI,IAEvE,QAAO,SAAC,GAAM,OAAA,CAAC,G,kCAGpB,OAAA,eAAI,EAAa,UAAA,iBAAjB,IAAA,WACE,GAAI,KAAK,eAAgB,OAAO,KAAK,eACrC,GAAI,KAAK,SAAU,OAAO,wBAAwB,KAAK,UAGvD,GAAK,KAAK,qBAAV,CAEA,IAAM,EACJ,KAAK,KAAK,IAAI,mBACd,cAAc,KAAK,KAAK,IAAI,kBAAmB,IACjD,GAAK,EAEL,MAA2D,eAAvD,KAAK,WAAW,cAAc,qBACzB,KAAK,qBAAqB,GAAK,EAAW,GAAK,OAAS,QAER,aAAvD,KAAK,WAAW,cAAc,qBAEvB,KAAK,qBAAqB,GAAK,EAAW,GAAK,KAAO,YAHxD,CATyC,C,kCAoBlD,OAAA,eAAI,EAAmB,UAAA,uBAAvB,IAAA,W,QACE,OAIE,QAJF,OACiC,IAA9B,KAAK,qBACyB,QAA5B,EAAC,KAAK,8BAAsB,IAAA,OAAA,EAAA,EAAE,oBAC7B,KAAK,4BACT,IAAA,IAAA,KAAK,WAAW,gBAAgB,gBAAgB,c,kCAOrD,CAAD,CAhUA,GAkUM,wBAEF,CACF,cAAe,OACf,cAAe,OACf,WAAY,OAEZ,WAAY,KACZ,aAAc,KACd,YAAa,KAEb,eAAgB,QAChB,eAAgB,QAChB,YAAa,QAEb,cAAe,OACf,gBAAiB,OACjB,eAAgB,OAEhB,oBAAqB,UACrB,qBAAsB,WACtB,wBAAyB,aACzB,uBAAwB,aAK1B,SAAS,aAAa,GACpB,IAAI,EAAkB,CAAC,EAAG,GAC1B,IAAK,OAAO,iBACV,OAAO,EAET,IAAM,EAAQ,OAAO,iBAAiB,GAIlC,GAHc,EAAM,WAAa,EAAM,iBAGvB,MAAM,oBAQ1B,OAPI,IACF,EAAW,CACT,WAAW,EAAI,GAAG,MAAM,MAAM,IAC9B,WAAW,EAAI,GAAG,MAAM,MAAM,MAI3B,CACT,CAkCgB,SAAA,iBAAiB,EAAgB,GAC/C,OAAU,EAAU,IAAA,CACtB,CC9ZA,SAAS,SACP,OAAO,KAAK,MAA4B,OAArB,EAAI,KAAK,WACzB,SAAS,IACT,UAAU,EACf,C,SAEgB,OAEd,OACE,SACA,SACA,IACA,SACA,IACA,SACA,IACA,SACA,IACA,SACA,SACA,QAEJ,CAEM,SAAU,qBACd,GAGA,IADA,IAAI,EAAK,OACF,EAAe,IACpB,EAAK,OAGP,OAAO,CACT,CCbA,IAAA,WAAA,WAOE,SAAA,EAAY,GAAZ,IAKC,EAAA,KAXD,OAAA,eAAA,KAAA,U,yDACA,OAAA,eAAA,KAAA,yB,yDACA,OAAA,eAAA,KAAA,iB,yDAEA,OAAA,eAAA,KAAA,c,yDASA,OAAA,eAAA,KAAA,U,0CAAS,MAAA,SAAC,GAIR,GAHA,EAAK,OAAS,IAAI,IAClB,EAAK,sBAAwB,IAAI,IAE7B,EAAU,CACZ,IAAI,EAAU,EAAK,kBAAkB,GAAU,GAE/C,EAAK,WAAW,UAAU,WAAW,CACnC,WAAY,EAAQ,OAAO,WAAW,KAAI,SAAC,GAAM,OAAA,EAAE,KAAK,IACxD,iBAAkB,EAAQ,OAAO,SACjC,WAAW,GAEd,C,IAGH,OAAA,eAAA,KAAA,U,0CAAS,MAAA,WACP,OAAA,MAAM,KAAK,EAAK,QAAQ,KAAI,SAAC,GAAiB,OAAb,EAAA,GAAO,EAAA,GAAY,QAAN,G,IAUhD,OAAA,eAAA,KAAA,gB,0CAAe,MAAA,SAAC,G,MACd,OAAiD,QAA1C,EAAA,EAAK,sBAAsB,IAAI,UAAW,IAAA,IAAA,E,IAGnD,OAAA,eAAA,KAAA,W,0CAAU,MAAA,SAAC,GACT,OAAO,EAAK,MAAM,IAAI,E,IAGxB,OAAA,eAAA,KAAA,gB,gDAAe,SAAC,EAAgB,GAC9B,IAAM,EAAY,EAAK,aAAa,GAC9B,EAAa,iBAAiB,EAAQ,GAC5C,OAAO,EAAU,QACf,SAAC,GACC,OAAC,EAAE,QAAU,EAAE,OAAO,KAAK,SAAW,GACrC,EAAE,QAAU,EAAE,OAAO,KAAK,SAAW,CADtC,G,IAKN,OAAA,eAAA,KAAA,Y,gDAAW,SACT,EACA,QAAA,IAAA,OAA0C,GAE1C,IAAI,EAAU,EAAK,kBAAkB,EAAO,GAQ5C,OANA,EAAK,WAAW,UAAU,WAAW,CACnC,WAAY,EAAQ,OAAO,WAAW,KAAI,SAAC,GAAM,OAAA,EAAE,KAAK,IACxD,iBAAkB,EAAQ,OAAO,SACjC,WAAW,IAGN,C,IAGT,OAAA,eAAA,KAAA,W,gDAAU,SACR,EACA,QAAA,IAAA,OAA0C,GAE1C,IAAM,EAAS,EAAK,iBAAiB,EAAM,GAQ3C,OANA,EAAK,WAAW,UAAU,WAAW,CACnC,WAAY,EAAO,QAAU,CAAC,EAAO,OAAS,GAC9C,iBAAkB,EAAO,QAAU,GAAK,CAAC,GACzC,WAAW,IAGN,C,IAGT,OAAA,eAAA,KAAA,c,0CAAa,MAAA,SAAC,GACZ,IAAM,EAAc,EAAK,YAAY,GAOrC,OALA,EAAK,WAAW,UAAU,aAAa,CACrC,aAAc,EAAc,CAAC,GAAe,GAC5C,sBAAuB,EAAc,GAAK,CAAC,KAGtC,C,IAGT,OAAA,eAAA,KAAA,e,0CAAc,MAAA,SACZ,GAEA,IAAI,EAAU,EAAK,aAAa,GAOhC,OALA,EAAK,WAAW,UAAU,aAAa,CACrC,aAAc,EAAQ,OAAO,WAAW,KAAI,SAAC,GAAM,OAAA,EAAE,KAAK,IAC1D,sBAAuB,EAAQ,OAAO,SAAS,KAAI,SAAC,GAAM,OAAA,EAAE,KAAK,MAG5D,C,IAGT,OAAA,eAAA,KAAA,mB,0CAAkB,MAAA,SAAC,GACjB,IAAM,EAAU,EAAK,aAAa,GAAQ,KAAI,SAAC,GAAM,OAAA,EAAE,EAAE,IACzD,EAAK,YAAY,E,IAGnB,OAAA,eAAA,KAAA,mB,gDAAkB,SAAC,EAAgB,GACjC,GAAK,GAAW,EAAhB,CAEA,IAAM,EAAmB,CACvB,OAAM,EACN,OAAM,GAEF,EAAU,EAAK,aAAa,GAC/B,QACC,SAAC,GACC,OAAA,wBAAwB,EAAE,eAAgB,IAC1C,wBAAwB,EAAE,eAAgB,EAD1C,IAGH,KAAI,SAAC,GAAM,OAAA,EAAE,EAAE,IAClB,EAAK,YAAY,EAbO,C,IAgB1B,OAAA,eAAA,KAAA,gB,gDAAe,SACb,EACA,QAAA,IAAA,OAAyC,GAEzC,IAAM,EAAwB,EAAK,uBAAuB,EAAM,GAChE,IAAK,EAAsB,QAAS,OAAO,EAE3C,IAAM,EAAmB,EAAK,uBAAuB,EAAK,QAC1D,IAAK,EAAiB,QAAS,OAAO,EACtC,IAAM,EAAmB,EAAK,uBAAuB,EAAK,QAC1D,OAAK,EAAiB,SAGnB,GACD,EAAK,sBAAsB,EAAK,OAAQ,EAAK,QAEtC,YAAY,2CAMZ,IAHP,EAAK,WAAW,UAAU,eAAe,CACvC,OAAQ,EAAiB,MACzB,OAAQ,EAAiB,QAGpB,YACL,mEAIG,gBAnB+B,C,IAsBxC,OAAA,eAAA,KAAA,0B,gDAAyB,SAAC,EACxB,GACA,YADA,IAAA,OAAyC,GACpC,EACD,EAAK,IAAyB,iBAAZ,EAAK,GAClB,YACL,4BAA4B,EAAK,GAAE,sCAElC,GAA4B,EAAK,IAAM,EAAK,OAAO,IAAI,EAAK,IACxD,YACL,4BAA4B,EAAK,GAAE,8CAGnC,EAAK,OAAO,SAAW,EAAK,OAAO,OAC9B,YAAY,iDAEd,gBAbW,YAAY,mB,IAgBhC,OAAA,eAAA,KAAA,0B,0CAAyB,MAAA,SACvB,GAEA,IAAM,EAAO,EAAK,WAAW,WAAW,QAAQ,EAAS,QACzD,IAAK,EACH,OAAO,YACL,SAAS,EAAS,OAAM,uCAE5B,IAAM,EAAO,EAAK,QAAQ,EAAS,QACnC,OAAK,EAKE,mBAAmB,GAJjB,YACL,iBAAiB,EAAS,OAAuC,iCAAA,EAAS,OAAS,I,IAMzF,OAAA,eAAA,KAAA,mB,0CAAkB,MAAA,SAAC,G,MACjB,OAEI,QAFJ,EAAO,EAAK,WAAW,WACpB,QAAQ,EAAS,eAChB,IAAA,OAAA,EAAA,EAAA,QAAQ,EAAS,O,IAGvB,OAAA,eAAA,KAAA,yB,gDAAwB,SACtB,EACA,GAEA,QAAS,EAAK,4BAA4B,EAAQ,E,IAGpD,OAAA,eAAA,KAAA,+B,gDAA8B,SAC5B,EACA,GAEA,IAAM,EAAQ,EAAK,sBAAsB,IAAI,EAAO,QACpD,GAAI,EACF,OAAO,EAAM,MACX,SAAC,GACC,OAAC,wBAAwB,EAAE,eAAgB,IACzC,wBAAwB,EAAE,eAAgB,IAC3C,wBAAwB,EAAE,eAAgB,IACzC,wBAAwB,EAAE,eAAgB,EAH5C,G,IAQR,OAAA,eAAA,KAAA,qB,gDAA4B,SAC1B,EACA,GAKA,OAHc,EAAM,KAAI,SAAC,GACvB,OAAA,EAAK,iBAAiB,EAAM,EAA5B,G,IAKJ,OAAA,eAAA,KAAA,oB,gDAA2B,SACzB,EACA,G,MAEM,EAAmB,EAAK,aAAa,EAAM,GACjD,IAAK,EAAiB,QACpB,OAAO,iBAAiB,EAAM,EAAiB,OAGjD,GAAI,EAA2B,CAC7B,IAAI,EAAc,EAAK,IAAK,EAAK,QAAQ,EAAK,KAC9C,EAAc,EAAK,4BACjB,EAAK,OACL,EAAK,UAGL,EAAK,YAAY,EAAY,GAEhC,CAED,IAAM,EAAU,IAAI,UAClB,EAAK,WACE,QADQ,EACf,EAAK,UAAE,IAAA,IAAI,sBAAqB,SAAC,GAAO,OAAA,EAAK,OAAO,IAAI,EAAG,IAC3D,GAMF,OAJA,EAAK,OAAO,IAAI,EAAQ,GAAI,GAC5B,EAAK,8BAA8B,EAAS,EAAK,OAAO,QACxD,EAAK,8BAA8B,EAAS,EAAK,OAAO,QAEjD,mBAAmB,E,IAG5B,OAAA,eAAA,KAAA,iC,gDAAwC,SAAC,EAAiB,GACxD,IAAI,EAAQ,EAAK,sBAAsB,IAAI,GACtC,EAEO,EAAM,SAAS,IACzB,EAAM,KAAK,GAFX,EAAK,sBAAsB,IAAI,EAAQ,CAAC,G,IAM5C,OAAA,eAAA,KAAA,gB,0CAAuB,MAAA,SACrB,GAEA,OAAO,EAAQ,KAAI,SAAC,GAClB,IAAM,EAAc,EAAK,YAAY,GACrC,OAAI,EAAoB,mBAAmB,GAC/B,iBAAiB,EAC/B,G,IAGF,OAAA,eAAA,KAAA,e,0CAAsB,MAAA,SAAC,GACrB,IAAM,EAAe,EAAK,OAAO,IAAI,GACrC,GAAI,EAAc,CAChB,IAAM,EAAY,EAAa,SAa/B,OAXA,EAAK,mCACH,EAAa,GACb,EAAa,eAAe,QAE9B,EAAK,mCACH,EAAa,GACb,EAAa,eAAe,QAG9B,EAAK,WAAW,eAAe,SAAS,GACxC,EAAK,OAAO,OAAO,GACZ,CACR,C,IAKH,OAAA,eAAA,KAAA,sC,gDAA6C,SAC3C,EACA,GAEA,IAAI,EAAa,EAAK,sBAAsB,IAAI,GAC5C,KACF,EAAa,EAAW,QAAO,SAAC,GAAM,OAAA,EAAE,KAAO,CAAT,KACvB,OAAS,EACtB,EAAK,sBAAsB,IAAI,EAAQ,GAEvC,EAAK,sBAAsB,OAAO,G,IA3TtC,KAAK,cAAgB,IAAI,kBAAkB,GAC3C,KAAK,SACL,wBAAmB,MACnB,KAAK,WAAa,C,CA4TtB,OAvSE,OAAA,eAAI,EAAK,UAAA,SAAT,IAAA,WACE,OAAO,KAAK,M,kCAGd,OAAA,eAAI,EAAY,UAAA,gBAAhB,IAAA,WACE,OAAO,KAAK,a,kCAkSf,CAAD,CAvUA,GChBa,UAA2C,wBAAS,SAAC,GAAE,IAAA,EAAI,EAAA,KACtE,OAAO,uBAAA,cAAA,OAAK,UAAU,gCAAgC,EAAK,MAAQ,EAAK,MAAQ,EAAK,GACvF,ICUa,uBAAyB,SACpC,EACA,EACA,GAGA,GAAI,iBADe,EAGjB,IADA,IAAM,EAFW,EAEU,eAClB,EAAI,EAAG,EAAI,EAAQ,OAAQ,IAAK,CACvC,IAAM,EAAS,EAAQ,GACvB,GAAI,cAAe,EAAQ,CACzB,IAAM,EAAa,EAAmB,UACtC,GAAI,GAAmB,EAAU,SAAS,GACxC,OAAO,EACF,GAAI,EAAU,SAAS,GAC5B,OAAO,CAEV,CACF,CAGH,OAAO,CACT,EAQM,SAAU,2BAA2B,GACzC,OAAO,KAAK,IAAI,KAAK,IAAI,EAAS,IAAK,KAAK,IAAI,EAAS,KAAO,CAClE,CC5CO,IAAM,aAAe,WAAM,OAAA,iBAAW,iBAAX,E,SCDlB,UACd,EACA,EACA,GAEA,IAAM,EAAqB,aAAe,IAE1C,iBAAU,WACR,GAAK,GAAW,GAAQ,GAAU,EAAI,MAAM,SAAW,EAOvD,OAHA,EAAmB,QAAU,EAAI,MAAM,OACvC,EAAI,MAAM,OAAS,EAEZ,WACL,EAAI,MAAM,OAAS,EAAmB,OACxC,CACF,GAAG,CAAC,EAAQ,GACd,CAEgB,SAAA,iBACd,EACA,GAKA,UAAU,EAAQ,EAHO,eAAc,aACd,IAAI,QAG/B,CCpBO,IAAM,uBAAyB,SAAC,GACrC,IAAM,EAAY,eAEZ,EAAuB,cAAgB,GACvC,EAAqB,aAA8B,MACnD,EAAwB,mBAAY,WACxC,QAAI,EAAmB,UACrB,aAAa,EAAmB,SAChC,EAAmB,QAAU,MACtB,EAGX,GAAG,CAAC,IACE,EAAiB,cAAgB,GAEjC,EAAW,eACf,WAAM,OACJ,eAAgB,WACd,EAAU,SAAU,C,EAEtB,eAAgB,WACd,EAAU,SAAU,C,EAEtB,QAAS,aACT,OAAQ,SAAC,G,IAAE,EAAQ,EAAA,SAAE,EAAK,EAAA,MAAE,EAAQ,EAAA,SAAE,EAAM,EAAA,OAC1C,GACG,EAAqB,UACtB,IACA,2BAA2B,GAH7B,CASA,GAFA,KAGG,EAAU,eAEV,EAAU,UAAU,WAAa,EAAe,QAIjD,OAFA,EAAqB,SAAU,OAC/B,IAMF,GACE,EAAU,UAAU,WACnB,EAAU,cACX,EAAe,QAMf,OAJA,EAAU,UAAU,eACpB,EAAe,SAAU,EACzB,EAAqB,SAAU,OAC/B,IAIG,EAAU,eACb,EAAe,QAAU,EAAU,UAAU,cAAc,IAG7D,EAAU,UAAU,OAClB,cAAc,EAAO,EAAI,EAAU,aAAa,MAhCjD,C,EAmCH,YAAa,SAAC,G,IAAE,EAAK,EAAA,MAAE,EAAM,EAAA,OAC3B,EAAqB,QACnB,qBAAqB,KAAW,EAAU,UAAU,SAElD,EAAqB,SACvB,IACI,EAAU,qBACZ,EAAmB,QAAU,YAAW,WAClC,EAAmB,UACrB,EAAmB,QAAU,KAExB,EAAU,UAAU,UACvB,EAAU,eAAe,OAAO,G,GAGnC,iBAGL,G,EAGJ,UAAW,SAAC,GAAE,IAAA,EAAG,EAAA,IAAE,EAAQ,EAAA,SAAE,EAAM,EAAA,OAAE,EAAO,EAAA,QAAE,EAAO,EAAA,QACnD,GAAI,EAAqB,QAAS,CAChC,EAAqB,SAAU,EAC/B,IAAM,EAA2B,IAE7B,EAAe,UACjB,EAAU,UAAU,eACpB,EAAe,SAAU,GAIvB,EAAU,oBAAsB,GAAO,GACzC,EAAU,eAAe,OACvB,GACC,EAAU,gBAAgB,gBAAgB,kCACzC,EACA,EACA,EACA,GAIP,C,EAEH,GACF,CAAC,EAAW,IAGd,iBAAW,EAAU,CACnB,OAAQ,EAAU,IAClB,aAAc,CAAE,SAAS,GACzB,SAAU,EAAU,gBAAgB,gBACjC,iCAGL,iBAAiB,EAAU,aAAc,QACzC,UAAU,EAAU,aAAc,OAAQ,EAAU,IAAI,QAC1D,EAEM,cAAsB,IAE5B,SAAS,qBACP,GAEA,OAAO,uBACL,EACA,mCACA,oCAEJ,CAEO,IAAM,mCACX,kDACW,oCACX,mDC9IW,YAAc,wBAA8B,SAAC,GAAE,IAAA,EAAI,EAAA,KACvD,EAAmB,eAAc,gBACxC,uBAAuB,GAEvB,IAAI,EAAY,kCAAkC,mCAQlD,OANG,EAAgB,gBAAgB,iCAGjC,GAAa,6CAIb,qCAAC,YAAY,SAAS,CAAA,MAAO,GACzB,uBACE,cAAA,OAAA,GAAI,EAAK,GACT,UAAW,EACX,MAAO,CACL,UAAW,aAAa,EAAK,SAAS,GAAE,OAAO,EAAK,SAAS,GAAO,MACpE,OAAQ,EAAK,SAAW,QAAK,GAE/B,IAAK,EAAK,KAEV,uBAAC,cAAA,EAAK,oBAAoB,UACxB,CAAA,OAAQ,EACR,SAAU,EAAK,oBAAoB,YAK/C,IAEa,YAAc,uBAAM,cAAgC,MCvCpD,0BAA4B,SACvC,EACA,EACA,EACA,GAEA,YAFA,IAAA,OAAkC,GAE3B,eAAQ,WACb,IAAK,EAAU,MAAO,GAEtB,IAAM,EAAwC,CAAE,SAAU,YAuF1D,OArFK,SAAS,KAAyB,EAAyB,GAC3D,QAAQ,KAAmB,EAAmB,CAAC,EAAG,IAEtC,aAAb,GACF,EAAc,KAAO,EAAiB,GAAK,EAC3C,EAAc,IAAM,EAAiB,GACjC,IAAoB,EAAc,UAAY,qBAC5B,gBAAb,GACT,EAAc,KAAO,EAAiB,GAAK,EAC3C,EAAc,IAAM,MACpB,EAAc,UAAY,cACxB,EAAqB,OAAS,GACf,iBAAA,EAAiB,GAAE,QACd,gBAAb,IACT,EAAc,KAAO,EAAiB,GAAK,EAC3C,EAAc,QAAU,EAAiB,GACrC,IAAoB,EAAc,UAAY,qBAGnC,aAAb,GACF,EAAc,KAAO,EAAiB,GACtC,EAAc,IAAM,EAAiB,GAAK,EACtC,IAAoB,EAAc,UAAY,qBAC5B,eAAb,GACT,EAAc,KAAO,MACrB,EAAc,UAAY,yBACxB,EAAiB,GAAE,SACb,EAAqB,OAAS,GAAC,IACvC,EAAc,IAAM,EAAiB,GAAK,GACpB,cAAb,IACT,EAAc,OAAS,EAAiB,GACxC,EAAc,IAAM,EAAiB,GAAK,EACtC,IAAoB,EAAc,UAAY,qBAGnC,cAAb,GACF,EAAc,OAAS,EAAiB,GAAK,EAC7C,EAAc,IAAM,EAAiB,GACjC,IAAoB,EAAc,UAAY,oBAC5B,iBAAb,GACT,EAAc,OAAS,EAAiB,GAAK,EAC7C,EAAc,IAAM,MACpB,EAAc,UAAY,cACxB,EAAqB,MAAQ,GACd,iBAAA,EAAiB,GAAE,QACd,iBAAb,IACT,EAAc,OAAS,EAAiB,GAAK,EAC7C,EAAc,QAAU,EAAiB,GACrC,IAAoB,EAAc,UAAY,oBAGnC,gBAAb,GACF,EAAc,KAAO,EAAiB,GACtC,EAAc,QAAU,EAAiB,GAAK,EAC1C,IAAoB,EAAc,UAAY,oBAC5B,kBAAb,GACT,EAAc,KAAO,MACrB,EAAc,UAAY,yBACxB,EAAiB,GAAE,SACb,EAAqB,MAAQ,GAAC,IACtC,EAAc,QAAU,EAAiB,GAAK,GACxB,iBAAb,IACT,EAAc,OAAS,EAAiB,GACxC,EAAc,QAAU,EAAiB,GAAK,EAC1C,IAAoB,EAAc,UAAY,oBAGnC,sBAAb,GACF,EAAc,KAAO,EAAiB,GAAK,EAC3C,EAAc,IAAM,EAAiB,GAAK,EACtC,IAAoB,EAAc,UAAY,0BAC5B,uBAAb,GACT,EAAc,OAAS,EAAiB,GAAK,EAC7C,EAAc,IAAM,EAAiB,GAAK,EACtC,IAAoB,EAAc,UAAY,yBAC5B,0BAAb,GACT,EAAc,OAAS,EAAiB,GAAK,EAC7C,EAAc,QAAU,EAAiB,GAAK,EAC1C,IAAoB,EAAc,UAAY,wBAC5B,yBAAb,IACT,EAAc,KAAO,EAAiB,GAAK,EAC3C,EAAc,QAAU,EAAiB,GAAK,EAC1C,IAAoB,EAAc,UAAY,yBAG7C,C,GACN,CAAC,EAAU,EAAwB,EAAkB,GAC1D,EAca,mBAA4B,CACvC,WACA,cACA,cAEA,WACA,aACA,YAEA,YACA,eACA,eAEA,cACA,gBACA,eAEA,oBACA,qBACA,wBACA,wBC/HW,uBAAyB,SACpC,GAEM,IAAA,EAIF,eAHY,EAAY,EAAA,WAAA,aAC1B,EAAY,EAAA,aACZ,EAAe,EAAA,gBAGX,EAAW,eACf,WAAM,OACJ,OAAQ,SAAC,G,MAAE,EAAK,EAAA,MACd,GAAK,GAAc,EAAU,SAA7B,CACA,IAAM,EAAc,EAAa,KACd,QAAnB,EAAA,EAAa,cAAM,IAAA,KAAE,YAAY,cAAc,EAAO,EAAI,GAFnB,C,EAIzC,YAAa,SAAC,G,IAAE,EAAK,EAAA,MAAE,EAAE,EAAA,GACvB,GAAK,GAAc,EAAU,oBAA7B,CAEA,IAAM,EAAkB,EAAM,OAG9B,EAAgB,sBACb,EAAuB,WAG1B,IAAM,EAAa,EAAgB,wBAC/B,EAAc,eAAe,EAAI,CAAC,EAAW,EAAG,EAAW,IAE3D,EAAa,aAAa,EAAW,KACvC,EAAU,UAAW,EAb2B,C,EAgBpD,UAAW,WACJ,IACL,EAAU,UAAW,EACrB,EAAa,c,EAEf,eAAgB,WACT,GAED,EAAU,sBACZ,EAAU,SAAU,EACpB,EAAa,uBAAuB,G,EAGxC,eAAgB,WACT,IACL,EAAU,SAAU,EACpB,EAAa,yBAAyB,G,EAExC,GACF,CAAC,EAAW,EAAc,IAMtB,EAAO,iBAAW,EAAU,CAChC,aAAc,CAAE,SAAS,GACzB,KAAM,CAAE,QAAS,CAAE,SAAS,IAC5B,SAAU,EAAgB,gBAAgB,iCAK5C,OAFA,oBAAmB,aAAS,EAAT,EAAW,UAAU,WAEjC,CACL,UAAU,aAAA,EAAA,EAAW,UACrB,KAAM,EAEV,EC3Da,KAA6B,wBAAS,SAAC,GAC1C,IAAA,EAAoB,eAAc,gBAEpC,EADO,iBAAW,aACD,QAAQ,EAAM,IAE/B,EAAiB,0BACrB,aAAS,EAAT,EAAW,SACX,aAAS,EAAT,EAAW,qBACX,aAAS,EAAT,EAAW,kBAGL,EAAS,uBAAuB,GAAU,KASlD,GAPA,iBAAU,WAEJ,GAAa,EAAU,6BAA+B,IACxD,WAAW,+BAEf,GAAG,CAAC,EAAW,aAAS,EAAT,EAAW,gCAErB,EACH,OAAO,KAGT,IAAI,EAAY,oCAMhB,OALK,EAAgB,gBAAgB,iCAEnC,GAAa,6CAIb,uBAAA,cAAA,MAAA,SAAA,CACE,MAAO,EACP,GAAI,EAAU,OACd,UAAW,EACX,IAAK,EAAU,IACf,IAAK,EAAU,QACX,KAEJ,uBAAC,cAAA,EAAU,oBAAoB,UAC7B,CAAA,OAAQ,EACR,SAAU,EAAU,oBAAoB,WAIhD,ICpDM,YACJ,wBAAS,SAAC,G,IAAE,EAAM,EAAA,OAAE,EAAQ,EAAA,SACpB,EAAiB,eACrB,WAAM,OACJ,qBAAsB,aAAA,EAAA,EAAU,qBAChC,UAAW,OACX,QAAS,aAAA,EAAA,EAAU,QACnB,eAAgB,mBAChB,MAAO,aAAA,EAAA,EAAU,MACjB,YAAa,CAAE,mBAAoB,CAAC,WAAY,YACjD,GACD,CAAC,IAGC,EAAQ,OACR,EAAO,UAAY,EAAO,QAAS,EAAQ,mBACtC,EAAO,SAAU,EAAQ,WACzB,EAAO,UAAS,EAAQ,WAEjC,IAAM,EAAU,WAAW,EAAgB,GAE3C,OACE,uBAAA,cAAA,OAAK,UAAW,EAAQ,UAAW,MAAO,EAAQ,QAC/C,aAAA,EAAA,EAAU,YAAa,uBAAC,cAAA,EAAS,UAAS,CAAC,KAAM,IAEjD,MAAM,QAAQ,aAAQ,EAAR,EAAU,SACvB,aAAQ,EAAR,EAAU,MAAM,KAAI,SAAC,GAAM,OAAA,qCAAC,KAAI,CAAC,GAAI,EAAE,GAAI,IAAK,EAAE,IAAM,KAGhE,IAmBW,mBAA4D,CACvE,KAAM,CAAC,kCACP,QAAS,CAAC,0CACV,SAAU,CAAC,4CAGP,SAAU,WACd,GAKA,MAAO,CACL,UAAW,YACX,SAAQ,SAAA,CACN,UAAW,WACR,GAGT,CAOO,IAAM,gCAAkC,SAC7C,GAEA,OAAA,WAAU,kBAAA,GACL,GAAQ,CACX,MAAO,CACL,CAAE,GAAI,QAAS,KAAM,QAAS,SAAU,eACxC,CAAE,GAAI,SAAU,KAAM,SAAU,SAAU,mBAJ9C,EAQW,8BAAgC,SAC3C,GAEA,OAAA,WAAU,kBAAA,GACL,GAAQ,CACX,MAAO,CACL,CAAE,GAAI,QAAS,KAAM,QAAS,SAAU,cACxC,CAAE,GAAI,SAAU,KAAM,SAAU,SAAU,oBAJ9C,EAQW,0BAA4B,SACvC,GAEA,OAAA,WAAU,kBAAA,GACL,GAAQ,CACX,MAAO,CAAC,CAAE,GAAI,QAAS,KAAM,QAAS,SAAU,kBAFlD,EAKW,wBAA0B,SACrC,GAEA,OAAA,WAAU,kBAAA,GACL,GAAQ,CACX,MAAO,CAAC,CAAE,GAAI,QAAS,KAAM,QAAS,SAAU,iBAFlD,EAKW,2BAA6B,SACxC,GAEA,OAAA,WAAU,kBAAA,GACL,GAAQ,CACX,MAAO,CAAC,CAAE,GAAI,SAAU,KAAM,SAAU,SAAU,mBAFpD,EAKW,yBAA2B,SACtC,GAEA,OAAA,WAAU,kBAAA,GACL,GAAQ,CACX,MAAO,CAAC,CAAE,GAAI,SAAU,KAAM,SAAU,SAAU,oBAFpD,EAKW,eAAiB,SAAC,GAC7B,OAAA,WAAU,kBAAA,GACL,GAAQ,CACX,MAAO,CACL,CAAE,GAAI,OAAQ,SAAU,eACxB,CAAE,GAAI,MAAO,SAAU,cACvB,CAAE,GAAI,QAAS,SAAU,gBACzB,CAAE,GAAI,SAAU,SAAU,oBAN9B,ECvHF,cAAA,WAgBE,SAAA,I,MAGC,EAAA,KAlBD,OAAA,eAAA,KAAA,qB,0CAGI,MAAA,IAAI,kBAAgB,EAAA,GACtB,EAAC,wBAAyB,WAAW,CAAE,MAAO,KAC9C,EAAuB,wBAAE,kCACzB,EAAqB,sBAAE,gCACvB,EAAc,eAAE,0BAChB,EAAgB,iBAAE,4BAClB,EAAe,gBAAE,2BACjB,EAAiB,kBAAE,6BACnB,EAAI,KAAE,iBACN,MACF,OAAA,eAAA,KAAA,a,yDAWA,OAAA,eAAA,KAAA,U,0CAAS,MAAA,SAAC,GACR,EAAK,kBAAkB,OAAO,GAC9B,EAAK,YAAY,aAAG,EAAH,EAAK,S,IAOxB,OAAA,eAAA,KAAA,e,0CAAc,MAAA,SAAC,GACR,EAE0B,iBAAb,EAChB,EAAK,UAAY,CAAC,EAAU,GACnB,MAAM,QAAQ,IAAiC,IAApB,EAAS,SAC7C,EAAK,UAAY,GAJjB,EAAK,UAAY,I,IAnBnB,KAAK,cACL,wBAAmB,K,CAyBvB,OAtBE,OAAA,eAAI,EAAgB,UAAA,oBAApB,IAAA,WACE,OAAO,KAAK,iB,kCAQd,OAAA,eAAI,EAAQ,UAAA,YAAZ,IAAA,WACE,OAAO,KAAK,S,kCAYf,CAAD,CA3CA,GCrBa,kBAAoB,SAAC,EAAkB,GAClD,IAAM,EAAgB,aAAa,EAAU,GAAE,OAAO,EAAU,GAAE,MAClE,OAAI,EAEK,EAAgB,KADL,SAAS,EAAK,KAGzB,CAEX,EAOa,wBAA0B,SACrC,EACA,GAEA,OAAA,IAAM,GACL,GAAK,GAAK,EAAE,OAAS,EAAE,MAAQ,eAAe,EAAE,OAAQ,EAAE,OAD3D,ECCF,UAAA,WAgBE,SAAA,EAAY,EAAsB,EAAY,GAA9C,IAsBC,EAAA,KArCD,OAAA,eAAA,KAAA,O,yDACA,OAAA,eAAA,KAAA,U,yDACA,OAAA,eAAA,KAAA,a,yDACA,OAAA,eAAA,KAAA,U,yDACA,OAAA,eAAA,KAAA,Q,yDACA,OAAA,eAAA,KAAA,S,yDACA,OAAA,eAAA,KAAA,a,yDACA,OAAA,eAAA,KAAA,Y,yDACA,OAAA,eAAA,KAAA,S,yDACA,OAAA,eAAA,KAAA,uB,yDACA,OAAA,eAAA,KAAA,kB,yDACA,OAAA,eAAA,KAAA,iB,yDAEA,OAAA,eAAA,KAAA,c,yDA0BA,OAAA,eAAA,KAAA,U,0CAAS,MAAA,SAAC,G,MACR,EAAK,aAA+B,QAAnB,EAAC,aAAA,EAAA,EAAU,gBAAQ,IAAA,IAAI,CAAC,EAAG,IAC5C,EAAK,SAAS,aAAQ,EAAR,EAAU,MACxB,EAAK,SAAS,aAAQ,EAAR,EAAU,MACxB,EAAK,UAAU,aAAQ,EAAR,EAAU,OACzB,EAAK,SAAS,aAAQ,EAAR,EAAU,OACxB,EAAK,uBAAuB,aAAQ,EAAR,EAAU,oBACtC,EAAK,kBAAkB,aAAQ,EAAR,EAAU,c,IAGnC,OAAA,eAAA,KAAA,U,0CAAS,MAAA,W,QAAmB,OAAA,SAAA,GACvB,SAAS,CACV,GAAI,EAAK,IACT,MAAO,EAAK,OACZ,SAAU,EAAK,UACf,MAAO,MAAM,KAAK,EAAK,QAAQ,KAAI,SAAC,GAAW,OAAT,EAAA,GAAG,EAAA,GAAQ,QAAF,IAC/C,KAAM,EAAK,MACX,KAAM,EAAK,KACX,mBAA4C,QAAxB,EAAA,EAAK,2BAAmB,IAAA,SAAI,EAChD,cAAkC,QAAnB,EAAA,EAAK,sBAAc,IAAA,SAAI,IAExC,IAUF,OAAA,eAAA,KAAA,Y,0CAAW,MAAA,SACT,GAEA,IAAM,EAAS,EAAK,UAAU,GAM9B,OAJI,GACF,EAAK,WAAW,UAAU,iBAAiB,EAAM,GAG5C,C,IAGT,OAAA,eAAA,KAAA,a,0CAAoB,MAAA,SAClB,GAEA,IAAM,EAAa,eAAS,EAC5B,GAAI,EAAK,SAAW,EAApB,CAGA,IAAM,EAAW,EAAK,OAEtB,OADA,EAAK,OAAS,EACP,CACL,SAAU,EACV,SAAU,EAAK,OALhB,C,IAkBH,OAAA,eAAA,KAAA,e,gDAAc,SACZ,EACA,QAAA,IAAA,OAA+B,GAE/B,IAAM,EAAS,EAAK,aAAa,EAAa,GAM9C,OAJI,GACF,EAAK,WAAW,UAAU,oBAAoB,EAAM,GAG/C,C,IAGT,OAAA,eAAA,KAAA,gB,gDAAuB,SACrB,EACA,QAAA,IAAA,OAA+B,GAE/B,IAAM,EAAO,EAAK,WAAW,cAAc,SAQ3C,IAPK,GAAkB,IACrB,EAAc,CACZ,aAAa,EAAY,GAAI,EAAK,IAClC,aAAa,EAAY,GAAI,EAAK,OAIjC,eAAe,EAAa,EAAK,WAAtC,CACE,IAAM,EAAS,EAAK,UAGpB,OAFA,EAAK,UAAY,EAEV,CACL,SAAU,EACV,SAAU,EAAK,UAEI,C,IAUzB,OAAA,eAAA,KAAA,U,gDAAS,SACP,EACA,QAAA,IAAA,OAA+B,GAE/B,IAAI,EAAS,UAAU,EAAK,SAAU,GAClC,OAA+B,EAC7B,EAAO,EAAK,WAAW,cAAc,SAE3C,IAAK,GAAkB,EAAM,CAC3B,IAAM,EAAO,iBAAiB,EAAK,SAAS,GAAI,EAAO,GAAI,EAAK,IAC1D,EAAO,iBAAiB,EAAK,SAAS,GAAI,EAAO,GAAI,EAAK,IAChE,EAAY,CAAC,EAAK,UAAW,EAAK,WAClC,EAAS,CAAC,EAAK,MAAO,EAAK,MAC5B,CAGD,OADA,EAAK,YAAY,GAAQ,GAClB,C,IAOT,OAAA,eAAA,KAAA,W,0CAAU,MAAA,SACR,GAEA,IAAM,EAAS,EAAK,SAAS,GAM7B,OAJI,GACF,EAAK,WAAW,UAAU,gBAAgB,EAAM,GAG3C,C,IAGT,OAAA,eAAA,KAAA,Y,0CAAmB,MAAA,SACjB,GAEA,IAAM,EAAa,eAAS,EAC5B,GAAI,EAAK,QAAU,EAAnB,CAGA,IAAM,EAAW,EAAK,MAEtB,OADA,EAAK,MAAQ,EACN,CACL,SAAU,EACV,SAAU,EAAK,MALhB,C,IAqBH,OAAA,eAAA,KAAA,W,0CAAU,MAAA,SAAC,GACT,IAAM,EAAS,EAAK,SAAS,GAM7B,OAJI,GACF,EAAK,WAAW,UAAU,gBAAgB,EAAM,GAG3C,C,IAGT,OAAA,eAAA,KAAA,Y,0CAAmB,MAAA,SAAC,GAClB,GAAI,EAAK,QAAU,EAAnB,CAGA,IAAM,EAAW,EAAK,MAEtB,OADA,EAAK,MAAQ,eAAS,EACf,CACL,SAAU,EACV,SAAU,EAAK,MALhB,C,IAiBH,OAAA,eAAA,KAAA,Y,0CAAW,MAAA,SAAC,G,YACJ,EAGC,QAHgB,EACiD,QADjD,EAC0C,QAD1C,EACpB,EAAK,oBAAoB,gBAAqC,IAAA,OAAA,EAAA,EAAA,aAAO,IAAA,OAAA,EAAA,EAAA,KACpE,SAAC,GAAM,OAAA,EAAE,EAAF,WACJ,IAAA,IAAA,GAED,EAA8C,QAAlC,EAAG,aAAA,EAAA,EAAW,KAAI,SAAC,GAAM,OAAA,EAAE,EAAF,WAAS,IAAA,IAAA,GAE9C,EAAW,IAAI,IAAG,eAAK,EAAsB,IAEnD,EAAK,OAAS,IAAI,IAClB,EAAS,SAAQ,SAAC,GAChB,OAAA,EAAK,OAAO,IACV,EACA,EAAK,iBACH,EACA,aAAA,EAAA,EAAW,MAAK,SAAC,GAAM,OAAA,EAAE,KAAO,CAAT,KAJ3B,G,IAUJ,OAAA,eAAA,KAAA,W,0CAAU,MAAA,SAAC,GACT,OAAI,EACK,EAAK,OAAO,IAAI,QAClB,C,IAGT,OAAA,eAAA,KAAA,W,0CAAU,MAAA,SAAC,GACT,IAAK,GAAQ,EAAK,OAAO,IAAI,EAAK,IAChC,OAAO,cAET,IAAM,EAAU,EAAK,iBAAiB,EAAK,GAAI,GAE/C,OADA,EAAK,OAAO,IAAI,EAAQ,GAAI,GACrB,mBAAmB,E,IAG5B,OAAA,eAAA,KAAA,c,0CAAa,MAAA,SAAC,GACZ,SAAI,IAAU,EAAK,OAAO,IAAI,MAC5B,EAAK,OAAO,OAAO,GACnB,EAAK,WAAW,WAAW,gBAAgB,EAAK,IAAK,IAC9C,E,IAKX,OAAA,eAAA,KAAA,2B,0CAA0B,MAAA,SAAC,GACzB,IAAM,EAAO,EAAK,QAAQ,GAC1B,GAAI,EAAM,OAAO,EAEf,KAAM,iBAAiB,EAAM,iCAAiC,EAAK,IAAG,G,IAG1E,OAAA,eAAA,KAAA,oB,gDAA2B,SAAC,EAAY,GACtC,OAAO,IAAI,UAAU,EAAK,WAAY,EAAM,EAAI,E,IAelD,OAAA,eAAA,KAAA,0B,0CAAyB,MAAA,WACvB,EAAK,OAAO,SAAQ,SAAC,GAAM,OAAA,EAAE,mBAAF,G,IA6B7B,OAAA,eAAA,KAAA,yB,0CAAwB,MAAA,SACtB,GAEA,IAAM,EAAS,EAAK,uBAAuB,GAM3C,OAJI,GACF,EAAK,WAAW,UAAU,8BAA8B,EAAM,GAGzD,C,IAGT,OAAA,eAAA,KAAA,0B,0CAAiC,MAAA,SAC/B,GAEA,IAAM,EAAa,UAAU,GAAS,OAAQ,EAC9C,GAAI,EAAK,sBAAwB,EAAjC,CAIA,IAAM,EAAW,EAAK,oBAEtB,OADA,EAAK,oBAAsB,EACpB,CACL,SAAU,EACV,SAAU,EAAK,oBANhB,C,IAkBH,OAAA,eAAA,KAAA,oB,0CAAmB,MAAA,SACjB,GAEA,IAAM,EAAS,EAAK,kBAAkB,GAMtC,OAJI,GACF,EAAK,WAAW,UAAU,yBAAyB,EAAM,GAGpD,C,IAGT,OAAA,eAAA,KAAA,qB,0CAA4B,MAAA,SAC1B,GAEA,IAAM,EAAa,UAAU,GAAS,OAAQ,EAC9C,GAAI,EAAK,iBAAmB,EAA5B,CAIA,IAAM,EAAW,EAAK,eAEtB,OADA,EAAK,eAAiB,EACf,CACL,SAAU,EACV,SAAU,EAAK,eANhB,C,IA1XD,KAAK,WAAa,EAElB,KAAK,IAAM,EACX,KAAK,KAAO,IAAI,oBAAoB,KAAM,EAAU,cACpD,KAAK,WAAY,EACjB,KAAK,UAAW,EAChB,KAAK,eAAgB,EACrB,KAAK,OAAO,GAEZ,wBAAmB,KAAM,CAEvB,YAAY,IAGd,eACE,WAAM,OAAC,EAAK,IAAK,EAAK,OAAQ,EAAK,MAAO,EAAK,MAAO,EAAK,OAArD,IACN,WACE,EAAK,IAAI,6BACT,EAAK,wBACP,G,CA0XN,OA/VE,OAAA,eAAI,EAAE,UAAA,MAAN,IAAA,WACE,OAAO,KAAK,G,kCAGd,OAAA,eAAI,EAAK,UAAA,SAAT,IAAA,WACE,OAAO,KAAK,M,kCA8Bd,OAAA,eAAI,EAAQ,UAAA,YAAZ,IAAA,WACE,OAAO,KAAK,S,kCAsEd,OAAA,eAAI,EAAI,UAAA,QAAR,IAAA,W,MACE,OAAiB,QAAjB,EAAO,KAAK,aAAK,IAAA,IAAI,sB,kCA8BvB,OAAA,eAAI,EAAO,UAAA,WAAX,IAAA,WACE,OAAO,KAAK,Q,EAGd,IAAA,SAAY,GACV,KAAK,SAAW,C,kCAGlB,OAAA,eAAI,EAAI,UAAA,QAAR,IAAA,WACE,OAAO,KAAK,K,kCAyBd,OAAA,eAAI,EAAG,UAAA,OAAP,IAAA,WACE,OAAO,KAAK,I,kCAGd,OAAA,eAAI,EAAK,UAAA,SAAT,IAAA,WACE,OAAO,KAAK,M,kCA4Dd,OAAA,eAAI,EAAsB,UAAA,0BAA1B,IAAA,WACE,IAAM,EAAY,OAAO,OAAO,KAAK,OAAO,KAAI,SAAC,GAAM,OACrD,EAAE,GACF,EAAE,eAFmD,IAIvD,OAAO,OAAO,YAAY,E,kCAG5B,OAAA,eAAI,EAAc,UAAA,kBAAlB,IAAA,WACE,OAAO,KAAK,WAAW,WAAW,aAAa,KAAK,I,kCAOtD,OAAA,eAAI,EAAe,UAAA,mBAAnB,IAAA,WACE,OAAO,kBAAkB,KAAK,U,kCAGhC,OAAA,eAAI,EAAmB,UAAA,uBAAvB,IAAA,WAEE,OAD6B,KAAK,WAAW,cAAa,iBAClC,aAAa,KAAK,K,kCAG5C,OAAA,eAAI,EAAQ,UAAA,YAAZ,IAAA,WACE,OAAO,KAAK,S,EAGd,IAAA,SAAa,GACX,KAAK,UAAY,EACZ,IACH,KAAK,cAAe,E,kCAIxB,OAAA,eAAI,EAAkB,UAAA,sBAAtB,IAAA,WACE,YAAoC,IAA7B,KAAK,oBACR,KAAK,WAAW,gBAAgB,gBAAgB,cAChD,KAAK,mB,kCA+BX,OAAA,eAAI,EAAa,UAAA,iBAAjB,IAAA,WACE,YAC2B,IAAxB,KAAK,eACF,KAAK,WAAW,gBAAgB,gBAAgB,SAChD,KAAK,iBAAmB,KAAK,kB,kCAgCrC,OAAA,eAAI,EAAY,UAAA,gBAAhB,IAAA,WACE,OAAO,KAAK,a,EAGd,IAAA,SAAiB,GACX,KAAK,eAAiB,IACxB,KAAK,cAAgB,E,kCAG1B,CAAD,CA9ZA,GAgaA,SAAS,aAAa,EAAa,GACjC,IAAM,EAAM,EAAM,EAClB,OAAI,KAAK,IAAI,GAAO,EAAO,EAAU,EAAM,EAAO,KAAK,KAAK,GAAO,EACvD,EAAM,CACpB,CAEA,SAAS,iBAAiB,EAAa,EAAa,GAClD,GAAY,IAAR,EAAW,MAAO,CAAE,MAAO,EAAK,UAAW,GAE/C,IAAI,EACA,EAAa,EAAM,EAEnB,EAAO,KAAK,MAAM,EAAa,GAQnC,OAPK,EAAM,GAAK,EAAa,GAAO,EAAM,GAAK,EAAa,KAC1D,GAAQ,EAAI,KAAK,KAAK,KAEV,IAAV,IAAa,EAAO,GAExB,EAAS,EAAO,EAEX,EAAM,GAAK,EAAS,GAAS,EAAM,GAAK,EAAS,EAC7C,CAAE,MAAO,EAAK,UAAW,GACpB,CAAE,MAAO,EAAQ,UAAW,EAAM,EAAS,EAC3D,CC1bA,IAAA,WAAA,WAIE,SAAA,EAAY,GAAZ,IAGC,EAAA,KAND,OAAA,eAAA,KAAA,U,0CAAiB,MAAA,IAAI,MACrB,OAAA,eAAA,KAAA,c,yDAWA,OAAA,eAAA,KAAA,U,0CAAS,MAAA,SAAC,GAER,GADA,EAAK,OAAS,IAAI,IACd,EAAU,CACZ,IAAI,EAAU,EAAK,kBAAkB,GAAU,GAE/C,EAAK,WAAW,UAAU,WAAW,CACnC,WAAY,EAAQ,OAAO,WAAW,KAAI,SAAC,GAAM,OAAA,EAAE,KAAK,IACxD,iBAAkB,EAAQ,OAAO,SACjC,WAAW,GAEd,C,IAGH,OAAA,eAAA,KAAA,U,0CAAS,MAAA,WACP,OAAA,MAAM,KAAK,EAAK,QAAQ,KAAI,SAAC,GAAiB,OAAb,EAAA,GAAO,EAAA,GAAY,QAAN,G,IAEhD,OAAA,eAAA,KAAA,Y,gDAAW,SACT,EACA,QAAA,IAAA,OAAgC,GAEhC,IAAI,EAAU,EAAK,kBAAkB,EAAO,GAQ5C,OANA,EAAK,WAAW,UAAU,WAAW,CACnC,WAAY,EAAQ,OAAO,WAAW,KAAI,SAAC,GAAM,OAAA,EAAE,KAAK,IACxD,iBAAkB,EAAQ,OAAO,SACjC,WAAW,IAGN,C,IAGT,OAAA,eAAA,KAAA,qB,gDAA4B,SAC1B,EACA,GAMA,OAJc,EAAM,KAAI,SAAC,GACvB,OAAA,EAAK,iBAAiB,EAAM,EAA5B,G,IAMJ,OAAA,eAAA,KAAA,W,gDAAU,SACR,EACA,QAAA,IAAA,OAAgC,GAEhC,IAAM,EAAS,EAAK,iBAAiB,EAAM,GAQ3C,OANA,EAAK,WAAW,UAAU,WAAW,CACnC,WAAY,EAAO,QAAU,CAAC,EAAO,OAAS,GAC9C,iBAAkB,EAAO,QAAU,GAAK,CAAC,GACzC,WAAW,IAGN,C,IAGT,OAAA,eAAA,KAAA,oB,gDAA2B,SACzB,EACA,G,MAEA,IAAK,EACH,OAAO,iBAAiB,EAAM,oCAEhC,IAAK,GAAmB,EAAK,IAAM,EAAK,OAAO,IAAI,EAAK,IACtD,OAAO,iBAAiB,EAAM,iBAAiB,EAAK,GAAoB,oBAE1E,IAAM,EAAU,IAAI,UAClB,EAAK,WACE,QADQ,EACf,EAAK,UAAE,IAAA,IAAI,sBAAqB,SAAC,GAAO,OAAA,EAAK,OAAO,IAAI,EAAG,IAC3D,GAGF,OADA,EAAK,OAAO,IAAI,EAAQ,GAAI,GACrB,mBAAmB,E,IAG5B,OAAA,eAAA,KAAA,e,0CAAc,MAAA,SACZ,GAEA,IAAK,MAAM,QAAQ,IAA8B,GAAlB,EAAQ,OAAa,MAAO,GAE3D,IAAM,EAAU,EAAQ,KACtB,SAAC,GACC,IAAM,EAAc,EAAK,YAAY,GACrC,OAAI,EAAoB,mBAAmB,GAC/B,iBAAiB,EAC/B,IAQF,OALA,EAAK,WAAW,UAAU,aAAa,CACrC,aAAc,EAAQ,OAAO,WAAW,KAAI,SAAC,GAAM,OAAA,EAAE,KAAK,IAC1D,sBAAuB,EAAQ,OAAO,SAAS,KAAI,SAAC,GAAM,OAAA,EAAE,KAAK,MAG5D,C,IAGT,OAAA,eAAA,KAAA,c,0CAAa,MAAA,SAAC,GACZ,IAAM,EAAc,EAAK,YAAY,GAOrC,OALA,EAAK,WAAW,UAAU,aAAa,CACrC,aAAc,EAAc,CAAC,GAAe,GAC5C,sBAAuB,EAAc,GAAK,CAAC,KAGtC,C,IAGT,OAAA,eAAA,KAAA,e,0CAAsB,MAAA,SAAC,GACrB,IAAM,EAAO,EAAK,OAAO,IAAI,GAC7B,GAAI,EAAM,CACR,IAAM,EAAY,EAAK,SAIvB,OAHA,EAAK,WAAW,WAAW,gBAAgB,GAC3C,EAAK,WAAW,eAAe,SAAS,GACxC,EAAK,OAAO,OAAO,GACZ,CACR,C,IAIH,OAAA,eAAA,KAAA,W,0CAAU,MAAA,SAAC,GACT,OAAO,EAAK,OAAO,IAAI,E,IAMzB,OAAA,eAAA,KAAA,uB,0CAAsB,MAAA,WACpB,IAAI,EAAuB,CACzB,OAAO,kBACP,OAAO,mBAEL,EAA2B,CAC7B,OAAO,kBACP,OAAO,mBAuBT,OApBA,EAAK,OAAO,SAAQ,SAAC,G,MACb,EAAM,EAAK,SACX,EAAiC,QAA7B,EAAG,EAAK,IAAI,yBAAiB,IAAA,IAAI,CAAC,EAAG,GAE/C,EAAgB,CACd,KAAK,IAAI,EAAc,GAAI,EAAI,IAC/B,KAAK,IAAI,EAAc,GAAI,EAAI,KAGjC,EAAoB,CAClB,KAAK,IAAI,EAAkB,GAAI,EAAI,GAAK,EAAK,IAC7C,KAAK,IAAI,EAAkB,GAAI,EAAI,GAAK,EAAK,IAEjD,IAEwB,GAApB,EAAK,OAAO,OACd,EAAgB,CAAC,EAAG,GACpB,EAAoB,CAAC,IAAK,MAGrB,CACL,cAAa,EACb,kBAAiB,EACjB,KAAM,eAAe,EAAmB,G,IAxK1C,wBAAmB,MACnB,KAAK,WAAa,C,CA0KtB,OAvKE,OAAA,eAAI,EAAK,UAAA,SAAT,IAAA,WACE,OAAO,KAAK,M,kCAsKf,CAAD,CAhLA,GCbM,iBAEF,wBAAS,SAAC,G,IAAE,EAAM,EAAA,OAAE,EAAQ,EAAA,SACxB,EAAiB,eACrB,WAAM,OACJ,qBAAsB,aAAA,EAAA,EAAU,qBAChC,UAAW,OACX,QAAS,aAAA,EAAA,EAAU,QACnB,eAAgB,wBAChB,MAAO,aAAA,EAAA,EAAU,MAClB,GACD,CAAC,IAGC,EAAQ,OACR,EAAO,SAAU,EAAQ,WACpB,EAAO,SAAW,EAAO,mBAAoB,EAAQ,UACrD,EAAO,UAAY,EAAO,mBAAoB,EAAQ,UACtD,EAAO,KAAK,SAAU,EAAQ,gBAC9B,EAAO,KAAK,UAAS,EAAQ,gBAEtC,IAAM,EAAU,WAAW,EAAgB,GAE3C,OAAO,uBAAK,cAAA,OAAA,UAAW,EAAQ,UAAW,MAAO,EAAQ,OAC3D,IAmBa,wBAET,CACF,KAAM,CAAC,uCACP,QAAS,CAAC,+CACV,SAAU,CAAC,gDACX,QAAS,CAAC,+CACV,eAAgB,CAAC,mDACjB,gBAAiB,CAAC,qDAGd,SAAU,uBACd,GAEA,MAAO,CACL,UAAW,iBACX,SAAU,EAEd,CCzDA,IAAA,cAAA,WAQE,SAAA,I,MAEC,EAAA,KATD,OAAA,eAAA,KAAA,yB,0CAGI,MAAA,IAAI,kBAAgB,EAAA,GACtB,EAAC,wBAAyB,yBAC1B,MAUF,OAAA,eAAA,KAAA,U,0CAAS,MAAA,SAAC,GACR,EAAK,qBAAqB,OAAO,E,IARjC,wBAAmB,K,CAUvB,OAPE,OAAA,eAAI,EAAoB,UAAA,wBAAxB,IAAA,WACE,OAAO,KAAK,qB,kCAMf,CAAD,CAnBA,GCNA,eAAA,WAGE,SAAA,IAAA,IAEC,EAAA,KAJD,OAAA,eAAA,KAAA,kB,0CAAyB,MAAA,IAAI,MAsB7B,OAAA,eAAA,KAAA,U,gDAAS,SAAC,EAAsB,GAG9B,YAH8B,IAAA,OAA8B,GACxD,GAAe,EAAK,eAEnB,EAAK,eAAe,IAAI,KAC3B,EAAK,UAAW,EAChB,EAAK,eAAe,IAAI,IACjB,E,IAIX,OAAA,eAAA,KAAA,U,gDAAS,SACP,EACA,QAAA,IAAA,OAAyC,GAErC,EAAK,SACP,EAAK,SAAS,GAEd,EAAK,OAAO,EAAM,E,IAItB,OAAA,eAAA,KAAA,Y,0CAAW,MAAA,SAAC,GACV,QAAI,EAAK,eAAe,IAAI,KAC1B,EAAK,UAAW,EAChB,EAAK,eAAe,OAAO,IACpB,E,IAIX,OAAA,eAAA,KAAA,e,0CAAc,MAAA,WACZ,EAAK,eAAe,SAAQ,SAAC,GAAM,OAAC,EAAE,UAAW,CAAd,IACnC,EAAK,eAAe,O,IAGtB,OAAA,eAAA,KAAA,iB,0CAAgB,MAAA,SAAC,GACf,EAAa,SAAQ,SAAC,GAAM,OAAA,EAAK,SAAS,EAAd,G,IAtD5B,wBAAmB,K,CAwDvB,OArDE,OAAA,eAAI,EAAa,UAAA,iBAAjB,IAAA,WACE,OAAO,MAAM,KAAK,KAAK,e,kCAGzB,OAAA,eAAI,EAAa,UAAA,iBAAjB,IAAA,WACE,OAAO,KAAK,cAAc,QACxB,SAAC,GAAM,OAAA,aAAa,SAAb,G,kCAIX,OAAA,eAAI,EAAa,UAAA,iBAAjB,IAAA,WACE,OAAO,KAAK,cAAc,QACxB,SAAC,GAAM,OAAA,aAAa,SAAb,G,kCAyCZ,CAAD,CA5DA,GCIA,UAAA,WASE,SAAY,EAAA,EAAgC,GAA5C,IAIC,EAAA,KAZD,OAAA,eAAA,KAAA,sB,0CAA6B,MAAA,IAAI,MAGjC,OAAA,eAAA,KAAA,wB,0CAA+B,MAAA,IAAI,MAEnC,OAAA,eAAA,KAAA,mB,yDACA,OAAA,eAAA,KAAA,c,yDAYA,OAAA,eAAA,KAAA,iB,0CAAgB,MAAA,SAAC,GACf,SAAK,EAAW,eAAiB,EAAK,YAElC,EAAW,SACb,EAAK,gBAAgB,cACnB,EAAK,gBAAgB,cAAc,QACjC,SAAC,GAAM,OAAA,aAAa,YAAc,EAAE,aAAa,MAIrD,EAAK,gBAAgB,cACrB,EAAK,gBAAgB,OAAO,IAG9B,EAAK,gBAAgB,cAAc,SAAQ,SAAC,GAC1C,EAAE,cAAe,EACjB,EAAK,mBAAmB,IAAI,GAG5B,EAAE,YAAY,EAAE,SAClB,IAEA,EAAK,WAAW,YAAY,CAC1B,MAAO,EAAK,gBAAgB,iBAGvB,E,IAOT,OAAA,eAAA,KAAA,U,0CAAS,MAAA,SAAC,GACR,EAAK,mBAAmB,SAAQ,SAAC,GAC/B,IAAM,EAAsB,UAC1B,EACA,EAAK,qBAAqB,IAAI,EAAE,KAE5B,EAAe,EAAE,OAAO,GAC9B,EAAK,qBAAqB,IAAI,EAAE,GAAI,EACtC,IAEA,EAAK,WAAW,KAAK,CACnB,MAAO,EAAK,gBAAgB,cAC5B,MAAO,G,IAIX,OAAA,eAAA,KAAA,gB,0CAAe,MAAA,WACb,EAAK,mBAAmB,SAAQ,SAAC,GAAM,OAAC,EAAE,cAAe,CAAlB,IACvC,EAAK,mBAAmB,QACxB,EAAK,qBAAqB,QAC1B,EAAK,WAAW,UAAU,CACxB,MAAO,EAAK,gBAAgB,e,IA/D9B,wBAAmB,MACnB,KAAK,gBAAkB,EACvB,KAAK,WAAa,C,CAgEtB,OA7DE,OAAA,eAAI,EAAQ,UAAA,YAAZ,IAAA,WACE,OAAwC,IAAjC,KAAK,mBAAmB,I,kCA4DlC,CAAD,CA5EA,GCLA,gBAGE,SAAY,GAAZ,IAGC,EAAA,KALD,OAAA,eAAA,KAAA,c,yDAOA,OAAA,eAAA,KAAA,W,0CAAU,MAAA,SAAC,GACT,EAAQ,QAAQ,EAAK,W,IALrB,wBAAmB,MACnB,KAAK,WAAa,C,ECOtB,UAAA,WAeE,SAAY,EAAA,EAAsB,GAAlC,IAmBC,EAAA,KAjCD,OAAA,eAAA,KAAA,iB,yDAEA,OAAA,eAAA,KAAA,e,yDACA,OAAA,eAAA,KAAA,e,yDACA,OAAA,eAAA,KAAA,mB,yDACA,OAAA,eAAA,KAAA,c,yDACA,OAAA,eAAA,KAAA,oB,yDAEA,OAAA,eAAA,KAAA,oB,yDACA,OAAA,eAAA,KAAA,kB,yDACA,OAAA,eAAA,KAAA,kB,yDACA,OAAA,eAAA,KAAA,kB,yDACA,OAAA,eAAA,KAAA,c,yDAmEA,OAAA,eAAA,KAAA,e,gDAAc,SAAC,EAAsB,GACnC,EAAK,cAAc,8BACnB,EAAK,YAAY,OAAO,GACxB,EAAK,YAAY,OAAO,E,IAG1B,OAAA,eAAA,KAAA,U,0CAAS,MAAA,WAAqD,OAC5D,MAAO,EAAK,YAAY,SACxB,MAAO,EAAK,YAAY,SACzB,IAED,OAAA,eAAA,KAAA,kB,0CAAiB,MAAA,SAAC,GAChB,EAAK,iBAAiB,OAAO,aAAA,EAAA,EAAU,SACvC,EAAK,eAAe,OAAO,aAAA,EAAA,EAAU,OACrC,EAAK,eAAe,OAAO,aAAA,EAAA,EAAU,OACrC,EAAK,eAAe,OAAO,aAAA,EAAA,EAAU,OACrC,EAAK,WAAW,OAAO,aAAA,EAAA,EAAU,U,IAhFjC,KAAK,iBAAmB,IAAI,gBAC5B,KAAK,eAAiB,IAAI,cAC1B,KAAK,eAAiB,IAAI,cAC1B,KAAK,eAAiB,IAAI,cAC1B,KAAK,WAAa,IAAI,UAAU,MAEhC,KAAK,cAAgB,IAAI,aAAa,MAEtC,KAAK,iBAAmB,IAAI,gBAAgB,MAC5C,KAAK,YAAc,IAAI,WAAW,MAClC,KAAK,YAAc,IAAI,WAAW,MAClC,KAAK,gBAAkB,IAAI,eAC3B,KAAK,WAAa,IAAI,UAAU,KAAK,gBAAiB,KAAK,YAE3D,KAAK,eAAe,GAChB,GACF,KAAK,YAAY,EAAM,MAAO,EAAM,M,CAkE1C,OA9DE,OAAA,eAAI,EAAY,UAAA,gBAAhB,IAAA,WACE,OAAO,KAAK,a,kCAGd,OAAA,eAAI,EAAU,UAAA,cAAd,IAAA,WACE,OAAO,KAAK,W,kCAGd,OAAA,eAAI,EAAU,UAAA,cAAd,IAAA,WACE,OAAO,KAAK,W,kCAGd,OAAA,eAAI,EAAe,UAAA,mBAAnB,IAAA,WACE,OAAO,KAAK,gB,kCAGd,OAAA,eAAI,EAAa,UAAA,iBAAjB,IAAA,WACE,OAAO,KAAK,c,kCAGd,OAAA,eAAI,EAAa,UAAA,iBAAjB,IAAA,WACE,OAAO,KAAK,c,kCAGd,OAAA,eAAI,EAAa,UAAA,iBAAjB,IAAA,WACE,OAAO,KAAK,c,kCAGd,OAAA,eAAI,EAAS,UAAA,aAAb,IAAA,WACE,OAAO,KAAK,U,kCAGd,OAAA,eAAI,EAAc,UAAA,kBAAlB,IAAA,WACE,OAAO,KAAK,e,kCAGd,OAAA,eAAI,EAAS,UAAA,aAAb,IAAA,WACE,OAAO,KAAK,U,kCAGd,OAAA,eAAI,EAAe,UAAA,mBAAnB,IAAA,WACE,OAAO,KAAK,gB,kCAqBf,CAAD,CAlGA,GCRa,iBAAmB,uBAAM,cAAgC,MAEzD,eAAiB,wBAAS,SAAC,GAChC,IAAA,EAA6C,eACjD,WAAM,OACJ,IAAI,UAAU,EAAM,SAAU,EAAM,WACpC,EAAM,SACN,EAAM,UACP,GACD,IANK,EAAS,EAAA,GAAE,EAAe,EAAA,GAAE,EAAY,EAAA,GA8B/C,OArBA,iBAAU,WACJ,IAAoB,EAAM,UAC5B,EAAU,eAAe,EAAM,S,GAEhC,CAAC,EAAW,EAAM,SAAU,IAE/B,iBAAU,W,YACJ,IAAiB,EAAM,WACzB,EAAU,YACc,QADH,EACJ,QADI,EACnB,EAAM,iBAAS,IAAA,OAAA,EAAA,EAAE,aAAK,IAAA,IAAI,GACA,QAA1B,EAAe,QAAf,EAAA,EAAM,iBAAS,IAAA,OAAA,EAAA,EAAE,aAAS,IAAA,IAAA,G,GAG7B,CAAC,EAAW,EAAM,UAAW,IAEhC,iBAAU,WACJ,EAAM,WACR,EAAM,SAAS,QAAU,E,GAE1B,CAAC,EAAW,EAAM,WAGnB,uBAAA,cAAC,iBAAiB,SAAS,CAAA,MAAO,GAC/B,EAAM,SAGb,IC3Ca,aAAe,SAC1B,GAEM,IAAA,EAAmB,eAAS,GAA1B,EAAA,OAAE,EAAW,EAAA,GACd,EAAO,gBAAS,WAAM,OAC3B,MAAO,EACP,OAAQ,CACN,WAAI,GACF,OAAO,EAAI,K,EAEb,WAAI,CAAQ,GACG,EAAI,QACJ,IACX,EAAI,MAAQ,EACZ,GAAY,SAAC,GAAM,OAAA,EAAI,CAAC,I,GAVH,IAc1B,GAEH,OAAO,EAAI,MACb,ECda,uBAAyB,SACpC,GAEA,IAAM,EAAY,eAEZ,EAAY,cAAa,GACzB,EAAsB,cAAO,GAC7B,EAAsB,aAA8B,MAEpD,EAAW,eACf,WACE,OAAA,aAAqB,UACjB,CACE,eAAgB,WACd,EAAU,SAAU,C,EAEtB,eAAgB,WACd,EAAU,SAAU,C,EAEtB,YAAa,WACX,EAAU,SAAW,EAAU,UAAU,SACrC,EAAU,UACZ,EAAoB,SAAU,EAE1B,EAAU,qBACZ,EAAoB,QAAU,YAAW,WAClC,EAAoB,UACvB,EAAoB,SAAU,EAC9B,EAAU,eAAe,OAAO,G,GAEjC,c,EAIT,UAAW,SAAC,GAAE,IAAA,EAAG,EAAA,IAAE,EAAO,EAAA,QAAE,EAAQ,EAAA,SAAE,EAAM,EAAA,OAAE,EAAO,EAAA,QAC/C,EAAU,UACZ,EAAU,SAAU,EAChB,EAAoB,SACtB,aAAa,EAAoB,SAIjC,EAAU,oBACV,IACC,EAAoB,UAErB,EAAoB,SAAU,EAC9B,EAAU,eAAe,OACvB,GACC,EAAU,gBAAgB,gBAAgB,kCACzC,EACA,EACA,EACA,K,GAOZ,EAjDJ,GAkDF,CAAC,EAAW,IAQd,MAAO,CAAE,KALI,iBAAW,EAAU,CAChC,aAAc,CAAE,SAAS,GACzB,SAAU,EAAU,gBAAgB,gBAAgB,iCAIxD,EAEM,YAAsB,IC3Ef,YAAc,wBACzB,SAAC,GAAE,IAAA,EAAI,EAAA,KACG,EAAS,uBAAuB,GAAK,KAE7C,OACE,uBAAA,cAAA,SACE,uBAAC,cAAA,EAAK,oBAAoB,UAAS,CACjC,KAAM,EACN,OAAQ,EACR,SAAU,EAAK,oBAAoB,WAI3C,ICbW,WAAa,wBAEvB,SAAC,GAAE,IAAA,EAAS,EAAA,UACb,OACE,uBAAA,cAAA,OAAK,UAAU,4BACb,uBAAA,cAAC,WAAa,MACd,uBAAA,cAAA,KAAG,MAAO,CAAE,UAAW,IACrB,uBAAA,cAAC,UAAS,OAIlB,IAEM,UAAY,wBAAS,WACjB,IAAA,EAAe,eAAc,WAErC,OACE,uBAAA,cAAA,uBAAA,SAAA,KACG,MAAM,KAAK,EAAW,OAAO,KAAI,SAAC,GAAG,EAAA,GAAE,IAAA,EAAI,EAAA,GAAM,OAChD,uBAAA,cAAC,YAAW,CAAC,IAAK,EAAK,GAAI,KAAM,GADe,IAGjD,uBAAA,cAAC,YAAW,CAAC,IAAI,eAAe,KAAM,EAAW,eAGxD,IAEM,WAAa,wBAAS,WAClB,IAAA,EAAkB,eAAc,cAExC,OACE,uBAAA,cAAA,YACG,EAAc,WAAW,KAAI,SAAC,EAAQ,GAAM,OAC3C,uBAAA,cAAC,EAAM,CAAC,IAAK,GACd,IAGP,ICpCa,WAAa,wBAEvB,SAAC,GAAE,IAAA,EAAS,EAAA,UACb,OACE,uBAAA,cAAA,OAAK,UAAU,2BAA2B,MAAO,CAAE,UAAW,IAC5D,uBAAA,cAAC,UAAS,MAGhB,IAEM,UAAY,wBAAS,WACjB,IAAA,EAAe,eAAc,WACrC,OACE,uBAAA,cAAA,uBAAA,SAAA,KACG,MAAM,KAAK,EAAW,OAAO,KAAI,SAAC,GAAG,EAAA,GAAE,IAAA,EAAI,EAAA,GAAM,OAChD,uBAAA,cAAC,YAAW,CAAC,IAAK,EAAK,GAAI,KAAM,G,IAIzC,ICTM,SAAU,uBACd,GAEA,IAAM,EAAY,eACZ,EAAe,EAAU,aAEzB,EAAY,cAAa,GACzB,EAAW,eACf,WAAM,OACJ,OAAQ,SAAC,G,IAAE,EAAQ,EAAA,SAAE,EAAK,EAAA,MACnB,EAAU,UAAW,GAG1B,EAAa,UAAU,UAAU,EAAa,OAAQ,G,EAExD,YAAa,SAAC,G,IAAE,EAAK,EAAA,MAAE,EAAM,EAAA,OACvB,EAAY,GACd,IAIG,EAAU,gBAAgB,gBAAgB,YAGT,IAAjC,EAAqB,UAG1B,EAAU,SAAU,E,EAEtB,UAAW,SAAC,GAAE,IAAA,EAAG,EAAA,IACX,EAAU,UACR,GACF,EAAU,eAAe,cAE3B,EAAU,SAAU,E,EA1BpB,GA8BN,CAAC,EAAW,EAAc,EAAa,IAKzC,OAFA,iBAAiB,EAAU,QAAS,YAE7B,CACT,CCrDM,SAAU,wBACd,GAEM,IAAA,EAAoC,eAAlC,EAAY,EAAA,aAAE,EAAe,EAAA,gBAE/B,EAAY,cAAa,GACzB,EAAa,aAAoB,CACrC,SAAU,EACV,OAAQ,CAAC,EAAG,GACZ,eAAgB,CAAC,EAAG,KAGhB,EAAW,eACf,WAAM,OACJ,QAAS,SAAC,G,IAAO,EAAQ,EAAA,GAAA,GAAG,EAAM,EAAA,OAChC,GAAK,EAAU,SAAY,EAAa,IAAI,WAAW,GAAY,GAAnE,CAGA,IAAM,EAAa,EAAgB,gBAAgB,WAC/C,eAAe,EAAQ,EAAW,QAAQ,QACzC,CAAC,EAAG,GAEH,EAA0B,eAC9B,EACA,EAAW,QAAQ,gBAGrB,EAAa,qBACX,EACA,EACA,EAAW,EAAW,QAAQ,UAGhC,EAAW,QAAU,CACnB,SAAQ,EACR,OAAM,EACN,eAAgB,EAAW,QAAQ,eAnBpC,C,EAsBH,aAAc,SAAC,GAAO,IAAA,EAAQ,EAAA,GAAA,GAAG,EAAM,EAAA,OAAE,EAAK,EAAA,MAC5C,GACG,EAAgB,gBAAgB,cACjC,EAAO,IACN,EAAa,IAAI,WAClB,GAAY,GAJd,CASA,IAAM,EAAO,EAAa,IAAI,QAAQ,wBACtC,EAAW,QAAU,CACnB,SAAQ,EACR,OAAM,EACN,eAAgB,CAAC,EAAK,KAAM,EAAK,MAEnC,EAAU,SAAU,CARnB,C,EAUH,WAAY,WAAM,OAAC,EAAU,SAAU,CAAM,EAC9C,GACD,CAAC,EAAa,IAAI,QAAS,EAAW,EAAc,EAAQ,IAG9D,OAAO,CACT,CC7DM,SAAU,uBACd,GAEM,IAAA,EAAoC,eAAlC,EAAY,EAAA,aAAE,EAAe,EAAA,gBAE/B,EAAW,eACf,WAAM,OACJ,QAAS,SAAC,G,IAAE,EAA0B,EAAA,UAAb,EAAA,OAAE,EAAU,EAAA,GAAG,EAAK,EAAA,MAC3C,GACG,EAAa,IAAI,SACjB,EAAgB,gBAAgB,YAFnC,CAKA,WAAO,iBACP,IAAM,EAAO,EAAa,IAAI,QAAQ,wBAEhC,EAAyB,eAC7B,CAAC,EAAM,QAAS,EAAM,SACtB,CAAC,EAAK,KAAM,EAAK,MAGf,EAAS,GACT,EAAa,IACf,EAAS,EAAI,GAGf,EAAM,qBAAqB,CAAC,EAAG,GAAI,EAAwB,EAdzD,C,EANA,GAuBN,CAAC,EAAa,IAAK,EAAO,IAG5B,OAAO,CACT,CCnCa,IAAA,0BAA4B,WACjC,IAAA,EAAoC,eAAlC,EAAY,EAAA,aAAE,EAAe,EAAA,gBAE/B,EAAgB,mBACpB,SACE,GACG,OAAA,EAAM,SAAW,EAAa,IAAI,OAAO,GAC9C,CAAC,EAAa,MAGV,EAAe,uBAAuB,GACtC,EAAgB,wBAAwB,GACxC,EAAe,uBAAuB,GAE5C,iBAAU,2BAAA,GAEH,GACA,GACA,GAEL,CACE,OAAQ,EAAa,IACrB,aAAc,CAAE,SAAS,GACzB,SAAU,EAAgB,gBAAgB,gCAGhD,EC7Ba,kBAAoB,wBAAS,WAClC,IAAA,EAAoC,eAAlC,EAAe,EAAA,gBAAE,EAAY,EAAA,aAErC,OACE,uBAAA,cAAA,OAAK,UAAU,wCACb,uBAAA,cAAC,EAAgB,yBAAyB,UAAS,CACjD,cAAe,EAAa,OAC5B,YAAa,EAAa,KAC1B,SAAU,EAAgB,yBAAyB,WAI3D,ICZa,mBAAqB,wBAAS,WACzC,IAAM,EAAY,eACZ,EAA4B,EAAU,gBAAgB,0BAC5D,OACE,EAA0B,WACxB,uBAAA,cAAC,EAA0B,UAAS,CAClC,UAAW,EACX,SAAU,EAA0B,UAI5C,ICfA,SAAS,YAAY,EAAK,QACX,IAAR,IAAiB,EAAM,IAC5B,IAAI,EAAW,EAAI,SAEnB,GAAK,GAA2B,oBAAb,SAAnB,CAEA,IAAI,EAAO,SAAS,MAAQ,SAAS,qBAAqB,QAAQ,GAC9D,EAAQ,SAAS,cAAc,SACnC,EAAM,KAAO,WAEI,QAAb,GACE,EAAK,WACP,EAAK,aAAa,EAAO,EAAK,YAKhC,EAAK,YAAY,GAGf,EAAM,WACR,EAAM,WAAW,QAAU,EAE3B,EAAM,YAAY,SAAS,eAAe,GAnBU,CAqBxD,C,6+JCHa,IAAA,YAAc,wBAA6B,SAAC,GACvD,IAAM,EAAY,eAClB,4BAEA,iBAAgB,WACd,EAAU,aAAa,IAAI,6BAC3B,EAAU,WAAW,MAAM,SAAQ,SAAC,GAAM,OAAA,EAAE,wBAAF,GAC5C,IAEM,IAAA,EAAoC,eAAS,CACjD,OAAQ,EAAU,aAAa,OAC/B,KAAM,EAAU,aAAa,OAFxB,EAAgB,EAAA,GAAd,EAAM,EAAA,OAAE,EAAI,EAAA,KAAI,EAAa,EAAA,GAKtC,iBAAU,WACR,EAAc,CACZ,OAAQ,EAAU,aAAa,OAC/B,KAAM,EAAU,aAAa,MAEjC,GAAG,CAAC,EAAU,aAAa,OAAQ,EAAU,aAAa,OAE1D,IAAM,EAAwB,cAAQ,GAEtC,uBAAgB,WAEZ,EAAU,aAAa,mBAAqB,EAAsB,UAElE,EAAsB,QAAU,EAAU,aAAa,mBAEvD,EAAU,UAAU,wBAEpB,EAAc,CACZ,OAAQ,EAAU,aAAa,OAC/B,KAAM,EAAU,aAAa,O,GAGhC,CAAC,EAAU,aAAa,qBAE3B,IAAI,EAAY,kCAEb,EAAU,gBAAgB,gBAAgB,iCAG3C,GAAa,6CAGf,IAAM,EAAY,kBAAkB,EAAQ,GAE5C,OACE,4CACE,IAAK,EAAU,aAAa,IAC5B,MAAO,EAAM,cAAa,YACf,EACX,UAAW,GAEX,uBAAA,cAAC,kBAAoB,MACrB,uBAAA,cAAC,WAAU,CAAC,UAAW,IACvB,uBAAA,cAAC,WAAU,CAAC,UAAW,IACtB,EAAM,SACP,uBAAA,cAAC,mBAAkB,MAGzB,IAEA,SAAS,gBAAgB,GACvB,IAAM,EAAY,eAElB,iBAAU,WAER,OADA,OAAO,iBAAiB,SAAU,GAC3B,WAAM,OAAA,OAAO,oBAAoB,SAAU,EAArC,CACf,GAAG,CAAC,EAAW,GACjB,CCvFM,SAAU,QAAQ,GACtB,OACE,qCAAC,eAAc,CACb,UAAW,EAAM,UACjB,SAAU,EAAM,SAChB,SAAU,EAAM,UAEhB,uBAAC,cAAA,YAAY,CAAA,SAAU,EAAM,WAGnC,CCgCM,SAAU,gBAAgB,GAC9B,IAAM,EAAQ,eAER,EAA0B,eAAgB,CAAC,EAAG,IAA7C,EAAQ,EAAA,GAAE,EAAW,EAAA,GACtB,EAA4B,eAAgB,CAAC,EAAG,IAA/C,EAAS,EAAA,GAAE,EAAY,EAAA,GACxB,EAAsB,gBAAS,GAA9B,EAAM,EAAA,GAAE,EAAS,EAAA,GAClB,EAAiB,eACjB,EAAa,aAAuB,MACpC,EAAe,cAAgB,GAE/B,EAAuB,mBAC3B,SAAC,GACC,GAAI,EAAe,QAAS,CAC1B,IAAM,EAAiB,eAAe,EAAiB,CACrD,EAAe,QAAQ,KACvB,EAAe,QAAQ,MAEzB,GACE,EAAe,IAAM,GACrB,EAAe,IAAM,GACrB,EAAe,IAAM,EAAe,QAAQ,OAC5C,EAAe,IAAM,EAAe,QAAQ,OAE5C,OAAO,cACL,eAAe,EAAgB,EAAM,aAAa,QAClD,EAAI,EAAM,aAAa,KAG5B,CACH,GACA,CAAC,EAAgB,IAkDnB,OA/CA,iBACE,CACE,OAAQ,SAAC,G,MAAE,EAAQ,EAAA,SAAE,EAAE,EAAA,GAGhB,EAAa,UAChB,EAAa,GAED,QAAZ,EAAA,EAAM,cAAM,IAAA,KAAA,KAAZ,EAAe,CACb,SAAU,EAAqB,GAC/B,gBAAiB,EACjB,MAAK,I,EAIX,YAAa,SAAC,G,QAAE,EAAE,EAAA,GAAE,EAAM,EAAA,OAExB,IAAkB,KADiB,QAAjB,EAAA,EAAM,mBAAW,IAAA,OAAA,EAAA,EAAA,KAAjB,EAAoB,CAAE,gBAAiB,EAAI,MAAK,KAIhE,OAFA,EAAa,SAAU,OACvB,IAGA,EAAa,SAAU,EACvB,EAAe,QAA0C,QAAhC,EAAA,EAAM,aAAa,IAAI,eAAS,IAAA,OAAA,EAAA,EAAA,wBACzD,EAAY,GACZ,GAAU,E,EAGd,UAAW,SAAC,G,MAAE,EAAE,EAAA,GACT,EAAa,UAChB,GAAU,GACV,EAAa,CAAC,EAAG,IAEL,QAAZ,EAAA,EAAM,cAAM,IAAA,KAAA,KAAZ,EAAe,CACb,SAAU,EAAqB,GAC/B,gBAAiB,EACjB,MAAK,I,GAKb,CACE,OAAQ,EACR,aAAc,CAAE,SAAS,KAK3B,4CAAK,UAAU,qCAAqC,IAAK,GACtD,EAAM,UACP,uBAAA,cAAA,OACE,UAAU,+CACV,MAAO,CACL,UAAW,kBAAkB,EAAU,GAAE,mBAAmB,EAAU,GAAc,aACpF,QAAS,EAAS,EAAI,EACtB,cAAe,EAAS,OAAS,OACjC,KAAM,EAAS,GACf,IAAK,EAAS,KAGf,EAAM,UAAY,EAAM,UAAY,EAAM,WAInD,CAEM,SAAU,iBAAiB,GAC/B,OAAO,SAAC,GAEF,EAAM,UACR,EAAM,MAAM,gBAAgB,QAC1B,eAAc,kBAAA,GACT,GAAI,CACP,SAAU,EAAM,YAIxB,CACF,CClJM,SAAU,qBAAqB,G,MAC7B,EAAY,eAChB,WACE,OAAA,cACE,CAAC,2CACD,aAAA,EAAA,EAAO,SACP,KAAK,IAHP,GAIF,CAAC,EAAM,UAGT,OACE,uBAAK,cAAA,OAAA,UAAW,EAAW,MAAO,EAAM,OAC1B,QAAX,EAAA,EAAM,aAAK,IAAA,OAAA,EAAA,EAAE,KAAI,SAAC,EAAM,GAAU,OACjC,uBAAC,cAAA,gBAAe,SAAA,CAAC,IAAK,GAAW,GAAQ,IAIjD,CCtBO,IAAM,eAAwB,CAAC,OAAQ,MAAO,QAAS,UCcxD,eAEF,wBACF,SAAC,GAAE,IAAA,EAAQ,EAAA,SAAE,EAAK,EAAA,MAAE,EAAK,EAAA,MAAE,EAAe,EAAA,gBAAE,EAAwB,EAAA,yBAC5D,EAAgB,eACpB,WACE,OAAA,GACA,EAAM,KACJ,SAAC,GACC,OAAC,SACC,CAAA,cAAe,oBAAoB,IAChC,EAFL,GAHJ,GAQF,CAAC,EAAU,IAGb,IAAK,GAA0C,IAAzB,EAAc,OAAc,OAAO,KAEzD,IAAI,EAAY,+BAEd,GADe,QAAb,GAAmC,WAAb,EACX,gCAEA,gCAGf,IAAM,EAAgB,CACpB,SAAU,WACV,KAAmB,SAAb,EAAsB,OAAI,EAChC,IACe,SAAb,GAAoC,UAAb,GAAqC,QAAb,EAC3C,OACA,EACN,MAAoB,UAAb,EAAuB,OAAI,EAClC,OAAqB,WAAb,EAAwB,OAAI,EACpC,OAAqB,SAAb,GAAoC,UAAb,EAAuB,YAAS,EAC/D,MAAoB,QAAb,GAAmC,WAAb,EAAwB,YAAS,GAG1D,EAAgC,GAKtC,OAJI,GAA4B,eAAe,SAAS,KACtD,EAA8B,IAAa,GAI3C,uBACE,cAAA,OAAA,UAAW,EACX,MAAK,2BAAA,CAEH,QAAS,GACN,GACA,GACA,IAGJ,GACC,EAAc,KAAI,SAAC,GAAS,OAAA,uBAAC,cAAA,KAAS,SAAA,GAAA,EAAI,CAAE,IAAK,EAAK,KAAM,IAGpE,IAGI,oBAAsB,CAC1B,KAAM,OACN,IAAK,KACL,MAAO,QACP,OAAQ,QAGJ,SAAU,qBACd,GAEA,OAAO,SAAC,GAAgC,OACtC,qCAAC,eAAc,SAAA,GAAA,kBAAA,GACJ,+BAAkC,GACvC,GAEP,CACH,CAEA,IAAM,8BAAyD,CAC7D,gBAAiB,OChGN,WAAa,SACxB,EACA,GAEA,IAAM,EAAW,aAA+B,MAgBhD,OAdY,eACV,WAAM,OACJ,QAAS,WAAM,OACb,qCAAC,QAAO,CACN,SAAU,EACV,UAAW,EACX,SAAU,GAEb,EACD,SAAQ,EARJ,GAUN,GAIJ,EC1BA,SAAS,4BACP,EACA,GAIA,MAFa,KAAK,EAAO,MAAM,GAAE,IAAI,EAAO,MAAM,GAAE,KAAK,EAAO,MAAM,GAAM,IAAA,EAAO,MAAM,EAG3F,C,SAEgB,oCACd,OAAO,2BACT,C","file":"/npm/react-easy-diagram@0.11.3/dist/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/react-easy-diagram@0.11.3/dist/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","export type ErrorResult<TValue = undefined> = TValue extends undefined\n  ? { success: false; error?: string }\n  : { success: false; error?: string; value: TValue };\n\nexport type SuccessResult<TValue = undefined> = TValue extends undefined\n  ? { success: true }\n  : { success: true; value: TValue };\n\nexport type SuccessOrErrorResult<TValue = undefined, TErrorValue = undefined> =\n  | SuccessResult<TValue>\n  | ErrorResult<TErrorValue>;\n\nexport function isSuccess<TValue, TErrorValue>(\n  result: SuccessOrErrorResult<TValue, TErrorValue>\n): result is SuccessResult<TValue> {\n  return result.success;\n}\n\nexport function isError<TValue, TErrorValue>(\n  result: SuccessOrErrorResult<TValue, TErrorValue>\n): result is ErrorResult<TErrorValue> {\n  return !result.success;\n}\n\nexport function successResult(): SuccessResult {\n  return { success: true };\n}\n\nexport function successValueResult<TValue>(\n  value: TValue\n): SuccessResult<TValue> {\n  return { success: true, value } as SuccessResult<TValue>;\n}\n\nexport function errorResult(error?: string): ErrorResult {\n  return { success: false, error };\n}\n\nexport function errorValueResult<TErrorValue>(\n  value: TErrorValue,\n  error?: string\n): ErrorResult<TErrorValue> {\n  return { success: false, error, value } as ErrorResult<TErrorValue>;\n}\n","import { INodeState } from 'states/nodeState';\nimport { RootStore } from 'states/rootStore';\nimport { isSuccess } from 'utils/result';\n\nexport const addNodeCommand = (node: INodeState) => ({\n  execute(rootStore: RootStore) {\n    const result = rootStore.nodesStore.addNode(node, false);\n    if (isSuccess(result)) {\n      rootStore.selectionState.select(result.value, true);\n    }\n  },\n});\n","export type Point = readonly [number, number];\n\nexport function isPoint(value: any): value is Point {\n  return (\n    Array.isArray(value) &&\n    value.length === 2 &&\n    value.every((v) => Number.isFinite(v))\n  );\n}\n\nexport const distanceBetweenPoints = (a: Point, b: Point): number =>\n  Math.sqrt(Math.pow(a[0] - b[0], 2) + Math.pow(a[1] - b[1], 2));\n\nexport const roundPoint = (point: Point) =>\n  [Math.round(point[0]), Math.round(point[1])] as Point;\n\nexport const addPoints = (...points: (Point | undefined | null)[]): Point =>\n  points.reduce((prev, curr) => {\n    if (curr) {\n      return [\n        (prev ? prev[0] : 0) + curr[0], \n        (prev ? prev[1] : 0) + curr[1]];\n    } else {\n      return prev;\n    }\n  }) ?? [0, 0];\n\nexport const subtractPoints = (...points: Point[]): Point =>\n  points.reduce((prev, curr) =>\n    curr ? [prev[0] - curr[0], prev[1] - curr[1]] : prev\n  );\n\nexport const multiplyPoint = (a: Point, m: number): Point => [\n  a[0] * m,\n  a[1] * m,\n];\n\nexport const arePointsEqual = (a?: Point, b?: Point): boolean =>\n  a === b || (isPoint(a) && isPoint(b) && a[0] === b[0] && a[1] === b[1]);\n","import { INodeState } from 'states/nodeState';\nimport { RootStore } from 'states/rootStore';\nimport { addPoints } from 'utils/point';\n\nexport const cloneSelectedNodesCommand = {\n  execute(rootStore: RootStore) {\n    const nodeStates = rootStore.selectionState.selectedNodes.map((node) => {\n      const nodeState = node.export() as INodeState;\n      nodeState.id = undefined;\n      nodeState.label = nodeState.label;\n      nodeState.position = addPoints(nodeState.position, [50, 50]);\n\n      return nodeState\n    });\n\n    rootStore.nodesStore.addNodes(nodeStates, false);\n  },\n};\n","import { RootStore } from 'states/rootStore';\n\nexport const removeSelectedCommand = {\n  execute(rootStore: RootStore) {\n    removeSelectedLinksCommand.execute(rootStore);\n    removeSelectedNodesCommand.execute(rootStore);\n  },\n};\n\nexport const removeSelectedNodesCommand = {\n  execute(rootStore: RootStore) {\n    rootStore.nodesStore.removeNodes(\n      rootStore.selectionState.selectedNodes.map((n) => n.id)\n    );\n  },\n};\n\nexport const removeSelectedLinksCommand = {\n  execute(rootStore: RootStore) {\n    rootStore.linksStore.removeLinks(\n      rootStore.selectionState.selectedLinks.map((n) => n.id)\n    );\n  },\n};\n","import { INodeExport, INodeState, NodeState } from 'states/nodeState';\nimport { PortState } from 'states/portState';\nimport { RootStore } from 'states/rootStore';\nimport { Point } from 'utils/point';\nimport { ErrorResult } from 'utils/result';\nimport { ILinkState, ILinkStateWithId, LinkState } from './linkState';\n\nexport class Callbacks {\n  private _onNodesAddResult?: ICallbacks['onNodesAddResult'];\n  private _onNodesRemoveResult?: ICallbacks['onNodesRemoveResult'];\n  private _onNodePositionChanged?: ICallbacks['onNodePositionChanged'];\n  private _onNodeLabelChanged?: ICallbacks['onNodeLabelChanged'];\n  private _onNodeTypeChanged?: ICallbacks['onNodeTypeChanged'];\n  private _onNodeDataChanged?: ICallbacks['onNodeDataChanged'];\n  private _onNodeIsSelectionEnabledChanged?: ICallbacks['onNodeIsSelectionEnabledChanged'];\n  private _onNodeIsDragEnabledChanged?: ICallbacks['onNodeIsDragEnabledChanged'];\n  private _onDragStarted?: ICallbacks['onDragStarted'];\n  private _onDrag?: ICallbacks['onDrag'];\n  private _onDragEnded?: ICallbacks['onDragEnded'];\n  private _onImportedStateRendered?: ICallbacks['onImportedStateRendered'];\n  private _onLinkValidation?: ICallbacks['onLinkValidation'];\n  private _onLinksAddResult?: ICallbacks['onLinksAddResult'];\n  private _onLinksRemoveResult?: ICallbacks['onLinksRemoveResult'];\n  private _onLinkingStarted?: ICallbacks['onLinkingStarted'];\n  private _onLinkingEnded?: ICallbacks['onLinkingEnded'];\n\n  private _rootStore: RootStore;\n\n  constructor(rootStore: RootStore) {\n    this._rootStore = rootStore;\n    this.import();\n  }\n\n  import = (callbacks?: ICallbacks) => {\n    this._onLinkValidation = callbacks?.onLinkValidation;\n    this._onNodesAddResult = callbacks?.onNodesAddResult;\n    this._onNodesRemoveResult = callbacks?.onNodesRemoveResult;\n    this._onNodePositionChanged = callbacks?.onNodePositionChanged;\n    this._onNodeLabelChanged = callbacks?.onNodeLabelChanged;\n    this._onNodeTypeChanged = callbacks?.onNodeTypeChanged;\n    this._onNodeDataChanged = callbacks?.onNodeDataChanged;\n    this._onNodeIsSelectionEnabledChanged =\n      callbacks?.onNodeIsSelectionEnabledChanged;\n    this._onNodeIsDragEnabledChanged = callbacks?.onNodeIsDragEnabledChanged;\n    this._onDragStarted = callbacks?.onDragStarted;\n    this._onDrag = callbacks?.onDrag;\n    this._onDragEnded = callbacks?.onDragEnded;\n    this._onImportedStateRendered = callbacks?.onImportedStateRendered;\n    this._onLinksAddResult = callbacks?.onLinksAddResult;\n    this._onLinksRemoveResult = callbacks?.onLinksRemoveResult;\n    this._onLinkingStarted = callbacks?.onLinkingStarted;\n    this._onLinkingEnded = callbacks?.onLinkingEnded;\n  };\n\n  export = (): ICallbacks => ({\n    onNodesAddResult: this._onNodesAddResult,\n    onNodesRemoveResult: this._onNodesRemoveResult,\n    onNodePositionChanged: this._onNodePositionChanged,\n    onNodeLabelChanged: this._onNodeLabelChanged,\n    onNodeTypeChanged: this._onNodeTypeChanged,\n    onNodeDataChanged: this._onNodeDataChanged,\n    onNodeIsSelectionEnabledChanged: this._onNodeIsSelectionEnabledChanged,\n    onNodeIsDragEnabledChanged: this._onNodeIsDragEnabledChanged,\n    onDragStarted: this._onDragStarted,\n    onDrag: this._onDrag,\n    onDragEnded: this._onDragEnded,\n    onImportedStateRendered: this._onImportedStateRendered,\n    onLinkValidation: this._onLinkValidation,\n    onLinksAddResult: this._onLinksAddResult,\n    onLinksRemoveResult: this._onLinksRemoveResult,\n    onLinkingStarted: this._onLinkingStarted,\n    onLinkingEnded: this._onLinkingEnded,\n  });\n\n  linkValidation = (info: OnLinkValidation) => {\n    if (this._onLinkValidation)\n      return this._onLinkValidation(info, this._rootStore);\n    else return true;\n  };\n\n  nodesAdded = (info: OnNodesAddResult) => {\n    if (\n      this._onNodesAddResult &&\n      (info.addedNodes.length > 0 || info.failedToAddNodes.length > 0)\n    ) {\n      this._onNodesAddResult(info, this._rootStore);\n    }\n  };\n\n  nodesRemoved = (info: OnNodesRemoveResult) => {\n    if (\n      this._onNodesRemoveResult &&\n      (info.removedNodes.length > 0 || info.failedToRemoveNodeIds.length > 0)\n    ) {\n      this._onNodesRemoveResult(info, this._rootStore);\n    }\n  };\n\n  nodePositionChanged = (node: NodeState, change: PropertyChange<Point>) => {\n    if (this._onNodePositionChanged) {\n      this._onNodePositionChanged(\n        {\n          oldValue: change.oldValue,\n          newValue: change.newValue,\n          node: node,\n        },\n        this._rootStore\n      );\n    }\n  };\n\n  nodeTypeChanged = (\n    node: NodeState,\n    change: PropertyChange<string | undefined>\n  ) => {\n    if (this._onNodeTypeChanged) {\n      this._onNodeTypeChanged(\n        {\n          oldValue: change.oldValue,\n          newValue: change.newValue,\n          node: node,\n        },\n        this._rootStore\n      );\n    }\n  };\n\n  nodeLabelChanged = (\n    node: NodeState,\n    change: PropertyChange<string | undefined>\n  ) => {\n    if (this._onNodeLabelChanged) {\n      this._onNodeLabelChanged(\n        {\n          oldValue: change.oldValue,\n          newValue: change.newValue,\n          node: node,\n        },\n        this._rootStore\n      );\n    }\n  };\n\n  nodeDataChanged = (node: NodeState, change: PropertyChange<any>) => {\n    if (this._onNodeDataChanged) {\n      this._onNodeDataChanged(\n        {\n          oldValue: change.oldValue,\n          newValue: change.newValue,\n          node: node,\n        },\n        this._rootStore\n      );\n    }\n  };\n\n  nodeIsSelectionEnabledChanged = (\n    node: NodeState,\n    change: PropertyChange<boolean | undefined>\n  ) => {\n    if (this._onNodeIsSelectionEnabledChanged) {\n      this._onNodeIsSelectionEnabledChanged(\n        {\n          oldValue: change.oldValue,\n          newValue: change.newValue,\n          node: node,\n        },\n        this._rootStore\n      );\n    }\n  };\n\n  nodeIsDragEnabledChanged = (\n    node: NodeState,\n    change: PropertyChange<boolean | undefined>\n  ) => {\n    if (this._onNodeIsDragEnabledChanged) {\n      this._onNodeIsDragEnabledChanged(\n        {\n          oldValue: change.oldValue,\n          newValue: change.newValue,\n          node: node,\n        },\n        this._rootStore\n      );\n    }\n  };\n\n  dragStarted = (info: OnDragStarted) => {\n    if (this._onDragStarted) {\n      this._onDragStarted(info, this._rootStore);\n    }\n  };\n\n  drag = (info: OnDrag) => {\n    if (this._onDrag) {\n      this._onDrag(info, this._rootStore);\n    }\n  };\n\n  dragEnded = (info: OnDragEnded) => {\n    if (this._onDragEnded) {\n      this._onDragEnded(info, this._rootStore);\n    }\n  };\n\n  importedStateRendered = () => {\n    if (this._rootStore.diagramSettings.zoomToFitSettings.callOnImportState) {\n      this._rootStore.diagramState.zoomToFit();\n    }\n\n    if (this._onImportedStateRendered) {\n      this._onImportedStateRendered(this._rootStore);\n    }\n  };\n\n  linksAdded = (info: OnLinksAddResult) => {\n    if (\n      this._onLinksAddResult &&\n      (info.addedLinks.length > 0 || info.failedToAddLinks.length > 0)\n    ) {\n      this._onLinksAddResult(info, this._rootStore);\n    }\n  };\n\n  linksRemoved = (info: OnLinksRemoveResult) => {\n    if (\n      this._onLinksRemoveResult &&\n      (info.removedLinks.length > 0 || info.failedToRemoveLinkIds.length > 0)\n    ) {\n      this._onLinksRemoveResult(info, this._rootStore);\n    }\n  };\n\n  linkingStarted = (info: OnLinkingStarted) => {\n    if (this._onLinkingStarted) {\n      this._onLinkingStarted(info, this._rootStore);\n    }\n  };\n\n  linkingEnded = (info: OnLinkingEnded) => {\n    if (this._onLinkingEnded) {\n      this._onLinkingEnded(info, this._rootStore);\n    }\n  };\n}\n\nexport interface ICallbacks {\n  onNodesAddResult?: (info: OnNodesAddResult, rootStore: RootStore) => void;\n  onNodesRemoveResult?: (\n    info: OnNodesRemoveResult,\n    rootStore: RootStore\n  ) => void;\n  onNodePositionChanged?: (\n    info: OnNodePositionChanged,\n    rootStore: RootStore\n  ) => void;\n  onNodeLabelChanged?: (info: OnNodeLabelChanged, rootStore: RootStore) => void;\n  onNodeTypeChanged?: (info: OnNodeTypeChanged, rootStore: RootStore) => void;\n  onNodeDataChanged?: (info: OnNodeDataChanged, rootStore: RootStore) => void;\n  onNodeIsSelectionEnabledChanged?: (\n    info: OnNodeIsSelectionEnabledChanged,\n    rootStore: RootStore\n  ) => void;\n  onNodeIsDragEnabledChanged?: (\n    info: OnNodeIsDragEnabledChanged,\n    rootStore: RootStore\n  ) => void;\n  onDragStarted?: (info: OnDragStarted, rootStore: RootStore) => void;\n  onDrag?: (info: OnDrag, rootStore: RootStore) => void;\n  onDragEnded?: (info: OnDragEnded, rootStore: RootStore) => void;\n  onImportedStateRendered?: (rootStore: RootStore) => void;\n  onLinkValidation?: (info: OnLinkValidation, rootStore: RootStore) => boolean;\n  onLinksAddResult?: (info: OnLinksAddResult, rootStore: RootStore) => void;\n  onLinksRemoveResult?: (\n    info: OnLinksRemoveResult,\n    rootStore: RootStore\n  ) => void;\n  onLinkingStarted?: (info: OnLinkingStarted, rootStore: RootStore) => void;\n  onLinkingEnded?: (info: OnLinkingEnded, rootStore: RootStore) => void;\n}\n\nexport interface OnDragStarted {\n  nodes: NodeState[];\n}\n\nexport interface OnDrag {\n  nodes: NodeState[];\n  delta: Point;\n}\n\nexport interface OnDragEnded {\n  nodes: NodeState[];\n}\n\nexport interface OnNodePropertyChanged<TValue> extends PropertyChange<TValue> {\n  node: NodeState;\n}\n\nexport interface OnNodePositionChanged extends OnNodePropertyChanged<Point> {}\n\nexport interface OnNodeLabelChanged\n  extends OnNodePropertyChanged<string | undefined> {}\n\nexport interface OnNodeTypeChanged\n  extends OnNodePropertyChanged<string | undefined> {}\n\nexport interface OnNodeDataChanged extends OnNodePropertyChanged<any> {}\n\nexport interface OnNodeIsSelectionEnabledChanged\n  extends OnNodePropertyChanged<boolean | undefined> {}\n\nexport interface OnNodeIsDragEnabledChanged\n  extends OnNodePropertyChanged<boolean | undefined> {}\n\nexport interface OnNodesAddResult {\n  addedNodes: NodeState[];\n  failedToAddNodes: ErrorResult<INodeState>[];\n  importing: boolean;\n}\n\nexport interface OnNodesRemoveResult {\n  removedNodes: INodeExport[];\n  failedToRemoveNodeIds: string[];\n}\n\nexport interface OnLinkValidation {\n  source: PortState;\n  target: PortState;\n}\n\nexport interface OnLinksAddResult {\n  addedLinks: LinkState[];\n  failedToAddLinks: ErrorResult<ILinkState>[];\n  importing: boolean;\n}\n\nexport interface OnLinksRemoveResult {\n  removedLinks: ILinkStateWithId[];\n  failedToRemoveLinkIds: string[];\n}\n\nexport interface OnLinkingStarted {\n  sourcePort: PortState;\n}\n\nexport interface OnLinkingEnded {\n  sourcePort: PortState;\n  targetPort?: PortState;\n  linked: boolean;\n}\n\nexport type PropertyChange<TValue> = {\n  oldValue: TValue;\n  newValue: TValue;\n};\n","import { observer } from 'mobx-react-lite';\nimport React, { useMemo } from 'react';\nimport type { IComponentDefinition } from 'states/visualComponentState';\nimport type { IBackgroundComponentProps } from 'states/diagramSettings';\n\nconst SvgBackground: React.FC<\n  IBackgroundComponentProps<ISvgBackgroundSettings>\n> = observer(({ diagramOffset, diagramZoom, settings }) => {\n  const finalSettings = settings ?? defaultSettings;\n\n  const backgroundImage = useMemo(\n    () =>\n      finalSettings.imageGenerator\n        ? finalSettings.imageGenerator(100 * diagramZoom, 100 * diagramZoom)\n        : undefined,\n    [finalSettings, finalSettings.imageGenerator, diagramZoom]\n  );\n\n  return (\n    <div\n      className='react_fast_diagram_Background'\n      style={{\n        backgroundColor: finalSettings.color,\n        backgroundImage,\n        backgroundPosition: `${diagramOffset[0]}px ${diagramOffset[1]}px`,\n      }}\n    />\n  );\n});\n\nconst gridImageGenerator = (\n  width: number,\n  height: number,\n  sizeMultiplicator: number,\n  linesColor: string,\n  linesOpacity: number\n) => {\n  linesColor = linesColor.replace('#', '%23');\n  return `url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='${\n    width * sizeMultiplicator\n  }' height='${\n    height * sizeMultiplicator\n  }' viewBox='0 0 100 100'%3E%3Cg fill-rule='evenodd'%3E%3Cg fill='${linesColor}' fill-opacity='${linesOpacity}'%3E%3Cpath opacity='.5' d='M96 95h4v1h-4v4h-1v-4h-9v4h-1v-4h-9v4h-1v-4h-9v4h-1v-4h-9v4h-1v-4h-9v4h-1v-4h-9v4h-1v-4h-9v4h-1v-4h-9v4h-1v-4H0v-1h15v-9H0v-1h15v-9H0v-1h15v-9H0v-1h15v-9H0v-1h15v-9H0v-1h15v-9H0v-1h15v-9H0v-1h15v-9H0v-1h15V0h1v15h9V0h1v15h9V0h1v15h9V0h1v15h9V0h1v15h9V0h1v15h9V0h1v15h9V0h1v15h9V0h1v15h4v1h-4v9h4v1h-4v9h4v1h-4v9h4v1h-4v9h4v1h-4v9h4v1h-4v9h4v1h-4v9h4v1h-4v9zm-1 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-9-10h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm9-10v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-9-10h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm9-10v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-9-10h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm9-10v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-10 0v-9h-9v9h9zm-9-10h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9zm10 0h9v-9h-9v9z'/%3E%3Cpath d='M6 5V0H5v5H0v1h5v94h1V6h94V5H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\")`;\n};\n\nexport const createGridImageGenerator = (\n  sizeMultiplicator: number,\n  linesColor: string,\n  linesOpacity: number\n): BackgroundSvgImageGenerator => (width: number, height: number) =>\n  gridImageGenerator(\n    width,\n    height,\n    sizeMultiplicator,\n    linesColor,\n    linesOpacity\n  );\n\nconst dotsImageGenerator = (\n  width: number,\n  height: number,\n  sizeMultiplicator: number,\n  dotsColor: string,\n  dotsOpacity: number,\n  dotsRadius: number\n) => {\n  sizeMultiplicator = 0.1 * sizeMultiplicator;\n  dotsColor = dotsColor.replace('#', '%23');\n  return `url(\"data:image/svg+xml,%3Csvg width='${\n    width * sizeMultiplicator\n  }' height='${\n    height * sizeMultiplicator\n  }' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='${dotsColor}' fill-opacity='${dotsOpacity}' fill-rule='evenodd'%3E%3Ccircle cx='3' cy='3' r='${dotsRadius}'/%3E%3Ccircle cx='13' cy='13' r='${dotsRadius}'/%3E%3C/g%3E%3C/svg%3E\")`;\n};\n\nexport const createDotsImageGenerator = (\n  sizeMultiplicator: number,\n  dotsColor: string,\n  dotsOpacity: number,\n  dotsRadius: number\n): BackgroundSvgImageGenerator => (width: number, height: number) =>\n  dotsImageGenerator(\n    width,\n    height,\n    sizeMultiplicator,\n    dotsColor,\n    dotsOpacity,\n    dotsRadius\n  );\n\nconst crossesImageGenerator = (\n  width: number,\n  height: number,\n  sizeMultiplicator: number,\n  color: string,\n  opacity: number\n) => {\n  color = color.replace('#', '%23');\n  return `url(\"data:image/svg+xml,%3Csvg width='${\n    width * sizeMultiplicator\n  }' height='${\n    height * sizeMultiplicator\n  }' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='${color}' fill-opacity='${opacity}'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\")`;\n};\n\nexport const createCrossesImageGenerator = (\n  sizeMultiplicator: number,\n  color: string,\n  opacity: number\n): BackgroundSvgImageGenerator => (width: number, height: number) =>\n  crossesImageGenerator(width, height, sizeMultiplicator, color, opacity);\n\nconst defaultSettings: ISvgBackgroundSettings = {\n  imageGenerator: createCrossesImageGenerator(0.2, '#858585', 0.1),\n  color: '#ffffff',\n};\n\nexport const createSvgBackground = (\n  settings?: Partial<ISvgBackgroundSettings>\n): IComponentDefinition<\n  IBackgroundComponentProps,\n  ISvgBackgroundSettings\n> => {\n  const finalSettings = {\n    ...defaultSettings,\n    ...(settings ? settings : {}),\n  };\n\n  return {\n    component: SvgBackground,\n    settings: finalSettings,\n  };\n};\n\nexport type BackgroundSvgImageGenerator = (\n  width: number,\n  height: number\n) => string;\n\n/**\n * @property {function}  imageGenerator - Function to create string for css's backgroundUrl property.\n * You can use for example services like listed in this article https://css-tricks.com/websites-generate-svg-patterns/\n * to generate this string.\n */\nexport interface ISvgBackgroundSettings {\n  imageGenerator?: BackgroundSvgImageGenerator;\n  color: string;\n}\n","import {\n  action,\n  computed,\n  makeObservable,\n  observable,\n} from 'mobx';\n\nexport class VisualComponentState<TComponentProps, TSettings> {\n  private _component: VisualComponent<TComponentProps>;\n  private _settings: TSettings | null = null;\n\n  constructor(\n    component:\n      | IComponentDefinition<TComponentProps, TSettings>\n      | VisualComponent<TComponentProps>\n  ) {\n    this.import(component);\n    makeObservable<VisualComponentState<TComponentProps, TSettings>, '_component' | '_settings'>(this, {\n      _component: observable.ref,\n      _settings: observable.ref,\n      component: computed,\n      settings: computed,\n      import: action,\n    });\n  }\n\n  import = (\n    newComponent:\n      | IComponentDefinition<TComponentProps, TSettings>\n      | VisualComponent<TComponentProps>\n  ) => {\n    if ('component' in newComponent) {\n      this._component = newComponent.component;\n      this._settings = newComponent.settings ?? null;\n    } else {\n      this._component = newComponent;\n      this._settings = null;\n    }\n  };\n\n  get component() {\n    return this._component;\n  }\n  get settings() {\n    return this._settings;\n  }\n}\n\nexport interface IVisualComponentProps<TEntity, TSettings> {\n  entity: TEntity;\n  settings: TSettings | null;\n}\n\nexport type VisualComponent<\n  TComponentProps\n> = React.FunctionComponent<TComponentProps>;\n\nexport interface IComponentDefinition<TComponentProps, TSettings> {\n  component: VisualComponent<TComponentProps>;\n  settings?: TSettings;\n}\n","import { makeAutoObservable } from 'mobx';\nimport {\n  IComponentDefinition,\n  VisualComponent,\n  VisualComponentState,\n} from 'states/visualComponentState';\n\nexport class VisualComponentWithDefault<TComponentProps> {\n  private _innerComponent: VisualComponentState<TComponentProps, any>;\n  private _defaultComponent: VisualComponentState<TComponentProps, any>;\n\n  constructor(defaultComponent: IComponentDefinition<TComponentProps, any>) {\n    this._innerComponent = new VisualComponentState<TComponentProps, any>(\n      defaultComponent\n    );\n    this._defaultComponent = this._innerComponent;\n    makeAutoObservable(this);\n  }\n\n  get component() {\n    return this._innerComponent.component;\n  }\n\n  get settings() {\n    return this._innerComponent.settings;\n  }\n\n  import = (\n    newComponent?:\n      | IComponentDefinition<TComponentProps, any>\n      | VisualComponent<TComponentProps>\n  ) => {\n    this._innerComponent = newComponent\n      ? new VisualComponentState<TComponentProps, any>(newComponent)\n      : this._defaultComponent;\n  };\n}\n","import React from 'react';\n\n// Icons from https://material-ui.com/components/material-icons/\n\nexport const RubbishBinIcon: React.FC = () => (\n  <svg viewBox='0 0 24 24'>\n    <path d=\"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zm2.46-7.12l1.41-1.41L12 12.59l2.12-2.12 1.41 1.41L13.41 14l2.12 2.12-1.41 1.41L12 15.41l-2.12 2.12-1.41-1.41L10.59 14l-2.13-2.12zM15.5 4l-1-1h-5l-1 1H5v2h14V4z\"></path>\n  </svg>\n);\n\nexport const CopyIcon: React.FC = () => (\n  <svg viewBox='0 0 24 24'>\n    <path d='M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4H8c-1.1 0-1.99.9-1.99 2L6 21c0 1.1.89 2 1.99 2H19c1.1 0 2-.9 2-2V11l-6-6zM8 21V7h6v5h5v9H8z'></path>\n  </svg>\n);\n\nexport const FilterCenterFocusIcon: React.FC = () => (\n  <svg viewBox='0 0 24 24'>\n    <path d=\"M5 15H3v4c0 1.1.9 2 2 2h4v-2H5v-4zM5 5h4V3H5c-1.1 0-2 .9-2 2v4h2V5zm14-2h-4v2h4v4h2V5c0-1.1-.9-2-2-2zm0 16h-4v2h4c1.1 0 2-.9 2-2v-4h-2v4zM12 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\"></path>\n  </svg>\n);\n\nexport const LockIcon: React.FC = () => (\n  <svg viewBox='0 0 24 24'>\n    <path d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\"></path>\n  </svg>\n);\n\nexport const UnlockIcon: React.FC = () => (\n  <svg viewBox='0 0 24 24'>\n    <path d=\"M12 17c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm6-9h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6h1.9c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm0 12H6V10h12v10z\"></path>\n  </svg>\n);","import { Point } from 'utils/point';\n\nexport type BoundingBox = {\n  topLeftCorner: Point;\n  bottomRightCorner: Point;\n  size: Point;\n};\n\nexport interface Dictionary<TValue> {\n  [key: string]: TValue;\n}\n\nexport type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;\n\nexport function isNumber(value: any): value is number {\n  return Number.isFinite(value);\n}\n\nexport function isObject(value: any): value is object {\n  return value != null && typeof value == 'object' && !Array.isArray(value);\n}\n\nexport function isBoolean(value: any): value is boolean {\n  return value != null && typeof value == 'boolean';\n}\n\nexport function clampValue(value: number, interval: Point) {\n  return Math.min(Math.max(value, interval[0]), interval[1]);\n}\n\nexport function deepCopy<TValue>(value: TValue): TValue {\n  return JSON.parse(JSON.stringify(value));\n}\n\nexport function combineArrays<TValue>(\n  ...arrays: (TValue[] | undefined)[]\n): TValue[] {\n  const combined: TValue[] = [];\n  arrays.forEach((a) => a?.forEach((v) => v && combined.push(v)));\n  return combined;\n}\n","import { cloneSelectedNodesCommand } from 'commands/clone';\nimport { removeSelectedCommand } from 'commands/remove';\nimport {\n  CopyIcon,\n  FilterCenterFocusIcon,\n  RubbishBinIcon,\n  UnlockIcon,\n} from 'components/Icons';\nimport { LockIcon } from 'index';\nimport { observer } from 'mobx-react-lite';\nimport React, { useMemo } from 'react';\nimport type { IMiniControlComponentProps } from 'states/diagramSettings';\nimport { IComponentDefinition } from 'states/visualComponentState';\nimport { combineArrays } from 'utils/common';\nimport { CornerPosition } from 'utils/position';\n\nconst MiniControlDefault: React.FC<\n  IMiniControlComponentProps<IMiniControlDefaultSettings>\n> = observer(\n  ({\n    rootStore: {\n      commandExecutor,\n      diagramState,\n      diagramSettings,\n      selectionState,\n    },\n    settings,\n  }) => {\n    const finalSettings = settings ?? defaultSettings;\n\n    const className = useMemo(\n      () =>\n        combineArrays(\n          ['react_fast_diagram_MiniControl_Default'],\n          finalSettings?.classes\n        ).join(' '),\n      [finalSettings]\n    );\n\n    const style = useMemo(\n      () => ({\n        ...getOffsetStyles(finalSettings),\n        ...finalSettings?.style,\n      }),\n      [finalSettings]\n    );\n\n    if (Object.values(finalSettings.buttons).every((v) => v === false))\n      return null;\n\n    return (\n      <div className={className} style={style}>\n        {finalSettings.buttons.deleteSelection &&\n          selectionState.selectedItems.length > 0 && (\n            <Button\n              size={finalSettings.buttonsSize}\n              onClick={() => commandExecutor.execute(removeSelectedCommand)}\n            >\n              <RubbishBinIcon />\n            </Button>\n          )}\n        {finalSettings.buttons.cloneSelectedNodes &&\n          selectionState.selectedNodes.length > 0 && (\n            <Button\n              size={finalSettings.buttonsSize}\n              onClick={() => commandExecutor.execute(cloneSelectedNodesCommand)}\n            >\n              <CopyIcon />\n            </Button>\n          )}\n        {finalSettings.buttons.zoomIn && (\n          <Button\n            size={finalSettings.buttonsSize}\n            onClick={diagramState.zoomIn}\n            children='+'\n          />\n        )}\n        {finalSettings.buttons.zoomOut && (\n          <Button\n            size={finalSettings.buttonsSize}\n            onClick={diagramState.zoomOut}\n            children='-'\n          />\n        )}\n        {finalSettings.buttons.zoomToFit && (\n          <Button\n            size={finalSettings.buttonsSize}\n            onClick={diagramState.zoomToFit}\n          >\n            <FilterCenterFocusIcon />\n          </Button>\n        )}\n        {finalSettings.buttons.lockUnlockPointerInteractions && (\n          <Button\n            size={finalSettings.buttonsSize}\n            onClick={() => {\n              if (\n                diagramSettings.userInteraction.arePointerInteractionsDisabled\n              )\n                diagramSettings.userInteraction.enableAllPointerInteractions(\n                  true\n                );\n              else\n                diagramSettings.userInteraction.disableAllPointerInteractions(\n                  true\n                );\n            }}\n          >\n            {diagramSettings.userInteraction.arePointerInteractionsDisabled ? (\n              <LockIcon />\n            ) : (\n              <UnlockIcon />\n            )}\n          </Button>\n        )}\n      </div>\n    );\n  }\n);\n\nfunction getOffsetStyles(settings: IMiniControlDefaultSettings) {\n  return {\n    top:\n      settings.position == 'left-top' || settings.position == 'right-top'\n        ? settings.parentOffset\n        : undefined,\n    right:\n      settings.position == 'right-bottom' || settings.position == 'right-top'\n        ? settings.parentOffset\n        : undefined,\n    bottom:\n      settings.position == 'left-bottom' || settings.position == 'right-bottom'\n        ? settings.parentOffset\n        : undefined,\n    left:\n      settings.position == 'left-top' || settings.position == 'left-bottom'\n        ? settings.parentOffset\n        : undefined,\n  };\n}\n\nexport const Button: React.FC<{\n  size: number;\n  onClick: () => any;\n  children?: React.ReactNode;\n}> = (props) => (\n  <button\n    onClick={props.onClick}\n    className='react_fast_diagram_MiniControl_Btn'\n    style={{\n      width: props.size + 'px',\n      height: props.size + 'px',\n      padding: 5,\n    }}\n  >\n    {props.children}\n  </button>\n);\n\nexport const createDefaultMiniControl = (\n  settings?: Partial<IMiniControlDefaultSettings>\n): IComponentDefinition<\n  IMiniControlComponentProps,\n  IMiniControlDefaultSettings\n> => {\n  const finalSettings = {\n    ...defaultSettings,\n    ...(settings ? settings : {}),\n  };\n\n  return {\n    component: MiniControlDefault,\n    settings: finalSettings,\n  };\n};\n\nconst defaultSettings: IMiniControlDefaultSettings = {\n  position: 'left-bottom',\n  buttonsSize: 30,\n  buttons: {\n    zoomIn: true,\n    zoomOut: true,\n    deleteSelection: true,\n    cloneSelectedNodes: true,\n    zoomToFit: true,\n    lockUnlockPointerInteractions: true,\n  },\n  parentOffset: 20,\n};\n\nexport interface IMiniControlDefaultSettings {\n  classes?: string[];\n  style?: React.CSSProperties;\n  position?: CornerPosition;\n  buttons: ButtonsValue;\n  buttonsSize: number;\n  parentOffset?: number;\n}\n\ninterface ButtonsValue {\n  zoomIn?: boolean;\n  zoomOut?: boolean;\n  deleteSelection?: boolean;\n  cloneSelectedNodes?: boolean;\n  zoomToFit?: boolean;\n  lockUnlockPointerInteractions?: boolean;\n}\n","import { makeAutoObservable } from 'mobx';\n\nexport class UserInteractionSettings {\n  private _diagramZoom: boolean;\n  private _diagramPan: boolean;\n  private _nodeDrag: boolean;\n  private _portConnection: boolean;\n  private _nodeSelection: boolean;\n  private _linkSelection: boolean;\n  private _multiselectionKey: MultipleSelectionKey;\n  private _disableAllPointerInteractionsCounter: number;\n\n  constructor() {\n    this.import();\n    makeAutoObservable(this);\n  }\n\n  import = (obj?: Partial<IUserInteraction>) => {\n    this._diagramZoom = obj?.diagramZoom ?? true;\n    this._diagramPan = obj?.diagramPan ?? true;\n    this._nodeDrag = obj?.nodeDrag ?? true;\n    this._portConnection = obj?.portConnection ?? true;\n    this._nodeSelection = obj?.nodeSelection ?? true;\n    this._linkSelection = obj?.linkSelection ?? true;\n    this._multiselectionKey = obj?.multiselectionKey ?? 'shift';\n    this._disableAllPointerInteractionsCounter =\n      obj?.disableAllMouseAndTouchInteractions ? 1 : 0;\n  };\n\n  get diagramZoom() {\n    return this._diagramZoom;\n  }\n\n  set diagramZoom(value: boolean) {\n    this._diagramZoom = value;\n  }\n\n  get diagramPan() {\n    return this._diagramPan;\n  }\n\n  set diagramPan(value: boolean) {\n    this._diagramPan = value;\n  }\n\n  get nodeDrag() {\n    return this._nodeDrag;\n  }\n\n  set nodeDrag(value: boolean) {\n    this._nodeDrag = value;\n  }\n\n  get portConnection() {\n    return this._portConnection;\n  }\n\n  set portConnection(value: boolean) {\n    this._portConnection = value;\n  }\n\n  get nodeSelection() {\n    return this._nodeSelection;\n  }\n\n  set nodeSelection(value: boolean) {\n    this._nodeSelection = value;\n  }\n\n  get linkSelection() {\n    return this._linkSelection;\n  }\n\n  set linkSelection(value: boolean) {\n    this._linkSelection = value;\n  }\n\n  get multiselectionKey() {\n    return this._multiselectionKey;\n  }\n\n  set multiselectionKey(value: MultipleSelectionKey) {\n    this._multiselectionKey = value;\n  }\n\n  disableAllPointerInteractions = (force: boolean = false) => {\n    this._disableAllPointerInteractionsCounter = force\n      ? 1\n      : this._disableAllPointerInteractionsCounter + 1;\n  };\n\n  enableAllPointerInteractions = (force: boolean = false) => {\n    this._disableAllPointerInteractionsCounter = force\n      ? 0\n      : this._disableAllPointerInteractionsCounter - 1;\n  };\n\n  get arePointerInteractionsDisabled(): boolean {\n    return this._disableAllPointerInteractionsCounter > 0;\n  }\n\n  isCallbackMultiselectionActivated = (\n    shiftKey: boolean,\n    altKey: boolean,\n    ctrlKey: boolean,\n    metaKey: boolean\n  ): boolean => {\n    switch (this.multiselectionKey) {\n      case 'alt':\n        return altKey;\n      case 'ctrl':\n        return ctrlKey;\n      case 'meta':\n        return metaKey;\n      case 'shift':\n        return shiftKey;\n      default:\n        return false;\n    }\n  };\n}\n\nexport interface IUserInteraction {\n  diagramZoom: boolean;\n  diagramPan: boolean;\n  nodeDrag: boolean;\n  portConnection: boolean;\n  nodeSelection: boolean;\n  linkSelection: boolean;\n  multiselectionKey: MultipleSelectionKey;\n  disableAllMouseAndTouchInteractions: boolean;\n}\n\nexport type MultipleSelectionKey = 'ctrl' | 'alt' | 'meta' | 'shift';\n","import { action, makeAutoObservable, observable, trace } from 'mobx';\nimport { Point } from 'utils/point';\nimport { createSvgBackground } from 'components/background/SvgBackground';\nimport { VisualComponentWithDefault } from 'states/visualComponentWithDefault';\nimport { RootStore } from 'states/rootStore';\nimport { createDefaultMiniControl } from 'components/miniControl/MiniControlDefault';\nimport {\n  IComponentDefinition,\n  VisualComponent,\n} from 'states/visualComponentState';\nimport {\n  IUserInteraction,\n  UserInteractionSettings,\n} from 'states/userInteractionSettings';\n\nexport class DiagramSettings {\n  private _backgroundComponentState: VisualComponentWithDefault<IBackgroundComponentProps>;\n  private _miniControlComponentState: VisualComponentWithDefault<IMiniControlComponentProps>;\n  private _zoomInterval: Point;\n  private _zoomToFitSettings: IZoomToFitSettings;\n  private _userInteraction: UserInteractionSettings;\n\n  constructor() {\n    this._backgroundComponentState =\n      new VisualComponentWithDefault<IBackgroundComponentProps>(\n        createSvgBackground()\n      );\n    this._miniControlComponentState =\n      new VisualComponentWithDefault<IMiniControlComponentProps>(\n        createDefaultMiniControl()\n      );\n    this._userInteraction = new UserInteractionSettings();\n\n    this.import({\n      zoomInterval: defaultZoomInterval,\n      zoomToFitSettings: defaultZoomToFitSettings,\n    });\n\n    makeAutoObservable(this, {\n      // Probably some bug in mobx, without this annotation warning is thrown saying \"cannot change _zoomInterval outside action\"\n      setZoomInterval: action,\n      // @ts-ignore\n      _zoomInterval: observable.ref,\n    });\n  }\n\n  import = (obj?: IDiagramSettings) => {\n    this._backgroundComponentState.import(obj?.backgroundComponent);\n    this._miniControlComponentState.import(obj?.miniControlComponent);\n    this.setZoomInterval(obj?.zoomInterval);\n    this._zoomToFitSettings = {\n      ...defaultZoomToFitSettings,\n      ...obj?.zoomToFitSettings,\n    };\n    this._userInteraction.import(obj?.userInteraction);\n  };\n\n  get backgroundComponentState() {\n    return this._backgroundComponentState;\n  }\n\n  get miniControlComponentState() {\n    return this._miniControlComponentState;\n  }\n\n  get zoomInterval() {\n    return this._zoomInterval;\n  }\n\n  get zoomToFitSettings() {\n    return this._zoomToFitSettings;\n  }\n\n  setZoomInterval = (value: Point | null | undefined) => {\n    this._zoomInterval = value ?? defaultZoomInterval;\n  };\n\n  get userInteraction() {\n    return this._userInteraction;\n  }\n}\n\nconst defaultZoomInterval: Point = [0.1, 3];\nconst defaultZoomToFitSettings: IZoomToFitSettings = {\n  padding: [30, 30],\n  zoomInterval: [0.1, 1.5],\n  callOnImportState: true,\n};\n\nexport interface IDiagramSettings {\n  backgroundComponent?:\n    | IComponentDefinition<IBackgroundComponentProps, any>\n    | VisualComponent<IBackgroundComponentProps>;\n  miniControlComponent?:\n    | IComponentDefinition<IMiniControlComponentProps, any>\n    | VisualComponent<IMiniControlComponentProps>;\n  zoomInterval?: Point;\n  zoomToFitSettings?: Partial<IZoomToFitSettings>;\n  userInteraction?: Partial<IUserInteraction>;\n}\n\nexport interface IBackgroundComponentProps<TSettings = any> {\n  diagramOffset: Point;\n  diagramZoom: number;\n  settings?: TSettings;\n}\n\nexport interface IMiniControlComponentProps<TSettings = any> {\n  rootStore: RootStore;\n  settings?: TSettings;\n}\n\nexport interface IZoomToFitSettings {\n  padding: Point;\n  zoomInterval: Point;\n  callOnImportState: boolean;\n}\n","import { DiagramState } from 'index';\nimport { computed, makeAutoObservable } from 'mobx';\nimport { multiplyPoint, Point } from 'utils/point';\n\nexport class HtmlElementRefState {\n  private _diagramState: DiagramState;\n\n  private _currentInternal: HTMLDivElement | null;\n  private _triggerSizePositionRecalculation: number = 0;\n\n  constructor(initValue: HTMLDivElement | null, diagramState: DiagramState) {\n    this._currentInternal = initValue;\n    makeAutoObservable(this, {\n      sizeExcludingZoom: computed({ keepAlive: true }),\n      positionExcludingZoom: computed({ keepAlive: true }),\n      boundingRect: computed({ keepAlive: true }),\n    });\n    this._diagramState = diagramState;\n  }\n\n  get current() {\n    return this._currentInternal;\n  }\n\n  set current(value: HTMLDivElement | null) {\n    this._currentInternal = value;\n  }\n\n  /**\n   * Size excluding diagram zoom.\n   */\n  get sizeExcludingZoom(): Point | null {\n    if (this.boundingRect && this.boundingRect.diagramZoom) {\n      return multiplyPoint(\n        this.boundingRect.size,\n        1 / this.boundingRect.diagramZoom\n      );\n    }\n    return null;\n  }\n\n  /**\n   * Position excluding diagram zoom.\n   */\n  get positionExcludingZoom(): Point | null {\n    if (this.boundingRect && this.boundingRect.diagramZoom) {\n      return multiplyPoint(\n        this.boundingRect.position,\n        1 / this.boundingRect.diagramZoom\n      );\n    }\n    return null;\n  }\n\n  get boundingRect() {\n    this._triggerSizePositionRecalculation | 1;\n    return this.getRealBoundingRect();\n  }\n\n  getRealBoundingRect() {\n    if (this.current) {\n      const rect = this.current.getBoundingClientRect();\n      const zoom = this._diagramState.getRenderedZoom();\n\n      return {\n        position: [rect.x, rect.y] as Point,\n        size: [rect.width, rect.height] as Point,\n        diagramZoom: zoom,\n      };\n    }\n\n    return null;\n  }\n\n  getDataAttribute = (name: string): string | null => {\n    if (this.current) {\n      return this.current.getAttribute(name);\n    }\n\n    return null;\n  };\n\n  recalculateSizeAndPosition = () => {\n    this._triggerSizePositionRecalculation += 1;\n  };\n}\n\nexport interface IHtmlElementRect {\n  left: number;\n  top: number;\n  width: number;\n  height: number;\n}\n","import { makeAutoObservable } from 'mobx';\nimport {\n  IUserInteractionTranslate,\n  IUserInteractionTranslateAndZoom,\n} from 'hooks/userInteractions/common';\nimport { HtmlElementRefState } from 'states/htmlElementRefState';\nimport { RootStore } from 'states/rootStore';\nimport { BoundingBox, clampValue, deepCopy } from 'utils/common';\nimport { addPoints, multiplyPoint, Point, subtractPoints } from 'utils/point';\n\nexport class DiagramState\n  implements IUserInteractionTranslate, IUserInteractionTranslateAndZoom\n{\n  private _offset: Point;\n  private _zoom: number;\n  private _ref: HtmlElementRefState;\n  private _rootStore: RootStore;\n\n  private _importGenerationId: number = -1;\n\n  constructor(rootStore: RootStore) {\n    this._ref = new HtmlElementRefState(null, this);\n    this._rootStore = rootStore;\n    this.import();\n\n    makeAutoObservable<DiagramState, '_rootStore'>(this, {\n      _rootStore: false,\n    });\n  }\n\n  import = (state?: IDiagramState) => {\n    this.setOffset(state?.offset);\n    this.setZoom(state?.zoom);\n  };\n\n  export = (): IDiagramState =>\n    deepCopy({\n      offset: this._offset,\n      zoom: this._zoom,\n    });\n\n  setOffset = (newOffset: Point | null | undefined) => {\n    this._offset = newOffset ?? [0, 0];\n  };\n\n  setZoom = (newZoom: number | null | undefined) => {\n    this._zoom = clampValue(\n      newZoom ?? 1,\n      this._rootStore.diagramSettings.zoomInterval\n    );\n  };\n\n  incrementImportGenerationId = () => {\n    this._importGenerationId++;\n  };\n\n  get importGenerationId() {\n    return this._importGenerationId;\n  }\n\n  zoomIn = () => this.zoomIntoCenter(1 / 0.8);\n  zoomOut = () => this.zoomIntoCenter(0.8);\n\n  // See: https://stackoverflow.com/a/30039971/9142642\n  zoomInto = (pointToZoomInto: Point, zoomMultiplicator: number) => {\n    const newZoom = clampValue(\n      this._zoom * zoomMultiplicator,\n      this._rootStore.diagramSettings.zoomInterval\n    );\n\n    const pointDisplacementAfterZoom = multiplyPoint(\n      subtractPoints(pointToZoomInto, this._offset),\n      newZoom / this._zoom\n    );\n\n    this.setTransformation(\n      // Compensate for the displacement by moving the point back under the cursor\n      subtractPoints(pointToZoomInto, pointDisplacementAfterZoom),\n      newZoom\n    );\n  };\n\n  setTransformation = (newOffset: Point, newZoom: number) => {\n    this.setOffset(newOffset);\n    this.setZoom(newZoom);\n  };\n\n  translate = (translateBy: Point) => {\n    this.setOffset(addPoints(this._offset, translateBy));\n  };\n\n  translateAndZoomInto = (\n    translateBy: Point,\n    pointToZoomInto: Point,\n    zoomMultiplicator: number\n  ) => {\n    this.translate(translateBy);\n    this.zoomInto(pointToZoomInto, zoomMultiplicator);\n  };\n\n  zoomIntoCenter = (zoomMultiplicator: number) => {\n    if (this.ref.boundingRect) {\n      this.zoomInto(\n        multiplyPoint(this.ref.boundingRect.size, 0.5),\n        zoomMultiplicator\n      );\n    }\n  };\n\n  get ref() {\n    return this._ref;\n  }\n\n  get offset() {\n    return this._offset;\n  }\n\n  get zoom() {\n    return this._zoom;\n  }\n\n  getRenderedZoom(): number | null {\n    const attr = this.ref.getDataAttribute('data-zoom');\n    return attr ? Number(attr) : null;\n  }\n\n  /**\n   * Get position on Diagram in its coordinates system (including zoom) by mouse/touch position.\n   * @param pointerPosition position of mouse or finger on the screen\n   */\n  getPositionByPointer = (pointerPosition: Point): Point => {\n    const diagRect = this.ref.current?.getBoundingClientRect();\n    if (diagRect) {\n      return multiplyPoint(\n        subtractPoints(\n          pointerPosition,\n          [diagRect.left, diagRect.top],\n          this.offset\n        ),\n        1 / this.zoom\n      );\n    } else return [0, 0];\n  };\n\n  zoomToFit = () => {\n    const nodesBoundingBox = this._getNodesBoundingBoxWithPadding();\n\n    const diagramSize = this.ref.getRealBoundingRect()?.size;\n    if (!diagramSize) {\n      console.warn('Cannot retrieve diagram size');\n      return;\n    }\n\n    const newZoom = clampValue(\n      calculateNewZoomToFitBoundingBox(diagramSize, nodesBoundingBox),\n      this._rootStore.diagramSettings.zoomToFitSettings.zoomInterval\n    );\n    this.setZoom(newZoom);\n\n    this.setOffset(\n      calculateOffsetToCenterBoundingBox(diagramSize, newZoom, nodesBoundingBox)\n    );\n  };\n\n  private _getNodesBoundingBoxWithPadding = (): BoundingBox => {\n    const nodesBoundingBox = this._rootStore.nodesStore.getNodesBoundingBox();\n    const padding = this._rootStore.diagramSettings.zoomToFitSettings.padding;\n    nodesBoundingBox.topLeftCorner = subtractPoints(\n      nodesBoundingBox.topLeftCorner,\n      padding\n    );\n    nodesBoundingBox.bottomRightCorner = addPoints(\n      nodesBoundingBox.bottomRightCorner,\n      padding\n    );\n    nodesBoundingBox.size = subtractPoints(\n      nodesBoundingBox.bottomRightCorner,\n      nodesBoundingBox.topLeftCorner\n    );\n\n    return nodesBoundingBox;\n  };\n}\n\nfunction calculateNewZoomToFitBoundingBox(\n  diagramSize: Point,\n  boundingBox: BoundingBox\n) {\n  // Zoom to fit the largest size, horizontal or vertical\n  const newZoom = Math.min(\n    diagramSize[0] / boundingBox.size[0],\n    diagramSize[1] / boundingBox.size[1]\n  );\n  return newZoom;\n}\n\nfunction calculateOffsetToCenterBoundingBox(\n  diagramSize: Point,\n  zoom: number,\n  boundingBox: BoundingBox\n) {\n  // Take zoom into account\n  const contentSizeWithZoom = multiplyPoint(boundingBox.size, zoom);\n  const topLeftCornerWithZoom = multiplyPoint(boundingBox.topLeftCorner, zoom);\n  const diffBetweenDiagramAndContentSizes = subtractPoints(\n    diagramSize,\n    contentSizeWithZoom\n  );\n  return addPoints(\n    multiplyPoint(topLeftCornerWithZoom, -1), // topLeft corner of content will be at topleft corner of diagram\n    multiplyPoint(diffBetweenDiagramAndContentSizes, 1 / 2) // center content\n  );\n}\n\nexport interface IDiagramState {\n  offset: Point;\n  zoom: number;\n}\n","import { CSSProperties, useMemo } from 'react';\nimport { Dictionary, combineArrays } from 'utils/common';\n\nexport interface IUseStylingOptions {\n  removeDefaultClasses?: boolean;\n  baseState?: string;\n  classes?: Dictionary<string[] | undefined>;\n  defaultClasses?: Dictionary<string[] | undefined>;\n  style?: Dictionary<CSSProperties | undefined>;\n  defaultStyle?: Dictionary<CSSProperties | undefined>;\n  spareStates?: Dictionary<string[]>;\n}\n\nexport function useStyling(\n  options: IUseStylingOptions,\n  state: string\n): { className: string; style: CSSProperties } {\n  return useMemo(() => {\n    return {\n      className: generateClassName(options, state),\n      style: generateStyle(options, state),\n    };\n  }, [options, state]);\n}\n\nfunction generateClassName(options: IUseStylingOptions, state: string) {\n  const defaultStateDefaultClasses =\n    !options.removeDefaultClasses && options.baseState !== state\n      ? getValueForState(options.baseState, options.defaultClasses, options)\n      : undefined;\n\n  const defaultClasses = !options.removeDefaultClasses\n    ? getValueForState(state, options.defaultClasses, options)\n    : undefined;\n\n  const defaultStateClasses =\n    options.baseState !== state\n      ? getValueForState(options.baseState, options.classes, options)\n      : undefined;\n\n  const classes = getValueForState(state, options.classes, options);\n\n  return combineArrays(\n    defaultStateDefaultClasses,\n    defaultClasses,\n    defaultStateClasses,\n    classes\n  ).join(' ');\n}\n\nfunction generateStyle(options: IUseStylingOptions, state: string) {\n  const defaultStateDefaultStyles =\n    options.baseState !== state\n      ? getValueForState(options.baseState, options.defaultStyle, options)\n      : undefined;\n\n  const defaultStyles = getValueForState(state, options.defaultStyle, options);\n\n  const defaultStateStyles =\n    options.baseState !== state\n      ? getValueForState(options.baseState, options.style, options)\n      : undefined;\n\n  const styles = getValueForState(state, options.style, options);\n\n  return {\n    ...defaultStateDefaultStyles,\n    ...defaultStyles,\n    ...defaultStateStyles,\n    ...styles,\n  };\n}\n\nfunction getValueForState<TValue>(\n  state: string | undefined,\n  dict: Dictionary<TValue> | undefined,\n  options: IUseStylingOptions\n) {\n  if (dict && state) {\n    let val = dict[state];\n    if (!val && options.spareStates?.[state]) {\n      const spareStates = options.spareStates[state];\n      for (let i = 0; i < spareStates.length; i++) {\n        const spareState = spareStates[i];\n        val = dict[spareState];\n        if (val) break;\n      }\n    }\n    return val;\n  } else return undefined;\n}\n","import { IUseStylingOptions, useStyling } from 'hooks/useStyling';\nimport { observer } from 'mobx-react-lite';\nimport React, { useMemo } from 'react';\nimport type { ILinkVisualComponentProps } from 'states/linksSettings';\nimport type { IComponentDefinition } from 'states/visualComponentState';\n\nexport const LinkDefault: React.FC<\n  ILinkVisualComponentProps<ILinkDefaultSettings>\n> = observer(({ entity, settings, bind }) => {\n  const mainStylingOptions = useMemo<IUseStylingOptions>(\n    () =>\n      ({\n        removeDefaultClasses: settings?.removeDefaultClasses,\n        baseState: 'base',\n        classes: settings?.mainLine?.classes,\n        defaultClasses: defaultLinkMainLineClasses,\n        style: settings?.mainLine?.style,\n        spareStates: { 'selected-hovered': ['selected', 'hovered'] }\n      }),\n    [settings]\n  );\n\n  const secondaryStylingOptions = useMemo<IUseStylingOptions>(\n    () =>\n      ({\n        removeDefaultClasses: settings?.removeDefaultClasses,\n        baseState: 'base',\n        classes: settings?.secondaryLine?.classes,\n        defaultClasses: defaultLinkSecondaryLineClasses,\n        style: settings?.secondaryLine?.style,\n        spareStates: { 'selected-hovered': ['selected', 'hovered'] }\n      }),\n    [settings]\n  );\n  \n  let state = 'base';\n  if (entity.selected && entity.hovered) state = 'selected-hovered';\n  else if (entity.selected) state = 'selected';\n  else if (entity.hovered) state = 'hovered';\n\n  const mainStyling = useStyling(mainStylingOptions, state);\n  const secondaryStyling = useStyling(secondaryStylingOptions, state);\n\n  if (!entity.path) return null;\n\n  return (\n    <g>\n      <path\n        d={entity.path.svgPath}\n        className={mainStyling.className}\n        style={mainStyling.style}\n      />\n      <path\n        d={entity.path.svgPath}\n        className={secondaryStyling.className}\n        style={secondaryStyling.style}\n        {...bind()}\n      />\n    </g>\n  );\n});\n\nexport interface ILineStyling {\n  classes?: LinkDefaultSettingsByStates<string[]>;\n  style?: LinkDefaultSettingsByStates<React.CSSProperties>;\n}\nexport interface ILinkDefaultSettings {\n  removeDefaultClasses?: true;\n  mainLine?: ILineStyling;\n  secondaryLine?: ILineStyling;\n}\n\nexport type LinkDefaultState =\n  | 'base'\n  | 'hovered'\n  | 'selected'\n  | 'selected-hovered';\nexport type LinkDefaultSettingsByStates<TValue> = {\n  [key in LinkDefaultState]?: TValue;\n};\n\nexport const defaultLinkMainLineClasses: LinkDefaultSettingsByStates<\n  string[]\n> = {\n  base: ['react_fast_diagram_LinkDefault_Line'],\n  hovered: ['react_fast_diagram_LinkDefault_Line_Hovered'],\n  selected: ['react_fast_diagram_LinkDefault_Line_Selected'],\n};\n\nexport const defaultLinkSecondaryLineClasses: LinkDefaultSettingsByStates<\n  string[]\n> = {\n  base: [\n    'react_fast_diagram_LinkDefault_Line',\n    'react_fast_diagram_LinkDefault_SecondaryLine',\n  ],\n  hovered: [\n    'react_fast_diagram_LinkDefault_Line_Hovered',\n    'react_fast_diagram_LinkDefault_SecondaryLine_Hovered',\n  ],\n  'selected-hovered': [\n    'react_fast_diagram_LinkDefault_Line_Selected',\n    'react_fast_diagram_LinkDefault_SecondaryLine_Hovered',\n  ],\n};\n\nexport function createLinkDefault(\n  settings?: ILinkDefaultSettings\n): IComponentDefinition<\n  ILinkVisualComponentProps,\n  Partial<ILinkDefaultSettings>\n> {\n  return {\n    component: LinkDefault,\n    settings: settings,\n  };\n}\n","import { Point } from 'utils/point';\nimport { DirectionWithDiagonals } from 'utils/position';\n\nexport function getDegree(\n  dir: DirectionWithDiagonals | undefined\n): number | undefined {\n  switch (dir) {\n    case 'left':\n      return 180;\n    case 'up':\n      return 90;\n    case 'right':\n      return 0;\n    case 'down':\n      return 270;\n    case 'left-up':\n      return 135;\n    case 'right-up':\n      return 45;\n    case 'right-down':\n      return 315;\n    case 'left-down':\n      return 225;\n    default:\n      return undefined;\n  }\n}\n\nexport function getRadian(\n  dir: DirectionWithDiagonals | undefined\n): number | undefined {\n  const degree = getDegree(dir);\n  return degree !== undefined ? (degree * Math.PI) / 180 : undefined;\n}\n\nexport function createVector(\n  p: Point,\n  length: number,\n  angleInRadian: number | undefined\n): Point {\n  return [\n    p[0] + length * (angleInRadian !== undefined ? Math.cos(angleInRadian) : 0),\n    p[1] +\n      length * (angleInRadian !== undefined ? -Math.sin(angleInRadian) : 0),\n  ];\n}\n\nexport function commandM(point: Point): string {\n  return 'M ' + coordinateFromPoint(point);\n}\n\nexport function commandC(\n  startPoint: Point,\n  control1: Point,\n  control2: Point,\n  endPoint: Point\n): string {\n  return (\n    commandM(startPoint) +\n    ' C ' +\n    coordinateFromPoint(control1) +\n    ' ' +\n    coordinateFromPoint(control2) +\n    ' ' +\n    coordinateFromPoint(endPoint)\n  );\n}\n\nexport function coordinateFromPoint(point: Point) {\n  return `${point[0]} ${point[1]}`;\n}\n","import { commandC, createVector, getRadian } from 'linkConstructors/utils';\nimport { distanceBetweenPoints } from 'utils/point';\nimport {\n  ILinkPathConstructor,\n  ILinkPathConstructorEndpointInfo,\n} from '../states/linksSettings';\n\nfunction curvedLinkPathConstructor(\n  source: ILinkPathConstructorEndpointInfo,\n  target: ILinkPathConstructorEndpointInfo,\n  settings: ICurvedLinkPathConstructorSettings\n): string {\n  if (!source || !target) return '';\n\n  const directionFactor = settings.tweakDirectionFactorBasedOnDistance(\n    distanceBetweenPoints(source.point, target.point),\n    settings.directionFactor\n  );\n\n  return commandC(\n    source.point,\n    createVector(source.point, directionFactor, getRadian(source.direction)),\n    createVector(target.point, directionFactor, getRadian(target.direction)),\n    target.point\n  );\n}\n\nexport interface ICurvedLinkPathConstructorSettings {\n  directionFactor: number;\n  tweakDirectionFactorBasedOnDistance: (\n    distance: number,\n    directionFactor: number\n  ) => number;\n}\n\nconst defaultSettings: ICurvedLinkPathConstructorSettings = {\n  directionFactor: 60,\n  tweakDirectionFactorBasedOnDistance: (distance, directionFactor) => {\n    if (distance < 100) {\n      return directionFactor * (distance / 100);\n    }\n    return directionFactor;\n  },\n};\n\nexport function createCurvedLinkPathConstructor(\n  settings?: Partial<ICurvedLinkPathConstructorSettings>\n): ILinkPathConstructor {\n  return (\n    source: ILinkPathConstructorEndpointInfo,\n    target: ILinkPathConstructorEndpointInfo\n  ) =>\n    curvedLinkPathConstructor(\n      source,\n      target,\n      settings ? { ...defaultSettings, ...settings } : defaultSettings\n    );\n}\n","import { makeAutoObservable } from 'mobx';\nimport { Point } from 'utils/point';\nimport { addPoints } from 'utils/point';\n\nexport class LinkPointEndpointState {\n  private _point: Point;\n\n  constructor(pos: Point) {\n    this._point = pos;\n    makeAutoObservable(this);\n  }\n\n  get point() {\n    return this._point;\n  }\n\n  translateBy = (pointToTranslateBy: Point) => {\n    this._point = addPoints(this._point, pointToTranslateBy);\n  };\n}\n","import { makeAutoObservable } from 'mobx';\nimport { PortState } from 'states/portState';\nimport { RootStore } from 'states/rootStore';\nimport { deepCopy } from 'utils/common';\nimport { addPoints, multiplyPoint, Point } from 'utils/point';\n\nexport class LinkPortEndpointState implements ILinkPortEndpoint {\n  private _port: PortState;\n\n  private _rootStore: RootStore;\n\n  constructor(port: PortState, rootStore: RootStore) {\n    this._port = port;\n    makeAutoObservable(this);\n    this._rootStore = rootStore;\n  }\n\n  export = (): ILinkPortEndpoint =>\n    deepCopy({\n      nodeId: this._port.nodeId,\n      portId: this._port.id,\n    });\n\n  get port(): PortState {\n    return this._port;\n  }\n\n  get point(): Point | undefined {\n    if (this.port.offsetRelativeToNode && this.port.ref.sizeExcludingZoom) {\n      return addPoints(\n        this.port.node.position,\n        addPoints(\n          this.port.offsetRelativeToNode,\n          multiplyPoint(this.port.ref.sizeExcludingZoom, 0.5)\n        )\n      );\n    }\n\n    return undefined;\n  }\n\n  get portId() {\n    return this.port.id;\n  }\n\n  get nodeId() {\n    return this.port.node.id;\n  }\n}\n\nexport interface ILinkPortEndpoint {\n  nodeId: string;\n  portId: string;\n}\n\nexport function linkPortEndpointsEquals(\n  a: ILinkPortEndpoint,\n  b: ILinkPortEndpoint\n): boolean {\n  return a.nodeId === b.nodeId && a.portId === b.portId;\n}\n","import { makeAutoObservable } from 'mobx';\nimport { Dictionary } from 'utils/common';\nimport {\n  IVisualComponentProps,\n  VisualComponentState,\n  IComponentDefinition,\n  VisualComponent,\n} from 'states/visualComponentState';\n\nexport class VisualComponents<\n  TSettings,\n  TComponentProps\n> {\n  private _defaultComponents: Dictionary<VisualComponentState<TComponentProps, TSettings>>;\n  private _components: Dictionary<VisualComponentState<TComponentProps, TSettings>>;\n\n  constructor(\n    defaultComponents: Dictionary<\n      IComponentDefinition<TComponentProps, TSettings> | VisualComponent<TComponentProps>\n    >\n  ) {\n    this._defaultComponents = this._createComponentCollection(\n      defaultComponents\n    );\n    this._components = { ...this._defaultComponents };\n    makeAutoObservable(this);\n  }\n\n  import = (obj?: IVisualComponentsObject<TSettings, TComponentProps>) => {\n    this._components = {\n      ...this._defaultComponents,\n      ...this._createComponentCollection(obj?.components),\n    };\n  };\n\n  getComponent = (\n    type: string | undefined | null\n  ): VisualComponentState<TComponentProps, TSettings> => {\n    const finalComponentType = type ?? COMPONENT_DEFAULT_TYPE;\n    return (\n      this._components[finalComponentType] ?? this._components[COMPONENT_DEFAULT_TYPE]\n    );\n  };\n\n  private _createComponentCollection = (\n    componentsObjects?: Dictionary<\n      IComponentDefinition<TComponentProps, TSettings> | VisualComponent<TComponentProps>\n    >\n  ): Dictionary<VisualComponentState<TComponentProps, TSettings>> => {\n    const collection: Dictionary<VisualComponentState<TComponentProps, TSettings>> = {};\n\n    componentsObjects &&\n      Object.entries(componentsObjects).forEach(([key, value]) => {\n        collection[key] = new VisualComponentState<TComponentProps, TSettings>(value);\n      });\n\n    return collection;\n  };\n}\n\nexport const COMPONENT_DEFAULT_TYPE = 'default';\n\nexport interface IVisualComponentsObject<TSettings, TComponentProps> {\n  components?: Dictionary<\n    IComponentDefinition<TComponentProps, TSettings> | VisualComponent<TComponentProps>\n  >;\n}\n","import { makeAutoObservable, observable } from 'mobx';\nimport { Point } from 'utils/point';\nimport { LinkPointEndpointState } from 'states/linkPointEndpointState';\nimport {\n  LinkPortEndpointState,\n  ILinkPortEndpoint,\n} from 'states/linkPortEndpointState';\nimport { RootStore } from 'states/rootStore';\nimport { COMPONENT_DEFAULT_TYPE } from 'states/visualComponents';\nimport { isBoolean, deepCopy } from 'utils/common';\n\nexport class LinkState implements ILinkInteractionState {\n  private _id: string;\n  private _type: string;\n  private _source?: LinkPortEndpointState;\n  private _sourceEndpoint: ILinkPortEndpoint;\n  private _target?: LinkPortEndpointState;\n  private _targetEndpoint: ILinkPortEndpoint;\n  private _segments: ILinkSegment[];\n  private _selected: boolean;\n  private _hovered: boolean;\n  private _data: any;\n  private _isSelectionEnabled: boolean | null;\n\n  private _rootStore: RootStore;\n\n  constructor(rootStore: RootStore, id: string, state: ILinkStateWithoutId) {\n    this._rootStore = rootStore;\n\n    this._id = id;\n    this._selected = false;\n    this._hovered = false;\n    this.import(state);\n\n    makeAutoObservable(this, {\n      // @ts-ignore\n      _rootStore: false\n    });\n  }\n\n  import = (state: ILinkStateWithoutId) => {\n    this._sourceEndpoint = {\n      nodeId: state.source.nodeId,\n      portId: state.source.portId,\n    };\n    this._targetEndpoint = {\n      nodeId: state.target.nodeId,\n      portId: state.target.portId,\n    };\n    this.setType(state.type);\n    this.setSegments(state.segments);\n    this.setData(state.data);\n    this.setIsSelectionEnabled(state?.isSelectionEnabled);\n  };\n\n  export = (): ILinkStateWithId => ({\n    ...deepCopy({\n      id: this._id,\n      source: this._sourceEndpoint,\n      target: this._targetEndpoint,\n      type: this.type,\n      segments: this.segments,\n      data: this.data,\n      isSelectionEnabled: this._isSelectionEnabled ?? undefined,\n    }),\n  });\n\n  get id() {\n    return this._id;\n  }\n\n  get type() {\n    return this._type;\n  }\n\n  setType = (value: string | null | undefined) => {\n    this._type = value ?? COMPONENT_DEFAULT_TYPE;\n  };\n\n  get segments() {\n    return this._segments;\n  }\n\n  setSegments = (value: ILinkSegment[] | null | undefined) => {\n    this._segments = value ?? [];\n  };\n\n  get path(): ILinkPath | undefined {\n    if (this.source && this.target) {\n      return createLinkPath(this._rootStore, this.source, this.target);\n    }\n\n    return undefined;\n  }\n\n  get componentDefinition() {\n    const { visualComponents } = this._rootStore.linksSettings;\n    return visualComponents.getComponent(this.type);\n  }\n\n  get selected() {\n    return this._selected;\n  }\n\n  set selected(value: boolean) {\n    this._selected = value;\n  }\n\n  get hovered() {\n    return this._hovered;\n  }\n\n  set hovered(value: boolean) {\n    this._hovered = value;\n  }\n\n  get data() {\n    return this._data;\n  }\n\n  get source() {\n    return this._createEndpointState(this.sourceEndpoint);\n  }\n\n  get sourceEndpoint() {\n    return this._sourceEndpoint;\n  }\n\n  get target() {\n    return this._createEndpointState(this.targetEndpoint);\n  }\n\n  get targetEndpoint() {\n    return this._targetEndpoint;\n  }\n\n  swapEndpoints = () => {\n    const tmp = this.sourceEndpoint;\n    this._sourceEndpoint = this.targetEndpoint;\n    this._targetEndpoint = tmp;\n  }\n\n  setData = (value: any) => {\n    this._data = value ?? null;\n  };\n\n  get isSelectionEnabled(): boolean {\n    return this._isSelectionEnabled === null\n      ? this._rootStore.diagramSettings.userInteraction.linkSelection\n      : this._isSelectionEnabled;\n  }\n\n  setIsSelectionEnabled = (value: boolean | null | undefined) => {\n    this._isSelectionEnabled = isBoolean(value) ? value : null;\n  };\n\n  private _createEndpointState = (\n    endpoint: ILinkPortEndpoint\n  ): LinkPortEndpointState | undefined => {\n    const node = this._rootStore.nodesStore.getNode(endpoint.nodeId);\n    if (!node) return undefined;\n    const port = node.getPort(endpoint.portId);\n    if (!port) return undefined;\n\n    return new LinkPortEndpointState(port, this._rootStore);\n  };\n}\n\nexport function createLinkPath(\n  rootStore: RootStore,\n  source: LinkPortEndpointState,\n  target: LinkPortEndpointState | LinkPointEndpointState\n): ILinkPath | undefined {\n  const { linksSettings } = rootStore;\n  if (\n    !source.port ||\n    (target instanceof LinkPortEndpointState && !target.port) ||\n    !source.point ||\n    !target.point\n  ) {\n    return undefined;\n  }\n\n  const pathStr = linksSettings.pathConstructor(\n    {\n      point: source.point,\n      portType: source.port.type,\n      direction: source.port.linkDirection,\n    },\n    {\n      point: target.point,\n      portType:\n        target instanceof LinkPointEndpointState\n          ? undefined\n          : target.port!.type,\n      direction:\n        target instanceof LinkPointEndpointState\n          ? undefined\n          : target.port!.linkDirection,\n    }\n  );\n\n  return {\n    svgPath: pathStr,\n    source: source.point,\n    target: target.point,\n  };\n}\n\nexport interface ILinkInteractionState {\n  selected: boolean;\n  hovered: boolean;\n}\n\nexport interface ILinkStateWithoutId {\n  type?: string;\n  source: ILinkPortEndpoint;\n  target: ILinkPortEndpoint;\n  segments?: ILinkSegment[];\n  data?: any;\n  isSelectionEnabled?: boolean;\n}\n\nexport interface ILinkStateWithId extends ILinkStateWithoutId {\n  id: string;\n}\n\nexport interface ILinkState extends ILinkStateWithoutId {\n  id?: string;\n}\n\nexport interface ILinkSegment {\n  position: Point;\n}\n\nexport interface ILinkPath {\n  svgPath: string;\n  source: Point;\n  target: Point;\n}\n","import { makeAutoObservable } from 'mobx';\nimport { Point } from 'utils/point';\nimport { subtractPoints, multiplyPoint, addPoints } from 'utils/point';\nimport { LinkPointEndpointState } from 'states/linkPointEndpointState';\nimport { LinkPortEndpointState } from 'states/linkPortEndpointState';\nimport {\n  ILinkInteractionState,\n  ILinkPath,\n  createLinkPath,\n} from 'states/linkState';\nimport { PortState } from 'states/portState';\nimport { RootStore } from 'states/rootStore';\n\nexport class LinkCreationState implements ILinkInteractionState {\n  private _source?: LinkPortEndpointState = undefined;\n  private _target?: LinkPointEndpointState = undefined;\n  private _targetPortCandidate?: PortState = undefined;\n\n  private _rootStore: RootStore;\n\n  constructor(rootStore: RootStore) {\n    makeAutoObservable(this);\n    this._rootStore = rootStore;\n  }\n\n  get selected() {\n    return true;\n  }\n\n  get hovered() {\n    return true;\n  }\n\n  get source() {\n    return this._source;\n  }\n\n  get target() {\n    return this._target;\n  }\n\n  get targetPortCandidate() {\n    return this._targetPortCandidate;\n  }\n\n  get isLinking() {\n    return !!this._source;\n  }\n\n  startLinking = (portState: PortState, pointOnPort: Point): boolean => {\n    this._resetProps();\n    this._source = new LinkPortEndpointState(portState, this._rootStore);\n\n    const sourcePoint = this._source.point;\n    const portSize = this._source.port!.ref.sizeExcludingZoom;\n    if (sourcePoint && portSize) {\n      // endpoint point is calculated for center of port\n      const topLeftCornerPoint = subtractPoints(\n        sourcePoint,\n        multiplyPoint(portSize, 0.5)\n      );\n      this._target = new LinkPointEndpointState(\n        addPoints(\n          topLeftCornerPoint,\n          multiplyPoint(pointOnPort, 1 / this._rootStore.diagramState.zoom)\n        )\n      );\n    } else {\n      this._resetProps();\n      return false;\n    }\n\n    this._rootStore.callbacks.linkingStarted({\n      sourcePort: portState,\n    });\n\n    return true;\n  };\n\n  setTargetPortCandidate = (portState: PortState) => {\n    if (!this._source) return;\n\n    const canAddLink = this._rootStore.linksStore.validateLink({\n      source: {\n        nodeId: this._source.port.nodeId,\n        portId: this._source.port.id,\n      },\n      target: {\n        nodeId: portState.nodeId,\n        portId: portState.id,\n      },\n    });\n\n    this._targetPortCandidate = portState;\n    if (canAddLink.success) {\n      portState.validForConnection = true;\n    } else {\n      portState.validForConnection = false;\n    }\n  };\n\n  resetTargetPortCandidate = (portState: PortState) => {\n    if (this._targetPortCandidate === portState) {\n      this._targetPortCandidate = undefined;\n    }\n    portState.validForConnection = true;\n  };\n\n  stopLinking = () => {\n    let linked = false;\n    if (this._targetPortCandidate && this._source) {\n      const result = this._rootStore.linksStore.addLink({\n        source: {\n          nodeId: this._source.port.nodeId,\n          portId: this._source.port.id,\n        },\n        target: {\n          nodeId: this._targetPortCandidate.nodeId,\n          portId: this._targetPortCandidate.id,\n        },\n      });\n\n      if (result.success) {\n        this._rootStore.selectionState.select(result.value, true);\n      }\n\n      linked = result.success;\n    }\n\n    if (this._source){\n      this._rootStore.callbacks.linkingEnded({\n        sourcePort: this._source.port,\n        targetPort: this._targetPortCandidate,\n        linked: linked,\n      });\n    }\n\n    this._resetProps();\n  };\n\n  get componentDefinition() {\n    const { visualComponents } = this._rootStore.linksSettings;\n    return visualComponents.getComponent(LINK_CREATION_COMPONENT_TYPE);\n  }\n\n  get path(): ILinkPath | undefined {\n    if (!this._source || !this._target) return undefined;\n    else return createLinkPath(this._rootStore, this._source, this._target);\n  }\n\n  private _resetProps = () => {\n    if (this._source) {\n      if (this._source.port) {\n        this._source.port.validForConnection = true;\n      }\n      this._source = undefined;\n    }\n    this._target = undefined;\n    if (this._targetPortCandidate) {\n      this._targetPortCandidate.validForConnection = true;\n      this._targetPortCandidate = undefined;\n    }\n  };\n}\n\nexport const LINK_CREATION_COMPONENT_TYPE: string = 'linkCreation';\n","import React, { CSSProperties } from 'react';\n\nexport interface ISvgMarkerSettings {\n  id: string;\n  style?: CSSProperties;\n}\n\nexport interface ISvgCircleMarkerSettings extends ISvgMarkerSettings {\n  radius?: number;\n}\n\nconst CircleMarker = React.memo((props: ISvgCircleMarkerSettings) => {\n  const finalSettings: ISvgCircleMarkerSettings = {\n    id: props.id,\n    radius: props.radius ?? 2,\n    style: {\n      stroke: 'none',\n      fill: 'rgb(194, 194, 194)',\n      ...props.style,\n    },\n  };\n  return (\n    <marker\n      id={finalSettings.id}\n      overflow='visible'\n      markerUnits='userSpaceOnUse'\n    >\n      <circle r={finalSettings.radius} style={finalSettings.style} />\n    </marker>\n  );\n});\n\nexport function createCircleMarker(\n  settings: ISvgCircleMarkerSettings\n): React.FunctionComponent {\n  return () => <CircleMarker {...settings} />;\n}\n\nexport interface ISvgArrowMarkerSettings extends ISvgMarkerSettings {\n  height?: number;\n  width?: number;\n}\n\nconst ArrowMarker = React.memo((props: ISvgArrowMarkerSettings) => {\n  const finalSettings = {\n    id: props.id,\n    height: props.height ?? 10,\n    width: props.width ?? 10,\n    style: {\n      stroke: 'none',\n      fill: 'rgb(194, 194, 194)',\n      ...props.style,\n    },\n  };\n  return (\n    <marker\n      id={finalSettings.id}\n      overflow='visible'\n      markerUnits='userSpaceOnUse'\n      refX='-0.5'\n      orient='auto'\n    >\n      <path\n        d={`M 0 0 -${finalSettings.width} -${finalSettings.height / 2} -${\n          finalSettings.width\n        } ${finalSettings.height / 2} z`}\n        style={finalSettings.style}\n      />\n    </marker>\n  );\n});\n\nexport function createArrowMarker(\n  settings: ISvgArrowMarkerSettings\n): React.FunctionComponent {\n  return () => <ArrowMarker {...settings} />;\n}\n","import { makeAutoObservable } from 'mobx';\nimport { createLinkDefault, LinkDefault } from 'components/link/LinkDefault';\nimport { createCurvedLinkPathConstructor } from 'linkConstructors/curved';\nimport { Point } from 'utils/point';\nimport { DirectionWithDiagonals } from 'utils/position';\nimport {\n  LinkCreationState,\n  LINK_CREATION_COMPONENT_TYPE,\n} from 'states/linkCreationState';\nimport { LinkState } from 'states/linkState';\nimport {\n  VisualComponents,\n  COMPONENT_DEFAULT_TYPE,\n  IVisualComponentsObject,\n} from 'states/visualComponents';\nimport { IVisualComponentProps } from 'states/visualComponentState';\nimport { createArrowMarker, createCircleMarker } from 'components/link/Markers';\nimport { ReactDOMAttributes } from '@use-gesture/react/dist/declarations/src/types';\n\nexport class LinksSettings {\n  private _pathConstructor: ILinkPathConstructor;\n  private _visualComponents = new VisualComponents<\n    any,\n    ILinkVisualComponentProps\n  >({\n    [COMPONENT_DEFAULT_TYPE]: createLinkDefault(),\n    [LINK_CREATION_COMPONENT_TYPE]: createLinkDefault({\n      mainLine: {\n        style: {\n          base: { markerEnd: 'url(#default_circle_marker_hovered)' },\n        },\n      },\n    }),\n  });\n  private _preferLinksDirection: 'horizontal' | 'vertical' | 'both';\n\n  private _defaultSvgMarkers: React.FunctionComponent[] = [\n    createCircleMarker({\n      id: 'default_circle_marker',\n      style: {\n        fill: '#c2c2c2',\n      },\n    }),\n    createCircleMarker({\n      id: 'default_circle_marker_selected',\n      style: {\n        fill: '#6eb7ff',\n      },\n    }),\n    createCircleMarker({\n      id: 'default_circle_marker_hovered',\n      style: {\n        fill: '#a1d0ff',\n      },\n    }),\n    createArrowMarker({\n      id: 'default_arrow_marker',\n      style: {\n        fill: '#c2c2c2',\n      },\n    }),\n    createArrowMarker({\n      id: 'default_arrow_marker_selected',\n      style: {\n        fill: '#6eb7ff',\n      },\n    }),\n    createArrowMarker({\n      id: 'default_arrow_marker_hovered',\n      style: {\n        fill: '#a1d0ff',\n      },\n    }),\n  ];\n  private _svgMarkers: React.FunctionComponent[] = [];\n\n  constructor() {\n    this.import();\n    makeAutoObservable(this);\n  }\n\n  import = (obj?: ILinksSettings) => {\n    this._visualComponents.import(obj);\n    this.setPathConstructor(obj?.pathConstructor);\n    this._preferLinksDirection = obj?.preferLinksDirection ?? 'horizontal';\n    this._svgMarkers = obj?.svgMarkers\n      ? [...obj.svgMarkers, ...this._defaultSvgMarkers]\n      : this._defaultSvgMarkers;\n  };\n\n  get pathConstructor() {\n    return this._pathConstructor;\n  }\n\n  setPathConstructor = (value: ILinkPathConstructor | null | undefined) => {\n    this._pathConstructor = value ?? defaultPathConstructor;\n  };\n\n  get visualComponents() {\n    return this._visualComponents;\n  }\n\n  get preferLinksDirection() {\n    return this._preferLinksDirection;\n  }\n\n  get svgMarkers(): ReadonlyArray<React.FunctionComponent> {\n    return this._svgMarkers;\n  }\n}\n\nconst defaultPathConstructor = createCurvedLinkPathConstructor();\n\nexport interface ILinkVisualComponentProps<TSettings = any>\n  extends IVisualComponentProps<LinkState | LinkCreationState, TSettings> {\n  bind: (...args: any[]) => ReactDOMAttributes;\n}\n\nexport interface ILinksSettings\n  extends IVisualComponentsObject<any, ILinkVisualComponentProps> {\n  pathConstructor?: ILinkPathConstructor;\n  preferLinksDirection?: LinksSettings['preferLinksDirection'];\n  svgMarkers?: React.FunctionComponent[];\n}\n\nexport interface ILinkPathConstructorEndpointInfo {\n  point: Point;\n  portType?: string;\n  direction?: DirectionWithDiagonals;\n}\n\nexport type ILinkPathConstructor = (\n  source: ILinkPathConstructorEndpointInfo,\n  target: ILinkPathConstructorEndpointInfo\n) => string;\n","import { makeAutoObservable, reaction, untracked } from 'mobx';\nimport { addPoints, multiplyPoint, Point, subtractPoints } from 'utils/point';\nimport { DirectionWithDiagonals } from 'utils/position';\nimport { HtmlElementRefState } from 'states/htmlElementRefState';\nimport { LinkState } from 'states/linkState';\nimport { NodeState } from 'states/nodeState';\nimport { RootStore } from 'states/rootStore';\nimport { COMPONENT_DEFAULT_TYPE } from 'states/visualComponents';\nimport { isBoolean, deepCopy } from 'utils/common';\nimport { PortPosition } from 'hooks/useRelativePositionStyles';\n\nexport class PortState {\n  private _id: string;\n  private _label?: string | null;\n  private _type?: string | null;\n  private _data: any;\n  private _linkDirection?: DirectionWithDiagonals | null;\n  private _isConnectionEnabled?: boolean | null;\n  private _position?: PortPosition | null;\n  private _offsetFromNodeCenter?: number | null;\n  private _offsetFromOrigin?: Point | null;\n\n  private _ref: HtmlElementRefState;\n  private _dragging: boolean = false;\n  private _hovered: boolean = false;\n  private _validForConnection: boolean = true;\n\n  private _offsetRecalculationRequested: number = 0;\n  private _triggerOffsetRecalculation: number = 0;\n\n  private _node: NodeState;\n  private _rootStore: RootStore;\n\n  constructor(\n    rootStore: RootStore,\n    node: NodeState,\n    id: string,\n    state?: IPortStateWithoutIds\n  ) {\n    this._id = id;\n    this._node = node;\n    this._rootStore = rootStore;\n    this._ref = new HtmlElementRefState(null, rootStore.diagramState);\n    this.import(state);\n\n    makeAutoObservable<PortState, '_rootStore' | '_node' | '_ref'>(this, {\n      _node: false,\n      node: false,\n      _rootStore: false,\n      _ref: false,\n    });\n\n    reaction(\n      () => [\n        this._label,\n        this._type,\n        this._data,\n        this._position,\n        this._offsetFromNodeCenter,\n        this._offsetFromOrigin,\n      ],\n      () => {\n        this.recalculateOffset();\n      }\n    );\n  }\n\n  get nodeComponentPortState(): IPortFinalState | undefined {\n    return this.node.componentDefinition.settings?.ports?.find(\n      (p) => p.id === this._id\n    );\n  }\n\n  get id() {\n    return this._id;\n  }\n\n  get nodeId() {\n    return this.node.id;\n  }\n\n  get fullId() {\n    return createFullPortId(this.nodeId, this.id);\n  }\n\n  get ref() {\n    return this._ref;\n  }\n\n  get dragging() {\n    return this._dragging;\n  }\n\n  set dragging(value: boolean) {\n    this._dragging = value;\n  }\n\n  get hovered() {\n    return this._hovered;\n  }\n\n  set hovered(value: boolean) {\n    this._hovered = value;\n  }\n\n  get validForConnection() {\n    return this._validForConnection;\n  }\n\n  set validForConnection(value: boolean) {\n    this._validForConnection = value;\n  }\n\n  get label(): string | undefined {\n    return this._label === undefined\n      ? this.nodeComponentPortState?.label\n      : this._label ?? undefined;\n  }\n\n  setLabel = (value: string | null | undefined) => {\n    this._label = value;\n  };\n\n  get type(): string {\n    return (\n      (this._type === undefined\n        ? this.nodeComponentPortState?.type\n        : this._type) ?? COMPONENT_DEFAULT_TYPE\n    );\n  }\n\n  setType = (value: string | null | undefined) => {\n    this._type = value;\n  };\n\n  get position(): PortPosition | undefined {\n    return this._position === undefined\n      ? this.nodeComponentPortState?.position\n      : this._position ?? undefined;\n  }\n\n  setPosition = (value: PortPosition | null | undefined) => {\n    this._position = value;\n  };\n\n  get offsetFromNodeCenter(): number | undefined {\n    return this._offsetFromNodeCenter === undefined\n      ? this.nodeComponentPortState?.offsetFromNodeCenter\n      : this._offsetFromNodeCenter ?? undefined;\n  }\n\n  setOffsetFromNodeCenter = (value: number | null | undefined) => {\n    this._offsetFromNodeCenter = value;\n  };\n\n  get offsetFromOrigin(): Point | undefined {\n    return this._offsetFromOrigin === undefined\n      ? this.nodeComponentPortState?.offsetFromOrigin\n      : this._offsetFromOrigin ?? undefined;\n  }\n\n  setOffsetFromOrigin = (value: Point | null | undefined) => {\n    this._offsetFromOrigin = value;\n  };\n\n  /**\n   * Update all properties. If some property missing in `state` parameter, the default one will be used.\n   */\n  import = (state?: IPortStateWithoutIds) => {\n    this.setType(state?.type);\n    this.setLabel(state?.label);\n    this.setData(state?.data);\n    this.setLinkDirection(state?.linkDirection);\n    this.setIsConnectionEnabled(state?.isConnectionEnabled);\n    this.setPosition(state?.position);\n    this.setOffsetFromNodeCenter(state?.offsetFromNodeCenter);\n    this.setOffsetFromOrigin(state?.offsetFromOrigin);\n  };\n\n  /**\n   * Update only those properties presented in `state` parameter\n   */\n  update = (state?: IPortStateWithoutIds) => {\n    if (!state) return;\n\n    state.label !== undefined && this.setLabel(state.label);\n    state.type !== undefined && this.setType(state.type);\n    state.data !== undefined && this.setData(state.data);\n    state.linkDirection !== undefined &&\n      this.setLinkDirection(state.linkDirection);\n    state.isConnectionEnabled !== undefined &&\n      this.setIsConnectionEnabled(state.isConnectionEnabled);\n    state.position !== undefined && this.setPosition(state?.position);\n    state.offsetFromNodeCenter !== undefined &&\n      this.setOffsetFromNodeCenter(state?.offsetFromNodeCenter);\n    state.offsetFromOrigin !== undefined &&\n      this.setOffsetFromOrigin(state?.offsetFromOrigin);\n  };\n\n  export = (): IPortExport =>\n    deepCopy({\n      id: this._id,\n      nodeId: this.nodeId,\n      label: this._label,\n      type: this._type,\n      data: this._data,\n      linkDirection: this._linkDirection,\n      isConnectionEnabled: this._isConnectionEnabled,\n      position: this._position,\n      offsetFromNodeCenter: this._offsetFromNodeCenter,\n      offsetFromOrigin: this._offsetFromOrigin,\n    });\n\n  get data() {\n    return this._data === undefined\n      ? this.nodeComponentPortState?.data\n      : this._data;\n  }\n\n  setData = (value: any) => {\n    this._data = value;\n  };\n\n  get node(): NodeState {\n    return this._node;\n  }\n\n  /**\n   * Offset relative to parent node, helps us to calculate positions of link endpoints for example.\n   * @returns offset excluding zoom\n   */\n  get offsetRelativeToNode(): Point | null {\n    /* This value is implemented as getter to automatically recalculate \n    value if html element is attached (react ref) and also it helps with performance\n    as if there is no observers the value will not be calculated */\n    this._triggerOffsetRecalculation | 1;\n\n    /* There is another method of calculating offset by using getBoundingClientReact, but it \n    has its drawbacks like that it return position related to viewport and therefore requires\n    from us to synchronize moments when node and port getBoundingClientReact is called. It also\n    requires using diagram zoom to correctly calculate offset. */\n    if (this.ref.current && this.node.ref.current) {\n      let iterElement = this.ref.current as HTMLElement | null;\n      let nextOffsetParent = null as Element | null;\n      let acumLeft = 0;\n      let acumTop = 0;\n\n      while (this.node.ref.current !== iterElement && iterElement) {\n        if (!nextOffsetParent || nextOffsetParent === iterElement) {\n          const translate = getTranslate(iterElement);\n          acumLeft += iterElement.offsetLeft + translate[0];\n          acumTop += iterElement.offsetTop + translate[1];\n          nextOffsetParent = iterElement.offsetParent;\n        }\n        iterElement = iterElement.parentElement;\n      }\n      return [acumLeft, acumTop];\n    }\n\n    return null;\n  }\n\n  recalculateOffset = () => {\n    this._offsetRecalculationRequested += 1;\n  };\n\n  recalculateOffsetImmediately = () => {\n    this._triggerOffsetRecalculation += 1;\n  };\n\n  /**\n   * Is used to trigger port rerendering and following offset recalculation\n   */\n  get offsetRecalculationRequested() {\n    return this._offsetRecalculationRequested;\n  }\n\n  get componentDefinition() {\n    const { portVisualComponents } = this._rootStore.portsSettings;\n    return portVisualComponents.getComponent(this.type);\n  }\n\n  get connectedLinks(): LinkState[] {\n    return this._rootStore.linksStore.getPortLinks(this.nodeId, this.id);\n  }\n\n  get connectedPorts(): PortState[] {\n    return this.connectedLinks\n      .map((v) =>\n        v.sourceEndpoint.portId === this._id ? v.target?.port : v.source?.port\n      )\n      .filter((p) => p) as PortState[]; // cast because typescript cannot deal with undefined check\n  }\n\n  get linkDirection(): DirectionWithDiagonals | undefined {\n    if (this._linkDirection) return this._linkDirection;\n    if (this.position) return positionToLinkDirection[this.position];\n\n    // Try to guess\n    if (!this.offsetRelativeToNode) return undefined;\n\n    const nodeCenter =\n      this.node.ref.sizeExcludingZoom &&\n      multiplyPoint(this.node.ref.sizeExcludingZoom, 0.5);\n    if (!nodeCenter) return undefined;\n\n    if (this._rootStore.linksSettings.preferLinksDirection === 'horizontal') {\n      return this.offsetRelativeToNode[0] < nodeCenter[0] ? 'left' : 'right';\n    } else if (\n      this._rootStore.linksSettings.preferLinksDirection === 'vertical'\n    ) {\n      return this.offsetRelativeToNode[1] < nodeCenter[1] ? 'up' : 'down';\n    }\n  }\n\n  setLinkDirection = (value: DirectionWithDiagonals | undefined | null) => {\n    this._linkDirection = value;\n  };\n\n  get isConnectionEnabled(): boolean {\n    return (\n      (this._isConnectionEnabled === undefined\n        ? this.nodeComponentPortState?.isConnectionEnabled\n        : this._isConnectionEnabled) ??\n      this._rootStore.diagramSettings.userInteraction.portConnection\n    );\n  }\n\n  setIsConnectionEnabled = (value: boolean | null | undefined) => {\n    this._isConnectionEnabled = value;\n  };\n}\n\nconst positionToLinkDirection: {\n  [key in PortPosition]: DirectionWithDiagonals;\n} = {\n  'left-center': 'left',\n  'left-bottom': 'left',\n  'left-top': 'left',\n\n  'top-left': 'up',\n  'top-center': 'up',\n  'top-right': 'up',\n\n  'right-center': 'right',\n  'right-bottom': 'right',\n  'right-top': 'right',\n\n  'bottom-left': 'down',\n  'bottom-center': 'down',\n  'bottom-right': 'down',\n\n  'diagonal-left-top': 'left-up',\n  'diagonal-right-top': 'right-up',\n  'diagonal-right-bottom': 'right-down',\n  'diagonal-left-bottom': 'left-down',\n};\n\n// https://stackoverflow.com/questions/21912684/how-to-get-value-of-translatex-and-translatey\n// https://gist.github.com/aderaaij/a6b666bf756b2db1596b366da921755d\nfunction getTranslate(item: HTMLElement): Point {\n  let transArr: Point = [0, 0];\n  if (!window.getComputedStyle) {\n    return transArr;\n  }\n  const style = window.getComputedStyle(item);\n  const transform = style.transform || style.webkitTransform;\n  // matrix(a, b, c, d, tx, ty)\n  // consider also to add matrix3d(a, b, 0, 0, c, d, 0, 0, 0, 0, 1, 0, tx, ty, 0, 1)\n  let mat = transform.match(/^matrix\\((.+)\\)$/);\n  if (mat) {\n    transArr = [\n      parseFloat(mat[1].split(', ')[4]),\n      parseFloat(mat[1].split(', ')[5]),\n    ];\n  }\n\n  return transArr;\n}\n\nexport interface IPortFinalState {\n  id: string;\n  label?: string;\n  type?: string;\n  data?: any;\n  linkDirection?: DirectionWithDiagonals;\n  isConnectionEnabled?: boolean;\n  position?: PortPosition;\n  offsetFromNodeCenter?: number;\n  offsetFromOrigin?: Point;\n}\n\nexport interface IPortStateWithoutIds {\n  label?: string | null;\n  type?: string | null;\n  data?: any;\n  linkDirection?: DirectionWithDiagonals | null;\n  isConnectionEnabled?: boolean | null;\n  position?: PortPosition | null;\n  offsetFromNodeCenter?: number | null;\n  offsetFromOrigin?: Point | null;\n}\n\nexport interface IPortState extends IPortStateWithoutIds {\n  id: string;\n}\n\nexport interface IPortExport extends IPortStateWithoutIds {\n  id: string;\n  nodeId: string;\n}\n\nexport function createFullPortId(nodeId: string, portId: string) {\n  return `${nodeId}-${portId}`;\n}\n","function guidS4() {\n  return Math.floor((1 + Math.random()) * 0x10000)\n    .toString(16)\n    .substring(1);\n}\n\nexport function guid() {\n  // return id of format 'aaaaaaaa'-'aaaa'-'aaaa'-'aaaa'-'aaaaaaaaaaaa'\n  return (\n    guidS4() +\n    guidS4() +\n    '-' +\n    guidS4() +\n    '-' +\n    guidS4() +\n    '-' +\n    guidS4() +\n    '-' +\n    guidS4() +\n    guidS4() +\n    guidS4()\n  );\n}\n\nexport function guidForcedUniqueness(\n  checkExistence: (id: string) => boolean\n): string {\n  let id = guid();\n  while (checkExistence(id)) {\n    id = guid();\n  }\n\n  return id;\n}","import { makeAutoObservable } from 'mobx';\nimport { LinkCreationState } from 'states/linkCreationState';\nimport {\n  ILinkPortEndpoint,\n  linkPortEndpointsEquals,\n} from 'states/linkPortEndpointState';\nimport { ILinkState, ILinkStateWithId, LinkState } from 'states/linkState';\nimport { createFullPortId, PortState } from 'states/portState';\nimport { RootStore } from 'states/rootStore';\nimport { guidForcedUniqueness } from 'utils/guid';\nimport {\n  errorResult,\n  errorValueResult,\n  isError,\n  isSuccess,\n  SuccessOrErrorResult,\n  successResult,\n  successValueResult,\n} from 'utils/result';\n\nexport class LinksStore {\n  private _links: Map<string, LinkState>;\n  private _nodesLinksCollection: Map<string, LinkState[]>;\n  private _linkCreation: LinkCreationState;\n\n  private _rootStore: RootStore;\n\n  constructor(rootStore: RootStore) {\n    this._linkCreation = new LinkCreationState(rootStore);\n    this.import();\n    makeAutoObservable(this);\n    this._rootStore = rootStore;\n  }\n\n  import = (newLinks?: ILinkState[]) => {\n    this._links = new Map();\n    this._nodesLinksCollection = new Map();\n\n    if (newLinks) {\n      let results = this._addLinksInternal(newLinks, false);\n\n      this._rootStore.callbacks.linksAdded({\n        addedLinks: results.filter(isSuccess).map((r) => r.value),\n        failedToAddLinks: results.filter(isError),\n        importing: true,\n      });\n    }\n  };\n\n  export = (): ILinkState[] =>\n    Array.from(this._links).map(([key, value]) => value.export());\n\n  get links(): ReadonlyMap<string, LinkState> {\n    return this._links;\n  }\n\n  get linkCreation() {\n    return this._linkCreation;\n  }\n\n  getNodeLinks = (nodeId: string): LinkState[] => {\n    return this._nodesLinksCollection.get(nodeId) ?? [];\n  };\n\n  getLink = (id: string): LinkState | undefined => {\n    return this.links.get(id);\n  };\n\n  getPortLinks = (nodeId: string, portId: string): LinkState[] => {\n    const nodeLinks = this.getNodeLinks(nodeId);\n    const fullPortId = createFullPortId(nodeId, portId);\n    return nodeLinks.filter(\n      (l) =>\n        (l.source && l.source.port.fullId === fullPortId) ||\n        (l.target && l.target.port.fullId === fullPortId)\n    );\n  };\n\n  addLinks = (\n    links: ILinkState[],\n    rewriteIfAlreadyConnected: boolean = false\n  ): SuccessOrErrorResult<LinkState, ILinkState>[] => {\n    let results = this._addLinksInternal(links, rewriteIfAlreadyConnected);\n\n    this._rootStore.callbacks.linksAdded({\n      addedLinks: results.filter(isSuccess).map((r) => r.value),\n      failedToAddLinks: results.filter(isError),\n      importing: false,\n    });\n\n    return results;\n  };\n\n  addLink = (\n    link: ILinkState,\n    rewriteIfAlreadyConnected: boolean = false\n  ): SuccessOrErrorResult<LinkState, ILinkState> => {\n    const result = this._addLinkInternal(link, rewriteIfAlreadyConnected);\n\n    this._rootStore.callbacks.linksAdded({\n      addedLinks: result.success ? [result.value] : [],\n      failedToAddLinks: result.success ? [] : [result],\n      importing: false,\n    });\n\n    return result;\n  };\n\n  removeLink = (linkId: string): ILinkStateWithId | undefined => {\n    const removedLink = this._removeLink(linkId);\n\n    this._rootStore.callbacks.linksRemoved({\n      removedLinks: removedLink ? [removedLink] : [],\n      failedToRemoveLinkIds: removedLink ? [] : [linkId],\n    });\n\n    return removedLink;\n  };\n\n  removeLinks = (\n    linkIds: string[]\n  ): SuccessOrErrorResult<ILinkStateWithId, string>[] => {\n    let results = this._removeLinks(linkIds);\n\n    this._rootStore.callbacks.linksRemoved({\n      removedLinks: results.filter(isSuccess).map((r) => r.value),\n      failedToRemoveLinkIds: results.filter(isError).map((r) => r.value),\n    });\n\n    return results;\n  };\n\n  removeNodeLinks = (nodeId: string) => {\n    const linkIds = this.getNodeLinks(nodeId).map((l) => l.id);\n    this.removeLinks(linkIds);\n  };\n\n  removePortLinks = (nodeId: string, portId: string) => {\n    if (!nodeId || !portId) return;\n\n    const endpointToRemove = {\n      nodeId,\n      portId,\n    };\n    const linkIds = this.getNodeLinks(nodeId)\n      .filter(\n        (l) =>\n          linkPortEndpointsEquals(l.sourceEndpoint, endpointToRemove) ||\n          linkPortEndpointsEquals(l.targetEndpoint, endpointToRemove)\n      )\n      .map((l) => l.id);\n    this.removeLinks(linkIds);\n  };\n\n  validateLink = (\n    link: ILinkState,\n    ignoreIfAlreadyConnected: boolean = false\n  ): SuccessOrErrorResult => {\n    const propsValidationResult = this.validateLinkProperties(link, ignoreIfAlreadyConnected);\n    if (!propsValidationResult.success) return propsValidationResult;\n\n    const sourcePortResult = this.getEndpointPortOrError(link.source);\n    if (!sourcePortResult.success) return sourcePortResult;\n    const targetPortResult = this.getEndpointPortOrError(link.target);\n    if (!targetPortResult.success) return targetPortResult;\n\n    if (\n      !ignoreIfAlreadyConnected &&\n      this.areEndpointsConnected(link.source, link.target)\n    )\n      return errorResult(`Link's endpoints are already connected`);\n\n    if (\n      this._rootStore.callbacks.linkValidation({\n        source: sourcePortResult.value,\n        target: targetPortResult.value,\n      }) === false\n    ) {\n      return errorResult(\n        `Link's endpoints are not valid according to validation callback`\n      );\n    }\n\n    return successResult();\n  };\n\n  validateLinkProperties = (link: ILinkState,\n    ignoreIfAlreadyConnected: boolean = false): SuccessOrErrorResult => {\n    if (!link) return errorResult(`Cannot add empty`);\n    if (link.id && typeof link.id !== 'string')\n      return errorResult(\n        `Cannot add link with id '${link.id}' of type different than 'string'`\n      );\n    if (!ignoreIfAlreadyConnected && link.id && this._links.has(link.id))\n      return errorResult(\n        `Cannot add link with id '${link.id}' because link with this id already exists`\n      );\n\n    if (link.source.nodeId === link.target.nodeId)\n      return errorResult(`Link's endpoints are located in the same node`);\n\n    return successResult();\n  };\n\n  getEndpointPortOrError = (\n    endpoint: ILinkPortEndpoint\n  ): SuccessOrErrorResult<PortState> => {\n    const node = this._rootStore.nodesStore.getNode(endpoint.nodeId);\n    if (!node)\n      return errorResult(\n        `Node '${endpoint.nodeId}' of link's endpoint does not exist`\n      );\n    const port = node.getPort(endpoint.portId);\n    if (!port)\n      return errorResult(\n        `Port with id '${endpoint.portId}' does not exist in the node '${endpoint.nodeId}'`\n      );\n\n    return successValueResult(port);\n  };\n\n  getEndpointPort = (endpoint: ILinkPortEndpoint): PortState | undefined => {\n    return this._rootStore.nodesStore\n      .getNode(endpoint.nodeId)\n      ?.getPort(endpoint.portId);\n  };\n\n  areEndpointsConnected = (\n    source: ILinkPortEndpoint,\n    target: ILinkPortEndpoint\n  ): boolean => {\n    return !!this.getLinkForEndpointsIfExists(source, target);\n  };\n\n  getLinkForEndpointsIfExists = (\n    source: ILinkPortEndpoint,\n    target: ILinkPortEndpoint\n  ): LinkState | undefined => {\n    const links = this._nodesLinksCollection.get(source.nodeId);\n    if (links) {\n      return links.find(\n        (l) =>\n          (linkPortEndpointsEquals(l.sourceEndpoint, source) &&\n            linkPortEndpointsEquals(l.targetEndpoint, target)) ||\n          (linkPortEndpointsEquals(l.targetEndpoint, source) &&\n            linkPortEndpointsEquals(l.sourceEndpoint, target))\n      );\n    }\n  };\n\n  private _addLinksInternal = (\n    links: ILinkState[],\n    rewriteIfAlreadyConnected: boolean\n  ): SuccessOrErrorResult<LinkState, ILinkState>[] => {\n    let results = links.map((link) =>\n      this._addLinkInternal(link, rewriteIfAlreadyConnected)\n    );\n    return results;\n  };\n\n  private _addLinkInternal = (\n    link: ILinkState,\n    rewriteIfAlreadyConnected: boolean\n  ): SuccessOrErrorResult<LinkState, ILinkState> => {\n    const validationResult = this.validateLink(link, rewriteIfAlreadyConnected);\n    if (!validationResult.success) {\n      return errorValueResult(link, validationResult.error);\n    }\n\n    if (rewriteIfAlreadyConnected) {\n      let existedLink = link.id ? this.getLink(link.id) : undefined;\n      existedLink = this.getLinkForEndpointsIfExists(\n        link.source,\n        link.target\n      );\n      if (existedLink) {\n        this._removeLink(existedLink.id);\n      }\n    }\n\n    const newLink = new LinkState(\n      this._rootStore,\n      link.id ?? guidForcedUniqueness((id) => this._links.has(id)),\n      link\n    );\n    this._links.set(newLink.id, newLink);\n    this._addLinkToNodeLinksCollection(newLink, link.source.nodeId);\n    this._addLinkToNodeLinksCollection(newLink, link.target.nodeId);\n\n    return successValueResult(newLink);\n  };\n\n  private _addLinkToNodeLinksCollection = (link: LinkState, nodeId: string) => {\n    let links = this._nodesLinksCollection.get(nodeId);\n    if (!links) {\n      this._nodesLinksCollection.set(nodeId, [link]);\n    } else if (!links.includes(link)) {\n      links.push(link);\n    }\n  };\n\n  private _removeLinks = (\n    linkIds: string[]\n  ): SuccessOrErrorResult<ILinkStateWithId, string>[] => {\n    return linkIds.map((id) => {\n      const removedLink = this._removeLink(id);\n      if (removedLink) return successValueResult(removedLink);\n      else return errorValueResult(id);\n    });\n  };\n\n  private _removeLink = (linkId: string): ILinkStateWithId | undefined => {\n    const linkToRemove = this._links.get(linkId);\n    if (linkToRemove) {\n      const linkState = linkToRemove.export();\n\n      this._removeLinkFromNodeLinksCollection(\n        linkToRemove.id,\n        linkToRemove.sourceEndpoint.nodeId\n      );\n      this._removeLinkFromNodeLinksCollection(\n        linkToRemove.id,\n        linkToRemove.targetEndpoint.nodeId\n      );\n\n      this._rootStore.selectionState.unselect(linkToRemove);\n      this._links.delete(linkId);\n      return linkState;\n    }\n\n    return undefined;\n  };\n\n  private _removeLinkFromNodeLinksCollection = (\n    linkId: string,\n    nodeId: string\n  ) => {\n    let collection = this._nodesLinksCollection.get(nodeId);\n    if (collection) {\n      collection = collection.filter((l) => l.id !== linkId);\n      if (collection.length > 0) {\n        this._nodesLinksCollection.set(nodeId, collection);\n      } else {\n        this._nodesLinksCollection.delete(nodeId);\n      }\n    }\n  };\n}\n","import { observer } from 'mobx-react-lite';\nimport React from 'react';\nimport { NodeState } from 'states/nodeState';\n\nexport const NodeLabel: React.FC<{ node: NodeState }> = observer(({ node }) => {\n  return <div className='react_fast_diagram_NodeLabel'>{node.label ? node.label : node.id}</div>;\n});\n","import {\n  AnyHandlerEventTypes,\n  EventTypes,\n  GestureKey,\n  NativeHandlers,\n  UserHandlers,\n  Vector2,\n} from '@use-gesture/react';\nimport { Point } from 'utils/point';\n\n/**\n * Check each element starting from the first one in composedPath() (see https://developer.mozilla.org/en-US/docs/Web/API/Event/composedPath),\n * if exceptClassName is the first class found -> return false,\n * if className is the first class found -> return true,\n * if neither exceptClassName nor className were found -> return false\n */\nexport const eventPathContainsClass = (\n  event: PointerEvent | TouchEvent | MouseEvent | KeyboardEvent,\n  className: string,\n  exceptClassName?: string\n) => {\n  const typedEvent = event as Event;\n  if ('composedPath' in typedEvent) {\n    const targets = typedEvent.composedPath();\n    for (let i = 0; i < targets.length; i++) {\n      const target = targets[i];\n      if ('classList' in target) {\n        const classList = (target as Element).classList;\n        if (exceptClassName && classList.contains(exceptClassName)) {\n          return false;\n        } else if (classList.contains(className)) {\n          return true;\n        }\n      }\n    }\n  }\n\n  return false;\n};\n\n/**\n * Does gesture can be potentially a tap/click event?\n * Drag gesture will be tap/click gesture on mouse or touch release only when the drag displacement is inferior to 3 pixels.\n * See useGestures documentation for more information.\n * @param movement - state value of gesture, represent gesture offset\n */\nexport function canDragGestureBeTapInstead(movement: Vector2): boolean {\n  return Math.max(Math.abs(movement[0]), Math.abs(movement[1])) < 3;\n}\n\nexport interface IUserInteractionTranslate {\n  offset: Point;\n  setOffset: (newOffset: Point) => any;\n}\n\nexport interface IUserInteractionTranslateAndZoom {\n  offset: Point;\n  zoom: number;\n  translateAndZoomInto: (\n    translateBy: Point,\n    pointToZoomInto: Point,\n    changeZoomBy: number\n  ) => any;\n}\n\nexport type GestureHandlers = Partial<\n  UserHandlers<EventTypes> & NativeHandlers<EventTypes>\n>;\n\nexport declare type check<T extends AnyHandlerEventTypes, Key extends GestureKey> = undefined extends T[Key] ? EventTypes[Key] : T[Key];","import { useContext } from \"react\";\nimport { RootStoreContext } from \"components/DiagramContext\";\nimport { RootStore } from \"states/rootStore\";\n\nexport const useRootStore = () => useContext(RootStoreContext) as RootStore;","import { useRootStore } from 'hooks/useRootStore';\nimport React, { useEffect, useRef } from 'react';\n\nexport function useCursor(\n  active: boolean,\n  cursor: React.CSSProperties['cursor'],\n  ref: HTMLDivElement | null\n) {\n  const cursorBeforeSetRef = useRef<string>('');\n\n  useEffect(() => {\n    if (!active || !ref || !cursor || ref.style.cursor === cursor) {\n      return;\n    }\n\n    cursorBeforeSetRef.current = ref.style.cursor;\n    ref.style.cursor = cursor;\n\n    return () => {\n      ref.style.cursor = cursorBeforeSetRef.current;\n    };\n  }, [active, ref]);\n}\n\nexport function useDiagramCursor(\n  active: boolean,\n  cursor: React.CSSProperties['cursor']\n) {\n  const { diagramState } = useRootStore();\n  const ref = diagramState.ref.current;\n\n  useCursor(active, cursor, ref);\n}\n","import {\n  canDragGestureBeTapInstead,\n  eventPathContainsClass,\n  GestureHandlers,\n} from 'hooks/userInteractions/common';\nimport { useCursor, useDiagramCursor } from 'hooks/userInteractions/useCursor';\nimport { useRootStore } from 'hooks/useRootStore';\nimport React, { useCallback, useMemo, useRef } from 'react';\nimport { useGesture } from '@use-gesture/react';\nimport { NodeState } from 'states/nodeState';\nimport { multiplyPoint } from 'utils/point';\n\nexport const useNodeUserInteraction = (nodeState: NodeState) => {\n  const rootStore = useRootStore();\n\n  const interactionActiveRef = useRef<boolean>(false);\n  const selectOnLongTapRef = useRef<NodeJS.Timeout | null>(null);\n  const cancelSelectOnLongTap = useCallback(() => {\n    if (selectOnLongTapRef.current) {\n      clearTimeout(selectOnLongTapRef.current);\n      selectOnLongTapRef.current = null;\n      return true;\n    }\n    return false;\n  }, [selectOnLongTapRef]);\n  const startedDragRef = useRef<boolean>(false);\n\n  const handlers = useMemo<GestureHandlers>(\n    () => ({\n      onPointerEnter: () => {\n        nodeState.hovered = true;\n      },\n      onPointerLeave: () => {\n        nodeState.hovered = false;\n      },\n      onClick: () => {}, // Prevent from double tap zooming on IOS\n      onDrag: ({ pinching, delta, movement, cancel }) => {\n        if (\n          !interactionActiveRef.current ||\n          pinching ||\n          canDragGestureBeTapInstead(movement)\n        ) {\n          return;\n        }\n        cancelSelectOnLongTap();\n\n        if (\n          !nodeState.isDragEnabled ||\n          // If there is another node that activated dragging\n          (rootStore.dragState.isActive && !startedDragRef.current)\n        ) {\n          interactionActiveRef.current = false;\n          cancel();\n          return;\n        }\n\n        // If somehow node was unselected during dragging. It can be connecting ports while dragging nodes, \n        // or dropped node for example\n        if (\n          rootStore.dragState.isActive &&\n          !nodeState.isDragActive &&\n          startedDragRef.current\n        ) {\n          rootStore.dragState.stopDragging();\n          startedDragRef.current = false;\n          interactionActiveRef.current = false;\n          cancel();\n          return;\n        }\n\n        if (!nodeState.isDragActive) {\n          startedDragRef.current = rootStore.dragState.startDragging(nodeState);\n        }\n\n        rootStore.dragState.dragBy(\n          multiplyPoint(delta, 1 / rootStore.diagramState.zoom)\n        );\n      },\n      onDragStart: ({ event, cancel }) => {\n        interactionActiveRef.current =\n          allowNodeInteraction(event) && !rootStore.dragState.isActive;\n\n        if (interactionActiveRef.current) {\n          cancelSelectOnLongTap();\n          if (nodeState.isSelectionEnabled) {\n            selectOnLongTapRef.current = setTimeout(() => {\n              if (selectOnLongTapRef.current) {\n                selectOnLongTapRef.current = null;\n                // It can happen if user simultaneously tap two nodes and will start move one of them\n                if (!rootStore.dragState.isActive) {\n                  rootStore.selectionState.switch(nodeState);\n                }\n              }\n            }, selectDelay);\n          }\n        } else {\n          cancel();\n        }\n      },\n      onDragEnd: ({ tap, shiftKey, altKey, ctrlKey, metaKey }) => {\n        if (interactionActiveRef.current) {\n          interactionActiveRef.current = false;\n          const selectLongOnTapCancelled = cancelSelectOnLongTap();\n\n          if (startedDragRef.current) {\n            rootStore.dragState.stopDragging();\n            startedDragRef.current = false;\n          }\n\n          // selectLongOnTapCancelled means that callback in timer wasn't executed yet\n          if (nodeState.isSelectionEnabled && tap && selectLongOnTapCancelled) {\n            rootStore.selectionState.switch(\n              nodeState,\n              !rootStore.diagramSettings.userInteraction.isCallbackMultiselectionActivated(\n                shiftKey,\n                altKey,\n                ctrlKey,\n                metaKey\n              )\n            );\n          }\n        }\n      },\n    }),\n    [nodeState, rootStore]\n  );\n\n  useGesture(handlers, {\n    target: nodeState.ref,\n    eventOptions: { passive: false },\n    enabled: !rootStore.diagramSettings.userInteraction\n      .arePointerInteractionsDisabled,\n  });\n\n  useDiagramCursor(nodeState.isDragActive, 'move');\n  useCursor(nodeState.isDragActive, 'move', nodeState.ref.current);\n};\n\nconst selectDelay: number = 500;\n\nfunction allowNodeInteraction(\n  event: PointerEvent | TouchEvent | MouseEvent | KeyboardEvent\n) {\n  return eventPathContainsClass(\n    event,\n    ENABLE_NODE_USER_INTERACTION_CLASS,\n    DISABLE_NODE_USER_INTERACTION_CLASS\n  );\n}\n\nexport const ENABLE_NODE_USER_INTERACTION_CLASS =\n  'react_easy_diagram_enable_node_user_interaction';\nexport const DISABLE_NODE_USER_INTERACTION_CLASS =\n  'react_easy_diagram_disable_node_user_interaction';\n","import React, { useEffect, useLayoutEffect, useMemo } from 'react';\nimport {\n  ENABLE_NODE_USER_INTERACTION_CLASS,\n  useNodeUserInteraction,\n} from 'hooks/userInteractions/useNodeUserInteraction';\nimport { NodeState } from 'states/nodeState';\nimport { observer } from 'mobx-react-lite';\nimport { useNotifyRef } from 'hooks/useNotifyRef';\nimport { action } from 'mobx';\nimport { useRootStore } from 'hooks/useRootStore';\n\nexport const NodeWrapper = observer<{ node: NodeState }>(({ node }) => {\n  const {diagramSettings} = useRootStore();\n  useNodeUserInteraction(node);\n\n  let className = `react_fast_diagram_NodeWrapper ${ENABLE_NODE_USER_INTERACTION_CLASS}`;\n  if (\n    !diagramSettings.userInteraction.arePointerInteractionsDisabled\n  ) {\n    // Disable touch actions as useGesture library recommends\n    className += ' react_fast_diagram_touch_action_disabled';\n  }\n\n  return (\n    <NodeContext.Provider value={node}>\n        <div\n          id={node.id}\n          className={className}\n          style={{\n            transform: `translate(${node.position[0]}px, ${node.position[1]}px)`,\n            zIndex: node.selected ? 10 : undefined,\n          }}\n          ref={node.ref}\n        >\n          <node.componentDefinition.component\n            entity={node}\n            settings={node.componentDefinition.settings}\n          />\n        </div>\n    </NodeContext.Provider>\n  );\n});\n\nexport const NodeContext = React.createContext<NodeState | null>(null);","import React, { useMemo } from 'react';\nimport { isNumber } from 'utils/common';\nimport { isPoint, Point } from 'utils/point';\n\nexport const useRelativePositionStyles = (\n  position?: PortPosition | null,\n  offsetFromParentCenter?: number | null,\n  offsetFromOrigin?: Point | null,\n  usePortCenterPivot: boolean = true\n): RelativePositionStyles => {\n  return useMemo(() => {\n    if (!position) return {};\n    \n    const positionStyle: RelativePositionStyles = { position: 'absolute' };\n\n    if (!isNumber(offsetFromParentCenter)) offsetFromParentCenter = 0;\n    if (!isPoint(offsetFromOrigin)) offsetFromOrigin = [0, 0];\n\n    if (position === 'left-top') {\n      positionStyle.left = offsetFromOrigin[0] - offsetFromParentCenter;\n      positionStyle.top = offsetFromOrigin[1];\n      if (usePortCenterPivot) positionStyle.transform = `translateX(-50%)`;\n    } else if (position === 'left-center') {\n      positionStyle.left = offsetFromOrigin[0] - offsetFromParentCenter;\n      positionStyle.top = '50%';\n      positionStyle.transform = `translate(${\n        usePortCenterPivot ? '-50%' : 0\n      }, calc(-50% + ${offsetFromOrigin[1]}px))`;\n    } else if (position === 'left-bottom') {\n      positionStyle.left = offsetFromOrigin[0] - offsetFromParentCenter;\n      positionStyle.bottom = -offsetFromOrigin[1];\n      if (usePortCenterPivot) positionStyle.transform = `translateX(-50%)`;\n    }\n\n    if (position === 'top-left') {\n      positionStyle.left = offsetFromOrigin[0];\n      positionStyle.top = offsetFromOrigin[1] - offsetFromParentCenter;\n      if (usePortCenterPivot) positionStyle.transform = `translateY(-50%)`;\n    } else if (position === 'top-center') {\n      positionStyle.left = '50%';\n      positionStyle.transform = `translate(calc(-50% + ${\n        offsetFromOrigin[0]\n      }px), ${usePortCenterPivot ? '-50%' : 0})`;\n      positionStyle.top = offsetFromOrigin[1] - offsetFromParentCenter;\n    } else if (position === 'top-right') {\n      positionStyle.right = -offsetFromOrigin[0];\n      positionStyle.top = offsetFromOrigin[1] - offsetFromParentCenter;\n      if (usePortCenterPivot) positionStyle.transform = `translateY(-50%)`;\n    }\n\n    if (position === 'right-top') {\n      positionStyle.right = -offsetFromOrigin[0] - offsetFromParentCenter;\n      positionStyle.top = offsetFromOrigin[1];\n      if (usePortCenterPivot) positionStyle.transform = `translateX(50%)`;\n    } else if (position === 'right-center') {\n      positionStyle.right = -offsetFromOrigin[0] - offsetFromParentCenter;\n      positionStyle.top = '50%';\n      positionStyle.transform = `translate(${\n        usePortCenterPivot ? '50%' : 0\n      }, calc(-50% + ${offsetFromOrigin[1]}px))`;\n    } else if (position === 'right-bottom') {\n      positionStyle.right = -offsetFromOrigin[0] - offsetFromParentCenter;\n      positionStyle.bottom = -offsetFromOrigin[1];\n      if (usePortCenterPivot) positionStyle.transform = `translateX(50%)`;\n    }\n\n    if (position === 'bottom-left') {\n      positionStyle.left = offsetFromOrigin[0];\n      positionStyle.bottom = -offsetFromOrigin[1] - offsetFromParentCenter;\n      if (usePortCenterPivot) positionStyle.transform = `translateY(50%)`;\n    } else if (position === 'bottom-center') {\n      positionStyle.left = '50%';\n      positionStyle.transform = `translate(calc(-50% + ${\n        offsetFromOrigin[0]\n      }px), ${usePortCenterPivot ? '50%' : 0})`;\n      positionStyle.bottom = -offsetFromOrigin[1] - offsetFromParentCenter;\n    } else if (position === 'bottom-right') {\n      positionStyle.right = -offsetFromOrigin[0];\n      positionStyle.bottom = -offsetFromOrigin[1] - offsetFromParentCenter;\n      if (usePortCenterPivot) positionStyle.transform = `translateY(50%)`;\n    }\n\n    if (position === 'diagonal-left-top') {\n      positionStyle.left = offsetFromOrigin[0] - offsetFromParentCenter;\n      positionStyle.top = offsetFromOrigin[1] - offsetFromParentCenter;\n      if (usePortCenterPivot) positionStyle.transform = `translate(-50%, -50%)`;\n    } else if (position === 'diagonal-right-top') {\n      positionStyle.right = -offsetFromOrigin[0] - offsetFromParentCenter;\n      positionStyle.top = offsetFromOrigin[1] - offsetFromParentCenter;\n      if (usePortCenterPivot) positionStyle.transform = `translate(50%, -50%)`;\n    } else if (position === 'diagonal-right-bottom') {\n      positionStyle.right = -offsetFromOrigin[0] - offsetFromParentCenter;\n      positionStyle.bottom = -offsetFromOrigin[1] - offsetFromParentCenter;\n      if (usePortCenterPivot) positionStyle.transform = `translate(50%, 50%)`;\n    } else if (position === 'diagonal-left-bottom') {\n      positionStyle.left = offsetFromOrigin[0] - offsetFromParentCenter;\n      positionStyle.bottom = -offsetFromOrigin[1] - offsetFromParentCenter;\n      if (usePortCenterPivot) positionStyle.transform = `translate(-50%, 50%)`;\n    }\n\n    return positionStyle;\n  }, [position, offsetFromParentCenter, offsetFromOrigin, usePortCenterPivot]);\n};\n\ntype RelativePositionStyles = Pick<\n  Partial<React.CSSProperties>,\n  | 'position'\n  | 'left'\n  | 'top'\n  | 'right'\n  | 'bottom'\n  | 'width'\n  | 'height'\n  | 'transform'\n>;\n\nexport const portPositionValues = <const>[\n  'left-top',\n  'left-center',\n  'left-bottom',\n\n  'top-left',\n  'top-center',\n  'top-right',\n\n  'right-top',\n  'right-center',\n  'right-bottom',\n\n  'bottom-left',\n  'bottom-center',\n  'bottom-right',\n\n  'diagonal-left-top',\n  'diagonal-right-top',\n  'diagonal-right-bottom',\n  'diagonal-left-bottom',\n];\nexport type PortPosition = typeof portPositionValues[number];\n","import { useMemo } from 'react';\nimport { useGesture } from '@use-gesture/react';\nimport { PortState } from 'states/portState';\nimport { multiplyPoint, subtractPoints } from 'utils/point';\nimport { useRootStore } from 'hooks/useRootStore';\nimport type { IDragHandlers } from 'hooks/userInteractions/useDiagramDragHandlers';\nimport { useDiagramCursor } from 'hooks/userInteractions/useCursor';\nimport { ReactDOMAttributes } from '@use-gesture/react/dist/declarations/src/types';\n\nexport const usePortUserInteraction = (\n  portState?: PortState\n): IUsePortUserInteractionResult => {\n  const {\n    linksStore: { linkCreation },\n    diagramState,\n    diagramSettings,\n  } = useRootStore();\n\n  const handlers = useMemo<IGestureHandlers | {}>(\n    () => ({\n      onDrag: ({ delta }) => {\n        if (!portState || !portState.dragging) return;\n        const parentScale = diagramState.zoom;\n        linkCreation.target?.translateBy(multiplyPoint(delta, 1 / parentScale));\n      },\n      onDragStart: ({ event, xy }) => {\n        if (!portState || !portState.isConnectionEnabled) return;\n\n        const portHtmlElement = event.target as Element;\n\n        // Important! Otherwise on touch display onPointerEnter will not work!\n        portHtmlElement.releasePointerCapture(\n          (event as PointerEvent).pointerId\n        );\n\n        const clientRect = portHtmlElement.getBoundingClientRect();\n        let pointOnPort = subtractPoints(xy, [clientRect.x, clientRect.y]);\n\n        if (linkCreation.startLinking(portState, pointOnPort)) {\n          portState.dragging = true;\n        }\n      },\n      onDragEnd: () => {\n        if (!portState) return;\n        portState.dragging = false;\n        linkCreation.stopLinking();\n      },\n      onPointerEnter: () => {\n        if (!portState) return;\n\n        if (portState.isConnectionEnabled) {\n          portState.hovered = true;\n          linkCreation.setTargetPortCandidate(portState);\n        }\n      },\n      onPointerLeave: () => {\n        if (!portState) return;\n        portState.hovered = false;\n        linkCreation.resetTargetPortCandidate(portState);\n      },\n    }),\n    [portState, linkCreation, diagramState]\n  );\n\n  // Temporary bug fix when pointer events handlers are not reassigned.\n  // See https://github.com/pmndrs/use-gesture/issues/263 and https://github.com/pmndrs/@use-gesture/react/issues/264\n  // There could be some other bugs related to handlers object replacing\n  const bind = useGesture(handlers, {\n    eventOptions: { passive: false },\n    drag: { pointer: { capture: false } },\n    enabled: !diagramSettings.userInteraction.arePointerInteractionsDisabled\n  });\n\n  useDiagramCursor(!!portState?.dragging, 'pointer');\n\n  return {\n    active: !!portState?.dragging,\n    bind: bind,\n  };\n};\n\ninterface IGestureHandlers extends IDragHandlers {\n  onPointerEnter: () => void;\n  onPointerLeave: () => void;\n}\n\nexport interface IUsePortUserInteractionResult {\n  active: boolean;\n  bind: (...args: any[]) => ReactDOMAttributes;\n}\n","import React, { useContext, useEffect } from 'react';\nimport { NodeState } from 'states/nodeState';\nimport { observer } from 'mobx-react-lite';\nimport {\n  NodeContext,\n} from 'components/node/NodeWrapper';\nimport {\n  PortPosition,\n  useRelativePositionStyles,\n} from 'hooks/useRelativePositionStyles';\nimport { Point } from 'utils/point';\nimport { usePortUserInteraction } from 'hooks/userInteractions/usePortUserInteraction';\nimport { DISABLE_NODE_USER_INTERACTION_CLASS } from 'hooks/userInteractions/useNodeUserInteraction';\nimport { DirectionWithDiagonals } from 'utils/position';\nimport { useRootStore } from 'hooks/useRootStore';\n\nexport interface IPortProps {\n  id: string;\n}\n\nexport const Port: React.FC<IPortProps> = observer((props) => {\n  const { diagramSettings } = useRootStore();\n  const node = useContext(NodeContext) as NodeState; // node should already exist\n  const portState = node.getPort(props.id);\n\n  const positionStyles = useRelativePositionStyles(\n    portState?.position,\n    portState?.offsetFromNodeCenter,\n    portState?.offsetFromOrigin\n  );\n\n  const { bind } = usePortUserInteraction(portState);\n\n  useEffect(() => {\n    // Prevent from recalculating on first load\n    if (portState && portState.offsetRecalculationRequested > 0) {\n      portState?.recalculateOffsetImmediately();\n    }\n  }, [portState, portState?.offsetRecalculationRequested]);\n\n  if (!portState) {\n    return null;\n  }\n\n  let className = DISABLE_NODE_USER_INTERACTION_CLASS;\n  if (!diagramSettings.userInteraction.arePointerInteractionsDisabled) {\n    // Disable touch actions as useGesture library recommends\n    className += ' react_fast_diagram_touch_action_disabled';\n  }\n\n  return (\n    <div\n      style={positionStyles}\n      id={portState.fullId}\n      className={className}\n      ref={portState.ref}\n      key={portState.fullId}\n      {...bind()}\n    >\n      <portState.componentDefinition.component\n        entity={portState}\n        settings={portState.componentDefinition.settings}\n      />\n    </div>\n  );\n});","import { NodeLabel } from 'components/node/NodeLabel';\nimport { Port } from 'components/port/Port';\nimport { IUseStylingOptions, useStyling } from 'hooks/useStyling';\nimport { observer } from 'mobx-react-lite';\nimport React, { useMemo } from 'react';\nimport { INodeVisualComponentProps } from 'states/nodesSettings';\nimport { NodeState } from 'states/nodeState';\nimport { IPortFinalState } from 'states/portState';\nimport {\n  IComponentDefinition,\n  VisualComponent,\n} from 'states/visualComponentState';\n\nconst NodeDefault: React.FC<INodeVisualComponentProps<INodeDefaultSettings>> =\n  observer(({ entity, settings }) => {\n    const stylingOptions = useMemo<IUseStylingOptions>(\n      () => ({\n        removeDefaultClasses: settings?.removeDefaultClasses,\n        baseState: 'base',\n        classes: settings?.classes,\n        defaultClasses: defaultNodeClasses,\n        style: settings?.style,\n        spareStates: { 'selected-hovered': ['selected', 'hovered'] },\n      }),\n      [settings]\n    );\n\n    let state = 'base';\n    if (entity.selected && entity.hovered) state = 'selected-hovered';\n    else if (entity.selected) state = 'selected';\n    else if (entity.hovered) state = 'hovered';\n\n    const styling = useStyling(stylingOptions, state);\n\n    return (\n      <div className={styling.className} style={styling.style}>\n        {settings?.innerNode && <settings.innerNode node={entity} />}\n\n        {Array.isArray(settings?.ports) &&\n          settings?.ports.map((p) => <Port id={p.id} key={p.id} />)}\n      </div>\n    );\n  });\n\nexport interface INodeDefaultSettings {\n  ports?: IPortFinalState[];\n  innerNode?: VisualComponent<{ node: NodeState }>;\n  removeDefaultClasses?: true;\n  classes?: NodeDefaultSettingsByStates<string[]>;\n  style?: NodeDefaultSettingsByStates<React.CSSProperties>;\n}\n\nexport type NodeDefaultState =\n  | 'base'\n  | 'hovered'\n  | 'selected'\n  | 'selected-hovered';\nexport type NodeDefaultSettingsByStates<TValue> = {\n  [key in NodeDefaultState]?: TValue;\n};\n\nexport const defaultNodeClasses: NodeDefaultSettingsByStates<string[]> = {\n  base: ['react_fast_diagram_NodeDefault'],\n  hovered: ['react_fast_diagram_NodeDefault_Hovered'],\n  selected: ['react_fast_diagram_NodeDefault_Selected'],\n};\n\nexport function createNode(\n  settings?: INodeDefaultSettings\n): IComponentDefinition<\n  INodeVisualComponentProps<INodeDefaultSettings>,\n  INodeDefaultSettings\n> {\n  return {\n    component: NodeDefault,\n    settings: {\n      innerNode: NodeLabel,\n      ...settings,\n    },\n  };\n}\n\nexport type INodeDefaultSettingsWithoutPorts = Omit<\n  INodeDefaultSettings,\n  'ports'\n>;\n\nexport const createInputOutputHorizontalNode = (\n  settings?: INodeDefaultSettingsWithoutPorts\n) =>\n  createNode({\n    ...settings,\n    ports: [\n      { id: 'input', type: 'input', position: 'left-center' },\n      { id: 'output', type: 'output', position: 'right-center' },\n    ],\n  });\n\nexport const createInputOutputVerticalNode = (\n  settings?: INodeDefaultSettingsWithoutPorts\n) =>\n  createNode({\n    ...settings,\n    ports: [\n      { id: 'input', type: 'input', position: 'top-center' },\n      { id: 'output', type: 'output', position: 'bottom-center' },\n    ],\n  });\n\nexport const createInputHorizontalNode = (\n  settings?: INodeDefaultSettingsWithoutPorts\n) =>\n  createNode({\n    ...settings,\n    ports: [{ id: 'input', type: 'input', position: 'left-center' }],\n  });\n\nexport const createInputVerticalNode = (\n  settings?: INodeDefaultSettingsWithoutPorts\n) =>\n  createNode({\n    ...settings,\n    ports: [{ id: 'input', type: 'input', position: 'top-center' }],\n  });\n\nexport const createOutputHorizontalNode = (\n  settings?: INodeDefaultSettingsWithoutPorts\n) =>\n  createNode({\n    ...settings,\n    ports: [{ id: 'output', type: 'output', position: 'right-center' }],\n  });\n\nexport const createOutputVerticalNode = (\n  settings?: INodeDefaultSettingsWithoutPorts\n) =>\n  createNode({\n    ...settings,\n    ports: [{ id: 'output', type: 'output', position: 'bottom-center' }],\n  });\n\nexport const createStarNode = (settings?: INodeDefaultSettingsWithoutPorts) =>\n  createNode({\n    ...settings,\n    ports: [\n      { id: 'left', position: 'left-center' },\n      { id: 'top', position: 'top-center' },\n      { id: 'right', position: 'right-center' },\n      { id: 'bottom', position: 'bottom-center' },\n    ],\n  });\n","import {\n  createInputHorizontalNode,\n  createInputOutputHorizontalNode,\n  createInputOutputVerticalNode,\n  createInputVerticalNode,\n  createNode,\n  createOutputHorizontalNode,\n  createOutputVerticalNode,\n  createStarNode,\n} from 'components/node/NodeDefault';\nimport { PortPosition } from 'hooks/useRelativePositionStyles';\nimport { makeAutoObservable } from 'mobx';\nimport { NodeState } from 'states/nodeState';\nimport {\n  VisualComponents,\n  COMPONENT_DEFAULT_TYPE,\n  IVisualComponentsObject,\n} from 'states/visualComponents';\nimport { IVisualComponentProps } from 'states/visualComponentState';\nimport { Point } from 'utils/point';\nimport { DirectionWithDiagonals } from 'utils/position';\nimport { IPortFinalState, IPortState } from './portState';\n\nexport class NodesSettings {\n  private _visualComponents: VisualComponents<\n  INodeComponentSettings,\n    INodeVisualComponentProps\n  > = new VisualComponents<INodeComponentSettings, INodeVisualComponentProps>({\n    [COMPONENT_DEFAULT_TYPE]: createNode({ ports: [] }),\n    input_output_horizontal: createInputOutputHorizontalNode(),\n    input_output_vertical: createInputOutputVerticalNode(),\n    input_vertical: createInputVerticalNode(),\n    input_horizontal: createInputHorizontalNode(),\n    output_vertical: createOutputVerticalNode(),\n    output_horizontal: createOutputHorizontalNode(),\n    star: createStarNode(),\n  });\n  private _gridSnap: Point | null;\n\n  constructor() {\n    this.setGridSnap();\n    makeAutoObservable(this);\n  }\n\n  get visualComponents() {\n    return this._visualComponents;\n  }\n\n  import = (obj?: INodesSettings) => {\n    this._visualComponents.import(obj);\n    this.setGridSnap(obj?.gridSnap);\n  };\n\n  get gridSnap() {\n    return this._gridSnap;\n  }\n\n  setGridSnap = (gridSnap?: number | Point) => {\n    if (!gridSnap) {\n      this._gridSnap = null;\n    } else if (typeof gridSnap === 'number') {\n      this._gridSnap = [gridSnap, gridSnap];\n    } else if (Array.isArray(gridSnap) && gridSnap.length === 2) {\n      this._gridSnap = gridSnap;\n    }\n  };\n}\n\nexport interface INodeComponentSettings {\n  ports?: IPortFinalState[]\n}\n\nexport interface INodeVisualComponentProps<TSettings extends INodeComponentSettings = INodeComponentSettings>\n  extends IVisualComponentProps<NodeState, TSettings> {\n}\n\nexport interface INodesSettings\n  extends IVisualComponentsObject<INodeComponentSettings, INodeVisualComponentProps<INodeComponentSettings>> {\n  gridSnap?: number | Point;\n}\n","import { arePointsEqual, Point } from 'utils/point';\n\nexport const generateTransform = (translate: Point, scale?: number): string => {\n  const translatePart = `translate(${translate[0]}px, ${translate[1]}px)`;\n  if (scale) {\n    const scalePart = `scale(${scale})`;\n    return translatePart + ' ' + scalePart;\n  } else {\n    return translatePart;\n  }\n};\n\nexport interface ITransformation {\n  zoom: number;\n  offset: Point;\n}\n\nexport const areTransformationsEqual = (\n  a: ITransformation,\n  b: ITransformation\n): boolean =>\n  a === b ||\n  (a && b && a.zoom === b.zoom && arePointsEqual(a.offset, b.offset));\n","import { makeAutoObservable, reaction } from 'mobx';\nimport { HtmlElementRefState } from 'states/htmlElementRefState';\nimport { LinkState } from 'states/linkState';\nimport { INodeComponentSettings } from 'states/nodesSettings';\nimport {\n  IPortExport,\n  IPortState,\n  IPortStateWithoutIds,\n  PortState,\n} from 'states/portState';\nimport { RootStore } from 'states/rootStore';\nimport { COMPONENT_DEFAULT_TYPE } from 'states/visualComponents';\nimport { deepCopy, Dictionary, isBoolean } from 'utils/common';\nimport { addPoints, arePointsEqual, Point } from 'utils/point';\nimport {\n  errorResult,\n  SuccessOrErrorResult,\n  successValueResult,\n} from 'utils/result';\nimport { generateTransform } from 'utils/transformation';\nimport { PropertyChange } from 'states/callbacks';\n\nexport class NodeState {\n  private _id: string;\n  private _label?: string;\n  private _position: Point;\n  private _ports: Map<string, PortState>;\n  private _ref: HtmlElementRefState;\n  private _type?: string;\n  private _selected: boolean;\n  private _hovered: boolean;\n  private _data?: any;\n  private _isSelectionEnabled?: boolean;\n  private _isDragEnabled?: boolean;\n  private _isDragActive: boolean;\n\n  private _rootStore: RootStore;\n\n  constructor(rootStore: RootStore, id: string, state?: INodeStateWithoutId) {\n    this._rootStore = rootStore;\n\n    this._id = id;\n    this._ref = new HtmlElementRefState(null, rootStore.diagramState);\n    this._selected = false;\n    this._hovered = false;\n    this._isDragActive = false;\n    this.import(state);\n\n    makeAutoObservable(this, {\n      // @ts-ignore\n      _rootStore: false,\n    });\n\n    reaction(\n      () => [this._id, this._label, this._data, this._type, this._ports],\n      () => {\n        this.ref.recalculateSizeAndPosition();\n        this.recalculatePortsOffset();\n      }\n    );\n  }\n\n  import = (newState?: INodeStateWithoutId) => {\n    this._setPosition(newState?.position ?? [0, 0]);\n    this._setType(newState?.type);\n    this._setData(newState?.data);\n    this._setLabel(newState?.label);\n    this.setPorts(newState?.ports);\n    this._setIsSelectionEnabled(newState?.isSelectionEnabled);\n    this._setIsDragEnabled(newState?.isDragEnabled);\n  };\n\n  export = (): INodeExport => ({\n    ...deepCopy({\n      id: this._id,\n      label: this._label,\n      position: this._position,\n      ports: Array.from(this._ports).map(([k, p]) => p.export()),\n      type: this._type,\n      data: this.data,\n      isSelectionEnabled: this._isSelectionEnabled ?? undefined,\n      isDragEnabled: this._isDragEnabled ?? undefined,\n    }),\n  });\n\n  get id() {\n    return this._id;\n  }\n\n  get label() {\n    return this._label;\n  }\n\n  setLabel = (\n    value?: string | null\n  ): PropertyChange<string | undefined> | undefined => {\n    const change = this._setLabel(value);\n\n    if (change) {\n      this._rootStore.callbacks.nodeLabelChanged(this, change);\n    }\n\n    return change;\n  };\n\n  private _setLabel = (\n    value?: string | null\n  ): PropertyChange<string | undefined> | undefined => {\n    const valueToSet = value ?? undefined;\n    if (this._label === valueToSet) {\n      return undefined;\n    }\n    const oldValue = this._label;\n    this._label = valueToSet;\n    return {\n      oldValue: oldValue,\n      newValue: this._label,\n    };\n  };\n\n  get position() {\n    return this._position;\n  }\n\n  /**\n   * @param newPosition - new position\n   * @param ignoreSnapping - do not take into account snapping to grid\n   * @returns `undefined` if position did not change\n   */\n  setPosition = (\n    newPosition: Point,\n    ignoreSnapping: boolean = false\n  ): PropertyChange<Point> | undefined => {\n    const change = this._setPosition(newPosition, ignoreSnapping);\n\n    if (change) {\n      this._rootStore.callbacks.nodePositionChanged(this, change);\n    }\n\n    return change;\n  };\n\n  private _setPosition = (\n    newPosition: Point,\n    ignoreSnapping: boolean = false\n  ): PropertyChange<Point> | undefined => {\n    const snap = this._rootStore.nodesSettings.gridSnap;\n    if (!ignoreSnapping && snap) {\n      newPosition = [\n        snapPosition(newPosition[0], snap[0]),\n        snapPosition(newPosition[1], snap[1]),\n      ];\n    }\n\n    if (!arePointsEqual(newPosition, this._position)) {\n      const oldPos = this._position;\n      this._position = newPosition;\n\n      return {\n        oldValue: oldPos,\n        newValue: this._position,\n      };\n    } else return undefined;\n  };\n\n  /**\n   * @param vector - vector to move node by\n   * @param ignoreSnapping - do not take into account snapping to grid\n   * @returns remainder in case snap to grid is turned on. For example if vector\n   * would be [3,9], node current position [10,10] and snap [5,5],\n   * the node position would be set to [10,15] and remainder equals [3,4]\n   */\n  moveBy = (\n    vector: Point,\n    ignoreSnapping: boolean = false\n  ): Point | undefined => {\n    let newPos = addPoints(this.position, vector);\n    let remainder: Point | undefined = undefined;\n    const snap = this._rootStore.nodesSettings.gridSnap;\n\n    if (!ignoreSnapping && snap) {\n      const res1 = snapMoveByVector(this.position[0], vector[0], snap[0]);\n      const res2 = snapMoveByVector(this.position[1], vector[1], snap[1]);\n      remainder = [res1.remainder, res2.remainder];\n      newPos = [res1.value, res2.value];\n    }\n\n    this.setPosition(newPos, true);\n    return remainder;\n  };\n\n  get type(): string {\n    return this._type ?? COMPONENT_DEFAULT_TYPE;\n  }\n\n  setType = (\n    value: string | null | undefined\n  ): PropertyChange<string | undefined> | undefined => {\n    const change = this._setType(value);\n\n    if (change) {\n      this._rootStore.callbacks.nodeTypeChanged(this, change);\n    }\n\n    return change;\n  };\n\n  private _setType = (\n    value: string | null | undefined\n  ): PropertyChange<string | undefined> | undefined => {\n    const valueToSet = value ?? undefined;\n    if (this._type === valueToSet) {\n      return undefined;\n    }\n    const oldValue = this._type;\n    this._type = valueToSet;\n    return {\n      oldValue: oldValue,\n      newValue: this._type,\n    };\n  };\n\n  get hovered() {\n    return this._hovered;\n  }\n\n  set hovered(value: boolean) {\n    this._hovered = value;\n  }\n\n  get data() {\n    return this._data;\n  }\n\n  setData = (value?: any): PropertyChange<any> | undefined => {\n    const change = this._setData(value);\n\n    if (change) {\n      this._rootStore.callbacks.nodeDataChanged(this, change);\n    }\n\n    return change;\n  };\n\n  private _setData = (value?: any): PropertyChange<any> | undefined => {\n    if (this._data === value) {\n      return undefined;\n    }\n    const oldValue = this._data;\n    this._data = value ?? undefined;\n    return {\n      oldValue: oldValue,\n      newValue: this._data,\n    };\n  };\n\n  get ref() {\n    return this._ref;\n  }\n\n  get ports(): ReadonlyMap<string, PortState> {\n    return this._ports;\n  }\n\n  setPorts = (nodePorts?: IPortState[]) => {\n    const componentPortsIds =\n      (this.componentDefinition.settings as INodeComponentSettings)?.ports?.map(\n        (p) => p.id\n      ) ?? [];\n\n    const nodePortsIds = nodePorts?.map((p) => p.id) ?? [];\n\n    const portsIds = new Set([...componentPortsIds, ...nodePortsIds]);\n\n    this._ports = new Map();\n    portsIds.forEach((id) =>\n      this._ports.set(\n        id,\n        this._createPortState(\n          id,\n          nodePorts?.find((p) => p.id === id)\n        )\n      )\n    );\n  };\n\n  getPort = (portId: string): PortState | undefined => {\n    if (portId) {\n      return this._ports.get(portId);\n    } else return undefined;\n  };\n\n  addPort = (port: IPortState): SuccessOrErrorResult<PortState> => {\n    if (!port || this._ports.get(port.id)) {\n      return errorResult();\n    }\n    const newPort = this._createPortState(port.id, port);\n    this._ports.set(newPort.id, newPort);\n    return successValueResult(newPort);\n  };\n\n  removePort = (portId: string): boolean => {\n    if (portId && this._ports.get(portId)) {\n      this._ports.delete(portId);\n      this._rootStore.linksStore.removePortLinks(this._id, portId);\n      return true;\n    }\n    return false;\n  };\n\n  getPortOrThrowException = (portId: string): PortState => {\n    const port = this.getPort(portId);\n    if (port) return port;\n    else\n      throw `Port with id '${portId}' does not exist in the node '${this._id}'`;\n  };\n\n  private _createPortState = (id: string, state?: IPortStateWithoutIds) => {\n    return new PortState(this._rootStore, this, id, state);\n  };\n\n  get connectedExternalPorts(): Dictionary<PortState[]> {\n    const keyValues = Object.values(this.ports).map((p) => [\n      p.id,\n      p.connectedPorts,\n    ]);\n    return Object.fromEntries(keyValues);\n  }\n\n  get connectedLinks(): LinkState[] {\n    return this._rootStore.linksStore.getNodeLinks(this._id);\n  }\n\n  recalculatePortsOffset = () => {\n    this._ports.forEach((p) => p.recalculateOffset());\n  };\n\n  get transformString() {\n    return generateTransform(this._position);\n  }\n\n  get componentDefinition() {\n    const { visualComponents } = this._rootStore.nodesSettings;\n    return visualComponents.getComponent(this.type);\n  }\n\n  get selected() {\n    return this._selected;\n  }\n\n  set selected(value: boolean) {\n    this._selected = value;\n    if (!value) {\n      this.isDragActive = false;\n    }\n  }\n\n  get isSelectionEnabled(): boolean {\n    return this._isSelectionEnabled === undefined\n      ? this._rootStore.diagramSettings.userInteraction.nodeSelection\n      : this._isSelectionEnabled;\n  }\n\n  setIsSelectionEnabled = (\n    value: boolean | null | undefined\n  ): PropertyChange<boolean | undefined> | undefined => {\n    const change = this._setIsSelectionEnabled(value);\n\n    if (change) {\n      this._rootStore.callbacks.nodeIsSelectionEnabledChanged(this, change);\n    }\n\n    return change;\n  };\n\n  private _setIsSelectionEnabled = (\n    value: boolean | null | undefined\n  ): PropertyChange<boolean | undefined> | undefined => {\n    const valueToSet = isBoolean(value) ? value : undefined;\n    if (this._isSelectionEnabled === valueToSet) {\n      return undefined;\n    }\n\n    const oldValue = this._isSelectionEnabled;\n    this._isSelectionEnabled = valueToSet;\n    return {\n      oldValue: oldValue,\n      newValue: this._isSelectionEnabled,\n    };\n  };\n\n  get isDragEnabled(): boolean {\n    return (\n      (this._isDragEnabled === undefined\n        ? this._rootStore.diagramSettings.userInteraction.nodeDrag\n        : this._isDragEnabled) && this.isSelectionEnabled\n    );\n  }\n\n  setIsDragEnabled = (\n    value: boolean | null | undefined\n  ): PropertyChange<boolean | undefined> | undefined => {\n    const change = this._setIsDragEnabled(value);\n\n    if (change) {\n      this._rootStore.callbacks.nodeIsDragEnabledChanged(this, change);\n    }\n\n    return change;\n  };\n\n  private _setIsDragEnabled = (\n    value: boolean | null | undefined\n  ): PropertyChange<boolean | undefined> | undefined => {\n    const valueToSet = isBoolean(value) ? value : undefined;\n    if (this._isDragEnabled === valueToSet) {\n      return undefined;\n    }\n\n    const oldValue = this._isDragEnabled;\n    this._isDragEnabled = valueToSet;\n    return {\n      oldValue: oldValue,\n      newValue: this._isDragEnabled,\n    };\n  };\n\n  get isDragActive() {\n    return this._isDragActive;\n  }\n\n  set isDragActive(value) {\n    if (this._isDragActive != value) {\n      this._isDragActive = value;\n    }\n  }\n}\n\nfunction snapPosition(pos: number, snap: number) {\n  const mod = pos % snap;\n  if (Math.abs(mod) > snap / 2) return pos + snap * Math.sign(mod) - mod;\n  else return pos - mod;\n}\n\nfunction snapMoveByVector(pos: number, vec: number, snapValue: number) {\n  if (vec === 0) return { value: pos, remainder: 0 };\n\n  let result = 0;\n  let desiredPos = pos + vec;\n\n  let frac = Math.trunc(desiredPos / snapValue);\n  if ((vec < 0 && desiredPos > 0) || (vec > 0 && desiredPos < 0)) {\n    frac += 1 * Math.sign(desiredPos);\n  }\n  if (frac === -0) frac = 0;\n\n  result = frac * snapValue;\n\n  if ((vec < 0 && result > pos) || (vec > 0 && result < pos)) {\n    return { value: pos, remainder: vec };\n  } else return { value: result, remainder: pos - result + vec };\n}\n\nexport interface INodeStateWithoutId {\n  label?: string;\n  position: Point;\n  type?: string;\n  data?: any;\n  isSelectionEnabled?: boolean;\n  isDragEnabled?: boolean;\n  ports?: IPortState[];\n}\n\nexport interface INodeStateWithId extends INodeStateWithoutId {\n  id: string;\n}\n\nexport interface INodeExport extends INodeStateWithId {\n  id: string;\n  ports: IPortExport[];\n}\n\nexport interface INodeState extends INodeStateWithoutId {\n  id?: string;\n}\n\nexport interface INodeStateDiff {\n  label?: string | null;\n  position?: Point;\n  type?: string;\n  data?: any;\n  isSelectionEnabled?: boolean;\n  isDragEnabled?: boolean;\n  ports?: IPortState[];\n}\n","import { makeAutoObservable } from 'mobx';\nimport {\n  INodeExport,\n  INodeState,\n  INodeStateWithId,\n  NodeState,\n} from 'states/nodeState';\nimport { RootStore } from 'states/rootStore';\nimport { BoundingBox } from 'utils/common';\nimport { guidForcedUniqueness } from 'utils/guid';\nimport { Point, subtractPoints } from 'utils/point';\nimport {\n  errorValueResult,\n  isError,\n  isSuccess,\n  SuccessOrErrorResult,\n  successValueResult,\n} from 'utils/result';\n\nexport class NodesStore {\n  private _nodes = new Map<string, NodeState>();\n  private _rootStore;\n\n  constructor(rootStore: RootStore) {\n    makeAutoObservable(this);\n    this._rootStore = rootStore;\n  }\n\n  get nodes(): ReadonlyMap<string, NodeState> {\n    return this._nodes;\n  }\n\n  import = (newNodes?: INodeState[]) => {\n    this._nodes = new Map();\n    if (newNodes) {\n      let results = this._addNodesInternal(newNodes, false);\n\n      this._rootStore.callbacks.nodesAdded({\n        addedNodes: results.filter(isSuccess).map((r) => r.value),\n        failedToAddNodes: results.filter(isError),\n        importing: true,\n      });\n    }\n  };\n\n  export = (): INodeExport[] =>\n    Array.from(this._nodes).map(([key, value]) => value.export());\n\n  addNodes = (\n    nodes: INodeState[],\n    rewriteIfExists: boolean = false\n  ): SuccessOrErrorResult<NodeState, INodeState>[] => {\n    let results = this._addNodesInternal(nodes, rewriteIfExists);\n\n    this._rootStore.callbacks.nodesAdded({\n      addedNodes: results.filter(isSuccess).map((r) => r.value),\n      failedToAddNodes: results.filter(isError),\n      importing: false,\n    });\n\n    return results;\n  };\n\n  private _addNodesInternal = (\n    nodes: INodeState[],\n    rewriteIfExists: boolean\n  ): SuccessOrErrorResult<NodeState, INodeState>[] => {\n    let results = nodes.map((node) =>\n      this._addNodeInternal(node, rewriteIfExists)\n    );\n\n    return results;\n  };\n\n  addNode = (\n    node: INodeState,\n    rewriteIfExists: boolean = false\n  ): SuccessOrErrorResult<NodeState, INodeState> => {\n    const result = this._addNodeInternal(node, rewriteIfExists);\n\n    this._rootStore.callbacks.nodesAdded({\n      addedNodes: result.success ? [result.value] : [],\n      failedToAddNodes: result.success ? [] : [result],\n      importing: false,\n    });\n\n    return result;\n  };\n\n  private _addNodeInternal = (\n    node: INodeState,\n    rewriteIfExists: boolean\n  ): SuccessOrErrorResult<NodeState, INodeState> => {\n    if (!node)\n      return errorValueResult(node, 'Node object is null or undefined');\n\n    if (!rewriteIfExists && node.id && this._nodes.has(node.id))\n      return errorValueResult(node, `Node with id '${node.id}' already exists`);\n\n    const newNode = new NodeState(\n      this._rootStore,\n      node.id ?? guidForcedUniqueness((id) => this._nodes.has(id)),\n      node\n    );\n    this._nodes.set(newNode.id, newNode);\n    return successValueResult(newNode);\n  };\n\n  removeNodes = (\n    nodeIds: string[]\n  ): SuccessOrErrorResult<INodeExport, string>[] => {\n    if (!Array.isArray(nodeIds) || nodeIds.length == 0) return [];\n\n    const results = nodeIds.map<SuccessOrErrorResult<INodeExport, string>>(\n      (id) => {\n        const removedNode = this._removeNode(id);\n        if (removedNode) return successValueResult(removedNode);\n        else return errorValueResult(id);\n      }\n    );\n\n    this._rootStore.callbacks.nodesRemoved({\n      removedNodes: results.filter(isSuccess).map((r) => r.value),\n      failedToRemoveNodeIds: results.filter(isError).map((r) => r.value),\n    });\n\n    return results;\n  };\n\n  removeNode = (nodeId: string): INodeExport | undefined => {\n    const removedNode = this._removeNode(nodeId);\n\n    this._rootStore.callbacks.nodesRemoved({\n      removedNodes: removedNode ? [removedNode] : [],\n      failedToRemoveNodeIds: removedNode ? [] : [nodeId],\n    });\n\n    return removedNode;\n  };\n\n  private _removeNode = (nodeId: string): INodeExport | undefined => {\n    const node = this._nodes.get(nodeId);\n    if (node) {\n      const nodeState = node.export();\n      this._rootStore.linksStore.removeNodeLinks(nodeId);\n      this._rootStore.selectionState.unselect(node);\n      this._nodes.delete(nodeId);\n      return nodeState;\n    }\n    return undefined;\n  };\n\n  getNode = (nodeId: string): NodeState | undefined => {\n    return this._nodes.get(nodeId);\n  };\n\n  /**\n   * @returns Values are calculated without zoom taking into account, that is, the same as zoom would be '1'\n   */\n  getNodesBoundingBox = (): BoundingBox => {\n    let topLeftCorner: Point = [\n      Number.POSITIVE_INFINITY,\n      Number.POSITIVE_INFINITY,\n    ];\n    let bottomRightCorner: Point = [\n      Number.NEGATIVE_INFINITY,\n      Number.NEGATIVE_INFINITY,\n    ];\n\n    this._nodes.forEach((node) => {\n      const pos = node.position;\n      const size = node.ref.sizeExcludingZoom ?? [0, 0];\n\n      topLeftCorner = [\n        Math.min(topLeftCorner[0], pos[0]),\n        Math.min(topLeftCorner[1], pos[1]),\n      ];\n\n      bottomRightCorner = [\n        Math.max(bottomRightCorner[0], pos[0] + size[0]),\n        Math.max(bottomRightCorner[1], pos[1] + size[1]),\n      ];\n    });\n\n    if (this._nodes.size == 0) {\n      topLeftCorner = [0, 0];\n      bottomRightCorner = [100, 100];\n    }\n\n    return {\n      topLeftCorner,\n      bottomRightCorner,\n      size: subtractPoints(bottomRightCorner, topLeftCorner),\n    };\n  };\n}\n","import { IUseStylingOptions, useStyling } from 'hooks/useStyling';\nimport { observer } from 'mobx-react-lite';\nimport React, { useMemo } from 'react';\nimport type { IPortVisualComponentProps } from 'states/portsSettings';\nimport type { IComponentDefinition } from 'states/visualComponentState';\n\nconst PortInnerDefault: React.FC<\n  IPortVisualComponentProps<IPortInnerDefaultSettings>\n> = observer(({ entity, settings }) => {\n  const stylingOptions = useMemo<IUseStylingOptions>(\n    () => ({\n      removeDefaultClasses: settings?.removeDefaultClasses,\n      baseState: 'base',\n      classes: settings?.classes,\n      defaultClasses: defaultPortInnerClasses,\n      style: settings?.style,\n    }),\n    [settings]\n  );\n\n  let state = 'base';\n  if (entity.dragging) state = 'dragging';\n  else if (entity.hovered && entity.validForConnection) state = 'hovered';\n  else if (entity.hovered && !entity.validForConnection) state = 'invalid';\n  else if (entity.node.selected) state = 'node-selected';\n  else if (entity.node.hovered) state = 'node-hovered';\n\n  const styling = useStyling(stylingOptions, state);\n\n  return <div className={styling.className} style={styling.style}></div>;\n});\n\nexport type PortInnerDefaultState =\n  | 'base'\n  | 'hovered'\n  | 'dragging'\n  | 'invalid'\n  | 'node-hovered'\n  | 'node-selected';\nexport type PortInnerDefaultSettingsByStates<TValue> = {\n  [key in PortInnerDefaultState]?: TValue;\n};\n\nexport interface IPortInnerDefaultSettings {\n  removeDefaultClasses?: true;\n  classes?: PortInnerDefaultSettingsByStates<string[]>;\n  style?: PortInnerDefaultSettingsByStates<React.CSSProperties>;\n}\n\nexport const defaultPortInnerClasses: PortInnerDefaultSettingsByStates<\n  string[]\n> = {\n  base: ['react_fast_diagram_PortInnerDefault'],\n  hovered: ['react_fast_diagram_PortInnerDefault_Hovered'],\n  dragging: ['react_fast_diagram_PortInnerDefault_Dragging'],\n  invalid: ['react_fast_diagram_PortInnerDefault_Invalid'],\n  'node-hovered': ['react_fast_diagram_PortInnerDefault_NodeHovered'],\n  'node-selected': ['react_fast_diagram_PortInnerDefault_NodeSelected'],\n};\n\nexport function createPortInnerDefault(\n  settings?: IPortInnerDefaultSettings\n): IComponentDefinition<IPortVisualComponentProps, IPortInnerDefaultSettings> {\n  return {\n    component: PortInnerDefault,\n    settings: settings,\n  };\n}\n","import { makeAutoObservable } from 'mobx';\nimport { createPortInnerDefault } from 'components/port/PortInnerDefault';\nimport { PortState } from 'states/portState';\nimport {\n  VisualComponents,\n  COMPONENT_DEFAULT_TYPE,\n  IVisualComponentsObject,\n} from 'states/visualComponents';\nimport { IVisualComponentProps } from 'states/visualComponentState';\n\nexport class PortsSettings {\n  private _portVisualComponents: VisualComponents<\n    any,\n    IPortVisualComponentProps\n  > = new VisualComponents<any, IPortVisualComponentProps>({\n    [COMPONENT_DEFAULT_TYPE]: createPortInnerDefault(),\n  });\n\n  constructor() {\n    makeAutoObservable(this);\n  }\n\n  get portVisualComponents() {\n    return this._portVisualComponents;\n  }\n\n  import = (obj?: IPortsSettings) => {\n    this.portVisualComponents.import(obj);\n  };\n}\n\nexport interface IPortVisualComponentProps<TSettings = any>\n  extends IVisualComponentProps<PortState, TSettings> {}\n\nexport interface IPortsSettings\n  extends IVisualComponentsObject<any, IPortVisualComponentProps> {}\n","import { makeAutoObservable } from 'mobx';\nimport { LinkState } from 'states/linkState';\nimport { NodeState } from 'states/nodeState';\n\nexport class SelectionState {\n  private _selectedItems = new Set<SelectableItem>();\n\n  constructor() {\n    makeAutoObservable(this);\n  }\n\n  get selectedItems(): SelectableItem[] {\n    return Array.from(this._selectedItems);\n  }\n\n  get selectedNodes(): NodeState[] {\n    return this.selectedItems.filter(\n      (i) => i instanceof NodeState\n    ) as NodeState[];\n  }\n\n  get selectedLinks(): LinkState[] {\n    return this.selectedItems.filter(\n      (i) => i instanceof LinkState\n    ) as LinkState[];\n  }\n\n  select = (item: SelectableItem, unselectOther: boolean = false): boolean => {\n    if (unselectOther) this.unselectAll();\n\n    if (!this._selectedItems.has(item)) {\n      item.selected = true;\n      this._selectedItems.add(item);\n      return true;\n    } else return false;\n  };\n\n  switch = (\n    item: SelectableItem,\n    unselectOtherOnSelection: boolean = false\n  ) => {\n    if (item.selected) {\n      this.unselect(item);\n    } else {\n      this.select(item, unselectOtherOnSelection);\n    }\n  };\n\n  unselect = (item: SelectableItem): boolean => {\n    if (this._selectedItems.has(item)) {\n      item.selected = false;\n      this._selectedItems.delete(item);\n      return true;\n    } else return false;\n  };\n\n  unselectAll = () => {\n    this._selectedItems.forEach((i) => (i.selected = false));\n    this._selectedItems.clear();\n  };\n\n  unselectItems = (itemsToClear: Readonly<SelectableItem[]>) => {\n    itemsToClear.forEach((i) => this.unselect(i));\n  };\n}\n\nexport type SelectableItem = NodeState | LinkState;\n","import { Callbacks, SelectionState } from 'index';\nimport { makeAutoObservable } from 'mobx';\nimport { NodeState } from 'states/nodeState';\nimport { addPoints, Point } from 'utils/point';\n\n/**\n * Encapsulate logic for dragging mechanism. Right now only nodes are supposed to be dragged.\n */\nexport class DragState {\n  private _nodesBeingDragged = new Set<NodeState>();\n\n  // In case the snap to grid option is enabled in settings\n  private _remaindersFromDrags = new Map<string, Point | undefined>();\n\n  private _selectionState: SelectionState;\n  private _callbacks: Callbacks;\n\n  constructor(selectionState: SelectionState, callbacks: Callbacks) {\n    makeAutoObservable(this);\n    this._selectionState = selectionState;\n    this._callbacks = callbacks;\n  }\n\n  get isActive() {\n    return this._nodesBeingDragged.size !== 0;\n  }\n\n  startDragging = (nodeToDrag: NodeState): boolean => {\n    if (!nodeToDrag.isDragEnabled || this.isActive) return false;\n\n    if (nodeToDrag.selected) {\n      this._selectionState.unselectItems(\n        this._selectionState.selectedItems.filter(\n          (i) => i instanceof NodeState && !i.isDragEnabled\n        )\n      );\n    } else {\n      this._selectionState.unselectAll();\n      this._selectionState.select(nodeToDrag);\n    }\n\n    this._selectionState.selectedNodes.forEach((n) => {\n      n.isDragActive = true;\n      this._nodesBeingDragged.add(n);\n      // Force snapping to grid to prevent from desynchronized dragging if some of nodes positions were\n      // set by ignoring grid\n      n.setPosition(n.position);\n    });\n\n    this._callbacks.dragStarted({\n      nodes: this._selectionState.selectedNodes,\n    });\n\n    return true;\n  };\n\n  /**\n   * Drag by a difference between previous coordinate and current\n   * @param delta vector to drag by which takes into account diagram zoom\n   */\n  dragBy = (delta: Point) => {\n    this._nodesBeingDragged.forEach((n) => {\n      const vectorWithRemainder = addPoints(\n        delta,\n        this._remaindersFromDrags.get(n.id)\n      );\n      const newRemainder = n.moveBy(vectorWithRemainder);\n      this._remaindersFromDrags.set(n.id, newRemainder);\n    });\n\n    this._callbacks.drag({\n      nodes: this._selectionState.selectedNodes,\n      delta: delta,\n    });\n  };\n\n  stopDragging = () => {\n    this._nodesBeingDragged.forEach((n) => (n.isDragActive = false));\n    this._nodesBeingDragged.clear();\n    this._remaindersFromDrags.clear();\n    this._callbacks.dragEnded({\n      nodes: this._selectionState.selectedNodes,\n    });\n  };\n}\n","import { makeAutoObservable } from 'mobx';\nimport { RootStore } from 'states/rootStore';\n\nexport class CommandExecutor {\n  private _rootStore: RootStore;\n\n  constructor(rootStore: RootStore) {\n    makeAutoObservable(this);\n    this._rootStore = rootStore;\n  }\n\n  execute = (command: ICommand) => {\n    command.execute(this._rootStore);\n  };\n}\n\nexport interface ICommand {\n  execute(rootStore: RootStore): any;\n}\n","import { Callbacks, ICallbacks } from 'states/callbacks';\nimport { DiagramSettings, IDiagramSettings } from 'states/diagramSettings';\nimport { DiagramState } from 'states/diagramState';\nimport { LinksSettings, ILinksSettings } from 'states/linksSettings';\nimport { LinksStore } from 'states/linksStore';\nimport { ILinkState } from 'states/linkState';\nimport { NodesSettings, INodesSettings } from 'states/nodesSettings';\nimport { NodesStore } from 'states/nodesStore';\nimport { INodeExport, INodeState } from 'states/nodeState';\nimport { PortsSettings, IPortsSettings } from 'states/portsSettings';\nimport { SelectionState } from 'states/selectionState';\nimport { DragState } from 'states/dragState';\nimport { CommandExecutor } from 'states/commandExecutor';\nimport { IDiagramInitState } from 'components/DiagramContext';\n\nexport class RootStore {\n  private _diagramState: DiagramState;\n\n  private _nodesStore: NodesStore;\n  private _linksStore: LinksStore;\n  private _selectionState: SelectionState;\n  private _dragState: DragState;\n  private _commandExecutor: CommandExecutor;\n\n  private _diagramSettings: DiagramSettings;\n  private _nodesSettings: NodesSettings;\n  private _portsSettings: PortsSettings;\n  private _linksSettings: LinksSettings;\n  private _callbacks: Callbacks;\n\n  constructor(settings?: ISettings, state?: IDiagramInitState) {\n    this._diagramSettings = new DiagramSettings();\n    this._nodesSettings = new NodesSettings();\n    this._linksSettings = new LinksSettings();\n    this._portsSettings = new PortsSettings();\n    this._callbacks = new Callbacks(this);\n\n    this._diagramState = new DiagramState(this);\n\n    this._commandExecutor = new CommandExecutor(this);\n    this._nodesStore = new NodesStore(this);\n    this._linksStore = new LinksStore(this);\n    this._selectionState = new SelectionState();\n    this._dragState = new DragState(this._selectionState, this._callbacks);\n\n    this.importSettings(settings);\n    if (state) {\n      this.importState(state.nodes, state.links);\n    }\n  }\n\n  get diagramState() {\n    return this._diagramState;\n  }\n\n  get nodesStore() {\n    return this._nodesStore;\n  }\n\n  get linksStore() {\n    return this._linksStore;\n  }\n\n  get diagramSettings() {\n    return this._diagramSettings;\n  }\n\n  get nodesSettings() {\n    return this._nodesSettings;\n  }\n\n  get linksSettings() {\n    return this._linksSettings;\n  }\n\n  get portsSettings() {\n    return this._portsSettings;\n  }\n\n  get callbacks() {\n    return this._callbacks;\n  }\n\n  get selectionState() {\n    return this._selectionState;\n  }\n\n  get dragState() {\n    return this._dragState;\n  }\n\n  get commandExecutor() {\n    return this._commandExecutor;\n  }\n\n  importState = (nodes?: INodeState[], links?: ILinkState[]) => {\n    this._diagramState.incrementImportGenerationId();\n    this._nodesStore.import(nodes);\n    this._linksStore.import(links);\n  };\n\n  export = (): { nodes: INodeExport[]; links: ILinkState[] } => ({\n    nodes: this._nodesStore.export(),\n    links: this._linksStore.export(),\n  });\n\n  importSettings = (settings?: ISettings) => {\n    this._diagramSettings.import(settings?.diagram);\n    this._nodesSettings.import(settings?.nodes);\n    this._linksSettings.import(settings?.links);\n    this._portsSettings.import(settings?.ports);\n    this._callbacks.import(settings?.callbacks);\n  };\n}\n\nexport interface ISettings {\n  diagram?: IDiagramSettings;\n  nodes?: INodesSettings;\n  links?: ILinksSettings;\n  ports?: IPortsSettings;\n  callbacks?: ICallbacks;\n}\n","import { observer } from 'mobx-react-lite';\nimport React, { useEffect, useMemo } from 'react';\nimport type { ILinkState } from 'states/linkState';\nimport type { INodeState } from 'states/nodeState';\nimport type { ISettings } from 'states/rootStore';\nimport { RootStore } from 'states/rootStore';\n\nexport const RootStoreContext = React.createContext<RootStore | null>(null);\n\nexport const DiagramContext = observer((props: IDiagramContextProps) => {\n  const [rootStore, initialSettings, initialState] = useMemo(\n    () => [\n      new RootStore(props.settings, props.initState),\n      props.settings,\n      props.initState,\n    ],\n    []\n  );\n\n  useEffect(() => {\n    if (initialSettings !== props.settings) {\n      rootStore.importSettings(props.settings);\n    }\n  }, [rootStore, props.settings, initialSettings]);\n\n  useEffect(() => {\n    if (initialState !== props.initState) {\n      rootStore.importState(\n        props.initState?.nodes ?? [],\n        props.initState?.links ?? []\n      );\n    }\n  }, [rootStore, props.initState, initialState]);\n\n  useEffect(() => {\n    if (props.storeRef) {\n      props.storeRef.current = rootStore;\n    }\n  }, [rootStore, props.storeRef]);\n\n  return (\n    <RootStoreContext.Provider value={rootStore}>\n      {props.children}\n    </RootStoreContext.Provider>\n  );\n});\n\nexport type IDiagramContextProps = React.PropsWithChildren<{\n  settings?: ISettings;\n  initState?: IDiagramInitState;\n  storeRef?: React.MutableRefObject<RootStore | null>;\n}>;\n\nexport interface IDiagramInitState {\n  nodes?: INodeState[];\n  links?: ILinkState[];\n}\n","import { useState } from 'react';\n\nexport const useNotifyRef = <TValue>(\n  init: TValue\n): React.MutableRefObject<TValue> => {\n  const [_, forceUpdate] = useState(0);\n  const [ref] = useState(() => ({\n    value: init,\n    facade: {\n      get current() {\n        return ref.value;\n      },\n      set current(value) {\n        const last = ref.value;\n        if (last !== value) {\n          ref.value = value;\n          forceUpdate((i) => i + 1);\n        }\n      },\n    },\n  }));\n\n  return ref.facade;\n};\n","import { useNotifyRef } from 'hooks/useNotifyRef';\nimport { useRootStore } from 'hooks/useRootStore';\nimport { useMemo, useRef } from 'react';\nimport { useGesture } from '@use-gesture/react';\nimport { LinkCreationState } from 'states/linkCreationState';\nimport { LinkState } from 'states/linkState';\nimport { GestureHandlers } from 'hooks/userInteractions/common';\nimport { ReactDOMAttributes } from '@use-gesture/react/dist/declarations/src/types';\n\nexport const useLinkUserInteraction = (\n  linkState: LinkState | LinkCreationState\n): IUseLinkUserInteractionResult => {\n  const rootStore = useRootStore();\n\n  const activeRef = useNotifyRef(false);\n  const selectionHandledRef = useRef(false);\n  const selectionTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n  const handlers = useMemo<GestureHandlers>(\n    () =>\n      linkState instanceof LinkState\n        ? {\n            onPointerEnter: () => {\n              linkState.hovered = true;\n            },\n            onPointerLeave: () => {\n              linkState.hovered = false;\n            },\n            onDragStart: () => {\n              activeRef.current = !rootStore.dragState.isActive;\n              if (activeRef.current) {\n                selectionHandledRef.current = false;\n\n                if (linkState.isSelectionEnabled) {\n                  selectionTimeoutRef.current = setTimeout(() => {\n                    if (!selectionHandledRef.current) {\n                      selectionHandledRef.current = true;\n                      rootStore.selectionState.switch(linkState);\n                    }\n                  }, selectDelay);\n                }\n              }\n            },\n            onDragEnd: ({ tap, ctrlKey, shiftKey, altKey, metaKey }) => {\n              if (activeRef.current) {\n                activeRef.current = false;\n                if (selectionTimeoutRef.current) {\n                  clearTimeout(selectionTimeoutRef.current);\n                }\n\n                if (\n                  linkState.isSelectionEnabled &&\n                  tap &&\n                  !selectionHandledRef.current\n                ) {\n                  selectionHandledRef.current = true;\n                  rootStore.selectionState.switch(\n                    linkState,\n                    !rootStore.diagramSettings.userInteraction.isCallbackMultiselectionActivated(\n                      shiftKey,\n                      altKey,\n                      ctrlKey,\n                      metaKey\n                    )\n                  );\n                }\n              }\n            },\n          }\n        : {},\n    [linkState, rootStore]\n  );\n\n  const bind = useGesture(handlers, {\n    eventOptions: { passive: false },\n    enabled: !rootStore.diagramSettings.userInteraction.arePointerInteractionsDisabled\n  });\n\n  return { bind };\n};\n\nconst selectDelay: number = 500;\n\nexport interface IUseLinkUserInteractionResult {\n  bind: (...args: any[]) => ReactDOMAttributes;\n}\n","import { observer } from 'mobx-react-lite';\nimport React from 'react';\nimport { useLinkUserInteraction } from 'hooks/userInteractions/useLinkUserInteraction';\nimport { LinkCreationState } from 'states/linkCreationState';\nimport { LinkState } from 'states/linkState';\n\nexport const LinkWrapper = observer<{ link: LinkState | LinkCreationState }>(\n  ({ link }) => {\n    const { bind } = useLinkUserInteraction(link);\n\n    return (\n      <g>\n        <link.componentDefinition.component\n          bind={bind}\n          entity={link}\n          settings={link.componentDefinition.settings}\n        />\n      </g>\n    );\n  }\n);\n","import { observer } from 'mobx-react-lite';\nimport React from 'react';\nimport { LinksStore } from 'states/linksStore';\nimport { LinkWrapper } from 'components/link/LinkWrapper';\nimport { useRootStore } from 'hooks/useRootStore';\n\nexport const LinksLayer = observer<{\n  transform: string;\n}>(({ transform }) => {\n  return (\n    <svg className='react_fast_diagram_Layer'>\n      <MarkerDefs />\n      <g style={{ transform: transform }}>\n        <LinksList />\n      </g>\n    </svg>\n  );\n});\n\nconst LinksList = observer(() => {\n  const { linksStore } = useRootStore();\n\n  return (\n    <>\n      {Array.from(linksStore.links).map(([id, link]) => (\n        <LinkWrapper key={link.id} link={link} />\n      ))}\n      {<LinkWrapper key='__creation__' link={linksStore.linkCreation} />}\n    </>\n  );\n});\n\nconst MarkerDefs = observer(() => {\n  const { linksSettings } = useRootStore();\n\n  return (\n    <defs>\n      {linksSettings.svgMarkers.map((Marker, i) => (\n        <Marker key={i} />\n      ))}\n    </defs>\n  );\n});\n","import { observer } from 'mobx-react-lite';\nimport React, { useEffect } from 'react';\nimport { useRootStore } from 'hooks/useRootStore';\nimport { NodesStore } from 'states/nodesStore';\nimport { NodeWrapper } from 'components/node/NodeWrapper';\n\nexport const NodesLayer = observer<{\n  transform: string;\n}>(({ transform }) => {\n  return (\n    <div className='react_fast_diagram_Layer' style={{ transform: transform }}>\n      <NodesList />\n    </div>\n  );\n});\n\nconst NodesList = observer(() => {\n  const { nodesStore } = useRootStore();\n  return (\n    <>\n      {Array.from(nodesStore.nodes).map(([id, node]) => (\n        <NodeWrapper key={node.id} node={node} />\n      ))}\n    </>\n  );\n});\n","import { useMemo } from 'react';\nimport { EventTypes, Handler } from '@use-gesture/react';\nimport { useRootStore } from 'hooks/useRootStore';\nimport { useNotifyRef } from 'hooks/useNotifyRef';\nimport { addPoints } from 'utils/point';\nimport { useDiagramCursor } from 'hooks/userInteractions/useCursor';\nimport { check } from './common';\n\ntype DragEventHandler = Handler<'drag', check<EventTypes, 'drag'>>;\n\nexport interface IDragHandlers {\n  onDrag: DragEventHandler;\n  onDragStart: DragEventHandler;\n  onDragEnd: DragEventHandler;\n}\n\nexport function useDiagramDragHandlers(\n  cancelEvent: (event: { target: EventTarget | null }) => boolean\n): IDragHandlers {\n  const rootStore = useRootStore();\n  const diagramState = rootStore.diagramState;\n\n  const activeRef = useNotifyRef(false);\n  const handlers = useMemo<IDragHandlers>(\n    () => ({\n      onDrag: ({ pinching, delta }) => {\n        if (!activeRef.current || pinching) {\n          return;\n        }\n        diagramState.setOffset(addPoints(diagramState.offset, delta));\n      },\n      onDragStart: ({ event, cancel }) => {\n        if (cancelEvent(event)) {\n          cancel();\n          return;\n        }\n        // Do not activate so drag will not be performed, but also don't cancel, as it would not be possible to clear selection\n        if (!rootStore.diagramSettings.userInteraction.diagramPan) {\n          return;\n        }\n        if ((event as MouseEvent).buttons !== 1) {\n          return;\n        }\n        activeRef.current = true;\n      },\n      onDragEnd: ({ tap }) => {\n        if (activeRef.current) {\n          if (tap) {\n            rootStore.selectionState.unselectAll();\n          }\n          activeRef.current = false;\n        }\n      },\n    }),\n    [activeRef, diagramState, cancelEvent, rootStore]\n  );\n\n  useDiagramCursor(activeRef.current, 'grabbing');\n\n  return handlers;\n}\n","import { EventTypes, Handler } from '@use-gesture/react';\nimport { useNotifyRef } from 'hooks/useNotifyRef';\nimport { useRootStore } from 'hooks/useRootStore';\nimport { useMemo, useRef } from 'react';\nimport { Point, subtractPoints } from 'utils/point';\nimport { check } from './common';\n\nexport function useDiagramPinchHandlers(\n  cancel: (event: { target: EventTarget | null }) => boolean\n): IPinchHandlers {\n  const { diagramState, diagramSettings } = useRootStore();\n\n  const activeRef = useNotifyRef(false);\n  const pinchState = useRef<IPinchState>({\n    distance: 0,\n    origin: [0, 0],\n    elementLeftTop: [0, 0],\n  });\n\n  const handlers = useMemo<IPinchHandlers>(\n    () => ({\n      onPinch: ({ da: [distance], origin }) => {\n        if (!activeRef.current || !diagramState.ref.current || distance <= 0) {\n          return;\n        }\n        const originDiff = diagramSettings.userInteraction.diagramPan\n          ? subtractPoints(origin, pinchState.current.origin)\n          : ([0, 0] as Point);\n\n        const originPositionOnElement = subtractPoints(\n          origin,\n          pinchState.current.elementLeftTop\n        );\n\n        diagramState.translateAndZoomInto(\n          originDiff,\n          originPositionOnElement,\n          distance / pinchState.current.distance\n        );\n\n        pinchState.current = {\n          distance,\n          origin,\n          elementLeftTop: pinchState.current.elementLeftTop,\n        };\n      },\n      onPinchStart: ({ da: [distance], origin, event }) => {\n        if (\n          !diagramSettings.userInteraction.diagramZoom ||\n          cancel(event) ||\n          !diagramState.ref.current ||\n          distance <= 0\n        ) {\n          return;\n        }\n\n        const rect = diagramState.ref.current.getBoundingClientRect();\n        pinchState.current = {\n          distance,\n          origin,\n          elementLeftTop: [rect.left, rect.top],\n        };\n        activeRef.current = true;\n      },\n      onPinchEnd: () => (activeRef.current = false),\n    }),\n    [diagramState.ref.current, activeRef, diagramState, cancel, diagramSettings]\n  );\n\n  return handlers;\n}\n\ntype PinchEventHandler = Handler<'pinch', check<EventTypes, 'pinch'>>;\n\ninterface IPinchHandlers {\n  onPinch: PinchEventHandler;\n  onPinchStart: PinchEventHandler;\n  onPinchEnd: PinchEventHandler;\n}\n\ninterface IPinchState {\n  distance: number;\n  origin: Point;\n  elementLeftTop: Point;\n}\n","import { EventTypes, Handler } from '@use-gesture/react';\nimport type {\n  check,\n  IUserInteractionTranslateAndZoom,\n} from 'hooks/userInteractions/common';\nimport { useRootStore } from 'hooks/useRootStore';\nimport { useMemo } from 'react';\nimport { subtractPoints } from 'utils/point';\n\nexport function useDiagramWheelHandler(\n  state: IUserInteractionTranslateAndZoom\n): IWheelHandler {\n  const { diagramState, diagramSettings } = useRootStore();\n\n  const handlers = useMemo<IWheelHandler>(\n    () => ({\n      onWheel: ({ direction: [_, yDirection], event }) => {\n        if (\n          !diagramState.ref.current ||\n          !diagramSettings.userInteraction.diagramZoom\n        )\n          return;\n        event?.preventDefault();\n        const rect = diagramState.ref.current.getBoundingClientRect();\n\n        const mousePositionOnElement = subtractPoints(\n          [event.clientX, event.clientY],\n          [rect.left, rect.top]\n        );\n\n        let factor = 0.9;\n        if (yDirection < 0) {\n          factor = 1 / factor;\n        }\n\n        state.translateAndZoomInto([0, 0], mousePositionOnElement, factor);\n      },\n    }),\n    [diagramState.ref, state, diagramSettings]\n  );\n\n  return handlers;\n}\n\ntype WheelEventHandler = Handler<'wheel', check<EventTypes, 'wheel'>>;\n\ninterface IWheelHandler {\n  onWheel: WheelEventHandler;\n}\n","import React, { useCallback } from 'react';\nimport { useGesture, WebKitGestureEvent } from '@use-gesture/react';\nimport { useRootStore } from 'hooks/useRootStore';\nimport { useDiagramDragHandlers } from 'hooks/userInteractions/useDiagramDragHandlers';\nimport { useDiagramPinchHandlers } from 'hooks/userInteractions/useDiagramPinchHandlers';\nimport { useDiagramWheelHandler } from 'hooks/userInteractions/useDiagramWheelHandler';\n\nexport const useDiagramUserInteraction = () => {\n  const { diagramState, diagramSettings } = useRootStore();\n\n  const cancelGesture = useCallback(\n    (\n      event: {target: EventTarget | null}\n    ) => event.target !== diagramState.ref.current,\n    [diagramState.ref]\n  );\n\n  const dragHandlers = useDiagramDragHandlers(cancelGesture);\n  const pinchHandlers = useDiagramPinchHandlers(cancelGesture);\n  const wheelHandler = useDiagramWheelHandler(diagramState);\n\n  useGesture(\n    {\n      ...dragHandlers,\n      ...pinchHandlers,\n      ...wheelHandler,\n    },\n    {\n      target: diagramState.ref,\n      eventOptions: { passive: false },\n      enabled: !diagramSettings.userInteraction.arePointerInteractionsDisabled\n    }\n  );\n};\n","import { observer } from 'mobx-react-lite';\nimport React from 'react';\nimport { useRootStore } from 'hooks/useRootStore';\n\nexport const BackgroundWrapper = observer(() => {\n  const { diagramSettings, diagramState } = useRootStore();\n\n  return (\n    <div className='react_fast_diagram_BackgroundWrapper'>\n      <diagramSettings.backgroundComponentState.component\n        diagramOffset={diagramState.offset}\n        diagramZoom={diagramState.zoom}\n        settings={diagramSettings.backgroundComponentState.settings}\n      />\n    </div>\n  );\n});\n","import { observer } from 'mobx-react-lite';\nimport React from 'react';\nimport { useRootStore } from 'hooks/useRootStore';\n\nexport const MiniControlWrapper = observer(() => {\n  const rootStore = useRootStore();\n  const minicontrolComponentState = rootStore.diagramSettings.miniControlComponentState;\n  return (\n    minicontrolComponentState.component && (\n      <minicontrolComponentState.component\n        rootStore={rootStore}\n        settings={minicontrolComponentState.settings}\n      />\n    )\n  );\n});\n","function styleInject(css, ref) {\n  if ( ref === void 0 ) ref = {};\n  var insertAt = ref.insertAt;\n\n  if (!css || typeof document === 'undefined') { return; }\n\n  var head = document.head || document.getElementsByTagName('head')[0];\n  var style = document.createElement('style');\n  style.type = 'text/css';\n\n  if (insertAt === 'top') {\n    if (head.firstChild) {\n      head.insertBefore(style, head.firstChild);\n    } else {\n      head.appendChild(style);\n    }\n  } else {\n    head.appendChild(style);\n  }\n\n  if (style.styleSheet) {\n    style.styleSheet.cssText = css;\n  } else {\n    style.appendChild(document.createTextNode(css));\n  }\n}\n\nexport default styleInject;\n","import React, {\n  ReactNode,\n  useEffect,\n  useLayoutEffect,\n  useRef,\n  useState,\n} from 'react';\nimport { LinksLayer } from 'components/link/LinksLayer';\nimport { NodesLayer } from 'components/node/NodesLayer';\nimport { useDiagramUserInteraction } from 'hooks/userInteractions/useDiagramUserInteraction';\nimport { observer } from 'mobx-react-lite';\nimport { useRootStore } from 'hooks/useRootStore';\nimport { BackgroundWrapper } from 'components/background/BackgroundWrapper';\nimport { MiniControlWrapper } from 'components/miniControl/MiniControlWrapper';\nimport { generateTransform } from 'utils/transformation';\nimport '../Diagram.css';\n\nexport interface IDiagramInnerProps {\n  diagramStyles?: React.CSSProperties;\n  children?: ReactNode | undefined;\n}\n\nexport const DigramInner = observer<IDiagramInnerProps>((props) => {\n  const rootStore = useRootStore();\n  useDiagramUserInteraction();\n\n  useResizeAction(() => {\n    rootStore.diagramState.ref.recalculateSizeAndPosition();\n    rootStore.nodesStore.nodes.forEach((n) => n.recalculatePortsOffset());\n  });\n\n  const [{ offset, zoom }, setOffsetZoom] = useState({\n    offset: rootStore.diagramState.offset,\n    zoom: rootStore.diagramState.zoom,\n  });\n\n  useEffect(() => {\n    setOffsetZoom({\n      offset: rootStore.diagramState.offset,\n      zoom: rootStore.diagramState.zoom,\n    });\n  }, [rootStore.diagramState.offset, rootStore.diagramState.zoom]);\n\n  const lastRenderedImportRef = useRef(-1);\n\n  useLayoutEffect(() => {\n    if (\n      rootStore.diagramState.importGenerationId > lastRenderedImportRef.current\n    ) {\n      lastRenderedImportRef.current = rootStore.diagramState.importGenerationId;\n\n      rootStore.callbacks.importedStateRendered();\n\n      setOffsetZoom({\n        offset: rootStore.diagramState.offset,\n        zoom: rootStore.diagramState.zoom,\n      });\n    }\n  }, [rootStore.diagramState.importGenerationId]);\n\n  let className = 'react_fast_diagram_DiagramInner';\n  if (\n    !rootStore.diagramSettings.userInteraction.arePointerInteractionsDisabled\n  ) {\n    // Disable touch actions as useGesture library recommends\n    className += ' react_fast_diagram_touch_action_disabled';\n  }\n\n  const transform = generateTransform(offset, zoom);\n\n  return (\n    <div\n      ref={rootStore.diagramState.ref}\n      style={props.diagramStyles}\n      data-zoom={zoom}\n      className={className}\n    >\n      <BackgroundWrapper />\n      <LinksLayer transform={transform} />\n      <NodesLayer transform={transform} />\n      {props.children}\n      <MiniControlWrapper />\n    </div>\n  );\n});\n\nfunction useResizeAction(action: () => any) {\n  const rootStore = useRootStore();\n\n  useEffect(() => {\n    window.addEventListener('resize', action);\n    return () => window.removeEventListener('resize', action);\n  }, [rootStore, action]);\n}\n","import { DiagramContext, IDiagramContextProps } from 'components/DiagramContext';\nimport { DigramInner, IDiagramInnerProps } from 'components/DiagramInner';\nimport React from 'react';\n\nexport type IDiagramProps = IDiagramInnerProps & IDiagramContextProps;\n\nexport function Diagram(props: IDiagramProps) {\n  return (\n    <DiagramContext\n      initState={props.initState}\n      settings={props.settings}\n      storeRef={props.storeRef}\n    >\n      <DigramInner children={props.children}/>\n    </DiagramContext>\n  );\n}\n","import { useRootStore } from 'hooks/useRootStore';\nimport React, { useCallback, useRef, useState } from 'react';\nimport { useGesture } from '@use-gesture/react';\nimport { RootStore } from 'states/rootStore';\nimport { multiplyPoint, Point, subtractPoints } from 'utils/point';\nimport { addNodeCommand } from 'commands/addNode';\nimport { INodeState } from 'index';\n\ninterface DragAndDropBaseEvent {\n  /**\n   * Position of mouse or finger on the screen.\n   */\n  pointerPosition: Point;\n  store: RootStore;\n}\n\nexport interface DragAndDropEvent extends DragAndDropBaseEvent {\n  /**\n   * Position in diagram coordinates system (including zoom). Undefined if pointer is not above a diagram.\n   */\n  position?: Point;\n}\n\nexport interface DragAndDropStartEvent extends DragAndDropBaseEvent {}\n\nexport interface DragAndDropItemProps {\n  /**\n   * Callback that will be called on drop.\n   */\n  onDrop: (event: DragAndDropEvent) => any;\n  /**\n   * Callback that will be called on drag start. Return false to cancel drag.\n   */\n  onDragStart?: (state: DragAndDropStartEvent) => false | any;\n  /**\n   * Callback that will be called during pointer movement.\n   */\n  onDrag?: (event: DragAndDropEvent) => any;\n  /**\n   * Represents element to drag. It will be wrapped in another element with disabled user-select and touch-action.\n   */\n  draggable: JSX.Element;\n  /**\n   * Element to render while dragging. Same as draggable if not provided.\n   */\n  droppable?: JSX.Element;\n}\n\nexport function DragAndDropItem(props: DragAndDropItemProps) {\n  const store = useRootStore();\n\n  const [position, setPosition] = useState<Point>([0, 0]);\n  const [translate, setTranslate] = useState<Point>([0, 0]);\n  const [active, setActive] = useState(false);\n  const diagramRectRef = useRef<DOMRect>();\n  const elementRef = useRef<HTMLDivElement>(null);\n  const cancelledRef = useRef<boolean>(false);\n\n  const getPositionOnDiagram = useCallback(\n    (pointerPosition: Point) => {\n      if (diagramRectRef.current) {\n        const pointOnDiagram = subtractPoints(pointerPosition, [\n          diagramRectRef.current.left,\n          diagramRectRef.current.top,\n        ]);\n        if (\n          pointOnDiagram[0] >= 0 &&\n          pointOnDiagram[1] >= 0 &&\n          pointOnDiagram[0] <= diagramRectRef.current.width &&\n          pointOnDiagram[1] <= diagramRectRef.current.height\n        ) {\n          return multiplyPoint(\n            subtractPoints(pointOnDiagram, store.diagramState.offset),\n            1 / store.diagramState.zoom\n          );\n        }\n      }\n    },\n    [diagramRectRef, store]\n  );\n\n  useGesture(\n    {\n      onDrag: ({ movement, xy }) => {\n        // Cannot use 'cancel' property provided by the library because the first callbacks\n        // after cancelling will have this property set to false\n        if (!cancelledRef.current) {\n          setTranslate(movement);\n\n          props.onDrag?.({\n            position: getPositionOnDiagram(xy),\n            pointerPosition: xy,\n            store,\n          });\n        }\n      },\n      onDragStart: ({ xy, cancel }) => {\n        const allowDrag = props.onDragStart?.({ pointerPosition: xy, store });\n        if (allowDrag === false) {\n          cancelledRef.current = true;\n          cancel();\n          return;\n        } else {\n          cancelledRef.current = false;\n          diagramRectRef.current = store.diagramState.ref.current?.getBoundingClientRect();\n          setPosition(xy);\n          setActive(true);\n        }\n      },\n      onDragEnd: ({ xy }) => {\n        if (!cancelledRef.current) {\n          setActive(false);\n          setTranslate([0, 0]);\n\n          props.onDrop?.({\n            position: getPositionOnDiagram(xy),\n            pointerPosition: xy,\n            store,\n          });\n        }\n      },\n    },\n    {\n      target: elementRef,\n      eventOptions: { passive: false },\n    }\n  );\n\n  return (\n    <div className='react_fast_diagram_DragAndDropItem' ref={elementRef}>\n      {props.draggable}\n      <div\n        className='react_fast_diagram_DragAndDropItem_Droppable'\n        style={{\n          transform: `translate(calc(${translate[0]}px - 50%), calc(${translate[1]}px - 50%))`,\n          opacity: active ? 1 : 0,\n          pointerEvents: active ? 'auto' : 'none',\n          left: position[0],\n          top: position[1],\n        }}\n      >\n        {props.droppable ? props.droppable : props.draggable}\n      </div>\n    </div>\n  );\n}\n\nexport function createNodeOnDrop(node: Omit<INodeState, 'position'>) {\n  return (event: DragAndDropEvent) => {\n    // Check if drop occured above the diagram\n    if (event.position) {\n      event.store.commandExecutor.execute(\n        addNodeCommand({\n          ...node,\n          position: event.position,\n        })\n      );\n    }\n  };\n}\n","import React, { CSSProperties, useMemo } from 'react';\nimport {\n  DragAndDropItem,\n  DragAndDropItemProps,\n} from 'components/dragAndDrop/DragAndDropItem';\nimport { combineArrays } from 'utils/common';\n\nexport interface DragAndDropContainerProps {\n  items: DragAndDropItemProps[];\n  classes?: string[];\n  style?: CSSProperties;\n}\n\nexport function DragAndDropContainer(props: DragAndDropContainerProps) {\n  const className = useMemo(\n    () =>\n      combineArrays(\n        ['react_fast_diagram_DragAndDropContainer'],\n        props?.classes\n      ).join(' '),\n    [props.classes]\n  );\n\n  return (\n    <div className={className} style={props.style}>\n      {props.items?.map((item, index) => (\n        <DragAndDropItem key={index} {...item} />\n      ))}\n    </div>\n  );\n}\n","export type Direction = 'left' | 'right' | 'up' | 'down';\nexport type DirectionWithDiagonals =\n  | Direction\n  | 'left-down'\n  | 'left-up'\n  | 'right-down'\n  | 'right-up';\n\nexport const positionValues = <const>['left', 'top', 'right', 'bottom'];\nexport type Position = typeof positionValues[number];\n\nexport type CornerPosition =\n  | 'left-top'\n  | 'right-top'\n  | 'right-bottom'\n  | 'left-bottom';\n","import React, { useMemo } from 'react';\nimport { observer } from 'mobx-react-lite';\nimport { VisualComponent } from 'states/visualComponentState';\nimport { positionValues, Position } from 'utils/position';\nimport { IPortState } from 'states/portState';\nimport { Port } from './Port';\n\nexport interface IPortsContainerSettings {\n  style?: React.CSSProperties;\n  gapBetweenPorts: string;\n  /**\n   * If number - offset from origin position in direction from the center of parent element.\n   * If Point - horizontal offset and vertical offset.\n   */\n  offsetFromOriginPosition?: number;\n}\n\nexport interface IPortsContainerProps {\n  position: Position;\n  ports?: IPortState[];\n}\n\nconst PortsContainer: React.FC<\n  IPortsContainerProps & IPortsContainerSettings\n> = observer(\n  ({ position, ports, style, gapBetweenPorts, offsetFromOriginPosition }) => {\n    const portsModified = useMemo(\n      () =>\n        ports &&\n        ports.map(\n          (p) =>\n            ({\n              linkDirection: positionToDirection[position],\n              ...p,\n            } as IPortState)\n        ),\n      [position, ports]\n    );\n\n    if (!portsModified || portsModified.length === 0) return null;\n\n    let className = 'react_fast_diagram_flex_gap ';\n    if (position === 'top' || position === 'bottom') {\n      className += 'react_fast_diagram_flex_gap_x';\n    } else {\n      className += 'react_fast_diagram_flex_gap_y';\n    }\n\n    const positionStyle = {\n      position: 'absolute',\n      left: position === 'left' ? 0 : undefined,\n      top:\n        position === 'left' || position === 'right' || position === 'top'\n          ? 0\n          : undefined,\n      right: position === 'right' ? 0 : undefined,\n      bottom: position === 'bottom' ? 0 : undefined,\n      height: position === 'left' || position === 'right' ? '100%' : undefined,\n      width: position === 'top' || position === 'bottom' ? '100%' : undefined,\n    };\n\n    const offsetFromOriginPositionStyle = {};\n    if (offsetFromOriginPosition && positionValues.includes(position)) {\n      offsetFromOriginPositionStyle[position] = -offsetFromOriginPosition;\n    }\n\n    return (\n      <div\n        className={className}\n        style={{\n          // @ts-ignore\n          '--gap': gapBetweenPorts,\n          ...style,\n          ...positionStyle,\n          ...offsetFromOriginPositionStyle,\n        }}\n      >\n        {portsModified &&\n          portsModified.map((port) => <Port {...port} key={port.id} />)}\n      </div>\n    );\n  }\n);\n\nconst positionToDirection = {\n  left: 'left',\n  top: 'up',\n  right: 'right',\n  bottom: 'down',\n};\n\nexport function createPortsContainer(\n  settings?: Partial<IPortsContainerSettings>\n): VisualComponent<IPortsContainerProps> {\n  return (props: IPortsContainerProps) => (\n    <PortsContainer\n      {...{ ...defaultPortsContainerSettings, ...settings }}\n      {...props}\n    />\n  );\n}\n\nconst defaultPortsContainerSettings: IPortsContainerSettings = {\n  gapBetweenPorts: '8px',\n};\n","import React, { useMemo } from 'react';\nimport { Diagram } from 'components/Diagram';\nimport type { IDiagramInitState } from 'components/DiagramContext';\nimport { RootStore } from 'states/rootStore';\nimport type { ISettings } from 'states/rootStore';\nimport { useNotifyRef } from 'hooks/useNotifyRef';\n\nexport const useDiagram = (\n  initState?: IDiagramInitState,\n  settings?: ISettings\n) => {\n  const storeRef = useNotifyRef<RootStore | null>(null);\n\n  const obj = useMemo(\n    () => ({\n      Diagram: () => (\n        <Diagram\n          storeRef={storeRef}\n          initState={initState}\n          settings={settings}\n        />\n      ),\n      storeRef,\n    }),\n    []\n  );\n\n  return obj;\n};\n","import { ILinkPathConstructor, ILinkPathConstructorEndpointInfo } from \"states/linksSettings\";\n\nfunction straightLinkPathConstructor(\n  source: ILinkPathConstructorEndpointInfo,\n  target: ILinkPathConstructorEndpointInfo\n): string {\n  const path = `M ${source.point[0]} ${source.point[1]}, ${target.point[0]} ${target.point[1]}`;\n\n  return path;\n}\n\nexport function createStraightLinkPathConstructor(): ILinkPathConstructor {\n  return straightLinkPathConstructor;\n}\n"]}