# Conflicts: # src/app/routes/data-v/navigation/navigation.component.ts # src/app/routes/data-v/routes.ts # src/app/routes/data-v/s1/s1.component.html # src/app/routes/data-v/s1/s1.component.ts # src/app/routes/data-v/workstation/workstation.component.ts # yarn.lockmaster
@@ -62,6 +62,58 @@ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | |||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||||
OTHER DEALINGS IN THE SOFTWARE. | OTHER DEALINGS IN THE SOFTWARE. | ||||
-------------------------------------------------------------------------------- | |||||
Package: three | |||||
License: "MIT" | |||||
The MIT License | |||||
Copyright © 2010-2016 three.js authors | |||||
Permission is hereby granted, free of charge, to any person obtaining a copy | |||||
of this software and associated documentation files (the "Software"), to deal | |||||
in the Software without restriction, including without limitation the rights | |||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||||
copies of the Software, and to permit persons to whom the Software is | |||||
furnished to do so, subject to the following conditions: | |||||
The above copyright notice and this permission notice shall be included in | |||||
all copies or substantial portions of the Software. | |||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |||||
THE SOFTWARE. | |||||
-------------------------------------------------------------------------------- | |||||
Package: three-orbitcontrols-ts | |||||
License: "MIT" | |||||
MIT License | |||||
Copyright (c) 2017 Nicolas Panel | |||||
Permission is hereby granted, free of charge, to any person obtaining a copy | |||||
of this software and associated documentation files (the "Software"), to deal | |||||
in the Software without restriction, including without limitation the rights | |||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||||
copies of the Software, and to permit persons to whom the Software is | |||||
furnished to do so, subject to the following conditions: | |||||
The above copyright notice and this permission notice shall be included in all | |||||
copies or substantial portions of the Software. | |||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |||||
SOFTWARE. | |||||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||||
Package: tslib | Package: tslib | ||||
License: "0BSD" | License: "0BSD" | ||||
@@ -338,6 +390,32 @@ The following files embed [d3.js](https://github.com/d3/d3) BSD 3-Clause: | |||||
`/src/util/number.ts` | `/src/util/number.ts` | ||||
See `/licenses/LICENSE-d3` for details of the license. | See `/licenses/LICENSE-d3` for details of the license. | ||||
-------------------------------------------------------------------------------- | |||||
Package: three | |||||
License: "MIT" | |||||
The MIT License | |||||
Copyright © 2010-2024 three.js authors | |||||
Permission is hereby granted, free of charge, to any person obtaining a copy | |||||
of this software and associated documentation files (the "Software"), to deal | |||||
in the Software without restriction, including without limitation the rights | |||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||||
copies of the Software, and to permit persons to whom the Software is | |||||
furnished to do so, subject to the following conditions: | |||||
The above copyright notice and this permission notice shall be included in | |||||
all copies or substantial portions of the Software. | |||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |||||
THE SOFTWARE. | |||||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||||
Package: mqtt-browser | Package: mqtt-browser | ||||
License: "MIT" | License: "MIT" | ||||
@@ -1 +1 @@ | |||||
import{D as u,E as n,F as i,G as s,H as a,I as o,J as c,K as m,L as v}from"./chunk-XXGLJ63T.js";var C=class{static num(r){return u(r.value)?null:{num:!0}}static int(r){return n(r.value)?null:{int:!0}}static decimal(r){return i(r.value)?null:{decimal:!0}}static idCard(r){return s(r.value)?null:{idCard:!0}}static mobile(r){return a(r.value)?null:{mobile:!0}}static url(r){return o(r.value)?null:{url:!0}}static ip(r){return c(r.value)?null:{ip:!0}}static color(r){return m(r.value)?null:{color:!0}}static chinese(r){return v(r.value)?null:{chinese:!0}}};function p(e,r){return l=>{let d=l.get(e),t=l.get(r);return t.errors&&!t.errors.matchControl||(d.value!==t.value?t.setErrors({matchControl:!0}):t.setErrors(null)),null}}export{C as a,p as b}; | |||||
import{D as u,E as n,F as i,G as s,H as a,I as o,J as c,K as m,L as v}from"./chunk-OOUNO2UZ.js";var C=class{static num(r){return u(r.value)?null:{num:!0}}static int(r){return n(r.value)?null:{int:!0}}static decimal(r){return i(r.value)?null:{decimal:!0}}static idCard(r){return s(r.value)?null:{idCard:!0}}static mobile(r){return a(r.value)?null:{mobile:!0}}static url(r){return o(r.value)?null:{url:!0}}static ip(r){return c(r.value)?null:{ip:!0}}static color(r){return m(r.value)?null:{color:!0}}static chinese(r){return v(r.value)?null:{chinese:!0}}};function p(e,r){return l=>{let d=l.get(e),t=l.get(r);return t.errors&&!t.errors.matchControl||(d.value!==t.value?t.setErrors({matchControl:!0}):t.setErrors(null)),null}}export{C as a,p as b}; |
@@ -1 +1 @@ | |||||
import{F as b,H as C,Hc as m,Uc as u,X as p,Zb as v,a as y,fa as l,ha as g,ia as A,ja as c,k as d,m as w,n as S,oc as T,rc as x,xa as I,y as O}from"./chunk-TV7RDLL7.js";var U={store_key:"_token",token_invalid_redirect:!0,token_exp_offset:10,token_send_key:"token",token_send_template:"${token}",token_send_place:"header",login_url:"/login",refreshTime:3e3,refreshOffset:6e3};function E(e){return e.merge("auth",U)}function j(){return new h}var h=class{get(t){return JSON.parse(localStorage.getItem(t)||"{}")||{}}set(t,i){return localStorage.setItem(t,JSON.stringify(i)),!0}remove(t){localStorage.removeItem(t)}},D=new g("AUTH_STORE_TOKEN",{providedIn:"root",factory:j});function L(){return new F(c(u))}var F=(()=>{let t=class t{constructor(n){this.store=c(D),this.refresh$=new w,this.change$=new S(null),this._referrer={},this._options=E(n)}get refresh(){return this.builderRefresh(),this.refresh$.pipe(p())}get login_url(){return this._options.login_url}get referrer(){return this._referrer}get options(){return this._options}set(n){let r=this.store.set(this._options.store_key,n);return this.change$.next(n),r}get(n){let r=this.store.get(this._options.store_key);return n?Object.assign(new n,r):r}clear(n={onlyToken:!1}){let r=null;n.onlyToken===!0?(r=this.get(),r.token="",this.set(r)):this.store.remove(this._options.store_key),this.change$.next(r)}change(){return this.change$.pipe(p())}builderRefresh(){let{refreshTime:n,refreshOffset:r}=this._options;this.cleanRefresh(),this.interval$=b(n).pipe(O(()=>{let o=this.get(),s=o.expired||o.exp||0;if(s<=0)return null;let a=new Date().valueOf()+r;return s<=a?o:null}),C(o=>o!=null)).subscribe(o=>this.refresh$.next(o))}cleanRefresh(){this.interval$&&!this.interval$.closed&&this.interval$.unsubscribe()}ngOnDestroy(){this.cleanRefresh()}};t.\u0275fac=function(r){return new(r||t)(A(u))},t.\u0275prov=l({token:t,factory:t.\u0275fac});let e=t;return e})(),f=new g("DA_SERVICE_TOKEN",{providedIn:"root",factory:L}),_="_delonAuthSocialType",k="_delonAuthSocialCallbackByHref",te=(()=>{let t=class t{constructor(){this.tokenService=c(f),this.doc=c(v),this.router=c(m),this._win=null}login(n,r="/",o={}){if(o=y({type:"window",windowFeatures:"location=yes,height=570,width=520,scrollbars=yes,status=yes"},o),localStorage.setItem(_,o.type),localStorage.setItem(k,r),o.type==="href"){this.doc.location.href=n;return}return this._win=window.open(n,"_blank",o.windowFeatures),this._winTime=setInterval(()=>{if(this._win&&this._win.closed){this.ngOnDestroy();let s=this.tokenService.get();s&&!s.token&&(s=null),s&&this.tokenService.set(s),this.observer.next(s),this.observer.complete()}},100),new d(s=>{this.observer=s})}callback(n){if(!n&&this.router.url.indexOf("?")===-1)throw new Error("url muse contain a ?");let r={token:""};if(typeof n=="string"){let a=n.split("?")[1].split("#")[0];r=this.router.parseUrl(`./?${a}`).queryParams}else r=n;if(!r||!r.token)throw new Error("invalide token data");this.tokenService.set(r);let o=localStorage.getItem(k)||"/";localStorage.removeItem(k);let s=localStorage.getItem(_);return localStorage.removeItem(_),s==="window"?window.close():this.router.navigateByUrl(o),r}ngOnDestroy(){clearInterval(this._winTime),this._winTime=null}};t.\u0275fac=function(r){return new(r||t)},t.\u0275prov=l({token:t,factory:t.\u0275fac});let e=t;return e})();function N(e){return e!=null&&typeof e.token=="string"&&e.token.length>0}function R(e,t){let i=c(m),n=c(f),r=c(v);n.referrer.url=t||i.url,e.token_invalid_redirect===!0&&setTimeout(()=>{/^https?:\/\//g.test(e.login_url)?r.location.href=e.login_url:i.navigate([e.login_url])})}var J=new T(()=>!1);function H(e,t){if(e.context.get(J))return!0;if(Array.isArray(t.ignores)){for(let i of t.ignores)if(i.test(e.url))return!0}return!1}function P(e,t){return R(t),new d(i=>{let n="",r=new x({url:e.url,headers:e.headers,status:401,statusText:n});i.error(r)})}var $=(()=>{let t=class t{constructor(){this.srv=c(f)}process(n){let r=N(this.srv.get());return r||R(this.srv.options,n),r}};t.\u0275fac=function(r){return new(r||t)},t.\u0275prov=l({token:t,factory:t.\u0275fac,providedIn:"root"});let e=t;return e})(),re=(e,t)=>c($).process(t.url),ne=(e,t)=>c($).process(t.url);function B(e,t,i){let{token_send_template:n,token_send_key:r}=i,o=n.replace(/\$\{([\w]+)\}/g,(s,a)=>t[a]);switch(i.token_send_place){case"header":let s={};s[r]=o,e=e.clone({setHeaders:s});break;case"body":let a=e.body||{};a[r]=o,e=e.clone({body:a});break;case"url":e=e.clone({params:e.params.append(r,o)});break}return e}var oe=(e,t)=>{let i=E(c(u));if(H(e,i))return t(e);let n=c(f).get();return N(n)?t(B(e,n,i)):P(e,i)};var M=function(e){return e[e.Store=0]="Store",e}(M||{});function K(e,t){return{\u0275kind:e,\u0275providers:t}}function se(e){return I([(e??W()).\u0275providers])}function W(){return K(M.Store,[{provide:D,useClass:h}])}export{f as a,te as b,J as c,re as d,ne as e,oe as f,se as g}; | |||||
import{$b as v,A as O,H as b,J as C,Jc as m,Wc as u,Z as p,a as y,ha as l,ja as g,ka as A,la as c,m as d,o as w,p as S,qc as T,tc as x,za as I}from"./chunk-VDRVUQCF.js";var U={store_key:"_token",token_invalid_redirect:!0,token_exp_offset:10,token_send_key:"token",token_send_template:"${token}",token_send_place:"header",login_url:"/login",refreshTime:3e3,refreshOffset:6e3};function E(e){return e.merge("auth",U)}function j(){return new h}var h=class{get(t){return JSON.parse(localStorage.getItem(t)||"{}")||{}}set(t,i){return localStorage.setItem(t,JSON.stringify(i)),!0}remove(t){localStorage.removeItem(t)}},D=new g("AUTH_STORE_TOKEN",{providedIn:"root",factory:j});function L(){return new F(c(u))}var F=(()=>{let t=class t{constructor(n){this.store=c(D),this.refresh$=new w,this.change$=new S(null),this._referrer={},this._options=E(n)}get refresh(){return this.builderRefresh(),this.refresh$.pipe(p())}get login_url(){return this._options.login_url}get referrer(){return this._referrer}get options(){return this._options}set(n){let r=this.store.set(this._options.store_key,n);return this.change$.next(n),r}get(n){let r=this.store.get(this._options.store_key);return n?Object.assign(new n,r):r}clear(n={onlyToken:!1}){let r=null;n.onlyToken===!0?(r=this.get(),r.token="",this.set(r)):this.store.remove(this._options.store_key),this.change$.next(r)}change(){return this.change$.pipe(p())}builderRefresh(){let{refreshTime:n,refreshOffset:r}=this._options;this.cleanRefresh(),this.interval$=b(n).pipe(O(()=>{let o=this.get(),s=o.expired||o.exp||0;if(s<=0)return null;let a=new Date().valueOf()+r;return s<=a?o:null}),C(o=>o!=null)).subscribe(o=>this.refresh$.next(o))}cleanRefresh(){this.interval$&&!this.interval$.closed&&this.interval$.unsubscribe()}ngOnDestroy(){this.cleanRefresh()}};t.\u0275fac=function(r){return new(r||t)(A(u))},t.\u0275prov=l({token:t,factory:t.\u0275fac});let e=t;return e})(),f=new g("DA_SERVICE_TOKEN",{providedIn:"root",factory:L}),_="_delonAuthSocialType",k="_delonAuthSocialCallbackByHref",te=(()=>{let t=class t{constructor(){this.tokenService=c(f),this.doc=c(v),this.router=c(m),this._win=null}login(n,r="/",o={}){if(o=y({type:"window",windowFeatures:"location=yes,height=570,width=520,scrollbars=yes,status=yes"},o),localStorage.setItem(_,o.type),localStorage.setItem(k,r),o.type==="href"){this.doc.location.href=n;return}return this._win=window.open(n,"_blank",o.windowFeatures),this._winTime=setInterval(()=>{if(this._win&&this._win.closed){this.ngOnDestroy();let s=this.tokenService.get();s&&!s.token&&(s=null),s&&this.tokenService.set(s),this.observer.next(s),this.observer.complete()}},100),new d(s=>{this.observer=s})}callback(n){if(!n&&this.router.url.indexOf("?")===-1)throw new Error("url muse contain a ?");let r={token:""};if(typeof n=="string"){let a=n.split("?")[1].split("#")[0];r=this.router.parseUrl(`./?${a}`).queryParams}else r=n;if(!r||!r.token)throw new Error("invalide token data");this.tokenService.set(r);let o=localStorage.getItem(k)||"/";localStorage.removeItem(k);let s=localStorage.getItem(_);return localStorage.removeItem(_),s==="window"?window.close():this.router.navigateByUrl(o),r}ngOnDestroy(){clearInterval(this._winTime),this._winTime=null}};t.\u0275fac=function(r){return new(r||t)},t.\u0275prov=l({token:t,factory:t.\u0275fac});let e=t;return e})();function N(e){return e!=null&&typeof e.token=="string"&&e.token.length>0}function R(e,t){let i=c(m),n=c(f),r=c(v);n.referrer.url=t||i.url,e.token_invalid_redirect===!0&&setTimeout(()=>{/^https?:\/\//g.test(e.login_url)?r.location.href=e.login_url:i.navigate([e.login_url])})}var J=new T(()=>!1);function H(e,t){if(e.context.get(J))return!0;if(Array.isArray(t.ignores)){for(let i of t.ignores)if(i.test(e.url))return!0}return!1}function P(e,t){return R(t),new d(i=>{let n="",r=new x({url:e.url,headers:e.headers,status:401,statusText:n});i.error(r)})}var $=(()=>{let t=class t{constructor(){this.srv=c(f)}process(n){let r=N(this.srv.get());return r||R(this.srv.options,n),r}};t.\u0275fac=function(r){return new(r||t)},t.\u0275prov=l({token:t,factory:t.\u0275fac,providedIn:"root"});let e=t;return e})(),re=(e,t)=>c($).process(t.url),ne=(e,t)=>c($).process(t.url);function B(e,t,i){let{token_send_template:n,token_send_key:r}=i,o=n.replace(/\$\{([\w]+)\}/g,(s,a)=>t[a]);switch(i.token_send_place){case"header":let s={};s[r]=o,e=e.clone({setHeaders:s});break;case"body":let a=e.body||{};a[r]=o,e=e.clone({body:a});break;case"url":e=e.clone({params:e.params.append(r,o)});break}return e}var oe=(e,t)=>{let i=E(c(u));if(H(e,i))return t(e);let n=c(f).get();return N(n)?t(B(e,n,i)):P(e,i)};var M=function(e){return e[e.Store=0]="Store",e}(M||{});function K(e,t){return{\u0275kind:e,\u0275providers:t}}function se(e){return I([(e??W()).\u0275providers])}function W(){return K(M.Store,[{provide:D,useClass:h}])}export{f as a,te as b,J as c,re as d,ne as e,oe as f,se as g}; |
@@ -103,7 +103,7 @@ | |||||
} | } | ||||
</style> | </style> | ||||
<style>html,body{width:100%;height:100%}*,*:before,*:after{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:rgba(0,0,0,0)}@-ms-viewport{width:device-width}body{margin:0;color:#ffffffd9;font-size:14px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-variant:tabular-nums;line-height:1.5715;background-color:#000;font-feature-settings:"tnum"}label{touch-action:manipulation}html{--antd-wave-shadow-color: #13C2C2;--scroll-bar: 0}body{scrollbar-color:rgba(0,0,0,.3) #6e6e6e;scrollbar-width:thin}body::-webkit-scrollbar{width:6px;height:6px}body::-webkit-scrollbar-track{box-shadow:inset 0 0 6px #0000004d}body::-webkit-scrollbar-thumb{background-color:#6e6e6e;outline:1px solid #333}html{touch-action:manipulation;direction:ltr;height:100%}html,body,app-root{height:100%}body{color:#ffffffd9;background-color:#000} | <style>html,body{width:100%;height:100%}*,*:before,*:after{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:rgba(0,0,0,0)}@-ms-viewport{width:device-width}body{margin:0;color:#ffffffd9;font-size:14px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-variant:tabular-nums;line-height:1.5715;background-color:#000;font-feature-settings:"tnum"}label{touch-action:manipulation}html{--antd-wave-shadow-color: #13C2C2;--scroll-bar: 0}body{scrollbar-color:rgba(0,0,0,.3) #6e6e6e;scrollbar-width:thin}body::-webkit-scrollbar{width:6px;height:6px}body::-webkit-scrollbar-track{box-shadow:inset 0 0 6px #0000004d}body::-webkit-scrollbar-thumb{background-color:#6e6e6e;outline:1px solid #333}html{touch-action:manipulation;direction:ltr;height:100%}html,body,app-root{height:100%}body{color:#ffffffd9;background-color:#000} | ||||
</style><link rel="stylesheet" href="styles-JTMVGPO6.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles-JTMVGPO6.css"></noscript><link rel="modulepreload" href="chunk-4YNSMQCN.js"><link rel="modulepreload" href="chunk-T3OMXG5T.js"><link rel="modulepreload" href="chunk-XXGLJ63T.js"><link rel="modulepreload" href="chunk-ZRW2SW2G.js"><link rel="modulepreload" href="chunk-TV7RDLL7.js"></head> | |||||
</style><link rel="stylesheet" href="styles-JTMVGPO6.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles-JTMVGPO6.css"></noscript><link rel="modulepreload" href="chunk-2D265ORJ.js"><link rel="modulepreload" href="chunk-HCPW2OGS.js"><link rel="modulepreload" href="chunk-OOUNO2UZ.js"><link rel="modulepreload" href="chunk-4FFPI7ZP.js"><link rel="modulepreload" href="chunk-VDRVUQCF.js"></head> | |||||
<body> | <body> | ||||
<app-root></app-root> | <app-root></app-root> | ||||
@@ -113,6 +113,6 @@ | |||||
●</label><label> ●</label></div> | ●</label><label> ●</label></div> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
<script src="polyfills-RX4V3J3S.js" type="module"></script><script src="scripts-XEF6VACQ.js" defer></script><script src="main-XJNA5CYE.js" type="module"></script></body> | |||||
<script src="polyfills-RX4V3J3S.js" type="module"></script><script src="scripts-XEF6VACQ.js" defer></script><script src="main-3JB53C7N.js" type="module"></script></body> | |||||
</html> | </html> |
@@ -42,6 +42,7 @@ | |||||
"@microsoft/signalr": "^8.0.0", | "@microsoft/signalr": "^8.0.0", | ||||
"@microsoft/signalr-protocol-msgpack": "^8.0.0", | "@microsoft/signalr-protocol-msgpack": "^8.0.0", | ||||
"@types/signalr": "^2.4.3", | "@types/signalr": "^2.4.3", | ||||
"@types/three": "^0.162.0", | |||||
"ag-grid-angular": "^31.0.2", | "ag-grid-angular": "^31.0.2", | ||||
"echarts": "^5.5.0", | "echarts": "^5.5.0", | ||||
"moment": "^2.30.1", | "moment": "^2.30.1", | ||||
@@ -51,6 +52,8 @@ | |||||
"ngx-mqtt": "^17.0.0", | "ngx-mqtt": "^17.0.0", | ||||
"rxjs": "~7.8.0", | "rxjs": "~7.8.0", | ||||
"screenfull": "^6.0.2", | "screenfull": "^6.0.2", | ||||
"three": "^0.162.0", | |||||
"three-orbitcontrols-ts": "^0.1.2", | |||||
"tslib": "^2.3.0", | "tslib": "^2.3.0", | ||||
"zone.js": "~0.14.3" | "zone.js": "~0.14.3" | ||||
}, | }, | ||||
@@ -7,6 +7,7 @@ import { DataVSecond1Component } from './second1/second1.component'; | |||||
import { DataVThreejsComponent } from './threejs/threejs.component'; | import { DataVThreejsComponent } from './threejs/threejs.component'; | ||||
import { DataVUserComponent } from './user/user.component'; | import { DataVUserComponent } from './user/user.component'; | ||||
import { DataVWorkstationComponent } from './workstation/workstation.component'; | import { DataVWorkstationComponent } from './workstation/workstation.component'; | ||||
import { DataVT1Component } from './t1/t1.component'; | |||||
export const routes: Routes = [ | export const routes: Routes = [ | ||||
{ | { | ||||
@@ -19,5 +20,6 @@ export const routes: Routes = [ | |||||
component: DataVSecond1Component, | component: DataVSecond1Component, | ||||
data: { menu: null } | data: { menu: null } | ||||
}, | }, | ||||
{ path: 'threejs/:id', component: DataVThreejsComponent } | |||||
{ path: 'threejs/:id', component: DataVThreejsComponent }, | |||||
{ path: 't1/:id', component: DataVT1Component } | |||||
]; | ]; |
@@ -46,46 +46,57 @@ | |||||
<div style="height: 34.6rem"> | <div style="height: 34.6rem"> | ||||
<img src="assets/dashboard/dashboard_ws_demo1.png" style="width: 100%" /> | <img src="assets/dashboard/dashboard_ws_demo1.png" style="width: 100%" /> | ||||
<div nz-row style="justify-content: center; align-items: center; margin-top: 0.5rem"> | |||||
<div nz-col nzSpan="12" class="sys-status-title"> 机器人 </div> | |||||
<div nz-col nzSpan="12" class="sys-status-title"> 全硫仪 </div> | |||||
<div nz-col nzSpan="12" class="sys-status-title"> 全水分析仪 </div> | |||||
<div nz-col nzSpan="12" class="sys-status-title"> 挥发分仪 </div> | |||||
<div nz-col nzSpan="12" class="sys-status-title"> 量热仪 </div> | |||||
<div nz-col nzSpan="12" class="sys-status-title"> 谈情氮元素 </div> | |||||
<div nz-row style="justify-content: center;align-items: center;margin-top: 0.5rem;"> | |||||
<div nz-col nzSpan="12" class="sys-status-title"> | |||||
机器人 | |||||
</div> | |||||
<div nz-col nzSpan="12" class="sys-status-title"> | |||||
全硫仪 | |||||
</div> | |||||
<div nz-col nzSpan="12" class="sys-status-title"> | |||||
全水分析仪 | |||||
</div> | |||||
<div nz-col nzSpan="12" class="sys-status-title"> | |||||
挥发分仪 | |||||
</div> | |||||
<div nz-col nzSpan="12" class="sys-status-title"> | |||||
量热仪 | |||||
</div> | |||||
<div nz-col nzSpan="12" class="sys-status-title"> | |||||
碳氢氮元素 | |||||
</div> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</data-v-card> | </data-v-card> | ||||
</div> | </div> | ||||
<div nz-col nzSpan="8"> | <div nz-col nzSpan="8"> | ||||
<data-v-card | |||||
title="化验结果" | |||||
[showSetting]="true" | |||||
[optionsList]="chartConfig.optionsCheckList" | |||||
(onCheckedItemsChange)="handleCheckedItems($event)" | |||||
> | |||||
<data-v-card title="化验结果" [showSetting]="true" [optionsList]="chartConfig.optionsCheckList" | |||||
(onCheckedItemsChange)="handleCheckedItems($event)"> | |||||
<div nz-row class="scrollable-container"> | <div nz-row class="scrollable-container"> | ||||
@for (item of chartConfig.optionsCheckList; track item) { | |||||
@for(item of chartConfig.optionsCheckList; track item) { | |||||
<div nz-col [nzSpan]="24 / chartConfig.rowNumber" *ngIf="item.checked" class="centered-element"> | <div nz-col [nzSpan]="24 / chartConfig.rowNumber" *ngIf="item.checked" class="centered-element"> | ||||
<!-- 添加上下外边距 --> | <!-- 添加上下外边距 --> | ||||
<app-chart-component | |||||
[options]="item.options" | |||||
<app-chart-component [options]="item.options" | |||||
[style]="{ margin: '20px ' + 20 / chartConfig.rowNumber + 'px', width: '100%', height: '16rem' }" | [style]="{ margin: '20px ' + 20 / chartConfig.rowNumber + 'px', width: '100%', height: '16rem' }" | ||||
*ngIf="item.checked" | |||||
/> | |||||
*ngIf="item.checked" /> | |||||
</div> | </div> | ||||
} | |||||
} | |||||
</div> | </div> | ||||
<div nz-row> | <div nz-row> | ||||
@for (item of chartConfig.optionBottomList; track item) { | |||||
@for(item of chartConfig.optionBottomList; track item) { | |||||
<div nz-col nzSpan="12"> | <div nz-col nzSpan="12"> | ||||
<div class="centered-element" style="margin: 2px"> | <div class="centered-element" style="margin: 2px"> | ||||
<app-chart-component [options]="item" style="width: 26rem; height: 11rem; margin-left: 0.4rem" /> | <app-chart-component [options]="item" style="width: 26rem; height: 11rem; margin-left: 0.4rem" /> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
} | |||||
} | |||||
</div> | </div> | ||||
</data-v-card> | </data-v-card> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
<!-- <data-v-card> | |||||
<div class="sys-status-title">煤样超差率:超差样量/总样量 03/16</div> | |||||
<div class="sys-status-title">煤样合格率:合格样量/总样量 15/16</div> | |||||
</data-v-card> --> |
@@ -15,6 +15,8 @@ import { Subscription, finalize } from 'rxjs'; | |||||
import { IMqttMessage, MqttService } from 'ngx-mqtt'; | import { IMqttMessage, MqttService } from 'ngx-mqtt'; | ||||
import { ChartComponentComponent } from './chart-component/chart-component.component'; | import { ChartComponentComponent } from './chart-component/chart-component.component'; | ||||
import { NzListModule } from 'ng-zorro-antd/list'; | import { NzListModule } from 'ng-zorro-antd/list'; | ||||
import { TitleService } from '@delon/theme'; | |||||
@Component({ | @Component({ | ||||
selector: 'app-data-v-s1', | selector: 'app-data-v-s1', | ||||
standalone: true, | standalone: true, | ||||
@@ -0,0 +1,6 @@ | |||||
<!-- <div #Three style="background-color: red;"></div> --> | |||||
<div style="display: flex; flex-direction: column; height: 100vh;"> | |||||
<div #Three style="flex-grow: 1;"></div> | |||||
</div> |
@@ -0,0 +1,121 @@ | |||||
import { Component, ElementRef, OnInit, ViewChild, inject } from '@angular/core'; | |||||
import { STColumn, STComponent } from '@delon/abc/st'; | |||||
import { SFSchema } from '@delon/form'; | |||||
import { ModalHelper, _HttpClient } from '@delon/theme'; | |||||
import { SHARED_IMPORTS } from '@shared'; | |||||
import * as THREE from 'three'; | |||||
import { OrbitControls } from 'three-orbitcontrols-ts'; | |||||
import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader'; | |||||
import { TitleService } from '@delon/theme'; | |||||
const clock = new THREE.Clock(); | |||||
let mixer: { update: (arg0: number) => void }; | |||||
@Component({ | |||||
selector: 'app-data-v-t1', | |||||
standalone: true, | |||||
imports: [...SHARED_IMPORTS], | |||||
templateUrl: './t1.component.html' | |||||
}) | |||||
export class DataVT1Component implements OnInit { | |||||
private readonly http = inject(_HttpClient); | |||||
private readonly modal = inject(ModalHelper); | |||||
private readonly titleService = inject(TitleService); | |||||
@ViewChild('Three', { static: true }) container!: ElementRef; | |||||
public scene!: THREE.Scene; | |||||
public camera!: THREE.PerspectiveCamera; | |||||
public renderer!: THREE.WebGLRenderer; | |||||
public cube!: THREE.Mesh; | |||||
ngOnInit(): void { | |||||
this.titleService.setTitle('重磅3D'); | |||||
this.initThreeJs(); | |||||
this.animate(); | |||||
} | |||||
private initThreeJs(): void { | |||||
// 创建相机 | |||||
this.camera = new THREE.PerspectiveCamera(40, window.innerWidth / window.innerHeight, 1, 20000); | |||||
this.camera.position.set(2200, 300, -3100); | |||||
//创建场景 | |||||
this.scene = new THREE.Scene(); | |||||
this.scene.background = new THREE.Color(0x040516); | |||||
const hemiLight = new THREE.HemisphereLight(0xffffff, 0x444444, 5); | |||||
hemiLight.position.set(0, 200, 0); | |||||
this.scene.add(hemiLight); | |||||
const dirLight = new THREE.DirectionalLight(0xffffff, 5); | |||||
dirLight.position.set(0, 200, 100); | |||||
dirLight.castShadow = true; | |||||
dirLight.shadow.camera.top = 180; | |||||
dirLight.shadow.camera.bottom = -100; | |||||
dirLight.shadow.camera.left = -120; | |||||
dirLight.shadow.camera.right = 120; | |||||
this.scene.add(dirLight); | |||||
const that = this; | |||||
const loader = new FBXLoader(); | |||||
loader.load( | |||||
'assets/fbx/bb.fbx', | |||||
function (object) { | |||||
object.traverse(function (child) { | |||||
// if (child.isMesh) { | |||||
// child.castShadow = true; | |||||
// child.receiveShadow = true; | |||||
// } | |||||
}); | |||||
that.scene.add(object); | |||||
}, | |||||
xhr => { | |||||
// loading progress | |||||
}, | |||||
err => { | |||||
console.error('An error happened', err); | |||||
} | |||||
); | |||||
this.renderer = new THREE.WebGLRenderer({ antialias: true }); | |||||
this.renderer.setPixelRatio(window.devicePixelRatio); | |||||
this.renderer.setSize(window.innerWidth, window.innerHeight); | |||||
this.renderer.shadowMap.enabled = true; | |||||
this.container.nativeElement.appendChild(this.renderer.domElement); | |||||
const radius = 5; // 圆的半径 | |||||
const segments = 32; // 圆的分段数 | |||||
const geometry = new THREE.CircleGeometry(radius, segments); | |||||
const material = new THREE.MeshBasicMaterial({ color: 0xff0000 }); // 红色材质,你可以根据需要调整颜色 | |||||
const circle = new THREE.Mesh(geometry, material); | |||||
circle.position.set(850, 100, -2000); // 设置圆的位置 | |||||
this.scene.add(circle); | |||||
const controls = new OrbitControls(this.camera, this.renderer.domElement); | |||||
controls.target.set(850, 100, -2000); | |||||
controls.update(); | |||||
//const axesHelper = new THREE.AxesHelper(1000); | |||||
//this.scene.add(axesHelper); | |||||
window.addEventListener('resize', this.onWindowResize); | |||||
} | |||||
public render(): void { | |||||
this.cube.rotation.x += 0.01; | |||||
this.cube.rotation.y += 0.01; | |||||
this.renderer.render(this.scene, this.camera); | |||||
} | |||||
onWindowResize() { | |||||
this.camera.aspect = window.innerWidth / window.innerHeight; | |||||
this.camera.updateProjectionMatrix(); | |||||
this.renderer.setSize(window.innerWidth, window.innerHeight); | |||||
} | |||||
animate = () => { | |||||
requestAnimationFrame(this.animate); | |||||
const delta = clock.getDelta(); | |||||
if (mixer) mixer.update(delta); | |||||
this.renderer.render(this.scene, this.camera); | |||||
}; | |||||
} |
@@ -1,5 +1,5 @@ | |||||
import { AfterViewInit, Component, ElementRef, OnInit, ViewChild, inject } from '@angular/core'; | import { AfterViewInit, Component, ElementRef, OnInit, ViewChild, inject } from '@angular/core'; | ||||
import { ModalHelper, _HttpClient } from '@delon/theme'; | |||||
import { ModalHelper, TitleService, _HttpClient } from '@delon/theme'; | |||||
import { SHARED_IMPORTS } from '@shared'; | import { SHARED_IMPORTS } from '@shared'; | ||||
import { AgGridAngular } from 'ag-grid-angular'; | import { AgGridAngular } from 'ag-grid-angular'; | ||||
import { ColDef, GridApi } from 'ag-grid-community'; | import { ColDef, GridApi } from 'ag-grid-community'; | ||||
@@ -32,6 +32,7 @@ export class DataVWorkstationComponent implements OnInit, AfterViewInit { | |||||
private readonly http = inject(_HttpClient); | private readonly http = inject(_HttpClient); | ||||
private readonly modal = inject(ModalHelper); | private readonly modal = inject(ModalHelper); | ||||
private readonly elementRef = inject(ElementRef); | private readonly elementRef = inject(ElementRef); | ||||
private readonly titleService = inject(TitleService); | |||||
@ViewChild('myGrid') grid!: AgGridAngular; | @ViewChild('myGrid') grid!: AgGridAngular; | ||||
public defaultColDef: ColDef = { | public defaultColDef: ColDef = { | ||||
@@ -129,7 +130,7 @@ export class DataVWorkstationComponent implements OnInit, AfterViewInit { | |||||
} | } | ||||
ngOnInit(): void { | ngOnInit(): void { | ||||
console.log(`ngOnInit${this.rowData.length}`); | |||||
this.titleService.setTitle('我的工作站'); | |||||
for (var i = 1; i < 30; i++) { | for (var i = 1; i < 30; i++) { | ||||
this.rowData.push({ | this.rowData.push({ | ||||
@@ -29,8 +29,6 @@ | |||||
</div> | </div> | ||||
</div> | </div> | ||||
<ng-template #coverTemplate> | <ng-template #coverTemplate> | ||||
<img style="height: 100px;" alt="example" src="assets/bg2.jpg" /> | <img style="height: 100px;" alt="example" src="assets/bg2.jpg" /> | ||||
</ng-template> | </ng-template> | ||||
@@ -91,15 +91,20 @@ | |||||
color: #515151; | color: #515151; | ||||
vertical-align: middle; | vertical-align: middle; | ||||
} | } | ||||
} | |||||
.color-515151 { | |||||
color: #515151; | |||||
} | |||||
.color-515151 { | |||||
color: #515151; | |||||
} | } | ||||
} | } | ||||
[data-theme='dark'] { | [data-theme='dark'] { | ||||
:host ::ng-deep { | :host ::ng-deep { | ||||
display: block; | |||||
width: 538px; | |||||
margin: 0 auto; | |||||
.icon { | .icon { | ||||
color: rgb(255 255 255 / 20%); | color: rgb(255 255 255 / 20%); | ||||
@@ -36,7 +36,9 @@ | |||||
], | ], | ||||
"@_mock": [ | "@_mock": [ | ||||
"_mock/index" | "_mock/index" | ||||
] | |||||
], | |||||
"three": ["./node_modules/three/src/Three"], | |||||
"three/*": ["./node_modules/three/*"] | |||||
} | } | ||||
}, | }, | ||||
"angularCompilerOptions": { | "angularCompilerOptions": { | ||||
@@ -2277,6 +2277,11 @@ | |||||
"@tufjs/canonical-json" "2.0.0" | "@tufjs/canonical-json" "2.0.0" | ||||
minimatch "^9.0.3" | minimatch "^9.0.3" | ||||
"@tweenjs/tween.js@~23.1.1": | |||||
version "23.1.1" | |||||
resolved "https://registry.npmmirror.com/@tweenjs/tween.js/-/tween.js-23.1.1.tgz#0ae28ed9c635805557f78c2626464018d5f1b5e2" | |||||
integrity sha512-ZpboH7pCPPeyBWKf8c7TJswtCEQObFo3bOBYalm99NzZarATALYCo5OhbCa/n4RQyJyHfhkdx+hNrdL5ByFYDw== | |||||
"@types/body-parser@*": | "@types/body-parser@*": | ||||
version "1.19.5" | version "1.19.5" | ||||
resolved "https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.5.tgz" | resolved "https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.5.tgz" | ||||
@@ -2509,6 +2514,11 @@ | |||||
dependencies: | dependencies: | ||||
"@types/node" "*" | "@types/node" "*" | ||||
"@types/stats.js@*": | |||||
version "0.17.3" | |||||
resolved "https://registry.npmmirror.com/@types/stats.js/-/stats.js-0.17.3.tgz#705446e12ce0fad618557dd88236f51148b7a935" | |||||
integrity sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ== | |||||
"@types/swagger-schema-official@2.0.22": | "@types/swagger-schema-official@2.0.22": | ||||
version "2.0.22" | version "2.0.22" | ||||
resolved "https://registry.npmmirror.com/@types/swagger-schema-official/-/swagger-schema-official-2.0.22.tgz" | resolved "https://registry.npmmirror.com/@types/swagger-schema-official/-/swagger-schema-official-2.0.22.tgz" | ||||
@@ -2519,6 +2529,22 @@ | |||||
resolved "https://registry.npmmirror.com/@types/swagger-schema-official/-/swagger-schema-official-2.0.25.tgz" | resolved "https://registry.npmmirror.com/@types/swagger-schema-official/-/swagger-schema-official-2.0.25.tgz" | ||||
integrity sha512-T92Xav+Gf/Ik1uPW581nA+JftmjWPgskw/WBf4TJzxRG/SJ+DfNnNE+WuZ4mrXuzflQMqMkm1LSYjzYW7MB1Cg== | integrity sha512-T92Xav+Gf/Ik1uPW581nA+JftmjWPgskw/WBf4TJzxRG/SJ+DfNnNE+WuZ4mrXuzflQMqMkm1LSYjzYW7MB1Cg== | ||||
"@types/three@^0.162.0": | |||||
version "0.162.0" | |||||
resolved "https://registry.npmmirror.com/@types/three/-/three-0.162.0.tgz#79d170c88f14b2eaee6b76af00fc4016a533e586" | |||||
integrity sha512-0j5yZcVukVIhrhSIC7+LmBPkkMoMuEJ1AfYBZfgNytdYqYREMuiyXWhYOMeZLBElTEAlJIZn7r2W3vqTIgjWlg== | |||||
dependencies: | |||||
"@tweenjs/tween.js" "~23.1.1" | |||||
"@types/stats.js" "*" | |||||
"@types/webxr" "*" | |||||
fflate "~0.6.10" | |||||
meshoptimizer "~0.18.1" | |||||
"@types/webxr@*": | |||||
version "0.5.14" | |||||
resolved "https://registry.npmmirror.com/@types/webxr/-/webxr-0.5.14.tgz#9a03121a4912ea113b31e5c9c17f164d4fff8a1f" | |||||
integrity sha512-UEMMm/Xn3DtEa+gpzUrOcDj+SJS1tk5YodjwOxcqStNhCfPcwgyC5Srg2ToVKyg2Fhq16Ffpb0UWUQHqoT9AMA== | |||||
"@types/ws@^8.5.5", "@types/ws@^8.5.9": | "@types/ws@^8.5.5", "@types/ws@^8.5.9": | ||||
version "8.5.10" | version "8.5.10" | ||||
resolved "https://registry.npmmirror.com/@types/ws/-/ws-8.5.10.tgz" | resolved "https://registry.npmmirror.com/@types/ws/-/ws-8.5.10.tgz" | ||||
@@ -4948,6 +4974,11 @@ fetch-cookie@^2.0.3: | |||||
set-cookie-parser "^2.4.8" | set-cookie-parser "^2.4.8" | ||||
tough-cookie "^4.0.0" | tough-cookie "^4.0.0" | ||||
fflate@~0.6.10: | |||||
version "0.6.10" | |||||
resolved "https://registry.npmmirror.com/fflate/-/fflate-0.6.10.tgz#5f40f9659205936a2d18abf88b2e7781662b6d43" | |||||
integrity sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg== | |||||
figures@3.2.0: | figures@3.2.0: | ||||
version "3.2.0" | version "3.2.0" | ||||
resolved "https://registry.npmmirror.com/figures/-/figures-3.2.0.tgz" | resolved "https://registry.npmmirror.com/figures/-/figures-3.2.0.tgz" | ||||
@@ -6769,6 +6800,11 @@ merge2@^1.3.0, merge2@^1.4.1: | |||||
resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz" | resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz" | ||||
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== | ||||
meshoptimizer@~0.18.1: | |||||
version "0.18.1" | |||||
resolved "https://registry.npmmirror.com/meshoptimizer/-/meshoptimizer-0.18.1.tgz#cdb90907f30a7b5b1190facd3b7ee6b7087797d8" | |||||
integrity sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw== | |||||
methods@~1.1.2: | methods@~1.1.2: | ||||
version "1.1.2" | version "1.1.2" | ||||
resolved "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz" | resolved "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz" | ||||
@@ -9494,6 +9530,23 @@ text-table@0.2.0, text-table@^0.2.0: | |||||
resolved "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz" | resolved "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz" | ||||
integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== | ||||
three-orbitcontrols-ts@^0.1.2: | |||||
version "0.1.2" | |||||
resolved "https://registry.npmmirror.com/three-orbitcontrols-ts/-/three-orbitcontrols-ts-0.1.2.tgz#2040955904022ae19c2e9c52ffdff43168658abd" | |||||
integrity sha512-HG45dhJX4010lt/Ohk2d2K0kBaxCS6NLO3+wG9BDfMM5ddH7zMPuF3fhcn8vI4eqcSITtid0OoHEttHhjkIKEQ== | |||||
dependencies: | |||||
three "^0.83.0" | |||||
three@^0.162.0: | |||||
version "0.162.0" | |||||
resolved "https://registry.npmmirror.com/three/-/three-0.162.0.tgz" | |||||
integrity sha512-xfCYj4RnlozReCmUd+XQzj6/5OjDNHBy5nT6rVwrOKGENAvpXe2z1jL+DZYaMu4/9pNsjH/4Os/VvS9IrH7IOQ== | |||||
three@^0.83.0: | |||||
version "0.83.0" | |||||
resolved "https://registry.npmmirror.com/three/-/three-0.83.0.tgz#3b7f94790af3e021dac1f44a2617569ca2032b0b" | |||||
integrity sha512-x9TqsmvhHG/Lw16Zi9zbJ0ho+kP8SgIfsz8dJYZbeWaFWoVwdXKolQQAftkUlpuKDys1+6SZIBHoA2QdoZKByQ== | |||||
through@^2.3.4: | through@^2.3.4: | ||||
version "2.3.8" | version "2.3.8" | ||||
resolved "https://registry.npmmirror.com/through/-/through-2.3.8.tgz" | resolved "https://registry.npmmirror.com/through/-/through-2.3.8.tgz" | ||||