cats-charts 0.1.1 → 0.1.3
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/fesm2022/cats-charts.mjs +1298 -2
- package/fesm2022/cats-charts.mjs.map +1 -1
- package/index.d.ts +247 -4
- package/package.json +3 -2
package/fesm2022/cats-charts.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { EventEmitter, Output, Input, Component, Injectable, PLATFORM_ID, ViewChild, Inject, ChangeDetectionStrategy, HostListener, inject, APP_ID } from '@angular/core';
|
|
2
|
+
import { EventEmitter, Output, Input, Component, Injectable, PLATFORM_ID, ViewChild, Inject, ChangeDetectionStrategy, HostListener, inject, APP_ID, NgZone, ViewEncapsulation } from '@angular/core';
|
|
3
3
|
import * as echarts from 'echarts/core';
|
|
4
4
|
import { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';
|
|
5
5
|
import { LineChart, BarChart as BarChart$1, PieChart as PieChart$1, CustomChart, SankeyChart as SankeyChart$1, HeatmapChart, ScatterChart, GaugeChart as GaugeChart$1 } from 'echarts/charts';
|
|
@@ -475,6 +475,7 @@ class Charts {
|
|
|
475
475
|
legendSelected = {};
|
|
476
476
|
defaultColors = ['#22c55e', '#3b82f6', '#ef4444', '#6b7280'];
|
|
477
477
|
defaultLegendColors = ['#3b82f6', '#FFC107', '#22c55e', '#ef4444'];
|
|
478
|
+
heatmapPivotColors = ['#dbeafe', '#93c5fd', '#3b82f6', '#1d4ed8', '#1e3a8a'];
|
|
478
479
|
// buildGraphicLegend(total: number | null, config: any, chartInstance: any, chartType?: string) {
|
|
479
480
|
// const pillHeight = 28;
|
|
480
481
|
// const spacing = 14;
|
|
@@ -1236,6 +1237,44 @@ class Charts {
|
|
|
1236
1237
|
return date.toLocaleDateString('en-US', { day: '2-digit', month: 'short' });
|
|
1237
1238
|
}
|
|
1238
1239
|
}
|
|
1240
|
+
formatHeatmapPivotDate(value, aggregation = 'day') {
|
|
1241
|
+
const date = value instanceof Date ? value : new Date(value);
|
|
1242
|
+
if (Number.isNaN(date.getTime()))
|
|
1243
|
+
return String(value);
|
|
1244
|
+
switch (aggregation) {
|
|
1245
|
+
case 'year':
|
|
1246
|
+
return String(date.getFullYear());
|
|
1247
|
+
case 'quarter':
|
|
1248
|
+
return `Q${Math.floor(date.getMonth() / 3) + 1} ${date.getFullYear()}`;
|
|
1249
|
+
case 'month':
|
|
1250
|
+
return date.toLocaleDateString('en-US', { month: 'short', year: 'numeric' });
|
|
1251
|
+
case 'week': {
|
|
1252
|
+
const utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
|
|
1253
|
+
const dayOfWeek = utcDate.getUTCDay() || 7;
|
|
1254
|
+
utcDate.setUTCDate(utcDate.getUTCDate() + 4 - dayOfWeek);
|
|
1255
|
+
const year = utcDate.getUTCFullYear();
|
|
1256
|
+
const yearStart = new Date(Date.UTC(year, 0, 1));
|
|
1257
|
+
const week = Math.ceil(((utcDate.getTime() - yearStart.getTime()) / 86_400_000 + 1) / 7);
|
|
1258
|
+
return `W${week} ${year}`;
|
|
1259
|
+
}
|
|
1260
|
+
case 'hour':
|
|
1261
|
+
return date.toLocaleDateString('en-US', {
|
|
1262
|
+
day: '2-digit',
|
|
1263
|
+
month: 'short',
|
|
1264
|
+
hour: '2-digit',
|
|
1265
|
+
hour12: false,
|
|
1266
|
+
});
|
|
1267
|
+
case 'minute':
|
|
1268
|
+
return date.toLocaleTimeString('en-US', {
|
|
1269
|
+
hour: '2-digit',
|
|
1270
|
+
minute: '2-digit',
|
|
1271
|
+
hour12: false,
|
|
1272
|
+
});
|
|
1273
|
+
case 'day':
|
|
1274
|
+
default:
|
|
1275
|
+
return date.toLocaleDateString('en-US', { day: '2-digit', month: 'short' });
|
|
1276
|
+
}
|
|
1277
|
+
}
|
|
1239
1278
|
getIsoWeek(date) {
|
|
1240
1279
|
const utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
|
|
1241
1280
|
const dayOfWeek = utcDate.getUTCDay() || 7;
|
|
@@ -4937,6 +4976,719 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
4937
4976
|
type: Output
|
|
4938
4977
|
}] } });
|
|
4939
4978
|
|
|
4979
|
+
echarts.use([
|
|
4980
|
+
HeatmapChart,
|
|
4981
|
+
GridComponent,
|
|
4982
|
+
LegendComponent,
|
|
4983
|
+
TitleComponent,
|
|
4984
|
+
TooltipComponent,
|
|
4985
|
+
VisualMapComponent,
|
|
4986
|
+
CanvasRenderer,
|
|
4987
|
+
]);
|
|
4988
|
+
class HeatmapPivot {
|
|
4989
|
+
chartService;
|
|
4990
|
+
cdr;
|
|
4991
|
+
chartContainer;
|
|
4992
|
+
config = { xAxisData: [], yAxisData: [], series: [] };
|
|
4993
|
+
theme;
|
|
4994
|
+
events = [];
|
|
4995
|
+
contextMenuOptions = [];
|
|
4996
|
+
showContextMenu = false;
|
|
4997
|
+
contextMenuClick = new EventEmitter();
|
|
4998
|
+
chartEvent = new EventEmitter();
|
|
4999
|
+
legendEvent = new EventEmitter();
|
|
5000
|
+
chartOption = {};
|
|
5001
|
+
chartInstance;
|
|
5002
|
+
cardPosition = { x: 0, y: 0 };
|
|
5003
|
+
openCard = false;
|
|
5004
|
+
columnTotals = [];
|
|
5005
|
+
xAxisState;
|
|
5006
|
+
yAxisState;
|
|
5007
|
+
yAxisLabelWidth;
|
|
5008
|
+
totalLabelWidth;
|
|
5009
|
+
normalizedSeriesData = [];
|
|
5010
|
+
eventCleanup = [];
|
|
5011
|
+
constructor(chartService, cdr) {
|
|
5012
|
+
this.chartService = chartService;
|
|
5013
|
+
this.cdr = cdr;
|
|
5014
|
+
}
|
|
5015
|
+
get deafultColors() {
|
|
5016
|
+
return this.chartService.heatmapPivotColors;
|
|
5017
|
+
}
|
|
5018
|
+
get hasSideLegendWidth() {
|
|
5019
|
+
return this.isSideLegend && !!this.config.customLegend?.maxWidth;
|
|
5020
|
+
}
|
|
5021
|
+
get legendShellMaxWidth() {
|
|
5022
|
+
return this.isSideLegend ? (this.config.customLegend?.maxWidth ?? null) : null;
|
|
5023
|
+
}
|
|
5024
|
+
get isSideLegend() {
|
|
5025
|
+
return (this.config.customLegend?.position === 'left' ||
|
|
5026
|
+
this.config.customLegend?.position === 'right');
|
|
5027
|
+
}
|
|
5028
|
+
ngOnInit() {
|
|
5029
|
+
this.buildOption();
|
|
5030
|
+
}
|
|
5031
|
+
ngOnChanges(changes) {
|
|
5032
|
+
if (!this.config)
|
|
5033
|
+
return;
|
|
5034
|
+
this.buildOption();
|
|
5035
|
+
if (changes['events'] || changes['showContextMenu']) {
|
|
5036
|
+
this.bindEvents();
|
|
5037
|
+
}
|
|
5038
|
+
// NgxEchartsDirective recreates the chart when its theme input changes.
|
|
5039
|
+
}
|
|
5040
|
+
buildOption() {
|
|
5041
|
+
const config = this.config;
|
|
5042
|
+
this.xAxisState = this.buildAxisState('x');
|
|
5043
|
+
this.yAxisState = this.buildAxisState('y');
|
|
5044
|
+
const yAxisLabelWidth = this.resolveYAxisLabelWidth();
|
|
5045
|
+
this.yAxisLabelWidth = yAxisLabelWidth;
|
|
5046
|
+
this.totalLabelWidth = this.resolveTotalLabelWidth(yAxisLabelWidth);
|
|
5047
|
+
this.columnTotals = this.xAxisState.values.map(() => 0);
|
|
5048
|
+
const series = (config.series ?? []).map((item) => ({
|
|
5049
|
+
...item,
|
|
5050
|
+
type: 'heatmap',
|
|
5051
|
+
coordinateSystem: 'cartesian2d',
|
|
5052
|
+
encode: { x: 0, y: 1, tooltip: [2] },
|
|
5053
|
+
data: this.normalizeData(item.data ?? []),
|
|
5054
|
+
itemStyle: {
|
|
5055
|
+
borderColor: '#ffffff',
|
|
5056
|
+
borderWidth: Math.max(config.cellGap ?? 6, 0),
|
|
5057
|
+
borderRadius: Math.max(config.cellBorderRadius ?? 3, 0),
|
|
5058
|
+
...item['itemStyle'],
|
|
5059
|
+
},
|
|
5060
|
+
label: {
|
|
5061
|
+
show: config.showLabel ?? true,
|
|
5062
|
+
position: 'inside',
|
|
5063
|
+
color: config.labelColor ?? '#252a31',
|
|
5064
|
+
fontSize: 14,
|
|
5065
|
+
formatter: config.labelFormatter ??
|
|
5066
|
+
((params) => {
|
|
5067
|
+
const value = params.value?.[2];
|
|
5068
|
+
return typeof value === 'number' ? this.chartService.compactValueFormat(value) : '-';
|
|
5069
|
+
}),
|
|
5070
|
+
...item['label'],
|
|
5071
|
+
},
|
|
5072
|
+
emphasis: { disabled: true, ...item['emphasis'] },
|
|
5073
|
+
}));
|
|
5074
|
+
this.normalizedSeriesData = series.map((item) => item.data);
|
|
5075
|
+
let min = Infinity;
|
|
5076
|
+
let max = -Infinity;
|
|
5077
|
+
for (const item of series) {
|
|
5078
|
+
for (const dataItem of item.data) {
|
|
5079
|
+
const point = this.pointValue(dataItem);
|
|
5080
|
+
const value = point[2];
|
|
5081
|
+
if (!Number.isFinite(value))
|
|
5082
|
+
continue;
|
|
5083
|
+
min = Math.min(min, value);
|
|
5084
|
+
max = Math.max(max, value);
|
|
5085
|
+
const column = Number(point[0]);
|
|
5086
|
+
if (this.columnTotals[column] !== undefined)
|
|
5087
|
+
this.columnTotals[column] += value;
|
|
5088
|
+
}
|
|
5089
|
+
}
|
|
5090
|
+
this.chartOption = {
|
|
5091
|
+
backgroundColor: config.backgroundColor ?? 'transparent',
|
|
5092
|
+
color: config.colors ?? this.deafultColors,
|
|
5093
|
+
title: [
|
|
5094
|
+
{
|
|
5095
|
+
show: config.showTitle ?? !!config.title,
|
|
5096
|
+
text: config.title,
|
|
5097
|
+
left: config.titlePosition ?? 'center',
|
|
5098
|
+
},
|
|
5099
|
+
...(config.showTotals !== false
|
|
5100
|
+
? [
|
|
5101
|
+
{
|
|
5102
|
+
id: 'heatmap-pivot-total-label',
|
|
5103
|
+
text: config.totalLabel ?? 'Total',
|
|
5104
|
+
left: 8,
|
|
5105
|
+
bottom: 12,
|
|
5106
|
+
padding: 0,
|
|
5107
|
+
textStyle: {
|
|
5108
|
+
color: '#182230',
|
|
5109
|
+
fontFamily: 'Arial, sans-serif',
|
|
5110
|
+
fontSize: 14,
|
|
5111
|
+
fontWeight: 600,
|
|
5112
|
+
width: this.totalLabelWidth,
|
|
5113
|
+
overflow: 'truncate',
|
|
5114
|
+
ellipsis: '...',
|
|
5115
|
+
},
|
|
5116
|
+
},
|
|
5117
|
+
]
|
|
5118
|
+
: []),
|
|
5119
|
+
],
|
|
5120
|
+
tooltip: {
|
|
5121
|
+
show: config.showTooltip ?? true,
|
|
5122
|
+
trigger: 'item',
|
|
5123
|
+
backgroundColor: '#ffffff',
|
|
5124
|
+
borderWidth: 0,
|
|
5125
|
+
padding: [10, 12],
|
|
5126
|
+
confine: true,
|
|
5127
|
+
textStyle: { color: '#434a51', fontFamily: 'Arial, sans-serif', fontSize: 12 },
|
|
5128
|
+
borderRadius: 6,
|
|
5129
|
+
shadowBlur: 16,
|
|
5130
|
+
shadowColor: 'rgba(16,24,40,0.12)',
|
|
5131
|
+
shadowOffsetY: 5,
|
|
5132
|
+
formatter: (params) => config.tooltipFormatter
|
|
5133
|
+
? config.tooltipFormatter(params, config)
|
|
5134
|
+
: this.formatTooltip(params),
|
|
5135
|
+
...config.tooltip,
|
|
5136
|
+
},
|
|
5137
|
+
legend: {
|
|
5138
|
+
show: !config.hideLegend && !config.customLegend,
|
|
5139
|
+
type: 'scroll',
|
|
5140
|
+
top: (config.showTitle ?? !!config.title) ? 30 : 0,
|
|
5141
|
+
icon: 'roundRect',
|
|
5142
|
+
textStyle: { color: '#434a51', fontSize: 14 },
|
|
5143
|
+
...config.legend,
|
|
5144
|
+
data: config.legend?.data ?? series.map((item) => item.name),
|
|
5145
|
+
selected: { ...this.readLegendSelected(), ...config.legend?.selected },
|
|
5146
|
+
selectedMode: config.legend?.selectedMode ??
|
|
5147
|
+
(config.customLegend?.selectionMode === 'exclusive' ? 'single' : true),
|
|
5148
|
+
},
|
|
5149
|
+
grid: [
|
|
5150
|
+
{
|
|
5151
|
+
left: this.labelGridLeft(yAxisLabelWidth),
|
|
5152
|
+
right: 0,
|
|
5153
|
+
top: 0,
|
|
5154
|
+
bottom: config.showTotals !== false ? 41 : 0,
|
|
5155
|
+
...config.grid,
|
|
5156
|
+
},
|
|
5157
|
+
...(config.showTotals !== false
|
|
5158
|
+
? [
|
|
5159
|
+
{
|
|
5160
|
+
left: 0,
|
|
5161
|
+
right: 0,
|
|
5162
|
+
bottom: 1,
|
|
5163
|
+
height: 40,
|
|
5164
|
+
containLabel: false,
|
|
5165
|
+
},
|
|
5166
|
+
]
|
|
5167
|
+
: []),
|
|
5168
|
+
],
|
|
5169
|
+
xAxis: [
|
|
5170
|
+
{
|
|
5171
|
+
position: 'top',
|
|
5172
|
+
axisLine: { show: false },
|
|
5173
|
+
axisTick: { show: false },
|
|
5174
|
+
splitLine: { show: false },
|
|
5175
|
+
...this.axisOptions('x'),
|
|
5176
|
+
axisLabel: {
|
|
5177
|
+
interval: 'auto',
|
|
5178
|
+
hideOverlap: true,
|
|
5179
|
+
margin: 14,
|
|
5180
|
+
color: '#434a51',
|
|
5181
|
+
fontFamily: 'Arial, sans-serif',
|
|
5182
|
+
fontSize: 14,
|
|
5183
|
+
formatter: this.xAxisState.type === 'time'
|
|
5184
|
+
? (value) => this.formatAxisValue('x', value)
|
|
5185
|
+
: undefined,
|
|
5186
|
+
...config.xAxis?.axisLabel,
|
|
5187
|
+
},
|
|
5188
|
+
},
|
|
5189
|
+
...this.totalsAxisOptions(),
|
|
5190
|
+
],
|
|
5191
|
+
yAxis: [
|
|
5192
|
+
{
|
|
5193
|
+
inverse: true,
|
|
5194
|
+
axisLine: { show: false },
|
|
5195
|
+
axisTick: { show: false },
|
|
5196
|
+
splitLine: { show: false },
|
|
5197
|
+
...this.axisOptions('y'),
|
|
5198
|
+
axisLabel: {
|
|
5199
|
+
interval: 0,
|
|
5200
|
+
margin: yAxisLabelWidth + 16,
|
|
5201
|
+
align: 'left',
|
|
5202
|
+
color: '#434a51',
|
|
5203
|
+
fontFamily: 'Arial, sans-serif',
|
|
5204
|
+
fontSize: 14,
|
|
5205
|
+
formatter: this.yAxisState.type === 'time'
|
|
5206
|
+
? (value) => this.formatAxisValue('y', value)
|
|
5207
|
+
: undefined,
|
|
5208
|
+
...config.yAxis?.axisLabel,
|
|
5209
|
+
width: yAxisLabelWidth,
|
|
5210
|
+
overflow: config.yAxis?.axisLabel?.overflow ?? 'truncate',
|
|
5211
|
+
ellipsis: config.yAxis?.axisLabel?.ellipsis ?? '...',
|
|
5212
|
+
},
|
|
5213
|
+
},
|
|
5214
|
+
...(config.showTotals !== false
|
|
5215
|
+
? [
|
|
5216
|
+
{
|
|
5217
|
+
gridIndex: 1,
|
|
5218
|
+
type: 'value',
|
|
5219
|
+
min: 0,
|
|
5220
|
+
max: 1,
|
|
5221
|
+
show: false,
|
|
5222
|
+
},
|
|
5223
|
+
]
|
|
5224
|
+
: []),
|
|
5225
|
+
],
|
|
5226
|
+
visualMap: this.buildVisualMaps(min, max),
|
|
5227
|
+
series,
|
|
5228
|
+
};
|
|
5229
|
+
}
|
|
5230
|
+
resolveYAxisLabelWidth() {
|
|
5231
|
+
const style = this.config.yAxis?.axisLabel;
|
|
5232
|
+
const chartWidth = this.chartContainer?.nativeElement.getBoundingClientRect().width
|
|
5233
|
+
|| (this.chartInstance && !this.chartInstance.isDisposed() ? this.chartInstance.getWidth() : 0)
|
|
5234
|
+
|| 360;
|
|
5235
|
+
const defaultMaxWidth = Math.max(100, Math.min(240, Math.round(chartWidth * 0.22)));
|
|
5236
|
+
const minWidth = Math.max(0, this.config.yAxisLabelMinWidth
|
|
5237
|
+
?? Math.min(50, this.config.yAxisLabelMaxWidth ?? defaultMaxWidth));
|
|
5238
|
+
const maxWidth = Math.max(minWidth, this.config.yAxisLabelMaxWidth ?? defaultMaxWidth);
|
|
5239
|
+
if (typeof style?.width === 'number' && Number.isFinite(style.width)) {
|
|
5240
|
+
return Math.min(maxWidth, Math.max(minWidth, style.width));
|
|
5241
|
+
}
|
|
5242
|
+
const font = `${style?.fontWeight ?? 400} ${style?.fontSize ?? 14}px ${style?.fontFamily ?? 'Arial, sans-serif'}`;
|
|
5243
|
+
let width = minWidth;
|
|
5244
|
+
this.yAxisState.values.forEach((_value, index) => {
|
|
5245
|
+
width = Math.max(width, echarts.format.getTextRect(this.formatAxisValue('y', index), font).width);
|
|
5246
|
+
});
|
|
5247
|
+
if (this.config.showTotals !== false) {
|
|
5248
|
+
width = Math.max(width, echarts.format.getTextRect(this.config.totalLabel ?? 'Total', '600 14px Arial, sans-serif').width);
|
|
5249
|
+
}
|
|
5250
|
+
return Math.min(maxWidth, width);
|
|
5251
|
+
}
|
|
5252
|
+
labelGridLeft(width) {
|
|
5253
|
+
const yAxisHidden = this.config.yAxis?.['show'] === false || this.config.yAxis?.axisLabel?.show === false;
|
|
5254
|
+
return yAxisHidden && this.config.showTotals === false ? 0 : width + 16;
|
|
5255
|
+
}
|
|
5256
|
+
resolveTotalLabelWidth(labelWidth) {
|
|
5257
|
+
const configuredLeft = this.config.grid?.left;
|
|
5258
|
+
const chartWidth = this.chartContainer?.nativeElement.getBoundingClientRect().width
|
|
5259
|
+
|| (this.chartInstance && !this.chartInstance.isDisposed() ? this.chartInstance.getWidth() : 0)
|
|
5260
|
+
|| 360;
|
|
5261
|
+
const defaultLeft = this.labelGridLeft(labelWidth);
|
|
5262
|
+
const left = configuredLeft === undefined ? defaultLeft
|
|
5263
|
+
: typeof configuredLeft === 'number' ? configuredLeft
|
|
5264
|
+
: configuredLeft.endsWith('%') ? parseFloat(configuredLeft) / 100 * chartWidth
|
|
5265
|
+
: parseFloat(configuredLeft);
|
|
5266
|
+
// Reserve eight pixels on each side of the heading before the total values.
|
|
5267
|
+
return Math.max(0, Math.min(labelWidth, (Number.isFinite(left) ? left : defaultLeft) - 16));
|
|
5268
|
+
}
|
|
5269
|
+
buildVisualMaps(min, max) {
|
|
5270
|
+
const config = this.config;
|
|
5271
|
+
const base = {
|
|
5272
|
+
show: false,
|
|
5273
|
+
min: config.min ?? (Number.isFinite(min) ? min : 0),
|
|
5274
|
+
max: config.max ?? (Number.isFinite(max) ? max : 100),
|
|
5275
|
+
dimension: 2,
|
|
5276
|
+
calculable: true,
|
|
5277
|
+
orient: 'horizontal',
|
|
5278
|
+
left: 'center',
|
|
5279
|
+
bottom: 0,
|
|
5280
|
+
inRange: { color: config.colors ?? this.deafultColors },
|
|
5281
|
+
};
|
|
5282
|
+
const rules = this.visualMapOptions();
|
|
5283
|
+
if (rules['type'] !== 'piecewise' && !rules['pieces'] && !rules['categories']) {
|
|
5284
|
+
return { ...base, ...rules };
|
|
5285
|
+
}
|
|
5286
|
+
return [
|
|
5287
|
+
{ ...base, type: 'continuous', show: false },
|
|
5288
|
+
{
|
|
5289
|
+
...base,
|
|
5290
|
+
...rules,
|
|
5291
|
+
type: 'piecewise',
|
|
5292
|
+
inRange: {
|
|
5293
|
+
colorAlpha: 1,
|
|
5294
|
+
...base.inRange,
|
|
5295
|
+
...(rules['inRange'] && typeof rules['inRange'] === 'object' ? rules['inRange'] : {}),
|
|
5296
|
+
},
|
|
5297
|
+
// An empty mapping preserves the color assigned by the continuous map.
|
|
5298
|
+
outOfRange: rules['outOfRange'] ?? {},
|
|
5299
|
+
},
|
|
5300
|
+
];
|
|
5301
|
+
}
|
|
5302
|
+
visualMapOptions() {
|
|
5303
|
+
const config = this.config.visualMap;
|
|
5304
|
+
if (!config?.pieces)
|
|
5305
|
+
return config ?? {};
|
|
5306
|
+
return {
|
|
5307
|
+
...config,
|
|
5308
|
+
type: config.type ?? 'piecewise',
|
|
5309
|
+
pieces: config.pieces.flatMap((piece) => {
|
|
5310
|
+
const { eq, neq, ne, opacity, ...options } = piece;
|
|
5311
|
+
const native = {
|
|
5312
|
+
...options,
|
|
5313
|
+
...(opacity !== undefined ? {
|
|
5314
|
+
colorAlpha: Math.min(100, Math.max(0, Number.isFinite(opacity) ? opacity : 100)) / 100,
|
|
5315
|
+
} : {}),
|
|
5316
|
+
};
|
|
5317
|
+
if (eq !== undefined)
|
|
5318
|
+
return [{ ...native, value: eq }];
|
|
5319
|
+
const excluded = neq ?? ne;
|
|
5320
|
+
if (excluded === undefined)
|
|
5321
|
+
return [native];
|
|
5322
|
+
if (native.value !== undefined)
|
|
5323
|
+
return native.value === excluded ? [] : [native];
|
|
5324
|
+
const { gt, gte, min, lt, lte, max, ...style } = native;
|
|
5325
|
+
const lower = Math.max(gt ?? -Infinity, gte ?? -Infinity, min ?? -Infinity);
|
|
5326
|
+
const upper = Math.min(lt ?? Infinity, lte ?? Infinity, max ?? Infinity);
|
|
5327
|
+
const lowerOpen = gt === lower;
|
|
5328
|
+
const upperOpen = lt === upper;
|
|
5329
|
+
const range = (start, end, startOpen, endOpen) => {
|
|
5330
|
+
if (start > end || (start === end && (startOpen || endOpen)))
|
|
5331
|
+
return [];
|
|
5332
|
+
return [
|
|
5333
|
+
{
|
|
5334
|
+
...style,
|
|
5335
|
+
...(Number.isFinite(start)
|
|
5336
|
+
? startOpen && start === excluded
|
|
5337
|
+
? // ECharts joins touching pieces; use the next representable number
|
|
5338
|
+
// so the excluded value cannot be reintroduced at their boundary.
|
|
5339
|
+
{ gte: this.nextNumericValue(start) }
|
|
5340
|
+
: { [startOpen ? 'gt' : 'gte']: start }
|
|
5341
|
+
: {}),
|
|
5342
|
+
...(Number.isFinite(end) ? { [endOpen ? 'lt' : 'lte']: end } : {}),
|
|
5343
|
+
},
|
|
5344
|
+
];
|
|
5345
|
+
};
|
|
5346
|
+
return [
|
|
5347
|
+
...range(lower, Math.min(upper, excluded), lowerOpen, excluded <= upper || upperOpen),
|
|
5348
|
+
...range(Math.max(lower, excluded), upper, excluded >= lower || lowerOpen, upperOpen),
|
|
5349
|
+
];
|
|
5350
|
+
}),
|
|
5351
|
+
};
|
|
5352
|
+
}
|
|
5353
|
+
nextNumericValue(value) {
|
|
5354
|
+
if (value === 0)
|
|
5355
|
+
return Number.MIN_VALUE;
|
|
5356
|
+
const buffer = new DataView(new ArrayBuffer(8));
|
|
5357
|
+
buffer.setFloat64(0, value);
|
|
5358
|
+
buffer.setBigUint64(0, buffer.getBigUint64(0) + (value > 0 ? 1n : -1n));
|
|
5359
|
+
return buffer.getFloat64(0);
|
|
5360
|
+
}
|
|
5361
|
+
totalsAxisOptions() {
|
|
5362
|
+
if (this.config.showTotals === false)
|
|
5363
|
+
return [];
|
|
5364
|
+
const options = this.axisOptions('x');
|
|
5365
|
+
const axisLine = { show: true, onZero: false, lineStyle: { color: '#e4e7ec', width: 1 } };
|
|
5366
|
+
const borderAxis = {
|
|
5367
|
+
gridIndex: 1,
|
|
5368
|
+
z: 10,
|
|
5369
|
+
type: 'category',
|
|
5370
|
+
data: [''],
|
|
5371
|
+
boundaryGap: true,
|
|
5372
|
+
axisLine,
|
|
5373
|
+
axisLabel: { show: false },
|
|
5374
|
+
axisTick: { show: false },
|
|
5375
|
+
splitLine: { show: false },
|
|
5376
|
+
axisPointer: { show: false },
|
|
5377
|
+
};
|
|
5378
|
+
const base = {
|
|
5379
|
+
...options,
|
|
5380
|
+
show: true,
|
|
5381
|
+
position: 'bottom',
|
|
5382
|
+
axisLine: { show: false },
|
|
5383
|
+
axisTick: { show: false },
|
|
5384
|
+
splitLine: { show: false },
|
|
5385
|
+
axisPointer: { show: false },
|
|
5386
|
+
};
|
|
5387
|
+
return [
|
|
5388
|
+
{
|
|
5389
|
+
...base,
|
|
5390
|
+
axisLabel: {
|
|
5391
|
+
show: true,
|
|
5392
|
+
interval: 0,
|
|
5393
|
+
margin: 13,
|
|
5394
|
+
color: '#182230',
|
|
5395
|
+
fontFamily: 'Arial, sans-serif',
|
|
5396
|
+
fontSize: 14,
|
|
5397
|
+
fontWeight: 600,
|
|
5398
|
+
formatter: (value) => {
|
|
5399
|
+
const index = this.xAxisState.values.findIndex((bucket) => String(bucket) === value);
|
|
5400
|
+
const total = this.columnTotals[index] ?? 0;
|
|
5401
|
+
return this.config.totalFormatter ? this.config.totalFormatter(total) : String(total);
|
|
5402
|
+
},
|
|
5403
|
+
},
|
|
5404
|
+
},
|
|
5405
|
+
{ ...borderAxis, position: 'top' },
|
|
5406
|
+
{ ...borderAxis, position: 'bottom' },
|
|
5407
|
+
];
|
|
5408
|
+
}
|
|
5409
|
+
pointValue(point) {
|
|
5410
|
+
return Array.isArray(point) ? point : point.value;
|
|
5411
|
+
}
|
|
5412
|
+
normalizeData(data) {
|
|
5413
|
+
return data.flatMap((point) => {
|
|
5414
|
+
const [x, y, value] = this.pointValue(point);
|
|
5415
|
+
const normalized = [
|
|
5416
|
+
this.normalizeCoordinate('x', x),
|
|
5417
|
+
this.normalizeCoordinate('y', y),
|
|
5418
|
+
value,
|
|
5419
|
+
];
|
|
5420
|
+
if (!normalized.every(Number.isFinite) || normalized[0] < 0 || normalized[1] < 0)
|
|
5421
|
+
return [];
|
|
5422
|
+
return [Array.isArray(point) ? normalized : { ...point, value: normalized }];
|
|
5423
|
+
});
|
|
5424
|
+
}
|
|
5425
|
+
buildAxisState(axis) {
|
|
5426
|
+
const options = axis === 'x' ? this.config.xAxis : this.config.yAxis;
|
|
5427
|
+
const axisData = axis === 'x' ? this.config.xAxisData : this.config.yAxisData;
|
|
5428
|
+
const type = options?.type ?? 'category';
|
|
5429
|
+
const coordinates = (this.config.series ?? []).flatMap((series) => (series.data ?? []).map((point) => this.pointValue(point)[axis === 'x' ? 0 : 1]));
|
|
5430
|
+
const resolvedCoordinates = coordinates.map((value) => typeof value === 'number' &&
|
|
5431
|
+
Number.isInteger(value) &&
|
|
5432
|
+
value >= 0 &&
|
|
5433
|
+
value < (axisData?.length ?? 0)
|
|
5434
|
+
? axisData[value]
|
|
5435
|
+
: value);
|
|
5436
|
+
const axisValues = type === 'time'
|
|
5437
|
+
? [...(axisData ?? []), ...resolvedCoordinates]
|
|
5438
|
+
: axisData?.length
|
|
5439
|
+
? axisData
|
|
5440
|
+
: coordinates;
|
|
5441
|
+
const values = [
|
|
5442
|
+
...new Set(axisValues.map((value) => (type === 'time' ? this.timestamp(value) : String(value)))),
|
|
5443
|
+
].filter((value) => type !== 'time' || Number.isFinite(value));
|
|
5444
|
+
if (type === 'time')
|
|
5445
|
+
values.sort((a, b) => a - b);
|
|
5446
|
+
return { type, values };
|
|
5447
|
+
}
|
|
5448
|
+
timestamp(value) {
|
|
5449
|
+
return value instanceof Date ? value.getTime() : new Date(value).getTime();
|
|
5450
|
+
}
|
|
5451
|
+
normalizeCoordinate(axis, value) {
|
|
5452
|
+
const state = axis === 'x' ? this.xAxisState : this.yAxisState;
|
|
5453
|
+
const axisData = axis === 'x' ? this.config.xAxisData : this.config.yAxisData;
|
|
5454
|
+
const indexed = typeof value === 'number' &&
|
|
5455
|
+
Number.isInteger(value) &&
|
|
5456
|
+
value >= 0 &&
|
|
5457
|
+
value < (axisData?.length ?? 0);
|
|
5458
|
+
const resolved = indexed ? axisData[value] : value;
|
|
5459
|
+
return state.values.indexOf(state.type === 'time' ? this.timestamp(resolved) : String(resolved));
|
|
5460
|
+
}
|
|
5461
|
+
axisOptions(axis) {
|
|
5462
|
+
const state = axis === 'x' ? this.xAxisState : this.yAxisState;
|
|
5463
|
+
const options = (axis === 'x' ? this.config.xAxis : this.config.yAxis) ?? {};
|
|
5464
|
+
const { type, minInterval, min, max, ...styles } = options;
|
|
5465
|
+
let bucketMin = min;
|
|
5466
|
+
let bucketMax = max;
|
|
5467
|
+
if (state.type === 'time') {
|
|
5468
|
+
if (min !== undefined) {
|
|
5469
|
+
const timestamp = this.timestamp(min);
|
|
5470
|
+
bucketMin =
|
|
5471
|
+
min === 'dataMin' ? 0 : state.values.findIndex((value) => Number(value) >= timestamp);
|
|
5472
|
+
if (bucketMin === -1)
|
|
5473
|
+
bucketMin = state.values.length;
|
|
5474
|
+
}
|
|
5475
|
+
if (max !== undefined) {
|
|
5476
|
+
const timestamp = this.timestamp(max);
|
|
5477
|
+
bucketMax =
|
|
5478
|
+
max === 'dataMax'
|
|
5479
|
+
? state.values.length - 1
|
|
5480
|
+
: state.values.reduce((last, value, index) => (Number(value) <= timestamp ? index : last), -1);
|
|
5481
|
+
}
|
|
5482
|
+
}
|
|
5483
|
+
// Native Cartesian heatmaps require category axes. Time values remain sorted
|
|
5484
|
+
// buckets and use the pivot date formatter for their displayed labels.
|
|
5485
|
+
return {
|
|
5486
|
+
...styles,
|
|
5487
|
+
type: 'category',
|
|
5488
|
+
boundaryGap: true,
|
|
5489
|
+
data: state.values.map(String),
|
|
5490
|
+
min: bucketMin,
|
|
5491
|
+
max: bucketMax,
|
|
5492
|
+
};
|
|
5493
|
+
}
|
|
5494
|
+
formatAxisValue(axis, value) {
|
|
5495
|
+
const state = axis === 'x' ? this.xAxisState : this.yAxisState;
|
|
5496
|
+
const index = typeof value === 'number'
|
|
5497
|
+
? value
|
|
5498
|
+
: state.values.findIndex((bucket) => String(bucket) === value);
|
|
5499
|
+
const resolved = state.values[index] ?? value;
|
|
5500
|
+
if (state.type === 'time') {
|
|
5501
|
+
return this.chartService.formatHeatmapPivotDate(resolved, axis === 'x' ? this.config.XAxisAggregation : this.config.YAxisAggregation);
|
|
5502
|
+
}
|
|
5503
|
+
return String(resolved);
|
|
5504
|
+
}
|
|
5505
|
+
formatTooltip(params) {
|
|
5506
|
+
const [x, y] = params.value ?? [];
|
|
5507
|
+
const rows = [
|
|
5508
|
+
['Row Dimension', this.formatAxisValue('x', x)],
|
|
5509
|
+
['Column Dimension', this.formatAxisValue('y', y)],
|
|
5510
|
+
];
|
|
5511
|
+
const selected = this.readLegendSelected();
|
|
5512
|
+
this.normalizedSeriesData.forEach((data, index) => {
|
|
5513
|
+
const series = this.config.series[index];
|
|
5514
|
+
if (selected[series.name] === false)
|
|
5515
|
+
return;
|
|
5516
|
+
const match = data.find((point) => {
|
|
5517
|
+
const value = this.pointValue(point);
|
|
5518
|
+
return value[0] === x && value[1] === y;
|
|
5519
|
+
});
|
|
5520
|
+
if (match) {
|
|
5521
|
+
rows.push([
|
|
5522
|
+
series.name,
|
|
5523
|
+
String(this.chartService.formatTooltipValue(this.pointValue(match)[2], this.config.tooltipCompactValue)),
|
|
5524
|
+
]);
|
|
5525
|
+
}
|
|
5526
|
+
});
|
|
5527
|
+
const extra = params.data?.[this.config.extraTooltipKey ?? 'tooltip'];
|
|
5528
|
+
if (extra && typeof extra === 'object' && !Array.isArray(extra)) {
|
|
5529
|
+
for (const [key, value] of Object.entries(extra)) {
|
|
5530
|
+
rows.push([
|
|
5531
|
+
key,
|
|
5532
|
+
typeof value === 'number'
|
|
5533
|
+
? String(this.chartService.formatTooltipValue(value, this.config.tooltipCompactValue))
|
|
5534
|
+
: String(value ?? '-'),
|
|
5535
|
+
]);
|
|
5536
|
+
}
|
|
5537
|
+
}
|
|
5538
|
+
return `<div style="display:grid;grid-template-columns:112px 8px minmax(170px,1fr);row-gap:5px;line-height:16px">${rows
|
|
5539
|
+
.map(([label, content]) => `<span style="font-weight:600">${echarts.format.encodeHTML(String(label))}</span><span>:</span><span>${echarts.format.encodeHTML(String(content ?? '-'))}</span>`)
|
|
5540
|
+
.join('')}</div>`;
|
|
5541
|
+
}
|
|
5542
|
+
onChartInit(chart) {
|
|
5543
|
+
this.unbindEvents();
|
|
5544
|
+
this.chartInstance = chart;
|
|
5545
|
+
// Apply the width after ngx-echarts has installed the initial chart options.
|
|
5546
|
+
queueMicrotask(() => {
|
|
5547
|
+
if (this.chartInstance === chart)
|
|
5548
|
+
this.refreshLabelWidth();
|
|
5549
|
+
});
|
|
5550
|
+
this.bindEvents();
|
|
5551
|
+
this.cdr.markForCheck();
|
|
5552
|
+
}
|
|
5553
|
+
refreshLabelWidth() {
|
|
5554
|
+
const chart = this.chartInstance;
|
|
5555
|
+
if (!chart || chart.isDisposed() || !this.yAxisState)
|
|
5556
|
+
return;
|
|
5557
|
+
const width = this.resolveYAxisLabelWidth();
|
|
5558
|
+
const totalWidth = this.resolveTotalLabelWidth(width);
|
|
5559
|
+
if (width === this.yAxisLabelWidth && totalWidth === this.totalLabelWidth)
|
|
5560
|
+
return;
|
|
5561
|
+
const update = {
|
|
5562
|
+
yAxis: [{ axisLabel: {
|
|
5563
|
+
width,
|
|
5564
|
+
margin: this.config.yAxis?.axisLabel?.margin ?? width + 16,
|
|
5565
|
+
} }],
|
|
5566
|
+
};
|
|
5567
|
+
if (this.config.showTotals !== false) {
|
|
5568
|
+
update['title'] = [{ id: 'heatmap-pivot-total-label', textStyle: { width: totalWidth } }];
|
|
5569
|
+
}
|
|
5570
|
+
if (this.config.grid?.left === undefined) {
|
|
5571
|
+
update['grid'] = [{
|
|
5572
|
+
left: this.labelGridLeft(width),
|
|
5573
|
+
}];
|
|
5574
|
+
}
|
|
5575
|
+
chart.setOption(update, { lazyUpdate: true, silent: true });
|
|
5576
|
+
this.yAxisLabelWidth = width;
|
|
5577
|
+
this.totalLabelWidth = totalWidth;
|
|
5578
|
+
}
|
|
5579
|
+
bindEvents() {
|
|
5580
|
+
this.unbindEvents();
|
|
5581
|
+
const chart = this.chartInstance;
|
|
5582
|
+
if (!chart || chart.isDisposed())
|
|
5583
|
+
return;
|
|
5584
|
+
const eventNames = new Set(this.events);
|
|
5585
|
+
if (this.showContextMenu)
|
|
5586
|
+
eventNames.add('contextmenu');
|
|
5587
|
+
for (const eventName of eventNames) {
|
|
5588
|
+
const handler = (params) => {
|
|
5589
|
+
if (eventName === 'contextmenu') {
|
|
5590
|
+
this.openContextMenu(params?.event?.event);
|
|
5591
|
+
}
|
|
5592
|
+
this.chartEvent.emit({ type: eventName, data: params });
|
|
5593
|
+
};
|
|
5594
|
+
chart.on(eventName, handler);
|
|
5595
|
+
this.eventCleanup.push(() => {
|
|
5596
|
+
if (!chart.isDisposed())
|
|
5597
|
+
chart.off(eventName, handler);
|
|
5598
|
+
});
|
|
5599
|
+
if (eventName === 'click' || eventName === 'contextmenu') {
|
|
5600
|
+
const zr = chart.getZr();
|
|
5601
|
+
const backgroundHandler = (event) => {
|
|
5602
|
+
if (event.target)
|
|
5603
|
+
return;
|
|
5604
|
+
if (eventName === 'contextmenu') {
|
|
5605
|
+
this.openContextMenu(event.event);
|
|
5606
|
+
this.chartEvent.emit({
|
|
5607
|
+
type: 'contextmenu',
|
|
5608
|
+
data: { ...event, isZrEvent: true },
|
|
5609
|
+
});
|
|
5610
|
+
}
|
|
5611
|
+
else {
|
|
5612
|
+
this.chartEvent.emit({ type: 'blur', data: { ...event, type: 'blur' } });
|
|
5613
|
+
}
|
|
5614
|
+
};
|
|
5615
|
+
zr.on(eventName, backgroundHandler);
|
|
5616
|
+
this.eventCleanup.push(() => {
|
|
5617
|
+
if (!chart.isDisposed())
|
|
5618
|
+
zr.off(eventName, backgroundHandler);
|
|
5619
|
+
});
|
|
5620
|
+
}
|
|
5621
|
+
}
|
|
5622
|
+
}
|
|
5623
|
+
openContextMenu(event) {
|
|
5624
|
+
if (!event || !this.chartInstance || this.chartInstance.isDisposed())
|
|
5625
|
+
return;
|
|
5626
|
+
event.preventDefault();
|
|
5627
|
+
const rect = this.chartInstance.getDom().getBoundingClientRect();
|
|
5628
|
+
this.cardPosition = { x: event.clientX - rect.left, y: event.clientY - rect.top };
|
|
5629
|
+
this.openCard = this.showContextMenu || this.contextMenuOptions.length > 0;
|
|
5630
|
+
this.cdr.markForCheck();
|
|
5631
|
+
}
|
|
5632
|
+
onMenuClick(item) {
|
|
5633
|
+
this.contextMenuClick.emit(item);
|
|
5634
|
+
this.closeCard();
|
|
5635
|
+
}
|
|
5636
|
+
closeCard() {
|
|
5637
|
+
this.openCard = false;
|
|
5638
|
+
}
|
|
5639
|
+
onLegendEvent(event) {
|
|
5640
|
+
this.legendEvent.emit(event);
|
|
5641
|
+
this.chartEvent.emit({ type: `legend:${event.type}`, data: event });
|
|
5642
|
+
}
|
|
5643
|
+
readLegendSelected() {
|
|
5644
|
+
if (!this.chartInstance || this.chartInstance.isDisposed())
|
|
5645
|
+
return {};
|
|
5646
|
+
const option = this.chartInstance.getOption();
|
|
5647
|
+
return { ...option.legend?.[0]?.selected };
|
|
5648
|
+
}
|
|
5649
|
+
unbindEvents() {
|
|
5650
|
+
this.eventCleanup.forEach((cleanup) => cleanup());
|
|
5651
|
+
this.eventCleanup = [];
|
|
5652
|
+
}
|
|
5653
|
+
ngOnDestroy() {
|
|
5654
|
+
this.unbindEvents();
|
|
5655
|
+
if (this.chartInstance && !this.chartInstance.isDisposed()) {
|
|
5656
|
+
this.chartInstance.dispose();
|
|
5657
|
+
}
|
|
5658
|
+
}
|
|
5659
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: HeatmapPivot, deps: [{ token: Charts }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
5660
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: HeatmapPivot, isStandalone: true, selector: "lib-heatmap-pivot", inputs: { config: "config", theme: "theme", events: "events", contextMenuOptions: "contextMenuOptions", showContextMenu: "showContextMenu" }, outputs: { contextMenuClick: "contextMenuClick", chartEvent: "chartEvent", legendEvent: "legendEvent" }, host: { listeners: { "window:resize": "refreshLabelWidth()", "document:click": "closeCard()" } }, providers: [provideEchartsCore({ echarts })], viewQueries: [{ propertyName: "chartContainer", first: true, predicate: ["chartContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"heatmap-pivot-chart-shell\"\n [class.heatmap-pivot-chart-shell--legend-left]=\"config.customLegend?.position === 'left'\"\n [class.heatmap-pivot-chart-shell--legend-right]=\"config.customLegend?.position === 'right'\"\n [class.heatmap-pivot-chart-shell--legend-bottom]=\"config.customLegend?.position === 'bottom'\"\n>\n @if (\n config.customLegend && !config.hideLegend &&\n config.customLegend.position !== 'bottom' &&\n config.customLegend.position !== 'right'\n ) {\n <lib-chart-legend\n class=\"heatmap-pivot-chart-shell__legend\"\n [class.heatmap-pivot-chart-shell__legend--custom-width]=\"hasSideLegendWidth\"\n [style.--heatmap-pivot-chart-legend-max-width]=\"legendShellMaxWidth\"\n [chart]=\"chartInstance\"\n [series]=\"config.series\"\n [colors]=\"config.colors || deafultColors\"\n [config]=\"config.customLegend || {}\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n\n <div\n #chartContainer\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n (chartInit)=\"onChartInit($event)\"\n class=\"chart-container\"\n ></div>\n\n @if (\n config.customLegend && !config.hideLegend &&\n (config.customLegend.position === 'bottom' || config.customLegend.position === 'right')\n ) {\n <lib-chart-legend\n class=\"heatmap-pivot-chart-shell__legend\"\n [class.heatmap-pivot-chart-shell__legend--custom-width]=\"hasSideLegendWidth\"\n [style.--heatmap-pivot-chart-legend-max-width]=\"legendShellMaxWidth\"\n [chart]=\"chartInstance\"\n [series]=\"config.series\"\n [colors]=\"config.colors || deafultColors\"\n [config]=\"config.customLegend || {}\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n</div>\n@if (openCard) {\n <lib-right-click-card\n [cardOptions]=\"contextMenuOptions\"\n (contextMenuClick)=\"onMenuClick($event)\"\n [cardPosition]=\"cardPosition\"\n ></lib-right-click-card>\n}\n", styles: [":host{display:block;height:100%;width:100%;font-family:Arial,sans-serif}.heatmap-pivot-chart-shell{display:flex;flex-direction:column;gap:8px;height:100%;min-height:0;min-width:0;width:100%;padding:10px 0 4px 10px;box-sizing:border-box;background:#fff}.heatmap-pivot-chart-shell--legend-left,.heatmap-pivot-chart-shell--legend-right{flex-direction:row}.heatmap-pivot-chart-shell--legend-bottom{flex-direction:column}.heatmap-pivot-chart-shell__legend{flex:0 0 auto;min-width:0}.heatmap-pivot-chart-shell--legend-left .heatmap-pivot-chart-shell__legend,.heatmap-pivot-chart-shell--legend-right .heatmap-pivot-chart-shell__legend{height:100%;max-width:min(var(--heatmap-pivot-chart-legend-max-width, 360px),70%);min-height:0}.chart-container{width:100%;height:100%;position:relative;flex:1 1 auto;min-height:0;min-width:0}@media (max-width: 640px){.heatmap-pivot-chart-shell,.heatmap-pivot-chart-shell--legend-left,.heatmap-pivot-chart-shell--legend-right{flex-direction:column}.heatmap-pivot-chart-shell--legend-left .heatmap-pivot-chart-shell__legend,.heatmap-pivot-chart-shell--legend-right .heatmap-pivot-chart-shell__legend{flex-basis:auto;max-width:none;width:auto}}\n"], dependencies: [{ kind: "directive", type: NgxEchartsDirective, selector: "echarts, [echarts]", inputs: ["options", "theme", "initOpts", "merge", "autoResize", "loading", "loadingType", "loadingOpts"], outputs: ["chartInit", "optionsError", "chartClick", "chartDblClick", "chartMouseDown", "chartMouseMove", "chartMouseUp", "chartMouseOver", "chartMouseOut", "chartGlobalOut", "chartContextMenu", "chartHighlight", "chartDownplay", "chartSelectChanged", "chartLegendSelectChanged", "chartLegendSelected", "chartLegendUnselected", "chartLegendLegendSelectAll", "chartLegendLegendInverseSelect", "chartLegendScroll", "chartDataZoom", "chartDataRangeSelected", "chartGraphRoam", "chartGeoRoam", "chartTreeRoam", "chartTimelineChanged", "chartTimelinePlayChanged", "chartRestore", "chartDataViewChanged", "chartMagicTypeChanged", "chartGeoSelectChanged", "chartGeoSelected", "chartGeoUnselected", "chartAxisAreaSelected", "chartBrush", "chartBrushEnd", "chartBrushSelected", "chartGlobalCursorTaken", "chartRendered", "chartFinished"], exportAs: ["echarts"] }, { kind: "component", type: ChartLegendComponent, selector: "lib-chart-legend", inputs: ["chart", "series", "colors", "config", "itemTemplate"], outputs: ["legendEvent"] }, { kind: "component", type: RightClickCard, selector: "lib-right-click-card", inputs: ["cardPosition", "cardOptions"], outputs: ["contextMenuClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
5661
|
+
}
|
|
5662
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: HeatmapPivot, decorators: [{
|
|
5663
|
+
type: Component,
|
|
5664
|
+
args: [{ selector: 'lib-heatmap-pivot', standalone: true, imports: [NgxEchartsDirective, ChartLegendComponent, RightClickCard], providers: [provideEchartsCore({ echarts })], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"heatmap-pivot-chart-shell\"\n [class.heatmap-pivot-chart-shell--legend-left]=\"config.customLegend?.position === 'left'\"\n [class.heatmap-pivot-chart-shell--legend-right]=\"config.customLegend?.position === 'right'\"\n [class.heatmap-pivot-chart-shell--legend-bottom]=\"config.customLegend?.position === 'bottom'\"\n>\n @if (\n config.customLegend && !config.hideLegend &&\n config.customLegend.position !== 'bottom' &&\n config.customLegend.position !== 'right'\n ) {\n <lib-chart-legend\n class=\"heatmap-pivot-chart-shell__legend\"\n [class.heatmap-pivot-chart-shell__legend--custom-width]=\"hasSideLegendWidth\"\n [style.--heatmap-pivot-chart-legend-max-width]=\"legendShellMaxWidth\"\n [chart]=\"chartInstance\"\n [series]=\"config.series\"\n [colors]=\"config.colors || deafultColors\"\n [config]=\"config.customLegend || {}\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n\n <div\n #chartContainer\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n (chartInit)=\"onChartInit($event)\"\n class=\"chart-container\"\n ></div>\n\n @if (\n config.customLegend && !config.hideLegend &&\n (config.customLegend.position === 'bottom' || config.customLegend.position === 'right')\n ) {\n <lib-chart-legend\n class=\"heatmap-pivot-chart-shell__legend\"\n [class.heatmap-pivot-chart-shell__legend--custom-width]=\"hasSideLegendWidth\"\n [style.--heatmap-pivot-chart-legend-max-width]=\"legendShellMaxWidth\"\n [chart]=\"chartInstance\"\n [series]=\"config.series\"\n [colors]=\"config.colors || deafultColors\"\n [config]=\"config.customLegend || {}\"\n (legendEvent)=\"onLegendEvent($event)\"\n ></lib-chart-legend>\n }\n</div>\n@if (openCard) {\n <lib-right-click-card\n [cardOptions]=\"contextMenuOptions\"\n (contextMenuClick)=\"onMenuClick($event)\"\n [cardPosition]=\"cardPosition\"\n ></lib-right-click-card>\n}\n", styles: [":host{display:block;height:100%;width:100%;font-family:Arial,sans-serif}.heatmap-pivot-chart-shell{display:flex;flex-direction:column;gap:8px;height:100%;min-height:0;min-width:0;width:100%;padding:10px 0 4px 10px;box-sizing:border-box;background:#fff}.heatmap-pivot-chart-shell--legend-left,.heatmap-pivot-chart-shell--legend-right{flex-direction:row}.heatmap-pivot-chart-shell--legend-bottom{flex-direction:column}.heatmap-pivot-chart-shell__legend{flex:0 0 auto;min-width:0}.heatmap-pivot-chart-shell--legend-left .heatmap-pivot-chart-shell__legend,.heatmap-pivot-chart-shell--legend-right .heatmap-pivot-chart-shell__legend{height:100%;max-width:min(var(--heatmap-pivot-chart-legend-max-width, 360px),70%);min-height:0}.chart-container{width:100%;height:100%;position:relative;flex:1 1 auto;min-height:0;min-width:0}@media (max-width: 640px){.heatmap-pivot-chart-shell,.heatmap-pivot-chart-shell--legend-left,.heatmap-pivot-chart-shell--legend-right{flex-direction:column}.heatmap-pivot-chart-shell--legend-left .heatmap-pivot-chart-shell__legend,.heatmap-pivot-chart-shell--legend-right .heatmap-pivot-chart-shell__legend{flex-basis:auto;max-width:none;width:auto}}\n"] }]
|
|
5665
|
+
}], ctorParameters: () => [{ type: Charts }, { type: i0.ChangeDetectorRef }], propDecorators: { chartContainer: [{
|
|
5666
|
+
type: ViewChild,
|
|
5667
|
+
args: ['chartContainer']
|
|
5668
|
+
}], config: [{
|
|
5669
|
+
type: Input
|
|
5670
|
+
}], theme: [{
|
|
5671
|
+
type: Input
|
|
5672
|
+
}], events: [{
|
|
5673
|
+
type: Input
|
|
5674
|
+
}], contextMenuOptions: [{
|
|
5675
|
+
type: Input
|
|
5676
|
+
}], showContextMenu: [{
|
|
5677
|
+
type: Input
|
|
5678
|
+
}], contextMenuClick: [{
|
|
5679
|
+
type: Output
|
|
5680
|
+
}], chartEvent: [{
|
|
5681
|
+
type: Output
|
|
5682
|
+
}], legendEvent: [{
|
|
5683
|
+
type: Output
|
|
5684
|
+
}], refreshLabelWidth: [{
|
|
5685
|
+
type: HostListener,
|
|
5686
|
+
args: ['window:resize']
|
|
5687
|
+
}], closeCard: [{
|
|
5688
|
+
type: HostListener,
|
|
5689
|
+
args: ['document:click']
|
|
5690
|
+
}] } });
|
|
5691
|
+
|
|
4940
5692
|
echarts.use([
|
|
4941
5693
|
ScatterChart,
|
|
4942
5694
|
GridComponent,
|
|
@@ -7556,9 +8308,553 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
7556
8308
|
args: ['window:resize']
|
|
7557
8309
|
}] } });
|
|
7558
8310
|
|
|
8311
|
+
// Keep one style loaded so mode and theme changes do not rebuild the basemap.
|
|
8312
|
+
function resolveMapboxStyle({ style }) {
|
|
8313
|
+
return style ?? 'mapbox://styles/mapbox/standard';
|
|
8314
|
+
}
|
|
8315
|
+
|
|
8316
|
+
/** Resolve a place for immediate display on the map; results are not persisted. */
|
|
8317
|
+
async function geocodePlace(placeName, accessToken, signal) {
|
|
8318
|
+
const query = placeName.trim();
|
|
8319
|
+
if (!query)
|
|
8320
|
+
throw new Error('A bubble marker requires coordinates or a placeName.');
|
|
8321
|
+
const params = new URLSearchParams({ q: query, access_token: accessToken, limit: '1', autocomplete: 'false' });
|
|
8322
|
+
const response = await fetch(`https://api.mapbox.com/search/geocode/v6/forward?${params}`, { signal });
|
|
8323
|
+
if (!response.ok)
|
|
8324
|
+
throw new Error(`Place lookup failed for "${query}" (${response.status}).`);
|
|
8325
|
+
const data = await response.json();
|
|
8326
|
+
const coordinates = data.features?.[0]?.geometry?.coordinates;
|
|
8327
|
+
if (!coordinates || coordinates.length < 2 ||
|
|
8328
|
+
!Number.isFinite(coordinates[0]) || !Number.isFinite(coordinates[1]) ||
|
|
8329
|
+
Math.abs(coordinates[0]) > 180 || Math.abs(coordinates[1]) > 90) {
|
|
8330
|
+
throw new Error(`No location found for "${query}". Use a more specific placeName or provide coordinates.`);
|
|
8331
|
+
}
|
|
8332
|
+
return [coordinates[0], coordinates[1]];
|
|
8333
|
+
}
|
|
8334
|
+
|
|
8335
|
+
function numericBubbleValue(label) {
|
|
8336
|
+
if (label === undefined || (typeof label === 'string' && !label.trim()))
|
|
8337
|
+
return undefined;
|
|
8338
|
+
const value = Number(label);
|
|
8339
|
+
return Number.isFinite(value) ? value : undefined;
|
|
8340
|
+
}
|
|
8341
|
+
function formatBubbleLabel(label) {
|
|
8342
|
+
const value = numericBubbleValue(label);
|
|
8343
|
+
if (value === undefined)
|
|
8344
|
+
return label === undefined ? '' : String(label);
|
|
8345
|
+
const suffixes = ['', 'k', 'M', 'B', 'T', 'Q'];
|
|
8346
|
+
let scaled = value;
|
|
8347
|
+
let index = 0;
|
|
8348
|
+
while (Math.abs(scaled) >= 1000 && index < suffixes.length - 1) {
|
|
8349
|
+
scaled /= 1000;
|
|
8350
|
+
index++;
|
|
8351
|
+
}
|
|
8352
|
+
// For decimal inputs, keep the original fractional portion after compacting
|
|
8353
|
+
// the whole-number portion: 24000.8765 -> 24.88k.
|
|
8354
|
+
const fraction = Math.abs(value) - Math.trunc(Math.abs(value));
|
|
8355
|
+
if (index > 0 && fraction > 0) {
|
|
8356
|
+
scaled = Math.sign(value) * (Math.trunc(Math.abs(scaled)) + fraction);
|
|
8357
|
+
}
|
|
8358
|
+
let rounded = Number(scaled.toFixed(2));
|
|
8359
|
+
// Promote rounded boundary values: 999.999k should display as 1M.
|
|
8360
|
+
if (Math.abs(rounded) >= 1000 && index < suffixes.length - 1) {
|
|
8361
|
+
rounded = Number((scaled / 1000).toFixed(2));
|
|
8362
|
+
index++;
|
|
8363
|
+
}
|
|
8364
|
+
return `${rounded}${suffixes[index]}`;
|
|
8365
|
+
}
|
|
8366
|
+
function formatBubbleTooltipValue(value, compact = false) {
|
|
8367
|
+
if (value === null)
|
|
8368
|
+
return '—';
|
|
8369
|
+
if (typeof value === 'boolean')
|
|
8370
|
+
return String(value);
|
|
8371
|
+
return compact ? formatBubbleLabel(value) : String(value);
|
|
8372
|
+
}
|
|
8373
|
+
function resolveBubbleLabel(bubble, formatter, textTransform) {
|
|
8374
|
+
const value = numericBubbleValue(bubble.value);
|
|
8375
|
+
const text = formatter && value !== undefined
|
|
8376
|
+
? String(formatter(value, bubble))
|
|
8377
|
+
: formatBubbleLabel(bubble.value);
|
|
8378
|
+
switch (textTransform) {
|
|
8379
|
+
case 'uppercase': return text.toUpperCase();
|
|
8380
|
+
case 'lowercase': return text.toLowerCase();
|
|
8381
|
+
// Include letters after numbers so compact suffixes are capitalized too.
|
|
8382
|
+
case 'capitalize': return text.replace(/(^|[^\p{L}\p{M}])(\p{L})/gu, (_, prefix, letter) => prefix + letter.toUpperCase());
|
|
8383
|
+
default: return text;
|
|
8384
|
+
}
|
|
8385
|
+
}
|
|
8386
|
+
function resolveBubbleValue(bubble) {
|
|
8387
|
+
return numericBubbleValue(bubble.value);
|
|
8388
|
+
}
|
|
8389
|
+
function resolveBubbleColor(bubble, formatting) {
|
|
8390
|
+
const fallback = bubble.color ?? '#3b82f6';
|
|
8391
|
+
const value = resolveBubbleValue(bubble);
|
|
8392
|
+
if (value === undefined || !formatting || formatting.enabled === false)
|
|
8393
|
+
return fallback;
|
|
8394
|
+
for (const rule of formatting.rules) {
|
|
8395
|
+
if (!Number.isFinite(rule.value))
|
|
8396
|
+
continue;
|
|
8397
|
+
let matches = false;
|
|
8398
|
+
switch (rule.operator) {
|
|
8399
|
+
case 'gt':
|
|
8400
|
+
matches = value > rule.value;
|
|
8401
|
+
break;
|
|
8402
|
+
case 'gte':
|
|
8403
|
+
matches = value >= rule.value;
|
|
8404
|
+
break;
|
|
8405
|
+
case 'lt':
|
|
8406
|
+
matches = value < rule.value;
|
|
8407
|
+
break;
|
|
8408
|
+
case 'lte':
|
|
8409
|
+
matches = value <= rule.value;
|
|
8410
|
+
break;
|
|
8411
|
+
case 'eq':
|
|
8412
|
+
matches = value === rule.value;
|
|
8413
|
+
break;
|
|
8414
|
+
case 'neq':
|
|
8415
|
+
matches = value !== rule.value;
|
|
8416
|
+
break;
|
|
8417
|
+
case 'between':
|
|
8418
|
+
matches = Number.isFinite(rule.valueTo) && value >= rule.value && value <= rule.valueTo;
|
|
8419
|
+
break;
|
|
8420
|
+
}
|
|
8421
|
+
if (matches)
|
|
8422
|
+
return rule.color;
|
|
8423
|
+
}
|
|
8424
|
+
return fallback;
|
|
8425
|
+
}
|
|
8426
|
+
|
|
8427
|
+
/** Scale diameters across the complete dataset, independent of lookup completion order. */
|
|
8428
|
+
function resolveBubbleSizes(data) {
|
|
8429
|
+
const values = data.map(resolveBubbleValue);
|
|
8430
|
+
let min = Infinity;
|
|
8431
|
+
let max = -Infinity;
|
|
8432
|
+
for (const value of values) {
|
|
8433
|
+
if (value === undefined)
|
|
8434
|
+
continue;
|
|
8435
|
+
min = Math.min(min, value);
|
|
8436
|
+
max = Math.max(max, value);
|
|
8437
|
+
}
|
|
8438
|
+
return data.map((bubble, index) => {
|
|
8439
|
+
if (bubble.size !== undefined)
|
|
8440
|
+
return bubble.size;
|
|
8441
|
+
const value = values[index];
|
|
8442
|
+
if (value === undefined || min === max)
|
|
8443
|
+
return 24;
|
|
8444
|
+
// Normalize first to avoid overflowing the range for very large values.
|
|
8445
|
+
const scale = Math.max(Math.abs(min), Math.abs(max));
|
|
8446
|
+
const ratio = (value / scale - min / scale) / (max / scale - min / scale);
|
|
8447
|
+
return 24 + ratio * 40;
|
|
8448
|
+
});
|
|
8449
|
+
}
|
|
8450
|
+
|
|
8451
|
+
class Mapbox {
|
|
8452
|
+
config;
|
|
8453
|
+
mapLoad = new EventEmitter();
|
|
8454
|
+
mapError = new EventEmitter();
|
|
8455
|
+
mapContainer;
|
|
8456
|
+
zone = inject(NgZone);
|
|
8457
|
+
platformId = inject(PLATFORM_ID);
|
|
8458
|
+
map;
|
|
8459
|
+
resizeObserver;
|
|
8460
|
+
bubbleMarkers = new Map();
|
|
8461
|
+
bubbleLookup;
|
|
8462
|
+
markerClass;
|
|
8463
|
+
popupClass;
|
|
8464
|
+
bubblePopup;
|
|
8465
|
+
navigationControl;
|
|
8466
|
+
navigationControlClass;
|
|
8467
|
+
viewReady = false;
|
|
8468
|
+
initializationId = 0;
|
|
8469
|
+
ngAfterViewInit() {
|
|
8470
|
+
this.viewReady = true;
|
|
8471
|
+
void this.initializeMap();
|
|
8472
|
+
}
|
|
8473
|
+
ngOnChanges(changes) {
|
|
8474
|
+
if (!this.viewReady)
|
|
8475
|
+
return;
|
|
8476
|
+
const previous = changes['config']?.previousValue;
|
|
8477
|
+
const current = this.config;
|
|
8478
|
+
const uiKeys = new Set([
|
|
8479
|
+
'viewMode',
|
|
8480
|
+
'viewStyle',
|
|
8481
|
+
'style',
|
|
8482
|
+
'navigationControl',
|
|
8483
|
+
'navigationControlPosition',
|
|
8484
|
+
'bubbleMarkers',
|
|
8485
|
+
]);
|
|
8486
|
+
const otherOptionsChanged = !previous ||
|
|
8487
|
+
!current ||
|
|
8488
|
+
[...new Set([...Object.keys(previous), ...Object.keys(current)])].some((key) => !uiKeys.has(key) &&
|
|
8489
|
+
previous[key] !== current[key]);
|
|
8490
|
+
if (!this.map || otherOptionsChanged) {
|
|
8491
|
+
void this.initializeMap();
|
|
8492
|
+
return;
|
|
8493
|
+
}
|
|
8494
|
+
this.zone.runOutsideAngular(() => {
|
|
8495
|
+
try {
|
|
8496
|
+
if (resolveMapboxStyle(previous) !== resolveMapboxStyle(current)) {
|
|
8497
|
+
this.map.setStyle(resolveMapboxStyle(current));
|
|
8498
|
+
}
|
|
8499
|
+
else if (previous.viewStyle !== current.viewStyle ||
|
|
8500
|
+
previous.viewMode !== current.viewMode) {
|
|
8501
|
+
this.updateAppearance();
|
|
8502
|
+
}
|
|
8503
|
+
if (previous.navigationControl !== current.navigationControl ||
|
|
8504
|
+
previous.navigationControlPosition !== current.navigationControlPosition) {
|
|
8505
|
+
this.updateNavigationControl();
|
|
8506
|
+
}
|
|
8507
|
+
if (previous.bubbleMarkers !== current.bubbleMarkers) {
|
|
8508
|
+
if (previous.bubbleMarkers?.data === current.bubbleMarkers?.data &&
|
|
8509
|
+
previous.bubbleMarkers?.show === current.bubbleMarkers?.show) {
|
|
8510
|
+
this.updateBubblePresentation();
|
|
8511
|
+
}
|
|
8512
|
+
else {
|
|
8513
|
+
this.updateBubbleMarkers();
|
|
8514
|
+
}
|
|
8515
|
+
}
|
|
8516
|
+
}
|
|
8517
|
+
catch (error) {
|
|
8518
|
+
this.zone.run(() => this.mapError.emit(error instanceof Error ? error : new Error(String(error))));
|
|
8519
|
+
}
|
|
8520
|
+
});
|
|
8521
|
+
}
|
|
8522
|
+
async initializeMap() {
|
|
8523
|
+
const initializationId = ++this.initializationId;
|
|
8524
|
+
this.removeMap();
|
|
8525
|
+
if (!isPlatformBrowser(this.platformId))
|
|
8526
|
+
return;
|
|
8527
|
+
const config = this.config;
|
|
8528
|
+
if (!config?.accessToken?.trim()) {
|
|
8529
|
+
this.mapError.emit(new Error('Mapbox requires an accessToken in its config.'));
|
|
8530
|
+
return;
|
|
8531
|
+
}
|
|
8532
|
+
try {
|
|
8533
|
+
// Load browser-only code on demand so importing charts-lib remains safe for SSR.
|
|
8534
|
+
const { default: mapboxgl } = await import('mapbox-gl');
|
|
8535
|
+
if (initializationId !== this.initializationId)
|
|
8536
|
+
return;
|
|
8537
|
+
this.zone.runOutsideAngular(() => {
|
|
8538
|
+
const { bubbleMarkers, viewMode, viewStyle, style, workerUrl = 'assets/mapbox/mapbox-gl-csp-worker.js', navigationControl, navigationControlPosition, ...options } = config;
|
|
8539
|
+
// Serve the worker unchanged: Angular transforms break Mapbox's inline worker.
|
|
8540
|
+
mapboxgl.workerUrl = workerUrl;
|
|
8541
|
+
const map = new mapboxgl.Map({
|
|
8542
|
+
center: [0, 0],
|
|
8543
|
+
zoom: 2,
|
|
8544
|
+
...options,
|
|
8545
|
+
projection: options.projection ?? 'mercator',
|
|
8546
|
+
style: resolveMapboxStyle({ ...options, viewMode, viewStyle, style }),
|
|
8547
|
+
container: this.mapContainer.nativeElement,
|
|
8548
|
+
});
|
|
8549
|
+
this.map = map;
|
|
8550
|
+
map.on('style.load', () => this.updateAppearance());
|
|
8551
|
+
map.on('load', () => this.zone.run(() => this.mapLoad.emit(map)));
|
|
8552
|
+
map.on('error', (event) => this.zone.run(() => this.mapError.emit(event.error)));
|
|
8553
|
+
this.popupClass = mapboxgl.Popup;
|
|
8554
|
+
this.markerClass = mapboxgl.Marker;
|
|
8555
|
+
this.updateBubbleMarkers();
|
|
8556
|
+
this.navigationControlClass = mapboxgl.NavigationControl;
|
|
8557
|
+
this.updateNavigationControl();
|
|
8558
|
+
if (typeof ResizeObserver !== 'undefined') {
|
|
8559
|
+
this.resizeObserver = new ResizeObserver(() => map.resize());
|
|
8560
|
+
this.resizeObserver.observe(this.mapContainer.nativeElement);
|
|
8561
|
+
}
|
|
8562
|
+
});
|
|
8563
|
+
}
|
|
8564
|
+
catch (error) {
|
|
8565
|
+
if (initializationId !== this.initializationId)
|
|
8566
|
+
return;
|
|
8567
|
+
this.removeMap();
|
|
8568
|
+
this.zone.run(() => this.mapError.emit(error instanceof Error ? error : new Error(String(error))));
|
|
8569
|
+
}
|
|
8570
|
+
}
|
|
8571
|
+
updateAppearance() {
|
|
8572
|
+
const map = this.map;
|
|
8573
|
+
if (!map ||
|
|
8574
|
+
this.config.style !== undefined ||
|
|
8575
|
+
!map.getStyle()?.imports?.some((item) => item.id === 'basemap'))
|
|
8576
|
+
return;
|
|
8577
|
+
const { viewStyle = 'standard', viewMode = 'standard' } = this.config;
|
|
8578
|
+
const theme = viewStyle === 'standard' ? 'default' : 'monochrome';
|
|
8579
|
+
if (map.getConfigProperty('basemap', 'theme') !== theme) {
|
|
8580
|
+
map.setConfigProperty('basemap', 'theme', theme);
|
|
8581
|
+
}
|
|
8582
|
+
const lightPreset = viewStyle === 'dark' ? 'night' : 'day';
|
|
8583
|
+
if (map.getConfigProperty('basemap', 'lightPreset') !== lightPreset) {
|
|
8584
|
+
map.setConfigProperty('basemap', 'lightPreset', lightPreset);
|
|
8585
|
+
}
|
|
8586
|
+
if (map.getConfigProperty('basemap', 'show3dObjects') !== false) {
|
|
8587
|
+
map.setConfigProperty('basemap', 'show3dObjects', false);
|
|
8588
|
+
}
|
|
8589
|
+
const satelliteId = 'charts-lib-satellite';
|
|
8590
|
+
if (!map.getSource(satelliteId)) {
|
|
8591
|
+
map.addSource(satelliteId, {
|
|
8592
|
+
type: 'raster',
|
|
8593
|
+
url: 'mapbox://mapbox.satellite',
|
|
8594
|
+
tileSize: 256,
|
|
8595
|
+
});
|
|
8596
|
+
}
|
|
8597
|
+
if (!map.getLayer(satelliteId)) {
|
|
8598
|
+
map.addLayer({
|
|
8599
|
+
id: satelliteId,
|
|
8600
|
+
type: 'raster',
|
|
8601
|
+
source: satelliteId,
|
|
8602
|
+
slot: 'bottom',
|
|
8603
|
+
paint: { 'raster-opacity': 0, 'raster-opacity-transition': { duration: 0 } },
|
|
8604
|
+
});
|
|
8605
|
+
}
|
|
8606
|
+
const paint = {
|
|
8607
|
+
'raster-brightness-min': viewStyle === 'light' ? 0.2 : 0,
|
|
8608
|
+
'raster-brightness-max': viewStyle === 'dark' ? 0.55 : 1,
|
|
8609
|
+
'raster-opacity': viewMode === 'satelite' ? 1 : 0,
|
|
8610
|
+
};
|
|
8611
|
+
for (const property of Object.keys(paint)) {
|
|
8612
|
+
const value = paint[property];
|
|
8613
|
+
if (map.getPaintProperty(satelliteId, property) !== value) {
|
|
8614
|
+
map.setPaintProperty(satelliteId, property, value);
|
|
8615
|
+
}
|
|
8616
|
+
}
|
|
8617
|
+
}
|
|
8618
|
+
updateBubbleMarkers() {
|
|
8619
|
+
this.bubblePopup?.remove();
|
|
8620
|
+
this.bubblePopup = undefined;
|
|
8621
|
+
this.bubbleLookup?.abort();
|
|
8622
|
+
for (const marker of this.bubbleMarkers.values())
|
|
8623
|
+
marker.remove();
|
|
8624
|
+
this.bubbleMarkers.clear();
|
|
8625
|
+
const config = this.config.bubbleMarkers;
|
|
8626
|
+
if (!this.map || !this.markerClass || !config || config.show === false)
|
|
8627
|
+
return;
|
|
8628
|
+
const controller = new AbortController();
|
|
8629
|
+
this.bubbleLookup = controller;
|
|
8630
|
+
const map = this.map;
|
|
8631
|
+
const accessToken = this.config.accessToken;
|
|
8632
|
+
const sizes = resolveBubbleSizes(config.data);
|
|
8633
|
+
const locations = [];
|
|
8634
|
+
let pending = config.data.length;
|
|
8635
|
+
const complete = () => {
|
|
8636
|
+
pending--;
|
|
8637
|
+
if (pending !== 0 ||
|
|
8638
|
+
controller.signal.aborted ||
|
|
8639
|
+
this.map !== map ||
|
|
8640
|
+
this.config.center !== undefined ||
|
|
8641
|
+
locations.length === 0)
|
|
8642
|
+
return;
|
|
8643
|
+
// Find the shortest longitude span, including markers across the date line.
|
|
8644
|
+
const longitudes = locations.map(([lng]) => ((lng % 360) + 360) % 360).sort((a, b) => a - b);
|
|
8645
|
+
let largestGap = -1;
|
|
8646
|
+
let west = longitudes[0];
|
|
8647
|
+
let east = longitudes[0];
|
|
8648
|
+
for (let index = 0; index < longitudes.length; index++) {
|
|
8649
|
+
const next = longitudes[(index + 1) % longitudes.length];
|
|
8650
|
+
const gap = (index === longitudes.length - 1 ? next + 360 : next) - longitudes[index];
|
|
8651
|
+
if (gap > largestGap) {
|
|
8652
|
+
largestGap = gap;
|
|
8653
|
+
west = next;
|
|
8654
|
+
east = longitudes[index] < west ? longitudes[index] + 360 : longitudes[index];
|
|
8655
|
+
}
|
|
8656
|
+
}
|
|
8657
|
+
if (west > 180) {
|
|
8658
|
+
west -= 360;
|
|
8659
|
+
east -= 360;
|
|
8660
|
+
}
|
|
8661
|
+
let south = Infinity;
|
|
8662
|
+
let north = -Infinity;
|
|
8663
|
+
let padding = 48;
|
|
8664
|
+
for (const [, lat] of locations) {
|
|
8665
|
+
south = Math.min(south, lat);
|
|
8666
|
+
north = Math.max(north, lat);
|
|
8667
|
+
}
|
|
8668
|
+
for (const size of sizes)
|
|
8669
|
+
padding = Math.max(padding, size / 2 + 16);
|
|
8670
|
+
map.fitBounds([
|
|
8671
|
+
[west, south],
|
|
8672
|
+
[east, north],
|
|
8673
|
+
], {
|
|
8674
|
+
padding,
|
|
8675
|
+
maxZoom: this.config.zoom ?? 12,
|
|
8676
|
+
duration: 0,
|
|
8677
|
+
});
|
|
8678
|
+
};
|
|
8679
|
+
config.data.forEach((bubble, index) => {
|
|
8680
|
+
const addMarker = (coordinates) => {
|
|
8681
|
+
if (controller.signal.aborted || this.map !== map)
|
|
8682
|
+
return;
|
|
8683
|
+
const element = document.createElement('div');
|
|
8684
|
+
element.className = 'lib-mapbox-bubble';
|
|
8685
|
+
const size = sizes[index];
|
|
8686
|
+
element.style.width = `${size}px`;
|
|
8687
|
+
element.style.height = `${size}px`;
|
|
8688
|
+
element.style.backgroundColor = resolveBubbleColor(bubble, this.config.bubbleMarkers?.conditionalFormatting);
|
|
8689
|
+
element.textContent =
|
|
8690
|
+
this.config.bubbleMarkers?.showLabels === false
|
|
8691
|
+
? ''
|
|
8692
|
+
: resolveBubbleLabel(bubble, this.config.bubbleMarkers?.valueFormatter, this.config.bubbleMarkers?.labelStyle?.textTransform);
|
|
8693
|
+
this.applyBubbleLabelStyle(element, this.config.bubbleMarkers?.labelStyle);
|
|
8694
|
+
if (bubble.value !== undefined)
|
|
8695
|
+
element.setAttribute('aria-label', String(bubble.value));
|
|
8696
|
+
const marker = new this.markerClass({ element, anchor: 'center' })
|
|
8697
|
+
.setLngLat(coordinates)
|
|
8698
|
+
.addTo(map);
|
|
8699
|
+
this.bindBubbleTooltip(element, coordinates, index, size, controller.signal);
|
|
8700
|
+
this.bubbleMarkers.set(index, marker);
|
|
8701
|
+
locations.push(coordinates);
|
|
8702
|
+
};
|
|
8703
|
+
if (bubble.coordinates) {
|
|
8704
|
+
addMarker(bubble.coordinates);
|
|
8705
|
+
complete();
|
|
8706
|
+
}
|
|
8707
|
+
else {
|
|
8708
|
+
void geocodePlace(bubble.placeName ?? '', accessToken, controller.signal)
|
|
8709
|
+
.then(addMarker)
|
|
8710
|
+
.catch((error) => {
|
|
8711
|
+
if (!controller.signal.aborted) {
|
|
8712
|
+
this.zone.run(() => this.mapError.emit(error instanceof Error ? error : new Error(String(error))));
|
|
8713
|
+
}
|
|
8714
|
+
})
|
|
8715
|
+
.finally(complete);
|
|
8716
|
+
}
|
|
8717
|
+
});
|
|
8718
|
+
}
|
|
8719
|
+
updateBubblePresentation() {
|
|
8720
|
+
this.bubblePopup?.remove();
|
|
8721
|
+
this.bubblePopup = undefined;
|
|
8722
|
+
const config = this.config.bubbleMarkers;
|
|
8723
|
+
this.bubbleMarkers.forEach((marker, index) => {
|
|
8724
|
+
this.applyBubbleLabelStyle(marker.getElement(), config?.labelStyle);
|
|
8725
|
+
marker.getElement().textContent =
|
|
8726
|
+
config?.showLabels === false
|
|
8727
|
+
? ''
|
|
8728
|
+
: resolveBubbleLabel(config?.data[index] ?? {}, config?.valueFormatter, config?.labelStyle?.textTransform);
|
|
8729
|
+
const bubble = config?.data[index];
|
|
8730
|
+
if (bubble)
|
|
8731
|
+
marker.getElement().style.backgroundColor = resolveBubbleColor(bubble, config?.conditionalFormatting);
|
|
8732
|
+
});
|
|
8733
|
+
}
|
|
8734
|
+
bindBubbleTooltip(element, coordinates, index, size, signal) {
|
|
8735
|
+
if (!this.popupClass)
|
|
8736
|
+
return;
|
|
8737
|
+
element.tabIndex = 0;
|
|
8738
|
+
const close = () => {
|
|
8739
|
+
this.bubblePopup?.remove();
|
|
8740
|
+
this.bubblePopup = undefined;
|
|
8741
|
+
};
|
|
8742
|
+
const open = () => {
|
|
8743
|
+
close();
|
|
8744
|
+
const config = this.config.bubbleMarkers;
|
|
8745
|
+
const bubble = config?.data[index];
|
|
8746
|
+
if (!this.map || !bubble || config?.showTooltip === false || signal.aborted)
|
|
8747
|
+
return;
|
|
8748
|
+
const content = document.createElement('div');
|
|
8749
|
+
content.className = 'lib-mapbox-bubble-details';
|
|
8750
|
+
const fields = [
|
|
8751
|
+
['Location', bubble.placeName || coordinates.join(', ')],
|
|
8752
|
+
['Value', bubble.value],
|
|
8753
|
+
...Object.entries(bubble.tooltip ?? {}),
|
|
8754
|
+
];
|
|
8755
|
+
for (const [name, value] of fields) {
|
|
8756
|
+
if (value === undefined)
|
|
8757
|
+
continue;
|
|
8758
|
+
const row = document.createElement('div');
|
|
8759
|
+
const title = document.createElement('strong');
|
|
8760
|
+
title.textContent = `${name}: `;
|
|
8761
|
+
row.append(title, document.createTextNode(formatBubbleTooltipValue(value, name !== 'Location' && config?.tooltipCompactValue === true)));
|
|
8762
|
+
content.appendChild(row);
|
|
8763
|
+
}
|
|
8764
|
+
this.bubblePopup = new this.popupClass({
|
|
8765
|
+
closeButton: false,
|
|
8766
|
+
closeOnClick: false,
|
|
8767
|
+
// Leave anchor unset so Mapbox keeps the popup inside the viewport.
|
|
8768
|
+
offset: size / 2 + 8,
|
|
8769
|
+
maxWidth: '320px',
|
|
8770
|
+
className: 'lib-mapbox-bubble-tooltip',
|
|
8771
|
+
}).setLngLat(coordinates).setDOMContent(content).addTo(this.map);
|
|
8772
|
+
};
|
|
8773
|
+
element.addEventListener('mouseenter', open, { signal });
|
|
8774
|
+
element.addEventListener('mouseleave', () => {
|
|
8775
|
+
if (document.activeElement !== element)
|
|
8776
|
+
close();
|
|
8777
|
+
}, { signal });
|
|
8778
|
+
element.addEventListener('focus', open, { signal });
|
|
8779
|
+
element.addEventListener('blur', close, { signal });
|
|
8780
|
+
element.addEventListener('keydown', (event) => {
|
|
8781
|
+
if (event.key === 'Escape')
|
|
8782
|
+
close();
|
|
8783
|
+
}, { signal });
|
|
8784
|
+
}
|
|
8785
|
+
applyBubbleLabelStyle(element, style) {
|
|
8786
|
+
const decoration = style?.textDecoration ?? '';
|
|
8787
|
+
const textDecoration = style?.fontStyle === 'underline'
|
|
8788
|
+
? [
|
|
8789
|
+
'underline',
|
|
8790
|
+
...decoration
|
|
8791
|
+
.split(/\s+/)
|
|
8792
|
+
.filter((part) => part && part !== 'none' && part !== 'underline'),
|
|
8793
|
+
].join(' ')
|
|
8794
|
+
: decoration;
|
|
8795
|
+
// Clear removed overrides so the component stylesheet supplies the defaults.
|
|
8796
|
+
Object.assign(element.style, {
|
|
8797
|
+
fontWeight: style?.fontWeight === undefined ? '' : String(style.fontWeight),
|
|
8798
|
+
fontStyle: style?.fontStyle === 'underline' ? 'normal' : (style?.fontStyle ?? ''),
|
|
8799
|
+
textDecoration,
|
|
8800
|
+
color: style?.color ?? '',
|
|
8801
|
+
fontFamily: style?.fontFamily ?? '',
|
|
8802
|
+
fontSize: style?.fontSize === undefined ? '' : `${style.fontSize}px`,
|
|
8803
|
+
textTransform: style?.textTransform ?? '',
|
|
8804
|
+
});
|
|
8805
|
+
}
|
|
8806
|
+
updateNavigationControl() {
|
|
8807
|
+
if (!this.map || !this.navigationControlClass)
|
|
8808
|
+
return;
|
|
8809
|
+
if (this.navigationControl) {
|
|
8810
|
+
this.map.removeControl(this.navigationControl);
|
|
8811
|
+
this.navigationControl = undefined;
|
|
8812
|
+
}
|
|
8813
|
+
const { navigationControl = true, navigationControlPosition = 'top-right' } = this.config;
|
|
8814
|
+
if (navigationControl) {
|
|
8815
|
+
this.navigationControl = new this.navigationControlClass(typeof navigationControl === 'boolean' ? {} : navigationControl);
|
|
8816
|
+
this.map.addControl(this.navigationControl, navigationControlPosition);
|
|
8817
|
+
}
|
|
8818
|
+
}
|
|
8819
|
+
removeMap() {
|
|
8820
|
+
this.bubblePopup?.remove();
|
|
8821
|
+
this.bubblePopup = undefined;
|
|
8822
|
+
this.bubbleLookup?.abort();
|
|
8823
|
+
for (const marker of this.bubbleMarkers.values())
|
|
8824
|
+
marker.remove();
|
|
8825
|
+
this.bubbleMarkers.clear();
|
|
8826
|
+
this.resizeObserver?.disconnect();
|
|
8827
|
+
this.resizeObserver = undefined;
|
|
8828
|
+
this.map?.remove();
|
|
8829
|
+
this.map = undefined;
|
|
8830
|
+
this.navigationControl = undefined;
|
|
8831
|
+
}
|
|
8832
|
+
ngOnDestroy() {
|
|
8833
|
+
this.initializationId++;
|
|
8834
|
+
this.viewReady = false;
|
|
8835
|
+
this.removeMap();
|
|
8836
|
+
}
|
|
8837
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: Mapbox, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8838
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: Mapbox, isStandalone: true, selector: "lib-mapbox", inputs: { config: "config" }, outputs: { mapLoad: "mapLoad", mapError: "mapError" }, viewQueries: [{ propertyName: "mapContainer", first: true, predicate: ["mapContainer"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div #mapContainer class=\"lib-mapbox-container\"></div>\n", styles: [".mapboxgl-map{font:12px/20px Helvetica Neue,Arial,Helvetica,sans-serif;overflow:hidden;position:relative;-webkit-tap-highlight-color:rgb(0 0 0/0%)}.mapboxgl-canvas{position:absolute;left:0;top:0}.mapboxgl-map:-webkit-full-screen{width:100%;height:100%}.mapboxgl-canary{background-color:salmon}.mapboxgl-canvas-container.mapboxgl-interactive,.mapboxgl-ctrl-group button.mapboxgl-ctrl-compass{cursor:grab;-webkit-user-select:none;user-select:none}.mapboxgl-canvas-container.mapboxgl-interactive.mapboxgl-track-pointer{cursor:pointer}.mapboxgl-canvas-container.mapboxgl-interactive:active,.mapboxgl-ctrl-group button.mapboxgl-ctrl-compass:active{cursor:grabbing}.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate,.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate .mapboxgl-canvas{touch-action:pan-x pan-y}.mapboxgl-canvas-container.mapboxgl-touch-drag-pan,.mapboxgl-canvas-container.mapboxgl-touch-drag-pan .mapboxgl-canvas{touch-action:pinch-zoom}.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan,.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan .mapboxgl-canvas{touch-action:none}.mapboxgl-ctrl-bottom,.mapboxgl-ctrl-bottom-left,.mapboxgl-ctrl-bottom-right,.mapboxgl-ctrl-left,.mapboxgl-ctrl-right,.mapboxgl-ctrl-top,.mapboxgl-ctrl-top-left,.mapboxgl-ctrl-top-right{position:absolute;pointer-events:none;z-index:2}.mapboxgl-ctrl-top-left{top:0;left:0}.mapboxgl-ctrl-top{top:0;left:50%;transform:translate(-50%)}.mapboxgl-ctrl-top-right{top:0;right:0}.mapboxgl-ctrl-right{top:50%;transform:translateY(-50%);right:0}.mapboxgl-ctrl-bottom-right{right:0;bottom:0}.mapboxgl-ctrl-bottom{bottom:0;left:50%;transform:translate(-50%)}.mapboxgl-ctrl-bottom-left{bottom:0;left:0}.mapboxgl-ctrl-left{top:50%;transform:translateY(-50%);left:0}.mapboxgl-ctrl{clear:both;pointer-events:auto}.mapboxgl-ctrl-top-left .mapboxgl-ctrl{margin:10px 0 0 10px;float:left}.mapboxgl-ctrl-top .mapboxgl-ctrl{margin:10px 0;float:left}.mapboxgl-ctrl-top-right .mapboxgl-ctrl{margin:10px 10px 0 0;float:right}.mapboxgl-ctrl-bottom-right .mapboxgl-ctrl,.mapboxgl-ctrl-right .mapboxgl-ctrl{margin:0 10px 10px 0;float:right}.mapboxgl-ctrl-bottom .mapboxgl-ctrl{margin:10px 0;float:left}.mapboxgl-ctrl-bottom-left .mapboxgl-ctrl,.mapboxgl-ctrl-left .mapboxgl-ctrl{margin:0 0 10px 10px;float:left}.mapboxgl-ctrl-group{border-radius:4px;background:#fff}.mapboxgl-ctrl-group:not(:empty){box-shadow:0 0 0 2px #0000001a}@media (-ms-high-contrast: active){.mapboxgl-ctrl-group:not(:empty){box-shadow:0 0 0 2px ButtonText}}.mapboxgl-ctrl-group button{width:32px;height:32px;display:block;padding:0;outline:none;border:0;box-sizing:border-box;background-color:initial;cursor:pointer;overflow:hidden}.mapboxgl-ctrl-group button+button{border-top:1px solid #ddd}.mapboxgl-ctrl button .mapboxgl-ctrl-icon{display:block;width:100%;height:100%;background-repeat:no-repeat;background-position:50%}@media (-ms-high-contrast: active){.mapboxgl-ctrl-icon{background-color:initial}.mapboxgl-ctrl-group button+button{border-top:1px solid buttontext}}.mapboxgl-ctrl-attrib-button:focus,.mapboxgl-ctrl-group button:focus{box-shadow:0 0 2px 2px #0096ff}.mapboxgl-ctrl button:disabled{cursor:not-allowed}.mapboxgl-ctrl button:disabled .mapboxgl-ctrl-icon{opacity:.25}.mapboxgl-ctrl-group button:first-of-type{border-radius:4px 4px 0 0}.mapboxgl-ctrl-group button:last-child{border-radius:0 0 4px 4px}.mapboxgl-ctrl-group button:only-child{border-radius:inherit}.mapboxgl-ctrl button:not(:disabled):hover{background-color:#eee}.mapboxgl-ctrl-group button:focus:focus-visible{box-shadow:0 0 2px 2px #0096ff}.mapboxgl-ctrl-group button:focus:not(:focus-visible){box-shadow:none}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23333%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M10%2013c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h9c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013h-9z%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23333%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M14.5%208.5c-.75%200-1.5.75-1.5%201.5v3h-3c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h3v3c0%20.75.75%201.5%201.5%201.5S16%2019.75%2016%2019v-3h3c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013h-3v-3c0-.75-.75-1.5-1.5-1.5z%22%2F%3E%3C%2Fsvg%3E)}@media (-ms-high-contrast: active){.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M10%2013c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h9c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013h-9z%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M14.5%208.5c-.75%200-1.5.75-1.5%201.5v3h-3c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h3v3c0%20.75.75%201.5%201.5%201.5S16%2019.75%2016%2019v-3h3c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013h-3v-3c0-.75-.75-1.5-1.5-1.5z%22%2F%3E%3C%2Fsvg%3E)}}@media (-ms-high-contrast: black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23000%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M10%2013c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h9c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013h-9z%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23000%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M14.5%208.5c-.75%200-1.5.75-1.5%201.5v3h-3c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h3v3c0%20.75.75%201.5%201.5%201.5S16%2019.75%2016%2019v-3h3c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013h-3v-3c0-.75-.75-1.5-1.5-1.5z%22%2F%3E%3C%2Fsvg%3E)}}.mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23333%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M24%2016v5.5c0%201.75-.75%202.5-2.5%202.5H16v-1l3-1.5-4-5.5%201-1%205.5%204%201.5-3h1zM6%2016l1.5%203%205.5-4%201%201-4%205.5%203%201.5v1H7.5C5.75%2024%205%2023.25%205%2021.5V16h1zm7-11v1l-3%201.5%204%205.5-1%201-5.5-4L6%2013H5V7.5C5%205.75%205.75%205%207.5%205H13zm11%202.5c0-1.75-.75-2.5-2.5-2.5H16v1l3%201.5-4%205.5%201%201%205.5-4%201.5%203h1V7.5z%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M18.5%2016c-1.75%200-2.5.75-2.5%202.5V24h1l1.5-3%205.5%204%201-1-4-5.5%203-1.5v-1h-5.5zM13%2018.5c0-1.75-.75-2.5-2.5-2.5H5v1l3%201.5L4%2024l1%201%205.5-4%201.5%203h1v-5.5zm3-8c0%201.75.75%202.5%202.5%202.5H24v-1l-3-1.5L25%205l-1-1-5.5%204L17%205h-1v5.5zM10.5%2013c1.75%200%202.5-.75%202.5-2.5V5h-1l-1.5%203L5%204%204%205l4%205.5L5%2012v1h5.5z%22%2F%3E%3C%2Fsvg%3E)}@media (-ms-high-contrast: active){.mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M24%2016v5.5c0%201.75-.75%202.5-2.5%202.5H16v-1l3-1.5-4-5.5%201-1%205.5%204%201.5-3h1zM6%2016l1.5%203%205.5-4%201%201-4%205.5%203%201.5v1H7.5C5.75%2024%205%2023.25%205%2021.5V16h1zm7-11v1l-3%201.5%204%205.5-1%201-5.5-4L6%2013H5V7.5C5%205.75%205.75%205%207.5%205H13zm11%202.5c0-1.75-.75-2.5-2.5-2.5H16v1l3%201.5-4%205.5%201%201%205.5-4%201.5%203h1V7.5z%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M18.5%2016c-1.75%200-2.5.75-2.5%202.5V24h1l1.5-3%205.5%204%201-1-4-5.5%203-1.5v-1h-5.5zM13%2018.5c0-1.75-.75-2.5-2.5-2.5H5v1l3%201.5L4%2024l1%201%205.5-4%201.5%203h1v-5.5zm3-8c0%201.75.75%202.5%202.5%202.5H24v-1l-3-1.5L25%205l-1-1-5.5%204L17%205h-1v5.5zM10.5%2013c1.75%200%202.5-.75%202.5-2.5V5h-1l-1.5%203L5%204%204%205l4%205.5L5%2012v1h5.5z%22%2F%3E%3C%2Fsvg%3E)}}@media (-ms-high-contrast: black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23000%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M24%2016v5.5c0%201.75-.75%202.5-2.5%202.5H16v-1l3-1.5-4-5.5%201-1%205.5%204%201.5-3h1zM6%2016l1.5%203%205.5-4%201%201-4%205.5%203%201.5v1H7.5C5.75%2024%205%2023.25%205%2021.5V16h1zm7-11v1l-3%201.5%204%205.5-1%201-5.5-4L6%2013H5V7.5C5%205.75%205.75%205%207.5%205H13zm11%202.5c0-1.75-.75-2.5-2.5-2.5H16v1l3%201.5-4%205.5%201%201%205.5-4%201.5%203h1V7.5z%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23000%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M18.5%2016c-1.75%200-2.5.75-2.5%202.5V24h1l1.5-3%205.5%204%201-1-4-5.5%203-1.5v-1h-5.5zM13%2018.5c0-1.75-.75-2.5-2.5-2.5H5v1l3%201.5L4%2024l1%201%205.5-4%201.5%203h1v-5.5zm3-8c0%201.75.75%202.5%202.5%202.5H24v-1l-3-1.5L25%205l-1-1-5.5%204L17%205h-1v5.5zM10.5%2013c1.75%200%202.5-.75%202.5-2.5V5h-1l-1.5%203L5%204%204%205l4%205.5L5%2012v1h5.5z%22%2F%3E%3C%2Fsvg%3E)}}.mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23333%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M10.5%2014l4-8%204%208h-8z%22%2F%3E%3Cpath%20id%3D%22south%22%20d%3D%22M10.5%2016l4%208%204-8h-8z%22%20fill%3D%22%23ccc%22%2F%3E%3C%2Fsvg%3E)}@media (-ms-high-contrast: active){.mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M10.5%2014l4-8%204%208h-8z%22%2F%3E%3Cpath%20id%3D%22south%22%20d%3D%22M10.5%2016l4%208%204-8h-8z%22%20fill%3D%22%23999%22%2F%3E%3C%2Fsvg%3E)}}@media (-ms-high-contrast: black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23000%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M10.5%2014l4-8%204%208h-8z%22%2F%3E%3Cpath%20id%3D%22south%22%20d%3D%22M10.5%2016l4%208%204-8h-8z%22%20fill%3D%22%23ccc%22%2F%3E%3C%2Fsvg%3E)}}.mapboxgl-ctrl button.mapboxgl-ctrl-arrow-up .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20fill%3D%22%23333%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2018%2018%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.29289%2011.7071C4.68342%2012.0976%205.31658%2012.0976%205.70711%2011.7071L9%208.41421L12.2929%2011.7071C12.6834%2012.0976%2013.3166%2012.0976%2013.7071%2011.7071C14.0976%2011.3166%2014.0976%2010.6834%2013.7071%2010.2929L9.70711%206.29289C9.31658%205.90237%208.68342%205.90237%208.29289%206.29289L4.29289%2010.2929C3.90237%2010.6834%203.90237%2011.3166%204.29289%2011.7071Z%22%20fill%3D%22%23333333%22%2F%3E%3C%2Fsvg%3E);background-size:18px 18px}.mapboxgl-ctrl button.mapboxgl-ctrl-arrow-down .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20fill%3D%22%23333%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2018%2018%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.29289%206.29289C4.68342%205.90237%205.31658%205.90237%205.70711%206.29289L9%209.58579L12.2929%206.29289C12.6834%205.90237%2013.3166%205.90237%2013.7071%206.29289C14.0976%206.68342%2014.0976%207.31658%2013.7071%207.70711L9.70711%2011.7071C9.31658%2012.0976%208.68342%2012.0976%208.29289%2011.7071L4.29289%207.70711C3.90237%207.31658%203.90237%206.68342%204.29289%206.29289Z%22%20fill%3D%22%23333333%22%2F%3E%3C%2Fsvg%3E);background-size:18px 18px}.mapboxgl-ctrl button.mapboxgl-ctrl-indoor-toggle .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20fill%3D%22%23333%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2018%2018%22%3E%3Cpath%20d%3D%22M4.0017%203.0017L4.0017%2015.0017L10.0017%2015.0017V12.0017H12.0017V15.0017H14.0017L14.0017%203.0017C14.0097%202.86829%2013.9894%202.73469%2013.9419%202.60973C13.8945%202.48477%2013.8211%202.37129%2013.7266%202.27678C13.6321%202.18228%2013.5186%202.10889%2013.3937%202.06147C13.2687%202.01405%2013.1351%201.99368%2013.0017%202.0017L5.0017%202.0017C4.86829%201.99368%204.73469%202.01405%204.60973%202.06147C4.48477%202.10889%204.37129%202.18228%204.27678%202.27678C4.18228%202.37129%204.10889%202.48477%204.06147%202.60973C4.01405%202.73469%203.99368%202.86829%204.0017%203.0017ZM8.0017%2014.0017H6.0017V12.0017H8.0017V14.0017ZM8.0017%2010.0017H6.0017L6.0017%208.0017H8.0017V10.0017ZM8.0017%206.0017L6.0017%206.0017V4.0017H8.0017V6.0017ZM12.0017%2010.0017H10.0017V8.0017H12.0017V10.0017ZM12.0017%206.0017H10.0017V4.0017L12.0017%204.0017V6.0017Z%22%20fill%3D%22%23333333%22%2F%3E%3C%2Fsvg%3E);background-size:18px 18px}@media (-ms-high-contrast: active){.mapboxgl-ctrl button.mapboxgl-ctrl-indoor-toggle .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20fill%3D%22%23fff%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2018%2018%22%3E%3Cpath%20d%3D%22M4.0017%203.0017L4.0017%2015.0017L10.0017%2015.0017V12.0017H12.0017V15.0017H14.0017L14.0017%203.0017C14.0097%202.86829%2013.9894%202.73469%2013.9419%202.60973C13.8945%202.48477%2013.8211%202.37129%2013.7266%202.27678C13.6321%202.18228%2013.5186%202.10889%2013.3937%202.06147C13.2687%202.01405%2013.1351%201.99368%2013.0017%202.0017L5.0017%202.0017C4.86829%201.99368%204.73469%202.01405%204.60973%202.06147C4.48477%202.10889%204.37129%202.18228%204.27678%202.27678C4.18228%202.37129%204.10889%202.48477%204.06147%202.60973C4.01405%202.73469%203.99368%202.86829%204.0017%203.0017ZM8.0017%2014.0017H6.0017V12.0017H8.0017V14.0017ZM8.0017%2010.0017H6.0017L6.0017%208.0017H8.0017V10.0017ZM8.0017%206.0017L6.0017%206.0017V4.0017H8.0017V6.0017ZM12.0017%2010.0017H10.0017V8.0017H12.0017V10.0017ZM12.0017%206.0017H10.0017V4.0017L12.0017%204.0017V6.0017Z%22%20fill%3D%22%23333333%22%2F%3E%3C%2Fsvg%3E)}}@media (-ms-high-contrast: black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-indoor-toggle .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20fill%3D%22%23000%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2018%2018%22%3E%3Cpath%20d%3D%22M4.0017%203.0017L4.0017%2015.0017L10.0017%2015.0017V12.0017H12.0017V15.0017H14.0017L14.0017%203.0017C14.0097%202.86829%2013.9894%202.73469%2013.9419%202.60973C13.8945%202.48477%2013.8211%202.37129%2013.7266%202.27678C13.6321%202.18228%2013.5186%202.10889%2013.3937%202.06147C13.2687%202.01405%2013.1351%201.99368%2013.0017%202.0017L5.0017%202.0017C4.86829%201.99368%204.73469%202.01405%204.60973%202.06147C4.48477%202.10889%204.37129%202.18228%204.27678%202.27678C4.18228%202.37129%204.10889%202.48477%204.06147%202.60973C4.01405%202.73469%203.99368%202.86829%204.0017%203.0017ZM8.0017%2014.0017H6.0017V12.0017H8.0017V14.0017ZM8.0017%2010.0017H6.0017L6.0017%208.0017H8.0017V10.0017ZM8.0017%206.0017L6.0017%206.0017V4.0017H8.0017V6.0017ZM12.0017%2010.0017H10.0017V8.0017H12.0017V10.0017ZM12.0017%206.0017H10.0017V4.0017L12.0017%204.0017V6.0017Z%22%20fill%3D%22%23333333%22%2F%3E%3C%2Fsvg%3E)}}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23333%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1zm0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7z%22%2F%3E%3Ccircle%20id%3D%22dot%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20id%3D%22stroke%22%20d%3D%22M14%205l1%201-9%209-1-1%209-9z%22%20display%3D%22none%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23aaa%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1zm0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7z%22%2F%3E%3Ccircle%20id%3D%22dot%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20id%3D%22stroke%22%20d%3D%22M14%205l1%201-9%209-1-1%209-9z%22%20fill%3D%22%23f00%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%2333b5e5%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1zm0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7z%22%2F%3E%3Ccircle%20id%3D%22dot%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20id%3D%22stroke%22%20d%3D%22M14%205l1%201-9%209-1-1%209-9z%22%20display%3D%22none%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active-error .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23e58978%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1zm0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7z%22%2F%3E%3Ccircle%20id%3D%22dot%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20id%3D%22stroke%22%20d%3D%22M14%205l1%201-9%209-1-1%209-9z%22%20display%3D%22none%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%2333b5e5%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1zm0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7z%22%2F%3E%3Ccircle%20id%3D%22dot%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%20display%3D%22none%22%2F%3E%3Cpath%20id%3D%22stroke%22%20d%3D%22M14%205l1%201-9%209-1-1%209-9z%22%20display%3D%22none%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background-error .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23e54e33%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1zm0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7z%22%2F%3E%3Ccircle%20id%3D%22dot%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%20display%3D%22none%22%2F%3E%3Cpath%20id%3D%22stroke%22%20d%3D%22M14%205l1%201-9%209-1-1%209-9z%22%20display%3D%22none%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-waiting .mapboxgl-ctrl-icon{animation:mapboxgl-spin 2s linear infinite}@media (-ms-high-contrast: active){.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23fff%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1zm0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7z%22%2F%3E%3Ccircle%20id%3D%22dot%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20id%3D%22stroke%22%20d%3D%22M14%205l1%201-9%209-1-1%209-9z%22%20display%3D%22none%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23999%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1zm0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7z%22%2F%3E%3Ccircle%20id%3D%22dot%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20id%3D%22stroke%22%20d%3D%22M14%205l1%201-9%209-1-1%209-9z%22%20fill%3D%22%23f00%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%2333b5e5%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1zm0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7z%22%2F%3E%3Ccircle%20id%3D%22dot%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20id%3D%22stroke%22%20d%3D%22M14%205l1%201-9%209-1-1%209-9z%22%20display%3D%22none%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active-error .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23e58978%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1zm0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7z%22%2F%3E%3Ccircle%20id%3D%22dot%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20id%3D%22stroke%22%20d%3D%22M14%205l1%201-9%209-1-1%209-9z%22%20display%3D%22none%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%2333b5e5%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1zm0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7z%22%2F%3E%3Ccircle%20id%3D%22dot%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%20display%3D%22none%22%2F%3E%3Cpath%20id%3D%22stroke%22%20d%3D%22M14%205l1%201-9%209-1-1%209-9z%22%20display%3D%22none%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background-error .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23e54e33%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1zm0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7z%22%2F%3E%3Ccircle%20id%3D%22dot%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%20display%3D%22none%22%2F%3E%3Cpath%20id%3D%22stroke%22%20d%3D%22M14%205l1%201-9%209-1-1%209-9z%22%20display%3D%22none%22%2F%3E%3C%2Fsvg%3E)}}@media (-ms-high-contrast: black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23000%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1zm0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7z%22%2F%3E%3Ccircle%20id%3D%22dot%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20id%3D%22stroke%22%20d%3D%22M14%205l1%201-9%209-1-1%209-9z%22%20display%3D%22none%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23666%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1zm0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7z%22%2F%3E%3Ccircle%20id%3D%22dot%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20id%3D%22stroke%22%20d%3D%22M14%205l1%201-9%209-1-1%209-9z%22%20fill%3D%22%23f00%22%2F%3E%3C%2Fsvg%3E)}}@keyframes mapboxgl-spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}a.mapboxgl-ctrl-logo{width:88px;height:23px;margin:0 0 -4px -4px;display:block;background-repeat:no-repeat;cursor:pointer;overflow:hidden;background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20fill-rule%3D%22evenodd%22%20viewBox%3D%220%200%2088%2023%22%3E%3Cdefs%3E%3Cpath%20id%3D%22logo%22%20d%3D%22M11.5%202.25c5.105%200%209.25%204.145%209.25%209.25s-4.145%209.25-9.25%209.25-9.25-4.145-9.25-9.25%204.145-9.25%209.25-9.25zM6.997%2015.983c-.051-.338-.828-5.802%202.233-8.873a4.395%204.395%200%20013.13-1.28c1.27%200%202.49.51%203.39%201.42.91.9%201.42%202.12%201.42%203.39%200%201.18-.449%202.301-1.28%203.13C12.72%2016.93%207%2016%207%2016l-.003-.017zM15.3%2010.5l-2%20.8-.8%202-.8-2-2-.8%202-.8.8-2%20.8%202%202%20.8z%22%2F%3E%3Cpath%20id%3D%22text%22%20d%3D%22M50.63%208c.13%200%20.23.1.23.23V9c.7-.76%201.7-1.18%202.73-1.18%202.17%200%203.95%201.85%203.95%204.17s-1.77%204.19-3.94%204.19c-1.04%200-2.03-.43-2.74-1.18v3.77c0%20.13-.1.23-.23.23h-1.4c-.13%200-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01%200%20.01%200%20.01-.01.13%200%20.22.1.22.22v7.55c0%20.12-.1.23-.23.23h-1.4c-.13%200-.23-.1-.23-.23V15c-.7.76-1.69%201.19-2.73%201.19-2.17%200-3.94-1.87-3.94-4.19%200-2.32%201.77-4.19%203.94-4.19%201.03%200%202.02.43%202.73%201.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24%204.24%200%2000-4.16%203.29c-.13.59-.13%201.19%200%201.77a4.233%204.233%200%20004.17%203.3c2.35%200%204.26-1.87%204.26-4.19%200-2.32-1.9-4.17-4.27-4.17zM60.63%205c.13%200%20.23.1.23.23v3.76c.7-.76%201.7-1.18%202.73-1.18%201.88%200%203.45%201.4%203.84%203.28.13.59.13%201.2%200%201.8-.39%201.88-1.96%203.29-3.84%203.29-1.03%200-2.02-.43-2.73-1.18v.77c0%20.12-.1.23-.23.23h-1.4c-.13%200-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34%2011h-1.4c-.13%200-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13%200%20.22.11.23.22v.68c.5-.68%201.3-1.09%202.16-1.1h.03c1.09%200%202.09.6%202.6%201.55.45-.95%201.4-1.55%202.44-1.56%201.62%200%202.93%201.25%202.9%202.78l.03%205.2c0%20.13-.1.23-.23.23h-1.41c-.13%200-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8%200-1.46.7-1.59%201.62l.01%204.68c0%20.13-.11.23-.23.23h-1.41c-.13%200-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85%200-1.54.79-1.6%201.8v4.5c0%20.13-.1.23-.23.23zm53.615%200h-1.61c-.04%200-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213%200%2001-.03-.12c0-.12.09-.21.21-.21h1.61c.13%200%20.24.06.3.17l1.41%202.37%201.4-2.37a.34.34%200%2001.3-.17h1.6c.04%200%20.08.01.12.03.09.06.13.19.06.28l-2.37%203.65%202.43%203.7c0%20.05.01.09.01.13%200%20.12-.09.21-.21.21h-1.61c-.13%200-.24-.06-.3-.17l-1.44-2.42-1.44%202.42a.34.34%200%2001-.3.17zm-7.12-1.49c-1.33%200-2.42-1.12-2.42-2.51%200-1.39%201.08-2.52%202.42-2.52%201.33%200%202.42%201.12%202.42%202.51%200%201.39-1.08%202.51-2.42%202.52zm-19.865%200c-1.32%200-2.39-1.11-2.42-2.48v-.07c.02-1.38%201.09-2.49%202.4-2.49%201.32%200%202.41%201.12%202.41%202.51%200%201.39-1.07%202.52-2.39%202.53zm-8.11-2.48c-.01%201.37-1.09%202.47-2.41%202.47s-2.42-1.12-2.42-2.51c0-1.39%201.08-2.52%202.4-2.52%201.33%200%202.39%201.11%202.41%202.48l.02.08zm18.12%202.47c-1.32%200-2.39-1.11-2.41-2.48v-.06c.02-1.38%201.09-2.48%202.41-2.48s2.42%201.12%202.42%202.51c0%201.39-1.09%202.51-2.42%202.51z%22%2F%3E%3C%2Fdefs%3E%3Cmask%20id%3D%22clip%22%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22100%25%22%20height%3D%22100%25%22%20fill%3D%22white%22%2F%3E%3Cuse%20xlink%3Ahref%3D%22%23logo%22%2F%3E%3Cuse%20xlink%3Ahref%3D%22%23text%22%2F%3E%3C%2Fmask%3E%3Cg%20id%3D%22outline%22%20opacity%3D%220.3%22%20stroke%3D%22%23000%22%20stroke-width%3D%223%22%3E%3Ccircle%20mask%3D%22url(%23clip)%22%20cx%3D%2211.5%22%20cy%3D%2211.5%22%20r%3D%229.25%22%2F%3E%3Cuse%20xlink%3Ahref%3D%22%23text%22%20mask%3D%22url(%23clip)%22%2F%3E%3C%2Fg%3E%3Cg%20id%3D%22fill%22%20opacity%3D%220.9%22%20fill%3D%22%23fff%22%3E%3Cuse%20xlink%3Ahref%3D%22%23logo%22%2F%3E%3Cuse%20xlink%3Ahref%3D%22%23text%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}a.mapboxgl-ctrl-logo.mapboxgl-compact{width:23px}@media (-ms-high-contrast: active){a.mapboxgl-ctrl-logo{background-color:initial;background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20fill-rule%3D%22evenodd%22%20viewBox%3D%220%200%2088%2023%22%3E%3Cdefs%3E%3Cpath%20id%3D%22logo%22%20d%3D%22M11.5%202.25c5.105%200%209.25%204.145%209.25%209.25s-4.145%209.25-9.25%209.25-9.25-4.145-9.25-9.25%204.145-9.25%209.25-9.25zM6.997%2015.983c-.051-.338-.828-5.802%202.233-8.873a4.395%204.395%200%20013.13-1.28c1.27%200%202.49.51%203.39%201.42.91.9%201.42%202.12%201.42%203.39%200%201.18-.449%202.301-1.28%203.13C12.72%2016.93%207%2016%207%2016l-.003-.017zM15.3%2010.5l-2%20.8-.8%202-.8-2-2-.8%202-.8.8-2%20.8%202%202%20.8z%22%2F%3E%3Cpath%20id%3D%22text%22%20d%3D%22M50.63%208c.13%200%20.23.1.23.23V9c.7-.76%201.7-1.18%202.73-1.18%202.17%200%203.95%201.85%203.95%204.17s-1.77%204.19-3.94%204.19c-1.04%200-2.03-.43-2.74-1.18v3.77c0%20.13-.1.23-.23.23h-1.4c-.13%200-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01%200%20.01%200%20.01-.01.13%200%20.22.1.22.22v7.55c0%20.12-.1.23-.23.23h-1.4c-.13%200-.23-.1-.23-.23V15c-.7.76-1.69%201.19-2.73%201.19-2.17%200-3.94-1.87-3.94-4.19%200-2.32%201.77-4.19%203.94-4.19%201.03%200%202.02.43%202.73%201.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24%204.24%200%2000-4.16%203.29c-.13.59-.13%201.19%200%201.77a4.233%204.233%200%20004.17%203.3c2.35%200%204.26-1.87%204.26-4.19%200-2.32-1.9-4.17-4.27-4.17zM60.63%205c.13%200%20.23.1.23.23v3.76c.7-.76%201.7-1.18%202.73-1.18%201.88%200%203.45%201.4%203.84%203.28.13.59.13%201.2%200%201.8-.39%201.88-1.96%203.29-3.84%203.29-1.03%200-2.02-.43-2.73-1.18v.77c0%20.12-.1.23-.23.23h-1.4c-.13%200-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34%2011h-1.4c-.13%200-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13%200%20.22.11.23.22v.68c.5-.68%201.3-1.09%202.16-1.1h.03c1.09%200%202.09.6%202.6%201.55.45-.95%201.4-1.55%202.44-1.56%201.62%200%202.93%201.25%202.9%202.78l.03%205.2c0%20.13-.1.23-.23.23h-1.41c-.13%200-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8%200-1.46.7-1.59%201.62l.01%204.68c0%20.13-.11.23-.23.23h-1.41c-.13%200-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85%200-1.54.79-1.6%201.8v4.5c0%20.13-.1.23-.23.23zm53.615%200h-1.61c-.04%200-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213%200%2001-.03-.12c0-.12.09-.21.21-.21h1.61c.13%200%20.24.06.3.17l1.41%202.37%201.4-2.37a.34.34%200%2001.3-.17h1.6c.04%200%20.08.01.12.03.09.06.13.19.06.28l-2.37%203.65%202.43%203.7c0%20.05.01.09.01.13%200%20.12-.09.21-.21.21h-1.61c-.13%200-.24-.06-.3-.17l-1.44-2.42-1.44%202.42a.34.34%200%2001-.3.17zm-7.12-1.49c-1.33%200-2.42-1.12-2.42-2.51%200-1.39%201.08-2.52%202.42-2.52%201.33%200%202.42%201.12%202.42%202.51%200%201.39-1.08%202.51-2.42%202.52zm-19.865%200c-1.32%200-2.39-1.11-2.42-2.48v-.07c.02-1.38%201.09-2.49%202.4-2.49%201.32%200%202.41%201.12%202.41%202.51%200%201.39-1.07%202.52-2.39%202.53zm-8.11-2.48c-.01%201.37-1.09%202.47-2.41%202.47s-2.42-1.12-2.42-2.51c0-1.39%201.08-2.52%202.4-2.52%201.33%200%202.39%201.11%202.41%202.48l.02.08zm18.12%202.47c-1.32%200-2.39-1.11-2.41-2.48v-.06c.02-1.38%201.09-2.48%202.41-2.48s2.42%201.12%202.42%202.51c0%201.39-1.09%202.51-2.42%202.51z%22%2F%3E%3C%2Fdefs%3E%3Cmask%20id%3D%22clip%22%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22100%25%22%20height%3D%22100%25%22%20fill%3D%22white%22%2F%3E%3Cuse%20xlink%3Ahref%3D%22%23logo%22%2F%3E%3Cuse%20xlink%3Ahref%3D%22%23text%22%2F%3E%3C%2Fmask%3E%3Cg%20id%3D%22outline%22%20opacity%3D%221%22%20stroke%3D%22%23000%22%20stroke-width%3D%223%22%3E%3Ccircle%20mask%3D%22url(%23clip)%22%20cx%3D%2211.5%22%20cy%3D%2211.5%22%20r%3D%229.25%22%2F%3E%3Cuse%20xlink%3Ahref%3D%22%23text%22%20mask%3D%22url(%23clip)%22%2F%3E%3C%2Fg%3E%3Cg%20id%3D%22fill%22%20opacity%3D%221%22%20fill%3D%22%23fff%22%3E%3Cuse%20xlink%3Ahref%3D%22%23logo%22%2F%3E%3Cuse%20xlink%3Ahref%3D%22%23text%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}}@media (-ms-high-contrast: black-on-white){a.mapboxgl-ctrl-logo{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20fill-rule%3D%22evenodd%22%20viewBox%3D%220%200%2088%2023%22%3E%3Cdefs%3E%3Cpath%20id%3D%22logo%22%20d%3D%22M11.5%202.25c5.105%200%209.25%204.145%209.25%209.25s-4.145%209.25-9.25%209.25-9.25-4.145-9.25-9.25%204.145-9.25%209.25-9.25zM6.997%2015.983c-.051-.338-.828-5.802%202.233-8.873a4.395%204.395%200%20013.13-1.28c1.27%200%202.49.51%203.39%201.42.91.9%201.42%202.12%201.42%203.39%200%201.18-.449%202.301-1.28%203.13C12.72%2016.93%207%2016%207%2016l-.003-.017zM15.3%2010.5l-2%20.8-.8%202-.8-2-2-.8%202-.8.8-2%20.8%202%202%20.8z%22%2F%3E%3Cpath%20id%3D%22text%22%20d%3D%22M50.63%208c.13%200%20.23.1.23.23V9c.7-.76%201.7-1.18%202.73-1.18%202.17%200%203.95%201.85%203.95%204.17s-1.77%204.19-3.94%204.19c-1.04%200-2.03-.43-2.74-1.18v3.77c0%20.13-.1.23-.23.23h-1.4c-.13%200-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01%200%20.01%200%20.01-.01.13%200%20.22.1.22.22v7.55c0%20.12-.1.23-.23.23h-1.4c-.13%200-.23-.1-.23-.23V15c-.7.76-1.69%201.19-2.73%201.19-2.17%200-3.94-1.87-3.94-4.19%200-2.32%201.77-4.19%203.94-4.19%201.03%200%202.02.43%202.73%201.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24%204.24%200%2000-4.16%203.29c-.13.59-.13%201.19%200%201.77a4.233%204.233%200%20004.17%203.3c2.35%200%204.26-1.87%204.26-4.19%200-2.32-1.9-4.17-4.27-4.17zM60.63%205c.13%200%20.23.1.23.23v3.76c.7-.76%201.7-1.18%202.73-1.18%201.88%200%203.45%201.4%203.84%203.28.13.59.13%201.2%200%201.8-.39%201.88-1.96%203.29-3.84%203.29-1.03%200-2.02-.43-2.73-1.18v.77c0%20.12-.1.23-.23.23h-1.4c-.13%200-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34%2011h-1.4c-.13%200-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13%200%20.22.11.23.22v.68c.5-.68%201.3-1.09%202.16-1.1h.03c1.09%200%202.09.6%202.6%201.55.45-.95%201.4-1.55%202.44-1.56%201.62%200%202.93%201.25%202.9%202.78l.03%205.2c0%20.13-.1.23-.23.23h-1.41c-.13%200-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8%200-1.46.7-1.59%201.62l.01%204.68c0%20.13-.11.23-.23.23h-1.41c-.13%200-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85%200-1.54.79-1.6%201.8v4.5c0%20.13-.1.23-.23.23zm53.615%200h-1.61c-.04%200-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213%200%2001-.03-.12c0-.12.09-.21.21-.21h1.61c.13%200%20.24.06.3.17l1.41%202.37%201.4-2.37a.34.34%200%2001.3-.17h1.6c.04%200%20.08.01.12.03.09.06.13.19.06.28l-2.37%203.65%202.43%203.7c0%20.05.01.09.01.13%200%20.12-.09.21-.21.21h-1.61c-.13%200-.24-.06-.3-.17l-1.44-2.42-1.44%202.42a.34.34%200%2001-.3.17zm-7.12-1.49c-1.33%200-2.42-1.12-2.42-2.51%200-1.39%201.08-2.52%202.42-2.52%201.33%200%202.42%201.12%202.42%202.51%200%201.39-1.08%202.51-2.42%202.52zm-19.865%200c-1.32%200-2.39-1.11-2.42-2.48v-.07c.02-1.38%201.09-2.49%202.4-2.49%201.32%200%202.41%201.12%202.41%202.51%200%201.39-1.07%202.52-2.39%202.53zm-8.11-2.48c-.01%201.37-1.09%202.47-2.41%202.47s-2.42-1.12-2.42-2.51c0-1.39%201.08-2.52%202.4-2.52%201.33%200%202.39%201.11%202.41%202.48l.02.08zm18.12%202.47c-1.32%200-2.39-1.11-2.41-2.48v-.06c.02-1.38%201.09-2.48%202.41-2.48s2.42%201.12%202.42%202.51c0%201.39-1.09%202.51-2.42%202.51z%22%2F%3E%3C%2Fdefs%3E%3Cmask%20id%3D%22clip%22%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22100%25%22%20height%3D%22100%25%22%20fill%3D%22white%22%2F%3E%3Cuse%20xlink%3Ahref%3D%22%23logo%22%2F%3E%3Cuse%20xlink%3Ahref%3D%22%23text%22%2F%3E%3C%2Fmask%3E%3Cg%20id%3D%22outline%22%20opacity%3D%221%22%20stroke%3D%22%23fff%22%20stroke-width%3D%223%22%20fill%3D%22%23fff%22%3E%3Ccircle%20mask%3D%22url(%23clip)%22%20cx%3D%2211.5%22%20cy%3D%2211.5%22%20r%3D%229.25%22%2F%3E%3Cuse%20xlink%3Ahref%3D%22%23text%22%20mask%3D%22url(%23clip)%22%2F%3E%3C%2Fg%3E%3Cg%20id%3D%22fill%22%20opacity%3D%221%22%20fill%3D%22%23000%22%3E%3Cuse%20xlink%3Ahref%3D%22%23logo%22%2F%3E%3Cuse%20xlink%3Ahref%3D%22%23text%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}}.mapboxgl-ctrl.mapboxgl-ctrl-attrib{padding:0 5px;background-color:#ffffff80;margin:0}@media screen{.mapboxgl-ctrl-attrib.mapboxgl-compact{min-height:20px;padding:2px 24px 2px 0;margin:10px;position:relative;background-color:#fff;border-radius:12px;box-sizing:initial}.mapboxgl-ctrl-attrib.mapboxgl-compact-show{padding:2px 28px 2px 8px;visibility:visible}:is(.mapboxgl-ctrl-bottom-left,.mapboxgl-ctrl-left,.mapboxgl-ctrl-top-left)>.mapboxgl-ctrl-attrib.mapboxgl-compact-show{padding:2px 8px 2px 28px;border-radius:12px}.mapboxgl-ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-inner{display:none}.mapboxgl-ctrl-attrib-button{display:none;cursor:pointer;position:absolute;background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill-rule%3D%22evenodd%22%3E%3Cpath%20d%3D%22M4%2010a6%206%200%201%200%2012%200%206%206%200%201%200-12%200m5-3a1%201%200%201%200%202%200%201%201%200%201%200-2%200m0%203a1%201%200%201%201%202%200v3a1%201%200%201%201-2%200%22%2F%3E%3C%2Fsvg%3E);background-color:#ffffff80;width:24px;height:24px;box-sizing:border-box;border-radius:12px;outline:none;top:0;right:0;border:0}:is(.mapboxgl-ctrl-bottom-left,.mapboxgl-ctrl-left,.mapboxgl-ctrl-top-left) .mapboxgl-ctrl-attrib-button{left:0}.mapboxgl-ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-button,.mapboxgl-ctrl-attrib.mapboxgl-compact-show .mapboxgl-ctrl-attrib-inner{display:block}.mapboxgl-ctrl-attrib.mapboxgl-compact-show .mapboxgl-ctrl-attrib-button{background-color:#0000000d}.mapboxgl-ctrl-bottom-right>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{bottom:0;right:0}.mapboxgl-ctrl-right>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{right:0}.mapboxgl-ctrl-top-right>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{top:0;right:0}.mapboxgl-ctrl-top-left>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{top:0;left:0}.mapboxgl-ctrl-bottom-left>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{bottom:0;left:0}.mapboxgl-ctrl-left>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{left:0}}@media screen and (-ms-high-contrast: active){.mapboxgl-ctrl-attrib.mapboxgl-compact:after{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill-rule%3D%22evenodd%22%20fill%3D%22%23fff%22%3E%3Cpath%20d%3D%22M4%2010a6%206%200%201%200%2012%200%206%206%200%201%200-12%200m5-3a1%201%200%201%200%202%200%201%201%200%201%200-2%200m0%203a1%201%200%201%201%202%200v3a1%201%200%201%201-2%200%22%2F%3E%3C%2Fsvg%3E)}}@media screen and (-ms-high-contrast: black-on-white){.mapboxgl-ctrl-attrib.mapboxgl-compact:after{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill-rule%3D%22evenodd%22%3E%3Cpath%20d%3D%22M4%2010a6%206%200%201%200%2012%200%206%206%200%201%200-12%200m5-3a1%201%200%201%200%202%200%201%201%200%201%200-2%200m0%203a1%201%200%201%201%202%200v3a1%201%200%201%201-2%200%22%2F%3E%3C%2Fsvg%3E)}}.mapboxgl-ctrl-attrib a{color:#000000bf;text-decoration:none}.mapboxgl-ctrl-attrib a:hover{color:inherit;text-decoration:underline}.mapboxgl-ctrl-attrib .mapbox-improve-map{font-weight:700;margin-left:2px}.mapboxgl-attrib-empty{display:none}.mapboxgl-ctrl-scale{background-color:#ffffffbf;font-size:10px;border-color:#333;border-style:none solid solid;border-width:medium 2px 2px;padding:0 5px;color:#333;box-sizing:border-box;white-space:nowrap}.mapboxgl-popup{position:absolute;top:0;left:0;display:flex;will-change:transform;pointer-events:none}.mapboxgl-popup-anchor-top,.mapboxgl-popup-anchor-top-left,.mapboxgl-popup-anchor-top-right{flex-direction:column}.mapboxgl-popup-anchor-bottom,.mapboxgl-popup-anchor-bottom-left,.mapboxgl-popup-anchor-bottom-right{flex-direction:column-reverse}.mapboxgl-popup-anchor-left{flex-direction:row}.mapboxgl-popup-anchor-right{flex-direction:row-reverse}.mapboxgl-popup-tip{width:0;height:0;border:10px solid rgba(0,0,0,0);z-index:1}.mapboxgl-popup-anchor-top .mapboxgl-popup-tip{align-self:center;border-top:none;border-bottom-color:#fff}.mapboxgl-popup-anchor-top-left .mapboxgl-popup-tip{align-self:flex-start;border-top:none;border-left:none;border-bottom-color:#fff}.mapboxgl-popup-anchor-top-right .mapboxgl-popup-tip{align-self:flex-end;border-top:none;border-right:none;border-bottom-color:#fff}.mapboxgl-popup-anchor-bottom .mapboxgl-popup-tip{align-self:center;border-bottom:none;border-top-color:#fff}.mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-tip{align-self:flex-start;border-bottom:none;border-left:none;border-top-color:#fff}.mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-tip{align-self:flex-end;border-bottom:none;border-right:none;border-top-color:#fff}.mapboxgl-popup-anchor-left .mapboxgl-popup-tip{align-self:center;border-left:none;border-right-color:#fff}.mapboxgl-popup-anchor-right .mapboxgl-popup-tip{align-self:center;border-right:none;border-left-color:#fff}.mapboxgl-popup-close-button{position:absolute;right:0;top:0;border:0;border-radius:0 3px 0 0;cursor:pointer;background-color:initial}.mapboxgl-popup-close-button:hover{background-color:#eee}.mapboxgl-popup-content{position:relative;background:#fff;border-radius:3px;box-shadow:0 1px 2px #0000001a;padding:10px 10px 15px;pointer-events:auto}.mapboxgl-popup-anchor-top-left .mapboxgl-popup-content{border-top-left-radius:0}.mapboxgl-popup-anchor-top-right .mapboxgl-popup-content{border-top-right-radius:0}.mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-content{border-bottom-left-radius:0}.mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-content{border-bottom-right-radius:0}.mapboxgl-popup-track-pointer{display:none}.mapboxgl-popup-track-pointer *{pointer-events:none;-webkit-user-select:none;user-select:none}.mapboxgl-map:hover .mapboxgl-popup-track-pointer{display:flex}.mapboxgl-map:active .mapboxgl-popup-track-pointer{display:none}.mapboxgl-marker{position:absolute;top:0;left:0;will-change:transform;opacity:1;transition:opacity .2s}.mapboxgl-user-location-dot,.mapboxgl-user-location-dot:before{background-color:#1da1f2;width:15px;height:15px;border-radius:50%}.mapboxgl-user-location-dot:before{content:\"\";position:absolute;animation:mapboxgl-user-location-dot-pulse 2s infinite}.mapboxgl-user-location-dot:after{border-radius:50%;border:2px solid #fff;content:\"\";height:19px;left:-2px;position:absolute;top:-2px;width:19px;box-sizing:border-box;box-shadow:0 0 3px #00000059}.mapboxgl-user-location-show-heading .mapboxgl-user-location-heading{width:0;height:0}.mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:after,.mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:before{content:\"\";border-bottom:7.5px solid #4aa1eb;position:absolute}.mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:before{border-left:7.5px solid rgba(0,0,0,0);transform:translateY(-28px) skewY(-20deg)}.mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:after{border-right:7.5px solid rgba(0,0,0,0);transform:translate(7.5px,-28px) skewY(20deg)}@keyframes mapboxgl-user-location-dot-pulse{0%{transform:scale(1);opacity:1}70%{transform:scale(3);opacity:0}to{transform:scale(1);opacity:0}}.mapboxgl-user-location-dot-stale{background-color:#aaa}.mapboxgl-user-location-dot-stale:after{display:none}.mapboxgl-user-location-accuracy-circle{background-color:#1da1f233;width:1px;height:1px;border-radius:100%}.mapboxgl-crosshair,.mapboxgl-crosshair .mapboxgl-interactive,.mapboxgl-crosshair .mapboxgl-interactive:active{cursor:crosshair}.mapboxgl-boxzoom{position:absolute;top:0;left:0;width:0;height:0;background:#fff;border:2px dotted #202020;opacity:.5}@media print{.mapbox-improve-map{display:none}}.mapboxgl-scroll-zoom-blocker,.mapboxgl-touch-pan-blocker{color:#fff;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif;justify-content:center;text-align:center;position:absolute;display:flex;align-items:center;top:0;left:0;width:100%;height:100%;background:#000000b3;opacity:0;pointer-events:none;transition:opacity .75s ease-in-out;transition-delay:1s}.mapboxgl-scroll-zoom-blocker-show,.mapboxgl-touch-pan-blocker-show{opacity:1;transition:opacity .1s ease-in-out}.mapboxgl-canvas-container.mapboxgl-touch-pan-blocker-override.mapboxgl-scrollable-page,.mapboxgl-canvas-container.mapboxgl-touch-pan-blocker-override.mapboxgl-scrollable-page .mapboxgl-canvas{touch-action:pan-x pan-y}.mapboxgl-ctrl button.mapboxgl-ctrl-level-button{font-weight:600;font-size:14px;text-align:center}.mapboxgl-ctrl button.mapboxgl-ctrl-level-button-selected{background-color:#bccbd7;color:#000}.mapboxgl-ctrl button.mapboxgl-ctrl-level-button-selected:hover{background-color:#ccc}lib-mapbox{display:block;min-width:0;width:100%;height:100%}.lib-mapbox-container{position:relative;width:100%;height:100%}.lib-mapbox-bubble{display:flex;align-items:center;justify-content:center;box-sizing:border-box;border:2px solid #fff;border-radius:50%;box-shadow:0 1px 5px #0000004d;color:#fff;font:600 12px/1;overflow:hidden}.lib-mapbox-bubble:focus-visible{outline:2px solid #2563eb;outline-offset:3px}.lib-mapbox-bubble-tooltip .mapboxgl-popup-content{padding:10px 12px;color:#1f2937;background:#fff;font:12px/1.5;overflow-wrap:anywhere}.lib-mapbox-bubble-details>div+div{margin-top:4px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
8839
|
+
}
|
|
8840
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: Mapbox, decorators: [{
|
|
8841
|
+
type: Component,
|
|
8842
|
+
args: [{ selector: 'lib-mapbox', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div #mapContainer class=\"lib-mapbox-container\"></div>\n", styles: [".mapboxgl-map{font:12px/20px Helvetica Neue,Arial,Helvetica,sans-serif;overflow:hidden;position:relative;-webkit-tap-highlight-color:rgb(0 0 0/0%)}.mapboxgl-canvas{position:absolute;left:0;top:0}.mapboxgl-map:-webkit-full-screen{width:100%;height:100%}.mapboxgl-canary{background-color:salmon}.mapboxgl-canvas-container.mapboxgl-interactive,.mapboxgl-ctrl-group button.mapboxgl-ctrl-compass{cursor:grab;-webkit-user-select:none;user-select:none}.mapboxgl-canvas-container.mapboxgl-interactive.mapboxgl-track-pointer{cursor:pointer}.mapboxgl-canvas-container.mapboxgl-interactive:active,.mapboxgl-ctrl-group button.mapboxgl-ctrl-compass:active{cursor:grabbing}.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate,.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate .mapboxgl-canvas{touch-action:pan-x pan-y}.mapboxgl-canvas-container.mapboxgl-touch-drag-pan,.mapboxgl-canvas-container.mapboxgl-touch-drag-pan .mapboxgl-canvas{touch-action:pinch-zoom}.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan,.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan .mapboxgl-canvas{touch-action:none}.mapboxgl-ctrl-bottom,.mapboxgl-ctrl-bottom-left,.mapboxgl-ctrl-bottom-right,.mapboxgl-ctrl-left,.mapboxgl-ctrl-right,.mapboxgl-ctrl-top,.mapboxgl-ctrl-top-left,.mapboxgl-ctrl-top-right{position:absolute;pointer-events:none;z-index:2}.mapboxgl-ctrl-top-left{top:0;left:0}.mapboxgl-ctrl-top{top:0;left:50%;transform:translate(-50%)}.mapboxgl-ctrl-top-right{top:0;right:0}.mapboxgl-ctrl-right{top:50%;transform:translateY(-50%);right:0}.mapboxgl-ctrl-bottom-right{right:0;bottom:0}.mapboxgl-ctrl-bottom{bottom:0;left:50%;transform:translate(-50%)}.mapboxgl-ctrl-bottom-left{bottom:0;left:0}.mapboxgl-ctrl-left{top:50%;transform:translateY(-50%);left:0}.mapboxgl-ctrl{clear:both;pointer-events:auto}.mapboxgl-ctrl-top-left .mapboxgl-ctrl{margin:10px 0 0 10px;float:left}.mapboxgl-ctrl-top .mapboxgl-ctrl{margin:10px 0;float:left}.mapboxgl-ctrl-top-right .mapboxgl-ctrl{margin:10px 10px 0 0;float:right}.mapboxgl-ctrl-bottom-right .mapboxgl-ctrl,.mapboxgl-ctrl-right .mapboxgl-ctrl{margin:0 10px 10px 0;float:right}.mapboxgl-ctrl-bottom .mapboxgl-ctrl{margin:10px 0;float:left}.mapboxgl-ctrl-bottom-left .mapboxgl-ctrl,.mapboxgl-ctrl-left .mapboxgl-ctrl{margin:0 0 10px 10px;float:left}.mapboxgl-ctrl-group{border-radius:4px;background:#fff}.mapboxgl-ctrl-group:not(:empty){box-shadow:0 0 0 2px #0000001a}@media (-ms-high-contrast: active){.mapboxgl-ctrl-group:not(:empty){box-shadow:0 0 0 2px ButtonText}}.mapboxgl-ctrl-group button{width:32px;height:32px;display:block;padding:0;outline:none;border:0;box-sizing:border-box;background-color:initial;cursor:pointer;overflow:hidden}.mapboxgl-ctrl-group button+button{border-top:1px solid #ddd}.mapboxgl-ctrl button .mapboxgl-ctrl-icon{display:block;width:100%;height:100%;background-repeat:no-repeat;background-position:50%}@media (-ms-high-contrast: active){.mapboxgl-ctrl-icon{background-color:initial}.mapboxgl-ctrl-group button+button{border-top:1px solid buttontext}}.mapboxgl-ctrl-attrib-button:focus,.mapboxgl-ctrl-group button:focus{box-shadow:0 0 2px 2px #0096ff}.mapboxgl-ctrl button:disabled{cursor:not-allowed}.mapboxgl-ctrl button:disabled .mapboxgl-ctrl-icon{opacity:.25}.mapboxgl-ctrl-group button:first-of-type{border-radius:4px 4px 0 0}.mapboxgl-ctrl-group button:last-child{border-radius:0 0 4px 4px}.mapboxgl-ctrl-group button:only-child{border-radius:inherit}.mapboxgl-ctrl button:not(:disabled):hover{background-color:#eee}.mapboxgl-ctrl-group button:focus:focus-visible{box-shadow:0 0 2px 2px #0096ff}.mapboxgl-ctrl-group button:focus:not(:focus-visible){box-shadow:none}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23333%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M10%2013c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h9c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013h-9z%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23333%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M14.5%208.5c-.75%200-1.5.75-1.5%201.5v3h-3c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h3v3c0%20.75.75%201.5%201.5%201.5S16%2019.75%2016%2019v-3h3c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013h-3v-3c0-.75-.75-1.5-1.5-1.5z%22%2F%3E%3C%2Fsvg%3E)}@media (-ms-high-contrast: active){.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M10%2013c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h9c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013h-9z%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M14.5%208.5c-.75%200-1.5.75-1.5%201.5v3h-3c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h3v3c0%20.75.75%201.5%201.5%201.5S16%2019.75%2016%2019v-3h3c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013h-3v-3c0-.75-.75-1.5-1.5-1.5z%22%2F%3E%3C%2Fsvg%3E)}}@media (-ms-high-contrast: black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23000%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M10%2013c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h9c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013h-9z%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23000%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M14.5%208.5c-.75%200-1.5.75-1.5%201.5v3h-3c-.75%200-1.5.75-1.5%201.5S9.25%2016%2010%2016h3v3c0%20.75.75%201.5%201.5%201.5S16%2019.75%2016%2019v-3h3c.75%200%201.5-.75%201.5-1.5S19.75%2013%2019%2013h-3v-3c0-.75-.75-1.5-1.5-1.5z%22%2F%3E%3C%2Fsvg%3E)}}.mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23333%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M24%2016v5.5c0%201.75-.75%202.5-2.5%202.5H16v-1l3-1.5-4-5.5%201-1%205.5%204%201.5-3h1zM6%2016l1.5%203%205.5-4%201%201-4%205.5%203%201.5v1H7.5C5.75%2024%205%2023.25%205%2021.5V16h1zm7-11v1l-3%201.5%204%205.5-1%201-5.5-4L6%2013H5V7.5C5%205.75%205.75%205%207.5%205H13zm11%202.5c0-1.75-.75-2.5-2.5-2.5H16v1l3%201.5-4%205.5%201%201%205.5-4%201.5%203h1V7.5z%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M18.5%2016c-1.75%200-2.5.75-2.5%202.5V24h1l1.5-3%205.5%204%201-1-4-5.5%203-1.5v-1h-5.5zM13%2018.5c0-1.75-.75-2.5-2.5-2.5H5v1l3%201.5L4%2024l1%201%205.5-4%201.5%203h1v-5.5zm3-8c0%201.75.75%202.5%202.5%202.5H24v-1l-3-1.5L25%205l-1-1-5.5%204L17%205h-1v5.5zM10.5%2013c1.75%200%202.5-.75%202.5-2.5V5h-1l-1.5%203L5%204%204%205l4%205.5L5%2012v1h5.5z%22%2F%3E%3C%2Fsvg%3E)}@media (-ms-high-contrast: active){.mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M24%2016v5.5c0%201.75-.75%202.5-2.5%202.5H16v-1l3-1.5-4-5.5%201-1%205.5%204%201.5-3h1zM6%2016l1.5%203%205.5-4%201%201-4%205.5%203%201.5v1H7.5C5.75%2024%205%2023.25%205%2021.5V16h1zm7-11v1l-3%201.5%204%205.5-1%201-5.5-4L6%2013H5V7.5C5%205.75%205.75%205%207.5%205H13zm11%202.5c0-1.75-.75-2.5-2.5-2.5H16v1l3%201.5-4%205.5%201%201%205.5-4%201.5%203h1V7.5z%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M18.5%2016c-1.75%200-2.5.75-2.5%202.5V24h1l1.5-3%205.5%204%201-1-4-5.5%203-1.5v-1h-5.5zM13%2018.5c0-1.75-.75-2.5-2.5-2.5H5v1l3%201.5L4%2024l1%201%205.5-4%201.5%203h1v-5.5zm3-8c0%201.75.75%202.5%202.5%202.5H24v-1l-3-1.5L25%205l-1-1-5.5%204L17%205h-1v5.5zM10.5%2013c1.75%200%202.5-.75%202.5-2.5V5h-1l-1.5%203L5%204%204%205l4%205.5L5%2012v1h5.5z%22%2F%3E%3C%2Fsvg%3E)}}@media (-ms-high-contrast: black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23000%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M24%2016v5.5c0%201.75-.75%202.5-2.5%202.5H16v-1l3-1.5-4-5.5%201-1%205.5%204%201.5-3h1zM6%2016l1.5%203%205.5-4%201%201-4%205.5%203%201.5v1H7.5C5.75%2024%205%2023.25%205%2021.5V16h1zm7-11v1l-3%201.5%204%205.5-1%201-5.5-4L6%2013H5V7.5C5%205.75%205.75%205%207.5%205H13zm11%202.5c0-1.75-.75-2.5-2.5-2.5H16v1l3%201.5-4%205.5%201%201%205.5-4%201.5%203h1V7.5z%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23000%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M18.5%2016c-1.75%200-2.5.75-2.5%202.5V24h1l1.5-3%205.5%204%201-1-4-5.5%203-1.5v-1h-5.5zM13%2018.5c0-1.75-.75-2.5-2.5-2.5H5v1l3%201.5L4%2024l1%201%205.5-4%201.5%203h1v-5.5zm3-8c0%201.75.75%202.5%202.5%202.5H24v-1l-3-1.5L25%205l-1-1-5.5%204L17%205h-1v5.5zM10.5%2013c1.75%200%202.5-.75%202.5-2.5V5h-1l-1.5%203L5%204%204%205l4%205.5L5%2012v1h5.5z%22%2F%3E%3C%2Fsvg%3E)}}.mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23333%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M10.5%2014l4-8%204%208h-8z%22%2F%3E%3Cpath%20id%3D%22south%22%20d%3D%22M10.5%2016l4%208%204-8h-8z%22%20fill%3D%22%23ccc%22%2F%3E%3C%2Fsvg%3E)}@media (-ms-high-contrast: active){.mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23fff%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M10.5%2014l4-8%204%208h-8z%22%2F%3E%3Cpath%20id%3D%22south%22%20d%3D%22M10.5%2016l4%208%204-8h-8z%22%20fill%3D%22%23999%22%2F%3E%3C%2Fsvg%3E)}}@media (-ms-high-contrast: black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23000%22%20viewBox%3D%220%200%2029%2029%22%3E%3Cpath%20d%3D%22M10.5%2014l4-8%204%208h-8z%22%2F%3E%3Cpath%20id%3D%22south%22%20d%3D%22M10.5%2016l4%208%204-8h-8z%22%20fill%3D%22%23ccc%22%2F%3E%3C%2Fsvg%3E)}}.mapboxgl-ctrl button.mapboxgl-ctrl-arrow-up .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20fill%3D%22%23333%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2018%2018%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.29289%2011.7071C4.68342%2012.0976%205.31658%2012.0976%205.70711%2011.7071L9%208.41421L12.2929%2011.7071C12.6834%2012.0976%2013.3166%2012.0976%2013.7071%2011.7071C14.0976%2011.3166%2014.0976%2010.6834%2013.7071%2010.2929L9.70711%206.29289C9.31658%205.90237%208.68342%205.90237%208.29289%206.29289L4.29289%2010.2929C3.90237%2010.6834%203.90237%2011.3166%204.29289%2011.7071Z%22%20fill%3D%22%23333333%22%2F%3E%3C%2Fsvg%3E);background-size:18px 18px}.mapboxgl-ctrl button.mapboxgl-ctrl-arrow-down .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20fill%3D%22%23333%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2018%2018%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.29289%206.29289C4.68342%205.90237%205.31658%205.90237%205.70711%206.29289L9%209.58579L12.2929%206.29289C12.6834%205.90237%2013.3166%205.90237%2013.7071%206.29289C14.0976%206.68342%2014.0976%207.31658%2013.7071%207.70711L9.70711%2011.7071C9.31658%2012.0976%208.68342%2012.0976%208.29289%2011.7071L4.29289%207.70711C3.90237%207.31658%203.90237%206.68342%204.29289%206.29289Z%22%20fill%3D%22%23333333%22%2F%3E%3C%2Fsvg%3E);background-size:18px 18px}.mapboxgl-ctrl button.mapboxgl-ctrl-indoor-toggle .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20fill%3D%22%23333%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2018%2018%22%3E%3Cpath%20d%3D%22M4.0017%203.0017L4.0017%2015.0017L10.0017%2015.0017V12.0017H12.0017V15.0017H14.0017L14.0017%203.0017C14.0097%202.86829%2013.9894%202.73469%2013.9419%202.60973C13.8945%202.48477%2013.8211%202.37129%2013.7266%202.27678C13.6321%202.18228%2013.5186%202.10889%2013.3937%202.06147C13.2687%202.01405%2013.1351%201.99368%2013.0017%202.0017L5.0017%202.0017C4.86829%201.99368%204.73469%202.01405%204.60973%202.06147C4.48477%202.10889%204.37129%202.18228%204.27678%202.27678C4.18228%202.37129%204.10889%202.48477%204.06147%202.60973C4.01405%202.73469%203.99368%202.86829%204.0017%203.0017ZM8.0017%2014.0017H6.0017V12.0017H8.0017V14.0017ZM8.0017%2010.0017H6.0017L6.0017%208.0017H8.0017V10.0017ZM8.0017%206.0017L6.0017%206.0017V4.0017H8.0017V6.0017ZM12.0017%2010.0017H10.0017V8.0017H12.0017V10.0017ZM12.0017%206.0017H10.0017V4.0017L12.0017%204.0017V6.0017Z%22%20fill%3D%22%23333333%22%2F%3E%3C%2Fsvg%3E);background-size:18px 18px}@media (-ms-high-contrast: active){.mapboxgl-ctrl button.mapboxgl-ctrl-indoor-toggle .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20fill%3D%22%23fff%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2018%2018%22%3E%3Cpath%20d%3D%22M4.0017%203.0017L4.0017%2015.0017L10.0017%2015.0017V12.0017H12.0017V15.0017H14.0017L14.0017%203.0017C14.0097%202.86829%2013.9894%202.73469%2013.9419%202.60973C13.8945%202.48477%2013.8211%202.37129%2013.7266%202.27678C13.6321%202.18228%2013.5186%202.10889%2013.3937%202.06147C13.2687%202.01405%2013.1351%201.99368%2013.0017%202.0017L5.0017%202.0017C4.86829%201.99368%204.73469%202.01405%204.60973%202.06147C4.48477%202.10889%204.37129%202.18228%204.27678%202.27678C4.18228%202.37129%204.10889%202.48477%204.06147%202.60973C4.01405%202.73469%203.99368%202.86829%204.0017%203.0017ZM8.0017%2014.0017H6.0017V12.0017H8.0017V14.0017ZM8.0017%2010.0017H6.0017L6.0017%208.0017H8.0017V10.0017ZM8.0017%206.0017L6.0017%206.0017V4.0017H8.0017V6.0017ZM12.0017%2010.0017H10.0017V8.0017H12.0017V10.0017ZM12.0017%206.0017H10.0017V4.0017L12.0017%204.0017V6.0017Z%22%20fill%3D%22%23333333%22%2F%3E%3C%2Fsvg%3E)}}@media (-ms-high-contrast: black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-indoor-toggle .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20fill%3D%22%23000%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2018%2018%22%3E%3Cpath%20d%3D%22M4.0017%203.0017L4.0017%2015.0017L10.0017%2015.0017V12.0017H12.0017V15.0017H14.0017L14.0017%203.0017C14.0097%202.86829%2013.9894%202.73469%2013.9419%202.60973C13.8945%202.48477%2013.8211%202.37129%2013.7266%202.27678C13.6321%202.18228%2013.5186%202.10889%2013.3937%202.06147C13.2687%202.01405%2013.1351%201.99368%2013.0017%202.0017L5.0017%202.0017C4.86829%201.99368%204.73469%202.01405%204.60973%202.06147C4.48477%202.10889%204.37129%202.18228%204.27678%202.27678C4.18228%202.37129%204.10889%202.48477%204.06147%202.60973C4.01405%202.73469%203.99368%202.86829%204.0017%203.0017ZM8.0017%2014.0017H6.0017V12.0017H8.0017V14.0017ZM8.0017%2010.0017H6.0017L6.0017%208.0017H8.0017V10.0017ZM8.0017%206.0017L6.0017%206.0017V4.0017H8.0017V6.0017ZM12.0017%2010.0017H10.0017V8.0017H12.0017V10.0017ZM12.0017%206.0017H10.0017V4.0017L12.0017%204.0017V6.0017Z%22%20fill%3D%22%23333333%22%2F%3E%3C%2Fsvg%3E)}}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23333%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1zm0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7z%22%2F%3E%3Ccircle%20id%3D%22dot%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20id%3D%22stroke%22%20d%3D%22M14%205l1%201-9%209-1-1%209-9z%22%20display%3D%22none%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23aaa%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1zm0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7z%22%2F%3E%3Ccircle%20id%3D%22dot%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20id%3D%22stroke%22%20d%3D%22M14%205l1%201-9%209-1-1%209-9z%22%20fill%3D%22%23f00%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%2333b5e5%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1zm0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7z%22%2F%3E%3Ccircle%20id%3D%22dot%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20id%3D%22stroke%22%20d%3D%22M14%205l1%201-9%209-1-1%209-9z%22%20display%3D%22none%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active-error .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23e58978%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1zm0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7z%22%2F%3E%3Ccircle%20id%3D%22dot%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20id%3D%22stroke%22%20d%3D%22M14%205l1%201-9%209-1-1%209-9z%22%20display%3D%22none%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%2333b5e5%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1zm0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7z%22%2F%3E%3Ccircle%20id%3D%22dot%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%20display%3D%22none%22%2F%3E%3Cpath%20id%3D%22stroke%22%20d%3D%22M14%205l1%201-9%209-1-1%209-9z%22%20display%3D%22none%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background-error .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23e54e33%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1zm0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7z%22%2F%3E%3Ccircle%20id%3D%22dot%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%20display%3D%22none%22%2F%3E%3Cpath%20id%3D%22stroke%22%20d%3D%22M14%205l1%201-9%209-1-1%209-9z%22%20display%3D%22none%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-waiting .mapboxgl-ctrl-icon{animation:mapboxgl-spin 2s linear infinite}@media (-ms-high-contrast: active){.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23fff%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1zm0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7z%22%2F%3E%3Ccircle%20id%3D%22dot%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20id%3D%22stroke%22%20d%3D%22M14%205l1%201-9%209-1-1%209-9z%22%20display%3D%22none%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23999%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1zm0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7z%22%2F%3E%3Ccircle%20id%3D%22dot%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20id%3D%22stroke%22%20d%3D%22M14%205l1%201-9%209-1-1%209-9z%22%20fill%3D%22%23f00%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%2333b5e5%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1zm0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7z%22%2F%3E%3Ccircle%20id%3D%22dot%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20id%3D%22stroke%22%20d%3D%22M14%205l1%201-9%209-1-1%209-9z%22%20display%3D%22none%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active-error .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23e58978%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1zm0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7z%22%2F%3E%3Ccircle%20id%3D%22dot%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20id%3D%22stroke%22%20d%3D%22M14%205l1%201-9%209-1-1%209-9z%22%20display%3D%22none%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%2333b5e5%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1zm0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7z%22%2F%3E%3Ccircle%20id%3D%22dot%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%20display%3D%22none%22%2F%3E%3Cpath%20id%3D%22stroke%22%20d%3D%22M14%205l1%201-9%209-1-1%209-9z%22%20display%3D%22none%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background-error .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23e54e33%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1zm0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7z%22%2F%3E%3Ccircle%20id%3D%22dot%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%20display%3D%22none%22%2F%3E%3Cpath%20id%3D%22stroke%22%20d%3D%22M14%205l1%201-9%209-1-1%209-9z%22%20display%3D%22none%22%2F%3E%3C%2Fsvg%3E)}}@media (-ms-high-contrast: black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23000%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1zm0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7z%22%2F%3E%3Ccircle%20id%3D%22dot%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20id%3D%22stroke%22%20d%3D%22M14%205l1%201-9%209-1-1%209-9z%22%20display%3D%22none%22%2F%3E%3C%2Fsvg%3E)}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22%23666%22%3E%3Cpath%20d%3D%22M10%204C9%204%209%205%209%205v.1A5%205%200%200%200%205.1%209H5s-1%200-1%201%201%201%201%201h.1A5%205%200%200%200%209%2014.9v.1s0%201%201%201%201-1%201-1v-.1a5%205%200%200%200%203.9-3.9h.1s1%200%201-1-1-1-1-1h-.1A5%205%200%200%200%2011%205.1V5s0-1-1-1zm0%202.5a3.5%203.5%200%201%201%200%207%203.5%203.5%200%201%201%200-7z%22%2F%3E%3Ccircle%20id%3D%22dot%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%222%22%2F%3E%3Cpath%20id%3D%22stroke%22%20d%3D%22M14%205l1%201-9%209-1-1%209-9z%22%20fill%3D%22%23f00%22%2F%3E%3C%2Fsvg%3E)}}@keyframes mapboxgl-spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}a.mapboxgl-ctrl-logo{width:88px;height:23px;margin:0 0 -4px -4px;display:block;background-repeat:no-repeat;cursor:pointer;overflow:hidden;background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20fill-rule%3D%22evenodd%22%20viewBox%3D%220%200%2088%2023%22%3E%3Cdefs%3E%3Cpath%20id%3D%22logo%22%20d%3D%22M11.5%202.25c5.105%200%209.25%204.145%209.25%209.25s-4.145%209.25-9.25%209.25-9.25-4.145-9.25-9.25%204.145-9.25%209.25-9.25zM6.997%2015.983c-.051-.338-.828-5.802%202.233-8.873a4.395%204.395%200%20013.13-1.28c1.27%200%202.49.51%203.39%201.42.91.9%201.42%202.12%201.42%203.39%200%201.18-.449%202.301-1.28%203.13C12.72%2016.93%207%2016%207%2016l-.003-.017zM15.3%2010.5l-2%20.8-.8%202-.8-2-2-.8%202-.8.8-2%20.8%202%202%20.8z%22%2F%3E%3Cpath%20id%3D%22text%22%20d%3D%22M50.63%208c.13%200%20.23.1.23.23V9c.7-.76%201.7-1.18%202.73-1.18%202.17%200%203.95%201.85%203.95%204.17s-1.77%204.19-3.94%204.19c-1.04%200-2.03-.43-2.74-1.18v3.77c0%20.13-.1.23-.23.23h-1.4c-.13%200-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01%200%20.01%200%20.01-.01.13%200%20.22.1.22.22v7.55c0%20.12-.1.23-.23.23h-1.4c-.13%200-.23-.1-.23-.23V15c-.7.76-1.69%201.19-2.73%201.19-2.17%200-3.94-1.87-3.94-4.19%200-2.32%201.77-4.19%203.94-4.19%201.03%200%202.02.43%202.73%201.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24%204.24%200%2000-4.16%203.29c-.13.59-.13%201.19%200%201.77a4.233%204.233%200%20004.17%203.3c2.35%200%204.26-1.87%204.26-4.19%200-2.32-1.9-4.17-4.27-4.17zM60.63%205c.13%200%20.23.1.23.23v3.76c.7-.76%201.7-1.18%202.73-1.18%201.88%200%203.45%201.4%203.84%203.28.13.59.13%201.2%200%201.8-.39%201.88-1.96%203.29-3.84%203.29-1.03%200-2.02-.43-2.73-1.18v.77c0%20.12-.1.23-.23.23h-1.4c-.13%200-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34%2011h-1.4c-.13%200-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13%200%20.22.11.23.22v.68c.5-.68%201.3-1.09%202.16-1.1h.03c1.09%200%202.09.6%202.6%201.55.45-.95%201.4-1.55%202.44-1.56%201.62%200%202.93%201.25%202.9%202.78l.03%205.2c0%20.13-.1.23-.23.23h-1.41c-.13%200-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8%200-1.46.7-1.59%201.62l.01%204.68c0%20.13-.11.23-.23.23h-1.41c-.13%200-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85%200-1.54.79-1.6%201.8v4.5c0%20.13-.1.23-.23.23zm53.615%200h-1.61c-.04%200-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213%200%2001-.03-.12c0-.12.09-.21.21-.21h1.61c.13%200%20.24.06.3.17l1.41%202.37%201.4-2.37a.34.34%200%2001.3-.17h1.6c.04%200%20.08.01.12.03.09.06.13.19.06.28l-2.37%203.65%202.43%203.7c0%20.05.01.09.01.13%200%20.12-.09.21-.21.21h-1.61c-.13%200-.24-.06-.3-.17l-1.44-2.42-1.44%202.42a.34.34%200%2001-.3.17zm-7.12-1.49c-1.33%200-2.42-1.12-2.42-2.51%200-1.39%201.08-2.52%202.42-2.52%201.33%200%202.42%201.12%202.42%202.51%200%201.39-1.08%202.51-2.42%202.52zm-19.865%200c-1.32%200-2.39-1.11-2.42-2.48v-.07c.02-1.38%201.09-2.49%202.4-2.49%201.32%200%202.41%201.12%202.41%202.51%200%201.39-1.07%202.52-2.39%202.53zm-8.11-2.48c-.01%201.37-1.09%202.47-2.41%202.47s-2.42-1.12-2.42-2.51c0-1.39%201.08-2.52%202.4-2.52%201.33%200%202.39%201.11%202.41%202.48l.02.08zm18.12%202.47c-1.32%200-2.39-1.11-2.41-2.48v-.06c.02-1.38%201.09-2.48%202.41-2.48s2.42%201.12%202.42%202.51c0%201.39-1.09%202.51-2.42%202.51z%22%2F%3E%3C%2Fdefs%3E%3Cmask%20id%3D%22clip%22%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22100%25%22%20height%3D%22100%25%22%20fill%3D%22white%22%2F%3E%3Cuse%20xlink%3Ahref%3D%22%23logo%22%2F%3E%3Cuse%20xlink%3Ahref%3D%22%23text%22%2F%3E%3C%2Fmask%3E%3Cg%20id%3D%22outline%22%20opacity%3D%220.3%22%20stroke%3D%22%23000%22%20stroke-width%3D%223%22%3E%3Ccircle%20mask%3D%22url(%23clip)%22%20cx%3D%2211.5%22%20cy%3D%2211.5%22%20r%3D%229.25%22%2F%3E%3Cuse%20xlink%3Ahref%3D%22%23text%22%20mask%3D%22url(%23clip)%22%2F%3E%3C%2Fg%3E%3Cg%20id%3D%22fill%22%20opacity%3D%220.9%22%20fill%3D%22%23fff%22%3E%3Cuse%20xlink%3Ahref%3D%22%23logo%22%2F%3E%3Cuse%20xlink%3Ahref%3D%22%23text%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}a.mapboxgl-ctrl-logo.mapboxgl-compact{width:23px}@media (-ms-high-contrast: active){a.mapboxgl-ctrl-logo{background-color:initial;background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20fill-rule%3D%22evenodd%22%20viewBox%3D%220%200%2088%2023%22%3E%3Cdefs%3E%3Cpath%20id%3D%22logo%22%20d%3D%22M11.5%202.25c5.105%200%209.25%204.145%209.25%209.25s-4.145%209.25-9.25%209.25-9.25-4.145-9.25-9.25%204.145-9.25%209.25-9.25zM6.997%2015.983c-.051-.338-.828-5.802%202.233-8.873a4.395%204.395%200%20013.13-1.28c1.27%200%202.49.51%203.39%201.42.91.9%201.42%202.12%201.42%203.39%200%201.18-.449%202.301-1.28%203.13C12.72%2016.93%207%2016%207%2016l-.003-.017zM15.3%2010.5l-2%20.8-.8%202-.8-2-2-.8%202-.8.8-2%20.8%202%202%20.8z%22%2F%3E%3Cpath%20id%3D%22text%22%20d%3D%22M50.63%208c.13%200%20.23.1.23.23V9c.7-.76%201.7-1.18%202.73-1.18%202.17%200%203.95%201.85%203.95%204.17s-1.77%204.19-3.94%204.19c-1.04%200-2.03-.43-2.74-1.18v3.77c0%20.13-.1.23-.23.23h-1.4c-.13%200-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01%200%20.01%200%20.01-.01.13%200%20.22.1.22.22v7.55c0%20.12-.1.23-.23.23h-1.4c-.13%200-.23-.1-.23-.23V15c-.7.76-1.69%201.19-2.73%201.19-2.17%200-3.94-1.87-3.94-4.19%200-2.32%201.77-4.19%203.94-4.19%201.03%200%202.02.43%202.73%201.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24%204.24%200%2000-4.16%203.29c-.13.59-.13%201.19%200%201.77a4.233%204.233%200%20004.17%203.3c2.35%200%204.26-1.87%204.26-4.19%200-2.32-1.9-4.17-4.27-4.17zM60.63%205c.13%200%20.23.1.23.23v3.76c.7-.76%201.7-1.18%202.73-1.18%201.88%200%203.45%201.4%203.84%203.28.13.59.13%201.2%200%201.8-.39%201.88-1.96%203.29-3.84%203.29-1.03%200-2.02-.43-2.73-1.18v.77c0%20.12-.1.23-.23.23h-1.4c-.13%200-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34%2011h-1.4c-.13%200-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13%200%20.22.11.23.22v.68c.5-.68%201.3-1.09%202.16-1.1h.03c1.09%200%202.09.6%202.6%201.55.45-.95%201.4-1.55%202.44-1.56%201.62%200%202.93%201.25%202.9%202.78l.03%205.2c0%20.13-.1.23-.23.23h-1.41c-.13%200-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8%200-1.46.7-1.59%201.62l.01%204.68c0%20.13-.11.23-.23.23h-1.41c-.13%200-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85%200-1.54.79-1.6%201.8v4.5c0%20.13-.1.23-.23.23zm53.615%200h-1.61c-.04%200-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213%200%2001-.03-.12c0-.12.09-.21.21-.21h1.61c.13%200%20.24.06.3.17l1.41%202.37%201.4-2.37a.34.34%200%2001.3-.17h1.6c.04%200%20.08.01.12.03.09.06.13.19.06.28l-2.37%203.65%202.43%203.7c0%20.05.01.09.01.13%200%20.12-.09.21-.21.21h-1.61c-.13%200-.24-.06-.3-.17l-1.44-2.42-1.44%202.42a.34.34%200%2001-.3.17zm-7.12-1.49c-1.33%200-2.42-1.12-2.42-2.51%200-1.39%201.08-2.52%202.42-2.52%201.33%200%202.42%201.12%202.42%202.51%200%201.39-1.08%202.51-2.42%202.52zm-19.865%200c-1.32%200-2.39-1.11-2.42-2.48v-.07c.02-1.38%201.09-2.49%202.4-2.49%201.32%200%202.41%201.12%202.41%202.51%200%201.39-1.07%202.52-2.39%202.53zm-8.11-2.48c-.01%201.37-1.09%202.47-2.41%202.47s-2.42-1.12-2.42-2.51c0-1.39%201.08-2.52%202.4-2.52%201.33%200%202.39%201.11%202.41%202.48l.02.08zm18.12%202.47c-1.32%200-2.39-1.11-2.41-2.48v-.06c.02-1.38%201.09-2.48%202.41-2.48s2.42%201.12%202.42%202.51c0%201.39-1.09%202.51-2.42%202.51z%22%2F%3E%3C%2Fdefs%3E%3Cmask%20id%3D%22clip%22%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22100%25%22%20height%3D%22100%25%22%20fill%3D%22white%22%2F%3E%3Cuse%20xlink%3Ahref%3D%22%23logo%22%2F%3E%3Cuse%20xlink%3Ahref%3D%22%23text%22%2F%3E%3C%2Fmask%3E%3Cg%20id%3D%22outline%22%20opacity%3D%221%22%20stroke%3D%22%23000%22%20stroke-width%3D%223%22%3E%3Ccircle%20mask%3D%22url(%23clip)%22%20cx%3D%2211.5%22%20cy%3D%2211.5%22%20r%3D%229.25%22%2F%3E%3Cuse%20xlink%3Ahref%3D%22%23text%22%20mask%3D%22url(%23clip)%22%2F%3E%3C%2Fg%3E%3Cg%20id%3D%22fill%22%20opacity%3D%221%22%20fill%3D%22%23fff%22%3E%3Cuse%20xlink%3Ahref%3D%22%23logo%22%2F%3E%3Cuse%20xlink%3Ahref%3D%22%23text%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}}@media (-ms-high-contrast: black-on-white){a.mapboxgl-ctrl-logo{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20fill-rule%3D%22evenodd%22%20viewBox%3D%220%200%2088%2023%22%3E%3Cdefs%3E%3Cpath%20id%3D%22logo%22%20d%3D%22M11.5%202.25c5.105%200%209.25%204.145%209.25%209.25s-4.145%209.25-9.25%209.25-9.25-4.145-9.25-9.25%204.145-9.25%209.25-9.25zM6.997%2015.983c-.051-.338-.828-5.802%202.233-8.873a4.395%204.395%200%20013.13-1.28c1.27%200%202.49.51%203.39%201.42.91.9%201.42%202.12%201.42%203.39%200%201.18-.449%202.301-1.28%203.13C12.72%2016.93%207%2016%207%2016l-.003-.017zM15.3%2010.5l-2%20.8-.8%202-.8-2-2-.8%202-.8.8-2%20.8%202%202%20.8z%22%2F%3E%3Cpath%20id%3D%22text%22%20d%3D%22M50.63%208c.13%200%20.23.1.23.23V9c.7-.76%201.7-1.18%202.73-1.18%202.17%200%203.95%201.85%203.95%204.17s-1.77%204.19-3.94%204.19c-1.04%200-2.03-.43-2.74-1.18v3.77c0%20.13-.1.23-.23.23h-1.4c-.13%200-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01%200%20.01%200%20.01-.01.13%200%20.22.1.22.22v7.55c0%20.12-.1.23-.23.23h-1.4c-.13%200-.23-.1-.23-.23V15c-.7.76-1.69%201.19-2.73%201.19-2.17%200-3.94-1.87-3.94-4.19%200-2.32%201.77-4.19%203.94-4.19%201.03%200%202.02.43%202.73%201.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24%204.24%200%2000-4.16%203.29c-.13.59-.13%201.19%200%201.77a4.233%204.233%200%20004.17%203.3c2.35%200%204.26-1.87%204.26-4.19%200-2.32-1.9-4.17-4.27-4.17zM60.63%205c.13%200%20.23.1.23.23v3.76c.7-.76%201.7-1.18%202.73-1.18%201.88%200%203.45%201.4%203.84%203.28.13.59.13%201.2%200%201.8-.39%201.88-1.96%203.29-3.84%203.29-1.03%200-2.02-.43-2.73-1.18v.77c0%20.12-.1.23-.23.23h-1.4c-.13%200-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34%2011h-1.4c-.13%200-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13%200%20.22.11.23.22v.68c.5-.68%201.3-1.09%202.16-1.1h.03c1.09%200%202.09.6%202.6%201.55.45-.95%201.4-1.55%202.44-1.56%201.62%200%202.93%201.25%202.9%202.78l.03%205.2c0%20.13-.1.23-.23.23h-1.41c-.13%200-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8%200-1.46.7-1.59%201.62l.01%204.68c0%20.13-.11.23-.23.23h-1.41c-.13%200-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85%200-1.54.79-1.6%201.8v4.5c0%20.13-.1.23-.23.23zm53.615%200h-1.61c-.04%200-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213%200%2001-.03-.12c0-.12.09-.21.21-.21h1.61c.13%200%20.24.06.3.17l1.41%202.37%201.4-2.37a.34.34%200%2001.3-.17h1.6c.04%200%20.08.01.12.03.09.06.13.19.06.28l-2.37%203.65%202.43%203.7c0%20.05.01.09.01.13%200%20.12-.09.21-.21.21h-1.61c-.13%200-.24-.06-.3-.17l-1.44-2.42-1.44%202.42a.34.34%200%2001-.3.17zm-7.12-1.49c-1.33%200-2.42-1.12-2.42-2.51%200-1.39%201.08-2.52%202.42-2.52%201.33%200%202.42%201.12%202.42%202.51%200%201.39-1.08%202.51-2.42%202.52zm-19.865%200c-1.32%200-2.39-1.11-2.42-2.48v-.07c.02-1.38%201.09-2.49%202.4-2.49%201.32%200%202.41%201.12%202.41%202.51%200%201.39-1.07%202.52-2.39%202.53zm-8.11-2.48c-.01%201.37-1.09%202.47-2.41%202.47s-2.42-1.12-2.42-2.51c0-1.39%201.08-2.52%202.4-2.52%201.33%200%202.39%201.11%202.41%202.48l.02.08zm18.12%202.47c-1.32%200-2.39-1.11-2.41-2.48v-.06c.02-1.38%201.09-2.48%202.41-2.48s2.42%201.12%202.42%202.51c0%201.39-1.09%202.51-2.42%202.51z%22%2F%3E%3C%2Fdefs%3E%3Cmask%20id%3D%22clip%22%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22100%25%22%20height%3D%22100%25%22%20fill%3D%22white%22%2F%3E%3Cuse%20xlink%3Ahref%3D%22%23logo%22%2F%3E%3Cuse%20xlink%3Ahref%3D%22%23text%22%2F%3E%3C%2Fmask%3E%3Cg%20id%3D%22outline%22%20opacity%3D%221%22%20stroke%3D%22%23fff%22%20stroke-width%3D%223%22%20fill%3D%22%23fff%22%3E%3Ccircle%20mask%3D%22url(%23clip)%22%20cx%3D%2211.5%22%20cy%3D%2211.5%22%20r%3D%229.25%22%2F%3E%3Cuse%20xlink%3Ahref%3D%22%23text%22%20mask%3D%22url(%23clip)%22%2F%3E%3C%2Fg%3E%3Cg%20id%3D%22fill%22%20opacity%3D%221%22%20fill%3D%22%23000%22%3E%3Cuse%20xlink%3Ahref%3D%22%23logo%22%2F%3E%3Cuse%20xlink%3Ahref%3D%22%23text%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}}.mapboxgl-ctrl.mapboxgl-ctrl-attrib{padding:0 5px;background-color:#ffffff80;margin:0}@media screen{.mapboxgl-ctrl-attrib.mapboxgl-compact{min-height:20px;padding:2px 24px 2px 0;margin:10px;position:relative;background-color:#fff;border-radius:12px;box-sizing:initial}.mapboxgl-ctrl-attrib.mapboxgl-compact-show{padding:2px 28px 2px 8px;visibility:visible}:is(.mapboxgl-ctrl-bottom-left,.mapboxgl-ctrl-left,.mapboxgl-ctrl-top-left)>.mapboxgl-ctrl-attrib.mapboxgl-compact-show{padding:2px 8px 2px 28px;border-radius:12px}.mapboxgl-ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-inner{display:none}.mapboxgl-ctrl-attrib-button{display:none;cursor:pointer;position:absolute;background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill-rule%3D%22evenodd%22%3E%3Cpath%20d%3D%22M4%2010a6%206%200%201%200%2012%200%206%206%200%201%200-12%200m5-3a1%201%200%201%200%202%200%201%201%200%201%200-2%200m0%203a1%201%200%201%201%202%200v3a1%201%200%201%201-2%200%22%2F%3E%3C%2Fsvg%3E);background-color:#ffffff80;width:24px;height:24px;box-sizing:border-box;border-radius:12px;outline:none;top:0;right:0;border:0}:is(.mapboxgl-ctrl-bottom-left,.mapboxgl-ctrl-left,.mapboxgl-ctrl-top-left) .mapboxgl-ctrl-attrib-button{left:0}.mapboxgl-ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-button,.mapboxgl-ctrl-attrib.mapboxgl-compact-show .mapboxgl-ctrl-attrib-inner{display:block}.mapboxgl-ctrl-attrib.mapboxgl-compact-show .mapboxgl-ctrl-attrib-button{background-color:#0000000d}.mapboxgl-ctrl-bottom-right>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{bottom:0;right:0}.mapboxgl-ctrl-right>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{right:0}.mapboxgl-ctrl-top-right>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{top:0;right:0}.mapboxgl-ctrl-top-left>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{top:0;left:0}.mapboxgl-ctrl-bottom-left>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{bottom:0;left:0}.mapboxgl-ctrl-left>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{left:0}}@media screen and (-ms-high-contrast: active){.mapboxgl-ctrl-attrib.mapboxgl-compact:after{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill-rule%3D%22evenodd%22%20fill%3D%22%23fff%22%3E%3Cpath%20d%3D%22M4%2010a6%206%200%201%200%2012%200%206%206%200%201%200-12%200m5-3a1%201%200%201%200%202%200%201%201%200%201%200-2%200m0%203a1%201%200%201%201%202%200v3a1%201%200%201%201-2%200%22%2F%3E%3C%2Fsvg%3E)}}@media screen and (-ms-high-contrast: black-on-white){.mapboxgl-ctrl-attrib.mapboxgl-compact:after{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill-rule%3D%22evenodd%22%3E%3Cpath%20d%3D%22M4%2010a6%206%200%201%200%2012%200%206%206%200%201%200-12%200m5-3a1%201%200%201%200%202%200%201%201%200%201%200-2%200m0%203a1%201%200%201%201%202%200v3a1%201%200%201%201-2%200%22%2F%3E%3C%2Fsvg%3E)}}.mapboxgl-ctrl-attrib a{color:#000000bf;text-decoration:none}.mapboxgl-ctrl-attrib a:hover{color:inherit;text-decoration:underline}.mapboxgl-ctrl-attrib .mapbox-improve-map{font-weight:700;margin-left:2px}.mapboxgl-attrib-empty{display:none}.mapboxgl-ctrl-scale{background-color:#ffffffbf;font-size:10px;border-color:#333;border-style:none solid solid;border-width:medium 2px 2px;padding:0 5px;color:#333;box-sizing:border-box;white-space:nowrap}.mapboxgl-popup{position:absolute;top:0;left:0;display:flex;will-change:transform;pointer-events:none}.mapboxgl-popup-anchor-top,.mapboxgl-popup-anchor-top-left,.mapboxgl-popup-anchor-top-right{flex-direction:column}.mapboxgl-popup-anchor-bottom,.mapboxgl-popup-anchor-bottom-left,.mapboxgl-popup-anchor-bottom-right{flex-direction:column-reverse}.mapboxgl-popup-anchor-left{flex-direction:row}.mapboxgl-popup-anchor-right{flex-direction:row-reverse}.mapboxgl-popup-tip{width:0;height:0;border:10px solid rgba(0,0,0,0);z-index:1}.mapboxgl-popup-anchor-top .mapboxgl-popup-tip{align-self:center;border-top:none;border-bottom-color:#fff}.mapboxgl-popup-anchor-top-left .mapboxgl-popup-tip{align-self:flex-start;border-top:none;border-left:none;border-bottom-color:#fff}.mapboxgl-popup-anchor-top-right .mapboxgl-popup-tip{align-self:flex-end;border-top:none;border-right:none;border-bottom-color:#fff}.mapboxgl-popup-anchor-bottom .mapboxgl-popup-tip{align-self:center;border-bottom:none;border-top-color:#fff}.mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-tip{align-self:flex-start;border-bottom:none;border-left:none;border-top-color:#fff}.mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-tip{align-self:flex-end;border-bottom:none;border-right:none;border-top-color:#fff}.mapboxgl-popup-anchor-left .mapboxgl-popup-tip{align-self:center;border-left:none;border-right-color:#fff}.mapboxgl-popup-anchor-right .mapboxgl-popup-tip{align-self:center;border-right:none;border-left-color:#fff}.mapboxgl-popup-close-button{position:absolute;right:0;top:0;border:0;border-radius:0 3px 0 0;cursor:pointer;background-color:initial}.mapboxgl-popup-close-button:hover{background-color:#eee}.mapboxgl-popup-content{position:relative;background:#fff;border-radius:3px;box-shadow:0 1px 2px #0000001a;padding:10px 10px 15px;pointer-events:auto}.mapboxgl-popup-anchor-top-left .mapboxgl-popup-content{border-top-left-radius:0}.mapboxgl-popup-anchor-top-right .mapboxgl-popup-content{border-top-right-radius:0}.mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-content{border-bottom-left-radius:0}.mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-content{border-bottom-right-radius:0}.mapboxgl-popup-track-pointer{display:none}.mapboxgl-popup-track-pointer *{pointer-events:none;-webkit-user-select:none;user-select:none}.mapboxgl-map:hover .mapboxgl-popup-track-pointer{display:flex}.mapboxgl-map:active .mapboxgl-popup-track-pointer{display:none}.mapboxgl-marker{position:absolute;top:0;left:0;will-change:transform;opacity:1;transition:opacity .2s}.mapboxgl-user-location-dot,.mapboxgl-user-location-dot:before{background-color:#1da1f2;width:15px;height:15px;border-radius:50%}.mapboxgl-user-location-dot:before{content:\"\";position:absolute;animation:mapboxgl-user-location-dot-pulse 2s infinite}.mapboxgl-user-location-dot:after{border-radius:50%;border:2px solid #fff;content:\"\";height:19px;left:-2px;position:absolute;top:-2px;width:19px;box-sizing:border-box;box-shadow:0 0 3px #00000059}.mapboxgl-user-location-show-heading .mapboxgl-user-location-heading{width:0;height:0}.mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:after,.mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:before{content:\"\";border-bottom:7.5px solid #4aa1eb;position:absolute}.mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:before{border-left:7.5px solid rgba(0,0,0,0);transform:translateY(-28px) skewY(-20deg)}.mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:after{border-right:7.5px solid rgba(0,0,0,0);transform:translate(7.5px,-28px) skewY(20deg)}@keyframes mapboxgl-user-location-dot-pulse{0%{transform:scale(1);opacity:1}70%{transform:scale(3);opacity:0}to{transform:scale(1);opacity:0}}.mapboxgl-user-location-dot-stale{background-color:#aaa}.mapboxgl-user-location-dot-stale:after{display:none}.mapboxgl-user-location-accuracy-circle{background-color:#1da1f233;width:1px;height:1px;border-radius:100%}.mapboxgl-crosshair,.mapboxgl-crosshair .mapboxgl-interactive,.mapboxgl-crosshair .mapboxgl-interactive:active{cursor:crosshair}.mapboxgl-boxzoom{position:absolute;top:0;left:0;width:0;height:0;background:#fff;border:2px dotted #202020;opacity:.5}@media print{.mapbox-improve-map{display:none}}.mapboxgl-scroll-zoom-blocker,.mapboxgl-touch-pan-blocker{color:#fff;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif;justify-content:center;text-align:center;position:absolute;display:flex;align-items:center;top:0;left:0;width:100%;height:100%;background:#000000b3;opacity:0;pointer-events:none;transition:opacity .75s ease-in-out;transition-delay:1s}.mapboxgl-scroll-zoom-blocker-show,.mapboxgl-touch-pan-blocker-show{opacity:1;transition:opacity .1s ease-in-out}.mapboxgl-canvas-container.mapboxgl-touch-pan-blocker-override.mapboxgl-scrollable-page,.mapboxgl-canvas-container.mapboxgl-touch-pan-blocker-override.mapboxgl-scrollable-page .mapboxgl-canvas{touch-action:pan-x pan-y}.mapboxgl-ctrl button.mapboxgl-ctrl-level-button{font-weight:600;font-size:14px;text-align:center}.mapboxgl-ctrl button.mapboxgl-ctrl-level-button-selected{background-color:#bccbd7;color:#000}.mapboxgl-ctrl button.mapboxgl-ctrl-level-button-selected:hover{background-color:#ccc}lib-mapbox{display:block;min-width:0;width:100%;height:100%}.lib-mapbox-container{position:relative;width:100%;height:100%}.lib-mapbox-bubble{display:flex;align-items:center;justify-content:center;box-sizing:border-box;border:2px solid #fff;border-radius:50%;box-shadow:0 1px 5px #0000004d;color:#fff;font:600 12px/1;overflow:hidden}.lib-mapbox-bubble:focus-visible{outline:2px solid #2563eb;outline-offset:3px}.lib-mapbox-bubble-tooltip .mapboxgl-popup-content{padding:10px 12px;color:#1f2937;background:#fff;font:12px/1.5;overflow-wrap:anywhere}.lib-mapbox-bubble-details>div+div{margin-top:4px}\n"] }]
|
|
8843
|
+
}], propDecorators: { config: [{
|
|
8844
|
+
type: Input,
|
|
8845
|
+
args: [{ required: true }]
|
|
8846
|
+
}], mapLoad: [{
|
|
8847
|
+
type: Output
|
|
8848
|
+
}], mapError: [{
|
|
8849
|
+
type: Output
|
|
8850
|
+
}], mapContainer: [{
|
|
8851
|
+
type: ViewChild,
|
|
8852
|
+
args: ['mapContainer', { static: true }]
|
|
8853
|
+
}] } });
|
|
8854
|
+
|
|
7559
8855
|
/**
|
|
7560
8856
|
* Generated bundle index. Do not edit.
|
|
7561
8857
|
*/
|
|
7562
8858
|
|
|
7563
|
-
export { BarChart, ChartLegendAdapter, ChartLegendComponent, Charts, CustomChartComponent, DoughnutChart, GanttChart, GaugeChart, Heatmap, LinesChart, PieChart, RightClickCard, SankeyChart, ScatterChartComp, StackedAreaChart, StatusTimelineComponent };
|
|
8859
|
+
export { BarChart, ChartLegendAdapter, ChartLegendComponent, Charts, CustomChartComponent, DoughnutChart, GanttChart, GaugeChart, Heatmap, HeatmapPivot, LinesChart, Mapbox, PieChart, RightClickCard, SankeyChart, ScatterChartComp, StackedAreaChart, StatusTimelineComponent };
|
|
7564
8860
|
//# sourceMappingURL=cats-charts.mjs.map
|