@bitalltech-maplibre/core 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,11 +1,11 @@
1
- # bitalltech-maplibre-core
1
+ # @bitalltech-maplibre/core
2
2
 
3
3
  BitAllTech MapLibre 核心工具包,封装地图初始化、内置底图和低空可视化特效。
4
4
 
5
5
  ## 安装
6
6
 
7
7
  ```bash
8
- npm install bitalltech-maplibre-core maplibre-gl
8
+ npm install @bitalltech-maplibre/core maplibre-gl
9
9
  ```
10
10
 
11
11
  ## 基础使用
@@ -15,7 +15,7 @@ import {
15
15
  createMap,
16
16
  maplibregl,
17
17
  setMaplibreToolsConfig,
18
- } from "bitalltech-maplibre-core";
18
+ } from "@bitalltech-maplibre/core";
19
19
  import "maplibre-gl/dist/maplibre-gl.css";
20
20
 
21
21
  setMaplibreToolsConfig({
@@ -50,7 +50,7 @@ map.addControl(new maplibregl.NavigationControl(), "top-right");
50
50
  ## 底图
51
51
 
52
52
  ```ts
53
- import { setBaseMap } from "bitalltech-maplibre-core";
53
+ import { setBaseMap } from "@bitalltech-maplibre/core";
54
54
 
55
55
  setBaseMap(map, "tdt-image-label", {
56
56
  token: "你的天地图 token",
@@ -63,7 +63,13 @@ setBaseMap(map, "tdt-image-label", {
63
63
  ## 低空特效
64
64
 
65
65
  ```ts
66
- import { addRadarSweep, addPulseMarker } from "bitalltech-maplibre-core";
66
+ import {
67
+ addBreathingCircle,
68
+ addRadarSweep,
69
+ addPulseMarker,
70
+ addTargetLock,
71
+ addCountermeasureBeam,
72
+ } from "@bitalltech-maplibre/core";
67
73
 
68
74
  const radar = addRadarSweep(map, {
69
75
  id: "radar",
@@ -78,8 +84,33 @@ const pulse = addPulseMarker(map, {
78
84
  color: "#ef4444",
79
85
  });
80
86
 
87
+ const breathing = addBreathingCircle(map, {
88
+ id: "target-breathing",
89
+ center: [116.405, 39.915],
90
+ radius: 90,
91
+ color: "#1677ff",
92
+ duration: 1800,
93
+ });
94
+
95
+ const lock = addTargetLock(map, {
96
+ id: "target-lock",
97
+ center: [116.4, 39.918],
98
+ color: "#ff3b30",
99
+ size: 76,
100
+ });
101
+
102
+ const beam = addCountermeasureBeam(map, {
103
+ id: "countermeasure-beam",
104
+ center: [116.386, 39.906],
105
+ target: [116.399, 39.912],
106
+ mode: "expulsion",
107
+ color: "#a855f7",
108
+ });
109
+
81
110
  radar.update({ radius: 5000 });
82
111
  pulse.hide();
112
+ breathing.show();
113
+ lock.update({ center: [116.402, 39.919] });
83
114
  radar.remove();
84
115
  ```
85
116
 
@@ -104,13 +135,57 @@ addSectorScan(map, {
104
135
 
105
136
  当前提供:
106
137
 
138
+ - `addBreathingCircle`
107
139
  - `addPulseMarker`
108
140
  - `addRingPulseMarker`
109
141
  - `addSectorScan`
110
142
  - `addDirectionalPulse`
111
143
  - `addRadarSweep`
144
+ - `addDefenceCircle`
145
+ - `addTargetLock`
146
+ - `addCountermeasureBeam`
147
+ - `addCoordinatedCountermeasure`
148
+ - `addNavigationSpoofing`
149
+ - `addBreachAlert`
150
+
151
+ 这些方法都会返回控制器,支持 `update()`、`show()`、`hide()` 和 `remove()`。其中 `addBreachAlert` 额外提供 `trigger(point)`、`reset()` 和 `isActive()`:trigger 开始持续预警,reset 停止,开始与结束都由业务层决定。
152
+
153
+ ### 围栏闯入预警
154
+
155
+ `addBreachAlert` 用于无人机闯入电子围栏时的复合预警,三段叠加且各自独立开关。trigger 后三段持续播放,直到业务层调用 reset() 才停止:
156
+
157
+ - 围栏高频闪烁:接触瞬间围栏由正常色(蓝/绿)切到高频闪烁警报红
158
+ - 接触点涟漪扩散:以接触点为中心持续向外扩散红色涟漪
159
+ - 战术框闪烁:全屏或局部 DOM 边框高频闪烁
160
+
161
+ ```ts
162
+ import { addBreachAlert, createFenceCircle } from "@bitalltech-maplibre/core";
163
+
164
+ // fence 支持直接传入 edit 插件 getAll() 的 FeatureCollection,
165
+ // 或单个 Polygon / MultiPolygon / Feature;圆形用 createFenceCircle 构造。
166
+ const fence = createFenceCircle([116.39, 39.91], 1000);
167
+
168
+ const alert = addBreachAlert(map, {
169
+ id: "breach-zone",
170
+ center: [116.39, 39.91],
171
+ fence, // 围栏几何
172
+ fenceColor: "#1677ff", // 正常态蓝
173
+ fenceAlertColor: "#ff3b30", // 警报红
174
+ fenceFlash: true, // 围栏闪烁:开
175
+ ripple: true, // 涟漪:开
176
+ tacticalFlash: false, // 战术框:关
177
+ });
178
+
179
+ // 业务层判定闯入后触发(几何判定与目标分类归业务层)
180
+ detector.on("breach", ({ point }) => {
181
+ alert.trigger(point);
182
+ });
183
+
184
+ alert.reset(); // 业务层判定解警后停止
185
+ alert.remove(); // 销毁(连 DOM 一起清理)
186
+ ```
112
187
 
113
- 这些方法都会返回控制器,支持 `update()`、`show()`、`hide()` `remove()`。
188
+ > 插件只负责视觉表现,不判定「是否闯入」「目标是否黑飞/未知」,也不决定警报持续多久——这些都由业务层完成,插件只暴露 trigger 与 reset。
114
189
 
115
190
  ## 常用导出
116
191
 
package/dist/index.cjs.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("maplibre-gl"),e={},a=()=>({...e}),r="https://tiles.openfreemap.org/styles",i=(t,e,a)=>({type:t,label:e,style:`${r}/${a}`}),n={"openfreemap-liberty":i("openfreemap-liberty","OpenFreeMap Liberty","liberty"),"openfreemap-bright":i("openfreemap-bright","OpenFreeMap Bright","bright"),"openfreemap-positron":i("openfreemap-positron","OpenFreeMap Positron","positron"),"openfreemap-dark":i("openfreemap-dark","OpenFreeMap Dark","dark"),"openfreemap-fiord":i("openfreemap-fiord","OpenFreeMap Fiord","fiord")},o=Object.keys(n),s=(t="openfreemap-liberty")=>n[t].style,l=["0","1","2","3","4","5","6","7"],c=(t,e)=>{const r=(t=>{const e=t||a().tdtToken;if(!e)throw new Error("Tianditu token is required. Pass token or call setMaplibreToolsConfig({ tdtToken }).");return e})(e);return l.map(e=>`https://t${e}.tianditu.gov.cn/DataServer?T=${t}&x={x}&y={y}&l={z}&tk=${r}`)},p=(t,e={})=>({type:"raster",tiles:c(t,e.token),tileSize:256,minzoom:0,maxzoom:18,attribution:"&copy; 天地图"}),d=(t={})=>{const e=!1!==t.label,a={"tdt-image":p("img_w",t)},r=[{id:"tdt-image",type:"raster",source:"tdt-image"}];return e&&(a["tdt-image-label"]=p("cia_w",t),r.push({id:"tdt-image-label",type:"raster",source:"tdt-image-label"})),{version:8,sources:a,layers:r}},h=[...Object.keys(n),"tdt-image","tdt-image-label"],y=t=>h.includes(t),f=(t="openfreemap-liberty",e={})=>"tdt-image"===t?d({...e,label:!1}):"tdt-image-label"===t?d({...e,label:!0}):s(t),u=t=>t*Math.PI/180,m=t=>180*t/Math.PI,g=t=>(t%360+360)%360,M=(t,e,a)=>{const r=e/6378137,i=u(a),n=u(t[1]),o=u(t[0]),s=Math.asin(Math.sin(n)*Math.cos(r)+Math.cos(n)*Math.sin(r)*Math.cos(i)),l=o+Math.atan2(Math.sin(i)*Math.sin(r)*Math.cos(n),Math.cos(r)-Math.sin(n)*Math.sin(s));return[(c=m(l),c>180?c-360:c<-180?c+360:c),m(s)];var c},b=(t,e,a=64)=>{const r=((t,e)=>{const a=g(e)-g(t);return a<=0?a+360:a})(t,e),i=Math.max(12,Math.ceil(a*r/360));return Array.from({length:i+1},(e,a)=>g(t+r*a/i))},x=(t,e,a=64)=>(t=>{if(0===t.length)return t;const[e,a]=t[0],r=t[t.length-1];return r[0]===e&&r[1]===a?t:[...t,[e,a]]})(Array.from({length:a},(r,i)=>M(t,e,360*i/a))),k=(t,e,a=64)=>({type:"Polygon",coordinates:[x(t,e,a)]}),v=(t,e,a=64)=>({type:"LineString",coordinates:x(t,e,a)}),A=(t,e,a,r,i=64)=>{const n=b(a,r,i).map(a=>M(t,e,a));return{type:"Polygon",coordinates:[[t,...n,t]]}},$=(t,e,a,r,i=64)=>({type:"LineString",coordinates:b(a,r,i).map(a=>M(t,e,a))}),w=(t,e,a)=>({type:"LineString",coordinates:[t,M(t,e,a)]}),F=(t,e)=>({type:"Feature",geometry:t,properties:e}),O=t=>({type:"FeatureCollection",features:t}),q=(t,e,a)=>{const r=a?"visible":"none";e.forEach(e=>{t.getLayer(e)&&t.setLayoutProperty(e,"visibility",r)})},S=(t,e,a)=>{const r=e.id,i=`${r}-source`;let n,o={...e},s=[],l=[i],c=!1,p=!1;const d=()=>{null==n||n(),n=void 0,[...s].reverse().forEach(e=>{((t,e)=>{t.getLayer(e)&&t.removeLayer(e)})(t,e)}),[...l].reverse().forEach(e=>{((t,e)=>{t.getSource(e)&&t.removeSource(e)})(t,e)}),s=[],l=[i]},h=e=>{const a=t.getSource(i);a&&a.setData(e)},y=()=>{var e,r;if(c)return;d();const p=a(o);t.addSource(i,{type:"geojson",data:p.data}),null==(e=p.canvasSources)||e.forEach(e=>{t.addSource(e.id,e.source)}),l=[i,...(null==(r=p.canvasSources)?void 0:r.map(t=>t.id))||[]],s=p.layers.map(t=>t.id),p.layers.forEach(e=>{var a;const r="raster"===e.type&&(null==(a=p.canvasSources)?void 0:a[0])?p.canvasSources[0].id:i;t.addLayer({...e,source:r},o.beforeId)}),q(t,s,!1!==o.visible),p.startAnimation&&(n=p.startAnimation({getOptions:()=>o,setData:h})||void 0)},f=()=>{p&&!c&&t.isStyleLoaded()&&(p=!1,t.off("styledata",f),y())},u=()=>{c||(t.isStyleLoaded()?(p&&(p=!1,t.off("styledata",f)),y()):p||(p=!0,t.on("styledata",f)))};return u(),{id:r,update(t){c||(o={...o,...t,id:r},u())},show(){c||(o={...o,visible:!0},q(t,s,!0))},hide(){c||(o={...o,visible:!1},q(t,s,!1))},remove(){c||(c=!0,p&&(p=!1,t.off("styledata",f)),d())}}},D=(t,e=0)=>{const a=Math.max(10,t.radius??70),r=Math.max(a,t.maxRadius??2.3*a),i=Math.max(1,t.pulseCount??2),n=Math.max(1,t.lineWidth??2),o=t.pulseOpacity??.9,s=[F(k(t.center,a),{kind:"core"})];for(let l=0;l<i;l+=1){const c=(e+l/i)%1,p=a+(r-a)*c;s.push(F(v(t.center,p),{kind:"pulse",opacity:o*(1-c),width:n*(1-.35*c)}))}return O(s)},j=t=>{const e=t.color||"#ff3b30",a=t.fillColor||e;return{data:D(t),layers:[{id:`${t.id}-core`,type:"fill",filter:["==",["get","kind"],"core"],paint:{"fill-color":a,"fill-opacity":t.fillOpacity??.28}},{id:`${t.id}-pulse`,type:"line",filter:["==",["get","kind"],"pulse"],paint:{"line-color":e,"line-opacity":["coalesce",["get","opacity"],t.pulseOpacity??.9],"line-width":["coalesce",["get","width"],t.lineWidth??2]}}],startAnimation({getOptions:t,setData:e}){const a=Math.max(400,t().duration??1800);let r=0;const i=performance.now(),n=o=>{const s=t();e(D(s,(o-i)%a/a)),r=requestAnimationFrame(n)};return r=requestAnimationFrame(n),()=>{cancelAnimationFrame(r)}}}},L=(t,e=0)=>{var a,r;const i=Math.max(16,t.radius??110),n=Math.max(0,t.pulseScale??.16),o=(1-Math.cos(e*Math.PI*2))/2,s=i*(1+n*o),l=1.28*s,c=Math.max(1,t.ringCount??(null==(a=t.radii)?void 0:a.length)??3),p=Math.max(2.2*s,t.maxRadius??((null==(r=t.radii)?void 0:r.length)?Math.max(...t.radii):i*(2.5*c))),d=p/c,h=[F(k(t.center,l),{kind:"halo",opacity:(t.haloOpacity??.16)*(.75+.65*o)}),F(k(t.center,s),{kind:"core",opacity:(t.fillOpacity??.28)*(.88+.2*o)}),F(v(t.center,1.06*s),{kind:"core-ring",opacity:(t.lineOpacity??.95)*(.8+.2*o),width:Math.max(1,(t.lineWidth??3)*(.92+.12*o))})];for(let y=0;y<c;y+=1){const a=(y+e+1)*d%p||p,r=a/p;h.push(F(v(t.center,a),{kind:"ring",opacity:Math.max(.18,(t.lineOpacity??.95)*(1-.42*r)),width:Math.max(1,(t.lineWidth??3)*(1-.18*r))}))}return O(h)},z=t=>{const e=t.color||"#ef4444",a=t.fillColor||e;return{data:L(t),layers:[{id:`${t.id}-halo`,type:"fill",filter:["==",["get","kind"],"halo"],paint:{"fill-color":a,"fill-opacity":["coalesce",["get","opacity"],t.haloOpacity??.16]}},{id:`${t.id}-core`,type:"fill",filter:["==",["get","kind"],"core"],paint:{"fill-color":a,"fill-opacity":["coalesce",["get","opacity"],t.fillOpacity??.28]}},{id:`${t.id}-rings`,type:"line",filter:["any",["==",["get","kind"],"ring"]],paint:{"line-color":e,"line-opacity":["coalesce",["get","opacity"],t.lineOpacity??.95],"line-width":["coalesce",["get","width"],t.lineWidth??3]}}],startAnimation({getOptions:t,setData:e}){const a=Math.max(600,t().duration??2e3);let r=0;const i=performance.now(),n=o=>{const s=t();e(L(s,(o-i)%a/a)),r=requestAnimationFrame(n)};return r=requestAnimationFrame(n),()=>{cancelAnimationFrame(r)}}}},P=(t,e,a)=>Math.min(a,Math.max(e,t)),T=t=>(t%360+360)%360,I=(t,e)=>{const a=(t=>{const e=t.trim(),a=e.match(/^#([0-9a-f]{3}|[0-9a-f]{6})$/i);if(a){const t=a[1],e=3===t.length?t.split("").map(t=>t+t).join(""):t;return[parseInt(e.slice(0,2),16),parseInt(e.slice(2,4),16),parseInt(e.slice(4,6),16)]}const r=e.match(/^rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)/i);if(r)return[P(Number(r[1]),0,255),P(Number(r[2]),0,255),P(Number(r[3]),0,255)]})(t);return a?`rgba(${a[0]}, ${a[1]}, ${a[2]}, ${P(e,0,1)})`:t},N=(t,e)=>{const a=M(t,e,0)[1],r=M(t,e,90)[0],i=M(t,e,180)[1],n=M(t,e,270)[0];return[[n,a],[r,a],[r,i],[n,i]]},B=t=>{var e;const a=null==(e=t.gradient)?void 0:e.colors;return Array.isArray(a)&&a.length>=2?a:void 0},C=(t,e,a=0)=>{const r=t.getContext("2d"),i=B(e);if(!r||!e.gradient||!i)return;const n=t.width,o=n/2,s=o-2,l=e.startAngle+a,c=((t,e)=>{const a=T(e)-T(t);return a<=0?a+360:a})(l,e.endAngle+a),p=(l-90)*Math.PI/180;const d=p+c*Math.PI/180,h=e.gradient.opacity??e.opacity??.28,y=e.gradient.centerOpacity??e.gradient.tailOpacity??.25*h,f=e.gradient.edgeOpacity??e.gradient.headOpacity??h,u=r.createRadialGradient(o,o,0,o,o,s);i.forEach((t,e)=>{const a=e/Math.max(1,i.length-1),r=y+(f-y)*a;u.addColorStop(a,I(t,r))}),r.clearRect(0,0,n,n),r.save(),r.beginPath(),r.moveTo(o,o),r.arc(o,o,s,p,d,!1),r.closePath(),r.clip(),r.fillStyle=u,r.fillRect(0,0,n,n),r.restore()},_=t=>{if(!B(t))return;const e=(()=>{const t=document.createElement("canvas");return t.width=768,t.height=768,t})();return C(e,t),e},E=(t,e,a)=>B(t)?[]:[F(A(t.center,t.radius,e,a),{kind:"sector",color:t.color||"#ff453a",opacity:t.opacity??.28})],G=(t,e=0)=>{const a=t.startAngle+e,r=t.endAngle+e,i=[...E(t,a,r),F(w(t.center,t.radius,a),{kind:"frame"}),F(w(t.center,t.radius,r),{kind:"frame"})];return O(i)},H=t=>{const e=_(t),a=e?{id:`${t.id}-sector-fill`,type:"raster",paint:{"raster-opacity":1,"raster-fade-duration":0}}:{id:`${t.id}-sector-fill`,type:"fill",filter:["==",["get","kind"],"sector"],paint:{"fill-color":["coalesce",["get","color"],t.color||"#ff453a"],"fill-opacity":["coalesce",["get","opacity"],t.opacity??.28],"fill-antialias":!1}};return{data:G(t),canvasSources:e?[{id:`${t.id}-canvas-source`,source:{type:"canvas",canvas:e,coordinates:N(t.center,t.radius),animate:Boolean(t.rotationSpeed&&0!==t.rotationSpeed)}}]:void 0,layers:[a,{id:`${t.id}-sector-frame`,type:"line",filter:["==",["get","kind"],"frame"],paint:{"line-color":t.outlineColor||t.color||"#ff453a","line-opacity":t.outlineOpacity??.95,"line-width":t.outlineWidth??2}}],startAnimation:t.rotationSpeed&&0!==t.rotationSpeed?({getOptions:t,setData:a})=>{const r=performance.now();let i=0;const n=o=>{const s=t(),l=(o-r)/1e3*(s.rotationSpeed||0);e&&C(e,s,l),a(G(s,l)),i=requestAnimationFrame(n)};return i=requestAnimationFrame(n),()=>{cancelAnimationFrame(i)}}:void 0}},J=(t,e)=>{const a=Math.max(40,t.radius),r=t.direction??270,i=Math.min(180,Math.max(8,t.spread??72)),n=Math.max(1,t.lineCount??7),o=Math.max(20,t.lineSpacing??Math.max(80,a/9)),s=e??0,l=Math.max(0,Math.min(.35*a,t.innerRadius??Math.min(.4*o,120))),c=r-i/2,p=r+i/2,d=[];for(let h=0;h<n;h+=1){const e=l+s+h*o;if(e>a)continue;const r=e/a,i=1-h/Math.max(1,n);d.push(F($(t.center,e,c,p),{kind:"directional-pulse-line",opacity:Math.max(.08,(t.opacity??.92)*(.42+.58*i)*(1-.28*r)),width:Math.max(1,(t.lineWidth??2.8)*(.86+.24*i)*(1-.08*r))}))}return O(d)},K=t=>({data:J(t),layers:[{id:`${t.id}-directional-pulse`,type:"line",filter:["==",["get","kind"],"directional-pulse-line"],layout:{"line-cap":"round","line-join":"round"},paint:{"line-color":t.color||"#ef4444","line-opacity":["coalesce",["get","opacity"],t.opacity??.92],"line-width":["coalesce",["get","width"],t.lineWidth??2.8]}}],startAnimation:t.speed&&t.speed>0?({getOptions:t,setData:e})=>{const a=performance.now();let r=0;const i=n=>{const o=t(),s=Math.max(40,o.radius),l=Math.max(20,o.lineSpacing??Math.max(80,s/9)),c=(n-a)/1e3*(o.speed??0)%l;e(J(o,c)),r=requestAnimationFrame(i)};return r=requestAnimationFrame(i),()=>{cancelAnimationFrame(r)}}:void 0}),Q=(t,e=0)=>{var a;const r=Math.max(0,t.ringCount??4),i=Math.max(1,t.trailCount??8),n=Math.max(12,t.sweepAngle??42),o=.22*n,s=t.tailOpacity??.04,l=t.headOpacity??Math.max(.24,t.opacity??.3),c=(t.sweepStartAngle??0)+e,p=!1!==t.showCrosshair,d=!1!==t.showDistanceLabels,h=Math.max(20,t.coreRadius??Math.min(160,.035*t.radius)),y=[];for(let f=r;f>=1;f-=1){const e=t.radius*f/r;if(y.push(F(v(t.center,e),{kind:"ring"})),d){const r=(null==(a=t.distanceLabelFormatter)?void 0:a.call(t,e,f))??`${Math.round(e)}`;[{bearing:0,textAnchor:"bottom"},{bearing:90,textAnchor:"left"},{bearing:180,textAnchor:"top"},{bearing:270,textAnchor:"right"}].forEach(a=>{y.push(F({type:"Point",coordinates:M(t.center,e,a.bearing)},{kind:"distance-label",text:r,textAnchor:a.textAnchor}))})}}p&&y.push(F({type:"LineString",coordinates:[M(t.center,t.radius,180),M(t.center,t.radius,0)]},{kind:"crosshair"}),F({type:"LineString",coordinates:[M(t.center,t.radius,270),M(t.center,t.radius,90)]},{kind:"crosshair"})),y.push(F(k(t.center,h),{kind:"core"}));for(let f=i-1;f>=0;f-=1){const e=c-o*f,a=e+n,r=(i-f)/i,p=s+(l-s)*r*r;y.push(F(A(t.center,t.radius,e,a),{kind:"sweep",opacity:p}))}return y.push(F(A(t.center,t.radius,c+.42*n,c+n),{kind:"head",opacity:Math.min(1,l+.08)})),O(y)},R=t=>({data:Q(t),layers:[{id:`${t.id}-radar-trail`,type:"fill",filter:["==",["get","kind"],"sweep"],paint:{"fill-color":t.color||"#22c55e","fill-opacity":["coalesce",["get","opacity"],t.opacity??.32]}},{id:`${t.id}-radar-rings`,type:"line",filter:["==",["get","kind"],"ring"],paint:{"line-color":t.ringColor||t.color||"#22c55e","line-opacity":t.ringOpacity??.95,"line-width":t.ringWidth??2}},{id:`${t.id}-radar-crosshair`,type:"line",filter:["==",["get","kind"],"crosshair"],paint:{"line-color":t.crosshairColor||t.ringColor||t.color||"#22c55e","line-opacity":t.crosshairOpacity??.5,"line-width":t.crosshairWidth??1.4}},{id:`${t.id}-radar-distance-labels`,type:"symbol",filter:["==",["get","kind"],"distance-label"],layout:{"text-field":["get","text"],"text-size":t.distanceLabelSize??12,"text-anchor":["get","textAnchor"],"text-allow-overlap":!0,"text-ignore-placement":!0},paint:{"text-color":t.distanceLabelColor||t.ringColor||t.color||"#22c55e","text-opacity":t.distanceLabelOpacity??.92,"text-halo-color":t.distanceLabelHaloColor||"rgba(15, 23, 42, 0.42)","text-halo-width":1}}],startAnimation({getOptions:t,setData:e}){const a=performance.now();let r=0;const i=n=>{const o=t(),s=(n-a)/1e3*(o.rotationSpeed??36);e(Q(o,s)),r=requestAnimationFrame(i)};return r=requestAnimationFrame(i),()=>{cancelAnimationFrame(r)}}}),U=(t,e)=>t?"string"==typeof t&&y(t)?f(t,{token:e}):t:f("openfreemap-liberty");exports.maplibregl=t,exports.BASE_MAP_TYPES=h,exports.OPENFREEMAP_STYLES=n,exports.OPENFREEMAP_STYLE_BASE_URL=r,exports.OPENFREEMAP_STYLE_TYPES=o,exports.TDT_STYLE_TYPES=["tdt-image","tdt-image-label"],exports.addDirectionalPulse=(t,e)=>S(t,e,K),exports.addPulseMarker=(t,e)=>S(t,e,j),exports.addRadarSweep=(t,e)=>S(t,e,R),exports.addRingPulseMarker=(t,e)=>S(t,e,z),exports.addSectorScan=(t,e)=>S(t,e,H),exports.createMap=e=>{const{style:a,tdtToken:r,...i}=e;return new t.Map({...i,style:U(a,r)})},exports.createTiandituImageStyle=d,exports.createTiandituRasterSource=p,exports.getBaseMapStyle=f,exports.getMaplibreToolsConfig=a,exports.getOpenFreeMapStyle=s,exports.isBaseMapType=y,exports.setBaseMap=(t,e,a={})=>{const{diff:r=!1,...i}=a;t.setStyle(f(e,i),{diff:r})},exports.setMaplibreToolsConfig=t=>{Object.assign(e,t)};
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("maplibre-gl"),e={},i=()=>({...e}),o="https://tiles.openfreemap.org/styles",n=(t,e,i)=>({type:t,label:e,style:`${o}/${i}`}),r={"openfreemap-liberty":n("openfreemap-liberty","OpenFreeMap Liberty","liberty"),"openfreemap-bright":n("openfreemap-bright","OpenFreeMap Bright","bright"),"openfreemap-positron":n("openfreemap-positron","OpenFreeMap Positron","positron"),"openfreemap-dark":n("openfreemap-dark","OpenFreeMap Dark","dark"),"openfreemap-fiord":n("openfreemap-fiord","OpenFreeMap Fiord","fiord")},a=Object.keys(r),c=(t="openfreemap-liberty")=>r[t].style,l=["0","1","2","3","4","5","6","7"],s="&copy; 天地图",p=(t,e)=>{const o=(t=>{const e=t||i().tdtToken;if(!e)throw new Error("Tianditu token is required. Pass token or call setMaplibreToolsConfig({ tdtToken }).");return e})(e);return l.map(e=>`https://t${e}.tianditu.gov.cn/DataServer?T=${t}&x={x}&y={y}&l={z}&tk=${o}`)},d=(t,e={})=>({type:"raster",tiles:p(t,e.token),tileSize:256,minzoom:0,maxzoom:18,attribution:s}),f=(t={})=>({type:"raster",tiles:p("vec_w",t.token),tileSize:256,minzoom:0,maxzoom:18,attribution:s}),h=(t={})=>{const e=!1!==t.label,i={"tdt-image":d("img_w",t)},o=[{id:"tdt-image",type:"raster",source:"tdt-image"}];return e&&(i["tdt-image-label"]=d("cia_w",t),o.push({id:"tdt-image-label",type:"raster",source:"tdt-image-label"})),{version:8,sources:i,layers:o}},u=(t={})=>{const e=!1!==t.label,i={"tdt-mvt":f(t)},o=[{id:"tdt-mvt",type:"raster",source:"tdt-mvt"}];return e&&(i["tdt-mvt-label"]=d("cva_w",t),o.push({id:"tdt-mvt-label",type:"raster",source:"tdt-mvt-label"})),{version:8,sources:i,layers:o}},y=[...Object.keys(r),"tdt-image","tdt-image-label","tdt-mvt","tdt-mvt-label"],g=t=>y.includes(t),m=(t="openfreemap-liberty",e={})=>"tdt-image"===t?h({...e,label:!1}):"tdt-image-label"===t?h({...e,label:!0}):"tdt-mvt"===t?u({...e,label:!1}):"tdt-mvt-label"===t?u({...e,label:!0}):c(t),M=6378137,b=t=>t*Math.PI/180,$=t=>180*t/Math.PI,k=t=>(t%360+360)%360,v=(t,e,i)=>{const o=e/M,n=b(i),r=b(t[1]),a=b(t[0]),c=Math.asin(Math.sin(r)*Math.cos(o)+Math.cos(r)*Math.sin(o)*Math.cos(n)),l=a+Math.atan2(Math.sin(n)*Math.sin(o)*Math.cos(r),Math.cos(o)-Math.sin(r)*Math.sin(c));return[(s=$(l),s>180?s-360:s<-180?s+360:s),$(c)];var s},x=(t,e)=>{const i=b(e[1]-t[1]),o=b(e[0]-t[0]),n=b(t[1]),r=b(e[1]),a=Math.sin(i/2)*Math.sin(i/2)+Math.cos(n)*Math.cos(r)*Math.sin(o/2)*Math.sin(o/2);return 12756274*Math.atan2(Math.sqrt(a),Math.sqrt(1-a))},w=(t,e)=>{const i=b(t[1]),o=b(e[1]),n=b(e[0]-t[0]),r=Math.sin(n)*Math.cos(o),a=Math.cos(i)*Math.sin(o)-Math.sin(i)*Math.cos(o)*Math.cos(n);return k($(Math.atan2(r,a)))},A=(t,e,i=64)=>{const o=((t,e)=>{const i=k(e)-k(t);return i<=0?i+360:i})(t,e),n=Math.max(12,Math.ceil(i*o/360));return Array.from({length:n+1},(e,i)=>k(t+o*i/n))},F=(t,e,i=64)=>(t=>{if(0===t.length)return t;const[e,i]=t[0],o=t[t.length-1];return o[0]===e&&o[1]===i?t:[...t,[e,i]]})(Array.from({length:i},(o,n)=>v(t,e,360*n/i))),O=(t,e,i=64)=>({type:"Polygon",coordinates:[F(t,e,i)]}),q=(t,e,i=64)=>({type:"LineString",coordinates:F(t,e,i)}),P=(t,e,i,o,n=64)=>{const r=A(i,o,n).map(i=>v(t,e,i));return{type:"Polygon",coordinates:[[t,...r,t]]}},j=(t,e,i,o,n=64)=>({type:"LineString",coordinates:A(i,o,n).map(i=>v(t,e,i))}),S=(t,e,i)=>({type:"LineString",coordinates:[t,v(t,e,i)]}),L=(t,e)=>({type:"Feature",geometry:t,properties:e}),D=t=>({type:"FeatureCollection",features:t}),T=(t,e)=>{t.getLayer(e)&&t.removeLayer(e)},z=(t,e)=>{t.getSource(e)&&t.removeSource(e)},I=(t,e,i)=>{const o=i?"visible":"none";e.forEach(e=>{t.getLayer(e)&&t.setLayoutProperty(e,"visibility",o)})},B=t=>t instanceof Error&&"Style is not done loading."===t.message,_=(t,e,i)=>{const o=e.id,n=`${o}-source`;let r,a={...e},c=[],l=[n],s=!1,p=!1;const d=()=>{null==r||r(),r=void 0,[...c].reverse().forEach(e=>{T(t,e)}),[...l].reverse().forEach(e=>{z(t,e)}),c=[],l=[n]},f=e=>{const i=t.getSource(n);i&&i.setData(e)},h=()=>{try{(()=>{var e,o,p;if(s)return;d();const h=i(a);t.addSource(n,{type:"geojson",data:h.data}),null==(e=h.canvasSources)||e.forEach(e=>{t.addSource(e.id,e.source)}),l=[n,...(null==(o=h.canvasSources)?void 0:o.map(t=>t.id))||[]],c=h.layers.map(t=>t.id),h.layers.forEach(e=>{var i;const o="raster"===e.type&&(null==(i=h.canvasSources)?void 0:i[0])?h.canvasSources[0].id:n;t.addLayer({...e,source:o},a.beforeId)}),I(t,c,!1!==a.visible),null==(p=h.canvasSources)||p.forEach(e=>{var i;const o=t.style,n=null==(i=null==o?void 0:o.tileManagers)?void 0:i[e.id];if(!n||!n.t)return;const r=n.used;n.used=!0;const a=t;n.update(a.transform,a.terrain),n.used=r}),h.startAnimation&&(r=h.startAnimation({getOptions:()=>a,setData:f})||void 0)})(),p&&(p=!1,t.off("styledata",u))}catch(e){if(!B(e))throw e;p||(p=!0,t.on("styledata",u))}},u=()=>{p&&!s&&h()},y=()=>{s||h()};return y(),{id:o,update(t){s||(a={...a,...t,id:o},y())},show(){s||(a={...a,visible:!0},I(t,c,!0))},hide(){s||(a={...a,visible:!1},I(t,c,!1))},remove(){s||(s=!0,p&&(p=!1,t.off("styledata",u)),d())}}},C=(t,e=0)=>{const i=Math.max(10,t.radius??70),o=Math.max(i,t.maxRadius??2.3*i),n=Math.max(1,t.pulseCount??2),r=Math.max(1,t.lineWidth??2),a=t.pulseOpacity??.9,c=[L(O(t.center,i),{kind:"core"})];for(let l=0;l<n;l+=1){const s=(e+l/n)%1,p=i+(o-i)*s;c.push(L(q(t.center,p),{kind:"pulse",opacity:a*(1-s),width:r*(1-.35*s)}))}return D(c)},N=t=>{const e=t.color||"#ff3b30",i=t.fillColor||e;return{data:C(t),layers:[{id:`${t.id}-core`,type:"fill",filter:["==",["get","kind"],"core"],paint:{"fill-color":i,"fill-opacity":t.fillOpacity??.28}},{id:`${t.id}-pulse`,type:"line",filter:["==",["get","kind"],"pulse"],paint:{"line-color":e,"line-opacity":["coalesce",["get","opacity"],t.pulseOpacity??.9],"line-width":["coalesce",["get","width"],t.lineWidth??2]}}],startAnimation({getOptions:t,setData:e}){const i=Math.max(400,t().duration??1800);let o=0;const n=performance.now(),r=a=>{const c=t();e(C(c,(a-n)%i/i)),o=requestAnimationFrame(r)};return o=requestAnimationFrame(r),()=>{cancelAnimationFrame(o)}}}},E=(t,e=0)=>{const i=Math.max(16,t.radius??110),o=Math.max(0,t.pulseScale??.16),n=(1-Math.cos(e*Math.PI*2))/2,r=i*(1+o*n),a=Math.max(1,t.ringCount??3),c=Math.max(2.2*r,t.maxRadius??i*(2.5*a)),l=c/a,s=t.fillOpacity??.28,p=[L(O(t.center,r),{kind:"core",opacity:s*(.88+.2*n)}),L(q(t.center,1.06*r),{kind:"core-ring",opacity:(t.lineOpacity??.95)*(.8+.2*n),width:Math.max(1,(t.lineWidth??3)*(.92+.12*n))})];for(let d=0;d<a;d+=1){const i=(d+e+1)*l%c||c,o=i/c;p.push(L(q(t.center,i),{kind:"ring",opacity:Math.max(.18,(t.lineOpacity??.95)*(1-.42*o)),width:Math.max(1,(t.lineWidth??3)*(1-.18*o))}))}return D(p)},R=t=>{const e=t.color||"#ef4444",i=t.fillColor||e;return{data:E(t),layers:[{id:`${t.id}-core`,type:"fill",filter:["==",["get","kind"],"core"],paint:{"fill-color":i,"fill-opacity":["coalesce",["get","opacity"],t.fillOpacity??.28]}},{id:`${t.id}-rings`,type:"line",filter:["any",["==",["get","kind"],"ring"]],paint:{"line-color":e,"line-opacity":["coalesce",["get","opacity"],t.lineOpacity??.95],"line-width":["coalesce",["get","width"],t.lineWidth??3]}}],startAnimation({getOptions:t,setData:e}){const i=Math.max(600,t().duration??2e3);let o=0;const n=performance.now(),r=a=>{const c=t();e(E(c,(a-n)%i/i)),o=requestAnimationFrame(r)};return o=requestAnimationFrame(r),()=>{cancelAnimationFrame(o)}}}},W=(t,e=0)=>{const i=Math.max(1,t.radius??90),o=Math.max(1,t.minRadius??.78*i),n=Math.max(o,t.maxRadius??1.22*i),r=(1-Math.cos(e*Math.PI*2))/2,a=o+(n-o)*r,c=t.fillOpacity??.28,l=t.minFillOpacity??.46*c,s=t.strokeOpacity??.82,p=t.minStrokeOpacity??.38*s,d=1-r,f=[L(O(t.center,a),{kind:"breathing-fill",opacity:l+(c-l)*d})];return(t.strokeWidth??2)>0&&f.push(L(q(t.center,a),{kind:"breathing-stroke",opacity:p+(s-p)*d})),D(f)},X=t=>{const e=t.color||"#1677ff",i=t.fillColor||e,o=t.strokeColor||e,n=Math.max(0,t.strokeWidth??2);return{data:W(t),layers:[{id:`${t.id}-breathing-fill`,type:"fill",filter:["==",["get","kind"],"breathing-fill"],paint:{"fill-color":i,"fill-opacity":["coalesce",["get","opacity"],t.fillOpacity??.28]}},{id:`${t.id}-breathing-stroke`,type:"line",filter:["==",["get","kind"],"breathing-stroke"],layout:{"line-cap":"round","line-join":"round"},paint:{"line-color":o,"line-opacity":["coalesce",["get","opacity"],t.strokeOpacity??.82],"line-width":n}}],startAnimation({getOptions:t,setData:e}){const i=Math.max(400,t().duration??1800),o=performance.now();let n=0;const r=a=>{const c=t();e(W(c,(a-o)%i/i)),n=requestAnimationFrame(r)};return n=requestAnimationFrame(r),()=>{cancelAnimationFrame(n)}}}},Y=(t,e,i)=>Math.min(i,Math.max(e,t)),G=t=>{const e=t.trim(),i=e.match(/^#([0-9a-f]{3}|[0-9a-f]{6})$/i);if(i){const t=i[1],e=3===t.length?t.split("").map(t=>t+t).join(""):t;return[parseInt(e.slice(0,2),16),parseInt(e.slice(2,4),16),parseInt(e.slice(4,6),16)]}const o=e.match(/^rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)/i);if(o)return[Y(Number(o[1]),0,255),Y(Number(o[2]),0,255),Y(Number(o[3]),0,255)]},H=t=>(t%360+360)%360,J=t=>(t-90)*Math.PI/180,K=(t,e)=>{const i=G(t);return i?`rgba(${i[0]}, ${i[1]}, ${i[2]}, ${Y(e,0,1)})`:t},Q=t=>t*(2-t),U=(t,e)=>{const i=t.length-1;if(e<=0)return t[0];if(e>=i)return t[i];const o=Math.floor(e),n=e-o,[r,a]=[G(t[o]),G(t[o+1])];if(!r||!a)return t[Math.round(e)];const[c,l,s]=((t,e,i)=>[Math.round(t[0]+(e[0]-t[0])*i),Math.round(t[1]+(e[1]-t[1])*i),Math.round(t[2]+(e[2]-t[2])*i)])(r,a,n);return`rgb(${c},${l},${s})`},V=(t,e)=>{const i=v(t,e,0)[1],o=v(t,e,90)[0],n=v(t,e,180)[1],r=v(t,e,270)[0];return[[r,i],[o,i],[o,n],[r,n]]},Z=t=>{var e;const i=null==(e=t.gradient)?void 0:e.colors;return Array.isArray(i)&&i.length>=2?i:void 0},tt=(t,e,i=0)=>{const o=t.getContext("2d"),n=Z(e);if(!o||!e.gradient||!n)return;const r=t.width,a=r/2,c=a-2,l=e.startAngle+i,s=((t,e)=>{const i=H(e)-H(t);return i<=0?i+360:i})(l,e.endAngle+i),p=J(l),d=p+s*Math.PI/180,f=e.gradient.opacity??e.opacity??.28,h=e.gradient.centerOpacity??.25*f,u=e.gradient.edgeOpacity??f,y=o.createRadialGradient(a,a,0,a,a,c);n.forEach((t,e)=>{const i=e/Math.max(1,n.length-1),o=h+(u-h)*i;y.addColorStop(i,K(t,o))}),o.clearRect(0,0,r,r),o.save(),o.beginPath(),o.moveTo(a,a),o.arc(a,a,c,p,d,!1),o.closePath(),o.clip(),o.fillStyle=y,o.fillRect(0,0,r,r),o.restore()},et=t=>{if(!Z(t))return;const e=(()=>{const t=document.createElement("canvas");return t.width=768,t.height=768,t})();return tt(e,t),e},it=(t,e,i)=>Z(t)?[]:[L(P(t.center,t.radius,e,i),{kind:"sector",color:t.color||"#ff453a",opacity:t.opacity??.28})],ot=(t,e=0)=>{const i=t.startAngle+e,o=t.endAngle+e,n=[...it(t,i,o),L(S(t.center,t.radius,i),{kind:"frame"}),L(S(t.center,t.radius,o),{kind:"frame"})];return D(n)},nt=t=>{const e=et(t),i=e?{id:`${t.id}-sector-fill`,type:"raster",paint:{"raster-opacity":1,"raster-fade-duration":0}}:{id:`${t.id}-sector-fill`,type:"fill",filter:["==",["get","kind"],"sector"],paint:{"fill-color":["coalesce",["get","color"],t.color||"#ff453a"],"fill-opacity":["coalesce",["get","opacity"],t.opacity??.28],"fill-antialias":!1}};return{data:ot(t),canvasSources:e?[{id:`${t.id}-canvas-source`,source:{type:"canvas",canvas:e,coordinates:V(t.center,t.radius),animate:Boolean(t.rotationSpeed&&0!==t.rotationSpeed)}}]:void 0,layers:[i,{id:`${t.id}-sector-frame`,type:"line",filter:["==",["get","kind"],"frame"],paint:{"line-color":t.outlineColor||t.color||"#ff453a","line-opacity":t.outlineOpacity??.95,"line-width":t.outlineWidth??2}}],startAnimation:t.rotationSpeed&&0!==t.rotationSpeed?({getOptions:t,setData:i})=>{const o=performance.now();let n=0;const r=a=>{const c=t(),l=(a-o)/1e3*(c.rotationSpeed||0);e&&tt(e,c,l),i(ot(c,l)),n=requestAnimationFrame(r)};return n=requestAnimationFrame(r),()=>{cancelAnimationFrame(n)}}:void 0}},rt=(t,e)=>{const i=Math.max(40,t.radius),o=t.direction??270,n=Math.min(180,Math.max(8,t.spread??72)),r=Math.max(1,t.lineCount??7),a=Math.max(20,t.lineSpacing??Math.max(80,i/9)),c=e??0,l=Math.max(0,Math.min(.35*i,t.innerRadius??Math.min(.4*a,120))),s=o-n/2,p=o+n/2,d=[];for(let f=0;f<r;f+=1){const e=l+c+f*a;if(e>i)continue;const o=e/i,n=1-f/Math.max(1,r);d.push(L(j(t.center,e,s,p),{kind:"directional-pulse-line",opacity:Math.max(.08,(t.opacity??.92)*(.42+.58*n)*(1-.28*o)),width:Math.max(1,(t.lineWidth??2.8)*(.86+.24*n)*(1-.08*o))}))}return D(d)},at=t=>({data:rt(t),layers:[{id:`${t.id}-directional-pulse`,type:"line",filter:["==",["get","kind"],"directional-pulse-line"],layout:{"line-cap":"round","line-join":"round"},paint:{"line-color":t.color||"#ef4444","line-opacity":["coalesce",["get","opacity"],t.opacity??.92],"line-width":["coalesce",["get","width"],t.lineWidth??2.8]}}],startAnimation:t.speed&&t.speed>0?({getOptions:t,setData:e})=>{const i=performance.now();let o=0;const n=r=>{const a=t(),c=Math.max(40,a.radius),l=Math.max(20,a.lineSpacing??Math.max(80,c/9)),s=(r-i)/1e3*(a.speed??0)%l;e(rt(a,s)),o=requestAnimationFrame(n)};return o=requestAnimationFrame(n),()=>{cancelAnimationFrame(o)}}:void 0}),ct=t=>{var e;const i=null==(e=t.gradient)?void 0:e.colors;return Array.isArray(i)&&i.length>=2},lt=(t,e)=>{const i=v(t,e,0)[1],o=v(t,e,90)[0],n=v(t,e,180)[1],r=v(t,e,270)[0];return[[r,i],[o,i],[o,n],[r,n]]},st=(t,e,i=0)=>{const o=t.getContext("2d"),n=e.gradient,r=null==n?void 0:n.colors;if(!o||!n||!r||r.length<2)return;const a=t.width,c=a/2,l=c-2,s=Math.max(12,e.sweepAngle??42),p=e.tailOpacity??.04,d=Math.max(.24,e.opacity??.3),f=(e.sweepStartAngle??0)+i,h=f,u=f+s,y=s;o.clearRect(0,0,a,a);const g=o.createConicGradient(J(h),c,c),m=y/360,M=Math.min(1,d+.08);for(let b=0;b<=128;b++){const t=b/128,e=p+(M-p)*Q(t),i=t*(r.length-1),o=U(r,i);g.addColorStop(t*m,K(o,Math.max(0,e)))}o.save(),o.beginPath(),o.moveTo(c,c),o.arc(c,c,l,J(h),J(u),!1),o.closePath(),o.fillStyle=g,o.fill(),o.restore()},pt=(t,e=0)=>{var i;const o=Math.max(0,t.ringCount??4),n=Math.max(12,t.sweepAngle??42),r=t.headOpacity??Math.max(.24,t.opacity??.3),a=(t.sweepStartAngle??0)+e,c=!1!==t.showCrosshair,l=!1!==t.showDistanceLabels,s=Math.max(20,t.coreRadius??Math.min(160,.035*t.radius)),p=ct(t),d=[];for(let f=o;f>=1;f-=1){const e=t.radius*f/o;if(d.push(L(q(t.center,e),{kind:"ring"})),l){const o=(null==(i=t.distanceLabelFormatter)?void 0:i.call(t,e,f))??`${Math.round(e)}`;[{bearing:0,textAnchor:"bottom"},{bearing:90,textAnchor:"left"},{bearing:180,textAnchor:"top"},{bearing:270,textAnchor:"right"}].forEach(i=>{d.push(L({type:"Point",coordinates:v(t.center,e,i.bearing)},{kind:"distance-label",text:o,textAnchor:i.textAnchor}))})}}return c&&d.push(L({type:"LineString",coordinates:[v(t.center,t.radius,180),v(t.center,t.radius,0)]},{kind:"crosshair"}),L({type:"LineString",coordinates:[v(t.center,t.radius,270),v(t.center,t.radius,90)]},{kind:"crosshair"})),d.push(L(O(t.center,s),{kind:"core"})),p||d.push(L(P(t.center,t.radius,a,a+n),{kind:"sweep",opacity:r})),D(d)},dt=t=>{const e=ct(t)?(()=>{const t=document.createElement("canvas");return t.width=768,t.height=768,t})():void 0;e&&st(e,t);const i=e?{id:`${t.id}-radar-trail`,type:"raster",paint:{"raster-opacity":1,"raster-fade-duration":0}}:{id:`${t.id}-radar-trail`,type:"fill",filter:["==",["get","kind"],"sweep"],paint:{"fill-color":t.color||"#22c55e","fill-opacity":["coalesce",["get","opacity"],t.opacity??.32]}};return{data:pt(t),canvasSources:e?[{id:`${t.id}-canvas-source`,source:{type:"canvas",canvas:e,coordinates:lt(t.center,t.radius),animate:!0}}]:void 0,layers:[i,{id:`${t.id}-radar-rings`,type:"line",filter:["==",["get","kind"],"ring"],paint:{"line-color":t.ringColor||t.color||"#22c55e","line-opacity":t.ringOpacity??.95,"line-width":t.ringWidth??2}},{id:`${t.id}-radar-crosshair`,type:"line",filter:["==",["get","kind"],"crosshair"],paint:{"line-color":t.crosshairColor||t.ringColor||t.color||"#22c55e","line-opacity":t.crosshairOpacity??.5,"line-width":t.crosshairWidth??1.4}},{id:`${t.id}-radar-distance-labels`,type:"symbol",filter:["==",["get","kind"],"distance-label"],layout:{"text-field":["get","text"],"text-size":t.distanceLabelSize??12,"text-anchor":["get","textAnchor"],"text-allow-overlap":!0,"text-ignore-placement":!0},paint:{"text-color":t.distanceLabelColor||t.ringColor||t.color||"#22c55e","text-opacity":t.distanceLabelOpacity??.92,"text-halo-color":t.distanceLabelHaloColor||"rgba(15, 23, 42, 0.42)","text-halo-width":1}}],startAnimation({getOptions:t,setData:i}){const o=performance.now();let n=0;const r=a=>{const c=t(),l=(a-o)/1e3*(c.rotationSpeed??36);e&&st(e,c,l),i(pt(c,l)),n=requestAnimationFrame(r)};return n=requestAnimationFrame(r),()=>{cancelAnimationFrame(n)}}}},ft=(t,e)=>{const i=v(t,e,0)[1],o=v(t,e,90)[0],n=v(t,e,180)[1],r=v(t,e,270)[0];return[[r,i],[o,i],[o,n],[r,n]]},ht=t=>{const e=(()=>{const t=document.createElement("canvas");return t.width=512,t.height=512,t})();((t,e)=>{const i=t.getContext("2d");if(!i)return;const o=t.width,n=o/2,r=n-1,a=e.color||"#06c536",c=e.fillColor||a,l=e.borderColor||a,s=e.fillOpacity??.06,p=e.borderOpacity??.92;i.clearRect(0,0,o,o),i.save(),i.beginPath(),i.arc(n,n,r,0,2*Math.PI),i.clip();const d=i.createRadialGradient(n,n,0,n,n,r),f=Math.min(.8,s+.85*(p-s));d.addColorStop(0,K(c,s)),d.addColorStop(.85,K(c,s)),d.addColorStop(.92,K(l,s+.3*(f-s))),d.addColorStop(.96,K(l,s+.7*(f-s))),d.addColorStop(1,K(l,f)),i.fillStyle=d,i.fillRect(0,0,o,o),i.restore()})(e,t);const i=t.borderColor||t.color||"#06c536";return{data:D([L(q(t.center,t.radius),{kind:"defence-border"})]),canvasSources:[{id:`${t.id}-canvas-source`,source:{type:"canvas",canvas:e,coordinates:ft(t.center,t.radius),animate:!0}}],layers:[{id:`${t.id}-defence-circle`,type:"raster",paint:{"raster-opacity":1,"raster-fade-duration":0}},{id:`${t.id}-defence-border`,type:"line",filter:["==",["get","kind"],"defence-border"],paint:{"line-color":i,"line-opacity":t.borderOpacity??.92,"line-width":t.borderWidth??2}}]}},ut=(t,e=0)=>{const i=Math.max(1,t.sourceWidth??220),o=Math.max(1,t.targetWidth??45),n=(t=>{const e=t.target||v(t.center,t.distance||0,t.bearing||0),i=void 0!==t.target?w(t.center,t.target):k(t.bearing||0),o=v(t.center,t.startWidth/2,i-90),n=v(t.center,t.startWidth/2,i+90);return{polygon:{type:"Polygon",coordinates:[[o,v(e,t.endWidth/2,i-90),v(e,t.endWidth/2,i+90),n,o]]},centerLine:{type:"LineString",coordinates:[t.center,e]}}})({center:t.center,target:t.target,startWidth:i,endWidth:o}),r=[L(n.polygon,{kind:"countermeasure-channel"}),L(n.centerLine,{kind:"countermeasure-line"})],a=x(t.center,t.target),c=w(t.center,t.target),l=Math.max(0,Math.floor(t.particleCount??18)),s=Math.max(300,t.particleDuration??1200),p=e%s/s,d=Math.max(1,t.particleRadius??2.8);if(a>0)for(let f=0;f<l;f+=1){const e=(p+f/l)%1;r.push(L({type:"Point",coordinates:v(t.center,a*e,c)},{kind:"countermeasure-particle",opacity:.25+.75*e,radius:d*(.7+.3*e)}))}if(!1!==t.targetRipple){const i=Math.max(1,Math.floor(t.targetRippleCount??2)),o=Math.max(10,t.targetRippleRadius??120),n=Math.max(300,t.targetRippleDuration??900),a=e%n/n;for(let e=0;e<i;e+=1){const n=(a+e/i)%1,c="forcedLanding"===t.mode?1-n:n;r.push(L(q(t.target,Math.max(2,o*c)),{kind:"countermeasure-target-ripple",opacity:.9*Math.sin(Math.PI*n)}))}}return D(r)},yt=t=>{const e=t.color??"#a855f7",i=t.lineColor??"#f0abfc",o=Math.max(1,t.lineWidth??2.5);return{data:ut(t),layers:[{id:`${t.id}-countermeasure-channel`,type:"fill",filter:["==",["get","kind"],"countermeasure-channel"],paint:{"fill-color":t.channelColor??e,"fill-opacity":t.channelOpacity??.16}},{id:`${t.id}-countermeasure-glow`,type:"line",filter:["==",["get","kind"],"countermeasure-line"],layout:{"line-cap":"round"},paint:{"line-color":i,"line-opacity":.28*(t.lineOpacity??.92),"line-width":4*o,"line-blur":1.4*o}},{id:`${t.id}-countermeasure-line`,type:"line",filter:["==",["get","kind"],"countermeasure-line"],layout:{"line-cap":"round"},paint:{"line-color":i,"line-opacity":t.lineOpacity??.92,"line-width":o}},{id:`${t.id}-countermeasure-target-ripple`,type:"line",filter:["==",["get","kind"],"countermeasure-target-ripple"],paint:{"line-color":e,"line-opacity":["coalesce",["get","opacity"],.9],"line-width":Math.max(1,t.targetRippleWidth??2.5)}},{id:`${t.id}-countermeasure-particle`,type:"circle",filter:["==",["get","kind"],"countermeasure-particle"],paint:{"circle-color":t.particleColor??i,"circle-opacity":["coalesce",["get","opacity"],1],"circle-radius":["coalesce",["get","radius"],2.8],"circle-blur":.18,"circle-stroke-color":"#ffffff","circle-stroke-opacity":.45,"circle-stroke-width":.5}}],startAnimation:({getOptions:t,setData:e})=>{let i=0;const o=performance.now(),n=r=>{e(ut(t(),r-o)),i=requestAnimationFrame(n)};return i=requestAnimationFrame(n),()=>cancelAnimationFrame(i)}}},gt=(t,e=0)=>{const i=[],o=new Set,n=Math.max(0,Math.floor(t.particleCount??5)),r=Math.max(300,t.particleDuration??1600),a=e%r/r,c=Math.max(1,t.particleRadius??2.5);if(t.links.forEach((e,r)=>{const l=e.color??("detection"===(s=e.type)?"#38bdf8":"command"===s?"#22d3ee":"#f97316");var s;const p=x(e.from,e.to),d=w(e.from,e.to);if(i.push(L({type:"LineString",coordinates:[e.from,e.to]},{kind:"coordination-link",linkType:e.type,color:l})),!1!==t.showNodes&&[e.from,e.to].forEach(t=>{const e=`${t[0]},${t[1]}`;o.has(e)||(o.add(e),i.push(L({type:"Point",coordinates:t},{kind:"coordination-node",color:l})))}),!(p<=0))for(let o=0;o<n;o+=1){const s=(a+o/n+r/t.links.length)%1;i.push(L({type:"Point",coordinates:v(e.from,p*s,d)},{kind:"coordination-particle",color:l,opacity:.35+.65*s,radius:c}))}}),!1!==t.targetRipple){const o=Math.max(300,t.targetRippleDuration??1200),n=e%o/o,r=Math.max(10,t.targetRippleRadius??100)*n;i.push(L(q(t.center,Math.max(2,r)),{kind:"coordination-target-ripple",opacity:.9*(1-n)}))}return D(i)},mt=t=>{const e=Math.max(1,t.lineWidth??2.2),i=t.lineOpacity??.9;return{data:gt(t),layers:[{id:`${t.id}-coordination-detection`,type:"line",filter:["==",["get","linkType"],"detection"],paint:{"line-color":["coalesce",["get","color"],"#38bdf8"],"line-opacity":i,"line-width":e,"line-dasharray":[2,2]}},{id:`${t.id}-coordination-command`,type:"line",filter:["==",["get","linkType"],"command"],paint:{"line-color":["coalesce",["get","color"],"#22d3ee"],"line-opacity":i,"line-width":e,"line-dasharray":[.5,1.8]}},{id:`${t.id}-coordination-countermeasure`,type:"line",filter:["==",["get","linkType"],"countermeasure"],paint:{"line-color":["coalesce",["get","color"],"#f97316"],"line-opacity":i,"line-width":e+.8}},{id:`${t.id}-coordination-target-ripple`,type:"line",filter:["==",["get","kind"],"coordination-target-ripple"],paint:{"line-color":"#ff3b30","line-opacity":["coalesce",["get","opacity"],.9],"line-width":2.5}},{id:`${t.id}-coordination-node`,type:"circle",filter:["==",["get","kind"],"coordination-node"],paint:{"circle-color":["coalesce",["get","color"],"#ffffff"],"circle-radius":Math.max(2,t.nodeRadius??5),"circle-stroke-color":"#ffffff","circle-stroke-width":1.5}},{id:`${t.id}-coordination-particle`,type:"circle",filter:["==",["get","kind"],"coordination-particle"],paint:{"circle-color":["coalesce",["get","color"],"#ffffff"],"circle-opacity":["coalesce",["get","opacity"],1],"circle-radius":["coalesce",["get","radius"],2.5],"circle-blur":.1}}],startAnimation:({getOptions:t,setData:e})=>{let i=0;const o=performance.now(),n=r=>{e(gt(t(),r-o)),i=requestAnimationFrame(n)};return i=requestAnimationFrame(n),()=>cancelAnimationFrame(i)}}},Mt=(t,e=0)=>{const i=[L({type:"LineString",coordinates:[t.center,t.spoofedPosition]},{kind:"spoofing-offset"})],o=x(t.center,t.spoofedPosition),n=w(t.center,t.spoofedPosition),r=Math.max(0,Math.floor(t.particleCount??10)),a=Math.max(300,t.particleDuration??1800),c=e%a/a;if(!1!==t.showTruePosition&&i.push(L({type:"Point",coordinates:t.center},{kind:"spoofing-true-position"})),!1!==t.showSpoofedPosition&&i.push(L({type:"Point",coordinates:t.spoofedPosition},{kind:"spoofing-ghost"})),o>0)for(let l=0;l<r;l+=1){const e=(c+l/r)%1;i.push(L({type:"Point",coordinates:v(t.center,o*e,n)},{kind:"spoofing-particle",opacity:.25+.75*e}))}if(!1!==t.ripple){const o=Math.max(1,Math.floor(t.rippleCount??2)),n=Math.max(300,t.rippleDuration??1200),r=Math.max(10,t.rippleRadius??120),a=e%n/n;for(let e=0;e<o;e+=1){const n=(a+e/o)%1;i.push(L(q(t.spoofedPosition,Math.max(2,r*n)),{kind:"spoofing-ripple",opacity:.75*(1-n)}))}}return D(i)},bt=t=>{const e=t.color??"#8b5cf6";return{data:Mt(t),layers:[{id:`${t.id}-spoofing-offset`,type:"line",filter:["==",["get","kind"],"spoofing-offset"],layout:{"line-cap":"round"},paint:{"line-color":t.lineColor??e,"line-opacity":t.lineOpacity??.82,"line-width":Math.max(1,t.lineWidth??2),"line-dasharray":[1.2,2]}},{id:`${t.id}-spoofing-ripple`,type:"line",filter:["==",["get","kind"],"spoofing-ripple"],paint:{"line-color":e,"line-opacity":["coalesce",["get","opacity"],.75],"line-width":2}},{id:`${t.id}-spoofing-true-position`,type:"circle",filter:["==",["get","kind"],"spoofing-true-position"],paint:{"circle-color":"#ffffff","circle-radius":5,"circle-stroke-color":e,"circle-stroke-width":2}},{id:`${t.id}-spoofing-ghost`,type:"circle",filter:["==",["get","kind"],"spoofing-ghost"],paint:{"circle-color":e,"circle-opacity":t.ghostOpacity??.42,"circle-radius":Math.max(2,t.ghostRadius??8),"circle-stroke-color":"#ffffff","circle-stroke-opacity":.8,"circle-stroke-width":1.5}},{id:`${t.id}-spoofing-particle`,type:"circle",filter:["==",["get","kind"],"spoofing-particle"],paint:{"circle-color":e,"circle-opacity":["coalesce",["get","opacity"],1],"circle-radius":Math.max(1,t.particleRadius??2.5),"circle-blur":.12}}],startAnimation:({getOptions:t,setData:e})=>{let i=0;const o=performance.now(),n=r=>{e(Mt(t(),r-o)),i=requestAnimationFrame(n)};return i=requestAnimationFrame(n),()=>cancelAnimationFrame(i)}}},$t=(t,e)=>t?"string"==typeof t&&g(t)?m(t,{token:e}):t:m("openfreemap-liberty");exports.maplibregl=t,exports.BASE_MAP_TYPES=y,exports.OPENFREEMAP_STYLES=r,exports.OPENFREEMAP_STYLE_BASE_URL=o,exports.OPENFREEMAP_STYLE_TYPES=a,exports.TDT_STYLE_TYPES=["tdt-image","tdt-image-label","tdt-mvt","tdt-mvt-label"],exports.addBreachAlert=(t,e)=>{const i=e.id,o=`${i}-fence-source`,n=`${i}-fence-fill`,r=`${i}-fence-line`,a=`${i}-ripple-source`,c=`${i}-ripple-line`;let l,s,p,d={...e},f=!1,h=!1,u=!1,y=!1,g=0;const m=()=>d.fenceColor??"#1677ff",M=()=>d.fenceFillColor??m(),b=()=>d.fenceFillOpacity??.1,$=()=>d.fenceBorderWidth??2,k=()=>d.fenceBorderOpacity??.9,v=()=>d.fenceAlertColor??"#ff3b30",x=()=>d.rippleColor??v(),w=e=>{const i=t.getSource(a);i&&i.setData(e)},A=t=>{const e=Math.max(20,d.rippleRadius??800),i=Math.max(1,d.rippleCount??3),o=Math.max(400,d.rippleDuration??1500),n=Math.max(1,d.rippleLineWidth??3),r=performance.now(),a=c=>{w(((t,e,i,o,n,r)=>{const a=[];for(let c=0;c<i;c+=1){const l=(r/o+c/i)%1,s=l*e;s<1||a.push(L(q(t,s),{kind:"ring",opacity:.95*(1-l),width:n*(1-.3*l)}))}return D(a)})(t,e,i,o,n,c-r)),g=requestAnimationFrame(a)};g=requestAnimationFrame(a)},F=()=>{if(!u)return;const e=m(),i=M();t.getLayer(n)&&(t.setPaintProperty(n,"fill-color",i),t.setPaintProperty(n,"fill-opacity",b())),t.getLayer(r)&&(t.setPaintProperty(r,"line-color",e),t.setPaintProperty(r,"line-width",$()),t.setPaintProperty(r,"line-opacity",k()))},O=()=>{const e=d.tacticalColor??v(),i=Math.max(1,d.tacticalBorderWidth??4),o="viewport"===d.tacticalScope?12:0,n=Math.max(60,d.fenceFlashInterval??200),r=t.getContainer(),a=document.createElement("div");a.style.position="absolute",a.style.inset=`${o}px`,a.style.border=`${i}px solid ${e}`,a.style.boxShadow=`inset 0 0 ${6*i}px ${e}`,a.style.pointerEvents="none",a.style.zIndex="5",a.style.opacity="1",r.appendChild(a),p=a;let c=!0;s=setInterval(()=>{c=!c,a.style.opacity=c?"1":"0.15"},n)},P=()=>{const e=(t=>{if(!t)return[];if(Array.isArray(t))return[{type:"Polygon",coordinates:t}];switch(t.type){case"Polygon":return[t];case"MultiPolygon":return t.coordinates.map(t=>({type:"Polygon",coordinates:t}));case"Feature":{const e=t.geometry;return"Polygon"===(null==e?void 0:e.type)?[e]:"MultiPolygon"===(null==e?void 0:e.type)?e.coordinates.map(t=>({type:"Polygon",coordinates:t})):[]}case"FeatureCollection":{const e=[];for(const i of t.features){const t=i.geometry;"Polygon"===(null==t?void 0:t.type)?e.push(t):"MultiPolygon"===(null==t?void 0:t.type)&&e.push(...t.coordinates.map(t=>({type:"Polygon",coordinates:t})))}return e}default:return[]}})(d.fence);if(0===e.length)return;const i=D(e.map(t=>L(t,{kind:"fence"})));if(u){const e=t.getSource(o);e&&e.setData(i),F()}else t.getSource(o)?t.getSource(o).setData(i):t.addSource(o,{type:"geojson",data:i}),t.getLayer(n)||t.addLayer({id:n,type:"fill",source:o,filter:["==",["get","kind"],"fence"],paint:{"fill-color":M(),"fill-opacity":b()}},d.beforeId),t.getLayer(r)||t.addLayer({id:r,type:"line",source:o,filter:["==",["get","kind"],"fence"],paint:{"line-color":m(),"line-width":$(),"line-opacity":k()}},d.beforeId),u=!0,I(t,[n,r],!1!==d.visible)},j=()=>{h&&!f&&S()},S=()=>{if(!f)try{P(),t.getSource(a)||t.addSource(a,{type:"geojson",data:D([])}),t.getLayer(c)?t.getLayer(c)&&t.setPaintProperty(c,"line-color",x()):(t.addLayer({id:c,type:"line",source:a,filter:["==",["get","kind"],"ring"],paint:{"line-color":x(),"line-opacity":["coalesce",["get","opacity"],.9],"line-width":["coalesce",["get","width"],3]}},d.beforeId),I(t,[c],!1!==d.visible)),h=!1,t.off("styledata",j)}catch(e){if(!B(e))throw e;h||(h=!0,t.on("styledata",j))}},_=()=>{l&&(clearInterval(l),l=void 0),g&&(cancelAnimationFrame(g),g=0),w(D([])),s&&(clearInterval(s),s=void 0),p&&(p.remove(),p=void 0),F()};return S(),{id:i,update(t){f||(d={...d,...t,id:i},S())},show(){f||(d={...d,visible:!0},I(t,[n,r,c],!0))},hide(){f||(d={...d,visible:!1},I(t,[n,r,c],!1))},remove(){f||(f=!0,h&&(h=!1,t.off("styledata",j)),_(),T(t,c),T(t,r),T(t,n),z(t,a),z(t,o),u=!1)},trigger(e){if(f)return;y&&_();const i=e??d.center;y=!0,!1!==d.fenceFlash&&(()=>{if(!u)return;const e=v(),i=Math.max(60,d.fenceFlashInterval??200);let o=!0;t.getLayer(n)&&(t.setPaintProperty(n,"fill-color",e),t.setPaintProperty(n,"fill-opacity",.42)),t.getLayer(r)&&(t.setPaintProperty(r,"line-color",e),t.setPaintProperty(r,"line-opacity",1)),l=setInterval(()=>{o=!o;const e=o?.42:.08,i=o?1:.4;t.getLayer(n)&&t.setPaintProperty(n,"fill-opacity",e),t.getLayer(r)&&t.setPaintProperty(r,"line-opacity",i)},i)})(),!1!==d.ripple&&A(i),d.tacticalFlash&&O()},reset(){f||(_(),y=!1)},isActive:()=>y}},exports.addBreathingCircle=(t,e)=>_(t,e,X),exports.addCoordinatedCountermeasure=(t,e)=>_(t,e,mt),exports.addCountermeasureBeam=(t,e)=>_(t,e,yt),exports.addDefenceCircle=(t,e)=>_(t,e,ht),exports.addDirectionalPulse=(t,e)=>_(t,e,at),exports.addNavigationSpoofing=(t,e)=>_(t,e,bt),exports.addPulseMarker=(t,e)=>_(t,e,N),exports.addRadarSweep=(t,e)=>_(t,e,dt),exports.addRingPulseMarker=(t,e)=>_(t,e,R),exports.addSectorScan=(t,e)=>_(t,e,nt),exports.addTargetLock=(e,i)=>{const o=i.id;let n,r={...i},a=!1;const c=document.createElement("div"),l=document.createElement("div"),s=Array.from({length:4},()=>document.createElement("div")),p=Array.from({length:4},()=>document.createElement("div"));c.dataset.effectId=o,c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.pointerEvents="none",l.style.position="absolute",l.style.inset="0",c.appendChild(l),s.forEach(t=>{t.style.position="absolute",t.style.boxSizing="border-box",l.appendChild(t)}),p.forEach(t=>{t.style.position="absolute",c.appendChild(t)});const d=new t.Marker({element:c,anchor:"center"}).setLngLat(r.center).addTo(e),f=()=>{const t=r.color??"#ff3b30",e=Math.max(24,r.size??72),i=Math.max(1,r.lineWidth??2),o=Math.min(e/2,Math.max(2*i,r.cornerLength??18)),a=Math.max(2,r.crosshairLength??10),f=Math.max(0,r.crosshairGap??5);d.setLngLat(r.center),c.style.width=`${e}px`,c.style.height=`${e}px`,c.style.display=!1===r.visible?"none":"block",c.style.opacity=`${Math.min(1,Math.max(0,r.opacity??1))}`,s.forEach(t=>{t.style.width=`${o}px`,t.style.height=`${o}px`,t.style.border="0"}),Object.assign(s[0].style,{left:"0",top:"0",borderLeft:`${i}px solid ${t}`,borderTop:`${i}px solid ${t}`}),Object.assign(s[1].style,{right:"0",top:"0",borderRight:`${i}px solid ${t}`,borderTop:`${i}px solid ${t}`}),Object.assign(s[2].style,{right:"0",bottom:"0",borderRight:`${i}px solid ${t}`,borderBottom:`${i}px solid ${t}`}),Object.assign(s[3].style,{left:"0",bottom:"0",borderLeft:`${i}px solid ${t}`,borderBottom:`${i}px solid ${t}`}),p.forEach(e=>{e.style.display=!1===r.showCrosshair?"none":"block",e.style.background=t}),Object.assign(p[0].style,{width:`${i}px`,height:`${a}px`,left:"50%",bottom:`calc(50% + ${f}px)`,transform:"translateX(-50%)"}),Object.assign(p[1].style,{width:`${i}px`,height:`${a}px`,left:"50%",top:`calc(50% + ${f}px)`,transform:"translateX(-50%)"}),Object.assign(p[2].style,{width:`${a}px`,height:`${i}px`,right:`calc(50% + ${f}px)`,top:"50%",transform:"translateY(-50%)"}),Object.assign(p[3].style,{width:`${a}px`,height:`${i}px`,left:`calc(50% + ${f}px)`,top:"50%",transform:"translateY(-50%)"}),null==n||n.cancel(),n=void 0,l.style.transform="rotate(0deg)",!1!==r.rotate&&(n=l.animate([{transform:"rotate(0deg)"},{transform:"rotate(360deg)"}],{duration:Math.max(300,r.rotationDuration??2400),iterations:1/0}))};return f(),{id:o,update(t){a||(r={...r,...t,id:o},f())},show(){a||(r={...r,visible:!0},c.style.display="block")},hide(){a||(r={...r,visible:!1},c.style.display="none")},remove(){a||(a=!0,null==n||n.cancel(),n=void 0,d.remove())}}},exports.createFenceCircle=(t,e,i)=>O(t,e,i),exports.createMap=e=>{const{style:i,tdtToken:o,...n}=e;return new t.Map({...n,style:$t(i,o)})},exports.createTiandituImageStyle=h,exports.createTiandituRasterSource=d,exports.getBaseMapStyle=m,exports.getMaplibreToolsConfig=i,exports.getOpenFreeMapStyle=c,exports.isBaseMapType=g,exports.setBaseMap=(t,e,i={})=>{const{diff:o=!1,...n}=i;t.setStyle(m(e,n),{diff:o})},exports.setMaplibreToolsConfig=t=>{Object.assign(e,t)};