/**
 * Minified by jsDelivr using Terser v5.37.0.
 * Original file: /npm/wind-core@1.1.8/dist/wind-core.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).WindCore={})}(this,(function(t){"use strict";const e=Object.prototype.hasOwnProperty,i="undefined"!=typeof Symbol?Symbol.toStringTag:void 0;function s(t){if(!n(t))return!1;const s=function(t){if(null===t)return void 0===t?"[object Undefined]":"[object Null]";if(!i||!(i in Object(t)))return toString.call(t);const s=e.call(t,i),n=t[i];let o=!1;try{t[i]=void 0,o=!0}catch(t){}const r=Object.prototype.toString.call(t);return o&&(s?t[i]=n:delete t[i]),r}(t);return"[object Function]"===s||"[object AsyncFunction]"===s||"[object GeneratorFunction]"===s||"[object Proxy]"===s}function n(t){const e=typeof t;return null!==t&&("object"===e||"function"===e)}function o(t){return null!=t&&("string"==typeof t||null!==t.constructor&&t.constructor===String)}function r(t){return"[object Number]"===Object.prototype.toString.call(t)&&!isNaN(t)}function a(t,e){console.warn(`${e||"wind-layer"}: ${t}`)}const l={};function h(t,e){l[e]||(a(e,t),l[e]=!0)}function c(t,e){return t-e*Math.floor(t/e)}function u(t){return null!=t&&!isNaN(t)}const d=/(\D+)/,p=/^#([a-f0-9]{6})([a-f0-9]{2})?$/i,m=/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d.]+)\s*)?\)$/,g={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]};class f{constructor(t,e){this.u=t,this.v=e,this.m=this.magnitude()}magnitude(){return Math.sqrt(this.u**2+this.v**2)}directionTo(){let t=Math.atan2(this.u,this.v)*(180/Math.PI);return t<0&&(t+=360),t}directionFrom(){return(this.directionTo()+180)%360}}class x{constructor(t){this.grid=[],this.xmin=t.xmin,this.xmax=t.xmax,this.ymin=t.ymin,this.ymax=t.ymax,this.cols=t.cols,this.rows=t.rows,this.us=t.us,this.vs=t.vs,this.deltaX=t.deltaX,this.deltaY=t.deltaY,this.flipY=Boolean(t.flipY),this.ymin=Math.min(t.ymax,t.ymin),this.ymax=Math.max(t.ymax,t.ymin),this.deltaY<0&&this.ymin<this.ymax||(void 0===t.flipY&&(this.flipY=!0),console.warn("[wind-core]: The data is flipY")),this.isFields=!0;const e=Math.ceil((this.xmax-this.xmin)/t.deltaX),i=Math.ceil((this.ymax-this.ymin)/t.deltaY);e===this.cols&&i===this.rows||console.warn("[wind-core]: The data grid not equal"),this.isContinuous=Math.floor(this.cols*t.deltaX)>=360,this.translateX="translateX"in t?t.translateX:this.xmax>180,"wrappedX"in t&&h("[wind-core]: ","`wrappedX` namespace will deprecated please use `translateX` instead！"),this.wrapX=Boolean(t.wrapX),this.grid=this.buildGrid(),this.range=this.calculateRange()}buildGrid(){const t=[];let e=0;const{rows:i,cols:s,us:n,vs:o}=this;for(let r=0;r<i;r++){const i=[];for(let t=0;t<s;t++,e++){const s=n[e],r=o[e],a=this.isValid(s)&&this.isValid(r);i[t]=a?new f(s,r):null}this.isContinuous&&i.push(i[0]),t[r]=i}return t}release(){this.grid=[]}extent(){return[this.xmin,this.ymin,this.xmax,this.ymax]}bilinearInterpolateVector(t,e,i,s,n,o){const r=1-t,a=1-e,l=r*a,h=t*a,c=r*e,u=t*e,d=i.u*l+s.u*h+n.u*c+o.u*u,p=i.v*l+s.v*h+n.v*c+o.v*u;return new f(d,p)}calculateRange(){if(!this.grid||!this.grid[0])return;const t=this.grid.length,e=this.grid[0].length;let i,s;for(let n=0;n<t;n++)for(let t=0;t<e;t++){const e=this.grid[n][t];if(null!==e){const t=e.m||e.magnitude();void 0===i?i=t:void 0===s?(s=t,i=Math.min(i,s),s=Math.max(i,s)):(i=Math.min(t,i),s=Math.max(t,s))}}return[i,s]}isValid(t){return null!=t}getWrappedLongitudes(){let t=this.xmin,e=this.xmax;return this.translateX&&(this.isContinuous?(t=-180,e=180):(e=this.xmax-360,t=this.xmin-360)),[t,e]}contains(t,e){const[i,s]=this.getWrappedLongitudes();s>180&&t>=-180&&t<=s-360?t+=360:i<-180&&t<=180&&t>=i+360&&(t-=360);const n=t>=i&&t<=s;let o;return o=this.deltaY>=0?e>=this.ymin&&e<=this.ymax:e>=this.ymax&&e<=this.ymin,n&&o}getDecimalIndexes(t,e){const i=c(t-this.xmin,360)/this.deltaX;if(this.flipY){return[i,(this.ymax-e)/this.deltaY]}return[i,(this.ymin+e)/this.deltaY]}valueAt(t,e){let i=!1;if((this.wrapX||this.contains(t,e))&&(i=!0),!i)return null;const s=this.getDecimalIndexes(t,e),n=Math.floor(s[0]),o=Math.floor(s[1]),r=this.clampColumnIndex(n),a=this.clampRowIndex(o);return this.valueAtIndexes(r,a)}interpolatedValueAt(t,e){let i=!1;if((this.wrapX||this.contains(t,e))&&(i=!0),!i)return null;const[s,n]=this.getDecimalIndexes(t,e);return this.interpolatePoint(s,n)}hasValueAt(t,e){return null!==this.valueAt(t,e)}interpolatePoint(t,e){const i=this.getFourSurroundingIndexes(t,e),[s,n,o,r]=i,a=this.getFourSurroundingValues(s,n,o,r);if(a){const[i,n,r,l]=a;return this.bilinearInterpolateVector(t-s,e-o,i,n,r,l)}return null}clampColumnIndex(t){let e=t;t<0&&(e=0);const i=this.cols-1;return t>i&&(e=i),e}clampRowIndex(t){let e=t;t<0&&(e=0);const i=this.rows-1;return t>i&&(e=i),e}getFourSurroundingIndexes(t,e){const i=Math.floor(t);let s=i+1;this.isContinuous&&s>=this.cols&&(s=0),s=this.clampColumnIndex(s);const n=this.clampRowIndex(Math.floor(e));return[i,s,n,this.clampRowIndex(n+1)]}getFourSurroundingValues(t,e,i,s){let n;if(n=this.grid[i]){const i=n[t],o=n[e];if(this.isValid(i)&&this.isValid(o)&&(n=this.grid[s])){const s=n[t],r=n[e];if(this.isValid(s)&&this.isValid(r))return[i,o,s,r]}}return null}valueAtIndexes(t,e){return this.grid[e][t]}lonLatAtIndexes(t,e){return[this.longitudeAtX(t),this.latitudeAtY(e)]}longitudeAtX(t){const e=this.deltaX/2;let i=this.xmin+e+t*this.deltaX;return this.translateX&&(i=i>180?i-360:i),i}latitudeAtY(t){const e=this.deltaY/2;return this.ymax-e-t*this.deltaY}randomize(t={},e,i,s){const n=Math.random()*(e||this.cols)|0,o=Math.random()*(i||this.rows)|0,r=s([n,o]);return null!==r?(t.x=r[0],t.y=r[1]):(t.x=this.longitudeAtX(n),t.y=this.latitudeAtY(o)),t}checkFields(){return this.isFields}}const y={globalAlpha:.9,lineWidth:1,colorScale:"#fff",velocityScale:.04,maxAge:90,paths:800,frameRate:20,useCoordsDraw:!0};function w(t,e,i,s){return Math.max(0,Math.min(s.length-1,Math.round((t-e)/(i-e)*(s.length-1))))}class b{constructor(t,e,i){if(this.particles=[],this.generated=!1,this.ctx=t,!this.ctx)throw new Error("ctx error");this.animate=this.animate.bind(this),this.setOptions(e),i&&this.updateData(i)}static{this.Field=x}setOptions(t){this.options={...y,...t};const{width:e,height:i}=this.ctx.canvas;"particleAge"in t&&!("maxAge"in t)&&r(this.options.particleAge)&&(this.options.maxAge=this.options.particleAge),"particleMultiplier"in t&&!("paths"in t)&&r(this.options.particleMultiplier)&&(this.options.paths=Math.round(e*i*this.options.particleMultiplier)),this.prerender()}getOptions(){return this.options}updateData(t){this.field=t,this.generated&&(this.particles=this.prepareParticlePaths())}project(...t){throw new Error("project must be overriden")}unproject(...t){throw new Error("unproject must be overriden")}intersectsCoordinate(t){throw new Error("must be overriden")}clearCanvas(){this.stop(),this.ctx.clearRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height),this.forceStop=!1}isStop(){return!this.starting}start(){this.starting=!0,this.forceStop=!1,this.then=Date.now(),this.animate()}stop(){cancelAnimationFrame(this.animationLoop),this.starting=!1,this.forceStop=!0}animate(){this.animationLoop&&cancelAnimationFrame(this.animationLoop),this.animationLoop=requestAnimationFrame(this.animate);const t=Date.now(),e=t-this.then;e>this.options.frameRate&&(this.then=t-e%this.options.frameRate,this.render())}prerender(){this.generated=!1,this.field&&(this.particles=this.prepareParticlePaths(),this.generated=!0,this.starting||this.forceStop||(this.starting=!0,this.then=Date.now(),this.animate()))}render(){this.moveParticles(),this.drawParticles(),this.postrender()}postrender(){}moveParticles(){const{width:t,height:e}=this.ctx.canvas,i=this.particles,n=this.options.maxAge,o=s(this.options.velocityScale)?this.options.velocityScale():this.options.velocityScale;let r=0;const a=i.length;for(;r<a;r++){const s=i[r];s.age>n&&(s.age=0,this.field.randomize(s,t,e,this.unproject));const a=s.x,l=s.y,h=this.field.interpolatedValueAt(a,l);if(null===h)s.age=n;else{const t=a+h.u*o,e=l+h.v*o;this.field.hasValueAt(t,e)?(s.xt=t,s.yt=e,s.m=h.m):(s.x=t,s.y=e,s.age=n)}s.age++}}fadeIn(){const t=this.ctx.globalCompositeOperation;this.ctx.globalCompositeOperation="destination-in",this.ctx.fillRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height),this.ctx.globalCompositeOperation=t}drawParticles(){const t=this.particles;this.fadeIn(),this.ctx.globalAlpha=this.options.globalAlpha,this.ctx.fillStyle=`rgba(0, 0, 0, ${this.options.globalAlpha})`,this.ctx.lineWidth=r(this.options.lineWidth)?this.options.lineWidth:1,this.ctx.strokeStyle=o(this.options.colorScale)?this.options.colorScale:"#fff";let e=0;const i=t.length;if(this.field&&i>0){let s,n;for(u(this.options.minVelocity)&&u(this.options.maxVelocity)?(s=this.options.minVelocity,n=this.options.maxVelocity):[s,n]=this.field.range;e<i;e++)this[this.options.useCoordsDraw?"drawCoordsParticle":"drawPixelParticle"](t[e],s,n)}}drawPixelParticle(t,e,i){const n=[t.x,t.y],o=[t.xt,t.yt];if(o&&n&&u(o[0])&&u(o[1])&&u(n[0])&&u(n[1])&&t.age<=this.options.maxAge){if(this.ctx.beginPath(),this.ctx.moveTo(n[0],n[1]),this.ctx.lineTo(o[0],o[1]),s(this.options.colorScale))this.ctx.strokeStyle=this.options.colorScale(t.m);else if(Array.isArray(this.options.colorScale)){const s=w(t.m,e,i,this.options.colorScale);this.ctx.strokeStyle=this.options.colorScale[s]}s(this.options.lineWidth)&&(this.ctx.lineWidth=this.options.lineWidth(t.m)),t.x=t.xt,t.y=t.yt,this.ctx.stroke()}}drawCoordsParticle(t,e,i){const n=[t.x,t.y],o=[t.xt,t.yt];if(o&&n&&u(o[0])&&u(o[1])&&u(n[0])&&u(n[1])&&this.intersectsCoordinate(o)&&t.age<=this.options.maxAge){const r=this.project(n),a=this.project(o);if(r&&a){if(this.ctx.beginPath(),this.ctx.moveTo(r[0],r[1]),this.ctx.lineTo(a[0],a[1]),t.x=t.xt,t.y=t.yt,s(this.options.colorScale))this.ctx.strokeStyle=this.options.colorScale(t.m);else if(Array.isArray(this.options.colorScale)){const s=w(t.m,e,i,this.options.colorScale);this.ctx.strokeStyle=this.options.colorScale[s]}s(this.options.lineWidth)&&(this.ctx.lineWidth=this.options.lineWidth(t.m)),this.ctx.stroke()}}}prepareParticlePaths(){const{width:t,height:e}=this.ctx.canvas,i="function"==typeof this.options.paths?this.options.paths(this):this.options.paths,s=[];if(!this.field)return[];let n=0;for(;n<i;n++)s.push(this.field.randomize({age:this.randomize()},t,e,this.unproject));return s}randomize(){return Math.floor(Math.random()*this.options.maxAge)}}t.Field=x,t.TypeOf=function(t){return Object.prototype.toString.call(t).slice(8,-1).toLowerCase()},t.Vector=f,t.WindCore=b,t.assign=function(t,...e){return Object.assign(t,...e)},t.compareVersion=function(t,e){t=t.split("."),e=e.split(".");const i=Math.max(t.length,e.length);for(;t.length<i;)t.push("0");for(;e.length<i;)e.push("0");for(let s=0;s<i;s++){const i=parseInt(t[s]),n=parseInt(e[s]);if(i>n)return 1;if(i<n)return-1}return 0},t.createCanvas=function(t,e,i,s){if("undefined"!=typeof document){const s=document.createElement("canvas");return s.width=t*i,s.height=e*i,s}return new s(t*i,e*i)},t.defaultOptions=y,t.floorMod=c,t.formatData=function(t,e={}){let i,s;if(t.forEach((function(t){switch(t.header.parameterCategory+","+t.header.parameterNumber){case"1,2":case"2,2":i=t;break;case"1,3":case"2,3":s=t}})),!s||!i)return;const n=i.header;return new x({xmin:n.lo1,ymin:n.la1,xmax:n.lo2,ymax:n.la2,deltaX:n.dx,deltaY:n.dy,cols:n.nx,rows:n.ny,us:i.data,vs:s.data,...e})},t.getColor=function(t){let e=[];if(t.match(p)){let i=t.match(p);if(null!==i){i=i[1];for(let t=0;t<3;t++){const s=2*t;e[t]=parseInt(i.slice(s,s+2),16)}e[3]=1}}else{if(!t.match(m)){if(t.match(d)){const i=t.match(d);return"transparent"===i[1]?[0,0,0,0]:(e=g[i[1]],e?(e[3]=1,e):null)}return null}{const i=t.match(m);for(let t=0;t<3;t++)e[t]=parseInt(i[t+1],0);i[4]?e[3]=parseFloat(i[4]):e[3]=1}}return e},t.isArray=function(t){return Array.isArray(t)},t.isArrayBuffer=function(t){return"[object ArrayBuffer]"===Object.prototype.toString.call(t)},t.isDate=function(t){return"[object Date]"===Object.prototype.toString.call(t)},t.isEmpty=function(t){let e;for(e in t)return!1;return!e},t.isFunction=s,t.isNull=function(t){return null==t},t.isNumber=r,t.isObject=n,t.isString=o,t.isValide=u,t.removeDomNode=function(t){return t?(t.parentNode&&t.parentNode.removeChild(t),t):null},t.warnLog=a,t.warnOnce=h}));
//# sourceMappingURL=/sm/3592d980dd617b1749c39edddf1df13a942eeea1c051a553146a77a6a225d38d.map