@richpods/tiny-geojson-tool 0.1.0
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/LICENSE.md +55 -0
- package/README.md +161 -0
- package/dist/components/EditorMap.vue.d.ts +22 -0
- package/dist/components/EditorToolbar.vue.d.ts +13 -0
- package/dist/components/GeoJsonEditor.vue.d.ts +23 -0
- package/dist/components/GeoJsonViewer.vue.d.ts +12 -0
- package/dist/components/LayerItem.vue.d.ts +29 -0
- package/dist/components/LayerPanel.vue.d.ts +23 -0
- package/dist/composables/useDrawing.d.ts +21 -0
- package/dist/composables/useGeoJson.d.ts +14 -0
- package/dist/composables/useMapStyle.d.ts +4 -0
- package/dist/constants.d.ts +30 -0
- package/dist/index.d.ts +15 -0
- package/dist/l10n.d.ts +42 -0
- package/dist/styles/editor.css +1 -0
- package/dist/tiny-geojson-tool.js +1961 -0
- package/dist/types.d.ts +106 -0
- package/dist/utils/icons.d.ts +9 -0
- package/dist/utils/id.d.ts +1 -0
- package/dist/utils/layers.d.ts +20 -0
- package/dist/utils/mapView.d.ts +8 -0
- package/package.json +75 -0
|
@@ -0,0 +1,1961 @@
|
|
|
1
|
+
import { ref as F, computed as I, defineComponent as Z, watch as R, onMounted as a1, onUnmounted as u1, openBlock as k, createElementBlock as b, Fragment as z, renderList as o1, createElementVNode as r, normalizeClass as q, createStaticVNode as d1, createCommentVNode as D, normalizeStyle as G, toDisplayString as x, createTextVNode as V, withDirectives as C1, vModelText as L1, nextTick as _1, createVNode as K, useModel as A1, mergeModels as S1 } from "vue";
|
|
2
|
+
import U, { LngLatBounds as V1, Popup as p1 } from "maplibre-gl";
|
|
3
|
+
import { Protocol as g1 } from "pmtiles";
|
|
4
|
+
const T1 = {
|
|
5
|
+
toolSelect: "Select",
|
|
6
|
+
toolPoint: "Point",
|
|
7
|
+
toolMarker: "Marker",
|
|
8
|
+
toolLine: "Line",
|
|
9
|
+
toolPolygon: "Polygon",
|
|
10
|
+
toolEraser: "Eraser",
|
|
11
|
+
propTitle: "Title",
|
|
12
|
+
propDescription: "Description",
|
|
13
|
+
propFillColor: "Fill color",
|
|
14
|
+
propFillOpacity: "Fill opacity",
|
|
15
|
+
propStrokeColor: "Stroke color",
|
|
16
|
+
propStrokeOpacity: "Stroke opacity",
|
|
17
|
+
propStrokeWidth: "Stroke width",
|
|
18
|
+
propCircleRadius: "Radius",
|
|
19
|
+
propPointColor: "Color",
|
|
20
|
+
propMarkerColor: "Marker color",
|
|
21
|
+
propMarkerSize: "Marker size",
|
|
22
|
+
propSizeSmall: "Small",
|
|
23
|
+
propSizeMedium: "Medium",
|
|
24
|
+
propSizeLarge: "Large",
|
|
25
|
+
propIcon: "Icon",
|
|
26
|
+
propIconRemove: "Remove icon",
|
|
27
|
+
propIconNone: "None",
|
|
28
|
+
propIconSearch: "Search icons...",
|
|
29
|
+
propIconNoResults: "No icons found",
|
|
30
|
+
propLabel: "Label",
|
|
31
|
+
propLabelPosition: "Label position",
|
|
32
|
+
propPositionTop: "Top",
|
|
33
|
+
propPositionBottom: "Bottom",
|
|
34
|
+
propPositionLeft: "Left",
|
|
35
|
+
propPositionRight: "Right",
|
|
36
|
+
layerPanelTitle: "Layers",
|
|
37
|
+
layerPanelEmpty: "Use the toolbar to add features to the map.",
|
|
38
|
+
layerDelete: "Delete",
|
|
39
|
+
layerPoint: "Point",
|
|
40
|
+
layerMarker: "Marker",
|
|
41
|
+
layerLine: "Line",
|
|
42
|
+
layerPolygon: "Polygon"
|
|
43
|
+
}, v1 = 10, m1 = [0, 20], f1 = 2, P = {
|
|
44
|
+
fill: "#555555",
|
|
45
|
+
fillOpacity: 0.6,
|
|
46
|
+
stroke: "#555555",
|
|
47
|
+
strokeOpacity: 1,
|
|
48
|
+
strokeWidth: 2,
|
|
49
|
+
markerColor: "#7e7e7e",
|
|
50
|
+
markerSize: "medium",
|
|
51
|
+
circleRadius: 8
|
|
52
|
+
}, X = {
|
|
53
|
+
small: 0.66,
|
|
54
|
+
medium: 1,
|
|
55
|
+
large: 1.5
|
|
56
|
+
}, P1 = {
|
|
57
|
+
fill: "editor-fill",
|
|
58
|
+
line: "editor-line",
|
|
59
|
+
points: "editor-points",
|
|
60
|
+
symbols: "editor-symbols",
|
|
61
|
+
labels: "editor-labels",
|
|
62
|
+
vertices: "editor-vertices"
|
|
63
|
+
}, H = "editor-geojson", i1 = "drawing-temp", s1 = "drawing-temp-line", c1 = "drawing-temp-vertices";
|
|
64
|
+
function y1(e) {
|
|
65
|
+
function i() {
|
|
66
|
+
return {
|
|
67
|
+
version: 8,
|
|
68
|
+
name: "Shortbread PMTiles",
|
|
69
|
+
sources: {
|
|
70
|
+
"versatiles-shortbread": {
|
|
71
|
+
type: "vector",
|
|
72
|
+
url: `pmtiles://${e}`
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
layers: [
|
|
76
|
+
{
|
|
77
|
+
id: "background",
|
|
78
|
+
type: "background",
|
|
79
|
+
paint: { "background-color": "#f0ede9" }
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
id: "ocean",
|
|
83
|
+
type: "fill",
|
|
84
|
+
source: "versatiles-shortbread",
|
|
85
|
+
"source-layer": "ocean",
|
|
86
|
+
paint: { "fill-color": "#c2dae0" }
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
id: "water",
|
|
90
|
+
type: "fill",
|
|
91
|
+
source: "versatiles-shortbread",
|
|
92
|
+
"source-layer": "water_polygons",
|
|
93
|
+
paint: { "fill-color": "#c2dae0" }
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
id: "land",
|
|
97
|
+
type: "fill",
|
|
98
|
+
source: "versatiles-shortbread",
|
|
99
|
+
"source-layer": "land",
|
|
100
|
+
paint: { "fill-color": "#f0ede9" }
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
id: "park",
|
|
104
|
+
type: "fill",
|
|
105
|
+
source: "versatiles-shortbread",
|
|
106
|
+
"source-layer": "land",
|
|
107
|
+
filter: ["in", "kind", "park", "nature_reserve", "national_park"],
|
|
108
|
+
paint: { "fill-color": "#d4e8d0", "fill-opacity": 0.5 }
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
id: "roads-highway",
|
|
112
|
+
type: "line",
|
|
113
|
+
source: "versatiles-shortbread",
|
|
114
|
+
"source-layer": "streets",
|
|
115
|
+
filter: ["in", "kind", "motorway", "trunk"],
|
|
116
|
+
paint: {
|
|
117
|
+
"line-color": "#f5c97e",
|
|
118
|
+
"line-width": ["interpolate", ["linear"], ["zoom"], 5, 0.5, 14, 4]
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
id: "roads-major",
|
|
123
|
+
type: "line",
|
|
124
|
+
source: "versatiles-shortbread",
|
|
125
|
+
"source-layer": "streets",
|
|
126
|
+
filter: ["in", "kind", "primary", "secondary"],
|
|
127
|
+
minzoom: 7,
|
|
128
|
+
paint: {
|
|
129
|
+
"line-color": "#e0d8c8",
|
|
130
|
+
"line-width": ["interpolate", ["linear"], ["zoom"], 7, 0.3, 14, 3]
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
id: "roads-minor",
|
|
135
|
+
type: "line",
|
|
136
|
+
source: "versatiles-shortbread",
|
|
137
|
+
"source-layer": "streets",
|
|
138
|
+
filter: ["in", "kind", "tertiary", "residential", "living_street", "unclassified"],
|
|
139
|
+
minzoom: 11,
|
|
140
|
+
paint: {
|
|
141
|
+
"line-color": "#e8e0d4",
|
|
142
|
+
"line-width": ["interpolate", ["linear"], ["zoom"], 11, 0.3, 16, 2]
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
id: "buildings",
|
|
147
|
+
type: "fill",
|
|
148
|
+
source: "versatiles-shortbread",
|
|
149
|
+
"source-layer": "buildings",
|
|
150
|
+
minzoom: 14,
|
|
151
|
+
paint: {
|
|
152
|
+
"fill-color": "#ddd8d0",
|
|
153
|
+
"fill-opacity": 0.6
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
id: "boundaries-country",
|
|
158
|
+
type: "line",
|
|
159
|
+
source: "versatiles-shortbread",
|
|
160
|
+
"source-layer": "boundaries",
|
|
161
|
+
filter: ["==", "admin_level", 2],
|
|
162
|
+
paint: {
|
|
163
|
+
"line-color": "#a08080",
|
|
164
|
+
"line-width": 1,
|
|
165
|
+
"line-dasharray": [4, 2]
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
id: "labels-country",
|
|
170
|
+
type: "symbol",
|
|
171
|
+
source: "versatiles-shortbread",
|
|
172
|
+
"source-layer": "place_labels",
|
|
173
|
+
filter: ["==", "kind", "country"],
|
|
174
|
+
layout: {
|
|
175
|
+
"text-field": "{name}",
|
|
176
|
+
"text-size": ["interpolate", ["linear"], ["zoom"], 2, 10, 6, 16],
|
|
177
|
+
"text-max-width": 8
|
|
178
|
+
},
|
|
179
|
+
paint: {
|
|
180
|
+
"text-color": "#555",
|
|
181
|
+
"text-halo-color": "#fff",
|
|
182
|
+
"text-halo-width": 1.5
|
|
183
|
+
}
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
id: "labels-city",
|
|
187
|
+
type: "symbol",
|
|
188
|
+
source: "versatiles-shortbread",
|
|
189
|
+
"source-layer": "place_labels",
|
|
190
|
+
filter: ["in", "kind", "city", "town"],
|
|
191
|
+
minzoom: 5,
|
|
192
|
+
layout: {
|
|
193
|
+
"text-field": "{name}",
|
|
194
|
+
"text-size": ["interpolate", ["linear"], ["zoom"], 5, 10, 12, 14],
|
|
195
|
+
"text-max-width": 8
|
|
196
|
+
},
|
|
197
|
+
paint: {
|
|
198
|
+
"text-color": "#444",
|
|
199
|
+
"text-halo-color": "#fff",
|
|
200
|
+
"text-halo-width": 1.5
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
]
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
return { getStyle: i };
|
|
207
|
+
}
|
|
208
|
+
const h1 = ["coalesce", ["get", "marker-size"], P.markerSize];
|
|
209
|
+
function E(e, i, a) {
|
|
210
|
+
return [
|
|
211
|
+
"match",
|
|
212
|
+
h1,
|
|
213
|
+
"small",
|
|
214
|
+
["literal", e],
|
|
215
|
+
"large",
|
|
216
|
+
["literal", a],
|
|
217
|
+
["literal", i]
|
|
218
|
+
];
|
|
219
|
+
}
|
|
220
|
+
function W(e, i) {
|
|
221
|
+
const a = ["==", ["get", "id"], e];
|
|
222
|
+
return i === "Polygon" ? [
|
|
223
|
+
{
|
|
224
|
+
id: `editor-fill-${e}`,
|
|
225
|
+
type: "fill",
|
|
226
|
+
source: H,
|
|
227
|
+
filter: a,
|
|
228
|
+
paint: {
|
|
229
|
+
"fill-color": ["coalesce", ["get", "fill"], P.fill],
|
|
230
|
+
"fill-opacity": ["coalesce", ["get", "fill-opacity"], P.fillOpacity]
|
|
231
|
+
}
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
id: `editor-line-${e}`,
|
|
235
|
+
type: "line",
|
|
236
|
+
source: H,
|
|
237
|
+
filter: a,
|
|
238
|
+
paint: {
|
|
239
|
+
"line-color": ["coalesce", ["get", "stroke"], P.stroke],
|
|
240
|
+
"line-opacity": [
|
|
241
|
+
"coalesce",
|
|
242
|
+
["get", "stroke-opacity"],
|
|
243
|
+
P.strokeOpacity
|
|
244
|
+
],
|
|
245
|
+
"line-width": ["coalesce", ["get", "stroke-width"], P.strokeWidth]
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
] : i === "LineString" ? [
|
|
249
|
+
{
|
|
250
|
+
id: `editor-line-${e}`,
|
|
251
|
+
type: "line",
|
|
252
|
+
source: H,
|
|
253
|
+
filter: a,
|
|
254
|
+
paint: {
|
|
255
|
+
"line-color": ["coalesce", ["get", "stroke"], P.stroke],
|
|
256
|
+
"line-opacity": [
|
|
257
|
+
"coalesce",
|
|
258
|
+
["get", "stroke-opacity"],
|
|
259
|
+
P.strokeOpacity
|
|
260
|
+
],
|
|
261
|
+
"line-width": ["coalesce", ["get", "stroke-width"], P.strokeWidth]
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
] : [
|
|
265
|
+
{
|
|
266
|
+
id: `editor-points-${e}`,
|
|
267
|
+
type: "circle",
|
|
268
|
+
source: H,
|
|
269
|
+
filter: ["all", a, ["!", ["has", "marker-symbol"]]],
|
|
270
|
+
paint: {
|
|
271
|
+
"circle-radius": ["coalesce", ["get", "circle-radius"], P.circleRadius],
|
|
272
|
+
"circle-color": ["coalesce", ["get", "fill"], P.fill],
|
|
273
|
+
"circle-opacity": ["coalesce", ["get", "fill-opacity"], P.fillOpacity],
|
|
274
|
+
"circle-stroke-width": ["coalesce", ["get", "stroke-width"], 2],
|
|
275
|
+
"circle-stroke-color": ["coalesce", ["get", "stroke"], "#ffffff"],
|
|
276
|
+
"circle-stroke-opacity": ["coalesce", ["get", "stroke-opacity"], 1]
|
|
277
|
+
}
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
id: `editor-symbols-${e}`,
|
|
281
|
+
type: "symbol",
|
|
282
|
+
source: H,
|
|
283
|
+
filter: ["all", a, ["has", "marker-symbol"]],
|
|
284
|
+
layout: {
|
|
285
|
+
"icon-image": ["get", "marker-symbol"],
|
|
286
|
+
"icon-size": [
|
|
287
|
+
"match",
|
|
288
|
+
h1,
|
|
289
|
+
"small",
|
|
290
|
+
X.small,
|
|
291
|
+
"large",
|
|
292
|
+
X.large,
|
|
293
|
+
X.medium
|
|
294
|
+
],
|
|
295
|
+
"icon-allow-overlap": !0,
|
|
296
|
+
"icon-anchor": "bottom"
|
|
297
|
+
},
|
|
298
|
+
paint: {
|
|
299
|
+
"icon-color": ["coalesce", ["get", "marker-color"], P.markerColor]
|
|
300
|
+
}
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
id: `editor-labels-${e}`,
|
|
304
|
+
type: "symbol",
|
|
305
|
+
source: H,
|
|
306
|
+
filter: ["all", a, ["has", "marker-label"]],
|
|
307
|
+
layout: {
|
|
308
|
+
"text-field": ["get", "marker-label"],
|
|
309
|
+
"text-size": 13,
|
|
310
|
+
"text-anchor": [
|
|
311
|
+
"case",
|
|
312
|
+
["==", ["get", "marker-label-position"], "bottom"],
|
|
313
|
+
"top",
|
|
314
|
+
["==", ["get", "marker-label-position"], "left"],
|
|
315
|
+
"right",
|
|
316
|
+
["==", ["get", "marker-label-position"], "right"],
|
|
317
|
+
"left",
|
|
318
|
+
"bottom"
|
|
319
|
+
],
|
|
320
|
+
"text-offset": [
|
|
321
|
+
"case",
|
|
322
|
+
// top (default) — clear icon or circle above point
|
|
323
|
+
[
|
|
324
|
+
"all",
|
|
325
|
+
[
|
|
326
|
+
"any",
|
|
327
|
+
["!", ["has", "marker-label-position"]],
|
|
328
|
+
["==", ["get", "marker-label-position"], "top"]
|
|
329
|
+
],
|
|
330
|
+
["has", "marker-symbol"]
|
|
331
|
+
],
|
|
332
|
+
E([0, -1.65], [0, -2.5], [0, -3.75]),
|
|
333
|
+
[
|
|
334
|
+
"any",
|
|
335
|
+
["!", ["has", "marker-label-position"]],
|
|
336
|
+
["==", ["get", "marker-label-position"], "top"]
|
|
337
|
+
],
|
|
338
|
+
E([0, -0.55], [0, -0.8], [0, -1.2]),
|
|
339
|
+
// bottom — icon anchors at bottom so text is just below
|
|
340
|
+
[
|
|
341
|
+
"all",
|
|
342
|
+
["==", ["get", "marker-label-position"], "bottom"],
|
|
343
|
+
["has", "marker-symbol"]
|
|
344
|
+
],
|
|
345
|
+
E([0, 0.25], [0, 0.4], [0, 0.6]),
|
|
346
|
+
["==", ["get", "marker-label-position"], "bottom"],
|
|
347
|
+
E([0, 0.55], [0, 0.8], [0, 1.2]),
|
|
348
|
+
// left — shift horizontally + vertically to center on icon
|
|
349
|
+
[
|
|
350
|
+
"all",
|
|
351
|
+
["==", ["get", "marker-label-position"], "left"],
|
|
352
|
+
["has", "marker-symbol"]
|
|
353
|
+
],
|
|
354
|
+
E([-0.3, -0.8], [-0.4, -1.2], [-0.6, -1.8]),
|
|
355
|
+
["==", ["get", "marker-label-position"], "left"],
|
|
356
|
+
E([-0.3, 0], [-0.4, 0], [-0.6, 0]),
|
|
357
|
+
// right
|
|
358
|
+
[
|
|
359
|
+
"all",
|
|
360
|
+
["==", ["get", "marker-label-position"], "right"],
|
|
361
|
+
["has", "marker-symbol"]
|
|
362
|
+
],
|
|
363
|
+
E([0.3, -0.8], [0.4, -1.2], [0.6, -1.8]),
|
|
364
|
+
["==", ["get", "marker-label-position"], "right"],
|
|
365
|
+
E([0.3, 0], [0.4, 0], [0.6, 0]),
|
|
366
|
+
// fallback
|
|
367
|
+
E([0, -0.55], [0, -0.8], [0, -1.2])
|
|
368
|
+
],
|
|
369
|
+
"text-allow-overlap": !0
|
|
370
|
+
},
|
|
371
|
+
paint: {
|
|
372
|
+
"text-color": "#333333",
|
|
373
|
+
"text-halo-color": "#ffffff",
|
|
374
|
+
"text-halo-width": 1.5
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
];
|
|
378
|
+
}
|
|
379
|
+
function e1(e, i) {
|
|
380
|
+
return i === "Polygon" ? [`editor-fill-${e}`, `editor-line-${e}`] : i === "LineString" ? [`editor-line-${e}`] : [
|
|
381
|
+
`editor-points-${e}`,
|
|
382
|
+
`editor-symbols-${e}`,
|
|
383
|
+
`editor-labels-${e}`
|
|
384
|
+
];
|
|
385
|
+
}
|
|
386
|
+
function Y(e) {
|
|
387
|
+
const i = [];
|
|
388
|
+
for (const a of e)
|
|
389
|
+
a.geomType === "Polygon" ? i.push(`editor-fill-${a.id}`, `editor-line-${a.id}`) : a.geomType === "LineString" ? i.push(`editor-line-${a.id}`) : i.push(`editor-points-${a.id}`, `editor-symbols-${a.id}`);
|
|
390
|
+
return i;
|
|
391
|
+
}
|
|
392
|
+
function B1(e) {
|
|
393
|
+
return {
|
|
394
|
+
id: P1.vertices,
|
|
395
|
+
type: "circle",
|
|
396
|
+
source: H,
|
|
397
|
+
filter: ["==", "id", e ?? ""],
|
|
398
|
+
paint: {
|
|
399
|
+
"circle-radius": 0,
|
|
400
|
+
"circle-color": "transparent"
|
|
401
|
+
}
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
function w1(e, i, a, o) {
|
|
405
|
+
const g = new Set(a.map((d) => d.id)), l = new Map(i.map((d) => [d.id, d.geomType]));
|
|
406
|
+
for (const d of i)
|
|
407
|
+
if (!g.has(d.id))
|
|
408
|
+
for (const v of e1(d.id, d.geomType))
|
|
409
|
+
e.getLayer(v) && e.removeLayer(v);
|
|
410
|
+
for (const d of a) {
|
|
411
|
+
const v = l.get(d.id);
|
|
412
|
+
if (v === void 0)
|
|
413
|
+
for (const m of W(d.id, d.geomType))
|
|
414
|
+
e.addLayer(m, o);
|
|
415
|
+
else if (v !== d.geomType) {
|
|
416
|
+
for (const m of e1(d.id, v))
|
|
417
|
+
e.getLayer(m) && e.removeLayer(m);
|
|
418
|
+
for (const m of W(d.id, d.geomType))
|
|
419
|
+
e.addLayer(m, o);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
for (let d = a.length - 1; d >= 0; d--) {
|
|
423
|
+
const v = a[d];
|
|
424
|
+
for (const m of e1(v.id, v.geomType))
|
|
425
|
+
e.moveLayer(m, o);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
function D1() {
|
|
429
|
+
return [
|
|
430
|
+
{
|
|
431
|
+
id: "drawing-temp-fill",
|
|
432
|
+
type: "fill",
|
|
433
|
+
source: "drawing-temp",
|
|
434
|
+
paint: {
|
|
435
|
+
"fill-color": P.fill,
|
|
436
|
+
"fill-opacity": 0.15
|
|
437
|
+
}
|
|
438
|
+
},
|
|
439
|
+
{
|
|
440
|
+
id: "drawing-temp-line",
|
|
441
|
+
type: "line",
|
|
442
|
+
source: "drawing-temp-line",
|
|
443
|
+
paint: {
|
|
444
|
+
"line-color": P.stroke,
|
|
445
|
+
"line-width": 2,
|
|
446
|
+
"line-dasharray": [3, 3]
|
|
447
|
+
}
|
|
448
|
+
},
|
|
449
|
+
{
|
|
450
|
+
id: "drawing-temp-vertices",
|
|
451
|
+
type: "circle",
|
|
452
|
+
source: "drawing-temp-vertices",
|
|
453
|
+
paint: {
|
|
454
|
+
"circle-radius": 5,
|
|
455
|
+
"circle-color": "#ffffff",
|
|
456
|
+
"circle-stroke-width": 2,
|
|
457
|
+
"circle-stroke-color": P.stroke
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
];
|
|
461
|
+
}
|
|
462
|
+
const F1 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M186.62 464H160a16 16 0 0 1-14.57-22.6l64.46-142.25L113.1 297l-35.3 42.77C71.07 348.23 65.7 352 52 352H34.08a17.66 17.66 0 0 1-14.7-7.06c-2.38-3.21-4.72-8.65-2.44-16.41l19.82-71c.15-.53.33-1.06.53-1.58a.4.4 0 0 0 0-.15 15 15 0 0 1-.53-1.59l-19.84-71.45c-2.15-7.61.2-12.93 2.56-16.06a16.83 16.83 0 0 1 13.6-6.7H52c10.23 0 20.16 4.59 26 12l34.57 42.05 97.32-1.44-64.44-142A16 16 0 0 1 160 48h26.91a25 25 0 0 1 19.35 9.8l125.05 152 57.77-1.52c4.23-.23 15.95-.31 18.66-.31C463 208 496 225.94 496 256c0 9.46-3.78 27-29.07 38.16-14.93 6.6-34.85 9.94-59.21 9.94-2.68 0-14.37-.08-18.66-.31l-57.76-1.54-125.36 152a25 25 0 0 1-19.32 9.75'/></svg>", I1 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M256 48C141.31 48 48 141.31 48 256s93.31 208 208 208 208-93.31 208-208S370.69 48 256 48m0 319.91a20 20 0 1 1 20-20 20 20 0 0 1-20 20m21.72-201.15-5.74 122a16 16 0 0 1-32 0l-5.74-121.94v-.05a21.74 21.74 0 1 1 43.44 0Z'/></svg>", z1 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M424.11 192H360L268.8 70.4a16 16 0 0 0-25.6 0L152 192H87.89a32.57 32.57 0 0 0-32.62 32.44 30.3 30.3 0 0 0 1.31 9l46.27 163.14a50.72 50.72 0 0 0 48.84 36.91h208.62a51.21 51.21 0 0 0 49-36.86l46.33-163.36a15.6 15.6 0 0 0 .46-2.36l.53-4.93a13 13 0 0 0 .09-1.55A32.57 32.57 0 0 0 424.11 192M256 106.67 320 192H192Zm0 245a37.7 37.7 0 1 1 37.88-37.7A37.87 37.87 0 0 1 256 351.63Z'/></svg>", $1 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='m256 233.37 34.45-34.45a207.08 207.08 0 0 1-50.12-135.25c0-5 .19-10.05.54-15A207.1 207.1 0 0 0 120.67 98ZM313.14 176.23 391.33 98A207.07 207.07 0 0 0 273 48.8c-.41 4.9-.64 9.86-.64 14.87a175.25 175.25 0 0 0 40.78 112.56M335.77 198.86a175.25 175.25 0 0 0 112.56 40.81c5 0 10-.23 14.87-.64A207.07 207.07 0 0 0 414 120.67ZM176.23 313.14a175.23 175.23 0 0 0-112.56-40.81q-7.52 0-14.87.64A207.07 207.07 0 0 0 98 391.33ZM256 278.63l-34.45 34.45a207.08 207.08 0 0 1 50.12 135.25c0 5-.19 10.05-.54 15A207.06 207.06 0 0 0 391.33 414ZM448.33 271.67a207.08 207.08 0 0 1-135.25-50.12L278.63 256 414 391.33a207.1 207.1 0 0 0 49.39-120.2c-5.01.35-10.02.54-15.06.54M233.37 256 98 120.67a207.06 207.06 0 0 0-49.39 120.2c5-.35 10-.54 15-.54a207.08 207.08 0 0 1 135.25 50.12ZM120.67 414A207.07 207.07 0 0 0 239 463.2q.63-7.35.64-14.87a175.23 175.23 0 0 0-40.81-112.56Z'/></svg>", H1 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M432 230.7a79.4 79.4 0 0 0-32-6.7H112a79.5 79.5 0 0 0-32 6.69A80.09 80.09 0 0 0 32 304v112a16 16 0 0 0 32 0v-8a8.1 8.1 0 0 1 8-8h368a8.1 8.1 0 0 1 8 8v8a16 16 0 0 0 32 0V304a80.09 80.09 0 0 0-48-73.3M376 80H136a56 56 0 0 0-56 56v72a4 4 0 0 0 5.11 3.84A95.5 95.5 0 0 1 112 208h4.23a4 4 0 0 0 4-3.55A32 32 0 0 1 152 176h56a32 32 0 0 1 31.8 28.45 4 4 0 0 0 4 3.55h24.46a4 4 0 0 0 4-3.55A32 32 0 0 1 304 176h56a32 32 0 0 1 31.8 28.45 4 4 0 0 0 4 3.55h4.2a95.5 95.5 0 0 1 26.89 3.85A4 4 0 0 0 432 208v-72a56 56 0 0 0-56-56'/></svg>", U1 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M392 208h-24v-5.74A63.93 63.93 0 0 0 321.65 96a111 111 0 0 0-27.59-47.29A108.62 108.62 0 0 0 216 16c-29.91 0-57.78 12.28-79 34.68a56 56 0 0 0-67.51 77.54A63.91 63.91 0 0 0 80 231.39V440a56.06 56.06 0 0 0 56 56h176a56.06 56.06 0 0 0 56-56v-8h24a72.08 72.08 0 0 0 72-72v-80a72.08 72.08 0 0 0-72-72M176 416a16 16 0 0 1-32 0V256a16 16 0 0 1 32 0Zm64 0a16 16 0 0 1-32 0V256a16 16 0 0 1 32 0Zm64 0a16 16 0 0 1-32 0V256a16 16 0 0 1 32 0Zm16-224c-8.33 0-20.55-5.18-26.69-11.31A16 16 0 0 0 282 176H160a16 16 0 0 0-15 10.53c-6.83 18.68-23.6 21.47-33 21.47a32 32 0 0 1 0-64c.09 0 9.12.34 16.4 5.8a16 16 0 1 0 19.2-25.6A63.7 63.7 0 0 0 112 112a63.6 63.6 0 0 0-14 1.57A24 24 0 0 1 120 80a23.78 23.78 0 0 1 19.38 9.84 51.4 51.4 0 0 1 4.71 7.9A16 16 0 0 0 176 96c0-6.77-3.61-15.17-10.76-25-.46-.63-1-1.25-1.45-1.86C178.39 55.44 196.64 48 216 48a76.86 76.86 0 0 1 55.23 23.18A80.2 80.2 0 0 1 292.61 142a16 16 0 0 0 12.73 18.71 16.3 16.3 0 0 0 3 .28 16 16 0 0 0 15.7-13 112 112 0 0 0 1.96-19.42 32 32 0 0 1-6 63.43m112 168a40 40 0 0 1-40 40h-24V240h24a40 40 0 0 1 40 40Z'/></svg>", E1 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M388 448a92 92 0 1 1 92-92 92.1 92.1 0 0 1-92 92m0-152a60 60 0 1 0 60 60 60.07 60.07 0 0 0-60-60M124 448a92 92 0 1 1 92-92 92.1 92.1 0 0 1-92 92m0-152a60 60 0 1 0 60 60 60.07 60.07 0 0 0-60-60M320 128a31.89 31.89 0 0 0 32-32.1A31.55 31.55 0 0 0 320.2 64a32 32 0 1 0-.2 64'/><path d='M367.55 192h-43.76a4 4 0 0 1-3.51-2.08l-31.74-58.17a31 31 0 0 0-49.38-7.75l-69.86 70.4a32.56 32.56 0 0 0-9.3 22.4c0 17.4 12.6 23.6 18.5 27.1 28.5 16.42 48.57 28.43 59.58 35.1a4 4 0 0 1 1.92 3.41v69.12c0 8.61 6.62 16 15.23 16.43A16 16 0 0 0 272 352v-86a16 16 0 0 0-6.66-13l-37-26.61a4 4 0 0 1-.58-6l42-44.79a4 4 0 0 1 6.42.79L298 215.77a16 16 0 0 0 14 8.23h56a16 16 0 0 0 16-16.77c-.42-8.61-7.84-15.23-16.45-15.23'/></svg>", R1 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M416 473.14a6.83 6.83 0 0 0-3.57-6c-27.07-14.55-51.76-36.82-62.62-48a10.05 10.05 0 0 0-12.72-1.51c-50.33 32.42-111.61 32.44-161.95.05a10.09 10.09 0 0 0-12.82 1.56c-10.77 11.28-35.19 33.3-62.43 47.75a7.11 7.11 0 0 0-3.89 5.73 6.73 6.73 0 0 0 7.92 7.15c20.85-4.18 41-13.68 60.2-23.83a8.71 8.71 0 0 1 8-.06 185.14 185.14 0 0 0 167.81 0 8.82 8.82 0 0 1 8.09.06c19.1 10 39.22 19.59 60 23.8a6.73 6.73 0 0 0 8-6.71ZM476.71 246.91c-3.49-8.39-10.9-14.89-20.9-18.35L432 219.08V136a64 64 0 0 0-64-64h-32v-8a40 40 0 0 0-40-40h-80a40 40 0 0 0-40 40v8h-32a64 64 0 0 0-64 64v83.15l-23.58 9.39c-9.94 3.3-17.63 10-21.15 18.44-2.45 5.89-5.25 15-1.3 26.46l.1.3 46.66 119.44A23.33 23.33 0 0 0 102.58 408c.5 0 1 0 1.53-.05 31.32-2 56-17.27 72.6-31.61C200.42 396.81 228.31 408 256 408s55.43-11.2 79.14-31.7c16.59 14.36 41.3 29.67 72.61 31.65a23.36 23.36 0 0 0 23.37-14.74l46.65-119c3.28-8.09 2.9-17.76-1.06-27.3M269 154.21l-1.14-.4a39.53 39.53 0 0 0-23.73 0l-.58.18-126.07 50.23a4 4 0 0 1-5.48-3.72V136a32 32 0 0 1 32-32h224a32 32 0 0 1 32 32v64.44a4 4 0 0 1-5.48 3.72Z'/></svg>", O1 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M400 32H112a48 48 0 0 0-48 48v320a47.9 47.9 0 0 0 16 35.74V454a26 26 0 0 0 26 26h28a26 26 0 0 0 26-26v-6h192v6a26 26 0 0 0 26 26h28a26 26 0 0 0 26-26v-18.26A47.9 47.9 0 0 0 448 400V80a48 48 0 0 0-48-48M147.47 399.82a32 32 0 1 1 28.35-28.35 32 32 0 0 1-28.35 28.35M236 288H112a16 16 0 0 1-16-16V144a16 16 0 0 1 16-16h124a4 4 0 0 1 4 4v152a4 4 0 0 1-4 4m20-192H112.46c-8.6 0-16-6.6-16.44-15.19A16 16 0 0 1 112 64h287.54c8.6 0 16 6.6 16.44 15.19A16 16 0 0 1 400 96zm20 32h124a16 16 0 0 1 16 16v128a16 16 0 0 1-16 16H276a4 4 0 0 1-4-4V132a4 4 0 0 1 4-4m60.18 243.47a32 32 0 1 1 28.35 28.35 32 32 0 0 1-28.35-28.35'/></svg>", Z1 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M432 176H320V64a48 48 0 0 0-48-48H80a48 48 0 0 0-48 48v416a16 16 0 0 0 16 16h104a8 8 0 0 0 8-8v-71.55c0-8.61 6.62-16 15.23-16.43A16 16 0 0 1 192 416v72a8 8 0 0 0 8 8h264a16 16 0 0 0 16-16V224a48 48 0 0 0-48-48M98.08 431.87a16 16 0 1 1 13.79-13.79 16 16 0 0 1-13.79 13.79m0-80a16 16 0 1 1 13.79-13.79 16 16 0 0 1-13.79 13.79m0-80a16 16 0 1 1 13.79-13.79 16 16 0 0 1-13.79 13.79m0-80a16 16 0 1 1 13.79-13.79 16 16 0 0 1-13.79 13.79m0-80a16 16 0 1 1 13.79-13.79 16 16 0 0 1-13.79 13.79m80 240a16 16 0 1 1 13.79-13.79 16 16 0 0 1-13.79 13.79m0-80a16 16 0 1 1 13.79-13.79 16 16 0 0 1-13.79 13.79m0-80a16 16 0 1 1 13.79-13.79 16 16 0 0 1-13.79 13.79m0-80a16 16 0 1 1 13.79-13.79 16 16 0 0 1-13.79 13.79m80 320a16 16 0 1 1 13.79-13.79 16 16 0 0 1-13.79 13.79m0-80a16 16 0 1 1 13.79-13.79 16 16 0 0 1-13.79 13.79m0-80a16 16 0 1 1 13.79-13.79 16 16 0 0 1-13.79 13.79m0-80a16 16 0 1 1 13.79-13.79 16 16 0 0 1-13.79 13.79m0-80a16 16 0 1 1 13.79-13.79 16 16 0 0 1-13.79 13.79M444 464H320V208h112a16 16 0 0 1 16 16v236a4 4 0 0 1-4 4'/><path d='M400 400a16 16 0 1 0 16 16 16 16 0 0 0-16-16M400 320a16 16 0 1 0 16 16 16 16 0 0 0-16-16M400 240a16 16 0 1 0 16 16 16 16 0 0 0-16-16M336 400a16 16 0 1 0 16 16 16 16 0 0 0-16-16M336 320a16 16 0 1 0 16 16 16 16 0 0 0-16-16M336 240a16 16 0 1 0 16 16 16 16 0 0 0-16-16'/></svg>", N1 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M432 64H96a16 16 0 0 0-16 16v192a96.11 96.11 0 0 0 96 96h112a96.11 96.11 0 0 0 96-96v-80h18a62.07 62.07 0 0 0 62-62V96a32 32 0 0 0-32-32m0 66a30 30 0 0 1-30 30h-18V96h48ZM400 400H64a16 16 0 0 0 0 32h336a16 16 0 0 0 0-32'/></svg>", q1 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><circle cx='256' cy='272' r='64'/><path d='M432 144h-59c-3 0-6.72-1.94-9.62-5l-25.94-40.94a15.5 15.5 0 0 0-1.37-1.85C327.11 85.76 315 80 302 80h-92c-13 0-25.11 5.76-34.07 16.21a15.5 15.5 0 0 0-1.37 1.85l-25.94 41c-2.22 2.42-5.34 5-8.62 5v-8a16 16 0 0 0-16-16h-24a16 16 0 0 0-16 16v8h-4a48.05 48.05 0 0 0-48 48V384a48.05 48.05 0 0 0 48 48h352a48.05 48.05 0 0 0 48-48V192a48.05 48.05 0 0 0-48-48M256 368a96 96 0 1 1 96-96 96.11 96.11 0 0 1-96 96'/></svg>", j1 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M447.68 220.78a16 16 0 0 0-1-3.08l-37.78-88.16C400.19 109.17 379 96 354.89 96H157.11c-24.09 0-45.3 13.17-54 33.54L65.29 217.7A15.7 15.7 0 0 0 64 224v176a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-16h256v16a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V224a16 16 0 0 0-.32-3.22M144 320a32 32 0 1 1 32-32 32 32 0 0 1-32 32m224 0a32 32 0 1 1 32-32 32 32 0 0 1-32 32M104.26 208l28.23-65.85C136.11 133.69 146 128 157.11 128h197.78c11.1 0 21 5.69 24.62 14.15L407.74 208Z'/></svg>", G1 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><circle cx='176' cy='416' r='32'/><circle cx='400' cy='416' r='32'/><path d='M456.8 120.78a23.92 23.92 0 0 0-18.56-8.78H133.89l-6.13-34.78A16 16 0 0 0 112 64H48a16 16 0 0 0 0 32h50.58l45.66 258.78A16 16 0 0 0 160 368h256a16 16 0 0 0 0-32H173.42l-5.64-32h241.66A24.07 24.07 0 0 0 433 284.71l28.8-144a24 24 0 0 0-5-19.93'/></svg>", J1 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M472 432h-48a24 24 0 0 1-24-24V104a24 24 0 0 1 24-24h48a24 24 0 0 1 24 24v304a24 24 0 0 1-24 24M344 432h-48a24 24 0 0 1-24-24V184a24 24 0 0 1 24-24h48a24 24 0 0 1 24 24v224a24 24 0 0 1-24 24M216 432h-48a24 24 0 0 1-24-24V248a24 24 0 0 1 24-24h48a24 24 0 0 1 24 24v160a24 24 0 0 1-24 24M88 432H40a24 24 0 0 1-24-24v-96a24 24 0 0 1 24-24h48a24 24 0 0 1 24 24v96a24 24 0 0 1-24 24'/></svg>", K1 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M256 48C141.31 48 48 141.31 48 256s93.31 208 208 208 208-93.31 208-208S370.69 48 256 48m108.25 138.29-134.4 160a16 16 0 0 1-12 5.71h-.27a16 16 0 0 1-11.89-5.3l-57.6-64a16 16 0 1 1 23.78-21.4l45.29 50.32 122.59-145.91a16 16 0 0 1 24.5 20.58'/></svg>", W1 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M256 48C141.31 48 48 141.31 48 256s93.31 208 208 208 208-93.31 208-208S370.69 48 256 48m75.31 260.69a16 16 0 1 1-22.62 22.62L256 278.63l-52.69 52.68a16 16 0 0 1-22.62-22.62L233.37 256l-52.68-52.69a16 16 0 0 1 22.62-22.62L256 233.37l52.69-52.68a16 16 0 0 1 22.62 22.62L278.63 256Z'/></svg>", Y1 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M376 432H116c-32.37 0-60.23-8.57-80.59-24.77C12.24 388.78 0 361.39 0 328c0-57.57 42-90.58 87.56-100.75a16 16 0 0 0 12.12-12.39c7.68-36.68 24.45-68.15 49.18-92A153.57 153.57 0 0 1 256 80c35.5 0 68.24 11.69 94.68 33.8a156.24 156.24 0 0 1 42.05 56 16 16 0 0 0 11.37 9.16c27 5.61 51.07 17.33 69.18 33.85C498.61 235.88 512 267.42 512 304c0 36-14.38 68.88-40.49 92.59C446.36 419.43 412.44 432 376 432'/></svg>", Q1 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><circle cx='256' cy='256' r='24'/><path d='M256 48C141.31 48 48 141.31 48 256s93.31 208 208 208 208-93.31 208-208S370.69 48 256 48m105.07 113.33-46.88 117.2a64 64 0 0 1-35.66 35.66l-117.2 46.88a8 8 0 0 1-10.4-10.4l46.88-117.2a64 64 0 0 1 35.66-35.66l117.2-46.88a8 8 0 0 1 10.4 10.4'/></svg>", X1 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M512 256c0-16.54-14.27-46.76-45.61-74a207 207 0 0 0-60.28-36.12 3.15 3.15 0 0 0-3.93 1.56c-.15.29-.3.57-.47.86l-9.59 15.9a183.24 183.24 0 0 0 .07 183.78l.23.39 8.74 16a4 4 0 0 0 4.94 1.82C479.63 337.42 512 281.49 512 256m-93.92-.14a16 16 0 1 1 13.79-13.79 16 16 0 0 1-13.79 13.79'/><path d='M335.45 256a214.8 214.8 0 0 1 29.08-108l.12-.21 4.62-7.67a4 4 0 0 0-2.59-6 284 284 0 0 0-39.26-5.39 7.94 7.94 0 0 1-4.29-1.6c-19.28-14.66-57.5-40.3-96.46-46.89a16 16 0 0 0-18 20.18l10.62 37.17a4 4 0 0 1-2.42 4.84c-36.85 13.69-68.59 38.75-91.74 57.85a8 8 0 0 1-10.06.06q-4.72-3.75-9.69-7.39c-39.64-28.95-86.21-32.76-88.17-32.9a16 16 0 0 0-16.83 19.4c.42 1.93 9.19 40.69 31.7 71.61a8.09 8.09 0 0 1 0 9.55C9.57 291.52.8 330.29.38 332.22a16 16 0 0 0 16.83 19.4c2-.14 48.53-4 88.12-32.88q4.85-3.56 9.47-7.22a8 8 0 0 1 10.06.07c23.25 19.19 55.05 44.28 92 58a4 4 0 0 1 2.42 4.83l-10.66 37.18a16 16 0 0 0 18 20.18c17.16-2.9 51.88-12.86 96.05-46.83a8.15 8.15 0 0 1 4.36-1.65 287 287 0 0 0 39.22-5.3 4 4 0 0 0 2.69-5.83l-4.51-8.29A214.8 214.8 0 0 1 335.45 256'/></svg>", e0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M193.69 152.84a16 16 0 0 1 29.64 2.56l36.4 121.36 30-59.92a16 16 0 0 1 28.62 0L345.89 272h96.76A213.1 213.1 0 0 0 464 176.65C463.37 114.54 413.54 64 352.92 64c-48.09 0-80 29.54-96.92 51-16.88-21.49-48.83-51-96.92-51C98.46 64 48.63 114.54 48 176.65A211.1 211.1 0 0 0 56.93 240h93.18Z'/><path d='M321.69 295.16 304 259.78l-33.69 67.38A16 16 0 0 1 256 336q-.67 0-1.38-.06a16 16 0 0 1-14-11.34l-36.4-121.36-30 59.92A16 16 0 0 1 160 272H69.35q14 29.29 37.27 57.66c18.77 22.88 52.8 59.46 131.39 112.81a31.84 31.84 0 0 0 36 0c78.59-53.35 112.62-89.93 131.39-112.81a317 317 0 0 0 19-25.66H336a16 16 0 0 1-14.31-8.84M464 272h-21.35a260 260 0 0 1-18.25 32H464a16 16 0 0 0 0-32M48 240a16 16 0 0 0 0 32h21.35a225 225 0 0 1-12.42-32Z'/></svg>", t0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M80 480a16 16 0 0 1-16-16V68.13a24 24 0 0 1 11.9-20.72C88 40.38 112.38 32 160 32c37.21 0 78.83 14.71 115.55 27.68C305.12 70.13 333.05 80 352 80a183.8 183.8 0 0 0 71-14.5 18 18 0 0 1 25 16.58v219.36a20 20 0 0 1-12 18.31c-8.71 3.81-40.51 16.25-84 16.25-24.14 0-54.38-7.14-86.39-14.71C229.63 312.79 192.43 304 160 304c-36.87 0-55.74 5.58-64 9.11V464a16 16 0 0 1-16 16'/></svg>", a0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M394.23 197.56a300.4 300.4 0 0 0-53.37-90C301.2 61.65 249.05 32 208 32a16 16 0 0 0-15.48 20c13.87 53-14.88 97.07-45.31 143.72C122 234.36 96 274.27 96 320c0 88.22 71.78 160 160 160s160-71.78 160-160c0-43.3-7.32-84.49-21.77-122.44m-105.9 221.13C278 429.69 265.05 432 256 432s-22-2.31-32.33-13.31S208 390.24 208 368c0-25.14 8.82-44.28 17.34-62.78 4.95-10.74 10-21.67 13-33.37a8 8 0 0 1 12.49-4.51A126.5 126.5 0 0 1 275 292c18.17 24 29 52.42 29 76 0 22.24-5.42 39.77-15.67 50.69'/></svg>", o0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><circle cx='256' cy='256' r='48'/><path d='M475.93 303.91a67.49 67.49 0 0 0-44.34-115.53 5.2 5.2 0 0 1-4.58-3.21 5.21 5.21 0 0 1 1-5.51A67.83 67.83 0 0 0 378 66.33h-.25A67.13 67.13 0 0 0 332.35 84a5.21 5.21 0 0 1-5.52 1 5.23 5.23 0 0 1-3.22-4.58 67.68 67.68 0 0 0-135.23 0 5.2 5.2 0 0 1-3.21 4.58 5.21 5.21 0 0 1-5.52-1 67.1 67.1 0 0 0-45.44-17.69H134a67.91 67.91 0 0 0-50 113.34 5.21 5.21 0 0 1 1 5.51 5.2 5.2 0 0 1-4.58 3.21 67.71 67.71 0 0 0 0 135.23 5.23 5.23 0 0 1 4.58 3.23 5.22 5.22 0 0 1-1 5.52 67.54 67.54 0 0 0 50.08 113h.25A67.38 67.38 0 0 0 179.65 428a5.21 5.21 0 0 1 5.51-1 5.2 5.2 0 0 1 3.21 4.58 67.71 67.71 0 0 0 135.23 0 5.23 5.23 0 0 1 3.22-4.58 5.21 5.21 0 0 1 5.51 1 67.38 67.38 0 0 0 45.29 17.42h.25a67.48 67.48 0 0 0 50.08-113 5.22 5.22 0 0 1-1-5.52 5.23 5.23 0 0 1 4.58-3.22 67.3 67.3 0 0 0 44.4-19.77M256 336a80 80 0 1 1 80-80 80.09 80.09 0 0 1-80 80'/></svg>", l0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M256 48C141.31 48 48 141.31 48 256s93.31 208 208 208 208-93.31 208-208S370.69 48 256 48m143 304h-45.22a8 8 0 0 1-6.91-4l-16.14-27.68a8 8 0 0 1-.86-6l14.86-59.92a8 8 0 0 1 4.65-5.45l28.1-11.9a8 8 0 0 1 8.34 1.3l41.63 35.82a8 8 0 0 1 2.69 7.26 174.75 174.75 0 0 1-24.28 66.68A8 8 0 0 1 399 352M134.52 237.13l28.1 11.9a8 8 0 0 1 4.65 5.45l14.86 59.92a8 8 0 0 1-.86 6L165.13 348a8 8 0 0 1-6.91 4H113a8 8 0 0 1-6.82-3.81 174.75 174.75 0 0 1-24.28-66.68 8 8 0 0 1 2.69-7.26l41.63-35.82a8 8 0 0 1 8.3-1.3m256.94-87.24-18.07 51.38A8 8 0 0 1 369 206l-29.58 12.53a8 8 0 0 1-8.26-1.24L274.9 170.1a8 8 0 0 1-2.9-6.1v-33.58a8 8 0 0 1 3.56-6.65l42.83-28.54a8 8 0 0 1 7.66-.67A176.9 176.9 0 0 1 390 142a8 8 0 0 1 1.46 7.89M193.6 95.23l42.84 28.54a8 8 0 0 1 3.56 6.65V164a8 8 0 0 1-2.86 6.13l-56.26 47.19a8 8 0 0 1-8.26 1.24L143 206a8 8 0 0 1-4.43-4.72L120.5 149.9a8 8 0 0 1 1.5-7.9 176.9 176.9 0 0 1 64-47.48 8 8 0 0 1 7.6.71m17.31 327.46L191.18 373a8 8 0 0 1 .52-7l15.17-26a8 8 0 0 1 6.91-4h84.44a8 8 0 0 1 6.91 4l15.18 26a8 8 0 0 1 .53 7l-19.59 49.67a8 8 0 0 1-5.69 4.87 176.6 176.6 0 0 1-79 0 8 8 0 0 1-5.65-4.85'/></svg>", r0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M200 144h40v-40a40 40 0 1 0-40 40M352 104a40 40 0 0 0-80 0v40h40a40 40 0 0 0 40-40' class='ionicon-fill-none'/><path d='M80 416a64 64 0 0 0 64 64h92a4 4 0 0 0 4-4V292a4 4 0 0 0-4-4H88a8 8 0 0 0-8 8ZM240 252V144h32v108a4 4 0 0 0 4 4h140a47.9 47.9 0 0 0 16-2.75A48.09 48.09 0 0 0 464 208v-16a48 48 0 0 0-48-48h-40.54a2 2 0 0 1-1.7-3A72 72 0 0 0 256 58.82 72 72 0 0 0 138.24 141a2 2 0 0 1-1.7 3H96a48 48 0 0 0-48 48v16a48.09 48.09 0 0 0 32 45.25A47.9 47.9 0 0 0 96 256h140a4 4 0 0 0 4-4m32-148a40 40 0 1 1 40 40h-40Zm-74.86-39.9A40 40 0 0 1 240 104v40h-40a40 40 0 0 1-2.86-79.89ZM276 480h92a64 64 0 0 0 64-64V296a8 8 0 0 0-8-8H276a4 4 0 0 0-4 4v184a4 4 0 0 0 4 4'/></svg>", n0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M340.75 344.49c5.91-20.7 9.82-44.75 11.31-67.84a4.41 4.41 0 0 0-4.46-4.65h-71.06a4.43 4.43 0 0 0-4.47 4.39v55.3a4.44 4.44 0 0 0 4.14 4.38 273.5 273.5 0 0 1 59 11.39 4.45 4.45 0 0 0 5.54-2.97M323.58 377.31a260 260 0 0 0-46.6-9.09 4.42 4.42 0 0 0-4.91 4.29v65.24a4.47 4.47 0 0 0 6.76 3.7c15.9-9.27 29-24.84 40.84-45.43 1.94-3.36 4.89-9.15 6.67-12.69a4.29 4.29 0 0 0-2.76-6.02M235.29 368.4a257 257 0 0 0-46.56 8.82c-2.64.76-3.75 4.4-2.55 6.79 1.79 3.56 4 8.11 5.89 11.51 13 23 26.84 37.5 41.24 45.93a4.47 4.47 0 0 0 6.76-3.7v-65.27a4.16 4.16 0 0 0-4.78-4.08M235.6 272h-71.06a4.41 4.41 0 0 0-4.46 4.64c1.48 23.06 5.37 47.16 11.26 67.84a4.46 4.46 0 0 0 5.59 3 272.2 272.2 0 0 1 59-11.36 4.44 4.44 0 0 0 4.15-4.38V276.4a4.43 4.43 0 0 0-4.48-4.4M277 143.78a235.8 235.8 0 0 0 46.5-9.14 4.3 4.3 0 0 0 2.76-6c-1.79-3.57-4.27-8.68-6.17-12.09-12.29-22-26.14-37.35-41.24-46a4.48 4.48 0 0 0-6.76 3.7v65.23a4.43 4.43 0 0 0 4.91 4.3M276.54 240h71.06a4.39 4.39 0 0 0 4.46-4.58c-1.48-22.77-5.27-47.8-11.16-68.22a4.46 4.46 0 0 0-5.59-2.95c-19 5.74-38.79 10.43-59.09 12a4.4 4.4 0 0 0-4.15 4.32v55.11a4.4 4.4 0 0 0 4.47 4.32M233.31 70.56c-15.42 8.57-29.17 24.43-41.47 46.37-1.91 3.41-4.19 8.11-6 11.67a4.31 4.31 0 0 0 2.76 6 225.4 225.4 0 0 0 46.54 9.17 4.43 4.43 0 0 0 4.91-4.29V74.26a4.49 4.49 0 0 0-6.74-3.7M235.92 176.26c-20.3-1.55-40.11-6.24-59.09-12a4.46 4.46 0 0 0-5.59 2.95c-5.89 20.42-9.68 45.45-11.16 68.22a4.39 4.39 0 0 0 4.46 4.58h71.06a4.4 4.4 0 0 0 4.47-4.34v-55.09a4.4 4.4 0 0 0-4.15-4.32'/><path d='M414.39 97.61A224 224 0 1 0 97.61 414.39 224 224 0 1 0 414.39 97.61M176.6 430.85a219 219 0 0 1-12.48-19.66c-2-3.69-4.84-9.26-6.73-13.13a7.29 7.29 0 0 0-10.31-3.16c-4.3 2.41-10 5.72-14.13 8.43a147.3 147.3 0 0 1-23.57-22.43 249 249 0 0 1 30.41-18.36c1.86-1 2.77-2.14 2.18-4.18a374.8 374.8 0 0 1-14.09-82.17 4.36 4.36 0 0 0-4.3-4.17H66.84a2 2 0 0 1-2-1.7A98 98 0 0 1 64 256a96 96 0 0 1 .86-14.29 2 2 0 0 1 2-1.7h56.74c2.29 0 4.17-1.32 4.29-3.63a372.7 372.7 0 0 1 14-81.83 4.36 4.36 0 0 0-2.19-5.11 261 261 0 0 1-29.84-17.9 170 170 0 0 1 23.14-22.8c4.08 2.68 9.4 5.71 13.66 8.11a7.89 7.89 0 0 0 11-3.42c1.88-3.87 4-8.18 6.06-11.88a222 222 0 0 1 12.54-19.91A185 185 0 0 1 256 64c28.94 0 55.9 7 80.53 18.46a202 202 0 0 1 12 19c2.59 4.66 5.34 10.37 7.66 15.32a4.29 4.29 0 0 0 5.92 1.94c5.38-2.91 11.21-6.26 16.34-9.63a171.4 171.4 0 0 1 23.2 23 245 245 0 0 1-29.06 17.31 4.35 4.35 0 0 0-2.18 5.12 348.7 348.7 0 0 1 13.85 81.4 4.33 4.33 0 0 0 4.3 4.12l56.62-.07a2 2 0 0 1 2 1.7 117.5 117.5 0 0 1 0 28.62 2 2 0 0 1-2 1.72h-56.67a4.35 4.35 0 0 0-4.3 4.17 367.4 367.4 0 0 1-13.87 81.3 4.45 4.45 0 0 0 2.19 5.19c5 2.59 10.57 5.48 15.37 8.42s9.55 6.08 14.13 9.34a172.7 172.7 0 0 1-23 22.93c-2.44-1.61-5.34-3.44-7.84-4.94-1.72-1-4.89-2.77-6.65-3.76-3.82-2.14-7.88-.54-9.79 3.4s-4.83 9.59-6.87 13.25a212 212 0 0 1-12.35 19.53C310.91 442.37 284.94 448 256 448s-54.77-5.63-79.4-17.15'/></svg>", i0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M272 320.46V202.3l166.62-75.73a16 16 0 0 0 0-29.14l-176-80A16 16 0 0 0 240 32v288.46q8-.45 16-.46t16 .46'/><path d='M463.33 457.5c-8.56-42.85-35.11-78.74-76.78-103.8-32.5-19.55-72.67-31.3-114.55-33.7v79.75a16 16 0 1 1-32 0V320c-41.88 2.4-82.05 14.15-114.55 33.7-41.67 25.06-68.22 60.95-76.78 103.8a32.49 32.49 0 0 0 6.44 27.08C61.13 492 70 496 80 496h352c10 0 18.88-4.05 24.9-11.42a32.49 32.49 0 0 0 6.43-27.08'/></svg>", s0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M256 448a32 32 0 0 1-18-5.57c-78.59-53.35-112.62-89.93-131.39-112.8-40-48.75-59.15-98.8-58.61-153C48.63 114.52 98.46 64 159.08 64c44.08 0 74.61 24.83 92.39 45.51a6 6 0 0 0 9.06 0C278.31 88.81 308.84 64 352.92 64c60.62 0 110.45 50.52 111.08 112.64.54 54.21-18.63 104.26-58.61 153-18.77 22.87-52.8 59.45-131.39 112.8a32 32 0 0 1-18 5.56'/></svg>", c0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M256 64C150 64 64 150 64 256s86 192 192 192 192-86 192-192S362 64 256 64m-6 304a20 20 0 1 1 20-20 20 20 0 0 1-20 20m33.44-102C267.23 276.88 265 286.85 265 296a14 14 0 0 1-28 0c0-21.91 10.08-39.33 30.82-53.26C287.1 229.8 298 221.6 298 203.57c0-12.26-7-21.57-21.49-28.46-3.41-1.62-11-3.2-20.34-3.09-11.72.15-20.82 2.95-27.83 8.59C215.12 191.25 214 202.83 214 203a14 14 0 1 1-28-1.35c.11-2.43 1.8-24.32 24.77-42.8 11.91-9.58 27.06-14.56 45-14.78 12.7-.15 24.63 2 32.72 5.82C312.7 161.34 326 180.43 326 203.57c0 33.83-22.61 49.02-42.56 62.43'/></svg>", u0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M261.56 101.28a8 8 0 0 0-11.06 0L66.4 277.15a8 8 0 0 0-2.47 5.79L63.9 448a32 32 0 0 0 32 32H192a16 16 0 0 0 16-16V328a8 8 0 0 1 8-8h80a8 8 0 0 1 8 8v136a16 16 0 0 0 16 16h96.06a32 32 0 0 0 32-32V282.94a8 8 0 0 0-2.47-5.79Z'/><path d='m490.91 244.15-74.8-71.56V64a16 16 0 0 0-16-16h-48a16 16 0 0 0-16 16v32l-57.92-55.38C272.77 35.14 264.71 32 256 32c-8.68 0-16.72 3.14-22.14 8.63l-212.7 203.5c-6.22 6-7 15.87-1.34 22.37A16 16 0 0 0 43 267.56L250.5 69.28a8 8 0 0 1 11.06 0l207.52 198.28a16 16 0 0 0 22.59-.44c6.14-6.36 5.63-16.86-.76-22.97'/></svg>", d0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M183 352c-21.84-.52-39-18.9-39-40.74v-34.07a8 8 0 0 0-6-7.74c-33.75-8.85-58-39.71-58-77.45a80.14 80.14 0 0 1 66.27-78.82 8 8 0 0 0 6.62-6.83 104 104 0 0 1 206.22 0 8 8 0 0 0 6.62 6.83A80 80 0 0 1 352 272a74.33 74.33 0 0 1-47.45-17.41 7.93 7.93 0 0 0-9.92-.14A62.9 62.9 0 0 1 256 268a80.5 80.5 0 0 1-21.8-3.18 8 8 0 0 0-10.2 7.69V312a40 40 0 0 1-41 40'/><path d='M263.39 299.7a8 8 0 0 0-7.39 7.91V312a72.11 72.11 0 0 1-50.69 68.76 8 8 0 0 0-4.91 10.78l40.91 94.8A16 16 0 0 0 256 496a16 16 0 0 0 14.69-9.7l73.78-172.15a8 8 0 0 0-6.2-11.07 106.3 106.3 0 0 1-35.9-11.59 8 8 0 0 0-7.13-.2 95 95 0 0 1-31.85 8.41'/></svg>", p0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M256 56C145.72 56 56 145.72 56 256s89.72 200 200 200 200-89.72 200-200S366.28 56 256 56m0 82a26 26 0 1 1-26 26 26 26 0 0 1 26-26m48 226h-88a16 16 0 0 1 0-32h28v-88h-16a16 16 0 0 1 0-32h32a16 16 0 0 1 16 16v104h28a16 16 0 0 1 0 32'/></svg>", g0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M161.35 242a16 16 0 0 1 22.62-.68c73.63 69.36 147.51 111.56 234.45 133.07 11.73-32 12.77-67.22 2.64-101.58-13.44-45.59-44.74-85.31-90.49-114.86-40.84-26.38-81.66-33.25-121.15-39.89-49.82-8.38-96.88-16.3-141.79-63.85-5-5.26-11.81-7.37-18.32-5.66-7.44 2-12.43 7.88-14.82 17.6-5.6 22.75-2 86.51 13.75 153.82 25.29 108.14 65.65 162.86 95.06 189.73 38 34.69 87.62 53.9 136.93 53.9a186 186 0 0 0 27.77-2.04c41.71-6.32 76.43-27.27 96-57.75-89.49-23.28-165.94-67.55-242-139.16a16 16 0 0 1-.65-22.65M467.43 384.19c-16.83-2.59-33.13-5.84-49-9.77a157.7 157.7 0 0 1-12.13 25.68c-.73 1.25-1.5 2.49-2.29 3.71a584 584 0 0 0 58.56 12 16 16 0 1 0 4.87-31.62Z'/></svg>", v0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M64 480H48a32 32 0 0 1-32-32V112a32 32 0 0 1 32-32h16a32 32 0 0 1 32 32v336a32 32 0 0 1-32 32M240 176a32 32 0 0 0-32-32h-64a32 32 0 0 0-32 32v28a4 4 0 0 0 4 4h120a4 4 0 0 0 4-4ZM112 448a32 32 0 0 0 32 32h64a32 32 0 0 0 32-32v-30a2 2 0 0 0-2-2H114a2 2 0 0 0-2 2Z'/><rect width='128' height='144' x='112' y='240' rx='2' ry='2'/><path d='M320 480h-32a32 32 0 0 1-32-32V64a32 32 0 0 1 32-32h32a32 32 0 0 1 32 32v384a32 32 0 0 1-32 32M495.89 445.45l-32.23-340c-1.48-15.65-16.94-27-34.53-25.31l-31.85 3c-17.59 1.67-30.65 15.71-29.17 31.36l32.23 340c1.48 15.65 16.94 27 34.53 25.31l31.85-3c17.59-1.67 30.65-15.71 29.17-31.36'/></svg>", m0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><circle cx='256' cy='192' r='32'/><path d='M256 32c-88.22 0-160 68.65-160 153 0 40.17 18.31 93.59 54.42 158.78 29 52.34 62.55 99.67 80 123.22a31.75 31.75 0 0 0 51.22 0c17.42-23.55 51-70.88 80-123.22C397.69 278.61 416 225.19 416 185c0-84.35-71.78-153-160-153m0 224a64 64 0 1 1 64-64 64.07 64.07 0 0 1-64 64'/></svg>", f0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M48.17 113.34A32 32 0 0 0 32 141.24V438a32 32 0 0 0 47 28.37c.43-.23.85-.47 1.26-.74l84.14-55.05a8 8 0 0 0 3.63-6.72V46.45a8 8 0 0 0-12.51-6.63ZM212.36 39.31A8 8 0 0 0 200 46v357.56a8 8 0 0 0 3.63 6.72l96 62.42A8 8 0 0 0 312 466V108.67a8 8 0 0 0-3.64-6.73ZM464.53 46.47a31.64 31.64 0 0 0-31.5-.88 12 12 0 0 0-1.25.74l-84.15 55a8 8 0 0 0-3.63 6.72v357.46a8 8 0 0 0 12.52 6.63l107.07-73.46a32 32 0 0 0 16.41-28v-296a32.76 32.76 0 0 0-15.47-28.21'/></svg>", y0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M272 464h-32a32 32 0 0 1-32-32l.05-85.82a4 4 0 0 0-6-3.47l-74.34 43.06a31.48 31.48 0 0 1-43-11.52l-16.5-28.64-.06-.1a31.65 31.65 0 0 1 11.56-42.8l74.61-43.25a4 4 0 0 0 0-6.92l-74.54-43.21a31.41 31.41 0 0 1-11.55-43l16.44-28.55a31.48 31.48 0 0 1 19.27-14.74 31.14 31.14 0 0 1 23.8 3.2l74.31 43a4 4 0 0 0 6-3.47L208 80a32 32 0 0 1 32-32h32a32 32 0 0 1 32 32v85.72a4 4 0 0 0 6 3.47l74.34-43.06a31.51 31.51 0 0 1 43 11.52l16.49 28.64.06.09a31.52 31.52 0 0 1-11.64 42.86l-74.53 43.2a4 4 0 0 0 0 6.92l74.53 43.2a31.42 31.42 0 0 1 11.56 43l-16.44 28.55a31.48 31.48 0 0 1-19.27 14.74 31.14 31.14 0 0 1-23.8-3.2l-74.31-43a4 4 0 0 0-6 3.46L304 432a32 32 0 0 1-32 32m61.54-218.56'/></svg>", h0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M264 480A232 232 0 0 1 32 248c0-94 54-178.28 137.61-214.67a16 16 0 0 1 21.06 21.06C181.07 76.43 176 104.66 176 136c0 110.28 89.72 200 200 200 31.34 0 59.57-5.07 81.61-14.67a16 16 0 0 1 21.06 21.06C442.28 426 358 480 264 480'/></svg>", w0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M421.84 37.37a25.86 25.86 0 0 0-22.6-4.46L199.92 86.49A32.3 32.3 0 0 0 176 118v226c0 6.74-4.36 12.56-11.11 14.83l-.12.05-52 18C92.88 383.53 80 402 80 423.91a55.54 55.54 0 0 0 23.23 45.63A54.78 54.78 0 0 0 135.34 480a55.8 55.8 0 0 0 17.75-2.93l.38-.13 21.84-7.94A47.84 47.84 0 0 0 208 423.91v-212c0-7.29 4.77-13.21 12.16-15.07l.21-.06L395 150.14a4 4 0 0 1 5 3.86v141.93c0 6.75-4.25 12.38-11.11 14.68l-.25.09-50.89 18.11A49.09 49.09 0 0 0 304 375.92a55.67 55.67 0 0 0 23.23 45.8 54.63 54.63 0 0 0 49.88 7.35l.36-.12 21.84-7.95A47.83 47.83 0 0 0 432 375.92V58a25.74 25.74 0 0 0-10.16-20.63'/></svg>", x0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M272 464a16 16 0 0 1-16-16.42V264.13a8 8 0 0 0-8-8H64.41a16.31 16.31 0 0 1-15.49-10.65 16 16 0 0 1 8.41-19.87l384-176.15a16 16 0 0 1 21.22 21.19l-176 384A16 16 0 0 1 272 464'/></svg>", k0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M490.39 182.75c-5.55-13.19-14.77-22.7-26.67-27.49l-.16-.06a46.5 46.5 0 0 0-17-3.2h-.64c-27.24.41-55.05 23.56-69.19 57.61-10.37 24.9-11.56 51.68-3.18 71.64 5.54 13.2 14.78 22.71 26.73 27.5l.13.05a46.5 46.5 0 0 0 17 3.2c27.5 0 55.6-23.15 70-57.65 10.24-24.87 11.37-51.63 2.98-71.6M381.55 329.61c-15.71-9.44-30.56-18.37-40.26-34.41C314.53 250.8 298.37 224 256 224s-58.57 26.8-85.39 71.2c-9.72 16.06-24.6 25-40.36 34.48-18.07 10.86-36.74 22.08-44.8 44.16a66.9 66.9 0 0 0-4.65 25c0 35.95 28 65.2 62.4 65.2 17.75 0 36.64-6.15 56.63-12.66 19.22-6.26 39.09-12.73 56.27-12.73s37 6.47 56.15 12.73C332.2 457.85 351 464 368.8 464c34.35 0 62.3-29.25 62.3-65.2a67 67 0 0 0-4.75-25c-8.06-22.1-26.74-33.33-44.8-44.19M150 188.85c11.9 14.93 27 23.15 42.52 23.15a43 43 0 0 0 6.33-.47c32.37-4.76 52.54-44.26 45.92-90C242 102.3 234.6 84.39 224 71.11 212.12 56.21 197 48 181.49 48a43 43 0 0 0-6.33.47c-32.37 4.76-52.54 44.26-45.92 90 2.76 19.2 10.16 37.09 20.76 50.38M313.16 211.53a43 43 0 0 0 6.33.47c15.53 0 30.62-8.22 42.52-23.15 10.59-13.29 17.95-31.18 20.75-50.4 6.62-45.72-13.55-85.22-45.92-90a43 43 0 0 0-6.33-.47C315 48 299.88 56.21 288 71.11c-10.6 13.28-18 31.19-20.76 50.44-6.62 45.72 13.55 85.22 45.92 89.98M111.59 308.8l.14-.05c11.93-4.79 21.16-14.29 26.69-27.48 8.38-20 7.2-46.75-3.15-71.65C120.94 175.16 92.85 152 65.38 152a46.4 46.4 0 0 0-17 3.2l-.14.05c-11.9 4.75-21.13 14.29-26.66 27.48-8.38 20-7.2 46.75 3.15 71.65C39.06 288.84 67.15 312 94.62 312a46.4 46.4 0 0 0 16.97-3.2'/></svg>", b0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M336 96a80 80 0 1 0-96 78.39v283.17a32.1 32.1 0 0 0 2.49 12.38l10.07 24a3.92 3.92 0 0 0 6.88 0l10.07-24a32.1 32.1 0 0 0 2.49-12.38V174.39A80.13 80.13 0 0 0 336 96m-56 0a24 24 0 1 1 24-24 24 24 0 0 1-24 24'/></svg>", M0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M441.82 67.83C383.44 44.73 317.3 32 255.56 32 192 32 125.76 44.53 69 67.26 48.7 75.49 45.21 90 48.71 100.82L52.78 111a16 16 0 0 0 21.31 8.69c10.8-4.76 23.93-10.54 27-11.78C145.1 89.64 198.71 80 256 80c57.47 0 108.09 9.24 154.76 28.25 4.42 1.8 14.88 6.42 26.17 11.46a16 16 0 0 0 21.35-8.59L462 102l.34-.9c3.45-10.21.14-25.05-20.52-33.27'/><path d='M409.18 140.86C363.67 122.53 307.68 112 255.56 112a425 425 0 0 0-153.74 28.89c-.53.21-2.06.88-4.29 1.88a16 16 0 0 0-8 21.27c4 8.71 9.42 20.58 15.5 33.89C137.94 270 199.21 404 227.26 462A31.74 31.74 0 0 0 256 480a31.73 31.73 0 0 0 28.76-18.06l.06-.13 137.3-297.57a15.94 15.94 0 0 0-8.31-21.45c-2.26-.95-3.85-1.61-4.5-1.87Zm-215.1 83.07a32 32 0 1 1 29.85-29.85 32 32 0 0 1-29.85 29.85m64 128a32 32 0 1 1 29.85-29.85 32 32 0 0 1-29.85 29.85m64-112a32 32 0 1 1 29.85-29.85 32 32 0 0 1-29.85 29.85'/></svg>", C0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M357.57 223.94a79.48 79.48 0 0 0 56.58-23.44l77-76.95c6.09-6.09 6.65-16 .85-22.39a16 16 0 0 0-23.17-.56l-68.63 68.58a12.29 12.29 0 0 1-17.37 0c-4.79-4.78-4.53-12.86.25-17.64l68.33-68.33a16 16 0 0 0-.56-23.16A15.62 15.62 0 0 0 440.27 56a16.7 16.7 0 0 0-11.81 4.9l-68.27 68.26a12.29 12.29 0 0 1-17.37 0c-4.78-4.78-4.53-12.86.25-17.64l68.33-68.31a16 16 0 0 0-.56-23.16A15.62 15.62 0 0 0 400.26 16a16.73 16.73 0 0 0-11.81 4.9L311.5 97.85a79.5 79.5 0 0 0-23.44 56.59v8.23a16 16 0 0 1-4.69 11.33l-35.61 35.62a4 4 0 0 1-5.66 0L68.82 36.33a16 16 0 0 0-22.58-.06C31.09 51.28 23 72.47 23 97.54c-.1 41.4 21.66 89 56.79 124.08l85.45 85.45A64.8 64.8 0 0 0 211 326a64 64 0 0 0 16.21-2.08 16.2 16.2 0 0 1 4.07-.53 15.93 15.93 0 0 1 10.83 4.25l11.39 10.52a16.12 16.12 0 0 1 4.6 11.23v5.54a47.73 47.73 0 0 0 13.77 33.65l90.05 91.57.09.1a53.29 53.29 0 0 0 75.36-75.37L302.39 269.9a4 4 0 0 1 0-5.66L338 228.63a16 16 0 0 1 11.32-4.69Z'/><path d='M211 358a97.32 97.32 0 0 1-68.36-28.25l-13.86-13.86a8 8 0 0 0-11.3 0l-85 84.56c-15.15 15.15-20.56 37.45-13.06 59.29a31 31 0 0 0 1.49 3.6C31 484 50.58 496 72 496a55.68 55.68 0 0 0 39.64-16.44L225 365.66a4.69 4.69 0 0 0 1.32-3.72v-.26a4.63 4.63 0 0 0-5.15-4.27A97 97 0 0 1 211 358'/></svg>", L0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M256 368a16 16 0 0 1-7.94-2.11L108 285.84a8 8 0 0 0-12 6.94V368a16 16 0 0 0 8.23 14l144 80a16 16 0 0 0 15.54 0l144-80a16 16 0 0 0 8.23-14v-75.22a8 8 0 0 0-12-6.94l-140.06 80.05A16 16 0 0 1 256 368'/><path d='M495.92 190.5v-.11a16 16 0 0 0-8-12.28l-224-128a16 16 0 0 0-15.88 0l-224 128a16 16 0 0 0 0 27.78l224 128a16 16 0 0 0 15.88 0L461 221.28a2 2 0 0 1 3 1.74v144.53c0 8.61 6.62 16 15.23 16.43A16 16 0 0 0 496 368V192a15 15 0 0 0-.08-1.5'/></svg>", _0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='m461 349-34-19.64a89.5 89.5 0 0 1 20.94-16 22 22 0 0 0-21.28-38.51 133.6 133.6 0 0 0-38.55 32.1L300 256l88.09-50.86a133.5 133.5 0 0 0 38.55 32.1 22 22 0 1 0 21.28-38.51 89.7 89.7 0 0 1-20.94-16l34-19.64A22 22 0 1 0 439 125l-34 19.63a89.7 89.7 0 0 1-3.42-26.15A22 22 0 0 0 380 96h-.41a22 22 0 0 0-22 21.59 133.6 133.6 0 0 0 8.5 49.41L278 217.89V116.18a133.5 133.5 0 0 0 47.07-17.33 22 22 0 0 0-22.71-37.69A89.6 89.6 0 0 1 278 71.27V38a22 22 0 0 0-44 0v33.27a89.6 89.6 0 0 1-24.36-10.11 22 22 0 1 0-22.71 37.69A133.5 133.5 0 0 0 234 116.18v101.71L145.91 167a133.6 133.6 0 0 0 8.52-49.43 22 22 0 0 0-22-21.59H132a22 22 0 0 0-21.59 22.41 89.7 89.7 0 0 1-3.41 26.19L73 125a22 22 0 1 0-22 38.1l34 19.64a89.7 89.7 0 0 1-20.94 16 22 22 0 1 0 21.28 38.51 133.6 133.6 0 0 0 38.55-32.1L212 256l-88.09 50.86a133.6 133.6 0 0 0-38.55-32.1 22 22 0 1 0-21.28 38.51 89.7 89.7 0 0 1 20.94 16L51 349a22 22 0 1 0 22 38.1l34-19.63a89.7 89.7 0 0 1 3.42 26.15A22 22 0 0 0 132 416h.41a22 22 0 0 0 22-21.59 133.6 133.6 0 0 0-8.5-49.41L234 294.11v101.71a133.5 133.5 0 0 0-47.07 17.33 22 22 0 1 0 22.71 37.69A89.6 89.6 0 0 1 234 440.73V474a22 22 0 0 0 44 0v-33.27a89.6 89.6 0 0 1 24.36 10.11 22 22 0 0 0 22.71-37.69A133.5 133.5 0 0 0 278 395.82V294.11L366.09 345a133.6 133.6 0 0 0-8.52 49.43 22 22 0 0 0 22 21.59h.43a22 22 0 0 0 21.59-22.41 89.7 89.7 0 0 1 3.41-26.19l34 19.63A22 22 0 1 0 461 349'/></svg>", A0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M394 480a16 16 0 0 1-9.39-3L256 383.76 127.39 477a16 16 0 0 1-24.55-18.08L153 310.35 23 221.2a16 16 0 0 1 9-29.2h160.38l48.4-148.95a16 16 0 0 1 30.44 0l48.4 149H480a16 16 0 0 1 9.05 29.2L359 310.35l50.13 148.53A16 16 0 0 1 394 480'/></svg>", S0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M256 118a22 22 0 0 1-22-22V48a22 22 0 0 1 44 0v48a22 22 0 0 1-22 22M256 486a22 22 0 0 1-22-22v-48a22 22 0 0 1 44 0v48a22 22 0 0 1-22 22M369.14 164.86a22 22 0 0 1-15.56-37.55l33.94-33.94a22 22 0 0 1 31.11 31.11l-33.94 33.94a21.93 21.93 0 0 1-15.55 6.44M108.92 425.08a22 22 0 0 1-15.55-37.56l33.94-33.94a22 22 0 1 1 31.11 31.11l-33.94 33.94a21.94 21.94 0 0 1-15.56 6.45M464 278h-48a22 22 0 0 1 0-44h48a22 22 0 0 1 0 44M96 278H48a22 22 0 0 1 0-44h48a22 22 0 0 1 0 44M403.08 425.08a21.94 21.94 0 0 1-15.56-6.45l-33.94-33.94a22 22 0 0 1 31.11-31.11l33.94 33.94a22 22 0 0 1-15.55 37.56M142.86 164.86a21.9 21.9 0 0 1-15.55-6.44l-33.94-33.94a22 22 0 0 1 31.11-31.11l33.94 33.94a22 22 0 0 1-15.56 37.55M256 358a102 102 0 1 1 102-102 102.12 102.12 0 0 1-102 102'/></svg>", V0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M448 256a192.6 192.6 0 0 0 32-2.68A224 224 0 0 0 258.68 32 192.6 192.6 0 0 0 256 64c0 105.87 86.13 192 192 192M253.35 480c.94-5.67 1.65-11.4 2.09-17.18.37-4.88.56-9.86.56-14.79 0-105.87-86.13-192-192-192a192.6 192.6 0 0 0-32 2.68A224 224 0 0 0 253.35 480'/><path d='M289.61 222.39A222.53 222.53 0 0 1 224 64a226 226 0 0 1 2-30A224.1 224.1 0 0 0 34 226a226 226 0 0 1 30-2 222.53 222.53 0 0 1 158.39 65.61A222.53 222.53 0 0 1 288 448c0 5.74-.22 11.53-.65 17.22q-.5 6.42-1.36 12.79A224.12 224.12 0 0 0 478 286a226 226 0 0 1-30 2 222.53 222.53 0 0 1-158.39-65.61'/></svg>", T0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M96 416a16 16 0 0 1-14.3-23.16l24-48a16 16 0 0 1 28.62 14.32l-24 48A16 16 0 0 1 96 416M120 480a16 16 0 0 1-14.3-23.16l16-32a16 16 0 0 1 28.62 14.32l-16 32A16 16 0 0 1 120 480M376 416a16 16 0 0 1-14.3-23.16l24-48a16 16 0 0 1 28.62 14.32l-24 48A16 16 0 0 1 376 416M400 480a16 16 0 0 1-14.3-23.16l16-32a16 16 0 0 1 28.62 14.32l-16 32A16 16 0 0 1 400 480'/><path d='M405.84 136.9a151.25 151.25 0 0 0-47.6-81.9 153 153 0 0 0-241.81 51.86C60.5 110.16 16 156.65 16 213.33 16 272.15 63.91 320 122.8 320h66.31l-12.89 77.37A16 16 0 0 0 192 416h32v64a16 16 0 0 0 29 9.3l80-112a16 16 0 0 0-13-25.3h-27.51l8-32h103.84a91.56 91.56 0 0 0 1.51-183.1'/></svg>", P0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M491.31 324.69 432 265.37a31.8 31.8 0 0 0-22.63-9.37H272v-32h144a32 32 0 0 0 32-32V96a32 32 0 0 0-32-32H272V48a16 16 0 0 0-32 0v16H102.63A31.8 31.8 0 0 0 80 73.37l-59.31 59.32a16 16 0 0 0 0 22.62L80 214.63a31.8 31.8 0 0 0 22.63 9.37H240v32H96a32 32 0 0 0-32 32v96a32 32 0 0 0 32 32h144v48a16 16 0 0 0 32 0v-48h137.37a31.8 31.8 0 0 0 22.63-9.37l59.31-59.32a16 16 0 0 0 0-22.62'/></svg>", B0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><ellipse cx='256' cy='304' rx='32.05' ry='31.94' transform='rotate(-45 256.001 304)'/><path d='M352 32h-15a10 10 0 0 1-7.87-3.78A31.94 31.94 0 0 0 304 16h-96a32 32 0 0 0-26.11 13.52A6 6 0 0 1 177 32h-17c-36.81 0-64 28.84-64 64v255c0 23.27 25.6 42.06 83 60.94a753 753 0 0 0 73.77 19.73 16 16 0 0 0 6.46 0A753 753 0 0 0 333 411.94c57.4-18.88 83-37.67 83-60.94V96a64 64 0 0 0-64-64m-168 96h144a8 8 0 0 1 8 8v48a8 8 0 0 1-8 8H184a8 8 0 0 1-8-8v-48a8 8 0 0 1 8-8m76.18 239.87a64 64 0 1 1 59.69-59.69 64.07 64.07 0 0 1-59.69 59.69'/><path d='M395.31 468.69 347.63 421c-6.09-6.1-16-6.66-22.38-.86a16 16 0 0 0-.56 23.16l4.68 4.69H182.63l4.36-4.37c6.1-6.09 6.66-16 .86-22.38a16 16 0 0 0-23.16-.56l-48 48a16 16 0 1 0 22.62 22.62l11.32-11.3h210.74l11.32 11.31a16 16 0 0 0 22.62-22.62'/></svg>", D0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='m312.55 479.9-56.42-114-44.62-57a72.37 72.37 0 0 1-10.06-36.9V143.64H217a40 40 0 0 1 40 40v182.21' stroke-linecap='round' stroke-linejoin='round' class='ionicon-stroke-width'/><path d='M127.38 291.78v-74.07s37-74.07 74.07-74.07' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/><path d='M368.09 291.78a18.5 18.5 0 0 1-10.26-3.11L297.7 250a21.18 21.18 0 0 1-9.7-17.79v-23.7a5.65 5.65 0 0 1 8.69-4.77l81.65 54.11a18.52 18.52 0 0 1-10.29 33.93ZM171.91 493.47a18.5 18.5 0 0 1-14.83-7.41c-6.14-8.18-4-17.18 3.7-25.92l59.95-74.66a7.41 7.41 0 0 1 10.76 2.06c1.56 2.54 3.38 5.65 5.19 9.09 5.24 9.95 6 16.11-1.68 25.7-8 10-52 67.44-52 67.44-2.62 2.98-7.23 3.7-11.09 3.7'/><circle cx='257' cy='69.56' r='37.04' stroke-linecap='round' stroke-linejoin='round' stroke-width='16px'/></svg>", F0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M449.07 399.08 278.64 82.58c-12.08-22.44-44.26-22.44-56.35 0L51.87 399.08A32 32 0 0 0 80 446.25h340.89a32 32 0 0 0 28.18-47.17m-198.6-1.83a20 20 0 1 1 20-20 20 20 0 0 1-20 20m21.72-201.15-5.74 122a16 16 0 0 1-32 0l-5.74-121.95a21.73 21.73 0 0 1 21.5-22.69h.21a21.74 21.74 0 0 1 21.73 22.7Z'/></svg>", I0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M265.12 60.12a12 12 0 0 0-18.23 0C215.23 97.15 112 225.17 112 320c0 88.37 55.64 144 144 144s144-55.63 144-144c0-94.83-103.23-222.85-134.88-259.88M272 412a12 12 0 0 1-11.34-16 11.89 11.89 0 0 1 11.41-8A60.06 60.06 0 0 0 332 328.07a11.89 11.89 0 0 1 8-11.41A12 12 0 0 1 356 328a84.09 84.09 0 0 1-84 84'/></svg>", z0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path fill-rule='evenodd' d='M331.295 353.764c.131.181-.091-.13 0 0a46 46 0 0 0-1.039-1.365 64 64 0 0 0-3.618-4.17c-3.112-3.302-7.69-7.537-13.87-11.725C300.287 328.047 281.56 320 256 320s-44.287 8.047-56.768 16.504c-6.18 4.188-10.758 8.423-13.87 11.725a64 64 0 0 0-3.618 4.17c.264-.361-.43.544 0 0l-1.586 2.142a16 16 0 0 0 2.135 20.463l62.586 60.5c6.202 5.995 16.039 5.995 22.241 0l62.587-60.5a16 16 0 0 0 2.136-20.463z' clip-rule='evenodd'/><path fill-rule='evenodd' d='M421.086 269.862c-.135-.218-.596-.966-.812-1.3a72 72 0 0 0-1.81-2.639c-1.552-2.163-3.813-5.096-6.861-8.536-6.099-6.88-15.362-15.802-28.417-24.637C356.915 214.969 315.967 198 256 198s-100.915 16.969-127.186 34.75c-13.055 8.835-22.318 17.757-28.417 24.637-3.049 3.44-5.31 6.373-6.861 8.536a71 71 0 0 0-1.81 2.639q-.324.502-.527.829l-.285.471a16 16 0 0 0 2.678 19.664l35.31 34a16 16 0 0 0 23.007-.84l.195-.209c.207-.219.565-.591 1.074-1.096a93 93 0 0 1 4.831-4.436c4.402-3.785 11.093-8.947 19.955-14.141C195.658 292.436 221.893 282 256 282s60.342 10.436 78.036 20.804c8.862 5.194 15.553 10.356 19.955 14.141a93 93 0 0 1 4.831 4.436 49 49 0 0 1 1.269 1.305l-.005-.006-.013-.015m0 0 .026.029a16.001 16.001 0 0 0 22.999.832l35.31-34a16 16 0 0 0 2.678-19.664' clip-rule='evenodd'/><path d='M507.974 181.264c.343.459 1.181 1.629 1.181 1.629a16 16 0 0 1-2.029 20.606l-36.69 35.5a16 16 0 0 1-23.345-1.17l-.003-.003-.085-.099q-.138-.16-.482-.548a108 108 0 0 0-2.197-2.379c-2.009-2.116-5.095-5.229-9.229-9.01-8.275-7.569-20.69-17.764-36.997-27.981C365.499 177.384 317.58 157 256 157s-109.499 20.384-142.098 40.809c-16.307 10.217-28.722 20.412-36.997 27.981-4.133 3.781-7.22 6.894-9.229 9.01a109 109 0 0 0-2.197 2.379q-.345.388-.482.548l-.047.054-.03.034-.004.006-.004.005-.004.004a16 16 0 0 1-23.344 1.169l-36.69-35.5a16 16 0 0 1-2.03-20.606l.011-.016.013-.017.03-.043.079-.113.24-.337q.295-.413.809-1.103c.686-.92 1.667-2.199 2.949-3.786 2.563-3.174 6.335-7.585 11.367-12.818 10.057-10.46 25.185-24.241 45.783-37.973C105.437 99.146 168.48 72 256 72s150.563 27.146 191.875 54.687c20.598 13.732 35.726 27.513 45.783 37.973 5.032 5.233 8.804 9.644 11.367 12.818a125 125 0 0 1 2.949 3.786'/></svg>", $0 = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M414.56 94.92V80a16 16 0 0 0-16-16H113.44a16 16 0 0 0-16 16v14.92c-1.46 11.37-9.65 90.74 36.93 144.69 24.87 28.8 60.36 44.85 105.63 47.86V416h-80a16 16 0 0 0 0 32h192a16 16 0 0 0 0-32h-80V287.47c45.27-3 80.76-19.06 105.63-47.86 46.58-53.95 38.37-133.32 36.93-144.69m-285.3 3.41a15 15 0 0 0 .18-2.33h253.12a15 15 0 0 0 .18 2.33 202 202 0 0 1 0 45.67H129.32a204.3 204.3 0 0 1-.06-45.67'/></svg>", H0 = {
|
|
463
|
+
"marker-pin": '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 27 41"><path d="M13.5 0C6.044 0 0 6.044 0 13.5 0 24.818 13.5 41 13.5 41S27 24.818 27 13.5C27 6.044 20.956 0 13.5 0z" fill="#000"/></svg>'
|
|
464
|
+
}, U0 = {
|
|
465
|
+
location: m0,
|
|
466
|
+
pin: b0,
|
|
467
|
+
flag: t0,
|
|
468
|
+
star: A0,
|
|
469
|
+
heart: s0,
|
|
470
|
+
home: u0,
|
|
471
|
+
business: Z1,
|
|
472
|
+
cafe: N1,
|
|
473
|
+
restaurant: C0,
|
|
474
|
+
car: j1,
|
|
475
|
+
bus: O1,
|
|
476
|
+
bicycle: E1,
|
|
477
|
+
walk: D0,
|
|
478
|
+
airplane: F1,
|
|
479
|
+
boat: R1,
|
|
480
|
+
train: B0,
|
|
481
|
+
medical: y0,
|
|
482
|
+
fitness: e0,
|
|
483
|
+
school: L0,
|
|
484
|
+
library: v0,
|
|
485
|
+
cart: G1,
|
|
486
|
+
basket: z1,
|
|
487
|
+
gift: r0,
|
|
488
|
+
camera: q1,
|
|
489
|
+
"musical-notes": w0,
|
|
490
|
+
football: l0,
|
|
491
|
+
basketball: $1,
|
|
492
|
+
golf: i0,
|
|
493
|
+
tennisball: V0,
|
|
494
|
+
fish: X1,
|
|
495
|
+
leaf: g0,
|
|
496
|
+
flower: o0,
|
|
497
|
+
paw: k0,
|
|
498
|
+
water: I0,
|
|
499
|
+
flame: a0,
|
|
500
|
+
snow: _0,
|
|
501
|
+
sunny: S0,
|
|
502
|
+
moon: h0,
|
|
503
|
+
cloudy: Y1,
|
|
504
|
+
thunderstorm: T0,
|
|
505
|
+
warning: F0,
|
|
506
|
+
"information-circle": p0,
|
|
507
|
+
"help-circle": c0,
|
|
508
|
+
"checkmark-circle": K1,
|
|
509
|
+
"close-circle": W1,
|
|
510
|
+
"alert-circle": I1,
|
|
511
|
+
wifi: z0,
|
|
512
|
+
cellular: J1,
|
|
513
|
+
globe: n0,
|
|
514
|
+
compass: Q1,
|
|
515
|
+
navigate: x0,
|
|
516
|
+
map: f0,
|
|
517
|
+
"trail-sign": P0,
|
|
518
|
+
bed: H1,
|
|
519
|
+
beer: U1,
|
|
520
|
+
wine: $0,
|
|
521
|
+
pizza: M0,
|
|
522
|
+
"ice-cream": d0
|
|
523
|
+
}, t1 = [
|
|
524
|
+
"marker-pin",
|
|
525
|
+
"location",
|
|
526
|
+
"pin",
|
|
527
|
+
"flag",
|
|
528
|
+
"star",
|
|
529
|
+
"heart",
|
|
530
|
+
"home",
|
|
531
|
+
"business",
|
|
532
|
+
"cafe",
|
|
533
|
+
"restaurant",
|
|
534
|
+
"car",
|
|
535
|
+
"bus",
|
|
536
|
+
"bicycle",
|
|
537
|
+
"walk",
|
|
538
|
+
"airplane",
|
|
539
|
+
"boat",
|
|
540
|
+
"train",
|
|
541
|
+
"medical",
|
|
542
|
+
"fitness",
|
|
543
|
+
"school",
|
|
544
|
+
"library",
|
|
545
|
+
"cart",
|
|
546
|
+
"basket",
|
|
547
|
+
"gift",
|
|
548
|
+
"camera",
|
|
549
|
+
"musical-notes",
|
|
550
|
+
"football",
|
|
551
|
+
"basketball",
|
|
552
|
+
"golf",
|
|
553
|
+
"tennisball",
|
|
554
|
+
"fish",
|
|
555
|
+
"leaf",
|
|
556
|
+
"flower",
|
|
557
|
+
"paw",
|
|
558
|
+
"water",
|
|
559
|
+
"flame",
|
|
560
|
+
"snow",
|
|
561
|
+
"sunny",
|
|
562
|
+
"moon",
|
|
563
|
+
"cloudy",
|
|
564
|
+
"thunderstorm",
|
|
565
|
+
"warning",
|
|
566
|
+
"information-circle",
|
|
567
|
+
"help-circle",
|
|
568
|
+
"checkmark-circle",
|
|
569
|
+
"close-circle",
|
|
570
|
+
"alert-circle",
|
|
571
|
+
"wifi",
|
|
572
|
+
"cellular",
|
|
573
|
+
"globe",
|
|
574
|
+
"compass",
|
|
575
|
+
"navigate",
|
|
576
|
+
"map",
|
|
577
|
+
"trail-sign",
|
|
578
|
+
"bed",
|
|
579
|
+
"beer",
|
|
580
|
+
"wine",
|
|
581
|
+
"pizza",
|
|
582
|
+
"ice-cream"
|
|
583
|
+
];
|
|
584
|
+
function E0(e) {
|
|
585
|
+
return "data:image/svg+xml;charset=utf-8," + encodeURIComponent(e);
|
|
586
|
+
}
|
|
587
|
+
function x1(e) {
|
|
588
|
+
const i = H0[e];
|
|
589
|
+
return i ? E0(i) : U0[e] ?? null;
|
|
590
|
+
}
|
|
591
|
+
async function R0(e) {
|
|
592
|
+
return x1(e);
|
|
593
|
+
}
|
|
594
|
+
async function O0(e, i) {
|
|
595
|
+
if (e.hasImage(i))
|
|
596
|
+
return;
|
|
597
|
+
const a = x1(i);
|
|
598
|
+
if (a)
|
|
599
|
+
try {
|
|
600
|
+
const l = 5 * (window.devicePixelRatio || 1), d = Math.round(32 * l), v = new Image(d, d);
|
|
601
|
+
await new Promise((m, C) => {
|
|
602
|
+
v.onload = () => m(), v.onerror = C, v.src = a;
|
|
603
|
+
}), e.hasImage(i) || e.addImage(i, v, { pixelRatio: l, sdf: !0 });
|
|
604
|
+
} catch {
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
async function Q(e, i) {
|
|
608
|
+
const a = /* @__PURE__ */ new Set();
|
|
609
|
+
for (const o of i) {
|
|
610
|
+
const g = o.properties["marker-symbol"];
|
|
611
|
+
typeof g == "string" && g && a.add(g);
|
|
612
|
+
}
|
|
613
|
+
await Promise.all([...a].map((o) => O0(e, o)));
|
|
614
|
+
}
|
|
615
|
+
const Z0 = 40, N0 = 15, q0 = 15;
|
|
616
|
+
function k1(e, i) {
|
|
617
|
+
return e === void 0 && i === void 0;
|
|
618
|
+
}
|
|
619
|
+
function b1(e, i, a) {
|
|
620
|
+
if (i.length === 0) return;
|
|
621
|
+
const o = new V1();
|
|
622
|
+
for (const h of i) {
|
|
623
|
+
const M = h.geometry.coordinates;
|
|
624
|
+
if (h.geometry.type === "Point")
|
|
625
|
+
o.extend(M);
|
|
626
|
+
else if (h.geometry.type === "LineString")
|
|
627
|
+
for (const L of M) o.extend(L);
|
|
628
|
+
else if (h.geometry.type === "Polygon")
|
|
629
|
+
for (const L of M)
|
|
630
|
+
for (const w of L) o.extend(w);
|
|
631
|
+
}
|
|
632
|
+
if (o.isEmpty()) return;
|
|
633
|
+
const g = o.getSouthWest(), l = o.getNorthEast(), d = g.lng === l.lng && g.lat === l.lat, v = Z0, m = N0, C = q0;
|
|
634
|
+
d ? e.jumpTo({ center: g, zoom: C }) : e.fitBounds(o, { padding: v, maxZoom: m });
|
|
635
|
+
}
|
|
636
|
+
function j0() {
|
|
637
|
+
const e = F("select"), i = F([]), a = F(null), o = I(
|
|
638
|
+
() => (e.value === "draw-polygon" || e.value === "draw-line") && i.value.length > 0
|
|
639
|
+
);
|
|
640
|
+
function g(w) {
|
|
641
|
+
d(), a.value = null, e.value = w;
|
|
642
|
+
}
|
|
643
|
+
function l(w) {
|
|
644
|
+
i.value = [...i.value, w];
|
|
645
|
+
}
|
|
646
|
+
function d() {
|
|
647
|
+
i.value = [];
|
|
648
|
+
}
|
|
649
|
+
function v() {
|
|
650
|
+
const w = [...i.value];
|
|
651
|
+
return i.value = [], w;
|
|
652
|
+
}
|
|
653
|
+
function m(w) {
|
|
654
|
+
a.value = w;
|
|
655
|
+
}
|
|
656
|
+
function C(w, s, c) {
|
|
657
|
+
const f = w.project(s), u = w.project(c);
|
|
658
|
+
return Math.sqrt((f.x - u.x) ** 2 + (f.y - u.y) ** 2);
|
|
659
|
+
}
|
|
660
|
+
function h() {
|
|
661
|
+
const w = [], s = i.value, c = s[0];
|
|
662
|
+
return e.value === "draw-polygon" && s.length >= 3 && c && w.push({
|
|
663
|
+
type: "Feature",
|
|
664
|
+
properties: {},
|
|
665
|
+
geometry: {
|
|
666
|
+
type: "Polygon",
|
|
667
|
+
coordinates: [[...s, c]]
|
|
668
|
+
}
|
|
669
|
+
}), { type: "FeatureCollection", features: w };
|
|
670
|
+
}
|
|
671
|
+
function M(w) {
|
|
672
|
+
const s = [], c = i.value;
|
|
673
|
+
if (c.length >= 1) {
|
|
674
|
+
const f = w ? [...c, w] : [...c];
|
|
675
|
+
f.length >= 2 && s.push({
|
|
676
|
+
type: "Feature",
|
|
677
|
+
properties: {},
|
|
678
|
+
geometry: {
|
|
679
|
+
type: "LineString",
|
|
680
|
+
coordinates: f
|
|
681
|
+
}
|
|
682
|
+
});
|
|
683
|
+
}
|
|
684
|
+
return { type: "FeatureCollection", features: s };
|
|
685
|
+
}
|
|
686
|
+
function L() {
|
|
687
|
+
return {
|
|
688
|
+
type: "FeatureCollection",
|
|
689
|
+
features: i.value.map((w, s) => ({
|
|
690
|
+
type: "Feature",
|
|
691
|
+
properties: { index: s },
|
|
692
|
+
geometry: {
|
|
693
|
+
type: "Point",
|
|
694
|
+
coordinates: w
|
|
695
|
+
}
|
|
696
|
+
}))
|
|
697
|
+
};
|
|
698
|
+
}
|
|
699
|
+
return {
|
|
700
|
+
activeTool: e,
|
|
701
|
+
drawingCoords: i,
|
|
702
|
+
selectedFeatureId: a,
|
|
703
|
+
isDrawing: o,
|
|
704
|
+
setTool: g,
|
|
705
|
+
addDrawingCoord: l,
|
|
706
|
+
cancelDrawing: d,
|
|
707
|
+
finishDrawing: v,
|
|
708
|
+
selectFeature: m,
|
|
709
|
+
distancePx: C,
|
|
710
|
+
getTempGeoJson: h,
|
|
711
|
+
getTempLineGeoJson: M,
|
|
712
|
+
getTempVerticesGeoJson: L
|
|
713
|
+
};
|
|
714
|
+
}
|
|
715
|
+
let G0 = 0;
|
|
716
|
+
function J0(e) {
|
|
717
|
+
const i = crypto.getRandomValues(new Uint8Array(e));
|
|
718
|
+
return Array.from(i, (a) => a.toString(16).padStart(2, "0")).join("");
|
|
719
|
+
}
|
|
720
|
+
function J() {
|
|
721
|
+
return `richpods-${J0(6)}-${++G0}`;
|
|
722
|
+
}
|
|
723
|
+
function K0(e) {
|
|
724
|
+
function i(h) {
|
|
725
|
+
e.value = {
|
|
726
|
+
...e.value,
|
|
727
|
+
features: [...e.value.features, h]
|
|
728
|
+
};
|
|
729
|
+
}
|
|
730
|
+
function a(h) {
|
|
731
|
+
e.value = {
|
|
732
|
+
...e.value,
|
|
733
|
+
features: e.value.features.filter((M) => M.id !== h)
|
|
734
|
+
};
|
|
735
|
+
}
|
|
736
|
+
function o(h, M) {
|
|
737
|
+
e.value = {
|
|
738
|
+
...e.value,
|
|
739
|
+
features: e.value.features.map((L) => L.id === h ? M(L) : L)
|
|
740
|
+
};
|
|
741
|
+
}
|
|
742
|
+
function g(h, M) {
|
|
743
|
+
o(h, (L) => ({
|
|
744
|
+
...L,
|
|
745
|
+
properties: { ...L.properties, ...M }
|
|
746
|
+
}));
|
|
747
|
+
}
|
|
748
|
+
function l(h) {
|
|
749
|
+
const M = J();
|
|
750
|
+
return {
|
|
751
|
+
type: "Feature",
|
|
752
|
+
id: M,
|
|
753
|
+
geometry: { type: "Polygon", coordinates: h },
|
|
754
|
+
properties: { id: M }
|
|
755
|
+
};
|
|
756
|
+
}
|
|
757
|
+
function d(h) {
|
|
758
|
+
const M = J();
|
|
759
|
+
return {
|
|
760
|
+
type: "Feature",
|
|
761
|
+
id: M,
|
|
762
|
+
geometry: { type: "LineString", coordinates: h },
|
|
763
|
+
properties: { id: M }
|
|
764
|
+
};
|
|
765
|
+
}
|
|
766
|
+
function v(h) {
|
|
767
|
+
const M = J();
|
|
768
|
+
return {
|
|
769
|
+
type: "Feature",
|
|
770
|
+
id: M,
|
|
771
|
+
geometry: { type: "Point", coordinates: h },
|
|
772
|
+
properties: { id: M }
|
|
773
|
+
};
|
|
774
|
+
}
|
|
775
|
+
function m(h) {
|
|
776
|
+
const M = J();
|
|
777
|
+
return {
|
|
778
|
+
type: "Feature",
|
|
779
|
+
id: M,
|
|
780
|
+
geometry: { type: "Point", coordinates: h },
|
|
781
|
+
properties: { id: M, "marker-symbol": "location" }
|
|
782
|
+
};
|
|
783
|
+
}
|
|
784
|
+
function C(h) {
|
|
785
|
+
return e.value.features.find((M) => M.id === h);
|
|
786
|
+
}
|
|
787
|
+
return {
|
|
788
|
+
model: e,
|
|
789
|
+
addFeature: i,
|
|
790
|
+
removeFeature: a,
|
|
791
|
+
updateFeature: o,
|
|
792
|
+
updateFeatureProperties: g,
|
|
793
|
+
createPolygon: l,
|
|
794
|
+
createLineString: d,
|
|
795
|
+
createPoint: v,
|
|
796
|
+
createMarker: m,
|
|
797
|
+
getFeature: C
|
|
798
|
+
};
|
|
799
|
+
}
|
|
800
|
+
const W0 = /* @__PURE__ */ Z({
|
|
801
|
+
__name: "EditorMap",
|
|
802
|
+
props: {
|
|
803
|
+
modelValue: {},
|
|
804
|
+
activeTool: {},
|
|
805
|
+
pmtilesUrl: {},
|
|
806
|
+
pointRadius: {},
|
|
807
|
+
center: {},
|
|
808
|
+
zoom: {}
|
|
809
|
+
},
|
|
810
|
+
emits: ["update:modelValue", "featureClick", "featureDelete", "toolDone"],
|
|
811
|
+
setup(e, { emit: i }) {
|
|
812
|
+
const a = e, o = i, g = F(null);
|
|
813
|
+
let l = null, d = null, v = !1, m = !1, C = [], h = [];
|
|
814
|
+
const M = I(() => k1(a.center, a.zoom)), L = F(a.modelValue);
|
|
815
|
+
R(
|
|
816
|
+
() => a.modelValue,
|
|
817
|
+
(y) => {
|
|
818
|
+
L.value = y;
|
|
819
|
+
}
|
|
820
|
+
);
|
|
821
|
+
const w = K0(L), s = j0(), c = () => a.pointRadius ?? v1;
|
|
822
|
+
let f = null;
|
|
823
|
+
R(
|
|
824
|
+
() => a.activeTool,
|
|
825
|
+
(y) => {
|
|
826
|
+
s.setTool(y), p();
|
|
827
|
+
}
|
|
828
|
+
);
|
|
829
|
+
function u(y) {
|
|
830
|
+
return y.map((_) => ({ id: _.id, geomType: _.geometry.type }));
|
|
831
|
+
}
|
|
832
|
+
function p() {
|
|
833
|
+
if (!l) return;
|
|
834
|
+
const y = l.getCanvas();
|
|
835
|
+
switch (a.activeTool) {
|
|
836
|
+
case "draw-point":
|
|
837
|
+
case "draw-marker":
|
|
838
|
+
case "draw-line":
|
|
839
|
+
case "draw-polygon":
|
|
840
|
+
y.style.cursor = "crosshair";
|
|
841
|
+
break;
|
|
842
|
+
case "eraser":
|
|
843
|
+
y.style.cursor = "pointer";
|
|
844
|
+
break;
|
|
845
|
+
default:
|
|
846
|
+
y.style.cursor = "";
|
|
847
|
+
}
|
|
848
|
+
}
|
|
849
|
+
function t() {
|
|
850
|
+
if (!l) return;
|
|
851
|
+
const y = l.getSource(H);
|
|
852
|
+
y && "setData" in y && y.setData(a.modelValue);
|
|
853
|
+
}
|
|
854
|
+
function n() {
|
|
855
|
+
if (!l) return;
|
|
856
|
+
const y = l.getSource(i1);
|
|
857
|
+
y && "setData" in y && y.setData(s.getTempGeoJson());
|
|
858
|
+
const _ = l.getSource(s1);
|
|
859
|
+
_ && "setData" in _ && _.setData(
|
|
860
|
+
s.getTempLineGeoJson(f ?? void 0)
|
|
861
|
+
);
|
|
862
|
+
const S = l.getSource(c1);
|
|
863
|
+
S && "setData" in S && S.setData(s.getTempVerticesGeoJson());
|
|
864
|
+
}
|
|
865
|
+
R(
|
|
866
|
+
() => a.modelValue,
|
|
867
|
+
async () => {
|
|
868
|
+
if (t(), l && m) {
|
|
869
|
+
const y = u(a.modelValue.features);
|
|
870
|
+
w1(l, C, y, "drawing-temp-fill"), C = y, h = Y(y), await Q(l, a.modelValue.features);
|
|
871
|
+
}
|
|
872
|
+
},
|
|
873
|
+
{ deep: !0 }
|
|
874
|
+
), R(
|
|
875
|
+
() => s.drawingCoords.value,
|
|
876
|
+
() => n(),
|
|
877
|
+
{ deep: !0 }
|
|
878
|
+
);
|
|
879
|
+
function B(y) {
|
|
880
|
+
if (!m) return;
|
|
881
|
+
const _ = a.activeTool;
|
|
882
|
+
if (_ === "draw-point") {
|
|
883
|
+
const S = [y.lngLat.lng, y.lngLat.lat], A = w.createPoint(S);
|
|
884
|
+
o("update:modelValue", {
|
|
885
|
+
...a.modelValue,
|
|
886
|
+
features: [...a.modelValue.features, A]
|
|
887
|
+
}), o("toolDone", A.id);
|
|
888
|
+
return;
|
|
889
|
+
}
|
|
890
|
+
if (_ === "draw-marker") {
|
|
891
|
+
const S = [y.lngLat.lng, y.lngLat.lat], A = w.createMarker(S);
|
|
892
|
+
o("update:modelValue", {
|
|
893
|
+
...a.modelValue,
|
|
894
|
+
features: [...a.modelValue.features, A]
|
|
895
|
+
}), o("toolDone", A.id);
|
|
896
|
+
return;
|
|
897
|
+
}
|
|
898
|
+
if (_ === "draw-polygon" || _ === "draw-line") {
|
|
899
|
+
const S = [y.lngLat.lng, y.lngLat.lat], A = s.drawingCoords.value;
|
|
900
|
+
if (_ === "draw-polygon" && A.length >= 3) {
|
|
901
|
+
const T = A[0];
|
|
902
|
+
if (T && l && s.distancePx(l, S, T) < c()) {
|
|
903
|
+
const $ = s.finishDrawing(), N = $[0];
|
|
904
|
+
if (N) {
|
|
905
|
+
const M1 = [...$, N], n1 = w.createPolygon([M1]);
|
|
906
|
+
o("update:modelValue", {
|
|
907
|
+
...a.modelValue,
|
|
908
|
+
features: [...a.modelValue.features, n1]
|
|
909
|
+
}), o("toolDone", n1.id);
|
|
910
|
+
return;
|
|
911
|
+
}
|
|
912
|
+
}
|
|
913
|
+
}
|
|
914
|
+
if (_ === "draw-line" && A.length >= 2) {
|
|
915
|
+
const T = A[A.length - 1];
|
|
916
|
+
if (T && l && s.distancePx(l, S, T) < c()) {
|
|
917
|
+
const $ = s.finishDrawing(), N = w.createLineString($);
|
|
918
|
+
o("update:modelValue", {
|
|
919
|
+
...a.modelValue,
|
|
920
|
+
features: [...a.modelValue.features, N]
|
|
921
|
+
}), o("toolDone", N.id);
|
|
922
|
+
return;
|
|
923
|
+
}
|
|
924
|
+
}
|
|
925
|
+
s.addDrawingCoord(S);
|
|
926
|
+
return;
|
|
927
|
+
}
|
|
928
|
+
if (_ === "eraser") {
|
|
929
|
+
const A = l?.queryRenderedFeatures(y.point, { layers: h })?.[0];
|
|
930
|
+
if (A) {
|
|
931
|
+
const T = A.id;
|
|
932
|
+
T && o("featureDelete", T);
|
|
933
|
+
}
|
|
934
|
+
return;
|
|
935
|
+
}
|
|
936
|
+
if (_ === "select") {
|
|
937
|
+
const A = l?.queryRenderedFeatures(y.point, { layers: h })?.[0];
|
|
938
|
+
if (A) {
|
|
939
|
+
const T = A.id;
|
|
940
|
+
if (T) {
|
|
941
|
+
const $ = w.getFeature(T);
|
|
942
|
+
$ && o("featureClick", $);
|
|
943
|
+
}
|
|
944
|
+
} else
|
|
945
|
+
o("featureClick", null);
|
|
946
|
+
return;
|
|
947
|
+
}
|
|
948
|
+
}
|
|
949
|
+
function O(y) {
|
|
950
|
+
if (m && (f = [y.lngLat.lng, y.lngLat.lat], s.isDrawing.value && n(), a.activeTool === "select" && !s.isDrawing.value)) {
|
|
951
|
+
const S = l?.queryRenderedFeatures(y.point, { layers: h })?.[0];
|
|
952
|
+
if (S) {
|
|
953
|
+
const A = S.properties?.title, T = S.properties?.description;
|
|
954
|
+
if (A || T) {
|
|
955
|
+
d || (d = new p1({
|
|
956
|
+
closeButton: !1,
|
|
957
|
+
closeOnClick: !1,
|
|
958
|
+
offset: 10,
|
|
959
|
+
className: "tge-popup-container"
|
|
960
|
+
}));
|
|
961
|
+
let $ = "";
|
|
962
|
+
A && ($ += `<h3 class="tge-popup__title">${r1(A)}</h3>`), T && ($ += `<p class="tge-popup__description">${r1(T)}</p>`), d.setLngLat(y.lngLat).setHTML($).addTo(l);
|
|
963
|
+
} else
|
|
964
|
+
d?.remove();
|
|
965
|
+
} else
|
|
966
|
+
d?.remove();
|
|
967
|
+
}
|
|
968
|
+
}
|
|
969
|
+
function j(y) {
|
|
970
|
+
y.preventDefault(), s.isDrawing.value && (s.cancelDrawing(), n());
|
|
971
|
+
}
|
|
972
|
+
function l1(y) {
|
|
973
|
+
y.key === "Escape" && s.isDrawing.value && (s.cancelDrawing(), n());
|
|
974
|
+
}
|
|
975
|
+
function r1(y) {
|
|
976
|
+
const _ = document.createElement("div");
|
|
977
|
+
return _.textContent = y, _.innerHTML;
|
|
978
|
+
}
|
|
979
|
+
return a1(() => {
|
|
980
|
+
if (!g.value) return;
|
|
981
|
+
if (!v) {
|
|
982
|
+
const _ = new g1();
|
|
983
|
+
U.addProtocol("pmtiles", _.tile), v = !0;
|
|
984
|
+
}
|
|
985
|
+
const { getStyle: y } = y1(a.pmtilesUrl);
|
|
986
|
+
l = new U.Map({
|
|
987
|
+
container: g.value,
|
|
988
|
+
style: y(),
|
|
989
|
+
center: a.center ?? m1,
|
|
990
|
+
zoom: a.zoom ?? f1,
|
|
991
|
+
attributionControl: !1
|
|
992
|
+
}), l.addControl(
|
|
993
|
+
new U.AttributionControl({
|
|
994
|
+
compact: !0,
|
|
995
|
+
customAttribution: "OpenStreetMap contributors"
|
|
996
|
+
}),
|
|
997
|
+
"bottom-left"
|
|
998
|
+
), l.addControl(new U.NavigationControl(), "bottom-left"), l.addControl(
|
|
999
|
+
new U.GeolocateControl({
|
|
1000
|
+
positionOptions: { enableHighAccuracy: !1 },
|
|
1001
|
+
trackUserLocation: !1,
|
|
1002
|
+
fitBoundsOptions: { maxZoom: 13 }
|
|
1003
|
+
}),
|
|
1004
|
+
"bottom-left"
|
|
1005
|
+
), l.on("load", async () => {
|
|
1006
|
+
if (!l) return;
|
|
1007
|
+
l.addSource(H, {
|
|
1008
|
+
type: "geojson",
|
|
1009
|
+
data: a.modelValue,
|
|
1010
|
+
promoteId: "id"
|
|
1011
|
+
}), l.addSource(i1, {
|
|
1012
|
+
type: "geojson",
|
|
1013
|
+
data: { type: "FeatureCollection", features: [] }
|
|
1014
|
+
}), l.addSource(s1, {
|
|
1015
|
+
type: "geojson",
|
|
1016
|
+
data: { type: "FeatureCollection", features: [] }
|
|
1017
|
+
}), l.addSource(c1, {
|
|
1018
|
+
type: "geojson",
|
|
1019
|
+
data: { type: "FeatureCollection", features: [] }
|
|
1020
|
+
});
|
|
1021
|
+
for (let S = a.modelValue.features.length - 1; S >= 0; S--) {
|
|
1022
|
+
const A = a.modelValue.features[S];
|
|
1023
|
+
for (const T of W(A.id, A.geometry.type))
|
|
1024
|
+
l.addLayer(T);
|
|
1025
|
+
}
|
|
1026
|
+
const _ = D1();
|
|
1027
|
+
for (const S of _)
|
|
1028
|
+
l.addLayer(S);
|
|
1029
|
+
l.addLayer(B1(null)), C = u(a.modelValue.features), h = Y(C), await Q(l, a.modelValue.features), M.value && l.once("idle", () => {
|
|
1030
|
+
l && b1(l, a.modelValue.features);
|
|
1031
|
+
}), m = !0, p();
|
|
1032
|
+
}), l.on("click", B), l.on("mousemove", O), l.on("contextmenu", j), document.addEventListener("keydown", l1);
|
|
1033
|
+
}), u1(() => {
|
|
1034
|
+
document.removeEventListener("keydown", l1), d?.remove(), l?.remove(), l = null;
|
|
1035
|
+
}), (y, _) => (k(), b("div", {
|
|
1036
|
+
ref_key: "mapContainer",
|
|
1037
|
+
ref: g,
|
|
1038
|
+
class: "tge-map"
|
|
1039
|
+
}, null, 512));
|
|
1040
|
+
}
|
|
1041
|
+
}), Y0 = { class: "tge-toolbar" }, Q0 = ["title", "onClick"], X0 = {
|
|
1042
|
+
class: "tge-toolbar__icon",
|
|
1043
|
+
viewBox: "0 0 24 24",
|
|
1044
|
+
width: "22",
|
|
1045
|
+
height: "22"
|
|
1046
|
+
}, e2 = {
|
|
1047
|
+
key: 0,
|
|
1048
|
+
d: "M5 3l14 8-6.5 1.5L11 19z",
|
|
1049
|
+
fill: "currentColor",
|
|
1050
|
+
stroke: "currentColor",
|
|
1051
|
+
"stroke-width": "1",
|
|
1052
|
+
"stroke-linejoin": "round"
|
|
1053
|
+
}, t2 = {
|
|
1054
|
+
key: 1,
|
|
1055
|
+
cx: "12",
|
|
1056
|
+
cy: "12",
|
|
1057
|
+
r: "6",
|
|
1058
|
+
fill: "currentColor",
|
|
1059
|
+
stroke: "currentColor",
|
|
1060
|
+
"stroke-width": "2"
|
|
1061
|
+
}, a2 = {
|
|
1062
|
+
key: 5,
|
|
1063
|
+
d: "M16.24 3.56l4.2 4.2a2 2 0 010 2.83L11.9 19.14a2 2 0 01-2.83 0L4.56 14.6a2 2 0 010-2.83l8.85-8.85a2 2 0 012.83.64zM4 21h16",
|
|
1064
|
+
fill: "none",
|
|
1065
|
+
stroke: "currentColor",
|
|
1066
|
+
"stroke-width": "2",
|
|
1067
|
+
"stroke-linecap": "round",
|
|
1068
|
+
"stroke-linejoin": "round"
|
|
1069
|
+
}, o2 = /* @__PURE__ */ Z({
|
|
1070
|
+
__name: "EditorToolbar",
|
|
1071
|
+
props: {
|
|
1072
|
+
activeTool: {},
|
|
1073
|
+
l10n: {}
|
|
1074
|
+
},
|
|
1075
|
+
emits: ["update:activeTool"],
|
|
1076
|
+
setup(e, { emit: i }) {
|
|
1077
|
+
const a = e, o = i, g = [
|
|
1078
|
+
{ mode: "select", labelKey: "toolSelect", icon: "cursor" },
|
|
1079
|
+
{ mode: "draw-point", labelKey: "toolPoint", icon: "point" },
|
|
1080
|
+
{ mode: "draw-marker", labelKey: "toolMarker", icon: "marker" },
|
|
1081
|
+
{ mode: "draw-line", labelKey: "toolLine", icon: "line" },
|
|
1082
|
+
{ mode: "draw-polygon", labelKey: "toolPolygon", icon: "polygon" },
|
|
1083
|
+
{ mode: "eraser", labelKey: "toolEraser", icon: "eraser" }
|
|
1084
|
+
];
|
|
1085
|
+
function l(d) {
|
|
1086
|
+
o("update:activeTool", d);
|
|
1087
|
+
}
|
|
1088
|
+
return (d, v) => (k(), b("div", Y0, [
|
|
1089
|
+
(k(), b(z, null, o1(g, (m) => r("button", {
|
|
1090
|
+
key: m.mode,
|
|
1091
|
+
class: q(["tge-toolbar__btn", {
|
|
1092
|
+
"tge-toolbar__btn--active": a.activeTool === m.mode,
|
|
1093
|
+
"tge-toolbar__btn--eraser": m.mode === "eraser"
|
|
1094
|
+
}]),
|
|
1095
|
+
title: a.l10n[m.labelKey],
|
|
1096
|
+
onClick: (C) => l(m.mode)
|
|
1097
|
+
}, [
|
|
1098
|
+
(k(), b("svg", X0, [
|
|
1099
|
+
m.icon === "cursor" ? (k(), b("path", e2)) : m.icon === "point" ? (k(), b("circle", t2)) : m.icon === "marker" ? (k(), b(z, { key: 2 }, [
|
|
1100
|
+
v[0] || (v[0] = r("circle", {
|
|
1101
|
+
cx: "12",
|
|
1102
|
+
cy: "9",
|
|
1103
|
+
r: "1.5",
|
|
1104
|
+
fill: "currentColor"
|
|
1105
|
+
}, null, -1)),
|
|
1106
|
+
v[1] || (v[1] = r("path", {
|
|
1107
|
+
d: "M12 2C7.86 2 4.5 5.2 4.5 9.18c0 1.88.86 4.39 2.55 7.44 1.36 2.45 2.93 4.67 3.75 5.78a1.49 1.49 0 002.4 0c.82-1.1 2.39-3.33 3.75-5.78 1.69-3.05 2.55-5.56 2.55-7.44C19.5 5.2 16.14 2 12 2zm0 10.5a3 3 0 110-6 3 3 0 010 6z",
|
|
1108
|
+
fill: "currentColor"
|
|
1109
|
+
}, null, -1))
|
|
1110
|
+
], 64)) : m.icon === "line" ? (k(), b(z, { key: 3 }, [
|
|
1111
|
+
v[2] || (v[2] = r("path", {
|
|
1112
|
+
d: "M4 20L20 4",
|
|
1113
|
+
fill: "none",
|
|
1114
|
+
stroke: "currentColor",
|
|
1115
|
+
"stroke-width": "2.5",
|
|
1116
|
+
"stroke-linecap": "round"
|
|
1117
|
+
}, null, -1)),
|
|
1118
|
+
v[3] || (v[3] = r("circle", {
|
|
1119
|
+
cx: "4",
|
|
1120
|
+
cy: "20",
|
|
1121
|
+
r: "2.5",
|
|
1122
|
+
fill: "currentColor"
|
|
1123
|
+
}, null, -1)),
|
|
1124
|
+
v[4] || (v[4] = r("circle", {
|
|
1125
|
+
cx: "20",
|
|
1126
|
+
cy: "4",
|
|
1127
|
+
r: "2.5",
|
|
1128
|
+
fill: "currentColor"
|
|
1129
|
+
}, null, -1))
|
|
1130
|
+
], 64)) : m.icon === "polygon" ? (k(), b(z, { key: 4 }, [
|
|
1131
|
+
v[5] || (v[5] = d1('<polygon points="12,3 21,10 18,20 6,20 3,10" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round"></polygon><circle cx="12" cy="3" r="2" fill="currentColor"></circle><circle cx="21" cy="10" r="2" fill="currentColor"></circle><circle cx="18" cy="20" r="2" fill="currentColor"></circle><circle cx="6" cy="20" r="2" fill="currentColor"></circle><circle cx="3" cy="10" r="2" fill="currentColor"></circle>', 6))
|
|
1132
|
+
], 64)) : m.icon === "eraser" ? (k(), b("path", a2)) : D("", !0)
|
|
1133
|
+
]))
|
|
1134
|
+
], 10, Q0)), 64))
|
|
1135
|
+
]));
|
|
1136
|
+
}
|
|
1137
|
+
}), l2 = { class: "tge-layer-item__header" }, r2 = { class: "tge-layer-item__label" }, n2 = {
|
|
1138
|
+
key: 0,
|
|
1139
|
+
class: "tge-layer-item__body"
|
|
1140
|
+
}, i2 = { class: "tge-property-editor__label" }, s2 = ["value"], c2 = { class: "tge-property-editor__label" }, u2 = ["value"], d2 = { class: "tge-property-editor__label" }, p2 = ["value"], g2 = { class: "tge-property-editor__label" }, v2 = ["value"], m2 = { class: "tge-property-editor__label" }, f2 = ["value"], y2 = { class: "tge-property-editor__label" }, h2 = ["value"], w2 = { class: "tge-property-editor__label" }, x2 = ["value"], k2 = { class: "tge-property-editor__label" }, b2 = ["value"], M2 = { class: "tge-property-editor__label" }, C2 = ["value"], L2 = { class: "tge-property-editor__label" }, _2 = ["value"], A2 = { class: "tge-property-editor__label" }, S2 = ["value"], V2 = { class: "tge-property-editor__label" }, T2 = ["value"], P2 = { class: "tge-property-editor__label" }, B2 = ["value"], D2 = { class: "tge-property-editor__label" }, F2 = ["value"], I2 = { class: "tge-property-editor__label" }, z2 = ["value"], $2 = { value: "top" }, H2 = { value: "bottom" }, U2 = { value: "left" }, E2 = { value: "right" }, R2 = { class: "tge-property-editor__label" }, O2 = { class: "tge-icon-picker" }, Z2 = ["src"], N2 = { class: "tge-icon-picker__current" }, q2 = {
|
|
1141
|
+
key: 1,
|
|
1142
|
+
class: "tge-icon-picker__placeholder"
|
|
1143
|
+
}, j2 = {
|
|
1144
|
+
key: 0,
|
|
1145
|
+
class: "tge-icon-picker__dropdown"
|
|
1146
|
+
}, G2 = ["placeholder"], J2 = { class: "tge-icon-picker__grid" }, K2 = ["title", "onClick"], W2 = ["src"], Y2 = {
|
|
1147
|
+
key: 0,
|
|
1148
|
+
class: "tge-icon-picker__empty"
|
|
1149
|
+
}, Q2 = { class: "tge-property-editor__label" }, X2 = ["value"], ee = { class: "tge-property-editor__label" }, te = ["value"], ae = { value: "small" }, oe = { value: "medium" }, le = { value: "large" }, re = { class: "tge-property-editor__label" }, ne = ["value"], ie = { class: "tge-property-editor__label" }, se = ["value"], ce = { value: "top" }, ue = { value: "bottom" }, de = { value: "left" }, pe = { value: "right" }, ge = /* @__PURE__ */ Z({
|
|
1150
|
+
__name: "LayerItem",
|
|
1151
|
+
props: {
|
|
1152
|
+
feature: {},
|
|
1153
|
+
label: {},
|
|
1154
|
+
expanded: { type: Boolean },
|
|
1155
|
+
selected: { type: Boolean },
|
|
1156
|
+
dragging: { type: Boolean },
|
|
1157
|
+
reorderable: { type: Boolean },
|
|
1158
|
+
l10n: {},
|
|
1159
|
+
iconUrls: {}
|
|
1160
|
+
},
|
|
1161
|
+
emits: ["toggle", "update", "select", "delete", "dragstart", "dragend"],
|
|
1162
|
+
setup(e, { emit: i }) {
|
|
1163
|
+
const a = e, o = i, g = I(() => a.feature.geometry.type), l = I(() => g.value === "Polygon"), d = I(
|
|
1164
|
+
() => g.value === "Polygon" || g.value === "LineString"
|
|
1165
|
+
), v = I(
|
|
1166
|
+
() => g.value === "Point" && !a.feature.properties["marker-symbol"]
|
|
1167
|
+
), m = I(
|
|
1168
|
+
() => g.value === "Point" && !!a.feature.properties["marker-symbol"]
|
|
1169
|
+
), C = I(() => {
|
|
1170
|
+
const p = a.feature.properties;
|
|
1171
|
+
return g.value === "Polygon" ? p.fill ?? null : g.value === "LineString" ? p.stroke ?? null : v.value ? p.fill ?? null : p["marker-color"] ?? null;
|
|
1172
|
+
}), h = F(""), M = F(!1), L = I(() => {
|
|
1173
|
+
const p = h.value.toLowerCase();
|
|
1174
|
+
return p ? t1.filter((t) => t.includes(p)) : t1;
|
|
1175
|
+
}), w = I(
|
|
1176
|
+
() => a.feature.properties?.["marker-symbol"] ?? ""
|
|
1177
|
+
);
|
|
1178
|
+
function s(p) {
|
|
1179
|
+
c("marker-symbol", p), M.value = !1, h.value = "";
|
|
1180
|
+
}
|
|
1181
|
+
function c(p, t) {
|
|
1182
|
+
o("update", a.feature.id, { [p]: t });
|
|
1183
|
+
}
|
|
1184
|
+
function f(p, t) {
|
|
1185
|
+
const n = parseFloat(p);
|
|
1186
|
+
return isNaN(n) ? t : n;
|
|
1187
|
+
}
|
|
1188
|
+
function u() {
|
|
1189
|
+
o("select"), o("toggle");
|
|
1190
|
+
}
|
|
1191
|
+
return (p, t) => (k(), b("div", {
|
|
1192
|
+
class: q(["tge-layer-item", {
|
|
1193
|
+
"tge-layer-item--selected": e.selected,
|
|
1194
|
+
"tge-layer-item--dragging": e.dragging
|
|
1195
|
+
}])
|
|
1196
|
+
}, [
|
|
1197
|
+
r("div", l2, [
|
|
1198
|
+
e.reorderable ? (k(), b("div", {
|
|
1199
|
+
key: 0,
|
|
1200
|
+
class: "tge-layer-item__drag-handle",
|
|
1201
|
+
draggable: "true",
|
|
1202
|
+
onDragstart: t[0] || (t[0] = (n) => p.$emit("dragstart", n)),
|
|
1203
|
+
onDragend: t[1] || (t[1] = (n) => p.$emit("dragend", n))
|
|
1204
|
+
}, [...t[24] || (t[24] = [
|
|
1205
|
+
d1('<svg viewBox="0 0 16 16" width="12" height="12" fill="currentColor"><circle cx="5" cy="3" r="1.5"></circle><circle cx="11" cy="3" r="1.5"></circle><circle cx="5" cy="8" r="1.5"></circle><circle cx="11" cy="8" r="1.5"></circle><circle cx="5" cy="13" r="1.5"></circle><circle cx="11" cy="13" r="1.5"></circle></svg>', 1)
|
|
1206
|
+
])], 32)) : D("", !0),
|
|
1207
|
+
r("button", {
|
|
1208
|
+
class: "tge-layer-item__header-main",
|
|
1209
|
+
type: "button",
|
|
1210
|
+
onClick: u
|
|
1211
|
+
}, [
|
|
1212
|
+
g.value === "Polygon" ? (k(), b("svg", {
|
|
1213
|
+
key: 0,
|
|
1214
|
+
class: "tge-layer-item__icon",
|
|
1215
|
+
style: G(C.value ? { color: C.value } : void 0),
|
|
1216
|
+
viewBox: "0 0 24 24",
|
|
1217
|
+
fill: "none"
|
|
1218
|
+
}, [...t[25] || (t[25] = [
|
|
1219
|
+
r("polygon", {
|
|
1220
|
+
points: "12,3 21,10 18,20 6,20 3,10",
|
|
1221
|
+
stroke: "currentColor",
|
|
1222
|
+
"stroke-width": "2",
|
|
1223
|
+
"stroke-linejoin": "round",
|
|
1224
|
+
fill: "currentColor",
|
|
1225
|
+
"fill-opacity": "0.2"
|
|
1226
|
+
}, null, -1)
|
|
1227
|
+
])], 4)) : g.value === "LineString" ? (k(), b("svg", {
|
|
1228
|
+
key: 1,
|
|
1229
|
+
class: "tge-layer-item__icon",
|
|
1230
|
+
style: G(C.value ? { color: C.value } : void 0),
|
|
1231
|
+
viewBox: "0 0 16 16",
|
|
1232
|
+
fill: "none"
|
|
1233
|
+
}, [...t[26] || (t[26] = [
|
|
1234
|
+
r("polyline", {
|
|
1235
|
+
points: "2,13 7,5 10,9 14,3",
|
|
1236
|
+
stroke: "currentColor",
|
|
1237
|
+
"stroke-width": "1.5",
|
|
1238
|
+
fill: "none",
|
|
1239
|
+
"stroke-linecap": "round",
|
|
1240
|
+
"stroke-linejoin": "round"
|
|
1241
|
+
}, null, -1)
|
|
1242
|
+
])], 4)) : v.value ? (k(), b("svg", {
|
|
1243
|
+
key: 2,
|
|
1244
|
+
class: "tge-layer-item__icon",
|
|
1245
|
+
style: G(C.value ? { color: C.value } : void 0),
|
|
1246
|
+
viewBox: "0 0 16 16",
|
|
1247
|
+
fill: "none"
|
|
1248
|
+
}, [...t[27] || (t[27] = [
|
|
1249
|
+
r("circle", {
|
|
1250
|
+
cx: "8",
|
|
1251
|
+
cy: "8",
|
|
1252
|
+
r: "4",
|
|
1253
|
+
stroke: "currentColor",
|
|
1254
|
+
"stroke-width": "1.5",
|
|
1255
|
+
fill: "currentColor",
|
|
1256
|
+
"fill-opacity": "0.2"
|
|
1257
|
+
}, null, -1)
|
|
1258
|
+
])], 4)) : (k(), b("svg", {
|
|
1259
|
+
key: 3,
|
|
1260
|
+
class: "tge-layer-item__icon",
|
|
1261
|
+
style: G(C.value ? { color: C.value } : void 0),
|
|
1262
|
+
viewBox: "0 0 24 24",
|
|
1263
|
+
fill: "none"
|
|
1264
|
+
}, [...t[28] || (t[28] = [
|
|
1265
|
+
r("circle", {
|
|
1266
|
+
cx: "12",
|
|
1267
|
+
cy: "9",
|
|
1268
|
+
r: "1.5",
|
|
1269
|
+
fill: "currentColor"
|
|
1270
|
+
}, null, -1),
|
|
1271
|
+
r("path", {
|
|
1272
|
+
d: "M12 2C7.86 2 4.5 5.2 4.5 9.18c0 1.88.86 4.39 2.55 7.44 1.36 2.45 2.93 4.67 3.75 5.78a1.49 1.49 0 002.4 0c.82-1.1 2.39-3.33 3.75-5.78 1.69-3.05 2.55-5.56 2.55-7.44C19.5 5.2 16.14 2 12 2zm0 10.5a3 3 0 110-6 3 3 0 010 6z",
|
|
1273
|
+
fill: "currentColor"
|
|
1274
|
+
}, null, -1)
|
|
1275
|
+
])], 4)),
|
|
1276
|
+
r("span", r2, x(e.label), 1),
|
|
1277
|
+
(k(), b("svg", {
|
|
1278
|
+
class: q(["tge-layer-item__chevron", { "tge-layer-item__chevron--open": e.expanded }]),
|
|
1279
|
+
viewBox: "0 0 16 16",
|
|
1280
|
+
fill: "none",
|
|
1281
|
+
width: "14",
|
|
1282
|
+
height: "14"
|
|
1283
|
+
}, [...t[29] || (t[29] = [
|
|
1284
|
+
r("polyline", {
|
|
1285
|
+
points: "5,3 11,8 5,13",
|
|
1286
|
+
stroke: "currentColor",
|
|
1287
|
+
"stroke-width": "1.5",
|
|
1288
|
+
fill: "none",
|
|
1289
|
+
"stroke-linecap": "round",
|
|
1290
|
+
"stroke-linejoin": "round"
|
|
1291
|
+
}, null, -1)
|
|
1292
|
+
])], 2))
|
|
1293
|
+
])
|
|
1294
|
+
]),
|
|
1295
|
+
e.expanded ? (k(), b("div", n2, [
|
|
1296
|
+
r("label", i2, [
|
|
1297
|
+
V(x(e.l10n.propTitle) + " ", 1),
|
|
1298
|
+
r("input", {
|
|
1299
|
+
type: "text",
|
|
1300
|
+
class: "tge-property-editor__input text-sm",
|
|
1301
|
+
value: e.feature.properties.title ?? "",
|
|
1302
|
+
onInput: t[2] || (t[2] = (n) => c("title", n.target.value))
|
|
1303
|
+
}, null, 40, s2)
|
|
1304
|
+
]),
|
|
1305
|
+
r("label", c2, [
|
|
1306
|
+
V(x(e.l10n.propDescription) + " ", 1),
|
|
1307
|
+
r("textarea", {
|
|
1308
|
+
class: "tge-property-editor__textarea text-sm",
|
|
1309
|
+
rows: "3",
|
|
1310
|
+
value: e.feature.properties.description ?? "",
|
|
1311
|
+
onInput: t[3] || (t[3] = (n) => c("description", n.target.value))
|
|
1312
|
+
}, null, 40, u2)
|
|
1313
|
+
]),
|
|
1314
|
+
l.value ? (k(), b(z, { key: 0 }, [
|
|
1315
|
+
r("label", d2, [
|
|
1316
|
+
V(x(e.l10n.propFillColor) + " ", 1),
|
|
1317
|
+
r("input", {
|
|
1318
|
+
type: "color",
|
|
1319
|
+
class: "tge-property-editor__color",
|
|
1320
|
+
value: e.feature.properties.fill ?? "#555555",
|
|
1321
|
+
onInput: t[4] || (t[4] = (n) => c("fill", n.target.value))
|
|
1322
|
+
}, null, 40, p2)
|
|
1323
|
+
]),
|
|
1324
|
+
r("label", g2, [
|
|
1325
|
+
V(x(e.l10n.propFillOpacity) + " ", 1),
|
|
1326
|
+
r("input", {
|
|
1327
|
+
type: "range",
|
|
1328
|
+
min: "0",
|
|
1329
|
+
max: "1",
|
|
1330
|
+
step: "0.05",
|
|
1331
|
+
class: "tge-property-editor__range",
|
|
1332
|
+
value: e.feature.properties["fill-opacity"] ?? 0.6,
|
|
1333
|
+
onInput: t[5] || (t[5] = (n) => c(
|
|
1334
|
+
"fill-opacity",
|
|
1335
|
+
f(n.target.value, 0.6)
|
|
1336
|
+
))
|
|
1337
|
+
}, null, 40, v2)
|
|
1338
|
+
])
|
|
1339
|
+
], 64)) : D("", !0),
|
|
1340
|
+
d.value ? (k(), b(z, { key: 1 }, [
|
|
1341
|
+
r("label", m2, [
|
|
1342
|
+
V(x(e.l10n.propStrokeColor) + " ", 1),
|
|
1343
|
+
r("input", {
|
|
1344
|
+
type: "color",
|
|
1345
|
+
class: "tge-property-editor__color",
|
|
1346
|
+
value: e.feature.properties.stroke ?? "#555555",
|
|
1347
|
+
onInput: t[6] || (t[6] = (n) => c("stroke", n.target.value))
|
|
1348
|
+
}, null, 40, f2)
|
|
1349
|
+
]),
|
|
1350
|
+
r("label", y2, [
|
|
1351
|
+
V(x(e.l10n.propStrokeOpacity) + " ", 1),
|
|
1352
|
+
r("input", {
|
|
1353
|
+
type: "range",
|
|
1354
|
+
min: "0",
|
|
1355
|
+
max: "1",
|
|
1356
|
+
step: "0.05",
|
|
1357
|
+
class: "tge-property-editor__range",
|
|
1358
|
+
value: e.feature.properties["stroke-opacity"] ?? 1,
|
|
1359
|
+
onInput: t[7] || (t[7] = (n) => c(
|
|
1360
|
+
"stroke-opacity",
|
|
1361
|
+
f(n.target.value, 1)
|
|
1362
|
+
))
|
|
1363
|
+
}, null, 40, h2)
|
|
1364
|
+
]),
|
|
1365
|
+
r("label", w2, [
|
|
1366
|
+
V(x(e.l10n.propStrokeWidth) + " ", 1),
|
|
1367
|
+
r("input", {
|
|
1368
|
+
type: "number",
|
|
1369
|
+
min: "0",
|
|
1370
|
+
max: "20",
|
|
1371
|
+
class: "tge-property-editor__input tge-property-editor__input--sm text-sm",
|
|
1372
|
+
value: e.feature.properties["stroke-width"] ?? 2,
|
|
1373
|
+
onInput: t[8] || (t[8] = (n) => c(
|
|
1374
|
+
"stroke-width",
|
|
1375
|
+
f(n.target.value, 2)
|
|
1376
|
+
))
|
|
1377
|
+
}, null, 40, x2)
|
|
1378
|
+
])
|
|
1379
|
+
], 64)) : D("", !0),
|
|
1380
|
+
v.value ? (k(), b(z, { key: 2 }, [
|
|
1381
|
+
r("label", k2, [
|
|
1382
|
+
V(x(e.l10n.propPointColor) + " ", 1),
|
|
1383
|
+
r("input", {
|
|
1384
|
+
type: "color",
|
|
1385
|
+
class: "tge-property-editor__color",
|
|
1386
|
+
value: e.feature.properties.fill ?? "#555555",
|
|
1387
|
+
onInput: t[9] || (t[9] = (n) => c("fill", n.target.value))
|
|
1388
|
+
}, null, 40, b2)
|
|
1389
|
+
]),
|
|
1390
|
+
r("label", M2, [
|
|
1391
|
+
V(x(e.l10n.propFillOpacity) + " ", 1),
|
|
1392
|
+
r("input", {
|
|
1393
|
+
type: "range",
|
|
1394
|
+
min: "0",
|
|
1395
|
+
max: "1",
|
|
1396
|
+
step: "0.05",
|
|
1397
|
+
class: "tge-property-editor__range",
|
|
1398
|
+
value: e.feature.properties["fill-opacity"] ?? 0.6,
|
|
1399
|
+
onInput: t[10] || (t[10] = (n) => c(
|
|
1400
|
+
"fill-opacity",
|
|
1401
|
+
f(n.target.value, 0.6)
|
|
1402
|
+
))
|
|
1403
|
+
}, null, 40, C2)
|
|
1404
|
+
]),
|
|
1405
|
+
r("label", L2, [
|
|
1406
|
+
V(x(e.l10n.propStrokeColor) + " ", 1),
|
|
1407
|
+
r("input", {
|
|
1408
|
+
type: "color",
|
|
1409
|
+
class: "tge-property-editor__color",
|
|
1410
|
+
value: e.feature.properties.stroke ?? "#ffffff",
|
|
1411
|
+
onInput: t[11] || (t[11] = (n) => c("stroke", n.target.value))
|
|
1412
|
+
}, null, 40, _2)
|
|
1413
|
+
]),
|
|
1414
|
+
r("label", A2, [
|
|
1415
|
+
V(x(e.l10n.propStrokeOpacity) + " ", 1),
|
|
1416
|
+
r("input", {
|
|
1417
|
+
type: "range",
|
|
1418
|
+
min: "0",
|
|
1419
|
+
max: "1",
|
|
1420
|
+
step: "0.05",
|
|
1421
|
+
class: "tge-property-editor__range",
|
|
1422
|
+
value: e.feature.properties["stroke-opacity"] ?? 1,
|
|
1423
|
+
onInput: t[12] || (t[12] = (n) => c(
|
|
1424
|
+
"stroke-opacity",
|
|
1425
|
+
f(n.target.value, 1)
|
|
1426
|
+
))
|
|
1427
|
+
}, null, 40, S2)
|
|
1428
|
+
]),
|
|
1429
|
+
r("label", V2, [
|
|
1430
|
+
V(x(e.l10n.propStrokeWidth) + " ", 1),
|
|
1431
|
+
r("input", {
|
|
1432
|
+
type: "number",
|
|
1433
|
+
min: "0",
|
|
1434
|
+
max: "20",
|
|
1435
|
+
class: "tge-property-editor__input tge-property-editor__input--sm text-sm",
|
|
1436
|
+
value: e.feature.properties["stroke-width"] ?? 2,
|
|
1437
|
+
onInput: t[13] || (t[13] = (n) => c(
|
|
1438
|
+
"stroke-width",
|
|
1439
|
+
f(n.target.value, 2)
|
|
1440
|
+
))
|
|
1441
|
+
}, null, 40, T2)
|
|
1442
|
+
]),
|
|
1443
|
+
r("label", P2, [
|
|
1444
|
+
V(x(e.l10n.propCircleRadius) + " ", 1),
|
|
1445
|
+
r("input", {
|
|
1446
|
+
type: "number",
|
|
1447
|
+
min: "1",
|
|
1448
|
+
max: "50",
|
|
1449
|
+
class: "tge-property-editor__input tge-property-editor__input--sm text-sm",
|
|
1450
|
+
value: e.feature.properties["circle-radius"] ?? 8,
|
|
1451
|
+
onInput: t[14] || (t[14] = (n) => c(
|
|
1452
|
+
"circle-radius",
|
|
1453
|
+
f(n.target.value, 8)
|
|
1454
|
+
))
|
|
1455
|
+
}, null, 40, B2)
|
|
1456
|
+
]),
|
|
1457
|
+
r("label", D2, [
|
|
1458
|
+
V(x(e.l10n.propLabel) + " ", 1),
|
|
1459
|
+
r("input", {
|
|
1460
|
+
type: "text",
|
|
1461
|
+
class: "tge-property-editor__input text-sm",
|
|
1462
|
+
value: e.feature.properties["marker-label"] ?? "",
|
|
1463
|
+
onInput: t[15] || (t[15] = (n) => c("marker-label", n.target.value))
|
|
1464
|
+
}, null, 40, F2)
|
|
1465
|
+
]),
|
|
1466
|
+
r("label", I2, [
|
|
1467
|
+
V(x(e.l10n.propLabelPosition) + " ", 1),
|
|
1468
|
+
r("select", {
|
|
1469
|
+
class: "tge-property-editor__select text-sm",
|
|
1470
|
+
value: e.feature.properties["marker-label-position"] ?? "top",
|
|
1471
|
+
onChange: t[16] || (t[16] = (n) => c(
|
|
1472
|
+
"marker-label-position",
|
|
1473
|
+
n.target.value
|
|
1474
|
+
))
|
|
1475
|
+
}, [
|
|
1476
|
+
r("option", $2, x(e.l10n.propPositionTop), 1),
|
|
1477
|
+
r("option", H2, x(e.l10n.propPositionBottom), 1),
|
|
1478
|
+
r("option", U2, x(e.l10n.propPositionLeft), 1),
|
|
1479
|
+
r("option", E2, x(e.l10n.propPositionRight), 1)
|
|
1480
|
+
], 40, z2)
|
|
1481
|
+
])
|
|
1482
|
+
], 64)) : D("", !0),
|
|
1483
|
+
m.value ? (k(), b(z, { key: 3 }, [
|
|
1484
|
+
r("div", R2, [
|
|
1485
|
+
V(x(e.l10n.propIcon) + " ", 1),
|
|
1486
|
+
r("div", O2, [
|
|
1487
|
+
r("button", {
|
|
1488
|
+
class: "tge-icon-picker__trigger",
|
|
1489
|
+
type: "button",
|
|
1490
|
+
onClick: t[17] || (t[17] = (n) => M.value = !M.value)
|
|
1491
|
+
}, [
|
|
1492
|
+
w.value ? (k(), b(z, { key: 0 }, [
|
|
1493
|
+
e.iconUrls.get(w.value) ? (k(), b("img", {
|
|
1494
|
+
key: 0,
|
|
1495
|
+
src: e.iconUrls.get(w.value),
|
|
1496
|
+
class: "tge-icon-picker__preview",
|
|
1497
|
+
alt: ""
|
|
1498
|
+
}, null, 8, Z2)) : D("", !0),
|
|
1499
|
+
r("span", N2, x(w.value), 1)
|
|
1500
|
+
], 64)) : (k(), b("span", q2, x(e.l10n.propIconNone), 1))
|
|
1501
|
+
])
|
|
1502
|
+
]),
|
|
1503
|
+
M.value ? (k(), b("div", j2, [
|
|
1504
|
+
C1(r("input", {
|
|
1505
|
+
type: "text",
|
|
1506
|
+
class: "tge-icon-picker__search text-sm",
|
|
1507
|
+
"onUpdate:modelValue": t[18] || (t[18] = (n) => h.value = n),
|
|
1508
|
+
placeholder: e.l10n.propIconSearch
|
|
1509
|
+
}, null, 8, G2), [
|
|
1510
|
+
[L1, h.value]
|
|
1511
|
+
]),
|
|
1512
|
+
r("div", J2, [
|
|
1513
|
+
(k(!0), b(z, null, o1(L.value, (n) => (k(), b("button", {
|
|
1514
|
+
key: n,
|
|
1515
|
+
class: q(["tge-icon-picker__item", {
|
|
1516
|
+
"tge-icon-picker__item--active": n === w.value
|
|
1517
|
+
}]),
|
|
1518
|
+
type: "button",
|
|
1519
|
+
title: n,
|
|
1520
|
+
onClick: (B) => s(n)
|
|
1521
|
+
}, [
|
|
1522
|
+
e.iconUrls.get(n) ? (k(), b("img", {
|
|
1523
|
+
key: 0,
|
|
1524
|
+
src: e.iconUrls.get(n),
|
|
1525
|
+
class: "tge-icon-picker__item-icon",
|
|
1526
|
+
alt: ""
|
|
1527
|
+
}, null, 8, W2)) : D("", !0),
|
|
1528
|
+
r("span", null, x(n), 1)
|
|
1529
|
+
], 10, K2))), 128))
|
|
1530
|
+
]),
|
|
1531
|
+
L.value.length === 0 ? (k(), b("div", Y2, x(e.l10n.propIconNoResults), 1)) : D("", !0)
|
|
1532
|
+
])) : D("", !0)
|
|
1533
|
+
]),
|
|
1534
|
+
r("label", Q2, [
|
|
1535
|
+
V(x(e.l10n.propMarkerColor) + " ", 1),
|
|
1536
|
+
r("input", {
|
|
1537
|
+
type: "color",
|
|
1538
|
+
class: "tge-property-editor__color",
|
|
1539
|
+
value: e.feature.properties["marker-color"] ?? "#7e7e7e",
|
|
1540
|
+
onInput: t[19] || (t[19] = (n) => c("marker-color", n.target.value))
|
|
1541
|
+
}, null, 40, X2)
|
|
1542
|
+
]),
|
|
1543
|
+
r("label", ee, [
|
|
1544
|
+
V(x(e.l10n.propMarkerSize) + " ", 1),
|
|
1545
|
+
r("select", {
|
|
1546
|
+
class: "tge-property-editor__select text-sm",
|
|
1547
|
+
value: e.feature.properties["marker-size"] ?? "medium",
|
|
1548
|
+
onChange: t[20] || (t[20] = (n) => c(
|
|
1549
|
+
"marker-size",
|
|
1550
|
+
n.target.value
|
|
1551
|
+
))
|
|
1552
|
+
}, [
|
|
1553
|
+
r("option", ae, x(e.l10n.propSizeSmall), 1),
|
|
1554
|
+
r("option", oe, x(e.l10n.propSizeMedium), 1),
|
|
1555
|
+
r("option", le, x(e.l10n.propSizeLarge), 1)
|
|
1556
|
+
], 40, te)
|
|
1557
|
+
]),
|
|
1558
|
+
r("label", re, [
|
|
1559
|
+
V(x(e.l10n.propLabel) + " ", 1),
|
|
1560
|
+
r("input", {
|
|
1561
|
+
type: "text",
|
|
1562
|
+
class: "tge-property-editor__input text-sm",
|
|
1563
|
+
value: e.feature.properties["marker-label"] ?? "",
|
|
1564
|
+
onInput: t[21] || (t[21] = (n) => c("marker-label", n.target.value))
|
|
1565
|
+
}, null, 40, ne)
|
|
1566
|
+
]),
|
|
1567
|
+
r("label", ie, [
|
|
1568
|
+
V(x(e.l10n.propLabelPosition) + " ", 1),
|
|
1569
|
+
r("select", {
|
|
1570
|
+
class: "tge-property-editor__select text-sm",
|
|
1571
|
+
value: e.feature.properties["marker-label-position"] ?? "top",
|
|
1572
|
+
onChange: t[22] || (t[22] = (n) => c(
|
|
1573
|
+
"marker-label-position",
|
|
1574
|
+
n.target.value
|
|
1575
|
+
))
|
|
1576
|
+
}, [
|
|
1577
|
+
r("option", ce, x(e.l10n.propPositionTop), 1),
|
|
1578
|
+
r("option", ue, x(e.l10n.propPositionBottom), 1),
|
|
1579
|
+
r("option", de, x(e.l10n.propPositionLeft), 1),
|
|
1580
|
+
r("option", pe, x(e.l10n.propPositionRight), 1)
|
|
1581
|
+
], 40, se)
|
|
1582
|
+
])
|
|
1583
|
+
], 64)) : D("", !0),
|
|
1584
|
+
r("button", {
|
|
1585
|
+
class: "tge-layer-item__delete",
|
|
1586
|
+
type: "button",
|
|
1587
|
+
onClick: t[23] || (t[23] = (n) => p.$emit("delete", e.feature.id))
|
|
1588
|
+
}, x(e.l10n.layerDelete), 1)
|
|
1589
|
+
])) : D("", !0)
|
|
1590
|
+
], 2));
|
|
1591
|
+
}
|
|
1592
|
+
}), ve = { class: "tge-layer-panel" }, me = { class: "tge-layer-panel__header" }, fe = {
|
|
1593
|
+
key: 0,
|
|
1594
|
+
class: "tge-layer-panel__drop-indicator"
|
|
1595
|
+
}, ye = {
|
|
1596
|
+
key: 0,
|
|
1597
|
+
class: "tge-layer-panel__drop-indicator"
|
|
1598
|
+
}, he = {
|
|
1599
|
+
key: 0,
|
|
1600
|
+
class: "tge-layer-panel__empty"
|
|
1601
|
+
}, we = /* @__PURE__ */ Z({
|
|
1602
|
+
__name: "LayerPanel",
|
|
1603
|
+
props: {
|
|
1604
|
+
features: {},
|
|
1605
|
+
selectedFeatureId: {},
|
|
1606
|
+
l10n: {},
|
|
1607
|
+
iconUrls: {}
|
|
1608
|
+
},
|
|
1609
|
+
emits: ["update", "select", "delete", "reorder", "close"],
|
|
1610
|
+
setup(e, { emit: i }) {
|
|
1611
|
+
const a = e, o = i, g = F(/* @__PURE__ */ new Set()), l = F(null), d = F(null), v = I(() => {
|
|
1612
|
+
const u = { Point: 0, Marker: 0, LineString: 0, Polygon: 0 }, p = /* @__PURE__ */ new Map();
|
|
1613
|
+
for (const t of a.features) {
|
|
1614
|
+
const n = t.geometry.type;
|
|
1615
|
+
if (t.properties.title)
|
|
1616
|
+
n === "Point" ? !!t.properties["marker-symbol"] ? u.Marker++ : u.Point++ : u[n]++, p.set(t.id, t.properties.title);
|
|
1617
|
+
else if (n === "Point")
|
|
1618
|
+
!!t.properties["marker-symbol"] ? (u.Marker++, p.set(t.id, `${a.l10n.layerMarker} #${u.Marker}`)) : (u.Point++, p.set(t.id, `${a.l10n.layerPoint} #${u.Point}`));
|
|
1619
|
+
else {
|
|
1620
|
+
u[n]++;
|
|
1621
|
+
const B = n === "LineString" ? a.l10n.layerLine : a.l10n.layerPolygon;
|
|
1622
|
+
p.set(t.id, `${B} #${u[n]}`);
|
|
1623
|
+
}
|
|
1624
|
+
}
|
|
1625
|
+
return p;
|
|
1626
|
+
});
|
|
1627
|
+
R(
|
|
1628
|
+
() => a.selectedFeatureId,
|
|
1629
|
+
async (u) => {
|
|
1630
|
+
if (!u) return;
|
|
1631
|
+
g.value = /* @__PURE__ */ new Set([...g.value, u]), await _1(), document.querySelector(`[data-feature-id="${u}"]`)?.scrollIntoView({ behavior: "smooth", block: "nearest" });
|
|
1632
|
+
}
|
|
1633
|
+
), R(
|
|
1634
|
+
() => a.features,
|
|
1635
|
+
(u) => {
|
|
1636
|
+
const p = new Set(u.map((n) => n.id)), t = new Set([...g.value].filter((n) => p.has(n)));
|
|
1637
|
+
t.size !== g.value.size && (g.value = t);
|
|
1638
|
+
}
|
|
1639
|
+
);
|
|
1640
|
+
function m(u) {
|
|
1641
|
+
const p = new Set(g.value);
|
|
1642
|
+
p.has(u) ? p.delete(u) : p.add(u), g.value = p;
|
|
1643
|
+
}
|
|
1644
|
+
function C(u) {
|
|
1645
|
+
o("select", u);
|
|
1646
|
+
}
|
|
1647
|
+
function h(u, p) {
|
|
1648
|
+
o("update", u, p);
|
|
1649
|
+
}
|
|
1650
|
+
function M(u, p) {
|
|
1651
|
+
l.value = u, p.dataTransfer && (p.dataTransfer.effectAllowed = "move", p.dataTransfer.setData("text/plain", u));
|
|
1652
|
+
}
|
|
1653
|
+
function L() {
|
|
1654
|
+
l.value = null, d.value = null;
|
|
1655
|
+
}
|
|
1656
|
+
function w(u) {
|
|
1657
|
+
if (u.preventDefault(), !l.value) return;
|
|
1658
|
+
const p = u.currentTarget, t = Array.from(p.querySelectorAll("[data-feature-id]")), n = u.clientY;
|
|
1659
|
+
let B = t.length;
|
|
1660
|
+
for (let O = 0; O < t.length; O++) {
|
|
1661
|
+
const j = t[O].getBoundingClientRect();
|
|
1662
|
+
if (n < j.top + j.height / 2) {
|
|
1663
|
+
B = O;
|
|
1664
|
+
break;
|
|
1665
|
+
}
|
|
1666
|
+
}
|
|
1667
|
+
d.value = B;
|
|
1668
|
+
}
|
|
1669
|
+
function s(u) {
|
|
1670
|
+
u.currentTarget.contains(u.relatedTarget) || (d.value = null);
|
|
1671
|
+
}
|
|
1672
|
+
function c(u) {
|
|
1673
|
+
u.preventDefault(), !(!l.value || d.value === null) && (o("reorder", l.value, d.value), l.value = null, d.value = null);
|
|
1674
|
+
}
|
|
1675
|
+
function f() {
|
|
1676
|
+
g.value.size !== 0 && (g.value = /* @__PURE__ */ new Set());
|
|
1677
|
+
}
|
|
1678
|
+
return (u, p) => (k(), b("div", ve, [
|
|
1679
|
+
r("div", me, [
|
|
1680
|
+
r("button", {
|
|
1681
|
+
class: "tge-layer-panel__title",
|
|
1682
|
+
type: "button",
|
|
1683
|
+
onClick: f
|
|
1684
|
+
}, x(e.l10n.layerPanelTitle), 1),
|
|
1685
|
+
r("button", {
|
|
1686
|
+
class: "tge-layer-panel__close",
|
|
1687
|
+
type: "button",
|
|
1688
|
+
onClick: p[0] || (p[0] = (t) => u.$emit("close"))
|
|
1689
|
+
}, [...p[2] || (p[2] = [
|
|
1690
|
+
r("svg", {
|
|
1691
|
+
viewBox: "0 0 24 24",
|
|
1692
|
+
width: "18",
|
|
1693
|
+
height: "18",
|
|
1694
|
+
fill: "none"
|
|
1695
|
+
}, [
|
|
1696
|
+
r("path", {
|
|
1697
|
+
d: "M18 6L6 18M6 6l12 12",
|
|
1698
|
+
stroke: "currentColor",
|
|
1699
|
+
"stroke-width": "2",
|
|
1700
|
+
"stroke-linecap": "round"
|
|
1701
|
+
})
|
|
1702
|
+
], -1)
|
|
1703
|
+
])])
|
|
1704
|
+
]),
|
|
1705
|
+
r("div", {
|
|
1706
|
+
class: "tge-layer-panel__list",
|
|
1707
|
+
onDragover: w,
|
|
1708
|
+
onDragleave: s,
|
|
1709
|
+
onDrop: c
|
|
1710
|
+
}, [
|
|
1711
|
+
(k(!0), b(z, null, o1(e.features, (t, n) => (k(), b(z, {
|
|
1712
|
+
key: t.id
|
|
1713
|
+
}, [
|
|
1714
|
+
d.value === n ? (k(), b("div", fe)) : D("", !0),
|
|
1715
|
+
K(ge, {
|
|
1716
|
+
"data-feature-id": t.id,
|
|
1717
|
+
feature: t,
|
|
1718
|
+
label: v.value.get(t.id) ?? "",
|
|
1719
|
+
expanded: g.value.has(t.id),
|
|
1720
|
+
selected: t.id === e.selectedFeatureId,
|
|
1721
|
+
dragging: l.value === t.id,
|
|
1722
|
+
reorderable: e.features.length > 1,
|
|
1723
|
+
l10n: e.l10n,
|
|
1724
|
+
iconUrls: e.iconUrls,
|
|
1725
|
+
onToggle: (B) => m(t.id),
|
|
1726
|
+
onUpdate: h,
|
|
1727
|
+
onSelect: (B) => C(t.id),
|
|
1728
|
+
onDelete: p[1] || (p[1] = (B) => u.$emit("delete", B)),
|
|
1729
|
+
onDragstart: (B) => M(t.id, B),
|
|
1730
|
+
onDragend: L
|
|
1731
|
+
}, null, 8, ["data-feature-id", "feature", "label", "expanded", "selected", "dragging", "reorderable", "l10n", "iconUrls", "onToggle", "onSelect", "onDragstart"])
|
|
1732
|
+
], 64))), 128)),
|
|
1733
|
+
d.value === e.features.length ? (k(), b("div", ye)) : D("", !0)
|
|
1734
|
+
], 32),
|
|
1735
|
+
e.features.length === 0 ? (k(), b("p", he, x(e.l10n.layerPanelEmpty), 1)) : D("", !0)
|
|
1736
|
+
]));
|
|
1737
|
+
}
|
|
1738
|
+
}), xe = { class: "tge-editor" }, Le = /* @__PURE__ */ Z({
|
|
1739
|
+
__name: "GeoJsonEditor",
|
|
1740
|
+
props: /* @__PURE__ */ S1({
|
|
1741
|
+
pmtilesUrl: {},
|
|
1742
|
+
pointRadius: { default: v1 },
|
|
1743
|
+
center: {},
|
|
1744
|
+
zoom: {},
|
|
1745
|
+
l10n: { default: () => ({}) }
|
|
1746
|
+
}, {
|
|
1747
|
+
modelValue: {
|
|
1748
|
+
default: () => ({ type: "FeatureCollection", features: [] })
|
|
1749
|
+
},
|
|
1750
|
+
modelModifiers: {}
|
|
1751
|
+
}),
|
|
1752
|
+
emits: ["update:modelValue"],
|
|
1753
|
+
setup(e) {
|
|
1754
|
+
const i = e, a = I(() => ({ ...T1, ...i.l10n })), o = A1(e, "modelValue"), g = F("select"), l = F(null), d = F(/* @__PURE__ */ new Map());
|
|
1755
|
+
a1(async () => {
|
|
1756
|
+
const s = await Promise.all(
|
|
1757
|
+
t1.map(async (f) => [f, await R0(f)])
|
|
1758
|
+
), c = /* @__PURE__ */ new Map();
|
|
1759
|
+
for (const [f, u] of s)
|
|
1760
|
+
u && c.set(f, u);
|
|
1761
|
+
d.value = c;
|
|
1762
|
+
});
|
|
1763
|
+
function v(s) {
|
|
1764
|
+
l.value = s?.id ?? null;
|
|
1765
|
+
}
|
|
1766
|
+
function m(s) {
|
|
1767
|
+
o.value = {
|
|
1768
|
+
...o.value,
|
|
1769
|
+
features: o.value.features.filter((c) => c.id !== s)
|
|
1770
|
+
}, l.value === s && (l.value = null);
|
|
1771
|
+
}
|
|
1772
|
+
function C(s, c) {
|
|
1773
|
+
o.value = {
|
|
1774
|
+
...o.value,
|
|
1775
|
+
features: o.value.features.map(
|
|
1776
|
+
(f) => f.id === s ? { ...f, properties: { ...f.properties, ...c } } : f
|
|
1777
|
+
)
|
|
1778
|
+
};
|
|
1779
|
+
}
|
|
1780
|
+
function h(s) {
|
|
1781
|
+
g.value = s, s !== "select" && (l.value = null);
|
|
1782
|
+
}
|
|
1783
|
+
function M(s) {
|
|
1784
|
+
g.value = "select", l.value = s;
|
|
1785
|
+
}
|
|
1786
|
+
function L(s) {
|
|
1787
|
+
l.value = s;
|
|
1788
|
+
}
|
|
1789
|
+
function w(s, c) {
|
|
1790
|
+
const f = [...o.value.features], u = f.findIndex((n) => n.id === s);
|
|
1791
|
+
if (u === -1) return;
|
|
1792
|
+
const [p] = f.splice(u, 1), t = u < c ? c - 1 : c;
|
|
1793
|
+
f.splice(t, 0, p), o.value = { ...o.value, features: f };
|
|
1794
|
+
}
|
|
1795
|
+
return (s, c) => (k(), b("div", xe, [
|
|
1796
|
+
K(o2, {
|
|
1797
|
+
activeTool: g.value,
|
|
1798
|
+
l10n: a.value,
|
|
1799
|
+
"onUpdate:activeTool": h
|
|
1800
|
+
}, null, 8, ["activeTool", "l10n"]),
|
|
1801
|
+
K(W0, {
|
|
1802
|
+
modelValue: o.value,
|
|
1803
|
+
activeTool: g.value,
|
|
1804
|
+
pmtilesUrl: i.pmtilesUrl,
|
|
1805
|
+
pointRadius: i.pointRadius,
|
|
1806
|
+
center: i.center,
|
|
1807
|
+
zoom: i.zoom,
|
|
1808
|
+
"onUpdate:modelValue": c[0] || (c[0] = (f) => o.value = f),
|
|
1809
|
+
onFeatureClick: v,
|
|
1810
|
+
onFeatureDelete: m,
|
|
1811
|
+
onToolDone: M
|
|
1812
|
+
}, null, 8, ["modelValue", "activeTool", "pmtilesUrl", "pointRadius", "center", "zoom"]),
|
|
1813
|
+
l.value ? (k(), b("div", {
|
|
1814
|
+
key: 0,
|
|
1815
|
+
class: "tge-editor__backdrop",
|
|
1816
|
+
onClick: c[1] || (c[1] = (f) => l.value = null)
|
|
1817
|
+
})) : D("", !0),
|
|
1818
|
+
K(we, {
|
|
1819
|
+
class: q({ "tge-layer-panel--open": l.value }),
|
|
1820
|
+
features: o.value.features,
|
|
1821
|
+
selectedFeatureId: l.value,
|
|
1822
|
+
l10n: a.value,
|
|
1823
|
+
iconUrls: d.value,
|
|
1824
|
+
onUpdate: C,
|
|
1825
|
+
onSelect: L,
|
|
1826
|
+
onDelete: m,
|
|
1827
|
+
onReorder: w,
|
|
1828
|
+
onClose: c[2] || (c[2] = (f) => l.value = null)
|
|
1829
|
+
}, null, 8, ["class", "features", "selectedFeatureId", "l10n", "iconUrls"])
|
|
1830
|
+
]));
|
|
1831
|
+
}
|
|
1832
|
+
}), ke = { class: "tge-viewer" }, _e = /* @__PURE__ */ Z({
|
|
1833
|
+
__name: "GeoJsonViewer",
|
|
1834
|
+
props: {
|
|
1835
|
+
modelValue: { default: () => ({ type: "FeatureCollection", features: [] }) },
|
|
1836
|
+
pmtilesUrl: {},
|
|
1837
|
+
center: {},
|
|
1838
|
+
zoom: {}
|
|
1839
|
+
},
|
|
1840
|
+
setup(e) {
|
|
1841
|
+
const i = e, a = F(null);
|
|
1842
|
+
let o = null, g = null, l = !1, d = !1, v = [], m = [];
|
|
1843
|
+
const C = I(() => k1(i.center, i.zoom));
|
|
1844
|
+
function h(s) {
|
|
1845
|
+
return s.map((c) => ({ id: c.id, geomType: c.geometry.type }));
|
|
1846
|
+
}
|
|
1847
|
+
function M() {
|
|
1848
|
+
if (!o) return;
|
|
1849
|
+
const s = o.getSource(H);
|
|
1850
|
+
s && "setData" in s && s.setData(i.modelValue);
|
|
1851
|
+
}
|
|
1852
|
+
R(
|
|
1853
|
+
() => i.modelValue,
|
|
1854
|
+
async () => {
|
|
1855
|
+
if (M(), o && d) {
|
|
1856
|
+
const s = h(i.modelValue.features);
|
|
1857
|
+
w1(o, v, s), v = s, m = Y(s), await Q(o, i.modelValue.features);
|
|
1858
|
+
}
|
|
1859
|
+
},
|
|
1860
|
+
{ deep: !0 }
|
|
1861
|
+
);
|
|
1862
|
+
function L(s) {
|
|
1863
|
+
if (!d || !o) return;
|
|
1864
|
+
const f = o.queryRenderedFeatures(s.point, { layers: m })?.[0];
|
|
1865
|
+
if (f) {
|
|
1866
|
+
o.getCanvas().style.cursor = "pointer";
|
|
1867
|
+
const u = f.properties?.title, p = f.properties?.description;
|
|
1868
|
+
if (u || p) {
|
|
1869
|
+
g || (g = new p1({
|
|
1870
|
+
closeButton: !1,
|
|
1871
|
+
closeOnClick: !1,
|
|
1872
|
+
offset: 10,
|
|
1873
|
+
className: "tge-popup-container"
|
|
1874
|
+
}));
|
|
1875
|
+
let t = "";
|
|
1876
|
+
u && (t += `<h3 class="tge-popup__title">${w(u)}</h3>`), p && (t += `<p class="tge-popup__description">${w(p)}</p>`), g.setLngLat(s.lngLat).setHTML(t).addTo(o);
|
|
1877
|
+
} else
|
|
1878
|
+
g?.remove();
|
|
1879
|
+
} else
|
|
1880
|
+
o.getCanvas().style.cursor = "", g?.remove();
|
|
1881
|
+
}
|
|
1882
|
+
function w(s) {
|
|
1883
|
+
const c = document.createElement("div");
|
|
1884
|
+
return c.textContent = s, c.innerHTML;
|
|
1885
|
+
}
|
|
1886
|
+
return a1(() => {
|
|
1887
|
+
if (!a.value) return;
|
|
1888
|
+
if (!l) {
|
|
1889
|
+
const c = new g1();
|
|
1890
|
+
U.addProtocol("pmtiles", c.tile), l = !0;
|
|
1891
|
+
}
|
|
1892
|
+
const { getStyle: s } = y1(i.pmtilesUrl);
|
|
1893
|
+
o = new U.Map({
|
|
1894
|
+
container: a.value,
|
|
1895
|
+
style: s(),
|
|
1896
|
+
center: i.center ?? m1,
|
|
1897
|
+
zoom: i.zoom ?? f1,
|
|
1898
|
+
attributionControl: !1
|
|
1899
|
+
}), o.addControl(
|
|
1900
|
+
new U.AttributionControl({
|
|
1901
|
+
compact: !0,
|
|
1902
|
+
customAttribution: '<a href="https://www.openstreetmap.org/copyright" target="_blank">OpenStreetMap</a> contributors'
|
|
1903
|
+
}),
|
|
1904
|
+
"bottom-right"
|
|
1905
|
+
), o.addControl(new U.NavigationControl(), "bottom-right"), o.addControl(
|
|
1906
|
+
new U.GeolocateControl({
|
|
1907
|
+
positionOptions: { enableHighAccuracy: !1 },
|
|
1908
|
+
trackUserLocation: !1,
|
|
1909
|
+
fitBoundsOptions: { maxZoom: 13 }
|
|
1910
|
+
}),
|
|
1911
|
+
"bottom-right"
|
|
1912
|
+
), o.on("load", async () => {
|
|
1913
|
+
if (o) {
|
|
1914
|
+
o.addSource(H, {
|
|
1915
|
+
type: "geojson",
|
|
1916
|
+
data: i.modelValue,
|
|
1917
|
+
promoteId: "id"
|
|
1918
|
+
});
|
|
1919
|
+
for (let c = i.modelValue.features.length - 1; c >= 0; c--) {
|
|
1920
|
+
const f = i.modelValue.features[c];
|
|
1921
|
+
for (const u of W(f.id, f.geometry.type))
|
|
1922
|
+
o.addLayer(u);
|
|
1923
|
+
}
|
|
1924
|
+
v = h(i.modelValue.features), m = Y(v), await Q(o, i.modelValue.features), C.value && o.once("idle", () => {
|
|
1925
|
+
o && b1(o, i.modelValue.features);
|
|
1926
|
+
}), d = !0;
|
|
1927
|
+
}
|
|
1928
|
+
}), o.on("mousemove", L);
|
|
1929
|
+
}), u1(() => {
|
|
1930
|
+
g?.remove(), o?.remove(), o = null;
|
|
1931
|
+
}), (s, c) => (k(), b("div", ke, [
|
|
1932
|
+
r("div", {
|
|
1933
|
+
ref_key: "mapContainer",
|
|
1934
|
+
ref: a,
|
|
1935
|
+
class: "tge-map"
|
|
1936
|
+
}, null, 512)
|
|
1937
|
+
]));
|
|
1938
|
+
}
|
|
1939
|
+
});
|
|
1940
|
+
export {
|
|
1941
|
+
t1 as COMMON_ICONS,
|
|
1942
|
+
P as DEFAULTS,
|
|
1943
|
+
T1 as DEFAULT_LOCALE,
|
|
1944
|
+
Le as GeoJsonEditor,
|
|
1945
|
+
_e as GeoJsonViewer,
|
|
1946
|
+
P1 as LAYER_IDS,
|
|
1947
|
+
X as MARKER_SIZE_SCALE,
|
|
1948
|
+
H as SOURCE_ID,
|
|
1949
|
+
D1 as getDrawingLayers,
|
|
1950
|
+
e1 as getFeatureLayerIds,
|
|
1951
|
+
W as getFeatureLayers,
|
|
1952
|
+
R0 as getIconUrl,
|
|
1953
|
+
Y as getQueryableLayerIds,
|
|
1954
|
+
B1 as getVerticesLayer,
|
|
1955
|
+
O0 as loadIcon,
|
|
1956
|
+
Q as loadIconsForFeatures,
|
|
1957
|
+
w1 as reconcileFeatureLayers,
|
|
1958
|
+
j0 as useDrawing,
|
|
1959
|
+
K0 as useGeoJson,
|
|
1960
|
+
y1 as useMapStyle
|
|
1961
|
+
};
|