@next-bricks/data-view 0.5.0 → 0.5.1

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.
Files changed (37) hide show
  1. package/dist/bricks.json +1 -1
  2. package/dist/chunks/5114.3fb5d815.js +2 -0
  3. package/dist/chunks/5114.3fb5d815.js.map +1 -0
  4. package/dist/chunks/6252.a408a0a3.js +2 -0
  5. package/dist/chunks/6252.a408a0a3.js.map +1 -0
  6. package/dist/chunks/9566.7ec36f39.js +2 -0
  7. package/dist/chunks/9566.7ec36f39.js.map +1 -0
  8. package/dist/chunks/{cabinet-app-layer.98eca353.js → cabinet-app-layer.284d2315.js} +3 -3
  9. package/dist/chunks/{cabinet-app-layer.98eca353.js.map → cabinet-app-layer.284d2315.js.map} +1 -1
  10. package/dist/chunks/{cabinet-container.5d3ff228.js → cabinet-container.211817d5.js} +3 -3
  11. package/dist/chunks/{cabinet-container.5d3ff228.js.map → cabinet-container.211817d5.js.map} +1 -1
  12. package/dist/chunks/cabinet-node.ccaef2e3.js +3 -0
  13. package/dist/chunks/cabinet-node.ccaef2e3.js.map +1 -0
  14. package/dist/chunks/graph-layout-grid.635343e1.js +2 -0
  15. package/dist/chunks/graph-layout-grid.635343e1.js.map +1 -0
  16. package/dist/chunks/{grid-background.81ac8172.js → grid-background.6fd3276e.js} +2 -2
  17. package/dist/chunks/{grid-background.81ac8172.js.map → grid-background.6fd3276e.js.map} +1 -1
  18. package/dist/chunks/{main.ec1850c6.js → main.1c93e93f.js} +2 -2
  19. package/dist/chunks/{main.ec1850c6.js.map → main.1c93e93f.js.map} +1 -1
  20. package/dist/{index.ba8a9563.js → index.cafe1444.js} +2 -2
  21. package/dist/{index.ba8a9563.js.map → index.cafe1444.js.map} +1 -1
  22. package/dist-types/app-wall/utils.d.ts +2 -2
  23. package/dist-types/radar-chart/utils.d.ts +1 -1
  24. package/package.json +2 -2
  25. package/dist/chunks/5114.4bb7f544.js +0 -2
  26. package/dist/chunks/5114.4bb7f544.js.map +0 -1
  27. package/dist/chunks/6252.fe26c2b2.js +0 -2
  28. package/dist/chunks/6252.fe26c2b2.js.map +0 -1
  29. package/dist/chunks/9566.4cbec02b.js +0 -2
  30. package/dist/chunks/9566.4cbec02b.js.map +0 -1
  31. package/dist/chunks/cabinet-node.888717db.js +0 -3
  32. package/dist/chunks/cabinet-node.888717db.js.map +0 -1
  33. package/dist/chunks/graph-layout-grid.8e2c1fa8.js +0 -2
  34. package/dist/chunks/graph-layout-grid.8e2c1fa8.js.map +0 -1
  35. /package/dist/chunks/{cabinet-app-layer.98eca353.js.LICENSE.txt → cabinet-app-layer.284d2315.js.LICENSE.txt} +0 -0
  36. /package/dist/chunks/{cabinet-container.5d3ff228.js.LICENSE.txt → cabinet-container.211817d5.js.LICENSE.txt} +0 -0
  37. /package/dist/chunks/{cabinet-node.888717db.js.LICENSE.txt → cabinet-node.ccaef2e3.js.LICENSE.txt} +0 -0
package/dist/bricks.json CHANGED
@@ -65,5 +65,5 @@
65
65
  "data-view.graph-text"
66
66
  ]
67
67
  },
