ice-entity-designer 0.0.24 → 0.0.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
  "use strict";function _defineProperty$1(t,e,i){return(e=function _toPropertyKey(t){var e=function _toPrimitive(t,e){if("object"!=typeof t||!t)return t;var i=t[Symbol.toPrimitive];if(void 0!==i){var s=i.call(t,e||"default");if("object"!=typeof s)return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:e+""}(e))in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function ownKeys(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);e&&(s=s.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,s)}return i}function _objectSpread2(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?ownKeys(Object(i),!0).forEach((function(e){_defineProperty$1(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):ownKeys(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}function isNil$1(t){return null==t}function isString(t){return"string"==typeof t}function isUndefined(t){return void 0===t}function round(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(0===e)return Math.round(t);const[i,s]="".concat(t).split("e"),o=s?parseInt(s,10):0,r=Math.round(Number("".concat(i,"e").concat(o+e))),[a,l]="".concat(r).split("e");return Number("".concat(a,"e").concat((l?parseInt(l,10):0)-e))}function isPlainObject$2(t){if(null===t||"object"!=typeof t||Array.isArray(t))return!1;const e=Object.getPrototypeOf(t);return e===Object.prototype||null===e}function merge$1(t){for(var e=arguments.length,i=new Array(e>1?e-1:0),s=1;s<e;s++)i[s-1]=arguments[s];for(const e of i)if(null!=e)for(const i in e){const s=e[i];if(void 0===s)continue;const o=t[i];isPlainObject$2(s)&&isPlainObject$2(o)?(Object.prototype.hasOwnProperty.call(t,i)||(t[i]=cloneDeep(o)),merge$1(t[i],s)):t[i]=s}return t}function cloneDeep(t){if(Array.isArray(t))return t.map(t=>cloneDeep(t));if(isPlainObject$2(t)){const e={};for(const i in t)e[i]=cloneDeep(t[i]);return e}return t}
26
26
  //!ICE 自定的事件名称常量,原生 DOM 事件的名称不变。
27
- Object.defineProperty(exports,"__esModule",{value:!0});var t="ICE_FRAME_EVENT",e="BEFORE_RENDER",i="AFTER_RENDER",s="BEFORE_ADD",o="AFTER_ADD",r="BEFORE_REMOVE",a="AFTER_REMOVE",l="ROUND_FINISH",h="HOOK_MOUSEDOWN",c="HOOK_MOUSEMOVE",d="HOOK_MOUSEUP",u="BEFORE_RESIZE",p="AFTER_RESIZE",f="BEFORE_ROTATE",g="AFTER_ROTATE",m="BEFORE_MOVE",y="AFTER_MOVE";function springProgress(t,e){const i=t,s=Math.sqrt(Math.max(1e-6,1-t*t));return t=>{const o=Math.max(0,t)*e;return 1-Math.exp(-i*o)*(Math.cos(s*o)+i/s*Math.sin(s*o))}}const _={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>t*(2-t),easeInOutQuad:t=>t<.5?2*t*t:(4-2*t)*t-1,easeInQuart:t=>t*t*t*t,easeOutQuart:t=>1-Math.pow(1-t,4),easeInOutQuart:t=>t<.5?8*t*t*t*t:1-8*Math.pow(1-t,4),easeInCubic:t=>t*t*t,easeOutCubic:t=>1-Math.pow(1-t,3),easeInOutCubic:t=>t<.5?4*t*t*t:1-Math.pow(-2*t+2,3)/2,spring:springProgress(.55,12),springSoft:springProgress(.75,14),springSnappy:springProgress(.4,9)},b={color:{blue:{50:"#EFF6FF",100:"#DBEAFE",200:"#BFDBFE",300:"#93C5FD",400:"#60A5FA",500:"#3B82F6",600:"#2563EB",700:"#1D4ED8",800:"#1E40AF",900:"#1E3A8A"},emerald:{50:"#ECFDF5",100:"#D1FAE5",200:"#A7F3D0",300:"#6EE7B7",400:"#34D399",500:"#10B981",600:"#059669",700:"#047857",800:"#065F46",900:"#064E3B"},amber:{50:"#FFFBEB",100:"#FEF3C7",200:"#FDE68A",300:"#FCD34D",400:"#FBBF24",500:"#F59E0B",600:"#D97706",700:"#B45309",800:"#92400E",900:"#78350F"},red:{50:"#FEF2F2",100:"#FEE2E2",200:"#FECACA",300:"#FCA5A5",400:"#F87171",500:"#EF4444",600:"#DC2626",700:"#B91C1C",800:"#991B1B",900:"#7F1D1D"},gray:{50:"#F9FAFB",100:"#F3F4F6",200:"#E5E7EB",300:"#D1D5DB",400:"#9CA3AF",500:"#6B7280",600:"#4B5563",700:"#374151",800:"#1F2937",900:"#111827"},violet:{50:"#F5F3FF",100:"#EDE9FE",200:"#DDD6FE",300:"#C4B5FD",400:"#A78BFA",500:"#8B5CF6",600:"#7C3AED",700:"#6D28D9",800:"#5B21B6",900:"#4C1D95"},teal:{50:"#F0FDFA",100:"#CCFBF1",200:"#99F6E4",300:"#5EEAD4",400:"#2DD4BF",500:"#14B8A6",600:"#0D9488",700:"#0F766E",800:"#115E59",900:"#134E4A"},pink:{50:"#FDF2F8",100:"#FCE7F3",200:"#FBCFE8",300:"#F9A8D4",400:"#F472B6",500:"#EC4899",600:"#DB2777",700:"#BE185D",800:"#9D174D",900:"#831843"},indigo:{50:"#EEF2FF",100:"#E0E7FF",200:"#C7D2FE",300:"#A5B4FC",400:"#818CF8",500:"#6366F1",600:"#4F46E5",700:"#4338CA",800:"#3730A3",900:"#312E81"}},spacing:{1:4,2:8,3:12,4:16,6:24,8:32,12:48,16:64},radius:{sm:4,md:8,lg:12,xl:16,full:9999},fontSize:{sm:12,md:14,lg:16,xl:20,"2xl":24,"3xl":32,"4xl":44},fontFamily:{base:"Arial"},fontWeight:{normal:400,bold:700}};function buildSemantic(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=t.color;return _objectSpread2({primary:i.blue[500],success:i.emerald[500],warning:i.amber[500],danger:i.red[500],info:i.blue[400],text:i.gray[800],muted:i.gray[500],hint:i.gray[400],border:i.gray[200],background:"#ffffff",palette:[i.blue[500],i.emerald[500],i.amber[500],i.red[500],i.violet[500],i.teal[500],i.pink[500],i.indigo[500]],motion:{duration:{fast:100,normal:200,slow:300,slower:500},easing:{linear:"linear",out:"easeOutCubic",inOut:"easeInOutCubic",outQuart:"easeOutQuart",spring:"spring",springSoft:"springSoft",springSnappy:"springSnappy"}}},e)}const v={base:b,semantic:buildSemantic(b)},x={base:b,semantic:buildSemantic(b,{primary:b.color.blue[400],success:b.color.emerald[400],warning:b.color.amber[400],danger:b.color.red[400],info:b.color.teal[400],text:b.color.gray[200],muted:b.color.gray[400],hint:b.color.gray[500],border:b.color.gray[700],background:b.color.gray[900],palette:[b.color.blue[400],b.color.emerald[400],b.color.amber[400],b.color.red[400],b.color.violet[400],b.color.teal[400],b.color.pink[400],b.color.indigo[400]]})},w={default:v,dark:x};let C=v;function registerTheme(t,e){w[t]=e}function resolveTheme(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:C;return"string"==typeof t?w[t]||v:{base:e.base,semantic:_objectSpread2(_objectSpread2({},e.semantic),t)}}function setTheme(t){return C=resolveTheme(t,C),C}function getTheme(){return C}const S={card:t=>({radius:t.base.radius.lg,style:{fillStyle:t.semantic.background,strokeStyle:t.semantic.border,lineWidth:1,shadow:"md"}}),gradient:t=>({radius:t.base.radius.lg,style:{fillGradient:{type:"linear",from:[0,0],to:[0,200],stops:[[0,t.semantic.primary],[1,t.semantic.background]]},strokeStyle:t.semantic.border,lineWidth:1}}),panel:t=>({radius:t.base.radius.md,style:{fillStyle:t.semantic.background,strokeStyle:t.semantic.border,lineWidth:1,shadow:"sm"}}),button:t=>({radius:t.base.radius.md,style:{fillStyle:t.semantic.primary,strokeStyle:t.semantic.primary,lineWidth:1,shadow:"sm"}}),"button-danger":t=>({radius:t.base.radius.md,style:{fillStyle:t.semantic.danger,strokeStyle:t.semantic.danger,lineWidth:1,shadow:"sm"}}),title:t=>({stroke:!1,style:{fontSize:t.base.fontSize["2xl"],fontWeight:t.base.fontWeight.bold,fillStyle:t.semantic.text}}),subtitle:t=>({stroke:!1,style:{fontSize:t.base.fontSize.lg,fillStyle:t.semantic.muted}}),body:t=>({stroke:!1,style:{fontSize:t.base.fontSize.md,fillStyle:t.semantic.text}}),label:t=>({stroke:!1,style:{fontSize:t.base.fontSize.sm,fillStyle:t.semantic.hint}})};var k={baseTokens:b,DEFAULT_THEME:v,DARK_THEME:x,registerTheme:registerTheme,setTheme:setTheme,getTheme:getTheme,STYLE_PRESETS:S},P=class AnimationManager{constructor(t){_defineProperty$1(this,"animationMap",new Map),_defineProperty$1(this,"paused",!1),_defineProperty$1(this,"pausedAt",0),_defineProperty$1(this,"warned",new WeakSet),this.ice=t}start(){return this.ice.evtBus.on(t,this.frameEventHandler,this),this}stop(){return this.ice.evtBus.off(t,this.frameEventHandler,this),this}frameEventHandler(t){if(this.paused)return;const e=Date.now(),i=[...this.animationMap.values()];for(let t=0;t<i.length;t++){const s=i[t],o=s.state.interactive;s.state.interactive=!1,this.tween(s,e),s.state.interactive=o}}__writeValue(t,e,i){const s=e.indexOf(".");if(-1===s)return void(t[e]=i);const o=e.slice(0,s),r=e.slice(s+1);t[o]&&"object"==typeof t[o]||(t[o]={}),this.__writeValue(t[o],r,i)}tween(t,e){const i={},s=t.props.animations,o=isUndefined(e)?Date.now():e;let r=!1;for(const t in s){const e=s[t];if(e.finished)continue;let a;if(isUndefined(e.startTime)&&(e.startTime=o,this.__resolveMotion(e)),isUndefined(e.easing)&&(e.easing="linear"),Array.isArray(e.keyframes)){const i=this.__normalizeKeyframes(e);if(!i){this.__reject(e,"[ICE] 动画属性「".concat(t,"」的 keyframes 非法:需要 ≥2 帧、offset 为数字、各帧取值同型(都是数字或等长的数字数组);已跳过。"));continue}a=i}else if(!this.__isTweenable(e.from,e.to)){this.__reject(e,"[ICE] 动画属性「".concat(t,"」的取值必须都是数字或等长的数字数组,当前为 ")+"".concat(this.__describe(e.from)," → ").concat(this.__describe(e.to),";已跳过。"));continue}const l=Number(e.duration);if(!Number.isFinite(l)||l<=0){this.__reject(e,"[ICE] 动画属性「".concat(t,"」的 duration 必须是正数,当前为 ").concat(String(e.duration),";已直接落到终点。")),this.__writeValue(i,t,this.__roundIfNeeded(e,this.__sampleValue(a,e,1)));continue}const h=Number(e.delay)||0,c=o-e.startTime-h;if(c<0){r=!0,this.__writeValue(i,t,this.__sampleValue(a,e,0));continue}if(c>=l){let s=this.__sampleValue(a,e,1);this.shouldRepeat(e)?(e.startTime=o,s=this.__sampleValue(a,e,0),r=!0):e.finished=!0,this.__writeValue(i,t,this.__roundIfNeeded(e,s));continue}r=!0;const d=a?c/l:this.__easingFn(e.easing,e)(c/l);this.__writeValue(i,t,this.__roundIfNeeded(e,this.__sampleValue(a,e,d)))}return r||this.remove(t),Object.keys(i).length>0&&t.setState(i),t}__sampleValue(t,e,i){if(!t)return this.__interpolate(e.from,e.to,i);const s=t[0],o=t[t.length-1];if(i<=s.offset)return s.value;if(i>=o.offset)return o.value;for(let s=0;s<t.length-1;s++){const o=t[s],r=t[s+1];if(i<o.offset||i>r.offset)continue;const a=r.offset-o.offset;if(a<=0)return r.value;const l=(i-o.offset)/a,h=this.__easingFn(isUndefined(o.easing)?e.easing:o.easing,e);return this.__interpolate(o.value,r.value,h(l))}return o.value}__interpolate(t,e,i){if("number"==typeof t)return t+(e-t)*i;const s=new Array(t.length);for(let o=0;o<t.length;o++)s[o]=t[o]+(e[o]-t[o])*i;return s}__isTweenable(t,e){const i=this.__valueKind(t);return null!==i&&i===this.__valueKind(e)&&("number"===i||t.length===e.length)}__valueKind(t){if("number"==typeof t)return"number";if(Array.isArray(t)&&t.length>0){for(let e=0;e<t.length;e++)if("number"!=typeof t[e])return null;return"array"}return null}__normalizeKeyframes(t){if(t.__frames)return t.__frames;const e=t.keyframes;if(!Array.isArray(e)||e.length<2)return null;const i=[];for(let t=0;t<e.length;t++){const s=e[t]||{},o=isUndefined(s.offset)?t/(e.length-1):Number(s.offset);if(!Number.isFinite(o))return null;i.push({offset:Math.min(1,Math.max(0,o)),value:s.value,easing:s.easing})}i.sort((t,e)=>t.offset-e.offset);const s=this.__valueKind(i[0].value);if(null===s)return null;const o="array"===s?i[0].value.length:0;for(let t=1;t<i.length;t++){if(this.__valueKind(i[t].value)!==s)return null;if("array"===s&&i[t].value.length!==o)return null}return t.__frames=i,i}__easingFn(t,e){return("string"==typeof t?_[t]:void 0)||(e&&this.__warnOnce(e,"[ICE] 未知的缓动「".concat(String(t),"」,已回退为 linear。可用:").concat(Object.keys(_).join(" / "))),_.linear)}__roundIfNeeded(t,e){return t.round?"number"==typeof e?Math.round(e):e.map(t=>Math.round(t)):e}__describe(t){return Array.isArray(t)?"数组[".concat(t.length,"]"):typeof t}__reject(t,e){t.finished=!0,this.__warnOnce(t,e)}__warnOnce(t,e){t&&"object"==typeof t&&(this.warned.has(t)||this.warned.add(t))}__resolveMotion(t){const e=(this.ice&&this.ice.theme||getTheme()).semantic.motion;"string"==typeof t.duration&&void 0!==e.duration[t.duration]&&(t.duration=e.duration[t.duration]),"string"==typeof t.easing&&void 0!==e.easing[t.easing]&&(t.easing=e.easing[t.easing])}shouldRepeat(t){return!0===t.loop||"number"==typeof t.iterationCount&&t.iterationCount>1&&(t.iterationCount--,!0)}pause(){this.paused||(this.paused=!0,this.pausedAt=Date.now())}resume(){if(!this.paused)return;const t=Date.now()-this.pausedAt,e=[...this.animationMap.values()];for(const i of e){const e=i.props.animations;for(const i in e){const s=e[i];isUndefined(s.startTime)||(s.startTime+=t)}}this.paused=!1}isPaused(){return this.paused}add(t){this.animationMap.set(t.props.id,t)}remove(t){isString(t)?this.animationMap.delete(t):this.animationMap.delete(t.props.id)}};let E=0;function bumpVisibilityEpoch(){E++}function getVisibilityEpoch(){return E}function isEffectivelyVisible(t){return t&&"function"==typeof t.isEffectivelyVisible?t.isEffectivelyVisible():!!(t&&t.state&&t.state.display)}function flattenAllComponents(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return flattenTree(e,t.childNodes||[]),flattenTree(e,t.toolNodes||[]),e}function hitTestComponents(t,e,i,s){const o=flattenAllComponents(t);o.sort((t,e)=>t.state.zIndex-e.state.zIndex);const r=t.renderer,a=r&&"function"==typeof r.getWorldBox;let l=null;for(let t=0;t<o.length;t++){const h=o[t];if(!h.isControlPanel&&h.state.interactive&&isEffectivelyVisible(h)){if(a){const t=r.getWorldBox(h);if(t&&(e<t[0]-s||e>t[2]+s||i<t[1]-s||i>t[3]+s))continue}if(h.containsPoint(e,i)){if("function"==typeof h.isPointClippedOut&&h.isPointClippedOut(e,i))continue;l=h}}}return l}function flattenTree(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;for(let o=0;o<e.length;o++){const r=e[o];r._level=i,r._pid=s,t.push(r);const a=r.props&&void 0!==r.props.id?r.props.id:r.id;flattenTree(t,r.childNodes||[],i+1,a)}return t}class Path2DRecorder{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;_defineProperty$1(this,"_commands",[]),_defineProperty$1(this,"_closed",!1),_defineProperty$1(this,"native",null),_defineProperty$1(this,"__current",null),_defineProperty$1(this,"__subpathStart",null),this.native=t||null,this._isPolyfill=!this.native}get drawable(){return this.native||this}moveTo(t,e){this._commands.push(["moveTo",t,e]),this.__current=[t,e],this.__subpathStart=[t,e],this.native&&this.native.moveTo(t,e)}lineTo(t,e){this._commands.push(["lineTo",t,e]),this.__current=[t,e],this.native&&this.native.lineTo(t,e)}bezierCurveTo(t,e,i,s,o,r){this._commands.push(["bezierCurveTo",t,e,i,s,o,r]),this.__current=[o,r],this.native&&this.native.bezierCurveTo(t,e,i,s,o,r)}quadraticCurveTo(t,e,i,s){this._commands.push(["quadraticCurveTo",t,e,i,s]),this.__current=[i,s],this.native&&this.native.quadraticCurveTo(t,e,i,s)}arcTo(t,e,i,s,o){const r=Math.abs(Number(o)||0),a=this.__current;if(!a||0===r)return void this.lineTo(t,e);const l=a[0]-t,h=a[1]-e,c=i-t,d=s-e,u=Math.sqrt(l*l+h*h),p=Math.sqrt(c*c+d*d);if(0===u||0===p)return void this.lineTo(t,e);const f=l/u,g=h/u,m=c/p,y=d/p,_=f*y-g*m,b=Math.max(-1,Math.min(1,f*m+g*y));if(Math.abs(_)<1e-9||Math.abs(b)>=1-1e-9)return void this.lineTo(t,e);const v=Math.acos(b),x=r/Math.tan(v/2),w=t+f*x,C=e+g*x,S=t+m*x,k=e+y*x,P=f+m,E=g+y,M=Math.sqrt(P*P+E*E)||1,T=r/Math.sin(v/2),I=t+P/M*T,B=e+E/M*T,N=Math.atan2(C-B,w-I),D=Math.atan2(k-B,S-I);this.lineTo(w,C),this.arc(I,B,r,N,D,_>0)}rect(t,e,i,s){this._commands.push(["rect",t,e,i,s]),this.__current=[t,e],this.__subpathStart=[t,e],this.native&&this.native.rect(t,e,i,s)}arc(t,e,i,s,o){let r=arguments.length>5&&void 0!==arguments[5]&&arguments[5];this._commands.push(["arc",t,e,i,s,o,r]),this.__current=[t+i*Math.cos(o),e+i*Math.sin(o)],this.native&&this.native.arc(t,e,i,s,o,r)}ellipse(t,e,i,s,o,r,a,l){this._commands.push(["ellipse",t,e,i,s,o,r,a,l]),this.__current=[t+i*Math.cos(a)*Math.cos(o)-s*Math.sin(a)*Math.sin(o),e+i*Math.cos(a)*Math.sin(o)+s*Math.sin(a)*Math.cos(o)],this.native&&this.native.ellipse(t,e,i,s,o,r,a,l)}closePath(){this._closed=!0;const t=this._commands[this._commands.length-1];t&&"closePath"===t[0]||this._commands.push(["closePath"]),this.__current=this.__subpathStart?[this.__subpathStart[0],this.__subpathStart[1]]:null,this.native&&this.native.closePath()}get currentPoint(){return this.__current}}let M=null;(()=>{const t="undefined"!=typeof window?window:"undefined"!=typeof global?global:{};M=t||{},M.requestFrame=M.requestAnimationFrame||M.webkitRequestAnimationFrame||M.mozRequestAnimationFrame||M.oRequestAnimationFrame||M.msRequestAnimationFrame,"function"!=typeof M.requestFrame&&(M.requestFrame=function(t){return setTimeout((function(){t(Date.now())}),16)}),M.createPath2D=()=>"function"==typeof M.Path2D?new Path2DRecorder(new M.Path2D):new Path2DRecorder,M.loadFont=(t,e)=>{if("function"==typeof M.FontFace&&M.document&&M.document.fonts){const i=new M.FontFace(t,e);return M.document.fonts.add(i),i.load()}return M.wx&&"function"==typeof M.wx.loadFont?M.wx.loadFont(e):Promise.resolve()},M.createImage=()=>{if("function"==typeof M.Image)return new M.Image;if(M.wx&&"function"==typeof M.wx.createImage)return M.wx.createImage();throw new Error("当前运行时没有可用的 Image 构造器,无法加载图片。")},"number"==typeof M.devicePixelRatio&&M.devicePixelRatio>0||(M.devicePixelRatio=(()=>{if(M.wx&&"function"==typeof M.wx.getSystemInfoSync)try{return M.wx.getSystemInfoSync().pixelRatio||1}catch(t){return 1}return 1})()),M.createOffscreenCanvas=(t,e)=>{if(M.wx&&"function"==typeof M.wx.createOffscreenCanvas){const i=M.wx.createOffscreenCanvas({type:"2d",width:t,height:e}),s=i.getContext("2d");if(!s)throw new Error("当前运行时无法创建 2d 离屏上下文。");return{canvas:i,ctx:s}}if(M.document&&"function"==typeof M.document.createElement){const i=M.document.createElement("canvas");i.width=t,i.height=e;const s=i.getContext("2d");if(!s)throw new Error("当前运行时无法创建 2d 离屏上下文。");return{canvas:i,ctx:s}}throw new Error("当前运行时没有可用的离屏 canvas。")}})();var T=M,I="undefined"!=typeof Float32Array?Float32Array:Array,B=Math.PI/180;function toRadian(t){return t*B}function invert(t,e){var i=e[0],s=e[1],o=e[2],r=e[3],a=e[4],l=e[5],h=i*r-s*o;return h?(h=1/h,t[0]=r*h,t[1]=-s*h,t[2]=-o*h,t[3]=i*h,t[4]=(o*l-r*a)*h,t[5]=(s*a-i*l)*h,t):null}function multiply(t,e,i){var s=e[0],o=e[1],r=e[2],a=e[3],l=e[4],h=e[5],c=i[0],d=i[1],u=i[2],p=i[3],f=i[4],g=i[5];return t[0]=s*c+r*d,t[1]=o*c+a*d,t[2]=s*u+r*p,t[3]=o*u+a*p,t[4]=s*f+r*g+l,t[5]=o*f+a*g+h,t}function cross(t,e,i){var s=e[0]*i[1]-e[1]*i[0];return t[0]=t[1]=0,t[2]=s,t}function transformMat2d(t,e,i){var s=e[0],o=e[1];return t[0]=i[0]*s+i[2]*o+i[4],t[1]=i[1]*s+i[3]*o+i[5],t}Math.hypot||(Math.hypot=function(){for(var t=0,e=arguments.length;e--;)t+=arguments[e]*arguments[e];return Math.sqrt(t)}),function create(){var t=new I(2);I!=Float32Array&&(t[0]=0,t[1]=0)}();var N=class ICEEvent{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};_defineProperty$1(this,"AT_TARGET",2),_defineProperty$1(this,"BUBBLING_PHASE",3),_defineProperty$1(this,"CAPTURING_PHASE",1),_defineProperty$1(this,"NONE",0);for(const e in t)this[e]=t[e];for(const t in e)this[t]=e[t]}composedPath(){throw new Error("Method not implemented.")}initEvent(t,e,i){throw new Error("Method not implemented.")}preventDefault(){throw new Error("Method not implemented.")}stopImmediatePropagation(){throw new Error("Method not implemented.")}stopPropagation(){throw new Error("Method not implemented.")}};class ICEEventTarget{constructor(){_defineProperty$1(this,"listeners",{}),_defineProperty$1(this,"suspendedEventNames",[])}on(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:T;this.listeners[t]||(this.listeners[t]=[]),this.off(t,e,i),this.listeners[t].push({callback:e,scope:i})}off(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:T,s=this.listeners[t];if(s){s=[...s];for(let o=0;o<s.length;o++){const r=s[o],a=r.callback;if((a===e||a&&a.__onceOriginal===e)&&r.scope===i)return void this.listeners[t].splice(o,1)}}}trigger(t){let e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(function isEmpty(t){return null==t||(Array.isArray(t)||"string"==typeof t?0===t.length:"object"!=typeof t||0===Object.keys(t).length)}(this.listeners[t]))return!1;if(this.suspendedEventNames.includes(t))return!1;i?(e=new N(i),e.originalEvent=i.originalEvent?i.originalEvent:i,e.param=_objectSpread2({},s)):e=new N({type:t,timeStamp:Date.now(),param:_objectSpread2({},s)});const o=this.listeners[t];for(let t=0;t<o.length;t++){const i=o[t];i.callback.call(i.scope,e)}return!0}once(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:T;const s=this;function callback(o){s.off(t,callback,i),e.call(i,o)}callback.__onceOriginal=e,s.on(t,callback,i)}suspend(t){t&&!this.suspendedEventNames.includes(t)&&this.suspendedEventNames.push(t)}resume(t){const e=this.suspendedEventNames.indexOf(t);-1!==e&&this.suspendedEventNames.splice(e,1)}purgeEvents(){this.listeners={},this.suspendedEventNames=[]}hasListener(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:T;if(!this.listeners[t])return!1;const s=this.listeners[t];if(!s)return!1;for(let t=0;t<s.length;t++){const o=s[t];if(o.callback===e&&o.scope===i)return!0}return!1}}ICEEventTarget.prototype.addEventListener=ICEEventTarget.prototype.on,ICEEventTarget.prototype.removeEventListener=ICEEventTarget.prototype.off,ICEEventTarget.prototype.dispatchEvent=ICEEventTarget.prototype.trigger;var D=ICEEventTarget;class GeoUtil{constructor(){throw new Error("GeoUtil is a static util class.")}static pointInPolygon(t,e,i){if(!i||i.length<3)return!1;let s=!1;for(let o=0,r=i.length-1;o<i.length;r=o++){const a=i[o][0],l=i[o][1],h=i[r][0],c=i[r][1];l>e!=c>e&&t<(h-a)*(e-l)/(c-l)+a&&(s=!s)}return s}static distanceToSegment(t,e,i,s,o,r){const a=o-i,l=r-s,h=a*a+l*l;let c=0===h?0:((t-i)*a+(e-s)*l)/h;return c=c<0?0:c>1?1:c,Math.hypot(t-(i+c*a),e-(s+c*l))}static distanceToPolyline(t,e,i){if(!t||0===t.length)return 1/0;if(1===t.length)return Math.hypot(e-t[0][0],i-t[0][1]);let s=1/0;for(let o=0;o<t.length-1;o++){const r=GeoUtil.distanceToSegment(e,i,t[o][0],t[o][1],t[o+1][0],t[o+1][1]);r<s&&(s=r)}return s}static samplePolyline(t,e){const i=[];if(!t||t.length<2||e<1)return t?t.map(t=>[t[0],t[1]]):i;const s=[];let o=0;for(let e=0;e<t.length-1;e++){const i=Math.hypot(t[e+1][0]-t[e][0],t[e+1][1]-t[e][1]);s.push(i),o+=i}if(0===o)return[t[0].slice(),t[t.length-1].slice()];for(let r=0;r<=e;r++){const a=o*r/e;let l=0;for(let e=0;e<s.length;e++){if(l+s[e]>=a||e===s.length-1){const o=0===s[e]?0:(a-l)/s[e];i.push([t[e][0]+(t[e+1][0]-t[e][0])*o,t[e][1]+(t[e+1][1]-t[e][1])*o]);break}l+=s[e]}}return i}static segmentIntersect(t,e,i,s){const o=e[0]-t[0],r=e[1]-t[1],a=s[0]-i[0],l=s[1]-i[1],h=o*l-r*a;if(0===h)return null;const c=((i[0]-t[0])*l-(i[1]-t[1])*a)/h,d=((i[0]-t[0])*r-(i[1]-t[1])*o)/h;return c<0||c>1||d<0||d>1?null:[t[0]+c*o,t[1]+c*r]}static calcRotateAngle(t,e,i,s){const o=t-i,r=e-s,a=Math.hypot(o,r),l=o/a;let h=(r/a<0?-1:1)*Math.acos(l)*180/Math.PI+360;return h%=360,h}static calcRotateAngleFromMatrix(t){const e=t[0],i=t[1];return Math.atan2(i,e)*(180/Math.PI)}static calcScaleFromMatrix(t){const e=t[0],i=t[1],s=t[2],o=t[3];return[Math.hypot(e,i),Math.hypot(s,o)]}}class ICEBoundingBox{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[0,0,0,0,0,0,0,0,0,0];_defineProperty$1(this,"tl",[0,0]),_defineProperty$1(this,"tr",[0,0]),_defineProperty$1(this,"bl",[0,0]),_defineProperty$1(this,"br",[0,0]),_defineProperty$1(this,"tc",[0,0]),_defineProperty$1(this,"rc",[0,0]),_defineProperty$1(this,"bc",[0,0]),_defineProperty$1(this,"lc",[0,0]),_defineProperty$1(this,"center",[0,0]),this.tl=[t[0],t[1]],this.tr=[t[2],t[3]],this.bl=[t[4],t[5]],this.br=[t[6],t[7]],this.tc=[(this.tr[0]+this.tl[0])/2,(this.tr[1]+this.tl[1])/2],this.bc=[(this.br[0]+this.bl[0])/2,(this.br[1]+this.bl[1])/2],this.lc=[(this.bl[0]+this.tl[0])/2,(this.bl[1]+this.tl[1])/2],this.rc=[(this.br[0]+this.tr[0])/2,(this.br[1]+this.tr[1])/2],this.center=[t[8],t[9]]}static fromDimension(t,e,i,s){return new ICEBoundingBox([t,e,t+i,e,t,e+s,t+i,e+s,t+i/2,e+s/2])}containsPoint(t){const{minX:e,minY:i,maxX:s,maxY:o}=this.getMinAndMaxPoint();if(t[0]<e||t[0]>s||t[1]<i||t[1]>o)return!1;let r,a=0;const l=this.getBoundingLines();for(let e=0;e<l.length;e++){const i=l[e];if(!(t[1]>i.o[1]&&t[1]>i.d[1]||t[1]<i.o[1]&&t[1]<i.d[1])){if(i.o[0]===i.d[0]&&i.o[0]>=t[0])r=i.o[0];else{const e=(i.d[1]-i.o[1])/(i.d[0]-i.o[0]);r=i.o[0]+(t[1]-i.o[1])/e}r>t[0]&&a++}}return 0!==a&&a%2==1}getBoundingLines(){return[{o:[...this.tl],d:[...this.tr]},{o:[...this.tr],d:[...this.br]},{o:[...this.br],d:[...this.bl]},{o:[...this.bl],d:[...this.tl]}]}getMinAndMaxPoint(){let t=this.tl[0],e=this.tl[1],i=this.tl[0],s=this.tl[1];const o=[this.tr,this.bl,this.br];for(let r=0;r<o.length;r++){const a=o[r];a[0]<t&&(t=a[0]),a[0]>i&&(i=a[0]),a[1]<e&&(e=a[1]),a[1]>s&&(s=a[1])}return{minX:t,minY:e,maxX:i,maxY:s}}containsBox(t){const e=this.getMinAndMaxPoint(),i=t.getMinAndMaxPoint();return i.minX>=e.minX&&i.maxX<=e.maxX&&i.minY>=e.minY&&i.maxY<=e.maxY}isIntersect(t){const e=this.tl[0],i=this.br[0],s=this.tl[1],o=this.br[1],r=t.tl[0],a=t.br[0],l=t.tl[1],h=t.br[1];return!(e>a||s>h||i<r||o<l)}transform(t){const e=transformMat2d([],this.tl,t),i=transformMat2d([],this.tr,t),s=transformMat2d([],this.bl,t),o=transformMat2d([],this.br,t),r=transformMat2d([],this.center,t);return new ICEBoundingBox([...e,...i,...s,...o,...r])}union(t){const e=this.getMinAndMaxPoint(),i=t.getMinAndMaxPoint(),s=Math.min(e.minX,i.minX),o=Math.min(e.minY,i.minY),r=Math.max(e.maxX,i.maxX),a=Math.max(e.maxY,i.maxY);return ICEBoundingBox.fromDimension(s,o,r-s,a-o)}get width(){const t=this.br[0]-this.bl[0],e=this.br[1]-this.bl[1];return Math.hypot(t,e)}get height(){const t=this.br[0]-this.tr[0],e=this.br[1]-this.tr[1];return Math.hypot(t,e)}get left(){return this.tl[0]}set left(t){throw new Error("Can not set left to ICEBoundingBox directly.")}get top(){return this.tl[1]}set top(t){throw new Error("Can not set top to ICEBoundingBox directly.")}get centerX(){return this.center[0]}get centerY(){return this.center[1]}get centerPoint(){return this.center}}var $=ICEBoundingBox;const A={sm:{shadowColor:"rgba(0,0,0,0.12)",shadowBlur:4,shadowOffsetX:0,shadowOffsetY:1},md:{shadowColor:"rgba(0,0,0,0.18)",shadowBlur:10,shadowOffsetX:0,shadowOffsetY:3},lg:{shadowColor:"rgba(0,0,0,0.25)",shadowBlur:20,shadowOffsetX:0,shadowOffsetY:6}},O=[["shadowColor","rgba(0,0,0,0)"],["shadowBlur",0],["shadowOffsetX",0],["shadowOffsetY",0],["globalAlpha",1],["globalCompositeOperation","source-over"],["lineCap","butt"],["lineJoin","miter"],["miterLimit",10],["textAlign","start"],["textBaseline","alphabetic"]],R=Object.freeze([1,0,0,1,0,0]),L={left:0,top:0,width:0,height:0,style:Object.freeze({fillStyle:"red",strokeStyle:"blue",lineWidth:1}),lineDash:Object.freeze([]),lineDashOffset:0,lineDashFlow:!1,lineDashFlowSpeed:60,lineBorder:!1,lineBorderWidth:1.5,lineBorderColor:"#999999",fill:!0,stroke:!0,animations:Object.freeze({}),transform:Object.freeze({translate:Object.freeze([0,0]),scale:Object.freeze([1,1]),skew:Object.freeze([0,0]),rotate:0}),linearMatrix:Object.freeze([]),composedMatrix:Object.freeze([]),origin:"localCenter",originX:0,originY:0,clipChildren:!1,opacity:1,localOrigin:Object.freeze([0,0]),absoluteOrigin:Object.freeze([0,0]),display:!0,draggable:!0,transformable:!0,interactive:!0,linkable:!0,showMinBoundingBox:!1,showMaxBoundingBox:!1};function normalizeGradientStops(t){const e=[];if(!Array.isArray(t))return e;for(let i=0;i<t.length;i++){const s=t[i];let o=NaN,r="";Array.isArray(s)?(o=Number(s[0]),r=String(s[1])):s&&"object"==typeof s&&(o=Number(s.offset),r=String(s.color)),isFinite(o)&&r&&e.push([o<0?0:o>1?1:o,r])}return e.sort((t,e)=>t[0]-e[0]),e}class ICEComponent extends D{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(),_defineProperty$1(this,"__dirty",!0),_defineProperty$1(this,"__everRendered",!1),_defineProperty$1(this,"__localBoxScratch",[0,0,0,0]),_defineProperty$1(this,"__activeCtm",null),_defineProperty$1(this,"__activeWorldMatrix",null),_defineProperty$1(this,"__visEpoch",-1),_defineProperty$1(this,"__visValue",!0),_defineProperty$1(this,"__opacityApplied",!1),_defineProperty$1(this,"__gradCache",{}),_defineProperty$1(this,"__paramsDirty",!0),_defineProperty$1(this,"__absScratchA",null),_defineProperty$1(this,"__absScratchB",null),_defineProperty$1(this,"__transScratch",null),_defineProperty$1(this,"__originScratch",null),_defineProperty$1(this,"__composeScratch",null),_defineProperty$1(this,"__viewportScratch",null),this.__userProps=t,t&&t.preset&&S[t.preset]&&(this.__presetName=t.preset,t=merge$1({},S[t.preset](getTheme()),t)),this.props=Object.create(L),this.props.id="ICE_"+function uuid(){if(T.crypto)return T.crypto.randomUUID();{let t=Date.now();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){const i=(t+16*Math.random())%16|0;return t=Math.floor(t/16),("x"==e?i:3&i|8).toString(16)}))}}(),this.props.zIndex=ICEComponent.instanceCounter++,merge$1(this.props,t),this.__initState(),this.root=T,this.initEvents()}__initState(){this.state=Object.create(L),this.state.id=this.props.id,this.state.zIndex=this.props.zIndex;for(const t in this.props)Object.prototype.hasOwnProperty.call(this.props,t)&&(this.state[t]=cloneDeep(this.props[t]));this.state.linearMatrix=[],this.state.composedMatrix=[],this.state.localOrigin=[0,0],this.state.absoluteOrigin=[0,0]}__reapplyPreset(t){if(!this.__presetName||!S[this.__presetName])return;const e=S[this.__presetName](t||getTheme()),i=this.__userProps||{},s={};for(const t in e)"style"===t?s.style=merge$1({},e.style,i.style):void 0!==i[t]?s[t]=i[t]:s[t]=e[t];this.setState(s)}initEvents(){this.on("mousedown",this.mouseDownEvtHandler,this),this.on("keydown",this.keyboardEvtHandler,this),this.on("keyup",this.keyboardEvtHandler,this)}mouseDownEvtHandler(t){this.state.interactive&&this.state.draggable&&(this.on("mousemove",this.mouseMoveEvtHandler,this),this.on("mouseup",this.mouseUpEvtHandler,this))}mouseMoveEvtHandler(t){const e=this.ice&&this.ice.viewport?this.ice.viewport.scale:1,i=t.movementX/e,s=t.movementY/e;return this.moveGlobalPosition(i,s,t),!0}mouseUpEvtHandler(t){this.off("mousemove",this.mouseMoveEvtHandler,this),this.off("mouseup",this.mouseUpEvtHandler,this)}keyboardEvtHandler(t){switch(t.key){case"ArrowUp":this.moveGlobalPosition(0,-2,t);break;case"ArrowDown":this.moveGlobalPosition(0,2,t);break;case"ArrowLeft":this.moveGlobalPosition(-2,0,t);break;case"ArrowRight":this.moveGlobalPosition(2,0,t);break;case"Delete":this.parentNode&&this.parentNode.removeChild?this.parentNode.removeChild(this):this.ice.removeChild(this)}}render(){this.__renderCore(null,!0)}renderTo(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!t)return;const i=this.ctx;this.ctx=t;try{this.__renderCore(e,!1)}finally{this.ctx=i}}isEffectivelyVisible(){if(this.__visEpoch===getVisibilityEpoch())return this.__visValue;const t=this.__computeEffectivelyVisible();return this.__visEpoch=getVisibilityEpoch(),this.__visValue=t,t}__computeEffectivelyVisible(){if(!this.state.display)return!1;let t=this.parentNode;for(;t&&t.state;){if(!t.state.display)return!1;t=t.parentNode}return!0}__renderCore(t,s){if(this.trigger(e),!this.isEffectivelyVisible())return;this.refreshParams(),this.applyStyleToCtx();const o=this.getEffectiveOpacity();1!==o&&(this.__applyStyleProp("globalAlpha",(Number(this.ctx.globalAlpha)||1)*o),this.__opacityApplied=!0),this.applyTransformToCtx(t,s);const r=this.__applyAncestorClips();this.doRender(),r&&this.ctx.restore(),this.__resetLeakyCtxState(),this.trigger(i),this.__everRendered=!0,this.dirty=!1}applyStyleToCtx(){const t=this.props.style,e=this.state.style;let i=null,s=null;if(t)for(const e in t)"fillGradient"!==e?"strokeGradient"!==e?this.__applyStyleProp(e,t[e]):s=t[e]:i=t[e];if(e)for(const t in e)"fillGradient"!==t?"strokeGradient"!==t?this.__applyStyleProp(t,e[t]):s=e[t]:i=e[t];i&&this.__applyStyleProp("fillGradient",i),s&&this.__applyStyleProp("strokeGradient",s)}__applyStyleProp(t,e){if("fillGradient"!==t&&"strokeGradient"!==t){if("shadow"===t&&"string"==typeof e&&A[e]){const t=A[e];return this.ctx.shadowColor=t.shadowColor,this.ctx.shadowBlur=t.shadowBlur,this.ctx.shadowOffsetX=t.shadowOffsetX,void(this.ctx.shadowOffsetY=t.shadowOffsetY)}this.ctx[t]=e}else{const i="fillGradient"===t?"fillStyle":"strokeStyle",s=this.__resolveGradient("fillGradient"===t?"fill":"stroke",e);if(s)this.ctx[i]=s;else if(e){const t=normalizeGradientStops(e.stops);t.length&&(this.ctx[i]=t[Math.floor(t.length/2)][1])}}}__resolveGradient(t,e){if(!e||"object"!=typeof e)return null;const i=this.__gradCache[t];if(i&&i.src===e)return i.grad;const s=this.__buildGradient(e);return this.__gradCache[t]={src:e,grad:s},s}__buildGradient(t){const e=this.ctx;if(!e)return null;const i=normalizeGradientStops(t.stops);if(i.length<1)return null;const s=Number(this.state.width)||0,o=Number(this.state.height)||0,r=t.type||"linear";let a=null;if("radial"===r&&"function"==typeof e.createRadialGradient){const i=Array.isArray(t.center)?t.center:[s/2,o/2],r=Number(t.radius)>0?Number(t.radius):Math.max(s,o)/2,l=Number(t.innerRadius)>0?Number(t.innerRadius):0;a=e.createRadialGradient(i[0],i[1],l,i[0],i[1],r)}else if("conic"===r&&"function"==typeof e.createConicGradient){const i=Array.isArray(t.center)?t.center:[s/2,o/2];a=e.createConicGradient(Number(t.startAngle)||0,i[0],i[1])}else{if("conic"===r)return null;if("function"==typeof e.createLinearGradient){const i=Array.isArray(t.from)?t.from:[0,0],o=Array.isArray(t.to)?t.to:[s,0];a=e.createLinearGradient(i[0],i[1],o[0],o[1])}}if(!a&&"function"!=typeof e.createLinearGradient)return null;if(!a)return null;for(let e=0;e<i.length;e++)try{a.addColorStop(i[e][0],i[e][1])}catch(t){}return a}calcComponentParams(){return{width:this.state.width,height:this.state.height}}__localBox(){const t=this.__localBoxScratch;return t[0]=0,t[1]=0,t[2]=this.state.width||0,t[3]=this.state.height||0,t}measure(){this.refreshParams()}refreshParams(){this.__paramsDirty&&(this.calcComponentParams(),this.__paramsDirty=!1,this.__gradCache.fill=void 0,this.__gradCache.stroke=void 0)}calcLocalOrigin(){let t=this.state.localOrigin;(!t||t.length<2)&&(t=this.state.localOrigin=[0,0]),t[0]=0,t[1]=0;const e=this.state.origin;return e&&"localCenter"!==e?"top-left"===e?(t[0]=0,t[1]=0):"custom"===e&&(t[0]=Number(this.state.originX)||0,t[1]=Number(this.state.originY)||0):(t[0]=this.state.width/2,t[1]=this.state.height/2),this.state.localOrigin=t,t}calcAbsoluteOrigin(){const t=this.state.transform,e=t.translate[0]+this.state.left,i=t.translate[1]+this.state.top,s=this.calcLocalOrigin();let o=this.__originScratch;return o||(o=this.__originScratch=[0,0]),o[0]=s[0]+e,o[1]=s[1]+i,this.parentNode&&(transformMat2d(o,o,[1,0,0,1,-this.parentNode.state.localOrigin[0],-this.parentNode.state.localOrigin[1]]),transformMat2d(o,o,this.parentNode.state.composedMatrix)),this.state.absoluteOrigin=o,o}calcLinearMatrix(){(!this.state.linearMatrix||this.state.linearMatrix.length<6)&&(this.state.linearMatrix=function create$1(){var t=new I(6);return I!=Float32Array&&(t[1]=0,t[2]=0,t[4]=0,t[5]=0),t[0]=1,t[3]=1,t}());const t=this.state.linearMatrix;!function identity(t){t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0}(t);const e=this.state.transform,i=e.skew[0],s=e.skew[1];return function skew(t,e,i,s){const o=Math.tan(i),r=Math.tan(s);t[0]=e[0],t[1]=e[1]+o,t[2]=e[2]+r,t[3]=e[3],t[4]=e[4],t[5]=e[5]}(t,t,toRadian(i),toRadian(s)),function rotate(t,e,i){var s=e[0],o=e[1],r=e[2],a=e[3],l=e[4],h=e[5],c=Math.sin(i),d=Math.cos(i);t[0]=s*d+r*c,t[1]=o*d+a*c,t[2]=s*-c+r*d,t[3]=o*-c+a*d,t[4]=l,t[5]=h}(t,t,toRadian(e.rotate)),function scale(t,e,i){var s=e[0],o=e[1],r=e[2],a=e[3],l=e[4],h=e[5],c=i[0],d=i[1];t[0]=s*c,t[1]=o*c,t[2]=r*d,t[3]=a*d,t[4]=l,t[5]=h}(t,t,[e.scale[0],e.scale[1]]),this.state.linearMatrix=t,t}calcAbsoluteLinearMatrix(){let t=this,e=t.calcLinearMatrix();this.__absScratchA||(this.__absScratchA=[0,0,0,0,0,0]),this.__absScratchB||(this.__absScratchB=[0,0,0,0,0,0]);let i=this.__absScratchA;for(;t.parentNode;){const s=t.parentNode,o=s.state&&s.state.linearMatrix&&s.state.linearMatrix.length>=6&&!s.dirty?s.state.linearMatrix:s.calcLinearMatrix();i=i===this.__absScratchA?this.__absScratchB:this.__absScratchA,multiply(i,o,e),e=i,t=s}return this.state.absoluteLinearMatrix=e,e}composeMatrix(){if(this.parentNode&&"function"==typeof this.parentNode.composeMatrix){const t=this.parentNode,e=t.state?t.state.composedMatrix:null;(t.dirty||!e||e.length<6)&&t.composeMatrix()}const t=this.calcAbsoluteOrigin();this.__transScratch||(this.__transScratch=[1,0,0,1,0,0]),this.__transScratch[4]=t[0],this.__transScratch[5]=t[1];const e=this.__transScratch,i=this.calcAbsoluteLinearMatrix();(!this.state.composedMatrix||this.state.composedMatrix.length<6)&&(this.state.composedMatrix=[1,0,0,1,0,0]);const s=multiply(this.state.composedMatrix,e,i);return this.state.composedMatrix=s,s}applyTransformToCtx(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=this.dirty?this.composeMatrix():this.state.composedMatrix,s=e&&this.ice?this.ice.getRenderViewport():null,o=s&&(1!==s.scale||0!==s.tx||0!==s.ty);let r=null;if(o){this.__viewportScratch||(this.__viewportScratch=[1,0,0,1,0,0]);const t=this.__viewportScratch;t[0]=s.scale,t[1]=0,t[2]=0,t[3]=s.scale,t[4]=s.tx,t[5]=s.ty,r=t}else t&&(r=t);if(this.__activeWorldMatrix=r,t||o){this.__composeScratch||(this.__composeScratch=[1,0,0,1,0,0]);const e=this.__composeScratch;multiply(e,r||t,i),this.__activeCtm=e,this.ctx.setTransform(e[0],e[1],e[2],e[3],e[4],e[5])}else this.__activeCtm=i,this.ctx.setTransform(...i)}applyActiveTransform(){const t=this.__activeCtm;t?this.ctx.setTransform(t[0],t[1],t[2],t[3],t[4],t[5]):this.applyTransformToCtx(null,!0)}hasClippingAncestor(){let t=this.parentNode;for(;t&&t.state;){if(t.state.clipChildren)return!0;t=t.parentNode}return!1}getEffectiveOpacity(){const t=this.state.opacity;let e=void 0===t?1:Number(t);e>=0||(e=1);let i=this.parentNode;for(;i&&i.state;){const t=void 0===i.state.opacity?1:Number(i.state.opacity);t>=0&&1!==t&&(e*=t),i=i.parentNode}return e}isPointClippedOut(t,e){let i=this.parentNode;for(;i&&i.state;){if(i.state.clipChildren){const s=i.__paintWorldBox();if(t<s[0]||t>s[2]||e<s[1]||e>s[3])return!0}i=i.parentNode}return!1}__applyAncestorClips(){const t=this.parentNode;if(!t||!t.state)return!1;const e=this.ctx;if(!e||"function"!=typeof e.clip||"function"!=typeof e.rect)return!1;let i=null,s=t;for(;s&&s.state;)s.state.clipChildren&&(i||(i=[])).push(s),s=s.parentNode;if(!i)return!1;const o=this.__activeWorldMatrix||R;e.save(),e.setTransform(1,0,0,1,0,0);for(let t=i.length-1;t>=0;t--){const s=i[t].__paintWorldBox(),r=o[0]*s[0]+o[2]*s[1]+o[4],a=o[1]*s[0]+o[3]*s[1]+o[5],l=o[0]*s[2]+o[2]*s[1]+o[4],h=o[1]*s[2]+o[3]*s[1]+o[5],c=o[0]*s[0]+o[2]*s[3]+o[4],d=o[1]*s[0]+o[3]*s[3]+o[5],u=o[0]*s[2]+o[2]*s[3]+o[4],p=o[1]*s[2]+o[3]*s[3]+o[5],f=Math.min(r,l,c,u),g=Math.min(a,h,d,p),m=Math.max(r,l,c,u),y=Math.max(a,h,d,p);e.beginPath(),e.rect(f,g,m-f,y-g),e.clip()}return this.applyActiveTransform(),!0}applyWorldTransform(){const t=this.__activeWorldMatrix;t?(this.ctx.setTransform(t[0],t[1],t[2],t[3],t[4],t[5]),this.ctx.lineWidth=1/(Math.abs(t[0])||Math.abs(t[3])||1)):(this.ctx.setTransform(1,0,0,1,0,0),this.ctx.lineWidth=1)}doRender(){if(this.applyWorldTransform(),this.state.showMinBoundingBox||this.state.showMaxBoundingBox){const t=this.state.showMinBoundingBox?this.getMinBoundingBox():null,e=this.state.showMaxBoundingBox?this.getMaxBoundingBox():null,i=t&&e&&this.__areBoundingBoxesNearlyEqual(t,e);t&&!i&&(this.ctx.strokeStyle="#ff0000",this.ctx.fillStyle="rgba(0,0,0,0)",this.ctx.beginPath(),this.ctx.moveTo(t.tl[0],t.tl[1]),this.ctx.lineTo(t.tr[0],t.tr[1]),this.ctx.lineTo(t.br[0],t.br[1]),this.ctx.lineTo(t.bl[0],t.bl[1]),this.ctx.closePath(),this.ctx.stroke(),this.ctx.fill()),e&&(this.ctx.strokeStyle="#0000ff",this.ctx.fillStyle="rgba(0,0,0,0)",this.ctx.beginPath(),this.ctx.moveTo(e.tl[0],e.tl[1]),this.ctx.lineTo(e.tr[0],e.tr[1]),this.ctx.lineTo(e.br[0],e.br[1]),this.ctx.lineTo(e.bl[0],e.bl[1]),this.ctx.closePath(),this.ctx.stroke(),this.ctx.fill())}}__areBoundingBoxesNearlyEqual(t,e){const i=[[t.tl,e.tl],[t.tr,e.tr],[t.bl,e.bl],[t.br,e.br]];for(const[t,e]of i)if(Math.abs(t[0]-e[0])>1||Math.abs(t[1]-e[1])>1)return!1;return!0}hasDerivedChildren(){return!1}getMinBoundingBox(){const t=arguments.length>0&&void 0!==arguments[0]&&arguments[0]?this.composeMatrix():this.state.composedMatrix,e=this.state.localOrigin[0],i=this.state.localOrigin[1],s=this.__localBox(),o=s[0]-e,r=s[1]-i,a=s[2]-e,l=s[3]-i;let h=new $([o,r,a,r,o,l,a,l,0,0]);return h=h.transform(t),h}getMaxBoundingBox(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=this.getMinBoundingBox(t);const{minX:i,minY:s,maxX:o,maxY:r}=e.getMinAndMaxPoint(),a=e.centerPoint;return e=new $([i,s,o,s,i,r,o,r,a[0],a[1]]),e}setState(t){const e=this.__beforeStateMerge(t);merge$1(this.state,t),this.paramsDirty=!0,this.dirty=!0,this.ice&&(this.ice.dirty=!0),this.__afterStateMerge(e)}__beforeStateMerge(t){const e=!!t&&(void 0!==t.width&&t.width!==this.state.width||void 0!==t.height&&t.height!==this.state.height);return t&&void 0!==t.display&&t.display!==this.state.display&&bumpVisibilityEpoch(),e}__afterStateMerge(t){t&&this.parentNode&&"function"==typeof this.parentNode.requestLayout&&this.parentNode.requestLayout()}set dirty(t){this.__dirty=t}get dirty(){return this.__dirty}__applyDirty(t){this.dirty=t||!this.__everRendered}set paramsDirty(t){this.__paramsDirty=t}get paramsDirty(){return this.__paramsDirty}setPosition(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new N;this.trigger(m,_objectSpread2(_objectSpread2({},i),{},{left:t,top:e})),this.setState({left:t,top:e}),this.trigger(y,_objectSpread2(_objectSpread2({},i),{},{left:t,top:e})),function triggerSubtreeMove(t,e){const i=t&&t.childNodes||[];for(let t=0;t<i.length;t++){const s=i[t];s.trigger(y,e),triggerSubtreeMove(s,e)}}(this,_objectSpread2(_objectSpread2({},i),{},{left:t,top:e}))}moveGlobalPosition(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new N;if(this.parentNode){let i=[t,e];i=transformMat2d([],i,invert([],this.parentNode.calcAbsoluteLinearMatrix())),t=i[0],e=i[1]}this.setPosition(this.state.left+t,this.state.top+e,_objectSpread2(_objectSpread2({},i),{},{tx:t,ty:e}))}setGlobalPosition(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new N;if(this.parentNode){let i=[t,e];i=transformMat2d([],i,invert([],this.parentNode.calcAbsoluteLinearMatrix())),t=i[0],e=i[1]}this.setPosition(t,e,_objectSpread2(_objectSpread2({},i),{},{left:t,top:e}))}setGlobalRotate(t){if(this.parentNode){const e=this.parentNode.calcAbsoluteLinearMatrix();t-=GeoUtil.calcRotateAngleFromMatrix(e)}this.setState({transform:{rotate:t}})}localToGlobal(t,e){let i=[t,e];return i=transformMat2d([],i,this.state.composedMatrix),i}globalToLocal(t,e){let i=[t,e];return i=transformMat2d([],i,invert([],this.state.composedMatrix)),i}getRotateAngle(){const t=arguments.length>0&&void 0!==arguments[0]&&arguments[0]?this.composeMatrix():this.state.composedMatrix;return GeoUtil.calcRotateAngleFromMatrix(t)}getLocalLeftTop(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const e=this.getMinBoundingBox(t),i=e.width,s=e.height;return{left:e.centerX-e.width/2,top:e.centerY-e.height/2,width:i,height:s}}__resetLeakyCtxState(){let t=0;const scan=e=>{if(e)for(const i in e){const e=this.__leakyIndex(i);e>=0&&(t|=1<<e)}};if(scan(this.props.style),scan(this.state.style),this.__opacityApplied&&(t|=1<<this.__leakyIndex("globalAlpha"),this.__opacityApplied=!1),this.state.lineDash&&this.state.lineDash.length&&(t|=2048),(this.state.lineDashFlow||this.state.lineDashOffset)&&(t|=2048),!t)return;const e=this.ctx;for(let i=0;i<O.length;i++)t&1<<i&&(e[O[i][0]]=O[i][1]);2048&t&&"function"==typeof e.setLineDash&&(e.setLineDash([]),e.lineDashOffset=0)}__leakyIndex(t){switch(t){case"shadowColor":return 0;case"shadowBlur":return 1;case"shadowOffsetX":return 2;case"shadowOffsetY":return 3;case"globalAlpha":return 4;case"globalCompositeOperation":return 5;case"lineCap":return 6;case"lineJoin":return 7;case"miterLimit":return 8;case"textAlign":return 9;case"textBaseline":return 10;default:return-1}}__paintWorldBox(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[0,0,0,0];const e=this.state.composedMatrix,i=this.state.localOrigin,s=i?i[0]:0,o=i?i[1]:0,r=this.__localBox(),a=[r[0]-s,r[2]-s],l=[r[1]-o,r[3]-o];if(t[0]=t[1]=1/0,t[2]=t[3]=-1/0,!e||e.length<6)return t[0]=a[0],t[1]=l[0],t[2]=a[1],t[3]=l[1],t;const h=e[0],c=e[1],d=e[2],u=e[3],p=e[4],f=e[5];for(let e=0;e<2;e++){const i=a[e];for(let e=0;e<2;e++){const s=l[e],o=h*i+d*s+p,r=c*i+u*s+f;o<t[0]&&(t[0]=o),o>t[2]&&(t[2]=o),r<t[1]&&(t[1]=r),r>t[3]&&(t[3]=r)}}return t}containsPoint(t,e){const i=this.state.composedMatrix;if(!i||i.length<6)return this.getMinBoundingBox().containsPoint([t,e]);const s=transformMat2d([],[t,e],invert([],i));return this.containsLocalPoint(s[0],s[1])}containsLocalPoint(t,e){const i=this.state.width/2,s=this.state.height/2;return t>=-i&&t<=i&&e>=-s&&e<=s}destroy(){this.destory()}destory(){this.ice&&this.ice.animationManager&&this.ice.animationManager.remove(this),this.trigger(r,null,{component:this}),this.purgeEvents(),this.ice=null,this.ctx=null,this.root=null,this.evtBus=null,this.parentNode=null}}_defineProperty$1(ICEComponent,"instanceCounter",0);var F=ICEComponent,z=class ICEPath extends F{ensurePathBuilt(){const t=this.path2D&&this.path2D._commands;t&&0!==t.length&&!this.dirty||(this.createPathObject(),this.state.closePath&&this.path2D.closePath())}constructor(){super(_objectSpread2({closePath:!0},arguments.length>0&&void 0!==arguments[0]?arguments[0]:{})),_defineProperty$1(this,"path2D",T.createPath2D()),_defineProperty$1(this,"__flowRegistered",!1)}doRender(){this.dirty&&this.createPathObject(),this.state.closePath&&this.path2D.closePath();const t=this.path2D.drawable||this.path2D,e=this.state.lineDash,i=Array.isArray(e)&&e.length>0,s=this.state.lineDashFlow;if(s&&this.__ensureFlowAnimation(),this.state.lineBorder&&i&&this.state.stroke){const e=this.ctx;e.save(),e.setLineDash([]),e.lineWidth=(this.state.style.lineWidth||1)+2*(this.state.lineBorderWidth||4),e.strokeStyle=this.state.lineBorderColor||"#c8c8c8",this.path2D._isPolyfill?(this.replayPath(),e.stroke()):e.stroke(t),e.restore()}if(i&&"function"==typeof this.ctx.setLineDash)if(this.ctx.setLineDash(e),s&&"number"==typeof this.ctx.lineDashOffset){const t=e.reduce((t,e)=>t+e,0)||1,i=this.state.lineDashFlowSpeed||60;this.ctx.lineDashOffset=-Date.now()/1e3*i%t}else this.state.lineDashOffset&&(this.ctx.lineDashOffset=this.state.lineDashOffset);this.path2D._isPolyfill?(this.replayPath(),this.state.fill&&this.ctx.fill(),this.state.stroke&&this.ctx.stroke()):(this.state.fill&&this.ctx.fill(t),this.state.stroke&&this.ctx.stroke(t)),i&&"function"==typeof this.ctx.setLineDash&&this.ctx.setLineDash([]),super.doRender()}__ensureFlowAnimation(){this.__flowRegistered||(this.__flowRegistered=!0,this.props.animations=_objectSpread2(_objectSpread2({},this.props.animations),{},{__flow:{from:0,to:1,duration:100,loop:!0}}),this.ice&&this.ice.animationManager&&this.ice.animationManager.add(this))}replayPath(){const t=this.ctx;t.beginPath();const e=this.path2D._commands;for(let i=0;i<e.length;i++){const s=e[i];t[s[0]](...s.slice(1))}}},j=class ICERect extends z{constructor(){super(_objectSpread2({width:10,height:10},arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}))}createPathObject(){this.path2D=T.createPath2D();const t=0-this.state.localOrigin[0],e=0-this.state.localOrigin[1],i=this.state.width,s=this.state.height,o=Math.min(this.state.radius||0,i/2,s/2);return o>0?(this.path2D.moveTo(t+o,e),this.path2D.lineTo(t+i-o,e),this.path2D.arcTo(t+i,e,t+i,e+o,o),this.path2D.lineTo(t+i,e+s-o),this.path2D.arcTo(t+i,e+s,t+i-o,e+s,o),this.path2D.lineTo(t+o,e+s),this.path2D.arcTo(t,e+s,t,e+s-o,o),this.path2D.lineTo(t,e+o),this.path2D.arcTo(t,e,t+o,e,o),this.path2D.closePath()):this.path2D.rect(t,e,i,s),this.path2D}};class ICEGroup extends j{constructor(t){super(t),_defineProperty$1(this,"parentNode",null),_defineProperty$1(this,"childNodes",[]),_defineProperty$1(this,"__childSet",new WeakSet),_defineProperty$1(this,"layoutManager",null),_defineProperty$1(this,"__layoutExplicit",!1),_defineProperty$1(this,"__layoutRequested",!1),_defineProperty$1(this,"__layingOut",!1),_defineProperty$1(this,"__inBatch",!1)}setLayout(t){this.layoutManager=t,this.__layoutExplicit=!0,t&&(this.doLayout(),this.__disableTransformRecursively(this)),this.__propagateLayout(t)}__disableTransformRecursively(t){if(t&&t.childNodes)for(const e of t.childNodes)e.state.transformable=!1,e.state.draggable=!1,this.__disableTransformRecursively(e)}__propagateLayout(t){for(const e of this.childNodes)e instanceof ICEGroup&&!e.__layoutExplicit&&(e.layoutManager=t,e.doLayout(),e.__propagateLayout(t))}doLayout(){if(this.layoutManager){this.__layingOut=!0;try{for(let t=0;t<this.childNodes.length;t++){const e=this.childNodes[t];"function"==typeof e.measure&&e.measure()}this.layoutManager.layoutContainer(this)}finally{this.__layingOut=!1,this.__layoutRequested=!1}}}requestLayout(){this.layoutManager&&!this.__layingOut&&(this.__layoutRequested=!0,this.dirty=!0,this.ice&&(this.ice.dirty=!0))}getPreferredSize(){return this.layoutManager?this.layoutManager.getPreferredSize(this):[0,0]}doRender(){this.__layoutRequested&&this.doLayout(),super.doRender()}initEvents(){super.initEvents(),this.once(o,this.afterAddHandler,this)}afterAddHandler(){for(let t=0;t<this.childNodes.length;t++){const e=this.childNodes[t];this.syncChildEvents(e)}}syncChildEvents(t){t.trigger(s),t.ice=this.ice,t.ctx=this.ice.ctx,t.evtBus=this.ice.evtBus,t.trigger(o)}addChild(t){let e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.__childSet.has(t)||(t.parentNode=this,this.childNodes.push(t),this.__childSet.add(t),bumpVisibilityEpoch(),this.layoutManager&&(t.state.transformable=!1,t.state.draggable=!1,this.__disableTransformRecursively(t)),this.__applyDirty(e),this.ice&&(this.syncChildEvents(t),this.ice.dirty=e,this.ice.renderer&&this.ice.renderer.markQueueDirty()),this.layoutManager&&(t instanceof ICEGroup&&!t.__layoutExplicit&&(t.layoutManager=this.layoutManager),this.__inBatch||this.doLayout()))}addChildren(t){this.__inBatch=!0;try{for(let e=0;e<t.length;e++)this.addChild(t[e],!1)}finally{this.__inBatch=!1}this.dirty=!0,this.ice&&(this.ice.dirty=!0),this.doLayout()}adoptChild(t){let e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!t||t===this)return;const i=t.parentNode;if(i&&i!==this&&i.childNodes){const e=i.childNodes.indexOf(t);-1!==e&&i.childNodes.splice(e,1),i.__childSet&&"function"==typeof i.__childSet.delete&&i.__childSet.delete(t),t.parentNode=null,i.ice&&i.ice.renderer&&"function"==typeof i.ice.renderer.markQueueDirty&&i.ice.renderer.markQueueDirty()}else if(!i){const e=this.ice||t.ice;if(e&&Array.isArray(e.childNodes)){const i=e.childNodes.indexOf(t);-1!==i&&e.childNodes.splice(i,1),e.__childSet&&"function"==typeof e.__childSet.delete&&e.__childSet.delete(t),e.renderer&&"function"==typeof e.renderer.markQueueDirty&&e.renderer.markQueueDirty()}}this.addChild(t,e)}removeChild(t){let e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!this.__childSet.has(t))return;t.trigger(r);const i=this.childNodes.indexOf(t);-1!==i&&this.childNodes.splice(i,1),this.__childSet.delete(t),bumpVisibilityEpoch(),t.trigger(a),this.__applyDirty(e),this.ice&&(this.ice.dirty=e,this.ice.renderer&&this.ice.renderer.markQueueDirty()),t.destory(),this.layoutManager&&!this.__inBatch&&this.doLayout()}removeChildren(t){this.__inBatch=!0;try{for(let e=0;e<t.length;e++)this.removeChild(t[e],!1)}finally{this.__inBatch=!1}this.dirty=!0,this.ice&&(this.ice.dirty=!0),this.doLayout()}setState(t){const e=this.__beforeStateMerge(t);merge$1(this.state,t),this.paramsDirty=!0,this.dirty=!0,function setRecursively(t){if(t.dirty=!0,t.childNodes&&t.childNodes.length)for(let e=0;e<t.childNodes.length;e++)setRecursively(t.childNodes[e])}(this),this.ice&&(this.ice.dirty=!0),this.__afterStateMerge(e)}destory(){this.removeChildren(this.childNodes),super.destory()}}var X=ICEGroup;class ICEControlPanel extends X{constructor(t){super(_objectSpread2(_objectSpread2({},t),{},{linkable:!1})),_defineProperty$1(this,"isControlPanel",!0)}doRender(){super.doRender(),this.updateControlPositions()}moveGlobalPosition(t,e,i){super.moveGlobalPosition(t,e,i),this._targetComponent&&this._targetComponent.moveGlobalPosition(t,e,i)}}var H=class ICEEllipse extends z{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const e=_objectSpread2({radiusX:20,radiusY:10,rotation:0,startAngle:0,endAngle:2*Math.PI,counterclockwise:!0},t);void 0===t.radiusX&&void 0!==t.width&&(e.radiusX=Number(t.width)/2),void 0===t.radiusY&&void 0!==t.height&&(e.radiusY=Number(t.height)/2),e.width=2*e.radiusX,e.height=2*e.radiusY,super(e)}createPathObject(){return this.path2D=T.createPath2D(),this.path2D.ellipse(this.state.radiusX-this.state.localOrigin[0],this.state.radiusY-this.state.localOrigin[1],this.state.radiusX,this.state.radiusY,this.state.rotation,this.state.startAngle,this.state.endAngle,this.state.counterclockwise),this.path2D.closePath(),this.path2D}containsLocalPoint(t,e){const i=this.state.radiusX,s=this.state.radiusY;if(!i||!s)return!1;let o=t,r=e;const a=this.state.rotation||0;if(a){const i=Math.cos(a),s=Math.sin(a);o=t*i+e*s,r=-t*s+e*i}const l=o/i,h=r/s;return l*l+h*h<=1}setState(t){isNil$1(t.radiusX)?isNil$1(t.width)||(t.radiusX=t.width/2):t.width=2*t.radiusX,isNil$1(t.radiusY)?isNil$1(t.height)||(t.radiusY=t.height/2):t.height=2*t.radiusY,super.setState(t)}},W=class ICECircle extends H{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const e=_objectSpread2({radius:10},t);void 0===t.radius&&void 0!==t.width?e.radius=Number(t.width)/2:void 0===t.radius&&void 0!==t.height&&(e.radius=Number(t.height)/2),e.radiusX=e.radius,e.radiusY=e.radius,super(e)}};class ICELinkHook extends W{constructor(){super(_objectSpread2({linkable:!1},arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}))}initEvents(){super.initEvents(),this.on("mousedown",this.mosueDownHandler,this),this.on("mousemove",this.mosueMoveHandler,this),this.on("mouseup",this.mosueUpHandler,this),this.on(y,this.resizeEvtHandler,this)}keyboardEvtHandler(t){}mosueDownHandler(t){this.evtBus.trigger(h,new N({target:this}))}mosueMoveHandler(t){this.evtBus.trigger(c,new N({target:this}))}mosueUpHandler(t){this.evtBus.trigger(d,new N({target:this}))}resizeEvtHandler(t){if(!this.parentNode)return;const e=this.props.position;this.parentNode.trigger(u,new N(t,{position:e})),this.parentNode.trigger(p,new N(t,{position:e}))}}class LineControlPanel extends ICEControlPanel{constructor(t){super(_objectSpread2(_objectSpread2({},t),{},{zIndex:10001e3,linkable:!1,showMinBoundingBox:!1,showMaxBoundingBox:!1})),_defineProperty$1(this,"controlSize",16),this.initControls()}initControls(){const t=this.state.width,e=this.state.height,i=this.controlSize/2;this.startControl=new ICELinkHook({zIndex:10001001,display:!1,left:-i,top:-i,width:this.controlSize,height:this.controlSize,style:{strokeStyle:"#0c09d4",fillStyle:"#3ce92c",lineWidth:1},position:"start"}),this.addChild(this.startControl),this.endControl=new ICELinkHook({zIndex:10001002,display:!1,left:t-i,top:e-i,width:this.controlSize,height:this.controlSize,style:{strokeStyle:"#0c09d4",fillStyle:"#3ce92c",lineWidth:1},position:"end"}),this.addChild(this.endControl)}initEvents(){this.on(p,this.resizeEvtHandler,this)}enable(){this.setState({display:!0}),this.resume(p),this.showHooks()}disable(){this.setState({display:!1}),this.suspend(p),this.hideHooks()}updateControlPositions(){}resizeEvtHandler(t){if(!this.targetComponent)return;const e=t.position;let i=t.movementX,s=t.movementY;const o=this.targetComponent.state,r=o.points.length;let a=o.points[0][0],l=o.points[0][1],h=o.points[r-1][0],c=o.points[r-1][1];const d=transformMat2d([],[i,s],invert([],this.targetComponent.calcAbsoluteLinearMatrix()));switch(i=d[0],s=d[1],e){case"start":a+=i,l+=s;break;case"end":h+=i,c+=s}this.targetComponent.setState({startPoint:[a,l],endPoint:[h,c]})}updatePosition(){if(!this.targetComponent)return;this.setState({left:0,top:-5,width:3,height:3,transform:{translate:[0,0],scale:[1,1],skew:[0,0],rotate:0}});const t=this.controlSize/2,e=this.targetComponent.state.points.length,i=this.targetComponent.state.points[0],s=this.targetComponent.state.points[e-1],o=[i[0],i[1]],r=[s[0],s[1]];this.startControl.setState({left:o[0]-t,top:o[1]-t}),this.endControl.setState({left:r[0]-t,top:r[1]-t})}set targetComponent(t){this._targetComponent&&this._targetComponent.off(y,this.updatePosition,this),this._targetComponent=t,this._targetComponent&&this._targetComponent.on(y,this.updatePosition,this),this._targetComponent&&this._targetComponent.once(r,()=>{this.targetComponent=null,this.disable()},this),this.updatePosition()}get targetComponent(){return this._targetComponent}showHooks(){this.startControl.setState({display:!0}),this.endControl.setState({display:!0})}hideHooks(){this.startControl.setState({display:!1}),this.endControl.setState({display:!1})}}class ResizeControl extends j{constructor(t){super(_objectSpread2(_objectSpread2({position:"l",direction:"x",quadrant:1},t),{},{linkable:!1}))}initEvents(){super.initEvents(),this.on(y,this.resizeEvtHandler,this)}resizeEvtHandler(t){if(!this.parentNode)return;const{quadrant:e}=t;let i=t.movementX,s=t.movementY;const o=this.parentNode.state;let r=o.left,a=o.top,l=o.width,h=o.height;const c=transformMat2d([],[i,s],invert([],this.parentNode.calcAbsoluteLinearMatrix()));switch(i=c[0],s=c[1],e){case 1:r-=i,a+=s,l+=2*i,h-=2*s;break;case 2:r+=i,a+=s,l-=2*i,h-=2*s;break;case 3:r+=i,a-=s,l-=2*i,h+=2*s;break;case 4:r-=i,a-=s,l+=2*i,h+=2*s;break;case 5:a+=s,h-=2*s;break;case 6:a-=s,h+=2*s;break;case 7:r+=i,l-=2*i;break;case 8:r-=i,l+=2*i}const d={top:a,left:r,width:Math.abs(l),height:Math.abs(h)};this.parentNode.trigger(u,new N(t,{quadrant:e})),this.parentNode.setState(d),this.parentNode.trigger(p,new N(t,{quadrant:e}))}moveGlobalPosition(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new N;const s=t>0?1:-1,o=e>0?1:-1,r=this.parentNode.state.localOrigin,a=transformMat2d([],[t,e],invert([],this.parentNode.calcAbsoluteLinearMatrix()));t=a[0],e=a[1];let{left:l,top:h}=this.state;const{quadrant:c}=this.state,d=this.state.width/2;let u=0;"x"===this.state.direction?(l+=t,0===round(l)&&(l=.5*s),u=l+d-r[0]>0?8:7):"y"===this.state.direction?(h+=e,0===round(h)&&(h=.5*o),u=h+d-r[1]>0?6:5):"xy"===this.state.direction&&(l+=t,h+=e,u=l+d-r[0]>0?h+d-r[1]>0?4:1:h+d-r[1]>0?3:2),c!==u&&this.parentNode.toggleControlQuadrant(this,c,u),this.setPosition(l,h,new N(i,{left:l,top:h,tx:t,ty:e,quadrant:u}))}}class RotateControl extends W{constructor(t){super(_objectSpread2(_objectSpread2({},t),{},{linkable:!1}))}initEvents(){super.initEvents(),this.on(y,this.rotateEvtHandler,this)}rotateEvtHandler(t){if(!this.parentNode)return;const e=this.parentNode.calcAbsoluteOrigin();let i=GeoUtil.calcRotateAngle(t.offsetX,t.offsetY,e[0],e[1])+90;t&&t.shiftKey&&(i=function snapAngle(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:15;return e>0&&isFinite(t)?Math.round(t/e)*e:t}(i));const s={transform:{rotate:i}};this.parentNode.trigger(f,new N(s)),this.parentNode.setState(s),this.parentNode.trigger(g,new N(s))}}class TransformControlPanel extends ICEControlPanel{constructor(t){super(_objectSpread2(_objectSpread2({},t),{},{zIndex:10000001,linkable:!1,showMinBoundingBox:!1,showMaxBoundingBox:!1})),_defineProperty$1(this,"rotateControlSize",8),_defineProperty$1(this,"rotateControlOffsetY",60),_defineProperty$1(this,"resizeControlInstanceCache",[]),_defineProperty$1(this,"resizeControlSize",16),_defineProperty$1(this,"__onTargetRemoved",()=>{this.targetComponent=null,this.disable()}),this.initControls()}initControls(){const t=this.state.width,e=this.state.height,i=t/2,s=e/2,o=this.resizeControlSize/2,r=[{direction:"xy",quadrant:2,position:[-o,-o]},{direction:"y",quadrant:5,position:[i-o,-o]},{direction:"xy",quadrant:1,position:[t-o,-o]},{direction:"x",quadrant:8,position:[t-o,s-o]},{direction:"xy",quadrant:4,position:[t-o,e-o]},{direction:"y",quadrant:6,position:[i-o,e-o]},{direction:"xy",quadrant:3,position:[-o,e-o]},{direction:"x",quadrant:7,position:[-o,s-o]}];this.resizeControlInstanceCache=[];for(let t=0;t<r.length;t++){const e=r[t],i=new ResizeControl({zIndex:10000002,display:!1,left:e.position[0],top:e.position[1],width:this.resizeControlSize,height:this.resizeControlSize,style:{strokeStyle:"#8b0000",fillStyle:"#CC3300",lineWidth:1},direction:e.direction,quadrant:e.quadrant});this.addChild(i),this.resizeControlInstanceCache.push(i)}const a=this.state.width/2-this.rotateControlSize,l=-this.rotateControlOffsetY;this.rotateControlInstance=new RotateControl({zIndex:10000003,display:!1,left:a,top:l,radius:this.rotateControlSize,style:{strokeStyle:"#8b0000",fillStyle:"#CC3300",lineWidth:1}}),this.addChild(this.rotateControlInstance)}initEvents(){super.initEvents(),this.on(p,this.resizeEvtHandler,this),this.on(g,this.rotateEvtHandler,this),this.on("keydown",this.keyboardEvtHandler,this),this.on("keyup",this.keyboardEvtHandler,this)}enable(){this.rotateControlInstance.setState({display:!0});for(let t=0;t<this.resizeControlInstanceCache.length;t++)this.resizeControlInstanceCache[t].setState({display:!0});this.setState({display:!0}),this.resume(p),this.resume(g),this.resume("keydown"),this.resume("keyup")}disable(){this.rotateControlInstance.setState({display:!1});for(let t=0;t<this.resizeControlInstanceCache.length;t++)this.resizeControlInstanceCache[t].setState({display:!1});this.setState({display:!1}),this.suspend(p),this.suspend(g),this.suspend("keydown"),this.suspend("keyup")}keyboardEvtHandler(t){this.targetComponent&&this.targetComponent.trigger(t.type,t,{component:this.targetComponent})}rotateEvtHandler(t){if(!this.targetComponent)return;const{rotate:e}=this.state.transform;this.targetComponent.setGlobalRotate(e),this.targetComponent.trigger(g),this.updatePanel()}resizeEvtHandler(t){if(!this.targetComponent)return;const{quadrant:e}=t;let i=t.movementX,s=t.movementY;const o=this.targetComponent.state;let r=o.left,a=o.top,l=o.width,h=o.height;const c=transformMat2d([],[i,s],invert([],this.targetComponent.calcAbsoluteLinearMatrix()));switch(i=c[0],s=c[1],e){case 1:r-=i,a+=s,l+=2*i,h-=2*s;break;case 2:r+=i,a+=s,l-=2*i,h-=2*s;break;case 3:r+=i,a-=s,l-=2*i,h+=2*s;break;case 4:r-=i,a-=s,l+=2*i,h+=2*s;break;case 5:a+=s,h-=2*s;break;case 6:a-=s,h+=2*s;break;case 7:r+=i,l-=2*i;break;case 8:r-=i,l+=2*i}if(t&&t.shiftKey){const t=function applyAspectLock(t,e,i,s){const o=Math.abs(i),r=Math.abs(s);if(!(t>0&&e>0))return{width:o,height:r};const a=Math.max(o/t,r/e);return{width:t*a,height:e*a}}(o.width,o.height,l,h),e=a+h/2;r=r+l/2-t.width/2,a=e-t.height/2,l=t.width,h=t.height}this.targetComponent.setState({left:r,top:a,width:Math.abs(l),height:Math.abs(h)}),this.targetComponent.trigger(p),this.updatePanel()}updateControlPositions(){const t=this.state.width,e=this.state.height,i=t/2,s=e/2,o=this.resizeControlSize/2;for(let r=0;r<this.resizeControlInstanceCache.length;r++){const a=this.resizeControlInstanceCache[r];let l=[0,0];switch(a.state.quadrant){case 1:l=[t-o,-o];break;case 2:l=[-o,-o];break;case 3:l=[-o,e-o];break;case 4:l=[t-o,e-o];break;case 5:l=[i-o,-o];break;case 6:l=[i-o,e-o];break;case 7:l=[-o,s-o];break;case 8:l=[t-o,s-o]}a.setState({left:l[0],top:l[1]})}const r=this.state.width/2-this.rotateControlSize,a=-this.rotateControlOffsetY;this.rotateControlInstance.setState({left:r,top:a})}updatePanel(){if(!this.targetComponent)return;const t=this.targetComponent.getRotateAngle(!0),{left:e,top:i,width:s,height:o}=this.targetComponent.getLocalLeftTop(!0);this.setState({left:e,top:i,width:s,height:o,transform:{rotate:t}})}set targetComponent(t){const e=this._targetComponent;e&&(e.off(y,this.updatePanel,this),e.off(r,this.__onTargetRemoved,this)),this._targetComponent=t,t&&(t.on(y,this.updatePanel,this),t.on(r,this.__onTargetRemoved,this)),this.updatePanel()}get targetComponent(){return this._targetComponent}toggleControlQuadrant(t,e,i){for(let t=0;t<this.resizeControlInstanceCache.length;t++){const s=this.resizeControlInstanceCache[t];s.state.quadrant===i&&s.setState({quadrant:e})}t.setState({quadrant:i})}}var V=class ICEControlPanelManager{constructor(t){this.ice=t,this.transformControlPanel=new TransformControlPanel({left:500,top:100,width:100,height:100,style:{strokeStyle:"#8b0000",fillStyle:"rgba(255, 255, 49, 0.2)",lineWidth:1},transform:{rotate:45}}),this.ice.addTool(this.transformControlPanel),this.transformControlPanel.disable(),this.lineControlPanel=new LineControlPanel({left:700,top:50,width:100,height:100,style:{strokeStyle:"rgba(255, 255, 49, 0)",fillStyle:"rgba(255, 255, 49, 0)",lineWidth:1}}),this.ice.addTool(this.lineControlPanel),this.lineControlPanel.disable()}start(){return this.ice.evtBus.on("mousedown",this.mouseDownHandler,this),this}stop(){return this.ice.evtBus.off("mousedown",this.mouseDownHandler,this),this}mouseDownHandler(t){const e=t.target;if(!e.ice||!e.state.interactive||!e.state.transformable)return this.lineControlPanel.disable(),void this.transformControlPanel.disable();if(e&&(e.isControlPanel||e.parentNode&&e.parentNode.isControlPanel))return;const i=this.ice.setSelection([e]);this.lineControlPanel.disable(),this.transformControlPanel.disable(),i||(e.isLine?(this.lineControlPanel.targetComponent=e,this.lineControlPanel.enable()):(this.transformControlPanel.targetComponent=e,this.transformControlPanel.enable()))}},G=class AlignmentGuideManager{constructor(t){_defineProperty$1(this,"options",{threshold:3,hysteresis:1,edge:!0,center:!0,spacing:!0,guideStyle:{fillStyle:"#EC4899"},guideZIndex:10000010,guideWidth:1}),_defineProperty$1(this,"enabled",!1),_defineProperty$1(this,"active",null),_defineProperty$1(this,"snapping",!1),_defineProperty$1(this,"intentLeft",0),_defineProperty$1(this,"intentTop",0),_defineProperty$1(this,"cachedTargets",[]),_defineProperty$1(this,"engagedX",!1),_defineProperty$1(this,"engagedY",!1),_defineProperty$1(this,"guideX",null),_defineProperty$1(this,"guideY",null),this.ice=t}enable(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.options=_objectSpread2(_objectSpread2({},this.options),t),this.enabled||(this.enabled=!0,this.ice.evtBus.on("mousedown",this.__onMouseDown,this),this.ice.evtBus.on("mouseup",this.__onMouseUp,this)),this}disable(){return this.enabled?(this.enabled=!1,this.ice.evtBus.off("mousedown",this.__onMouseDown,this),this.ice.evtBus.off("mouseup",this.__onMouseUp,this),this.__detach(),this):this}isEnabled(){return this.enabled}setOptions(t){return this.options=_objectSpread2(_objectSpread2({},this.options),t),this}__onMouseDown(t){const e=t&&t.target;this.__isAlignmentParticipant(e)&&(this.__detach(),this.active=e,this.intentLeft=e.state.left,this.intentTop=e.state.top,this.cachedTargets=this.__computeTargets(),this.engagedX=!1,this.engagedY=!1,this.__ensureGuides(),e.on("mousemove",this.__onDrag,this))}__onDrag(t){if(!this.active||this.snapping)return;const e=t&&"number"==typeof t.movementX?t.movementX:0,i=t&&"number"==typeof t.movementY?t.movementY:0,s=this.ice.viewport?this.ice.viewport.scale:1;this.intentLeft+=e/s,this.intentTop+=i/s,this.snapping=!0,this.active.setState({left:this.intentLeft,top:this.intentTop});const o=this.__boxOf(this.active);if(this.snapping=!1,!o)return;const r=this.options.threshold/s,a=(this.options.threshold+this.options.hysteresis)/s,l=function computeSnap(t,e,i,s,o){const r={x:null,y:null},consider=t=>{if(!t)return;const e=r[t.axis];(!e||Math.abs(t.delta)<Math.abs(e.delta))&&(r[t.axis]=t)};for(const i of e)o.edge&&(consider({axis:"x",type:"edge",delta:i.minX-t.minX,guideValue:i.minX,guideStart:Math.min(t.minY,i.minY),guideEnd:Math.max(t.maxY,i.maxY)}),consider({axis:"x",type:"edge",delta:i.maxX-t.minX,guideValue:i.maxX,guideStart:Math.min(t.minY,i.minY),guideEnd:Math.max(t.maxY,i.maxY)}),consider({axis:"x",type:"edge",delta:i.minX-t.maxX,guideValue:i.minX,guideStart:Math.min(t.minY,i.minY),guideEnd:Math.max(t.maxY,i.maxY)}),consider({axis:"x",type:"edge",delta:i.maxX-t.maxX,guideValue:i.maxX,guideStart:Math.min(t.minY,i.minY),guideEnd:Math.max(t.maxY,i.maxY)}),consider({axis:"y",type:"edge",delta:i.minY-t.minY,guideValue:i.minY,guideStart:Math.min(t.minX,i.minX),guideEnd:Math.max(t.maxX,i.maxX)}),consider({axis:"y",type:"edge",delta:i.maxY-t.minY,guideValue:i.maxY,guideStart:Math.min(t.minX,i.minX),guideEnd:Math.max(t.maxX,i.maxX)}),consider({axis:"y",type:"edge",delta:i.minY-t.maxY,guideValue:i.minY,guideStart:Math.min(t.minX,i.minX),guideEnd:Math.max(t.maxX,i.maxX)}),consider({axis:"y",type:"edge",delta:i.maxY-t.maxY,guideValue:i.maxY,guideStart:Math.min(t.minX,i.minX),guideEnd:Math.max(t.maxX,i.maxX)})),o.center&&(consider({axis:"x",type:"center",delta:i.centerX-t.centerX,guideValue:i.centerX,guideStart:Math.min(t.minY,i.minY),guideEnd:Math.max(t.maxY,i.maxY)}),consider({axis:"y",type:"center",delta:i.centerY-t.centerY,guideValue:i.centerY,guideStart:Math.min(t.minX,i.minX),guideEnd:Math.max(t.maxX,i.maxX)}));if(o.spacing)for(let i=0;i<e.length;i++)for(let s=i+1;s<e.length;s++){const o=e[i],r=e[s],a=Math.min(o.centerX,r.centerX),l=Math.max(o.centerX,r.centerX);if(t.centerX>a&&t.centerX<l){const e=(o.centerX+r.centerX)/2;consider({axis:"x",type:"spacing",delta:e-t.centerX,guideValue:e,guideStart:Math.min(t.minY,o.minY,r.minY),guideEnd:Math.max(t.maxY,o.maxY,r.maxY)})}const h=Math.min(o.centerY,r.centerY),c=Math.max(o.centerY,r.centerY);if(t.centerY>h&&t.centerY<c){const e=(o.centerY+r.centerY)/2;consider({axis:"y",type:"spacing",delta:e-t.centerY,guideValue:e,guideStart:Math.min(t.minX,o.minX,r.minX),guideEnd:Math.max(t.maxX,o.maxX,r.maxX)})}}return r.x=r.x&&Math.abs(r.x.delta)<=i?r.x:null,r.y=r.y&&Math.abs(r.y.delta)<=s?r.y:null,r}(o,this.cachedTargets,this.engagedX?a:r,this.engagedY?a:r,this.options);if(l.x||l.y){const t=this.intentLeft+(l.x?Math.round(l.x.delta):0),e=this.intentTop+(l.y?Math.round(l.y.delta):0);this.active.setState({left:t,top:e}),this.engagedX=!!l.x,this.engagedY=!!l.y,this.__updateGuides(l)}else this.engagedX=!1,this.engagedY=!1,this.__hideGuides()}__onMouseUp(){this.__detach()}__detach(){this.active&&this.active.off("mousemove",this.__onDrag,this),this.active=null,this.intentLeft=0,this.intentTop=0,this.cachedTargets=[],this.engagedX=!1,this.engagedY=!1,this.__hideGuides()}__boxOf(t){const e=t.getMaxBoundingBox(!0);if(!e)return null;const i=e.getMinAndMaxPoint();return function toBox(t,e,i,s){return{minX:t,minY:e,maxX:i,maxY:s,centerX:(t+i)/2,centerY:(e+s)/2}}(i.minX,i.minY,i.maxX,i.maxY)}__computeTargets(){const t=this.ice.childNodes,e=[];for(const i of t){if(i===this.active)continue;if(!this.__isAlignmentParticipant(i))continue;const t=this.__boxOf(i);t&&e.push(t)}return e}__isAlignmentParticipant(t){return!(!(t&&t.state&&t.state.interactive&&t.state.draggable)||t.isLine||t.isControlPanel||t.parentNode&&t.parentNode.isControlPanel)}__ensureGuides(){const t=_objectSpread2({},this.options.guideStyle);this.guideX||(this.guideX=new j({left:0,top:0,width:1,height:1,display:!1,zIndex:this.options.guideZIndex,origin:"top-left",stroke:!1,style:t}),this.ice.addTool(this.guideX)),this.guideY||(this.guideY=new j({left:0,top:0,width:1,height:1,display:!1,zIndex:this.options.guideZIndex,origin:"top-left",stroke:!1,style:t}),this.ice.addTool(this.guideY))}__updateGuides(t){const e=this.options.guideWidth/(this.ice.viewport?this.ice.viewport.scale:1),[i,s]=this.ice.screenToWorld(0,0),[o,r]=this.ice.screenToWorld(this.ice.canvasWidth,this.ice.canvasHeight);t.x&&this.guideX?this.guideX.setState({display:!0,left:t.x.guideValue-e/2,top:s,width:e,height:r-s}):this.guideX&&this.guideX.setState({display:!1}),t.y&&this.guideY?this.guideY.setState({display:!0,left:i,top:t.y.guideValue-e/2,width:o-i,height:e}):this.guideY&&this.guideY.setState({display:!1})}__hideGuides(){this.guideX&&this.guideX.setState({display:!1}),this.guideY&&this.guideY.setState({display:!1})}};const Y=[["pointerdown","ICE_POINTERDOWN"],["pointermove","ICE_POINTERMOVE"],["pointerup","ICE_POINTERUP"],["pointercancel","ICE_POINTERCANCEL"]],U=[["mousedown","ICE_MOUSEDOWN"],["mouseup","ICE_MOUSEUP"],["mousemove","ICE_MOUSEMOVE"],["click","ICE_CLICK"],["dblclick","ICE_DBCLICK"],["contextmenu","ICE_CONTEXTMENU"]],q=[["click","ICE_CLICK"],["dblclick","ICE_DBCLICK"],["contextmenu","ICE_CONTEXTMENU"]],K=[["touchstart","ICE_TOUCHSTART"],["touchmove","ICE_TOUCHMOVE"],["touchend","ICE_TOUCHEND"],["touchcancel","ICE_TOUCHCANCEL"]],J=[["wheel","ICE_WHEEL"]],Q=[["keydown","ICE_KEYDOWN"],["keyup","ICE_KEYUP"]],Z=["ICE_MOUSEMOVE","ICE_POINTERMOVE","ICE_TOUCHMOVE"];function buildDomEventList(t){const e=[];return t?e.push(...Y,...q):e.push(...U,...K),e.push(...J,...Q),e}function isTouchEvent(t){return!!t&&"string"==typeof t.type&&0===t.type.indexOf("touch")}function normalizeInput(t,e,i){const s=function resolveClientPoint(t){if(!t)return null;if(isTouchEvent(t)){const e=(t.touches&&t.touches.length?t.touches:t.changedTouches)||null,i=e&&e[0];return i&&"number"==typeof i.clientX?{clientX:i.clientX,clientY:i.clientY}:null}return"number"==typeof t.clientX&&"number"==typeof t.clientY?{clientX:t.clientX,clientY:t.clientY}:null}(t);if(!s)return null;const o=e&&"number"==typeof e.left?e.left:0,r=e&&"number"==typeof e.top?e.top:0,a=s.clientX-o,l=s.clientY-r;let h=Number(t.movementX),c=Number(t.movementY);isFinite(h)&&isFinite(c)||(i?(h=a-i.x,c=l-i.y):(h=0,c=0));const d=isTouchEvent(t);return{x:a,y:l,clientX:s.clientX,clientY:s.clientY,movementX:h,movementY:c,pointerType:t.pointerType||(d?"touch":"mouse"),pointerId:"number"==typeof t.pointerId?t.pointerId:-1,button:"number"==typeof t.button?t.button:0,buttons:"number"==typeof t.buttons?t.buttons:0,isPrimary:!1!==t.isPrimary,isTouch:d,shiftKey:!!t.shiftKey,ctrlKey:!!t.ctrlKey,altKey:!!t.altKey,metaKey:!!t.metaKey}}function applyNormalizedInput(t,e){t&&e&&(t.offsetX=e.x,t.offsetY=e.y,t.clientX=e.clientX,t.clientY=e.clientY,t.movementX=e.movementX,t.movementY=e.movementY,t.pointerType=e.pointerType,t.pointerId=e.pointerId,t.isTouchInput=e.isTouch,t.shiftKey=e.shiftKey,t.ctrlKey=e.ctrlKey,t.altKey=e.altKey,t.metaKey=e.metaKey)}function toLegacyMouseName(t){switch(t){case"pointerdown":case"touchstart":return"mousedown";case"pointermove":case"touchmove":return"mousemove";case"pointerup":case"touchend":case"pointercancel":case"touchcancel":return"mouseup";default:return null}}const tt={sm:5,md:13,lg:26};function stylePaintPad(t){const e=t&&t.style||{};let i=2;const s=Number(e.lineWidth)||0,o=Number(t.lineBorderWidth)||0,r=Math.ceil(Math.max(s,o));r>0&&(i+=r);const a=Number(e.shadowBlur);return a>0?i+=a+Math.max(Math.abs(Number(e.shadowOffsetX)||0),Math.abs(Number(e.shadowOffsetY)||0)):"string"==typeof e.shadow&&tt[e.shadow]&&(i+=tt[e.shadow]),i}function boxArea(t){return function boxWidth(t){return t[2]-t[0]}(t)*function boxHeight(t){return t[3]-t[1]}(t)}function unionBoxes(t,e){return e[0]<t[0]&&(t[0]=e[0]),e[1]<t[1]&&(t[1]=e[1]),e[2]>t[2]&&(t[2]=e[2]),e[3]>t[3]&&(t[3]=e[3]),t}function intersects(t,e){return!(t[0]>e[2]||t[2]<e[0]||t[1]>e[3]||t[3]<e[1])}function isFiniteBox(t){return isFinite(t[0])&&isFinite(t[1])&&isFinite(t[2])&&isFinite(t[3])}function integerAlign(t){return t[0]=Math.floor(t[0]),t[1]=Math.floor(t[1]),t[2]=Math.ceil(t[2]),t[3]=Math.ceil(t[3]),t}function mergeBox(t,e){return[Math.min(t[0],e[0]),Math.min(t[1],e[1]),Math.max(t[2],e[2]),Math.max(t[3],e[3])]}function isWorthMerging(t,e){const i=boxArea(t)+boxArea(e);return i<=0||boxArea(mergeBox(t,e))<=2*i}function mapBoxToRender(t,e,i){const s=i||[0,0,0,0];return s[0]=Math.floor(t[0]*e.scale+e.tx),s[1]=Math.floor(t[1]*e.scale+e.ty),s[2]=Math.ceil(t[2]*e.scale+e.tx),s[3]=Math.ceil(t[3]*e.scale+e.ty),s}const et=/(rgba|hsla)\(|transparent|#[0-9a-fA-F]{8}|opacity/i;function isOpaqueDrawing(t){const e=t&&t.style||{};if(t&&void 0!==t.opacity&&1!==t.opacity)return!1;if(void 0!==e.globalAlpha&&1!==e.globalAlpha)return!1;if(e.globalCompositeOperation&&"source-over"!==e.globalCompositeOperation)return!1;if(e.shadow||(Number(e.shadowBlur)||0)>0)return!1;for(const t of["fillStyle","strokeStyle"]){const i=e[t];if("string"==typeof i&&et.test(i))return!1}return!0}var it=class DOMEventDispatcher{constructor(t){_defineProperty$1(this,"selectionCandidates",[]),_defineProperty$1(this,"_stopped",!1),_defineProperty$1(this,"__lastInput",null),_defineProperty$1(this,"focusedComponent",null),this.ice=t}start(){let t=null;const e=buildDomEventList("function"==typeof T.PointerEvent);for(let i=0;i<e.length;i++){const s=e[i],o=s[0],r=s[1],a=toLegacyMouseName(o);this.ice.evtBus.on(r,e=>{if(this._stopped)return;const i=e.originalEvent||e;this.__handlePointerCapture(r,i);const s=normalizeInput(i,this.__resolveCanvasRect(o),this.__lastInput);s&&(applyNormalizedInput(e,s),this.__lastInput=s);const l=-1!==Z.indexOf(r),h=-1!==r.indexOf("KEY"),c="ICE_WHEEL"===r;
27
+ Object.defineProperty(exports,"__esModule",{value:!0});var t="ICE_FRAME_EVENT",e="BEFORE_RENDER",i="AFTER_RENDER",s="BEFORE_ADD",o="AFTER_ADD",r="BEFORE_REMOVE",a="AFTER_REMOVE",l="ROUND_FINISH",h="HOOK_MOUSEDOWN",c="HOOK_MOUSEMOVE",d="HOOK_MOUSEUP",u="BEFORE_RESIZE",p="AFTER_RESIZE",f="BEFORE_ROTATE",g="AFTER_ROTATE",m="BEFORE_MOVE",y="AFTER_MOVE";function springProgress(t,e){const i=t,s=Math.sqrt(Math.max(1e-6,1-t*t));return t=>{const o=Math.max(0,t)*e;return 1-Math.exp(-i*o)*(Math.cos(s*o)+i/s*Math.sin(s*o))}}const _={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>t*(2-t),easeInOutQuad:t=>t<.5?2*t*t:(4-2*t)*t-1,easeInQuart:t=>t*t*t*t,easeOutQuart:t=>1-Math.pow(1-t,4),easeInOutQuart:t=>t<.5?8*t*t*t*t:1-8*Math.pow(1-t,4),easeInCubic:t=>t*t*t,easeOutCubic:t=>1-Math.pow(1-t,3),easeInOutCubic:t=>t<.5?4*t*t*t:1-Math.pow(-2*t+2,3)/2,spring:springProgress(.55,12),springSoft:springProgress(.75,14),springSnappy:springProgress(.4,9)},b={color:{blue:{50:"#EFF6FF",100:"#DBEAFE",200:"#BFDBFE",300:"#93C5FD",400:"#60A5FA",500:"#3B82F6",600:"#2563EB",700:"#1D4ED8",800:"#1E40AF",900:"#1E3A8A"},emerald:{50:"#ECFDF5",100:"#D1FAE5",200:"#A7F3D0",300:"#6EE7B7",400:"#34D399",500:"#10B981",600:"#059669",700:"#047857",800:"#065F46",900:"#064E3B"},amber:{50:"#FFFBEB",100:"#FEF3C7",200:"#FDE68A",300:"#FCD34D",400:"#FBBF24",500:"#F59E0B",600:"#D97706",700:"#B45309",800:"#92400E",900:"#78350F"},red:{50:"#FEF2F2",100:"#FEE2E2",200:"#FECACA",300:"#FCA5A5",400:"#F87171",500:"#EF4444",600:"#DC2626",700:"#B91C1C",800:"#991B1B",900:"#7F1D1D"},gray:{50:"#F9FAFB",100:"#F3F4F6",200:"#E5E7EB",300:"#D1D5DB",400:"#9CA3AF",500:"#6B7280",600:"#4B5563",700:"#374151",800:"#1F2937",900:"#111827"},violet:{50:"#F5F3FF",100:"#EDE9FE",200:"#DDD6FE",300:"#C4B5FD",400:"#A78BFA",500:"#8B5CF6",600:"#7C3AED",700:"#6D28D9",800:"#5B21B6",900:"#4C1D95"},teal:{50:"#F0FDFA",100:"#CCFBF1",200:"#99F6E4",300:"#5EEAD4",400:"#2DD4BF",500:"#14B8A6",600:"#0D9488",700:"#0F766E",800:"#115E59",900:"#134E4A"},pink:{50:"#FDF2F8",100:"#FCE7F3",200:"#FBCFE8",300:"#F9A8D4",400:"#F472B6",500:"#EC4899",600:"#DB2777",700:"#BE185D",800:"#9D174D",900:"#831843"},indigo:{50:"#EEF2FF",100:"#E0E7FF",200:"#C7D2FE",300:"#A5B4FC",400:"#818CF8",500:"#6366F1",600:"#4F46E5",700:"#4338CA",800:"#3730A3",900:"#312E81"}},spacing:{1:4,2:8,3:12,4:16,6:24,8:32,12:48,16:64},radius:{sm:4,md:8,lg:12,xl:16,full:9999},fontSize:{sm:12,md:14,lg:16,xl:20,"2xl":24,"3xl":32,"4xl":44},fontFamily:{base:"Arial"},fontWeight:{normal:400,bold:700}};function buildSemantic(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=t.color;return _objectSpread2({primary:i.blue[500],success:i.emerald[500],warning:i.amber[500],danger:i.red[500],info:i.blue[400],text:i.gray[800],muted:i.gray[500],hint:i.gray[400],border:i.gray[200],background:"#ffffff",palette:[i.blue[500],i.emerald[500],i.amber[500],i.red[500],i.violet[500],i.teal[500],i.pink[500],i.indigo[500]],motion:{duration:{fast:100,normal:200,slow:300,slower:500},easing:{linear:"linear",out:"easeOutCubic",inOut:"easeInOutCubic",outQuart:"easeOutQuart",spring:"spring",springSoft:"springSoft",springSnappy:"springSnappy"}}},e)}const v={base:b,semantic:buildSemantic(b)},x={base:b,semantic:buildSemantic(b,{primary:b.color.blue[400],success:b.color.emerald[400],warning:b.color.amber[400],danger:b.color.red[400],info:b.color.teal[400],text:b.color.gray[200],muted:b.color.gray[400],hint:b.color.gray[500],border:b.color.gray[700],background:b.color.gray[900],palette:[b.color.blue[400],b.color.emerald[400],b.color.amber[400],b.color.red[400],b.color.violet[400],b.color.teal[400],b.color.pink[400],b.color.indigo[400]]})},w={default:v,dark:x};let C=v;function registerTheme(t,e){w[t]=e}function resolveTheme(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:C;return"string"==typeof t?w[t]||v:{base:e.base,semantic:_objectSpread2(_objectSpread2({},e.semantic),t)}}function setTheme(t){return C=resolveTheme(t,C),C}function getTheme(){return C}const S={card:t=>({radius:t.base.radius.lg,style:{fillStyle:t.semantic.background,strokeStyle:t.semantic.border,lineWidth:1,shadow:"md"}}),gradient:t=>({radius:t.base.radius.lg,style:{fillGradient:{type:"linear",from:[0,0],to:[0,200],stops:[[0,t.semantic.primary],[1,t.semantic.background]]},strokeStyle:t.semantic.border,lineWidth:1}}),panel:t=>({radius:t.base.radius.md,style:{fillStyle:t.semantic.background,strokeStyle:t.semantic.border,lineWidth:1,shadow:"sm"}}),button:t=>({radius:t.base.radius.md,style:{fillStyle:t.semantic.primary,strokeStyle:t.semantic.primary,lineWidth:1,shadow:"sm"}}),"button-danger":t=>({radius:t.base.radius.md,style:{fillStyle:t.semantic.danger,strokeStyle:t.semantic.danger,lineWidth:1,shadow:"sm"}}),title:t=>({stroke:!1,style:{fontSize:t.base.fontSize["2xl"],fontWeight:t.base.fontWeight.bold,fillStyle:t.semantic.text}}),subtitle:t=>({stroke:!1,style:{fontSize:t.base.fontSize.lg,fillStyle:t.semantic.muted}}),body:t=>({stroke:!1,style:{fontSize:t.base.fontSize.md,fillStyle:t.semantic.text}}),label:t=>({stroke:!1,style:{fontSize:t.base.fontSize.sm,fillStyle:t.semantic.hint}})};var k={baseTokens:b,DEFAULT_THEME:v,DARK_THEME:x,registerTheme:registerTheme,setTheme:setTheme,getTheme:getTheme,STYLE_PRESETS:S},P=class AnimationManager{constructor(t){_defineProperty$1(this,"animationMap",new Map),_defineProperty$1(this,"paused",!1),_defineProperty$1(this,"pausedAt",0),_defineProperty$1(this,"warned",new WeakSet),this.ice=t}start(){return this.ice.evtBus.on(t,this.frameEventHandler,this),this}stop(){return this.ice.evtBus.off(t,this.frameEventHandler,this),this}frameEventHandler(t){if(this.paused)return;const e=Date.now(),i=[...this.animationMap.values()];for(let t=0;t<i.length;t++){const s=i[t],o=s.state.interactive;s.state.interactive=!1,this.tween(s,e),s.state.interactive=o}}__writeValue(t,e,i){const s=e.indexOf(".");if(-1===s)return void(t[e]=i);const o=e.slice(0,s),r=e.slice(s+1);t[o]&&"object"==typeof t[o]||(t[o]={}),this.__writeValue(t[o],r,i)}tween(t,e){const i={},s=t.props.animations,o=isUndefined(e)?Date.now():e;let r=!1;for(const t in s){const e=s[t];if(e.finished)continue;let a;if(isUndefined(e.startTime)&&(e.startTime=o,this.__resolveMotion(e)),isUndefined(e.easing)&&(e.easing="linear"),Array.isArray(e.keyframes)){const i=this.__normalizeKeyframes(e);if(!i){this.__reject(e,"[ICE] 动画属性「".concat(t,"」的 keyframes 非法:需要 ≥2 帧、offset 为数字、各帧取值同型(都是数字或等长的数字数组);已跳过。"));continue}a=i}else if(!this.__isTweenable(e.from,e.to)){this.__reject(e,"[ICE] 动画属性「".concat(t,"」的取值必须都是数字或等长的数字数组,当前为 ")+"".concat(this.__describe(e.from)," → ").concat(this.__describe(e.to),";已跳过。"));continue}const l=Number(e.duration);if(!Number.isFinite(l)||l<=0){this.__reject(e,"[ICE] 动画属性「".concat(t,"」的 duration 必须是正数,当前为 ").concat(String(e.duration),";已直接落到终点。")),this.__writeValue(i,t,this.__roundIfNeeded(e,this.__sampleValue(a,e,1)));continue}const h=Number(e.delay)||0,c=o-e.startTime-h;if(c<0){r=!0,this.__writeValue(i,t,this.__sampleValue(a,e,0));continue}if(c>=l){let s=this.__sampleValue(a,e,1);this.shouldRepeat(e)?(e.startTime=o,s=this.__sampleValue(a,e,0),r=!0):e.finished=!0,this.__writeValue(i,t,this.__roundIfNeeded(e,s));continue}r=!0;const d=a?c/l:this.__easingFn(e.easing,e)(c/l);this.__writeValue(i,t,this.__roundIfNeeded(e,this.__sampleValue(a,e,d)))}return r||this.remove(t),Object.keys(i).length>0&&t.setState(i),t}__sampleValue(t,e,i){if(!t)return this.__interpolate(e.from,e.to,i);const s=t[0],o=t[t.length-1];if(i<=s.offset)return s.value;if(i>=o.offset)return o.value;for(let s=0;s<t.length-1;s++){const o=t[s],r=t[s+1];if(i<o.offset||i>r.offset)continue;const a=r.offset-o.offset;if(a<=0)return r.value;const l=(i-o.offset)/a,h=this.__easingFn(isUndefined(o.easing)?e.easing:o.easing,e);return this.__interpolate(o.value,r.value,h(l))}return o.value}__interpolate(t,e,i){if("number"==typeof t)return t+(e-t)*i;const s=new Array(t.length);for(let o=0;o<t.length;o++)s[o]=t[o]+(e[o]-t[o])*i;return s}__isTweenable(t,e){const i=this.__valueKind(t);return null!==i&&i===this.__valueKind(e)&&("number"===i||t.length===e.length)}__valueKind(t){if("number"==typeof t)return"number";if(Array.isArray(t)&&t.length>0){for(let e=0;e<t.length;e++)if("number"!=typeof t[e])return null;return"array"}return null}__normalizeKeyframes(t){if(t.__frames)return t.__frames;const e=t.keyframes;if(!Array.isArray(e)||e.length<2)return null;const i=[];for(let t=0;t<e.length;t++){const s=e[t]||{},o=isUndefined(s.offset)?t/(e.length-1):Number(s.offset);if(!Number.isFinite(o))return null;i.push({offset:Math.min(1,Math.max(0,o)),value:s.value,easing:s.easing})}i.sort((t,e)=>t.offset-e.offset);const s=this.__valueKind(i[0].value);if(null===s)return null;const o="array"===s?i[0].value.length:0;for(let t=1;t<i.length;t++){if(this.__valueKind(i[t].value)!==s)return null;if("array"===s&&i[t].value.length!==o)return null}return t.__frames=i,i}__easingFn(t,e){return("string"==typeof t?_[t]:void 0)||(e&&this.__warnOnce(e,"[ICE] 未知的缓动「".concat(String(t),"」,已回退为 linear。可用:").concat(Object.keys(_).join(" / "))),_.linear)}__roundIfNeeded(t,e){return t.round?"number"==typeof e?Math.round(e):e.map(t=>Math.round(t)):e}__describe(t){return Array.isArray(t)?"数组[".concat(t.length,"]"):typeof t}__reject(t,e){t.finished=!0,this.__warnOnce(t,e)}__warnOnce(t,e){t&&"object"==typeof t&&(this.warned.has(t)||this.warned.add(t))}__resolveMotion(t){const e=(this.ice&&this.ice.theme||getTheme()).semantic.motion;"string"==typeof t.duration&&void 0!==e.duration[t.duration]&&(t.duration=e.duration[t.duration]),"string"==typeof t.easing&&void 0!==e.easing[t.easing]&&(t.easing=e.easing[t.easing])}shouldRepeat(t){return!0===t.loop||"number"==typeof t.iterationCount&&t.iterationCount>1&&(t.iterationCount--,!0)}pause(){this.paused||(this.paused=!0,this.pausedAt=Date.now())}resume(){if(!this.paused)return;const t=Date.now()-this.pausedAt,e=[...this.animationMap.values()];for(const i of e){const e=i.props.animations;for(const i in e){const s=e[i];isUndefined(s.startTime)||(s.startTime+=t)}}this.paused=!1}isPaused(){return this.paused}add(t){this.animationMap.set(t.props.id,t)}remove(t){isString(t)?this.animationMap.delete(t):this.animationMap.delete(t.props.id)}};let E=0;function bumpVisibilityEpoch(){E++}function getVisibilityEpoch(){return E}function isEffectivelyVisible(t){return t&&"function"==typeof t.isEffectivelyVisible?t.isEffectivelyVisible():!!(t&&t.state&&t.state.display)}function flattenAllComponents(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return flattenTree(e,t.childNodes||[]),flattenTree(e,t.toolNodes||[]),e}function hitTestComponents(t,e,i,s){const o=flattenAllComponents(t);o.sort((t,e)=>t.state.zIndex-e.state.zIndex);const r=t.renderer,a=r&&"function"==typeof r.getWorldBox;let l=null;for(let t=0;t<o.length;t++){const h=o[t];if(!h.isControlPanel&&h.state.interactive&&isEffectivelyVisible(h)){if(a){const t=r.getWorldBox(h);if(t&&(e<t[0]-s||e>t[2]+s||i<t[1]-s||i>t[3]+s))continue}if(h.containsPoint(e,i)){if("function"==typeof h.isPointClippedOut&&h.isPointClippedOut(e,i))continue;l=h}}}return l}function flattenTree(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;for(let o=0;o<e.length;o++){const r=e[o];r._level=i,r._pid=s,t.push(r);const a=r.props&&void 0!==r.props.id?r.props.id:r.id;flattenTree(t,r.childNodes||[],i+1,a)}return t}class Path2DRecorder{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;_defineProperty$1(this,"_commands",[]),_defineProperty$1(this,"_closed",!1),_defineProperty$1(this,"native",null),_defineProperty$1(this,"__current",null),_defineProperty$1(this,"__subpathStart",null),this.native=t||null,this._isPolyfill=!this.native}get drawable(){return this.native||this}moveTo(t,e){this._commands.push(["moveTo",t,e]),this.__current=[t,e],this.__subpathStart=[t,e],this.native&&this.native.moveTo(t,e)}lineTo(t,e){this._commands.push(["lineTo",t,e]),this.__current=[t,e],this.native&&this.native.lineTo(t,e)}bezierCurveTo(t,e,i,s,o,r){this._commands.push(["bezierCurveTo",t,e,i,s,o,r]),this.__current=[o,r],this.native&&this.native.bezierCurveTo(t,e,i,s,o,r)}quadraticCurveTo(t,e,i,s){this._commands.push(["quadraticCurveTo",t,e,i,s]),this.__current=[i,s],this.native&&this.native.quadraticCurveTo(t,e,i,s)}arcTo(t,e,i,s,o){const r=Math.abs(Number(o)||0),a=this.__current;if(!a||0===r)return void this.lineTo(t,e);const l=a[0]-t,h=a[1]-e,c=i-t,d=s-e,u=Math.sqrt(l*l+h*h),p=Math.sqrt(c*c+d*d);if(0===u||0===p)return void this.lineTo(t,e);const f=l/u,g=h/u,m=c/p,y=d/p,_=f*y-g*m,b=Math.max(-1,Math.min(1,f*m+g*y));if(Math.abs(_)<1e-9||Math.abs(b)>=1-1e-9)return void this.lineTo(t,e);const v=Math.acos(b),x=r/Math.tan(v/2),w=t+f*x,C=e+g*x,S=t+m*x,k=e+y*x,P=f+m,E=g+y,M=Math.sqrt(P*P+E*E)||1,I=r/Math.sin(v/2),T=t+P/M*I,B=e+E/M*I,N=Math.atan2(C-B,w-T),D=Math.atan2(k-B,S-T);this.lineTo(w,C),this.arc(T,B,r,N,D,_>0)}rect(t,e,i,s){this._commands.push(["rect",t,e,i,s]),this.__current=[t,e],this.__subpathStart=[t,e],this.native&&this.native.rect(t,e,i,s)}arc(t,e,i,s,o){let r=arguments.length>5&&void 0!==arguments[5]&&arguments[5];this._commands.push(["arc",t,e,i,s,o,r]),this.__current=[t+i*Math.cos(o),e+i*Math.sin(o)],this.native&&this.native.arc(t,e,i,s,o,r)}ellipse(t,e,i,s,o,r,a,l){this._commands.push(["ellipse",t,e,i,s,o,r,a,l]),this.__current=[t+i*Math.cos(a)*Math.cos(o)-s*Math.sin(a)*Math.sin(o),e+i*Math.cos(a)*Math.sin(o)+s*Math.sin(a)*Math.cos(o)],this.native&&this.native.ellipse(t,e,i,s,o,r,a,l)}closePath(){this._closed=!0;const t=this._commands[this._commands.length-1];t&&"closePath"===t[0]||this._commands.push(["closePath"]),this.__current=this.__subpathStart?[this.__subpathStart[0],this.__subpathStart[1]]:null,this.native&&this.native.closePath()}get currentPoint(){return this.__current}}let M=null;(()=>{const t="undefined"!=typeof window?window:"undefined"!=typeof global?global:{};M=t||{},M.requestFrame=M.requestAnimationFrame||M.webkitRequestAnimationFrame||M.mozRequestAnimationFrame||M.oRequestAnimationFrame||M.msRequestAnimationFrame,"function"!=typeof M.requestFrame&&(M.requestFrame=function(t){return setTimeout((function(){t(Date.now())}),16)}),M.createPath2D=()=>"function"==typeof M.Path2D?new Path2DRecorder(new M.Path2D):new Path2DRecorder,M.loadFont=(t,e)=>{if("function"==typeof M.FontFace&&M.document&&M.document.fonts){const i=new M.FontFace(t,e);return M.document.fonts.add(i),i.load()}return M.wx&&"function"==typeof M.wx.loadFont?M.wx.loadFont(e):Promise.resolve()},M.createImage=()=>{if("function"==typeof M.Image)return new M.Image;if(M.wx&&"function"==typeof M.wx.createImage)return M.wx.createImage();throw new Error("当前运行时没有可用的 Image 构造器,无法加载图片。")},"number"==typeof M.devicePixelRatio&&M.devicePixelRatio>0||(M.devicePixelRatio=(()=>{if(M.wx&&"function"==typeof M.wx.getSystemInfoSync)try{return M.wx.getSystemInfoSync().pixelRatio||1}catch(t){return 1}return 1})()),M.createOffscreenCanvas=(t,e)=>{if(M.wx&&"function"==typeof M.wx.createOffscreenCanvas){const i=M.wx.createOffscreenCanvas({type:"2d",width:t,height:e}),s=i.getContext("2d");if(!s)throw new Error("当前运行时无法创建 2d 离屏上下文。");return{canvas:i,ctx:s}}if(M.document&&"function"==typeof M.document.createElement){const i=M.document.createElement("canvas");i.width=t,i.height=e;const s=i.getContext("2d");if(!s)throw new Error("当前运行时无法创建 2d 离屏上下文。");return{canvas:i,ctx:s}}throw new Error("当前运行时没有可用的离屏 canvas。")}})();var I=M,T="undefined"!=typeof Float32Array?Float32Array:Array,B=Math.PI/180;function toRadian(t){return t*B}function invert(t,e){var i=e[0],s=e[1],o=e[2],r=e[3],a=e[4],l=e[5],h=i*r-s*o;return h?(h=1/h,t[0]=r*h,t[1]=-s*h,t[2]=-o*h,t[3]=i*h,t[4]=(o*l-r*a)*h,t[5]=(s*a-i*l)*h,t):null}function multiply(t,e,i){var s=e[0],o=e[1],r=e[2],a=e[3],l=e[4],h=e[5],c=i[0],d=i[1],u=i[2],p=i[3],f=i[4],g=i[5];return t[0]=s*c+r*d,t[1]=o*c+a*d,t[2]=s*u+r*p,t[3]=o*u+a*p,t[4]=s*f+r*g+l,t[5]=o*f+a*g+h,t}function cross(t,e,i){var s=e[0]*i[1]-e[1]*i[0];return t[0]=t[1]=0,t[2]=s,t}function transformMat2d(t,e,i){var s=e[0],o=e[1];return t[0]=i[0]*s+i[2]*o+i[4],t[1]=i[1]*s+i[3]*o+i[5],t}Math.hypot||(Math.hypot=function(){for(var t=0,e=arguments.length;e--;)t+=arguments[e]*arguments[e];return Math.sqrt(t)}),function create(){var t=new T(2);T!=Float32Array&&(t[0]=0,t[1]=0)}();var N=class ICEEvent{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};_defineProperty$1(this,"AT_TARGET",2),_defineProperty$1(this,"BUBBLING_PHASE",3),_defineProperty$1(this,"CAPTURING_PHASE",1),_defineProperty$1(this,"NONE",0);for(const e in t)this[e]=t[e];for(const t in e)this[t]=e[t]}composedPath(){throw new Error("Method not implemented.")}initEvent(t,e,i){throw new Error("Method not implemented.")}preventDefault(){throw new Error("Method not implemented.")}stopImmediatePropagation(){throw new Error("Method not implemented.")}stopPropagation(){throw new Error("Method not implemented.")}};class ICEEventTarget{constructor(){_defineProperty$1(this,"listeners",{}),_defineProperty$1(this,"suspendedEventNames",[])}on(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:I;this.listeners[t]||(this.listeners[t]=[]),this.off(t,e,i),this.listeners[t].push({callback:e,scope:i})}off(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:I,s=this.listeners[t];if(s){s=[...s];for(let o=0;o<s.length;o++){const r=s[o],a=r.callback;if((a===e||a&&a.__onceOriginal===e)&&r.scope===i)return void this.listeners[t].splice(o,1)}}}trigger(t){let e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(function isEmpty(t){return null==t||(Array.isArray(t)||"string"==typeof t?0===t.length:"object"!=typeof t||0===Object.keys(t).length)}(this.listeners[t]))return!1;if(this.suspendedEventNames.includes(t))return!1;i?(e=new N(i),e.originalEvent=i.originalEvent?i.originalEvent:i,e.param=_objectSpread2({},s)):e=new N({type:t,timeStamp:Date.now(),param:_objectSpread2({},s)});const o=this.listeners[t];for(let t=0;t<o.length;t++){const i=o[t];i.callback.call(i.scope,e)}return!0}once(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:I;const s=this;function callback(o){s.off(t,callback,i),e.call(i,o)}callback.__onceOriginal=e,s.on(t,callback,i)}suspend(t){t&&!this.suspendedEventNames.includes(t)&&this.suspendedEventNames.push(t)}resume(t){const e=this.suspendedEventNames.indexOf(t);-1!==e&&this.suspendedEventNames.splice(e,1)}purgeEvents(){this.listeners={},this.suspendedEventNames=[]}hasListener(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:I;if(!this.listeners[t])return!1;const s=this.listeners[t];if(!s)return!1;for(let t=0;t<s.length;t++){const o=s[t];if(o.callback===e&&o.scope===i)return!0}return!1}}ICEEventTarget.prototype.addEventListener=ICEEventTarget.prototype.on,ICEEventTarget.prototype.removeEventListener=ICEEventTarget.prototype.off,ICEEventTarget.prototype.dispatchEvent=ICEEventTarget.prototype.trigger;var D=ICEEventTarget;class GeoUtil{constructor(){throw new Error("GeoUtil is a static util class.")}static pointInPolygon(t,e,i){if(!i||i.length<3)return!1;let s=!1;for(let o=0,r=i.length-1;o<i.length;r=o++){const a=i[o][0],l=i[o][1],h=i[r][0],c=i[r][1];l>e!=c>e&&t<(h-a)*(e-l)/(c-l)+a&&(s=!s)}return s}static distanceToSegment(t,e,i,s,o,r){const a=o-i,l=r-s,h=a*a+l*l;let c=0===h?0:((t-i)*a+(e-s)*l)/h;return c=c<0?0:c>1?1:c,Math.hypot(t-(i+c*a),e-(s+c*l))}static distanceToPolyline(t,e,i){if(!t||0===t.length)return 1/0;if(1===t.length)return Math.hypot(e-t[0][0],i-t[0][1]);let s=1/0;for(let o=0;o<t.length-1;o++){const r=GeoUtil.distanceToSegment(e,i,t[o][0],t[o][1],t[o+1][0],t[o+1][1]);r<s&&(s=r)}return s}static samplePolyline(t,e){const i=[];if(!t||t.length<2||e<1)return t?t.map(t=>[t[0],t[1]]):i;const s=[];let o=0;for(let e=0;e<t.length-1;e++){const i=Math.hypot(t[e+1][0]-t[e][0],t[e+1][1]-t[e][1]);s.push(i),o+=i}if(0===o)return[t[0].slice(),t[t.length-1].slice()];for(let r=0;r<=e;r++){const a=o*r/e;let l=0;for(let e=0;e<s.length;e++){if(l+s[e]>=a||e===s.length-1){const o=0===s[e]?0:(a-l)/s[e];i.push([t[e][0]+(t[e+1][0]-t[e][0])*o,t[e][1]+(t[e+1][1]-t[e][1])*o]);break}l+=s[e]}}return i}static segmentIntersect(t,e,i,s){const o=e[0]-t[0],r=e[1]-t[1],a=s[0]-i[0],l=s[1]-i[1],h=o*l-r*a;if(0===h)return null;const c=((i[0]-t[0])*l-(i[1]-t[1])*a)/h,d=((i[0]-t[0])*r-(i[1]-t[1])*o)/h;return c<0||c>1||d<0||d>1?null:[t[0]+c*o,t[1]+c*r]}static calcRotateAngle(t,e,i,s){const o=t-i,r=e-s,a=Math.hypot(o,r),l=o/a;let h=(r/a<0?-1:1)*Math.acos(l)*180/Math.PI+360;return h%=360,h}static calcRotateAngleFromMatrix(t){const e=t[0],i=t[1];return Math.atan2(i,e)*(180/Math.PI)}static calcScaleFromMatrix(t){const e=t[0],i=t[1],s=t[2],o=t[3];return[Math.hypot(e,i),Math.hypot(s,o)]}}class ICEBoundingBox{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[0,0,0,0,0,0,0,0,0,0];_defineProperty$1(this,"tl",[0,0]),_defineProperty$1(this,"tr",[0,0]),_defineProperty$1(this,"bl",[0,0]),_defineProperty$1(this,"br",[0,0]),_defineProperty$1(this,"tc",[0,0]),_defineProperty$1(this,"rc",[0,0]),_defineProperty$1(this,"bc",[0,0]),_defineProperty$1(this,"lc",[0,0]),_defineProperty$1(this,"center",[0,0]),this.tl=[t[0],t[1]],this.tr=[t[2],t[3]],this.bl=[t[4],t[5]],this.br=[t[6],t[7]],this.tc=[(this.tr[0]+this.tl[0])/2,(this.tr[1]+this.tl[1])/2],this.bc=[(this.br[0]+this.bl[0])/2,(this.br[1]+this.bl[1])/2],this.lc=[(this.bl[0]+this.tl[0])/2,(this.bl[1]+this.tl[1])/2],this.rc=[(this.br[0]+this.tr[0])/2,(this.br[1]+this.tr[1])/2],this.center=[t[8],t[9]]}static fromDimension(t,e,i,s){return new ICEBoundingBox([t,e,t+i,e,t,e+s,t+i,e+s,t+i/2,e+s/2])}containsPoint(t){const{minX:e,minY:i,maxX:s,maxY:o}=this.getMinAndMaxPoint();if(t[0]<e||t[0]>s||t[1]<i||t[1]>o)return!1;let r,a=0;const l=this.getBoundingLines();for(let e=0;e<l.length;e++){const i=l[e];if(!(t[1]>i.o[1]&&t[1]>i.d[1]||t[1]<i.o[1]&&t[1]<i.d[1])){if(i.o[0]===i.d[0]&&i.o[0]>=t[0])r=i.o[0];else{const e=(i.d[1]-i.o[1])/(i.d[0]-i.o[0]);r=i.o[0]+(t[1]-i.o[1])/e}r>t[0]&&a++}}return 0!==a&&a%2==1}getBoundingLines(){return[{o:[...this.tl],d:[...this.tr]},{o:[...this.tr],d:[...this.br]},{o:[...this.br],d:[...this.bl]},{o:[...this.bl],d:[...this.tl]}]}getMinAndMaxPoint(){let t=this.tl[0],e=this.tl[1],i=this.tl[0],s=this.tl[1];const o=[this.tr,this.bl,this.br];for(let r=0;r<o.length;r++){const a=o[r];a[0]<t&&(t=a[0]),a[0]>i&&(i=a[0]),a[1]<e&&(e=a[1]),a[1]>s&&(s=a[1])}return{minX:t,minY:e,maxX:i,maxY:s}}containsBox(t){const e=this.getMinAndMaxPoint(),i=t.getMinAndMaxPoint();return i.minX>=e.minX&&i.maxX<=e.maxX&&i.minY>=e.minY&&i.maxY<=e.maxY}isIntersect(t){const e=this.tl[0],i=this.br[0],s=this.tl[1],o=this.br[1],r=t.tl[0],a=t.br[0],l=t.tl[1],h=t.br[1];return!(e>a||s>h||i<r||o<l)}transform(t){const e=transformMat2d([],this.tl,t),i=transformMat2d([],this.tr,t),s=transformMat2d([],this.bl,t),o=transformMat2d([],this.br,t),r=transformMat2d([],this.center,t);return new ICEBoundingBox([...e,...i,...s,...o,...r])}union(t){const e=this.getMinAndMaxPoint(),i=t.getMinAndMaxPoint(),s=Math.min(e.minX,i.minX),o=Math.min(e.minY,i.minY),r=Math.max(e.maxX,i.maxX),a=Math.max(e.maxY,i.maxY);return ICEBoundingBox.fromDimension(s,o,r-s,a-o)}get width(){const t=this.br[0]-this.bl[0],e=this.br[1]-this.bl[1];return Math.hypot(t,e)}get height(){const t=this.br[0]-this.tr[0],e=this.br[1]-this.tr[1];return Math.hypot(t,e)}get left(){return this.tl[0]}set left(t){throw new Error("Can not set left to ICEBoundingBox directly.")}get top(){return this.tl[1]}set top(t){throw new Error("Can not set top to ICEBoundingBox directly.")}get centerX(){return this.center[0]}get centerY(){return this.center[1]}get centerPoint(){return this.center}}var $=ICEBoundingBox;const A={sm:{shadowColor:"rgba(0,0,0,0.12)",shadowBlur:4,shadowOffsetX:0,shadowOffsetY:1},md:{shadowColor:"rgba(0,0,0,0.18)",shadowBlur:10,shadowOffsetX:0,shadowOffsetY:3},lg:{shadowColor:"rgba(0,0,0,0.25)",shadowBlur:20,shadowOffsetX:0,shadowOffsetY:6}},O=[["shadowColor","rgba(0,0,0,0)"],["shadowBlur",0],["shadowOffsetX",0],["shadowOffsetY",0],["globalAlpha",1],["globalCompositeOperation","source-over"],["lineCap","butt"],["lineJoin","miter"],["miterLimit",10],["textAlign","start"],["textBaseline","alphabetic"]],R=Object.freeze([1,0,0,1,0,0]),L={left:0,top:0,width:0,height:0,style:Object.freeze({fillStyle:"red",strokeStyle:"blue",lineWidth:1}),lineDash:Object.freeze([]),lineDashOffset:0,lineDashFlow:!1,lineDashFlowSpeed:60,lineBorder:!1,lineBorderWidth:1.5,lineBorderColor:"#999999",fill:!0,stroke:!0,animations:Object.freeze({}),transform:Object.freeze({translate:Object.freeze([0,0]),scale:Object.freeze([1,1]),skew:Object.freeze([0,0]),rotate:0}),linearMatrix:Object.freeze([]),composedMatrix:Object.freeze([]),origin:"localCenter",originX:0,originY:0,clipChildren:!1,opacity:1,localOrigin:Object.freeze([0,0]),absoluteOrigin:Object.freeze([0,0]),display:!0,draggable:!0,transformable:!0,interactive:!0,linkable:!0,showMinBoundingBox:!1,showMaxBoundingBox:!1};function normalizeGradientStops(t){const e=[];if(!Array.isArray(t))return e;for(let i=0;i<t.length;i++){const s=t[i];let o=NaN,r="";Array.isArray(s)?(o=Number(s[0]),r=String(s[1])):s&&"object"==typeof s&&(o=Number(s.offset),r=String(s.color)),isFinite(o)&&r&&e.push([o<0?0:o>1?1:o,r])}return e.sort((t,e)=>t[0]-e[0]),e}class ICEComponent extends D{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(),_defineProperty$1(this,"__dirty",!0),_defineProperty$1(this,"__everRendered",!1),_defineProperty$1(this,"__localBoxScratch",[0,0,0,0]),_defineProperty$1(this,"__activeCtm",null),_defineProperty$1(this,"__activeWorldMatrix",null),_defineProperty$1(this,"__visEpoch",-1),_defineProperty$1(this,"__visValue",!0),_defineProperty$1(this,"__opacityApplied",!1),_defineProperty$1(this,"__gradCache",{}),_defineProperty$1(this,"__paramsDirty",!0),_defineProperty$1(this,"__absScratchA",null),_defineProperty$1(this,"__absScratchB",null),_defineProperty$1(this,"__transScratch",null),_defineProperty$1(this,"__originScratch",null),_defineProperty$1(this,"__composeScratch",null),_defineProperty$1(this,"__viewportScratch",null),this.__userProps=t,t&&t.preset&&S[t.preset]&&(this.__presetName=t.preset,t=merge$1({},S[t.preset](getTheme()),t)),this.props=Object.create(L),this.props.id="ICE_"+function uuid(){if(I.crypto)return I.crypto.randomUUID();{let t=Date.now();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){const i=(t+16*Math.random())%16|0;return t=Math.floor(t/16),("x"==e?i:3&i|8).toString(16)}))}}(),this.props.zIndex=ICEComponent.instanceCounter++,merge$1(this.props,t),this.__initState(),this.root=I,this.initEvents()}__initState(){this.state=Object.create(L),this.state.id=this.props.id,this.state.zIndex=this.props.zIndex;for(const t in this.props)Object.prototype.hasOwnProperty.call(this.props,t)&&(this.state[t]=cloneDeep(this.props[t]));this.state.linearMatrix=[],this.state.composedMatrix=[],this.state.localOrigin=[0,0],this.state.absoluteOrigin=[0,0]}__reapplyPreset(t){if(!this.__presetName||!S[this.__presetName])return;const e=S[this.__presetName](t||getTheme()),i=this.__userProps||{},s={};for(const t in e)"style"===t?s.style=merge$1({},e.style,i.style):void 0!==i[t]?s[t]=i[t]:s[t]=e[t];this.setState(s)}initEvents(){this.on("mousedown",this.mouseDownEvtHandler,this),this.on("keydown",this.keyboardEvtHandler,this),this.on("keyup",this.keyboardEvtHandler,this)}mouseDownEvtHandler(t){this.state.interactive&&this.state.draggable&&(this.on("mousemove",this.mouseMoveEvtHandler,this),this.on("mouseup",this.mouseUpEvtHandler,this))}mouseMoveEvtHandler(t){const e=this.ice&&this.ice.viewport?this.ice.viewport.scale:1,i=t.movementX/e,s=t.movementY/e;return this.moveGlobalPosition(i,s,t),!0}mouseUpEvtHandler(t){this.off("mousemove",this.mouseMoveEvtHandler,this),this.off("mouseup",this.mouseUpEvtHandler,this)}keyboardEvtHandler(t){switch(t.key){case"ArrowUp":this.moveGlobalPosition(0,-2,t);break;case"ArrowDown":this.moveGlobalPosition(0,2,t);break;case"ArrowLeft":this.moveGlobalPosition(-2,0,t);break;case"ArrowRight":this.moveGlobalPosition(2,0,t);break;case"Delete":this.parentNode&&this.parentNode.removeChild?this.parentNode.removeChild(this):this.ice.removeChild(this)}}render(){this.__renderCore(null,!0)}renderTo(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!t)return;const i=this.ctx;this.ctx=t;try{this.__renderCore(e,!1)}finally{this.ctx=i}}isEffectivelyVisible(){if(this.__visEpoch===getVisibilityEpoch())return this.__visValue;const t=this.__computeEffectivelyVisible();return this.__visEpoch=getVisibilityEpoch(),this.__visValue=t,t}__computeEffectivelyVisible(){if(!this.state.display)return!1;let t=this.parentNode;for(;t&&t.state;){if(!t.state.display)return!1;t=t.parentNode}return!0}__renderCore(t,s){if(this.trigger(e),!this.isEffectivelyVisible())return;this.refreshParams(),this.applyStyleToCtx();const o=this.getEffectiveOpacity();1!==o&&(this.__applyStyleProp("globalAlpha",(Number(this.ctx.globalAlpha)||1)*o),this.__opacityApplied=!0),this.applyTransformToCtx(t,s);const r=this.__applyAncestorClips();this.doRender(),r&&this.ctx.restore(),this.__resetLeakyCtxState(),this.trigger(i),this.__everRendered=!0,this.dirty=!1}applyStyleToCtx(){const t=this.props.style,e=this.state.style;let i=null,s=null;if(t)for(const e in t)"fillGradient"!==e?"strokeGradient"!==e?this.__applyStyleProp(e,t[e]):s=t[e]:i=t[e];if(e)for(const t in e)"fillGradient"!==t?"strokeGradient"!==t?this.__applyStyleProp(t,e[t]):s=e[t]:i=e[t];i&&this.__applyStyleProp("fillGradient",i),s&&this.__applyStyleProp("strokeGradient",s)}__applyStyleProp(t,e){if("fillGradient"!==t&&"strokeGradient"!==t){if("shadow"===t&&"string"==typeof e&&A[e]){const t=A[e];return this.ctx.shadowColor=t.shadowColor,this.ctx.shadowBlur=t.shadowBlur,this.ctx.shadowOffsetX=t.shadowOffsetX,void(this.ctx.shadowOffsetY=t.shadowOffsetY)}this.ctx[t]=e}else{const i="fillGradient"===t?"fillStyle":"strokeStyle",s=this.__resolveGradient("fillGradient"===t?"fill":"stroke",e);if(s)this.ctx[i]=s;else if(e){const t=normalizeGradientStops(e.stops);t.length&&(this.ctx[i]=t[Math.floor(t.length/2)][1])}}}__resolveGradient(t,e){if(!e||"object"!=typeof e)return null;const i=this.__gradCache[t];if(i&&i.src===e)return i.grad;const s=this.__buildGradient(e);return this.__gradCache[t]={src:e,grad:s},s}__buildGradient(t){const e=this.ctx;if(!e)return null;const i=normalizeGradientStops(t.stops);if(i.length<1)return null;const s=Number(this.state.width)||0,o=Number(this.state.height)||0,r=t.type||"linear";let a=null;if("radial"===r&&"function"==typeof e.createRadialGradient){const i=Array.isArray(t.center)?t.center:[s/2,o/2],r=Number(t.radius)>0?Number(t.radius):Math.max(s,o)/2,l=Number(t.innerRadius)>0?Number(t.innerRadius):0;a=e.createRadialGradient(i[0],i[1],l,i[0],i[1],r)}else if("conic"===r&&"function"==typeof e.createConicGradient){const i=Array.isArray(t.center)?t.center:[s/2,o/2];a=e.createConicGradient(Number(t.startAngle)||0,i[0],i[1])}else{if("conic"===r)return null;if("function"==typeof e.createLinearGradient){const i=Array.isArray(t.from)?t.from:[0,0],o=Array.isArray(t.to)?t.to:[s,0];a=e.createLinearGradient(i[0],i[1],o[0],o[1])}}if(!a&&"function"!=typeof e.createLinearGradient)return null;if(!a)return null;for(let e=0;e<i.length;e++)try{a.addColorStop(i[e][0],i[e][1])}catch(t){}return a}calcComponentParams(){return{width:this.state.width,height:this.state.height}}__localBox(){const t=this.__localBoxScratch;return t[0]=0,t[1]=0,t[2]=this.state.width||0,t[3]=this.state.height||0,t}measure(){this.refreshParams()}refreshParams(){this.__paramsDirty&&(this.calcComponentParams(),this.__paramsDirty=!1,this.__gradCache.fill=void 0,this.__gradCache.stroke=void 0)}calcLocalOrigin(){let t=this.state.localOrigin;(!t||t.length<2)&&(t=this.state.localOrigin=[0,0]),t[0]=0,t[1]=0;const e=this.state.origin;return e&&"localCenter"!==e?"top-left"===e?(t[0]=0,t[1]=0):"custom"===e&&(t[0]=Number(this.state.originX)||0,t[1]=Number(this.state.originY)||0):(t[0]=this.state.width/2,t[1]=this.state.height/2),this.state.localOrigin=t,t}calcAbsoluteOrigin(){const t=this.state.transform,e=t.translate[0]+this.state.left,i=t.translate[1]+this.state.top,s=this.calcLocalOrigin();let o=this.__originScratch;return o||(o=this.__originScratch=[0,0]),o[0]=s[0]+e,o[1]=s[1]+i,this.parentNode&&(transformMat2d(o,o,[1,0,0,1,-this.parentNode.state.localOrigin[0],-this.parentNode.state.localOrigin[1]]),transformMat2d(o,o,this.parentNode.state.composedMatrix)),this.state.absoluteOrigin=o,o}calcLinearMatrix(){(!this.state.linearMatrix||this.state.linearMatrix.length<6)&&(this.state.linearMatrix=function create$1(){var t=new T(6);return T!=Float32Array&&(t[1]=0,t[2]=0,t[4]=0,t[5]=0),t[0]=1,t[3]=1,t}());const t=this.state.linearMatrix;!function identity(t){t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0}(t);const e=this.state.transform,i=e.skew[0],s=e.skew[1];return function skew(t,e,i,s){const o=Math.tan(i),r=Math.tan(s);t[0]=e[0],t[1]=e[1]+o,t[2]=e[2]+r,t[3]=e[3],t[4]=e[4],t[5]=e[5]}(t,t,toRadian(i),toRadian(s)),function rotate(t,e,i){var s=e[0],o=e[1],r=e[2],a=e[3],l=e[4],h=e[5],c=Math.sin(i),d=Math.cos(i);t[0]=s*d+r*c,t[1]=o*d+a*c,t[2]=s*-c+r*d,t[3]=o*-c+a*d,t[4]=l,t[5]=h}(t,t,toRadian(e.rotate)),function scale(t,e,i){var s=e[0],o=e[1],r=e[2],a=e[3],l=e[4],h=e[5],c=i[0],d=i[1];t[0]=s*c,t[1]=o*c,t[2]=r*d,t[3]=a*d,t[4]=l,t[5]=h}(t,t,[e.scale[0],e.scale[1]]),this.state.linearMatrix=t,t}calcAbsoluteLinearMatrix(){let t=this,e=t.calcLinearMatrix();this.__absScratchA||(this.__absScratchA=[0,0,0,0,0,0]),this.__absScratchB||(this.__absScratchB=[0,0,0,0,0,0]);let i=this.__absScratchA;for(;t.parentNode;){const s=t.parentNode,o=s.state&&s.state.linearMatrix&&s.state.linearMatrix.length>=6&&!s.dirty?s.state.linearMatrix:s.calcLinearMatrix();i=i===this.__absScratchA?this.__absScratchB:this.__absScratchA,multiply(i,o,e),e=i,t=s}return this.state.absoluteLinearMatrix=e,e}composeMatrix(){if(this.parentNode&&"function"==typeof this.parentNode.composeMatrix){const t=this.parentNode,e=t.state?t.state.composedMatrix:null;(t.dirty||!e||e.length<6)&&t.composeMatrix()}const t=this.calcAbsoluteOrigin();this.__transScratch||(this.__transScratch=[1,0,0,1,0,0]),this.__transScratch[4]=t[0],this.__transScratch[5]=t[1];const e=this.__transScratch,i=this.calcAbsoluteLinearMatrix();(!this.state.composedMatrix||this.state.composedMatrix.length<6)&&(this.state.composedMatrix=[1,0,0,1,0,0]);const s=multiply(this.state.composedMatrix,e,i);return this.state.composedMatrix=s,s}applyTransformToCtx(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=this.dirty?this.composeMatrix():this.state.composedMatrix,s=e&&this.ice?this.ice.getRenderViewport():null,o=s&&(1!==s.scale||0!==s.tx||0!==s.ty);let r=null;if(o){this.__viewportScratch||(this.__viewportScratch=[1,0,0,1,0,0]);const t=this.__viewportScratch;t[0]=s.scale,t[1]=0,t[2]=0,t[3]=s.scale,t[4]=s.tx,t[5]=s.ty,r=t}else t&&(r=t);if(this.__activeWorldMatrix=r,t||o){this.__composeScratch||(this.__composeScratch=[1,0,0,1,0,0]);const e=this.__composeScratch;multiply(e,r||t,i),this.__activeCtm=e,this.ctx.setTransform(e[0],e[1],e[2],e[3],e[4],e[5])}else this.__activeCtm=i,this.ctx.setTransform(...i)}applyActiveTransform(){const t=this.__activeCtm;t?this.ctx.setTransform(t[0],t[1],t[2],t[3],t[4],t[5]):this.applyTransformToCtx(null,!0)}hasClippingAncestor(){let t=this.parentNode;for(;t&&t.state;){if(t.state.clipChildren)return!0;t=t.parentNode}return!1}getEffectiveOpacity(){const t=this.state.opacity;let e=void 0===t?1:Number(t);e>=0||(e=1);let i=this.parentNode;for(;i&&i.state;){const t=void 0===i.state.opacity?1:Number(i.state.opacity);t>=0&&1!==t&&(e*=t),i=i.parentNode}return e}isPointClippedOut(t,e){let i=this.parentNode;for(;i&&i.state;){if(i.state.clipChildren){const s=i.__paintWorldBox();if(t<s[0]||t>s[2]||e<s[1]||e>s[3])return!0}i=i.parentNode}return!1}__applyAncestorClips(){const t=this.parentNode;if(!t||!t.state)return!1;const e=this.ctx;if(!e||"function"!=typeof e.clip||"function"!=typeof e.rect)return!1;let i=null,s=t;for(;s&&s.state;)s.state.clipChildren&&(i||(i=[])).push(s),s=s.parentNode;if(!i)return!1;const o=this.__activeWorldMatrix||R;e.save(),e.setTransform(1,0,0,1,0,0);for(let t=i.length-1;t>=0;t--){const s=i[t].__paintWorldBox(),r=o[0]*s[0]+o[2]*s[1]+o[4],a=o[1]*s[0]+o[3]*s[1]+o[5],l=o[0]*s[2]+o[2]*s[1]+o[4],h=o[1]*s[2]+o[3]*s[1]+o[5],c=o[0]*s[0]+o[2]*s[3]+o[4],d=o[1]*s[0]+o[3]*s[3]+o[5],u=o[0]*s[2]+o[2]*s[3]+o[4],p=o[1]*s[2]+o[3]*s[3]+o[5],f=Math.min(r,l,c,u),g=Math.min(a,h,d,p),m=Math.max(r,l,c,u),y=Math.max(a,h,d,p);e.beginPath(),e.rect(f,g,m-f,y-g),e.clip()}return this.applyActiveTransform(),!0}applyWorldTransform(){const t=this.__activeWorldMatrix;t?(this.ctx.setTransform(t[0],t[1],t[2],t[3],t[4],t[5]),this.ctx.lineWidth=1/(Math.abs(t[0])||Math.abs(t[3])||1)):(this.ctx.setTransform(1,0,0,1,0,0),this.ctx.lineWidth=1)}doRender(){if(this.applyWorldTransform(),this.state.showMinBoundingBox||this.state.showMaxBoundingBox){const t=this.state.showMinBoundingBox?this.getMinBoundingBox():null,e=this.state.showMaxBoundingBox?this.getMaxBoundingBox():null,i=t&&e&&this.__areBoundingBoxesNearlyEqual(t,e);t&&!i&&(this.ctx.strokeStyle="#ff0000",this.ctx.fillStyle="rgba(0,0,0,0)",this.ctx.beginPath(),this.ctx.moveTo(t.tl[0],t.tl[1]),this.ctx.lineTo(t.tr[0],t.tr[1]),this.ctx.lineTo(t.br[0],t.br[1]),this.ctx.lineTo(t.bl[0],t.bl[1]),this.ctx.closePath(),this.ctx.stroke(),this.ctx.fill()),e&&(this.ctx.strokeStyle="#0000ff",this.ctx.fillStyle="rgba(0,0,0,0)",this.ctx.beginPath(),this.ctx.moveTo(e.tl[0],e.tl[1]),this.ctx.lineTo(e.tr[0],e.tr[1]),this.ctx.lineTo(e.br[0],e.br[1]),this.ctx.lineTo(e.bl[0],e.bl[1]),this.ctx.closePath(),this.ctx.stroke(),this.ctx.fill())}}__areBoundingBoxesNearlyEqual(t,e){const i=[[t.tl,e.tl],[t.tr,e.tr],[t.bl,e.bl],[t.br,e.br]];for(const[t,e]of i)if(Math.abs(t[0]-e[0])>1||Math.abs(t[1]-e[1])>1)return!1;return!0}hasDerivedChildren(){return!1}getMinBoundingBox(){const t=arguments.length>0&&void 0!==arguments[0]&&arguments[0]?this.composeMatrix():this.state.composedMatrix,e=this.state.localOrigin[0],i=this.state.localOrigin[1],s=this.__localBox(),o=s[0]-e,r=s[1]-i,a=s[2]-e,l=s[3]-i;let h=new $([o,r,a,r,o,l,a,l,0,0]);return h=h.transform(t),h}getMaxBoundingBox(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=this.getMinBoundingBox(t);const{minX:i,minY:s,maxX:o,maxY:r}=e.getMinAndMaxPoint(),a=e.centerPoint;return e=new $([i,s,o,s,i,r,o,r,a[0],a[1]]),e}setState(t){const e=this.__beforeStateMerge(t);merge$1(this.state,t),this.paramsDirty=!0,this.dirty=!0,this.ice&&(this.ice.dirty=!0),this.__afterStateMerge(e)}__beforeStateMerge(t){const e=!!t&&(void 0!==t.width&&t.width!==this.state.width||void 0!==t.height&&t.height!==this.state.height);return t&&void 0!==t.display&&t.display!==this.state.display&&bumpVisibilityEpoch(),e}__afterStateMerge(t){t&&this.parentNode&&"function"==typeof this.parentNode.requestLayout&&this.parentNode.requestLayout()}set dirty(t){this.__dirty=t}get dirty(){return this.__dirty}__applyDirty(t){this.dirty=t||!this.__everRendered}set paramsDirty(t){this.__paramsDirty=t}get paramsDirty(){return this.__paramsDirty}setPosition(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new N;this.trigger(m,_objectSpread2(_objectSpread2({},i),{},{left:t,top:e})),this.setState({left:t,top:e}),this.trigger(y,_objectSpread2(_objectSpread2({},i),{},{left:t,top:e})),function triggerSubtreeMove(t,e){const i=t&&t.childNodes||[];for(let t=0;t<i.length;t++){const s=i[t];s.trigger(y,e),triggerSubtreeMove(s,e)}}(this,_objectSpread2(_objectSpread2({},i),{},{left:t,top:e}))}moveGlobalPosition(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new N;if(this.parentNode){let i=[t,e];i=transformMat2d([],i,invert([],this.parentNode.calcAbsoluteLinearMatrix())),t=i[0],e=i[1]}this.setPosition(this.state.left+t,this.state.top+e,_objectSpread2(_objectSpread2({},i),{},{tx:t,ty:e}))}setGlobalPosition(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new N;if(this.parentNode){let i=[t,e];i=transformMat2d([],i,invert([],this.parentNode.calcAbsoluteLinearMatrix())),t=i[0],e=i[1]}this.setPosition(t,e,_objectSpread2(_objectSpread2({},i),{},{left:t,top:e}))}setGlobalRotate(t){if(this.parentNode){const e=this.parentNode.calcAbsoluteLinearMatrix();t-=GeoUtil.calcRotateAngleFromMatrix(e)}this.setState({transform:{rotate:t}})}localToGlobal(t,e){let i=[t,e];return i=transformMat2d([],i,this.state.composedMatrix),i}globalToLocal(t,e){let i=[t,e];return i=transformMat2d([],i,invert([],this.state.composedMatrix)),i}getRotateAngle(){const t=arguments.length>0&&void 0!==arguments[0]&&arguments[0]?this.composeMatrix():this.state.composedMatrix;return GeoUtil.calcRotateAngleFromMatrix(t)}getLocalLeftTop(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const e=this.getMinBoundingBox(t),i=e.width,s=e.height;return{left:e.centerX-e.width/2,top:e.centerY-e.height/2,width:i,height:s}}__resetLeakyCtxState(){let t=0;const scan=e=>{if(e)for(const i in e){const e=this.__leakyIndex(i);e>=0&&(t|=1<<e)}};if(scan(this.props.style),scan(this.state.style),this.__opacityApplied&&(t|=1<<this.__leakyIndex("globalAlpha"),this.__opacityApplied=!1),this.state.lineDash&&this.state.lineDash.length&&(t|=2048),(this.state.lineDashFlow||this.state.lineDashOffset)&&(t|=2048),!t)return;const e=this.ctx;for(let i=0;i<O.length;i++)t&1<<i&&(e[O[i][0]]=O[i][1]);2048&t&&"function"==typeof e.setLineDash&&(e.setLineDash([]),e.lineDashOffset=0)}__leakyIndex(t){switch(t){case"shadowColor":return 0;case"shadowBlur":return 1;case"shadowOffsetX":return 2;case"shadowOffsetY":return 3;case"globalAlpha":return 4;case"globalCompositeOperation":return 5;case"lineCap":return 6;case"lineJoin":return 7;case"miterLimit":return 8;case"textAlign":return 9;case"textBaseline":return 10;default:return-1}}__paintWorldBox(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[0,0,0,0];const e=this.state.composedMatrix,i=this.state.localOrigin,s=i?i[0]:0,o=i?i[1]:0,r=this.__localBox(),a=[r[0]-s,r[2]-s],l=[r[1]-o,r[3]-o];if(t[0]=t[1]=1/0,t[2]=t[3]=-1/0,!e||e.length<6)return t[0]=a[0],t[1]=l[0],t[2]=a[1],t[3]=l[1],t;const h=e[0],c=e[1],d=e[2],u=e[3],p=e[4],f=e[5];for(let e=0;e<2;e++){const i=a[e];for(let e=0;e<2;e++){const s=l[e],o=h*i+d*s+p,r=c*i+u*s+f;o<t[0]&&(t[0]=o),o>t[2]&&(t[2]=o),r<t[1]&&(t[1]=r),r>t[3]&&(t[3]=r)}}return t}containsPoint(t,e){const i=this.state.composedMatrix;if(!i||i.length<6)return this.getMinBoundingBox().containsPoint([t,e]);const s=transformMat2d([],[t,e],invert([],i));return this.containsLocalPoint(s[0],s[1])}containsLocalPoint(t,e){const i=this.state.width/2,s=this.state.height/2;return t>=-i&&t<=i&&e>=-s&&e<=s}destroy(){this.destory()}destory(){this.ice&&this.ice.animationManager&&this.ice.animationManager.remove(this),this.trigger(r,null,{component:this}),this.purgeEvents(),this.ice=null,this.ctx=null,this.root=null,this.evtBus=null,this.parentNode=null}}_defineProperty$1(ICEComponent,"instanceCounter",0);var F=ICEComponent,z=class ICEPath extends F{ensurePathBuilt(){const t=this.path2D&&this.path2D._commands;t&&0!==t.length&&!this.dirty||(this.createPathObject(),this.state.closePath&&this.path2D.closePath())}constructor(){super(_objectSpread2({closePath:!0},arguments.length>0&&void 0!==arguments[0]?arguments[0]:{})),_defineProperty$1(this,"path2D",I.createPath2D()),_defineProperty$1(this,"__flowRegistered",!1)}doRender(){this.dirty&&this.createPathObject(),this.state.closePath&&this.path2D.closePath();const t=this.path2D.drawable||this.path2D,e=this.state.lineDash,i=Array.isArray(e)&&e.length>0,s=this.state.lineDashFlow;if(s&&this.__ensureFlowAnimation(),this.state.lineBorder&&i&&this.state.stroke){const e=this.ctx;e.save(),e.setLineDash([]),e.lineWidth=(this.state.style.lineWidth||1)+2*(this.state.lineBorderWidth||4),e.strokeStyle=this.state.lineBorderColor||"#c8c8c8",this.path2D._isPolyfill?(this.replayPath(),e.stroke()):e.stroke(t),e.restore()}if(i&&"function"==typeof this.ctx.setLineDash)if(this.ctx.setLineDash(e),s&&"number"==typeof this.ctx.lineDashOffset){const t=e.reduce((t,e)=>t+e,0)||1,i=this.state.lineDashFlowSpeed||60;this.ctx.lineDashOffset=-Date.now()/1e3*i%t}else this.state.lineDashOffset&&(this.ctx.lineDashOffset=this.state.lineDashOffset);this.path2D._isPolyfill?(this.replayPath(),this.state.fill&&this.ctx.fill(),this.state.stroke&&this.ctx.stroke()):(this.state.fill&&this.ctx.fill(t),this.state.stroke&&this.ctx.stroke(t)),i&&"function"==typeof this.ctx.setLineDash&&this.ctx.setLineDash([]),super.doRender()}__ensureFlowAnimation(){this.__flowRegistered||(this.__flowRegistered=!0,this.props.animations=_objectSpread2(_objectSpread2({},this.props.animations),{},{__flow:{from:0,to:1,duration:100,loop:!0}}),this.ice&&this.ice.animationManager&&this.ice.animationManager.add(this))}replayPath(){const t=this.ctx;t.beginPath();const e=this.path2D._commands;for(let i=0;i<e.length;i++){const s=e[i];t[s[0]](...s.slice(1))}}},j=class ICERect extends z{constructor(){super(_objectSpread2({width:10,height:10},arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}))}createPathObject(){this.path2D=I.createPath2D();const t=0-this.state.localOrigin[0],e=0-this.state.localOrigin[1],i=this.state.width,s=this.state.height,o=Math.min(this.state.radius||0,i/2,s/2);return o>0?(this.path2D.moveTo(t+o,e),this.path2D.lineTo(t+i-o,e),this.path2D.arcTo(t+i,e,t+i,e+o,o),this.path2D.lineTo(t+i,e+s-o),this.path2D.arcTo(t+i,e+s,t+i-o,e+s,o),this.path2D.lineTo(t+o,e+s),this.path2D.arcTo(t,e+s,t,e+s-o,o),this.path2D.lineTo(t,e+o),this.path2D.arcTo(t,e,t+o,e,o),this.path2D.closePath()):this.path2D.rect(t,e,i,s),this.path2D}};class ICEGroup extends j{constructor(t){super(t),_defineProperty$1(this,"parentNode",null),_defineProperty$1(this,"childNodes",[]),_defineProperty$1(this,"__childSet",new WeakSet),_defineProperty$1(this,"layoutManager",null),_defineProperty$1(this,"__layoutExplicit",!1),_defineProperty$1(this,"__layoutRequested",!1),_defineProperty$1(this,"__layingOut",!1),_defineProperty$1(this,"__inBatch",!1)}setLayout(t){this.layoutManager=t,this.__layoutExplicit=!0,t&&(this.doLayout(),this.__disableTransformRecursively(this)),this.__propagateLayout(t)}__disableTransformRecursively(t){if(t&&t.childNodes)for(const e of t.childNodes)e.state.transformable=!1,e.state.draggable=!1,this.__disableTransformRecursively(e)}__propagateLayout(t){for(const e of this.childNodes)e instanceof ICEGroup&&!e.__layoutExplicit&&(e.layoutManager=t,e.doLayout(),e.__propagateLayout(t))}doLayout(){if(this.layoutManager){this.__layingOut=!0;try{for(let t=0;t<this.childNodes.length;t++){const e=this.childNodes[t];"function"==typeof e.measure&&e.measure()}this.layoutManager.layoutContainer(this)}finally{this.__layingOut=!1,this.__layoutRequested=!1}}}requestLayout(){this.layoutManager&&!this.__layingOut&&(this.__layoutRequested=!0,this.dirty=!0,this.ice&&(this.ice.dirty=!0))}getPreferredSize(){return this.layoutManager?this.layoutManager.getPreferredSize(this):[0,0]}doRender(){this.__layoutRequested&&this.doLayout(),super.doRender()}initEvents(){super.initEvents(),this.once(o,this.afterAddHandler,this)}afterAddHandler(){for(let t=0;t<this.childNodes.length;t++){const e=this.childNodes[t];this.syncChildEvents(e)}}syncChildEvents(t){t.trigger(s),t.ice=this.ice,t.ctx=this.ice.ctx,t.evtBus=this.ice.evtBus,t.trigger(o)}addChild(t){let e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.__childSet.has(t)||(t.parentNode=this,this.childNodes.push(t),this.__childSet.add(t),bumpVisibilityEpoch(),this.layoutManager&&(t.state.transformable=!1,t.state.draggable=!1,this.__disableTransformRecursively(t)),this.__applyDirty(e),this.ice&&(this.syncChildEvents(t),this.ice.dirty=e,this.ice.renderer&&this.ice.renderer.markQueueDirty()),this.layoutManager&&(t instanceof ICEGroup&&!t.__layoutExplicit&&(t.layoutManager=this.layoutManager),this.__inBatch||this.doLayout()))}addChildren(t){this.__inBatch=!0;try{for(let e=0;e<t.length;e++)this.addChild(t[e],!1)}finally{this.__inBatch=!1}this.dirty=!0,this.ice&&(this.ice.dirty=!0),this.doLayout()}adoptChild(t){let e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!t||t===this)return;const i=t.parentNode;if(i&&i!==this&&i.childNodes){const e=i.childNodes.indexOf(t);-1!==e&&i.childNodes.splice(e,1),i.__childSet&&"function"==typeof i.__childSet.delete&&i.__childSet.delete(t),t.parentNode=null,i.ice&&i.ice.renderer&&"function"==typeof i.ice.renderer.markQueueDirty&&i.ice.renderer.markQueueDirty()}else if(!i){const e=this.ice||t.ice;if(e&&Array.isArray(e.childNodes)){const i=e.childNodes.indexOf(t);-1!==i&&e.childNodes.splice(i,1),e.__childSet&&"function"==typeof e.__childSet.delete&&e.__childSet.delete(t),e.renderer&&"function"==typeof e.renderer.markQueueDirty&&e.renderer.markQueueDirty()}}this.addChild(t,e)}removeChild(t){let e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!this.__childSet.has(t))return;t.trigger(r);const i=this.childNodes.indexOf(t);-1!==i&&this.childNodes.splice(i,1),this.__childSet.delete(t),bumpVisibilityEpoch(),t.trigger(a),this.__applyDirty(e),this.ice&&(this.ice.dirty=e,this.ice.renderer&&this.ice.renderer.markQueueDirty()),t.destory(),this.layoutManager&&!this.__inBatch&&this.doLayout()}removeChildren(t){this.__inBatch=!0;try{for(let e=0;e<t.length;e++)this.removeChild(t[e],!1)}finally{this.__inBatch=!1}this.dirty=!0,this.ice&&(this.ice.dirty=!0),this.doLayout()}setState(t){const e=this.__beforeStateMerge(t);merge$1(this.state,t),this.paramsDirty=!0,this.dirty=!0,function setRecursively(t){if(t.dirty=!0,t.childNodes&&t.childNodes.length)for(let e=0;e<t.childNodes.length;e++)setRecursively(t.childNodes[e])}(this),this.ice&&(this.ice.dirty=!0),this.__afterStateMerge(e)}destory(){this.removeChildren(this.childNodes),super.destory()}}var X=ICEGroup;class ICEControlPanel extends X{constructor(t){super(_objectSpread2(_objectSpread2({},t),{},{linkable:!1})),_defineProperty$1(this,"isControlPanel",!0)}doRender(){super.doRender(),this.updateControlPositions()}moveGlobalPosition(t,e,i){super.moveGlobalPosition(t,e,i),this._targetComponent&&this._targetComponent.moveGlobalPosition(t,e,i)}}var H=class ICEEllipse extends z{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const e=_objectSpread2({radiusX:20,radiusY:10,rotation:0,startAngle:0,endAngle:2*Math.PI,counterclockwise:!0},t);void 0===t.radiusX&&void 0!==t.width&&(e.radiusX=Number(t.width)/2),void 0===t.radiusY&&void 0!==t.height&&(e.radiusY=Number(t.height)/2),e.width=2*e.radiusX,e.height=2*e.radiusY,super(e)}createPathObject(){return this.path2D=I.createPath2D(),this.path2D.ellipse(this.state.radiusX-this.state.localOrigin[0],this.state.radiusY-this.state.localOrigin[1],this.state.radiusX,this.state.radiusY,this.state.rotation,this.state.startAngle,this.state.endAngle,this.state.counterclockwise),this.path2D.closePath(),this.path2D}containsLocalPoint(t,e){const i=this.state.radiusX,s=this.state.radiusY;if(!i||!s)return!1;let o=t,r=e;const a=this.state.rotation||0;if(a){const i=Math.cos(a),s=Math.sin(a);o=t*i+e*s,r=-t*s+e*i}const l=o/i,h=r/s;return l*l+h*h<=1}setState(t){isNil$1(t.radiusX)?isNil$1(t.width)||(t.radiusX=t.width/2):t.width=2*t.radiusX,isNil$1(t.radiusY)?isNil$1(t.height)||(t.radiusY=t.height/2):t.height=2*t.radiusY,super.setState(t)}},W=class ICECircle extends H{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const e=_objectSpread2({radius:10},t);void 0===t.radius&&void 0!==t.width?e.radius=Number(t.width)/2:void 0===t.radius&&void 0!==t.height&&(e.radius=Number(t.height)/2),e.radiusX=e.radius,e.radiusY=e.radius,super(e)}};class ICELinkHook extends W{constructor(){super(_objectSpread2({linkable:!1},arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}))}initEvents(){super.initEvents(),this.on("mousedown",this.mosueDownHandler,this),this.on("mousemove",this.mosueMoveHandler,this),this.on("mouseup",this.mosueUpHandler,this),this.on(y,this.resizeEvtHandler,this)}keyboardEvtHandler(t){}mosueDownHandler(t){this.evtBus.trigger(h,new N({target:this}))}mosueMoveHandler(t){this.evtBus.trigger(c,new N({target:this}))}mosueUpHandler(t){this.evtBus.trigger(d,new N({target:this}))}resizeEvtHandler(t){if(!this.parentNode)return;const e=this.props.position;this.parentNode.trigger(u,new N(t,{position:e})),this.parentNode.trigger(p,new N(t,{position:e}))}}class LineControlPanel extends ICEControlPanel{constructor(t){super(_objectSpread2(_objectSpread2({},t),{},{zIndex:10001e3,linkable:!1,showMinBoundingBox:!1,showMaxBoundingBox:!1})),_defineProperty$1(this,"controlSize",16),this.initControls()}initControls(){const t=this.state.width,e=this.state.height,i=this.controlSize/2;this.startControl=new ICELinkHook({zIndex:10001001,display:!1,left:-i,top:-i,width:this.controlSize,height:this.controlSize,style:{strokeStyle:"#0c09d4",fillStyle:"#3ce92c",lineWidth:1},position:"start"}),this.addChild(this.startControl),this.endControl=new ICELinkHook({zIndex:10001002,display:!1,left:t-i,top:e-i,width:this.controlSize,height:this.controlSize,style:{strokeStyle:"#0c09d4",fillStyle:"#3ce92c",lineWidth:1},position:"end"}),this.addChild(this.endControl)}initEvents(){this.on(p,this.resizeEvtHandler,this)}enable(){this.setState({display:!0}),this.resume(p),this.showHooks()}disable(){this.setState({display:!1}),this.suspend(p),this.hideHooks()}updateControlPositions(){}resizeEvtHandler(t){if(!this.targetComponent)return;const e=t.position;let i=t.movementX,s=t.movementY;const o=this.targetComponent.state,r=o.points.length;let a=o.points[0][0],l=o.points[0][1],h=o.points[r-1][0],c=o.points[r-1][1];const d=transformMat2d([],[i,s],invert([],this.targetComponent.calcAbsoluteLinearMatrix()));switch(i=d[0],s=d[1],e){case"start":a+=i,l+=s;break;case"end":h+=i,c+=s}this.targetComponent.setState({startPoint:[a,l],endPoint:[h,c]})}updatePosition(){if(!this.targetComponent)return;this.setState({left:0,top:-5,width:3,height:3,transform:{translate:[0,0],scale:[1,1],skew:[0,0],rotate:0}});const t=this.controlSize/2,e=this.targetComponent.state.points.length,i=this.targetComponent.state.points[0],s=this.targetComponent.state.points[e-1],o=[i[0],i[1]],r=[s[0],s[1]];this.startControl.setState({left:o[0]-t,top:o[1]-t}),this.endControl.setState({left:r[0]-t,top:r[1]-t})}set targetComponent(t){this._targetComponent&&this._targetComponent.off(y,this.updatePosition,this),this._targetComponent=t,this._targetComponent&&this._targetComponent.on(y,this.updatePosition,this),this._targetComponent&&this._targetComponent.once(r,()=>{this.targetComponent=null,this.disable()},this),this.updatePosition()}get targetComponent(){return this._targetComponent}showHooks(){this.startControl.setState({display:!0}),this.endControl.setState({display:!0})}hideHooks(){this.startControl.setState({display:!1}),this.endControl.setState({display:!1})}}class ResizeControl extends j{constructor(t){super(_objectSpread2(_objectSpread2({position:"l",direction:"x",quadrant:1},t),{},{linkable:!1}))}initEvents(){super.initEvents(),this.on(y,this.resizeEvtHandler,this)}resizeEvtHandler(t){if(!this.parentNode)return;const{quadrant:e}=t;let i=t.movementX,s=t.movementY;const o=this.parentNode.state;let r=o.left,a=o.top,l=o.width,h=o.height;const c=transformMat2d([],[i,s],invert([],this.parentNode.calcAbsoluteLinearMatrix()));switch(i=c[0],s=c[1],e){case 1:r-=i,a+=s,l+=2*i,h-=2*s;break;case 2:r+=i,a+=s,l-=2*i,h-=2*s;break;case 3:r+=i,a-=s,l-=2*i,h+=2*s;break;case 4:r-=i,a-=s,l+=2*i,h+=2*s;break;case 5:a+=s,h-=2*s;break;case 6:a-=s,h+=2*s;break;case 7:r+=i,l-=2*i;break;case 8:r-=i,l+=2*i}const d={top:a,left:r,width:Math.abs(l),height:Math.abs(h)};this.parentNode.trigger(u,new N(t,{quadrant:e})),this.parentNode.setState(d),this.parentNode.trigger(p,new N(t,{quadrant:e}))}moveGlobalPosition(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new N;const s=t>0?1:-1,o=e>0?1:-1,r=this.parentNode.state.localOrigin,a=transformMat2d([],[t,e],invert([],this.parentNode.calcAbsoluteLinearMatrix()));t=a[0],e=a[1];let{left:l,top:h}=this.state;const{quadrant:c}=this.state,d=this.state.width/2;let u=0;"x"===this.state.direction?(l+=t,0===round(l)&&(l=.5*s),u=l+d-r[0]>0?8:7):"y"===this.state.direction?(h+=e,0===round(h)&&(h=.5*o),u=h+d-r[1]>0?6:5):"xy"===this.state.direction&&(l+=t,h+=e,u=l+d-r[0]>0?h+d-r[1]>0?4:1:h+d-r[1]>0?3:2),c!==u&&this.parentNode.toggleControlQuadrant(this,c,u),this.setPosition(l,h,new N(i,{left:l,top:h,tx:t,ty:e,quadrant:u}))}}class RotateControl extends W{constructor(t){super(_objectSpread2(_objectSpread2({},t),{},{linkable:!1}))}initEvents(){super.initEvents(),this.on(y,this.rotateEvtHandler,this)}rotateEvtHandler(t){if(!this.parentNode)return;const e=this.parentNode.calcAbsoluteOrigin();let i=GeoUtil.calcRotateAngle(t.offsetX,t.offsetY,e[0],e[1])+90;t&&t.shiftKey&&(i=function snapAngle(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:15;return e>0&&isFinite(t)?Math.round(t/e)*e:t}(i));const s={transform:{rotate:i}};this.parentNode.trigger(f,new N(s)),this.parentNode.setState(s),this.parentNode.trigger(g,new N(s))}}class TransformControlPanel extends ICEControlPanel{constructor(t){super(_objectSpread2(_objectSpread2({},t),{},{zIndex:10000001,linkable:!1,showMinBoundingBox:!1,showMaxBoundingBox:!1})),_defineProperty$1(this,"rotateControlSize",8),_defineProperty$1(this,"rotateControlOffsetY",60),_defineProperty$1(this,"resizeControlInstanceCache",[]),_defineProperty$1(this,"resizeControlSize",16),_defineProperty$1(this,"__onTargetRemoved",()=>{this.targetComponent=null,this.disable()}),this.initControls()}initControls(){const t=this.state.width,e=this.state.height,i=t/2,s=e/2,o=this.resizeControlSize/2,r=[{direction:"xy",quadrant:2,position:[-o,-o]},{direction:"y",quadrant:5,position:[i-o,-o]},{direction:"xy",quadrant:1,position:[t-o,-o]},{direction:"x",quadrant:8,position:[t-o,s-o]},{direction:"xy",quadrant:4,position:[t-o,e-o]},{direction:"y",quadrant:6,position:[i-o,e-o]},{direction:"xy",quadrant:3,position:[-o,e-o]},{direction:"x",quadrant:7,position:[-o,s-o]}];this.resizeControlInstanceCache=[];for(let t=0;t<r.length;t++){const e=r[t],i=new ResizeControl({zIndex:10000002,display:!1,left:e.position[0],top:e.position[1],width:this.resizeControlSize,height:this.resizeControlSize,style:{strokeStyle:"#8b0000",fillStyle:"#CC3300",lineWidth:1},direction:e.direction,quadrant:e.quadrant});this.addChild(i),this.resizeControlInstanceCache.push(i)}const a=this.state.width/2-this.rotateControlSize,l=-this.rotateControlOffsetY;this.rotateControlInstance=new RotateControl({zIndex:10000003,display:!1,left:a,top:l,radius:this.rotateControlSize,style:{strokeStyle:"#8b0000",fillStyle:"#CC3300",lineWidth:1}}),this.addChild(this.rotateControlInstance)}initEvents(){super.initEvents(),this.on(p,this.resizeEvtHandler,this),this.on(g,this.rotateEvtHandler,this),this.on("keydown",this.keyboardEvtHandler,this),this.on("keyup",this.keyboardEvtHandler,this)}enable(){this.rotateControlInstance.setState({display:!0});for(let t=0;t<this.resizeControlInstanceCache.length;t++)this.resizeControlInstanceCache[t].setState({display:!0});this.setState({display:!0}),this.resume(p),this.resume(g),this.resume("keydown"),this.resume("keyup")}disable(){this.rotateControlInstance.setState({display:!1});for(let t=0;t<this.resizeControlInstanceCache.length;t++)this.resizeControlInstanceCache[t].setState({display:!1});this.setState({display:!1}),this.suspend(p),this.suspend(g),this.suspend("keydown"),this.suspend("keyup")}keyboardEvtHandler(t){this.targetComponent&&this.targetComponent.trigger(t.type,t,{component:this.targetComponent})}rotateEvtHandler(t){if(!this.targetComponent)return;const{rotate:e}=this.state.transform;this.targetComponent.setGlobalRotate(e),this.targetComponent.trigger(g),this.updatePanel()}resizeEvtHandler(t){if(!this.targetComponent)return;const{quadrant:e}=t;let i=t.movementX,s=t.movementY;const o=this.targetComponent.state;let r=o.left,a=o.top,l=o.width,h=o.height;const c=transformMat2d([],[i,s],invert([],this.targetComponent.calcAbsoluteLinearMatrix()));switch(i=c[0],s=c[1],e){case 1:r-=i,a+=s,l+=2*i,h-=2*s;break;case 2:r+=i,a+=s,l-=2*i,h-=2*s;break;case 3:r+=i,a-=s,l-=2*i,h+=2*s;break;case 4:r-=i,a-=s,l+=2*i,h+=2*s;break;case 5:a+=s,h-=2*s;break;case 6:a-=s,h+=2*s;break;case 7:r+=i,l-=2*i;break;case 8:r-=i,l+=2*i}if(t&&t.shiftKey){const t=function applyAspectLock(t,e,i,s){const o=Math.abs(i),r=Math.abs(s);if(!(t>0&&e>0))return{width:o,height:r};const a=Math.max(o/t,r/e);return{width:t*a,height:e*a}}(o.width,o.height,l,h),e=a+h/2;r=r+l/2-t.width/2,a=e-t.height/2,l=t.width,h=t.height}this.targetComponent.setState({left:r,top:a,width:Math.abs(l),height:Math.abs(h)}),this.targetComponent.trigger(p),this.updatePanel()}updateControlPositions(){const t=this.state.width,e=this.state.height,i=t/2,s=e/2,o=this.resizeControlSize/2;for(let r=0;r<this.resizeControlInstanceCache.length;r++){const a=this.resizeControlInstanceCache[r];let l=[0,0];switch(a.state.quadrant){case 1:l=[t-o,-o];break;case 2:l=[-o,-o];break;case 3:l=[-o,e-o];break;case 4:l=[t-o,e-o];break;case 5:l=[i-o,-o];break;case 6:l=[i-o,e-o];break;case 7:l=[-o,s-o];break;case 8:l=[t-o,s-o]}a.setState({left:l[0],top:l[1]})}const r=this.state.width/2-this.rotateControlSize,a=-this.rotateControlOffsetY;this.rotateControlInstance.setState({left:r,top:a})}updatePanel(){if(!this.targetComponent)return;const t=this.targetComponent.getRotateAngle(!0),{left:e,top:i,width:s,height:o}=this.targetComponent.getLocalLeftTop(!0);this.setState({left:e,top:i,width:s,height:o,transform:{rotate:t}})}set targetComponent(t){const e=this._targetComponent;e&&(e.off(y,this.updatePanel,this),e.off(r,this.__onTargetRemoved,this)),this._targetComponent=t,t&&(t.on(y,this.updatePanel,this),t.on(r,this.__onTargetRemoved,this)),this.updatePanel()}get targetComponent(){return this._targetComponent}toggleControlQuadrant(t,e,i){for(let t=0;t<this.resizeControlInstanceCache.length;t++){const s=this.resizeControlInstanceCache[t];s.state.quadrant===i&&s.setState({quadrant:e})}t.setState({quadrant:i})}}var V=class ICEControlPanelManager{constructor(t){this.ice=t,this.transformControlPanel=new TransformControlPanel({left:500,top:100,width:100,height:100,style:{strokeStyle:"#8b0000",fillStyle:"rgba(255, 255, 49, 0.2)",lineWidth:1},transform:{rotate:45}}),this.ice.addTool(this.transformControlPanel),this.transformControlPanel.disable(),this.lineControlPanel=new LineControlPanel({left:700,top:50,width:100,height:100,style:{strokeStyle:"rgba(255, 255, 49, 0)",fillStyle:"rgba(255, 255, 49, 0)",lineWidth:1}}),this.ice.addTool(this.lineControlPanel),this.lineControlPanel.disable()}start(){return this.ice.evtBus.on("mousedown",this.mouseDownHandler,this),this}stop(){return this.ice.evtBus.off("mousedown",this.mouseDownHandler,this),this}mouseDownHandler(t){const e=t.target;if(!e.ice||!e.state.interactive||!e.state.transformable)return this.lineControlPanel.disable(),void this.transformControlPanel.disable();if(e&&(e.isControlPanel||e.parentNode&&e.parentNode.isControlPanel))return;const i=this.ice.setSelection([e]);this.lineControlPanel.disable(),this.transformControlPanel.disable(),i||(e.isLine?(this.lineControlPanel.targetComponent=e,this.lineControlPanel.enable()):(this.transformControlPanel.targetComponent=e,this.transformControlPanel.enable()))}},G=class AlignmentGuideManager{constructor(t){_defineProperty$1(this,"options",{threshold:3,hysteresis:1,edge:!0,center:!0,spacing:!0,guideStyle:{fillStyle:"#EC4899"},guideZIndex:10000010,guideWidth:1}),_defineProperty$1(this,"enabled",!1),_defineProperty$1(this,"active",null),_defineProperty$1(this,"snapping",!1),_defineProperty$1(this,"intentLeft",0),_defineProperty$1(this,"intentTop",0),_defineProperty$1(this,"cachedTargets",[]),_defineProperty$1(this,"engagedX",!1),_defineProperty$1(this,"engagedY",!1),_defineProperty$1(this,"guideX",null),_defineProperty$1(this,"guideY",null),this.ice=t}enable(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.options=_objectSpread2(_objectSpread2({},this.options),t),this.enabled||(this.enabled=!0,this.ice.evtBus.on("mousedown",this.__onMouseDown,this),this.ice.evtBus.on("mouseup",this.__onMouseUp,this)),this}disable(){return this.enabled?(this.enabled=!1,this.ice.evtBus.off("mousedown",this.__onMouseDown,this),this.ice.evtBus.off("mouseup",this.__onMouseUp,this),this.__detach(),this):this}isEnabled(){return this.enabled}setOptions(t){return this.options=_objectSpread2(_objectSpread2({},this.options),t),this}__onMouseDown(t){const e=t&&t.target;this.__isAlignmentParticipant(e)&&(this.__detach(),this.active=e,this.intentLeft=e.state.left,this.intentTop=e.state.top,this.cachedTargets=this.__computeTargets(),this.engagedX=!1,this.engagedY=!1,this.__ensureGuides(),e.on("mousemove",this.__onDrag,this))}__onDrag(t){if(!this.active||this.snapping)return;const e=t&&"number"==typeof t.movementX?t.movementX:0,i=t&&"number"==typeof t.movementY?t.movementY:0,s=this.ice.viewport?this.ice.viewport.scale:1;this.intentLeft+=e/s,this.intentTop+=i/s,this.snapping=!0,this.active.setState({left:this.intentLeft,top:this.intentTop});const o=this.__boxOf(this.active);if(this.snapping=!1,!o)return;const r=this.options.threshold/s,a=(this.options.threshold+this.options.hysteresis)/s,l=function computeSnap(t,e,i,s,o){const r={x:null,y:null},consider=t=>{if(!t)return;const e=r[t.axis];(!e||Math.abs(t.delta)<Math.abs(e.delta))&&(r[t.axis]=t)};for(const i of e)o.edge&&(consider({axis:"x",type:"edge",delta:i.minX-t.minX,guideValue:i.minX,guideStart:Math.min(t.minY,i.minY),guideEnd:Math.max(t.maxY,i.maxY)}),consider({axis:"x",type:"edge",delta:i.maxX-t.minX,guideValue:i.maxX,guideStart:Math.min(t.minY,i.minY),guideEnd:Math.max(t.maxY,i.maxY)}),consider({axis:"x",type:"edge",delta:i.minX-t.maxX,guideValue:i.minX,guideStart:Math.min(t.minY,i.minY),guideEnd:Math.max(t.maxY,i.maxY)}),consider({axis:"x",type:"edge",delta:i.maxX-t.maxX,guideValue:i.maxX,guideStart:Math.min(t.minY,i.minY),guideEnd:Math.max(t.maxY,i.maxY)}),consider({axis:"y",type:"edge",delta:i.minY-t.minY,guideValue:i.minY,guideStart:Math.min(t.minX,i.minX),guideEnd:Math.max(t.maxX,i.maxX)}),consider({axis:"y",type:"edge",delta:i.maxY-t.minY,guideValue:i.maxY,guideStart:Math.min(t.minX,i.minX),guideEnd:Math.max(t.maxX,i.maxX)}),consider({axis:"y",type:"edge",delta:i.minY-t.maxY,guideValue:i.minY,guideStart:Math.min(t.minX,i.minX),guideEnd:Math.max(t.maxX,i.maxX)}),consider({axis:"y",type:"edge",delta:i.maxY-t.maxY,guideValue:i.maxY,guideStart:Math.min(t.minX,i.minX),guideEnd:Math.max(t.maxX,i.maxX)})),o.center&&(consider({axis:"x",type:"center",delta:i.centerX-t.centerX,guideValue:i.centerX,guideStart:Math.min(t.minY,i.minY),guideEnd:Math.max(t.maxY,i.maxY)}),consider({axis:"y",type:"center",delta:i.centerY-t.centerY,guideValue:i.centerY,guideStart:Math.min(t.minX,i.minX),guideEnd:Math.max(t.maxX,i.maxX)}));if(o.spacing)for(let i=0;i<e.length;i++)for(let s=i+1;s<e.length;s++){const o=e[i],r=e[s],a=Math.min(o.centerX,r.centerX),l=Math.max(o.centerX,r.centerX);if(t.centerX>a&&t.centerX<l){const e=(o.centerX+r.centerX)/2;consider({axis:"x",type:"spacing",delta:e-t.centerX,guideValue:e,guideStart:Math.min(t.minY,o.minY,r.minY),guideEnd:Math.max(t.maxY,o.maxY,r.maxY)})}const h=Math.min(o.centerY,r.centerY),c=Math.max(o.centerY,r.centerY);if(t.centerY>h&&t.centerY<c){const e=(o.centerY+r.centerY)/2;consider({axis:"y",type:"spacing",delta:e-t.centerY,guideValue:e,guideStart:Math.min(t.minX,o.minX,r.minX),guideEnd:Math.max(t.maxX,o.maxX,r.maxX)})}}return r.x=r.x&&Math.abs(r.x.delta)<=i?r.x:null,r.y=r.y&&Math.abs(r.y.delta)<=s?r.y:null,r}(o,this.cachedTargets,this.engagedX?a:r,this.engagedY?a:r,this.options);if(l.x||l.y){const t=this.intentLeft+(l.x?Math.round(l.x.delta):0),e=this.intentTop+(l.y?Math.round(l.y.delta):0);this.active.setState({left:t,top:e}),this.engagedX=!!l.x,this.engagedY=!!l.y,this.__updateGuides(l)}else this.engagedX=!1,this.engagedY=!1,this.__hideGuides()}__onMouseUp(){this.__detach()}__detach(){this.active&&this.active.off("mousemove",this.__onDrag,this),this.active=null,this.intentLeft=0,this.intentTop=0,this.cachedTargets=[],this.engagedX=!1,this.engagedY=!1,this.__hideGuides()}__boxOf(t){const e=t.getMaxBoundingBox(!0);if(!e)return null;const i=e.getMinAndMaxPoint();return function toBox(t,e,i,s){return{minX:t,minY:e,maxX:i,maxY:s,centerX:(t+i)/2,centerY:(e+s)/2}}(i.minX,i.minY,i.maxX,i.maxY)}__computeTargets(){const t=this.ice.childNodes,e=[];for(const i of t){if(i===this.active)continue;if(!this.__isAlignmentParticipant(i))continue;const t=this.__boxOf(i);t&&e.push(t)}return e}__isAlignmentParticipant(t){return!(!(t&&t.state&&t.state.interactive&&t.state.draggable)||t.isLine||t.isControlPanel||t.parentNode&&t.parentNode.isControlPanel)}__ensureGuides(){const t=_objectSpread2({},this.options.guideStyle);this.guideX||(this.guideX=new j({left:0,top:0,width:1,height:1,display:!1,zIndex:this.options.guideZIndex,origin:"top-left",stroke:!1,style:t}),this.ice.addTool(this.guideX)),this.guideY||(this.guideY=new j({left:0,top:0,width:1,height:1,display:!1,zIndex:this.options.guideZIndex,origin:"top-left",stroke:!1,style:t}),this.ice.addTool(this.guideY))}__updateGuides(t){const e=this.options.guideWidth/(this.ice.viewport?this.ice.viewport.scale:1),[i,s]=this.ice.screenToWorld(0,0),[o,r]=this.ice.screenToWorld(this.ice.canvasWidth,this.ice.canvasHeight);t.x&&this.guideX?this.guideX.setState({display:!0,left:t.x.guideValue-e/2,top:s,width:e,height:r-s}):this.guideX&&this.guideX.setState({display:!1}),t.y&&this.guideY?this.guideY.setState({display:!0,left:i,top:t.y.guideValue-e/2,width:o-i,height:e}):this.guideY&&this.guideY.setState({display:!1})}__hideGuides(){this.guideX&&this.guideX.setState({display:!1}),this.guideY&&this.guideY.setState({display:!1})}};const Y=[["pointerdown","ICE_POINTERDOWN"],["pointermove","ICE_POINTERMOVE"],["pointerup","ICE_POINTERUP"],["pointercancel","ICE_POINTERCANCEL"]],K=[["mousedown","ICE_MOUSEDOWN"],["mouseup","ICE_MOUSEUP"],["mousemove","ICE_MOUSEMOVE"],["click","ICE_CLICK"],["dblclick","ICE_DBCLICK"],["contextmenu","ICE_CONTEXTMENU"]],U=[["click","ICE_CLICK"],["dblclick","ICE_DBCLICK"],["contextmenu","ICE_CONTEXTMENU"]],q=[["touchstart","ICE_TOUCHSTART"],["touchmove","ICE_TOUCHMOVE"],["touchend","ICE_TOUCHEND"],["touchcancel","ICE_TOUCHCANCEL"]],J=[["wheel","ICE_WHEEL"]],Q=[["keydown","ICE_KEYDOWN"],["keyup","ICE_KEYUP"]],Z=["ICE_MOUSEMOVE","ICE_POINTERMOVE","ICE_TOUCHMOVE"];function buildDomEventList(t){const e=[];return t?e.push(...Y,...U):e.push(...K,...q),e.push(...J,...Q),e}function isTouchEvent(t){return!!t&&"string"==typeof t.type&&0===t.type.indexOf("touch")}function normalizeInput(t,e,i){const s=function resolveClientPoint(t){if(!t)return null;if(isTouchEvent(t)){const e=(t.touches&&t.touches.length?t.touches:t.changedTouches)||null,i=e&&e[0];return i&&"number"==typeof i.clientX?{clientX:i.clientX,clientY:i.clientY}:null}return"number"==typeof t.clientX&&"number"==typeof t.clientY?{clientX:t.clientX,clientY:t.clientY}:null}(t);if(!s)return null;const o=e&&"number"==typeof e.left?e.left:0,r=e&&"number"==typeof e.top?e.top:0,a=s.clientX-o,l=s.clientY-r;let h=Number(t.movementX),c=Number(t.movementY);isFinite(h)&&isFinite(c)||(i?(h=a-i.x,c=l-i.y):(h=0,c=0));const d=isTouchEvent(t);return{x:a,y:l,clientX:s.clientX,clientY:s.clientY,movementX:h,movementY:c,pointerType:t.pointerType||(d?"touch":"mouse"),pointerId:"number"==typeof t.pointerId?t.pointerId:-1,button:"number"==typeof t.button?t.button:0,buttons:"number"==typeof t.buttons?t.buttons:0,isPrimary:!1!==t.isPrimary,isTouch:d,shiftKey:!!t.shiftKey,ctrlKey:!!t.ctrlKey,altKey:!!t.altKey,metaKey:!!t.metaKey}}function applyNormalizedInput(t,e){t&&e&&(t.offsetX=e.x,t.offsetY=e.y,t.clientX=e.clientX,t.clientY=e.clientY,t.movementX=e.movementX,t.movementY=e.movementY,t.pointerType=e.pointerType,t.pointerId=e.pointerId,t.isTouchInput=e.isTouch,t.shiftKey=e.shiftKey,t.ctrlKey=e.ctrlKey,t.altKey=e.altKey,t.metaKey=e.metaKey)}function toLegacyMouseName(t){switch(t){case"pointerdown":case"touchstart":return"mousedown";case"pointermove":case"touchmove":return"mousemove";case"pointerup":case"touchend":case"pointercancel":case"touchcancel":return"mouseup";default:return null}}const tt={sm:5,md:13,lg:26};function stylePaintPad(t){const e=t&&t.style||{};let i=2;const s=Number(e.lineWidth)||0,o=Number(t.lineBorderWidth)||0,r=Math.ceil(Math.max(s,o));r>0&&(i+=r);const a=Number(e.shadowBlur);return a>0?i+=a+Math.max(Math.abs(Number(e.shadowOffsetX)||0),Math.abs(Number(e.shadowOffsetY)||0)):"string"==typeof e.shadow&&tt[e.shadow]&&(i+=tt[e.shadow]),i}function boxArea(t){return function boxWidth(t){return t[2]-t[0]}(t)*function boxHeight(t){return t[3]-t[1]}(t)}function unionBoxes(t,e){return e[0]<t[0]&&(t[0]=e[0]),e[1]<t[1]&&(t[1]=e[1]),e[2]>t[2]&&(t[2]=e[2]),e[3]>t[3]&&(t[3]=e[3]),t}function intersects(t,e){return!(t[0]>e[2]||t[2]<e[0]||t[1]>e[3]||t[3]<e[1])}function isFiniteBox(t){return isFinite(t[0])&&isFinite(t[1])&&isFinite(t[2])&&isFinite(t[3])}function integerAlign(t){return t[0]=Math.floor(t[0]),t[1]=Math.floor(t[1]),t[2]=Math.ceil(t[2]),t[3]=Math.ceil(t[3]),t}function mergeBox(t,e){return[Math.min(t[0],e[0]),Math.min(t[1],e[1]),Math.max(t[2],e[2]),Math.max(t[3],e[3])]}function isWorthMerging(t,e){const i=boxArea(t)+boxArea(e);return i<=0||boxArea(mergeBox(t,e))<=2*i}function mapBoxToRender(t,e,i){const s=i||[0,0,0,0];return s[0]=Math.floor(t[0]*e.scale+e.tx),s[1]=Math.floor(t[1]*e.scale+e.ty),s[2]=Math.ceil(t[2]*e.scale+e.tx),s[3]=Math.ceil(t[3]*e.scale+e.ty),s}const et=/(rgba|hsla)\(|transparent|#[0-9a-fA-F]{8}|opacity/i;function isOpaqueDrawing(t){const e=t&&t.style||{};if(t&&void 0!==t.opacity&&1!==t.opacity)return!1;if(void 0!==e.globalAlpha&&1!==e.globalAlpha)return!1;if(e.globalCompositeOperation&&"source-over"!==e.globalCompositeOperation)return!1;if(e.shadow||(Number(e.shadowBlur)||0)>0)return!1;for(const t of["fillStyle","strokeStyle"]){const i=e[t];if("string"==typeof i&&et.test(i))return!1}return!0}var it=class DOMEventDispatcher{constructor(t){_defineProperty$1(this,"selectionCandidates",[]),_defineProperty$1(this,"_stopped",!1),_defineProperty$1(this,"__lastInput",null),_defineProperty$1(this,"focusedComponent",null),this.ice=t}start(){let t=null;const e=buildDomEventList("function"==typeof I.PointerEvent);for(let i=0;i<e.length;i++){const s=e[i],o=s[0],r=s[1],a=toLegacyMouseName(o);this.ice.evtBus.on(r,e=>{if(this._stopped)return;const i=e.originalEvent||e;this.__handlePointerCapture(r,i);const s=normalizeInput(i,this.__resolveCanvasRect(o),this.__lastInput);s&&(applyNormalizedInput(e,s),this.__lastInput=s);const l=-1!==Z.indexOf(r),h=-1!==r.indexOf("KEY"),c="ICE_WHEEL"===r;
28
28
  //! 移动类事件触发频率极高,不执行 findTargetComponent();
29
29
  //! 键盘事件必须先选中组件再派发才有意义,同样不做命中检测。
30
- l||h||c||(t=this.findTargetComponent(e));let d=t;c?d=null:h&&this.focusedComponent&&(d=this.focusedComponent),this.__dispatch(o,e,d),a&&a!==o&&this.__dispatch(a,e,d)})}return this}__handlePointerCapture(t,e){const i=this.ice.canvasEl;if(!i||"function"!=typeof i.setPointerCapture)return;const s=e&&e.pointerId;if("number"==typeof s)try{if("ICE_POINTERDOWN"===t){const t=e&&e.target;if(t&&t!==i&&(!i.contains||!i.contains(t)))return;i.setPointerCapture(s)}else"ICE_POINTERUP"!==t&&"ICE_POINTERCANCEL"!==t||"function"==typeof i.releasePointerCapture&&i.hasPointerCapture&&i.hasPointerCapture(s)&&i.releasePointerCapture(s)}catch(t){}}__dispatch(t,e,i){i&&(e.target=i,i.trigger(t,e)),this.ice.evtBus.trigger(t,e,{component:i})}__resolveCanvasRect(t){const e="pointermove"===t||"mousemove"===t||"touchmove"===t,i=this.ice;return e&&i&&"function"==typeof i.refreshInputRect?i.refreshInputRect():i&&"function"==typeof i.updateCanvasBoundingRect&&i.updateCanvasBoundingRect(),i&&"function"==typeof i.getInputRect?i.getInputRect():i&&i.canvasBoundingClientRect||null}set stopped(t){this._stopped=t}get stopped(){return this._stopped}findTargetComponent(t){if(this._stopped)return null;const{offsetX:e,offsetY:i}=t;if("number"!=typeof e||"number"!=typeof i)return null;const[s,o]=this.ice.screenToWorld(e,i);return hitTestComponents(this.ice,s,o,1)}};const st={evtBuses:[],__handlers:null,__hasPointerEvent:!1,start:function(){if(!T||!T.addEventListener||st.__handlers)return;const t="function"==typeof T.PointerEvent;st.__hasPointerEvent=t;const e=buildDomEventList(t),i=[];for(let t=0;t<e.length;t++){const s=e[t],handler=t=>{for(let e=0;e<st.evtBuses.length;e++)st.evtBuses[e].trigger(s[1],t)},o="wheel"===s[0]||"touchmove"===s[0]?{passive:!1}:void 0;o&&"function"==typeof T.addEventListener?T.addEventListener(s[0],handler,o):T.addEventListener(s[0],handler),i.push({name:s[0],handler:handler})}st.__handlers=i},stop:function(){if(st.__handlers&&T&&T.removeEventListener)for(let t=0;t<st.__handlers.length;t++){const e=st.__handlers[t];T.removeEventListener(e.name,e.handler)}st.__handlers=null},registerEvtBus:function(t){st.evtBuses.includes(t)||st.evtBuses.push(t)},delEvtBus:function(t){st.evtBuses.includes(t)&&(st.evtBuses.splice(st.evtBuses.indexOf(t),1),0===st.evtBuses.length&&st.stop())}};var nt=st,ot=class EventBus extends D{constructor(){super()}};class GeoLine{constructor(t,e){this.startPoint=t,this.endPoint=e}contains(t,e){const i=Math.hypot(this.endPoint.x-this.startPoint.x,this.endPoint.y-this.startPoint.y),s=Math.hypot(t-this.startPoint.x,e-this.startPoint.y),o=Math.hypot(t-this.endPoint.x,e-this.endPoint.y);return s+o>=i-3&&s+o<=i+3}}class GeoPoint{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;this.x=t,this.y=e}static load(t){return new GeoPoint(Number(t.x),Number(t.y))}static cloneArray(t){const e=[];for(let i=0;i<t.length;i++)e.push(t[i].clone());return e}equals(t){return this.x==t.x&&this.y==t.y}clone(){return new GeoPoint(this.x,this.y)}}class ICEDotPath extends z{constructor(t){super(_objectSpread2({dots:[],closePath:!0},t)),_defineProperty$1(this,"__dotsShiftX",0),_defineProperty$1(this,"__dotsShiftY",0)}calcComponentParams(){if(!this.paramsDirty)return{width:this.state.width,height:this.state.height};this.calcDots();const t=this.calc4VertexPoints(),e=Math.abs(t[1][0]-t[0][0]),i=Math.abs(t[2][1]-t[0][1]);return this.state.width=e,this.state.height=i,{width:this.state.width,height:this.state.height}}containsLocalPoint(t,e){const i=this.state.dots;return!i||i.length<3?super.containsLocalPoint(t,e):GeoUtil.pointInPolygon(t,e,i)}calcLocalOrigin(){const t=super.calcLocalOrigin(),e=-t[0]-this.__dotsShiftX,i=-t[1]-this.__dotsShiftY;if(0!==e||0!==i){const s=[1,0,0,1,e,i];for(let t=0;t<this.state.dots.length;t++)this.state.dots[t]=transformMat2d([],this.state.dots[t],s);this.__dotsShiftX=-t[0],this.__dotsShiftY=-t[1]}return t}createPathObject(){this.ensureDots(),this.path2D=T.createPath2D(),this.path2D.moveTo(this.state.dots[0][0],this.state.dots[0][1]);for(let t=1;t<this.state.dots.length;t++){const e=this.state.dots[t];this.path2D.lineTo(e[0],e[1])}return this.path2D}calcDots(){return this.__dotsShiftX=0,this.__dotsShiftY=0,this.__calcDots()}__calcDots(){return this.state.dots=[],this.state.dots}ensureDots(){this.state.dots&&0!==this.state.dots.length||this.calcDots()}calc4VertexPoints(){this.ensureDots();let t=this.state.dots[0][0],e=this.state.dots[0][1],i=this.state.dots[0][0],s=this.state.dots[0][1];for(let o=1;o<this.state.dots.length;o++){const r=this.state.dots[o];r[0]<t&&(t=r[0]),r[0]>i&&(i=r[0]),r[1]<e&&(e=r[1]),r[1]>s&&(s=r[1])}return[[t,e],[i,e],[t,s],[i,s]]}getTransformedDots(){const t=this.state.composedMatrix,e=this.state.dots,i=[];for(let s=0;s<e.length;s++){const o=transformMat2d([],e[s],t);i.push(o)}return i}}var rt=class ICEImage extends F{constructor(){super(_objectSpread2({width:100,height:100,src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALkAAAC2CAYAAACF+yyJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAtoSURBVHhe7Z3tj15FHYb9VxUVo7zFUBWC8YXoF9++GENMRAWRKAkxGj8pihpjFBVF1CBlKaUU+wK0pYVqt12fn+6xs7PXnDPzO3O2Z+a5r+T6ss995nm2vXf3vM68570vXNuTsmdVctm9KrnsXpVcdq9KLrtXJZfdq5LL7lXJZfeq5LJ7VXLZvSq57F6VXHavSi67VyWX3auSy+5VyWX3quSye1Vy2b0quexelVx2r0ouu1cll92rksvuVcll96rksntVctm9KrnsXpVcdq9KLrtXJZfdq5LL7lXJZfeq5LJ7VfIjcIy7j/M2sp4q+YKWQNvLOqrkC+nhodO7OJacp0q+gHO4/2UVvbYqeWXH+O2lG3sf29nd++Eb1/e/wtC40q9KXtGfX+Dy3v4PzpspKCt9quQVJSgXS1BO+lTJK0pQLvab/zz8F+CjL3FWlquSV/KBE7v79bwJ5VISlJPlquSV/AXsj1MuJUE5Wa5KXsmfvKWSr1WVvJJ2BiWGciljLm/2figny1XJK0pQLvbS4d15zEmfKnlFicfPXsdsKEE56VMlr+hdx7mwqV2P75/ji0dvboahvPSpkle2BjSu9KuSL+AcaDw5T5V8IT3QOHK+KvmCni/oOm0v66iSO/zz5Rv71cwr56Nn+ADzmUs3MB8bQq/LcVVyhzHvg0wsQbnYmCfPTZ+SlAdVyQv92mm4crPhzokHkgnKhaagrEyrkjtM8eAr6UfXCMoNpqCsHFcld5rC7g3PzVPOTPHZkR8imbbpkqeg7BKm+NXFw0Un4swH4CavgTuOaH6Wd/gYGbOt2GTJc8k5IJxrileuHjxzQoSv37uTHutWfh8x9zU4m0BTJd959+apu1z+tdmExgoN+euVvNN6oSnCe1aI4bUvneKDWWPI5PrhFw++F2VC6dG7HGistdpMyc/9u7zgA/bfSGMOxlBmyhT2qVOv29efSNykZYTj5xrz2Jn0KcdvOQs+QGOu0SZKbn+u5/LAyJ/ZGO/uQSnPvp3+waXxc4x57nL6L9Ncnh0Ze002UfIUlDVTUNYkKJdjDWjcHD938vBuD+XMFJQ1U1B2ba6+5HZWgaBsKPFwhdN7Oc6BxsuVoJxJUC6UuJi4V35Nrr7kBOVIYk6uRA80TonEnBxJUG5NquQbbZLNGMqVWgJtX2rMcNA7lTMoR9JRBOXWZHMlt4d+KUc+VTBNRIydzaFcqTnQdqXeVjBbAEE5ki5YUW5NNlfy+CLLmN876y+5QTmPYyc/Ke+RoJxJUC5lDGXWpHZX9iUo55WgnFeCciZBOfL5K4d/ZCm3JlXyfR+BBxso55WgnFeCciZBOZKg3Jpcfcl/nJiwnrKhqWt5x3byLwr98kK9BxQIynmNscn+KWemoGxo6uIVZdfk6ktupqCseW1sJ3gf2o6gnEeCch4vwPCUy4G2M/8OuykGZddmEyW3ZUjG+PSJ3f9etr+eUe6Y8H2I8PU5EpTzSISv0370FF8+tbv38c1fA/oBCgnfZ602UXJzSexGJXsPe7A4Jv4cXgnKeSTs6zXu+Rkj/hxrtZmSm15yt6Xc11+vc/80QTmPMXb7Qg60bS7xZ1izTZXcLLmn/Orm/zrc1vubLRzDK0G5Un9zsXxXxB7GDsewSUlLCLdtweZKPjh2f/m7Ublj/zhyiytBY5RKUK7UEuy7pjEGfwZXiENomxZstuQ1zIW2LfE1ezwpAeVLzIW23Ra3uuSDOdB2U9rzkDn8yfnwQQ73ahU5/SYv4Y3NJjQO6eGDI4vahqYmOBpjm5dM3KqSp66elnL3yPQQNaBxB2twttIdlq3YfcmXJHyfF96ZPpgdzvb84HzeD1s4/pJ8pvNJi7or+e8Lz5wQdrXPxqIFaGNy/zbEn9PM4W8ZVyvte7bxPhRNR+Hh7YL79Vuxq5J7ic+nx6ZmlcqBxoudA403+LuJ2yHGoPFadWtL/qnNb2kaY8wShlsFch2bIo6gMcYsvRBmD5zQOC26NSWvdbD1/oky2k1itF2uT8Py5SHfrVS+qYNw2qZVuyq5FSDkngVPmxGU80pQrpYhdqsyZVq1uwPPo5KgnFeCcnJaldwpQTmvBOXktCq5U4JyXgnKyWlVcqcE5bwSlJPTquROCcp5JSgnp1XJnRKU80pQTk6rkjslKOeVoJycViV3SlDOK0E5Oa1K7pSgnFeCcnJaldwpQTmvBOXktF2VPL6sP/Zww1wJynklKFfLkKm7Mluzq5KPUesGram7Be3mVtou119PTDGhG7TK3ZqSx3xy4VttHx1ZWpC05ztLoDHG1K22nehl6mkYPTTRtt0deP6hwuNvX3z1f7/l7bf9FLmTjMaf08zBVoiewiZLsvFqPP4WriLdi92VPPQoJ7zMeZB5WAJdDzIfrV2XPLbWlBR3aUqKptyqkseWcqagHB40udAybnXJB3Og7ab8ROY0cXaASNtPmXM4oGni9Js8C9q2xFOa8POW2mzJbdchhZ3yo20GS8/A0BilEpQrtQT7rmmMQVsIbAzapgWbK/lLmoT/gJ5J+L/62sGzKY/B8o5jhNu2YFMl95K7LeVaXE7lG6/nlZa2zSX+DGu2mZIvyTDbFV0hjD+HV4JyHgn7+lFeJ1izTZQ8Z4lDuzqpJQ5vEr6ec9U05guv7u7d//Lu3lsTPyfh+6zVJkqegrLmyDHp/6HtCMp5JCjn8SgWq039oFB2ba6+5LWXHS9ZjrvlZceP7XDOTEHZ0NRZKcquydWXnKAcSVDOfATOMFDOK0E5rwTlTIJyJEG5NamS70tQzitBOa8E5UyCcuRzlw//Nqfcmmyu5Ceu5l8Ctxv/YyhnEpTzOHZCj/IeCcqZBOVSxlBmTTZX8pLlPmjxVcqZMbYYLuVKzYG2K5XmTaecSVCOLHmftajdlY12qiyGcqWWQNuXGmM7Fjk5g3IkHXpSbk2q5AW5Ej3QOCUSc3IkQbk1ufqS33Hc9w9LfDuxjg9BuVznQOPlSlDOJCgXStg5esquydWX3ExBWTMFZU2CcjnWgMbN8fMn83e7UlDWTEHZtdlEyUtXRiPGpqCIsXs+KDdlKc+PXG6n8XOMsVN+lDPnYldBady12UTJTVvX3kvqAGwwhjJTphjem7CvP3EufYIxHD/XmO+MzP9iN6bNgcZco82U3Bx7wibF1AMUZshfRn7zpUxxJXhvYnjtK6fSj8kNmVzvjI5hKBP6sLPoNNZabarkg7l4dztKTHEyumhFhK8f20kX/VZ+HzH23Cptv2abLPlgCsouYQqbzzAnG2duHzn2+MiLB7NLaWt4Ekfxg7aUTZf8VpoitQ9MUM5M4VkqXarkLlM8ODITFUG5wRSUleOq5IWmJvaxAz7KDxKUC01BWZlWJXcYcxtkYgnKxcY8ea7egxzbokruMLynml6PtbnKiWcyZ84KodfluCr5gp5P73EcgraXdVTJF9IDjSPnq5Iv4BxoPDlPlbyyNaBxpV+VvKK2pCJxaZeL+zg8g2q8uRmG8tKnSl5RImdJQoJy0qdKXlGCcrEX4foS5aRPlbySdHMV5VLGlMxKIMdVySv504LpL0iCcrJclbyStEoD5VISlJPlquSVpIVtKZeSoJwsVyWvKEG5WHrWcpuXJKytSl5RgnKxBOWkT5W8ok8nVk+zNe8pb6agrPSpkld2DLu11hYB+NHE8uc0rvSrki/gHO5r8Gn4tauSL6SHh06r4Euoki9oCbS9rKNKfgSOcY9OFS6uSi67VyWX3auSy+5VyWX3quSye1Vy2b0quexelVx2r0ouu1cll92rksvuVcll96rksntVctm9KrnsXpVcdq9KLrtXJZfdq5LL7lXJZfeq5LJ7VXLZvSq57F6VXHavSi67VyWX3auSy+5VyWX3quSye1Vy2b0quezca3v/AeMnvtkH1pHJAAAAAElFTkSuQmCC",clipType:"none",sx:0,sy:0,sw:0,sh:0},arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}))}doRender(){if(this.state.src){const{loaded:t,image:e}=this.ice.imageCache.setImage(this.state.src);if(t){const t=this.ctx,i=this.state.clipType||"none",s=0-this.state.localOrigin[0],o=0-this.state.localOrigin[1],{sx:r,sy:a,sw:l,sh:h}=this.state,c=l>0&&h>0;"circle"===i&&(t.save(),t.beginPath(),t.arc(0,0,Math.min(this.state.width,this.state.height)/2,0,2*Math.PI),t.closePath(),t.clip()),c?t.drawImage(e,r,a,l,h,s,o,this.state.width,this.state.height):t.drawImage(e,s,o,this.state.width,this.state.height),"circle"===i&&t.restore()}}super.doRender()}};class ICEPolyLine extends ICEDotPath{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(ICEPolyLine.arrangeParam(t)),_defineProperty$1(this,"isLine",!0),_defineProperty$1(this,"__polyBoxScratch",[0,0,0,0]),_defineProperty$1(this,"__arrowFaceIndexes",[])}containsLocalPoint(t,e){const i=this.state.dots;if(!i||i.length<2)return super.containsLocalPoint(t,e);const s=Math.max(4,(this.state.lineWidth||1)/2+3);return GeoUtil.distanceToPolyline(i,t,e)<=s}static arrangeParam(t){let e=merge$1({},{lineType:"solid",lineWidth:1,arrow:"none",arrowLength:15,arrowAngel:toRadian(30),arrowStyle:"filled",points:[],showMinBoundingBox:!1,showMaxBoundingBox:!1,links:{},routeType:"straight",routeOffset:20,curveType:"straight",label:"",labelStyle:{fontSize:14,fillStyle:"#000000",backgroundColor:"#ffffff"},style:{lineJoin:"round"}},t,{linkable:!1,closePath:!1,fill:!1});const i=e.points.length;return i<2&&(0===i?(e.points.push([0,0]),e.points.push([10,10])):1===i&&e.points.push([10,10])),"dashed"!==e.lineType||e.lineDash&&0!==e.lineDash.length||(e.lineDash=[4*e.lineWidth,4*e.lineWidth]),e=_objectSpread2(_objectSpread2({},e),{left:e.points[0][0],top:e.points[0][1],transform:{translate:[0,0],scale:[1,1],skew:[0,0],rotate:0}}),e.style.lineWidth<1&&(e.style.lineWidth=1),e}initEvents(){super.initEvents(),this.once(o,this.afterAddHandler,this)}afterAddHandler(t){this.evtBus.once(l,this.syncConnections,this)}syncConnections(){if(!this.ice)return;this.removeLink("start"),this.removeLink("end");const t=this.state.links;t&&(t.start&&t.start.id&&t.start.position&&this.createLink(t.start.id,t.start.position),t.end&&t.end.id&&t.end.position&&this.createLink(t.end.id,t.end.position)),this.paramsDirty=!0,this.dirty=!0,this.ice.dirty=!0}createLink(t,e){const i=this.ice.findComponent(t);i&&i.on(y,this.followComponent,this),i&&i.on(p,this.followComponent,this),i&&i.on(g,this.followComponent,this),i&&this.followComponent(),this.state.draggable=!1}removeLink(t,e,i){if(!this.state.links||!this.state.links[t])return;const s=this.state.links[t].id,o=this.state.links[t].position;if(e||(e=s),i||(i=o),s===e&&o===i){const t=this.ice.findComponent(s);t&&t.off(y,this.followComponent,this),t&&t.off(p,this.followComponent,this),t&&t.off(g,this.followComponent,this)}let r=!0;this.state.links.start&&this.state.links.start.id&&(r=!1),this.state.links.end&&this.state.links.end.id&&(r=!1),this.state.draggable=r}getLinkFromId(){return this.state.links.start.id}getLinkToId(){return this.state.links.end.id}followComponent(t){for(const t in this.state.links){if(!this.state.links[t]||!this.state.links[t].id||!this.state.links[t].position)continue;const e=this.state.links[t].id,i=this.state.links[t].position,s=this.ice.findComponent(e);if(!s)continue;const o=s.getMinBoundingBox(!0);let r=[0,0];switch(i){case"T":r=o.tc;break;case"R":r=o.rc;break;case"B":r=o.bc;break;case"L":r=o.lc;break;case"C":r=o.center}switch(t){case"start":this.setState({startPoint:[...r]});break;case"end":this.setState({endPoint:[...r]})}}}calcLocalOrigin(){const t=[0,0];return this.state.localOrigin=t,t}__calcDots(){const t=this.state.left,e=this.state.top;this.state.dots=[];for(let i=0;i<this.state.points.length;i++){const s=this.state.points[i],o=s[0]-t,r=s[1]-e;this.state.dots.push([o,r])}return this.calcArrowPoints(),this.state.dots}calcArrowPoints(){if(this.__arrowFaceIndexes.length=0,"start"===this.state.arrow||"both"===this.state.arrow){const t=[...this.state.dots[0]];let e=[[...this.state.dots[0]],[...this.state.dots[1]]];e=this.doCalcArrowPoints(e),this.state.dots.unshift(...e),this.state.dots.unshift([...t]),this.__arrowFaceIndexes.push(0)}if("end"===this.state.arrow||"both"===this.state.arrow){const t=this.state.dots.length,e=[...this.state.dots[t-1]];let i=[[...this.state.dots[t-1]],[...this.state.dots[t-2]]];i=this.doCalcArrowPoints(i),this.state.dots.push(...i),this.state.dots.push([...e]),this.__arrowFaceIndexes.push(this.state.dots.length-4)}}doCalcArrowPoints(t){const e=t[0],i=t[1];i[0]=i[0]-e[0],i[1]=i[1]-e[1];const s=Math.hypot(i[0],i[1]);if(0===s)return[[e[0],e[1]],[e[0],e[1]]];const o=i[0]/s,r=i[1]/s,a=Math.cos(this.state.arrowAngel),l=Math.sin(this.state.arrowAngel);let h=this.state.arrowLength*(o*a-r*l),c=this.state.arrowLength*(r*a+o*l),d=this.state.arrowLength*(o*a+r*l),u=this.state.arrowLength*(r*a-o*l);return h+=e[0],c+=e[1],d+=e[0],u+=e[1],[[h,c],[d,u]]}addDot(t,e){this.state.points.splice(e,0,t),this.state.dots.splice(e,0,[t[0],t[1]])}rmDot(t){return!(this.state.points.length<3||(this.state.points.splice(t,1),this.state.dots.splice(t,1),0))}calcComponentParams(){if(!this.paramsDirty)return{width:this.state.width,height:this.state.height};this.calcDots();const t=this.calc4VertexPoints();let e=1/0,i=1/0,s=-1/0,o=-1/0;for(let r=0;r<t.length;r++){const a=t[r];a[0]<e&&(e=a[0]),a[0]>s&&(s=a[0]),a[1]<i&&(i=a[1]),a[1]>o&&(o=a[1])}return this.state.width=Math.abs(s-e),this.state.height=Math.abs(o-i),{width:this.state.width,height:this.state.height}}isDotsOnSameLine(){const t=this.state.points.length,e=round(this.state.points[0][0],2),i=round(this.state.points[0][1],2);let s=0;const o=[round(this.state.points[t-1][0],2)-e,round(this.state.points[t-1][1],2)-i];for(let r=0;r<t;r++){const t=this.state.points[r];0===cross([],o,[t[0]-e,t[1]-i])[2]&&s++}return s===t}calc4VertexPoints(){return this.isDotsOnSameLine()?this.splitEndpointsTo4Points():super.calc4VertexPoints()}splitEndpointsTo4Points(){const t=this.state.points.length,e=this.state.points[t-1][0]-this.state.points[0][0],i=this.state.points[t-1][1]-this.state.points[0][1],s=this.getRotateAngle(),o=this.state.style.lineWidth||1;let r=Math.cos(s*Math.PI/180)*o/2,a=Math.sin(s*Math.PI/180)*o/2;return r=round(r,3),a=round(a,3),[[0+r,0+a],[0-r,0-a],[e+r,i+a],[e-r,i-a]]}__localBox(){const t=this.__polyBoxScratch;this.ensureDots();const e=this.state.dots;if(!e||0===e.length)return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t;const i=this.calc4VertexPoints();let s=1/0,o=1/0,r=-1/0,a=-1/0;for(let t=0;t<i.length;t++){const e=i[t];e[0]<s&&(s=e[0]),e[0]>r&&(r=e[0]),e[1]<o&&(o=e[1]),e[1]>a&&(a=e[1])}const l=this.__arrowFaceIndexes;for(let t=0;t<l.length;t++){const i=l[t];for(let t=0;t<3;t++){const l=e[i+t];l&&(l[0]<s&&(s=l[0]),l[0]>r&&(r=l[0]),l[1]<o&&(o=l[1]),l[1]>a&&(a=l[1]))}}const h=this.__measureLabelBoxForBounds();return h&&(h.x-h.halfW<s&&(s=h.x-h.halfW),h.x+h.halfW>r&&(r=h.x+h.halfW),h.y-h.halfH<o&&(o=h.y-h.halfH),h.y+h.halfH>a&&(a=h.y+h.halfH)),t[0]=s,t[1]=o,t[2]=r,t[3]=a,t}setState(t){if(isNil$1(t.width)||delete t.width,isNil$1(t.height)||delete t.height,isNil$1(t.transform)||delete t.transform,!isNil$1(t.left)){const e=t.left-this.state.points[0][0];for(let t=0;t<this.state.points.length;t++)this.state.points[t][0]+=e}if(!isNil$1(t.top)){const e=t.top-this.state.points[0][1];for(let t=0;t<this.state.points.length;t++)this.state.points[t][1]+=e}if(isNil$1(t.startPoint)||(this.state.points[0]=[...t.startPoint],this.state.left=this.state.points[0][0],this.state.top=this.state.points[0][1]),!isNil$1(t.endPoint)){const e=this.state.points.length;this.state.points[e-1]=[...t.endPoint]}isNil$1(t.startPoint)&&isNil$1(t.endPoint)||this.recalculateRoute(),isNil$1(t.links)||(merge$1(this.state.links,t.links),this.syncConnections()),super.setState(t)}static dirVector(t){switch(t){case"T":return[0,-1];case"B":return[0,1];case"L":return[-1,0];case"R":return[1,0];default:return[0,0]}}recalculateRoute(){if("orthogonal"!==this.state.routeType)return;const t=this.state.points[0],e=this.state.points[this.state.points.length-1],i=this.state.routeOffset||20,s=ICEPolyLine.dirVector(this.state.links&&this.state.links.start&&this.state.links.start.position),o=ICEPolyLine.dirVector(this.state.links&&this.state.links.end&&this.state.links.end.position),r=[t[0]+s[0]*i,t[1]+s[1]*i],a=[e[0]+o[0]*i,e[1]+o[1]*i],l=[t];0===s[0]&&0===s[1]||l.push(r),r[0]!==a[0]&&r[1]!==a[1]&&l.push([a[0],r[1]]),0===o[0]&&0===o[1]||l.push(a),l.push(e),this.state.points=l,this.paramsDirty=!0,this.dirty=!0}createPathObject(){this.ensureDots();const t=this.state.curveType||"straight",e=this.state.dots;if(this.path2D=T.createPath2D(),!e||0===e.length)return this.path2D;if(this.path2D.moveTo(e[0][0],e[0][1]),"quadratic"===t&&e.length>=3)this.path2D.quadraticCurveTo(e[1][0],e[1][1],e[2][0],e[2][1]);else if("cubic"===t&&e.length>=4)this.path2D.bezierCurveTo(e[1][0],e[1][1],e[2][0],e[2][1],e[3][0],e[3][1]);else for(let t=1;t<e.length;t++)this.path2D.lineTo(e[t][0],e[t][1]);return this.path2D}doRender(){const t=this.__arrowFaceIndexes.length>0&&"hollow"!==this.state.arrowStyle&&!1!==this.state.stroke,e=t?this.ctx.strokeStyle:null;super.doRender(),this.applyActiveTransform(),t&&this.drawArrowFills(e),this.drawLabel()}drawArrowFills(t){const e=this.__arrowFaceIndexes,i=this.state.dots;if(!i||0===e.length)return;const s=this.ctx;s.save(),s.beginPath();for(let t=0;t<e.length;t++){const o=e[t],r=i[o],a=i[o+1],l=i[o+2];r&&a&&l&&(s.moveTo(r[0],r[1]),s.lineTo(a[0],a[1]),s.lineTo(l[0],l[1]),s.closePath())}s.fillStyle=t||this.state.style.strokeStyle||"#000000",s.fill(),s.restore()}__labelMetrics(){const t=this.state.label;if(!t)return null;const e=(this.state.labelStyle||{}).fontSize||14,i=this.getLabelPosition();let s=0;const o=this.ctx;return o&&"function"==typeof o.measureText?(o.font="".concat(e,"px Arial"),s=o.measureText(t).width):s=t.length*e,{x:i[0],y:i[1],halfW:s/2+4,halfH:e/2+4}}getLabelRenderInfo(){const t=this.__labelMetrics();if(!t)return null;const e=this.state.labelStyle||{};return _objectSpread2(_objectSpread2({text:String(this.state.label)},t),{},{fontSize:e.fontSize||14,fillStyle:e.fillStyle||"#000000",backgroundColor:e.backgroundColor||"#ffffff"})}__measureLabelBoxForBounds(){const t=this.ctx,e=!!t&&"font"in t,i=e?t.font:void 0,s=this.__labelMetrics();return e&&(t.font=i),s}drawLabel(){const t=this.state.label;if(!t)return;const e=this.ctx,i=this.state.labelStyle||{};e.save();const s=this.__labelMetrics();s?(e.textAlign="center",e.textBaseline="middle",e.fillStyle=i.backgroundColor||"#ffffff",e.fillRect(s.x-s.halfW,s.y-s.halfH,2*s.halfW,2*s.halfH),e.fillStyle=i.fillStyle||"#000000",e.fillText(t,s.x,s.y),e.restore()):e.restore()}getLabelPosition(){const t=this.state.points,e=t.length,i=this.state.left,s=this.state.top;if(0===e)return[0,0];if(1===e)return[t[0][0]-i,t[0][1]-s];let o,r;if(2===e)o=(t[0][0]+t[1][0])/2,r=(t[0][1]+t[1][1])/2;else{const i=t[Math.floor(e/2)];o=i[0],r=i[1]}return[o-i,r-s]}getRotateAngle(){if(this.isDotsOnSameLine()){const t=0,e=0,i=this.state.points.length,s=this.state.points[i-1][0]-this.state.points[0][0],o=this.state.points[i-1][1]-this.state.points[0][1];let r=GeoUtil.calcRotateAngle(s,o,t,e);return r+=90,r}return super.getRotateAngle()}containsPoint(t,e){const i=this.getLines();for(let s=0;s<i.length;s++){const o=i[s],r=o.o[0],a=o.o[1],l=o.d[0],h=o.d[1],c=Math.hypot(l-r,h-a),d=Math.hypot(r-t,a-e),u=Math.hypot(l-t,h-e);if(d+u>=c-3&&d+u<=c+3)return!0}return!1}getLines(){const t=[],e=this.getTransformedDots();if(!e||e.length<2)return t;for(let i=0;i<e.length-1;i++){const s={o:[e[i][0],e[i][1]],d:[e[i+1][0],e[i+1][1]]};t.push(s)}return t}destory(){this.evtBus&&this.evtBus.off(l,this.syncConnections,this),this.removeLink("start"),this.removeLink("end"),super.destory()}}var at=ICEPolyLine;class ICEBezier extends at{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t=ICEBezier.arrangeParam(t),super(t)}static arrangeParam(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const e="cubic"===t.curveType?"cubic":"quadratic",i=t.points&&t.points.length?t.points:ICEBezier.buildDefaultPoints(t,e);return _objectSpread2(_objectSpread2({},t),{},{curveType:e,points:i})}static buildDefaultPoints(t,e){const i=t.startPoint||[0,0],s=t.endPoint||[10,10];return"cubic"===e?[i,t.controlPoint1||[5,-5],t.controlPoint2||[5,5],s]:[i,t.controlPoint||[5,-5],s]}}var lt=class ICELinkSlot extends W{constructor(){super(_objectSpread2({linkable:!1,draggable:!1,position:"T"},arguments.length>0&&void 0!==arguments[0]?arguments[0]:{})),_defineProperty$1(this,"__onHostRemoved",()=>{this._hostComponent=null,this.setState({display:!1})})}keyboardEvtHandler(t){}destory(){this.hostComponent=null,super.destory()}updatePosition(){const t=this._hostComponent.getMinBoundingBox(!0);let e=0,i=0;switch(this.state.position){case"T":e=t.tc[0]-this.state.radius,i=t.tc[1]-this.state.radius;break;case"R":e=t.rc[0]-this.state.radius,i=t.rc[1]-this.state.radius;break;case"B":e=t.bc[0]-this.state.radius,i=t.bc[1]-this.state.radius;break;case"L":e=t.lc[0]-this.state.radius,i=t.lc[1]-this.state.radius;break;case"C":e=t.center[0]-this.state.radius,i=t.center[1]-this.state.radius}this.state.left===e&&this.state.top===i||this.setState({left:e,top:i})}set hostComponent(t){const e=this._hostComponent;e&&(e.off(i,this.updatePosition,this),e.off(r,this.__onHostRemoved,this)),this._hostComponent=t,t&&(t.on(i,this.updatePosition,this),t.on(r,this.__onHostRemoved,this),this.setState({display:!0}))}get hostComponent(){return this._hostComponent}};class ICEVisioLink extends at{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t=ICEVisioLink.arrangeParam(t),super(t)}static arrangeParam(t){return isNil$1(t.startPoint)&&(t.startPoint=[0,0]),isNil$1(t.endPoint)&&(t.endPoint=[10,10]),t.points=[[...t.startPoint],[...t.endPoint]],"bezier"===(t=_objectSpread2({escapeDistance:30,linkShape:"visio"},t)).linkShape&&(t.curveType="straight"),t}__calcDots(){if("bezier"===this.state.linkShape)return this.__calcBezierDots();const t=this.interpolate(),{left:e,top:i}=this.state,s=t[0][2];this.state.points=[],this.state.dots=[];for(let t=0;t<s.length;t++){const o=s[t];this.state.points.push([o.x,o.y]),this.state.dots.push([o.x-e,o.y-i])}return this.calcArrowPoints(),this.state.dots}__calcBezierDots(){const t=this.state.points,e=[...t[0]],i=[...t[t.length-1]],{left:s,top:o}=this.state,r=this.buildBezierPoints(e,i);return this.state.points=r.map(t=>[...t]),this.state.dots=r.map(t=>[t[0]-s,t[1]-o]),this.state.curveType="straight",this.calcArrowPoints(),this.state.dots}buildBezierPoints(t,e){const i=e[0]-t[0],s=e[1]-t[1],o=Math.hypot(i,s);if(o<1e-6)return[[...t],[...e]];const r=[i/o,s/o],a=Math.max(.45*o,24),l=this.slotDirection("start",r),h=this.slotDirection("end",r),c=[t[0]+l[0]*a,t[1]+l[1]*a],d=[e[0]+h[0]*a,e[1]+h[1]*a],u=Math.min(24,Math.max(8,Math.round(o/12))),p=[];for(let i=0;i<=u;i++){const s=i/u,o=1-s,r=o*o*o*t[0]+3*o*o*s*c[0]+3*o*s*s*d[0]+s*s*s*e[0],a=o*o*o*t[1]+3*o*o*s*c[1]+3*o*s*s*d[1]+s*s*s*e[1];p.push([round(r,2),round(a,2)])}return p.filter((t,e)=>0===e||t[0]!==p[e-1][0]||t[1]!==p[e-1][1])}slotDirection(t,e){const i=this.state.links&&this.state.links[t],s=at.dirVector(i&&i.position);return 0!==s[0]||0!==s[1]?s:"start"===t?e:[-e[0],-e[1]]}recalculateRoute(){"bezier"!==this.state.linkShape&&super.recalculateRoute()}interpolate(){const t=this.state.points.length,e=this.state.points[0][0],i=this.state.points[0][1],s=this.state.points[t-1][0],o=this.state.points[t-1][1],r=new GeoPoint(e,i),a=new GeoPoint(s,o),l=[];let h,c,d=null,u=null,p=[],f=new $,g=new $;if(this.ice&&this.state.links&&this.state.links.start&&this.state.links.start.id&&(h=this.ice.findComponent(this.state.links.start.id)),h){f=h.getMinBoundingBox(),l[0]=new GeoPoint(r.x,f.tl[1]-this.state.escapeDistance),l[1]=new GeoPoint(f.tr[0]+this.state.escapeDistance,r.y),l[2]=new GeoPoint(r.x,f.br[1]+this.state.escapeDistance),l[3]=new GeoPoint(f.tl[0]-this.state.escapeDistance,r.y),d=l[0];for(let t=1;t<l.length;t++)this.distance(r,l[t])<this.distance(r,d)&&(d=l[t])}if(this.ice&&this.state.links&&this.state.links.end&&this.state.links.end.id&&(c=this.ice.findComponent(this.state.links.end.id)),c){g=c.getMinBoundingBox(),l[0]=new GeoPoint(a.x,g.tl[1]-this.state.escapeDistance),l[1]=new GeoPoint(g.tr[0]+this.state.escapeDistance,a.y),l[2]=new GeoPoint(a.x,g.br[1]+this.state.escapeDistance),l[3]=new GeoPoint(g.tl[0]-this.state.escapeDistance,a.y),u=l[0];for(let t=1;t<l.length;t++)this.distance(a,l[t])<this.distance(a,u)&&(u=l[t])}let m=0;const y=[r];d&&(y.push(d),m=1),u&&y.push(u),y.push(a);const _=GeoPoint.cloneArray(y);p.push(["s0","s0",_]);const b=GeoPoint.cloneArray(y),v=GeoPoint.cloneArray(b);v.splice(m+1,0,new GeoPoint(v[m].x,v[m+1].y)),p.push(["s1","s1_1",v]);const x=GeoPoint.cloneArray(b);x.splice(m+1,0,new GeoPoint(x[m+1].x,x[m].y)),p.push(["s1","s1_2",x]);const w=GeoPoint.cloneArray(b),C=new GeoPoint((w[m].x+w[m+1].x)/2,w[m].y),S=new GeoPoint((w[m].x+w[m+1].x)/2,w[m+1].y);w.splice(m+1,0,C,S),p.push(["s2","s2_1",w]);const k=GeoPoint.cloneArray(b),P=new GeoPoint(k[m].x,(k[m].y+k[m+1].y)/2),E=new GeoPoint(k[m+1].x,(k[m].y+k[m+1].y)/2);k.splice(m+1,0,P,E),p.push(["s2","s2_2",k]);const M=GeoPoint.cloneArray(b),T=[M[m].x+20,M[m+1].x+20];f&&T.push(f.br[0]+20),g&&T.push(g.br[0]+20);const I=this.max(T),B=new GeoPoint(I,M[m].y),N=new GeoPoint(I,M[m+1].y);M.splice(m+1,0,B,N),p.push(["s2","s2_3",M]);const D=GeoPoint.cloneArray(b),A=[D[m].y-20,D[m+1].y-20];f&&A.push(f.tl[1]-20),g&&A.push(g.tl[1]-20);const O=this.min(A),R=new GeoPoint(D[m].x,O),L=new GeoPoint(D[m+1].x,O);D.splice(m+1,0,R,L),p.push(["s2","s2_4",D]);const F=GeoPoint.cloneArray(b),z=[F[m].x-20,F[m+1].x-20];f&&z.push(f.tl[0]-20),g&&z.push(g.tl[0]-20);const j=this.min(z),X=new GeoPoint(j,F[m].y),H=new GeoPoint(j,F[m+1].y);F.splice(m+1,0,X,H),p.push(["s2","s2_5",F]);const W=GeoPoint.cloneArray(b),V=[W[m].y+20,W[m+1].y+20];f&&V.push(f.tl[1]+f.height+20),g&&V.push(g.tl[1]+g.height+20);const G=this.max(V),Y=new GeoPoint(W[m].x,G),U=new GeoPoint(W[m+1].x,G);W.splice(m+1,0,Y,U),p.push(["s2","s2_6",W]);const q=[];for(let t=0;t<p.length;t++){const e=p[t][2];this.orthogonalPath(e)&&q.push(p[t])}if(p=q,!r.equals(a)){const t=[];for(let e=0;e<p.length;e++){const i=p[e][2];this.forwardPath(i)&&t.push(p[e])}p=t,p.length}const K=[];for(let t=0;t<p.length;t++){let e=!1,i=p[t][2].slice();(g||f)&&(i=i.slice(1,i.length-1)),f&&(e=e||this.polylineIntersectsRectangle(i,f)),g&&(e=e||this.polylineIntersectsRectangle(i,g)),e||K.push(p[t])}0!=K.length&&(p=K),p.length;const J=p[0][2].length,Q=[];for(let t=0;t<p.length;t++)p[t][2].length==J&&Q.push(p[t]);p=Q;let Z=0;for(let t=0;t<p.length;t++)this.scorePath(p[Z][2])<this.scorePath(p[t][2])&&(Z=t);return p=[p[Z]],p}orthogonalPath(t){if(t.length<=1)return!0;for(let e=0;e<t.length-1;e++)if(t[e].x!=t[e+1].x&&t[e].y!=t[e+1].y)return!1;return!0}lineIntersectsLine(t,e){if(t.startPoint.x==t.endPoint.x&&e.startPoint.x==e.endPoint.x)return t.startPoint.x==e.startPoint.x&&(t.contains(e.startPoint.x,e.startPoint.y)||t.contains(e.endPoint.x,e.endPoint.y));if(t.startPoint.x==t.endPoint.x||e.startPoint.x==e.endPoint.x){if(t.startPoint.x==t.endPoint.x){const i=t;t=e,e=i}const i=(t.endPoint.y-t.startPoint.y)/(t.endPoint.x-t.startPoint.x),s=t.startPoint.y-i*t.startPoint.x,o=e.startPoint.x,r=i*o+s;return t.contains(o,r)&&e.contains(o,r)}{const i=(t.endPoint.y-t.startPoint.y)/(t.endPoint.x-t.startPoint.x),s=t.startPoint.y-i*t.startPoint.x,o=(e.endPoint.y-e.startPoint.y)/(e.endPoint.x-e.startPoint.x),r=e.startPoint.y-o*e.startPoint.x;if(i==o)return s==r&&(t.contains(e.startPoint.x,e.startPoint.y)||t.contains(e.endPoint.x,e.endPoint.y));{const a=(r-s)/(i-o),l=i*a+s;return t.contains(a,l)&&e.contains(a,l)}}}polylineIntersectsRectangle(t,e){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const s=[];s.push(new GeoLine(new GeoPoint(e.x1,e.y1),new GeoPoint(e.x2,e.y1))),s.push(new GeoLine(new GeoPoint(e.x2,e.y1),new GeoPoint(e.x2,e.y2))),s.push(new GeoLine(new GeoPoint(e.x2,e.y2),new GeoPoint(e.x1,e.y2))),s.push(new GeoLine(new GeoPoint(e.x1,e.y2),new GeoPoint(e.x1,e.y1)));for(let e=0;e<t.length-1;e++){const i=new GeoLine(t[e],t[e+1]);for(let t=0;t<s.length;t++)if(this.lineIntersectsLine(i,s[t]))return!0}if(i){const e=new GeoLine(t[t.length-1],t[0]);for(let t=0;t<s.length;t++)if(this.lineIntersectsLine(e,s[t]))return!0}return!1}scorePath(t){if(t.length<=2)return-1;let e=0;for(let i=1;i<t.length-1;i++)if(t[i-1].x==t[i].x&&t[i].x==t[i+1].x){if(this.signum(t[i+1].y-t[i].y)!=this.signum(t[i].y-t[i-1].y))return-1;e++}else if(t[i-1].y==t[i].y&&t[i].y==t[i+1].y){if(this.signum(t[i+1].x-t[i].x)!=this.signum(t[i].x-t[i-1].x))return-1;e++}else e--;return e}signum(t){return t>0?1:t<0?-1:0}forwardPath(t){if(t.length<=2)return!0;for(let e=0;e<t.length-2;e++)if(t[e].x==t[e+1].x&&t[e+1].x==t[e+2].x){if(0!=this.signum(t[e+1].y-t[e].y)&&this.signum(t[e+1].y-t[e].y)==-1*this.signum(t[e+2].y-t[e+1].y))return!1}else if(t[e].y==t[e+1].y&&t[e+1].y==t[e+2].y&&0!=this.signum(t[e+1].x-t[e].x)&&this.signum(t[e+1].x-t[e].x)==-1*this.signum(t[e+2].x-t[e+1].x))return!1;return!0}distance(t,e){return Math.hypot(e.x-t.x,e.y-t.y)}max(t){if(0==t.lenght)return NaN;{let e=t[0];for(let i=0;i<t.length;i++)e<t[i]&&(e=t[i]);return e}}min(t){if(0==t.lenght)return NaN;{let e=t[0];for(let i=0;i<t.length;i++)e>t[i]&&(e=t[i]);return e}}addDot(t,e){throw new Error("Can NOT add dot to ICEVisioLink mannually.")}rmDot(t){throw new Error("Can NOT remove dot from ICEVisioLink mannually.")}}var ht=class ICEIsogon extends ICEDotPath{constructor(){const t=_objectSpread2({radius:10,edges:3,startAngle:90},arguments.length>0&&void 0!==arguments[0]?arguments[0]:{});t.edges=Math.floor(t.edges>=3?t.edges:3),t.width=2*t.radius,t.height=2*t.radius,super(t)}__calcDots(){this.state.dots=[];const t=2*Math.PI/this.state.edges,e=this.state.radius;for(let i=0;i<this.state.edges;i++){const s=t*i-toRadian(this.state.startAngle),o=Math.floor(e*Math.cos(s)+e),r=Math.floor(e*Math.sin(s)+e);this.state.dots.push([o,r])}return this.state.dots}calcComponentParams(){return this.paramsDirty?(this.calcDots(),this.state.width=2*this.state.radius,this.state.height=2*this.state.radius,{width:this.state.width,height:this.state.height}):{width:this.state.width,height:this.state.height}}setState(t){isNil$1(t.radius)?isNil$1(t.width)?isNil$1(t.height)||(t.radius=t.height/2):t.radius=t.width/2:(t.width=2*t.radius,t.height=2*t.radius),super.setState(t)}},ct=class ICERose extends ICEDotPath{constructor(){const t=_objectSpread2({radius:50,leafNum:2,pointNumber:100},arguments.length>0&&void 0!==arguments[0]?arguments[0]:{});t.leafNum=Math.floor(t.leafNum>=2?t.leafNum:2),t.width=2*t.radius,t.height=2*t.radius,super(t)}__calcDots(){const t=this.state.radius,e=this.state.leafNum;this.state.dots=[];const i=Math.PI/this.state.pointNumber;let s=0,o=0,r=0;for(;s=t+t*Math.sin(e*r)*Math.cos(r),o=t+t*Math.sin(e*r)*Math.sin(r),this.state.dots.push([s,o]),r+=i,!(r>=2*Math.PI););return this.state.dots}calcComponentParams(){return this.paramsDirty?(this.calcDots(),this.state.width=2*this.state.radius,this.state.height=2*this.state.radius,{width:this.state.width,height:this.state.height}):{width:this.state.width,height:this.state.height}}setState(t){isNil$1(t.radius)?isNil$1(t.width)?isNil$1(t.height)||(t.radius=t.height/2,t.width=t.height):(t.radius=t.width/2,t.height=t.width):(t.width=2*t.radius,t.height=2*t.radius),super.setState(t)}},dt=class ICEStar extends ICEDotPath{constructor(){const t=_objectSpread2({outerRadius:50,innerRadius:20,startAngle:90,spikes:5},arguments.length>0&&void 0!==arguments[0]?arguments[0]:{});t.spikes=Math.floor(t.spikes>=1?t.spikes:1),t.width=2*t.outerRadius,t.height=2*t.outerRadius,super(t)}__calcDots(){this.state.dots=[];let t=toRadian(this.state.startAngle);const e=Math.PI/this.state.spikes,i=this.state.outerRadius,s=this.state.innerRadius;let o,r;for(let a=0;a<this.state.spikes;a++)o=Math.cos(t)*i+i,r=Math.sin(t)*i+i,this.state.dots.push([o,r]),t+=e,o=Math.cos(t)*s+i,r=Math.sin(t)*s+i,this.state.dots.push([o,r]),t+=e;return this.state.dots}calcComponentParams(){return this.paramsDirty?(this.calcDots(),this.state.width=2*this.state.outerRadius,this.state.height=2*this.state.outerRadius,{width:this.state.width,height:this.state.height}):{width:this.state.width,height:this.state.height}}setState(t){isNil$1(t.outerRadius)?isNil$1(t.width)?isNil$1(t.height)||(t.outerRadius=t.height/2):t.outerRadius=t.width/2:(t.width=2*t.outerRadius,t.height=2*t.outerRadius),super.setState(t)}};const ut="__ICE_UTILS_TEXT_MEASURE_DIV__";class ICEText extends F{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(ICEText.arrangeParam(t)),_defineProperty$1(this,"__originalDraggable",!0),_defineProperty$1(this,"__editInput",null),this.measureText()}static arrangeParam(t){const e=merge$1({text:"",left:0,top:0,width:10,height:10,editing:!1,caretIndex:0,wrap:!1,maxLines:0,ellipsis:"…",lines:null,transformable:!1,style:{fontWeight:"bold",fontSize:32,fontFamily:"Arial",lineWidth:1,textBaseline:"bottom",paddingTop:0,paddingBottom:0,paddingLeft:0,paddingRight:0}},t);return e.style=_objectSpread2(_objectSpread2({},e.style),{},{font:"".concat(e.style.fontWeight," ").concat(e.style.fontSize,"px ").concat(e.style.fontFamily)}),e}initEvents(){super.initEvents(),this.on("dblclick",this.startEditing,this)}startEditing(){this.__originalDraggable=this.state.draggable,this.setState({editing:!0,caretIndex:this.state.text.length,draggable:!1}),this.ice&&this.ice.controlPanelManager&&this.ice.controlPanelManager.transformControlPanel.disable(),this.ice&&this.ice.evtBus&&this.ice.evtBus.on("mousedown",this.__globalMouseDownHandler,this),this.__mountEditInput()}stopEditing(){this.ice&&this.ice.evtBus&&this.ice.evtBus.off("mousedown",this.__globalMouseDownHandler,this),this.__unmountEditInput(),this.setState({editing:!1,draggable:this.__originalDraggable})}__mountEditInput(){const t=this.root&&this.root.document;if(!t||!t.body)return;const e=this.getMinBoundingBox(!0),i=this.ice&&this.ice.canvasEl?this.ice.canvasEl.getBoundingClientRect():{left:0,top:0},{paddingTop:s,paddingRight:o,paddingBottom:r,paddingLeft:a}=this.state.style,l=Math.max(this.state.width-a-o,1),h=Math.max(this.state.height-s-r,this.state.style.fontSize),c=t.createElement("input");c.type="text",c.value=this.state.text,c.style.position="absolute",c.style.left=i.left+e.tl[0]+"px",c.style.top=i.top+e.tl[1]+"px",c.style.width=l+"px",c.style.height=h+"px",c.style.font=this.state.style.font,c.style.paddingTop=s+"px",c.style.paddingRight=o+"px",c.style.paddingBottom=r+"px",c.style.paddingLeft=a+"px",c.style.boxSizing="content-box",c.style.color="transparent",c.style.caretColor=this.state.style.fillStyle||"#000000",c.style.background="transparent",c.style.border="none",c.style.outline="none",c.style.margin="0",c.style.zIndex="9999",t.body.appendChild(c),c.focus(),c.setSelectionRange(c.value.length,c.value.length),c.addEventListener("input",()=>{this.setText(c.value)}),c.addEventListener("compositionend",()=>{this.setText(c.value)}),c.addEventListener("keydown",t=>{"Enter"!==t.key&&"Escape"!==t.key||t.isComposing||this.stopEditing()}),c.addEventListener("blur",()=>{this.stopEditing()}),this.__editInput=c}__unmountEditInput(){this.__editInput&&this.__editInput.parentNode&&this.__editInput.parentNode.removeChild(this.__editInput),this.__editInput=null}__globalMouseDownHandler(t){(t&&t.param&&t.param.component)!==this&&this.stopEditing()}setText(t){const e=Math.max(0,Math.min(this.state.caretIndex,t.length));return this.setState({text:t,caretIndex:e}),this}getText(){return this.state.text}keyboardEvtHandler(t){if(this.__editInput)return;if(!this.state.editing)return void super.keyboardEvtHandler(t);if("keydown"!==t.type)return;const e=t.key,i=this.state.text,s=this.state.caretIndex;"Enter"!==e&&"Escape"!==e?"Backspace"!==e?"Delete"!==e?"ArrowLeft"!==e?"ArrowRight"!==e?"Home"!==e?"End"!==e?e&&1===e.length&&this.setState({text:i.slice(0,s)+e+i.slice(s),caretIndex:s+1}):this.setState({caretIndex:i.length}):this.setState({caretIndex:0}):this.setState({caretIndex:Math.min(i.length,s+1)}):this.setState({caretIndex:Math.max(0,s-1)}):s<i.length&&this.setState({text:i.slice(0,s)+i.slice(s+1)}):s>0&&this.setState({text:i.slice(0,s-1)+i.slice(s),caretIndex:s-1}):this.stopEditing()}renderCaret(){if(this.__editInput)return;const{paddingTop:t,paddingBottom:e,paddingLeft:i}=this.state.style,s=this.state.text.slice(0,this.state.caretIndex);let o=0-this.state.localOrigin[0]+i;"function"==typeof this.ctx.measureText&&(o+=this.ctx.measureText(s).width);const r=0-this.state.localOrigin[1]+t,a=0-this.state.localOrigin[1]+this.state.height-e;this.ctx.save(),this.ctx.strokeStyle=this.state.style.fillStyle||"#000000",this.ctx.lineWidth=1,this.ctx.beginPath(),this.ctx.moveTo(o,r),this.ctx.lineTo(o,a),this.ctx.stroke(),this.ctx.restore()}calcComponentParams(){return this.paramsDirty?this.measureText():{width:this.state.width,height:this.state.height}}measureText(t){this.state.lines=this.__computeWrappedLines();const e=this.__measureByCanvas();return e?(this.__applyMeasuredSize(e),{width:this.state.width,height:this.state.height}):this.__measureByDOM()}__computeWrappedLines(){var t;if(!this.state.wrap||this.state.editing)return null;const e=Number(this.state.width);if(!(e>0))return null;const i=this.ctx;if(!i||"function"!=typeof i.measureText)return null;const s=this.__measureFn(),o=this.__wrapText(e,s);return this.__truncateLines(o,e,Number(this.state.maxLines)||0,String(null!==(t=this.state.ellipsis)&&void 0!==t?t:"…"),s)}__measureFn(){const t=this.ctx;this.state.style.font&&t&&"function"==typeof t.measureText&&(t.font=this.state.style.font);const e=Number(this.state.style.fontSize)||12;return i=>{if(t&&"function"==typeof t.measureText){const e=t.measureText(i);return e&&e.width||0}return i.length*e}}__graphemes(t){const e=this.root&&this.root.Intl;if(e&&"function"==typeof e.Segmenter)try{const i=new e.Segmenter(void 0,{granularity:"grapheme"}),s=[];for(const e of i.segment(t))s.push(e.segment);return s}catch(t){}return Array.from(t)}__wrapText(t,e){var i;const s=[],o=String(null!==(i=this.state.text)&&void 0!==i?i:"").split("\n");for(let i=0;i<o.length;i++){const r=this.__graphemes(o[i]);let a="";for(let i=0;i<r.length;i++){const o=a+r[i];""!==a&&e(o)>t?(s.push(a),a=r[i]):a=o}s.push(a)}return s}__truncateLines(t,e,i,s,o){if(!(i>0)||t.length<=i)return t;const r=t.slice(0,i),a=this.__graphemes(r[i-1]);for(;a.length>0&&o(a.join("")+s)>e;)a.pop();return r[i-1]=a.join("")+s,r}__measureByCanvas(){var t;if(!this.ctx||"function"!=typeof this.ctx.measureText)return null;this.state.style.font&&(this.ctx.font=this.state.style.font);const e=this.state.lines||String(null!==(t=this.state.text)&&void 0!==t?t:"").split("\n");let i=0,s=0,o=0;for(const t of e){const e=this.ctx.measureText(t);i=Math.max(i,e.width||0);const r=e.actualBoundingBoxAscent,a=e.actualBoundingBoxDescent;if("number"!=typeof r||"number"!=typeof a)return null;s=Math.max(s,r),o=Math.max(o,a)}const r=s+o;if(e.length<=1)return{textWidth:i,textHeight:r};const a=Number(this.state.style.fontSize)||r||12;return{textWidth:i,textHeight:Math.max(r,a*ICEText.LINE_HEIGHT_RATIO)*e.length}}__applyMeasuredSize(t){const{paddingTop:e,paddingBottom:i,paddingLeft:s,paddingRight:o}=this.state.style,r=t.textWidth+s+o,a=t.textHeight+e+i;10===this.props.width&&(this.state.width=r),10===this.props.height&&(this.state.height=a),this.state.textHeight=t.textHeight}__measureByDOM(){let t;try{if(t=this.root.document.getElementById(ut),!t){t=this.root.document.createElement("div"),t.setAttribute("id",ut);const e={visibility:"hidden",position:"absolute",top:"0",left:"0",padding:"0",margin:"0",border:"none",fontFamily:this.state.style.fontFamily,fontWeight:this.state.style.fontWeight,fontSize:this.state.style.fontSize+"px",lineHeight:"1",whiteSpace:"pre"};for(const i in e)t.style[i]=e[i];t.contenteditable=!1,this.root.document.body.appendChild(t)}t.textContent=this.state.text;const{paddingTop:e,paddingBottom:i,paddingLeft:s,paddingRight:o}=this.state.style,r={width:t.offsetWidth+s+o,height:t.offsetHeight+e+i};return 10===this.props.width&&(this.state.width=r.width),10===this.props.height&&(this.state.height=r.height),this.state.textHeight=t.offsetHeight,{width:this.state.width,height:this.state.height}}catch(t){return{width:this.state.width,height:this.state.height}}}getRenderLines(){var t;const{paddingTop:e,paddingLeft:i,paddingRight:s,textAlign:o,textBaseline:r}=this.state.style,a=this.state.lines||String(null!==(t=this.state.text)&&void 0!==t?t:"").split("\n"),l=(this.state.textHeight||this.state.style.fontSize)/a.length,h="center"===o||"right"===o||"end"===o,c=h?this.__measureFn():null,d=[];for(let t=0;t<a.length;t++){let u=0-this.state.localOrigin[0]+i;if(h){const e=c&&c(a[t])||0;u="center"===o?-e/2:this.state.localOrigin[0]-s-e}let p=0-this.state.localOrigin[1]+e+(t+1)*l;"middle"===r&&(p=(t-(a.length-1)/2)*l),d.push({text:a[t],x:u,y:p})}return d}doRender(){this.dirty&&this.measureText();const{textAlign:t}=this.state.style,e=this.getRenderLines();("center"===t||"right"===t||"end"===t)&&(this.ctx.textAlign="left");for(let t=0;t<e.length;t++)this.state.stroke&&this.ctx.strokeText(e[t].text,e[t].x,e[t].y,this.state.width),this.state.fill&&this.ctx.fillText(e[t].text,e[t].x,e[t].y,this.state.width);this.state.editing&&this.renderCaret(),super.doRender()}}_defineProperty$1(ICEText,"LINE_HEIGHT_RATIO",1.35);var pt=ICEText,ft=class ICELayoutManager{getPreferredSize(t){return[0,0]}},gt={ICERect:j,ICECircle:W,ICEEllipse:H,ICEStar:dt,ICEIsogon:ht,ICERose:ct,ICEText:pt,ICEImage:rt,ICEGroup:X,ICEVisioLink:ICEVisioLink,ICEPolyLine:at,ICEBezier:ICEBezier};const mt={evtBuses:[],stopped:!1,frameCallback:function(){for(let e=0;e<mt.evtBuses.length;e++){if(mt.stopped)return;mt.evtBuses[e].trigger(t)}mt.stopped||T.requestFrame(mt.frameCallback)},start:function(){mt.stopped=!1,T.requestFrame(mt.frameCallback)},stop:function(){mt.stopped=!0},registerEvtBus:function(t){mt.evtBuses.includes(t)||mt.evtBuses.push(t)},delEvtBus:function(t){mt.evtBuses.includes(t)&&mt.evtBuses.splice(mt.evtBuses.indexOf(t),1)}};var yt=mt;class ICELinkSlotManager{constructor(t){_defineProperty$1(this,"slotRadius",10),this.ice=t}start(){return this.createLinkSlots(),this.ice.evtBus.on(c,this.hookMouseMoveHandler,this),this.ice.evtBus.on(d,this.hookMouseUpHandler,this),this.ice.evtBus.on("mouseup",this.globalMouseUpHandler,this),this}stop(){return this.ice.evtBus.off(c,this.hookMouseMoveHandler,this),this.ice.evtBus.off(d,this.hookMouseUpHandler,this),this.ice.evtBus.off("mouseup",this.globalMouseUpHandler,this),this}hookMouseMoveHandler(t){const e=t.target,i=e.getMaxBoundingBox(),s=flattenTree([],this.ice.childNodes);s.sort((t,e)=>t.state.zIndex-e.state.zIndex),this.collision=null;for(let t=0;t<s.length;t++){const e=s[t];e&&e.state.linkable&&isEffectivelyVisible(e)&&(e.getMaxBoundingBox().isIntersect(i)&&(this.collision=e))}if(!this.collision){for(let t=0;t<this.ice._linkSlots.length;t++)this.ice._linkSlots[t].setState({display:!1,style:{fillStyle:"#3ce92c"}});return void e.setState({style:{fillStyle:"#3ce92c"}})}let o=!1;for(let t=0;t<this.ice._linkSlots.length;t++){const s=this.ice._linkSlots[t];s.hostComponent!==this.collision&&(s.hostComponent=this.collision),s.setState({display:!0,style:{fillStyle:"#3ce92c"}}),e.setState({style:{fillStyle:"#3ce92c"}}),s.getMaxBoundingBox().isIntersect(i)&&(o=!0,s.setState({style:{fillStyle:"#fffb00"}}))}o&&e.setState({style:{fillStyle:"#fffb00"}})}hookMouseUpHandler(t){const e=t.target,i=e.state.position,s=e.parentNode.targetComponent,o=e.getMaxBoundingBox();let r=!1;if(this.collision)for(let t=0;t<this.ice._linkSlots.length;t++){const e=this.ice._linkSlots[t];if(e.setState({display:!1,style:{fillStyle:"#3ce92c"}}),e.getMaxBoundingBox().isIntersect(o)){r=!0;const t={};t[i]={id:e.hostComponent.state.id,position:e.state.position},s&&s.setState({links:t});break}}if(r)e.setState({display:!1,style:{fillStyle:"#3ce92c"}});else{const t={};t[i]=null,s&&s.setState({links:t})}this.collision=null}globalMouseUpHandler(t){for(let t=0;t<this.ice._linkSlots.length;t++)this.ice._linkSlots[t].setState({display:!1,style:{fillStyle:"#3ce92c"}})}createLinkSlots(){if(this.ice._linkSlots&&this.ice._linkSlots.length)return;const t=new lt({zIndex:10000010,display:!1,transformable:!1,draggable:!1,radius:this.slotRadius,position:"T",style:{strokeStyle:"#0c09d4",fillStyle:"#3ce92c",lineWidth:1}});this.ice.addTool(t);const e=new lt({zIndex:10000011,display:!1,transformable:!1,draggable:!1,radius:this.slotRadius,position:"R",style:{strokeStyle:"#0c09d4",fillStyle:"#3ce92c",lineWidth:1}});this.ice.addTool(e);const i=new lt({zIndex:10000012,display:!1,transformable:!1,draggable:!1,radius:this.slotRadius,position:"B",style:{strokeStyle:"#0c09d4",fillStyle:"#3ce92c",lineWidth:1}});this.ice.addTool(i);const s=new lt({zIndex:10000013,display:!1,transformable:!1,draggable:!1,radius:this.slotRadius,position:"L",style:{strokeStyle:"#0c09d4",fillStyle:"#3ce92c",lineWidth:1}});this.ice.addTool(s);const o=new lt({zIndex:10000014,display:!1,transformable:!1,draggable:!1,radius:this.slotRadius,position:"C",style:{strokeStyle:"#0c09d4",fillStyle:"#3ce92c",lineWidth:1}});this.ice.addTool(o),this.ice._linkSlots=[t,e,i,s,o]}}const _t=["linearMatrix","composedMatrix","localOrigin","absoluteOrigin","dots","textHeight","lines"];class Serializer{constructor(t){this.ice=t}toJSONString(){return JSON.stringify(this.toJSONObject())}toJSONObject(){const t={version:1,createTime:(new Date).toLocaleString(),lastModifyTime:(new Date).toLocaleString(),childNodes:[]};for(let e=0;e<this.ice.childNodes.length;e++){const i=this.ice.childNodes[e];this.encodeRecursively(i,t)}return t}encodeRecursively(t,e){const i=this.ice.getTypeId(t.constructor)||t.constructor.name,s={state:this.pickSerializableState(t.state),type:i,childNodes:[]};if(e.childNodes.push(s),("function"!=typeof t.hasDerivedChildren||!t.hasDerivedChildren())&&t.childNodes&&t.childNodes.length)for(let e=0;e<t.childNodes.length;e++)this.encodeRecursively(t.childNodes[e],s)}pickSerializableState(t){const e={};for(const i in t)-1===_t.indexOf(i)&&(e[i]=t[i]);return e}}const bt=[];class Deserializer{constructor(t){_defineProperty$1(this,"_unknownTypes",[]),this.ice=t}get unknownTypes(){return this._unknownTypes}fromJSONObject(t){this._unknownTypes=[];const e=t&&t.version?t.version:1;this.migrate(t,e);const i=t&&t.childNodes||[];for(let t=0;t<i.length;t++)this.decodeRecursively(this.ice,i[t])}fromJSONString(t){const e=JSON.parse(t);this.fromJSONObject(e)}migrate(t,e){if(e>1)throw new Error("不支持的反序列化版本:".concat(e,"(当前支持到 ").concat(1,")"));for(let i=0;i<bt.length;i++){const s=bt[i];e<s.to&&(s.run(t),e=s.to)}t.version=e}decodeRecursively(t,e){if(!e||!e.type)return null;const i=this.ice.getType(e.type);if("function"!=typeof i)return-1===this._unknownTypes.indexOf(e.type)&&this._unknownTypes.push(e.type),null;const s=new i(e.state);if(t.addChild(s),"function"==typeof s.hasDerivedChildren&&s.hasDerivedChildren())return s;const o=e.childNodes;if(o&&o.length)for(let t=0;t<o.length;t++)this.decodeRecursively(s,o[t]);return s}}class PluginHost{constructor(t){_defineProperty$1(this,"plugins",[]),_defineProperty$1(this,"renderHooks",[]),_defineProperty$1(this,"tools",[]),this.ice=t}get names(){return this.plugins.map(t=>t.name)}has(t){return this.plugins.some(e=>e.name===t)}hasRenderHooks(){return this.renderHooks.length>0}use(t){if(!t||!t.name)throw new Error("ICE.use(plugin):插件必须提供非空的 name。");if(this.has(t.name))return!1;if(t.components)for(const e in t.components){const i=t.components[e];"function"==typeof i&&this.ice.registerType(e,i)}if("function"==typeof t.render&&this.renderHooks.push({pluginName:t.name,hook:t.render}),t.tools)for(let e=0;e<t.tools.length;e++){const i=t.tools[e];i&&i.id&&this.tools.push(_objectSpread2(_objectSpread2({},i),{},{pluginName:t.name,instance:null,attached:!1}))}return this.plugins.push(t),"function"==typeof t.setup&&t.setup(this.ice),!0}unuse(t){const e=this.plugins.findIndex(e=>e.name===t);if(-1===e)return!1;const i=this.plugins[e];for(let e=this.tools.length-1;e>=0;e--)this.tools[e].pluginName===t&&(this.detachTool(this.tools[e]),this.tools.splice(e,1));for(let e=this.renderHooks.length-1;e>=0;e--)this.renderHooks[e].pluginName===t&&this.renderHooks.splice(e,1);return this.plugins.splice(e,1),"function"==typeof i.teardown&&i.teardown(this.ice),!0}invokeRenderHooks(t){for(let e=0;e<this.renderHooks.length;e++)this.renderHooks[e].hook(t)}syncTools(t){let e=!1;for(let i=0;i<this.tools.length;i++){const s=this.tools[i];let o=!1;try{o=!!t&&!!s.match(t,this.ice)}catch(t){o=!1}o?(s.instance||(s.instance=s.create()),!s.attached&&s.instance&&(this.ice.addTool(s.instance),s.attached=!0),"function"==typeof s.onTargetChange&&s.onTargetChange(s.instance,t),s.exclusive&&(e=!0)):this.detachTool(s)}return e}detachAllTools(){for(let t=0;t<this.tools.length;t++)this.detachTool(this.tools[t])}detachTool(t){t.attached&&t.instance&&(this.ice.removeTool(t.instance),t.attached=!1)}clear(){this.detachAllTools(),this.plugins=[],this.renderHooks=[],this.tools=[]}}function resolveRole(t){return t.isControlPanel?"tool":t.isLine?"link":"function"==typeof t.measureText?"text":Array.isArray(t.childNodes)?"container":t.state&&t.state.src?"image":"graphic"}function resolveLabel(t){const e=t.state||{};return"string"==typeof e.ariaLabel&&e.ariaLabel?e.ariaLabel:"string"==typeof e.text&&e.text?e.text:"string"==typeof e.title&&e.title?e.title:t.props&&t.props.id||String(e.id||"")}function resolveBox(t,e){if("function"!=typeof e.__paintWorldBox)return null;const i=e.state&&e.state.composedMatrix;if(!i||i.length<6)return null;const s=e.__paintWorldBox([0,0,0,0]);if(!(isFinite(s[0])&&isFinite(s[1])&&isFinite(s[2])&&isFinite(s[3])))return null;const[o,r]=t.worldToScreen(s[0],s[1]),[a,l]=t.worldToScreen(s[2],s[3]);return{x:Math.min(o,a),y:Math.min(r,l),width:Math.abs(a-o),height:Math.abs(l-r)}}function buildAccessibilityTree(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=[],s=t&&t.selectionList||[];let o=0;const walk=(r,a,l)=>{if(!r||!r.length)return;const h=r.slice().sort((t,e)=>(t.state.zIndex||0)-(e.state.zIndex||0));for(let r=0;r<h.length;r++){const c=h[r],d=c.state||{},u=isEffectivelyVisible(c),p=!1!==d.interactive,f=resolveBox(t,c),g=(e.includeHidden||u)&&!!f,m=!e.filter||e.filter(c);g&&m&&i.push({id:c.props&&c.props.id||String(d.id||""),role:resolveRole(c),label:resolveLabel(c),box:f,visible:u,interactive:p,focusable:u&&p,tabIndex:o++,selected:-1!==s.indexOf(c),level:a,parentId:l}),c.childNodes&&c.childNodes.length&&walk(c.childNodes,a+1,c.props&&c.props.id||null)}};return walk(t&&t.childNodes||[],1,null),e.includeTools&&walk(t&&t.toolNodes||[],1,null),i}var vt=class CanvasRenderer extends D{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(),_defineProperty$1(this,"stopped",!1),_defineProperty$1(this,"renderMode","dirty-rect"),_defineProperty$1(this,"__forceFullRender",!1),_defineProperty$1(this,"componentQueue",[]),_defineProperty$1(this,"toolsQueue",[]),_defineProperty$1(this,"__queueDirty",!0),_defineProperty$1(this,"__zSnap",[]),_defineProperty$1(this,"__snap",new WeakMap),_defineProperty$1(this,"__primed",!1),_defineProperty$1(this,"__lastFrameCulled",0),this.ice=t,this.cache=new class ObjectCache{constructor(t){_defineProperty$1(this,"map",new WeakMap),_defineProperty$1(this,"__bytes",0),_defineProperty$1(this,"__vp",null),_defineProperty$1(this,"__vpChanged",!1),this.ice=t}__rvp(){return this.ice&&"function"==typeof this.ice.getRenderViewport?this.ice.getRenderViewport():this.ice&&this.ice.viewport||{scale:1,tx:0,ty:0}}beginFrame(){const t=this.__rvp(),e=this.__vp;this.__vpChanged=!!e&&(e.scale!==t.scale||e.tx!==t.tx||e.ty!==t.ty),e?(e.scale=t.scale,e.tx=t.tx,e.ty=t.ty):this.__vp={scale:t.scale,tx:t.tx,ty:t.ty}}__sameViewport(t,e,i,s){return t.rs===e&&t.ox===i&&t.oy===s}isCachable(t){if(this.__vpChanged)return!1;if("function"==typeof t.hasClippingAncestor&&t.hasClippingAncestor())return!1;if("function"==typeof t.measureText)return!t.state.editing&&isEffectivelyVisible(t);if(t.isLine){if(t.state.lineDashFlow)return!1;if(!isEffectivelyVisible(t))return!1;const e=this.__rvp().scale;if(!(e>0))return!1;const i="function"==typeof t.__localBox?t.__localBox():null,s=i?i[2]-i[0]:Number(t.state.width)||0,o=i?i[3]-i[1]:Number(t.state.height)||0,r=Math.max(0,s)*Math.max(0,o)*e*e;return!(r>2e6||!this.map.has(t)&&this.__bytes+4*r>33554432)}if("function"==typeof t.calcDots&&!t.isLine){const e=Number(t.state.width)||0,i=Number(t.state.height)||0;return isEffectivelyVisible(t)&&!t.state.lineDashFlow&&e*i>=4e4}return!isOpaqueDrawing(t.state)&&"function"==typeof t.createPathObject&&!t.childNodes&&!t.isLine&&isEffectivelyVisible(t)}has(t){return this.map.has(t)}contentKey(t){const e=t.state;if("function"==typeof t.measureText){const t=e.style||{};return[e.text,t.fontWeight,t.fontSize,t.fontFamily,t.font,t.textAlign,t.textBaseline,t.paddingTop,t.paddingBottom,t.paddingLeft,t.paddingRight,e.fill,e.stroke,JSON.stringify(e.lineDash),e.lineDashOffset,e.lineDashFlow,e.lineBorder,e.lineBorderWidth,e.lineBorderColor,this.__styleKey(e)].join("|")}return"function"==typeof t.calcDots?[JSON.stringify(e.dots),e.closePath,e.fill,e.stroke,JSON.stringify(e.lineDash),e.lineDashOffset,e.lineDashFlow,e.lineBorder,e.lineBorderWidth,e.lineBorderColor,this.__styleKey(e)].join("|"):[e.width,e.height,e.radius,e.radiusX,e.radiusY,e.closePath,e.fill,e.stroke,JSON.stringify(e.lineDash),e.lineDashOffset,e.lineDashFlow,e.lineBorder,e.lineBorderWidth,e.lineBorderColor,this.__styleKey(e)].join("|")}__styleKey(t){const e=t.style||{};return[e.fillStyle,e.strokeStyle,e.lineWidth,e.globalAlpha,e.globalCompositeOperation,e.shadow,e.shadowColor,e.shadowBlur,e.shadowOffsetX,e.shadowOffsetY].join("|")}linearKey(t){const e=t.state.composedMatrix;return!e||e.length<6?"":"".concat(e[0],",").concat(e[1],",").concat(e[2],",").concat(e[3])}render(t){if(!this.isCachable(t))return!1;const e=this.__rvp(),i=e.scale,s=e.tx,o=e.ty;let r=this.map.get(t);if(!t.dirty&&r&&this.__sameViewport(r,i,s,o))return this.draw(r),!0;"function"==typeof t.calcDots&&t.refreshParams(),t.composeMatrix();const a=this.linearKey(t),l=this.contentKey(t);let h=!r||r.contentKey!==l||r.linearKey!==a||!this.__sameViewport(r,i,s,o);if(h||(h=!this.refreshPosition(t,r)),h){const e=r||null;e&&(this.__bytes=Math.max(0,this.__bytes-e.pw*e.ph*4)),r=this.build(t,l,a,i,s,o),this.__bytes+=r.pw*r.ph*4}return this.map.set(t,r),this.draw(r),t.dirty=!1,!0}__paintBox(t){const e=t.getMaxBoundingBox().getMinAndMaxPoint(),i=stylePaintPad(t.state);return{minX:e.minX-i,minY:e.minY-i,maxX:e.maxX+i,maxY:e.maxY+i}}build(t,e,i,s,o,r){t.refreshParams(),t.composeMatrix();const a=this.__paintBox(t),l=Math.floor(a.minX*s+o)-1,h=Math.floor(a.minY*s+r)-1,c=Math.max(1,Math.ceil(a.maxX*s+o)-l+1),d=Math.max(1,Math.ceil(a.maxY*s+r)-h+1),{canvas:u,ctx:p}=T.createOffscreenCanvas(c,d),f=[s,0,0,s,o-l,r-h];return t.renderTo(p,f),{canvas:u,ctx:p,pw:c,ph:d,dx:l,dy:h,dx0:l,dy0:h,buildMinX:a.minX,buildMinY:a.minY,rs:s,ox:o,oy:r,contentKey:e,linearKey:i}}refreshPosition(t,e){const i=this.__paintBox(t),s=e.rs,o=s*(i.minX-e.buildMinX),r=s*(i.minY-e.buildMinY);if(Math.abs(o-Math.round(o))>1e-6)return!1;if(Math.abs(r-Math.round(r))>1e-6)return!1;const a=e.dx0+Math.round(o),l=e.dy0+Math.round(r);return!(i.minX*s+e.ox<a||i.minY*s+e.oy<l||i.maxX*s+e.ox>a+e.pw||i.maxY*s+e.oy>l+e.ph||(e.dx=a,e.dy=l,0))}draw(t){const e=this.ice.ctx;e.save(),e.setTransform(1,0,0,1,0,0),e.drawImage(t.canvas,t.dx,t.dy),e.restore()}invalidate(t){const e=this.map.get(t);e&&(this.__bytes=Math.max(0,this.__bytes-e.pw*e.ph*4)),this.map.delete(t)}clear(){this.map=new WeakMap,this.__bytes=0}}(t),"full"!==e.renderMode&&"dirty-rect"!==e.renderMode||(this.renderMode=e.renderMode)}markQueueDirty(){this.__queueDirty=!0}setRenderMode(t){this.renderMode=t}getRenderMode(){return this.renderMode}start(){return this.stopped=!1,this.ice.evtBus.on(t,this.frameEvtHandler,this),this}stop(){return this.stopped=!0,this.ice.evtBus.off(t,this.frameEvtHandler,this),this}frameEvtHandler(t){if(this.ice.dirty){if(this.refreshQueue(),this.cache.beginFrame(),"dirty-rect"===this.renderMode&&!this.__forceFullRender){const t=this.__collect();if(t)return void this.__renderDirtyRect(t)}this.doRenderFull()}}refreshQueue(){if(this.__queueDirty)this.__rebuildQueue();else if(this.__zOrderChanged()){const compareZ=(t,e)=>t.state.zIndex-e.state.zIndex;this.componentQueue.sort(compareZ),this.toolsQueue.sort(compareZ),this.__snapshotZ()}}__rebuildQueue(){const compareZ=(t,e)=>t.state.zIndex-e.state.zIndex;this.componentQueue=flattenTree([],this.ice.childNodes),this.componentQueue.sort(compareZ),this.toolsQueue=flattenTree([],this.ice.toolNodes),this.toolsQueue.sort(compareZ),this.__queueDirty=!1,this.__snapshotZ(),this.__snap=new WeakMap,this.__primed=!1}__snapshotZ(){const t=this.componentQueue.length+this.toolsQueue.length;this.__zSnap.length!==t&&(this.__zSnap=new Array(t));let e=0;for(let t=0;t<this.componentQueue.length;t++)this.__zSnap[e++]=this.componentQueue[t].state.zIndex;for(let t=0;t<this.toolsQueue.length;t++)this.__zSnap[e++]=this.toolsQueue[t].state.zIndex}__zOrderChanged(){const t=this.componentQueue.length+this.toolsQueue.length;if(this.__zSnap.length!==t)return!0;let e=0;for(let t=0;t<this.componentQueue.length;t++)if(this.__zSnap[e++]!==this.componentQueue[t].state.zIndex)return!0;for(let t=0;t<this.toolsQueue.length;t++)if(this.__zSnap[e++]!==this.toolsQueue[t].state.zIndex)return!0;return!1}doRenderFull(){this.ice.ctx.setTransform(1,0,0,1,0,0),this.ice.ctx.clearRect(0,0,this.ice.canvasWidth,this.ice.canvasHeight);const t=this.__visibleWorldRect();let e=0;for(let i=0;i<this.componentQueue.length;i++){const s=this.componentQueue[i];if(t&&s.isEffectivelyVisible()&&!s.dirty){const i=this.__snap.get(s);if(i&&!intersects(i,t)){e++;continue}}this.__ensureContext(s),this.__renderComponent(s),s.isEffectivelyVisible()&&this.__capture(s)}this.__lastFrameCulled=e;for(let t=0;t<this.toolsQueue.length;t++){const e=this.toolsQueue[t];this.__ensureContext(e),e.render(),e.isEffectivelyVisible()&&this.__capture(e)}this.__invokePluginRender(null),this.__finalizeHidden(this.componentQueue),this.__finalizeHidden(this.toolsQueue),this.__primed=!0,this.ice.dirty=!1,this.ice.evtBus.trigger(l)}__collect(){if(!this.__primed)return null;const t=this.ice.ctx,e=this.ice.canvasWidth||0,i=this.ice.canvasHeight||0;if(!e||!i)return null;if(!t||"function"!=typeof t.save||"function"!=typeof t.clip||"function"!=typeof t.restore)return null;const s=this.__preCount(this.componentQueue);if(0===s.dirty)return null;if(s.visible>0&&s.dirty/s.visible>.2)return null;const o=[];if(!this.__collectDirtyBoxes(o,this.componentQueue))return null;if(!this.__collectDirtyBoxes(o,this.toolsQueue))return null;const r=function coalesceRegions(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:6;const i=[];for(let e=0;e<t.length;e++){const s=t[e];if(!isFiniteBox(s))continue;let o=!1;for(let t=0;t<i.length;t++)if(intersects(i[t],s)&&isWorthMerging(i[t],s)){i[t]=mergeBox(i[t],s),o=!0;break}o||i.push([s[0],s[1],s[2],s[3]])}let s=!0;for(;s;){s=!1;for(let t=0;t<i.length&&!s;t++)for(let e=t+1;e<i.length;e++)if(intersects(i[t],i[e])&&isWorthMerging(i[t],i[e])){i[t]=mergeBox(i[t],i[e]),i.splice(e,1),s=!0;break}}for(;i.length>e;){let t=0,e=1,s=1/0;for(let o=0;o<i.length;o++)for(let r=o+1;r<i.length;r++){const a=boxArea(mergeBox(i[o],i[r]))-boxArea(i[o])-boxArea(i[r]);isWorthMerging(i[o],i[r])&&a<s&&(s=a,t=o,e=r)}if(s===1/0){if(i.length>24)return[i.reduce((t,e)=>mergeBox(t,e),[1/0,1/0,-1/0,-1/0])];break}i[t]=mergeBox(i[t],i[e]),i.splice(e,1)}return i}(o,6);if(!r.length)return null;const a=this.__renderViewport(),l=[];for(let t=0;t<r.length;t++)integerAlign(r[t]),l.push(mapBoxToRender(r[t],a));if(function regionsAreaRatio(t,e,i){if(!e||!i)return 1;let s=0;for(let e=0;e<t.length;e++)s+=boxArea(t[e]);return s/(e*i)}(l,e,i)>.35)return null;if(this.__riskyIntersectsRegions(r,this.componentQueue))return null;if(this.__riskyIntersectsRegions(r,this.toolsQueue))return null;const h=[1/0,1/0,-1/0,-1/0];for(let t=0;t<r.length;t++)unionBoxes(h,r[t]);return{regions:r,renderRegions:l,bounding:h}}__renderViewport(){return"function"==typeof this.ice.getRenderViewport?this.ice.getRenderViewport():this.ice.viewport}__preCount(t){let e=0,i=0,s=!1;for(let o=0;o<t.length;o++){const r=t[o];r.isEffectivelyVisible()?(e++,r.dirty&&i++):this.__snap.has(r)&&(s=!0)}return{visible:e,dirty:i,hiddenErase:s}}__collectDirtyBoxes(t,e){for(let i=0;i<e.length;i++){const s=e[i];if(!s.isEffectivelyVisible()){const e=this.__snap.get(s);e&&t.push([e[0],e[1],e[2],e[3]]);continue}if(!s.dirty)continue;s.__paramsDirtyAtCollect=s.paramsDirty;const o=this.__freshBox(s);if(!o)return!1;const r=this.__snap.get(s);t.push(r?mergeBox(r,o):o)}return!0}__riskyIntersectsRegions(t,e){for(let i=0;i<e.length;i++){const s=e[i];if(!s.isEffectivelyVisible())continue;if(!this.__isDotPath(s)&&!this.__isText(s)&&isOpaqueDrawing(s.state))continue;if(s.dirty){if(!this.__isText(s))continue;if(!s.__paramsDirtyAtCollect&&this.cache.isCachable(s)&&this.cache.has(s))continue;return!0}if(this.cache.isCachable(s)&&this.cache.has(s))continue;const o=this.__snap.get(s);if(!o)return!0;for(let e=0;e<t.length;e++)if(intersects(o,t[e]))return!0}return!1}__renderDirtyRect(t){const e=this.ice.ctx,i=t.regions,s=t.renderRegions;for(let t=0;t<i.length;t++){const o=i[t],r=s[t],a=r[0],l=r[1],h=r[2]-r[0],c=r[3]-r[1];if(!(h<=0||c<=0)){e.save(),e.setTransform(1,0,0,1,0,0),e.clearRect(a,l,h,c),e.beginPath(),e.rect(a,l,h,c),e.clip();for(let t=0;t<this.componentQueue.length;t++){const e=this.componentQueue[t];if(!e.isEffectivelyVisible())continue;const i=this.__snap.get(e);(e.dirty||i&&intersects(i,o))&&(this.__ensureContext(e),this.__renderComponent(e),this.__capture(e))}for(let t=0;t<this.toolsQueue.length;t++){const e=this.toolsQueue[t];e.isEffectivelyVisible()&&(this.__ensureContext(e),e.render(),this.__capture(e))}this.__invokePluginRender(o),e.restore()}}this.__finalizeHidden(this.componentQueue),this.__finalizeHidden(this.toolsQueue),this.ice.dirty=!1,this.ice.evtBus.trigger(l)}__invokePluginRender(t){const e=this.ice&&this.ice.plugins;if(!e||"function"!=typeof e.hasRenderHooks||!e.hasRenderHooks())return;const i=this.ice.ctx,s=this.__renderViewport();i.setTransform(s.scale,0,0,s.scale,s.tx,s.ty),e.invokeRenderHooks({ctx:i,mode:this.renderMode,region:t,width:this.ice.canvasWidth,height:this.ice.canvasHeight})}__ensureContext(t){t.ctx===this.ice.ctx&&t.ice===this.ice||(t.root=this.ice.root,t.ctx=this.ice.ctx,t.evtBus=this.ice.evtBus,t.ice=this.ice)}getWorldBox(t){return this.__snap.get(t)||null}__visibleWorldRect(){const t=this.ice.canvasWidth||0,e=this.ice.canvasHeight||0;if(!t||!e)return null;const[i,s]=this.ice.screenToWorld(0,0),[o,r]=this.ice.screenToWorld(t,e),a=[Math.min(i,o),Math.min(s,r),Math.max(i,o),Math.max(s,r)];return isFiniteBox(a)?a:null}__renderComponent(t){this.cache.render(t)||t.render()}__isDotPath(t){return"function"==typeof t.calcDots}__isText(t){return"function"==typeof t.measureText}__freshBox(t){try{"function"==typeof t.refreshParams&&t.refreshParams();const e=t.getMaxBoundingBox(!0).getMinAndMaxPoint(),i=stylePaintPad(t.state),s=[e.minX-i,e.minY-i,e.maxX+i,e.maxY+i];return isFiniteBox(s)?s:null}catch(t){return null}}__capture(t){let e=this.__snap.get(t);e||(e=new Float64Array(4),this.__snap.set(t,e)),t.__paintWorldBox(e);const i=stylePaintPad(t.state);e[0]-=i,e[1]-=i,e[2]+=i,e[3]+=i}__finalizeHidden(t){for(let e=0;e<t.length;e++){const i=t[e];!i.isEffectivelyVisible()&&i.dirty&&(i.dirty=!1,this.__snap.delete(i))}}};function paint(t){return null==t||""===t?null:String(t)}function gradientDesc(t){if(!t||"object"==typeof t){if(t&&t.__iceGradient)return t.__iceGradient;if(t&&("linear"===t.type||"radial"===t.type||"conic"===t.type)&&t.stops)return t}return null}function gradientDef(t,e){const i=[],s=e&&e.stops;if(Array.isArray(s)&&s.forEach(t=>{Array.isArray(t)&&i.push([Number(t[0])||0,String(t[1])])}),!i.length)return"";const o=i.map(t=>{let[e,i]=t;return'<stop offset="'.concat(escapeXml$1(String(e)),'" stop-color="').concat(escapeXml$1(i),'"/>')}).join("");if("radial"===function gradientKind(t){return t&&"radial"===t.type?"radial":"linear"}(e)){const i=Array.isArray(e.center)?e.center:[0,0],s=Number(e.radius)||.5;return'<radialGradient id="'.concat(t,'" gradientUnits="userSpaceOnUse" cx="').concat(i[0],'" cy="').concat(i[1],'" r="').concat(s,'">').concat(o,"</radialGradient>")}const r=Array.isArray(e.from)?e.from:[0,0],a=Array.isArray(e.to)?e.to:[0,1];return'<linearGradient id="'.concat(t,'" gradientUnits="userSpaceOnUse" x1="').concat(r[0],'" y1="').concat(r[1],'" x2="').concat(a[0],'" y2="').concat(a[1],'">').concat(o,"</linearGradient>")}function escapeXml$1(t){return String(t).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}const xt={top:"text-before-edge",hanging:"hanging",middle:"central",alphabetic:"alphabetic",ideographic:"ideographic",bottom:"text-after-edge"},wt=2*Math.PI;function directionalDelta(t,e,i){let s=e-t;if(i){for(;s>1e-12;)s-=wt;for(;s<-wt;)s+=wt;Math.abs(s)<1e-12&&(s=-wt)}else{for(;s<-1e-12;)s+=wt;for(;s>wt;)s-=wt;Math.abs(s)<1e-12&&(s=wt)}return s}function matrixAttr(t,e){const n=t=>String(Number((t||0).toFixed(e)));return"matrix(".concat(n(t[0])," ").concat(n(t[1])," ").concat(n(t[2])," ").concat(n(t[3])," ").concat(n(t[4])," ").concat(n(t[5]),")")}function exportSvg(t){return exportSvgResult(t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).svg}function exportSvgResult(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i="number"==typeof e.precision?e.precision:2,s=Number(e.scale)>0?Number(e.scale):1,o=!!(t&&t.childNodes&&t.getRenderViewport),r=o?t:t&&t.ice,a=[],collect=t=>{for(let e=0;e<t.length;e++){const i=t[e];a.push(i),i.childNodes&&i.childNodes.length&&collect(i.childNodes)}};collect(o?t.childNodes:[t]),e.includeTools&&r&&r.toolNodes&&collect(r.toolNodes),a.sort((t,e)=>(t.state.zIndex||0)-(e.state.zIndex||0));let l=[1,0,0,1,0,0],h=0,c=0;if("viewport"===e.area&&o){const t=r.getRenderViewport(),e=Number(r.canvasWidth)||0,i=Number(r.canvasHeight)||0;l=[t.scale,0,0,t.scale,t.tx,t.ty],h=e,c=i}else{let t=1/0,i=1/0,o=-1/0,r=-1/0;a.forEach(e=>{if("function"==typeof e.isEffectivelyVisible&&!e.isEffectivelyVisible())return;"function"==typeof e.refreshParams&&e.refreshParams(),"function"==typeof e.composeMatrix&&e.composeMatrix();let s=null;if("function"==typeof e.__paintWorldBox)s=e.__paintWorldBox();else if("function"==typeof e.getMinBoundingBox){const t=e.getMinBoundingBox(!0);s=[t.tl[0],t.tl[1],t.br[0],t.br[1]]}s&&isFinite(s[0])&&isFinite(s[1])&&isFinite(s[2])&&isFinite(s[3])&&(t=Math.min(t,s[0]),i=Math.min(i,s[1]),o=Math.max(o,s[2]),r=Math.max(r,s[3]))});const d=Number(e.padding)>=0?Number(e.padding):0;isFinite(t)||(t=0,i=0,o=1,r=1),t-=d,i-=d,o+=d,r+=d;const u=Math.max(o-t,1),p=Math.max(r-i,1);l=[s,0,0,s,-t*s,-i*s],h=u*s,c=p*s}const d=[],u=[];let p=0;a.forEach(t=>{if("function"==typeof t.isEffectivelyVisible&&!t.isEffectivelyVisible())return;const e=t.state,s=function mergedStyle(t){const e=t.props&&t.props.style,i=t.state&&t.state.style;return e||i?_objectSpread2(_objectSpread2({fillStyle:void 0},e),i):{}}(t),o="function"==typeof t.composeMatrix?t.composeMatrix():e.composedMatrix,r=[],a=[];let l=t.parentNode;for(;l&&l.state;)l.state.clipChildren&&"function"==typeof l.__paintWorldBox&&a.push(l.__paintWorldBox()),l=l.parentNode;const h=['transform="'.concat(matrixAttr(o,i),'"')];if(a.length){const t="ice-clip-".concat(p++),e=a[a.length-1];d.push('<clipPath id="'.concat(t,'"><rect x="').concat(e[0].toFixed(i),'" y="').concat(e[1].toFixed(i),'" width="').concat((e[2]-e[0]).toFixed(i),'" height="').concat((e[3]-e[1]).toFixed(i),'"/></clipPath>')),h.push('clip-path="url(#'.concat(t,')"'))}const c="function"==typeof t.getEffectiveOpacity?t.getEffectiveOpacity():1,f=void 0===s.globalAlpha?1:Number(s.globalAlpha),g=c*(f>=0?f:1);1!==g&&h.push('opacity="'.concat(Number(g.toFixed(3)),'"'));const m=function shadowFilter(t,e){let i=null;if("string"==typeof e.shadow&&A[e.shadow])i=A[e.shadow];else{const t=Number(e.shadowBlur)||0,s=Number(e.shadowOffsetX)||0,o=Number(e.shadowOffsetY)||0;(t||s||o)&&(i={shadowColor:e.shadowColor||"rgba(0,0,0,0.35)",shadowBlur:t,shadowOffsetX:s,shadowOffsetY:o})}if(!i)return null;const s=String(i.shadowColor||"rgba(0,0,0,0.35)"),o=s.match(/^rgba?\(\s*([0-9.]+)\s*,\s*([0-9.]+)\s*,\s*([0-9.]+)\s*(?:,\s*([0-9.]+)\s*)?\)$/i),r=o?"rgb(".concat(Number(o[1]),", ").concat(Number(o[2]),", ").concat(Number(o[3]),")"):s,a=o&&void 0!==o[4]?Number(o[4]):1,l=Number(i.shadowBlur)||0;return{def:'<filter id="'.concat(t,'" x="-50%" y="-50%" width="200%" height="200%"><feDropShadow dx="').concat(Number(i.shadowOffsetX||0),'" dy="').concat(Number(i.shadowOffsetY||0),'" stdDeviation="').concat(Number((l/2).toFixed(2)),'" flood-color="').concat(escapeXml$1(r),'" flood-opacity="').concat(a,'"/></filter>'),url:"url(#".concat(t,")")}}("ice-shadow-".concat(p),s);m&&(p++,d.push(m.def),h.push('filter="'.concat(m.url,'"'))),r.push(...h);let y="";if(t instanceof z){"function"==typeof t.ensurePathBuilt&&t.ensurePathBuilt();const o=t.path2D,r=o&&o._commands||[],a=s.fillGradient||gradientDesc(s.fillStyle),l=s.strokeGradient||gradientDesc(s.strokeStyle),h=!(!1===e.fill||!s.fillStyle&&!a),c=!(!1===e.stroke||!s.strokeStyle&&!l);if(r.length&&(h||c)){const h=function commandsToPathData(t,e,i){const n=t=>{const e=Number(t.toFixed(i));return String(e)},s=[];let o=!1;for(let e=0;e<t.length;e++){const i=t[e],r=i[0];if("moveTo"===r)s.push("".concat(o?"L":"M").concat(n(i[1]),",").concat(n(i[2]))),o=!0;else if("lineTo"===r)s.push("L".concat(n(i[1]),",").concat(n(i[2]))),o=!0;else if("bezierCurveTo"===r)s.push("C".concat(n(i[1]),",").concat(n(i[2])," ").concat(n(i[3]),",").concat(n(i[4])," ").concat(n(i[5]),",").concat(n(i[6]))),o=!0;else if("quadraticCurveTo"===r)s.push("Q".concat(n(i[1]),",").concat(n(i[2])," ").concat(n(i[3]),",").concat(n(i[4]))),o=!0;else if("rect"===r)s.push("M".concat(n(i[1]),",").concat(n(i[2]),"h").concat(n(i[3]),"v").concat(n(i[4]),"h").concat(n(-i[3]),"z")),o=!1;else if("arc"===r){const[t,e,r,a,l,h]=i.slice(1),c=t+r*Math.cos(a),d=e+r*Math.sin(a),u=t+r*Math.cos(l),p=e+r*Math.sin(l),f=directionalDelta(a,l,!!h),g=Math.abs(f)>Math.PI?1:0,m=f>0?1:0;if(o||s.push("M".concat(n(c),",").concat(n(d))),Math.abs(f)>=wt-1e-6){const i=t+r*Math.cos(a+Math.PI),o=e+r*Math.sin(a+Math.PI);s.push("A".concat(n(r),",").concat(n(r)," 0 0 ").concat(m," ").concat(n(i),",").concat(n(o))),s.push("A".concat(n(r),",").concat(n(r)," 0 0 ").concat(m," ").concat(n(c),",").concat(n(d)))}else s.push("A".concat(n(r),",").concat(n(r)," 0 ").concat(g," ").concat(m," ").concat(n(u),",").concat(n(p)));o=!0}else if("arcTo"===r){const[t,e]=i.slice(1);s.push("L".concat(n(t),",").concat(n(e))),o=!0}else if("ellipse"===r){const[t,e,r,a,l,h,c,d]=i.slice(1),u=t+r*Math.cos(h)*Math.cos(l)-a*Math.sin(h)*Math.sin(l),p=e+r*Math.cos(h)*Math.sin(l)+a*Math.sin(h)*Math.cos(l),f=t+r*Math.cos(c)*Math.cos(l)-a*Math.sin(c)*Math.sin(l),g=e+r*Math.cos(c)*Math.sin(l)+a*Math.sin(c)*Math.cos(l),m=directionalDelta(h,c,!!d),y=Math.abs(m)>Math.PI?1:0,_=m>0?1:0;if(o||s.push("M".concat(n(u),",").concat(n(p))),Math.abs(m)>=wt-1e-6){const i=t+r*Math.cos(h+Math.PI)*Math.cos(l)-a*Math.sin(h+Math.PI)*Math.sin(l),o=e+r*Math.cos(h+Math.PI)*Math.sin(l)+a*Math.sin(h+Math.PI)*Math.cos(l);s.push("A".concat(n(r),",").concat(n(a)," 0 0 ").concat(_," ").concat(n(i),",").concat(n(o))),s.push("A".concat(n(r),",").concat(n(a)," 0 0 ").concat(_," ").concat(n(u),",").concat(n(p)))}else s.push("A".concat(n(r),",").concat(n(a)," 0 ").concat(y," ").concat(_," ").concat(n(f),",").concat(n(g)));o=!0}else"closePath"===r&&(s.length&&!/z$/i.test(s[s.length-1])&&s.push("Z"),o=!1)}const r=t.some(t=>"closePath"===t[0]);return!e||r||/z\s*$/i.test(s.join(" "))||s.push("Z"),s.join(" ")}(r,!(!o||!o._closed)||!1!==e.closePath,i),c=!1===e.fill||a?null:paint(s.fillStyle),u=!1===e.stroke||l?null:paint(s.strokeStyle),f=[];if(a&&!1!==e.fill){const t="ice-grad-".concat(p++),e=gradientDef(t,a);e?(d.push(e),f.push('fill="url(#'.concat(t,')"'))):c?f.push('fill="'.concat(escapeXml$1(c),'"')):f.push('fill="none"')}else f.push('fill="'.concat(c?escapeXml$1(c):"none",'"'));if(l&&!1!==e.stroke){const t="ice-grad-".concat(p++),e=gradientDef(t,l);e&&(d.push(e),f.push('stroke="url(#'.concat(t,')"')))}else u&&f.push('stroke="'.concat(escapeXml$1(u),'"'));void 0!==s.lineWidth&&f.push('stroke-width="'.concat(Number(s.lineWidth),'"')),Array.isArray(e.lineDash)&&e.lineDash.length&&(f.push('stroke-dasharray="'.concat(e.lineDash.join(" "),'"')),e.lineDashOffset&&f.push('stroke-dashoffset="'.concat(Number(e.lineDashOffset),'"'))),e.lineJoin&&f.push('stroke-linejoin="'.concat(e.lineJoin,'"')),e.lineCap&&f.push('stroke-linecap="'.concat(e.lineCap,'"')),y='<path d="'.concat(h,'" ').concat(f.join(" "),"/>");const g="function"==typeof t.getLabelRenderInfo?t.getLabelRenderInfo():null;if(g){const t=Number((g.x-g.halfW).toFixed(i)),e=Number((g.y-g.halfH).toFixed(i)),s=Number((2*g.halfW).toFixed(i)),o=Number((2*g.halfH).toFixed(i));y+='<rect x="'.concat(t,'" y="').concat(e,'" width="').concat(s,'" height="').concat(o,'" fill="').concat(escapeXml$1(g.backgroundColor),'"/>')+'<text x="'.concat(Number(g.x.toFixed(i)),'" y="').concat(Number(g.y.toFixed(i)),'" ')+'font-family="Arial" font-size="'.concat(Number(g.fontSize),'" fill="').concat(escapeXml$1(g.fillStyle),'" ')+'text-anchor="middle" dominant-baseline="central">'.concat(escapeXml$1(g.text),"</text>")}}}else if(t instanceof pt){const o="function"==typeof t.getRenderLines?t.getRenderLines():null;if(o&&o.length){const t=!1!==e.fill?paint(s.fillStyle):null,r=e.stroke?paint(s.strokeStyle):null,a=function fontAttributes(t,e){let i=t.fontFamily,s=t.fontSize,o=t.fontWeight,r=t.fontStyle;if(!("string"!=typeof t.font||i&&s)){const e=t.font.match(/^(?:(italic|oblique)\s+)?(?:(bold|bolder|lighter|[0-9]{3})\s+)?([0-9.]+)px\s+(.+)$/);e&&(r=r||e[1],o=o||e[2],s=s||e[3],i=i||e[4])}const a=[];return i&&a.push('font-family="'.concat(escapeXml$1(String(i)),'"')),null!=s&&""!==s&&a.push('font-size="'.concat(Number(Number(s).toFixed(e)),'"')),o&&a.push('font-weight="'.concat(escapeXml$1(String(o)),'"')),r&&a.push('font-style="'.concat(escapeXml$1(String(r)),'"')),a}(s,i);a.push('fill="'.concat(t?escapeXml$1(t):"none",'"')),r&&(a.push('stroke="'.concat(escapeXml$1(r),'"')),a.push('stroke-width="'.concat(Number(s.lineWidth)||1,'"')));let l=null;"center"===s.textAlign?(a.push('text-anchor="middle"'),l=0):"right"!==s.textAlign&&"end"!==s.textAlign||(a.push('text-anchor="end"'),l=e.localOrigin[0]-(Number(s.paddingRight)||0));const h=xt[s.textBaseline||"bottom"];h&&a.push('dominant-baseline="'.concat(h,'"'));const c=o.map(t=>{const e=null===l?t.x:l;return'<tspan x="'.concat(Number(e.toFixed(i)),'" y="').concat(Number(t.y.toFixed(i)),'">').concat(escapeXml$1(t.text),"</tspan>")}).join("");y="<text ".concat(a.join(" "),">").concat(c,"</text>")}}else if(t instanceof rt&&e.src&&!(e.sw>0&&e.sh>0)){const t=0-e.localOrigin[0],i=0-e.localOrigin[1],s=['x="'.concat(t,'"'),'y="'.concat(i,'"'),'width="'.concat(e.width,'"'),'height="'.concat(e.height,'"'),'href="'.concat(escapeXml$1(String(e.src)),'"')];if("circle"===(e.clipType||"none")){const t="ice-clip-".concat(p++),i=Math.min(e.width,e.height)/2;d.push('<clipPath id="'.concat(t,'"><circle cx="0" cy="0" r="').concat(i,'"/></clipPath>')),s.push('clip-path="url(#'.concat(t,')"'))}y="<image ".concat(s.join(" "),' preserveAspectRatio="none"/>')}y&&u.push("<g ".concat(r.join(" "),">").concat(y,"</g>"))});const f=e.background?'<rect x="0" y="0" width="'.concat(h,'" height="').concat(c,'" fill="').concat(escapeXml$1(e.background),'"/>'):"";return{svg:['<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="'.concat(Number(h.toFixed(i)),'" height="').concat(Number(c.toFixed(i)),'" viewBox="0 0 ').concat(Number(h.toFixed(i))," ").concat(Number(c.toFixed(i)),'">'),d.length?"<defs>".concat(d.join(""),"</defs>"):"",f,'<g transform="'.concat(matrixAttr(l,i),'">'),u.join(""),"</g>","</svg>"].filter(Boolean).join(""),width:h,height:c}}class ImageCache{constructor(t){_defineProperty$1(this,"imageCache",new Map),this.ice=t}setImage(t){let e=this.imageCache.get(t);return e||(e=T.createImage(),e.onload=()=>{this.ice.dirty=!0},e.onerror=()=>{},e.src=t,this.imageCache.size>ImageCache.CACHE_SIZE&&this.imageCache.delete(this.imageCache.keys().next().value),this.imageCache.set(t,e)),{loaded:this.loaded(e),image:e}}loaded(t){return t.complete&&t.naturalWidth>0}}function tagGradient(t,e){if(!t||"function"!=typeof t.addColorStop)return t;Object.defineProperty(t,"__iceGradient",{value:e,enumerable:!1,configurable:!0});const i=t.addColorStop.bind(t);return t.addColorStop=(t,s)=>{e.stops.push([t,s]),i(t,s)},t}_defineProperty$1(ImageCache,"CACHE_SIZE",100);class ICE{constructor(){_defineProperty$1(this,"childNodes",[]),_defineProperty$1(this,"toolNodes",[]),_defineProperty$1(this,"__childSet",new WeakSet),_defineProperty$1(this,"__toolSet",new WeakSet),_defineProperty$1(this,"canvasWidth",0),_defineProperty$1(this,"canvasHeight",0),_defineProperty$1(this,"viewport",{scale:1,tx:0,ty:0}),_defineProperty$1(this,"dpr",1),_defineProperty$1(this,"__renderVp",null),_defineProperty$1(this,"__contentBox",null),_defineProperty$1(this,"__inputRectSnapshot",null),_defineProperty$1(this,"selectionList",[]),_defineProperty$1(this,"plugins",new PluginHost(this)),_defineProperty$1(this,"theme",getTheme()),_defineProperty$1(this,"typeMapping",{}),_defineProperty$1(this,"__typeIdMapping",null),_defineProperty$1(this,"__dirty",!0),_defineProperty$1(this,"__initialized",!1)}__resolveCanvasEl(t){return t&&"function"==typeof t.getContext?t:t&&t.canvas&&"function"==typeof t.canvas.getContext?t.canvas:null}init(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t)throw new Error("ICE.init() failed...");const i=this.__resolveCanvasEl(t);if(this.__initialized){if(i&&i===this.canvasEl)return this;throw new Error("同一个 ICE 实例已经绑定到其它 canvas,如需重新初始化请先调用 destroy()。")}for(const t in gt)this.typeMapping[t]=gt[t];return this.__typeIdMapping=null,this.root=T,isString(t)?this.canvasEl=this.root.document.getElementById(t):i&&(this.canvasEl=i),e&&"number"==typeof e.dpr&&e.dpr>0&&(this.dpr=e.dpr),this.canvasEl?(this.canvasEl.oncontextmenu=function(t){t.preventDefault()},this.canvasWidth=this.canvasEl.width,this.canvasHeight=this.canvasEl.height,this.canvasBoundingClientRect=this.canvasEl.getBoundingClientRect(),this.__rememberInputRect(this.canvasBoundingClientRect),this.__contentBox=this.__readContentBox(this.canvasBoundingClientRect),this.ctx=this.canvasEl.getContext("2d"),this.canvasEl.style&&(this.canvasEl.style.touchAction="none"),1!==this.dpr&&this.__applyDevicePixelRatio()):this.ctx=t,this.evtBus=new ot,yt.registerEvtBus(this.evtBus),yt.start(),nt.registerEvtBus(this.evtBus),nt.start(),this.eventDispatcher=new it(this).start(),this.animationManager=new P(this).start(),this.controlPanelManager=new V(this).start(),this.renderer=new vt(this,e).start(),this.alignmentGuide=new G(this),this.linkSlotManager=new ICELinkSlotManager(this).start(),this.serializer=new Serializer(this),this.deserializer=new Deserializer(this),this.imageCache=new ImageCache(this),this.__initialized=!0,this}destroy(){if(!this.__initialized)return;const t=[this.renderer,this.animationManager,this.controlPanelManager,this.linkSlotManager];for(let e=0;e<t.length;e++){const i=t[e];i&&"function"==typeof i.stop&&i.stop()}this.eventDispatcher&&(this.eventDispatcher.stopped=!0),this.canvasEl&&this.canvasEl.oncontextmenu&&(this.canvasEl.oncontextmenu=null),this.evtBus&&(yt.delEvtBus(this.evtBus),nt.delEvtBus(this.evtBus)),0===yt.evtBuses.length&&yt.stop(),this.plugins&&this.plugins.clear(),this.clearAll(),this.renderer=null,this.animationManager=null,this.controlPanelManager=null,this.linkSlotManager=null,this.eventDispatcher=null,this.alignmentGuide=null,this.serializer=null,this.deserializer=null,this.imageCache=null,this.ctx=null,this.canvasEl=null,this.canvasBoundingClientRect=null,this.dpr=1,this.__renderVp=null,this.__contentBox=null,this.__inputRectSnapshot=null,this.__initialized=!1}addTool(t){this.__toolSet.has(t)||(this.evtBus.trigger(s,null,{component:t}),t.trigger(s),t.ice=this,t.ctx=this.ctx,t.evtBus=this.evtBus,this.toolNodes.push(t),this.__toolSet.add(t),this.dirty=!0,this.renderer&&this.renderer.markQueueDirty(),t&&"function"==typeof t.__reapplyPreset&&t.__reapplyPreset(this.theme),this.evtBus.trigger(o,null,{component:t}),t.trigger(o))}removeTool(t){if(!this.__toolSet.has(t))return;this.evtBus.trigger(r,null,{component:t}),t.trigger(r);const e=this.toolNodes.indexOf(t);-1!==e&&this.toolNodes.splice(e,1),this.__toolSet.delete(t),this.evtBus.trigger(a,null,{component:t}),t.trigger(a),this.dirty=!0,this.renderer&&this.renderer.markQueueDirty(),t.destory()}addChild(t){let e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(this.__childSet.has(t))return;this.evtBus.trigger(s,null,{component:t}),t.trigger(s),t.ice=this,t.ctx=this.ctx,t.evtBus=this.evtBus,t.parentNode=null,this.childNodes.push(t),this.__childSet.add(t);let i=!1;const r=t.props.animations;if(r)for(const t in r){i=!0;break}i&&this.animationManager.add(t),this.dirty=e,this.renderer&&this.renderer.markQueueDirty(),t&&"function"==typeof t.__reapplyPreset&&t.__reapplyPreset(this.theme),this.evtBus.trigger(o,null,{component:t}),t.trigger(o)}addChildren(t){for(let e=0;e<t.length;e++)this.addChild(t[e],!1);this.dirty=!0}removeChild(t){let e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!this.__childSet.has(t))return;this.evtBus.trigger(r,null,{component:t}),t.trigger(r);const i=this.childNodes.indexOf(t);-1!==i&&this.childNodes.splice(i,1),this.__childSet.delete(t),this.evtBus.trigger(a,null,{component:t}),t.trigger(a),this.dirty=e,this.renderer&&this.renderer.markQueueDirty(),t.destory()}removeChildren(t){for(let e=0;e<t.length;e++)this.removeChild(t[e],!1);this.dirty=!0}clearAll(){this.removeChildren([...this.childNodes])}findComponent(t){if(t)return this.childNodes.filter(e=>e.props.id===t)[0]||this.__findComponentInTree(this.childNodes,t)}__findComponentInTree(t,e){for(let i=0;i<t.length;i++){const s=t[i];if(s.props&&s.props.id===e)return s;if(s.childNodes&&s.childNodes.length){const t=this.__findComponentInTree(s.childNodes,e);if(t)return t}}}set dirty(t){this.__dirty=t}get dirty(){return this.__dirty}registerType(t,e){this.typeMapping[t]=e,this.__typeIdMapping=null}getTypeId(t){if(!t)return;let e=this.__typeIdMapping;if(!e){e=new Map;for(const t in this.typeMapping){const i=this.typeMapping[t];"function"!=typeof i||e.has(i)||e.set(i,t)}this.__typeIdMapping=e}return e.get(t)}use(t){return this.plugins.use(t)}unuse(t){return this.plugins.unuse(t)}getPlugins(){return this.plugins.names}setSelection(t){return this.selectionList=null==t?[]:Array.isArray(t)?t:[t],!!this.plugins&&this.plugins.syncTools(this.selectionList[0]||null)}getAccessibilityTree(t){return buildAccessibilityTree(this,t)}setFocusedComponent(t){let e=t;return"string"==typeof t&&(e=flattenAllComponents(this).filter(e=>e.props&&e.props.id===t)[0]||null),this.eventDispatcher&&(this.eventDispatcher.focusedComponent=e||null),this}getFocusedComponent(){return this.eventDispatcher?this.eventDispatcher.focusedComponent:null}getType(t){return this.typeMapping[t]}loadFont(t,e){return T.loadFont(t,e)}setTheme(t){return this.theme=resolveTheme(t,this.theme),this.__reapplyPresets(),this}setViewport(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;const s=Number(t);return this.viewport={scale:s>0?s:1,tx:Number(e)||0,ty:Number(i)||0},this.dirty=!0,this.renderer&&this.renderer.markQueueDirty(),this}screenToWorld(t,e){const i=this.viewport;return[(t-i.tx)/i.scale,(e-i.ty)/i.scale]}worldToScreen(t,e){const i=this.viewport;return[t*i.scale+i.tx,e*i.scale+i.ty]}getRenderViewport(){const t=this.viewport;if(1===this.dpr)return t;let e=this.__renderVp;return e||(e=this.__renderVp={scale:1,tx:0,ty:0,__d:1,__s:1,__tx:0,__ty:0}),e.__d===this.dpr&&e.__s===t.scale&&e.__tx===t.tx&&e.__ty===t.ty||(e.__d=this.dpr,e.__s=t.scale,e.__tx=t.tx,e.__ty=t.ty,e.scale=t.scale*this.dpr,e.tx=t.tx*this.dpr,e.ty=t.ty*this.dpr),e}__applyDevicePixelRatio(){const t=this.canvasEl;if(!t)return;const e=this.__readContentBox("function"==typeof t.getBoundingClientRect?t.getBoundingClientRect():null),i=e.width||t.width,s=e.height||t.height;t.width=Math.round(i*this.dpr),t.height=Math.round(s*this.dpr),t.style&&(t.style.width=i+"px",t.style.height=s+"px"),this.canvasWidth=t.width,this.canvasHeight=t.height,this.updateCanvasBoundingRect()}updateCanvasBoundingRect(){return this.canvasEl&&"function"==typeof this.canvasEl.getBoundingClientRect&&(this.canvasBoundingClientRect=this.canvasEl.getBoundingClientRect(),this.__rememberInputRect(this.canvasBoundingClientRect),this.__contentBox=this.__readContentBox(this.canvasBoundingClientRect)),this.canvasBoundingClientRect}__rememberInputRect(t){if(!t)return;const e=this.__inputRectSnapshot||(this.__inputRectSnapshot={left:0,top:0,width:0,height:0});e.left=t.left||0,e.top=t.top||0,e.width=t.width||0,e.height=t.height||0}refreshInputRect(){const t=this.canvasEl;if(!t||"function"!=typeof t.getBoundingClientRect)return this.canvasBoundingClientRect;const e=t.getBoundingClientRect(),i=this.__inputRectSnapshot,s=!!i,o=s?i.left:0,r=s?i.top:0,a=s?i.width:0,l=s?i.height:0;this.canvasBoundingClientRect=e,this.__rememberInputRect(e);const h=this.__contentBox;return s&&h&&Math.abs(e.width-a)<.01&&Math.abs(e.height-l)<.01?(h.left+=e.left-o,h.top+=e.top-r):this.__contentBox=this.__readContentBox(e),e}__readContentBox(t){const e=this.canvasEl;let i=0,s=0,o=0,r=0,a=0,l=0,h=0,c=0;const d=this.root&&"function"==typeof this.root.getComputedStyle&&e?this.root.getComputedStyle(e):null;if(d){const num=t=>{const e=parseFloat(t);return isFinite(e)?e:0};i=num(d.borderLeftWidth),s=num(d.borderRightWidth),o=num(d.borderTopWidth),r=num(d.borderBottomWidth),a=num(d.paddingLeft),l=num(d.paddingRight),h=num(d.paddingTop),c=num(d.paddingBottom)}const u=t&&t.left||0,p=t&&t.top||0,f=t&&t.width||0,g=t&&t.height||0;return{left:u+i+a,top:p+o+h,width:Math.max(0,f-i-s-a-l),height:Math.max(0,g-o-r-h-c)}}getInputRect(){return this.__contentBox||this.updateCanvasBoundingRect(),this.__contentBox||this.canvasBoundingClientRect||{left:0,top:0,width:0,height:0}}zoomAt(t,e,i){let s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:.05,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:20;const r=Number(i);if(!isFinite(r)||r<=0)return this;const[a,l]=this.screenToWorld(t,e),h=this.viewport.scale,c=Math.min(s,o),d=Math.max(s,o),u=Math.min(d,Math.max(c,h*r));return u===h?this:this.setViewport(u,t-a*u,e-l*u)}hitTest(t,e){const[i,s]=this.screenToWorld(t,e);return hitTestComponents(this,i,s,1)}registerTheme(t,e){return registerTheme(t,e),this}getTheme(){return this.theme}__reapplyPresets(){const t=flattenAllComponents(this);for(const e of t)"function"==typeof e.__reapplyPreset&&e.__reapplyPreset(this.theme)}createLinearGradient(t,e,i,s){return tagGradient(this.ctx.createLinearGradient(t,e,i,s),{type:"linear",from:[t,e],to:[i,s],stops:[]})}createRadialGradient(t,e,i,s,o,r){return tagGradient(this.ctx.createRadialGradient(t,e,i,s,o,r),{type:"radial",center:[s,o],radius:r,stops:[]})}createConicGradient(t,e,i){return"function"==typeof this.ctx.createConicGradient?tagGradient(this.ctx.createConicGradient(t,e,i),{type:"conic",startAngle:t,center:[e,i],stops:[]}):null}createPattern(t,e){return this.ctx.createPattern(t,e)}getImageData(t,e,i,s){return this.ctx.getImageData(t,e,i,s)}putImageData(t,e,i){this.ctx.putImageData(t,e,i)}createImageData(t,e){return this.ctx.createImageData(t,e)}toDataURL(t,e){return this.canvasEl.toDataURL(t,e)}toBlob(t,e,i){this.canvasEl.toBlob(t,e,i)}toSvg(){return exportSvg(this,arguments.length>0&&void 0!==arguments[0]?arguments[0]:{})}static headless(){const t=new ICE;return t.childNodes=[],t.toolNodes=[],t.evtBus=new ot,t.dirty=!0,t}toSvgResult(){return exportSvgResult(this,arguments.length>0&&void 0!==arguments[0]?arguments[0]:{})}toJSONString(){return this.serializer.toJSONString()}toJSONObject(){return this.serializer.toJSONObject()}fromJSONObject(t){yt.stop(),this.renderer.stop(),this.eventDispatcher.stopped=!0,this.animationManager.stop(),this.controlPanelManager.stop(),this.linkSlotManager.stop(),this.clearAll(),this.deserializer.fromJSONObject(t),yt.start(),this.renderer.start(),this.animationManager.start(),this.controlPanelManager.start(),this.linkSlotManager.start(),setTimeout(()=>{this.eventDispatcher.stopped=!1},300)}fromJSONString(t){const e=JSON.parse(t);this.fromJSONObject(e)}}var Ct=ICE,St="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};var kt=function isNil(t){return null==t};var Pt=function listCacheClear$1(){this.__data__=[],this.size=0};var Et=function eq$4(t,e){return t===e||t!=t&&e!=e},Mt=Et;var Tt=function assocIndexOf$4(t,e){for(var i=t.length;i--;)if(Mt(t[i][0],e))return i;return-1},It=Tt,Bt=Array.prototype.splice;var Nt=Tt;var Dt=Tt;var $t=Tt;var At=Pt,Ot=function listCacheDelete$1(t){var e=this.__data__,i=It(e,t);return!(i<0)&&(i==e.length-1?e.pop():Bt.call(e,i,1),--this.size,!0)},Rt=function listCacheGet$1(t){var e=this.__data__,i=Nt(e,t);return i<0?void 0:e[i][1]},Lt=function listCacheHas$1(t){return Dt(this.__data__,t)>-1},Ft=function listCacheSet$1(t,e){var i=this.__data__,s=$t(i,t);return s<0?(++this.size,i.push([t,e])):i[s][1]=e,this};function ListCache$4(t){var e=-1,i=null==t?0:t.length;for(this.clear();++e<i;){var s=t[e];this.set(s[0],s[1])}}ListCache$4.prototype.clear=At,ListCache$4.prototype.delete=Ot,ListCache$4.prototype.get=Rt,ListCache$4.prototype.has=Lt,ListCache$4.prototype.set=Ft;var zt=ListCache$4,jt=zt;var Xt=function stackClear$1(){this.__data__=new jt,this.size=0};var Ht=function stackDelete$1(t){var e=this.__data__,i=e.delete(t);return this.size=e.size,i};var Wt=function stackGet$1(t){return this.__data__.get(t)};var Vt=function stackHas$1(t){return this.__data__.has(t)},Gt="object"==typeof St&&St&&St.Object===Object&&St,Yt=Gt,Ut="object"==typeof self&&self&&self.Object===Object&&self,qt=Yt||Ut||Function("return this")(),Kt=qt.Symbol,Jt=Kt,Qt=Object.prototype,Zt=Qt.hasOwnProperty,te=Qt.toString,ee=Jt?Jt.toStringTag:void 0;var ie=function getRawTag$1(t){var e=Zt.call(t,ee),i=t[ee];try{t[ee]=void 0;var s=!0}catch(t){}var o=te.call(t);return s&&(e?t[ee]=i:delete t[ee]),o},se=Object.prototype.toString;var ne=ie,oe=function objectToString$1(t){return se.call(t)},re=Kt?Kt.toStringTag:void 0;var ae=function baseGetTag$4(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":re&&re in Object(t)?ne(t):oe(t)};var le=function isObject$7(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)},he=ae,ce=le;var de,ue=function isFunction$3(t){if(!ce(t))return!1;var e=he(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e},pe=qt["__core-js_shared__"],fe=(de=/[^.]+$/.exec(pe&&pe.keys&&pe.keys.IE_PROTO||""))?"Symbol(src)_1."+de:"";var ge=function isMasked$1(t){return!!fe&&fe in t},me=Function.prototype.toString;var ye=ue,_e=ge,be=le,ve=function toSource$1(t){if(null!=t){try{return me.call(t)}catch(t){}try{return t+""}catch(t){}}return""},xe=/^\[object .+?Constructor\]$/,we=Function.prototype,Ce=Object.prototype,Se=we.toString,ke=Ce.hasOwnProperty,Pe=RegExp("^"+Se.call(ke).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var Ee=function baseIsNative$1(t){return!(!be(t)||_e(t))&&(ye(t)?Pe:xe).test(ve(t))},Me=function getValue$1(t,e){return null==t?void 0:t[e]};var Te=function getNative$3(t,e){var i=Me(t,e);return Ee(i)?i:void 0},Ie=Te(qt,"Map"),Be=Te(Object,"create"),Ne=Be;var De=function hashClear$1(){this.__data__=Ne?Ne(null):{},this.size=0};var $e=function hashDelete$1(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},Ae=Be,Oe=Object.prototype.hasOwnProperty;var Re=function hashGet$1(t){var e=this.__data__;if(Ae){var i=e[t];return"__lodash_hash_undefined__"===i?void 0:i}return Oe.call(e,t)?e[t]:void 0},Le=Be,Fe=Object.prototype.hasOwnProperty;var ze=Be;var je=De,Xe=$e,He=Re,We=function hashHas$1(t){var e=this.__data__;return Le?void 0!==e[t]:Fe.call(e,t)},Ve=function hashSet$1(t,e){var i=this.__data__;return this.size+=this.has(t)?0:1,i[t]=ze&&void 0===e?"__lodash_hash_undefined__":e,this};function Hash$1(t){var e=-1,i=null==t?0:t.length;for(this.clear();++e<i;){var s=t[e];this.set(s[0],s[1])}}Hash$1.prototype.clear=je,Hash$1.prototype.delete=Xe,Hash$1.prototype.get=He,Hash$1.prototype.has=We,Hash$1.prototype.set=Ve;var Ge=Hash$1,Ye=zt,Ue=Ie;var qe=function isKeyable$1(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t};var Ke=function getMapData$4(t,e){var i=t.__data__;return qe(e)?i["string"==typeof e?"string":"hash"]:i.map},Je=Ke;var Qe=Ke;var Ze=Ke;var ti=Ke;var ei=function mapCacheClear$1(){this.size=0,this.__data__={hash:new Ge,map:new(Ue||Ye),string:new Ge}},ii=function mapCacheDelete$1(t){var e=Je(this,t).delete(t);return this.size-=e?1:0,e},si=function mapCacheGet$1(t){return Qe(this,t).get(t)},ni=function mapCacheHas$1(t){return Ze(this,t).has(t)},oi=function mapCacheSet$1(t,e){var i=ti(this,t),s=i.size;return i.set(t,e),this.size+=i.size==s?0:1,this};function MapCache$1(t){var e=-1,i=null==t?0:t.length;for(this.clear();++e<i;){var s=t[e];this.set(s[0],s[1])}}MapCache$1.prototype.clear=ei,MapCache$1.prototype.delete=ii,MapCache$1.prototype.get=si,MapCache$1.prototype.has=ni,MapCache$1.prototype.set=oi;var ri=zt,ai=Ie,li=MapCache$1;var hi=zt,ci=Xt,di=Ht,ui=Wt,pi=Vt,fi=function stackSet$1(t,e){var i=this.__data__;if(i instanceof ri){var s=i.__data__;if(!ai||s.length<199)return s.push([t,e]),this.size=++i.size,this;i=this.__data__=new li(s)}return i.set(t,e),this.size=i.size,this};function Stack$1(t){var e=this.__data__=new hi(t);this.size=e.size}Stack$1.prototype.clear=ci,Stack$1.prototype.delete=di,Stack$1.prototype.get=ui,Stack$1.prototype.has=pi,Stack$1.prototype.set=fi;var gi=Stack$1,mi=Te,yi=function(){try{var t=mi(Object,"defineProperty");return t({},"",{}),t}catch(t){}}(),_i=yi;var bi=function baseAssignValue$3(t,e,i){"__proto__"==e&&_i?_i(t,e,{configurable:!0,enumerable:!0,value:i,writable:!0}):t[e]=i},vi=bi,xi=Et;var wi=function assignMergeValue$2(t,e,i){(void 0!==i&&!xi(t[e],i)||void 0===i&&!(e in t))&&vi(t,e,i)};var Ci=function createBaseFor$1(t){return function(e,i,s){for(var o=-1,r=Object(e),a=s(e),l=a.length;l--;){var h=a[t?l:++o];if(!1===i(r[h],h,r))break}return e}}(),Si={exports:{}};!function(t,e){var i=qt,s=e&&!e.nodeType&&e,o=s&&t&&!t.nodeType&&t,r=o&&o.exports===s?i.Buffer:void 0,a=r?r.allocUnsafe:void 0;t.exports=function cloneBuffer(t,e){if(e)return t.slice();var i=t.length,s=a?a(i):new t.constructor(i);return t.copy(s),s}}(Si,Si.exports);var ki=qt.Uint8Array;var Pi=function cloneArrayBuffer$1(t){var e=new t.constructor(t.byteLength);return new ki(e).set(new ki(t)),e};var Ei=function cloneTypedArray$1(t,e){var i=e?Pi(t.buffer):t.buffer;return new t.constructor(i,t.byteOffset,t.length)};var Mi=function copyArray$1(t,e){var i=-1,s=t.length;for(e||(e=Array(s));++i<s;)e[i]=t[i];return e},Ti=le,Ii=Object.create,Bi=function(){function object(){}return function(t){if(!Ti(t))return{};if(Ii)return Ii(t);object.prototype=t;var e=new object;return object.prototype=void 0,e}}();var Ni=function overArg$1(t,e){return function(i){return t(e(i))}}(Object.getPrototypeOf,Object),Di=Object.prototype;var $i=function isPrototype$2(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||Di)},Ai=Bi,Oi=Ni,Ri=$i;var Li=function initCloneObject$1(t){return"function"!=typeof t.constructor||Ri(t)?{}:Ai(Oi(t))};var Fi=function isObjectLike$5(t){return null!=t&&"object"==typeof t},zi=ae,ji=Fi;var Xi=function baseIsArguments$1(t){return ji(t)&&"[object Arguments]"==zi(t)},Hi=Fi,Wi=Object.prototype,Vi=Wi.hasOwnProperty,Gi=Wi.propertyIsEnumerable,Yi=Xi(function(){return arguments}())?Xi:function(t){return Hi(t)&&Vi.call(t,"callee")&&!Gi.call(t,"callee")},Ui=Array.isArray;var qi=function isLength$2(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991},Ki=ue,Ji=qi;var Qi=function isArrayLike$3(t){return null!=t&&Ji(t.length)&&!Ki(t)},Zi=Qi,ts=Fi;var es=function isArrayLikeObject$1(t){return ts(t)&&Zi(t)},is={exports:{}};var ss=function stubFalse(){return!1};!function(t,e){var i=qt,s=ss,o=e&&!e.nodeType&&e,r=o&&t&&!t.nodeType&&t,a=r&&r.exports===o?i.Buffer:void 0,l=(a?a.isBuffer:void 0)||s;t.exports=l}(is,is.exports);var ns=ae,os=Ni,rs=Fi,as=Function.prototype,ls=Object.prototype,hs=as.toString,cs=ls.hasOwnProperty,ds=hs.call(Object);var us=function isPlainObject$1(t){if(!rs(t)||"[object Object]"!=ns(t))return!1;var e=os(t);if(null===e)return!0;var i=cs.call(e,"constructor")&&e.constructor;return"function"==typeof i&&i instanceof i&&hs.call(i)==ds},ps=ae,fs=qi,gs=Fi,ms={};ms["[object Float32Array]"]=ms["[object Float64Array]"]=ms["[object Int8Array]"]=ms["[object Int16Array]"]=ms["[object Int32Array]"]=ms["[object Uint8Array]"]=ms["[object Uint8ClampedArray]"]=ms["[object Uint16Array]"]=ms["[object Uint32Array]"]=!0,ms["[object Arguments]"]=ms["[object Array]"]=ms["[object ArrayBuffer]"]=ms["[object Boolean]"]=ms["[object DataView]"]=ms["[object Date]"]=ms["[object Error]"]=ms["[object Function]"]=ms["[object Map]"]=ms["[object Number]"]=ms["[object Object]"]=ms["[object RegExp]"]=ms["[object Set]"]=ms["[object String]"]=ms["[object WeakMap]"]=!1;var ys=function baseIsTypedArray$1(t){return gs(t)&&fs(t.length)&&!!ms[ps(t)]};var _s=function baseUnary$1(t){return function(e){return t(e)}},bs={exports:{}};!function(t,e){var i=Gt,s=e&&!e.nodeType&&e,o=s&&t&&!t.nodeType&&t,r=o&&o.exports===s&&i.process,a=function(){try{var t=o&&o.require&&o.require("util").types;return t||r&&r.binding&&r.binding("util")}catch(t){}}();t.exports=a}(bs,bs.exports);var vs=ys,xs=_s,ws=bs.exports,Cs=ws&&ws.isTypedArray,Ss=Cs?xs(Cs):vs;var ks=function safeGet$2(t,e){if(("constructor"!==e||"function"!=typeof t[e])&&"__proto__"!=e)return t[e]},Ps=bi,Es=Et,Ms=Object.prototype.hasOwnProperty;var Ts=function assignValue$1(t,e,i){var s=t[e];Ms.call(t,e)&&Es(s,i)&&(void 0!==i||e in t)||Ps(t,e,i)},Is=bi;var Bs=function copyObject$1(t,e,i,s){var o=!i;i||(i={});for(var r=-1,a=e.length;++r<a;){var l=e[r],h=s?s(i[l],t[l],l,i,t):void 0;void 0===h&&(h=t[l]),o?Is(i,l,h):Ts(i,l,h)}return i};var Ns=/^(?:0|[1-9]\d*)$/;var Ds=function isIndex$2(t,e){var i=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==i||"symbol"!=i&&Ns.test(t))&&t>-1&&t%1==0&&t<e},$s=function baseTimes$1(t,e){for(var i=-1,s=Array(t);++i<t;)s[i]=e(i);return s},As=Yi,Os=Ui,Rs=is.exports,Ls=Ds,Fs=Ss,zs=Object.prototype.hasOwnProperty;var js=function arrayLikeKeys$1(t,e){var i=Os(t),s=!i&&As(t),o=!i&&!s&&Rs(t),r=!i&&!s&&!o&&Fs(t),a=i||s||o||r,l=a?$s(t.length,String):[],h=l.length;for(var c in t)!e&&!zs.call(t,c)||a&&("length"==c||o&&("offset"==c||"parent"==c)||r&&("buffer"==c||"byteLength"==c||"byteOffset"==c)||Ls(c,h))||l.push(c);return l};var Xs=le,Hs=$i,Ws=function nativeKeysIn$1(t){var e=[];if(null!=t)for(var i in Object(t))e.push(i);return e},Vs=Object.prototype.hasOwnProperty;var Gs=js,Ys=function baseKeysIn$1(t){if(!Xs(t))return Ws(t);var e=Hs(t),i=[];for(var s in t)("constructor"!=s||!e&&Vs.call(t,s))&&i.push(s);return i},Us=Qi;var qs=function keysIn$2(t){return Us(t)?Gs(t,!0):Ys(t)},Ks=Bs,Js=qs;var Qs=wi,Zs=Si.exports,tn=Ei,en=Mi,sn=Li,nn=Yi,on=Ui,rn=es,an=is.exports,ln=ue,hn=le,cn=us,dn=Ss,un=ks,pn=function toPlainObject$1(t){return Ks(t,Js(t))};var fn=gi,gn=wi,mn=Ci,yn=function baseMergeDeep$1(t,e,i,s,o,r,a){var l=un(t,i),h=un(e,i),c=a.get(h);if(c)Qs(t,i,c);else{var d=r?r(l,h,i+"",t,e,a):void 0,u=void 0===d;if(u){var p=on(h),f=!p&&an(h),g=!p&&!f&&dn(h);d=h,p||f||g?on(l)?d=l:rn(l)?d=en(l):f?(u=!1,d=Zs(h,!0)):g?(u=!1,d=tn(h,!0)):d=[]:cn(h)||nn(h)?(d=l,nn(l)?d=pn(l):hn(l)&&!ln(l)||(d=sn(h))):u=!1}u&&(a.set(h,d),o(d,h,s,r,a),a.delete(h)),Qs(t,i,d)}},_n=le,bn=qs,vn=ks;var xn=function baseMerge$1(t,e,i,s,o){t!==e&&mn(e,(function(r,a){if(o||(o=new fn),_n(r))yn(t,e,a,i,baseMerge$1,s,o);else{var l=s?s(vn(t,a),r,a+"",t,e,o):void 0;void 0===l&&(l=r),gn(t,a,l)}}),bn)};var wn=function identity$2(t){return t};var Cn=function apply$1(t,e,i){switch(i.length){case 0:return t.call(e);case 1:return t.call(e,i[0]);case 2:return t.call(e,i[0],i[1]);case 3:return t.call(e,i[0],i[1],i[2])}return t.apply(e,i)},Sn=Math.max;var kn=function overRest$1(t,e,i){return e=Sn(void 0===e?t.length-1:e,0),function(){for(var s=arguments,o=-1,r=Sn(s.length-e,0),a=Array(r);++o<r;)a[o]=s[e+o];o=-1;for(var l=Array(e+1);++o<e;)l[o]=s[o];return l[e]=i(a),Cn(t,this,l)}};var Pn=function constant$1(t){return function(){return t}},En=yi,Mn=En?function(t,e){return En(t,"toString",{configurable:!0,enumerable:!1,value:Pn(e),writable:!0})}:wn,Tn=Date.now;var In=function shortOut$1(t){var e=0,i=0;return function(){var s=Tn(),o=16-(s-i);if(i=s,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(Mn),Bn=wn,Nn=kn,Dn=In;var $n=Et,An=Qi,On=Ds,Rn=le;var Ln=function baseRest$1(t,e){return Dn(Nn(t,e,Bn),t+"")},Fn=function isIterateeCall$1(t,e,i){if(!Rn(i))return!1;var s=typeof e;return!!("number"==s?An(i)&&On(e,i.length):"string"==s&&e in i)&&$n(i[e],t)};var zn=xn,jn=function createAssigner$1(t){return Ln((function(e,i){var s=-1,o=i.length,r=o>1?i[o-1]:void 0,a=o>2?i[2]:void 0;for(r=t.length>3&&"function"==typeof r?(o--,r):void 0,a&&Fn(i[0],i[1],a)&&(r=o<3?void 0:r,o=1),e=Object(e);++s<o;){var l=i[s];l&&t(e,l,s,r)}return e}))}((function(t,e,i){zn(t,e,i)}));class Entity extends X{static typeId="Entity";hasDerivedChildren(){return!0}entityFieldsComponent=[];constructor(t){super(Entity.arrangeParam(t)),this.syncEntityNameAndFields()}static arrangeParam(t){const e=jn({entityName:"Entity Name",fields:[],style:{strokeStyle:"#334155",fillStyle:"#ffffff",radius:8,lineWidth:1.5},headerStyle:{textColor:"#0f172a",backgroundColor:"#f1f5f9",fontSize:18,fontWeight:"bold",paddingTop:12,paddingLeft:14,paddingRight:14,paddingBottom:12},fieldStyle:{textColor:"#334155",fontSize:16,fontWeight:"normal",paddingTop:9,paddingLeft:14,paddingRight:14},dividerStyle:{strokeStyle:"#cbd5e1",fillStyle:"#cbd5e1",lineWidth:1}},t,{transformable:!1});return kt(e.entityName)&&(e.entityName="Entity Name"),kt(e.fields)&&(e.fields=[]),e}syncEntityNameAndFields(){if(this.entityNameComponent&&(this.removeChild(this.entityNameComponent),this.entityNameComponent=null),this.headerBackgroundComponent&&(this.removeChild(this.headerBackgroundComponent),this.headerBackgroundComponent=null),this.deviderLine&&(this.removeChild(this.deviderLine),this.deviderLine=null),this.entityFieldsComponent.length&&(this.removeChildren(this.entityFieldsComponent),this.entityFieldsComponent.length=0),this.state.entityName){if(this.entityNameComponent=new pt({left:0,top:0,text:this.state.entityName,style:{strokeStyle:this.state.headerStyle.textColor,fillStyle:this.state.headerStyle.textColor,fontSize:this.state.headerStyle.fontSize,fontWeight:this.state.headerStyle.fontWeight,paddingTop:this.state.headerStyle.paddingTop,paddingLeft:this.state.headerStyle.paddingLeft,paddingRight:this.state.headerStyle.paddingRight,paddingBottom:this.state.headerStyle.paddingBottom},interactive:!1,stroke:!1,showMinBoundingBox:!1,showMaxBoundingBox:!1}),this.state.headerStyle.backgroundColor&&"none"!==this.state.headerStyle.backgroundColor){const t=this.state.style.lineWidth||1.5,e=t/2;this.headerBackgroundComponent=new j({left:e,top:e,width:Math.max(this.state.width-t,0),height:Math.max(this.entityNameComponent.state.height-e,0),zIndex:this.entityNameComponent.state.zIndex-1,origin:"top-left",style:{fillStyle:this.state.headerStyle.backgroundColor,radius:Math.max((this.state.style.radius||0)-e,0),lineWidth:0},interactive:!1,stroke:!1,showMinBoundingBox:!1,showMaxBoundingBox:!1}),this.addChild(this.headerBackgroundComponent)}this.addChild(this.entityNameComponent),this.deviderLine=new at({left:0,top:0,points:[[0,0],[this.state.width,0]],style:{strokeStyle:this.state.dividerStyle.strokeStyle,fillStyle:this.state.dividerStyle.fillStyle,lineWidth:this.state.dividerStyle.lineWidth},interactive:!1}),this.addChild(this.deviderLine)}if(!kt(this.state.fields)){const t=this.state.fields.length;for(let e=0;e<t;e++){const i=this.state.fields[e],s=this.fieldDisplay(i),o=new pt({left:0,top:0,text:s.text,style:{strokeStyle:this.state.fieldStyle.textColor,fillStyle:this.state.fieldStyle.textColor,fontSize:this.state.fieldStyle.fontSize,fontWeight:this.state.fieldStyle.fontWeight,paddingTop:this.state.fieldStyle.paddingTop,paddingLeft:this.state.fieldStyle.paddingLeft,paddingRight:this.state.fieldStyle.paddingRight,paddingBottom:e===t-1?12:0},interactive:!1,stroke:!1,showMinBoundingBox:!1,showMaxBoundingBox:!1});this.entityFieldsComponent.push(o)}this.addChildren(this.entityFieldsComponent)}}fieldDisplay(t){const e=[];t.primary&&e.push("PK"),t.foreignKey&&e.push("FK");const i=[];t.unique&&i.push("UQ"),t.autoIncrement&&i.push("AI"),!1===t.nullable&&i.push("NN");const s=e.length?e.join(" ")+" ":"",o=t.type?`${t.type}${t.length?`(${t.length})`:""}`:"",r=i.length?" "+i.join(" "):"",a=void 0!==t.default?" = "+t.default:"",l=t.comment?" // "+t.comment:"";return{text:`${s}${t.name}${o?" "+o:""}${r}${a}${l}`}}calcComponentParams(){let t=this.state.width,e=0,i=0,s=0;this.entityNameComponent&&(s=this.entityNameComponent.state.height,e=s,t=Math.max(t,this.entityNameComponent.state.width),e+=this.deviderLine.state.height,i=e);for(let i=0;i<this.entityFieldsComponent.length;i++){const s=this.entityFieldsComponent[i];s.state.left=0,s.state.top=e,e+=s.state.height,t=Math.max(t,s.state.width)}if(this.deviderLine&&(this.deviderLine.state.points=[[0,i],[t,i]]),this.headerBackgroundComponent){const e=this.state.style.lineWidth||1.5,i=e/2;this.headerBackgroundComponent.state.left=i,this.headerBackgroundComponent.state.top=i,this.headerBackgroundComponent.state.width=Math.max(t-e,0),this.headerBackgroundComponent.state.height=Math.max(s-i,0)}const o=t,r=Math.max(e,this.state.height);return this.state.width=o,this.state.height=r,{width:o,height:r}}toEntityObject(){const t={name:this.state.entityName,columns:{}};return this.state.fields.forEach(e=>{const i={};void 0!==e.type&&(i.type=e.type),void 0!==e.length&&(i.length=e.length),e.primary&&(i.primary=!0),e.generated&&(i.generated=!0),e.autoIncrement&&(i.generated=!0,i.strategy="increment"),!1===e.nullable&&(i.nullable=!1),e.unique&&(i.unique=!0),void 0!==e.default&&(i.default=e.default),void 0!==e.comment&&(i.comment=e.comment),e.index&&(i.index=!0),t.columns[e.name]=i}),t}setState(t){const e=!kt(t.fields)||!kt(t.entityName);super.setState(t),e&&this.syncEntityNameAndFields()}addField(t){const e=[...this.state.fields||[],t];return this.setFields(e),this}removeField(t){const e=(this.state.fields||[]).filter(e=>e.name!==t);return this.setFields(e),this}setFields(t){return this.setState({fields:t}),this}}class Relation extends ICEVisioLink{static typeId="Relation";hasDerivedChildren(){return!0}constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const e=Relation.normalizeLinks(t||{}),i=e.relationType||"one-to-one",s=Relation.composeLabel(e,i);super({title:"Relation",relationType:i,referencedColumnName:"id",sourceField:"id",targetField:"id",arrow:e.arrow||Relation.defaultArrow(i),...e,label:s,labelStyle:{fontSize:14,fillStyle:"#334155",backgroundColor:"#ffffff",...e.labelStyle||{}}})}static defaultArrow(t){switch(t){case"one-to-many":return"end";case"many-to-one":return"start";case"many-to-many":case"one-to-one":default:return"none"}}static normalizeLinks(t){if(!t||!t.links)return t||{};const e={top:"T",right:"R",bottom:"B",left:"L",center:"C"},i={...t.links};return i.start&&e[i.start.position]&&(i.start={...i.start,position:e[i.start.position]}),i.end&&e[i.end.position]&&(i.end={...i.end,position:e[i.end.position]}),{...t,links:i}}static cardinalityLabel(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i={"one-to-many":["1","N"],"many-to-one":["N","1"],"many-to-many":["N","N"],"one-to-one":["1","1"]},[s,o]=i[t]||i["one-to-one"];return`${e.sourceCardinality||s} : ${e.targetCardinality||o}`}static composeLabel(t,e){return t.label?t.label:Relation.buildLabel(t,e)}static buildLabel(t,e){const i=[];t.onDelete&&i.push("ON DELETE "+t.onDelete),t.onUpdate&&i.push("ON UPDATE "+t.onUpdate);const s=Relation.cardinalityLabel(e,t);return i.length?`${s} (${i.join(", ")})`:s}toEntityObject(){const{title:t,relationType:e,referencedColumnName:i,sourceField:s,targetField:o,nullable:r,onDelete:a,onUpdate:l,joinTableName:h,fromKey:c,toKey:d}=this.state;let u,p,f,g,m,y;this.state.links&&this.state.links.start&&this.state.links.start.id&&(f=this.state.links.start.id,u=this.ice.findComponent(f),g=u.state.entityName),this.state.links&&this.state.links.end&&this.state.links.end.id&&(m=this.state.links.end.id,p=this.ice.findComponent(m),y=p.state.entityName);return{title:t,fromId:f,fromName:g,toId:m,toName:y,relationType:e,referencedColumnName:i,sourceField:s,targetField:o,nullable:!1!==r&&void 0,onDelete:a,onUpdate:l,joinTableName:h,fromKey:c,toKey:d}}}function typeIdOf(t){const e=t&&t.constructor;return e&&"string"==typeof e.typeId?e.typeId:void 0}function isEntity(t){return typeIdOf(t)===Entity.typeId}function isRelation(t){return typeIdOf(t)===Relation.typeId}const Xn=[{key:"display",type:"boolean"},{key:"zIndex",type:"number"},{key:"opacity",type:"number",doc:"子树不透明度(引擎 1.3 起)"},{key:"transform",type:"object"},{key:"origin",type:"string"},{key:"originX",type:"number"},{key:"originY",type:"number"},{key:"lineDash",type:"array"},{key:"lineDashOffset",type:"number"},{key:"lineDashFlow",type:"boolean"},{key:"lineDashFlowSpeed",type:"number"},{key:"lineBorder",type:"boolean"},{key:"lineBorderWidth",type:"number"},{key:"lineBorderColor",type:"string"},{key:"fill",type:"boolean"},{key:"stroke",type:"boolean"},{key:"linkable",type:"boolean"},{key:"transformable",type:"boolean"},{key:"animations",type:"object"}],Hn=[{key:"id",type:"string",required:!0},{key:"typeId",type:"string"},{key:"left",type:"number"},{key:"top",type:"number"},{key:"width",type:"number"},{key:"height",type:"number"},{key:"relationType",type:"string"},{key:"referencedColumnName",type:"string"},{key:"sourceField",type:"string"},{key:"targetField",type:"string"},{key:"nullable",type:"boolean"},{key:"onDelete",type:"string"},{key:"onUpdate",type:"string"},{key:"joinTableName",type:"string"},{key:"fromKey",type:"string"},{key:"toKey",type:"string"},{key:"sourceCardinality",type:"string"},{key:"targetCardinality",type:"string"},{key:"label",type:"string"},{key:"labelStyle",type:"object"},{key:"style",type:"object"},{key:"arrow",type:"string"},{key:"lineType",type:"string"},{key:"escapeDistance",type:"number"},{key:"routeType",type:"string"},{key:"routeOffset",type:"number"},{key:"curveType",type:"string"},{key:"linkShape",type:"string",doc:"连线形态(visio/bezier)"},{key:"lineDash",type:"array"},{key:"lineWidth",type:"number"},{key:"arrowLength",type:"number"},{key:"arrowAngel",type:"number"},{key:"arrowStyle",type:"string"},{key:"startPoint",type:"array"},{key:"endPoint",type:"array"},{key:"links",type:"object",validate:function validateLinks(t,e,i){["start","end"].forEach(s=>{const o=t[s];void 0!==o&&(o&&"object"==typeof o&&!Array.isArray(o)?(void 0!==o.id&&"string"!=typeof o.id&&i.push(`${e}.${s}.id must be a string when present`),void 0!==o.position&&"string"!=typeof o.position&&i.push(`${e}.${s}.position must be a string when present`)):i.push(`${e}.${s} must be an object when present`))})}},{key:"sourceId",type:"string",doc:"连线起点宿主 id(与 links.start.id 同步)"},{key:"targetId",type:"string",doc:"连线终点宿主 id(与 links.end.id 同步)"},{key:"draggable",type:"boolean"},{key:"interactive",type:"boolean"},{key:"showMinBoundingBox",type:"boolean"},{key:"showMaxBoundingBox",type:"boolean"}],Wn=[...[{key:"id",type:"string",required:!0},{key:"typeId",type:"string"},{key:"left",type:"number"},{key:"top",type:"number"},{key:"width",type:"number"},{key:"height",type:"number"},{key:"entityName",type:"string",required:!0},{key:"fields",type:"array",validate:function validateFields(t,e,i){t.forEach((t,s)=>{t&&"object"==typeof t&&!Array.isArray(t)?void 0!==t.name&&"string"!=typeof t.name&&i.push(`${e}[${s}].name must be a string when present`):i.push(`${e}[${s}] must be an object`)})}},{key:"style",type:"object"},{key:"headerStyle",type:"object"},{key:"fieldStyle",type:"object"},{key:"dividerStyle",type:"object"},{key:"draggable",type:"boolean"},{key:"interactive",type:"boolean"},{key:"showMinBoundingBox",type:"boolean"},{key:"showMaxBoundingBox",type:"boolean"}],...Xn],Vn=[...Hn,...Xn];function pickDocumentNode(t,e){const i={};e.forEach(e=>{const s=t?t[e.key]:void 0;void 0!==s&&(i[e.key]=s)});const s=t?t.data:void 0;return void 0!==s&&(i.data=s),i}function validateDocumentNode(t,e,i,s){t&&"object"==typeof t&&!Array.isArray(t)?i.forEach(i=>{const o=t[i.key];void 0!==o?!function typeMatches(t,e){switch(e){case void 0:case"any":return!0;case"array":return Array.isArray(t);case"object":return!!t&&"object"==typeof t&&!Array.isArray(t);case"number":return"number"==typeof t;case"boolean":return"boolean"==typeof t;case"string":default:return"string"==typeof t}}(o,i.type)?s.push(`${e}.${i.key} must be a ${i.type} when present`):i.validate&&i.validate(o,`${e}.${i.key}`,s):i.required&&s.push(`${e}.${i.key} is required`)}):s.push(e+" must be an object")}const Gn=[{key:"id",type:"string",required:!0},{key:"typeId",type:"string"}];function validateProjectSnapshot(t){const e=[];return!t||"object"!=typeof t||Array.isArray(t)?{valid:!1,errors:["root must be an object"]}:(void 0!==t.schemaVersion&&"number"!=typeof t.schemaVersion&&e.push("schemaVersion must be a number when present"),Array.isArray(t.entities)?t.entities.forEach((t,i)=>{validateNode(t,`entities[${i}]`,Entity.typeId,e)}):e.push("entities must be an array"),void 0===t.relations||Array.isArray(t.relations)?Array.isArray(t.relations)&&t.relations.forEach((t,i)=>{validateNode(t,`relations[${i}]`,Relation.typeId,e)}):e.push("relations must be an array when present"),{valid:0===e.length,errors:e})}function validateNode(t,e,i,s){if(!t||"object"!=typeof t||Array.isArray(t))return void s.push(e+" must be an object");const o=void 0===t.typeId?i:t.typeId;o!==Entity.typeId?o!==Relation.typeId?validateDocumentNode(t,e,Gn,s):validateDocumentNode(t,e,Vn,s):validateDocumentNode(t,e,Wn,s)}function validateSchema(t){const e=[],i=t.filter(isEntity),s=t.filter(isRelation),o=new Map;return i.forEach(t=>{const i=(t.state.entityName||"").trim();if(!i)return void e.push({level:"error",message:"存在未命名的 Entity",componentId:t.state.id});o.has(i)||o.set(i,[]),o.get(i).push(t);const s=t.state.fields||[];0===s.length&&e.push({level:"warning",message:`Entity "${i}" 没有任何字段`,componentId:t.state.id});const r=new Set;s.forEach(s=>{const o=(s.name||"").trim();o?r.has(o)?e.push({level:"error",message:`Entity "${i}" 存在重复字段 "${o}"`,componentId:t.state.id}):r.add(o):e.push({level:"error",message:`Entity "${i}" 存在未命名字段`,componentId:t.state.id}),s.type||e.push({level:"warning",message:`Entity "${i}" 的字段 "${o||"(未命名)"}" 未设置类型`,componentId:t.state.id})})}),o.forEach((t,i)=>{t.length>1&&e.push({level:"error",message:`存在重复的 Entity 名称 "${i}"`})}),s.forEach(t=>{const s=t.state.links||{},o=s.start&&s.start.id,r=s.end&&s.end.id,a=t.state.relationType;if(!o||!r)return void e.push({level:"error",message:"存在没有完整起点/终点的 Relation",componentId:t.state.id});const l=i.some(t=>t.state.id===o),h=i.some(t=>t.state.id===r);l&&h||e.push({level:"error",message:"Relation 连接到了不存在的 Entity",componentId:t.state.id}),a?"many-to-many"!==a||t.state.joinTableName||e.push({level:"warning",message:"many-to-many 关系建议设置 joinTableName",componentId:t.state.id}):e.push({level:"error",message:"Relation 未设置关系类型",componentId:t.state.id})}),e}function toWords(t){return function convertToString(t){const e=t||"";return"string"==typeof e?e:String(e)}(t).match(/[A-Z\xC0-\xD6\xD8-\xDE]?[a-z\xDF-\xF6\xF8-\xFF]+|[A-Z\xC0-\xD6\xD8-\xDE]+(?![a-z\xDF-\xF6\xF8-\xFF])|\d+/g)||[]}function toCamelCase(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i="";for(let s=0,o=t.length;s<o;s++){let o=t[s].toLowerCase();(e||0!==s)&&(o=o.substr(0,1).toUpperCase()+o.substr(1)),i+=o}return i}function camelCase(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return toCamelCase(toWords(t),e)}var Yn=[],Un=[],qn={},Kn={},Jn={};function sanitizeRule(t){return"string"==typeof t?new RegExp("^"+t+"$","i"):t}function restoreCase(t,e){return t===e?e:t===t.toLowerCase()?e.toLowerCase():t===t.toUpperCase()?e.toUpperCase():t[0]===t[0].toUpperCase()?e.charAt(0).toUpperCase()+e.substr(1).toLowerCase():e.toLowerCase()}function interpolate(t,e){return t.replace(/\$(\d{1,2})/g,(function(t,i){return e[i]||""}))}function replace(t,e){return t.replace(e[0],(function(i,s){var o=interpolate(e[1],arguments);return restoreCase(""===i?t[s-1]:i,o)}))}function sanitizeWord(t,e,i){if(!t.length||qn.hasOwnProperty(t))return e;for(var s=i.length;s--;){var o=i[s];if(o[0].test(e))return replace(e,o)}return e}function replaceWord(t,e,i){return function(s){var o=s.toLowerCase();return e.hasOwnProperty(o)?restoreCase(s,o):t.hasOwnProperty(o)?restoreCase(s,t[o]):sanitizeWord(o,s,i)}}function checkWord(t,e,i){return function(s){var o=s.toLowerCase();return!!e.hasOwnProperty(o)||!t.hasOwnProperty(o)&&sanitizeWord(o,o,i)===o}}function pluralize(t,e,i){return(i?e+" ":"")+(1===e?pluralize.singular(t):pluralize.plural(t))}pluralize.plural=replaceWord(Jn,Kn,Yn),pluralize.isPlural=checkWord(Jn,Kn,Yn),pluralize.singular=replaceWord(Kn,Jn,Un),pluralize.isSingular=checkWord(Kn,Jn,Un),pluralize.addPluralRule=function(t,e){Yn.push([sanitizeRule(t),e])},pluralize.addSingularRule=function(t,e){Un.push([sanitizeRule(t),e])},pluralize.addUncountableRule=function(t){"string"!=typeof t?(pluralize.addPluralRule(t,"$0"),pluralize.addSingularRule(t,"$0")):qn[t.toLowerCase()]=!0},pluralize.addIrregularRule=function(t,e){e=e.toLowerCase(),t=t.toLowerCase(),Jn[t]=e,Kn[e]=t},[["I","we"],["me","us"],["he","they"],["she","they"],["them","them"],["myself","ourselves"],["yourself","yourselves"],["itself","themselves"],["herself","themselves"],["himself","themselves"],["themself","themselves"],["is","are"],["was","were"],["has","have"],["this","these"],["that","those"],["echo","echoes"],["dingo","dingoes"],["volcano","volcanoes"],["tornado","tornadoes"],["torpedo","torpedoes"],["genus","genera"],["viscus","viscera"],["stigma","stigmata"],["stoma","stomata"],["dogma","dogmata"],["lemma","lemmata"],["schema","schemata"],["anathema","anathemata"],["ox","oxen"],["axe","axes"],["die","dice"],["yes","yeses"],["foot","feet"],["eave","eaves"],["goose","geese"],["tooth","teeth"],["quiz","quizzes"],["human","humans"],["proof","proofs"],["carve","carves"],["valve","valves"],["looey","looies"],["thief","thieves"],["groove","grooves"],["pickaxe","pickaxes"],["passerby","passersby"]].forEach((function(t){return pluralize.addIrregularRule(t[0],t[1])})),[[/s?$/i,"s"],[/[^\u0000-\u007F]$/i,"$0"],[/([^aeiou]ese)$/i,"$1"],[/(ax|test)is$/i,"$1es"],[/(alias|[^aou]us|t[lm]as|gas|ris)$/i,"$1es"],[/(e[mn]u)s?$/i,"$1s"],[/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i,"$1"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1i"],[/(alumn|alg|vertebr)(?:a|ae)$/i,"$1ae"],[/(seraph|cherub)(?:im)?$/i,"$1im"],[/(her|at|gr)o$/i,"$1oes"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i,"$1a"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i,"$1a"],[/sis$/i,"ses"],[/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i,"$1$2ves"],[/([^aeiouy]|qu)y$/i,"$1ies"],[/([^ch][ieo][ln])ey$/i,"$1ies"],[/(x|ch|ss|sh|zz)$/i,"$1es"],[/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i,"$1ices"],[/\b((?:tit)?m|l)(?:ice|ouse)$/i,"$1ice"],[/(pe)(?:rson|ople)$/i,"$1ople"],[/(child)(?:ren)?$/i,"$1ren"],[/eaux$/i,"$0"],[/m[ae]n$/i,"men"],["thou","you"]].forEach((function(t){return pluralize.addPluralRule(t[0],t[1])})),[[/s$/i,""],[/(ss)$/i,"$1"],[/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i,"$1fe"],[/(ar|(?:wo|[ae])l|[eo][ao])ves$/i,"$1f"],[/ies$/i,"y"],[/\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i,"$1ie"],[/\b(mon|smil)ies$/i,"$1ey"],[/\b((?:tit)?m|l)ice$/i,"$1ouse"],[/(seraph|cherub)im$/i,"$1"],[/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i,"$1"],[/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i,"$1sis"],[/(movie|twelve|abuse|e[mn]u)s$/i,"$1"],[/(test)(?:is|es)$/i,"$1is"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1us"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i,"$1um"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i,"$1on"],[/(alumn|alg|vertebr)ae$/i,"$1a"],[/(cod|mur|sil|vert|ind)ices$/i,"$1ex"],[/(matr|append)ices$/i,"$1ix"],[/(pe)(rson|ople)$/i,"$1rson"],[/(child)ren$/i,"$1"],[/(eau)x?$/i,"$1"],[/men$/i,"man"]].forEach((function(t){return pluralize.addSingularRule(t[0],t[1])})),["adulthood","advice","agenda","aid","aircraft","alcohol","ammo","analytics","anime","athletics","audio","bison","blood","bream","buffalo","butter","carp","cash","chassis","chess","clothing","cod","commerce","cooperation","corps","debris","diabetes","digestion","elk","energy","equipment","excretion","expertise","firmware","flounder","fun","gallows","garbage","graffiti","hardware","headquarters","health","herpes","highjinks","homework","housework","information","jeans","justice","kudos","labour","literature","machinery","mackerel","mail","media","mews","moose","music","mud","manga","news","only","personnel","pike","plankton","pliers","police","pollution","premises","rain","research","rice","salmon","scissors","series","sewage","shambles","shrimp","software","species","staff","swine","tennis","traffic","transportation","trout","tuna","wealth","welfare","whiting","wildebeest","wildlife","you",/pok[eé]mon$/i,/[^aeiou]ese$/i,/deer$/i,/fish$/i,/measles$/i,/o[iu]s$/i,/pox$/i,/sheep$/i].forEach(pluralize.addUncountableRule);const Qn={number:"int",int:"int",integer:"int",smallint:"smallint",bigint:"bigint",float:"float",double:"double",real:"real",decimal:"decimal",numeric:"numeric",string:"varchar",varchar:"varchar",char:"char",text:"text",boolean:"boolean",bool:"boolean",date:"date",datetime:"datetime",timestamp:"timestamp",time:"time",json:"json",jsonb:"jsonb",uuid:"uuid",enum:"enum",blob:"blob",binary:"blob","simple-array":"simple-array","simple-json":"simple-json"},Zn=["varchar","char","nvarchar","nchar","text","uuid"];function normalizeColumn(t){const e={},i=function mapColumnType(t){if(null==t||""===t)return;const e=String(t).toLowerCase();return Qn[e]||String(t)}(t.type);if(void 0!==i&&(e.type=i),void 0!==t.length&&null!==t.length&&""!==t.length){const s=String(t.length).trim();if("decimal"===i||"numeric"===i){const[t,i]=s.split(",").map(t=>t.trim());t&&(e.precision=Number(t)),i&&(e.scale=Number(i))}else i&&Zn.indexOf(i)>=0&&(e.length=t.length)}return t.primary&&(e.primary=!0),t.generated&&(e.generated=!0),t.autoIncrement&&(e.generated=!0,e.strategy="increment"),void 0!==t.strategy&&(e.strategy=t.strategy),!1===t.nullable&&(e.nullable=!1),t.unique&&(e.unique=!0),void 0!==t.default&&(e.default=t.default),void 0!==t.comment&&(e.comment=t.comment),t.index&&(e.index=!0),e}function normalizeColumns(t){const e={};return Object.keys(t||{}).forEach(i=>{e[i]=normalizeColumn(t[i])}),e}function buildJoinColumn(t,e){return{name:t||e||"id",referencedColumnName:e||"id"}}function toSchemaObject(t){const e=[...t],i=[],s={};for(let t=0;t<e.length;t++){const o=e[t];if(isRelation(o))i.push(o);else if(isEntity(o)){const t=o.toEntityObject();t.columns=normalizeColumns(t.columns),s[o.state.id]=t}}for(let t=0;t<i.length;t++){const e=i[t],{fromId:o,fromName:r,toId:a,toName:l,relationType:h,referencedColumnName:c,sourceField:d,targetField:u,nullable:p,onDelete:f,onUpdate:g,joinTableName:m,fromKey:y,toKey:_}=e.toEntityObject(),b=s[o],v=s[a];if(!b||!v)continue;b.relations||(b.relations={}),v.relations||(v.relations={});const x=y||camelCase(l),w=_||camelCase(r),C={};!1===p&&(C.nullable=!1),f&&(C.onDelete=f),g&&(C.onUpdate=g),"one-to-one"===h?(v.relations[w]={type:h,target:r,joinColumn:buildJoinColumn(u||c,d||c),...C},b.relations[x]={type:h,target:l,inverseSide:w}):"one-to-many"===h?(b.relations[x]={type:h,target:l,inverseSide:w},v.relations[w]={type:"many-to-one",target:r,joinColumn:buildJoinColumn(u||c,d||c),...C}):"many-to-one"===h?(b.relations[x]={type:h,target:l,joinColumn:buildJoinColumn(d||c,u||c),...C},v.relations[w]={type:"one-to-many",target:r,inverseSide:x}):"many-to-many"===h&&(b.relations[""+pluralize(x)]={type:h,target:l,joinTable:!m||{name:m}},v.relations[""+pluralize(w)]={type:h,target:r,inverseSide:""+pluralize(x)})}const o=[];for(const t in s)o.push(s[t]);return o}function toSchemaString(t){return JSON.stringify(toSchemaObject(t))}function createEmptyPath$1(t){const e=t.path2D&&t.path2D.constructor;return e?new e:null}class FlowDiamond extends z{static typeId="FlowDiamond";createPathObject(){const t=this.state.width,e=this.state.height,i=0-this.state.localOrigin[0],s=0-this.state.localOrigin[1],o=createEmptyPath$1(this);return o?(o.moveTo(i+t/2,s),o.lineTo(i+t,s+e/2),o.lineTo(i+t/2,s+e),o.lineTo(i,s+e/2),o.closePath(),this.path2D=o,this.path2D):this.path2D}}class FlowParallelogram extends z{static typeId="FlowParallelogram";createPathObject(){const t=this.state.width,e=this.state.height,i=Math.min(28,.18*t),s=0-this.state.localOrigin[0],o=0-this.state.localOrigin[1],r=createEmptyPath$1(this);return r?(r.moveTo(s+i,o),r.lineTo(s+t,o),r.lineTo(s+t-i,o+e),r.lineTo(s,o+e),r.closePath(),this.path2D=r,this.path2D):this.path2D}}function createEmptyPath(t){const e=t.path2D&&t.path2D.constructor;return e?new e:null}function localBox(t){return{w:t.state.width,h:t.state.height,x:0-t.state.localOrigin[0],y:0-t.state.localOrigin[1]}}class BpmnTaskIcon extends z{static typeId="BpmnTaskIcon";createPathObject(){const{w:t,h:e,x:i,y:s}=localBox(this),o=createEmptyPath(this);if(!o)return this.path2D;const r=i+t/2,a=s+e/2,l=Math.min(t,e)/2,h=this.state.taskType||"none";if("user"===h)o.moveTo(r,a-l),o.arc(r,a-.35*l,.34*l,0,2*Math.PI),o.moveTo(r-.62*l,a+.72*l),o.arc(r,a+.72*l,.62*l,Math.PI,0);else if("service"===h){const t=8;for(let e=0;e<t;e++){const i=e*Math.PI*2/t,s=r+Math.cos(i)*l*.55,h=a+Math.sin(i)*l*.55,c=r+Math.cos(i)*l,d=a+Math.sin(i)*l;o.moveTo(s,h),o.lineTo(c,d)}o.moveTo(r+.34*l,a),o.arc(r,a,.34*l,0,2*Math.PI)}else"script"===h?(o.moveTo(r-.7*l,a-.85*l),o.lineTo(r+.7*l,a-.85*l),o.lineTo(r+.7*l,a+.5*l),o.moveTo(r-.7*l,a-.85*l),o.lineTo(r-.7*l,a+.5*l),o.moveTo(r-.7*l,a+.6*l),o.lineTo(r-.25*l,a+.85*l),o.lineTo(r+.25*l,a+.6*l),o.lineTo(r+.7*l,a+.85*l)):"send"===h?(o.moveTo(r-.85*l,a-.55*l),o.lineTo(r+.85*l,a-.55*l),o.lineTo(r+.85*l,a+.55*l),o.lineTo(r-.85*l,a+.55*l),o.closePath(),o.moveTo(r-.85*l,a-.55*l),o.lineTo(r,a+.12*l),o.lineTo(r+.85*l,a-.55*l)):"receive"===h?(o.moveTo(r-.85*l,a-.55*l),o.lineTo(r+.85*l,a-.55*l),o.lineTo(r+.85*l,a+.55*l),o.lineTo(r-.85*l,a+.55*l),o.closePath()):"manual"===h&&(o.moveTo(r-.7*l,a+.6*l),o.lineTo(r-.45*l,a-.5*l),o.lineTo(r+.45*l,a-.5*l),o.lineTo(r+.7*l,a+.6*l),o.closePath());return this.path2D=o,this.path2D}}class BpmnSubprocessMarker extends z{static typeId="BpmnSubprocessMarker";createPathObject(){const{w:t,h:e,x:i,y:s}=localBox(this),o=createEmptyPath(this);return o?(o.moveTo(i,s),o.lineTo(i+t,s),o.lineTo(i+t,s+e),o.lineTo(i,s+e),o.closePath(),o.moveTo(i+t/2,s+.22*e),o.lineTo(i+t/2,s+.78*e),o.moveTo(i+.22*t,s+e/2),o.lineTo(i+.78*t,s+e/2),this.path2D=o,this.path2D):this.path2D}}class BpmnFlowMarker extends z{static typeId="BpmnFlowMarker";createPathObject(){const{w:t,h:e,x:i,y:s}=localBox(this),o=createEmptyPath(this);return o?("default"===(this.state.markerType||"conditional")?(o.moveTo(i+.2*t,s+.8*e),o.lineTo(i+.8*t,s+.2*e)):(o.moveTo(i+t/2,s),o.lineTo(i+t,s+e/2),o.lineTo(i+t/2,s+e),o.lineTo(i,s+e/2),o.closePath()),this.path2D=o,this.path2D):this.path2D}}const to={terminator:{label:"开始 / 结束",width:180,height:60,fill:"#dcfce7",stroke:"#16a34a",radius:30,shape:"rect"},process:{label:"处理",width:220,height:80,fill:"#e0e7ff",stroke:"#4f46e5",radius:10,shape:"rect"},decision:{label:"判定",width:200,height:120,fill:"#fef3c7",stroke:"#d97706",shape:"diamond"},io:{label:"输入 / 输出",width:220,height:80,fill:"#e0f2fe",stroke:"#0284c7",shape:"parallelogram"},bpmnEvent:{label:"事件",width:56,height:56,fill:"#ffffff",stroke:"#0f172a",shape:"event",lineWidth:1.5,eventKind:"start",trigger:"none",labelPlacement:"top-left"},bpmnTask:{label:"任务",width:180,height:90,fill:"#ffffff",stroke:"#0f172a",radius:8,shape:"rect",taskType:"none",labelPlacement:"center"},bpmnGateway:{label:"网关",width:70,height:70,fill:"#ffffff",stroke:"#0f172a",shape:"gateway",gatewayType:"exclusive",labelPlacement:"top-left"},bpmnSubprocess:{label:"子流程",width:200,height:110,fill:"#ffffff",stroke:"#0f172a",radius:8,shape:"rect",labelPlacement:"center"},bpmnDataObject:{label:"数据对象",width:130,height:80,fill:"#ffffff",stroke:"#0f172a",shape:"dataObject",labelPlacement:"center"},bpmnAnnotation:{label:"注释",width:200,height:80,fill:"#ffffff",stroke:"#64748b",shape:"annotation",lineDash:[],labelPlacement:"center"},bpmnPool:{label:"池",width:900,height:260,fill:"#f8fafc",stroke:"#64748b",shape:"lane",band:"top",bandSize:32,labelPlacement:"top-left"},bpmnLane:{label:"泳道",width:900,height:130,fill:"#ffffff",stroke:"#94a3b8",shape:"lane",band:"left",bandSize:32,labelPlacement:"top-left",transparent:!0}},eo={rect:j,diamond:FlowDiamond,parallelogram:FlowParallelogram,event:class BpmnEventShape extends z{static typeId="BpmnEventShape";createPathObject(){const{w:t,h:e,x:i,y:s}=localBox(this),o=createEmptyPath(this);if(!o)return this.path2D;const r=i+t/2,a=s+e/2,l=Math.min(t,e)/2,h=this.state.eventKind||"start";o.arc(r,a,l,0,2*Math.PI),"intermediate"!==h&&"end"!==h||(o.moveTo(r+.84*l,a),o.arc(r,a,.84*l,0,2*Math.PI));const c=this.state.trigger||"none";if("message"===c){const t=1.1*l,e=.78*l;o.moveTo(r-t/2,a-e/2),o.lineTo(r+t/2,a-e/2),o.lineTo(r+t/2,a+e/2),o.lineTo(r-t/2,a+e/2),o.closePath(),o.moveTo(r-t/2,a-e/2),o.lineTo(r,a+.08*e),o.lineTo(r+t/2,a-e/2)}else if("timer"===c){const t=.52*l;o.moveTo(r+t,a),o.arc(r,a,t,0,2*Math.PI),o.moveTo(r,a),o.lineTo(r,a-.62*t),o.moveTo(r,a),o.lineTo(r+.5*t,a)}else"error"===c?(o.moveTo(r+.34*l,a-.62*l),o.lineTo(r-.42*l,a+.06*l),o.lineTo(r-.02*l,a+.06*l),o.lineTo(r-.3*l,a+.66*l),o.lineTo(r+.44*l,a-.02*l),o.lineTo(r+.04*l,a-.02*l),o.closePath()):"terminate"===c&&(o.moveTo(r+.5*l,a),o.arc(r,a,.5*l,0,2*Math.PI));return this.path2D=o,this.path2D}},gateway:class BpmnGatewayShape extends z{static typeId="BpmnGatewayShape";createPathObject(){const{w:t,h:e,x:i,y:s}=localBox(this),o=createEmptyPath(this);if(!o)return this.path2D;const r=i+t/2,a=s+e/2,l=t/2,h=e/2;o.moveTo(r,a-h),o.lineTo(r+l,a),o.lineTo(r,a+h),o.lineTo(r-l,a),o.closePath();const c=this.state.gatewayType||"exclusive",d=.42*Math.min(l,h);if("exclusive"===c)o.moveTo(r-d,a-d),o.lineTo(r+d,a+d),o.moveTo(r+d,a-d),o.lineTo(r-d,a+d);else if("parallel"===c)o.moveTo(r-d,a),o.lineTo(r+d,a),o.moveTo(r,a-d),o.lineTo(r,a+d);else if("inclusive"===c)o.moveTo(r+d,a),o.arc(r,a,d,0,2*Math.PI);else if("event"===c){const t=1.15*d;for(let e=0;e<5;e++){const i=-Math.PI/2+e*Math.PI*2/5,s=r+Math.cos(i)*t,l=a+Math.sin(i)*t;0===e?o.moveTo(s,l):o.lineTo(s,l)}o.closePath()}return this.path2D=o,this.path2D}},dataObject:class BpmnDataObjectShape extends z{static typeId="BpmnDataObjectShape";createPathObject(){const{w:t,h:e,x:i,y:s}=localBox(this),o=createEmptyPath(this);if(!o)return this.path2D;const r=Math.min(14,.22*t,.32*e);return o.moveTo(i,s),o.lineTo(i+t-r,s),o.lineTo(i+t,s+r),o.lineTo(i+t,s+e),o.lineTo(i,s+e),o.closePath(),o.moveTo(i+t-r,s),o.lineTo(i+t-r,s+r),o.lineTo(i+t,s+r),this.path2D=o,this.path2D}},annotation:class BpmnAnnotationShape extends z{static typeId="BpmnAnnotationShape";createPathObject(){const{w:t,h:e,x:i,y:s}=localBox(this),o=createEmptyPath(this);if(!o)return this.path2D;const r=Math.min(16,.3*t);return o.moveTo(i,s),o.lineTo(i+t,s),o.lineTo(i+t,s+e),o.lineTo(i,s+e),o.closePath(),o.moveTo(i+r,s),o.lineTo(i,s),o.lineTo(i,s+e),o.lineTo(i+r,s+e),this.path2D=o,this.path2D}},lane:class BpmnLaneShape extends z{static typeId="BpmnLaneShape";createPathObject(){const{w:t,h:e,x:i,y:s}=localBox(this),o=createEmptyPath(this);if(!o)return this.path2D;const r=Math.min(this.state.bandSize||30,.4*t,.4*e);return o.moveTo(i,s),o.lineTo(i+t,s),o.lineTo(i+t,s+e),o.lineTo(i,s+e),o.closePath(),"top"===(this.state.band||"left")?(o.moveTo(i,s+r),o.lineTo(i+t,s+r)):(o.moveTo(i+r,s),o.lineTo(i+r,s+e)),this.path2D=o,this.path2D}}};class FlowNode extends X{static typeId="FlowNode";shapeComponent=null;labelComponent=null;decorationComponents=[];hasDerivedChildren(){return!0}constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const e=to[t.kind]?t.kind:"process",i=to[e];super({kind:e,title:i.label,fillColor:i.fill,strokeColor:i.stroke,textColor:"#0f172a",fontSize:14,width:i.width,height:i.height,fill:!1,stroke:!1,draggable:!0,interactive:!0,transformable:!1,...t}),this.__buildShape()}__buildShape(){this.shapeComponent&&this.removeChild(this.shapeComponent),this.labelComponent&&this.removeChild(this.labelComponent),this.decorationComponents&&this.decorationComponents.length&&(this.removeChildren(this.decorationComponents),this.decorationComponents.length=0);const t=to[this.state.kind]||to.process,e=eo[t.shape]||j;this.shapeComponent=new e({left:0,top:0,width:this.state.width,height:this.state.height,radius:t.radius||0,lineWidth:t.lineWidth||1.5,lineDash:this.state.lineDash||t.lineDash||[],eventKind:this.state.eventKind||t.eventKind,trigger:this.state.trigger||t.trigger,gatewayType:this.state.gatewayType||t.gatewayType,taskType:this.state.taskType||t.taskType,band:t.band,bandSize:t.bandSize,fill:!t.transparent,interactive:!1,showMinBoundingBox:!1,showMaxBoundingBox:!1,style:{fillStyle:this.state.fillColor||t.fill,strokeStyle:this.state.strokeColor||t.stroke,lineWidth:t.lineWidth||1.5}}),this.__buildDecorations(t);const i="top-left"===t.labelPlacement;this.labelComponent=new pt({left:i?10:0,top:i?"top"===t.band?18:16:0,width:i?Math.max(this.state.width-20,20):this.state.width,height:i?18:this.state.height,text:String(this.state.title||""),wrap:!i,maxLines:2,interactive:!1,stroke:!1,showMinBoundingBox:!1,showMaxBoundingBox:!1,style:{fontSize:this.state.fontSize||(i?13:14),fillStyle:this.state.textColor||"#0f172a",textAlign:i?"left":"center",textBaseline:"middle",fontWeight:i?"bold":"normal",paddingLeft:i?0:12,paddingRight:i?0:12}}),this.addChild(this.shapeComponent),this.addChild(this.labelComponent)}__buildDecorations(t){const e=this.state.kind,i=[],s=this.state.strokeColor||t.stroke;if("bpmnTask"===e||"bpmnSubprocess"===e){const e=this.state.taskType||t.taskType||"none";"none"!==e&&i.push(new BpmnTaskIcon({left:8,top:8,width:14,height:14,stroke:!0,fill:!1,interactive:!1,showMinBoundingBox:!1,showMaxBoundingBox:!1,taskType:e,style:{strokeStyle:s,lineWidth:1.4}}))}"bpmnSubprocess"===e&&i.push(new BpmnSubprocessMarker({left:(this.state.width-14)/2,top:this.state.height-20,width:14,height:14,stroke:!0,fill:!1,interactive:!1,showMinBoundingBox:!1,showMaxBoundingBox:!1,style:{strokeStyle:s,lineWidth:1.4}})),i.length&&(i.forEach(t=>this.addChild(t)),this.decorationComponents=i)}applyPatch(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const e=void 0!==t.kind||void 0!==t.fillColor||void 0!==t.strokeColor||void 0!==t.textColor||void 0!==t.fontSize||void 0!==t.eventKind||void 0!==t.trigger||void 0!==t.gatewayType||void 0!==t.taskType||void 0!==t.width||void 0!==t.height;return this.setState(t),e?this.__buildShape():this.labelComponent&&this.labelComponent.setState({text:String(this.state.title||"")}),this.dirty=!0,this}}class FlowEdge extends ICEVisioLink{static typeId="FlowEdge";hasDerivedChildren(){return!0}constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super({title:"Edge",arrow:"end",linkShape:"visio",lineType:"solid",linkable:!1,draggable:!1,interactive:!0,transformable:!1,startPoint:[0,0],endPoint:[10,10],label:"",...t,style:{strokeStyle:"#475569",fillStyle:"#475569",lineWidth:1.6,...t.style||{}},labelStyle:{fontSize:12,fillStyle:"#334155",backgroundColor:"#ffffff",paddingLeft:4,paddingRight:4,...t.labelStyle||{}}}),this.applyPatch({flowType:this.state.flowType,condition:this.state.condition,isDefault:this.state.isDefault})}applyPatch(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const e={...this.state,...t},i=e.flowType||"sequence",s="message"===i?{lineDash:[7,4],arrowStyle:"hollow",lineWidth:e.lineWidth||1.4}:"association"===i?{lineDash:[2,3],arrow:"none",arrowStyle:"hollow",lineWidth:e.lineWidth||1.2}:{arrow:e.arrow||"end",arrowStyle:"filled",lineDash:[],lineWidth:e.lineWidth||1.6};return this.setState({...t,...s}),this.dirty=!0,this}}function validateFlowSnapshot(t){const e=[];return!t||"object"!=typeof t||Array.isArray(t)?{valid:!1,errors:["root must be an object"]}:void 0!==t.scene?(!t.scene||"object"!=typeof t.scene||Array.isArray(t.scene)?e.push("scene must be an object when present"):Array.isArray(t.scene.childNodes)||e.push("scene.childNodes must be an array"),{valid:0===e.length,errors:e}):(Array.isArray(t.nodes)?t.nodes.forEach((t,i)=>{const s=`nodes[${i}]`;t&&"object"==typeof t&&!Array.isArray(t)?("string"!=typeof t.id&&e.push(s+".id must be a string"),void 0!==t.kind&&"string"!=typeof t.kind&&e.push(s+".kind must be a string when present"),void 0!==t.left&&"number"!=typeof t.left&&e.push(s+".left must be a number when present"),void 0!==t.top&&"number"!=typeof t.top&&e.push(s+".top must be a number when present")):e.push(s+" must be an object")}):e.push("nodes must be an array"),void 0===t.edges||Array.isArray(t.edges)?Array.isArray(t.edges)&&t.edges.forEach((t,i)=>{const s=`edges[${i}]`;t&&"object"==typeof t&&!Array.isArray(t)?(["sourceId","targetId"].forEach(i=>{void 0!==t[i]&&null!==t[i]&&"string"!=typeof t[i]&&e.push(`${s}.${i} must be a string or null when present`)}),void 0!==t.label&&"string"!=typeof t.label&&e.push(s+".label must be a string when present"),void 0!==t.linkShape&&"visio"!==t.linkShape&&"bezier"!==t.linkShape&&e.push(s+'.linkShape must be "visio" or "bezier" when present')):e.push(s+" must be an object")}):e.push("edges must be an array when present"),{valid:0===e.length,errors:e})}class FlowDesigner{selectedId=null;__undoStack=[];__redoStack=[];__historyEnabled=!0;__maxHistory=100;__listeners=[];__mousedownHandler=t=>this.__handleMouseDown(t);__moveSession=!1;__moveEmitQueued=!1;__beforeMoveHandler=()=>this.__onBeforeMove();__afterMoveHandler=()=>this.__onAfterMove();__mouseupHandler=()=>this.__endMoveSession();constructor(t){this.ice=t,this.ice.registerType(FlowNode.typeId,FlowNode),this.ice.registerType(FlowEdge.typeId,FlowEdge),this.ice.evtBus.on("mousedown",this.__mousedownHandler,this),this.ice.evtBus.on("mouseup",this.__mouseupHandler,this)}get nodes(){return this.__flatten().filter(t=>t.constructor&&t.constructor.typeId===FlowNode.typeId)}get edges(){return this.__flatten().filter(t=>t.constructor&&t.constructor.typeId===FlowEdge.typeId)}__flatten(){const t=[],walk=e=>{e.forEach(e=>{t.push(e),e.childNodes&&e.childNodes.length&&walk(e.childNodes)})};return walk(this.ice.childNodes||[]),t}get selected(){return this.selectedId?this.ice.findComponent(this.selectedId):null}subscribe(t){return"function"!=typeof t?()=>{}:(this.__listeners.push(t),()=>{const e=this.__listeners.indexOf(t);-1!==e&&this.__listeners.splice(e,1)})}__emitChange(){if(!this.__listeners.length)return;const t=this.serialize();this.__listeners.slice().forEach(e=>e(t,this))}__attachNodeListeners(t){t&&"function"==typeof t.on&&(t.on("BEFORE_MOVE",this.__beforeMoveHandler,this),t.on("AFTER_MOVE",this.__afterMoveHandler,this))}__detachNodeListeners(t){t&&"function"==typeof t.off&&(t.off("BEFORE_MOVE",this.__beforeMoveHandler,this),t.off("AFTER_MOVE",this.__afterMoveHandler,this))}__onBeforeMove(){this.__moveSession||(this.__moveSession=!0,this.__captureHistory())}__onAfterMove(){if(this.__moveEmitQueued)return;this.__moveEmitQueued=!0;const flush=()=>{this.__moveEmitQueued=!1,this.__emitChange()};"function"==typeof requestAnimationFrame?requestAnimationFrame(flush):setTimeout(flush,16)}__endMoveSession(){this.__moveSession=!1}select(t){return this.selectedId=t,this.__emitChange(),this}__defaultPlacement(t,e){const i=this.nodes;if(!i.length)return{left:120,top:120};let s=1/0,o=-1/0;i.forEach(t=>{const e=t.getMinBoundingBox(!0);s=Math.min(s,e.tl[0]),o=Math.max(o,e.br[1])});const r=i.length;return{left:s+r%4*280,top:o+80+Math.floor(r/4)*(e+90)}}createNode(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.__captureHistory();const i=new FlowNode({kind:t,...e});if(void 0===e.left||void 0===e.top){const t=this.__defaultPlacement(i.state.width,i.state.height);i.setState({left:void 0===e.left?t.left:e.left,top:void 0===e.top?t.top:e.top})}return this.ice.addChild(i),this.__attachNodeListeners(i),this.selectedId=i.state.id,this.__emitChange(),i}__slotPoint(t,e){const i=t.getMinBoundingBox(!0);switch(e){case"T":return[...i.tc];case"R":return[...i.rc];case"B":return[...i.bc];case"L":return[...i.lc];case"C":default:return[...i.center]}}createEdge(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const e=t.sourceId?this.ice.findComponent(t.sourceId):null,i=t.targetId?this.ice.findComponent(t.targetId):null;if(!e||!i)throw new Error("连接两端必须是已存在的节点");this.__captureHistory();const s=t.sourcePort||"B",o=t.targetPort||"T",r=new FlowEdge({links:{start:{id:t.sourceId,position:s},end:{id:t.targetId,position:o}},startPoint:this.__slotPoint(e,s),endPoint:this.__slotPoint(i,o),label:t.label||"",linkShape:t.linkShape||"visio",flowType:t.flowType||"sequence",condition:t.condition||"",isDefault:!!t.isDefault,style:t.style,labelStyle:t.labelStyle});return this.ice.addChild(r),this.selectedId=r.state.id,this.__emitChange(),r}updateNode(t,e){const i=this.ice.findComponent(t);return i&&i.constructor.typeId===FlowNode.typeId&&(this.__captureHistory(),i.applyPatch(e),this.__emitChange()),i}updateEdge(t,e){const i=this.ice.findComponent(t);return i&&i.constructor.typeId===FlowEdge.typeId&&(this.__captureHistory(),"function"==typeof i.applyPatch?i.applyPatch(e):(i.setState(e),i.dirty=!0),this.__emitChange()),i}remove(t){const e=this.ice.findComponent(t);e&&(this.__captureHistory(),e.constructor.typeId===FlowNode.typeId&&(this.__detachNodeListeners(e),this.edges.filter(e=>{const i=e.state.links||{};return i.start&&i.start.id===t||i.end&&i.end.id===t}).forEach(t=>this.ice.removeChild(t))),e.parentNode&&"function"==typeof e.parentNode.removeChild?e.parentNode.removeChild(e):this.ice.removeChild(e),this.selectedId===t&&(this.selectedId=null),this.__emitChange())}clear(){this.__captureHistory(),this.ice.clearAll(),this.selectedId=null,this.__emitChange()}serialize(){return JSON.stringify(this.toSnapshot())}toSnapshot(){const t=this.__serializer().toJSONObject();return{version:2,kind:"flowchart",scene:{version:t.version,childNodes:t.childNodes}}}__serializer(){const t=this.ice;return t.serializer||new Serializer(t)}__deserializer(){const t=this.ice;return t.deserializer||new Deserializer(t)}load(t){if(!t)return{loaded:!1,nodes:0,edges:0,skipped:[]};let e;try{e=JSON.parse(t)}catch(t){throw new Error(`Invalid flow snapshot: 不是合法 JSON(${t instanceof Error?t.message:String(t)})`)}if(!e||"object"!=typeof e)return{loaded:!1,nodes:0,edges:0,skipped:[]};const i=!!e.scene;if(!i&&!Array.isArray(e.nodes))return{loaded:!1,nodes:0,edges:0,skipped:[]};const s=validateFlowSnapshot(e);if(!s.valid)throw new Error("Invalid flow snapshot:\n"+s.errors.join("\n"));this.__captureHistory();const o=i?this.__applyEngineScene(e.scene):this.__clearAndBuild(e);return this.__emitChange(),o}__applyEngineScene(t){this.ice.clearAll(),this.selectedId=null;const e=this.__deserializer();e.fromJSONObject({version:t.version,childNodes:t.childNodes});const i={loaded:!0,nodes:this.nodes.length,edges:this.edges.length,skipped:[...e.unknownTypes||[]]};return this.nodes.forEach(t=>this.__attachNodeListeners(t)),i}__clearAndBuild(t){this.ice.clearAll(),this.selectedId=null;const e={loaded:!0,nodes:0,edges:0,skipped:[]};return(t.nodes||[]).forEach(t=>{if(void 0!==t.typeId&&t.typeId!==FlowNode.typeId)return void e.skipped.push(String(t.typeId));const i=new FlowNode(t);delete i.state.typeId,this.ice.addChild(i),this.__attachNodeListeners(i),e.nodes+=1}),(t.edges||[]).forEach(t=>{if(void 0!==t.typeId&&t.typeId!==FlowEdge.typeId)return void e.skipped.push(String(t.typeId));const i=t.sourceId||t.links&&t.links.start&&t.links.start.id||null,s=t.targetId||t.links&&t.links.end&&t.links.end.id||null,o=t.sourcePort||t.links&&t.links.start&&t.links.start.position||"B",r=t.targetPort||t.links&&t.links.end&&t.links.end.position||"T",a=i&&s?{start:{id:i,position:o},end:{id:s,position:r}}:t.links,l=new FlowEdge({...t,links:a,startPoint:t.startPoint||[0,0],endPoint:t.endPoint||[10,10]});delete l.state.typeId,this.ice.addChild(l),e.edges+=1}),e}fitViewport(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:80;const e=this.nodes,i=this.ice.canvasWidth||0,s=this.ice.canvasHeight||0;if(!e.length||!i||!s)return;let o=1/0,r=1/0,a=-1/0,l=-1/0;e.forEach(t=>{const e=t.getMinBoundingBox(!0);o=Math.min(o,e.tl[0]),r=Math.min(r,e.tl[1]),a=Math.max(a,e.br[0]),l=Math.max(l,e.br[1])});const h=Math.max(a-o,1),c=Math.max(l-r,1),d=Math.min((i-2*t)/h,(s-2*t)/c,1.25),u=(i-h*d)/2-o*d,p=(s-c*d)/2-r*d;this.ice.setViewport(d,u,p)}canUndo(){return this.__undoStack.length>0}toSvg(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return exportSvg(this.ice,t)}canRedo(){return this.__redoStack.length>0}captureHistory(){this.__captureHistory()}resetHistory(){this.__undoStack.length=0,this.__redoStack.length=0}__captureHistory(){this.__historyEnabled&&(this.__undoStack.push(this.serialize()),this.__undoStack.length>this.__maxHistory&&this.__undoStack.shift(),this.__redoStack.length=0)}__applySnapshot(t){const e=JSON.parse(t);e&&e.scene?this.__applyEngineScene(e.scene):this.__clearAndBuild(e)}undo(){if(!this.canUndo())return;const t=this.serialize(),e=this.__undoStack.pop();this.__redoStack.push(t),this.__historyEnabled=!1;try{this.__applySnapshot(e)}catch(t){throw this.__redoStack.pop(),this.__undoStack.push(e),t}finally{this.__historyEnabled=!0}this.__emitChange()}redo(){if(!this.canRedo())return;const t=this.serialize(),e=this.__redoStack.pop();this.__undoStack.push(t),this.__historyEnabled=!1;try{this.__applySnapshot(e)}catch(t){throw this.__undoStack.pop(),this.__redoStack.push(e),t}finally{this.__historyEnabled=!0}this.__emitChange()}__handleMouseDown(t){const e=t&&t.param&&t.param.component;if(!e)return;let i=e;for(;i;){const t=i.constructor&&i.constructor.typeId;if(t===FlowNode.typeId||t===FlowEdge.typeId)return void this.select(i.state.id);i=i.parentNode}}dispose(){this.ice.evtBus.off("mousedown",this.__mousedownHandler,this),this.ice.evtBus.off("mouseup",this.__mouseupHandler,this),this.nodes.forEach(t=>this.__detachNodeListeners(t))}}function endpointId(t,e){return((t.state.links||{})[e]||{}).id}function boxOf(t){const e=t.getMinBoundingBox(!0);return{x0:e.tl[0],y0:e.tl[1],x1:e.br[0],y1:e.br[1]}}function contains(t,e){const i=(e.x0+e.x1)/2,s=(e.y0+e.y1)/2;return i>=t.x0&&i<=t.x1&&s>=t.y0&&s<=t.y1}function owningPool(t,e){const i=boxOf(t),s=e.filter(t=>"bpmnPool"===t.state.kind);for(const t of s)if(contains(boxOf(t),i))return t;return null}function validateBpmn(t){const e=[],i=t.nodes||[],s=t.edges||[],o=new Map;i.forEach(t=>o.set(t.state.id,t));const r=i.filter(t=>!!t&&-1!==["bpmnEvent","bpmnTask","bpmnGateway","bpmnSubprocess"].indexOf(t.state.kind)),a=s.filter(t=>"sequence"===(t.state.flowType||"sequence")),l=s.filter(t=>"message"===t.state.flowType),h=new Map,c=new Map;r.forEach(t=>{h.set(t.state.id,[]),c.set(t.state.id,[])}),a.forEach(t=>{const e=endpointId(t,"start"),i=endpointId(t,"end"),s=h.get(e),o=c.get(i);s&&s.push(t),o&&o.push(t)}),r.forEach(t=>{const i=t.state.kind,s=t.state.eventKind,o=h.get(t.state.id)||[],r=c.get(t.state.id)||[];if("bpmnEvent"===i&&"start"===s&&(r.length&&e.push({level:"error",code:"start-incoming",componentId:t.state.id,message:`开始事件「${t.state.title}」不能有流入的顺序流`}),o.length||e.push({level:"error",code:"start-no-outgoing",componentId:t.state.id,message:`开始事件「${t.state.title}」缺少流出的顺序流`})),"bpmnEvent"===i&&"end"===s&&(o.length&&e.push({level:"error",code:"end-outgoing",componentId:t.state.id,message:`结束事件「${t.state.title}」不能有流出的顺序流`}),r.length||e.push({level:"warning",code:"end-no-incoming",componentId:t.state.id,message:`结束事件「${t.state.title}」没有流入的顺序流(不可达)`})),"bpmnGateway"===i){const i=t.state.gatewayType||"exclusive";o.length<1&&e.push({level:"error",code:"gateway-no-outgoing",componentId:t.state.id,message:`网关「${t.state.title}」至少要有一条流出顺序流`}),"exclusive"!==i&&o.length<2&&e.push({level:"warning",code:"gateway-too-few-branches",componentId:t.state.id,message:`${{parallel:"并行",inclusive:"包容",event:"事件"}[i]||i}网关「${t.state.title}」通常应有 ≥2 条出边`});const s=o.filter(t=>t.state.isDefault);s.length>1&&e.push({level:"error",code:"gateway-multi-default",componentId:t.state.id,message:`网关「${t.state.title}」只能有一条默认流(当前 ${s.length} 条)`}),s.length&&"exclusive"!==i&&"inclusive"!==i&&e.push({level:"warning",code:"gateway-default-on-and",componentId:t.state.id,message:`并行网关「${t.state.title}」不应设置默认流`})}r.length||o.length||"bpmnPool"===i||"bpmnLane"===i||"bpmnAnnotation"===i||"bpmnEvent"===i&&"start"===s||e.push({level:"warning",code:"isolated-node",componentId:t.state.id,message:`「${t.state.title}」没有连任何顺序流`})});i.filter(t=>"bpmnPool"===t.state.kind).forEach(t=>{const i=boxOf(t),s=r.filter(t=>contains(i,boxOf(t))),o=s.filter(t=>"bpmnEvent"===t.state.kind&&"start"===t.state.eventKind);s.length&&!o.length&&e.push({level:"error",code:"pool-no-start",componentId:t.state.id,message:`池「${t.state.title}」里没有开始事件`})}),a.forEach(t=>{const s=o.get(endpointId(t,"start")),r=o.get(endpointId(t,"end"));if(!s||!r)return;owningPool(s,i)!==owningPool(r,i)&&e.push({level:"error",code:"sequence-flow-cross-pool",componentId:t.state.id,message:`顺序流不能跨池(「${s.state.title}」→「${r.state.title}」);跨参与者请用消息流`})}),l.forEach(t=>{const s=o.get(endpointId(t,"start")),r=o.get(endpointId(t,"end"));if(!s||!r)return;const a=owningPool(s,i),l=owningPool(r,i);a&&l&&a===l&&e.push({level:"warning",code:"message-flow-same-pool",componentId:t.state.id,message:"消息流通常用于跨池(不同参与者)之间的通信"})});const d=new Set,u=r.filter(t=>"bpmnEvent"===t.state.kind&&"start"===t.state.eventKind).map(t=>t.state.id);for(u.forEach(t=>d.add(t));u.length;){const t=u.shift();(h.get(t)||[]).forEach(t=>{const e=endpointId(t,"end");e&&!d.has(e)&&(d.add(e),u.push(e))})}return r.forEach(t=>{d.has(t.state.id)||e.push({level:"warning",code:"unreachable-node",componentId:t.state.id,message:`「${t.state.title}」从开始事件出发不可达`})}),e}const io="http://www.omg.org/spec/BPMN/20100524/MODEL",so="http://www.omg.org/spec/BPMN/20100524/DI",no="http://www.omg.org/spec/DD/20100524/DC",oo="http://www.omg.org/spec/DD/20100524/DI";function escapeXml(t){return String(t??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}function localName(t){return(t&&(t.localName||t.nodeName||"")).split(":").pop()}function rectOf(t){const e=t.getMinBoundingBox(!0);return{x0:e.tl[0],y0:e.tl[1],x1:e.br[0],y1:e.br[1]}}function centerInside(t,e){const i=(e.x0+e.x1)/2,s=(e.y0+e.y1)/2;return i>=t.x0&&i<=t.x1&&s>=t.y0&&s<=t.y1}function elementNameForNode(t){const e=t.state.kind;if("bpmnEvent"===e){const e=t.state.eventKind||"start";return"end"===e?"endEvent":"intermediate"===e?"intermediateThrowEvent":"startEvent"}if("bpmnGateway"===e){return{exclusive:"exclusiveGateway",parallel:"parallelGateway",inclusive:"inclusiveGateway",event:"eventBasedGateway"}[t.state.gatewayType||"exclusive"]}if("bpmnSubprocess"===e)return"subProcess";if("bpmnDataObject"===e)return"dataObjectReference";if("bpmnAnnotation"===e)return"textAnnotation";if("bpmnTask"===e||"process"===e){return{none:"task",user:"userTask",service:"serviceTask",script:"scriptTask",send:"sendTask",receive:"receiveTask",manual:"manualTask"}[t.state.taskType||"none"]||"task"}return null}const ro={class:"",interface:"«interface»",enum:"«enumeration»"};class UmlClass extends X{static typeId="UmlClass";stereotypeComponent=null;nameComponent=null;headerBackgroundComponent=null;memberComponents=[];dividerComponents=[];hasDerivedChildren(){return!0}constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(UmlClass.arrangeParam(t)),this.syncCompartments()}static arrangeParam(t){const e=jn({kind:"class",className:"Class",attributes:[],methods:[],width:220,height:120,style:{strokeStyle:"#334155",fillStyle:"#ffffff",radius:6,lineWidth:1.5},headerStyle:{textColor:"#0f172a",backgroundColor:"#eef2ff",fontSize:16,fontWeight:"bold",paddingTop:10,paddingBottom:10,paddingLeft:12,paddingRight:12},memberStyle:{textColor:"#334155",fontSize:13,paddingTop:6,paddingBottom:0,paddingLeft:12,paddingRight:12},dividerStyle:{strokeStyle:"#cbd5e1",fillStyle:"#cbd5e1",lineWidth:1}},t,{transformable:!1});return kt(e.className)&&(e.className="Class"),Array.isArray(e.attributes)||(e.attributes=[]),Array.isArray(e.methods)||(e.methods=[]),e}static __layoutKeys=["kind","className","attributes","methods","abstract","width","headerStyle","memberStyle","dividerStyle"];setState(t){const e=!!t&&UmlClass.__layoutKeys.some(e=>Object.prototype.hasOwnProperty.call(t,e));super.setState(t),e&&this.syncCompartments()}applyPatch(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.setState(t)}syncCompartments(){this.__clearDerivedChildren();const t=this.state.width,e=this.state.kind||"class",i=ro[e]||(this.state.abstract?"«abstract»":""),s=this.state.headerStyle,o=this.state.memberStyle;let r=0;const a=this.state.zIndex||0,lineHeight=(t,e,i)=>Math.round(1.35*t+e+i),l=(this.state.style.lineWidth||1.5)/2,h=[];if(i){const e=Math.max((s.fontSize||16)-2,10),o=lineHeight(e,s.paddingTop,0),l=new pt({zIndex:a+2,left:0,top:r,width:t,height:o,text:i,stroke:!1,interactive:!1,style:{fontSize:e,fillStyle:s.textColor,textAlign:"center",textBaseline:"middle"}});this.stereotypeComponent=l,h.push(l),r+=o}const c=lineHeight(s.fontSize||16,i?0:s.paddingTop,s.paddingBottom),d=new pt({zIndex:a+2,left:0,top:r,width:t,height:c,text:String(this.state.className||""),stroke:!1,interactive:!1,style:{fontSize:s.fontSize,fillStyle:s.textColor,fontWeight:s.fontWeight,textAlign:"center",textBaseline:"middle",fontStyle:"interface"===e?"italic":"normal"}});this.nameComponent=d,h.push(d),r+=c;const u=r;s.backgroundColor&&"none"!==s.backgroundColor&&(this.headerBackgroundComponent=new j({zIndex:a+1,left:l,top:l,width:Math.max(t-2*l,0),height:Math.max(u-l,0),origin:"top-left",radius:Math.max((this.state.style.radius||0)-l,0),stroke:!1,interactive:!1,style:{fillStyle:s.backgroundColor,lineWidth:0}}),this.addChild(this.headerBackgroundComponent)),h.forEach(t=>this.addChild(t));[this.state.attributes||[],this.state.methods||[]].forEach((e,i)=>{const s=new at({zIndex:a+2,left:0,top:0,points:[[0,r],[t,r]],stroke:!0,interactive:!1,style:{strokeStyle:this.state.dividerStyle.strokeStyle,fillStyle:this.state.dividerStyle.fillStyle,lineWidth:this.state.dividerStyle.lineWidth}});this.dividerComponents.push(s),this.addChild(s);const l=lineHeight(o.fontSize||13,o.paddingTop,o.paddingBottom);e.length?(e.forEach(e=>{const i=new pt({zIndex:a+2,left:0,top:r,width:t,height:l,text:String(e),stroke:!1,interactive:!1,style:{fontSize:o.fontSize,fillStyle:o.textColor,textBaseline:"middle",textAlign:"left",paddingLeft:o.paddingLeft}});this.memberComponents.push(i),this.addChild(i),r+=l}),r+=6):r+=l}),this.state.height=Math.max(Math.round(r),this.state.height||0)}__clearDerivedChildren(){this.headerBackgroundComponent&&(this.removeChild(this.headerBackgroundComponent),this.headerBackgroundComponent=null),this.stereotypeComponent&&(this.removeChild(this.stereotypeComponent),this.stereotypeComponent=null),this.nameComponent&&(this.removeChild(this.nameComponent),this.nameComponent=null),this.memberComponents.length&&(this.removeChildren(this.memberComponents),this.memberComponents.length=0),this.dividerComponents.length&&(this.removeChildren(this.dividerComponents),this.dividerComponents.length=0)}}const ao=["inheritance","realization","association","aggregation","composition","dependency"],lo={inheritance:{marker:"triangle",markerEnd:"end",filled:!1,dashed:!1},realization:{marker:"triangle",markerEnd:"end",filled:!1,dashed:!0},association:{marker:"none",markerEnd:"end",filled:!1,dashed:!1},aggregation:{marker:"diamond",markerEnd:"start",filled:!1,dashed:!1},composition:{marker:"diamond",markerEnd:"start",filled:!0,dashed:!1},dependency:{marker:"open",markerEnd:"end",filled:!1,dashed:!0}};class UmlRelation extends at{static typeId="UmlRelation";constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(UmlRelation.arrangeParam(t)),this.__applyNotation(),this.setState({keepHistory:!1}),this.paramsDirty=!0}static arrangeParam(t){return jn({relationKind:"association",label:"",arrowLength:14,fill:!1},t)}setState(t){const e=!!t&&(Object.prototype.hasOwnProperty.call(t,"relationKind")||Object.prototype.hasOwnProperty.call(t,"arrowLength"));super.setState(t),e&&this.state.relationKind&&this.__applyNotation()}applyPatch(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.setState(t)}__applyNotation(){const t=this.state.relationKind||"association",e=lo[t]||lo.association;this.state.umlMarker=e.marker,this.state.arrowStyle="none"===e.marker?"none":e.filled?"filled":"hollow",this.state.lineDash=e.dashed?this.state.lineDash&&this.state.lineDash.length?this.state.lineDash:[8,5]:[],this.state.arrow="none"===e.marker?"none":e.markerEnd}calcArrowPoints(){const t=this.__arrowFaceIndexes;t.length=0;const e=this.state.relationKind||"association",i=lo[e]||lo.association,s=this.state.dots;if(!s||s.length<2||"none"===i.marker)return;const o="start"===i.markerEnd,r=[...o?s[0]:s[s.length-1]],a=[...o?s[1]:s[s.length-2]],l=r[0]-a[0],h=r[1]-a[1],c=Math.hypot(l,h)||1,d=l/c,u=h/c,p=this.state.arrowLength||14,f=.4*p,g=-u,m=d;if("triangle"===i.marker||"open"===i.marker){const e=this.doCalcArrowPoints([r,a]);return void(o?(s.unshift(...e),s.unshift([...r]),t.push(0)):(s.push(...e),s.push([...r]),t.push(s.length-4)))}const y=r[0]-d*(p/2),_=r[1]-u*(p/2),b=[[r[0],r[1]],[y+g*f,_+m*f],[r[0]-d*p,r[1]-u*p],[y-g*f,_-m*f]];o?(s.unshift(b[3],b[2],b[1]),t.push(0)):(s.push(b[1],b[2],b[3],[...r]),t.push(s.length-4))}}const ho={inheritance:"<|--",realization:"<|..",association:"--\x3e",aggregation:"o--",composition:"*--",dependency:"..>"},co=[[/<\|\.\./,"realization"],[/<\|--/,"inheritance"],[/\*--/,"composition"],[/o--/,"aggregation"],[/\.\.>/,"dependency"],[/-->/,"association"]];function quoteIfNeeded(t){return/^[A-Za-z_][A-Za-z0-9_]*$/.test(t)?t:`"${t}"`}function unquote(t){const e=t.trim();return/^".*"$/.test(e)?e.slice(1,-1).trim():e}exports.AlignmentGuideManager=G,exports.AnimationManager=P,exports.BpmnDesigner=class BpmnDesigner extends FlowDesigner{__markers=new Map;__markerSyncing=!1;__nesting=!1;constructor(t){super(t),this.subscribe(()=>this.syncFlowMarkers()),this.syncFlowMarkers()}validateBpmn(){return validateBpmn(this)}createNode(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=super.createNode(t,e);return this.__nestByGeometry(i),i}__nestByGeometry(t){if(this.__nesting)return;if("bpmnPool"===t.state.kind)return void t.setState({zIndex:-3e4});"bpmnLane"===t.state.kind&&t.setState({zIndex:-2e4});const e=t.getMinBoundingBox(!0),i=(e.tl[0]+e.br[0])/2,s=(e.tl[1]+e.br[1])/2,o=this.nodes.filter(e=>e!==t&&("bpmnPool"===e.state.kind||"bpmnLane"===e.state.kind)).filter(t=>{const e=this.__contentBox(t);return i>=e.tl[0]&&i<=e.br[0]&&s>=e.tl[1]&&s<=e.br[1]}).sort((t,e)=>t.state.width*t.state.height-e.state.width*e.state.height)[0];if(o){this.__nesting=!0;try{const e=o.getMinBoundingBox(!0).tl[0],i=o.getMinBoundingBox(!0).tl[1];t.setState({left:t.state.left-e,top:t.state.top-i}),o.adoptChild(t)}finally{this.__nesting=!1}}}__contentBox(t){const e=t.getMinBoundingBox(!0),i=to[t.state.kind]||{},s=i.band,o=i.bandSize||0;return s&&o?{tl:"top"===s?[e.tl[0],e.tl[1]+o]:[e.tl[0]+o,e.tl[1]],br:e.br}:e}syncFlowMarkers(){if(!this.__markerSyncing){this.__markerSyncing=!0;try{const t=new Set;this.edges.forEach(e=>{if(!!("sequence"!==(e.state.flowType||"sequence")||!e.state.condition&&!e.state.isDefault))return;t.add(e.state.id);const i=e.state.points&&e.state.points.length?e.state.points:[e.state.startPoint,e.state.endPoint],s=i[0]||[0,0],o=i[1]||s,r=o[0]-s[0],a=o[1]-s[1],l=Math.max(Math.hypot(r,a),1),h=s[0]+r/l*16-7,c=s[1]+a/l*16-7,d=e.state.isDefault?"default":"conditional",u=e.state.style&&e.state.style.strokeStyle||"#475569";let p=this.__markers.get(e.state.id);p?(p.setState({left:h,top:c,markerType:d,style:{...p.state.style||{},strokeStyle:u}}),p.dirty=!0):(p=new BpmnFlowMarker({left:h,top:c,width:14,height:14,interactive:!1,draggable:!1,linkable:!1,showMinBoundingBox:!1,showMaxBoundingBox:!1,markerType:d,style:{strokeStyle:u,fillStyle:"#ffffff",lineWidth:1.4}}),this.ice.addTool(p),this.__markers.set(e.state.id,p))}),[...this.__markers.keys()].forEach(e=>{if(!t.has(e)){const t=this.__markers.get(e);this.ice.removeTool(t),this.__markers.delete(e)}})}finally{this.__markerSyncing=!1}}}dispose(){this.__markers.forEach(t=>this.ice.removeTool(t)),this.__markers.clear(),super.dispose()}},exports.CanvasRenderer=vt,exports.DARK_THEME=x,exports.DEFAULT_THEME=v,exports.DOMEventDispatcher=it,exports.DOMEventInterceptor=nt,exports.Deserializer=Deserializer,exports.Entity=Entity,exports.EntityDesigner=class EntityDesigner{selectedId=null;__changeListeners=[];__mousedownHandler=t=>this.__handleMouseDown(t);__undoStack=[];__redoStack=[];__historyEnabled=!0;__maxHistory=100;constructor(t){this.ice=t,this.ice.registerType(Entity.typeId,Entity),this.ice.registerType(Relation.typeId,Relation),this.ice.evtBus.on("mousedown",this.__mousedownHandler,this)}get entities(){return this.ice.childNodes.filter(t=>isEntity(t))}get relations(){return this.ice.childNodes.filter(t=>isRelation(t))}get selected(){return this.selectedId?this.ice.findComponent(this.selectedId):null}select(t){return this.selectedId=t,this}createEntity(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.captureHistory();const e=this.entities.length,i=new Entity({left:120+e%4*220,top:120+260*Math.floor(e/4),entityName:"NewEntity",fields:[],...t});return this.ice.addChild(i),this.select(i.state.id),this.__emitChange(),i}createRelation(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.captureHistory();const e=t.links||{start:{id:t.sourceId||t.fromId,position:t.startPosition||"R"},end:{id:t.targetId||t.toId,position:t.endPosition||"L"}},i=t.sourceId||t.fromId||e.start&&e.start.id,s=t.targetId||t.toId||e.end&&e.end.id,o=e.start&&e.start.position||t.startPosition||"R",r=e.end&&e.end.position||t.endPosition||"L",a=i?this.ice.findComponent(i):null,l=s?this.ice.findComponent(s):null,h=a?this.__slotPoint(a,o):null,c=l?this.__slotPoint(l,r):null,d=new Relation({relationType:t.relationType||"one-to-many",sourceField:t.sourceField||"id",targetField:t.targetField||"id",links:e,startPoint:h||[0,0],endPoint:c||[10,10],...t});return this.ice.addChild(d),this.select(d.state.id),this.__emitChange(),d}updateEntity(t,e){const i=this.ice.findComponent(t);return isEntity(i)&&(this.captureHistory(),i.setState(e),this.__emitChange()),i}updateRelation(t,e){const i=this.ice.findComponent(t);if(isRelation(i)){this.captureHistory();const t={...i.state,...e},s=Relation.buildLabel(t,t.relationType||"one-to-one");i.setState({...e,label:s}),this.__emitChange()}return i}removeComponent(t){const e=this.ice.findComponent(t);if(e){if(this.captureHistory(),isEntity(e)){this.relations.filter(e=>{const i=e.state.links||{};return i.start&&i.start.id===t||i.end&&i.end.id===t}).forEach(t=>this.ice.removeChild(t))}this.ice.removeChild(e),this.selectedId===t&&(this.selectedId=null),this.__emitChange()}}toSchemaObject(){return toSchemaObject(this.ice.childNodes)}toSchemaString(){return toSchemaString(this.ice.childNodes)}validate(){return validateSchema(this.ice.childNodes)}serializeProject(){const t={version:1,schemaVersion:1,entities:this.entities.map(t=>this.__entitySnapshot(t)),relations:this.relations.map(t=>this.__relationSnapshot(t))};return JSON.stringify(t)}loadProject(t){if(!t)return{loaded:!1,entities:0,relations:0,unknownTypes:[],skipped:[]};const e=this.__parseProject(t);if(!e)return{loaded:!1,entities:0,relations:0,unknownTypes:[],skipped:[]};this.captureHistory();const i=this.__applySnapshot(e);return this.__emitChange(),i}__entitySnapshot(t){return pickDocumentNode({...t.state||{},typeId:Entity.typeId},Wn)}__slotPoint(t,e){const i=t.getMinBoundingBox(!0),s=i.center[0],o=i.center[1];switch(e){case"T":return[s,i.tl[1]];case"B":return[s,i.br[1]];case"L":return[i.tl[0],o];case"R":return[i.tr[0],o];case"C":default:return[s,o]}}__relationSnapshot(t){return pickDocumentNode({...t.state||{},typeId:Relation.typeId},Vn)}__parseProject(t){const e=JSON.parse(t);if(!e||!Array.isArray(e.entities))return null;if(void 0!==e.schemaVersion&&1!==e.schemaVersion)throw new Error("Unsupported project schemaVersion: "+e.schemaVersion);const i=validateProjectSnapshot(e);if(!i.valid)throw new Error("Invalid project snapshot:\n"+i.errors.join("\n"));return e}__applyProject(t){const e=this.__parseProject(t);e&&this.__applySnapshot(e)}__resolveTypeId(t,e){return t&&"string"==typeof t.typeId&&t.typeId?t.typeId:"entities"===e?Entity.typeId:Relation.typeId}__resolveComponentClass(t){const e=this.ice;if("function"==typeof e.getType){const i=e.getType(t);if("function"==typeof i)return i}else if(e.typeMapping&&"function"==typeof e.typeMapping[t])return e.typeMapping[t];return t===Entity.typeId?Entity:t===Relation.typeId?Relation:null}__recordUnknownType(t,e,i,s,o){-1===t.unknownTypes.indexOf(s)&&t.unknownTypes.push(s);const r=o&&"string"==typeof o.id?o.id:void 0;t.skipped.push(void 0===r?{bucket:e,index:i,typeId:s}:{bucket:e,index:i,typeId:s,id:r})}__applySnapshot(t){const e=this.ice.renderer;e&&e.stop();const i={loaded:!0,entities:0,relations:0,unknownTypes:[],skipped:[]};try{this.ice.clearAll(),this.ice.ctx&&"function"==typeof this.ice.ctx.clearRect&&(this.ice.ctx.setTransform(1,0,0,1,0,0),this.ice.ctx.clearRect(0,0,this.ice.canvasWidth||0,this.ice.canvasHeight||0));const createNode=(t,e,s)=>{const o=this.__resolveTypeId(t,e),r=this.__resolveComponentClass(o);if("function"!=typeof r)return this.__recordUnknownType(i,e,s,o,t),null;const a=new r(t);return delete a.state.typeId,delete a.props.typeId,this.ice.addChild(a),a},collect=(t,e,s)=>{const o=createNode(t,e,s);isEntity(o)?i.entities+=1:isRelation(o)&&(i.relations+=1)};t.entities.forEach((t,e)=>collect(t,"entities",e)),(t.relations||[]).forEach((t,e)=>collect(t,"relations",e)),this.selectedId=null}finally{if(e){const t=e.getRenderMode();e.setRenderMode("full"),e.start(),this.ice.dirty=!0,setTimeout(()=>{e.setRenderMode(t)},50)}}return i}__applyHistorySnapshot(t){this.__historyEnabled=!1;try{this.__applyProject(t),this.selectedId=null}finally{this.__historyEnabled=!0}}canUndo(){return this.__undoStack.length>0}canRedo(){return this.__redoStack.length>0}captureHistory(){this.__historyEnabled&&(this.__undoStack.push(this.serializeProject()),this.__undoStack.length>this.__maxHistory&&this.__undoStack.shift(),this.__redoStack.length=0)}undo(){if(!this.canUndo())return;const t=this.serializeProject(),e=this.__undoStack.pop();try{this.__applyHistorySnapshot(e)}catch(t){throw this.__undoStack.push(e),t}this.__redoStack.push(t),this.__emitChange()}redo(){if(!this.canRedo())return;const t=this.serializeProject(),e=this.__redoStack.pop();try{this.__applyHistorySnapshot(e)}catch(t){throw this.__redoStack.push(e),t}this.__undoStack.push(t),this.__emitChange()}subscribe(t){return"function"!=typeof t?()=>{}:(this.__changeListeners.push(t),()=>{const e=this.__changeListeners.indexOf(t);-1!==e&&this.__changeListeners.splice(e,1)})}__emitChange(){if(!this.__changeListeners.length)return;const t=this.serializeProject();this.__changeListeners.slice().forEach(e=>e(t))}dispose(){this.ice.evtBus.off("mousedown",this.__mousedownHandler,this)}__handleMouseDown(t){const e=t&&t.param&&t.param.component;if(!e)return;let i=e;for(;i.parentNode;)i=i.parentNode;(isEntity(i)||isRelation(i))&&this.select(i.state.id)}},exports.EventBus=ot,exports.FLOW_NODE_KINDS=to,exports.FlowDesigner=FlowDesigner,exports.FlowDiamond=FlowDiamond,exports.FlowEdge=FlowEdge,exports.FlowNode=FlowNode,exports.FlowParallelogram=FlowParallelogram,exports.GeoLine=GeoLine,exports.GeoPoint=GeoPoint,exports.GeoUtil=GeoUtil,exports.ICE=Ct,exports.ICEBezier=ICEBezier,exports.ICEBorderLayout=class ICEBorderLayout extends ft{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(),this.gap=t.gap||5}layoutContainer(t){const e=t.childNodes,i=t.state.width,s=t.state.height;let o=null,r=null,a=null,l=null,h=null;e.forEach(t=>{const e=t.state.layoutConstraint||"center";"north"===e?o=t:"south"===e?r=t:"east"===e?a=t:"west"===e?l=t:h=t});let c=0,d=s,u=0,p=i;o&&(o.setState({left:0,top:0,width:i}),c=o.state.height+this.gap),r&&(r.setState({left:0,top:s-r.state.height,width:i}),d=s-r.state.height-this.gap),a&&(a.setState({left:i-a.state.width,top:c,height:d-c}),p=i-a.state.width-this.gap),l&&(l.setState({left:0,top:c,height:d-c}),u=l.state.width+this.gap),h&&h.setState({left:u,top:c,width:p-u,height:d-c})}},exports.ICEBoundingBox=$,exports.ICEBoxLayout=class ICEBoxLayout extends ft{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(),this.axis=t.axis||"x",this.gap=t.gap||5}layoutContainer(t){let e=0;for(const i of t.childNodes)"x"===this.axis?(i.setState({left:e,top:0}),e+=i.state.width+this.gap):(i.setState({left:0,top:e}),e+=i.state.height+this.gap)}},exports.ICECardLayout=class ICECardLayout extends ft{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(),_defineProperty$1(this,"currentIndex",0),_defineProperty$1(this,"container",null),this.currentIndex=t.currentIndex||0}layoutContainer(t){this.container=t,t.childNodes.forEach((t,e)=>{t.setState({display:e===this.currentIndex,left:0,top:0})})}show(t){this.currentIndex=t,this.container&&this.layoutContainer(this.container)}next(){this.show(this.currentIndex+1)}previous(){this.show(this.currentIndex-1)}},exports.ICECircle=W,exports.ICEComponent=F,exports.ICEControlPanel=ICEControlPanel,exports.ICEControlPanelManager=V,exports.ICEDotPath=ICEDotPath,exports.ICEEllipse=H,exports.ICEEventTarget=D,exports.ICEFlowLayout=class ICEFlowLayout extends ft{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(),this.gap=t.gap||10,this.align=t.align||"left"}layoutContainer(t){const e=t.childNodes,i=t.state.width,s=this.gap,o=[[]];let r=0;for(const t of e){const e=t.state.width;r>0&&r+s+e>i&&(o.push([]),r=0),o[o.length-1].push(t),r+=r>0?s+e:e}let a=0;for(const t of o){let e=0,o=0;for(const i of t)e+=i.state.width,o=Math.max(o,i.state.height);e+=s*(t.length-1);let r=0;"center"===this.align?r=(i-e)/2:"right"===this.align&&(r=i-e);for(const e of t)e.setState({left:r,top:a}),r+=e.state.width+s;a+=o+s}}},exports.ICEGridLayout=class ICEGridLayout extends ft{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(),this.cols=t.cols||2,this.gapX=t.gapX||10,this.gapY=t.gapY||10}layoutContainer(t){const e=t.childNodes;let i=0,s=0,o=0,r=0;for(const t of e)t.setState({left:i,top:s}),i+=t.state.width+this.gapX,o=Math.max(o,t.state.height),r++,r>=this.cols&&(r=0,i=0,s+=o+this.gapY,o=0)}},exports.ICEGroup=X,exports.ICEImage=rt,exports.ICEIsogon=ht,exports.ICELayeredLayout=class ICELayeredLayout extends ft{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(),this.gapX=t.gapX||80,this.gapY=t.gapY||40}layoutContainer(t){const e=t.childNodes||[],i=[],s=[];for(const t of e)if(t.isLine){const e=t.getLinkFromId?t.getLinkFromId():null,i=t.getLinkToId?t.getLinkToId():null;s.push({from:e,to:i,component:t})}else i.push({id:t.props.id,component:t,rank:0,order:0,barycenter:0});if(0===i.length)return;const o={};i.forEach(t=>o[t.id]=t);const r=s.filter(t=>t.from&&t.to&&o[t.from]&&o[t.to]);this.assignRanks(i,r),this.assignOrders(i,r,o),this.assignCoords(i,r,o)}assignRanks(t,e){const i={},visit=(t,s)=>{if(void 0!==i[t])return i[t];if(s.has(t))return 0;s.add(t);const o=e.filter(e=>e.to===t).map(t=>t.from);let r=-1;for(const t of o)r=Math.max(r,visit(t,s));return i[t]=r+1,s.delete(t),i[t]};t.forEach(t=>{t.rank=visit(t.id,new Set)})}assignOrders(t,e,i){const s={};t.forEach(t=>{(s[t.rank]=s[t.rank]||[]).push(t)});const o=Object.keys(s).map(Number).sort((t,e)=>t-e);o.forEach(t=>s[t].forEach((t,e)=>t.order=e));for(let t=0;t<4;t++)for(const t of o){const o=s[t];o.forEach(t=>{const s=e.filter(e=>e.from===t.id).map(t=>i[t.to]);t.barycenter=s.length?s.reduce((t,e)=>t+e.order,0)/s.length:t.order}),o.sort((t,e)=>t.barycenter-e.barycenter),o.forEach((t,e)=>t.order=e)}}assignCoords(t,e,i){const s={};t.forEach(t=>{(s[t.rank]=s[t.rank]||[]).push(t)});const o=Object.keys(s).map(Number).sort((t,e)=>t-e),r=this.gapX,a=this.gapY;let l=0;o.forEach(t=>{const e=s[t],i=Math.max(...e.map(t=>t.component.state.width));let o=0;e.forEach(t=>{t.component.setState({left:l,top:o}),o+=t.component.state.height+a}),l+=i+r});for(const t of e){const e=i[t.from].component,s=i[t.to].component,o=e.state.left+e.state.width,r=e.state.top+e.state.height/2,a=s.state.left,l=s.state.top+s.state.height/2;t.component.setState({startPoint:[o,r],endPoint:[a,l]})}}},exports.ICELayoutManager=ft,exports.ICELinkHook=ICELinkHook,exports.ICELinkSlot=lt,exports.ICEOverlayLayout=class ICEOverlayLayout extends ft{layoutContainer(t){for(const e of t.childNodes)e.setState({left:0,top:0})}},exports.ICEPath=z,exports.ICEPolyLine=at,exports.ICERect=j,exports.ICERose=ct,exports.ICEStar=dt,exports.ICEText=pt,exports.ICETheme=k,exports.ICEVisioLink=ICEVisioLink,exports.LineControlPanel=LineControlPanel,exports.PROJECT_SCHEMA_VERSION=1,exports.PluginHost=PluginHost,exports.Relation=Relation,exports.ResizeControl=ResizeControl,exports.RotateControl=RotateControl,exports.SERIALIZATION_MIGRATIONS=bt,exports.SERIALIZATION_VERSION=1,exports.STYLE_PRESETS=S,exports.Serializer=Serializer,exports.TransformControlPanel=TransformControlPanel,exports.UML_RELATION_KINDS=ao,exports.UML_RELATION_STYLE=lo,exports.UmlClass=UmlClass,exports.UmlDesigner=class UmlDesigner extends FlowDesigner{constructor(t){super(t),this.ice.registerType(UmlClass.typeId,UmlClass),this.ice.registerType(UmlRelation.typeId,UmlRelation)}get nodes(){return this.__flatten().filter(t=>t.constructor&&t.constructor.typeId===UmlClass.typeId)}get edges(){return this.__flatten().filter(t=>t.constructor&&t.constructor.typeId===UmlRelation.typeId)}createClass(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.__captureHistory();const e=new UmlClass(t);if(void 0===t.left||void 0===t.top){const i=this.__defaultPlacement(e.state.width,e.state.height);e.setState({left:void 0===t.left?i.left:t.left,top:void 0===t.top?i.top:t.top})}return this.ice.addChild(e),this.__attachNodeListeners(e),this.selectedId=e.state.id,this.__emitChange(),e}createRelation(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const e=t.sourceId?this.ice.findComponent(t.sourceId):null,i=t.targetId?this.ice.findComponent(t.targetId):null;if(!e||!i)throw new Error("关系两端必须是已存在的类");this.__captureHistory();const s=t.sourcePort||"R",o=t.targetPort||"L",r=new UmlRelation({links:{start:{id:t.sourceId,position:s},end:{id:t.targetId,position:o}},startPoint:this.__portPoint(e,s),endPoint:this.__portPoint(i,o),relationKind:t.relationKind||"association",label:t.label||"",linkShape:t.linkShape||"visio",style:t.style,labelStyle:t.labelStyle});return this.ice.addChild(r),this.selectedId=r.state.id,this.__emitChange(),r}setRelationKind(t,e){const i=this.ice.findComponent(t);return i&&i.constructor.typeId===UmlRelation.typeId&&(this.__captureHistory(),i.applyPatch({relationKind:e}),this.__emitChange()),i}get relationKinds(){return[...ao]}validateUml(){const t=[],e=this.nodes,i=new Map;e.forEach(e=>{const s=String(e.state.className||"").trim();s?(i.has(s)||i.set(s,[]),i.get(s).push(e)):t.push({level:"error",message:"存在未命名的类",id:e.state.id})}),i.forEach((e,i)=>{e.length>1&&t.push({level:"error",message:`类名重复:${i}(${e.length} 个)`,id:e[0].state.id})});const s=new Set(e.map(t=>t.state.id)),o=new Map;this.edges.forEach(e=>{const i=e.state.links||{},r=i.start&&i.start.id,a=i.end&&i.end.id;r&&a&&s.has(r)&&s.has(a)?"inheritance"!==e.state.relationKind&&"realization"!==e.state.relationKind||(o.has(r)||o.set(r,[]),o.get(r).push(a)):t.push({level:"error",message:"关系两端必须都是已存在的类",id:e.state.id})});const r=new Map,a=[],visit=i=>{r.set(i,1),a.push(i);for(const s of o.get(i)||[]){const o=r.get(s)||0;if(1===o){const o=a.indexOf(s),l=a.slice(o>=0?o:0).concat(s).map(t=>{const i=e.find(e=>e.state.id===t);return i?i.state.className:t});return t.push({level:"error",message:"继承关系成环:"+l.join(" → "),id:i}),r.set(i,2),a.pop(),!0}if(0===o&&visit(s))return r.set(i,2),a.pop(),!0}return r.set(i,2),a.pop(),!1};return e.forEach(t=>{0===(r.get(t.state.id)||0)&&visit(t.state.id)}),t}static describeRelationKind(t){const e=lo[t];if(!e)return"";return`${e.dashed?"虚线":"实线"} + ${"triangle"===e.marker?"空心三角":"diamond"===e.marker?e.filled?"实心菱形":"空心菱形":"open"===e.marker?"开放箭头":"无端点标记"}`}__portPoint(t,e){const i=t.getMinBoundingBox(!0);switch(e){case"T":return[...i.tc];case"R":return[...i.rc];case"B":return[...i.bc];case"L":return[...i.lc];case"C":default:return[...i.center]}}},exports.UmlRelation=UmlRelation,exports.arrowOf=function arrowOf(t){return ho[t]||"--\x3e"},exports.baseTokens=b,exports.buildAccessibilityTree=buildAccessibilityTree,exports.detectUmlDialect=function detectUmlDialect(t){return/@startuml/i.test(t)?"plantuml":/classDiagram/i.test(t)?"mermaid":"unknown"},exports.exportSvg=exportSvg,exports.exportSvgResult=exportSvgResult,exports.fromBpmnXml=function fromBpmnXml(t,e){const i=globalThis.DOMParser;if("function"!=typeof i)throw new Error("当前环境没有 DOMParser:请在浏览器(或 jsdom)中导入 BPMN XML");const s=(new i).parseFromString(t,"application/xml"),o=s.getElementsByTagName("parsererror");if(o&&o.length)throw new Error("BPMN XML 解析失败:"+o[0].textContent);const r=[],a=Array.prototype.slice.call(s.getElementsByTagName("*")),l=new Map,h=new Map;a.forEach(t=>{const e=localName(t);if("BPMNShape"===e){const e=t.getAttribute("bpmnElement"),i=Array.prototype.slice.call(t.getElementsByTagName("*")).find(t=>"Bounds"===localName(t));e&&i&&l.set(e,{x:Number(i.getAttribute("x"))||0,y:Number(i.getAttribute("y"))||0,width:Number(i.getAttribute("width"))||120,height:Number(i.getAttribute("height"))||80})}else if("BPMNEdge"===e){const e=t.getAttribute("bpmnElement"),i=Array.prototype.slice.call(t.getElementsByTagName("*")).filter(t=>"waypoint"===localName(t)).map(t=>[Number(t.getAttribute("x"))||0,Number(t.getAttribute("y"))||0]);e&&h.set(e,i)}}),e.clear();const c=new Map;let d=0;a.forEach(t=>{const i=localName(t);if("lane"===i){const i=t.getAttribute("id"),s=i?l.get(i):null;if(s){const o=e.createNode("bpmnLane",{title:t.getAttribute("name")||"Lane",left:s.x,top:s.y,width:s.width,height:s.height});i&&c.set(i,o.state.id),d+=1}return}if("participant"!==i)return;const s=t.getAttribute("id"),o=s?l.get(s):null;if(!o)return;const r=e.createNode("bpmnPool",{title:t.getAttribute("name")||"Pool",left:o.x,top:o.y,width:o.width,height:o.height});c.set(s,r.state.id),d+=1,r.setState({zIndex:0})}),a.forEach(t=>{const i=localName(t);if("participant"===i||"laneSet"===i||"process"===i||"collaboration"===i)return;if("lane"===i||"participant"===i)return;const s=function nodeFromElement(t){switch(t){case"startEvent":return{kind:"bpmnEvent",attrs:{eventKind:"start"}};case"endEvent":return{kind:"bpmnEvent",attrs:{eventKind:"end"}};case"intermediateThrowEvent":case"intermediateCatchEvent":return{kind:"bpmnEvent",attrs:{eventKind:"intermediate"}};case"exclusiveGateway":return{kind:"bpmnGateway",attrs:{gatewayType:"exclusive"}};case"parallelGateway":return{kind:"bpmnGateway",attrs:{gatewayType:"parallel"}};case"inclusiveGateway":return{kind:"bpmnGateway",attrs:{gatewayType:"inclusive"}};case"eventBasedGateway":return{kind:"bpmnGateway",attrs:{gatewayType:"event"}};case"subProcess":return{kind:"bpmnSubprocess",attrs:{}};case"dataObjectReference":return{kind:"bpmnDataObject",attrs:{}};case"textAnnotation":return{kind:"bpmnAnnotation",attrs:{}};case"task":return{kind:"bpmnTask",attrs:{taskType:"none"}};case"userTask":return{kind:"bpmnTask",attrs:{taskType:"user"}};case"serviceTask":return{kind:"bpmnTask",attrs:{taskType:"service"}};case"scriptTask":return{kind:"bpmnTask",attrs:{taskType:"script"}};case"sendTask":return{kind:"bpmnTask",attrs:{taskType:"send"}};case"receiveTask":return{kind:"bpmnTask",attrs:{taskType:"receive"}};case"manualTask":return{kind:"bpmnTask",attrs:{taskType:"manual"}};default:return null}}(i);if(!s)return;const o=t.getAttribute("id");if(!o)return;const a=l.get(o);a||r.push(`元素 ${o}(${i})没有 DI 布局信息,已按默认尺寸放在原点附近`);const h={...s.attrs};if("bpmnEvent"===s.kind&&(h.trigger=function triggerOf(t){const e=(t&&t.childNodes?Array.prototype.slice.call(t.childNodes):[]).map(t=>localName(t));return-1!==e.indexOf("messageEventDefinition")?"message":-1!==e.indexOf("timerEventDefinition")?"timer":-1!==e.indexOf("errorEventDefinition")?"error":-1!==e.indexOf("terminateEventDefinition")?"terminate":"none"}(t)),"textAnnotation"===i){const e=Array.prototype.slice.call(t.getElementsByTagName("*")).find(t=>"text"===localName(t));h.title=e&&e.textContent||""}const u=e.createNode(s.kind,{...h,title:t.getAttribute("name")||h.title||"",left:a?a.x:0,top:a?a.y:0,width:a?a.width:void 0,height:a?a.height:void 0});c.set(o,u.state.id),d+=1});let u=0;return a.forEach(t=>{const i=localName(t);if("sequenceFlow"!==i&&"messageFlow"!==i)return;const s=t.getAttribute("sourceRef"),o=t.getAttribute("targetRef"),a=s?c.get(s):null,l=o?c.get(o):null;if(!a||!l)return void r.push(`连线 ${t.getAttribute("id")} 的端点未找到(sourceRef=${s} targetRef=${o})`);const h=Array.prototype.slice.call(t.getElementsByTagName("*")).find(t=>"conditionExpression"===localName(t));e.createEdge({sourceId:a,targetId:l,label:t.getAttribute("name")||"",flowType:"messageFlow"===i?"message":"sequence",isDefault:"true"===t.getAttribute("default"),condition:h?h.textContent:""}),u+=1}),e.resetHistory(),{nodes:d,edges:u,warnings:r}},exports.fromPlantUml=function fromPlantUml(t,e){const i=[],s=new Map,o=[],r=String(t||"").split(/\r?\n/);let a=null,l=!1;r.forEach(t=>{const e=t.replace(/\s+$/,"").trim();if(!e||e.startsWith("'")||e.startsWith("//")||e.startsWith("%%"))return;if(/^@startuml/i.test(e)||/^@enduml/i.test(e)||/^classDiagram/i.test(e)||/^skinparam/i.test(e)||/^title/i.test(e))return;if(a){if("}"===e)return a=null,void(l=!1);if("--"===e||".."===e||"__"===e)return void(l=!1);const t=s.get(a);return void(l?t.attributes:t.methods).push(e)}const r=/^(abstract\s+class|abstract|class|interface|enum(?:eration)?)\s+(.+?)\s*(\{)?$/i.exec(e);if(r){const t=r[1].toLowerCase(),e=unquote(r[2].replace(/\{.*$/,"")),i=t.startsWith("interface")?"interface":t.startsWith("enum")?"enum":"class";return s.set(e,{kind:i,attributes:[],methods:[],abstract:t.startsWith("abstract")}),void(r[3]&&(a=e,l=!0))}/^(.+?)\s+(<\|--|<\|\.\.|<--|<\.\.|--\*|\*--|--o|o--|-->|\.\.>|--|\.\.)\s+(.+?)(?:\s*:\s*(.*))?$/.exec(e)?o.push(e):i.push("不认识的语法,已跳过:"+e)}),e.clear();const h=new Map;let c=0;s.forEach((t,i)=>{const s=e.createClass({kind:t.kind,className:i,abstract:t.abstract,attributes:t.attributes,methods:t.methods,left:80+c%3*260*1.4,top:80+280*Math.floor(c/3)});h.set(i,s),c++});let d=0;return o.forEach(t=>{const s=/^(.+?)\s+(<\|--|<\|\.\.|<--|<\.\.|--\*|\*--|--o|o--|-->|\.\.>|--|\.\.)\s+(.+?)(?:\s*:\s*(.*))?$/.exec(t);if(!s)return void i.push("关系解析失败,已跳过:"+t);const o=unquote(s[1]),r=s[2],a=unquote(s[3]),l=s[4]||"",c=0===r.indexOf("<"),u=(co.find(t=>{let[e]=t;return e.test(r)})||[/x/,"association"])[1],p=c?a:o,f=c?o:a,g=h.get(p),m=h.get(f);g&&m?(e.createRelation({sourceId:g.state.id,targetId:m.state.id,relationKind:u,label:l}),d++):i.push("关系两端未定义,已跳过:"+t)}),{classes:h.size,relations:d,warnings:i}},exports.getTheme=getTheme,exports.registerTheme=registerTheme,exports.setTheme=setTheme,exports.toBpmnXml=function toBpmnXml(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=t.nodes||[],s=t.edges||[],o=i.filter(t=>"bpmnPool"===t.state.kind),r=i.filter(t=>"bpmnLane"===t.state.kind),a=new Map;i.forEach(t=>a.set(t.state.id,t));const poolOf=t=>{if(!t)return null;const e=rectOf(t);return o.find(t=>centerInside(rectOf(t),e))||null},processIdOf=t=>"Process_"+(t?t.state.id:"default"),escapeId=t=>String(t).replace(/[^A-Za-z0-9_-]/g,"_"),idOf=t=>escapeId(t.state.id),l=[],h=[],c=[],d=[],u=[];i.forEach(t=>{const e=elementNameForNode(t);if(e){const i="bpmnEvent"===t.state.kind&&t.state.trigger&&"none"!==t.state.trigger?`<bpmn:${t.state.trigger}EventDefinition id="${idOf(t)}_def" />`:"",s="textAnnotation"===e?` id="${idOf(t)}"><bpmn:text>${escapeXml(t.state.title)}</bpmn:text></bpmn:textAnnotation>`:` id="${idOf(t)}" name="${escapeXml(t.state.title)}">${i}</bpmn:${e}>`,o="textAnnotation"===e?null:"<bpmn:"+e;l.push(o?`${o}${s}`:"<bpmn:textAnnotation"+s)}const i=rectOf(t);h.push(` <bpmndi:BPMNShape id="${idOf(t)}_di" bpmnElement="${idOf(t)}">\n <dc:Bounds x="${Math.round(i.x0)}" y="${Math.round(i.y0)}" width="${Math.round(i.x1-i.x0)}" height="${Math.round(i.y1-i.y0)}" />\n </bpmndi:BPMNShape>`)}),s.forEach(t=>{const e=t.state.links||{},i=a.get((e.start||{}).id),s=a.get((e.end||{}).id);if(!i||!s)return;if(poolOf(i)!==poolOf(s)||"message"===t.state.flowType)d.push(` <bpmn:messageFlow id="${idOf(t)}" name="${escapeXml(t.state.label)}" sourceRef="${idOf(i)}" targetRef="${idOf(s)}" />`);else{const e=t.state.condition?`\n <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${escapeXml(t.state.condition)}</bpmn:conditionExpression>\n `:"";c.push(` <bpmn:sequenceFlow id="${idOf(t)}" name="${escapeXml(t.state.label)}" sourceRef="${idOf(i)}" targetRef="${idOf(s)}"${t.state.isDefault?' default="true"':""}>${e}</bpmn:sequenceFlow>`)}const o=(t.state.points&&t.state.points.length?t.state.points:[t.state.startPoint,t.state.endPoint]).filter(Boolean);u.push(` <bpmndi:BPMNEdge id="${idOf(t)}_di" bpmnElement="${idOf(t)}">\n`+o.map(t=>` <di:waypoint x="${Math.round(t[0])}" y="${Math.round(t[1])}" />`).join("\n")+"\n </bpmndi:BPMNEdge>")});const p=[];o.forEach(t=>{const e=r.filter(e=>centerInside(rectOf(t),rectOf(e))),i=e.length?`\n <bpmn:laneSet id="${idOf(t)}_lanes">\n`+e.map(t=>` <bpmn:lane id="${idOf(t)}" name="${escapeXml(t.state.title)}" />`).join("\n")+"\n </bpmn:laneSet>":"";p.push(` <bpmn:process id="${processIdOf(t)}" name="${escapeXml(t.state.title)}" isExecutable="false">${i}\n \x3c!-- 该池内的流元素与顺序流由下面的 collaboration/di 段按 id 关联 --\x3e\n </bpmn:process>`)});const f="Process_default";p.push(` <bpmn:process id="${f}" isExecutable="false" />`);const g=o.map(t=>` <bpmn:participant id="${idOf(t)}" name="${escapeXml(t.state.title)}" processRef="${processIdOf(t)}" />`).join("\n");return`<?xml version="1.0" encoding="UTF-8"?>\n<bpmn:definitions xmlns:bpmn="${io}" xmlns:bpmndi="${so}" xmlns:dc="${no}" xmlns:di="${oo}" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://ice-render/bpmn">\n <bpmn:collaboration id="Collaboration_1">\n${g}\n </bpmn:collaboration>\n`+p.join("\n")+"\n \x3c!-- 流元素 --\x3e\n"+l.map(t=>" "+t).join("\n")+"\n \x3c!-- 连线 --\x3e\n"+c.join("\n")+"\n"+d.join("\n")+`\n <bpmndi:BPMNDiagram id="BPMNDiagram_1" name="${escapeXml(e.name||"BPMN Diagram")}">\n <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Collaboration_1">\n`+h.join("\n")+(u.length?"\n"+u.join("\n"):"")+"\n </bpmndi:BPMNPlane>\n </bpmndi:BPMNDiagram>\n</bpmn:definitions>\n"},exports.toPlantUml=function toPlantUml(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=["@startuml"];e.title&&i.push("title "+e.title),i.push("skinparam classAttributeIconSize 0");const s=t.nodes;s.forEach(t=>{const e=t.state.kind||"class",s="interface"===e?"interface":"enum"===e?"enum":t.state.abstract?"abstract class":"class",o=quoteIfNeeded(String(t.state.className||"Class"));[...t.state.attributes||[],...t.state.methods||[]].length?(i.push(`${s} ${o} {`),(t.state.attributes||[]).forEach(t=>i.push(" "+t)),(t.state.methods||[]).length&&(i.push(" --"),(t.state.methods||[]).forEach(t=>i.push(" "+t))),i.push("}")):i.push(`${s} ${o}`)});const o=new Map;return s.forEach(t=>o.set(t.state.id,t)),t.edges.forEach(t=>{const e=t.state.links||{},s=e.start&&e.start.id,r=e.end&&e.end.id,a=o.get(s),l=o.get(r);if(!a||!l)return;const h=t.state.relationKind||"association",c=ho[h]||"--\x3e",d=t.state.label?" : "+t.state.label:"",u=0===c.indexOf("<"),p=quoteIfNeeded(String((u?l:a).state.className)),f=quoteIfNeeded(String((u?a:l).state.className));i.push(`${p} ${c} ${f}${d}`)}),i.push("@enduml"),i.join("\n")},exports.toSchemaObject=toSchemaObject,exports.toSchemaString=toSchemaString,exports.validateBpmn=validateBpmn,exports.validateFlowSnapshot=validateFlowSnapshot,exports.validateProjectSnapshot=validateProjectSnapshot,exports.validateSchema=validateSchema;
30
+ l||h||c||(t=this.findTargetComponent(e));let d=t;c?d=null:h&&this.focusedComponent&&(d=this.focusedComponent),this.__dispatch(o,e,d),a&&a!==o&&this.__dispatch(a,e,d)})}return this}__handlePointerCapture(t,e){const i=this.ice.canvasEl;if(!i||"function"!=typeof i.setPointerCapture)return;const s=e&&e.pointerId;if("number"==typeof s)try{if("ICE_POINTERDOWN"===t){const t=e&&e.target;if(t&&t!==i&&(!i.contains||!i.contains(t)))return;i.setPointerCapture(s)}else"ICE_POINTERUP"!==t&&"ICE_POINTERCANCEL"!==t||"function"==typeof i.releasePointerCapture&&i.hasPointerCapture&&i.hasPointerCapture(s)&&i.releasePointerCapture(s)}catch(t){}}__dispatch(t,e,i){i&&(e.target=i,i.trigger(t,e)),this.ice.evtBus.trigger(t,e,{component:i})}__resolveCanvasRect(t){const e="pointermove"===t||"mousemove"===t||"touchmove"===t,i=this.ice;return e&&i&&"function"==typeof i.refreshInputRect?i.refreshInputRect():i&&"function"==typeof i.updateCanvasBoundingRect&&i.updateCanvasBoundingRect(),i&&"function"==typeof i.getInputRect?i.getInputRect():i&&i.canvasBoundingClientRect||null}set stopped(t){this._stopped=t}get stopped(){return this._stopped}findTargetComponent(t){if(this._stopped)return null;const{offsetX:e,offsetY:i}=t;if("number"!=typeof e||"number"!=typeof i)return null;const[s,o]=this.ice.screenToWorld(e,i);return hitTestComponents(this.ice,s,o,1)}};const st={evtBuses:[],__handlers:null,__hasPointerEvent:!1,start:function(){if(!I||!I.addEventListener||st.__handlers)return;const t="function"==typeof I.PointerEvent;st.__hasPointerEvent=t;const e=buildDomEventList(t),i=[];for(let t=0;t<e.length;t++){const s=e[t],handler=t=>{for(let e=0;e<st.evtBuses.length;e++)st.evtBuses[e].trigger(s[1],t)},o="wheel"===s[0]||"touchmove"===s[0]?{passive:!1}:void 0;o&&"function"==typeof I.addEventListener?I.addEventListener(s[0],handler,o):I.addEventListener(s[0],handler),i.push({name:s[0],handler:handler})}st.__handlers=i},stop:function(){if(st.__handlers&&I&&I.removeEventListener)for(let t=0;t<st.__handlers.length;t++){const e=st.__handlers[t];I.removeEventListener(e.name,e.handler)}st.__handlers=null},registerEvtBus:function(t){st.evtBuses.includes(t)||st.evtBuses.push(t)},delEvtBus:function(t){st.evtBuses.includes(t)&&(st.evtBuses.splice(st.evtBuses.indexOf(t),1),0===st.evtBuses.length&&st.stop())}};var nt=st,ot=class EventBus extends D{constructor(){super()}};class GeoLine{constructor(t,e){this.startPoint=t,this.endPoint=e}contains(t,e){const i=Math.hypot(this.endPoint.x-this.startPoint.x,this.endPoint.y-this.startPoint.y),s=Math.hypot(t-this.startPoint.x,e-this.startPoint.y),o=Math.hypot(t-this.endPoint.x,e-this.endPoint.y);return s+o>=i-3&&s+o<=i+3}}class GeoPoint{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;this.x=t,this.y=e}static load(t){return new GeoPoint(Number(t.x),Number(t.y))}static cloneArray(t){const e=[];for(let i=0;i<t.length;i++)e.push(t[i].clone());return e}equals(t){return this.x==t.x&&this.y==t.y}clone(){return new GeoPoint(this.x,this.y)}}class ICEDotPath extends z{constructor(t){super(_objectSpread2({dots:[],closePath:!0},t)),_defineProperty$1(this,"__dotsShiftX",0),_defineProperty$1(this,"__dotsShiftY",0)}calcComponentParams(){if(!this.paramsDirty)return{width:this.state.width,height:this.state.height};this.calcDots();const t=this.calc4VertexPoints(),e=Math.abs(t[1][0]-t[0][0]),i=Math.abs(t[2][1]-t[0][1]);return this.state.width=e,this.state.height=i,{width:this.state.width,height:this.state.height}}containsLocalPoint(t,e){const i=this.state.dots;return!i||i.length<3?super.containsLocalPoint(t,e):GeoUtil.pointInPolygon(t,e,i)}calcLocalOrigin(){const t=super.calcLocalOrigin(),e=-t[0]-this.__dotsShiftX,i=-t[1]-this.__dotsShiftY;if(0!==e||0!==i){const s=[1,0,0,1,e,i];for(let t=0;t<this.state.dots.length;t++)this.state.dots[t]=transformMat2d([],this.state.dots[t],s);this.__dotsShiftX=-t[0],this.__dotsShiftY=-t[1]}return t}createPathObject(){this.ensureDots(),this.path2D=I.createPath2D(),this.path2D.moveTo(this.state.dots[0][0],this.state.dots[0][1]);for(let t=1;t<this.state.dots.length;t++){const e=this.state.dots[t];this.path2D.lineTo(e[0],e[1])}return this.path2D}calcDots(){return this.__dotsShiftX=0,this.__dotsShiftY=0,this.__calcDots()}__calcDots(){return this.state.dots=[],this.state.dots}ensureDots(){this.state.dots&&0!==this.state.dots.length||this.calcDots()}calc4VertexPoints(){this.ensureDots();let t=this.state.dots[0][0],e=this.state.dots[0][1],i=this.state.dots[0][0],s=this.state.dots[0][1];for(let o=1;o<this.state.dots.length;o++){const r=this.state.dots[o];r[0]<t&&(t=r[0]),r[0]>i&&(i=r[0]),r[1]<e&&(e=r[1]),r[1]>s&&(s=r[1])}return[[t,e],[i,e],[t,s],[i,s]]}getTransformedDots(){const t=this.state.composedMatrix,e=this.state.dots,i=[];for(let s=0;s<e.length;s++){const o=transformMat2d([],e[s],t);i.push(o)}return i}}var rt=class ICEImage extends F{constructor(){super(_objectSpread2({width:100,height:100,src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALkAAAC2CAYAAACF+yyJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAtoSURBVHhe7Z3tj15FHYb9VxUVo7zFUBWC8YXoF9++GENMRAWRKAkxGj8pihpjFBVF1CBlKaUU+wK0pYVqt12fn+6xs7PXnDPzO3O2Z+a5r+T6ss995nm2vXf3vM68570vXNuTsmdVctm9KrnsXpVcdq9KLrtXJZfdq5LL7lXJZfeq5LJ7VXLZvSq57F6VXHavSi67VyWX3auSy+5VyWX3quSye1Vy2b0quexelVx2r0ouu1cll92rksvuVcll96rksntVctm9KrnsXpVcdq9KLrtXJZfdq5LL7lXJZfeq5LJ7VfIjcIy7j/M2sp4q+YKWQNvLOqrkC+nhodO7OJacp0q+gHO4/2UVvbYqeWXH+O2lG3sf29nd++Eb1/e/wtC40q9KXtGfX+Dy3v4PzpspKCt9quQVJSgXS1BO+lTJK0pQLvab/zz8F+CjL3FWlquSV/KBE7v79bwJ5VISlJPlquSV/AXsj1MuJUE5Wa5KXsmfvKWSr1WVvJJ2BiWGciljLm/2figny1XJK0pQLvbS4d15zEmfKnlFicfPXsdsKEE56VMlr+hdx7mwqV2P75/ji0dvboahvPSpkle2BjSu9KuSL+AcaDw5T5V8IT3QOHK+KvmCni/oOm0v66iSO/zz5Rv71cwr56Nn+ADzmUs3MB8bQq/LcVVyhzHvg0wsQbnYmCfPTZ+SlAdVyQv92mm4crPhzokHkgnKhaagrEyrkjtM8eAr6UfXCMoNpqCsHFcld5rC7g3PzVPOTPHZkR8imbbpkqeg7BKm+NXFw0Un4swH4CavgTuOaH6Wd/gYGbOt2GTJc8k5IJxrileuHjxzQoSv37uTHutWfh8x9zU4m0BTJd959+apu1z+tdmExgoN+euVvNN6oSnCe1aI4bUvneKDWWPI5PrhFw++F2VC6dG7HGistdpMyc/9u7zgA/bfSGMOxlBmyhT2qVOv29efSNykZYTj5xrz2Jn0KcdvOQs+QGOu0SZKbn+u5/LAyJ/ZGO/uQSnPvp3+waXxc4x57nL6L9Ncnh0Ze002UfIUlDVTUNYkKJdjDWjcHD938vBuD+XMFJQ1U1B2ba6+5HZWgaBsKPFwhdN7Oc6BxsuVoJxJUC6UuJi4V35Nrr7kBOVIYk6uRA80TonEnBxJUG5NquQbbZLNGMqVWgJtX2rMcNA7lTMoR9JRBOXWZHMlt4d+KUc+VTBNRIydzaFcqTnQdqXeVjBbAEE5ki5YUW5NNlfy+CLLmN876y+5QTmPYyc/Ke+RoJxJUC5lDGXWpHZX9iUo55WgnFeCciZBOfL5K4d/ZCm3JlXyfR+BBxso55WgnFeCciZBOZKg3Jpcfcl/nJiwnrKhqWt5x3byLwr98kK9BxQIynmNscn+KWemoGxo6uIVZdfk6ktupqCseW1sJ3gf2o6gnEeCch4vwPCUy4G2M/8OuykGZddmEyW3ZUjG+PSJ3f9etr+eUe6Y8H2I8PU5EpTzSISv0370FF8+tbv38c1fA/oBCgnfZ602UXJzSexGJXsPe7A4Jv4cXgnKeSTs6zXu+Rkj/hxrtZmSm15yt6Xc11+vc/80QTmPMXb7Qg60bS7xZ1izTZXcLLmn/Orm/zrc1vubLRzDK0G5Un9zsXxXxB7GDsewSUlLCLdtweZKPjh2f/m7Ublj/zhyiytBY5RKUK7UEuy7pjEGfwZXiENomxZstuQ1zIW2LfE1ezwpAeVLzIW23Ra3uuSDOdB2U9rzkDn8yfnwQQ73ahU5/SYv4Y3NJjQO6eGDI4vahqYmOBpjm5dM3KqSp66elnL3yPQQNaBxB2twttIdlq3YfcmXJHyfF96ZPpgdzvb84HzeD1s4/pJ8pvNJi7or+e8Lz5wQdrXPxqIFaGNy/zbEn9PM4W8ZVyvte7bxPhRNR+Hh7YL79Vuxq5J7ic+nx6ZmlcqBxoudA403+LuJ2yHGoPFadWtL/qnNb2kaY8wShlsFch2bIo6gMcYsvRBmD5zQOC26NSWvdbD1/oky2k1itF2uT8Py5SHfrVS+qYNw2qZVuyq5FSDkngVPmxGU80pQrpYhdqsyZVq1uwPPo5KgnFeCcnJaldwpQTmvBOXktCq5U4JyXgnKyWlVcqcE5bwSlJPTquROCcp5JSgnp1XJnRKU80pQTk6rkjslKOeVoJycViV3SlDOK0E5Oa1K7pSgnFeCcnJaldwpQTmvBOXktF2VPL6sP/Zww1wJynklKFfLkKm7Mluzq5KPUesGram7Be3mVtou119PTDGhG7TK3ZqSx3xy4VttHx1ZWpC05ztLoDHG1K22nehl6mkYPTTRtt0deP6hwuNvX3z1f7/l7bf9FLmTjMaf08zBVoiewiZLsvFqPP4WriLdi92VPPQoJ7zMeZB5WAJdDzIfrV2XPLbWlBR3aUqKptyqkseWcqagHB40udAybnXJB3Og7ab8ROY0cXaASNtPmXM4oGni9Js8C9q2xFOa8POW2mzJbdchhZ3yo20GS8/A0BilEpQrtQT7rmmMQVsIbAzapgWbK/lLmoT/gJ5J+L/62sGzKY/B8o5jhNu2YFMl95K7LeVaXE7lG6/nlZa2zSX+DGu2mZIvyTDbFV0hjD+HV4JyHgn7+lFeJ1izTZQ8Z4lDuzqpJQ5vEr6ec9U05guv7u7d//Lu3lsTPyfh+6zVJkqegrLmyDHp/6HtCMp5JCjn8SgWq039oFB2ba6+5LWXHS9ZjrvlZceP7XDOTEHZ0NRZKcquydWXnKAcSVDOfATOMFDOK0E5rwTlTIJyJEG5NamS70tQzitBOa8E5UyCcuRzlw//Nqfcmmyu5Ceu5l8Ctxv/YyhnEpTzOHZCj/IeCcqZBOVSxlBmTTZX8pLlPmjxVcqZMbYYLuVKzYG2K5XmTaecSVCOLHmftajdlY12qiyGcqWWQNuXGmM7Fjk5g3IkHXpSbk2q5AW5Ej3QOCUSc3IkQbk1ufqS33Hc9w9LfDuxjg9BuVznQOPlSlDOJCgXStg5esquydWX3ExBWTMFZU2CcjnWgMbN8fMn83e7UlDWTEHZtdlEyUtXRiPGpqCIsXs+KDdlKc+PXG6n8XOMsVN+lDPnYldBady12UTJTVvX3kvqAGwwhjJTphjem7CvP3EufYIxHD/XmO+MzP9iN6bNgcZco82U3Bx7wibF1AMUZshfRn7zpUxxJXhvYnjtK6fSj8kNmVzvjI5hKBP6sLPoNNZabarkg7l4dztKTHEyumhFhK8f20kX/VZ+HzH23Cptv2abLPlgCsouYQqbzzAnG2duHzn2+MiLB7NLaWt4Ekfxg7aUTZf8VpoitQ9MUM5M4VkqXarkLlM8ODITFUG5wRSUleOq5IWmJvaxAz7KDxKUC01BWZlWJXcYcxtkYgnKxcY8ea7egxzbokruMLynml6PtbnKiWcyZ84KodfluCr5gp5P73EcgraXdVTJF9IDjSPnq5Iv4BxoPDlPlbyyNaBxpV+VvKK2pCJxaZeL+zg8g2q8uRmG8tKnSl5RImdJQoJy0qdKXlGCcrEX4foS5aRPlbySdHMV5VLGlMxKIMdVySv504LpL0iCcrJclbyStEoD5VISlJPlquSVpIVtKZeSoJwsVyWvKEG5WHrWcpuXJKytSl5RgnKxBOWkT5W8ok8nVk+zNe8pb6agrPSpkld2DLu11hYB+NHE8uc0rvSrki/gHO5r8Gn4tauSL6SHh06r4Euoki9oCbS9rKNKfgSOcY9OFS6uSi67VyWX3auSy+5VyWX3quSye1Vy2b0quexelVx2r0ouu1cll92rksvuVcll96rksntVctm9KrnsXpVcdq9KLrtXJZfdq5LL7lXJZfeq5LJ7VXLZvSq57F6VXHavSi67VyWX3auSy+5VyWX3quSye1Vy2b0quezca3v/AeMnvtkH1pHJAAAAAElFTkSuQmCC",clipType:"none",sx:0,sy:0,sw:0,sh:0},arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}))}doRender(){if(this.state.src){const{loaded:t,image:e}=this.ice.imageCache.setImage(this.state.src);if(t){const t=this.ctx,i=this.state.clipType||"none",s=0-this.state.localOrigin[0],o=0-this.state.localOrigin[1],{sx:r,sy:a,sw:l,sh:h}=this.state,c=l>0&&h>0;"circle"===i&&(t.save(),t.beginPath(),t.arc(0,0,Math.min(this.state.width,this.state.height)/2,0,2*Math.PI),t.closePath(),t.clip()),c?t.drawImage(e,r,a,l,h,s,o,this.state.width,this.state.height):t.drawImage(e,s,o,this.state.width,this.state.height),"circle"===i&&t.restore()}}super.doRender()}};class ICEPolyLine extends ICEDotPath{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(ICEPolyLine.arrangeParam(t)),_defineProperty$1(this,"isLine",!0),_defineProperty$1(this,"__polyBoxScratch",[0,0,0,0]),_defineProperty$1(this,"__arrowFaceIndexes",[])}containsLocalPoint(t,e){const i=this.state.dots;if(!i||i.length<2)return super.containsLocalPoint(t,e);const s=Math.max(4,(this.state.lineWidth||1)/2+3);return GeoUtil.distanceToPolyline(i,t,e)<=s}static arrangeParam(t){let e=merge$1({},{lineType:"solid",lineWidth:1,arrow:"none",arrowLength:15,arrowAngel:toRadian(30),arrowStyle:"filled",points:[],showMinBoundingBox:!1,showMaxBoundingBox:!1,links:{},routeType:"straight",routeOffset:20,curveType:"straight",label:"",labelStyle:{fontSize:14,fillStyle:"#000000",backgroundColor:"#ffffff"},style:{lineJoin:"round"}},t,{linkable:!1,closePath:!1,fill:!1});const i=e.points.length;return i<2&&(0===i?(e.points.push([0,0]),e.points.push([10,10])):1===i&&e.points.push([10,10])),"dashed"!==e.lineType||e.lineDash&&0!==e.lineDash.length||(e.lineDash=[4*e.lineWidth,4*e.lineWidth]),e=_objectSpread2(_objectSpread2({},e),{left:e.points[0][0],top:e.points[0][1],transform:{translate:[0,0],scale:[1,1],skew:[0,0],rotate:0}}),e.style.lineWidth<1&&(e.style.lineWidth=1),e}initEvents(){super.initEvents(),this.once(o,this.afterAddHandler,this)}afterAddHandler(t){this.evtBus.once(l,this.syncConnections,this)}syncConnections(){if(!this.ice)return;this.removeLink("start"),this.removeLink("end");const t=this.state.links;t&&(t.start&&t.start.id&&t.start.position&&this.createLink(t.start.id,t.start.position),t.end&&t.end.id&&t.end.position&&this.createLink(t.end.id,t.end.position)),this.paramsDirty=!0,this.dirty=!0,this.ice.dirty=!0}createLink(t,e){const i=this.ice.findComponent(t);i&&i.on(y,this.followComponent,this),i&&i.on(p,this.followComponent,this),i&&i.on(g,this.followComponent,this),i&&this.followComponent(),this.state.draggable=!1}removeLink(t,e,i){if(!this.state.links||!this.state.links[t])return;const s=this.state.links[t].id,o=this.state.links[t].position;if(e||(e=s),i||(i=o),s===e&&o===i){const t=this.ice.findComponent(s);t&&t.off(y,this.followComponent,this),t&&t.off(p,this.followComponent,this),t&&t.off(g,this.followComponent,this)}let r=!0;this.state.links.start&&this.state.links.start.id&&(r=!1),this.state.links.end&&this.state.links.end.id&&(r=!1),this.state.draggable=r}getLinkFromId(){return this.state.links.start.id}getLinkToId(){return this.state.links.end.id}followComponent(t){for(const t in this.state.links){if(!this.state.links[t]||!this.state.links[t].id||!this.state.links[t].position)continue;const e=this.state.links[t].id,i=this.state.links[t].position,s=this.ice.findComponent(e);if(!s)continue;const o=s.getMinBoundingBox(!0);let r=[0,0];switch(i){case"T":r=o.tc;break;case"R":r=o.rc;break;case"B":r=o.bc;break;case"L":r=o.lc;break;case"C":r=o.center}switch(t){case"start":this.setState({startPoint:[...r]});break;case"end":this.setState({endPoint:[...r]})}}}calcLocalOrigin(){const t=[0,0];return this.state.localOrigin=t,t}__calcDots(){const t=this.state.left,e=this.state.top;this.state.dots=[];for(let i=0;i<this.state.points.length;i++){const s=this.state.points[i],o=s[0]-t,r=s[1]-e;this.state.dots.push([o,r])}return this.calcArrowPoints(),this.state.dots}calcArrowPoints(){if(this.__arrowFaceIndexes.length=0,"start"===this.state.arrow||"both"===this.state.arrow){const t=[...this.state.dots[0]];let e=[[...this.state.dots[0]],[...this.state.dots[1]]];e=this.doCalcArrowPoints(e),this.state.dots.unshift(...e),this.state.dots.unshift([...t]),this.__arrowFaceIndexes.push(0)}if("end"===this.state.arrow||"both"===this.state.arrow){const t=this.state.dots.length,e=[...this.state.dots[t-1]];let i=[[...this.state.dots[t-1]],[...this.state.dots[t-2]]];i=this.doCalcArrowPoints(i),this.state.dots.push(...i),this.state.dots.push([...e]),this.__arrowFaceIndexes.push(this.state.dots.length-4)}}doCalcArrowPoints(t){const e=t[0],i=t[1];i[0]=i[0]-e[0],i[1]=i[1]-e[1];const s=Math.hypot(i[0],i[1]);if(0===s)return[[e[0],e[1]],[e[0],e[1]]];const o=i[0]/s,r=i[1]/s,a=Math.cos(this.state.arrowAngel),l=Math.sin(this.state.arrowAngel);let h=this.state.arrowLength*(o*a-r*l),c=this.state.arrowLength*(r*a+o*l),d=this.state.arrowLength*(o*a+r*l),u=this.state.arrowLength*(r*a-o*l);return h+=e[0],c+=e[1],d+=e[0],u+=e[1],[[h,c],[d,u]]}addDot(t,e){this.state.points.splice(e,0,t),this.state.dots.splice(e,0,[t[0],t[1]])}rmDot(t){return!(this.state.points.length<3||(this.state.points.splice(t,1),this.state.dots.splice(t,1),0))}calcComponentParams(){if(!this.paramsDirty)return{width:this.state.width,height:this.state.height};this.calcDots();const t=this.calc4VertexPoints();let e=1/0,i=1/0,s=-1/0,o=-1/0;for(let r=0;r<t.length;r++){const a=t[r];a[0]<e&&(e=a[0]),a[0]>s&&(s=a[0]),a[1]<i&&(i=a[1]),a[1]>o&&(o=a[1])}return this.state.width=Math.abs(s-e),this.state.height=Math.abs(o-i),{width:this.state.width,height:this.state.height}}isDotsOnSameLine(){const t=this.state.points.length,e=round(this.state.points[0][0],2),i=round(this.state.points[0][1],2);let s=0;const o=[round(this.state.points[t-1][0],2)-e,round(this.state.points[t-1][1],2)-i];for(let r=0;r<t;r++){const t=this.state.points[r];0===cross([],o,[t[0]-e,t[1]-i])[2]&&s++}return s===t}calc4VertexPoints(){return this.isDotsOnSameLine()?this.splitEndpointsTo4Points():super.calc4VertexPoints()}splitEndpointsTo4Points(){const t=this.state.points.length,e=this.state.points[t-1][0]-this.state.points[0][0],i=this.state.points[t-1][1]-this.state.points[0][1],s=this.getRotateAngle(),o=this.state.style.lineWidth||1;let r=Math.cos(s*Math.PI/180)*o/2,a=Math.sin(s*Math.PI/180)*o/2;return r=round(r,3),a=round(a,3),[[0+r,0+a],[0-r,0-a],[e+r,i+a],[e-r,i-a]]}__localBox(){const t=this.__polyBoxScratch;this.ensureDots();const e=this.state.dots;if(!e||0===e.length)return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t;const i=this.calc4VertexPoints();let s=1/0,o=1/0,r=-1/0,a=-1/0;for(let t=0;t<i.length;t++){const e=i[t];e[0]<s&&(s=e[0]),e[0]>r&&(r=e[0]),e[1]<o&&(o=e[1]),e[1]>a&&(a=e[1])}const l=this.__arrowFaceIndexes;for(let t=0;t<l.length;t++){const i=l[t];for(let t=0;t<3;t++){const l=e[i+t];l&&(l[0]<s&&(s=l[0]),l[0]>r&&(r=l[0]),l[1]<o&&(o=l[1]),l[1]>a&&(a=l[1]))}}const h=this.__measureLabelBoxForBounds();return h&&(h.x-h.halfW<s&&(s=h.x-h.halfW),h.x+h.halfW>r&&(r=h.x+h.halfW),h.y-h.halfH<o&&(o=h.y-h.halfH),h.y+h.halfH>a&&(a=h.y+h.halfH)),t[0]=s,t[1]=o,t[2]=r,t[3]=a,t}setState(t){if(isNil$1(t.width)||delete t.width,isNil$1(t.height)||delete t.height,isNil$1(t.transform)||delete t.transform,!isNil$1(t.left)){const e=t.left-this.state.points[0][0];for(let t=0;t<this.state.points.length;t++)this.state.points[t][0]+=e}if(!isNil$1(t.top)){const e=t.top-this.state.points[0][1];for(let t=0;t<this.state.points.length;t++)this.state.points[t][1]+=e}if(isNil$1(t.startPoint)||(this.state.points[0]=[...t.startPoint],this.state.left=this.state.points[0][0],this.state.top=this.state.points[0][1]),!isNil$1(t.endPoint)){const e=this.state.points.length;this.state.points[e-1]=[...t.endPoint]}isNil$1(t.startPoint)&&isNil$1(t.endPoint)||this.recalculateRoute(),isNil$1(t.links)||(merge$1(this.state.links,t.links),this.syncConnections()),super.setState(t)}static dirVector(t){switch(t){case"T":return[0,-1];case"B":return[0,1];case"L":return[-1,0];case"R":return[1,0];default:return[0,0]}}recalculateRoute(){if("orthogonal"!==this.state.routeType)return;const t=this.state.points[0],e=this.state.points[this.state.points.length-1],i=this.state.routeOffset||20,s=ICEPolyLine.dirVector(this.state.links&&this.state.links.start&&this.state.links.start.position),o=ICEPolyLine.dirVector(this.state.links&&this.state.links.end&&this.state.links.end.position),r=[t[0]+s[0]*i,t[1]+s[1]*i],a=[e[0]+o[0]*i,e[1]+o[1]*i],l=[t];0===s[0]&&0===s[1]||l.push(r),r[0]!==a[0]&&r[1]!==a[1]&&l.push([a[0],r[1]]),0===o[0]&&0===o[1]||l.push(a),l.push(e),this.state.points=l,this.paramsDirty=!0,this.dirty=!0}createPathObject(){this.ensureDots();const t=this.state.curveType||"straight",e=this.state.dots;if(this.path2D=I.createPath2D(),!e||0===e.length)return this.path2D;if(this.path2D.moveTo(e[0][0],e[0][1]),"quadratic"===t&&e.length>=3)this.path2D.quadraticCurveTo(e[1][0],e[1][1],e[2][0],e[2][1]);else if("cubic"===t&&e.length>=4)this.path2D.bezierCurveTo(e[1][0],e[1][1],e[2][0],e[2][1],e[3][0],e[3][1]);else for(let t=1;t<e.length;t++)this.path2D.lineTo(e[t][0],e[t][1]);return this.path2D}doRender(){const t=this.__arrowFaceIndexes.length>0&&"hollow"!==this.state.arrowStyle&&!1!==this.state.stroke,e=t?this.ctx.strokeStyle:null;super.doRender(),this.applyActiveTransform(),t&&this.drawArrowFills(e),this.drawLabel()}getArrowFaces(){const t=this.__arrowFaceIndexes,e=this.state.dots,i=[];if(!e||0===t.length)return i;for(let s=0;s<t.length;s++){const o=t[s],r=e[o],a=e[o+1],l=e[o+2];r&&a&&l&&i.push([[r[0],r[1]],[a[0],a[1]],[l[0],l[1]]])}return i}drawArrowFills(t){const e=this.getArrowFaces();if(!e.length)return;const i=this.ctx;i.save(),i.beginPath();for(let t=0;t<e.length;t++){const[s,o,r]=e[t];i.moveTo(s[0],s[1]),i.lineTo(o[0],o[1]),i.lineTo(r[0],r[1]),i.closePath()}i.fillStyle=t||this.state.style.strokeStyle||"#000000",i.fill(),i.restore()}__labelMetrics(){const t=this.state.label;if(!t)return null;const e=(this.state.labelStyle||{}).fontSize||14,i=this.getLabelPosition();let s=0;const o=this.ctx;return o&&"function"==typeof o.measureText?(o.font="".concat(e,"px Arial"),s=o.measureText(t).width):s=t.length*e,{x:i[0],y:i[1],halfW:s/2+4,halfH:e/2+4}}getLabelRenderInfo(){const t=this.__labelMetrics();if(!t)return null;const e=this.state.labelStyle||{};return _objectSpread2(_objectSpread2({text:String(this.state.label)},t),{},{fontSize:e.fontSize||14,fillStyle:e.fillStyle||"#000000",backgroundColor:e.backgroundColor||"#ffffff"})}__measureLabelBoxForBounds(){const t=this.ctx,e=!!t&&"font"in t,i=e?t.font:void 0,s=this.__labelMetrics();return e&&(t.font=i),s}drawLabel(){const t=this.state.label;if(!t)return;const e=this.ctx,i=this.state.labelStyle||{};e.save();const s=this.__labelMetrics();s?(e.textAlign="center",e.textBaseline="middle",e.fillStyle=i.backgroundColor||"#ffffff",e.fillRect(s.x-s.halfW,s.y-s.halfH,2*s.halfW,2*s.halfH),e.fillStyle=i.fillStyle||"#000000",e.fillText(t,s.x,s.y),e.restore()):e.restore()}getLabelPosition(){const t=this.state.points,e=t.length,i=this.state.left,s=this.state.top;if(0===e)return[0,0];if(1===e)return[t[0][0]-i,t[0][1]-s];let o,r;if(2===e)o=(t[0][0]+t[1][0])/2,r=(t[0][1]+t[1][1])/2;else{const i=t[Math.floor(e/2)];o=i[0],r=i[1]}return[o-i,r-s]}getRotateAngle(){if(this.isDotsOnSameLine()){const t=0,e=0,i=this.state.points.length,s=this.state.points[i-1][0]-this.state.points[0][0],o=this.state.points[i-1][1]-this.state.points[0][1];let r=GeoUtil.calcRotateAngle(s,o,t,e);return r+=90,r}return super.getRotateAngle()}containsPoint(t,e){const i=this.getLines();for(let s=0;s<i.length;s++){const o=i[s],r=o.o[0],a=o.o[1],l=o.d[0],h=o.d[1],c=Math.hypot(l-r,h-a),d=Math.hypot(r-t,a-e),u=Math.hypot(l-t,h-e);if(d+u>=c-3&&d+u<=c+3)return!0}return!1}getLines(){const t=[],e=this.getTransformedDots();if(!e||e.length<2)return t;for(let i=0;i<e.length-1;i++){const s={o:[e[i][0],e[i][1]],d:[e[i+1][0],e[i+1][1]]};t.push(s)}return t}destory(){this.evtBus&&this.evtBus.off(l,this.syncConnections,this),this.removeLink("start"),this.removeLink("end"),super.destory()}}var at=ICEPolyLine;class ICEBezier extends at{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t=ICEBezier.arrangeParam(t),super(t)}static arrangeParam(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const e="cubic"===t.curveType?"cubic":"quadratic",i=t.points&&t.points.length?t.points:ICEBezier.buildDefaultPoints(t,e);return _objectSpread2(_objectSpread2({},t),{},{curveType:e,points:i})}static buildDefaultPoints(t,e){const i=t.startPoint||[0,0],s=t.endPoint||[10,10];return"cubic"===e?[i,t.controlPoint1||[5,-5],t.controlPoint2||[5,5],s]:[i,t.controlPoint||[5,-5],s]}}var lt=class ICELinkSlot extends W{constructor(){super(_objectSpread2({linkable:!1,draggable:!1,position:"T"},arguments.length>0&&void 0!==arguments[0]?arguments[0]:{})),_defineProperty$1(this,"__onHostRemoved",()=>{this._hostComponent=null,this.setState({display:!1})})}keyboardEvtHandler(t){}destory(){this.hostComponent=null,super.destory()}updatePosition(){const t=this._hostComponent.getMinBoundingBox(!0);let e=0,i=0;switch(this.state.position){case"T":e=t.tc[0]-this.state.radius,i=t.tc[1]-this.state.radius;break;case"R":e=t.rc[0]-this.state.radius,i=t.rc[1]-this.state.radius;break;case"B":e=t.bc[0]-this.state.radius,i=t.bc[1]-this.state.radius;break;case"L":e=t.lc[0]-this.state.radius,i=t.lc[1]-this.state.radius;break;case"C":e=t.center[0]-this.state.radius,i=t.center[1]-this.state.radius}this.state.left===e&&this.state.top===i||this.setState({left:e,top:i})}set hostComponent(t){const e=this._hostComponent;e&&(e.off(i,this.updatePosition,this),e.off(r,this.__onHostRemoved,this)),this._hostComponent=t,t&&(t.on(i,this.updatePosition,this),t.on(r,this.__onHostRemoved,this),this.setState({display:!0}))}get hostComponent(){return this._hostComponent}};class ICEVisioLink extends at{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t=ICEVisioLink.arrangeParam(t),super(t)}static arrangeParam(t){return isNil$1(t.startPoint)&&(t.startPoint=[0,0]),isNil$1(t.endPoint)&&(t.endPoint=[10,10]),t.points=[[...t.startPoint],[...t.endPoint]],"bezier"===(t=_objectSpread2({escapeDistance:30,linkShape:"visio"},t)).linkShape&&(t.curveType="straight"),t}__calcDots(){if("bezier"===this.state.linkShape)return this.__calcBezierDots();const t=this.interpolate(),{left:e,top:i}=this.state,s=t[0][2];this.state.points=[],this.state.dots=[];for(let t=0;t<s.length;t++){const o=s[t];this.state.points.push([o.x,o.y]),this.state.dots.push([o.x-e,o.y-i])}return this.calcArrowPoints(),this.state.dots}__calcBezierDots(){const t=this.state.points,e=[...t[0]],i=[...t[t.length-1]],{left:s,top:o}=this.state,r=this.buildBezierPoints(e,i);return this.state.points=r.map(t=>[...t]),this.state.dots=r.map(t=>[t[0]-s,t[1]-o]),this.state.curveType="straight",this.calcArrowPoints(),this.state.dots}buildBezierPoints(t,e){const i=e[0]-t[0],s=e[1]-t[1],o=Math.hypot(i,s);if(o<1e-6)return[[...t],[...e]];const r=[i/o,s/o],a=Math.max(.45*o,24),l=this.slotDirection("start",r),h=this.slotDirection("end",r),c=[t[0]+l[0]*a,t[1]+l[1]*a],d=[e[0]+h[0]*a,e[1]+h[1]*a],u=Math.min(24,Math.max(8,Math.round(o/12))),p=[];for(let i=0;i<=u;i++){const s=i/u,o=1-s,r=o*o*o*t[0]+3*o*o*s*c[0]+3*o*s*s*d[0]+s*s*s*e[0],a=o*o*o*t[1]+3*o*o*s*c[1]+3*o*s*s*d[1]+s*s*s*e[1];p.push([round(r,2),round(a,2)])}return p.filter((t,e)=>0===e||t[0]!==p[e-1][0]||t[1]!==p[e-1][1])}slotDirection(t,e){const i=this.state.links&&this.state.links[t],s=at.dirVector(i&&i.position);return 0!==s[0]||0!==s[1]?s:"start"===t?e:[-e[0],-e[1]]}recalculateRoute(){"bezier"!==this.state.linkShape&&super.recalculateRoute()}interpolate(){const t=this.state.points.length,e=this.state.points[0][0],i=this.state.points[0][1],s=this.state.points[t-1][0],o=this.state.points[t-1][1],r=new GeoPoint(e,i),a=new GeoPoint(s,o),l=[];let h,c,d=null,u=null,p=[],f=new $,g=new $;if(this.ice&&this.state.links&&this.state.links.start&&this.state.links.start.id&&(h=this.ice.findComponent(this.state.links.start.id)),h){f=h.getMinBoundingBox(),l[0]=new GeoPoint(r.x,f.tl[1]-this.state.escapeDistance),l[1]=new GeoPoint(f.tr[0]+this.state.escapeDistance,r.y),l[2]=new GeoPoint(r.x,f.br[1]+this.state.escapeDistance),l[3]=new GeoPoint(f.tl[0]-this.state.escapeDistance,r.y),d=l[0];for(let t=1;t<l.length;t++)this.distance(r,l[t])<this.distance(r,d)&&(d=l[t])}if(this.ice&&this.state.links&&this.state.links.end&&this.state.links.end.id&&(c=this.ice.findComponent(this.state.links.end.id)),c){g=c.getMinBoundingBox(),l[0]=new GeoPoint(a.x,g.tl[1]-this.state.escapeDistance),l[1]=new GeoPoint(g.tr[0]+this.state.escapeDistance,a.y),l[2]=new GeoPoint(a.x,g.br[1]+this.state.escapeDistance),l[3]=new GeoPoint(g.tl[0]-this.state.escapeDistance,a.y),u=l[0];for(let t=1;t<l.length;t++)this.distance(a,l[t])<this.distance(a,u)&&(u=l[t])}let m=0;const y=[r];d&&(y.push(d),m=1),u&&y.push(u),y.push(a);const _=GeoPoint.cloneArray(y);p.push(["s0","s0",_]);const b=GeoPoint.cloneArray(y),v=GeoPoint.cloneArray(b);v.splice(m+1,0,new GeoPoint(v[m].x,v[m+1].y)),p.push(["s1","s1_1",v]);const x=GeoPoint.cloneArray(b);x.splice(m+1,0,new GeoPoint(x[m+1].x,x[m].y)),p.push(["s1","s1_2",x]);const w=GeoPoint.cloneArray(b),C=new GeoPoint((w[m].x+w[m+1].x)/2,w[m].y),S=new GeoPoint((w[m].x+w[m+1].x)/2,w[m+1].y);w.splice(m+1,0,C,S),p.push(["s2","s2_1",w]);const k=GeoPoint.cloneArray(b),P=new GeoPoint(k[m].x,(k[m].y+k[m+1].y)/2),E=new GeoPoint(k[m+1].x,(k[m].y+k[m+1].y)/2);k.splice(m+1,0,P,E),p.push(["s2","s2_2",k]);const M=GeoPoint.cloneArray(b),I=[M[m].x+20,M[m+1].x+20];f&&I.push(f.br[0]+20),g&&I.push(g.br[0]+20);const T=this.max(I),B=new GeoPoint(T,M[m].y),N=new GeoPoint(T,M[m+1].y);M.splice(m+1,0,B,N),p.push(["s2","s2_3",M]);const D=GeoPoint.cloneArray(b),A=[D[m].y-20,D[m+1].y-20];f&&A.push(f.tl[1]-20),g&&A.push(g.tl[1]-20);const O=this.min(A),R=new GeoPoint(D[m].x,O),L=new GeoPoint(D[m+1].x,O);D.splice(m+1,0,R,L),p.push(["s2","s2_4",D]);const F=GeoPoint.cloneArray(b),z=[F[m].x-20,F[m+1].x-20];f&&z.push(f.tl[0]-20),g&&z.push(g.tl[0]-20);const j=this.min(z),X=new GeoPoint(j,F[m].y),H=new GeoPoint(j,F[m+1].y);F.splice(m+1,0,X,H),p.push(["s2","s2_5",F]);const W=GeoPoint.cloneArray(b),V=[W[m].y+20,W[m+1].y+20];f&&V.push(f.tl[1]+f.height+20),g&&V.push(g.tl[1]+g.height+20);const G=this.max(V),Y=new GeoPoint(W[m].x,G),K=new GeoPoint(W[m+1].x,G);W.splice(m+1,0,Y,K),p.push(["s2","s2_6",W]);const U=[];for(let t=0;t<p.length;t++){const e=p[t][2];this.orthogonalPath(e)&&U.push(p[t])}if(p=U,!r.equals(a)){const t=[];for(let e=0;e<p.length;e++){const i=p[e][2];this.forwardPath(i)&&t.push(p[e])}p=t,p.length}const q=[];for(let t=0;t<p.length;t++){let e=!1,i=p[t][2].slice();(g||f)&&(i=i.slice(1,i.length-1)),f&&(e=e||this.polylineIntersectsRectangle(i,f)),g&&(e=e||this.polylineIntersectsRectangle(i,g)),e||q.push(p[t])}0!=q.length&&(p=q),p.length;const J=p[0][2].length,Q=[];for(let t=0;t<p.length;t++)p[t][2].length==J&&Q.push(p[t]);p=Q;let Z=0;for(let t=0;t<p.length;t++)this.scorePath(p[Z][2])<this.scorePath(p[t][2])&&(Z=t);return p=[p[Z]],p}orthogonalPath(t){if(t.length<=1)return!0;for(let e=0;e<t.length-1;e++)if(t[e].x!=t[e+1].x&&t[e].y!=t[e+1].y)return!1;return!0}lineIntersectsLine(t,e){if(t.startPoint.x==t.endPoint.x&&e.startPoint.x==e.endPoint.x)return t.startPoint.x==e.startPoint.x&&(t.contains(e.startPoint.x,e.startPoint.y)||t.contains(e.endPoint.x,e.endPoint.y));if(t.startPoint.x==t.endPoint.x||e.startPoint.x==e.endPoint.x){if(t.startPoint.x==t.endPoint.x){const i=t;t=e,e=i}const i=(t.endPoint.y-t.startPoint.y)/(t.endPoint.x-t.startPoint.x),s=t.startPoint.y-i*t.startPoint.x,o=e.startPoint.x,r=i*o+s;return t.contains(o,r)&&e.contains(o,r)}{const i=(t.endPoint.y-t.startPoint.y)/(t.endPoint.x-t.startPoint.x),s=t.startPoint.y-i*t.startPoint.x,o=(e.endPoint.y-e.startPoint.y)/(e.endPoint.x-e.startPoint.x),r=e.startPoint.y-o*e.startPoint.x;if(i==o)return s==r&&(t.contains(e.startPoint.x,e.startPoint.y)||t.contains(e.endPoint.x,e.endPoint.y));{const a=(r-s)/(i-o),l=i*a+s;return t.contains(a,l)&&e.contains(a,l)}}}polylineIntersectsRectangle(t,e){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const s=[];s.push(new GeoLine(new GeoPoint(e.x1,e.y1),new GeoPoint(e.x2,e.y1))),s.push(new GeoLine(new GeoPoint(e.x2,e.y1),new GeoPoint(e.x2,e.y2))),s.push(new GeoLine(new GeoPoint(e.x2,e.y2),new GeoPoint(e.x1,e.y2))),s.push(new GeoLine(new GeoPoint(e.x1,e.y2),new GeoPoint(e.x1,e.y1)));for(let e=0;e<t.length-1;e++){const i=new GeoLine(t[e],t[e+1]);for(let t=0;t<s.length;t++)if(this.lineIntersectsLine(i,s[t]))return!0}if(i){const e=new GeoLine(t[t.length-1],t[0]);for(let t=0;t<s.length;t++)if(this.lineIntersectsLine(e,s[t]))return!0}return!1}scorePath(t){if(t.length<=2)return-1;let e=0;for(let i=1;i<t.length-1;i++)if(t[i-1].x==t[i].x&&t[i].x==t[i+1].x){if(this.signum(t[i+1].y-t[i].y)!=this.signum(t[i].y-t[i-1].y))return-1;e++}else if(t[i-1].y==t[i].y&&t[i].y==t[i+1].y){if(this.signum(t[i+1].x-t[i].x)!=this.signum(t[i].x-t[i-1].x))return-1;e++}else e--;return e}signum(t){return t>0?1:t<0?-1:0}forwardPath(t){if(t.length<=2)return!0;for(let e=0;e<t.length-2;e++)if(t[e].x==t[e+1].x&&t[e+1].x==t[e+2].x){if(0!=this.signum(t[e+1].y-t[e].y)&&this.signum(t[e+1].y-t[e].y)==-1*this.signum(t[e+2].y-t[e+1].y))return!1}else if(t[e].y==t[e+1].y&&t[e+1].y==t[e+2].y&&0!=this.signum(t[e+1].x-t[e].x)&&this.signum(t[e+1].x-t[e].x)==-1*this.signum(t[e+2].x-t[e+1].x))return!1;return!0}distance(t,e){return Math.hypot(e.x-t.x,e.y-t.y)}max(t){if(0==t.lenght)return NaN;{let e=t[0];for(let i=0;i<t.length;i++)e<t[i]&&(e=t[i]);return e}}min(t){if(0==t.lenght)return NaN;{let e=t[0];for(let i=0;i<t.length;i++)e>t[i]&&(e=t[i]);return e}}addDot(t,e){throw new Error("Can NOT add dot to ICEVisioLink mannually.")}rmDot(t){throw new Error("Can NOT remove dot from ICEVisioLink mannually.")}}var ht=class ICEIsogon extends ICEDotPath{constructor(){const t=_objectSpread2({radius:10,edges:3,startAngle:90},arguments.length>0&&void 0!==arguments[0]?arguments[0]:{});t.edges=Math.floor(t.edges>=3?t.edges:3),t.width=2*t.radius,t.height=2*t.radius,super(t)}__calcDots(){this.state.dots=[];const t=2*Math.PI/this.state.edges,e=this.state.radius;for(let i=0;i<this.state.edges;i++){const s=t*i-toRadian(this.state.startAngle),o=Math.floor(e*Math.cos(s)+e),r=Math.floor(e*Math.sin(s)+e);this.state.dots.push([o,r])}return this.state.dots}calcComponentParams(){return this.paramsDirty?(this.calcDots(),this.state.width=2*this.state.radius,this.state.height=2*this.state.radius,{width:this.state.width,height:this.state.height}):{width:this.state.width,height:this.state.height}}setState(t){isNil$1(t.radius)?isNil$1(t.width)?isNil$1(t.height)||(t.radius=t.height/2):t.radius=t.width/2:(t.width=2*t.radius,t.height=2*t.radius),super.setState(t)}},ct=class ICERose extends ICEDotPath{constructor(){const t=_objectSpread2({radius:50,leafNum:2,pointNumber:100},arguments.length>0&&void 0!==arguments[0]?arguments[0]:{});t.leafNum=Math.floor(t.leafNum>=2?t.leafNum:2),t.width=2*t.radius,t.height=2*t.radius,super(t)}__calcDots(){const t=this.state.radius,e=this.state.leafNum;this.state.dots=[];const i=Math.PI/this.state.pointNumber;let s=0,o=0,r=0;for(;s=t+t*Math.sin(e*r)*Math.cos(r),o=t+t*Math.sin(e*r)*Math.sin(r),this.state.dots.push([s,o]),r+=i,!(r>=2*Math.PI););return this.state.dots}calcComponentParams(){return this.paramsDirty?(this.calcDots(),this.state.width=2*this.state.radius,this.state.height=2*this.state.radius,{width:this.state.width,height:this.state.height}):{width:this.state.width,height:this.state.height}}setState(t){isNil$1(t.radius)?isNil$1(t.width)?isNil$1(t.height)||(t.radius=t.height/2,t.width=t.height):(t.radius=t.width/2,t.height=t.width):(t.width=2*t.radius,t.height=2*t.radius),super.setState(t)}},dt=class ICEStar extends ICEDotPath{constructor(){const t=_objectSpread2({outerRadius:50,innerRadius:20,startAngle:90,spikes:5},arguments.length>0&&void 0!==arguments[0]?arguments[0]:{});t.spikes=Math.floor(t.spikes>=1?t.spikes:1),t.width=2*t.outerRadius,t.height=2*t.outerRadius,super(t)}__calcDots(){this.state.dots=[];let t=toRadian(this.state.startAngle);const e=Math.PI/this.state.spikes,i=this.state.outerRadius,s=this.state.innerRadius;let o,r;for(let a=0;a<this.state.spikes;a++)o=Math.cos(t)*i+i,r=Math.sin(t)*i+i,this.state.dots.push([o,r]),t+=e,o=Math.cos(t)*s+i,r=Math.sin(t)*s+i,this.state.dots.push([o,r]),t+=e;return this.state.dots}calcComponentParams(){return this.paramsDirty?(this.calcDots(),this.state.width=2*this.state.outerRadius,this.state.height=2*this.state.outerRadius,{width:this.state.width,height:this.state.height}):{width:this.state.width,height:this.state.height}}setState(t){isNil$1(t.outerRadius)?isNil$1(t.width)?isNil$1(t.height)||(t.outerRadius=t.height/2):t.outerRadius=t.width/2:(t.width=2*t.outerRadius,t.height=2*t.outerRadius),super.setState(t)}};const ut="__ICE_UTILS_TEXT_MEASURE_DIV__";class ICEText extends F{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(ICEText.arrangeParam(t)),_defineProperty$1(this,"__originalDraggable",!0),_defineProperty$1(this,"__editInput",null),this.measureText()}static arrangeParam(t){const e=merge$1({text:"",left:0,top:0,width:10,height:10,editing:!1,caretIndex:0,wrap:!1,maxLines:0,ellipsis:"…",lines:null,transformable:!1,style:{fontWeight:"bold",fontSize:32,fontFamily:"Arial",lineWidth:1,textBaseline:"bottom",paddingTop:0,paddingBottom:0,paddingLeft:0,paddingRight:0}},t);return e.style=_objectSpread2(_objectSpread2({},e.style),{},{font:"".concat(e.style.fontWeight," ").concat(e.style.fontSize,"px ").concat(e.style.fontFamily)}),e}initEvents(){super.initEvents(),this.on("dblclick",this.startEditing,this)}startEditing(){this.__originalDraggable=this.state.draggable,this.setState({editing:!0,caretIndex:this.state.text.length,draggable:!1}),this.ice&&this.ice.controlPanelManager&&this.ice.controlPanelManager.transformControlPanel.disable(),this.ice&&this.ice.evtBus&&this.ice.evtBus.on("mousedown",this.__globalMouseDownHandler,this),this.__mountEditInput()}stopEditing(){this.ice&&this.ice.evtBus&&this.ice.evtBus.off("mousedown",this.__globalMouseDownHandler,this),this.__unmountEditInput(),this.setState({editing:!1,draggable:this.__originalDraggable})}__mountEditInput(){const t=this.root&&this.root.document;if(!t||!t.body)return;const e=this.getMinBoundingBox(!0),i=this.ice&&this.ice.canvasEl?this.ice.canvasEl.getBoundingClientRect():{left:0,top:0},{paddingTop:s,paddingRight:o,paddingBottom:r,paddingLeft:a}=this.state.style,l=Math.max(this.state.width-a-o,1),h=Math.max(this.state.height-s-r,this.state.style.fontSize),c=t.createElement("input");c.type="text",c.value=this.state.text,c.style.position="absolute",c.style.left=i.left+e.tl[0]+"px",c.style.top=i.top+e.tl[1]+"px",c.style.width=l+"px",c.style.height=h+"px",c.style.font=this.state.style.font,c.style.paddingTop=s+"px",c.style.paddingRight=o+"px",c.style.paddingBottom=r+"px",c.style.paddingLeft=a+"px",c.style.boxSizing="content-box",c.style.color="transparent",c.style.caretColor=this.state.style.fillStyle||"#000000",c.style.background="transparent",c.style.border="none",c.style.outline="none",c.style.margin="0",c.style.zIndex="9999",t.body.appendChild(c),c.focus(),c.setSelectionRange(c.value.length,c.value.length),c.addEventListener("input",()=>{this.setText(c.value)}),c.addEventListener("compositionend",()=>{this.setText(c.value)}),c.addEventListener("keydown",t=>{"Enter"!==t.key&&"Escape"!==t.key||t.isComposing||this.stopEditing()}),c.addEventListener("blur",()=>{this.stopEditing()}),this.__editInput=c}__unmountEditInput(){this.__editInput&&this.__editInput.parentNode&&this.__editInput.parentNode.removeChild(this.__editInput),this.__editInput=null}__globalMouseDownHandler(t){(t&&t.param&&t.param.component)!==this&&this.stopEditing()}setText(t){const e=Math.max(0,Math.min(this.state.caretIndex,t.length));return this.setState({text:t,caretIndex:e}),this}getText(){return this.state.text}keyboardEvtHandler(t){if(this.__editInput)return;if(!this.state.editing)return void super.keyboardEvtHandler(t);if("keydown"!==t.type)return;const e=t.key,i=this.state.text,s=this.state.caretIndex;"Enter"!==e&&"Escape"!==e?"Backspace"!==e?"Delete"!==e?"ArrowLeft"!==e?"ArrowRight"!==e?"Home"!==e?"End"!==e?e&&1===e.length&&this.setState({text:i.slice(0,s)+e+i.slice(s),caretIndex:s+1}):this.setState({caretIndex:i.length}):this.setState({caretIndex:0}):this.setState({caretIndex:Math.min(i.length,s+1)}):this.setState({caretIndex:Math.max(0,s-1)}):s<i.length&&this.setState({text:i.slice(0,s)+i.slice(s+1)}):s>0&&this.setState({text:i.slice(0,s-1)+i.slice(s),caretIndex:s-1}):this.stopEditing()}renderCaret(){if(this.__editInput)return;const{paddingTop:t,paddingBottom:e,paddingLeft:i}=this.state.style,s=this.state.text.slice(0,this.state.caretIndex);let o=0-this.state.localOrigin[0]+i;"function"==typeof this.ctx.measureText&&(o+=this.ctx.measureText(s).width);const r=0-this.state.localOrigin[1]+t,a=0-this.state.localOrigin[1]+this.state.height-e;this.ctx.save(),this.ctx.strokeStyle=this.state.style.fillStyle||"#000000",this.ctx.lineWidth=1,this.ctx.beginPath(),this.ctx.moveTo(o,r),this.ctx.lineTo(o,a),this.ctx.stroke(),this.ctx.restore()}calcComponentParams(){return this.paramsDirty?this.measureText():{width:this.state.width,height:this.state.height}}measureText(t){this.state.lines=this.__computeWrappedLines();const e=this.__measureByCanvas();return e?(this.__applyMeasuredSize(e),{width:this.state.width,height:this.state.height}):this.__measureByDOM()}__computeWrappedLines(){var t;if(!this.state.wrap||this.state.editing)return null;const e=Number(this.state.width);if(!(e>0))return null;const i=this.ctx;if(!i||"function"!=typeof i.measureText)return null;const s=this.__measureFn(),o=this.__wrapText(e,s);return this.__truncateLines(o,e,Number(this.state.maxLines)||0,String(null!==(t=this.state.ellipsis)&&void 0!==t?t:"…"),s)}__measureFn(){const t=this.ctx;this.state.style.font&&t&&"function"==typeof t.measureText&&(t.font=this.state.style.font);const e=Number(this.state.style.fontSize)||12;return i=>{if(t&&"function"==typeof t.measureText){const e=t.measureText(i);return e&&e.width||0}return i.length*e}}__graphemes(t){const e=this.root&&this.root.Intl;if(e&&"function"==typeof e.Segmenter)try{const i=new e.Segmenter(void 0,{granularity:"grapheme"}),s=[];for(const e of i.segment(t))s.push(e.segment);return s}catch(t){}return Array.from(t)}__wrapText(t,e){var i;const s=[],o=String(null!==(i=this.state.text)&&void 0!==i?i:"").split("\n");for(let i=0;i<o.length;i++){const r=this.__graphemes(o[i]);let a="";for(let i=0;i<r.length;i++){const o=a+r[i];""!==a&&e(o)>t?(s.push(a),a=r[i]):a=o}s.push(a)}return s}__truncateLines(t,e,i,s,o){if(!(i>0)||t.length<=i)return t;const r=t.slice(0,i),a=this.__graphemes(r[i-1]);for(;a.length>0&&o(a.join("")+s)>e;)a.pop();return r[i-1]=a.join("")+s,r}__measureByCanvas(){var t;if(!this.ctx||"function"!=typeof this.ctx.measureText)return null;this.state.style.font&&(this.ctx.font=this.state.style.font);const e=this.state.lines||String(null!==(t=this.state.text)&&void 0!==t?t:"").split("\n");let i=0,s=0,o=0;for(const t of e){const e=this.ctx.measureText(t);i=Math.max(i,e.width||0);const r=e.actualBoundingBoxAscent,a=e.actualBoundingBoxDescent;if("number"!=typeof r||"number"!=typeof a)return null;s=Math.max(s,r),o=Math.max(o,a)}const r=s+o;if(e.length<=1)return{textWidth:i,textHeight:r};const a=Number(this.state.style.fontSize)||r||12;return{textWidth:i,textHeight:Math.max(r,a*ICEText.LINE_HEIGHT_RATIO)*e.length}}__applyMeasuredSize(t){const{paddingTop:e,paddingBottom:i,paddingLeft:s,paddingRight:o}=this.state.style,r=t.textWidth+s+o,a=t.textHeight+e+i;10===this.props.width&&(this.state.width=r),10===this.props.height&&(this.state.height=a),this.state.textHeight=t.textHeight}__measureByDOM(){let t;try{if(t=this.root.document.getElementById(ut),!t){t=this.root.document.createElement("div"),t.setAttribute("id",ut);const e={visibility:"hidden",position:"absolute",top:"0",left:"0",padding:"0",margin:"0",border:"none",fontFamily:this.state.style.fontFamily,fontWeight:this.state.style.fontWeight,fontSize:this.state.style.fontSize+"px",lineHeight:"1",whiteSpace:"pre"};for(const i in e)t.style[i]=e[i];t.contenteditable=!1,this.root.document.body.appendChild(t)}t.textContent=this.state.text;const{paddingTop:e,paddingBottom:i,paddingLeft:s,paddingRight:o}=this.state.style,r={width:t.offsetWidth+s+o,height:t.offsetHeight+e+i};return 10===this.props.width&&(this.state.width=r.width),10===this.props.height&&(this.state.height=r.height),this.state.textHeight=t.offsetHeight,{width:this.state.width,height:this.state.height}}catch(t){return{width:this.state.width,height:this.state.height}}}getRenderLines(){var t;const{paddingTop:e,paddingLeft:i,paddingRight:s,textAlign:o,textBaseline:r}=this.state.style,a=this.state.lines||String(null!==(t=this.state.text)&&void 0!==t?t:"").split("\n"),l=(this.state.textHeight||this.state.style.fontSize)/a.length,h="center"===o||"right"===o||"end"===o,c=h?this.__measureFn():null,d=[];for(let t=0;t<a.length;t++){let u=0-this.state.localOrigin[0]+i;if(h){const e=c&&c(a[t])||0;u="center"===o?-e/2:this.state.localOrigin[0]-s-e}let p=0-this.state.localOrigin[1]+e+(t+1)*l;"middle"===r&&(p=(t-(a.length-1)/2)*l),d.push({text:a[t],x:u,y:p})}return d}doRender(){this.dirty&&this.measureText();const{textAlign:t}=this.state.style,e=this.getRenderLines();("center"===t||"right"===t||"end"===t)&&(this.ctx.textAlign="left");for(let t=0;t<e.length;t++)this.state.stroke&&this.ctx.strokeText(e[t].text,e[t].x,e[t].y,this.state.width),this.state.fill&&this.ctx.fillText(e[t].text,e[t].x,e[t].y,this.state.width);this.state.editing&&this.renderCaret(),super.doRender()}}_defineProperty$1(ICEText,"LINE_HEIGHT_RATIO",1.35);var pt=ICEText,ft=class ICELayoutManager{getPreferredSize(t){return[0,0]}},gt={ICERect:j,ICECircle:W,ICEEllipse:H,ICEStar:dt,ICEIsogon:ht,ICERose:ct,ICEText:pt,ICEImage:rt,ICEGroup:X,ICEVisioLink:ICEVisioLink,ICEPolyLine:at,ICEBezier:ICEBezier};const mt={evtBuses:[],stopped:!1,frameCallback:function(){for(let e=0;e<mt.evtBuses.length;e++){if(mt.stopped)return;mt.evtBuses[e].trigger(t)}mt.stopped||I.requestFrame(mt.frameCallback)},start:function(){mt.stopped=!1,I.requestFrame(mt.frameCallback)},stop:function(){mt.stopped=!0},registerEvtBus:function(t){mt.evtBuses.includes(t)||mt.evtBuses.push(t)},delEvtBus:function(t){mt.evtBuses.includes(t)&&mt.evtBuses.splice(mt.evtBuses.indexOf(t),1)}};var yt=mt;class ICELinkSlotManager{constructor(t){_defineProperty$1(this,"slotRadius",10),this.ice=t}start(){return this.createLinkSlots(),this.ice.evtBus.on(c,this.hookMouseMoveHandler,this),this.ice.evtBus.on(d,this.hookMouseUpHandler,this),this.ice.evtBus.on("mouseup",this.globalMouseUpHandler,this),this}stop(){return this.ice.evtBus.off(c,this.hookMouseMoveHandler,this),this.ice.evtBus.off(d,this.hookMouseUpHandler,this),this.ice.evtBus.off("mouseup",this.globalMouseUpHandler,this),this}hookMouseMoveHandler(t){const e=t.target,i=e.getMaxBoundingBox(),s=flattenTree([],this.ice.childNodes);s.sort((t,e)=>t.state.zIndex-e.state.zIndex),this.collision=null;for(let t=0;t<s.length;t++){const e=s[t];e&&e.state.linkable&&isEffectivelyVisible(e)&&(e.getMaxBoundingBox().isIntersect(i)&&(this.collision=e))}if(!this.collision){for(let t=0;t<this.ice._linkSlots.length;t++)this.ice._linkSlots[t].setState({display:!1,style:{fillStyle:"#3ce92c"}});return void e.setState({style:{fillStyle:"#3ce92c"}})}let o=!1;for(let t=0;t<this.ice._linkSlots.length;t++){const s=this.ice._linkSlots[t];s.hostComponent!==this.collision&&(s.hostComponent=this.collision),s.setState({display:!0,style:{fillStyle:"#3ce92c"}}),e.setState({style:{fillStyle:"#3ce92c"}}),s.getMaxBoundingBox().isIntersect(i)&&(o=!0,s.setState({style:{fillStyle:"#fffb00"}}))}o&&e.setState({style:{fillStyle:"#fffb00"}})}hookMouseUpHandler(t){const e=t.target,i=e.state.position,s=e.parentNode.targetComponent,o=e.getMaxBoundingBox();let r=!1;if(this.collision)for(let t=0;t<this.ice._linkSlots.length;t++){const e=this.ice._linkSlots[t];if(e.setState({display:!1,style:{fillStyle:"#3ce92c"}}),e.getMaxBoundingBox().isIntersect(o)){r=!0;const t={};t[i]={id:e.hostComponent.state.id,position:e.state.position},s&&s.setState({links:t});break}}if(r)e.setState({display:!1,style:{fillStyle:"#3ce92c"}});else{const t={};t[i]=null,s&&s.setState({links:t})}this.collision=null}globalMouseUpHandler(t){for(let t=0;t<this.ice._linkSlots.length;t++)this.ice._linkSlots[t].setState({display:!1,style:{fillStyle:"#3ce92c"}})}createLinkSlots(){if(this.ice._linkSlots&&this.ice._linkSlots.length)return;const t=new lt({zIndex:10000010,display:!1,transformable:!1,draggable:!1,radius:this.slotRadius,position:"T",style:{strokeStyle:"#0c09d4",fillStyle:"#3ce92c",lineWidth:1}});this.ice.addTool(t);const e=new lt({zIndex:10000011,display:!1,transformable:!1,draggable:!1,radius:this.slotRadius,position:"R",style:{strokeStyle:"#0c09d4",fillStyle:"#3ce92c",lineWidth:1}});this.ice.addTool(e);const i=new lt({zIndex:10000012,display:!1,transformable:!1,draggable:!1,radius:this.slotRadius,position:"B",style:{strokeStyle:"#0c09d4",fillStyle:"#3ce92c",lineWidth:1}});this.ice.addTool(i);const s=new lt({zIndex:10000013,display:!1,transformable:!1,draggable:!1,radius:this.slotRadius,position:"L",style:{strokeStyle:"#0c09d4",fillStyle:"#3ce92c",lineWidth:1}});this.ice.addTool(s);const o=new lt({zIndex:10000014,display:!1,transformable:!1,draggable:!1,radius:this.slotRadius,position:"C",style:{strokeStyle:"#0c09d4",fillStyle:"#3ce92c",lineWidth:1}});this.ice.addTool(o),this.ice._linkSlots=[t,e,i,s,o]}}const _t=["linearMatrix","composedMatrix","localOrigin","absoluteOrigin","dots","textHeight","lines"];class Serializer{constructor(t){this.ice=t}toJSONString(){return JSON.stringify(this.toJSONObject())}toJSONObject(){const t={version:1,createTime:(new Date).toLocaleString(),lastModifyTime:(new Date).toLocaleString(),childNodes:[]};for(let e=0;e<this.ice.childNodes.length;e++){const i=this.ice.childNodes[e];this.encodeRecursively(i,t)}return t}encodeRecursively(t,e){const i=this.ice.getTypeId(t.constructor)||t.constructor.name,s={state:this.pickSerializableState(t.state),type:i,childNodes:[]};if(e.childNodes.push(s),("function"!=typeof t.hasDerivedChildren||!t.hasDerivedChildren())&&t.childNodes&&t.childNodes.length)for(let e=0;e<t.childNodes.length;e++)this.encodeRecursively(t.childNodes[e],s)}pickSerializableState(t){const e={};for(const i in t)-1===_t.indexOf(i)&&(e[i]=t[i]);return e}}const bt=[];class Deserializer{constructor(t){_defineProperty$1(this,"_unknownTypes",[]),this.ice=t}get unknownTypes(){return this._unknownTypes}fromJSONObject(t){this._unknownTypes=[];const e=t&&t.version?t.version:1;this.migrate(t,e);const i=t&&t.childNodes||[];for(let t=0;t<i.length;t++)this.decodeRecursively(this.ice,i[t])}fromJSONString(t){const e=JSON.parse(t);this.fromJSONObject(e)}migrate(t,e){if(e>1)throw new Error("不支持的反序列化版本:".concat(e,"(当前支持到 ").concat(1,")"));for(let i=0;i<bt.length;i++){const s=bt[i];e<s.to&&(s.run(t),e=s.to)}t.version=e}decodeRecursively(t,e){if(!e||!e.type)return null;const i=this.ice.getType(e.type);if("function"!=typeof i)return-1===this._unknownTypes.indexOf(e.type)&&this._unknownTypes.push(e.type),null;const s=new i(e.state);if(t.addChild(s),"function"==typeof s.hasDerivedChildren&&s.hasDerivedChildren())return s;const o=e.childNodes;if(o&&o.length)for(let t=0;t<o.length;t++)this.decodeRecursively(s,o[t]);return s}}class PluginHost{constructor(t){_defineProperty$1(this,"plugins",[]),_defineProperty$1(this,"renderHooks",[]),_defineProperty$1(this,"tools",[]),this.ice=t}get names(){return this.plugins.map(t=>t.name)}has(t){return this.plugins.some(e=>e.name===t)}hasRenderHooks(){return this.renderHooks.length>0}use(t){if(!t||!t.name)throw new Error("ICE.use(plugin):插件必须提供非空的 name。");if(this.has(t.name))return!1;if(t.components)for(const e in t.components){const i=t.components[e];"function"==typeof i&&this.ice.registerType(e,i)}if("function"==typeof t.render&&this.renderHooks.push({pluginName:t.name,hook:t.render}),t.tools)for(let e=0;e<t.tools.length;e++){const i=t.tools[e];i&&i.id&&this.tools.push(_objectSpread2(_objectSpread2({},i),{},{pluginName:t.name,instance:null,attached:!1}))}return this.plugins.push(t),"function"==typeof t.setup&&t.setup(this.ice),!0}unuse(t){const e=this.plugins.findIndex(e=>e.name===t);if(-1===e)return!1;const i=this.plugins[e];for(let e=this.tools.length-1;e>=0;e--)this.tools[e].pluginName===t&&(this.detachTool(this.tools[e]),this.tools.splice(e,1));for(let e=this.renderHooks.length-1;e>=0;e--)this.renderHooks[e].pluginName===t&&this.renderHooks.splice(e,1);return this.plugins.splice(e,1),"function"==typeof i.teardown&&i.teardown(this.ice),!0}invokeRenderHooks(t){for(let e=0;e<this.renderHooks.length;e++)this.renderHooks[e].hook(t)}syncTools(t){let e=!1;for(let i=0;i<this.tools.length;i++){const s=this.tools[i];let o=!1;try{o=!!t&&!!s.match(t,this.ice)}catch(t){o=!1}o?(s.instance||(s.instance=s.create()),!s.attached&&s.instance&&(this.ice.addTool(s.instance),s.attached=!0),"function"==typeof s.onTargetChange&&s.onTargetChange(s.instance,t),s.exclusive&&(e=!0)):this.detachTool(s)}return e}detachAllTools(){for(let t=0;t<this.tools.length;t++)this.detachTool(this.tools[t])}detachTool(t){t.attached&&t.instance&&(this.ice.removeTool(t.instance),t.attached=!1)}clear(){this.detachAllTools(),this.plugins=[],this.renderHooks=[],this.tools=[]}}function resolveRole(t){return t.isControlPanel?"tool":t.isLine?"link":"function"==typeof t.measureText?"text":Array.isArray(t.childNodes)?"container":t.state&&t.state.src?"image":"graphic"}function resolveLabel(t){const e=t.state||{};return"string"==typeof e.ariaLabel&&e.ariaLabel?e.ariaLabel:"string"==typeof e.text&&e.text?e.text:"string"==typeof e.title&&e.title?e.title:t.props&&t.props.id||String(e.id||"")}function resolveBox(t,e){if("function"!=typeof e.__paintWorldBox)return null;const i=e.state&&e.state.composedMatrix;if(!i||i.length<6)return null;const s=e.__paintWorldBox([0,0,0,0]);if(!(isFinite(s[0])&&isFinite(s[1])&&isFinite(s[2])&&isFinite(s[3])))return null;const[o,r]=t.worldToScreen(s[0],s[1]),[a,l]=t.worldToScreen(s[2],s[3]);return{x:Math.min(o,a),y:Math.min(r,l),width:Math.abs(a-o),height:Math.abs(l-r)}}function buildAccessibilityTree(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=[],s=t&&t.selectionList||[];let o=0;const walk=(r,a,l)=>{if(!r||!r.length)return;const h=r.slice().sort((t,e)=>(t.state.zIndex||0)-(e.state.zIndex||0));for(let r=0;r<h.length;r++){const c=h[r],d=c.state||{},u=isEffectivelyVisible(c),p=!1!==d.interactive,f=resolveBox(t,c),g=(e.includeHidden||u)&&!!f,m=!e.filter||e.filter(c);g&&m&&i.push({id:c.props&&c.props.id||String(d.id||""),role:resolveRole(c),label:resolveLabel(c),box:f,visible:u,interactive:p,focusable:u&&p,tabIndex:o++,selected:-1!==s.indexOf(c),level:a,parentId:l}),c.childNodes&&c.childNodes.length&&walk(c.childNodes,a+1,c.props&&c.props.id||null)}};return walk(t&&t.childNodes||[],1,null),e.includeTools&&walk(t&&t.toolNodes||[],1,null),i}var vt=class CanvasRenderer extends D{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(),_defineProperty$1(this,"stopped",!1),_defineProperty$1(this,"renderMode","dirty-rect"),_defineProperty$1(this,"__forceFullRender",!1),_defineProperty$1(this,"componentQueue",[]),_defineProperty$1(this,"toolsQueue",[]),_defineProperty$1(this,"__queueDirty",!0),_defineProperty$1(this,"__zSnap",[]),_defineProperty$1(this,"__snap",new WeakMap),_defineProperty$1(this,"__primed",!1),_defineProperty$1(this,"__lastFrameCulled",0),this.ice=t,this.cache=new class ObjectCache{constructor(t){_defineProperty$1(this,"map",new WeakMap),_defineProperty$1(this,"__bytes",0),_defineProperty$1(this,"__vp",null),_defineProperty$1(this,"__vpChanged",!1),this.ice=t}__rvp(){return this.ice&&"function"==typeof this.ice.getRenderViewport?this.ice.getRenderViewport():this.ice&&this.ice.viewport||{scale:1,tx:0,ty:0}}beginFrame(){const t=this.__rvp(),e=this.__vp;this.__vpChanged=!!e&&(e.scale!==t.scale||e.tx!==t.tx||e.ty!==t.ty),e?(e.scale=t.scale,e.tx=t.tx,e.ty=t.ty):this.__vp={scale:t.scale,tx:t.tx,ty:t.ty}}__sameViewport(t,e,i,s){return t.rs===e&&t.ox===i&&t.oy===s}isCachable(t){if(this.__vpChanged)return!1;if("function"==typeof t.hasClippingAncestor&&t.hasClippingAncestor())return!1;if("function"==typeof t.measureText)return!t.state.editing&&isEffectivelyVisible(t);if(t.isLine){if(t.state.lineDashFlow)return!1;if(!isEffectivelyVisible(t))return!1;const e=this.__rvp().scale;if(!(e>0))return!1;const i="function"==typeof t.__localBox?t.__localBox():null,s=i?i[2]-i[0]:Number(t.state.width)||0,o=i?i[3]-i[1]:Number(t.state.height)||0,r=Math.max(0,s)*Math.max(0,o)*e*e;return!(r>2e6||!this.map.has(t)&&this.__bytes+4*r>33554432)}if("function"==typeof t.calcDots&&!t.isLine){const e=Number(t.state.width)||0,i=Number(t.state.height)||0;return isEffectivelyVisible(t)&&!t.state.lineDashFlow&&e*i>=4e4}return!isOpaqueDrawing(t.state)&&"function"==typeof t.createPathObject&&!t.childNodes&&!t.isLine&&isEffectivelyVisible(t)}has(t){return this.map.has(t)}contentKey(t){const e=t.state;if("function"==typeof t.measureText){const t=e.style||{};return[e.text,t.fontWeight,t.fontSize,t.fontFamily,t.font,t.textAlign,t.textBaseline,t.paddingTop,t.paddingBottom,t.paddingLeft,t.paddingRight,e.fill,e.stroke,JSON.stringify(e.lineDash),e.lineDashOffset,e.lineDashFlow,e.lineBorder,e.lineBorderWidth,e.lineBorderColor,this.__styleKey(e)].join("|")}return"function"==typeof t.calcDots?[JSON.stringify(e.dots),e.closePath,e.fill,e.stroke,JSON.stringify(e.lineDash),e.lineDashOffset,e.lineDashFlow,e.lineBorder,e.lineBorderWidth,e.lineBorderColor,this.__styleKey(e)].join("|"):[e.width,e.height,e.radius,e.radiusX,e.radiusY,e.closePath,e.fill,e.stroke,JSON.stringify(e.lineDash),e.lineDashOffset,e.lineDashFlow,e.lineBorder,e.lineBorderWidth,e.lineBorderColor,this.__styleKey(e)].join("|")}__styleKey(t){const e=t.style||{};return[e.fillStyle,e.strokeStyle,e.lineWidth,e.globalAlpha,e.globalCompositeOperation,e.shadow,e.shadowColor,e.shadowBlur,e.shadowOffsetX,e.shadowOffsetY].join("|")}linearKey(t){const e=t.state.composedMatrix;return!e||e.length<6?"":"".concat(e[0],",").concat(e[1],",").concat(e[2],",").concat(e[3])}render(t){if(!this.isCachable(t))return!1;const e=this.__rvp(),i=e.scale,s=e.tx,o=e.ty;let r=this.map.get(t);if(!t.dirty&&r&&this.__sameViewport(r,i,s,o))return this.draw(r),!0;"function"==typeof t.calcDots&&t.refreshParams(),t.composeMatrix();const a=this.linearKey(t),l=this.contentKey(t);let h=!r||r.contentKey!==l||r.linearKey!==a||!this.__sameViewport(r,i,s,o);if(h||(h=!this.refreshPosition(t,r)),h){const e=r||null;e&&(this.__bytes=Math.max(0,this.__bytes-e.pw*e.ph*4)),r=this.build(t,l,a,i,s,o),this.__bytes+=r.pw*r.ph*4}return this.map.set(t,r),this.draw(r),t.dirty=!1,!0}__paintBox(t){const e=t.getMaxBoundingBox().getMinAndMaxPoint(),i=stylePaintPad(t.state);return{minX:e.minX-i,minY:e.minY-i,maxX:e.maxX+i,maxY:e.maxY+i}}build(t,e,i,s,o,r){t.refreshParams(),t.composeMatrix();const a=this.__paintBox(t),l=Math.floor(a.minX*s+o)-1,h=Math.floor(a.minY*s+r)-1,c=Math.max(1,Math.ceil(a.maxX*s+o)-l+1),d=Math.max(1,Math.ceil(a.maxY*s+r)-h+1),{canvas:u,ctx:p}=I.createOffscreenCanvas(c,d),f=[s,0,0,s,o-l,r-h];return t.renderTo(p,f),{canvas:u,ctx:p,pw:c,ph:d,dx:l,dy:h,dx0:l,dy0:h,buildMinX:a.minX,buildMinY:a.minY,rs:s,ox:o,oy:r,contentKey:e,linearKey:i}}refreshPosition(t,e){const i=this.__paintBox(t),s=e.rs,o=s*(i.minX-e.buildMinX),r=s*(i.minY-e.buildMinY);if(Math.abs(o-Math.round(o))>1e-6)return!1;if(Math.abs(r-Math.round(r))>1e-6)return!1;const a=e.dx0+Math.round(o),l=e.dy0+Math.round(r);return!(i.minX*s+e.ox<a||i.minY*s+e.oy<l||i.maxX*s+e.ox>a+e.pw||i.maxY*s+e.oy>l+e.ph||(e.dx=a,e.dy=l,0))}draw(t){const e=this.ice.ctx;e.save(),e.setTransform(1,0,0,1,0,0),e.drawImage(t.canvas,t.dx,t.dy),e.restore()}invalidate(t){const e=this.map.get(t);e&&(this.__bytes=Math.max(0,this.__bytes-e.pw*e.ph*4)),this.map.delete(t)}clear(){this.map=new WeakMap,this.__bytes=0}}(t),"full"!==e.renderMode&&"dirty-rect"!==e.renderMode||(this.renderMode=e.renderMode)}markQueueDirty(){this.__queueDirty=!0}setRenderMode(t){this.renderMode=t}getRenderMode(){return this.renderMode}start(){return this.stopped=!1,this.ice.evtBus.on(t,this.frameEvtHandler,this),this}stop(){return this.stopped=!0,this.ice.evtBus.off(t,this.frameEvtHandler,this),this}frameEvtHandler(t){if(this.ice.dirty){if(this.refreshQueue(),this.cache.beginFrame(),"dirty-rect"===this.renderMode&&!this.__forceFullRender){const t=this.__collect();if(t)return void this.__renderDirtyRect(t)}this.doRenderFull()}}refreshQueue(){if(this.__queueDirty)this.__rebuildQueue();else if(this.__zOrderChanged()){const compareZ=(t,e)=>t.state.zIndex-e.state.zIndex;this.componentQueue.sort(compareZ),this.toolsQueue.sort(compareZ),this.__snapshotZ()}}__rebuildQueue(){const compareZ=(t,e)=>t.state.zIndex-e.state.zIndex;this.componentQueue=flattenTree([],this.ice.childNodes),this.componentQueue.sort(compareZ),this.toolsQueue=flattenTree([],this.ice.toolNodes),this.toolsQueue.sort(compareZ),this.__queueDirty=!1,this.__snapshotZ(),this.__snap=new WeakMap,this.__primed=!1}__snapshotZ(){const t=this.componentQueue.length+this.toolsQueue.length;this.__zSnap.length!==t&&(this.__zSnap=new Array(t));let e=0;for(let t=0;t<this.componentQueue.length;t++)this.__zSnap[e++]=this.componentQueue[t].state.zIndex;for(let t=0;t<this.toolsQueue.length;t++)this.__zSnap[e++]=this.toolsQueue[t].state.zIndex}__zOrderChanged(){const t=this.componentQueue.length+this.toolsQueue.length;if(this.__zSnap.length!==t)return!0;let e=0;for(let t=0;t<this.componentQueue.length;t++)if(this.__zSnap[e++]!==this.componentQueue[t].state.zIndex)return!0;for(let t=0;t<this.toolsQueue.length;t++)if(this.__zSnap[e++]!==this.toolsQueue[t].state.zIndex)return!0;return!1}doRenderFull(){this.ice.ctx.setTransform(1,0,0,1,0,0),this.ice.ctx.clearRect(0,0,this.ice.canvasWidth,this.ice.canvasHeight);const t=this.__visibleWorldRect();let e=0;for(let i=0;i<this.componentQueue.length;i++){const s=this.componentQueue[i];if(t&&s.isEffectivelyVisible()&&!s.dirty){const i=this.__snap.get(s);if(i&&!intersects(i,t)){e++;continue}}this.__ensureContext(s),this.__renderComponent(s),s.isEffectivelyVisible()&&this.__capture(s)}this.__lastFrameCulled=e;for(let t=0;t<this.toolsQueue.length;t++){const e=this.toolsQueue[t];this.__ensureContext(e),e.render(),e.isEffectivelyVisible()&&this.__capture(e)}this.__invokePluginRender(null),this.__finalizeHidden(this.componentQueue),this.__finalizeHidden(this.toolsQueue),this.__primed=!0,this.ice.dirty=!1,this.ice.evtBus.trigger(l)}__collect(){if(!this.__primed)return null;const t=this.ice.ctx,e=this.ice.canvasWidth||0,i=this.ice.canvasHeight||0;if(!e||!i)return null;if(!t||"function"!=typeof t.save||"function"!=typeof t.clip||"function"!=typeof t.restore)return null;const s=this.__preCount(this.componentQueue);if(0===s.dirty)return null;if(s.visible>0&&s.dirty/s.visible>.2)return null;const o=[];if(!this.__collectDirtyBoxes(o,this.componentQueue))return null;if(!this.__collectDirtyBoxes(o,this.toolsQueue))return null;const r=function coalesceRegions(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:6;const i=[];for(let e=0;e<t.length;e++){const s=t[e];if(!isFiniteBox(s))continue;let o=!1;for(let t=0;t<i.length;t++)if(intersects(i[t],s)&&isWorthMerging(i[t],s)){i[t]=mergeBox(i[t],s),o=!0;break}o||i.push([s[0],s[1],s[2],s[3]])}let s=!0;for(;s;){s=!1;for(let t=0;t<i.length&&!s;t++)for(let e=t+1;e<i.length;e++)if(intersects(i[t],i[e])&&isWorthMerging(i[t],i[e])){i[t]=mergeBox(i[t],i[e]),i.splice(e,1),s=!0;break}}for(;i.length>e;){let t=0,e=1,s=1/0;for(let o=0;o<i.length;o++)for(let r=o+1;r<i.length;r++){const a=boxArea(mergeBox(i[o],i[r]))-boxArea(i[o])-boxArea(i[r]);isWorthMerging(i[o],i[r])&&a<s&&(s=a,t=o,e=r)}if(s===1/0){if(i.length>24)return[i.reduce((t,e)=>mergeBox(t,e),[1/0,1/0,-1/0,-1/0])];break}i[t]=mergeBox(i[t],i[e]),i.splice(e,1)}return i}(o,6);if(!r.length)return null;const a=this.__renderViewport(),l=[];for(let t=0;t<r.length;t++)integerAlign(r[t]),l.push(mapBoxToRender(r[t],a));if(function regionsAreaRatio(t,e,i){if(!e||!i)return 1;let s=0;for(let e=0;e<t.length;e++)s+=boxArea(t[e]);return s/(e*i)}(l,e,i)>.35)return null;if(this.__riskyIntersectsRegions(r,this.componentQueue))return null;if(this.__riskyIntersectsRegions(r,this.toolsQueue))return null;const h=[1/0,1/0,-1/0,-1/0];for(let t=0;t<r.length;t++)unionBoxes(h,r[t]);return{regions:r,renderRegions:l,bounding:h}}__renderViewport(){return"function"==typeof this.ice.getRenderViewport?this.ice.getRenderViewport():this.ice.viewport}__preCount(t){let e=0,i=0,s=!1;for(let o=0;o<t.length;o++){const r=t[o];r.isEffectivelyVisible()?(e++,r.dirty&&i++):this.__snap.has(r)&&(s=!0)}return{visible:e,dirty:i,hiddenErase:s}}__collectDirtyBoxes(t,e){for(let i=0;i<e.length;i++){const s=e[i];if(!s.isEffectivelyVisible()){const e=this.__snap.get(s);e&&t.push([e[0],e[1],e[2],e[3]]);continue}if(!s.dirty)continue;s.__paramsDirtyAtCollect=s.paramsDirty;const o=this.__freshBox(s);if(!o)return!1;const r=this.__snap.get(s);t.push(r?mergeBox(r,o):o)}return!0}__riskyIntersectsRegions(t,e){for(let i=0;i<e.length;i++){const s=e[i];if(!s.isEffectivelyVisible())continue;if(!this.__isDotPath(s)&&!this.__isText(s)&&isOpaqueDrawing(s.state))continue;if(s.dirty){if(!this.__isText(s))continue;if(!s.__paramsDirtyAtCollect&&this.cache.isCachable(s)&&this.cache.has(s))continue;return!0}if(this.cache.isCachable(s)&&this.cache.has(s))continue;const o=this.__snap.get(s);if(!o)return!0;for(let e=0;e<t.length;e++)if(intersects(o,t[e]))return!0}return!1}__renderDirtyRect(t){const e=this.ice.ctx,i=t.regions,s=t.renderRegions;for(let t=0;t<i.length;t++){const o=i[t],r=s[t],a=r[0],l=r[1],h=r[2]-r[0],c=r[3]-r[1];if(!(h<=0||c<=0)){e.save(),e.setTransform(1,0,0,1,0,0),e.clearRect(a,l,h,c),e.beginPath(),e.rect(a,l,h,c),e.clip();for(let t=0;t<this.componentQueue.length;t++){const e=this.componentQueue[t];if(!e.isEffectivelyVisible())continue;const i=this.__snap.get(e);(e.dirty||i&&intersects(i,o))&&(this.__ensureContext(e),this.__renderComponent(e),this.__capture(e))}for(let t=0;t<this.toolsQueue.length;t++){const e=this.toolsQueue[t];e.isEffectivelyVisible()&&(this.__ensureContext(e),e.render(),this.__capture(e))}this.__invokePluginRender(o),e.restore()}}this.__finalizeHidden(this.componentQueue),this.__finalizeHidden(this.toolsQueue),this.ice.dirty=!1,this.ice.evtBus.trigger(l)}__invokePluginRender(t){const e=this.ice&&this.ice.plugins;if(!e||"function"!=typeof e.hasRenderHooks||!e.hasRenderHooks())return;const i=this.ice.ctx,s=this.__renderViewport();i.setTransform(s.scale,0,0,s.scale,s.tx,s.ty),e.invokeRenderHooks({ctx:i,mode:this.renderMode,region:t,width:this.ice.canvasWidth,height:this.ice.canvasHeight})}__ensureContext(t){t.ctx===this.ice.ctx&&t.ice===this.ice||(t.root=this.ice.root,t.ctx=this.ice.ctx,t.evtBus=this.ice.evtBus,t.ice=this.ice)}getWorldBox(t){return this.__snap.get(t)||null}__visibleWorldRect(){const t=this.ice.canvasWidth||0,e=this.ice.canvasHeight||0;if(!t||!e)return null;const[i,s]=this.ice.screenToWorld(0,0),[o,r]=this.ice.screenToWorld(t,e),a=[Math.min(i,o),Math.min(s,r),Math.max(i,o),Math.max(s,r)];return isFiniteBox(a)?a:null}__renderComponent(t){this.cache.render(t)||t.render()}__isDotPath(t){return"function"==typeof t.calcDots}__isText(t){return"function"==typeof t.measureText}__freshBox(t){try{"function"==typeof t.refreshParams&&t.refreshParams();const e=t.getMaxBoundingBox(!0).getMinAndMaxPoint(),i=stylePaintPad(t.state),s=[e.minX-i,e.minY-i,e.maxX+i,e.maxY+i];return isFiniteBox(s)?s:null}catch(t){return null}}__capture(t){let e=this.__snap.get(t);e||(e=new Float64Array(4),this.__snap.set(t,e)),t.__paintWorldBox(e);const i=stylePaintPad(t.state);e[0]-=i,e[1]-=i,e[2]+=i,e[3]+=i}__finalizeHidden(t){for(let e=0;e<t.length;e++){const i=t[e];!i.isEffectivelyVisible()&&i.dirty&&(i.dirty=!1,this.__snap.delete(i))}}};function paint(t){return null==t||""===t?null:String(t)}function gradientDesc(t){if(!t||"object"==typeof t){if(t&&t.__iceGradient)return t.__iceGradient;if(t&&("linear"===t.type||"radial"===t.type||"conic"===t.type)&&t.stops)return t}return null}function gradientDef(t,e){const i=[],s=e&&e.stops;if(Array.isArray(s)&&s.forEach(t=>{Array.isArray(t)&&i.push([Number(t[0])||0,String(t[1])])}),!i.length)return"";const o=i.map(t=>{let[e,i]=t;return'<stop offset="'.concat(escapeXml$1(String(e)),'" stop-color="').concat(escapeXml$1(i),'"/>')}).join("");if("radial"===function gradientKind(t){return t&&"radial"===t.type?"radial":"linear"}(e)){const i=Array.isArray(e.center)?e.center:[0,0],s=Number(e.radius)||.5;return'<radialGradient id="'.concat(t,'" gradientUnits="userSpaceOnUse" cx="').concat(i[0],'" cy="').concat(i[1],'" r="').concat(s,'">').concat(o,"</radialGradient>")}const r=Array.isArray(e.from)?e.from:[0,0],a=Array.isArray(e.to)?e.to:[0,1];return'<linearGradient id="'.concat(t,'" gradientUnits="userSpaceOnUse" x1="').concat(r[0],'" y1="').concat(r[1],'" x2="').concat(a[0],'" y2="').concat(a[1],'">').concat(o,"</linearGradient>")}function escapeXml$1(t){return String(t).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}const xt={top:"text-before-edge",hanging:"hanging",middle:"central",alphabetic:"alphabetic",ideographic:"ideographic",bottom:"text-after-edge"},wt=2*Math.PI;function directionalDelta(t,e,i){let s=e-t;if(i){for(;s>1e-12;)s-=wt;for(;s<-wt;)s+=wt;Math.abs(s)<1e-12&&(s=-wt)}else{for(;s<-1e-12;)s+=wt;for(;s>wt;)s-=wt;Math.abs(s)<1e-12&&(s=wt)}return s}function matrixAttr(t,e){const n=t=>String(Number((t||0).toFixed(e)));return"matrix(".concat(n(t[0])," ").concat(n(t[1])," ").concat(n(t[2])," ").concat(n(t[3])," ").concat(n(t[4])," ").concat(n(t[5]),")")}function exportSvg(t){return exportSvgResult(t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).svg}function exportSvgResult(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i="number"==typeof e.precision?e.precision:2,s=Number(e.scale)>0?Number(e.scale):1,o=!!(t&&t.childNodes&&t.getRenderViewport),r=o?t:t&&t.ice,a=[],collect=t=>{for(let e=0;e<t.length;e++){const i=t[e];a.push(i),i.childNodes&&i.childNodes.length&&collect(i.childNodes)}};collect(o?t.childNodes:[t]),e.includeTools&&r&&r.toolNodes&&collect(r.toolNodes),a.sort((t,e)=>(t.state.zIndex||0)-(e.state.zIndex||0));let l=[1,0,0,1,0,0],h=0,c=0;if("viewport"===e.area&&o){const t=r.getRenderViewport(),e=Number(r.canvasWidth)||0,i=Number(r.canvasHeight)||0;l=[t.scale,0,0,t.scale,t.tx,t.ty],h=e,c=i}else{let t=1/0,i=1/0,o=-1/0,r=-1/0;a.forEach(e=>{if("function"==typeof e.isEffectivelyVisible&&!e.isEffectivelyVisible())return;"function"==typeof e.refreshParams&&e.refreshParams(),"function"==typeof e.composeMatrix&&e.composeMatrix();let s=null;if("function"==typeof e.__paintWorldBox)s=e.__paintWorldBox();else if("function"==typeof e.getMinBoundingBox){const t=e.getMinBoundingBox(!0);s=[t.tl[0],t.tl[1],t.br[0],t.br[1]]}s&&isFinite(s[0])&&isFinite(s[1])&&isFinite(s[2])&&isFinite(s[3])&&(t=Math.min(t,s[0]),i=Math.min(i,s[1]),o=Math.max(o,s[2]),r=Math.max(r,s[3]))});const d=Number(e.padding)>=0?Number(e.padding):0;isFinite(t)||(t=0,i=0,o=1,r=1),t-=d,i-=d,o+=d,r+=d;const u=Math.max(o-t,1),p=Math.max(r-i,1);l=[s,0,0,s,-t*s,-i*s],h=u*s,c=p*s}const d=[],u=[];let p=0;a.forEach(t=>{if("function"==typeof t.isEffectivelyVisible&&!t.isEffectivelyVisible())return;const e=t.state,s=function mergedStyle(t){const e=t.props&&t.props.style,i=t.state&&t.state.style;return e||i?_objectSpread2(_objectSpread2({fillStyle:void 0},e),i):{}}(t),o="function"==typeof t.composeMatrix?t.composeMatrix():e.composedMatrix,r=[],a=[];let l=t.parentNode;for(;l&&l.state;)l.state.clipChildren&&"function"==typeof l.__paintWorldBox&&a.push(l.__paintWorldBox()),l=l.parentNode;const h=['transform="'.concat(matrixAttr(o,i),'"')];if(a.length){const t="ice-clip-".concat(p++),e=a[a.length-1];d.push('<clipPath id="'.concat(t,'"><rect x="').concat(e[0].toFixed(i),'" y="').concat(e[1].toFixed(i),'" width="').concat((e[2]-e[0]).toFixed(i),'" height="').concat((e[3]-e[1]).toFixed(i),'"/></clipPath>')),h.push('clip-path="url(#'.concat(t,')"'))}const c="function"==typeof t.getEffectiveOpacity?t.getEffectiveOpacity():1,f=void 0===s.globalAlpha?1:Number(s.globalAlpha),g=c*(f>=0?f:1);1!==g&&h.push('opacity="'.concat(Number(g.toFixed(3)),'"'));const m=function shadowFilter(t,e){let i=null;if("string"==typeof e.shadow&&A[e.shadow])i=A[e.shadow];else{const t=Number(e.shadowBlur)||0,s=Number(e.shadowOffsetX)||0,o=Number(e.shadowOffsetY)||0;(t||s||o)&&(i={shadowColor:e.shadowColor||"rgba(0,0,0,0.35)",shadowBlur:t,shadowOffsetX:s,shadowOffsetY:o})}if(!i)return null;const s=String(i.shadowColor||"rgba(0,0,0,0.35)"),o=s.match(/^rgba?\(\s*([0-9.]+)\s*,\s*([0-9.]+)\s*,\s*([0-9.]+)\s*(?:,\s*([0-9.]+)\s*)?\)$/i),r=o?"rgb(".concat(Number(o[1]),", ").concat(Number(o[2]),", ").concat(Number(o[3]),")"):s,a=o&&void 0!==o[4]?Number(o[4]):1,l=Number(i.shadowBlur)||0;return{def:'<filter id="'.concat(t,'" x="-50%" y="-50%" width="200%" height="200%"><feDropShadow dx="').concat(Number(i.shadowOffsetX||0),'" dy="').concat(Number(i.shadowOffsetY||0),'" stdDeviation="').concat(Number((l/2).toFixed(2)),'" flood-color="').concat(escapeXml$1(r),'" flood-opacity="').concat(a,'"/></filter>'),url:"url(#".concat(t,")")}}("ice-shadow-".concat(p),s);m&&(p++,d.push(m.def),h.push('filter="'.concat(m.url,'"'))),r.push(...h);let y="";if(t instanceof z){"function"==typeof t.ensurePathBuilt&&t.ensurePathBuilt();const o=t.path2D,r=o&&o._commands||[],a=s.fillGradient||gradientDesc(s.fillStyle),l=s.strokeGradient||gradientDesc(s.strokeStyle),h=!(!1===e.fill||!s.fillStyle&&!a),c=!(!1===e.stroke||!s.strokeStyle&&!l);if(r.length&&(h||c)){const h=function commandsToPathData(t,e,i){const n=t=>{const e=Number(t.toFixed(i));return String(e)},s=[];let o=!1;for(let e=0;e<t.length;e++){const i=t[e],r=i[0];if("moveTo"===r)s.push("".concat(o?"L":"M").concat(n(i[1]),",").concat(n(i[2]))),o=!0;else if("lineTo"===r)s.push("L".concat(n(i[1]),",").concat(n(i[2]))),o=!0;else if("bezierCurveTo"===r)s.push("C".concat(n(i[1]),",").concat(n(i[2])," ").concat(n(i[3]),",").concat(n(i[4])," ").concat(n(i[5]),",").concat(n(i[6]))),o=!0;else if("quadraticCurveTo"===r)s.push("Q".concat(n(i[1]),",").concat(n(i[2])," ").concat(n(i[3]),",").concat(n(i[4]))),o=!0;else if("rect"===r)s.push("M".concat(n(i[1]),",").concat(n(i[2]),"h").concat(n(i[3]),"v").concat(n(i[4]),"h").concat(n(-i[3]),"z")),o=!1;else if("arc"===r){const[t,e,r,a,l,h]=i.slice(1),c=t+r*Math.cos(a),d=e+r*Math.sin(a),u=t+r*Math.cos(l),p=e+r*Math.sin(l),f=directionalDelta(a,l,!!h),g=Math.abs(f)>Math.PI?1:0,m=f>0?1:0;if(o||s.push("M".concat(n(c),",").concat(n(d))),Math.abs(f)>=wt-1e-6){const i=t+r*Math.cos(a+Math.PI),o=e+r*Math.sin(a+Math.PI);s.push("A".concat(n(r),",").concat(n(r)," 0 0 ").concat(m," ").concat(n(i),",").concat(n(o))),s.push("A".concat(n(r),",").concat(n(r)," 0 0 ").concat(m," ").concat(n(c),",").concat(n(d)))}else s.push("A".concat(n(r),",").concat(n(r)," 0 ").concat(g," ").concat(m," ").concat(n(u),",").concat(n(p)));o=!0}else if("arcTo"===r){const[t,e]=i.slice(1);s.push("L".concat(n(t),",").concat(n(e))),o=!0}else if("ellipse"===r){const[t,e,r,a,l,h,c,d]=i.slice(1),u=t+r*Math.cos(h)*Math.cos(l)-a*Math.sin(h)*Math.sin(l),p=e+r*Math.cos(h)*Math.sin(l)+a*Math.sin(h)*Math.cos(l),f=t+r*Math.cos(c)*Math.cos(l)-a*Math.sin(c)*Math.sin(l),g=e+r*Math.cos(c)*Math.sin(l)+a*Math.sin(c)*Math.cos(l),m=directionalDelta(h,c,!!d),y=Math.abs(m)>Math.PI?1:0,_=m>0?1:0;if(o||s.push("M".concat(n(u),",").concat(n(p))),Math.abs(m)>=wt-1e-6){const i=t+r*Math.cos(h+Math.PI)*Math.cos(l)-a*Math.sin(h+Math.PI)*Math.sin(l),o=e+r*Math.cos(h+Math.PI)*Math.sin(l)+a*Math.sin(h+Math.PI)*Math.cos(l);s.push("A".concat(n(r),",").concat(n(a)," 0 0 ").concat(_," ").concat(n(i),",").concat(n(o))),s.push("A".concat(n(r),",").concat(n(a)," 0 0 ").concat(_," ").concat(n(u),",").concat(n(p)))}else s.push("A".concat(n(r),",").concat(n(a)," 0 ").concat(y," ").concat(_," ").concat(n(f),",").concat(n(g)));o=!0}else"closePath"===r&&(s.length&&!/z$/i.test(s[s.length-1])&&s.push("Z"),o=!1)}const r=t.some(t=>"closePath"===t[0]);return!e||r||/z\s*$/i.test(s.join(" "))||s.push("Z"),s.join(" ")}(r,!(!o||!o._closed)||!1!==e.closePath,i),c=!1===e.fill||a?null:paint(s.fillStyle),u=!1===e.stroke||l?null:paint(s.strokeStyle),f=[];if(a&&!1!==e.fill){const t="ice-grad-".concat(p++),e=gradientDef(t,a);e?(d.push(e),f.push('fill="url(#'.concat(t,')"'))):c?f.push('fill="'.concat(escapeXml$1(c),'"')):f.push('fill="none"')}else f.push('fill="'.concat(c?escapeXml$1(c):"none",'"'));if(l&&!1!==e.stroke){const t="ice-grad-".concat(p++),e=gradientDef(t,l);e&&(d.push(e),f.push('stroke="url(#'.concat(t,')"')))}else u&&f.push('stroke="'.concat(escapeXml$1(u),'"'));if(void 0!==s.lineWidth&&f.push('stroke-width="'.concat(Number(s.lineWidth),'"')),Array.isArray(e.lineDash)&&e.lineDash.length&&(f.push('stroke-dasharray="'.concat(e.lineDash.join(" "),'"')),e.lineDashOffset&&f.push('stroke-dashoffset="'.concat(Number(e.lineDashOffset),'"'))),e.lineJoin&&f.push('stroke-linejoin="'.concat(e.lineJoin,'"')),e.lineCap&&f.push('stroke-linecap="'.concat(e.lineCap,'"')),y='<path d="'.concat(h,'" ').concat(f.join(" "),"/>"),"hollow"!==e.arrowStyle&&"function"==typeof t.getArrowFaces){const o=t.getArrowFaces(),r=u||(s.strokeStyle?String(s.strokeStyle):"#000000");if(o.length&&!1!==e.stroke){const t=o.map(t=>"M".concat(Number(t[0][0].toFixed(i)),",").concat(Number(t[0][1].toFixed(i)))+"L".concat(Number(t[1][0].toFixed(i)),",").concat(Number(t[1][1].toFixed(i)))+"L".concat(Number(t[2][0].toFixed(i)),",").concat(Number(t[2][1].toFixed(i)),"Z")).join(" ");y+='<path d="'.concat(t,'" fill="').concat(escapeXml$1(r),'" stroke="none"/>')}}const g="function"==typeof t.getLabelRenderInfo?t.getLabelRenderInfo():null;if(g){const t=Number((g.x-g.halfW).toFixed(i)),e=Number((g.y-g.halfH).toFixed(i)),s=Number((2*g.halfW).toFixed(i)),o=Number((2*g.halfH).toFixed(i));y+='<rect x="'.concat(t,'" y="').concat(e,'" width="').concat(s,'" height="').concat(o,'" fill="').concat(escapeXml$1(g.backgroundColor),'"/>')+'<text x="'.concat(Number(g.x.toFixed(i)),'" y="').concat(Number(g.y.toFixed(i)),'" ')+'font-family="Arial" font-size="'.concat(Number(g.fontSize),'" fill="').concat(escapeXml$1(g.fillStyle),'" ')+'text-anchor="middle" dominant-baseline="central">'.concat(escapeXml$1(g.text),"</text>")}}}else if(t instanceof pt){const o="function"==typeof t.getRenderLines?t.getRenderLines():null;if(o&&o.length){const t=!1!==e.fill?paint(s.fillStyle):null,r=e.stroke?paint(s.strokeStyle):null,a=function fontAttributes(t,e){let i=t.fontFamily,s=t.fontSize,o=t.fontWeight,r=t.fontStyle;if(!("string"!=typeof t.font||i&&s)){const e=t.font.match(/^(?:(italic|oblique)\s+)?(?:(bold|bolder|lighter|[0-9]{3})\s+)?([0-9.]+)px\s+(.+)$/);e&&(r=r||e[1],o=o||e[2],s=s||e[3],i=i||e[4])}const a=[];return i&&a.push('font-family="'.concat(escapeXml$1(String(i)),'"')),null!=s&&""!==s&&a.push('font-size="'.concat(Number(Number(s).toFixed(e)),'"')),o&&a.push('font-weight="'.concat(escapeXml$1(String(o)),'"')),r&&a.push('font-style="'.concat(escapeXml$1(String(r)),'"')),a}(s,i);a.push('fill="'.concat(t?escapeXml$1(t):"none",'"')),r&&(a.push('stroke="'.concat(escapeXml$1(r),'"')),a.push('stroke-width="'.concat(Number(s.lineWidth)||1,'"')));let l=null;"center"===s.textAlign?(a.push('text-anchor="middle"'),l=0):"right"!==s.textAlign&&"end"!==s.textAlign||(a.push('text-anchor="end"'),l=e.localOrigin[0]-(Number(s.paddingRight)||0));const h=xt[s.textBaseline||"bottom"];h&&a.push('dominant-baseline="'.concat(h,'"'));const c=o.map(t=>{const e=null===l?t.x:l;return'<tspan x="'.concat(Number(e.toFixed(i)),'" y="').concat(Number(t.y.toFixed(i)),'">').concat(escapeXml$1(t.text),"</tspan>")}).join("");y="<text ".concat(a.join(" "),">").concat(c,"</text>")}}else if(t instanceof rt&&e.src&&!(e.sw>0&&e.sh>0)){const t=0-e.localOrigin[0],i=0-e.localOrigin[1],s=['x="'.concat(t,'"'),'y="'.concat(i,'"'),'width="'.concat(e.width,'"'),'height="'.concat(e.height,'"'),'href="'.concat(escapeXml$1(String(e.src)),'"')];if("circle"===(e.clipType||"none")){const t="ice-clip-".concat(p++),i=Math.min(e.width,e.height)/2;d.push('<clipPath id="'.concat(t,'"><circle cx="0" cy="0" r="').concat(i,'"/></clipPath>')),s.push('clip-path="url(#'.concat(t,')"'))}y="<image ".concat(s.join(" "),' preserveAspectRatio="none"/>')}y&&u.push("<g ".concat(r.join(" "),">").concat(y,"</g>"))});const f=e.background?'<rect x="0" y="0" width="'.concat(h,'" height="').concat(c,'" fill="').concat(escapeXml$1(e.background),'"/>'):"";return{svg:['<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="'.concat(Number(h.toFixed(i)),'" height="').concat(Number(c.toFixed(i)),'" viewBox="0 0 ').concat(Number(h.toFixed(i))," ").concat(Number(c.toFixed(i)),'">'),d.length?"<defs>".concat(d.join(""),"</defs>"):"",f,'<g transform="'.concat(matrixAttr(l,i),'">'),u.join(""),"</g>","</svg>"].filter(Boolean).join(""),width:h,height:c}}class ImageCache{constructor(t){_defineProperty$1(this,"imageCache",new Map),this.ice=t}setImage(t){let e=this.imageCache.get(t);return e||(e=I.createImage(),e.onload=()=>{this.ice.dirty=!0},e.onerror=()=>{},e.src=t,this.imageCache.size>ImageCache.CACHE_SIZE&&this.imageCache.delete(this.imageCache.keys().next().value),this.imageCache.set(t,e)),{loaded:this.loaded(e),image:e}}loaded(t){return t.complete&&t.naturalWidth>0}}function tagGradient(t,e){if(!t||"function"!=typeof t.addColorStop)return t;Object.defineProperty(t,"__iceGradient",{value:e,enumerable:!1,configurable:!0});const i=t.addColorStop.bind(t);return t.addColorStop=(t,s)=>{e.stops.push([t,s]),i(t,s)},t}_defineProperty$1(ImageCache,"CACHE_SIZE",100);class ICE{constructor(){_defineProperty$1(this,"childNodes",[]),_defineProperty$1(this,"toolNodes",[]),_defineProperty$1(this,"__childSet",new WeakSet),_defineProperty$1(this,"__toolSet",new WeakSet),_defineProperty$1(this,"canvasWidth",0),_defineProperty$1(this,"canvasHeight",0),_defineProperty$1(this,"viewport",{scale:1,tx:0,ty:0}),_defineProperty$1(this,"dpr",1),_defineProperty$1(this,"__renderVp",null),_defineProperty$1(this,"__contentBox",null),_defineProperty$1(this,"__inputRectSnapshot",null),_defineProperty$1(this,"selectionList",[]),_defineProperty$1(this,"plugins",new PluginHost(this)),_defineProperty$1(this,"theme",getTheme()),_defineProperty$1(this,"typeMapping",{}),_defineProperty$1(this,"__typeIdMapping",null),_defineProperty$1(this,"__dirty",!0),_defineProperty$1(this,"__initialized",!1)}__resolveCanvasEl(t){return t&&"function"==typeof t.getContext?t:t&&t.canvas&&"function"==typeof t.canvas.getContext?t.canvas:null}init(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t)throw new Error("ICE.init() failed...");const i=this.__resolveCanvasEl(t);if(this.__initialized){if(i&&i===this.canvasEl)return this;throw new Error("同一个 ICE 实例已经绑定到其它 canvas,如需重新初始化请先调用 destroy()。")}for(const t in gt)this.typeMapping[t]=gt[t];return this.__typeIdMapping=null,this.root=I,isString(t)?this.canvasEl=this.root.document.getElementById(t):i&&(this.canvasEl=i),e&&"number"==typeof e.dpr&&e.dpr>0&&(this.dpr=e.dpr),this.canvasEl?(this.canvasEl.oncontextmenu=function(t){t.preventDefault()},this.canvasWidth=this.canvasEl.width,this.canvasHeight=this.canvasEl.height,this.canvasBoundingClientRect=this.canvasEl.getBoundingClientRect(),this.__rememberInputRect(this.canvasBoundingClientRect),this.__contentBox=this.__readContentBox(this.canvasBoundingClientRect),this.ctx=this.canvasEl.getContext("2d"),this.canvasEl.style&&(this.canvasEl.style.touchAction="none"),1!==this.dpr&&this.__applyDevicePixelRatio()):this.ctx=t,this.evtBus=new ot,yt.registerEvtBus(this.evtBus),yt.start(),nt.registerEvtBus(this.evtBus),nt.start(),this.eventDispatcher=new it(this).start(),this.animationManager=new P(this).start(),this.controlPanelManager=new V(this).start(),this.renderer=new vt(this,e).start(),this.alignmentGuide=new G(this),this.linkSlotManager=new ICELinkSlotManager(this).start(),this.serializer=new Serializer(this),this.deserializer=new Deserializer(this),this.imageCache=new ImageCache(this),this.__initialized=!0,this}destroy(){if(!this.__initialized)return;const t=[this.renderer,this.animationManager,this.controlPanelManager,this.linkSlotManager];for(let e=0;e<t.length;e++){const i=t[e];i&&"function"==typeof i.stop&&i.stop()}this.eventDispatcher&&(this.eventDispatcher.stopped=!0),this.canvasEl&&this.canvasEl.oncontextmenu&&(this.canvasEl.oncontextmenu=null),this.evtBus&&(yt.delEvtBus(this.evtBus),nt.delEvtBus(this.evtBus)),0===yt.evtBuses.length&&yt.stop(),this.plugins&&this.plugins.clear(),this.clearAll(),this.renderer=null,this.animationManager=null,this.controlPanelManager=null,this.linkSlotManager=null,this.eventDispatcher=null,this.alignmentGuide=null,this.serializer=null,this.deserializer=null,this.imageCache=null,this.ctx=null,this.canvasEl=null,this.canvasBoundingClientRect=null,this.dpr=1,this.__renderVp=null,this.__contentBox=null,this.__inputRectSnapshot=null,this.__initialized=!1}addTool(t){this.__toolSet.has(t)||(this.evtBus.trigger(s,null,{component:t}),t.trigger(s),t.ice=this,t.ctx=this.ctx,t.evtBus=this.evtBus,this.toolNodes.push(t),this.__toolSet.add(t),this.dirty=!0,this.renderer&&this.renderer.markQueueDirty(),t&&"function"==typeof t.__reapplyPreset&&t.__reapplyPreset(this.theme),this.evtBus.trigger(o,null,{component:t}),t.trigger(o))}removeTool(t){if(!this.__toolSet.has(t))return;this.evtBus.trigger(r,null,{component:t}),t.trigger(r);const e=this.toolNodes.indexOf(t);-1!==e&&this.toolNodes.splice(e,1),this.__toolSet.delete(t),this.evtBus.trigger(a,null,{component:t}),t.trigger(a),this.dirty=!0,this.renderer&&this.renderer.markQueueDirty(),t.destory()}addChild(t){let e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(this.__childSet.has(t))return;this.evtBus.trigger(s,null,{component:t}),t.trigger(s),t.ice=this,t.ctx=this.ctx,t.evtBus=this.evtBus,t.parentNode=null,this.childNodes.push(t),this.__childSet.add(t);let i=!1;const r=t.props.animations;if(r)for(const t in r){i=!0;break}i&&this.animationManager.add(t),this.dirty=e,this.renderer&&this.renderer.markQueueDirty(),t&&"function"==typeof t.__reapplyPreset&&t.__reapplyPreset(this.theme),this.evtBus.trigger(o,null,{component:t}),t.trigger(o)}addChildren(t){for(let e=0;e<t.length;e++)this.addChild(t[e],!1);this.dirty=!0}removeChild(t){let e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!this.__childSet.has(t))return;this.evtBus.trigger(r,null,{component:t}),t.trigger(r);const i=this.childNodes.indexOf(t);-1!==i&&this.childNodes.splice(i,1),this.__childSet.delete(t),this.evtBus.trigger(a,null,{component:t}),t.trigger(a),this.dirty=e,this.renderer&&this.renderer.markQueueDirty(),t.destory()}removeChildren(t){for(let e=0;e<t.length;e++)this.removeChild(t[e],!1);this.dirty=!0}clearAll(){this.removeChildren([...this.childNodes])}findComponent(t){if(t)return this.childNodes.filter(e=>e.props.id===t)[0]||this.__findComponentInTree(this.childNodes,t)}__findComponentInTree(t,e){for(let i=0;i<t.length;i++){const s=t[i];if(s.props&&s.props.id===e)return s;if(s.childNodes&&s.childNodes.length){const t=this.__findComponentInTree(s.childNodes,e);if(t)return t}}}set dirty(t){this.__dirty=t}get dirty(){return this.__dirty}registerType(t,e){this.typeMapping[t]=e,this.__typeIdMapping=null}getTypeId(t){if(!t)return;let e=this.__typeIdMapping;if(!e){e=new Map;for(const t in this.typeMapping){const i=this.typeMapping[t];"function"!=typeof i||e.has(i)||e.set(i,t)}this.__typeIdMapping=e}return e.get(t)}use(t){return this.plugins.use(t)}unuse(t){return this.plugins.unuse(t)}getPlugins(){return this.plugins.names}setSelection(t){return this.selectionList=null==t?[]:Array.isArray(t)?t:[t],!!this.plugins&&this.plugins.syncTools(this.selectionList[0]||null)}getAccessibilityTree(t){return buildAccessibilityTree(this,t)}setFocusedComponent(t){let e=t;return"string"==typeof t&&(e=flattenAllComponents(this).filter(e=>e.props&&e.props.id===t)[0]||null),this.eventDispatcher&&(this.eventDispatcher.focusedComponent=e||null),this}getFocusedComponent(){return this.eventDispatcher?this.eventDispatcher.focusedComponent:null}getType(t){return this.typeMapping[t]}loadFont(t,e){return I.loadFont(t,e)}setTheme(t){return this.theme=resolveTheme(t,this.theme),this.__reapplyPresets(),this}setViewport(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;const s=Number(t);return this.viewport={scale:s>0?s:1,tx:Number(e)||0,ty:Number(i)||0},this.dirty=!0,this.renderer&&this.renderer.markQueueDirty(),this}screenToWorld(t,e){const i=this.viewport;return[(t-i.tx)/i.scale,(e-i.ty)/i.scale]}worldToScreen(t,e){const i=this.viewport;return[t*i.scale+i.tx,e*i.scale+i.ty]}getRenderViewport(){const t=this.viewport;if(1===this.dpr)return t;let e=this.__renderVp;return e||(e=this.__renderVp={scale:1,tx:0,ty:0,__d:1,__s:1,__tx:0,__ty:0}),e.__d===this.dpr&&e.__s===t.scale&&e.__tx===t.tx&&e.__ty===t.ty||(e.__d=this.dpr,e.__s=t.scale,e.__tx=t.tx,e.__ty=t.ty,e.scale=t.scale*this.dpr,e.tx=t.tx*this.dpr,e.ty=t.ty*this.dpr),e}__applyDevicePixelRatio(){const t=this.canvasEl;if(!t)return;const e=this.__readContentBox("function"==typeof t.getBoundingClientRect?t.getBoundingClientRect():null),i=e.width||t.width,s=e.height||t.height;t.width=Math.round(i*this.dpr),t.height=Math.round(s*this.dpr),t.style&&(t.style.width=i+"px",t.style.height=s+"px"),this.canvasWidth=t.width,this.canvasHeight=t.height,this.updateCanvasBoundingRect()}updateCanvasBoundingRect(){return this.canvasEl&&"function"==typeof this.canvasEl.getBoundingClientRect&&(this.canvasBoundingClientRect=this.canvasEl.getBoundingClientRect(),this.__rememberInputRect(this.canvasBoundingClientRect),this.__contentBox=this.__readContentBox(this.canvasBoundingClientRect)),this.canvasBoundingClientRect}__rememberInputRect(t){if(!t)return;const e=this.__inputRectSnapshot||(this.__inputRectSnapshot={left:0,top:0,width:0,height:0});e.left=t.left||0,e.top=t.top||0,e.width=t.width||0,e.height=t.height||0}refreshInputRect(){const t=this.canvasEl;if(!t||"function"!=typeof t.getBoundingClientRect)return this.canvasBoundingClientRect;const e=t.getBoundingClientRect(),i=this.__inputRectSnapshot,s=!!i,o=s?i.left:0,r=s?i.top:0,a=s?i.width:0,l=s?i.height:0;this.canvasBoundingClientRect=e,this.__rememberInputRect(e);const h=this.__contentBox;return s&&h&&Math.abs(e.width-a)<.01&&Math.abs(e.height-l)<.01?(h.left+=e.left-o,h.top+=e.top-r):this.__contentBox=this.__readContentBox(e),e}__readContentBox(t){const e=this.canvasEl;let i=0,s=0,o=0,r=0,a=0,l=0,h=0,c=0;const d=this.root&&"function"==typeof this.root.getComputedStyle&&e?this.root.getComputedStyle(e):null;if(d){const num=t=>{const e=parseFloat(t);return isFinite(e)?e:0};i=num(d.borderLeftWidth),s=num(d.borderRightWidth),o=num(d.borderTopWidth),r=num(d.borderBottomWidth),a=num(d.paddingLeft),l=num(d.paddingRight),h=num(d.paddingTop),c=num(d.paddingBottom)}const u=t&&t.left||0,p=t&&t.top||0,f=t&&t.width||0,g=t&&t.height||0;return{left:u+i+a,top:p+o+h,width:Math.max(0,f-i-s-a-l),height:Math.max(0,g-o-r-h-c)}}getInputRect(){return this.__contentBox||this.updateCanvasBoundingRect(),this.__contentBox||this.canvasBoundingClientRect||{left:0,top:0,width:0,height:0}}zoomAt(t,e,i){let s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:.05,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:20;const r=Number(i);if(!isFinite(r)||r<=0)return this;const[a,l]=this.screenToWorld(t,e),h=this.viewport.scale,c=Math.min(s,o),d=Math.max(s,o),u=Math.min(d,Math.max(c,h*r));return u===h?this:this.setViewport(u,t-a*u,e-l*u)}hitTest(t,e){const[i,s]=this.screenToWorld(t,e);return hitTestComponents(this,i,s,1)}registerTheme(t,e){return registerTheme(t,e),this}getTheme(){return this.theme}__reapplyPresets(){const t=flattenAllComponents(this);for(const e of t)"function"==typeof e.__reapplyPreset&&e.__reapplyPreset(this.theme)}createLinearGradient(t,e,i,s){return tagGradient(this.ctx.createLinearGradient(t,e,i,s),{type:"linear",from:[t,e],to:[i,s],stops:[]})}createRadialGradient(t,e,i,s,o,r){return tagGradient(this.ctx.createRadialGradient(t,e,i,s,o,r),{type:"radial",center:[s,o],radius:r,stops:[]})}createConicGradient(t,e,i){return"function"==typeof this.ctx.createConicGradient?tagGradient(this.ctx.createConicGradient(t,e,i),{type:"conic",startAngle:t,center:[e,i],stops:[]}):null}createPattern(t,e){return this.ctx.createPattern(t,e)}getImageData(t,e,i,s){return this.ctx.getImageData(t,e,i,s)}putImageData(t,e,i){this.ctx.putImageData(t,e,i)}createImageData(t,e){return this.ctx.createImageData(t,e)}toDataURL(t,e){return this.canvasEl.toDataURL(t,e)}toBlob(t,e,i){this.canvasEl.toBlob(t,e,i)}toSvg(){return exportSvg(this,arguments.length>0&&void 0!==arguments[0]?arguments[0]:{})}static headless(){const t=new ICE;return t.childNodes=[],t.toolNodes=[],t.evtBus=new ot,t.dirty=!0,t}toSvgResult(){return exportSvgResult(this,arguments.length>0&&void 0!==arguments[0]?arguments[0]:{})}toJSONString(){return this.serializer.toJSONString()}toJSONObject(){return this.serializer.toJSONObject()}fromJSONObject(t){yt.stop(),this.renderer.stop(),this.eventDispatcher.stopped=!0,this.animationManager.stop(),this.controlPanelManager.stop(),this.linkSlotManager.stop(),this.clearAll(),this.deserializer.fromJSONObject(t),yt.start(),this.renderer.start(),this.animationManager.start(),this.controlPanelManager.start(),this.linkSlotManager.start(),setTimeout(()=>{this.eventDispatcher.stopped=!1},300)}fromJSONString(t){const e=JSON.parse(t);this.fromJSONObject(e)}}var Ct=ICE,St="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};var kt=function isNil(t){return null==t};var Pt=function listCacheClear$1(){this.__data__=[],this.size=0};var Et=function eq$4(t,e){return t===e||t!=t&&e!=e},Mt=Et;var It=function assocIndexOf$4(t,e){for(var i=t.length;i--;)if(Mt(t[i][0],e))return i;return-1},Tt=It,Bt=Array.prototype.splice;var Nt=It;var Dt=It;var $t=It;var At=Pt,Ot=function listCacheDelete$1(t){var e=this.__data__,i=Tt(e,t);return!(i<0)&&(i==e.length-1?e.pop():Bt.call(e,i,1),--this.size,!0)},Rt=function listCacheGet$1(t){var e=this.__data__,i=Nt(e,t);return i<0?void 0:e[i][1]},Lt=function listCacheHas$1(t){return Dt(this.__data__,t)>-1},Ft=function listCacheSet$1(t,e){var i=this.__data__,s=$t(i,t);return s<0?(++this.size,i.push([t,e])):i[s][1]=e,this};function ListCache$4(t){var e=-1,i=null==t?0:t.length;for(this.clear();++e<i;){var s=t[e];this.set(s[0],s[1])}}ListCache$4.prototype.clear=At,ListCache$4.prototype.delete=Ot,ListCache$4.prototype.get=Rt,ListCache$4.prototype.has=Lt,ListCache$4.prototype.set=Ft;var zt=ListCache$4,jt=zt;var Xt=function stackClear$1(){this.__data__=new jt,this.size=0};var Ht=function stackDelete$1(t){var e=this.__data__,i=e.delete(t);return this.size=e.size,i};var Wt=function stackGet$1(t){return this.__data__.get(t)};var Vt=function stackHas$1(t){return this.__data__.has(t)},Gt="object"==typeof St&&St&&St.Object===Object&&St,Yt=Gt,Kt="object"==typeof self&&self&&self.Object===Object&&self,Ut=Yt||Kt||Function("return this")(),qt=Ut.Symbol,Jt=qt,Qt=Object.prototype,Zt=Qt.hasOwnProperty,te=Qt.toString,ee=Jt?Jt.toStringTag:void 0;var ie=function getRawTag$1(t){var e=Zt.call(t,ee),i=t[ee];try{t[ee]=void 0;var s=!0}catch(t){}var o=te.call(t);return s&&(e?t[ee]=i:delete t[ee]),o},se=Object.prototype.toString;var ne=ie,oe=function objectToString$1(t){return se.call(t)},re=qt?qt.toStringTag:void 0;var ae=function baseGetTag$4(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":re&&re in Object(t)?ne(t):oe(t)};var le=function isObject$7(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)},he=ae,ce=le;var de,ue=function isFunction$3(t){if(!ce(t))return!1;var e=he(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e},pe=Ut["__core-js_shared__"],fe=(de=/[^.]+$/.exec(pe&&pe.keys&&pe.keys.IE_PROTO||""))?"Symbol(src)_1."+de:"";var ge=function isMasked$1(t){return!!fe&&fe in t},me=Function.prototype.toString;var ye=ue,_e=ge,be=le,ve=function toSource$1(t){if(null!=t){try{return me.call(t)}catch(t){}try{return t+""}catch(t){}}return""},xe=/^\[object .+?Constructor\]$/,we=Function.prototype,Ce=Object.prototype,Se=we.toString,ke=Ce.hasOwnProperty,Pe=RegExp("^"+Se.call(ke).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var Ee=function baseIsNative$1(t){return!(!be(t)||_e(t))&&(ye(t)?Pe:xe).test(ve(t))},Me=function getValue$1(t,e){return null==t?void 0:t[e]};var Ie=function getNative$3(t,e){var i=Me(t,e);return Ee(i)?i:void 0},Te=Ie(Ut,"Map"),Be=Ie(Object,"create"),Ne=Be;var De=function hashClear$1(){this.__data__=Ne?Ne(null):{},this.size=0};var $e=function hashDelete$1(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},Ae=Be,Oe=Object.prototype.hasOwnProperty;var Re=function hashGet$1(t){var e=this.__data__;if(Ae){var i=e[t];return"__lodash_hash_undefined__"===i?void 0:i}return Oe.call(e,t)?e[t]:void 0},Le=Be,Fe=Object.prototype.hasOwnProperty;var ze=Be;var je=De,Xe=$e,He=Re,We=function hashHas$1(t){var e=this.__data__;return Le?void 0!==e[t]:Fe.call(e,t)},Ve=function hashSet$1(t,e){var i=this.__data__;return this.size+=this.has(t)?0:1,i[t]=ze&&void 0===e?"__lodash_hash_undefined__":e,this};function Hash$1(t){var e=-1,i=null==t?0:t.length;for(this.clear();++e<i;){var s=t[e];this.set(s[0],s[1])}}Hash$1.prototype.clear=je,Hash$1.prototype.delete=Xe,Hash$1.prototype.get=He,Hash$1.prototype.has=We,Hash$1.prototype.set=Ve;var Ge=Hash$1,Ye=zt,Ke=Te;var Ue=function isKeyable$1(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t};var qe=function getMapData$4(t,e){var i=t.__data__;return Ue(e)?i["string"==typeof e?"string":"hash"]:i.map},Je=qe;var Qe=qe;var Ze=qe;var ti=qe;var ei=function mapCacheClear$1(){this.size=0,this.__data__={hash:new Ge,map:new(Ke||Ye),string:new Ge}},ii=function mapCacheDelete$1(t){var e=Je(this,t).delete(t);return this.size-=e?1:0,e},si=function mapCacheGet$1(t){return Qe(this,t).get(t)},ni=function mapCacheHas$1(t){return Ze(this,t).has(t)},oi=function mapCacheSet$1(t,e){var i=ti(this,t),s=i.size;return i.set(t,e),this.size+=i.size==s?0:1,this};function MapCache$1(t){var e=-1,i=null==t?0:t.length;for(this.clear();++e<i;){var s=t[e];this.set(s[0],s[1])}}MapCache$1.prototype.clear=ei,MapCache$1.prototype.delete=ii,MapCache$1.prototype.get=si,MapCache$1.prototype.has=ni,MapCache$1.prototype.set=oi;var ri=zt,ai=Te,li=MapCache$1;var hi=zt,ci=Xt,di=Ht,ui=Wt,pi=Vt,fi=function stackSet$1(t,e){var i=this.__data__;if(i instanceof ri){var s=i.__data__;if(!ai||s.length<199)return s.push([t,e]),this.size=++i.size,this;i=this.__data__=new li(s)}return i.set(t,e),this.size=i.size,this};function Stack$1(t){var e=this.__data__=new hi(t);this.size=e.size}Stack$1.prototype.clear=ci,Stack$1.prototype.delete=di,Stack$1.prototype.get=ui,Stack$1.prototype.has=pi,Stack$1.prototype.set=fi;var gi=Stack$1,mi=Ie,yi=function(){try{var t=mi(Object,"defineProperty");return t({},"",{}),t}catch(t){}}(),_i=yi;var bi=function baseAssignValue$3(t,e,i){"__proto__"==e&&_i?_i(t,e,{configurable:!0,enumerable:!0,value:i,writable:!0}):t[e]=i},vi=bi,xi=Et;var wi=function assignMergeValue$2(t,e,i){(void 0!==i&&!xi(t[e],i)||void 0===i&&!(e in t))&&vi(t,e,i)};var Ci=function createBaseFor$1(t){return function(e,i,s){for(var o=-1,r=Object(e),a=s(e),l=a.length;l--;){var h=a[t?l:++o];if(!1===i(r[h],h,r))break}return e}}(),Si={exports:{}};!function(t,e){var i=Ut,s=e&&!e.nodeType&&e,o=s&&t&&!t.nodeType&&t,r=o&&o.exports===s?i.Buffer:void 0,a=r?r.allocUnsafe:void 0;t.exports=function cloneBuffer(t,e){if(e)return t.slice();var i=t.length,s=a?a(i):new t.constructor(i);return t.copy(s),s}}(Si,Si.exports);var ki=Ut.Uint8Array;var Pi=function cloneArrayBuffer$1(t){var e=new t.constructor(t.byteLength);return new ki(e).set(new ki(t)),e};var Ei=function cloneTypedArray$1(t,e){var i=e?Pi(t.buffer):t.buffer;return new t.constructor(i,t.byteOffset,t.length)};var Mi=function copyArray$1(t,e){var i=-1,s=t.length;for(e||(e=Array(s));++i<s;)e[i]=t[i];return e},Ii=le,Ti=Object.create,Bi=function(){function object(){}return function(t){if(!Ii(t))return{};if(Ti)return Ti(t);object.prototype=t;var e=new object;return object.prototype=void 0,e}}();var Ni=function overArg$1(t,e){return function(i){return t(e(i))}}(Object.getPrototypeOf,Object),Di=Object.prototype;var $i=function isPrototype$2(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||Di)},Ai=Bi,Oi=Ni,Ri=$i;var Li=function initCloneObject$1(t){return"function"!=typeof t.constructor||Ri(t)?{}:Ai(Oi(t))};var Fi=function isObjectLike$5(t){return null!=t&&"object"==typeof t},zi=ae,ji=Fi;var Xi=function baseIsArguments$1(t){return ji(t)&&"[object Arguments]"==zi(t)},Hi=Fi,Wi=Object.prototype,Vi=Wi.hasOwnProperty,Gi=Wi.propertyIsEnumerable,Yi=Xi(function(){return arguments}())?Xi:function(t){return Hi(t)&&Vi.call(t,"callee")&&!Gi.call(t,"callee")},Ki=Array.isArray;var Ui=function isLength$2(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991},qi=ue,Ji=Ui;var Qi=function isArrayLike$3(t){return null!=t&&Ji(t.length)&&!qi(t)},Zi=Qi,ts=Fi;var es=function isArrayLikeObject$1(t){return ts(t)&&Zi(t)},is={exports:{}};var ss=function stubFalse(){return!1};!function(t,e){var i=Ut,s=ss,o=e&&!e.nodeType&&e,r=o&&t&&!t.nodeType&&t,a=r&&r.exports===o?i.Buffer:void 0,l=(a?a.isBuffer:void 0)||s;t.exports=l}(is,is.exports);var ns=ae,os=Ni,rs=Fi,as=Function.prototype,ls=Object.prototype,hs=as.toString,cs=ls.hasOwnProperty,ds=hs.call(Object);var us=function isPlainObject$1(t){if(!rs(t)||"[object Object]"!=ns(t))return!1;var e=os(t);if(null===e)return!0;var i=cs.call(e,"constructor")&&e.constructor;return"function"==typeof i&&i instanceof i&&hs.call(i)==ds},ps=ae,fs=Ui,gs=Fi,ms={};ms["[object Float32Array]"]=ms["[object Float64Array]"]=ms["[object Int8Array]"]=ms["[object Int16Array]"]=ms["[object Int32Array]"]=ms["[object Uint8Array]"]=ms["[object Uint8ClampedArray]"]=ms["[object Uint16Array]"]=ms["[object Uint32Array]"]=!0,ms["[object Arguments]"]=ms["[object Array]"]=ms["[object ArrayBuffer]"]=ms["[object Boolean]"]=ms["[object DataView]"]=ms["[object Date]"]=ms["[object Error]"]=ms["[object Function]"]=ms["[object Map]"]=ms["[object Number]"]=ms["[object Object]"]=ms["[object RegExp]"]=ms["[object Set]"]=ms["[object String]"]=ms["[object WeakMap]"]=!1;var ys=function baseIsTypedArray$1(t){return gs(t)&&fs(t.length)&&!!ms[ps(t)]};var _s=function baseUnary$1(t){return function(e){return t(e)}},bs={exports:{}};!function(t,e){var i=Gt,s=e&&!e.nodeType&&e,o=s&&t&&!t.nodeType&&t,r=o&&o.exports===s&&i.process,a=function(){try{var t=o&&o.require&&o.require("util").types;return t||r&&r.binding&&r.binding("util")}catch(t){}}();t.exports=a}(bs,bs.exports);var vs=ys,xs=_s,ws=bs.exports,Cs=ws&&ws.isTypedArray,Ss=Cs?xs(Cs):vs;var ks=function safeGet$2(t,e){if(("constructor"!==e||"function"!=typeof t[e])&&"__proto__"!=e)return t[e]},Ps=bi,Es=Et,Ms=Object.prototype.hasOwnProperty;var Is=function assignValue$1(t,e,i){var s=t[e];Ms.call(t,e)&&Es(s,i)&&(void 0!==i||e in t)||Ps(t,e,i)},Ts=bi;var Bs=function copyObject$1(t,e,i,s){var o=!i;i||(i={});for(var r=-1,a=e.length;++r<a;){var l=e[r],h=s?s(i[l],t[l],l,i,t):void 0;void 0===h&&(h=t[l]),o?Ts(i,l,h):Is(i,l,h)}return i};var Ns=/^(?:0|[1-9]\d*)$/;var Ds=function isIndex$2(t,e){var i=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==i||"symbol"!=i&&Ns.test(t))&&t>-1&&t%1==0&&t<e},$s=function baseTimes$1(t,e){for(var i=-1,s=Array(t);++i<t;)s[i]=e(i);return s},As=Yi,Os=Ki,Rs=is.exports,Ls=Ds,Fs=Ss,zs=Object.prototype.hasOwnProperty;var js=function arrayLikeKeys$1(t,e){var i=Os(t),s=!i&&As(t),o=!i&&!s&&Rs(t),r=!i&&!s&&!o&&Fs(t),a=i||s||o||r,l=a?$s(t.length,String):[],h=l.length;for(var c in t)!e&&!zs.call(t,c)||a&&("length"==c||o&&("offset"==c||"parent"==c)||r&&("buffer"==c||"byteLength"==c||"byteOffset"==c)||Ls(c,h))||l.push(c);return l};var Xs=le,Hs=$i,Ws=function nativeKeysIn$1(t){var e=[];if(null!=t)for(var i in Object(t))e.push(i);return e},Vs=Object.prototype.hasOwnProperty;var Gs=js,Ys=function baseKeysIn$1(t){if(!Xs(t))return Ws(t);var e=Hs(t),i=[];for(var s in t)("constructor"!=s||!e&&Vs.call(t,s))&&i.push(s);return i},Ks=Qi;var Us=function keysIn$2(t){return Ks(t)?Gs(t,!0):Ys(t)},qs=Bs,Js=Us;var Qs=wi,Zs=Si.exports,tn=Ei,en=Mi,sn=Li,nn=Yi,on=Ki,rn=es,an=is.exports,ln=ue,hn=le,cn=us,dn=Ss,un=ks,pn=function toPlainObject$1(t){return qs(t,Js(t))};var fn=gi,gn=wi,mn=Ci,yn=function baseMergeDeep$1(t,e,i,s,o,r,a){var l=un(t,i),h=un(e,i),c=a.get(h);if(c)Qs(t,i,c);else{var d=r?r(l,h,i+"",t,e,a):void 0,u=void 0===d;if(u){var p=on(h),f=!p&&an(h),g=!p&&!f&&dn(h);d=h,p||f||g?on(l)?d=l:rn(l)?d=en(l):f?(u=!1,d=Zs(h,!0)):g?(u=!1,d=tn(h,!0)):d=[]:cn(h)||nn(h)?(d=l,nn(l)?d=pn(l):hn(l)&&!ln(l)||(d=sn(h))):u=!1}u&&(a.set(h,d),o(d,h,s,r,a),a.delete(h)),Qs(t,i,d)}},_n=le,bn=Us,vn=ks;var xn=function baseMerge$1(t,e,i,s,o){t!==e&&mn(e,(function(r,a){if(o||(o=new fn),_n(r))yn(t,e,a,i,baseMerge$1,s,o);else{var l=s?s(vn(t,a),r,a+"",t,e,o):void 0;void 0===l&&(l=r),gn(t,a,l)}}),bn)};var wn=function identity$2(t){return t};var Cn=function apply$1(t,e,i){switch(i.length){case 0:return t.call(e);case 1:return t.call(e,i[0]);case 2:return t.call(e,i[0],i[1]);case 3:return t.call(e,i[0],i[1],i[2])}return t.apply(e,i)},Sn=Math.max;var kn=function overRest$1(t,e,i){return e=Sn(void 0===e?t.length-1:e,0),function(){for(var s=arguments,o=-1,r=Sn(s.length-e,0),a=Array(r);++o<r;)a[o]=s[e+o];o=-1;for(var l=Array(e+1);++o<e;)l[o]=s[o];return l[e]=i(a),Cn(t,this,l)}};var Pn=function constant$1(t){return function(){return t}},En=yi,Mn=En?function(t,e){return En(t,"toString",{configurable:!0,enumerable:!1,value:Pn(e),writable:!0})}:wn,In=Date.now;var Tn=function shortOut$1(t){var e=0,i=0;return function(){var s=In(),o=16-(s-i);if(i=s,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(Mn),Bn=wn,Nn=kn,Dn=Tn;var $n=Et,An=Qi,On=Ds,Rn=le;var Ln=function baseRest$1(t,e){return Dn(Nn(t,e,Bn),t+"")},Fn=function isIterateeCall$1(t,e,i){if(!Rn(i))return!1;var s=typeof e;return!!("number"==s?An(i)&&On(e,i.length):"string"==s&&e in i)&&$n(i[e],t)};var zn=xn,jn=function createAssigner$1(t){return Ln((function(e,i){var s=-1,o=i.length,r=o>1?i[o-1]:void 0,a=o>2?i[2]:void 0;for(r=t.length>3&&"function"==typeof r?(o--,r):void 0,a&&Fn(i[0],i[1],a)&&(r=o<3?void 0:r,o=1),e=Object(e);++s<o;){var l=i[s];l&&t(e,l,s,r)}return e}))}((function(t,e,i){zn(t,e,i)}));class Entity extends X{static typeId="Entity";hasDerivedChildren(){return!0}entityFieldsComponent=[];constructor(t){super(Entity.arrangeParam(t)),this.syncEntityNameAndFields()}static arrangeParam(t){const e=jn({entityName:"Entity Name",fields:[],style:{strokeStyle:"#334155",fillStyle:"#ffffff",radius:8,lineWidth:1.5},headerStyle:{textColor:"#0f172a",backgroundColor:"#f1f5f9",fontSize:18,fontWeight:"bold",paddingTop:12,paddingLeft:14,paddingRight:14,paddingBottom:12},fieldStyle:{textColor:"#334155",fontSize:16,fontWeight:"normal",paddingTop:9,paddingLeft:14,paddingRight:14},dividerStyle:{strokeStyle:"#cbd5e1",fillStyle:"#cbd5e1",lineWidth:1}},t,{transformable:!1});return kt(e.entityName)&&(e.entityName="Entity Name"),kt(e.fields)&&(e.fields=[]),e}syncEntityNameAndFields(){if(this.entityNameComponent&&(this.removeChild(this.entityNameComponent),this.entityNameComponent=null),this.headerBackgroundComponent&&(this.removeChild(this.headerBackgroundComponent),this.headerBackgroundComponent=null),this.deviderLine&&(this.removeChild(this.deviderLine),this.deviderLine=null),this.entityFieldsComponent.length&&(this.removeChildren(this.entityFieldsComponent),this.entityFieldsComponent.length=0),this.state.entityName){if(this.entityNameComponent=new pt({left:0,top:0,text:this.state.entityName,style:{strokeStyle:this.state.headerStyle.textColor,fillStyle:this.state.headerStyle.textColor,fontSize:this.state.headerStyle.fontSize,fontWeight:this.state.headerStyle.fontWeight,paddingTop:this.state.headerStyle.paddingTop,paddingLeft:this.state.headerStyle.paddingLeft,paddingRight:this.state.headerStyle.paddingRight,paddingBottom:this.state.headerStyle.paddingBottom},interactive:!1,stroke:!1,showMinBoundingBox:!1,showMaxBoundingBox:!1}),this.state.headerStyle.backgroundColor&&"none"!==this.state.headerStyle.backgroundColor){const t=this.state.style.lineWidth||1.5,e=t/2;this.headerBackgroundComponent=new j({left:e,top:e,width:Math.max(this.state.width-t,0),height:Math.max(this.entityNameComponent.state.height-e,0),zIndex:this.entityNameComponent.state.zIndex-1,origin:"top-left",style:{fillStyle:this.state.headerStyle.backgroundColor,radius:Math.max((this.state.style.radius||0)-e,0),lineWidth:0},interactive:!1,stroke:!1,showMinBoundingBox:!1,showMaxBoundingBox:!1}),this.addChild(this.headerBackgroundComponent)}this.addChild(this.entityNameComponent),this.deviderLine=new at({left:0,top:0,points:[[0,0],[this.state.width,0]],style:{strokeStyle:this.state.dividerStyle.strokeStyle,fillStyle:this.state.dividerStyle.fillStyle,lineWidth:this.state.dividerStyle.lineWidth},interactive:!1}),this.addChild(this.deviderLine)}if(!kt(this.state.fields)){const t=this.state.fields.length;for(let e=0;e<t;e++){const i=this.state.fields[e],s=this.fieldDisplay(i),o=new pt({left:0,top:0,text:s.text,style:{strokeStyle:this.state.fieldStyle.textColor,fillStyle:this.state.fieldStyle.textColor,fontSize:this.state.fieldStyle.fontSize,fontWeight:this.state.fieldStyle.fontWeight,paddingTop:this.state.fieldStyle.paddingTop,paddingLeft:this.state.fieldStyle.paddingLeft,paddingRight:this.state.fieldStyle.paddingRight,paddingBottom:e===t-1?12:0},interactive:!1,stroke:!1,showMinBoundingBox:!1,showMaxBoundingBox:!1});this.entityFieldsComponent.push(o)}this.addChildren(this.entityFieldsComponent)}}fieldDisplay(t){const e=[];t.primary&&e.push("PK"),t.foreignKey&&e.push("FK");const i=[];t.unique&&i.push("UQ"),t.autoIncrement&&i.push("AI"),!1===t.nullable&&i.push("NN");const s=e.length?e.join(" ")+" ":"",o=t.type?`${t.type}${t.length?`(${t.length})`:""}`:"",r=i.length?" "+i.join(" "):"",a=void 0!==t.default?" = "+t.default:"",l=t.comment?" // "+t.comment:"";return{text:`${s}${t.name}${o?" "+o:""}${r}${a}${l}`}}calcComponentParams(){let t=this.state.width,e=0,i=0,s=0;this.entityNameComponent&&(s=this.entityNameComponent.state.height,e=s,t=Math.max(t,this.entityNameComponent.state.width),e+=this.deviderLine.state.height,i=e);for(let i=0;i<this.entityFieldsComponent.length;i++){const s=this.entityFieldsComponent[i];s.state.left=0,s.state.top=e,e+=s.state.height,t=Math.max(t,s.state.width)}if(this.deviderLine&&(this.deviderLine.state.points=[[0,i],[t,i]]),this.headerBackgroundComponent){const e=this.state.style.lineWidth||1.5,i=e/2;this.headerBackgroundComponent.state.left=i,this.headerBackgroundComponent.state.top=i,this.headerBackgroundComponent.state.width=Math.max(t-e,0),this.headerBackgroundComponent.state.height=Math.max(s-i,0)}const o=t,r=Math.max(e,this.state.height);return this.state.width=o,this.state.height=r,{width:o,height:r}}toEntityObject(){const t={name:this.state.entityName,columns:{}};return this.state.fields.forEach(e=>{const i={};void 0!==e.type&&(i.type=e.type),void 0!==e.length&&(i.length=e.length),e.primary&&(i.primary=!0),e.generated&&(i.generated=!0),e.autoIncrement&&(i.generated=!0,i.strategy="increment"),!1===e.nullable&&(i.nullable=!1),e.unique&&(i.unique=!0),void 0!==e.default&&(i.default=e.default),void 0!==e.comment&&(i.comment=e.comment),e.index&&(i.index=!0),t.columns[e.name]=i}),t}setState(t){const e=!kt(t.fields)||!kt(t.entityName);super.setState(t),e&&this.syncEntityNameAndFields()}addField(t){const e=[...this.state.fields||[],t];return this.setFields(e),this}removeField(t){const e=(this.state.fields||[]).filter(e=>e.name!==t);return this.setFields(e),this}setFields(t){return this.setState({fields:t}),this}}class Relation extends ICEVisioLink{static typeId="Relation";hasDerivedChildren(){return!0}constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const e=Relation.normalizeLinks(t||{}),i=e.relationType||"one-to-one",s=Relation.composeLabel(e,i);super({title:"Relation",relationType:i,referencedColumnName:"id",sourceField:"id",targetField:"id",arrow:e.arrow||Relation.defaultArrow(i),...e,label:s,labelStyle:{fontSize:14,fillStyle:"#334155",backgroundColor:"#ffffff",...e.labelStyle||{}}})}static defaultArrow(t){switch(t){case"one-to-many":return"end";case"many-to-one":return"start";case"many-to-many":case"one-to-one":default:return"none"}}static normalizeLinks(t){if(!t||!t.links)return t||{};const e={top:"T",right:"R",bottom:"B",left:"L",center:"C"},i={...t.links};return i.start&&e[i.start.position]&&(i.start={...i.start,position:e[i.start.position]}),i.end&&e[i.end.position]&&(i.end={...i.end,position:e[i.end.position]}),{...t,links:i}}static cardinalityLabel(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i={"one-to-many":["1","N"],"many-to-one":["N","1"],"many-to-many":["N","N"],"one-to-one":["1","1"]},[s,o]=i[t]||i["one-to-one"];return`${e.sourceCardinality||s} : ${e.targetCardinality||o}`}static composeLabel(t,e){return t.label?t.label:Relation.buildLabel(t,e)}static buildLabel(t,e){const i=[];t.onDelete&&i.push("ON DELETE "+t.onDelete),t.onUpdate&&i.push("ON UPDATE "+t.onUpdate);const s=Relation.cardinalityLabel(e,t);return i.length?`${s} (${i.join(", ")})`:s}toEntityObject(){const{title:t,relationType:e,referencedColumnName:i,sourceField:s,targetField:o,nullable:r,onDelete:a,onUpdate:l,joinTableName:h,fromKey:c,toKey:d}=this.state;let u,p,f,g,m,y;this.state.links&&this.state.links.start&&this.state.links.start.id&&(f=this.state.links.start.id,u=this.ice.findComponent(f),g=u.state.entityName),this.state.links&&this.state.links.end&&this.state.links.end.id&&(m=this.state.links.end.id,p=this.ice.findComponent(m),y=p.state.entityName);return{title:t,fromId:f,fromName:g,toId:m,toName:y,relationType:e,referencedColumnName:i,sourceField:s,targetField:o,nullable:!1!==r&&void 0,onDelete:a,onUpdate:l,joinTableName:h,fromKey:c,toKey:d}}}function typeIdOf(t){const e=t&&t.constructor;return e&&"string"==typeof e.typeId?e.typeId:void 0}function isEntity(t){return typeIdOf(t)===Entity.typeId}function isRelation(t){return typeIdOf(t)===Relation.typeId}const Xn=[{key:"display",type:"boolean"},{key:"zIndex",type:"number"},{key:"opacity",type:"number",doc:"子树不透明度(引擎 1.3 起)"},{key:"transform",type:"object"},{key:"origin",type:"string"},{key:"originX",type:"number"},{key:"originY",type:"number"},{key:"lineDash",type:"array"},{key:"lineDashOffset",type:"number"},{key:"lineDashFlow",type:"boolean"},{key:"lineDashFlowSpeed",type:"number"},{key:"lineBorder",type:"boolean"},{key:"lineBorderWidth",type:"number"},{key:"lineBorderColor",type:"string"},{key:"fill",type:"boolean"},{key:"stroke",type:"boolean"},{key:"linkable",type:"boolean"},{key:"transformable",type:"boolean"},{key:"animations",type:"object"}],Hn=[{key:"id",type:"string",required:!0},{key:"typeId",type:"string"},{key:"left",type:"number"},{key:"top",type:"number"},{key:"width",type:"number"},{key:"height",type:"number"},{key:"relationType",type:"string"},{key:"referencedColumnName",type:"string"},{key:"sourceField",type:"string"},{key:"targetField",type:"string"},{key:"nullable",type:"boolean"},{key:"onDelete",type:"string"},{key:"onUpdate",type:"string"},{key:"joinTableName",type:"string"},{key:"fromKey",type:"string"},{key:"toKey",type:"string"},{key:"sourceCardinality",type:"string"},{key:"targetCardinality",type:"string"},{key:"label",type:"string"},{key:"labelStyle",type:"object"},{key:"style",type:"object"},{key:"arrow",type:"string"},{key:"lineType",type:"string"},{key:"escapeDistance",type:"number"},{key:"routeType",type:"string"},{key:"routeOffset",type:"number"},{key:"curveType",type:"string"},{key:"linkShape",type:"string",doc:"连线形态(visio/bezier)"},{key:"lineDash",type:"array"},{key:"lineWidth",type:"number"},{key:"arrowLength",type:"number"},{key:"arrowAngel",type:"number"},{key:"arrowStyle",type:"string"},{key:"startPoint",type:"array"},{key:"endPoint",type:"array"},{key:"links",type:"object",validate:function validateLinks(t,e,i){["start","end"].forEach(s=>{const o=t[s];void 0!==o&&(o&&"object"==typeof o&&!Array.isArray(o)?(void 0!==o.id&&"string"!=typeof o.id&&i.push(`${e}.${s}.id must be a string when present`),void 0!==o.position&&"string"!=typeof o.position&&i.push(`${e}.${s}.position must be a string when present`)):i.push(`${e}.${s} must be an object when present`))})}},{key:"sourceId",type:"string",doc:"连线起点宿主 id(与 links.start.id 同步)"},{key:"targetId",type:"string",doc:"连线终点宿主 id(与 links.end.id 同步)"},{key:"draggable",type:"boolean"},{key:"interactive",type:"boolean"},{key:"showMinBoundingBox",type:"boolean"},{key:"showMaxBoundingBox",type:"boolean"}],Wn=[...[{key:"id",type:"string",required:!0},{key:"typeId",type:"string"},{key:"left",type:"number"},{key:"top",type:"number"},{key:"width",type:"number"},{key:"height",type:"number"},{key:"entityName",type:"string",required:!0},{key:"fields",type:"array",validate:function validateFields(t,e,i){t.forEach((t,s)=>{t&&"object"==typeof t&&!Array.isArray(t)?void 0!==t.name&&"string"!=typeof t.name&&i.push(`${e}[${s}].name must be a string when present`):i.push(`${e}[${s}] must be an object`)})}},{key:"style",type:"object"},{key:"headerStyle",type:"object"},{key:"fieldStyle",type:"object"},{key:"dividerStyle",type:"object"},{key:"draggable",type:"boolean"},{key:"interactive",type:"boolean"},{key:"showMinBoundingBox",type:"boolean"},{key:"showMaxBoundingBox",type:"boolean"}],...Xn],Vn=[...Hn,...Xn];function pickDocumentNode(t,e){const i={};e.forEach(e=>{const s=t?t[e.key]:void 0;void 0!==s&&(i[e.key]=s)});const s=t?t.data:void 0;return void 0!==s&&(i.data=s),i}function validateDocumentNode(t,e,i,s){t&&"object"==typeof t&&!Array.isArray(t)?i.forEach(i=>{const o=t[i.key];void 0!==o?!function typeMatches(t,e){switch(e){case void 0:case"any":return!0;case"array":return Array.isArray(t);case"object":return!!t&&"object"==typeof t&&!Array.isArray(t);case"number":return"number"==typeof t;case"boolean":return"boolean"==typeof t;case"string":default:return"string"==typeof t}}(o,i.type)?s.push(`${e}.${i.key} must be a ${i.type} when present`):i.validate&&i.validate(o,`${e}.${i.key}`,s):i.required&&s.push(`${e}.${i.key} is required`)}):s.push(e+" must be an object")}const Gn=[{key:"id",type:"string",required:!0},{key:"typeId",type:"string"}];function validateProjectSnapshot(t){const e=[];return!t||"object"!=typeof t||Array.isArray(t)?{valid:!1,errors:["root must be an object"]}:(void 0!==t.schemaVersion&&"number"!=typeof t.schemaVersion&&e.push("schemaVersion must be a number when present"),Array.isArray(t.entities)?t.entities.forEach((t,i)=>{validateNode(t,`entities[${i}]`,Entity.typeId,e)}):e.push("entities must be an array"),void 0===t.relations||Array.isArray(t.relations)?Array.isArray(t.relations)&&t.relations.forEach((t,i)=>{validateNode(t,`relations[${i}]`,Relation.typeId,e)}):e.push("relations must be an array when present"),{valid:0===e.length,errors:e})}function validateNode(t,e,i,s){if(!t||"object"!=typeof t||Array.isArray(t))return void s.push(e+" must be an object");const o=void 0===t.typeId?i:t.typeId;o!==Entity.typeId?o!==Relation.typeId?validateDocumentNode(t,e,Gn,s):validateDocumentNode(t,e,Vn,s):validateDocumentNode(t,e,Wn,s)}function validateSchema(t){const e=[],i=t.filter(isEntity),s=t.filter(isRelation),o=new Map;return i.forEach(t=>{const i=(t.state.entityName||"").trim();if(!i)return void e.push({level:"error",message:"存在未命名的 Entity",componentId:t.state.id});o.has(i)||o.set(i,[]),o.get(i).push(t);const s=t.state.fields||[];0===s.length&&e.push({level:"warning",message:`Entity "${i}" 没有任何字段`,componentId:t.state.id});const r=new Set;s.forEach(s=>{const o=(s.name||"").trim();o?r.has(o)?e.push({level:"error",message:`Entity "${i}" 存在重复字段 "${o}"`,componentId:t.state.id}):r.add(o):e.push({level:"error",message:`Entity "${i}" 存在未命名字段`,componentId:t.state.id}),s.type||e.push({level:"warning",message:`Entity "${i}" 的字段 "${o||"(未命名)"}" 未设置类型`,componentId:t.state.id})})}),o.forEach((t,i)=>{t.length>1&&e.push({level:"error",message:`存在重复的 Entity 名称 "${i}"`})}),s.forEach(t=>{const s=t.state.links||{},o=s.start&&s.start.id,r=s.end&&s.end.id,a=t.state.relationType;if(!o||!r)return void e.push({level:"error",message:"存在没有完整起点/终点的 Relation",componentId:t.state.id});const l=i.some(t=>t.state.id===o),h=i.some(t=>t.state.id===r);l&&h||e.push({level:"error",message:"Relation 连接到了不存在的 Entity",componentId:t.state.id}),a?"many-to-many"!==a||t.state.joinTableName||e.push({level:"warning",message:"many-to-many 关系建议设置 joinTableName",componentId:t.state.id}):e.push({level:"error",message:"Relation 未设置关系类型",componentId:t.state.id})}),e}function toWords(t){return function convertToString(t){const e=t||"";return"string"==typeof e?e:String(e)}(t).match(/[A-Z\xC0-\xD6\xD8-\xDE]?[a-z\xDF-\xF6\xF8-\xFF]+|[A-Z\xC0-\xD6\xD8-\xDE]+(?![a-z\xDF-\xF6\xF8-\xFF])|\d+/g)||[]}function toCamelCase(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i="";for(let s=0,o=t.length;s<o;s++){let o=t[s].toLowerCase();(e||0!==s)&&(o=o.substr(0,1).toUpperCase()+o.substr(1)),i+=o}return i}function camelCase(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return toCamelCase(toWords(t),e)}var Yn=[],Kn=[],Un={},qn={},Jn={};function sanitizeRule(t){return"string"==typeof t?new RegExp("^"+t+"$","i"):t}function restoreCase(t,e){return t===e?e:t===t.toLowerCase()?e.toLowerCase():t===t.toUpperCase()?e.toUpperCase():t[0]===t[0].toUpperCase()?e.charAt(0).toUpperCase()+e.substr(1).toLowerCase():e.toLowerCase()}function interpolate(t,e){return t.replace(/\$(\d{1,2})/g,(function(t,i){return e[i]||""}))}function replace(t,e){return t.replace(e[0],(function(i,s){var o=interpolate(e[1],arguments);return restoreCase(""===i?t[s-1]:i,o)}))}function sanitizeWord(t,e,i){if(!t.length||Un.hasOwnProperty(t))return e;for(var s=i.length;s--;){var o=i[s];if(o[0].test(e))return replace(e,o)}return e}function replaceWord(t,e,i){return function(s){var o=s.toLowerCase();return e.hasOwnProperty(o)?restoreCase(s,o):t.hasOwnProperty(o)?restoreCase(s,t[o]):sanitizeWord(o,s,i)}}function checkWord(t,e,i){return function(s){var o=s.toLowerCase();return!!e.hasOwnProperty(o)||!t.hasOwnProperty(o)&&sanitizeWord(o,o,i)===o}}function pluralize(t,e,i){return(i?e+" ":"")+(1===e?pluralize.singular(t):pluralize.plural(t))}pluralize.plural=replaceWord(Jn,qn,Yn),pluralize.isPlural=checkWord(Jn,qn,Yn),pluralize.singular=replaceWord(qn,Jn,Kn),pluralize.isSingular=checkWord(qn,Jn,Kn),pluralize.addPluralRule=function(t,e){Yn.push([sanitizeRule(t),e])},pluralize.addSingularRule=function(t,e){Kn.push([sanitizeRule(t),e])},pluralize.addUncountableRule=function(t){"string"!=typeof t?(pluralize.addPluralRule(t,"$0"),pluralize.addSingularRule(t,"$0")):Un[t.toLowerCase()]=!0},pluralize.addIrregularRule=function(t,e){e=e.toLowerCase(),t=t.toLowerCase(),Jn[t]=e,qn[e]=t},[["I","we"],["me","us"],["he","they"],["she","they"],["them","them"],["myself","ourselves"],["yourself","yourselves"],["itself","themselves"],["herself","themselves"],["himself","themselves"],["themself","themselves"],["is","are"],["was","were"],["has","have"],["this","these"],["that","those"],["echo","echoes"],["dingo","dingoes"],["volcano","volcanoes"],["tornado","tornadoes"],["torpedo","torpedoes"],["genus","genera"],["viscus","viscera"],["stigma","stigmata"],["stoma","stomata"],["dogma","dogmata"],["lemma","lemmata"],["schema","schemata"],["anathema","anathemata"],["ox","oxen"],["axe","axes"],["die","dice"],["yes","yeses"],["foot","feet"],["eave","eaves"],["goose","geese"],["tooth","teeth"],["quiz","quizzes"],["human","humans"],["proof","proofs"],["carve","carves"],["valve","valves"],["looey","looies"],["thief","thieves"],["groove","grooves"],["pickaxe","pickaxes"],["passerby","passersby"]].forEach((function(t){return pluralize.addIrregularRule(t[0],t[1])})),[[/s?$/i,"s"],[/[^\u0000-\u007F]$/i,"$0"],[/([^aeiou]ese)$/i,"$1"],[/(ax|test)is$/i,"$1es"],[/(alias|[^aou]us|t[lm]as|gas|ris)$/i,"$1es"],[/(e[mn]u)s?$/i,"$1s"],[/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i,"$1"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1i"],[/(alumn|alg|vertebr)(?:a|ae)$/i,"$1ae"],[/(seraph|cherub)(?:im)?$/i,"$1im"],[/(her|at|gr)o$/i,"$1oes"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i,"$1a"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i,"$1a"],[/sis$/i,"ses"],[/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i,"$1$2ves"],[/([^aeiouy]|qu)y$/i,"$1ies"],[/([^ch][ieo][ln])ey$/i,"$1ies"],[/(x|ch|ss|sh|zz)$/i,"$1es"],[/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i,"$1ices"],[/\b((?:tit)?m|l)(?:ice|ouse)$/i,"$1ice"],[/(pe)(?:rson|ople)$/i,"$1ople"],[/(child)(?:ren)?$/i,"$1ren"],[/eaux$/i,"$0"],[/m[ae]n$/i,"men"],["thou","you"]].forEach((function(t){return pluralize.addPluralRule(t[0],t[1])})),[[/s$/i,""],[/(ss)$/i,"$1"],[/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i,"$1fe"],[/(ar|(?:wo|[ae])l|[eo][ao])ves$/i,"$1f"],[/ies$/i,"y"],[/\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i,"$1ie"],[/\b(mon|smil)ies$/i,"$1ey"],[/\b((?:tit)?m|l)ice$/i,"$1ouse"],[/(seraph|cherub)im$/i,"$1"],[/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i,"$1"],[/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i,"$1sis"],[/(movie|twelve|abuse|e[mn]u)s$/i,"$1"],[/(test)(?:is|es)$/i,"$1is"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1us"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i,"$1um"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i,"$1on"],[/(alumn|alg|vertebr)ae$/i,"$1a"],[/(cod|mur|sil|vert|ind)ices$/i,"$1ex"],[/(matr|append)ices$/i,"$1ix"],[/(pe)(rson|ople)$/i,"$1rson"],[/(child)ren$/i,"$1"],[/(eau)x?$/i,"$1"],[/men$/i,"man"]].forEach((function(t){return pluralize.addSingularRule(t[0],t[1])})),["adulthood","advice","agenda","aid","aircraft","alcohol","ammo","analytics","anime","athletics","audio","bison","blood","bream","buffalo","butter","carp","cash","chassis","chess","clothing","cod","commerce","cooperation","corps","debris","diabetes","digestion","elk","energy","equipment","excretion","expertise","firmware","flounder","fun","gallows","garbage","graffiti","hardware","headquarters","health","herpes","highjinks","homework","housework","information","jeans","justice","kudos","labour","literature","machinery","mackerel","mail","media","mews","moose","music","mud","manga","news","only","personnel","pike","plankton","pliers","police","pollution","premises","rain","research","rice","salmon","scissors","series","sewage","shambles","shrimp","software","species","staff","swine","tennis","traffic","transportation","trout","tuna","wealth","welfare","whiting","wildebeest","wildlife","you",/pok[eé]mon$/i,/[^aeiou]ese$/i,/deer$/i,/fish$/i,/measles$/i,/o[iu]s$/i,/pox$/i,/sheep$/i].forEach(pluralize.addUncountableRule);const Qn={number:"int",int:"int",integer:"int",smallint:"smallint",bigint:"bigint",float:"float",double:"double",real:"real",decimal:"decimal",numeric:"numeric",string:"varchar",varchar:"varchar",char:"char",text:"text",boolean:"boolean",bool:"boolean",date:"date",datetime:"datetime",timestamp:"timestamp",time:"time",json:"json",jsonb:"jsonb",uuid:"uuid",enum:"enum",blob:"blob",binary:"blob","simple-array":"simple-array","simple-json":"simple-json"},Zn=["varchar","char","nvarchar","nchar","text","uuid"];function normalizeColumn(t){const e={},i=function mapColumnType(t){if(null==t||""===t)return;const e=String(t).toLowerCase();return Qn[e]||String(t)}(t.type);if(void 0!==i&&(e.type=i),void 0!==t.length&&null!==t.length&&""!==t.length){const s=String(t.length).trim();if("decimal"===i||"numeric"===i){const[t,i]=s.split(",").map(t=>t.trim());t&&(e.precision=Number(t)),i&&(e.scale=Number(i))}else i&&Zn.indexOf(i)>=0&&(e.length=t.length)}return t.primary&&(e.primary=!0),t.generated&&(e.generated=!0),t.autoIncrement&&(e.generated=!0,e.strategy="increment"),void 0!==t.strategy&&(e.strategy=t.strategy),!1===t.nullable&&(e.nullable=!1),t.unique&&(e.unique=!0),void 0!==t.default&&(e.default=t.default),void 0!==t.comment&&(e.comment=t.comment),t.index&&(e.index=!0),e}function normalizeColumns(t){const e={};return Object.keys(t||{}).forEach(i=>{e[i]=normalizeColumn(t[i])}),e}function buildJoinColumn(t,e){return{name:t||e||"id",referencedColumnName:e||"id"}}function toSchemaObject(t){const e=[...t],i=[],s={};for(let t=0;t<e.length;t++){const o=e[t];if(isRelation(o))i.push(o);else if(isEntity(o)){const t=o.toEntityObject();t.columns=normalizeColumns(t.columns),s[o.state.id]=t}}for(let t=0;t<i.length;t++){const e=i[t],{fromId:o,fromName:r,toId:a,toName:l,relationType:h,referencedColumnName:c,sourceField:d,targetField:u,nullable:p,onDelete:f,onUpdate:g,joinTableName:m,fromKey:y,toKey:_}=e.toEntityObject(),b=s[o],v=s[a];if(!b||!v)continue;b.relations||(b.relations={}),v.relations||(v.relations={});const x=y||camelCase(l),w=_||camelCase(r),C={};!1===p&&(C.nullable=!1),f&&(C.onDelete=f),g&&(C.onUpdate=g),"one-to-one"===h?(v.relations[w]={type:h,target:r,joinColumn:buildJoinColumn(u||c,d||c),...C},b.relations[x]={type:h,target:l,inverseSide:w}):"one-to-many"===h?(b.relations[x]={type:h,target:l,inverseSide:w},v.relations[w]={type:"many-to-one",target:r,joinColumn:buildJoinColumn(u||c,d||c),...C}):"many-to-one"===h?(b.relations[x]={type:h,target:l,joinColumn:buildJoinColumn(d||c,u||c),...C},v.relations[w]={type:"one-to-many",target:r,inverseSide:x}):"many-to-many"===h&&(b.relations[""+pluralize(x)]={type:h,target:l,joinTable:!m||{name:m}},v.relations[""+pluralize(w)]={type:h,target:r,inverseSide:""+pluralize(x)})}const o=[];for(const t in s)o.push(s[t]);return o}function toSchemaString(t){return JSON.stringify(toSchemaObject(t))}function createEmptyPath$1(t){const e=t.path2D&&t.path2D.constructor;return e?new e:null}class FlowDiamond extends z{static typeId="FlowDiamond";createPathObject(){const t=this.state.width,e=this.state.height,i=0-this.state.localOrigin[0],s=0-this.state.localOrigin[1],o=createEmptyPath$1(this);return o?(o.moveTo(i+t/2,s),o.lineTo(i+t,s+e/2),o.lineTo(i+t/2,s+e),o.lineTo(i,s+e/2),o.closePath(),this.path2D=o,this.path2D):this.path2D}}class FlowParallelogram extends z{static typeId="FlowParallelogram";createPathObject(){const t=this.state.width,e=this.state.height,i=Math.min(28,.18*t),s=0-this.state.localOrigin[0],o=0-this.state.localOrigin[1],r=createEmptyPath$1(this);return r?(r.moveTo(s+i,o),r.lineTo(s+t,o),r.lineTo(s+t-i,o+e),r.lineTo(s,o+e),r.closePath(),this.path2D=r,this.path2D):this.path2D}}function createEmptyPath(t){const e=t.path2D&&t.path2D.constructor;return e?new e:null}function localBox(t){return{w:t.state.width,h:t.state.height,x:0-t.state.localOrigin[0],y:0-t.state.localOrigin[1]}}class BpmnTaskIcon extends z{static typeId="BpmnTaskIcon";createPathObject(){const{w:t,h:e,x:i,y:s}=localBox(this),o=createEmptyPath(this);if(!o)return this.path2D;const r=i+t/2,a=s+e/2,l=Math.min(t,e)/2,h=this.state.taskType||"none";if("user"===h)o.moveTo(r,a-l),o.arc(r,a-.35*l,.34*l,0,2*Math.PI),o.moveTo(r-.62*l,a+.72*l),o.arc(r,a+.72*l,.62*l,Math.PI,0);else if("service"===h){const t=8;for(let e=0;e<t;e++){const i=e*Math.PI*2/t,s=r+Math.cos(i)*l*.55,h=a+Math.sin(i)*l*.55,c=r+Math.cos(i)*l,d=a+Math.sin(i)*l;o.moveTo(s,h),o.lineTo(c,d)}o.moveTo(r+.34*l,a),o.arc(r,a,.34*l,0,2*Math.PI)}else"script"===h?(o.moveTo(r-.7*l,a-.85*l),o.lineTo(r+.7*l,a-.85*l),o.lineTo(r+.7*l,a+.5*l),o.moveTo(r-.7*l,a-.85*l),o.lineTo(r-.7*l,a+.5*l),o.moveTo(r-.7*l,a+.6*l),o.lineTo(r-.25*l,a+.85*l),o.lineTo(r+.25*l,a+.6*l),o.lineTo(r+.7*l,a+.85*l)):"send"===h?(o.moveTo(r-.85*l,a-.55*l),o.lineTo(r+.85*l,a-.55*l),o.lineTo(r+.85*l,a+.55*l),o.lineTo(r-.85*l,a+.55*l),o.closePath(),o.moveTo(r-.85*l,a-.55*l),o.lineTo(r,a+.12*l),o.lineTo(r+.85*l,a-.55*l)):"receive"===h?(o.moveTo(r-.85*l,a-.55*l),o.lineTo(r+.85*l,a-.55*l),o.lineTo(r+.85*l,a+.55*l),o.lineTo(r-.85*l,a+.55*l),o.closePath()):"manual"===h&&(o.moveTo(r-.7*l,a+.6*l),o.lineTo(r-.45*l,a-.5*l),o.lineTo(r+.45*l,a-.5*l),o.lineTo(r+.7*l,a+.6*l),o.closePath());return this.path2D=o,this.path2D}}class BpmnSubprocessMarker extends z{static typeId="BpmnSubprocessMarker";createPathObject(){const{w:t,h:e,x:i,y:s}=localBox(this),o=createEmptyPath(this);return o?(o.moveTo(i,s),o.lineTo(i+t,s),o.lineTo(i+t,s+e),o.lineTo(i,s+e),o.closePath(),o.moveTo(i+t/2,s+.22*e),o.lineTo(i+t/2,s+.78*e),o.moveTo(i+.22*t,s+e/2),o.lineTo(i+.78*t,s+e/2),this.path2D=o,this.path2D):this.path2D}}class BpmnFlowMarker extends z{static typeId="BpmnFlowMarker";createPathObject(){const{w:t,h:e,x:i,y:s}=localBox(this),o=createEmptyPath(this);return o?("default"===(this.state.markerType||"conditional")?(o.moveTo(i+.2*t,s+.8*e),o.lineTo(i+.8*t,s+.2*e)):(o.moveTo(i+t/2,s),o.lineTo(i+t,s+e/2),o.lineTo(i+t/2,s+e),o.lineTo(i,s+e/2),o.closePath()),this.path2D=o,this.path2D):this.path2D}}const to={terminator:{label:"开始 / 结束",width:180,height:60,fill:"#dcfce7",stroke:"#16a34a",radius:30,shape:"rect"},process:{label:"处理",width:220,height:80,fill:"#e0e7ff",stroke:"#4f46e5",radius:10,shape:"rect"},decision:{label:"判定",width:200,height:120,fill:"#fef3c7",stroke:"#d97706",shape:"diamond"},io:{label:"输入 / 输出",width:220,height:80,fill:"#e0f2fe",stroke:"#0284c7",shape:"parallelogram"},bpmnEvent:{label:"事件",width:56,height:56,fill:"#ffffff",stroke:"#0f172a",shape:"event",lineWidth:1.5,eventKind:"start",trigger:"none",labelPlacement:"top-left"},bpmnTask:{label:"任务",width:180,height:90,fill:"#ffffff",stroke:"#0f172a",radius:8,shape:"rect",taskType:"none",labelPlacement:"center"},bpmnGateway:{label:"网关",width:70,height:70,fill:"#ffffff",stroke:"#0f172a",shape:"gateway",gatewayType:"exclusive",labelPlacement:"top-left"},bpmnSubprocess:{label:"子流程",width:200,height:110,fill:"#ffffff",stroke:"#0f172a",radius:8,shape:"rect",labelPlacement:"center"},bpmnDataObject:{label:"数据对象",width:130,height:80,fill:"#ffffff",stroke:"#0f172a",shape:"dataObject",labelPlacement:"center"},bpmnAnnotation:{label:"注释",width:200,height:80,fill:"#ffffff",stroke:"#64748b",shape:"annotation",lineDash:[],labelPlacement:"center"},bpmnPool:{label:"池",width:900,height:260,fill:"#f8fafc",stroke:"#64748b",shape:"lane",band:"top",bandSize:32,labelPlacement:"top-left"},bpmnLane:{label:"泳道",width:900,height:130,fill:"#ffffff",stroke:"#94a3b8",shape:"lane",band:"left",bandSize:32,labelPlacement:"top-left",transparent:!0}},eo={rect:j,diamond:FlowDiamond,parallelogram:FlowParallelogram,event:class BpmnEventShape extends z{static typeId="BpmnEventShape";createPathObject(){const{w:t,h:e,x:i,y:s}=localBox(this),o=createEmptyPath(this);if(!o)return this.path2D;const r=i+t/2,a=s+e/2,l=Math.min(t,e)/2,h=this.state.eventKind||"start";o.arc(r,a,l,0,2*Math.PI),"intermediate"!==h&&"end"!==h||(o.moveTo(r+.84*l,a),o.arc(r,a,.84*l,0,2*Math.PI));const c=this.state.trigger||"none";if("message"===c){const t=1.1*l,e=.78*l;o.moveTo(r-t/2,a-e/2),o.lineTo(r+t/2,a-e/2),o.lineTo(r+t/2,a+e/2),o.lineTo(r-t/2,a+e/2),o.closePath(),o.moveTo(r-t/2,a-e/2),o.lineTo(r,a+.08*e),o.lineTo(r+t/2,a-e/2)}else if("timer"===c){const t=.52*l;o.moveTo(r+t,a),o.arc(r,a,t,0,2*Math.PI),o.moveTo(r,a),o.lineTo(r,a-.62*t),o.moveTo(r,a),o.lineTo(r+.5*t,a)}else"error"===c?(o.moveTo(r+.34*l,a-.62*l),o.lineTo(r-.42*l,a+.06*l),o.lineTo(r-.02*l,a+.06*l),o.lineTo(r-.3*l,a+.66*l),o.lineTo(r+.44*l,a-.02*l),o.lineTo(r+.04*l,a-.02*l),o.closePath()):"terminate"===c&&(o.moveTo(r+.5*l,a),o.arc(r,a,.5*l,0,2*Math.PI));return this.path2D=o,this.path2D}},gateway:class BpmnGatewayShape extends z{static typeId="BpmnGatewayShape";createPathObject(){const{w:t,h:e,x:i,y:s}=localBox(this),o=createEmptyPath(this);if(!o)return this.path2D;const r=i+t/2,a=s+e/2,l=t/2,h=e/2;o.moveTo(r,a-h),o.lineTo(r+l,a),o.lineTo(r,a+h),o.lineTo(r-l,a),o.closePath();const c=this.state.gatewayType||"exclusive",d=.42*Math.min(l,h);if("exclusive"===c)o.moveTo(r-d,a-d),o.lineTo(r+d,a+d),o.moveTo(r+d,a-d),o.lineTo(r-d,a+d);else if("parallel"===c)o.moveTo(r-d,a),o.lineTo(r+d,a),o.moveTo(r,a-d),o.lineTo(r,a+d);else if("inclusive"===c)o.moveTo(r+d,a),o.arc(r,a,d,0,2*Math.PI);else if("event"===c){const t=1.15*d;for(let e=0;e<5;e++){const i=-Math.PI/2+e*Math.PI*2/5,s=r+Math.cos(i)*t,l=a+Math.sin(i)*t;0===e?o.moveTo(s,l):o.lineTo(s,l)}o.closePath()}return this.path2D=o,this.path2D}},dataObject:class BpmnDataObjectShape extends z{static typeId="BpmnDataObjectShape";createPathObject(){const{w:t,h:e,x:i,y:s}=localBox(this),o=createEmptyPath(this);if(!o)return this.path2D;const r=Math.min(14,.22*t,.32*e);return o.moveTo(i,s),o.lineTo(i+t-r,s),o.lineTo(i+t,s+r),o.lineTo(i+t,s+e),o.lineTo(i,s+e),o.closePath(),o.moveTo(i+t-r,s),o.lineTo(i+t-r,s+r),o.lineTo(i+t,s+r),this.path2D=o,this.path2D}},annotation:class BpmnAnnotationShape extends z{static typeId="BpmnAnnotationShape";createPathObject(){const{w:t,h:e,x:i,y:s}=localBox(this),o=createEmptyPath(this);if(!o)return this.path2D;const r=Math.min(16,.3*t);return o.moveTo(i,s),o.lineTo(i+t,s),o.lineTo(i+t,s+e),o.lineTo(i,s+e),o.closePath(),o.moveTo(i+r,s),o.lineTo(i,s),o.lineTo(i,s+e),o.lineTo(i+r,s+e),this.path2D=o,this.path2D}},lane:class BpmnLaneShape extends z{static typeId="BpmnLaneShape";createPathObject(){const{w:t,h:e,x:i,y:s}=localBox(this),o=createEmptyPath(this);if(!o)return this.path2D;const r=Math.min(this.state.bandSize||30,.4*t,.4*e);return o.moveTo(i,s),o.lineTo(i+t,s),o.lineTo(i+t,s+e),o.lineTo(i,s+e),o.closePath(),"top"===(this.state.band||"left")?(o.moveTo(i,s+r),o.lineTo(i+t,s+r)):(o.moveTo(i+r,s),o.lineTo(i+r,s+e)),this.path2D=o,this.path2D}}};class FlowNode extends X{static typeId="FlowNode";shapeComponent=null;labelComponent=null;decorationComponents=[];hasDerivedChildren(){return!0}constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const e=to[t.kind]?t.kind:"process",i=to[e];super({kind:e,title:i.label,fillColor:i.fill,strokeColor:i.stroke,textColor:"#0f172a",fontSize:14,width:i.width,height:i.height,fill:!1,stroke:!1,draggable:!0,interactive:!0,transformable:!1,...t}),this.__buildShape()}__buildShape(){this.shapeComponent&&this.removeChild(this.shapeComponent),this.labelComponent&&this.removeChild(this.labelComponent),this.decorationComponents&&this.decorationComponents.length&&(this.removeChildren(this.decorationComponents),this.decorationComponents.length=0);const t=to[this.state.kind]||to.process,e=eo[t.shape]||j;this.shapeComponent=new e({left:0,top:0,width:this.state.width,height:this.state.height,radius:t.radius||0,lineWidth:t.lineWidth||1.5,lineDash:this.state.lineDash||t.lineDash||[],eventKind:this.state.eventKind||t.eventKind,trigger:this.state.trigger||t.trigger,gatewayType:this.state.gatewayType||t.gatewayType,taskType:this.state.taskType||t.taskType,band:t.band,bandSize:t.bandSize,fill:!t.transparent,interactive:!1,showMinBoundingBox:!1,showMaxBoundingBox:!1,style:{fillStyle:this.state.fillColor||t.fill,strokeStyle:this.state.strokeColor||t.stroke,lineWidth:t.lineWidth||1.5}}),this.__buildDecorations(t);const i="top-left"===t.labelPlacement;this.labelComponent=new pt({left:i?10:0,top:i?"top"===t.band?18:16:0,width:i?Math.max(this.state.width-20,20):this.state.width,height:i?18:this.state.height,text:String(this.state.title||""),wrap:!i,maxLines:2,interactive:!1,stroke:!1,showMinBoundingBox:!1,showMaxBoundingBox:!1,style:{fontSize:this.state.fontSize||(i?13:14),fillStyle:this.state.textColor||"#0f172a",textAlign:i?"left":"center",textBaseline:"middle",fontWeight:i?"bold":"normal",paddingLeft:i?0:12,paddingRight:i?0:12}}),this.addChild(this.shapeComponent),this.addChild(this.labelComponent)}__buildDecorations(t){const e=this.state.kind,i=[],s=this.state.strokeColor||t.stroke;if("bpmnTask"===e||"bpmnSubprocess"===e){const e=this.state.taskType||t.taskType||"none";"none"!==e&&i.push(new BpmnTaskIcon({left:8,top:8,width:14,height:14,stroke:!0,fill:!1,interactive:!1,showMinBoundingBox:!1,showMaxBoundingBox:!1,taskType:e,style:{strokeStyle:s,lineWidth:1.4}}))}"bpmnSubprocess"===e&&i.push(new BpmnSubprocessMarker({left:(this.state.width-14)/2,top:this.state.height-20,width:14,height:14,stroke:!0,fill:!1,interactive:!1,showMinBoundingBox:!1,showMaxBoundingBox:!1,style:{strokeStyle:s,lineWidth:1.4}})),i.length&&(i.forEach(t=>this.addChild(t)),this.decorationComponents=i)}applyPatch(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const e=void 0!==t.kind||void 0!==t.fillColor||void 0!==t.strokeColor||void 0!==t.textColor||void 0!==t.fontSize||void 0!==t.eventKind||void 0!==t.trigger||void 0!==t.gatewayType||void 0!==t.taskType||void 0!==t.width||void 0!==t.height;return this.setState(t),e?this.__buildShape():this.labelComponent&&this.labelComponent.setState({text:String(this.state.title||"")}),this.dirty=!0,this}}class FlowEdge extends ICEVisioLink{static typeId="FlowEdge";hasDerivedChildren(){return!0}constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super({title:"Edge",arrow:"end",linkShape:"visio",lineType:"solid",linkable:!1,draggable:!1,interactive:!0,transformable:!1,startPoint:[0,0],endPoint:[10,10],label:"",...t,style:{strokeStyle:"#475569",fillStyle:"#475569",lineWidth:1.6,...t.style||{}},labelStyle:{fontSize:12,fillStyle:"#334155",backgroundColor:"#ffffff",paddingLeft:4,paddingRight:4,...t.labelStyle||{}}}),this.applyPatch({flowType:this.state.flowType,condition:this.state.condition,isDefault:this.state.isDefault})}applyPatch(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const e={...this.state,...t},i=e.flowType||"sequence",s="message"===i?{lineDash:[7,4],arrowStyle:"hollow",lineWidth:e.lineWidth||1.4}:"association"===i?{lineDash:[2,3],arrow:"none",arrowStyle:"hollow",lineWidth:e.lineWidth||1.2}:{arrow:e.arrow||"end",arrowStyle:"filled",lineDash:[],lineWidth:e.lineWidth||1.6};return this.setState({...t,...s}),this.dirty=!0,this}}function validateFlowSnapshot(t){const e=[];return!t||"object"!=typeof t||Array.isArray(t)?{valid:!1,errors:["root must be an object"]}:void 0!==t.scene?(!t.scene||"object"!=typeof t.scene||Array.isArray(t.scene)?e.push("scene must be an object when present"):Array.isArray(t.scene.childNodes)||e.push("scene.childNodes must be an array"),{valid:0===e.length,errors:e}):(Array.isArray(t.nodes)?t.nodes.forEach((t,i)=>{const s=`nodes[${i}]`;t&&"object"==typeof t&&!Array.isArray(t)?("string"!=typeof t.id&&e.push(s+".id must be a string"),void 0!==t.kind&&"string"!=typeof t.kind&&e.push(s+".kind must be a string when present"),void 0!==t.left&&"number"!=typeof t.left&&e.push(s+".left must be a number when present"),void 0!==t.top&&"number"!=typeof t.top&&e.push(s+".top must be a number when present")):e.push(s+" must be an object")}):e.push("nodes must be an array"),void 0===t.edges||Array.isArray(t.edges)?Array.isArray(t.edges)&&t.edges.forEach((t,i)=>{const s=`edges[${i}]`;t&&"object"==typeof t&&!Array.isArray(t)?(["sourceId","targetId"].forEach(i=>{void 0!==t[i]&&null!==t[i]&&"string"!=typeof t[i]&&e.push(`${s}.${i} must be a string or null when present`)}),void 0!==t.label&&"string"!=typeof t.label&&e.push(s+".label must be a string when present"),void 0!==t.linkShape&&"visio"!==t.linkShape&&"bezier"!==t.linkShape&&e.push(s+'.linkShape must be "visio" or "bezier" when present')):e.push(s+" must be an object")}):e.push("edges must be an array when present"),{valid:0===e.length,errors:e})}class FlowDesigner{selectedId=null;__undoStack=[];__redoStack=[];__historyEnabled=!0;__maxHistory=100;__listeners=[];__mousedownHandler=t=>this.__handleMouseDown(t);__moveSession=!1;__moveEmitQueued=!1;__beforeMoveHandler=()=>this.__onBeforeMove();__afterMoveHandler=()=>this.__onAfterMove();__mouseupHandler=()=>this.__endMoveSession();constructor(t){this.ice=t,this.ice.registerType(FlowNode.typeId,FlowNode),this.ice.registerType(FlowEdge.typeId,FlowEdge),this.ice.evtBus.on("mousedown",this.__mousedownHandler,this),this.ice.evtBus.on("mouseup",this.__mouseupHandler,this)}get nodes(){return this.__flatten().filter(t=>t.constructor&&t.constructor.typeId===FlowNode.typeId)}get edges(){return this.__flatten().filter(t=>t.constructor&&t.constructor.typeId===FlowEdge.typeId)}__flatten(){const t=[],walk=e=>{e.forEach(e=>{t.push(e),e.childNodes&&e.childNodes.length&&walk(e.childNodes)})};return walk(this.ice.childNodes||[]),t}get selected(){return this.selectedId?this.ice.findComponent(this.selectedId):null}subscribe(t){return"function"!=typeof t?()=>{}:(this.__listeners.push(t),()=>{const e=this.__listeners.indexOf(t);-1!==e&&this.__listeners.splice(e,1)})}__emitChange(){if(!this.__listeners.length)return;const t=this.serialize();this.__listeners.slice().forEach(e=>e(t,this))}__attachNodeListeners(t){t&&"function"==typeof t.on&&(t.on("BEFORE_MOVE",this.__beforeMoveHandler,this),t.on("AFTER_MOVE",this.__afterMoveHandler,this))}__detachNodeListeners(t){t&&"function"==typeof t.off&&(t.off("BEFORE_MOVE",this.__beforeMoveHandler,this),t.off("AFTER_MOVE",this.__afterMoveHandler,this))}__onBeforeMove(){this.__moveSession||(this.__moveSession=!0,this.__captureHistory())}__onAfterMove(){if(this.__moveEmitQueued)return;this.__moveEmitQueued=!0;const flush=()=>{this.__moveEmitQueued=!1,this.__emitChange()};"function"==typeof requestAnimationFrame?requestAnimationFrame(flush):setTimeout(flush,16)}__endMoveSession(){this.__moveSession=!1}select(t){return this.selectedId=t,this.__emitChange(),this}__defaultPlacement(t,e){const i=this.nodes;if(!i.length)return{left:120,top:120};let s=1/0,o=-1/0;i.forEach(t=>{const e=t.getMinBoundingBox(!0);s=Math.min(s,e.tl[0]),o=Math.max(o,e.br[1])});const r=i.length;return{left:s+r%4*280,top:o+80+Math.floor(r/4)*(e+90)}}createNode(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.__captureHistory();const i=new FlowNode({kind:t,...e});if(void 0===e.left||void 0===e.top){const t=this.__defaultPlacement(i.state.width,i.state.height);i.setState({left:void 0===e.left?t.left:e.left,top:void 0===e.top?t.top:e.top})}return this.ice.addChild(i),this.__attachNodeListeners(i),this.selectedId=i.state.id,this.__emitChange(),i}__slotPoint(t,e){const i=t.getMinBoundingBox(!0);switch(e){case"T":return[...i.tc];case"R":return[...i.rc];case"B":return[...i.bc];case"L":return[...i.lc];case"C":default:return[...i.center]}}createEdge(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const e=t.sourceId?this.ice.findComponent(t.sourceId):null,i=t.targetId?this.ice.findComponent(t.targetId):null;if(!e||!i)throw new Error("连接两端必须是已存在的节点");this.__captureHistory();const s=t.sourcePort||"B",o=t.targetPort||"T",r=new FlowEdge({links:{start:{id:t.sourceId,position:s},end:{id:t.targetId,position:o}},startPoint:this.__slotPoint(e,s),endPoint:this.__slotPoint(i,o),label:t.label||"",linkShape:t.linkShape||"visio",flowType:t.flowType||"sequence",condition:t.condition||"",isDefault:!!t.isDefault,style:t.style,labelStyle:t.labelStyle});return this.ice.addChild(r),this.selectedId=r.state.id,this.__emitChange(),r}updateNode(t,e){const i=this.ice.findComponent(t);return i&&i.constructor.typeId===FlowNode.typeId&&(this.__captureHistory(),i.applyPatch(e),this.__emitChange()),i}updateEdge(t,e){const i=this.ice.findComponent(t);return i&&i.constructor.typeId===FlowEdge.typeId&&(this.__captureHistory(),"function"==typeof i.applyPatch?i.applyPatch(e):(i.setState(e),i.dirty=!0),this.__emitChange()),i}remove(t){const e=this.ice.findComponent(t);e&&(this.__captureHistory(),e.constructor.typeId===FlowNode.typeId&&(this.__detachNodeListeners(e),this.edges.filter(e=>{const i=e.state.links||{};return i.start&&i.start.id===t||i.end&&i.end.id===t}).forEach(t=>this.ice.removeChild(t))),e.parentNode&&"function"==typeof e.parentNode.removeChild?e.parentNode.removeChild(e):this.ice.removeChild(e),this.selectedId===t&&(this.selectedId=null),this.__emitChange())}clear(){this.__captureHistory(),this.ice.clearAll(),this.selectedId=null,this.__emitChange()}serialize(){return JSON.stringify(this.toSnapshot())}toSnapshot(){const t=this.__serializer().toJSONObject();return{version:2,kind:"flowchart",scene:{version:t.version,childNodes:t.childNodes}}}__serializer(){const t=this.ice;return t.serializer||new Serializer(t)}__deserializer(){const t=this.ice;return t.deserializer||new Deserializer(t)}load(t){if(!t)return{loaded:!1,nodes:0,edges:0,skipped:[]};let e;try{e=JSON.parse(t)}catch(t){throw new Error(`Invalid flow snapshot: 不是合法 JSON(${t instanceof Error?t.message:String(t)})`)}if(!e||"object"!=typeof e)return{loaded:!1,nodes:0,edges:0,skipped:[]};const i=!!e.scene;if(!i&&!Array.isArray(e.nodes))return{loaded:!1,nodes:0,edges:0,skipped:[]};const s=validateFlowSnapshot(e);if(!s.valid)throw new Error("Invalid flow snapshot:\n"+s.errors.join("\n"));this.__captureHistory();const o=i?this.__applyEngineScene(e.scene):this.__clearAndBuild(e);return this.__emitChange(),o}__applyEngineScene(t){this.ice.clearAll(),this.selectedId=null;const e=this.__deserializer();e.fromJSONObject({version:t.version,childNodes:t.childNodes});const i={loaded:!0,nodes:this.nodes.length,edges:this.edges.length,skipped:[...e.unknownTypes||[]]};return this.nodes.forEach(t=>this.__attachNodeListeners(t)),i}__clearAndBuild(t){this.ice.clearAll(),this.selectedId=null;const e={loaded:!0,nodes:0,edges:0,skipped:[]};return(t.nodes||[]).forEach(t=>{if(void 0!==t.typeId&&t.typeId!==FlowNode.typeId)return void e.skipped.push(String(t.typeId));const i=new FlowNode(t);delete i.state.typeId,this.ice.addChild(i),this.__attachNodeListeners(i),e.nodes+=1}),(t.edges||[]).forEach(t=>{if(void 0!==t.typeId&&t.typeId!==FlowEdge.typeId)return void e.skipped.push(String(t.typeId));const i=t.sourceId||t.links&&t.links.start&&t.links.start.id||null,s=t.targetId||t.links&&t.links.end&&t.links.end.id||null,o=t.sourcePort||t.links&&t.links.start&&t.links.start.position||"B",r=t.targetPort||t.links&&t.links.end&&t.links.end.position||"T",a=i&&s?{start:{id:i,position:o},end:{id:s,position:r}}:t.links,l=new FlowEdge({...t,links:a,startPoint:t.startPoint||[0,0],endPoint:t.endPoint||[10,10]});delete l.state.typeId,this.ice.addChild(l),e.edges+=1}),e}fitViewport(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:80;const e=this.nodes,i=this.ice.canvasWidth||0,s=this.ice.canvasHeight||0;if(!e.length||!i||!s)return;let o=1/0,r=1/0,a=-1/0,l=-1/0;e.forEach(t=>{const e=t.getMinBoundingBox(!0);o=Math.min(o,e.tl[0]),r=Math.min(r,e.tl[1]),a=Math.max(a,e.br[0]),l=Math.max(l,e.br[1])});const h=Math.max(a-o,1),c=Math.max(l-r,1),d=Math.min((i-2*t)/h,(s-2*t)/c,1.25),u=(i-h*d)/2-o*d,p=(s-c*d)/2-r*d;this.ice.setViewport(d,u,p)}canUndo(){return this.__undoStack.length>0}toSvg(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return exportSvg(this.ice,t)}canRedo(){return this.__redoStack.length>0}captureHistory(){this.__captureHistory()}resetHistory(){this.__undoStack.length=0,this.__redoStack.length=0}__captureHistory(){this.__historyEnabled&&(this.__undoStack.push(this.serialize()),this.__undoStack.length>this.__maxHistory&&this.__undoStack.shift(),this.__redoStack.length=0)}__applySnapshot(t){const e=JSON.parse(t);e&&e.scene?this.__applyEngineScene(e.scene):this.__clearAndBuild(e)}undo(){if(!this.canUndo())return;const t=this.serialize(),e=this.__undoStack.pop();this.__redoStack.push(t),this.__historyEnabled=!1;try{this.__applySnapshot(e)}catch(t){throw this.__redoStack.pop(),this.__undoStack.push(e),t}finally{this.__historyEnabled=!0}this.__emitChange()}redo(){if(!this.canRedo())return;const t=this.serialize(),e=this.__redoStack.pop();this.__undoStack.push(t),this.__historyEnabled=!1;try{this.__applySnapshot(e)}catch(t){throw this.__undoStack.pop(),this.__redoStack.push(e),t}finally{this.__historyEnabled=!0}this.__emitChange()}__handleMouseDown(t){const e=t&&t.param&&t.param.component;if(!e)return;let i=e;for(;i;){const t=i.constructor&&i.constructor.typeId;if(t===FlowNode.typeId||t===FlowEdge.typeId)return void this.select(i.state.id);i=i.parentNode}}dispose(){this.ice.evtBus.off("mousedown",this.__mousedownHandler,this),this.ice.evtBus.off("mouseup",this.__mouseupHandler,this),this.nodes.forEach(t=>this.__detachNodeListeners(t))}}function endpointId(t,e){return((t.state.links||{})[e]||{}).id}function boxOf(t){const e=t.getMinBoundingBox(!0);return{x0:e.tl[0],y0:e.tl[1],x1:e.br[0],y1:e.br[1]}}function contains(t,e){const i=(e.x0+e.x1)/2,s=(e.y0+e.y1)/2;return i>=t.x0&&i<=t.x1&&s>=t.y0&&s<=t.y1}function owningPool(t,e){const i=boxOf(t),s=e.filter(t=>"bpmnPool"===t.state.kind);for(const t of s)if(contains(boxOf(t),i))return t;return null}function validateBpmn(t){const e=[],i=t.nodes||[],s=t.edges||[],o=new Map;i.forEach(t=>o.set(t.state.id,t));const r=i.filter(t=>!!t&&-1!==["bpmnEvent","bpmnTask","bpmnGateway","bpmnSubprocess"].indexOf(t.state.kind)),a=s.filter(t=>"sequence"===(t.state.flowType||"sequence")),l=s.filter(t=>"message"===t.state.flowType),h=new Map,c=new Map;r.forEach(t=>{h.set(t.state.id,[]),c.set(t.state.id,[])}),a.forEach(t=>{const e=endpointId(t,"start"),i=endpointId(t,"end"),s=h.get(e),o=c.get(i);s&&s.push(t),o&&o.push(t)}),r.forEach(t=>{const i=t.state.kind,s=t.state.eventKind,o=h.get(t.state.id)||[],r=c.get(t.state.id)||[];if("bpmnEvent"===i&&"start"===s&&(r.length&&e.push({level:"error",code:"start-incoming",componentId:t.state.id,message:`开始事件「${t.state.title}」不能有流入的顺序流`}),o.length||e.push({level:"error",code:"start-no-outgoing",componentId:t.state.id,message:`开始事件「${t.state.title}」缺少流出的顺序流`})),"bpmnEvent"===i&&"end"===s&&(o.length&&e.push({level:"error",code:"end-outgoing",componentId:t.state.id,message:`结束事件「${t.state.title}」不能有流出的顺序流`}),r.length||e.push({level:"warning",code:"end-no-incoming",componentId:t.state.id,message:`结束事件「${t.state.title}」没有流入的顺序流(不可达)`})),"bpmnGateway"===i){const i=t.state.gatewayType||"exclusive";o.length<1&&e.push({level:"error",code:"gateway-no-outgoing",componentId:t.state.id,message:`网关「${t.state.title}」至少要有一条流出顺序流`}),"exclusive"!==i&&o.length<2&&e.push({level:"warning",code:"gateway-too-few-branches",componentId:t.state.id,message:`${{parallel:"并行",inclusive:"包容",event:"事件"}[i]||i}网关「${t.state.title}」通常应有 ≥2 条出边`});const s=o.filter(t=>t.state.isDefault);s.length>1&&e.push({level:"error",code:"gateway-multi-default",componentId:t.state.id,message:`网关「${t.state.title}」只能有一条默认流(当前 ${s.length} 条)`}),s.length&&"exclusive"!==i&&"inclusive"!==i&&e.push({level:"warning",code:"gateway-default-on-and",componentId:t.state.id,message:`并行网关「${t.state.title}」不应设置默认流`})}r.length||o.length||"bpmnPool"===i||"bpmnLane"===i||"bpmnAnnotation"===i||"bpmnEvent"===i&&"start"===s||e.push({level:"warning",code:"isolated-node",componentId:t.state.id,message:`「${t.state.title}」没有连任何顺序流`})});i.filter(t=>"bpmnPool"===t.state.kind).forEach(t=>{const i=boxOf(t),s=r.filter(t=>contains(i,boxOf(t))),o=s.filter(t=>"bpmnEvent"===t.state.kind&&"start"===t.state.eventKind);s.length&&!o.length&&e.push({level:"error",code:"pool-no-start",componentId:t.state.id,message:`池「${t.state.title}」里没有开始事件`})}),a.forEach(t=>{const s=o.get(endpointId(t,"start")),r=o.get(endpointId(t,"end"));if(!s||!r)return;owningPool(s,i)!==owningPool(r,i)&&e.push({level:"error",code:"sequence-flow-cross-pool",componentId:t.state.id,message:`顺序流不能跨池(「${s.state.title}」→「${r.state.title}」);跨参与者请用消息流`})}),l.forEach(t=>{const s=o.get(endpointId(t,"start")),r=o.get(endpointId(t,"end"));if(!s||!r)return;const a=owningPool(s,i),l=owningPool(r,i);a&&l&&a===l&&e.push({level:"warning",code:"message-flow-same-pool",componentId:t.state.id,message:"消息流通常用于跨池(不同参与者)之间的通信"})});const d=new Set,u=r.filter(t=>"bpmnEvent"===t.state.kind&&"start"===t.state.eventKind).map(t=>t.state.id);for(u.forEach(t=>d.add(t));u.length;){const t=u.shift();(h.get(t)||[]).forEach(t=>{const e=endpointId(t,"end");e&&!d.has(e)&&(d.add(e),u.push(e))})}return r.forEach(t=>{d.has(t.state.id)||e.push({level:"warning",code:"unreachable-node",componentId:t.state.id,message:`「${t.state.title}」从开始事件出发不可达`})}),e}const io="http://www.omg.org/spec/BPMN/20100524/MODEL",so="http://www.omg.org/spec/BPMN/20100524/DI",no="http://www.omg.org/spec/DD/20100524/DC",oo="http://www.omg.org/spec/DD/20100524/DI";function escapeXml(t){return String(t??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}function localName(t){return(t&&(t.localName||t.nodeName||"")).split(":").pop()}function rectOf(t){const e=t.getMinBoundingBox(!0);return{x0:e.tl[0],y0:e.tl[1],x1:e.br[0],y1:e.br[1]}}function centerInside(t,e){const i=(e.x0+e.x1)/2,s=(e.y0+e.y1)/2;return i>=t.x0&&i<=t.x1&&s>=t.y0&&s<=t.y1}function elementNameForNode(t){const e=t.state.kind;if("bpmnEvent"===e){const e=t.state.eventKind||"start";return"end"===e?"endEvent":"intermediate"===e?"intermediateThrowEvent":"startEvent"}if("bpmnGateway"===e){return{exclusive:"exclusiveGateway",parallel:"parallelGateway",inclusive:"inclusiveGateway",event:"eventBasedGateway"}[t.state.gatewayType||"exclusive"]}if("bpmnSubprocess"===e)return"subProcess";if("bpmnDataObject"===e)return"dataObjectReference";if("bpmnAnnotation"===e)return"textAnnotation";if("bpmnTask"===e||"process"===e){return{none:"task",user:"userTask",service:"serviceTask",script:"scriptTask",send:"sendTask",receive:"receiveTask",manual:"manualTask"}[t.state.taskType||"none"]||"task"}return null}const ro={class:"",interface:"«interface»",enum:"«enumeration»"};class UmlClass extends X{static typeId="UmlClass";stereotypeComponent=null;nameComponent=null;headerBackgroundComponent=null;memberComponents=[];dividerComponents=[];hasDerivedChildren(){return!0}constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(UmlClass.arrangeParam(t)),this.syncCompartments()}static arrangeParam(t){const e=jn({kind:"class",className:"Class",attributes:[],methods:[],width:220,height:120,style:{strokeStyle:"#334155",fillStyle:"#ffffff",radius:6,lineWidth:1.5},headerStyle:{textColor:"#0f172a",backgroundColor:"#eef2ff",fontSize:16,fontWeight:"bold",paddingTop:10,paddingBottom:10,paddingLeft:12,paddingRight:12},memberStyle:{textColor:"#334155",fontSize:13,paddingTop:6,paddingBottom:0,paddingLeft:12,paddingRight:12},dividerStyle:{strokeStyle:"#cbd5e1",fillStyle:"#cbd5e1",lineWidth:1}},t,{transformable:!1});return kt(e.className)&&(e.className="Class"),Array.isArray(e.attributes)||(e.attributes=[]),Array.isArray(e.methods)||(e.methods=[]),e}static __layoutKeys=["kind","className","attributes","methods","abstract","width","headerStyle","memberStyle","dividerStyle"];setState(t){const e=!!t&&UmlClass.__layoutKeys.some(e=>Object.prototype.hasOwnProperty.call(t,e));super.setState(t),e&&this.syncCompartments()}applyPatch(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.setState(t)}syncCompartments(){this.__clearDerivedChildren();const t=this.state.width,e=this.state.kind||"class",i=ro[e]||(this.state.abstract?"«abstract»":""),s=this.state.headerStyle,o=this.state.memberStyle;let r=0;const a=this.state.zIndex||0,lineHeight=(t,e,i)=>Math.round(1.35*t+e+i),l=(this.state.style.lineWidth||1.5)/2,h=[];if(i){const e=Math.max((s.fontSize||16)-2,10),o=lineHeight(e,s.paddingTop,0),l=new pt({zIndex:a+2,left:0,top:r,width:t,height:o,text:i,stroke:!1,interactive:!1,style:{fontSize:e,fillStyle:s.textColor,textAlign:"center",textBaseline:"middle"}});this.stereotypeComponent=l,h.push(l),r+=o}const c=lineHeight(s.fontSize||16,i?0:s.paddingTop,s.paddingBottom),d=new pt({zIndex:a+2,left:0,top:r,width:t,height:c,text:String(this.state.className||""),stroke:!1,interactive:!1,style:{fontSize:s.fontSize,fillStyle:s.textColor,fontWeight:s.fontWeight,textAlign:"center",textBaseline:"middle",fontStyle:"interface"===e?"italic":"normal"}});this.nameComponent=d,h.push(d),r+=c;const u=r;s.backgroundColor&&"none"!==s.backgroundColor&&(this.headerBackgroundComponent=new j({zIndex:a+1,left:l,top:l,width:Math.max(t-2*l,0),height:Math.max(u-l,0),origin:"top-left",radius:Math.max((this.state.style.radius||0)-l,0),stroke:!1,interactive:!1,style:{fillStyle:s.backgroundColor,lineWidth:0}}),this.addChild(this.headerBackgroundComponent)),h.forEach(t=>this.addChild(t));[this.state.attributes||[],this.state.methods||[]].forEach((e,i)=>{const s=new at({zIndex:a+2,left:0,top:0,points:[[0,r],[t,r]],stroke:!0,interactive:!1,style:{strokeStyle:this.state.dividerStyle.strokeStyle,fillStyle:this.state.dividerStyle.fillStyle,lineWidth:this.state.dividerStyle.lineWidth}});this.dividerComponents.push(s),this.addChild(s);const l=lineHeight(o.fontSize||13,o.paddingTop,o.paddingBottom);e.length?(e.forEach(e=>{const i=new pt({zIndex:a+2,left:0,top:r,width:t,height:l,text:String(e),stroke:!1,interactive:!1,style:{fontSize:o.fontSize,fillStyle:o.textColor,textBaseline:"middle",textAlign:"left",paddingLeft:o.paddingLeft}});this.memberComponents.push(i),this.addChild(i),r+=l}),r+=6):r+=l}),this.state.height=Math.max(Math.round(r),this.state.height||0)}__clearDerivedChildren(){this.headerBackgroundComponent&&(this.removeChild(this.headerBackgroundComponent),this.headerBackgroundComponent=null),this.stereotypeComponent&&(this.removeChild(this.stereotypeComponent),this.stereotypeComponent=null),this.nameComponent&&(this.removeChild(this.nameComponent),this.nameComponent=null),this.memberComponents.length&&(this.removeChildren(this.memberComponents),this.memberComponents.length=0),this.dividerComponents.length&&(this.removeChildren(this.dividerComponents),this.dividerComponents.length=0)}}const ao=["inheritance","realization","association","aggregation","composition","dependency"],lo={inheritance:{marker:"triangle",markerEnd:"end",filled:!1,dashed:!1},realization:{marker:"triangle",markerEnd:"end",filled:!1,dashed:!0},association:{marker:"none",markerEnd:"end",filled:!1,dashed:!1},aggregation:{marker:"diamond",markerEnd:"start",filled:!1,dashed:!1},composition:{marker:"diamond",markerEnd:"start",filled:!0,dashed:!1},dependency:{marker:"open",markerEnd:"end",filled:!1,dashed:!0}};class UmlRelation extends at{static typeId="UmlRelation";constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(UmlRelation.arrangeParam(t)),this.__applyNotation(),this.setState({keepHistory:!1}),this.paramsDirty=!0}static arrangeParam(t){return jn({relationKind:"association",label:"",arrowLength:14,fill:!1},t)}setState(t){const e=!!t&&(Object.prototype.hasOwnProperty.call(t,"relationKind")||Object.prototype.hasOwnProperty.call(t,"arrowLength"));super.setState(t),e&&this.state.relationKind&&this.__applyNotation()}applyPatch(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.setState(t)}__applyNotation(){const t=this.state.relationKind||"association",e=lo[t]||lo.association;this.state.umlMarker=e.marker,this.state.arrowStyle="none"===e.marker?"none":e.filled?"filled":"hollow",this.state.lineDash=e.dashed?this.state.lineDash&&this.state.lineDash.length?this.state.lineDash:[8,5]:[],this.state.arrow="none"===e.marker?"none":e.markerEnd}calcArrowPoints(){const t=this.__arrowFaceIndexes;t.length=0;const e=this.state.relationKind||"association",i=lo[e]||lo.association,s=this.state.dots;if(!s||s.length<2||"none"===i.marker)return;const o="start"===i.markerEnd,r=[...o?s[0]:s[s.length-1]],a=[...o?s[1]:s[s.length-2]],l=r[0]-a[0],h=r[1]-a[1],c=Math.hypot(l,h)||1,d=l/c,u=h/c,p=this.state.arrowLength||14,f=.4*p,g=-u,m=d;if("triangle"===i.marker||"open"===i.marker){const e=this.doCalcArrowPoints([r,a]);return void(o?(s.unshift(...e),s.unshift([...r]),t.push(0)):(s.push(...e),s.push([...r]),t.push(s.length-4)))}const y=r[0]-d*(p/2),_=r[1]-u*(p/2),b=[[r[0],r[1]],[y+g*f,_+m*f],[r[0]-d*p,r[1]-u*p],[y-g*f,_-m*f]];o?(s.unshift(b[3],b[2],b[1]),t.push(0)):(s.push(b[1],b[2],b[3],[...r]),t.push(s.length-4))}}class StateNode extends X{static typeId="StateNode";shapeComponent=null;innerRingComponent=null;labelComponent=null;hasDerivedChildren(){return!0}constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(StateNode.arrangeParam(t)),this.syncShape()}static arrangeParam(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const e=t.kind||"state",i="initial"===e||"final"===e;return jn({kind:e,title:"状态",width:i?24:"composite"===e?320:160,height:i?24:"composite"===e?200:64,fill:!1,stroke:!1,style:{strokeStyle:"#334155",fillStyle:"#ffffff",lineWidth:1.5},labelStyle:{textColor:"#0f172a",fontSize:14,fontWeight:"normal",paddingLeft:12,paddingTop:10}},t,{transformable:!1})}static __shapeKeys=["kind","title","width","height","style","labelStyle"];setState(t){const e=!!t&&StateNode.__shapeKeys.some(e=>Object.prototype.hasOwnProperty.call(t,e));super.setState(t),e&&this.syncShape()}applyPatch(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.setState(t)}isPseudoState(){return"initial"===this.state.kind||"final"===this.state.kind}syncShape(){this.__clearDerivedChildren();const t=this.state.zIndex||0,e=this.state.kind||"state",i=this.state.width,s=this.state.height;if("initial"===e)return this.shapeComponent=new W({zIndex:t+1,left:0,top:0,radius:Math.min(i,s)/2,stroke:!1,interactive:!1,style:{fillStyle:this.state.style.strokeStyle||"#334155"}}),void this.addChild(this.shapeComponent);if("final"===e){const e=Math.min(i,s)/2,o=this.state.style.lineWidth||1.5;return this.shapeComponent=new W({zIndex:t+1,left:0,top:0,radius:e,stroke:!0,interactive:!1,style:{fillStyle:this.state.style.fillStyle||"#ffffff",strokeStyle:this.state.style.strokeStyle||"#334155",lineWidth:o}}),this.innerRingComponent=new W({zIndex:t+2,left:0,top:0,radius:.6*e,stroke:!1,interactive:!1,style:{fillStyle:this.state.style.strokeStyle||"#334155"}}),this.addChild(this.shapeComponent),void this.addChild(this.innerRingComponent)}this.shapeComponent=new j({zIndex:t+1,left:0,top:0,width:i,height:s,radius:"composite"===e?14:12,stroke:!0,interactive:!1,style:{fillStyle:this.state.style.fillStyle||"#ffffff",strokeStyle:this.state.style.strokeStyle||"#334155",lineWidth:this.state.style.lineWidth||1.5}}),this.addChild(this.shapeComponent);const o="composite"===e;this.labelComponent=new pt({zIndex:t+2,left:0,top:0,width:i,height:o?Math.max(this.state.labelStyle.fontSize+2*this.state.labelStyle.paddingTop,28):s,text:String(this.state.title||""),stroke:!1,interactive:!1,style:{fontSize:this.state.labelStyle.fontSize,fontWeight:this.state.labelStyle.fontWeight,fillStyle:this.state.labelStyle.textColor,textAlign:o?"left":"center",textBaseline:o?"top":"middle",paddingLeft:o?this.state.labelStyle.paddingLeft:0,paddingTop:o?this.state.labelStyle.paddingTop:0}}),this.addChild(this.labelComponent)}__clearDerivedChildren(){this.shapeComponent&&(this.removeChild(this.shapeComponent),this.shapeComponent=null),this.innerRingComponent&&(this.removeChild(this.innerRingComponent),this.innerRingComponent=null),this.labelComponent&&(this.removeChild(this.labelComponent),this.labelComponent=null)}}class StateTransition extends at{static typeId="StateTransition";constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(StateTransition.arrangeParam(t))}static arrangeParam(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const e=jn({event:"",guard:"",action:"",arrow:"end",arrowStyle:"filled",fill:!1},t);return void 0===t.label&&(e.label=StateTransition.composeLabel(e)),e}static composeLabel(t){const e=(t.event||"").trim(),i=(t.guard||"").trim(),s=(t.action||"").trim();let o=e;return i&&(o+=`${o?" ":""}[${i}]`),s&&(o+=`${o?" / ":""}${s}`),o}setState(t){const e=!!t&&["event","guard","action"].some(e=>Object.prototype.hasOwnProperty.call(t,e))&&!Object.prototype.hasOwnProperty.call(t,"label")?{...t,label:StateTransition.composeLabel({...this.state,...t})}:t;super.setState(e)}applyPatch(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.setState(t)}}const ho={inheritance:"<|--",realization:"<|..",association:"--\x3e",aggregation:"o--",composition:"*--",dependency:"..>"},co=[[/<\|\.\./,"realization"],[/<\|--/,"inheritance"],[/\*--/,"composition"],[/o--/,"aggregation"],[/\.\.>/,"dependency"],[/-->/,"association"]];function quoteIfNeeded(t){return/^[A-Za-z_][A-Za-z0-9_]*$/.test(t)?t:`"${t}"`}function unquote(t){const e=t.trim();return/^".*"$/.test(e)?e.slice(1,-1).trim():e}exports.AlignmentGuideManager=G,exports.AnimationManager=P,exports.BpmnDesigner=class BpmnDesigner extends FlowDesigner{__markers=new Map;__markerSyncing=!1;__nesting=!1;constructor(t){super(t),this.subscribe(()=>this.syncFlowMarkers()),this.syncFlowMarkers()}validateBpmn(){return validateBpmn(this)}createNode(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=super.createNode(t,e);return this.__nestByGeometry(i),i}__nestByGeometry(t){if(this.__nesting)return;if("bpmnPool"===t.state.kind)return void t.setState({zIndex:-3e4});"bpmnLane"===t.state.kind&&t.setState({zIndex:-2e4});const e=t.getMinBoundingBox(!0),i=(e.tl[0]+e.br[0])/2,s=(e.tl[1]+e.br[1])/2,o=this.nodes.filter(e=>e!==t&&("bpmnPool"===e.state.kind||"bpmnLane"===e.state.kind)).filter(t=>{const e=this.__contentBox(t);return i>=e.tl[0]&&i<=e.br[0]&&s>=e.tl[1]&&s<=e.br[1]}).sort((t,e)=>t.state.width*t.state.height-e.state.width*e.state.height)[0];if(o){this.__nesting=!0;try{const e=o.getMinBoundingBox(!0).tl[0],i=o.getMinBoundingBox(!0).tl[1];t.setState({left:t.state.left-e,top:t.state.top-i}),o.adoptChild(t)}finally{this.__nesting=!1}}}__contentBox(t){const e=t.getMinBoundingBox(!0),i=to[t.state.kind]||{},s=i.band,o=i.bandSize||0;return s&&o?{tl:"top"===s?[e.tl[0],e.tl[1]+o]:[e.tl[0]+o,e.tl[1]],br:e.br}:e}syncFlowMarkers(){if(!this.__markerSyncing){this.__markerSyncing=!0;try{const t=new Set;this.edges.forEach(e=>{if(!!("sequence"!==(e.state.flowType||"sequence")||!e.state.condition&&!e.state.isDefault))return;t.add(e.state.id);const i=e.state.points&&e.state.points.length?e.state.points:[e.state.startPoint,e.state.endPoint],s=i[0]||[0,0],o=i[1]||s,r=o[0]-s[0],a=o[1]-s[1],l=Math.max(Math.hypot(r,a),1),h=s[0]+r/l*16-7,c=s[1]+a/l*16-7,d=e.state.isDefault?"default":"conditional",u=e.state.style&&e.state.style.strokeStyle||"#475569";let p=this.__markers.get(e.state.id);p?(p.setState({left:h,top:c,markerType:d,style:{...p.state.style||{},strokeStyle:u}}),p.dirty=!0):(p=new BpmnFlowMarker({left:h,top:c,width:14,height:14,interactive:!1,draggable:!1,linkable:!1,showMinBoundingBox:!1,showMaxBoundingBox:!1,markerType:d,style:{strokeStyle:u,fillStyle:"#ffffff",lineWidth:1.4}}),this.ice.addTool(p),this.__markers.set(e.state.id,p))}),[...this.__markers.keys()].forEach(e=>{if(!t.has(e)){const t=this.__markers.get(e);this.ice.removeTool(t),this.__markers.delete(e)}})}finally{this.__markerSyncing=!1}}}dispose(){this.__markers.forEach(t=>this.ice.removeTool(t)),this.__markers.clear(),super.dispose()}},exports.CanvasRenderer=vt,exports.DARK_THEME=x,exports.DEFAULT_THEME=v,exports.DOMEventDispatcher=it,exports.DOMEventInterceptor=nt,exports.Deserializer=Deserializer,exports.Entity=Entity,exports.EntityDesigner=class EntityDesigner{selectedId=null;__changeListeners=[];__mousedownHandler=t=>this.__handleMouseDown(t);__undoStack=[];__redoStack=[];__historyEnabled=!0;__maxHistory=100;constructor(t){this.ice=t,this.ice.registerType(Entity.typeId,Entity),this.ice.registerType(Relation.typeId,Relation),this.ice.evtBus.on("mousedown",this.__mousedownHandler,this)}get entities(){return this.ice.childNodes.filter(t=>isEntity(t))}get relations(){return this.ice.childNodes.filter(t=>isRelation(t))}get selected(){return this.selectedId?this.ice.findComponent(this.selectedId):null}select(t){return this.selectedId=t,this}createEntity(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.captureHistory();const e=this.entities.length,i=new Entity({left:120+e%4*220,top:120+260*Math.floor(e/4),entityName:"NewEntity",fields:[],...t});return this.ice.addChild(i),this.select(i.state.id),this.__emitChange(),i}createRelation(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.captureHistory();const e=t.links||{start:{id:t.sourceId||t.fromId,position:t.startPosition||"R"},end:{id:t.targetId||t.toId,position:t.endPosition||"L"}},i=t.sourceId||t.fromId||e.start&&e.start.id,s=t.targetId||t.toId||e.end&&e.end.id,o=e.start&&e.start.position||t.startPosition||"R",r=e.end&&e.end.position||t.endPosition||"L",a=i?this.ice.findComponent(i):null,l=s?this.ice.findComponent(s):null,h=a?this.__slotPoint(a,o):null,c=l?this.__slotPoint(l,r):null,d=new Relation({relationType:t.relationType||"one-to-many",sourceField:t.sourceField||"id",targetField:t.targetField||"id",links:e,startPoint:h||[0,0],endPoint:c||[10,10],...t});return this.ice.addChild(d),this.select(d.state.id),this.__emitChange(),d}updateEntity(t,e){const i=this.ice.findComponent(t);return isEntity(i)&&(this.captureHistory(),i.setState(e),this.__emitChange()),i}updateRelation(t,e){const i=this.ice.findComponent(t);if(isRelation(i)){this.captureHistory();const t={...i.state,...e},s=Relation.buildLabel(t,t.relationType||"one-to-one");i.setState({...e,label:s}),this.__emitChange()}return i}removeComponent(t){const e=this.ice.findComponent(t);if(e){if(this.captureHistory(),isEntity(e)){this.relations.filter(e=>{const i=e.state.links||{};return i.start&&i.start.id===t||i.end&&i.end.id===t}).forEach(t=>this.ice.removeChild(t))}this.ice.removeChild(e),this.selectedId===t&&(this.selectedId=null),this.__emitChange()}}toSchemaObject(){return toSchemaObject(this.ice.childNodes)}toSchemaString(){return toSchemaString(this.ice.childNodes)}validate(){return validateSchema(this.ice.childNodes)}serializeProject(){const t={version:1,schemaVersion:1,entities:this.entities.map(t=>this.__entitySnapshot(t)),relations:this.relations.map(t=>this.__relationSnapshot(t))};return JSON.stringify(t)}loadProject(t){if(!t)return{loaded:!1,entities:0,relations:0,unknownTypes:[],skipped:[]};const e=this.__parseProject(t);if(!e)return{loaded:!1,entities:0,relations:0,unknownTypes:[],skipped:[]};this.captureHistory();const i=this.__applySnapshot(e);return this.__emitChange(),i}__entitySnapshot(t){return pickDocumentNode({...t.state||{},typeId:Entity.typeId},Wn)}__slotPoint(t,e){const i=t.getMinBoundingBox(!0),s=i.center[0],o=i.center[1];switch(e){case"T":return[s,i.tl[1]];case"B":return[s,i.br[1]];case"L":return[i.tl[0],o];case"R":return[i.tr[0],o];case"C":default:return[s,o]}}__relationSnapshot(t){return pickDocumentNode({...t.state||{},typeId:Relation.typeId},Vn)}__parseProject(t){const e=JSON.parse(t);if(!e||!Array.isArray(e.entities))return null;if(void 0!==e.schemaVersion&&1!==e.schemaVersion)throw new Error("Unsupported project schemaVersion: "+e.schemaVersion);const i=validateProjectSnapshot(e);if(!i.valid)throw new Error("Invalid project snapshot:\n"+i.errors.join("\n"));return e}__applyProject(t){const e=this.__parseProject(t);e&&this.__applySnapshot(e)}__resolveTypeId(t,e){return t&&"string"==typeof t.typeId&&t.typeId?t.typeId:"entities"===e?Entity.typeId:Relation.typeId}__resolveComponentClass(t){const e=this.ice;if("function"==typeof e.getType){const i=e.getType(t);if("function"==typeof i)return i}else if(e.typeMapping&&"function"==typeof e.typeMapping[t])return e.typeMapping[t];return t===Entity.typeId?Entity:t===Relation.typeId?Relation:null}__recordUnknownType(t,e,i,s,o){-1===t.unknownTypes.indexOf(s)&&t.unknownTypes.push(s);const r=o&&"string"==typeof o.id?o.id:void 0;t.skipped.push(void 0===r?{bucket:e,index:i,typeId:s}:{bucket:e,index:i,typeId:s,id:r})}__applySnapshot(t){const e=this.ice.renderer;e&&e.stop();const i={loaded:!0,entities:0,relations:0,unknownTypes:[],skipped:[]};try{this.ice.clearAll(),this.ice.ctx&&"function"==typeof this.ice.ctx.clearRect&&(this.ice.ctx.setTransform(1,0,0,1,0,0),this.ice.ctx.clearRect(0,0,this.ice.canvasWidth||0,this.ice.canvasHeight||0));const createNode=(t,e,s)=>{const o=this.__resolveTypeId(t,e),r=this.__resolveComponentClass(o);if("function"!=typeof r)return this.__recordUnknownType(i,e,s,o,t),null;const a=new r(t);return delete a.state.typeId,delete a.props.typeId,this.ice.addChild(a),a},collect=(t,e,s)=>{const o=createNode(t,e,s);isEntity(o)?i.entities+=1:isRelation(o)&&(i.relations+=1)};t.entities.forEach((t,e)=>collect(t,"entities",e)),(t.relations||[]).forEach((t,e)=>collect(t,"relations",e)),this.selectedId=null}finally{if(e){const t=e.getRenderMode();e.setRenderMode("full"),e.start(),this.ice.dirty=!0,setTimeout(()=>{e.setRenderMode(t)},50)}}return i}__applyHistorySnapshot(t){this.__historyEnabled=!1;try{this.__applyProject(t),this.selectedId=null}finally{this.__historyEnabled=!0}}canUndo(){return this.__undoStack.length>0}canRedo(){return this.__redoStack.length>0}captureHistory(){this.__historyEnabled&&(this.__undoStack.push(this.serializeProject()),this.__undoStack.length>this.__maxHistory&&this.__undoStack.shift(),this.__redoStack.length=0)}undo(){if(!this.canUndo())return;const t=this.serializeProject(),e=this.__undoStack.pop();try{this.__applyHistorySnapshot(e)}catch(t){throw this.__undoStack.push(e),t}this.__redoStack.push(t),this.__emitChange()}redo(){if(!this.canRedo())return;const t=this.serializeProject(),e=this.__redoStack.pop();try{this.__applyHistorySnapshot(e)}catch(t){throw this.__redoStack.push(e),t}this.__undoStack.push(t),this.__emitChange()}subscribe(t){return"function"!=typeof t?()=>{}:(this.__changeListeners.push(t),()=>{const e=this.__changeListeners.indexOf(t);-1!==e&&this.__changeListeners.splice(e,1)})}__emitChange(){if(!this.__changeListeners.length)return;const t=this.serializeProject();this.__changeListeners.slice().forEach(e=>e(t))}dispose(){this.ice.evtBus.off("mousedown",this.__mousedownHandler,this)}__handleMouseDown(t){const e=t&&t.param&&t.param.component;if(!e)return;let i=e;for(;i.parentNode;)i=i.parentNode;(isEntity(i)||isRelation(i))&&this.select(i.state.id)}},exports.EventBus=ot,exports.FLOW_NODE_KINDS=to,exports.FlowDesigner=FlowDesigner,exports.FlowDiamond=FlowDiamond,exports.FlowEdge=FlowEdge,exports.FlowNode=FlowNode,exports.FlowParallelogram=FlowParallelogram,exports.GeoLine=GeoLine,exports.GeoPoint=GeoPoint,exports.GeoUtil=GeoUtil,exports.ICE=Ct,exports.ICEBezier=ICEBezier,exports.ICEBorderLayout=class ICEBorderLayout extends ft{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(),this.gap=t.gap||5}layoutContainer(t){const e=t.childNodes,i=t.state.width,s=t.state.height;let o=null,r=null,a=null,l=null,h=null;e.forEach(t=>{const e=t.state.layoutConstraint||"center";"north"===e?o=t:"south"===e?r=t:"east"===e?a=t:"west"===e?l=t:h=t});let c=0,d=s,u=0,p=i;o&&(o.setState({left:0,top:0,width:i}),c=o.state.height+this.gap),r&&(r.setState({left:0,top:s-r.state.height,width:i}),d=s-r.state.height-this.gap),a&&(a.setState({left:i-a.state.width,top:c,height:d-c}),p=i-a.state.width-this.gap),l&&(l.setState({left:0,top:c,height:d-c}),u=l.state.width+this.gap),h&&h.setState({left:u,top:c,width:p-u,height:d-c})}},exports.ICEBoundingBox=$,exports.ICEBoxLayout=class ICEBoxLayout extends ft{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(),this.axis=t.axis||"x",this.gap=t.gap||5}layoutContainer(t){let e=0;for(const i of t.childNodes)"x"===this.axis?(i.setState({left:e,top:0}),e+=i.state.width+this.gap):(i.setState({left:0,top:e}),e+=i.state.height+this.gap)}},exports.ICECardLayout=class ICECardLayout extends ft{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(),_defineProperty$1(this,"currentIndex",0),_defineProperty$1(this,"container",null),this.currentIndex=t.currentIndex||0}layoutContainer(t){this.container=t,t.childNodes.forEach((t,e)=>{t.setState({display:e===this.currentIndex,left:0,top:0})})}show(t){this.currentIndex=t,this.container&&this.layoutContainer(this.container)}next(){this.show(this.currentIndex+1)}previous(){this.show(this.currentIndex-1)}},exports.ICECircle=W,exports.ICEComponent=F,exports.ICEControlPanel=ICEControlPanel,exports.ICEControlPanelManager=V,exports.ICEDotPath=ICEDotPath,exports.ICEEllipse=H,exports.ICEEventTarget=D,exports.ICEFlowLayout=class ICEFlowLayout extends ft{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(),this.gap=t.gap||10,this.align=t.align||"left"}layoutContainer(t){const e=t.childNodes,i=t.state.width,s=this.gap,o=[[]];let r=0;for(const t of e){const e=t.state.width;r>0&&r+s+e>i&&(o.push([]),r=0),o[o.length-1].push(t),r+=r>0?s+e:e}let a=0;for(const t of o){let e=0,o=0;for(const i of t)e+=i.state.width,o=Math.max(o,i.state.height);e+=s*(t.length-1);let r=0;"center"===this.align?r=(i-e)/2:"right"===this.align&&(r=i-e);for(const e of t)e.setState({left:r,top:a}),r+=e.state.width+s;a+=o+s}}},exports.ICEGridLayout=class ICEGridLayout extends ft{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(),this.cols=t.cols||2,this.gapX=t.gapX||10,this.gapY=t.gapY||10}layoutContainer(t){const e=t.childNodes;let i=0,s=0,o=0,r=0;for(const t of e)t.setState({left:i,top:s}),i+=t.state.width+this.gapX,o=Math.max(o,t.state.height),r++,r>=this.cols&&(r=0,i=0,s+=o+this.gapY,o=0)}},exports.ICEGroup=X,exports.ICEImage=rt,exports.ICEIsogon=ht,exports.ICELayeredLayout=class ICELayeredLayout extends ft{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(),this.gapX=t.gapX||80,this.gapY=t.gapY||40}layoutContainer(t){const e=t.childNodes||[],i=[],s=[];for(const t of e)if(t.isLine){const e=t.getLinkFromId?t.getLinkFromId():null,i=t.getLinkToId?t.getLinkToId():null;s.push({from:e,to:i,component:t})}else i.push({id:t.props.id,component:t,rank:0,order:0,barycenter:0});if(0===i.length)return;const o={};i.forEach(t=>o[t.id]=t);const r=s.filter(t=>t.from&&t.to&&o[t.from]&&o[t.to]);this.assignRanks(i,r),this.assignOrders(i,r,o),this.assignCoords(i,r,o)}assignRanks(t,e){const i={},visit=(t,s)=>{if(void 0!==i[t])return i[t];if(s.has(t))return 0;s.add(t);const o=e.filter(e=>e.to===t).map(t=>t.from);let r=-1;for(const t of o)r=Math.max(r,visit(t,s));return i[t]=r+1,s.delete(t),i[t]};t.forEach(t=>{t.rank=visit(t.id,new Set)})}assignOrders(t,e,i){const s={};t.forEach(t=>{(s[t.rank]=s[t.rank]||[]).push(t)});const o=Object.keys(s).map(Number).sort((t,e)=>t-e);o.forEach(t=>s[t].forEach((t,e)=>t.order=e));for(let t=0;t<4;t++)for(const t of o){const o=s[t];o.forEach(t=>{const s=e.filter(e=>e.from===t.id).map(t=>i[t.to]);t.barycenter=s.length?s.reduce((t,e)=>t+e.order,0)/s.length:t.order}),o.sort((t,e)=>t.barycenter-e.barycenter),o.forEach((t,e)=>t.order=e)}}assignCoords(t,e,i){const s={};t.forEach(t=>{(s[t.rank]=s[t.rank]||[]).push(t)});const o=Object.keys(s).map(Number).sort((t,e)=>t-e),r=this.gapX,a=this.gapY;let l=0;o.forEach(t=>{const e=s[t],i=Math.max(...e.map(t=>t.component.state.width));let o=0;e.forEach(t=>{t.component.setState({left:l,top:o}),o+=t.component.state.height+a}),l+=i+r});for(const t of e){const e=i[t.from].component,s=i[t.to].component,o=e.state.left+e.state.width,r=e.state.top+e.state.height/2,a=s.state.left,l=s.state.top+s.state.height/2;t.component.setState({startPoint:[o,r],endPoint:[a,l]})}}},exports.ICELayoutManager=ft,exports.ICELinkHook=ICELinkHook,exports.ICELinkSlot=lt,exports.ICEOverlayLayout=class ICEOverlayLayout extends ft{layoutContainer(t){for(const e of t.childNodes)e.setState({left:0,top:0})}},exports.ICEPath=z,exports.ICEPolyLine=at,exports.ICERect=j,exports.ICERose=ct,exports.ICEStar=dt,exports.ICEText=pt,exports.ICETheme=k,exports.ICEVisioLink=ICEVisioLink,exports.LineControlPanel=LineControlPanel,exports.PROJECT_SCHEMA_VERSION=1,exports.PluginHost=PluginHost,exports.Relation=Relation,exports.ResizeControl=ResizeControl,exports.RotateControl=RotateControl,exports.SERIALIZATION_MIGRATIONS=bt,exports.SERIALIZATION_VERSION=1,exports.STATECHART_NODE_KINDS=["initial","final","state","composite"],exports.STYLE_PRESETS=S,exports.Serializer=Serializer,exports.StateNode=StateNode,exports.StateTransition=StateTransition,exports.StatechartDesigner=class StatechartDesigner extends FlowDesigner{__nesting=!1;constructor(t){super(t),this.ice.registerType(StateNode.typeId,StateNode),this.ice.registerType(StateTransition.typeId,StateTransition)}get nodes(){return this.__flatten().filter(t=>t.constructor&&t.constructor.typeId===StateNode.typeId)}get edges(){return this.__flatten().filter(t=>t.constructor&&t.constructor.typeId===StateTransition.typeId)}createState(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.__captureHistory();const e=new StateNode(t);if(void 0===t.left||void 0===t.top){const i=this.__defaultPlacement(e.state.width,e.state.height);e.setState({left:void 0===t.left?i.left:t.left,top:void 0===t.top?i.top:t.top})}return this.ice.addChild(e),this.__attachNodeListeners(e),this.__nestByGeometry(e),this.selectedId=e.state.id,this.__emitChange(),e}createTransition(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const e=t.sourceId?this.ice.findComponent(t.sourceId):null,i=t.targetId?this.ice.findComponent(t.targetId):null;if(!e||!i)throw new Error("转移两端必须是已存在的状态");this.__captureHistory();const s=t.sourcePort||"R",o=t.targetPort||"L",r=new StateTransition({links:{start:{id:t.sourceId,position:s},end:{id:t.targetId,position:o}},startPoint:this.__portPoint(e,s),endPoint:this.__portPoint(i,o),event:t.event||"",guard:t.guard||"",action:t.action||"",label:t.label,linkShape:t.linkShape||"visio",style:t.style,labelStyle:t.labelStyle});return this.ice.addChild(r),this.selectedId=r.state.id,this.__emitChange(),r}__nestByGeometry(t){if(this.__nesting||t.constructor.typeId!==StateNode.typeId||"composite"===t.state.kind)return;const e=t.getMinBoundingBox(!0),i=(e.tl[0]+e.br[0])/2,s=(e.tl[1]+e.br[1])/2,o=this.nodes.filter(e=>e!==t&&"composite"===e.state.kind).filter(t=>{const e=t.getMinBoundingBox(!0);return i>=e.tl[0]&&i<=e.br[0]&&s>=e.tl[1]&&s<=e.br[1]}).sort((t,e)=>t.state.width*t.state.height-e.state.width*e.state.height)[0];if(o){this.__nesting=!0;try{const e=o.getMinBoundingBox(!0).tl[0],i=o.getMinBoundingBox(!0).tl[1];t.setState({left:t.state.left-e,top:t.state.top-i}),o.adoptChild(t)}finally{this.__nesting=!1}}}validateStatechart(){const t=[],e=this.nodes,i=e.filter(t=>"initial"===t.state.kind);e.length&&0===i.length&&t.push({level:"error",message:"缺少初始状态(initial):状态机没有入口"});const s=new Map,o=new Map;e.forEach(t=>{s.set(t.state.id,[]),o.set(t.state.id,0)}),this.edges.forEach(e=>{const i=e.state.links||{},r=i.start&&i.start.id,a=i.end&&i.end.id;r&&a&&s.has(r)&&s.has(a)?(s.get(r).push(a),o.set(a,(o.get(a)||0)+1)):t.push({level:"error",message:"转移两端必须都是已存在的状态",id:e.state.id})}),e.forEach(e=>{"final"===e.state.kind&&(s.get(e.state.id)||[]).length>0&&t.push({level:"error",message:"终止状态不应有出边",id:e.state.id})});const r=new Set,a=i.map(t=>t.state.id);for(a.forEach(t=>r.add(t));a.length;){const t=a.shift();(s.get(t)||[]).forEach(t=>{r.has(t)||(r.add(t),a.push(t))})}return e.forEach(e=>{if(r.has(e.state.id))return;const i=(t=>{const e=[],walk=t=>{(t||[]).forEach(t=>{t.constructor&&t.constructor.typeId===StateNode.typeId&&e.push(t),walk(t.childNodes)})};return walk(t.childNodes),e})(e);if(i.some(t=>r.has(t.state.id)))return;const a=0===(o.get(e.state.id)||0)&&0===(s.get(e.state.id)||[]).length;if(a&&i.length)return;const l=e.state.title||e.state.kind;t.push({level:"warning",message:a?`状态「${l}」没有任何转移(孤立节点)`:`状态「${l}」从初始状态不可达`,id:e.state.id})}),t}__portPoint(t,e){const i=t.getMinBoundingBox(!0);switch(e){case"T":return[...i.tc];case"R":return[...i.rc];case"B":return[...i.bc];case"L":return[...i.lc];case"C":default:return[...i.center]}}},exports.TransformControlPanel=TransformControlPanel,exports.UML_RELATION_KINDS=ao,exports.UML_RELATION_STYLE=lo,exports.UmlClass=UmlClass,exports.UmlDesigner=class UmlDesigner extends FlowDesigner{constructor(t){super(t),this.ice.registerType(UmlClass.typeId,UmlClass),this.ice.registerType(UmlRelation.typeId,UmlRelation)}get nodes(){return this.__flatten().filter(t=>t.constructor&&t.constructor.typeId===UmlClass.typeId)}get edges(){return this.__flatten().filter(t=>t.constructor&&t.constructor.typeId===UmlRelation.typeId)}createClass(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.__captureHistory();const e=new UmlClass(t);if(void 0===t.left||void 0===t.top){const i=this.__defaultPlacement(e.state.width,e.state.height);e.setState({left:void 0===t.left?i.left:t.left,top:void 0===t.top?i.top:t.top})}return this.ice.addChild(e),this.__attachNodeListeners(e),this.selectedId=e.state.id,this.__emitChange(),e}createRelation(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const e=t.sourceId?this.ice.findComponent(t.sourceId):null,i=t.targetId?this.ice.findComponent(t.targetId):null;if(!e||!i)throw new Error("关系两端必须是已存在的类");this.__captureHistory();const s=t.sourcePort||"R",o=t.targetPort||"L",r=new UmlRelation({links:{start:{id:t.sourceId,position:s},end:{id:t.targetId,position:o}},startPoint:this.__portPoint(e,s),endPoint:this.__portPoint(i,o),relationKind:t.relationKind||"association",label:t.label||"",linkShape:t.linkShape||"visio",style:t.style,labelStyle:t.labelStyle});return this.ice.addChild(r),this.selectedId=r.state.id,this.__emitChange(),r}setRelationKind(t,e){const i=this.ice.findComponent(t);return i&&i.constructor.typeId===UmlRelation.typeId&&(this.__captureHistory(),i.applyPatch({relationKind:e}),this.__emitChange()),i}get relationKinds(){return[...ao]}validateUml(){const t=[],e=this.nodes,i=new Map;e.forEach(e=>{const s=String(e.state.className||"").trim();s?(i.has(s)||i.set(s,[]),i.get(s).push(e)):t.push({level:"error",message:"存在未命名的类",id:e.state.id})}),i.forEach((e,i)=>{e.length>1&&t.push({level:"error",message:`类名重复:${i}(${e.length} 个)`,id:e[0].state.id})});const s=new Set(e.map(t=>t.state.id)),o=new Map;this.edges.forEach(e=>{const i=e.state.links||{},r=i.start&&i.start.id,a=i.end&&i.end.id;r&&a&&s.has(r)&&s.has(a)?"inheritance"!==e.state.relationKind&&"realization"!==e.state.relationKind||(o.has(r)||o.set(r,[]),o.get(r).push(a)):t.push({level:"error",message:"关系两端必须都是已存在的类",id:e.state.id})});const r=new Map,a=[],visit=i=>{r.set(i,1),a.push(i);for(const s of o.get(i)||[]){const o=r.get(s)||0;if(1===o){const o=a.indexOf(s),l=a.slice(o>=0?o:0).concat(s).map(t=>{const i=e.find(e=>e.state.id===t);return i?i.state.className:t});return t.push({level:"error",message:"继承关系成环:"+l.join(" → "),id:i}),r.set(i,2),a.pop(),!0}if(0===o&&visit(s))return r.set(i,2),a.pop(),!0}return r.set(i,2),a.pop(),!1};return e.forEach(t=>{0===(r.get(t.state.id)||0)&&visit(t.state.id)}),t}static describeRelationKind(t){const e=lo[t];if(!e)return"";return`${e.dashed?"虚线":"实线"} + ${"triangle"===e.marker?"空心三角":"diamond"===e.marker?e.filled?"实心菱形":"空心菱形":"open"===e.marker?"开放箭头":"无端点标记"}`}__portPoint(t,e){const i=t.getMinBoundingBox(!0);switch(e){case"T":return[...i.tc];case"R":return[...i.rc];case"B":return[...i.bc];case"L":return[...i.lc];case"C":default:return[...i.center]}}},exports.UmlRelation=UmlRelation,exports.arrowOf=function arrowOf(t){return ho[t]||"--\x3e"},exports.baseTokens=b,exports.buildAccessibilityTree=buildAccessibilityTree,exports.detectUmlDialect=function detectUmlDialect(t){return/@startuml/i.test(t)?"plantuml":/classDiagram/i.test(t)?"mermaid":"unknown"},exports.exportSvg=exportSvg,exports.exportSvgResult=exportSvgResult,exports.fromBpmnXml=function fromBpmnXml(t,e){const i=globalThis.DOMParser;if("function"!=typeof i)throw new Error("当前环境没有 DOMParser:请在浏览器(或 jsdom)中导入 BPMN XML");const s=(new i).parseFromString(t,"application/xml"),o=s.getElementsByTagName("parsererror");if(o&&o.length)throw new Error("BPMN XML 解析失败:"+o[0].textContent);const r=[],a=Array.prototype.slice.call(s.getElementsByTagName("*")),l=new Map,h=new Map;a.forEach(t=>{const e=localName(t);if("BPMNShape"===e){const e=t.getAttribute("bpmnElement"),i=Array.prototype.slice.call(t.getElementsByTagName("*")).find(t=>"Bounds"===localName(t));e&&i&&l.set(e,{x:Number(i.getAttribute("x"))||0,y:Number(i.getAttribute("y"))||0,width:Number(i.getAttribute("width"))||120,height:Number(i.getAttribute("height"))||80})}else if("BPMNEdge"===e){const e=t.getAttribute("bpmnElement"),i=Array.prototype.slice.call(t.getElementsByTagName("*")).filter(t=>"waypoint"===localName(t)).map(t=>[Number(t.getAttribute("x"))||0,Number(t.getAttribute("y"))||0]);e&&h.set(e,i)}}),e.clear();const c=new Map;let d=0;a.forEach(t=>{const i=localName(t);if("lane"===i){const i=t.getAttribute("id"),s=i?l.get(i):null;if(s){const o=e.createNode("bpmnLane",{title:t.getAttribute("name")||"Lane",left:s.x,top:s.y,width:s.width,height:s.height});i&&c.set(i,o.state.id),d+=1}return}if("participant"!==i)return;const s=t.getAttribute("id"),o=s?l.get(s):null;if(!o)return;const r=e.createNode("bpmnPool",{title:t.getAttribute("name")||"Pool",left:o.x,top:o.y,width:o.width,height:o.height});c.set(s,r.state.id),d+=1,r.setState({zIndex:0})}),a.forEach(t=>{const i=localName(t);if("participant"===i||"laneSet"===i||"process"===i||"collaboration"===i)return;if("lane"===i||"participant"===i)return;const s=function nodeFromElement(t){switch(t){case"startEvent":return{kind:"bpmnEvent",attrs:{eventKind:"start"}};case"endEvent":return{kind:"bpmnEvent",attrs:{eventKind:"end"}};case"intermediateThrowEvent":case"intermediateCatchEvent":return{kind:"bpmnEvent",attrs:{eventKind:"intermediate"}};case"exclusiveGateway":return{kind:"bpmnGateway",attrs:{gatewayType:"exclusive"}};case"parallelGateway":return{kind:"bpmnGateway",attrs:{gatewayType:"parallel"}};case"inclusiveGateway":return{kind:"bpmnGateway",attrs:{gatewayType:"inclusive"}};case"eventBasedGateway":return{kind:"bpmnGateway",attrs:{gatewayType:"event"}};case"subProcess":return{kind:"bpmnSubprocess",attrs:{}};case"dataObjectReference":return{kind:"bpmnDataObject",attrs:{}};case"textAnnotation":return{kind:"bpmnAnnotation",attrs:{}};case"task":return{kind:"bpmnTask",attrs:{taskType:"none"}};case"userTask":return{kind:"bpmnTask",attrs:{taskType:"user"}};case"serviceTask":return{kind:"bpmnTask",attrs:{taskType:"service"}};case"scriptTask":return{kind:"bpmnTask",attrs:{taskType:"script"}};case"sendTask":return{kind:"bpmnTask",attrs:{taskType:"send"}};case"receiveTask":return{kind:"bpmnTask",attrs:{taskType:"receive"}};case"manualTask":return{kind:"bpmnTask",attrs:{taskType:"manual"}};default:return null}}(i);if(!s)return;const o=t.getAttribute("id");if(!o)return;const a=l.get(o);a||r.push(`元素 ${o}(${i})没有 DI 布局信息,已按默认尺寸放在原点附近`);const h={...s.attrs};if("bpmnEvent"===s.kind&&(h.trigger=function triggerOf(t){const e=(t&&t.childNodes?Array.prototype.slice.call(t.childNodes):[]).map(t=>localName(t));return-1!==e.indexOf("messageEventDefinition")?"message":-1!==e.indexOf("timerEventDefinition")?"timer":-1!==e.indexOf("errorEventDefinition")?"error":-1!==e.indexOf("terminateEventDefinition")?"terminate":"none"}(t)),"textAnnotation"===i){const e=Array.prototype.slice.call(t.getElementsByTagName("*")).find(t=>"text"===localName(t));h.title=e&&e.textContent||""}const u=e.createNode(s.kind,{...h,title:t.getAttribute("name")||h.title||"",left:a?a.x:0,top:a?a.y:0,width:a?a.width:void 0,height:a?a.height:void 0});c.set(o,u.state.id),d+=1});let u=0;return a.forEach(t=>{const i=localName(t);if("sequenceFlow"!==i&&"messageFlow"!==i)return;const s=t.getAttribute("sourceRef"),o=t.getAttribute("targetRef"),a=s?c.get(s):null,l=o?c.get(o):null;if(!a||!l)return void r.push(`连线 ${t.getAttribute("id")} 的端点未找到(sourceRef=${s} targetRef=${o})`);const h=Array.prototype.slice.call(t.getElementsByTagName("*")).find(t=>"conditionExpression"===localName(t));e.createEdge({sourceId:a,targetId:l,label:t.getAttribute("name")||"",flowType:"messageFlow"===i?"message":"sequence",isDefault:"true"===t.getAttribute("default"),condition:h?h.textContent:""}),u+=1}),e.resetHistory(),{nodes:d,edges:u,warnings:r}},exports.fromPlantUml=function fromPlantUml(t,e){const i=[],s=new Map,o=[],r=String(t||"").split(/\r?\n/);let a=null,l=!1;r.forEach(t=>{const e=t.replace(/\s+$/,"").trim();if(!e||e.startsWith("'")||e.startsWith("//")||e.startsWith("%%"))return;if(/^@startuml/i.test(e)||/^@enduml/i.test(e)||/^classDiagram/i.test(e)||/^skinparam/i.test(e)||/^title/i.test(e))return;if(a){if("}"===e)return a=null,void(l=!1);if("--"===e||".."===e||"__"===e)return void(l=!1);const t=s.get(a);return void(l?t.attributes:t.methods).push(e)}const r=/^(abstract\s+class|abstract|class|interface|enum(?:eration)?)\s+(.+?)\s*(\{)?$/i.exec(e);if(r){const t=r[1].toLowerCase(),e=unquote(r[2].replace(/\{.*$/,"")),i=t.startsWith("interface")?"interface":t.startsWith("enum")?"enum":"class";return s.set(e,{kind:i,attributes:[],methods:[],abstract:t.startsWith("abstract")}),void(r[3]&&(a=e,l=!0))}/^(.+?)\s+(<\|--|<\|\.\.|<--|<\.\.|--\*|\*--|--o|o--|-->|\.\.>|--|\.\.)\s+(.+?)(?:\s*:\s*(.*))?$/.exec(e)?o.push(e):i.push("不认识的语法,已跳过:"+e)}),e.clear();const h=new Map;let c=0;s.forEach((t,i)=>{const s=e.createClass({kind:t.kind,className:i,abstract:t.abstract,attributes:t.attributes,methods:t.methods,left:80+c%3*260*1.4,top:80+280*Math.floor(c/3)});h.set(i,s),c++});let d=0;return o.forEach(t=>{const s=/^(.+?)\s+(<\|--|<\|\.\.|<--|<\.\.|--\*|\*--|--o|o--|-->|\.\.>|--|\.\.)\s+(.+?)(?:\s*:\s*(.*))?$/.exec(t);if(!s)return void i.push("关系解析失败,已跳过:"+t);const o=unquote(s[1]),r=s[2],a=unquote(s[3]),l=s[4]||"",c=0===r.indexOf("<"),u=(co.find(t=>{let[e]=t;return e.test(r)})||[/x/,"association"])[1],p=c?a:o,f=c?o:a,g=h.get(p),m=h.get(f);g&&m?(e.createRelation({sourceId:g.state.id,targetId:m.state.id,relationKind:u,label:l}),d++):i.push("关系两端未定义,已跳过:"+t)}),{classes:h.size,relations:d,warnings:i}},exports.getTheme=getTheme,exports.registerTheme=registerTheme,exports.setTheme=setTheme,exports.toBpmnXml=function toBpmnXml(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=t.nodes||[],s=t.edges||[],o=i.filter(t=>"bpmnPool"===t.state.kind),r=i.filter(t=>"bpmnLane"===t.state.kind),a=new Map;i.forEach(t=>a.set(t.state.id,t));const poolOf=t=>{if(!t)return null;const e=rectOf(t);return o.find(t=>centerInside(rectOf(t),e))||null},processIdOf=t=>"Process_"+(t?t.state.id:"default"),escapeId=t=>String(t).replace(/[^A-Za-z0-9_-]/g,"_"),idOf=t=>escapeId(t.state.id),l=[],h=[],c=[],d=[],u=[];i.forEach(t=>{const e=elementNameForNode(t);if(e){const i="bpmnEvent"===t.state.kind&&t.state.trigger&&"none"!==t.state.trigger?`<bpmn:${t.state.trigger}EventDefinition id="${idOf(t)}_def" />`:"",s="textAnnotation"===e?` id="${idOf(t)}"><bpmn:text>${escapeXml(t.state.title)}</bpmn:text></bpmn:textAnnotation>`:` id="${idOf(t)}" name="${escapeXml(t.state.title)}">${i}</bpmn:${e}>`,o="textAnnotation"===e?null:"<bpmn:"+e;l.push(o?`${o}${s}`:"<bpmn:textAnnotation"+s)}const i=rectOf(t);h.push(` <bpmndi:BPMNShape id="${idOf(t)}_di" bpmnElement="${idOf(t)}">\n <dc:Bounds x="${Math.round(i.x0)}" y="${Math.round(i.y0)}" width="${Math.round(i.x1-i.x0)}" height="${Math.round(i.y1-i.y0)}" />\n </bpmndi:BPMNShape>`)}),s.forEach(t=>{const e=t.state.links||{},i=a.get((e.start||{}).id),s=a.get((e.end||{}).id);if(!i||!s)return;if(poolOf(i)!==poolOf(s)||"message"===t.state.flowType)d.push(` <bpmn:messageFlow id="${idOf(t)}" name="${escapeXml(t.state.label)}" sourceRef="${idOf(i)}" targetRef="${idOf(s)}" />`);else{const e=t.state.condition?`\n <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${escapeXml(t.state.condition)}</bpmn:conditionExpression>\n `:"";c.push(` <bpmn:sequenceFlow id="${idOf(t)}" name="${escapeXml(t.state.label)}" sourceRef="${idOf(i)}" targetRef="${idOf(s)}"${t.state.isDefault?' default="true"':""}>${e}</bpmn:sequenceFlow>`)}const o=(t.state.points&&t.state.points.length?t.state.points:[t.state.startPoint,t.state.endPoint]).filter(Boolean);u.push(` <bpmndi:BPMNEdge id="${idOf(t)}_di" bpmnElement="${idOf(t)}">\n`+o.map(t=>` <di:waypoint x="${Math.round(t[0])}" y="${Math.round(t[1])}" />`).join("\n")+"\n </bpmndi:BPMNEdge>")});const p=[];o.forEach(t=>{const e=r.filter(e=>centerInside(rectOf(t),rectOf(e))),i=e.length?`\n <bpmn:laneSet id="${idOf(t)}_lanes">\n`+e.map(t=>` <bpmn:lane id="${idOf(t)}" name="${escapeXml(t.state.title)}" />`).join("\n")+"\n </bpmn:laneSet>":"";p.push(` <bpmn:process id="${processIdOf(t)}" name="${escapeXml(t.state.title)}" isExecutable="false">${i}\n \x3c!-- 该池内的流元素与顺序流由下面的 collaboration/di 段按 id 关联 --\x3e\n </bpmn:process>`)});const f="Process_default";p.push(` <bpmn:process id="${f}" isExecutable="false" />`);const g=o.map(t=>` <bpmn:participant id="${idOf(t)}" name="${escapeXml(t.state.title)}" processRef="${processIdOf(t)}" />`).join("\n");return`<?xml version="1.0" encoding="UTF-8"?>\n<bpmn:definitions xmlns:bpmn="${io}" xmlns:bpmndi="${so}" xmlns:dc="${no}" xmlns:di="${oo}" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://ice-render/bpmn">\n <bpmn:collaboration id="Collaboration_1">\n${g}\n </bpmn:collaboration>\n`+p.join("\n")+"\n \x3c!-- 流元素 --\x3e\n"+l.map(t=>" "+t).join("\n")+"\n \x3c!-- 连线 --\x3e\n"+c.join("\n")+"\n"+d.join("\n")+`\n <bpmndi:BPMNDiagram id="BPMNDiagram_1" name="${escapeXml(e.name||"BPMN Diagram")}">\n <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Collaboration_1">\n`+h.join("\n")+(u.length?"\n"+u.join("\n"):"")+"\n </bpmndi:BPMNPlane>\n </bpmndi:BPMNDiagram>\n</bpmn:definitions>\n"},exports.toPlantUml=function toPlantUml(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=["@startuml"];e.title&&i.push("title "+e.title),i.push("skinparam classAttributeIconSize 0");const s=t.nodes;s.forEach(t=>{const e=t.state.kind||"class",s="interface"===e?"interface":"enum"===e?"enum":t.state.abstract?"abstract class":"class",o=quoteIfNeeded(String(t.state.className||"Class"));[...t.state.attributes||[],...t.state.methods||[]].length?(i.push(`${s} ${o} {`),(t.state.attributes||[]).forEach(t=>i.push(" "+t)),(t.state.methods||[]).length&&(i.push(" --"),(t.state.methods||[]).forEach(t=>i.push(" "+t))),i.push("}")):i.push(`${s} ${o}`)});const o=new Map;return s.forEach(t=>o.set(t.state.id,t)),t.edges.forEach(t=>{const e=t.state.links||{},s=e.start&&e.start.id,r=e.end&&e.end.id,a=o.get(s),l=o.get(r);if(!a||!l)return;const h=t.state.relationKind||"association",c=ho[h]||"--\x3e",d=t.state.label?" : "+t.state.label:"",u=0===c.indexOf("<"),p=quoteIfNeeded(String((u?l:a).state.className)),f=quoteIfNeeded(String((u?a:l).state.className));i.push(`${p} ${c} ${f}${d}`)}),i.push("@enduml"),i.join("\n")},exports.toSchemaObject=toSchemaObject,exports.toSchemaString=toSchemaString,exports.validateBpmn=validateBpmn,exports.validateFlowSnapshot=validateFlowSnapshot,exports.validateProjectSnapshot=validateProjectSnapshot,exports.validateSchema=validateSchema;