68
- "filePath": "bricks/data-view/dist/index.ba8a9563.js"
68
+ "filePath": "bricks/data-view/dist/index.cafe1444.js"
69
69
  }
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_next_bricks_data_view=self.webpackChunk_next_bricks_data_view||[]).push([[5114,3518],{2685:(e,t,r)=>{r.d(t,{j:()=>B});var a=r(7896),n=r(8657),o=r.n(n),i=r(6995),l=r(5095),c=r(4827),s=r(2839),p=r(3028),d=(r(4012),r(37),r(7984),(e,t,r)=>{var a=(new i.Pa4).subVectors(t,e),n=a.length(),o=document.createElement("data-view.app-wall-relation-line");o.style.height="".concat(n,"px"),o.classList.add("relation-line"),o.lightColor=r;var c=new l.cp(o),s=(new i.Pa4).lerpVectors(e,t,.5);c.position.copy(s);var p=(new i._fP).setFromUnitVectors(new i.Pa4(0,1,0).normalize(),a.clone().normalize());return c.setRotationFromQuaternion(p),c}),u=(e,t)=>{var r=new i.Pa4(e[0],e[1],e[2]),a=new i.Pa4(t[0],t[1],t[2]);return{centerVector:(new i.Pa4).lerpVectors(r,a,.5),subVector:(new i.Pa4).subVectors(r,a)}},h=e=>{var{BW:t,TW:r,d:a,TH:n,BH:o,isLeft:c}=e,s=Math.sqrt(Math.pow(r/2-t/2,2)+Math.pow(a,2)),p=document.createElement("div");p.style.cssText="\n width: ".concat(s,"px;\n height:").concat(n,"px;\n position: relative;\n clip-path: polygon(0 0, ").concat(s,"px ").concat(n/2-o/2,"px, ").concat(s,"px ").concat(n/2-o/2+o,"px, 0 ").concat(n,"px);\n ");var d=document.createElement("div");d.className="trapezoidalLeftOrRightAnimation",p.appendChild(d);var h=c?[-t/2,0,0]:[t/2,0,0],g=c?[-r/2,0,a]:[r/2,0,a],b=new l.cp(p),{centerVector:m,subVector:v}=u(h,g);b.position.copy(m);var x=(new i._fP).setFromUnitVectors(new i.Pa4(1,0,0).normalize(),v.clone().normalize());return b.setRotationFromQuaternion(x),b},g=e=>{var{BW:t,TW:r,d:a,TH:n,BH:o,isTop:c}=e,s=Math.sqrt(Math.pow(n/2-o/2,2)+Math.pow(a,2)),p=document.createElement("div");p.style.cssText="\n width: ".concat(r,"px;\n height:").concat(s,"px;\n position: relative;\n clip-path: polygon(0 0, ").concat(r,"px 0, ").concat(r/2-t/2+t,"px ").concat(s,"px, ").concat(r/2-t/2,"px ").concat(s,"px);\n ");var d=document.createElement("div");d.className="trapezoidalTopOrBottomAnimation",p.appendChild(d);var h=new l.cp(p),g=c?[0,-o/2,0]:[0,o/2,0],b=c?[0,-n/2,a]:[0,n/2,a],{centerVector:m,subVector:v}=u(g,b);h.position.copy(m);var x=(new i._fP).setFromUnitVectors(new i.Pa4(0,-1,0).normalize(),v.clone().normalize());return h.setRotationFromQuaternion(x),h},b=e=>{var{objectData:t,leftBtnName:r,clusters:a,columns:n,leftOnClick:o,rightBtnName:i,rightOnClick:c,appName:s}=e,p=600,d=document.createElement("div"),u=new l.cp(d);u.position.set(...t.point);var b=t.width,m=t.height,v=1500,x=1200,w=document.createElement("div");w.style.cssText="\n width: ".concat(b,"px;\n height: ").concat(m,"px;\n box-shadow: inset 0px 1px 2px 0px rgba(255,255,255,0.45);\n border: 1px solid rgba(118,255,255,0.58);\n padding: 16px;\n ");var f=new l.cp(w);f.position.z=0,u.add(f);var y=document.createElement("div");y.style.cssText="\n width: ".concat(v,"px;\n height:").concat(x,"px;\n background: linear-gradient(rgb(13, 54, 179,0.6) 0%, rgb(74, 108, 156,0.6) 100%);\n box-sizing: border-box;\n padding: 16px;\n ");var k=document.createElement("data-view.cabinet-thumbnail");k.clusters=null!=a?a:[],k.columns=null!=n?n:4,k.appName=s,y.className="visibilityAnimate",y.appendChild(k);var z=new l.cp(y);z.position.set(0,0,p);var T=h({BW:b,TW:v,BH:m,TH:x,d:p,isLeft:!0}),C=h({BW:b,TW:v,BH:m,TH:x,d:p,isLeft:!1}),P=g({BW:b,TW:v,BH:m,TH:x,d:p,isTop:!0}),E=g({BW:b,TW:v,BH:m,TH:x,d:p,isTop:!1});if(u.add(T,C,E,P),r){var S=document.createElement("div");S.style.cssText="\n color: #6BE0FA;\n font-size: 28px;\n font-weight: 500;\n width: ".concat(750,"px;\n line-height: 16px;\n "),S.className="visibilityAnimate";var M=document.createElement("span");M.style.cursor="pointer",M.innerText=r,S.appendChild(M);var F=new l.cp(S);F.position.set(-365,-600,14),F.rotateX(Math.PI/2),z.add(F),M.onpointerdown=o}if(i){var R=document.createElement("div");R.style.cssText="\n color: #FFFFFF;\n font-size: 30px;\n font-weight: 500;\n width: ".concat(750,"px;\n text-shadow: 0px 1px 4px #3366FF;\n text-align: right;\n "),R.className="visibilityAnimate";var B=document.createElement("span");B.style.cursor="pointer",B.innerText=i,R.appendChild(B);var A=new l.cp(R);A.position.set(365,-600,14),A.rotateX(Math.PI/2),z.add(A),B.onpointerdown=c}return u.add(z),u},m=(e,t,r)=>{if(null==e||!e.length)return[];var a=e.map((e=>(0,p.Z)((0,p.Z)({},e),{},{x:0,y:0})));if(a.length===t*r)a=a.map(((e,r)=>(0,p.Z)((0,p.Z)({},e),{},{x:r%t+1,y:parseInt("".concat(r/t))+1})));else{for(var n=t*(r-1),o=a.length-n,i=0;i<n;i++){var l=a[i];l.x=i%t+1,l.y=parseInt("".concat(i/t))+1}for(var c=0;c<o/2;c++){var s=a[c+n],d=a[a.length-1-c];s.x=c+1,s.y=r,s!==d&&(d.x=t-c,d.y=r)}}return a},v=(e,t,r,a)=>{var n=new i.Tme;return n.position.x=e.x*t.outerWidth-(r/2+.5)*t.outerWidth,n.position.y=-e.y*t.outerHeight+(a/2+.5)*t.outerHeight,n},x=(e,t,r,a,n,o)=>{var l=new i.Tme,c=new i.Pa4,s=((e,t,r,a,n)=>{var o={x:0,y:0,z:0},i=parseInt("".concat(r*t.outerWidth*180))/(n*Math.PI),l=r/2+.5;return o.x=i*Math.sin(Math.PI/(180/((e.x-l)*(n/r)))),o.y=-e.y*t.outerHeight+(a/2+.5)*t.outerHeight,o.z=i-Math.sqrt(i*i-o.x*o.x),o})(e,t,r,a,n);return l.position.x=s.x,l.position.y=s.y,l.position.z=s.z,c.x=0,c.y=l.position.y,c.z=o,l.lookAt(c),l},w=(e,t,r,a)=>{var n=t.height+2*t.margin,o=(t.width+2*t.margin)/e.aspect,i=.5*Math.max(o,n)/Math.tan(e.fov*Math.PI/360)+t.z,l=0;if(r.forEach((function(e){a>=Math.min.apply(null,e.numRange)&&a<Math.max.apply(null,e.numRange)&&(l=e.distance)})),l>0)return Math.max(l,i);var c=200*Math.ceil((a-160)/40)+3200;return Math.max(c,i)},f=(e,t)=>{var r=[],a=e.userData;return Array.isArray(t)&&t.length&&t.forEach((function(e){a.key!==e.source&&a.key!==e.target||r.push(e)})),r},y=e=>{var t=e.composedPath().find((e=>null==e?void 0:e.shadowRoot));if("DATA-VIEW.APP-WALL-CARD-ITEM"===(null==t?void 0:t.tagName))return t;var r=document.elementFromPoint(e.clientX,e.clientY),a=null==r?void 0:r.shadowRoot.elementFromPoint(e.clientX,e.clientY);return"DATA-VIEW.APP-WALL-CARD-ITEM"===(null==a?void 0:a.tagName)?a:null},k=r(4949),z=r(2779),T=r.n(z),C={width:120,height:160,outerWidth:140,outerHeight:180,lgWidth:180,lgHeight:240},P=[{numRange:[0,40],distance:3e3},{numRange:[40,60],distance:2200},{numRange:[60,80],distance:2700},{numRange:[80,120],distance:3200},{numRange:[120,160],distance:3400},{numRange:[160,300],distance:3600}],E=45,S=100,M=300,F=e=>{var t=Math.ceil(Math.sqrt(e*C.outerHeight/(.4*C.outerWidth))),r=Math.ceil(e/t),a=parseInt("".concat(t*C.outerWidth*180))/(S*Math.PI);return{maxX:t,maxY:r,radius:a,bounds:{width:2*a*Math.sin(Math.PI*(S/2)/180)+C.outerWidth,height:r*C.outerHeight,margin:100,z:a-a*Math.cos(Math.PI*(S/2)/180)}}},R=(0,k.wrapBrick)("data-view.app-wall-system-card");function B(e){var{relations:t,onSystemCardButtonClick:r,useDblclick:p,handleCardDbClick:u,rightBtnOnClick:h,leftBtnOnClick:g}=e,[k,z]=(0,n.useState)(null),B=(0,n.useRef)(),A=(0,n.useRef)(),I=(0,n.useRef)(),_=(0,n.useRef)(),W=(0,n.useRef)(),X=(0,n.useRef)(),D=(0,n.useRef)(),L=(0,n.useRef)(),N=(0,n.useRef)(),H=(0,n.useRef)(),O=(0,n.useRef)({table:[],curve:[]}),V=(0,n.useRef)([]),Z=(0,n.useRef)([]),j=(0,n.useRef)({maxX:0,maxY:0,radius:0,bounds:{width:0,height:0,margin:100,z:0}}),Y=(0,n.useRef)({element:null,mouseoverTimer:null,mouseoutTimer:null,clickTimer:null,dblClickTimer:null,isShowGraph3D:!1,isShowAppInfo:!1,isShowRelations:!1,enable:!0}),G=(0,n.useCallback)((()=>{X.current.render(D.current,L.current)}),[]),U=e=>{var t;if(null===(t=Y.current)||void 0===t||!t.element)return null==e?void 0:e();var{__objectCSS:r,__curve:a,__userData:n}=Y.current.element;new s.kX(r.rotation).to({x:a.rotation.x,y:a.rotation.y,z:a.rotation.z},300).start(),new s.kX(r.scale).to({x:1,y:1,z:1},300).start(),new s.kX(r.position).to({x:a.position.x,y:a.position.y,z:a.position.z},300).onUpdate(G).onStart((()=>{var e;r.element.classList.remove("status-".concat(n.status||"normal","-card")),null===(e=V.current)||void 0===e||e.forEach((e=>{e.element.style.opacity="1"})),Z.current.forEach((e=>{D.current.remove(e)})),Z.current=[],G()})).onComplete((()=>{var t;Y.current.isShowRelations=!1,null==e||e(null===(t=Y.current)||void 0===t?void 0:t.element)})).start()},q=(e,t)=>{Y.current.enable=!1;for(var r=0;r<V.current.length;r++){var a=V.current[r],n=e[r];new s.kX(a.position).to({x:n.position.x,y:n.position.y,z:n.position.z},i.M8C.randFloat(t,2*t)).easing(s.oY.Exponential.InOut).start(),new s.kX(a.rotation).to({x:n.rotation.x,y:n.rotation.y,z:n.rotation.z},i.M8C.randFloat(t,2*t)).easing(s.oY.Exponential.InOut).start()}new s.kX({}).to({},2*t).onUpdate(G).start().onComplete((()=>{Y.current.enable=!0}))},Q=e=>{N.current.reset();var t=Y.current.element.__objectCSS,r=Y.current.element.__curve;Y.current.enable=!1,Y.current.isShowAppInfo=!0;var a,n={x:r.position.x>0?2*-C.width:2*C.width,y:0,z:(L.current.position.z-500)/1.5},o={x:0,y:0,z:L.current.position.z-500},i={x:0,y:r.rotation.y>0?90*-Math.PI/180:90*Math.PI/180,z:0},l={x:0,y:r.rotation.y>0?180*-Math.PI/180:180*Math.PI/180,z:0},c=new s.kX(t.position),p=new s.kX(t.rotation),d=new s.kX(t.position),u=new s.kX(t.rotation);e?(c.to(n,500).easing().onComplete((()=>{W.current.hidden=!0,Y.current.element.style.opacity="1"})),p.to(i,500).easing(),d.to({x:r.position.x,y:r.position.y,z:r.position.z},700).easing(),u.to({x:r.rotation.x,y:r.rotation.y,z:r.rotation.z},700).easing().onComplete((()=>{var e;null===(e=V.current)||void 0===e||e.forEach((e=>{e.element.style.opacity="1"}))}))):(null===(a=V.current)||void 0===a||a.forEach((e=>{t!=e&&(e.element.style.opacity="0.2")})),c.to(n,700).easing().onStart((()=>{_.current.hidden=!1,W.current.hidden=!0})),p.to(i,700).easing(),d.to(o,500).easing().onStart((function(){Y.current.element.style.opacity="0",W.current.style.transition="transition: all .3s ease",W.current.hidden=!1})),u.to(l,500).easing()),c.chain(d).start(),p.chain(u).start(),new s.kX({}).to({},1400).onUpdate((()=>{if(G(),Math.abs(t.rotation.y)>=Math.PI/2){var e=Y.current.element.getBoundingClientRect(),r=1.35,a=e.width*r,n=e.height*r;W.current.style.width="".concat(a,"px"),W.current.style.height="".concat(n,"px"),W.current.style.top="".concat(e.top-(r-1)*n/2,"px"),W.current.style.left="".concat(e.left-(r-1)*a/2,"px")}})).start().onComplete((function(){Y.current.enable=!0,Y.current.isShowAppInfo=!e,_.current.hidden=e}))};return(0,n.useEffect)((()=>{var e;(()=>{var e=window.innerWidth,t=window.innerHeight,r=e/t,a=new l.lX;a.setSize(e,t),A.current.replaceChildren(a.domElement);var n=new i.cPb(E,r,.1,1e4),o=new c.$(n,a.domElement);o.rotateSpeed=.5,o.minDistance=500,o.maxDistance=1e4;var s=new i.xsS;D.current=s,L.current=n,N.current=o,X.current=a})();var t=()=>{e=requestAnimationFrame(t),s.ZP.update(),N.current.update()};t();var r=()=>{L.current.aspect=window.innerWidth/window.innerHeight,L.current.updateProjectionMatrix(),X.current.setSize(window.innerWidth,window.innerHeight),G()};return N.current.addEventListener("change",G),window.addEventListener("resize",r),()=>{window.removeEventListener("resize",r),N.current.removeEventListener("change",G),N.current.dispose(),s.ZP.removeAll(),L.current.clear(),D.current.clear(),cancelAnimationFrame(e)}}),[]),(0,n.useEffect)((()=>{var t,r=(null===(t=e.dataSource)||void 0===t?void 0:t.length)||0;return(e=>{j.current=F(e)})(r),L.current.position.z=w(L.current,j.current.bounds,P,r),L.current.updateProjectionMatrix(),N.current.position0.copy(L.current.position),m(e.dataSource,j.current.maxX,j.current.maxY).forEach(((e,t)=>{var r,a,n=document.createElement("data-view.app-wall-card-item");n.status=e.status,n.cardTitle=null===(r=e.cardItemProps)||void 0===r?void 0:r.cardTitle,n.description=null===(a=e.cardItemProps)||void 0===a?void 0:a.description;var o="status-".concat((null==e?void 0:e.status)||"normal");n.className="card-item-container ".concat(o),n.style.width="".concat(C.width,"px"),n.style.height="".concat(C.height,"px"),n.classList.add("card-item-wrap");var i=new l.cp(n);i.position.set(4e3*Math.random()-2e3,4e3*Math.random()-2e3,4e3*Math.random()-2e3),D.current.add(i),V.current.push(i);var c=v(e,C,j.current.maxX,j.current.maxY);O.current.table.push(c);var s=x(e,C,j.current.maxX,j.current.maxY,S,j.current.radius);O.current.curve.push(s),i.userData=e,n.__objectCSS=i,n.__userData=e,n.__curve=s})),q(O.current.curve,1e3),()=>{N.current.reset(),s.ZP.removeAll(),V.current.map((e=>{D.current.remove(e)})),V.current=[],O.current={table:[],curve:[]},Y.current={element:null,mouseoverTimer:null,mouseoutTimer:null,clickTimer:null,dblClickTimer:null,enable:!0,isShowAppInfo:!1,isShowGraph3D:!1,isShowRelations:!1}}}),[e.dataSource]),(0,n.useEffect)((()=>{var e=B.current,r=e=>{if(Y.current.isShowAppInfo||Y.current.isShowGraph3D||!Y.current.enable)return!1;var r=y(e);clearTimeout(Y.current.mouseoverTimer),Y.current.mouseoverTimer=window.setTimeout((()=>{U((()=>{r&&!Y.current.isShowRelations&&!Y.current.isShowAppInfo&&(e=>{var{__objectCSS:r,__userData:a}=e,n={x:r.position.x+50*Math.sin(r.rotation.y),y:r.position.y,z:r.position.z+100*Math.cos(r.rotation.y)};Y.current.isShowRelations=!0,new s.kX(r.rotation).to({x:0,y:0,z:0},300).onStart((()=>{r.element.classList.add("status-".concat(a.status||"normal","-card"))})).start(),new s.kX(r.scale).to({x:1.2,y:1.2,z:1.2},300).start(),new s.kX(r.position).to(n,300).onUpdate(G).onComplete((function(){var a,n,o,i,l,c;l=f(a=r,t),c=a.userData,null==l||l.forEach((e=>{e.source===c.key?(i=V.current.find((t=>t.userData.key===e.target)),o=i&&d(a.position,i.position,"blue")):(i=V.current.find((t=>t.userData.key===e.source)),o=i&&d(i.position,a.position,"purple")),o&&(Z.current.push(o),D.current.add(o))})),null===(n=V.current)||void 0===n||n.forEach((e=>{a!=e&&l.every((t=>t.source!=e.userData.key&&t.target!=e.userData.key))&&(e.element.style.opacity="0.2")})),G(),Y.current.element=e})).start()})(r)}))}),500)},a=e=>{if(Y.current.isShowAppInfo||Y.current.isShowGraph3D||!Y.current.enable)return!1;clearTimeout(Y.current.clickTimer),clearTimeout(Y.current.mouseoverTimer);var t=y(e);Y.current.clickTimer=window.setTimeout((function(){U((()=>{t&&(clearTimeout(Y.current.mouseoverTimer),e.stopPropagation(),Y.current.element=t,z(t.__userData),Q(!1))}))}),300)},n=e=>{if(Y.current.isShowAppInfo||Y.current.isShowGraph3D||!Y.current.enable)return!1;clearTimeout(Y.current.clickTimer),clearTimeout(Y.current.mouseoverTimer),clearTimeout(Y.current.dblClickTimer);var t=y(e),{__userData:r,__objectCSS:a}=t;U((()=>{var e,n;p||(null===(e=r.trapezoidalProps)||void 0===e||null===(n=e.clusters)||void 0===n?void 0:n.length)<1?Y.current.dblClickTimer=window.setTimeout((function(){u(r)}),300):(Y.current.isShowGraph3D=!0,Y.current.dblClickTimer=window.setTimeout((function(){if(t){clearTimeout(Y.current.mouseoverTimer),clearTimeout(Y.current.clickTimer),A.current.classList.add("mask-container"),N.current.reset();var e={x:a.position.x,y:860+C.height*(j.current.maxY-r.y)},n=new s.kX(L.current.position),o=new s.kX({opacity:0,scale:0,borderLeftWidth:0,borderRightWidth:0,borderTopWidth:0,borderBottomWidth:0}),i=new s.kX({z:0}),l=new s.kX(L.current.position),c=new s.kX(N.current.target),p=new s.kX({blur:12,spread:0});q(O.current.table,600),n.to({x:0,y:-3600,z:1600},1e3).chain(p,o,i),o.to({opacity:1},700).onStart((()=>{var e,t,n,o,i,l=b({objectData:{width:C.width,height:C.height,point:[a.position.x,a.position.y,a.position.z]},clusters:null===(e=r.trapezoidalProps)||void 0===e?void 0:e.clusters,columns:null===(t=r.trapezoidalProps)||void 0===t?void 0:t.columns,appName:null===(n=r.trapezoidalProps)||void 0===n?void 0:n.appName,leftBtnName:null===(o=r.trapezoidalProps)||void 0===o?void 0:o.leftBtnName,rightBtnName:null===(i=r.trapezoidalProps)||void 0===i?void 0:i.rightBtnName,rightOnClick:()=>h(r),leftOnClick:()=>g(r)});H.current=l,D.current.add(l)})),i.to({z:M},1e3).delay(230).chain(l,c),l.to({x:e.x,y:-3600+e.y},1e3),c.to({x:e.x,y:e.y},1e3).onComplete((function(){I.current.style.visibility="visible"})),n.start()}}),300))}))};return e.addEventListener("dblclick",n),e.addEventListener("click",a),e.addEventListener("mouseover",r),()=>{e.removeEventListener("mouseover",r),e.removeEventListener("click",a),e.removeEventListener("dblclick",n)}}),[]),o().createElement("div",{className:"appwall-container",ref:B},o().createElement("div",{className:"appwall",ref:A}),o().createElement("div",{className:"mask",ref:_,onClick:()=>{Y.current.enable&&Q(!0)},hidden:!0},o().createElement(R,(0,a.Z)({},null==k?void 0:k.systemCardProps,{onClick:e=>e.stopPropagation(),handleClick:()=>r(k),ref:W,className:T()({infoWrapper:"normal"===(null==k?void 0:k.status),warningWrapper:"warning"===(null==k?void 0:k.status)})}))),o().createElement("div",{className:"closeBtn",ref:I,onClick:()=>{(()=>{s.ZP.removeAll();var e=new s.kX({z:0}),t=new s.kX({opacity:1}),r=new s.kX(L.current.position),a=new s.kX(N.current.target),n=new s.kX({blur:1500,spread:100});e.to({z:M},1e3).chain(r,a,n),t.to({opacity:0},1e3).onStart((()=>{D.current.remove(H.current),I.current.style.visibility="hidden"})).delay(300),r.to(N.current.position0,1e3).onComplete((function(){N.current.reset(),A.current.classList.remove("mask-container"),q(O.current.curve,600),Y.current.isShowGraph3D=!1})),a.to({x:0,y:0,z:0},1e3),n.to({blur:0,spread:0},1e3),e.start(),t.start()})()}}))}},2284:(e,t,r)=>{r.d(t,{Z:()=>l});var a=r(9601),n=r.n(a),o=r(2609),i=r.n(o)()(n());i.push([e.id,':host{display:block;width:100%;height:100%}:host([hidden]){display:none}*,\n*::before,\n*::after{box-sizing:border-box}.mask-container{position:absolute;top:0;left:0;width:100%;height:100%;background:#0c1216;z-index:1000}.appwall{position:relative}.appwall.loading .card-item{pointer-events:none!important}.mask{position:absolute;width:100%;height:100%;top:0;bottom:0;left:0;right:0;z-index:100;display:flex;align-items:center;justify-content:center}.mask[hidden]{display:none}.infoWrapper{position:absolute;background:var(--color-fill-bg-base-4);box-shadow:0 0 12px 2px rgba(80,255,255,0.45),inset 0 0 22px 0 #20242A;border:2px solid #50FFFF;overflow:hidden}.warningWrapper{position:absolute;background:linear-gradient(180deg,#CC0066 0%,rgba(204,0,102,0.2) 100%),#0F1117FF;box-shadow:0 0 12px 2px rgba(204,0,102,0.4),inset 0 4px 10px 0 rgba(255,255,255,0.65);overflow:hidden}.relation-line{pointer-events:none!important}.closeBtn{visibility:hidden;position:fixed;top:50px;right:50px;width:46px;height:46px;text-align:center;border:1px solid;color:rgb(138 189 255/84%);font-size:20px;line-height:46px;cursor:pointer;background:rgba(138,189,255,0.13);border-image:linear-gradient(135deg,rgba(255,255,255,0.5),rgba(255,255,255,0),rgba(255,255,255,0.33)) 1 1;display:flex;justify-content:center;align-items:center;z-index:1000}.closeBtn:before,\n.closeBtn:after{content:"";width:2px;height:20px;background:linear-gradient(180deg,#3467FF 0%,#98CBFF 100%);position:absolute}.closeBtn:before{transform:rotateZ(45deg)}.closeBtn:after{transform:rotateZ(-45deg)}.closeBtn:hover:after,\n.closeBtn:hover:before{background:var(--color-normal-text)}.visibilityAnimate{visibility:hidden;animation:visibility 0.5s both 1s}.trapezoidalLeftOrRightAnimation,\n.trapezoidalTopOrBottomAnimation{background:linear-gradient(180deg,rgba(51,102,255,0.4) 0%,#99CCFF 100%);opacity:0.2;position:absolute}.trapezoidalTopOrBottomAnimation{bottom:0;width:100%;left:0;animation:animateTop 1s both}.trapezoidalLeftOrRightAnimation{top:0;right:0;height:100%;animation:animateLeft 1s both}@keyframes animateTop{0%{height:0}100%{height:100%}}@keyframes animateLeft{0%{width:0}100%{width:100%}}@keyframes visibility{0%{visibility:hidden}100%{visibility:visible}}.card-item-container{transition:opacity 0.5s}.status-normal-card{box-shadow:0 0 100px rgba(80,255,255,0.58);border:1px solid rgba(80,255,255,0.58);background:-webkit-gradient(liner,left top,left bottom,from(#002c8d),to(#00123e));background:linear-gradient(to bottom,rgba(80,255,255,1) 0%,rgba(80,255,255,0) 100%)}.status-warning-card{box-shadow:0 0 100px #CC0066;background:-webkit-gradient(liner,left top,left bottom,from(#CC0066),to(rgba(204,0,102,0.2)));background:linear-gradient(to bottom,#CC0066 0%,rgba(204,0,102,0.2) 100%)}',""]);const l=i.toString()},9214:(e,t,r)=>{r.d(t,{Z:()=>l});var a=r(9601),n=r.n(a),o=r(2609),i=r.n(o)()(n());i.push([e.id,":host{display:inline-block;width:100%;height:100%}:host([hidden]){display:none}*,\n*::before,\n*::after{box-sizing:border-box}.card-item-container{position:relative;width:100%;height:100%}.card-item{position:relative;width:100%;height:100%;display:flex;justify-content:center;align-items:center;text-align:center;border-radius:var(--no-border-radius);border-color:transparent;transition:border-color 0.5s}.status-normal:hover{box-shadow:0 0 100px rgba(80,255,255,0.58);border:1px solid rgba(80,255,255,0.58);background:-webkit-gradient(liner,left top,left bottom,from(#002c8d),to(#00123e));background:linear-gradient(to bottom,rgba(80,255,255,1) 0%,rgba(80,255,255,0) 100%)}.status-warning:hover{box-shadow:0 0 100px #CC0066;background:-webkit-gradient(liner,left top,left bottom,from(#CC0066),to(rgba(204,0,102,0.2)));background:linear-gradient(to bottom,#CC0066 0%,rgba(204,0,102,0.2) 100%)}.card-item-container.status-normal .card-item{background:var(--color-fill-bg-base-4);box-shadow:inset 0px 1px 2px 0px rgba(255,255,255,0.45)}.card-item-container.status-normal:hover .card-item{border:2px solid rgba(80,255,255,0.58)}.card-item-container.status-warning .card-item{background:linear-gradient(180deg,#CC0066 0%,rgba(204,0,102,0.2) 100%);box-shadow:inset 0px 2px 6px 0px rgba(255,255,255,0.65)}.card-item-container.status-warning:hover .card-item{border:none}.card-item-text-container{width:100%;padding:0 12px}.card-item-title,\n.card-item-description{font-size:20px;font-weight:var(--font-weight-500);color:var(--color-normal-text)}.card-item-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-item-description{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}",""]);const l=i.toString()},8384:(e,t,r)=>{r.d(t,{Z:()=>l});var a=r(9601),n=r.n(a),o=r(2609),i=r.n(o)()(n());i.push([e.id,":host{display:inline-block;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;height:100%}:host([hidden]){display:none}*,\n*::before,\n*::after{box-sizing:border-box}.relation-line{position:relative;width:6px;height:100%;background:var(--color-text-divider-line-1);overflow:hidden}.relation-line::after{content:'';position:absolute;width:100%;height:20%;left:0px;top:0px;animation:lightMove 1000ms ease-in-out infinite,lightOpacity 1000ms ease-in-out infinite}.relation-line.light-color-blue::after{background:linear-gradient(rgba(80,255,255,0) 0%,rgba(80,255,255,1) 90%,#DFFFFF 100%)}.relation-line.light-color-purple::after{background:linear-gradient(rgba(102,0,255,0) 0%,rgba(102,0,255,1) 90%,#B07BFF 100%)}@keyframes lightMove{0%{top:0;transform:translateY(-100%)}100%{top:100%;transform:translateY(0)}}@keyframes lightOpacity{0%{opacity:0}20%{opacity:1}80%{opacity:1}100%{opacity:0}}",""]);const l=i.toString()},9948:(e,t,r)=>{r.d(t,{Z:()=>l});var a=r(9601),n=r.n(a),o=r(2609),i=r.n(o)()(n());i.push([e.id,":host{display:inline-block}:host([hidden]){display:none}*,\n*::before,\n*::after{box-sizing:border-box}.wrapper{position:relative;width:100%;height:100%;padding:30px 24px 35px;left:0;display:flex;flex-direction:column;border-radius:var(--no-border-radius)}.cardName{font-size:var(--title-font-size-strong);line-height:22px;text-align:center;font-weight:var(--font-weight-500);color:var(--color-normal-text);text-shadow:0 1px 4px rgba(51,102,255,0.5);margin-bottom:35px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.descriptions{flex:1;margin-bottom:20px;font-size:var(--auxiliary-font-size-small);overflow:auto;font-weight:var(--font-weight-400)}.descriptionsItem .itemKey{color:var(--color-secondary-text)}.descriptionsItem .itemValue{color:var(--color-strong-text)}.descriptionsItem{display:flex;gap:10px;margin-bottom:12px}.descriptionsItem>div{flex:1;text-align:left;word-break:break-all}.buttonContent{position:absolute;bottom:16px;right:24px;font-size:var(--auxiliary-font-size);color:#99CCFF;cursor:pointer;font-weight:var(--font-weight-500)}.buttonName{margin-left:5px}",""]);const l=i.toString()},1043:(e,t,r)=>{r.d(t,{Z:()=>l});var a=r(9601),n=r.n(a),o=r(2609),i=r.n(o)()(n());i.push([e.id,":host{--palette-rgba-white-1:rgba(255,255,255,10%);--palette-rgba-white-2:rgba(255,255,255,20%);--palette-rgba-white-3:rgba(255,255,255,30%);--palette-rgba-white-4:rgba(255,255,255,40%);--palette-rgba-white-5:rgba(255,255,255,50%);--palette-rgba-white-6:rgba(255,255,255,60%);--palette-rgba-white-7:rgba(255,255,255,70%);--palette-rgba-white-8:rgba(255,255,255,80%);--palette-rgba-white-9:rgba(255,255,255,90%);--palette-rgba-white-10:rgba(255,255,255,100%);--palette-rgba-gray-1:rgba(0,0,0,10%);--palette-rgba-gray-2:rgba(0,0,0,20%);--palette-rgba-gray-3:rgba(0,0,0,30%);--palette-rgba-gray-4:rgba(0,0,0,40%);--palette-rgba-gray-5:rgba(0,0,0,50%);--palette-rgba-gray-6:rgba(0,0,0,60%);--palette-rgba-gray-7:rgba(0,0,0,70%);--palette-rgba-gray-8:rgba(0,0,0,80%);--palette-rgba-gray-9:rgba(0,0,0,90%);--palette-rgba-gray-10:rgba(0,0,0,100%);--palette-rgba-blue-gray-2:rgba(101,106,134,20%);--palette-rgba-blue-gray-3:rgba(101,106,134,30%);--palette-rgba-blue-gray-8:rgba(101,106,134,80%);--palette-tech-blue-4-channel:67,127,255;--palette-tech-blue-4:rgb(var(--palette-tech-blue-4-channel));--palette-tech-blue-6-channel:51,102,255;--palette-tech-blue-6:rgb(var(--palette-tech-blue-6-channel));--palette-tech-blue-8-channel:40,69,159;--palette-tech-blue-8:rgb(var(--palette-tech-blue-8-channel));--palette-sea-green-4-channel:131,245,225;--palette-sea-green-4:rgb(var(--palette-sea-green-4-channel));--palette-green-6-channel:81,235,73;--palette-green-6:rgb(var(--palette-green-6-channel));--palette-green-2:rgba(var(--palette-green-6-channel),20%);--palette-lotus-pink-7-channel:204,0,102;--palette-lotus-pink-7:rgb(var(--palette-lotus-pink-7-channel));--palette-red-6-channel:242,39,39;--palette-red-6:rgb(var(--palette-red-6-channel));--palette-red-2:rgba(var(--palette-red-6-channel),20%);--color-fill-global-bg:#0f1014;--color-fill-bg-container-1:var(--palette-rgba-white-1);--color-fill-bg-container-2:var(--palette-rgba-blue-gray-2);--color-fill-bg-container-3:var(--palette-rgba-blue-gray-8);--color-fill-bg-base-1:var(--palette-rgba-blue-gray-2);--color-fill-bg-base-2:rgba(15,16,20,0%);--color-fill-bg-base-3:rgba(0,0,0,20%);--color-fill-bg-base-4:rgba(40,46,58,100%);--color-fill-bg-base-5:rgba(19,25,47,80%);--color-fill-bg-base-6:var(--palette-rgba-blue-gray-3);--color-brand:var(--palette-tech-blue-6);--color-brand-hover:var(--palette-tech-blue-4);--color-brand-active:var(--palette-tech-blue-8);--color-contrast-1:var(--palette-sea-green-4);--color-error:var(--palette-red-6);--color-error-bg:var(--palette-red-2);--color-success:var(--palette-green-6);--color-success-bg:var(--palette-green-2);--color-header-text-big:var(--palette-rgba-white-10);--color-header-text:var(--palette-rgba-white-10);--color-normal-text:var(--palette-rgba-white-10);--color-strong-text:var(--palette-rgba-white-9);--color-auxiliary-text:var(--palette-rgba-white-8);--color-secondary-text:var(--palette-rgba-white-6);--color-disabled-text:var(--palette-rgba-white-4);--color-border-divider-line:var(--palette-rgba-white-1);--color-text-divider-line-1:var(--palette-rgba-white-2);--color-text-divider-line-2:var(--palette-rgba-white-2);--small-border-radius:2px;--medius-border-radius:5px;--larger-border-radius:12px;--container-border-radius:9999px;--no-border-radius:0px;--mask-bg:var(--palette-rgba-gray-7);--title-font-size-larger:30px;--title-font-size-strong:22px;--title-font-size:18px;--normal-font-size:14px;--auxiliary-font-size:16px;--auxiliary-font-size-small:12px;--overview-data-font-size:34px;--statistics-data-font-size:28px;--normal-data-font-size-larger:20px;--normal-data-font-size:16px;--chart-legend-font-size:12px;--chart-tooltips-font-size-1:12px;--chart-tooltips-font-size-2:12px;--chart-axis-x-font-size:12px;--chart-axis-x-font-size-larger:14px;--chart-axis-y-font-size:12px;--chart-axis-y-font-size-larger:14px;--font-weight-600:600;--font-weight-500:500;--font-weight-400:400;--text-shadow:0px 1px 4px #2863ee;--border-width-base:1px;--border-width-double-base:2px;--border-width-tribble-base:3px;--punctate-width-base:1px;--paragraph-width-base:1px}",""]);const l=i.toString()}}]);
2
+ //# sourceMappingURL=5114.3fb5d815.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunks/5114.3fb5d815.js","mappings":"yOAuEaA,G,sBAAqBA,CAChCC,EACAC,EACAC,KAEA,IAAMC,GAAY,IAAIC,EAAAA,KAAUC,WAAWJ,EAAcD,GACnDM,EAAaH,EAAUI,SAEvBC,EAAcC,SAASC,cAC3B,oCAEFF,EAAYG,MAAMC,OAAS,GAAHC,OAAMP,EAAU,MACxCE,EAAYM,UAAUC,IAAI,iBAC1BP,EAAYN,WAAaA,EACzB,IAAMc,EAAa,IAAIC,EAAAA,GAAYT,GAE7BU,GAAe,IAAId,EAAAA,KAAUe,YACjCnB,EACAC,EACA,IAEFe,EAAWI,SAASC,KAAKH,GAIzB,IAAMI,GAAa,IAAIC,EAAAA,KAAaC,mBAClC,IAAIpB,EAAAA,IAAQ,EAAG,EAAG,GAAGqB,YACrBtB,EAAUuB,QAAQD,aAIpB,OAFAT,EAAWW,0BAA0BL,GAE9BN,CAAU,GAGNY,EAA2BA,CACtCC,EACAC,KAEA,IAAMC,EAAS,IAAI3B,EAAAA,IAAQyB,EAAM,GAAIA,EAAM,GAAIA,EAAM,IAC/CG,EAAS,IAAI5B,EAAAA,IAAQ0B,EAAI,GAAIA,EAAI,GAAIA,EAAI,IAC/C,MAAO,CACLZ,cAAc,IAAId,EAAAA,KAAUe,YAAYY,EAAQC,EAAQ,IACxD7B,WAAW,IAAIC,EAAAA,KAAUC,WAAW0B,EAAQC,GAC7C,EAEUC,EAAuCC,IAQlD,IAAM,GAAEC,EAAE,GAAEC,EAAE,EAAEC,EAAC,GAAEC,EAAE,GAAEC,EAAE,OAAEC,GAAWN,EAChCtB,EAAS6B,KAAKC,KAAKD,KAAKE,IAAIP,EAAK,EAAID,EAAK,EAAG,GAAKM,KAAKE,IAAIN,EAAG,IAC9DO,EAAUnC,SAASC,cAAc,OACvCkC,EAAQjC,MAAMkC,QAAU,+BAAHhC,OACKD,EAAM,mCAAAC,OACNyB,EAAE,4FAAAzB,OAEeD,EAAM,OAAAC,OAC/CyB,EAAK,EAAIC,EAAK,EAAC,QAAA1B,OACVD,EAAM,OAAAC,OAAMyB,EAAK,EAAIC,EAAK,EAAIA,EAAE,UAAA1B,OAASyB,EAAE,8BAElD,IAAMQ,EAAWrC,SAASC,cAAc,OACxCoC,EAASC,UAAY,kCACrBH,EAAQI,YAAYF,GACpB,IAAMjB,EAAsBW,EAAS,EAAEL,EAAK,EAAG,EAAG,GAAK,CAACA,EAAK,EAAG,EAAG,GAC7DL,EAAoBU,EAAS,EAAEJ,EAAK,EAAG,EAAGC,GAAK,CAACD,EAAK,EAAG,EAAGC,GAC3DY,EAAkB,IAAIhC,EAAAA,GAAY2B,IAClC,aAAE1B,EAAY,UAAEf,GAAcyB,EAAyBC,EAAOC,GACpEmB,EAAgB7B,SAASC,KAAKH,GAC9B,IAAMI,GAAa,IAAIC,EAAAA,KAAaC,mBAClC,IAAIpB,EAAAA,IAAQ,EAAG,EAAG,GAAGqB,YACrBtB,EAAUuB,QAAQD,aAGpB,OADAwB,EAAgBtB,0BAA0BL,GACnC2B,CAAe,EAGXC,EAAuChB,IAQlD,IAAM,GAAEC,EAAE,GAAEC,EAAE,EAAEC,EAAC,GAAEC,EAAE,GAAEC,EAAE,MAAEY,GAAUjB,EAC/BtB,EAAS6B,KAAKC,KAAKD,KAAKE,IAAIL,EAAK,EAAIC,EAAK,EAAG,GAAKE,KAAKE,IAAIN,EAAG,IAC9DO,EAAUnC,SAASC,cAAc,OACvCkC,EAAQjC,MAAMkC,QAAU,+BAAHhC,OACKuB,EAAE,mCAAAvB,OACFD,EAAM,4FAAAC,OAEWuB,EAAE,UAAAvB,OAC3CuB,EAAK,EAAID,EAAK,EAAIA,EAAE,OAAAtB,OAChBD,EAAM,QAAAC,OAAOuB,EAAK,EAAID,EAAK,EAAC,OAAAtB,OAAMD,EAAM,6BAE9C,IAAMkC,EAAWrC,SAASC,cAAc,OACxCoC,EAASC,UAAY,kCACrBH,EAAQI,YAAYF,GACpB,IAAMG,EAAkB,IAAIhC,EAAAA,GAAY2B,GAClCf,EAAsBsB,EAAQ,CAAC,GAAIZ,EAAK,EAAG,GAAK,CAAC,EAAGA,EAAK,EAAG,GAC5DT,EAAoBqB,EAAQ,CAAC,GAAIb,EAAK,EAAGD,GAAK,CAAC,EAAGC,EAAK,EAAGD,IAC1D,aAAEnB,EAAY,UAAEf,GAAcyB,EAAyBC,EAAOC,GACpEmB,EAAgB7B,SAASC,KAAKH,GAC9B,IAAMkC,GAAgB,IAAI7B,EAAAA,KAAaC,mBACrC,IAAIpB,EAAAA,IAAQ,GAAI,EAAG,GAAGqB,YACtBtB,EAAUuB,QAAQD,aAGpB,OADAwB,EAAgBtB,0BAA0ByB,GACnCH,CAAe,EAOXI,EAA2BnB,IACtC,IAAM,WACJoB,EAAU,YACVC,EAAW,SACXC,EAAQ,QACRC,EAAO,YACPC,EAAW,aACXC,EAAY,aACZC,EAAY,QACZC,GACE3B,EACEG,EAAI,IACJyB,EAAYrD,SAASC,cAAc,OACnCqD,EAAkB,IAAI9C,EAAAA,GAAY6C,GACxCC,EAAgB3C,SAAS4C,OAAOV,EAAWW,OAE3C,IAAM9B,EAAamB,EAAWY,MAC5B3B,EAAae,EAAW1C,OACxBwB,EAAK,KACLE,EAAK,KAED6B,EAAa1D,SAASC,cAAc,OAC1CyD,EAAWxD,MAAMkC,QAAU,+BAAHhC,OACEsB,EAAE,oCAAAtB,OACD0B,EAAE,2MAK7B,IAAM6B,EAAoB,IAAInD,EAAAA,GAAYkD,GAC1CC,EAAkBhD,SAASiD,EAAI,EAC/BN,EAAgBhD,IAAIqD,GAGpB,IAAME,EAAU7D,SAASC,cAAc,OACvC4D,EAAQ3D,MAAMkC,QAAU,+BAAHhC,OACKuB,EAAE,mCAAAvB,OACFyB,EAAE,iNAK5B,IAAMiC,EAAe9D,SAASC,cAC5B,+BAEF6D,EAAaf,SAAWA,QAAAA,EAAY,GACpCe,EAAad,QAAUA,QAAAA,EAAW,EAClCc,EAAaV,QAAUA,EACvBS,EAAQvB,UAAY,oBACpBuB,EAAQtB,YAAYuB,GACpB,IAAMC,EAAiB,IAAIvD,EAAAA,GAAYqD,GACvCE,EAAepD,SAAS4C,IAAI,EAAG,EAAG3B,GAElC,IAAMoC,EAAsBxC,EAAoC,CAC9DE,KACAC,KACAG,KACAD,KACAD,IACAG,QAAQ,IAEJkC,EAAuBzC,EAAoC,CAC/DE,KACAC,KACAG,KACAD,KACAD,IACAG,QAAQ,IAEJmC,EAAqBzB,EAAoC,CAC7Df,KACAC,KACAG,KACAD,KACAD,IACAc,OAAO,IAEHyB,EAAwB1B,EAAoC,CAChEf,KACAC,KACAG,KACAD,KACAD,IACAc,OAAO,IAQT,GANAY,EAAgBhD,IACd0D,EACAC,EACAE,EACAD,GAEEpB,EAAa,CACf,IAAMsB,EAAUpE,SAASC,cAAc,OACvCmE,EAAQlE,MAAMkC,QAAU,sIAAHhC,OAICuB,IAAM,+DAG5ByC,EAAQ9B,UAAY,oBACpB,IAAM+B,EAAWrE,SAASC,cAAc,QACxCoE,EAASnE,MAAMoE,OAAS,UACxBD,EAASE,UAAYzB,EACrBsB,EAAQ7B,YAAY8B,GACpB,IAAMG,EAAgB,IAAIhE,EAAAA,GAAY4D,GACtCI,EAAc7D,SAAS4C,KAAI,KAAc,IAAS,IAClDiB,EAAcC,QAAQzC,KAAK0C,GAAK,GAChCX,EAAezD,IAAIkE,GACnBH,EAASM,cAAgB1B,CAC3B,CACA,GAAIC,EAAc,CAChB,IAAM0B,EAAW5E,SAASC,cAAc,OACxC2E,EAAS1E,MAAMkC,QAAU,sIAAHhC,OAIAuB,IAAM,mHAI5BiD,EAAStC,UAAY,oBACrB,IAAMuC,EAAW7E,SAASC,cAAc,QACxC4E,EAAS3E,MAAMoE,OAAS,UACxBO,EAASN,UAAYrB,EAErB0B,EAASrC,YAAYsC,GACrB,IAAMC,EAAiB,IAAItE,EAAAA,GAAYoE,GACvCE,EAAenE,SAAS4C,IAAI5B,KAAa,IAAS,IAClDmD,EAAeL,QAAQzC,KAAK0C,GAAK,GACjCX,EAAezD,IAAIwE,GACnBD,EAASF,cAAgBxB,CAC3B,CAEA,OADAG,EAAgBhD,IAAIyD,GACbT,CAAe,EASXyB,EAAiBA,CAC5BC,EACAC,EACAC,KAEA,GAAKF,UAAAA,EAAYlF,OAAQ,MAAO,GAChC,IAAIqF,EAAoBH,EAAWI,KAAKxD,IAACyD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAWzD,GAAC,IAAE0D,EAAG,EAAGC,EAAG,MAChE,GAAIJ,EAAQrF,SAAWmF,EAAOC,EAC5BC,EAAUA,EAAQC,KAAI,CAACxD,EAAG4D,KAACH,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACtBzD,GAAC,IACJ0D,EAAIE,EAAIP,EAAQ,EAChBM,EAAGE,SAAS,GAADrF,OAAIoF,EAAIP,IAAU,UAE1B,CAGL,IAFA,IAAMS,EAAST,GAAQC,EAAO,GACxBS,EAAOR,EAAQrF,OAAS4F,EACrB9D,EAAI,EAAGA,EAAI8D,EAAQ9D,IAAK,CAC/B,IAAMgE,EAAIT,EAAQvD,GAClBgE,EAAEN,EAAK1D,EAAIqD,EAAQ,EACnBW,EAAEL,EAAIE,SAAS,GAADrF,OAAIwB,EAAIqD,IAAU,CAClC,CACA,IAAK,IAAIY,EAAI,EAAGA,EAAIF,EAAO,EAAGE,IAAK,CACjC,IAAMC,EAAIX,EAAQU,EAAIH,GACpBK,EAAIZ,EAAQA,EAAQrF,OAAS,EAAI+F,GACnCC,EAAER,EAAIO,EAAI,EACVC,EAAEP,EAAIL,EACFY,IAAMC,IACRA,EAAET,EAAIL,EAAOY,EACbE,EAAER,EAAIL,EAEV,CACF,CACA,OAAOC,CAAO,EAEHa,EAAoBA,CAC/BC,EACAC,EACAjB,EACAC,KAEA,IAAMiB,EAAW,IAAIC,EAAAA,IAKrB,OAJAD,EAASxF,SAAS2E,EAChBW,EAAKX,EAAIY,EAASG,YAAcpB,EAAO,EAAI,IAAOiB,EAASG,WAC7DF,EAASxF,SAAS4E,GACfU,EAAKV,EAAIW,EAASI,aAAepB,EAAO,EAAI,IAAOgB,EAASI,YACxDH,CAAQ,EAuBJI,EAAoBA,CAC/BN,EACAC,EACAjB,EACAC,EACAsB,EACAC,KAEA,IAAMN,EAAW,IAAIC,EAAAA,IACfM,EAAS,IAAI/G,EAAAA,IACbgB,EA9B4BgG,EAClCV,EACAC,EACAjB,EACAC,EACAsB,KAEA,IAAM7F,EAAqB,CACvB2E,EAAG,EACHC,EAAG,EACH3B,EAAG,GAELgD,EAAInB,SAAS,GAADrF,OAAI6E,EAAOiB,EAASG,WAAa,OAAUG,EAAQxE,KAAK0C,IACpEmC,EAAI5B,EAAO,EAAI,GAKjB,OAJAtE,EAAS2E,EAAIsB,EAAI5E,KAAK8E,IAAI9E,KAAK0C,IAAM,MAAQuB,EAAKX,EAAIuB,IAAML,EAAQvB,MACpEtE,EAAS4E,GACNU,EAAKV,EAAIW,EAASI,aAAepB,EAAO,EAAI,IAAOgB,EAASI,YAC/D3F,EAASiD,EAAIgD,EAAI5E,KAAKC,KAAK2E,EAAIA,EAAIjG,EAAS2E,EAAI3E,EAAS2E,GAClD3E,CAAQ,EAYEgG,CAAqBV,EAAMC,EAAUjB,EAAMC,EAAMsB,GAQlE,OAPAL,EAASxF,SAAS2E,EAAI3E,EAAS2E,EAC/Ba,EAASxF,SAAS4E,EAAI5E,EAAS4E,EAC/BY,EAASxF,SAASiD,EAAIjD,EAASiD,EAC/B8C,EAAOpB,EAAI,EACXoB,EAAOnB,EAAIY,EAASxF,SAAS4E,EAC7BmB,EAAO9C,EAAI6C,EACXN,EAASY,OAAOL,GACTP,CAAQ,EAEJa,EAAwBA,CACnCC,EACAC,EACAC,EACArH,KAEA,IAAM8G,EAAIM,EAAO/G,OAAS,EAAI+G,EAAOE,OACnCP,GAAKK,EAAOzD,MAAQ,EAAIyD,EAAOE,QAAUH,EAAOI,OAChD7B,EACG,GAAMxD,KAAKsF,IAAIT,EAAGD,GAAM5E,KAAKuF,IAAKN,EAAOO,IAAMxF,KAAK0C,GAAM,KAC3DwC,EAAOtD,EACP6D,EAAI,EAMR,GALAN,EAAeO,SAAQ,SAAUC,GAC/B7H,GAAUkC,KAAK4F,IAAIC,MAAM,KAAMF,EAAEG,WAC/BhI,EAASkC,KAAKsF,IAAIO,MAAM,KAAMF,EAAEG,YAC/BL,EAAIE,EAAEI,SACX,IACIN,EAAI,EAAG,OAAOzF,KAAKsF,IAAIG,EAAGjC,GAC9B,IAAMwC,EAAI,IAAMhG,KAAKiG,MAAMnI,EAAS,KAAO,IAAM,KACjD,OAAOkC,KAAKsF,IAAIU,EAAGxC,EAAE,EAEV0C,EAAkBA,CAC7BC,EACAC,KAEA,IAAMC,EAAwB,GACxBC,EAAWH,EAAOG,SAOxB,OANAC,MAAMC,QAAQJ,IACZA,EAActI,QACdsI,EAAcV,SAAQ,SAAUlC,GAC7B8C,EAASG,MAAQjD,EAAEkD,QAAUJ,EAASG,MAAQjD,EAAEmD,QAC/CN,EAAUO,KAAKpD,EACnB,IACK6C,CAAS,EAELQ,EAAsBC,IACjC,IAAMC,EAAQD,EAAEE,eAA6BC,MAC1CC,GAASA,aAAI,EAAJA,EAAMC,aAElB,GAAsB,kCAAlBJ,aAAI,EAAJA,EAAMK,SAA4C,OAAOL,EAC7D,IAAMM,EAAYrJ,SAASsJ,iBAAiBR,EAAES,QAAST,EAAEU,SACnDb,EAASU,aAAS,EAATA,EAAWF,WAAWG,iBACnCR,EAAES,QACFT,EAAEU,SAEJ,MAAwB,kCAApBb,aAAM,EAANA,EAAQS,SAAmDT,EACxD,IAAI,E,6BCzaPzC,EAAqB,CACzBzC,MAAO,IACPtD,OAAQ,IACRkG,WAAY,IACZC,YAAa,IACbmD,QAAS,IACTC,SAAU,KAENvC,EAAmC,CACvC,CACEW,SAAU,CAAC,EAAG,IACdC,SAAU,KAEZ,CACED,SAAU,CAAC,GAAI,IACfC,SAAU,MAEZ,CACED,SAAU,CAAC,GAAI,IACfC,SAAU,MAEZ,CACED,SAAU,CAAC,GAAI,KACfC,SAAU,MAEZ,CACED,SAAU,CAAC,IAAK,KAChBC,SAAU,MAEZ,CACED,SAAU,CAAC,IAAK,KAChBC,SAAU,OAGRP,EAAM,GACNhB,EAAQ,IACRmD,EAAa,IAEbC,EAAiB9J,IACrB,IAAMmF,EAAOjD,KAAKiG,KAChBjG,KAAKC,KAAMnC,EAASoG,EAASI,aAAgB,GAAMJ,EAASG,cAExDnB,EAAOlD,KAAKiG,KAAKnI,EAASmF,GAC1BwB,EACJhB,SAAS,GAADrF,OAAI6E,EAAOiB,EAASG,WAAa,OAAUG,EAAQxE,KAAK0C,IAKlE,MAAO,CACLO,OACAC,OACAuB,SACAS,OAAQ,CACNzD,MARF,EAAIgD,EAASzE,KAAK8E,IAAK9E,KAAK0C,IAAM8B,EAAQ,GAAM,KAAON,EAASG,WAS9DlG,OARW+E,EAAOgB,EAASI,YAS3Bc,OAAQ,IACRxD,EATM6C,EAASA,EAASzE,KAAK6H,IAAK7H,KAAK0C,IAAM8B,EAAQ,GAAM,MAW9D,EAGGsD,GAAoBC,EAAAA,EAAAA,WACxB,kCAGK,SAASC,EAAevI,GAC7B,IAAM,UACJ4G,EAAS,wBACT4B,EAAuB,YACvBC,EAAW,kBACXC,EAAiB,gBACjBC,EAAe,eACfC,GACE5I,GACG6I,EAAyBC,IAC9BC,EAAAA,EAAAA,UAAkB,MAGdC,GAAeC,EAAAA,EAAAA,UACfC,GAAaD,EAAAA,EAAAA,UACbE,GAAcF,EAAAA,EAAAA,UACdG,GAAUH,EAAAA,EAAAA,UACVI,GAAgBJ,EAAAA,EAAAA,UAEhBK,GAAcL,EAAAA,EAAAA,UACdM,GAAWN,EAAAA,EAAAA,UACXO,GAAYP,EAAAA,EAAAA,UACZQ,GAAcR,EAAAA,EAAAA,UACdS,GAAiBT,EAAAA,EAAAA,UACjBU,GAAaV,EAAAA,EAAAA,QAAgB,CACjCW,MAAO,GACPC,MAAO,KAEHC,GAAab,EAAAA,EAAAA,QAAsB,IACnCc,GAAiBd,EAAAA,EAAAA,QAAsB,IAEvCe,GAAYf,EAAAA,EAAAA,QAAmB,CACnCzF,KAAM,EACNC,KAAM,EACNuB,OAAQ,EACRS,OAAQ,CACNzD,MAAO,EACPtD,OAAQ,EACRiH,OAAQ,IACRxD,EAAG,KAGD8H,GAAiBhB,EAAAA,EAAAA,QAAuB,CAC5CiB,QAAS,KACTC,eAAgB,KAChBC,cAAe,KACfC,WAAY,KACZC,cAAe,KACfC,eAAe,EACfC,eAAe,EACfC,iBAAiB,EACjBC,QAAQ,IAGJC,GAASC,EAAAA,EAAAA,cAAY,KACzBtB,EAAYuB,QAAQF,OAAOpB,EAASsB,QAASrB,EAAUqB,QAAQ,GAC9D,IAgKGC,EAAuBC,IAAqC,IAAAC,EAChE,GAA2B,QAAvBA,EAACf,EAAeY,eAAO,IAAAG,IAAtBA,EAAwBd,QAAS,OAAOa,aAAU,EAAVA,IAC7C,IAAM,YACJE,EACAC,QAASC,EAAQ,WACjBC,GACEnB,EAAeY,QAAQX,QAE3B,IAAImB,EAAAA,GAAMJ,EAAYK,UACnBC,GACC,CACE1H,EAAGsH,EAASG,SAASzH,EACrBC,EAAGqH,EAASG,SAASxH,EACrB3B,EAAGgJ,EAASG,SAASnJ,GAEvB,KAEDxC,QACH,IAAI0L,EAAAA,GAAMJ,EAAYO,OACnBD,GACC,CACE1H,EAAG,EACHC,EAAG,EACH3B,EAAG,GAEL,KAEDxC,QACH,IAAI0L,EAAAA,GAAMJ,EAAY/L,UACnBqM,GACC,CACE1H,EAAGsH,EAASjM,SAAS2E,EACrBC,EAAGqH,EAASjM,SAAS4E,EACrB3B,EAAGgJ,EAASjM,SAASiD,GAEvB,KAEDsJ,SAASd,GACTe,SAAQ,KAAM,IAAAC,EACbV,EAAYf,QAAQtL,UAAUgN,OAAO,UAADjN,OACxByM,EAAWS,QAAU,SAAQ,UAEvB,QAAlBF,EAAA7B,EAAWe,eAAO,IAAAc,GAAlBA,EAAoB1F,SAAS6F,IAC3BA,EAAK5B,QAAQzL,MAAMsN,QAAU,GAAG,IAElChC,EAAec,QAAQ5E,SAASnH,IAC9ByK,EAASsB,QAAQe,OAAO9M,EAAW,IAErCiL,EAAec,QAAU,GACzBF,GAAQ,IAETI,YAAW,KAAM,IAAAiB,EAChB/B,EAAeY,QAAQJ,iBAAkB,EACzCM,SAAAA,EAAmC,QAAzBiB,EAAG/B,EAAeY,eAAO,IAAAmB,OAAA,EAAtBA,EAAwB9B,QAAQ,IAE9CvK,OAAO,EAGNsM,EAAYA,CAACC,EAAqBC,KACtClC,EAAeY,QAAQH,QAAS,EAChC,IAAK,IAAI3G,EAAI,EAAGA,EAAI+F,EAAWe,QAAQxM,OAAQ0F,IAAK,CAClD,IAAM2C,EAASoD,EAAWe,QAAQ9G,GAC5BmD,EAASgF,EAAQnI,GAEvB,IAAIsH,EAAAA,GAAM3E,EAAOxH,UACdqM,GACC,CACE1H,EAAGqD,EAAOhI,SAAS2E,EACnBC,EAAGoD,EAAOhI,SAAS4E,EACnB3B,EAAG+E,EAAOhI,SAASiD,GAErBiK,EAAAA,IAAAA,UAAoBD,EAAqB,EAAXA,IAE/BE,OAAOC,EAAAA,GAAAA,YAAAA,OACP3M,QAEH,IAAI0L,EAAAA,GAAM3E,EAAO4E,UACdC,GACC,CACE1H,EAAGqD,EAAOoE,SAASzH,EACnBC,EAAGoD,EAAOoE,SAASxH,EACnB3B,EAAG+E,EAAOoE,SAASnJ,GAErBiK,EAAAA,IAAAA,UAAoBD,EAAqB,EAAXA,IAE/BE,OAAOC,EAAAA,GAAAA,YAAAA,OACP3M,OACL,CAEA,IAAI0L,EAAAA,GAAM,CAAC,GACRE,GAAG,CAAC,EAAc,EAAXY,GACPV,SAASd,GACThL,QACAoL,YAAW,KACVd,EAAeY,QAAQH,QAAS,CAAI,GACpC,EA4DA6B,EAAsBC,IAC1B/C,EAAYoB,QAAQ4B,QACpB,IAAM/F,EAASuD,EAAeY,QAAQX,QAAQe,YACxC/D,EAAS+C,EAAeY,QAAQX,QAAQgB,QAC9CjB,EAAeY,QAAQH,QAAS,EAChCT,EAAeY,QAAQL,eAAgB,EAEvC,IAuDOkC,EAvDDC,EAAI,CACR9I,EAAGqD,EAAOhI,SAAS2E,EAAI,EAAI,GAAKY,EAASzC,MAAQ,EAAIyC,EAASzC,MAC9D8B,EAAG,EACH3B,GAAIqH,EAAUqB,QAAQ3L,SAASiD,EAAI,KAAO,KAEtCyK,EAAI,CACR/I,EAAG,EACHC,EAAG,EACH3B,EAAGqH,EAAUqB,QAAQ3L,SAASiD,EAAI,KAE9BiC,EAAI,CACRP,EAAG,EACHC,EAAGoD,EAAOoE,SAASxH,EAAI,EAAgB,IAAVvD,KAAK0C,GAAW,IAAiB,GAAV1C,KAAK0C,GAAW,IACpEd,EAAG,GAEChC,EAAI,CACR0D,EAAG,EACHC,EAAGoD,EAAOoE,SAASxH,EAAI,EAAgB,KAAVvD,KAAK0C,GAAY,IAAiB,IAAV1C,KAAK0C,GAAY,IACtEd,EAAG,GAEC4B,EAAI,IAAIsH,EAAAA,GAAM3E,EAAOxH,UACrB2N,EAAI,IAAIxB,EAAAA,GAAM3E,EAAO4E,UACrBtF,EAAI,IAAIqF,EAAAA,GAAM3E,EAAOxH,UACrBqH,EAAI,IAAI8E,EAAAA,GAAM3E,EAAO4E,UACvBkB,GAEFzI,EAAEwH,GAAGoB,EAAG,KACLN,SACAtB,YAAW,KACV1B,EAAcwB,QAAQiC,QAAS,EAC/B7C,EAAeY,QAAQX,QAAQzL,MAAMsN,QAAU,GAAG,IAEtDc,EAAEtB,GAAGnH,EAAG,KAAKiI,SACbrG,EAAEuF,GACA,CACE1H,EAAGqD,EAAOhI,SAAS2E,EACnBC,EAAGoD,EAAOhI,SAAS4E,EACnB3B,EAAG+E,EAAOhI,SAASiD,GAErB,KACAkK,SACF9F,EAAEgF,GACA,CACE1H,EAAGqD,EAAOoE,SAASzH,EACnBC,EAAGoD,EAAOoE,SAASxH,EACnB3B,EAAG+E,EAAOoE,SAASnJ,GAErB,KAECkK,SACAtB,YAAW,KAAM,IAAAgC,EACE,QAAlBA,EAAAjD,EAAWe,eAAO,IAAAkC,GAAlBA,EAAoB9G,SAAS6F,IAC3BA,EAAK5B,QAAQzL,MAAMsN,QAAU,GAAG,GAChC,MAIY,QAAlBW,EAAA5C,EAAWe,eAAO,IAAA6B,GAAlBA,EAAoBzG,SAAS6F,IACvBpF,GAAUoF,IACZA,EAAK5B,QAAQzL,MAAMsN,QAAU,MAC/B,IAEFhI,EAAEwH,GAAGoB,EAAG,KACLN,SACAX,SAAQ,KAEPtC,EAAQyB,QAAQiC,QAAS,EACzBzD,EAAcwB,QAAQiC,QAAS,CAAI,IAEvCD,EAAEtB,GAAGnH,EAAG,KAAKiI,SACbrG,EAAEuF,GAAGqB,EAAG,KACLP,SACAX,SAAQ,WACPzB,EAAeY,QAAQX,QAAQzL,MAAMsN,QAAU,IAC/C1C,EAAcwB,QAAQpM,MAAMuO,WAAa,2BACzC3D,EAAcwB,QAAQiC,QAAS,CACjC,IACFvG,EAAEgF,GAAGpL,EAAG,KAAKkM,UAEftI,EAAEkJ,MAAMjH,GAAGrG,QACXkN,EAAEI,MAAM1G,GAAG5G,QACX,IAAI0L,EAAAA,GAAM,CAAC,GACRE,GAAG,CAAC,EAAG,MACPE,UAAS,KAER,GADAd,IACIpK,KAAK2M,IAAIxG,EAAO4E,SAASxH,IAAMvD,KAAK0C,GAAK,EAAG,CAC9C,IAAMkK,EAAOlD,EAAeY,QAAQX,QAAQkD,wBACtC5B,EAAQ,KACRxJ,EAAQmL,EAAKnL,MAAQwJ,EACrB9M,EAASyO,EAAKzO,OAAS8M,EAC7BnC,EAAcwB,QAAQpM,MAAMuD,MAAQ,GAAHrD,OAAMqD,EAAK,MAC5CqH,EAAcwB,QAAQpM,MAAMC,OAAS,GAAHC,OAAMD,EAAM,MAC9C2K,EAAcwB,QAAQpM,MAAM4O,IAAM,GAAH1O,OAC7BwO,EAAKE,KAAQ7B,EAAQ,GAAK9M,EAAU,EAAC,MAEvC2K,EAAcwB,QAAQpM,MAAM6O,KAAO,GAAH3O,OAC9BwO,EAAKG,MAAS9B,EAAQ,GAAKxJ,EAAS,EAAC,KAEzC,KAEDrC,QACAoL,YAAW,WACVd,EAAeY,QAAQH,QAAS,EAChCT,EAAeY,QAAQL,eAAiBgC,EACxCpD,EAAQyB,QAAQiC,OAASN,CAC3B,GAAE,EA8PN,OAlOAe,EAAAA,EAAAA,YAAU,KAER,IAAIC,EAncOC,MACX,IAAMzL,EAAQ0L,OAAOC,WACfjP,EAASgP,OAAOE,YAChBhI,EAAS5D,EAAQtD,EAEjBmP,EAAW,IAAIC,EAAAA,GACrBD,EAASE,QAAQ/L,EAAOtD,GACxBwK,EAAW2B,QAAQmD,gBAAgBH,EAASI,YAE5C,IAAMzI,EAAS,IAAI0I,EAAAA,IAAkBnI,EAAKH,EAAQ,GAAK,KAEjDuI,EAAW,IAAIC,EAAAA,EAAkB5I,EAAQqI,EAASI,YACxDE,EAASE,YAAc,GACvBF,EAASG,YAAc,IACvBH,EAASI,YAAc,IACvB,IAAMC,EAAQ,IAAIC,EAAAA,IAElBlF,EAASsB,QAAU2D,EACnBhF,EAAUqB,QAAUrF,EACpBiE,EAAYoB,QAAUsD,EACtB7E,EAAYuB,QAAUgD,CAAQ,EA8a9BJ,GAEA,IAAMiB,EAAUA,KACdlB,EAASmB,sBAAsBD,GAC/BE,EAAAA,GAAAA,SACAnF,EAAYoB,QAAQgE,QAAQ,EAE9BH,IAEA,IAAMI,EAAiBA,KACrBtF,EAAUqB,QAAQjF,OAAS8H,OAAOC,WAAaD,OAAOE,YACtDpE,EAAUqB,QAAQkE,yBAClBzF,EAAYuB,QAAQkD,QAAQL,OAAOC,WAAYD,OAAOE,aACtDjD,GAAQ,EAMV,OAHAlB,EAAYoB,QAAQmE,iBAAiB,SAAUrE,GAC/C+C,OAAOsB,iBAAiB,SAAUF,GAE3B,KACLpB,OAAOuB,oBAAoB,SAAUH,GACrCrF,EAAYoB,QAAQoE,oBAAoB,SAAUtE,GAClDlB,EAAYoB,QAAQqE,UACpBN,EAAAA,GAAAA,YACApF,EAAUqB,QAAQsE,QAClB5F,EAASsB,QAAQsE,QACjBC,qBAAqB5B,EAAO,CAC7B,GACA,KAEHD,EAAAA,EAAAA,YAAU,KAAM,IAAA8B,EACRhR,GAAyB,QAAhBgR,EAAArP,EAAMuD,kBAAU,IAAA8L,OAAA,EAAhBA,EAAkBhR,SAAU,EAmB3C,MAxfwBA,KACxB2L,EAAUa,QAAU1C,EAAc9J,EAAO,EAqezCiR,CAAiBjR,GACjBmL,EAAUqB,QAAQ3L,SAASiD,EAAIoD,EAC7BiE,EAAUqB,QACVb,EAAUa,QAAQpF,OAClBC,EACArH,GAEFmL,EAAUqB,QAAQkE,yBAClBtF,EAAYoB,QAAQ0E,UAAUpQ,KAAKqK,EAAUqB,QAAQ3L,UAErCoE,EACdtD,EAAMuD,WACNyG,EAAUa,QAAQrH,KAClBwG,EAAUa,QAAQpH,MAvddwC,SAAQ,CAACzB,EAAMT,KAAM,IAAAyL,EAAAC,EACnBvF,EAAU3L,SAASC,cACvB,gCAEF0L,EAAQ2B,OAASrH,EAAKqH,OACtB3B,EAAQwF,UAA8B,QAArBF,EAAGhL,EAAKmL,qBAAa,IAAAH,OAAA,EAAlBA,EAAoBE,UACxCxF,EAAQ0F,YAAgC,QAArBH,EAAGjL,EAAKmL,qBAAa,IAAAF,OAAA,EAAlBA,EAAoBG,YAC1C,IAAMC,EAAc,UAAHlR,QAAa6F,aAAI,EAAJA,EAAMqH,SAAU,UAC9C3B,EAAQrJ,UAAY,wBAAHlC,OAA2BkR,GAC5C3F,EAAQzL,MAAMuD,MAAQ,GAAHrD,OAAM8F,EAASzC,MAAK,MACvCkI,EAAQzL,MAAMC,OAAS,GAAHC,OAAM8F,EAAS/F,OAAM,MACzCwL,EAAQtL,UAAUC,IAAI,kBAEtB,IAAMiR,EAAY,IAAI/Q,EAAAA,GAAYmL,GAClC4F,EAAU5Q,SAAS4C,IACjB,IAAMvB,KAAKwP,SAAW,IACtB,IAAMxP,KAAKwP,SAAW,IACtB,IAAMxP,KAAKwP,SAAW,KAGxBxG,EAASsB,QAAQhM,IAAIiR,GACrBhG,EAAWe,QAAQ1D,KAAK2I,GAExB,IAAMlG,EAAQrF,EACZC,EACAC,EACAuF,EAAUa,QAAQrH,KAClBwG,EAAUa,QAAQpH,MAEpBkG,EAAWkB,QAAQjB,MAAMzC,KAAKyC,GAC9B,IAAMC,EAAQ/E,EACZN,EACAC,EACAuF,EAAUa,QAAQrH,KAClBwG,EAAUa,QAAQpH,KAClBsB,EACAiF,EAAUa,QAAQ7F,QAEpB2E,EAAWkB,QAAQhB,MAAM1C,KAAK0C,GAE9BiG,EAAUjJ,SAAWrC,EACrB0F,EAAQe,YAAc6E,EACtB5F,EAAQkB,WAAa5G,EACrB0F,EAAQgB,QAAUrB,CAAK,IA+azBoC,EAAUtC,EAAWkB,QAAQhB,MAAO,KAE7B,KA3EPJ,EAAYoB,QAAQ4B,QACpBmC,EAAAA,GAAAA,YACA9E,EAAWe,QAAQlH,KAAKqC,IACtBuD,EAASsB,QAAQe,OAAO5F,EAAE,IAE5B8D,EAAWe,QAAU,GACrBlB,EAAWkB,QAAU,CACnBjB,MAAO,GACPC,MAAO,IAGTI,EAAeY,QAAU,CACvBX,QAAS,KACTC,eAAgB,KAChBC,cAAe,KACfC,WAAY,KACZC,cAAe,KACfI,QAAQ,EACRF,eAAe,EACfD,eAAe,EACfE,iBAAiB,EAwDN,CACZ,GACA,CAACzK,EAAMuD,cAEVgK,EAAAA,EAAAA,YAAU,KACR,IAAM3L,EAAYoH,EAAa6B,QACzBmF,EAAmB3I,IACvB,GACE4C,EAAeY,QAAQL,eACvBP,EAAeY,QAAQN,gBACtBN,EAAeY,QAAQH,OAExB,OAAO,EACT,IAAMxD,EAASE,EAAmBC,GAClC4I,aAAahG,EAAeY,QAAQV,gBACpCF,EAAeY,QAAQV,eAAiBuD,OAAOwC,YAAW,KACxDpF,GAAoB,KAClB5D,IACG+C,EAAeY,QAAQJ,kBACvBR,EAAeY,QAAQL,eA5ZEtD,KAClC,IAAM,YAAE+D,EAAW,WAAEG,GAAelE,EAC9BhI,EAAqB,CACzB2E,EAAGoH,EAAY/L,SAAS2E,EAAI,GAAKtD,KAAK8E,IAAI4F,EAAYK,SAASxH,GAC/DA,EAAGmH,EAAY/L,SAAS4E,EACxB3B,EAAG8I,EAAY/L,SAASiD,EAAI,IAAM5B,KAAK6H,IAAI6C,EAAYK,SAASxH,IAGlEmG,EAAeY,QAAQJ,iBAAkB,EACzC,IAAIY,EAAAA,GAAMJ,EAAYK,UACnBC,GACC,CACE1H,EAAG,EACHC,EAAG,EACH3B,EAAG,GAEL,KAEDuJ,SAAQ,KACPT,EAAYf,QAAQtL,UAAUC,IAAI,UAADF,OACrByM,EAAWS,QAAU,SAAQ,SACxC,IAEFlM,QACH,IAAI0L,EAAAA,GAAMJ,EAAYO,OACnBD,GACC,CACE1H,EApBQ,IAqBRC,EArBQ,IAsBR3B,EAtBQ,KAwBV,KAEDxC,QACH,IAAI0L,EAAAA,GAAMJ,EAAY/L,UACnBqM,GAAGrM,EAAU,KACbuM,SAASd,GACTI,YAAW,WA1EarE,MAAwByJ,EAG/CrR,EAAyBsR,EAFvBC,EACAxJ,EADAwJ,EAAe5J,EADMC,EA4EHuE,EA3EqBrE,GACvCC,EAAWH,EAAOG,SAExBwJ,SAAAA,EAAcpK,SAASqK,IACjBA,EAASrJ,SAAWJ,EAASG,KAE/BoJ,EAAatG,EAAWe,QAAQrD,MAC7BxB,GAAMA,EAAEa,SAASG,MAAQsJ,EAASpJ,SAErCpI,EACEsR,GACAvS,EAAmB6I,EAAOxH,SAAUkR,EAAWlR,SAAU,UAE3DkR,EAAatG,EAAWe,QAAQrD,MAC7BxB,GAAMA,EAAEa,SAASG,MAAQsJ,EAASrJ,SAErCnI,EACEsR,GACAvS,EAAmBuS,EAAWlR,SAAUwH,EAAOxH,SAAU,WAExDJ,IACLiL,EAAec,QAAQ1D,KAAKrI,GAC5ByK,EAASsB,QAAQhM,IAAIC,GAAW,IAEhB,QAAlBqR,EAAArG,EAAWe,eAAO,IAAAsF,GAAlBA,EAAoBlK,SAAS6F,IAEzBpF,GAAUoF,GACVuE,EAAaE,OACV1D,GAAMA,EAAE5F,QAAU6E,EAAKjF,SAASG,KAAO6F,EAAE3F,QAAU4E,EAAKjF,SAASG,QAGpE8E,EAAK5B,QAAQzL,MAAMsN,QAAU,MAC/B,IA4CEpB,IACAV,EAAeY,QAAQX,QAAUhD,CACnC,IACCvH,OAAO,EAkXF6Q,CAA2BtJ,EAAO,GACpC,GACD,IAAI,EAEHuJ,EAAepJ,IACnB,GACE4C,EAAeY,QAAQL,eACvBP,EAAeY,QAAQN,gBACtBN,EAAeY,QAAQH,OAExB,OAAO,EACTuF,aAAahG,EAAeY,QAAQR,YAClC4F,aAAahG,EAAeY,QAAQV,gBACtC,IAAMjD,EAASE,EAAmBC,GAClC4C,EAAeY,QAAQR,WAAaqD,OAAOwC,YAAW,WACpDpF,GAAoB,KACd5D,IACF+I,aAAahG,EAAeY,QAAQV,gBACpC9C,EAAEqJ,kBACFzG,EAAeY,QAAQX,QAAUhD,EACjC4B,EAA2B5B,EAAOkE,YAClCmB,GAAmB,GACrB,GAEJ,GAAG,IAAI,EAEHoE,EAAiBtJ,IACrB,GACE4C,EAAeY,QAAQL,eACvBP,EAAeY,QAAQN,gBACtBN,EAAeY,QAAQH,OAExB,OAAO,EACTuF,aAAahG,EAAeY,QAAQR,YAClC4F,aAAahG,EAAeY,QAAQV,gBACpC8F,aAAahG,EAAeY,QAAQP,eACtC,IAAMpD,EAASE,EAAmBC,IAC5B,WAAE+D,EAAU,YAAEH,GAAgB/D,EACpC4D,GAAoB,KAAM,IAAA8F,EAAAC,EACpBpI,IAA0C,QAA3BmI,EAAAxF,EAAW0F,wBAAgB,IAAAF,GAAU,QAAVC,EAA3BD,EAA6BtP,gBAAQ,IAAAuP,OAAV,EAA3BA,EAAuCxS,QAAS,EACjE4L,EAAeY,QAAQP,cAAgBoD,OAAOwC,YAAW,WACvDxH,EAAkB0C,EACpB,GAAG,MAEHnB,EAAeY,QAAQN,eAAgB,EACvCN,EAAeY,QAAQP,cAAgBoD,OAAOwC,YAAW,WACvD,GAAIhJ,EAAQ,CACV+I,aAAahG,EAAeY,QAAQV,gBAClC8F,aAAahG,EAAeY,QAAQR,YACtCnB,EAAW2B,QAAQjM,UAAUC,IAAI,kBACjC4K,EAAYoB,QAAQ4B,QACpB,IAQMtI,EAAI,CACRN,EAAGoH,EAAY/L,SAAS2E,EACxBC,EACE,IACAW,EAAS/F,QAAUsL,EAAUa,QAAQpH,KAAO2H,EAAWtH,IAErDqB,EAAI,IAAIkG,EAAAA,GAAM7B,EAAUqB,QAAQ3L,UAChCkG,EAAI,IAAIiG,EAAAA,GAfO,CACnBU,QAAS,EACTP,MAAO,EACPuF,gBAAiB,EACjBC,iBAAkB,EAClBC,eAAgB,EAChBC,kBAAmB,IAUfnN,EAAI,IAAIsH,EAAAA,GAAM,CAClBlJ,EAAG,IAEC0K,EAAI,IAAIxB,EAAAA,GAAM7B,EAAUqB,QAAQ3L,UAChC8G,EAAI,IAAIqF,EAAAA,GAAM5B,EAAYoB,QAAQ3D,QAClCX,EAAI,IAAI8E,EAAAA,GAAM,CAClB8F,KAAM,GACNC,OAAQ,IAEVnF,EAAUtC,EAAWkB,QAAQjB,MAAO,KACpCzE,EAAEoG,GACA,CACE1H,EAAG,EACHC,GAAI,KACJ3B,EAAG,MAEL,KACA8K,MAAM1G,EAAGnB,EAAGrB,GACdqB,EAAEmG,GACA,CACEQ,QAAS,GAEX,KACAL,SAAQ,KAAM,IAAA2F,EAAAC,EAAAC,EAAAC,EAAAC,EACR5P,EAAkBV,EAAwB,CAC9CC,WAAY,CACVY,MAAOyC,EAASzC,MAChBtD,OAAQ+F,EAAS/F,OACjBqD,MAAO,CACLkJ,EAAY/L,SAAS2E,EACrBoH,EAAY/L,SAAS4E,EACrBmH,EAAY/L,SAASiD,IAGzBb,SAAqC,QAA7B+P,EAAEjG,EAAW0F,wBAAgB,IAAAO,OAAA,EAA3BA,EAA6B/P,SACvCC,QAAoC,QAA7B+P,EAAElG,EAAW0F,wBAAgB,IAAAQ,OAAA,EAA3BA,EAA6B/P,QACtCI,QAAoC,QAA7B4P,EAAEnG,EAAW0F,wBAAgB,IAAAS,OAAA,EAA3BA,EAA6B5P,QACtCN,YAAwC,QAA7BmQ,EAAEpG,EAAW0F,wBAAgB,IAAAU,OAAA,EAA3BA,EAA6BnQ,YAC1CI,aAAyC,QAA7BgQ,EAAErG,EAAW0F,wBAAgB,IAAAW,OAAA,EAA3BA,EAA6BhQ,aAC3CC,aAAcA,IAAMiH,EAAgByC,GACpC5J,YAAaA,IAAMoH,EAAewC,KAEpC1B,EAAemB,QAAUhJ,EACzB0H,EAASsB,QAAQhM,IAAIgD,EAAgB,IAEvCkC,EAAEwH,GACA,CACEpJ,EAAG+F,GAEL,KAECwJ,MAAM,KACNzE,MAAMJ,EAAG7G,GAEZ6G,EAAEtB,GACA,CACE1H,EAAGM,EAAEN,EACLC,GAAI,KAAOK,EAAEL,GAEf,KAEFkC,EAAEuF,GACA,CACE1H,EAAGM,EAAEN,EACLC,EAAGK,EAAEL,GAEP,KACAiH,YAAW,WACX5B,EAAY0B,QAAQpM,MAAMkT,WAAa,SACzC,IACAxM,EAAExF,OACJ,CACF,GAAG,KACL,GACA,EAMJ,OAHAiC,EAAUoN,iBAAiB,WAAY2B,GACvC/O,EAAUoN,iBAAiB,QAASyB,GACpC7O,EAAUoN,iBAAiB,YAAagB,GACjC,KACLpO,EAAUqN,oBAAoB,YAAae,GAC3CpO,EAAUqN,oBAAoB,QAASwB,GACvC7O,EAAUqN,oBAAoB,WAAY0B,EAAc,CACzD,GACA,IAGDiB,IAAAA,cAAA,OAAK/Q,UAAU,oBAAoBgR,IAAK7I,GACtC4I,IAAAA,cAAA,OAAK/Q,UAAU,UAAUgR,IAAK3I,IAC9B0I,IAAAA,cAAA,OACE/Q,UAAU,OACVgR,IAAKzI,EACL0I,QAASA,KACP7H,EAAeY,QAAQH,QAAU6B,GAAmB,EAAK,EAE3DO,QAAQ,GAER8E,IAAAA,cAACvJ,GAAiB0J,EAAAA,EAAAA,GAAA,GACZlJ,aAAuB,EAAvBA,EAAyBmJ,gBAAe,CAC5CF,QAAUzK,GAAMA,EAAEqJ,kBAClBD,YAAaA,IAAMjI,EAAwBK,GAC3CgJ,IAAKxI,EACLxI,UAAWoR,IAAW,CACpBC,YAAiD,YAApCrJ,aAAuB,EAAvBA,EAAyBgD,QACtCsG,eAAoD,aAApCtJ,aAAuB,EAAvBA,EAAyBgD,cAI/C+F,IAAAA,cAAA,OACE/Q,UAAU,WACVgR,IAAK1I,EACL2I,QAASA,KAhcIM,MACjBxD,EAAAA,GAAAA,YACA,IAGEvH,EAAI,IAAIgE,EAAAA,GAAM,CACZlJ,EAAG,IAELgD,EAAI,IAAIkG,EAAAA,GANA,CACNU,QAAS,IAMX3G,EAAI,IAAIiG,EAAAA,GAAM7B,EAAUqB,QAAQ3L,UAChC6E,EAAI,IAAIsH,EAAAA,GAAM5B,EAAYoB,QAAQ3D,QAClC2F,EAAI,IAAIxB,EAAAA,GAAM,CACZ8F,KAAM,KACNC,OAAQ,MAEZ/J,EAAEkE,GACA,CACEpJ,EAAG+F,GAEL,KACA+E,MAAM7H,EAAGrB,EAAG8I,GACd1H,EAAEoG,GACA,CACEQ,QAAS,GAEX,KAECL,SAAQ,KACPnC,EAASsB,QAAQe,OAAOlC,EAAemB,SACvC1B,EAAY0B,QAAQpM,MAAMkT,WAAa,QAAQ,IAEhDD,MAAM,KAETtM,EAAEmG,GAAG9B,EAAYoB,QAAQ0E,UAAW,KAAKxE,YAAW,WAClDtB,EAAYoB,QAAQ4B,QACpBvD,EAAW2B,QAAQjM,UAAUgN,OAAO,kBACpCK,EAAUtC,EAAWkB,QAAQhB,MAAO,KACpCI,EAAeY,QAAQN,eAAgB,CACzC,IACAxG,EAAEwH,GACA,CACE1H,EAAG,EACHC,EAAG,EACH3B,EAAG,GAEL,KAEF0K,EAAEtB,GACA,CACE4F,KAAM,EACNC,OAAQ,GAEV,KAEF/J,EAAE1H,QACFwF,EAAExF,OAAO,EA0YHyS,EAAY,IAKtB,C,mECz2BIC,E,MAA0B,GAA4B,KAE1DA,EAAwBlL,KAAK,CAACmL,EAAOC,GAAI,wsFAA2sF,KAEpvF,QAAeF,EAAwBG,U,mECJnCH,E,MAA0B,GAA4B,KAE1DA,EAAwBlL,KAAK,CAACmL,EAAOC,GAAI,otDAAqtD,KAE9vD,QAAeF,EAAwBG,U,mECJnCH,E,MAA0B,GAA4B,KAE1DA,EAAwBlL,KAAK,CAACmL,EAAOC,GAAI,24BAA44B,KAEr7B,QAAeF,EAAwBG,U,mECJnCH,E,MAA0B,GAA4B,KAE1DA,EAAwBlL,KAAK,CAACmL,EAAOC,GAAI,unCAAwnC,KAEjqC,QAAeF,EAAwBG,U,mECJnCH,E,MAA0B,GAA4B,KAE1DA,EAAwBlL,KAAK,CAACmL,EAAOC,GAAI,0+HAA2+H,KAEphI,QAAeF,EAAwBG,U","sources":["webpack:///./src/app-wall/utils.ts","webpack:///./src/app-wall/app-wall.tsx","webpack:///./src/app-wall/app-wall.shadow.css","webpack:///./src/app-wall/card-item/card-item.shadow.css","webpack:///./src/app-wall/relation-line/relation-line.shadow.css","webpack:///./src/app-wall/system-card/system-card.shadow.css","webpack:///./src/data-view-variables.shadow.css"],"sourcesContent":["import {\n Vector3,\n Object3D,\n Quaternion,\n Vector3Tuple,\n PerspectiveCamera,\n} from \"three\";\nimport { CSS3DObject } from \"three/addons/renderers/CSS3DRenderer.js\";\nimport \"./card-item/index.js\";\nimport \"./relation-line/index.js\";\nimport \"./system-card/index.js\";\nimport type { AppWallCardItemProps } from \"./card-item/index.js\";\nimport type {\n AppWallRelationLine,\n AppWallRelationLineProps,\n} from \"./relation-line/index.js\";\nimport type { SystemCardProps } from \"./system-card/index.js\";\nimport {\n TrapezoidalObjectProps,\n TrapezoidalProps,\n bounds,\n CardSize,\n DistanceConfig,\n Position,\n Target,\n Ele,\n} from \"./interface.js\";\nimport { CabinetThumbnail } from \"../cabinet/cabinet-thumbnail/index.jsx\";\n\nexport interface AppData {\n key: string;\n status: \"normal\" | \"warning\";\n cardItemProps: AppWallCardItemProps;\n systemCardProps: SystemCardProps;\n trapezoidalProps: TrapezoidalProps;\n}\n\nexport type Relation = {\n source: string;\n target: string;\n};\n\nexport interface UserData {\n appData: AppData;\n elementStyle: {\n width: number;\n height: number;\n };\n turningStyle: {\n width: number;\n height: number;\n };\n systemCardStyle: {\n width: number;\n height: number;\n };\n hoverStyle: {\n width: number;\n height: number;\n };\n cardItemObject3D: {\n curve: Object3D;\n flat: Object3D;\n hover: Object3D;\n clickTurn: Object3D;\n };\n systemCardObject3D: {\n clickTurn: Object3D;\n front: Object3D;\n };\n}\nexport const createRelationLine = (\n sourceVector: Vector3,\n targetVector: Vector3,\n lightColor: AppWallRelationLineProps[\"lightColor\"]\n): CSS3DObject => {\n const subVector = new Vector3().subVectors(targetVector, sourceVector);\n const lineLength = subVector.length();\n\n const lineElement = document.createElement(\n \"data-view.app-wall-relation-line\"\n ) as AppWallRelationLine;\n lineElement.style.height = `${lineLength}px`;\n lineElement.classList.add(\"relation-line\");\n lineElement.lightColor = lightColor;\n const lineObject = new CSS3DObject(lineElement);\n\n const centerVector = new Vector3().lerpVectors(\n sourceVector,\n targetVector,\n 0.5\n );\n lineObject.position.copy(centerVector);\n // lineObject.lookAt(new Vector3(0, 0, 10).add(centerVector));\n // lineObject.lookAt(new Vector3(0, 10000, 0));\n\n const quaternion = new Quaternion().setFromUnitVectors(\n new Vector3(0, 1, 0).normalize(),\n subVector.clone().normalize()\n );\n lineObject.setRotationFromQuaternion(quaternion);\n\n return lineObject;\n};\n\nexport const getCenterPointOrSubPoint = (\n start: Vector3Tuple,\n end: Vector3Tuple\n) => {\n const pointA = new Vector3(start[0], start[1], start[2]);\n const pointB = new Vector3(end[0], end[1], end[2]);\n return {\n centerVector: new Vector3().lerpVectors(pointA, pointB, 0.5), //中心点坐标\n subVector: new Vector3().subVectors(pointA, pointB), // a-b向量\n };\n};\nexport const createTrapezoidalRightOrLeftElement = (props: {\n BW: number;\n TW: number;\n d: number;\n TH: number;\n BH: number;\n isLeft: boolean;\n}): CSS3DObject => {\n const { BW, TW, d, TH, BH, isLeft } = props;\n const height = Math.sqrt(Math.pow(TW / 2 - BW / 2, 2) + Math.pow(d, 2)); //斜边\n const wrapper = document.createElement(\"div\");\n wrapper.style.cssText = `\n width: ${height}px;\n height:${TH}px;\n position: relative;\n clip-path: polygon(0 0, ${height}px ${\n TH / 2 - BH / 2\n }px, ${height}px ${TH / 2 - BH / 2 + BH}px, 0 ${TH}px);\n `;\n const cantCard = document.createElement(\"div\");\n cantCard.className = \"trapezoidalLeftOrRightAnimation\";\n wrapper.appendChild(cantCard);\n const start: Vector3Tuple = isLeft ? [-BW / 2, 0, 0] : [BW / 2, 0, 0];\n const end: Vector3Tuple = isLeft ? [-TW / 2, 0, d] : [TW / 2, 0, d];\n const objectCantModel = new CSS3DObject(wrapper);\n const { centerVector, subVector } = getCenterPointOrSubPoint(start, end);\n objectCantModel.position.copy(centerVector);\n const quaternion = new Quaternion().setFromUnitVectors(\n new Vector3(1, 0, 0).normalize(),\n subVector.clone().normalize()\n );\n objectCantModel.setRotationFromQuaternion(quaternion);\n return objectCantModel;\n};\n\nexport const createTrapezoidalTopOrBottomElement = (props: {\n BW: number;\n TW: number;\n d: number;\n TH: number;\n BH: number;\n isTop: boolean;\n}): CSS3DObject => {\n const { BW, TW, d, TH, BH, isTop } = props;\n const height = Math.sqrt(Math.pow(TH / 2 - BH / 2, 2) + Math.pow(d, 2)); //斜边\n const wrapper = document.createElement(\"div\");\n wrapper.style.cssText = `\n width: ${TW}px;\n height:${height}px;\n position: relative;\n clip-path: polygon(0 0, ${TW}px 0, ${\n TW / 2 - BW / 2 + BW\n }px ${height}px, ${TW / 2 - BW / 2}px ${height}px);\n `;\n const cantCard = document.createElement(\"div\");\n cantCard.className = \"trapezoidalTopOrBottomAnimation\";\n wrapper.appendChild(cantCard);\n const objectCantModel = new CSS3DObject(wrapper);\n const start: Vector3Tuple = isTop ? [0, -BH / 2, 0] : [0, BH / 2, 0];\n const end: Vector3Tuple = isTop ? [0, -TH / 2, d] : [0, TH / 2, d];\n const { centerVector, subVector } = getCenterPointOrSubPoint(start, end);\n objectCantModel.position.copy(centerVector);\n const topQuaternion = new Quaternion().setFromUnitVectors(\n new Vector3(0, -1, 0).normalize(),\n subVector.clone().normalize()\n );\n objectCantModel.setRotationFromQuaternion(topQuaternion);\n return objectCantModel;\n};\n/**\n * 创建梯台模型\n * @param props\n * @returns\n */\nexport const createTrapezoidalObject = (props: TrapezoidalObjectProps) => {\n const {\n objectData,\n leftBtnName,\n clusters,\n columns,\n leftOnClick,\n rightBtnName,\n rightOnClick,\n appName,\n } = props;\n const d = 600;\n const container = document.createElement(\"div\");\n const objectContainer = new CSS3DObject(container);\n objectContainer.position.set(...objectData.point);\n // 模型为梯形 , 底部和顶部的宽高成一定的比例计算, bw: tw = 1:11; bh:th= 1:4.5\n const BW: number = objectData.width,\n BH: number = objectData.height,\n TW = 1500,\n TH = 1200;\n // 底部\n const bottomCard = document.createElement(\"div\");\n bottomCard.style.cssText = `\n width: ${BW}px;\n height: ${BH}px;\n box-shadow: inset 0px 1px 2px 0px rgba(255,255,255,0.45);\n border: 1px solid rgba(118,255,255,0.58);\n padding: 16px;\n `;\n const objectBottomModel = new CSS3DObject(bottomCard);\n objectBottomModel.position.z = 0;\n objectContainer.add(objectBottomModel);\n\n // 顶部\n const topCard = document.createElement(\"div\");\n topCard.style.cssText = `\n width: ${TW}px;\n height:${TH}px;\n background: linear-gradient(rgb(13, 54, 179,0.6) 0%, rgb(74, 108, 156,0.6) 100%);\n box-sizing: border-box;\n padding: 16px;\n `;\n const thumbnailEle = document.createElement(\n \"data-view.cabinet-thumbnail\"\n ) as CabinetThumbnail;\n thumbnailEle.clusters = clusters ?? [];\n thumbnailEle.columns = columns ?? 4;\n thumbnailEle.appName = appName;\n topCard.className = \"visibilityAnimate\";\n topCard.appendChild(thumbnailEle);\n const objectTopModel = new CSS3DObject(topCard);\n objectTopModel.position.set(0, 0, d);\n\n const objectCantLeftModel = createTrapezoidalRightOrLeftElement({\n BW,\n TW,\n BH,\n TH,\n d,\n isLeft: true,\n }); //斜面右边\n const objectCantRightModel = createTrapezoidalRightOrLeftElement({\n BW,\n TW,\n BH,\n TH,\n d,\n isLeft: false,\n }); //斜面右边\n const objectCantTopModel = createTrapezoidalTopOrBottomElement({\n BW,\n TW,\n BH,\n TH,\n d,\n isTop: true,\n }); //斜面前边\n const objectCantBottomModel = createTrapezoidalTopOrBottomElement({\n BW,\n TW,\n BH,\n TH,\n d,\n isTop: false,\n }); //斜面后面\n objectContainer.add(\n objectCantLeftModel,\n objectCantRightModel,\n objectCantBottomModel,\n objectCantTopModel\n );\n if (leftBtnName) {\n const btnLeft = document.createElement(\"div\");\n btnLeft.style.cssText = `\n color: #6BE0FA;\n font-size: 28px;\n font-weight: 500;\n width: ${TW / 2}px;\n line-height: 16px;\n `;\n btnLeft.className = \"visibilityAnimate\";\n const wordNode = document.createElement(\"span\");\n wordNode.style.cursor = \"pointer\";\n wordNode.innerText = leftBtnName;\n btnLeft.appendChild(wordNode);\n const btnLeftObject = new CSS3DObject(btnLeft);\n btnLeftObject.position.set(-TW / 4 + 10, -TH / 2, 14);\n btnLeftObject.rotateX(Math.PI / 2);\n objectTopModel.add(btnLeftObject);\n wordNode.onpointerdown = leftOnClick;\n }\n if (rightBtnName) {\n const btnRight = document.createElement(\"div\");\n btnRight.style.cssText = `\n color: #FFFFFF;\n font-size: 30px;\n font-weight: 500;\n width: ${TW / 2}px;\n text-shadow: 0px 1px 4px #3366FF;\n text-align: right;\n `;\n btnRight.className = \"visibilityAnimate\";\n const textNode = document.createElement(\"span\");\n textNode.style.cursor = \"pointer\";\n textNode.innerText = rightBtnName;\n\n btnRight.appendChild(textNode);\n const btnRightObject = new CSS3DObject(btnRight);\n btnRightObject.position.set(TW / 4 - 10, -TH / 2, 14);\n btnRightObject.rotateX(Math.PI / 2);\n objectTopModel.add(btnRightObject);\n textNode.onpointerdown = rightOnClick;\n }\n objectContainer.add(objectTopModel);\n return objectContainer;\n};\n/**\n * 布局计算\n * @param dataSource\n * @param maxX\n * @param maxY\n * @returns\n */\nexport const setAppPosition = (\n dataSource: AppData[],\n maxX: number,\n maxY: number\n) => {\n if (!dataSource?.length) return [];\n let appData: Target[] = dataSource.map((d) => ({ ...d, x: 0, y: 0 }));\n if (appData.length === maxX * maxY) {\n appData = appData.map((d, i) => ({\n ...d,\n x: (i % maxX) + 1,\n y: parseInt(`${i / maxX}`) + 1,\n }));\n } else {\n const offset = maxX * (maxY - 1);\n const leng = appData.length - offset;\n for (let d = 0; d < offset; d++) {\n const u = appData[d];\n u.x = (d % maxX) + 1;\n u.y = parseInt(`${d / maxX}`) + 1;\n }\n for (let h = 0; h < leng / 2; h++) {\n const g = appData[h + offset],\n m = appData[appData.length - 1 - h];\n g.x = h + 1;\n g.y = maxY;\n if (g !== m) {\n m.x = maxX - h;\n m.y = maxY;\n }\n }\n }\n return appData;\n};\nexport const createTableTarget = (\n data: Target,\n cardSize: CardSize,\n maxX: number,\n maxY: number\n) => {\n const object3D = new Object3D();\n object3D.position.x =\n data.x * cardSize.outerWidth - (maxX / 2 + 0.5) * cardSize.outerWidth;\n object3D.position.y =\n -data.y * cardSize.outerHeight + (maxY / 2 + 0.5) * cardSize.outerHeight;\n return object3D;\n};\n\nexport const computeCurvePosition = (\n data: Target,\n cardSize: CardSize,\n maxX: number,\n maxY: number,\n angle: number\n) => {\n const position: Position = {\n x: 0,\n y: 0,\n z: 0,\n },\n n = parseInt(`${maxX * cardSize.outerWidth * 180}`) / (angle * Math.PI),\n a = maxX / 2 + 0.5;\n position.x = n * Math.sin(Math.PI / (180 / ((data.x - a) * (angle / maxX))));\n position.y =\n -data.y * cardSize.outerHeight + (maxY / 2 + 0.5) * cardSize.outerHeight;\n position.z = n - Math.sqrt(n * n - position.x * position.x);\n return position;\n};\nexport const createCurveTarget = (\n data: Target,\n cardSize: CardSize,\n maxX: number,\n maxY: number,\n angle: number,\n radius: number\n) => {\n const object3D = new Object3D();\n const vector = new Vector3();\n const position = computeCurvePosition(data, cardSize, maxX, maxY, angle);\n object3D.position.x = position.x;\n object3D.position.y = position.y;\n object3D.position.z = position.z;\n vector.x = 0;\n vector.y = object3D.position.y;\n vector.z = radius;\n object3D.lookAt(vector);\n return object3D;\n};\nexport const computeCameraDistance = (\n camera: PerspectiveCamera,\n bounds: bounds,\n distanceConfig: DistanceConfig[],\n length: number\n) => {\n const n = bounds.height + 2 * bounds.margin,\n a = (bounds.width + 2 * bounds.margin) / camera.aspect,\n i =\n (0.5 * Math.max(a, n)) / Math.tan((camera.fov * Math.PI) / 360) +\n bounds.z;\n let o = 0;\n distanceConfig.forEach(function (t) {\n length >= Math.min.apply(null, t.numRange) &&\n length < Math.max.apply(null, t.numRange) &&\n (o = t.distance);\n });\n if (o > 0) return Math.max(o, i);\n const s = 200 * Math.ceil((length - 160) / 40) + 3200;\n return Math.max(s, i);\n};\nexport const getAppRelations = (\n object: CSS3DObject,\n relationsData: Relation[]\n) => {\n const relations: Relation[] = [];\n const userData = object.userData;\n Array.isArray(relationsData) &&\n relationsData.length &&\n relationsData.forEach(function (i) {\n (userData.key !== i.source && userData.key !== i.target) ||\n relations.push(i);\n });\n return relations;\n};\nexport const findElementByEvent = (e: MouseEvent) => {\n const path = (e.composedPath() as Element[]).find(\n (node) => node?.shadowRoot\n ) as Ele;\n if (path?.tagName === \"DATA-VIEW.APP-WALL-CARD-ITEM\") return path;\n const customEle = document.elementFromPoint(e.clientX, e.clientY);\n const target = customEle?.shadowRoot.elementFromPoint(\n e.clientX,\n e.clientY\n ) as Ele;\n if (target?.tagName === \"DATA-VIEW.APP-WALL-CARD-ITEM\") return target;\n return null;\n};\n","/* istanbul ignore next */\nimport React, {\n ReactElement,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { MathUtils, Object3D, PerspectiveCamera, Scene } from \"three\";\nimport {\n CSS3DObject,\n CSS3DRenderer,\n} from \"three/addons/renderers/CSS3DRenderer.js\";\nimport { TrackballControls } from \"three/addons/controls/TrackballControls.js\";\nimport TWEEN, { Tween, Easing } from \"@tweenjs/tween.js\";\nimport type { AppWallProps } from \"./index.jsx\";\nimport {\n BaseConfig,\n CardSize,\n DistanceConfig,\n Ele,\n Position,\n RegisterEvents,\n Target,\n Targets,\n} from \"./interface.js\";\nimport {\n AppData,\n computeCameraDistance,\n createCurveTarget,\n createTableTarget,\n createTrapezoidalObject,\n setAppPosition,\n createRelationLine,\n getAppRelations,\n findElementByEvent,\n} from \"./utils.js\";\nimport { AppWallCardItem } from \"./card-item/index.jsx\";\nimport \"./card-item/index.js\";\nimport { SystemCard, SystemCardProps } from \"./system-card/index.jsx\";\nimport { wrapBrick } from \"@next-core/react-element\";\nimport classNames from \"classnames\";\nconst cardSize: CardSize = {\n width: 120,\n height: 160,\n outerWidth: 140,\n outerHeight: 180,\n lgWidth: 180,\n lgHeight: 240,\n};\nconst distanceConfig: DistanceConfig[] = [\n {\n numRange: [0, 40],\n distance: 3000,\n },\n {\n numRange: [40, 60],\n distance: 2200,\n },\n {\n numRange: [60, 80],\n distance: 2700,\n },\n {\n numRange: [80, 120],\n distance: 3200,\n },\n {\n numRange: [120, 160],\n distance: 3400,\n },\n {\n numRange: [160, 300],\n distance: 3600,\n },\n];\nconst fov = 45;\nconst angle = 100;\nconst panelSpace = 300;\n\nconst getViewBounds = (length: number) => {\n const maxX = Math.ceil(\n Math.sqrt((length * cardSize.outerHeight) / (0.4 * cardSize.outerWidth))\n );\n const maxY = Math.ceil(length / maxX);\n const radius =\n parseInt(`${maxX * cardSize.outerWidth * 180}`) / (angle * Math.PI);\n const width =\n 2 * radius * Math.sin((Math.PI * (angle / 2)) / 180) + cardSize.outerWidth;\n const height = maxY * cardSize.outerHeight;\n const z = radius - radius * Math.cos((Math.PI * (angle / 2)) / 180);\n return {\n maxX,\n maxY,\n radius,\n bounds: {\n width,\n height,\n margin: 100,\n z,\n },\n };\n};\n\nconst WrappedSystemCard = wrapBrick<SystemCard, SystemCardProps>(\n \"data-view.app-wall-system-card\"\n);\n\nexport function AppWallElement(props: AppWallProps): ReactElement {\n const {\n relations,\n onSystemCardButtonClick,\n useDblclick,\n handleCardDbClick,\n rightBtnOnClick,\n leftBtnOnClick,\n } = props;\n const [curClickCardItemAppData, setCurClickCardItemAppData] =\n useState<AppData>(null);\n // props.dataSource=table;\n\n const containerRef = useRef<HTMLDivElement>();\n const appwallRef = useRef<HTMLDivElement>();\n const closeBtnRef = useRef<HTMLDivElement>();\n const maskRef = useRef<HTMLDivElement>();\n const systemCardRef = useRef<SystemCard>();\n\n const rendererRef = useRef<CSS3DRenderer>();\n const sceneRef = useRef<Scene>();\n const cameraRef = useRef<PerspectiveCamera>();\n const controlsRef = useRef<TrackballControls>();\n const graph3DViewRef = useRef<CSS3DObject>(); // 梯形模型\n const targetsRef = useRef<Targets>({\n table: [],\n curve: [],\n });\n const objectsRef = useRef<CSS3DObject[]>([]);\n const lineCiCodesRef = useRef<CSS3DObject[]>([]);\n\n const configRef = useRef<BaseConfig>({\n maxX: 0,\n maxY: 0,\n radius: 0,\n bounds: {\n width: 0,\n height: 0,\n margin: 100,\n z: 0,\n },\n });\n const registerEvents = useRef<RegisterEvents>({\n element: null,\n mouseoverTimer: null,\n mouseoutTimer: null,\n clickTimer: null,\n dblClickTimer: null,\n isShowGraph3D: false,\n isShowAppInfo: false,\n isShowRelations: false,\n enable: true, //是否可以触发事件\n });\n\n const render = useCallback(() => {\n rendererRef.current.render(sceneRef.current, cameraRef.current);\n }, []);\n\n const updateViewBounds = (length: number) => {\n configRef.current = getViewBounds(length);\n };\n\n const init = () => {\n const width = window.innerWidth;\n const height = window.innerHeight;\n const aspect = width / height;\n\n const renderer = new CSS3DRenderer();\n renderer.setSize(width, height);\n appwallRef.current.replaceChildren(renderer.domElement);\n\n const camera = new PerspectiveCamera(fov, aspect, 0.1, 10000);\n\n const controls = new TrackballControls(camera, renderer.domElement);\n controls.rotateSpeed = 0.5;\n controls.minDistance = 500;\n controls.maxDistance = 10000;\n const scene = new Scene();\n\n sceneRef.current = scene;\n cameraRef.current = camera;\n controlsRef.current = controls;\n rendererRef.current = renderer;\n };\n\n const createView = (table: Target[]) => {\n table.forEach((data, i) => {\n const element = document.createElement(\n \"data-view.app-wall-card-item\"\n ) as AppWallCardItem & Ele;\n element.status = data.status;\n element.cardTitle = data.cardItemProps?.cardTitle;\n element.description = data.cardItemProps?.description;\n const statusClass = `status-${data?.status || \"normal\"}`;\n element.className = `card-item-container ${statusClass}`;\n element.style.width = `${cardSize.width}px`;\n element.style.height = `${cardSize.height}px`;\n element.classList.add(\"card-item-wrap\");\n // 随机进入\n const objectCSS = new CSS3DObject(element);\n objectCSS.position.set(\n 4e3 * Math.random() - 2e3,\n 4e3 * Math.random() - 2e3,\n 4e3 * Math.random() - 2e3\n );\n\n sceneRef.current.add(objectCSS);\n objectsRef.current.push(objectCSS);\n\n const table = createTableTarget(\n data,\n cardSize,\n configRef.current.maxX,\n configRef.current.maxY\n );\n targetsRef.current.table.push(table);\n const curve = createCurveTarget(\n data,\n cardSize,\n configRef.current.maxX,\n configRef.current.maxY,\n angle,\n configRef.current.radius\n );\n targetsRef.current.curve.push(curve);\n\n objectCSS.userData = data;\n element.__objectCSS = objectCSS;\n element.__userData = data;\n element.__curve = curve;\n });\n };\n\n const createRelationLines = (object: CSS3DObject) => {\n const curRelations = getAppRelations(object, relations);\n const userData = object.userData;\n let lineObject: CSS3DObject, lineTarget: CSS3DObject;\n curRelations?.forEach((relation) => {\n if (relation.source === userData.key) {\n //获取目标target CSS3DObject\n lineTarget = objectsRef.current.find(\n (o) => o.userData.key === relation.target\n );\n lineObject =\n lineTarget &&\n createRelationLine(object.position, lineTarget.position, \"blue\");\n } else {\n lineTarget = objectsRef.current.find(\n (o) => o.userData.key === relation.source\n );\n lineObject =\n lineTarget &&\n createRelationLine(lineTarget.position, object.position, \"purple\");\n }\n if (!lineObject) return;\n lineCiCodesRef.current.push(lineObject);\n sceneRef.current.add(lineObject);\n });\n objectsRef.current?.forEach((item) => {\n if (\n object != item &&\n curRelations.every(\n (r) => r.source != item.userData.key && r.target != item.userData.key\n )\n ) {\n item.element.style.opacity = \"0.2\";\n }\n });\n };\n\n const showElementBetweenRelation = (target: Ele) => {\n const { __objectCSS, __userData } = target;\n const position: Position = {\n x: __objectCSS.position.x + 50 * Math.sin(__objectCSS.rotation.y),\n y: __objectCSS.position.y,\n z: __objectCSS.position.z + 100 * Math.cos(__objectCSS.rotation.y),\n };\n const scale = 1.2;\n registerEvents.current.isShowRelations = true;\n new Tween(__objectCSS.rotation)\n .to(\n {\n x: 0,\n y: 0,\n z: 0,\n },\n 300\n )\n .onStart(() => {\n __objectCSS.element.classList.add(\n `status-${__userData.status || \"normal\"}-card`\n );\n })\n .start();\n new Tween(__objectCSS.scale)\n .to(\n {\n x: scale,\n y: scale,\n z: scale,\n },\n 300\n )\n .start();\n new Tween(__objectCSS.position)\n .to(position, 300)\n .onUpdate(render)\n .onComplete(function () {\n //创建连线\n createRelationLines(__objectCSS);\n render();\n registerEvents.current.element = target;\n })\n .start();\n };\n\n const restoreElementState = (onComplete?: (ele?: Ele) => void) => {\n if (!registerEvents.current?.element) return onComplete?.();\n const {\n __objectCSS,\n __curve: object3d,\n __userData,\n } = registerEvents.current.element;\n\n new Tween(__objectCSS.rotation)\n .to(\n {\n x: object3d.rotation.x,\n y: object3d.rotation.y,\n z: object3d.rotation.z,\n },\n 300\n )\n .start();\n new Tween(__objectCSS.scale)\n .to(\n {\n x: 1,\n y: 1,\n z: 1,\n },\n 300\n )\n .start();\n new Tween(__objectCSS.position)\n .to(\n {\n x: object3d.position.x,\n y: object3d.position.y,\n z: object3d.position.z,\n },\n 300\n )\n .onUpdate(render)\n .onStart(() => {\n __objectCSS.element.classList.remove(\n `status-${__userData.status || \"normal\"}-card`\n );\n objectsRef.current?.forEach((item) => {\n item.element.style.opacity = \"1\";\n });\n lineCiCodesRef.current.forEach((lineObject) => {\n sceneRef.current.remove(lineObject);\n });\n lineCiCodesRef.current = [];\n render();\n })\n .onComplete(() => {\n registerEvents.current.isShowRelations = false;\n onComplete?.(registerEvents.current?.element);\n })\n .start();\n };\n\n const transform = (targets: Object3D[], duration: number) => {\n registerEvents.current.enable = false;\n for (let i = 0; i < objectsRef.current.length; i++) {\n const object = objectsRef.current[i];\n const target = targets[i];\n\n new Tween(object.position)\n .to(\n {\n x: target.position.x,\n y: target.position.y,\n z: target.position.z,\n },\n MathUtils.randFloat(duration, duration * 2)\n )\n .easing(Easing.Exponential.InOut)\n .start();\n\n new Tween(object.rotation)\n .to(\n {\n x: target.rotation.x,\n y: target.rotation.y,\n z: target.rotation.z,\n },\n MathUtils.randFloat(duration, duration * 2)\n )\n .easing(Easing.Exponential.InOut)\n .start();\n }\n\n new Tween({})\n .to({}, duration * 2)\n .onUpdate(render)\n .start()\n .onComplete(() => {\n registerEvents.current.enable = true;\n });\n };\n\n const handeReset = () => {\n TWEEN.removeAll();\n const o = {\n opacity: 1,\n },\n e = new Tween({\n z: 0,\n }),\n n = new Tween(o),\n a = new Tween(cameraRef.current.position),\n i = new Tween(controlsRef.current.target),\n r = new Tween({\n blur: 1500,\n spread: 100,\n });\n e.to(\n {\n z: panelSpace,\n },\n 1e3\n ).chain(a, i, r);\n n.to(\n {\n opacity: 0,\n },\n 1e3\n )\n .onStart(() => {\n sceneRef.current.remove(graph3DViewRef.current);\n closeBtnRef.current.style.visibility = \"hidden\";\n })\n .delay(300);\n\n a.to(controlsRef.current.position0, 1e3).onComplete(function () {\n controlsRef.current.reset();\n appwallRef.current.classList.remove(\"mask-container\");\n transform(targetsRef.current.curve, 600);\n registerEvents.current.isShowGraph3D = false;\n });\n i.to(\n {\n x: 0,\n y: 0,\n z: 0,\n },\n 1e3\n );\n r.to(\n {\n blur: 0,\n spread: 0,\n },\n 1e3\n );\n e.start();\n n.start();\n };\n const showAppInfoAnimate = (toggle: boolean) => {\n controlsRef.current.reset();\n const object = registerEvents.current.element.__objectCSS;\n const target = registerEvents.current.element.__curve;\n registerEvents.current.enable = false;\n registerEvents.current.isShowAppInfo = true;\n //定义四个位置\n const c = {\n x: target.position.x > 0 ? 2 * -cardSize.width : 2 * cardSize.width,\n y: 0,\n z: (cameraRef.current.position.z - 500) / 1.5,\n };\n const p = {\n x: 0,\n y: 0,\n z: cameraRef.current.position.z - 500,\n };\n const h = {\n x: 0,\n y: target.rotation.y > 0 ? (-Math.PI * 90) / 180 : (Math.PI * 90) / 180,\n z: 0,\n };\n const d = {\n x: 0,\n y: target.rotation.y > 0 ? (-Math.PI * 180) / 180 : (Math.PI * 180) / 180,\n z: 0,\n };\n const i = new Tween(object.position);\n const r = new Tween(object.rotation);\n const o = new Tween(object.position);\n const s = new Tween(object.rotation);\n if (toggle) {\n //收\n i.to(c, 500)\n .easing()\n .onComplete(() => {\n systemCardRef.current.hidden = true;\n registerEvents.current.element.style.opacity = \"1\";\n });\n r.to(h, 500).easing();\n o.to(\n {\n x: target.position.x,\n y: target.position.y,\n z: target.position.z,\n },\n 700\n ).easing();\n s.to(\n {\n x: target.rotation.x,\n y: target.rotation.y,\n z: target.rotation.z,\n },\n 700\n )\n .easing()\n .onComplete(() => {\n objectsRef.current?.forEach((item) => {\n item.element.style.opacity = \"1\";\n });\n });\n } else {\n //出\n objectsRef.current?.forEach((item) => {\n if (object != item) {\n item.element.style.opacity = \"0.2\";\n }\n });\n i.to(c, 700)\n .easing()\n .onStart(() => {\n //为了飞出去的途中,不能在点击其他的卡片飞出来\n maskRef.current.hidden = false;\n systemCardRef.current.hidden = true;\n });\n r.to(h, 700).easing();\n o.to(p, 500)\n .easing()\n .onStart(function () {\n registerEvents.current.element.style.opacity = \"0\";\n systemCardRef.current.style.transition = \"transition: all .3s ease\";\n systemCardRef.current.hidden = false;\n });\n s.to(d, 500).easing();\n }\n i.chain(o).start();\n r.chain(s).start();\n new Tween({})\n .to({}, 1400)\n .onUpdate(() => {\n render();\n if (Math.abs(object.rotation.y) >= Math.PI / 2) {\n const rect = registerEvents.current.element.getBoundingClientRect();\n const scale = 1.35;\n const width = rect.width * scale;\n const height = rect.height * scale;\n systemCardRef.current.style.width = `${width}px`;\n systemCardRef.current.style.height = `${height}px`;\n systemCardRef.current.style.top = `${\n rect.top - ((scale - 1) * height) / 2\n }px`;\n systemCardRef.current.style.left = `${\n rect.left - ((scale - 1) * width) / 2\n }px`;\n }\n })\n .start()\n .onComplete(function () {\n registerEvents.current.enable = true;\n registerEvents.current.isShowAppInfo = !toggle;\n maskRef.current.hidden = toggle;\n });\n };\n\n const resetView = () => {\n controlsRef.current.reset();\n TWEEN.removeAll();\n objectsRef.current.map((o) => {\n sceneRef.current.remove(o);\n });\n objectsRef.current = [];\n targetsRef.current = {\n table: [],\n curve: [],\n };\n //重置交互状态\n registerEvents.current = {\n element: null,\n mouseoverTimer: null,\n mouseoutTimer: null,\n clickTimer: null,\n dblClickTimer: null,\n enable: true,\n isShowAppInfo: false,\n isShowGraph3D: false,\n isShowRelations: false,\n };\n };\n\n useEffect(() => {\n init();\n let cancel: number;\n const animate = () => {\n cancel = requestAnimationFrame(animate);\n TWEEN.update();\n controlsRef.current.update();\n };\n animate();\n\n const onWindowResize = () => {\n cameraRef.current.aspect = window.innerWidth / window.innerHeight;\n cameraRef.current.updateProjectionMatrix();\n rendererRef.current.setSize(window.innerWidth, window.innerHeight);\n render();\n };\n\n controlsRef.current.addEventListener(\"change\", render);\n window.addEventListener(\"resize\", onWindowResize);\n\n return () => {\n window.removeEventListener(\"resize\", onWindowResize);\n controlsRef.current.removeEventListener(\"change\", render);\n controlsRef.current.dispose();\n TWEEN.removeAll();\n cameraRef.current.clear();\n sceneRef.current.clear();\n cancelAnimationFrame(cancel);\n };\n }, []);\n\n useEffect(() => {\n const length = props.dataSource?.length || 0;\n updateViewBounds(length);\n cameraRef.current.position.z = computeCameraDistance(\n cameraRef.current,\n configRef.current.bounds,\n distanceConfig,\n length\n );\n cameraRef.current.updateProjectionMatrix();\n controlsRef.current.position0.copy(cameraRef.current.position);\n\n const appData = setAppPosition(\n props.dataSource,\n configRef.current.maxX,\n configRef.current.maxY\n );\n createView(appData);\n transform(targetsRef.current.curve, 1000);\n\n return () => {\n resetView();\n };\n }, [props.dataSource]);\n\n useEffect(() => {\n const container = containerRef.current;\n const handleMouseover = (e: MouseEvent) => {\n if (\n registerEvents.current.isShowAppInfo ||\n registerEvents.current.isShowGraph3D ||\n !registerEvents.current.enable\n )\n return false;\n const target = findElementByEvent(e);\n clearTimeout(registerEvents.current.mouseoverTimer);\n registerEvents.current.mouseoverTimer = window.setTimeout(() => {\n restoreElementState(() => {\n target &&\n !registerEvents.current.isShowRelations &&\n !registerEvents.current.isShowAppInfo &&\n showElementBetweenRelation(target);\n });\n }, 500);\n };\n const handleClick = (e: MouseEvent) => {\n if (\n registerEvents.current.isShowAppInfo ||\n registerEvents.current.isShowGraph3D ||\n !registerEvents.current.enable\n )\n return false;\n clearTimeout(registerEvents.current.clickTimer),\n clearTimeout(registerEvents.current.mouseoverTimer);\n const target = findElementByEvent(e);\n registerEvents.current.clickTimer = window.setTimeout(function () {\n restoreElementState(() => {\n if (target) {\n clearTimeout(registerEvents.current.mouseoverTimer);\n e.stopPropagation();\n registerEvents.current.element = target;\n setCurClickCardItemAppData(target.__userData);\n showAppInfoAnimate(false);\n }\n });\n }, 300);\n };\n const handleDbClick = (e: MouseEvent) => {\n if (\n registerEvents.current.isShowAppInfo ||\n registerEvents.current.isShowGraph3D ||\n !registerEvents.current.enable\n )\n return false;\n clearTimeout(registerEvents.current.clickTimer),\n clearTimeout(registerEvents.current.mouseoverTimer),\n clearTimeout(registerEvents.current.dblClickTimer);\n const target = findElementByEvent(e);\n const { __userData, __objectCSS } = target;\n restoreElementState(() => {\n if (useDblclick || __userData.trapezoidalProps?.clusters?.length < 1) {\n registerEvents.current.dblClickTimer = window.setTimeout(function () {\n handleCardDbClick(__userData);\n }, 300);\n } else {\n registerEvents.current.isShowGraph3D = true;\n registerEvents.current.dblClickTimer = window.setTimeout(function () {\n if (target) {\n clearTimeout(registerEvents.current.mouseoverTimer),\n clearTimeout(registerEvents.current.clickTimer);\n appwallRef.current.classList.add(\"mask-container\");\n controlsRef.current.reset();\n const basePosition = {\n opacity: 0,\n scale: 0,\n borderLeftWidth: 0,\n borderRightWidth: 0,\n borderTopWidth: 0,\n borderBottomWidth: 0,\n };\n const u = {\n x: __objectCSS.position.x,\n y:\n 860 +\n cardSize.height * (configRef.current.maxY - __userData.y),\n };\n const n = new Tween(cameraRef.current.position);\n const a = new Tween(basePosition);\n const i = new Tween({\n z: 0,\n });\n const r = new Tween(cameraRef.current.position);\n const o = new Tween(controlsRef.current.target);\n const s = new Tween({\n blur: 12,\n spread: 0,\n });\n transform(targetsRef.current.table, 600);\n n.to(\n {\n x: 0,\n y: -3600,\n z: 1600,\n },\n 1e3\n ).chain(s, a, i);\n a.to(\n {\n opacity: 1,\n },\n 700\n ).onStart(() => {\n const objectContainer = createTrapezoidalObject({\n objectData: {\n width: cardSize.width,\n height: cardSize.height,\n point: [\n __objectCSS.position.x,\n __objectCSS.position.y,\n __objectCSS.position.z,\n ],\n },\n clusters: __userData.trapezoidalProps?.clusters,\n columns: __userData.trapezoidalProps?.columns,\n appName: __userData.trapezoidalProps?.appName,\n leftBtnName: __userData.trapezoidalProps?.leftBtnName,\n rightBtnName: __userData.trapezoidalProps?.rightBtnName,\n rightOnClick: () => rightBtnOnClick(__userData),\n leftOnClick: () => leftBtnOnClick(__userData),\n });\n graph3DViewRef.current = objectContainer;\n sceneRef.current.add(objectContainer);\n });\n i.to(\n {\n z: panelSpace,\n },\n 1e3\n )\n .delay(230)\n .chain(r, o);\n\n r.to(\n {\n x: u.x,\n y: -3600 + u.y,\n },\n 1e3\n );\n o.to(\n {\n x: u.x,\n y: u.y,\n },\n 1e3\n ).onComplete(function () {\n closeBtnRef.current.style.visibility = \"visible\";\n });\n n.start();\n }\n }, 300);\n }\n });\n };\n\n container.addEventListener(\"dblclick\", handleDbClick);\n container.addEventListener(\"click\", handleClick);\n container.addEventListener(\"mouseover\", handleMouseover);\n return () => {\n container.removeEventListener(\"mouseover\", handleMouseover);\n container.removeEventListener(\"click\", handleClick);\n container.removeEventListener(\"dblclick\", handleDbClick);\n };\n }, []);\n\n return (\n <div className=\"appwall-container\" ref={containerRef}>\n <div className=\"appwall\" ref={appwallRef}></div>\n <div\n className=\"mask\"\n ref={maskRef}\n onClick={() => {\n registerEvents.current.enable && showAppInfoAnimate(true);\n }}\n hidden={true}\n >\n <WrappedSystemCard\n {...curClickCardItemAppData?.systemCardProps}\n onClick={(e) => e.stopPropagation()}\n handleClick={() => onSystemCardButtonClick(curClickCardItemAppData)}\n ref={systemCardRef}\n className={classNames({\n infoWrapper: curClickCardItemAppData?.status === \"normal\",\n warningWrapper: curClickCardItemAppData?.status === \"warning\",\n })}\n />\n </div>\n <div\n className=\"closeBtn\"\n ref={closeBtnRef}\n onClick={() => {\n handeReset();\n }}\n />\n </div>\n );\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \":host{display:block;width:100%;height:100%}:host([hidden]){display:none}*,\\n*::before,\\n*::after{box-sizing:border-box}.mask-container{position:absolute;top:0;left:0;width:100%;height:100%;background:#0c1216;z-index:1000}.appwall{position:relative}.appwall.loading .card-item{pointer-events:none!important}.mask{position:absolute;width:100%;height:100%;top:0;bottom:0;left:0;right:0;z-index:100;display:flex;align-items:center;justify-content:center}.mask[hidden]{display:none}.infoWrapper{position:absolute;background:var(--color-fill-bg-base-4);box-shadow:0 0 12px 2px rgba(80,255,255,0.45),inset 0 0 22px 0 #20242A;border:2px solid #50FFFF;overflow:hidden}.warningWrapper{position:absolute;background:linear-gradient(180deg,#CC0066 0%,rgba(204,0,102,0.2) 100%),#0F1117FF;box-shadow:0 0 12px 2px rgba(204,0,102,0.4),inset 0 4px 10px 0 rgba(255,255,255,0.65);overflow:hidden}.relation-line{pointer-events:none!important}.closeBtn{visibility:hidden;position:fixed;top:50px;right:50px;width:46px;height:46px;text-align:center;border:1px solid;color:rgb(138 189 255/84%);font-size:20px;line-height:46px;cursor:pointer;background:rgba(138,189,255,0.13);border-image:linear-gradient(135deg,rgba(255,255,255,0.5),rgba(255,255,255,0),rgba(255,255,255,0.33)) 1 1;display:flex;justify-content:center;align-items:center;z-index:1000}.closeBtn:before,\\n.closeBtn:after{content:\\\"\\\";width:2px;height:20px;background:linear-gradient(180deg,#3467FF 0%,#98CBFF 100%);position:absolute}.closeBtn:before{transform:rotateZ(45deg)}.closeBtn:after{transform:rotateZ(-45deg)}.closeBtn:hover:after,\\n.closeBtn:hover:before{background:var(--color-normal-text)}.visibilityAnimate{visibility:hidden;animation:visibility 0.5s both 1s}.trapezoidalLeftOrRightAnimation,\\n.trapezoidalTopOrBottomAnimation{background:linear-gradient(180deg,rgba(51,102,255,0.4) 0%,#99CCFF 100%);opacity:0.2;position:absolute}.trapezoidalTopOrBottomAnimation{bottom:0;width:100%;left:0;animation:animateTop 1s both}.trapezoidalLeftOrRightAnimation{top:0;right:0;height:100%;animation:animateLeft 1s both}@keyframes animateTop{0%{height:0}100%{height:100%}}@keyframes animateLeft{0%{width:0}100%{width:100%}}@keyframes visibility{0%{visibility:hidden}100%{visibility:visible}}.card-item-container{transition:opacity 0.5s}.status-normal-card{box-shadow:0 0 100px rgba(80,255,255,0.58);border:1px solid rgba(80,255,255,0.58);background:-webkit-gradient(liner,left top,left bottom,from(#002c8d),to(#00123e));background:linear-gradient(to bottom,rgba(80,255,255,1) 0%,rgba(80,255,255,0) 100%)}.status-warning-card{box-shadow:0 0 100px #CC0066;background:-webkit-gradient(liner,left top,left bottom,from(#CC0066),to(rgba(204,0,102,0.2)));background:linear-gradient(to bottom,#CC0066 0%,rgba(204,0,102,0.2) 100%)}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___.toString();\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \":host{display:inline-block;width:100%;height:100%}:host([hidden]){display:none}*,\\n*::before,\\n*::after{box-sizing:border-box}.card-item-container{position:relative;width:100%;height:100%}.card-item{position:relative;width:100%;height:100%;display:flex;justify-content:center;align-items:center;text-align:center;border-radius:var(--no-border-radius);border-color:transparent;transition:border-color 0.5s}.status-normal:hover{box-shadow:0 0 100px rgba(80,255,255,0.58);border:1px solid rgba(80,255,255,0.58);background:-webkit-gradient(liner,left top,left bottom,from(#002c8d),to(#00123e));background:linear-gradient(to bottom,rgba(80,255,255,1) 0%,rgba(80,255,255,0) 100%)}.status-warning:hover{box-shadow:0 0 100px #CC0066;background:-webkit-gradient(liner,left top,left bottom,from(#CC0066),to(rgba(204,0,102,0.2)));background:linear-gradient(to bottom,#CC0066 0%,rgba(204,0,102,0.2) 100%)}.card-item-container.status-normal .card-item{background:var(--color-fill-bg-base-4);box-shadow:inset 0px 1px 2px 0px rgba(255,255,255,0.45)}.card-item-container.status-normal:hover .card-item{border:2px solid rgba(80,255,255,0.58)}.card-item-container.status-warning .card-item{background:linear-gradient(180deg,#CC0066 0%,rgba(204,0,102,0.2) 100%);box-shadow:inset 0px 2px 6px 0px rgba(255,255,255,0.65)}.card-item-container.status-warning:hover .card-item{border:none}.card-item-text-container{width:100%;padding:0 12px}.card-item-title,\\n.card-item-description{font-size:20px;font-weight:var(--font-weight-500);color:var(--color-normal-text)}.card-item-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-item-description{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___.toString();\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \":host{display:inline-block;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;height:100%}:host([hidden]){display:none}*,\\n*::before,\\n*::after{box-sizing:border-box}.relation-line{position:relative;width:6px;height:100%;background:var(--color-text-divider-line-1);overflow:hidden}.relation-line::after{content:'';position:absolute;width:100%;height:20%;left:0px;top:0px;animation:lightMove 1000ms ease-in-out infinite,lightOpacity 1000ms ease-in-out infinite}.relation-line.light-color-blue::after{background:linear-gradient(rgba(80,255,255,0) 0%,rgba(80,255,255,1) 90%,#DFFFFF 100%)}.relation-line.light-color-purple::after{background:linear-gradient(rgba(102,0,255,0) 0%,rgba(102,0,255,1) 90%,#B07BFF 100%)}@keyframes lightMove{0%{top:0;transform:translateY(-100%)}100%{top:100%;transform:translateY(0)}}@keyframes lightOpacity{0%{opacity:0}20%{opacity:1}80%{opacity:1}100%{opacity:0}}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___.toString();\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \":host{display:inline-block}:host([hidden]){display:none}*,\\n*::before,\\n*::after{box-sizing:border-box}.wrapper{position:relative;width:100%;height:100%;padding:30px 24px 35px;left:0;display:flex;flex-direction:column;border-radius:var(--no-border-radius)}.cardName{font-size:var(--title-font-size-strong);line-height:22px;text-align:center;font-weight:var(--font-weight-500);color:var(--color-normal-text);text-shadow:0 1px 4px rgba(51,102,255,0.5);margin-bottom:35px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.descriptions{flex:1;margin-bottom:20px;font-size:var(--auxiliary-font-size-small);overflow:auto;font-weight:var(--font-weight-400)}.descriptionsItem .itemKey{color:var(--color-secondary-text)}.descriptionsItem .itemValue{color:var(--color-strong-text)}.descriptionsItem{display:flex;gap:10px;margin-bottom:12px}.descriptionsItem>div{flex:1;text-align:left;word-break:break-all}.buttonContent{position:absolute;bottom:16px;right:24px;font-size:var(--auxiliary-font-size);color:#99CCFF;cursor:pointer;font-weight:var(--font-weight-500)}.buttonName{margin-left:5px}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___.toString();\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \":host{--palette-rgba-white-1:rgba(255,255,255,10%);--palette-rgba-white-2:rgba(255,255,255,20%);--palette-rgba-white-3:rgba(255,255,255,30%);--palette-rgba-white-4:rgba(255,255,255,40%);--palette-rgba-white-5:rgba(255,255,255,50%);--palette-rgba-white-6:rgba(255,255,255,60%);--palette-rgba-white-7:rgba(255,255,255,70%);--palette-rgba-white-8:rgba(255,255,255,80%);--palette-rgba-white-9:rgba(255,255,255,90%);--palette-rgba-white-10:rgba(255,255,255,100%);--palette-rgba-gray-1:rgba(0,0,0,10%);--palette-rgba-gray-2:rgba(0,0,0,20%);--palette-rgba-gray-3:rgba(0,0,0,30%);--palette-rgba-gray-4:rgba(0,0,0,40%);--palette-rgba-gray-5:rgba(0,0,0,50%);--palette-rgba-gray-6:rgba(0,0,0,60%);--palette-rgba-gray-7:rgba(0,0,0,70%);--palette-rgba-gray-8:rgba(0,0,0,80%);--palette-rgba-gray-9:rgba(0,0,0,90%);--palette-rgba-gray-10:rgba(0,0,0,100%);--palette-rgba-blue-gray-2:rgba(101,106,134,20%);--palette-rgba-blue-gray-3:rgba(101,106,134,30%);--palette-rgba-blue-gray-8:rgba(101,106,134,80%);--palette-tech-blue-4-channel:67,127,255;--palette-tech-blue-4:rgb(var(--palette-tech-blue-4-channel));--palette-tech-blue-6-channel:51,102,255;--palette-tech-blue-6:rgb(var(--palette-tech-blue-6-channel));--palette-tech-blue-8-channel:40,69,159;--palette-tech-blue-8:rgb(var(--palette-tech-blue-8-channel));--palette-sea-green-4-channel:131,245,225;--palette-sea-green-4:rgb(var(--palette-sea-green-4-channel));--palette-green-6-channel:81,235,73;--palette-green-6:rgb(var(--palette-green-6-channel));--palette-green-2:rgba(var(--palette-green-6-channel),20%);--palette-lotus-pink-7-channel:204,0,102;--palette-lotus-pink-7:rgb(var(--palette-lotus-pink-7-channel));--palette-red-6-channel:242,39,39;--palette-red-6:rgb(var(--palette-red-6-channel));--palette-red-2:rgba(var(--palette-red-6-channel),20%);--color-fill-global-bg:#0f1014;--color-fill-bg-container-1:var(--palette-rgba-white-1);--color-fill-bg-container-2:var(--palette-rgba-blue-gray-2);--color-fill-bg-container-3:var(--palette-rgba-blue-gray-8);--color-fill-bg-base-1:var(--palette-rgba-blue-gray-2);--color-fill-bg-base-2:rgba(15,16,20,0%);--color-fill-bg-base-3:rgba(0,0,0,20%);--color-fill-bg-base-4:rgba(40,46,58,100%);--color-fill-bg-base-5:rgba(19,25,47,80%);--color-fill-bg-base-6:var(--palette-rgba-blue-gray-3);--color-brand:var(--palette-tech-blue-6);--color-brand-hover:var(--palette-tech-blue-4);--color-brand-active:var(--palette-tech-blue-8);--color-contrast-1:var(--palette-sea-green-4);--color-error:var(--palette-red-6);--color-error-bg:var(--palette-red-2);--color-success:var(--palette-green-6);--color-success-bg:var(--palette-green-2);--color-header-text-big:var(--palette-rgba-white-10);--color-header-text:var(--palette-rgba-white-10);--color-normal-text:var(--palette-rgba-white-10);--color-strong-text:var(--palette-rgba-white-9);--color-auxiliary-text:var(--palette-rgba-white-8);--color-secondary-text:var(--palette-rgba-white-6);--color-disabled-text:var(--palette-rgba-white-4);--color-border-divider-line:var(--palette-rgba-white-1);--color-text-divider-line-1:var(--palette-rgba-white-2);--color-text-divider-line-2:var(--palette-rgba-white-2);--small-border-radius:2px;--medius-border-radius:5px;--larger-border-radius:12px;--container-border-radius:9999px;--no-border-radius:0px;--mask-bg:var(--palette-rgba-gray-7);--title-font-size-larger:30px;--title-font-size-strong:22px;--title-font-size:18px;--normal-font-size:14px;--auxiliary-font-size:16px;--auxiliary-font-size-small:12px;--overview-data-font-size:34px;--statistics-data-font-size:28px;--normal-data-font-size-larger:20px;--normal-data-font-size:16px;--chart-legend-font-size:12px;--chart-tooltips-font-size-1:12px;--chart-tooltips-font-size-2:12px;--chart-axis-x-font-size:12px;--chart-axis-x-font-size-larger:14px;--chart-axis-y-font-size:12px;--chart-axis-y-font-size-larger:14px;--font-weight-600:600;--font-weight-500:500;--font-weight-400:400;--text-shadow:0px 1px 4px #2863ee;--border-width-base:1px;--border-width-double-base:2px;--border-width-tribble-base:3px;--punctate-width-base:1px;--paragraph-width-base:1px}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___.toString();\n"],"names":["createRelationLine","sourceVector","targetVector","lightColor","subVector","Vector3","subVectors","lineLength","length","lineElement","document","createElement","style","height","concat","classList","add","lineObject","CSS3DObject","centerVector","lerpVectors","position","copy","quaternion","Quaternion","setFromUnitVectors","normalize","clone","setRotationFromQuaternion","getCenterPointOrSubPoint","start","end","pointA","pointB","createTrapezoidalRightOrLeftElement","props","BW","TW","d","TH","BH","isLeft","Math","sqrt","pow","wrapper","cssText","cantCard","className","appendChild","objectCantModel","createTrapezoidalTopOrBottomElement","isTop","topQuaternion","createTrapezoidalObject","objectData","leftBtnName","clusters","columns","leftOnClick","rightBtnName","rightOnClick","appName","container","objectContainer","set","point","width","bottomCard","objectBottomModel","z","topCard","thumbnailEle","objectTopModel","objectCantLeftModel","objectCantRightModel","objectCantTopModel","objectCantBottomModel","btnLeft","wordNode","cursor","innerText","btnLeftObject","rotateX","PI","onpointerdown","btnRight","textNode","btnRightObject","setAppPosition","dataSource","maxX","maxY","appData","map","_objectSpread","x","y","i","parseInt","offset","leng","u","h","g","m","createTableTarget","data","cardSize","object3D","Object3D","outerWidth","outerHeight","createCurveTarget","angle","radius","vector","computeCurvePosition","n","a","sin","lookAt","computeCameraDistance","camera","bounds","distanceConfig","margin","aspect","max","tan","fov","o","forEach","t","min","apply","numRange","distance","s","ceil","getAppRelations","object","relationsData","relations","userData","Array","isArray","key","source","target","push","findElementByEvent","e","path","composedPath","find","node","shadowRoot","tagName","customEle","elementFromPoint","clientX","clientY","lgWidth","lgHeight","panelSpace","getViewBounds","cos","WrappedSystemCard","wrapBrick","AppWallElement","onSystemCardButtonClick","useDblclick","handleCardDbClick","rightBtnOnClick","leftBtnOnClick","curClickCardItemAppData","setCurClickCardItemAppData","useState","containerRef","useRef","appwallRef","closeBtnRef","maskRef","systemCardRef","rendererRef","sceneRef","cameraRef","controlsRef","graph3DViewRef","targetsRef","table","curve","objectsRef","lineCiCodesRef","configRef","registerEvents","element","mouseoverTimer","mouseoutTimer","clickTimer","dblClickTimer","isShowGraph3D","isShowAppInfo","isShowRelations","enable","render","useCallback","current","restoreElementState","onComplete","_registerEvents$curre","__objectCSS","__curve","object3d","__userData","Tween","rotation","to","scale","onUpdate","onStart","_objectsRef$current2","remove","status","item","opacity","_registerEvents$curre2","transform","targets","duration","MathUtils","easing","Easing","showAppInfoAnimate","toggle","reset","_objectsRef$current4","c","p","r","hidden","_objectsRef$current3","transition","chain","abs","rect","getBoundingClientRect","top","left","useEffect","cancel","init","window","innerWidth","innerHeight","renderer","CSS3DRenderer","setSize","replaceChildren","domElement","PerspectiveCamera","controls","TrackballControls","rotateSpeed","minDistance","maxDistance","scene","Scene","animate","requestAnimationFrame","TWEEN","update","onWindowResize","updateProjectionMatrix","addEventListener","removeEventListener","dispose","clear","cancelAnimationFrame","_props$dataSource","updateViewBounds","position0","_data$cardItemProps","_data$cardItemProps2","cardTitle","cardItemProps","description","statusClass","objectCSS","random","handleMouseover","clearTimeout","setTimeout","_objectsRef$current","lineTarget","curRelations","relation","every","showElementBetweenRelation","handleClick","stopPropagation","handleDbClick","_userData$trapezoida","_userData$trapezoida$","trapezoidalProps","borderLeftWidth","borderRightWidth","borderTopWidth","borderBottomWidth","blur","spread","_userData$trapezoida2","_userData$trapezoida3","_userData$trapezoida4","_userData$trapezoida5","_userData$trapezoida6","delay","visibility","React","ref","onClick","_extends","systemCardProps","classNames","infoWrapper","warningWrapper","handeReset","___CSS_LOADER_EXPORT___","module","id","toString"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_next_bricks_data_view=self.webpackChunk_next_bricks_data_view||[]).push([[6252],{9439:(t,e,a)=>{a.d(e,{F:()=>P});var i=a(2159),r=a(8657),l=a.n(r),n=a(1211),o=["#5B8FF9","#5AD8A6","#5D7092","#F6BD16","#E86452","#6DC8EC","#945FB9","#FF9845","#1E9493","#FF99C3"],s={dataFill:{fillStyle:"rgba(76,132,250,0.67)"},dataCircle:{r:2,strokeStyle:"#ccc",fillStyle:"#fff",lineWidth:.5},dataLine:{strokeStyle:"#0B2EE7",lineWidth:5}},d={n:0,dataRadiusOfPercent:[],dataRadius:[],angleArr:[],tooltipsContentArr:[],originDataSource:[],radius:1},c=function(t,e){var a=(0,n.cloneDeep)(d);if(a.radius=e,(null==t?void 0:t.length)<1)return a;a.originDataSource=t,a.n=t.length;var i=2*Math.PI/a.n;return t.forEach(((t,r)=>{a.dataRadiusOfPercent[r]=t.value/t.maxValue,a.dataRadius[r]=a.dataRadiusOfPercent[r]*e,a.angleArr[r]=r*i})),a},f=function(t,e,a){var i=(0,n.cloneDeep)(s);return(0,n.merge)(i.dataFill,t),(0,n.merge)(i.dataCircle,e),(0,n.merge)(i.dataLine,a),i},h=function(t,e,a){for(var i=[],r=0;r<t;r++){var l={x:0,y:0};l.x=e[r]*Math.sin(a[r]),l.y=-e[r]*Math.cos(a[r]),i.push(l)}return i},u=function(t,e,a){for(var i=[],r=2*Math.PI/t,l=0;l<t;l++){var n={x:0,y:0};n.x=e*Math.sin(l*r)+a[0],n.y=-e*Math.cos(l*r)+a[1],i.push(n)}return i},y=function(t,e){var a=e.n,i=e.r,r=e.origin,l=e.strokeStyle,n=e.lineWidth*e.ratio;t.save(),t.beginPath();var o=2*Math.PI/a;t.translate(r[0],r[1]),t.moveTo(0,-i);for(var s=0;s<a;s++)t.rotate(o),t.lineTo(0,-i);if(t.closePath(),t.stroke(),e.strokeStyle&&(t.strokeStyle=l,t.lineWidth=n,t.lineCap="butt"),e.fillStyle){if("string"==typeof e.fillStyle)t.fillStyle=e.fillStyle;else if(e.fillStyle instanceof Array){var d=t.createLinearGradient(-i,-i,i,i);e.fillStyle.forEach((t=>{d.addColorStop(0,t[0]),d.addColorStop(1,t[1])})),t.fillStyle=d}t.fill()}t.restore()},v=function(t,e){var{n:a,r:i,origin:r,strokeStyle:l}=e,n=e.lineWidth*e.ratio;t.save();var o=2*Math.PI/a;t.translate(r[0],r[1]),t.lineWidth=n,t.lineCap="butt",t.rotate(-Math.PI/2);for(var s=0;s<a;s++){var d=i*Math.cos(o*s),c=i*Math.sin(o*s),f=i*Math.cos(o*(s+1)),h=i*Math.sin(o*(s+1));t.beginPath(),t.moveTo(d,c),t.lineTo(f,h);var u=t.createLinearGradient(d,c,f,h);u.addColorStop(0,l),u.addColorStop(.5,"#1D2B57"),u.addColorStop(.6,"#1D2B57"),u.addColorStop(1,l),t.strokeStyle=u,t.stroke()}t.restore()},S=function(t,e,a){t.save(),t.beginPath(),a.map((a=>{t.moveTo(e[0],e[1]),t.lineTo(a.x,a.y)})),t.strokeStyle="#1D2B57",t.lineWidth=2,t.stroke(),t.restore()},g=function(t,e,a,i,r){t.save();var l=a/2,n=a/4,s=a/12>10?a/12:10;i.map(((i,d)=>{var c,f,h,u,y=i.x,v=i.x,S=i.x,g=i.y,p=i.x,k=(null===(c=r[d])||void 0===c?void 0:c.color)||o[d]||"#ccc";t.beginPath(),t.moveTo(i.x,i.y),i.x-e[0]>=0?(S=(v=(y+=l)+l)+s,p=y+12):i.x-e[0]<0&&(S=(v=(y-=l)-l)-s,p=v+12),i.y-e[1]<0?g-=n:i.y-e[1]>0&&(g+=n),t.lineTo(y,g),t.lineTo(S,g),t.strokeStyle="rgba(255, 255, 255, .1)",t.stroke(),t.beginPath(),t.moveTo(v,g),t.lineTo(S,g),t.strokeStyle=k,t.lineWidth=2,t.stroke();var x=null!==(f=r[d])&&void 0!==f&&f.percentValue?g-a/3.5:g-a/5.5,m=a/12;if(null!==(h=r[d])&&void 0!==h&&h.name&&(t.fillStyle=k,t.fillRect(p,x,12,12),t.textAlign="left",t.font="400 ".concat(m,"px HarmonyOS_Sans_SC_Black"),t.fillStyle="rgba(255, 255, 255, .4)",t.fillText("".concat(r[d].name),p+18,x+6),t.stroke()),null!==(u=r[d])&&void 0!==u&&u.percentValue){var P,b=a/10;t.textAlign="left",t.font="500 ".concat(b,"px HarmonyOS_Sans_SC_Black"),t.fillStyle="#fff",t.fillText("".concat(null===(P=r[d])||void 0===P?void 0:P.percentValue),p+18,x+6+1.5*m),t.stroke()}})),t.restore()};function p(t,e){var{x:a,y:i,r,originX:l,originY:n,strokeStyle:o,lineWidth:s,fillStyle:d}=e;t.save(),t.beginPath(),t.translate(l,n),t.arc(a,i,r,0,2*Math.PI),t.closePath(),t.strokeStyle=o,t.lineWidth=s,t.lineJoin="round",t.fillStyle=d,t.stroke(),t.fill(),t.restore()}var k=function(t,e,a,i){var{dataLineOptions:r,dataFillOptions:l,dataCircleOptions:n}=i;0!==r.dataPoints.length&&(function(t,e,a){var{strokeStyle:i,lineWidth:r,dataPoints:l}=a,n=l.length;t.save(),t.beginPath(),t.translate(e[0],e[1]),t.moveTo(l[0].x,l[0].y);for(var o=1;o<n;o++)t.lineTo(l[o].x,l[o].y);t.closePath(),t.strokeStyle=i,t.lineWidth=r,t.lineJoin="round",t.stroke(),t.restore()}(t,e,r),function(t,e,a){var{fillStyle:i,dataPoints:r}=a,l=r.length;t.save(),t.beginPath(),t.translate(e[0],e[1]),t.moveTo(r[0].x,r[0].y);for(var n=1;n<l;n++)t.lineTo(r[n].x,r[n].y);t.closePath(),t.fillStyle=i,t.fill(),t.restore()}(t,e,l),function(t,e,a,i){for(var{strokeStyle:r,fillStyle:l,dataPoints:n}=i,o=i.r*a,s=i.lineWidth*a,d=n.length,c=0;c<d;c++)p(t,{x:n[c].x,y:n[c].y,r:o,originX:e[0],originY:e[1],strokeStyle:r,lineWidth:s,fillStyle:l})}(t,e,a,n))},x=function(t,e){for(var{layer:a,n:i,r,ratio:l,origin:n,lineWidth:o}=e,s=[["#3366FF","#83F5E1"]],d=a;d>0;d--)d===a?(v(t,{n:i,r,origin:n,ratio:l,lineWidth:o,strokeStyle:"rgba(51, 102, 255)"}),v(t,{n:i,r:.95*r,origin:n,ratio:l,strokeStyle:"rgba(76,132,250,0.1)",lineWidth:o})):y(t,{n:i,r:.95*r/a*d,origin:n,fillStyle:d%2!=0?"#29292d":s,strokeStyle:"transparent",lineWidth:o,ratio:l})},m=["dataSource","radius","value","dataFill","dataCircle","dataLine","scale"];function P(t){var{dataSource:e,radius:a,value:n,dataFill:o,dataCircle:y,dataLine:v,scale:p}=t,P=(0,i.Z)(t,m),b=(0,r.useRef)(null),C=(0,r.useRef)(null),[W,F]=(0,r.useState)(d),[w,O]=(0,r.useState)(s),T=window.devicePixelRatio;return(0,r.useEffect)((()=>{var t=b.current,i=t.getContext("2d"),r=t.clientWidth,l=t.clientHeight;t.width=r*T,t.height=l*T;var n=Math.min(t.width,t.height)*p;C.current=i,F(c(e,null!=a?a:n))}),[e,a,p]),(0,r.useEffect)((()=>{O(f(o,y,v))}),[o,y,v]),(0,r.useEffect)((()=>{var t=0,e=null,a=b.current,i=C.current,r=[a.width/2,a.height/2];if(i){var l=()=>{e=window.requestAnimationFrame(l),(t+=.05)>=1&&window.cancelAnimationFrame(e),i.clearRect(0,0,a.width,a.height),x(i,{layer:5,n:W.n,r:W.radius,ratio:T,origin:r,lineWidth:2});var o=W.dataRadius.map((e=>e*t)),s=h(W.n,o,W.angleArr),d={dataPoints:s,strokeStyle:w.dataLine.strokeStyle,lineWidth:w.dataLine.lineWidth},c={dataPoints:s,r:w.dataCircle.r,strokeStyle:w.dataCircle.strokeStyle,fillStyle:w.dataCircle.fillStyle,lineWidth:w.dataCircle.lineWidth},f={dataPoints:s,fillStyle:w.dataFill.fillStyle};k(i,r,T,{dataLineOptions:d,dataFillOptions:f,dataCircleOptions:c});var y=u(W.n,W.radius,r);if(S(i,r,y),g(i,r,W.radius,y,W.originDataSource),n){var v=W.radius/5;i.font="bold ".concat(v,"px HarmonyOS_Sans_SC_Black"),i.fillStyle="#fff",i.textAlign="center",i.textBaseline="middle",i.fillText("".concat(n),r[0],r[1])}};l()}}),[W,w,n]),l().createElement("div",{className:"radarWrap",style:{width:"".concat(P.width,"px"),height:"".concat(P.height,"px")}},l().createElement("canvas",{className:"canvasWrap",ref:b}))}},2742:(t,e,a)=>{a.d(e,{Z:()=>o});var i=a(9601),r=a.n(i),l=a(2609),n=a.n(l)()(r());n.push([t.id,".radarWrap{position:relative;width:100%;height:100%;.canvasWrap{display:block;width:100%;height:100%}}",""]);const o=n.toString()},2159:(t,e,a)=>{function i(t,e){if(null==t)return{};var a,i,r=function(t,e){if(null==t)return{};var a,i,r={},l=Object.keys(t);for(i=0;i<l.length;i++)a=l[i],e.indexOf(a)>=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(i=0;i<l.length;i++)a=l[i],e.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}a.d(e,{Z:()=>i})}}]);
2
+ //# sourceMappingURL=6252.a408a0a3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunks/6252.a408a0a3.js","mappings":"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","sources":["webpack:///./src/radar-chart/utils.ts","webpack:///./src/radar-chart/radar.tsx","webpack:///./src/radar-chart/styles.shadow.css","webpack:///../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","webpack:///../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js"],"sourcesContent":["import { cloneDeep, merge } from \"lodash\";\nimport {\n Axis,\n BaseConfig,\n CircleOptions,\n Data,\n DataCircle,\n DataCircleOptions,\n DataFill,\n DataFillProps,\n DataLine,\n DataLineOptions,\n DataPolyProps,\n DrawPolygonOptions,\n DrawRadarBgOption,\n GradientPolygon,\n UserConfig,\n} from \"./interface.js\";\n\nexport const colorMap = [\n \"#5B8FF9\",\n \"#5AD8A6\",\n \"#5D7092\",\n \"#F6BD16\",\n \"#E86452\",\n \"#6DC8EC\",\n \"#945FB9\",\n \"#FF9845\",\n \"#1E9493\",\n \"#FF99C3\",\n]; //chart-v2 的主题色\n\nexport const baseUserConfig: UserConfig = {\n dataFill: {\n fillStyle: \"rgba(76,132,250,0.67)\",\n },\n dataCircle: {\n r: 2,\n strokeStyle: \"#ccc\",\n fillStyle: \"#fff\",\n lineWidth: 0.5,\n },\n dataLine: {\n strokeStyle: \"#0B2EE7\",\n lineWidth: 5,\n },\n};\nexport const baseRadarConfig: BaseConfig = {\n n: 0,\n dataRadiusOfPercent: [],\n dataRadius: [],\n angleArr: [],\n tooltipsContentArr: [],\n originDataSource: [],\n radius: 1,\n};\n/**\n * // 初始化参数配置\n * @param dataSource\n * @param radius\n * @returns BaseConfig\n */\nexport const constructBaseConfig = function (\n dataSource: Data[],\n radius: number\n) {\n const baseConfig: BaseConfig = cloneDeep(baseRadarConfig);\n baseConfig.radius = radius;\n if (dataSource?.length < 1) return baseConfig;\n baseConfig.originDataSource = dataSource;\n baseConfig.n = dataSource.length;\n const disAngle = (Math.PI * 2) / baseConfig.n;\n dataSource.forEach((data, i) => {\n baseConfig.dataRadiusOfPercent[i] = data.value / data.maxValue;\n baseConfig.dataRadius[i] = baseConfig.dataRadiusOfPercent[i] * radius;\n baseConfig.angleArr[i] = i * disAngle;\n });\n return baseConfig;\n};\n\nexport const constructUserConfig = function (\n dataFill: DataFill,\n dataCircle: DataCircle,\n dataLine: DataLine\n) {\n const userConfig: UserConfig = cloneDeep(baseUserConfig);\n merge(userConfig.dataFill, dataFill);\n merge(userConfig.dataCircle, dataCircle);\n merge(userConfig.dataLine, dataLine);\n return userConfig;\n};\n\n/**\n * 获取数据点相对于原点的坐标\n * n:多边形边数\n * dataRadiusArr: 数据点的坐标数组\n * angleArr: 多边形的角度数组\n */\nexport const getDataPointsPos = function (\n n: number,\n dataRadiusArr: number[],\n angleArr: number[]\n) {\n const dataPointsPosArray = [];\n for (let i = 0; i < n; i++) {\n const curPoinrPos: Axis = {\n x: 0,\n y: 0,\n };\n curPoinrPos.x = dataRadiusArr[i] * Math.sin(angleArr[i]);\n curPoinrPos.y = -dataRadiusArr[i] * Math.cos(angleArr[i]);\n dataPointsPosArray.push(curPoinrPos);\n }\n return dataPointsPosArray;\n};\n\n/**\n * 获取正多边形每个点的坐标位置数组(相对于原点)\n * n: 多边形的边数\n * r: 半径\n * origin: 原点位置\n */\nexport const getPolygonPos = function (n: number, r: number, origin: number[]) {\n const dotsArray = []; // 多边形每一个点的坐标数组,格式如[{x: 1, y: 2}]\n const angle = (Math.PI * 2) / n;\n for (let i = 0; i < n; i++) {\n const curPos: Axis = {\n x: 0,\n y: 0,\n };\n curPos.x = r * Math.sin(i * angle) + origin[0];\n curPos.y = -r * Math.cos(i * angle) + origin[1];\n dotsArray.push(curPos);\n }\n return dotsArray;\n};\n\n/**\n * 绘制闭合正多边形\n * n: 边数\n * r:半径\n * origin:正多边形的中心位置。数组形式[x, y]\n * fillStyle:填充样式\n * strokeStyle:线条样式\n * lineWidth: 线条宽度\n */\nexport const drawPolygon = function (\n context: CanvasRenderingContext2D,\n options: DrawPolygonOptions\n) {\n // 对传入参数进行默认值设置\n const n = options.n,\n r = options.r,\n origin = options.origin,\n strokeStyle = options.strokeStyle,\n lineWidth = options.lineWidth * options.ratio,\n lineCap = \"butt\";\n\n context.save();\n context.beginPath();\n const angle = (Math.PI * 2) / n;\n context.translate(origin[0], origin[1]);\n context.moveTo(0, -r);\n for (let i = 0; i < n; i++) {\n context.rotate(angle);\n context.lineTo(0, -r);\n }\n context.closePath();\n context.stroke();\n\n if (options.strokeStyle) {\n context.strokeStyle = strokeStyle;\n context.lineWidth = lineWidth;\n context.lineCap = lineCap;\n }\n if (options.fillStyle) {\n if (typeof options.fillStyle === \"string\") {\n context.fillStyle = options.fillStyle;\n } else if (options.fillStyle instanceof Array) {\n // 创建线性渐变对象\n const gradient = context.createLinearGradient(-r, -r, r, r);\n options.fillStyle.forEach((colors) => {\n gradient.addColorStop(0, colors[0]);\n gradient.addColorStop(1, colors[1]);\n });\n context.fillStyle = gradient;\n }\n\n context.fill();\n }\n context.restore();\n};\n\n/**\n * 绘制线性渐变的多边形,\n * n: 边数\n * r:半径\n * origin:正多边形的中心位置。数组形式[x, y]\n * strokeStyle:线条样式\n * lineWidth: 线条宽度\n */\nexport const drawGradientPolygon = function (\n context: CanvasRenderingContext2D,\n options: GradientPolygon\n) {\n // 对传入参数进行默认值设置\n const { n, r, origin, strokeStyle } = options;\n const lineWidth = options.lineWidth * options.ratio,\n lineCap = \"butt\";\n context.save();\n const angle = (Math.PI * 2) / n;\n context.translate(origin[0], origin[1]);\n\n // 设置线条样式\n context.lineWidth = lineWidth;\n context.lineCap = lineCap;\n // 添加偏移量,使第一条边与正上方对齐\n context.rotate(-Math.PI / 2);\n\n for (let i = 0; i < n; i++) {\n // 计算当前边的起点和终点坐标\n const startX = r * Math.cos(angle * i),\n startY = r * Math.sin(angle * i),\n endX = r * Math.cos(angle * (i + 1)),\n endY = r * Math.sin(angle * (i + 1));\n // 开始一个新的路径\n context.beginPath();\n // 绘制多边形的一条边\n context.moveTo(startX, startY);\n context.lineTo(endX, endY);\n // 创建线性渐变对象\n const gradient = context.createLinearGradient(startX, startY, endX, endY);\n gradient.addColorStop(0, strokeStyle);\n gradient.addColorStop(0.5, \"#1D2B57\");\n gradient.addColorStop(0.6, \"#1D2B57\");\n gradient.addColorStop(1, strokeStyle);\n // 设置当前路径的描边样式为线性渐变\n context.strokeStyle = gradient;\n context.stroke();\n }\n context.restore();\n};\n\n/**\n * 绘制数据点连接线条(一次性画完)\n * dataPoints: 数据的位置数组\n * strokeStyle: 线条样式\n * lineWidth: 线条宽度\n */\nexport const drawDataLine = function (\n context: CanvasRenderingContext2D,\n origin: number[],\n options: DataLineOptions\n) {\n const { strokeStyle, lineWidth, dataPoints } = options;\n const dataPointsLen = dataPoints.length;\n context.save();\n context.beginPath();\n context.translate(origin[0], origin[1]);\n context.moveTo(dataPoints[0].x, dataPoints[0].y);\n for (let i = 1; i < dataPointsLen; i++) {\n context.lineTo(dataPoints[i].x, dataPoints[i].y);\n }\n context.closePath();\n context.strokeStyle = strokeStyle;\n context.lineWidth = lineWidth;\n context.lineJoin = \"round\";\n context.stroke();\n context.restore();\n};\n/**\n * 绘制放射性中心点到多边形顶点连线\n * @param context\n * @param origin\n * @param dataPoints 多边形顶点坐标\n */\nexport const drawVertexLine = function (\n context: CanvasRenderingContext2D,\n origin: number[],\n dataPoints: Axis[]\n) {\n context.save();\n context.beginPath();\n dataPoints.map((point) => {\n context.moveTo(origin[0], origin[1]);\n context.lineTo(point.x, point.y);\n });\n context.strokeStyle = \"#1D2B57\";\n context.lineWidth = 2;\n context.stroke();\n context.restore();\n};\nexport const drawLeadLineAndText = function (\n context: CanvasRenderingContext2D,\n origin: number[],\n r: number,\n dataPoints: Axis[],\n dataSource: Data[]\n) {\n context.save();\n const offsetX = r / 2,\n offsetY = r / 4,\n offsetEndX = r / 12 > 10 ? r / 12 : 10,\n rectSize = 12;\n dataPoints.map((point, i) => {\n let curPosX = point.x,\n curPosMiddleX = point.x,\n curPosEndX = point.x,\n curPosY = point.y,\n rectX = point.x;\n const color = dataSource[i]?.color || colorMap[i] || \"#ccc\";\n context.beginPath();\n context.moveTo(point.x, point.y);\n\n if (point.x - origin[0] >= 0) {\n //引线方向往右\n curPosX += offsetX;\n curPosMiddleX = curPosX + offsetX;\n curPosEndX = curPosMiddleX + offsetEndX;\n rectX = curPosX + rectSize;\n } else if (point.x - origin[0] < 0) {\n //引线方向往左\n curPosX -= offsetX;\n curPosMiddleX = curPosX - offsetX;\n curPosEndX = curPosMiddleX - offsetEndX;\n rectX = curPosMiddleX + rectSize;\n }\n\n if (point.y - origin[1] < 0) {\n curPosY -= offsetY;\n } else if (point.y - origin[1] > 0) {\n curPosY += offsetY;\n }\n context.lineTo(curPosX, curPosY);\n context.lineTo(curPosEndX, curPosY);\n context.strokeStyle = \"rgba(255, 255, 255, .1)\";\n context.stroke();\n context.beginPath();\n context.moveTo(curPosMiddleX, curPosY);\n context.lineTo(curPosEndX, curPosY);\n context.strokeStyle = color;\n context.lineWidth = 2;\n context.stroke();\n\n //文本\n const rectY = dataSource[i]?.percentValue\n ? curPosY - r / 3.5\n : curPosY - r / 5.5;\n const legendSize = r / 12;\n\n if (dataSource[i]?.name) {\n context.fillStyle = color;\n context.fillRect(rectX, rectY, rectSize, rectSize);\n\n context.textAlign = \"left\";\n context.font = `400 ${legendSize}px HarmonyOS_Sans_SC_Black`;\n context.fillStyle = \"rgba(255, 255, 255, .4)\";\n context.fillText(\n `${dataSource[i].name}`,\n rectX + rectSize * 1.5,\n rectY + rectSize / 2\n );\n context.stroke();\n }\n if (dataSource[i]?.percentValue) {\n const percentSize = r / 10;\n context.textAlign = \"left\";\n context.font = `500 ${percentSize}px HarmonyOS_Sans_SC_Black`;\n context.fillStyle = \"#fff\";\n context.fillText(\n `${dataSource[i]?.percentValue}`,\n rectX + rectSize * 1.5,\n rectY + rectSize / 2 + legendSize * 1.5\n );\n context.stroke();\n }\n });\n context.restore();\n};\n\n/**\n * 绘制数据点圆圈\n * dataPoints: 数据的位置数组\n * r: 圆圈半径\n * strokeStyle: 圆的描边样式\n * fillStyle: 圆的描边宽度\n * lineWidth: 圆的填充样式\n */\nexport const drawDataCircle = function (\n context: CanvasRenderingContext2D,\n origin: number[],\n ratio: number,\n options: DataCircleOptions\n) {\n const { strokeStyle, fillStyle, dataPoints } = options;\n const r = options.r * ratio,\n lineWidth = options.lineWidth * ratio;\n\n const dataPointsPosArrayLen = dataPoints.length;\n for (let i = 0; i < dataPointsPosArrayLen; i++) {\n drawCircle(context, {\n x: dataPoints[i].x,\n y: dataPoints[i].y,\n r: r,\n originX: origin[0],\n originY: origin[1],\n strokeStyle: strokeStyle,\n lineWidth: lineWidth,\n fillStyle: fillStyle,\n });\n }\n};\n\n/**\n * 绘制圆圈\n * x: 圆心位置x\n * y: 圆心位置y\n * r: 半径\n * originX: 原点位置x\n * originY: 原点位置y\n * strokeStyle: 描边样式\n * lineWidth: 线条宽度\n * fillStyle: 填充样式\n */\nexport function drawCircle(\n context: CanvasRenderingContext2D,\n options: CircleOptions\n) {\n const { x, y, r, originX, originY, strokeStyle, lineWidth, fillStyle } =\n options;\n context.save();\n context.beginPath();\n context.translate(originX, originY);\n context.arc(x, y, r, 0, Math.PI * 2);\n context.closePath();\n context.strokeStyle = strokeStyle;\n context.lineWidth = lineWidth;\n context.lineJoin = \"round\";\n context.fillStyle = fillStyle;\n context.stroke();\n context.fill();\n context.restore();\n}\n\n/**\n * 绘制数据多边形填充\n * dataPoints: 数据的位置数组\n * fillStyle: 填充样式\n */\nexport const drawDataFill = function (\n context: CanvasRenderingContext2D,\n origin: number[],\n options: DataFillProps\n) {\n const { fillStyle, dataPoints } = options;\n const dataPointsPosArrayLen = dataPoints.length;\n context.save();\n context.beginPath();\n context.translate(origin[0], origin[1]);\n context.moveTo(dataPoints[0].x, dataPoints[0].y);\n for (let i = 1; i < dataPointsPosArrayLen; i++) {\n context.lineTo(dataPoints[i].x, dataPoints[i].y);\n }\n context.closePath();\n context.fillStyle = fillStyle;\n context.fill();\n context.restore();\n};\n\n/**\n * 绘制数据点组成的图案\n * dataLineOptions\n * dataFillOptions\n * dataCircleOptions\n */\nexport const drawDataPoly = function (\n context: CanvasRenderingContext2D,\n origin: number[],\n ratio: number,\n options: DataPolyProps\n) {\n const { dataLineOptions, dataFillOptions, dataCircleOptions } = options;\n const dataPointsPosArrayLen = dataLineOptions.dataPoints.length;\n if (dataPointsPosArrayLen === 0) return;\n // 绘制数据点连接线条\n drawDataLine(context, origin, dataLineOptions);\n // 绘制数据多边形填充\n drawDataFill(context, origin, dataFillOptions);\n // 绘制数据点圆圈\n drawDataCircle(context, origin, ratio, dataCircleOptions);\n};\n\n/**\n * 绘制雷达的背景图\n * 参数options对象的属性如下:\n * layer: 多边形层数\n * n: 边数\n * r:半径\n * origin:正多边形的中心位置。数组形式[x, y]\n * oddStrokeStyle: index为奇数的多边形的描边颜色\n * oddFillStyle: index为奇数的多边形的填充颜色\n * evenStrokeStyle: index为偶数的多边形的描边颜色\n * evenFillStyle: index为偶数的多边形的填充颜色\n */\nexport const drawRadarBackground = function (\n context: CanvasRenderingContext2D,\n options: DrawRadarBgOption\n) {\n const { layer, n, r, ratio, origin, lineWidth } = options;\n const evenStrokeStyle = \"transparent\",\n oddStrokeStyle = \"transparent\",\n evenFillStyle = [[\"#3366FF\", \"#83F5E1\"]],\n oddFillStyle = \"#29292d\";\n // 由外向内绘画多边形\n for (let i = layer; i > 0; i--) {\n if (i === layer) {\n drawGradientPolygon(context, {\n n,\n r,\n origin,\n ratio,\n lineWidth,\n strokeStyle: \"rgba(51, 102, 255)\",\n });\n drawGradientPolygon(context, {\n n,\n r: r * 0.95,\n origin,\n ratio,\n strokeStyle: \"rgba(76,132,250,0.1)\",\n lineWidth,\n });\n } else {\n const layerDis = (r * 0.95) / layer;\n const fillStyle = i % 2 != 0 ? oddFillStyle : evenFillStyle,\n strokeStyle = i % 2 != 0 ? oddStrokeStyle : evenStrokeStyle,\n layerRadiu = layerDis * i;\n drawPolygon(context, {\n n,\n r: layerRadiu,\n origin,\n fillStyle,\n strokeStyle,\n lineWidth,\n ratio,\n });\n }\n }\n};\n","import React, { ReactElement, useEffect, useRef, useState } from \"react\";\nimport {\n baseRadarConfig,\n baseUserConfig,\n constructBaseConfig,\n constructUserConfig,\n drawDataPoly,\n drawLeadLineAndText,\n drawRadarBackground,\n drawVertexLine,\n getDataPointsPos,\n getPolygonPos,\n} from \"./utils.js\";\nimport { BaseConfig, RadarProps, UserConfig } from \"./interface.js\";\n\nexport function Radar({\n dataSource,\n radius,\n value,\n dataFill,\n dataCircle,\n dataLine,\n scale,\n ...props\n}: RadarProps): ReactElement {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const contextRef = useRef<CanvasRenderingContext2D>(null);\n const [baseConfig, setBaseConfig] = useState<BaseConfig>(baseRadarConfig);\n const [userConfig, setUserConfig] = useState<UserConfig>(baseUserConfig);\n\n const ratio = window.devicePixelRatio;\n useEffect(() => {\n const canvas = canvasRef.current;\n const context = canvas.getContext(\"2d\");\n const canvasWidth = canvas.clientWidth;\n const canvasHeight = canvas.clientHeight;\n // 根据设备像素比调整画布的实际像素大小\n canvas.width = canvasWidth * ratio;\n canvas.height = canvasHeight * ratio;\n const defaultRadius = Math.min(canvas.width, canvas.height) * scale; // 正多边形的默认半径\n\n contextRef.current = context;\n setBaseConfig(constructBaseConfig(dataSource, radius ?? defaultRadius));\n }, [dataSource, radius, scale]);\n useEffect(() => {\n setUserConfig(constructUserConfig(dataFill, dataCircle, dataLine));\n }, [dataFill, dataCircle, dataLine]);\n\n useEffect(() => {\n let radiusPrecent = 0,\n timer = null;\n const canvas = canvasRef.current;\n const context = contextRef.current;\n const origin = [canvas.width / 2, canvas.height / 2];\n\n if (context) {\n // 起requestAnimationFrame为了数值绘制区域有过渡效果\n const drawFrame = () => {\n timer = window.requestAnimationFrame(drawFrame);\n // 数据点坐标元素\n radiusPrecent += 0.05;\n if (radiusPrecent >= 1) {\n window.cancelAnimationFrame(timer);\n }\n // 清空画布\n context.clearRect(0, 0, canvas.width, canvas.height);\n // 绘制背景图\n drawRadarBackground(context, {\n layer: 5,\n n: baseConfig.n,\n r: baseConfig.radius,\n ratio,\n origin,\n lineWidth: 2,\n });\n\n const dataRadius = baseConfig.dataRadius.map((value) => {\n return value * radiusPrecent;\n });\n const dataPointsPosArray = getDataPointsPos(\n baseConfig.n,\n dataRadius,\n baseConfig.angleArr\n );\n const dataLineOptions = {\n dataPoints: dataPointsPosArray,\n strokeStyle: userConfig.dataLine.strokeStyle,\n lineWidth: userConfig.dataLine.lineWidth,\n };\n const dataCircleOptions = {\n dataPoints: dataPointsPosArray,\n r: userConfig.dataCircle.r,\n strokeStyle: userConfig.dataCircle.strokeStyle,\n fillStyle: userConfig.dataCircle.fillStyle,\n lineWidth: userConfig.dataCircle.lineWidth,\n };\n const dataFillOptions = {\n dataPoints: dataPointsPosArray,\n fillStyle: userConfig.dataFill.fillStyle,\n };\n drawDataPoly(context, origin, ratio, {\n dataLineOptions: dataLineOptions,\n dataFillOptions: dataFillOptions,\n dataCircleOptions: dataCircleOptions,\n });\n\n //绘制放射性中心点到多边形顶点连线\n const polygonOuterPointsPosArr = getPolygonPos(\n baseConfig.n,\n baseConfig.radius,\n origin\n );\n drawVertexLine(context, origin, polygonOuterPointsPosArr);\n drawLeadLineAndText(\n context,\n origin,\n baseConfig.radius,\n polygonOuterPointsPosArr,\n baseConfig.originDataSource\n );\n if (value) {\n const fontSize = baseConfig.radius / 5;\n context.font = `bold ${fontSize}px HarmonyOS_Sans_SC_Black`;\n context.fillStyle = \"#fff\";\n context.textAlign = \"center\";\n context.textBaseline = \"middle\";\n context.fillText(`${value}`, origin[0], origin[1]);\n }\n };\n drawFrame();\n }\n }, [baseConfig, userConfig, value]);\n\n return (\n <div\n className=\"radarWrap\"\n style={{ width: `${props.width}px`, height: `${props.height}px` }}\n >\n <canvas className=\"canvasWrap\" ref={canvasRef} />\n </div>\n );\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".radarWrap{position:relative;width:100%;height:100%;.canvasWrap{display:block;width:100%;height:100%}}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___.toString();\n","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nexport default function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}"],"names":["colorMap","baseUserConfig","dataFill","fillStyle","dataCircle","r","strokeStyle","lineWidth","dataLine","baseRadarConfig","n","dataRadiusOfPercent","dataRadius","angleArr","tooltipsContentArr","originDataSource","radius","constructBaseConfig","dataSource","baseConfig","cloneDeep","length","disAngle","Math","PI","forEach","data","i","value","maxValue","constructUserConfig","userConfig","merge","getDataPointsPos","dataRadiusArr","dataPointsPosArray","curPoinrPos","x","y","sin","cos","push","getPolygonPos","origin","dotsArray","angle","curPos","drawPolygon","context","options","ratio","save","beginPath","translate","moveTo","rotate","lineTo","closePath","stroke","lineCap","Array","gradient","createLinearGradient","colors","addColorStop","fill","restore","drawGradientPolygon","startX","startY","endX","endY","drawVertexLine","dataPoints","map","point","drawLeadLineAndText","offsetX","offsetY","offsetEndX","_dataSource$i","_dataSource$i2","_dataSource$i3","_dataSource$i4","curPosX","curPosMiddleX","curPosEndX","curPosY","rectX","color","rectY","percentValue","legendSize","name","fillRect","textAlign","font","concat","fillText","rectSize","_dataSource$i5","percentSize","drawCircle","originX","originY","arc","lineJoin","drawDataPoly","dataLineOptions","dataFillOptions","dataCircleOptions","dataPointsLen","drawDataLine","dataPointsPosArrayLen","drawDataFill","drawDataCircle","drawRadarBackground","layer","evenFillStyle","Radar","_ref","scale","props","_objectWithoutProperties","_excluded","canvasRef","useRef","contextRef","setBaseConfig","useState","setUserConfig","window","devicePixelRatio","useEffect","canvas","current","getContext","canvasWidth","clientWidth","canvasHeight","clientHeight","width","height","defaultRadius","min","radiusPrecent","timer","drawFrame","requestAnimationFrame","cancelAnimationFrame","clearRect","polygonOuterPointsPosArr","fontSize","textBaseline","React","className","style","ref","___CSS_LOADER_EXPORT___","module","id","toString","source","excluded","key","target","sourceKeys","Object","keys","indexOf","getOwnPropertySymbols","sourceSymbolKeys","prototype","propertyIsEnumerable","call"],"sourceRoot":""}