@page-speed/maps 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 +21 -0
- package/README.md +54 -0
- package/dist/core/MapLibre.cjs +383 -0
- package/dist/core/MapLibre.cjs.map +1 -0
- package/dist/core/MapLibre.d.cts +8 -0
- package/dist/core/MapLibre.d.ts +8 -0
- package/dist/core/MapLibre.js +376 -0
- package/dist/core/MapLibre.js.map +1 -0
- package/dist/core/index.cjs +383 -0
- package/dist/core/index.cjs.map +1 -0
- package/dist/core/index.d.cts +4 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.js +376 -0
- package/dist/core/index.js.map +1 -0
- package/dist/index.cjs +395 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +6 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +384 -0
- package/dist/index.js.map +1 -0
- package/dist/types/index.cjs +4 -0
- package/dist/types/index.cjs.map +1 -0
- package/dist/types/index.d.cts +67 -0
- package/dist/types/index.d.ts +67 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/getMapLibreStyleUrl.cjs +62 -0
- package/dist/utils/getMapLibreStyleUrl.cjs.map +1 -0
- package/dist/utils/getMapLibreStyleUrl.d.cts +8 -0
- package/dist/utils/getMapLibreStyleUrl.d.ts +8 -0
- package/dist/utils/getMapLibreStyleUrl.js +57 -0
- package/dist/utils/getMapLibreStyleUrl.js.map +1 -0
- package/dist/utils/googleMapLinks.cjs +14 -0
- package/dist/utils/googleMapLinks.cjs.map +1 -0
- package/dist/utils/googleMapLinks.d.cts +4 -0
- package/dist/utils/googleMapLinks.d.ts +4 -0
- package/dist/utils/googleMapLinks.js +11 -0
- package/dist/utils/googleMapLinks.js.map +1 -0
- package/dist/utils/index.cjs +72 -0
- package/dist/utils/index.cjs.map +1 -0
- package/dist/utils/index.d.cts +2 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +65 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +112 -0
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var maplibre = require('react-map-gl/maplibre');
|
|
5
|
+
require('maplibre-gl/dist/maplibre-gl.css');
|
|
6
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
+
|
|
8
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
|
|
10
|
+
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
11
|
+
|
|
12
|
+
// src/core/MapLibre.tsx
|
|
13
|
+
|
|
14
|
+
// src/utils/getMapLibreStyleUrl.ts
|
|
15
|
+
var MAPLIBRE_DEFAULT_STYLE_URL = "https://demotiles.maplibre.org/style.json";
|
|
16
|
+
var DEFAULT_STADIA_STYLE_URL = "https://tiles.stadiamaps.com/styles/osm_bright.json";
|
|
17
|
+
var STYLE_MAP = {
|
|
18
|
+
default: DEFAULT_STADIA_STYLE_URL,
|
|
19
|
+
"alidade-smooth": "https://tiles.stadiamaps.com/styles/alidade_smooth.json",
|
|
20
|
+
"alidade-smooth-dark": "https://tiles.stadiamaps.com/styles/alidade_smooth_dark.json",
|
|
21
|
+
"maplibre-default": MAPLIBRE_DEFAULT_STYLE_URL,
|
|
22
|
+
"osm-bright": "https://tiles.stadiamaps.com/styles/osm_bright.json",
|
|
23
|
+
"stadia-outdoors": "https://tiles.stadiamaps.com/styles/outdoors.json",
|
|
24
|
+
"stamen-toner": "https://tiles.stadiamaps.com/styles/stamen_toner.json",
|
|
25
|
+
"stamen-terrain": "https://tiles.stadiamaps.com/styles/stamen_terrain.json",
|
|
26
|
+
"stamen-watercolor": "https://tiles.stadiamaps.com/styles/stamen_watercolor.json"
|
|
27
|
+
};
|
|
28
|
+
var HTTP_URL_REGEX = /^https?:\/\//i;
|
|
29
|
+
function isStadiaMapsUrl(url) {
|
|
30
|
+
try {
|
|
31
|
+
const parsed = new URL(url);
|
|
32
|
+
return parsed.hostname === "tiles.stadiamaps.com";
|
|
33
|
+
} catch {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function assertStadiaApiKey(stadiaApiKey) {
|
|
38
|
+
if (!stadiaApiKey.trim()) {
|
|
39
|
+
throw new Error(
|
|
40
|
+
"A non-empty stadiaApiKey is required for Stadia Maps style URLs."
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function appendStadiaApiKey(styleUrl, stadiaApiKey) {
|
|
45
|
+
if (!isStadiaMapsUrl(styleUrl)) {
|
|
46
|
+
return styleUrl;
|
|
47
|
+
}
|
|
48
|
+
assertStadiaApiKey(stadiaApiKey);
|
|
49
|
+
const parsed = new URL(styleUrl);
|
|
50
|
+
if (!parsed.searchParams.has("api_key")) {
|
|
51
|
+
parsed.searchParams.set("api_key", stadiaApiKey);
|
|
52
|
+
}
|
|
53
|
+
return parsed.toString();
|
|
54
|
+
}
|
|
55
|
+
function getMapLibreStyleUrl(value, stadiaApiKey) {
|
|
56
|
+
if (!value || typeof value !== "string") {
|
|
57
|
+
return appendStadiaApiKey(DEFAULT_STADIA_STYLE_URL, stadiaApiKey);
|
|
58
|
+
}
|
|
59
|
+
if (STYLE_MAP[value]) {
|
|
60
|
+
return appendStadiaApiKey(STYLE_MAP[value], stadiaApiKey);
|
|
61
|
+
}
|
|
62
|
+
if (HTTP_URL_REGEX.test(value)) {
|
|
63
|
+
return appendStadiaApiKey(value, stadiaApiKey);
|
|
64
|
+
}
|
|
65
|
+
return appendStadiaApiKey(DEFAULT_STADIA_STYLE_URL, stadiaApiKey);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// src/utils/googleMapLinks.ts
|
|
69
|
+
function generateGoogleMapLink(latitude, longitude, zoom = 15) {
|
|
70
|
+
return `https://www.google.com/maps/@${latitude},${longitude},${zoom}z`;
|
|
71
|
+
}
|
|
72
|
+
function generateGoogleDirectionsLink(latitude, longitude) {
|
|
73
|
+
return `https://www.google.com/maps/dir/?api=1&destination=${latitude},${longitude}`;
|
|
74
|
+
}
|
|
75
|
+
function joinClassNames(...classNames) {
|
|
76
|
+
return classNames.filter(Boolean).join(" ");
|
|
77
|
+
}
|
|
78
|
+
function DefaultMarker({ marker }) {
|
|
79
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
80
|
+
"div",
|
|
81
|
+
{
|
|
82
|
+
style: {
|
|
83
|
+
cursor: marker.draggable ? "grab" : "pointer",
|
|
84
|
+
transform: "translate(-50%, -100%)",
|
|
85
|
+
display: "inline-flex",
|
|
86
|
+
alignItems: "center",
|
|
87
|
+
justifyContent: "center",
|
|
88
|
+
position: "relative"
|
|
89
|
+
},
|
|
90
|
+
onClick: marker.onClick,
|
|
91
|
+
children: [
|
|
92
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
93
|
+
"svg",
|
|
94
|
+
{
|
|
95
|
+
"aria-hidden": "true",
|
|
96
|
+
width: "32",
|
|
97
|
+
height: "32",
|
|
98
|
+
viewBox: "0 0 24 24",
|
|
99
|
+
fill: marker.color || "#3B82F6",
|
|
100
|
+
style: { filter: "drop-shadow(0 2px 8px rgba(0,0,0,0.35))" },
|
|
101
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 2C8.13 2 5 5.13 5 9c0 4.85 6.13 12.24 6.39 12.55a.75.75 0 0 0 1.16 0C12.87 21.24 19 13.85 19 9c0-3.87-3.13-7-7-7Zm0 9.75A2.75 2.75 0 1 1 12 6.25a2.75 2.75 0 0 1 0 5.5Z" })
|
|
102
|
+
}
|
|
103
|
+
),
|
|
104
|
+
marker.label ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
105
|
+
"div",
|
|
106
|
+
{
|
|
107
|
+
style: {
|
|
108
|
+
position: "absolute",
|
|
109
|
+
bottom: -28,
|
|
110
|
+
left: "50%",
|
|
111
|
+
transform: "translateX(-50%)",
|
|
112
|
+
background: "#FFFFFF",
|
|
113
|
+
borderRadius: 6,
|
|
114
|
+
padding: "2px 8px",
|
|
115
|
+
fontSize: 12,
|
|
116
|
+
fontWeight: 500,
|
|
117
|
+
whiteSpace: "nowrap",
|
|
118
|
+
boxShadow: "0 3px 10px rgba(0, 0, 0, 0.2)"
|
|
119
|
+
},
|
|
120
|
+
children: marker.label
|
|
121
|
+
}
|
|
122
|
+
) : null
|
|
123
|
+
]
|
|
124
|
+
}
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
function normalizeMarkers(markers) {
|
|
128
|
+
return markers.map((marker, index) => {
|
|
129
|
+
if (marker.lat !== void 0 && marker.lng !== void 0) {
|
|
130
|
+
return marker;
|
|
131
|
+
}
|
|
132
|
+
const basicMarker = marker;
|
|
133
|
+
return {
|
|
134
|
+
id: basicMarker.id ?? index,
|
|
135
|
+
lat: basicMarker.latitude,
|
|
136
|
+
lng: basicMarker.longitude,
|
|
137
|
+
color: basicMarker.color,
|
|
138
|
+
draggable: basicMarker.draggable,
|
|
139
|
+
label: basicMarker.label,
|
|
140
|
+
element: basicMarker.element,
|
|
141
|
+
onClick: basicMarker.onClick
|
|
142
|
+
};
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
function MapLibre({
|
|
146
|
+
stadiaApiKey,
|
|
147
|
+
viewState,
|
|
148
|
+
onViewStateChange,
|
|
149
|
+
mapStyle,
|
|
150
|
+
center = viewState ? { lat: viewState.latitude ?? 0, lng: viewState.longitude ?? 0 } : { lat: 0, lng: 0 },
|
|
151
|
+
zoom = viewState?.zoom ?? 14,
|
|
152
|
+
styleUrl,
|
|
153
|
+
markers = [],
|
|
154
|
+
onMoveEnd,
|
|
155
|
+
onClick,
|
|
156
|
+
onMarkerDrag,
|
|
157
|
+
className,
|
|
158
|
+
style,
|
|
159
|
+
children,
|
|
160
|
+
showNavigationControl = true,
|
|
161
|
+
showGeolocateControl = false,
|
|
162
|
+
navigationControlPosition = "bottom-right",
|
|
163
|
+
geolocateControlPosition = "top-left",
|
|
164
|
+
flyToOptions = {}
|
|
165
|
+
}) {
|
|
166
|
+
const mapRef = React__default.default.useRef(null);
|
|
167
|
+
const [internalViewState, setInternalViewState] = React__default.default.useState({
|
|
168
|
+
latitude: viewState?.latitude ?? center.lat,
|
|
169
|
+
longitude: viewState?.longitude ?? center.lng,
|
|
170
|
+
zoom: viewState?.zoom ?? zoom
|
|
171
|
+
});
|
|
172
|
+
const isUserInteracting = React__default.default.useRef(false);
|
|
173
|
+
const isMarkerDragging = React__default.default.useRef(false);
|
|
174
|
+
const dragAnimationFrame = React__default.default.useRef(null);
|
|
175
|
+
React__default.default.useEffect(() => {
|
|
176
|
+
if (!mapRef.current || !viewState || isUserInteracting.current || isMarkerDragging.current) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
setInternalViewState((previous) => {
|
|
180
|
+
const next = {
|
|
181
|
+
latitude: viewState.latitude ?? previous.latitude,
|
|
182
|
+
longitude: viewState.longitude ?? previous.longitude,
|
|
183
|
+
zoom: viewState.zoom ?? previous.zoom
|
|
184
|
+
};
|
|
185
|
+
const hasChanged = previous.latitude !== next.latitude || previous.longitude !== next.longitude || previous.zoom !== next.zoom;
|
|
186
|
+
if (!hasChanged) {
|
|
187
|
+
return previous;
|
|
188
|
+
}
|
|
189
|
+
const {
|
|
190
|
+
speed = 0.8,
|
|
191
|
+
curve = 1.2,
|
|
192
|
+
bearing = 0,
|
|
193
|
+
easing = (t) => 1 - Math.pow(1 - t, 3)
|
|
194
|
+
} = flyToOptions;
|
|
195
|
+
mapRef.current?.flyTo({
|
|
196
|
+
center: [next.longitude, next.latitude],
|
|
197
|
+
zoom: next.zoom,
|
|
198
|
+
speed,
|
|
199
|
+
curve,
|
|
200
|
+
bearing,
|
|
201
|
+
easing,
|
|
202
|
+
essential: true
|
|
203
|
+
});
|
|
204
|
+
return next;
|
|
205
|
+
});
|
|
206
|
+
}, [flyToOptions, viewState?.latitude, viewState?.longitude, viewState?.zoom]);
|
|
207
|
+
const handleMoveStart = React__default.default.useCallback(() => {
|
|
208
|
+
isUserInteracting.current = true;
|
|
209
|
+
}, []);
|
|
210
|
+
const handleMove = React__default.default.useCallback(
|
|
211
|
+
(event) => {
|
|
212
|
+
const nextViewState = event.viewState;
|
|
213
|
+
setInternalViewState({
|
|
214
|
+
latitude: nextViewState.latitude,
|
|
215
|
+
longitude: nextViewState.longitude,
|
|
216
|
+
zoom: nextViewState.zoom
|
|
217
|
+
});
|
|
218
|
+
onViewStateChange?.({
|
|
219
|
+
latitude: Number(nextViewState.latitude.toFixed(6)),
|
|
220
|
+
longitude: Number(nextViewState.longitude.toFixed(6)),
|
|
221
|
+
zoom: Number(nextViewState.zoom.toFixed(2))
|
|
222
|
+
});
|
|
223
|
+
},
|
|
224
|
+
[onViewStateChange]
|
|
225
|
+
);
|
|
226
|
+
const handleMoveEnd = React__default.default.useCallback(
|
|
227
|
+
(event) => {
|
|
228
|
+
isUserInteracting.current = false;
|
|
229
|
+
if (!onMoveEnd) {
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
const map = event.target;
|
|
233
|
+
const nextCenter = map.getCenter();
|
|
234
|
+
const nextZoom = map.getZoom();
|
|
235
|
+
const bounds = map.getBounds();
|
|
236
|
+
onMoveEnd(
|
|
237
|
+
{
|
|
238
|
+
lat: Number(nextCenter.lat.toFixed(6)),
|
|
239
|
+
lng: Number(nextCenter.lng.toFixed(6))
|
|
240
|
+
},
|
|
241
|
+
Number(nextZoom.toFixed(2)),
|
|
242
|
+
bounds
|
|
243
|
+
);
|
|
244
|
+
},
|
|
245
|
+
[onMoveEnd]
|
|
246
|
+
);
|
|
247
|
+
const handleMapClick = React__default.default.useCallback(
|
|
248
|
+
(event) => {
|
|
249
|
+
if (!onClick) {
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
onClick({ latitude: event.lngLat.lat, longitude: event.lngLat.lng });
|
|
253
|
+
},
|
|
254
|
+
[onClick]
|
|
255
|
+
);
|
|
256
|
+
const normalizedMarkers = React__default.default.useMemo(
|
|
257
|
+
() => normalizeMarkers(markers),
|
|
258
|
+
[markers]
|
|
259
|
+
);
|
|
260
|
+
const markerElements = React__default.default.useMemo(
|
|
261
|
+
() => normalizedMarkers.map((marker) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
262
|
+
maplibre.Marker,
|
|
263
|
+
{
|
|
264
|
+
longitude: marker.lng,
|
|
265
|
+
latitude: marker.lat,
|
|
266
|
+
draggable: marker.draggable,
|
|
267
|
+
onDragStart: () => {
|
|
268
|
+
isMarkerDragging.current = true;
|
|
269
|
+
},
|
|
270
|
+
onDrag: (event) => {
|
|
271
|
+
if (!mapRef.current) {
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
const nextLngLat = event.lngLat;
|
|
275
|
+
if (!nextLngLat || nextLngLat.lng === void 0 || nextLngLat.lat === void 0) {
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
const draggedLng = nextLngLat.lng;
|
|
279
|
+
const draggedLat = nextLngLat.lat;
|
|
280
|
+
if (dragAnimationFrame.current) {
|
|
281
|
+
cancelAnimationFrame(dragAnimationFrame.current);
|
|
282
|
+
}
|
|
283
|
+
dragAnimationFrame.current = requestAnimationFrame(() => {
|
|
284
|
+
if (!mapRef.current) {
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
const bounds = mapRef.current.getBounds();
|
|
288
|
+
const viewportWidth = bounds.getEast() - bounds.getWest();
|
|
289
|
+
const viewportHeight = bounds.getNorth() - bounds.getSouth();
|
|
290
|
+
const edgePadding = 0.1;
|
|
291
|
+
const westThreshold = bounds.getWest() + viewportWidth * edgePadding;
|
|
292
|
+
const eastThreshold = bounds.getEast() - viewportWidth * edgePadding;
|
|
293
|
+
const southThreshold = bounds.getSouth() + viewportHeight * edgePadding;
|
|
294
|
+
const northThreshold = bounds.getNorth() - viewportHeight * edgePadding;
|
|
295
|
+
const nearWestEdge = draggedLng < westThreshold;
|
|
296
|
+
const nearEastEdge = draggedLng > eastThreshold;
|
|
297
|
+
const nearSouthEdge = draggedLat < southThreshold;
|
|
298
|
+
const nearNorthEdge = draggedLat > northThreshold;
|
|
299
|
+
if (!nearWestEdge && !nearEastEdge && !nearSouthEdge && !nearNorthEdge) {
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
let panLng = draggedLng;
|
|
303
|
+
let panLat = draggedLat;
|
|
304
|
+
const offsetAmount = 0.2;
|
|
305
|
+
if (nearWestEdge) {
|
|
306
|
+
panLng = draggedLng - viewportWidth * offsetAmount;
|
|
307
|
+
}
|
|
308
|
+
if (nearEastEdge) {
|
|
309
|
+
panLng = draggedLng + viewportWidth * offsetAmount;
|
|
310
|
+
}
|
|
311
|
+
if (nearSouthEdge) {
|
|
312
|
+
panLat = draggedLat - viewportHeight * offsetAmount;
|
|
313
|
+
}
|
|
314
|
+
if (nearNorthEdge) {
|
|
315
|
+
panLat = draggedLat + viewportHeight * offsetAmount;
|
|
316
|
+
}
|
|
317
|
+
mapRef.current?.easeTo({
|
|
318
|
+
center: [panLng, panLat],
|
|
319
|
+
duration: 200
|
|
320
|
+
});
|
|
321
|
+
});
|
|
322
|
+
},
|
|
323
|
+
onDragEnd: (event) => {
|
|
324
|
+
isMarkerDragging.current = false;
|
|
325
|
+
if (dragAnimationFrame.current) {
|
|
326
|
+
cancelAnimationFrame(dragAnimationFrame.current);
|
|
327
|
+
dragAnimationFrame.current = null;
|
|
328
|
+
}
|
|
329
|
+
if (!onMarkerDrag) {
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
const nextLngLat = event.lngLat;
|
|
333
|
+
if (!nextLngLat || nextLngLat.lng === void 0 || nextLngLat.lat === void 0) {
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
onMarkerDrag(marker.id ?? null, {
|
|
337
|
+
latitude: nextLngLat.lat,
|
|
338
|
+
longitude: nextLngLat.lng
|
|
339
|
+
});
|
|
340
|
+
},
|
|
341
|
+
children: marker.element ? typeof marker.element === "function" ? marker.element() : marker.element : /* @__PURE__ */ jsxRuntime.jsx(DefaultMarker, { marker })
|
|
342
|
+
},
|
|
343
|
+
marker.id
|
|
344
|
+
)),
|
|
345
|
+
[normalizedMarkers, onMarkerDrag]
|
|
346
|
+
);
|
|
347
|
+
const resolvedMapStyleUrl = React__default.default.useMemo(() => {
|
|
348
|
+
if (styleUrl) {
|
|
349
|
+
return appendStadiaApiKey(styleUrl, stadiaApiKey);
|
|
350
|
+
}
|
|
351
|
+
if (mapStyle) {
|
|
352
|
+
return getMapLibreStyleUrl(mapStyle, stadiaApiKey);
|
|
353
|
+
}
|
|
354
|
+
return getMapLibreStyleUrl("osm-bright", stadiaApiKey);
|
|
355
|
+
}, [mapStyle, stadiaApiKey, styleUrl]);
|
|
356
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
357
|
+
"div",
|
|
358
|
+
{
|
|
359
|
+
className: joinClassNames("relative w-full h-full", className),
|
|
360
|
+
style: { width: "100%", height: "100%", ...style },
|
|
361
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
362
|
+
maplibre.Map,
|
|
363
|
+
{
|
|
364
|
+
ref: mapRef,
|
|
365
|
+
...internalViewState,
|
|
366
|
+
mapStyle: resolvedMapStyleUrl,
|
|
367
|
+
onMoveStart: handleMoveStart,
|
|
368
|
+
onMove: handleMove,
|
|
369
|
+
onMoveEnd: handleMoveEnd,
|
|
370
|
+
onClick: handleMapClick,
|
|
371
|
+
attributionControl: false,
|
|
372
|
+
trackResize: true,
|
|
373
|
+
dragRotate: false,
|
|
374
|
+
touchZoomRotate: false,
|
|
375
|
+
children: [
|
|
376
|
+
showGeolocateControl ? /* @__PURE__ */ jsxRuntime.jsx(maplibre.GeolocateControl, { position: geolocateControlPosition }) : null,
|
|
377
|
+
showNavigationControl ? /* @__PURE__ */ jsxRuntime.jsx(maplibre.NavigationControl, { position: navigationControlPosition }) : null,
|
|
378
|
+
markerElements,
|
|
379
|
+
children
|
|
380
|
+
]
|
|
381
|
+
}
|
|
382
|
+
)
|
|
383
|
+
}
|
|
384
|
+
);
|
|
385
|
+
}
|
|
386
|
+
var DTMapLibreMap = MapLibre;
|
|
387
|
+
|
|
388
|
+
exports.DTMapLibreMap = DTMapLibreMap;
|
|
389
|
+
exports.MapLibre = MapLibre;
|
|
390
|
+
exports.appendStadiaApiKey = appendStadiaApiKey;
|
|
391
|
+
exports.generateGoogleDirectionsLink = generateGoogleDirectionsLink;
|
|
392
|
+
exports.generateGoogleMapLink = generateGoogleMapLink;
|
|
393
|
+
exports.getMapLibreStyleUrl = getMapLibreStyleUrl;
|
|
394
|
+
//# sourceMappingURL=index.cjs.map
|
|
395
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/getMapLibreStyleUrl.ts","../src/utils/googleMapLinks.ts","../src/core/MapLibre.tsx"],"names":["jsxs","jsx","React","Marker","Map","GeolocateControl","NavigationControl"],"mappings":";;;;;;;;;;;;;;AAAA,IAAM,0BAAA,GAA6B,2CAAA;AACnC,IAAM,wBAAA,GACJ,qDAAA;AAEF,IAAM,SAAA,GAAoC;AAAA,EACxC,OAAA,EAAS,wBAAA;AAAA,EACT,gBAAA,EAAkB,yDAAA;AAAA,EAClB,qBAAA,EAAuB,8DAAA;AAAA,EACvB,kBAAA,EAAoB,0BAAA;AAAA,EACpB,YAAA,EAAc,qDAAA;AAAA,EACd,iBAAA,EAAmB,mDAAA;AAAA,EACnB,cAAA,EAAgB,uDAAA;AAAA,EAChB,gBAAA,EAAkB,yDAAA;AAAA,EAClB,mBAAA,EAAqB;AACvB,CAAA;AAEA,IAAM,cAAA,GAAiB,eAAA;AAIvB,SAAS,gBAAgB,GAAA,EAAsB;AAC7C,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,GAAG,CAAA;AAC1B,IAAA,OAAO,OAAO,QAAA,KAAa,sBAAA;AAAA,EAC7B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEA,SAAS,mBAAmB,YAAA,EAA4B;AACtD,EAAA,IAAI,CAAC,YAAA,CAAa,IAAA,EAAK,EAAG;AACxB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACF;AAEO,SAAS,kBAAA,CACd,UACA,YAAA,EACQ;AACR,EAAA,IAAI,CAAC,eAAA,CAAgB,QAAQ,CAAA,EAAG;AAC9B,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,kBAAA,CAAmB,YAAY,CAAA;AAE/B,EAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,QAAQ,CAAA;AAC/B,EAAA,IAAI,CAAC,MAAA,CAAO,YAAA,CAAa,GAAA,CAAI,SAAS,CAAA,EAAG;AACvC,IAAA,MAAA,CAAO,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,YAAY,CAAA;AAAA,EACjD;AAEA,EAAA,OAAO,OAAO,QAAA,EAAS;AACzB;AAEO,SAAS,mBAAA,CACd,OACA,YAAA,EACQ;AACR,EAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AACvC,IAAA,OAAO,kBAAA,CAAmB,0BAA0B,YAAY,CAAA;AAAA,EAClE;AAEA,EAAA,IAAI,SAAA,CAAU,KAAK,CAAA,EAAG;AACpB,IAAA,OAAO,kBAAA,CAAmB,SAAA,CAAU,KAAK,CAAA,EAAG,YAAY,CAAA;AAAA,EAC1D;AAEA,EAAA,IAAI,cAAA,CAAe,IAAA,CAAK,KAAK,CAAA,EAAG;AAC9B,IAAA,OAAO,kBAAA,CAAmB,OAAO,YAAY,CAAA;AAAA,EAC/C;AAEA,EAAA,OAAO,kBAAA,CAAmB,0BAA0B,YAAY,CAAA;AAClE;;;ACxEO,SAAS,qBAAA,CACd,QAAA,EACA,SAAA,EACA,IAAA,GAAO,EAAA,EACC;AACR,EAAA,OAAO,CAAA,6BAAA,EAAgC,QAAQ,CAAA,CAAA,EAAI,SAAS,IAAI,IAAI,CAAA,CAAA,CAAA;AACtE;AAEO,SAAS,4BAAA,CACd,UACA,SAAA,EACQ;AACR,EAAA,OAAO,CAAA,mDAAA,EAAsD,QAAQ,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AACpF;ACMA,SAAS,kBAAkB,UAAA,EAA+C;AACxE,EAAA,OAAO,UAAA,CAAW,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAC5C;AAEA,SAAS,aAAA,CAAc,EAAE,MAAA,EAAO,EAA+B;AAC7D,EAAA,uBACEA,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO;AAAA,QACL,MAAA,EAAQ,MAAA,CAAO,SAAA,GAAY,MAAA,GAAS,SAAA;AAAA,QACpC,SAAA,EAAW,wBAAA;AAAA,QACX,OAAA,EAAS,aAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,cAAA,EAAgB,QAAA;AAAA,QAChB,QAAA,EAAU;AAAA,OACZ;AAAA,MACA,SAAS,MAAA,CAAO,OAAA;AAAA,MAEhB,QAAA,EAAA;AAAA,wBAAAC,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,MAAA;AAAA,YACZ,KAAA,EAAM,IAAA;AAAA,YACN,MAAA,EAAO,IAAA;AAAA,YACP,OAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAM,OAAO,KAAA,IAAS,SAAA;AAAA,YACtB,KAAA,EAAO,EAAE,MAAA,EAAQ,yCAAA,EAA0C;AAAA,YAE3D,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,6KAAA,EAA8K;AAAA;AAAA,SACxL;AAAA,QACC,OAAO,KAAA,mBACNA,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO;AAAA,cACL,QAAA,EAAU,UAAA;AAAA,cACV,MAAA,EAAQ,GAAA;AAAA,cACR,IAAA,EAAM,KAAA;AAAA,cACN,SAAA,EAAW,kBAAA;AAAA,cACX,UAAA,EAAY,SAAA;AAAA,cACZ,YAAA,EAAc,CAAA;AAAA,cACd,OAAA,EAAS,SAAA;AAAA,cACT,QAAA,EAAU,EAAA;AAAA,cACV,UAAA,EAAY,GAAA;AAAA,cACZ,UAAA,EAAY,QAAA;AAAA,cACZ,SAAA,EAAW;AAAA,aACb;AAAA,YAEC,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA,SACV,GACE;AAAA;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,iBACP,OAAA,EACkB;AAClB,EAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAA,KAAU;AACpC,IAAA,IACG,MAAA,CAA0B,GAAA,KAAQ,MAAA,IAClC,MAAA,CAA0B,QAAQ,MAAA,EACnC;AACA,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,WAAA,GAAc,MAAA;AACpB,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,YAAY,EAAA,IAAM,KAAA;AAAA,MACtB,KAAK,WAAA,CAAY,QAAA;AAAA,MACjB,KAAK,WAAA,CAAY,SAAA;AAAA,MACjB,OAAO,WAAA,CAAY,KAAA;AAAA,MACnB,WAAW,WAAA,CAAY,SAAA;AAAA,MACvB,OAAO,WAAA,CAAY,KAAA;AAAA,MACnB,SAAS,WAAA,CAAY,OAAA;AAAA,MACrB,SAAS,WAAA,CAAY;AAAA,KACvB;AAAA,EACF,CAAC,CAAA;AACH;AAEO,SAAS,QAAA,CAAS;AAAA,EACvB,YAAA;AAAA,EACA,SAAA;AAAA,EACA,iBAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAS,SAAA,GACL,EAAE,GAAA,EAAK,SAAA,CAAU,YAAY,CAAA,EAAG,GAAA,EAAK,SAAA,CAAU,SAAA,IAAa,GAAE,GAC9D,EAAE,GAAA,EAAK,CAAA,EAAG,KAAK,CAAA,EAAE;AAAA,EACrB,IAAA,GAAO,WAAW,IAAA,IAAQ,EAAA;AAAA,EAC1B,QAAA;AAAA,EACA,UAAU,EAAC;AAAA,EACX,SAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,qBAAA,GAAwB,IAAA;AAAA,EACxB,oBAAA,GAAuB,KAAA;AAAA,EACvB,yBAAA,GAA4B,cAAA;AAAA,EAC5B,wBAAA,GAA2B,UAAA;AAAA,EAC3B,eAAe;AACjB,CAAA,EAAkB;AAChB,EAAA,MAAM,MAAA,GAASC,sBAAA,CAAM,MAAA,CAAe,IAAI,CAAA;AACxC,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIA,uBAAM,QAAA,CAAuB;AAAA,IAC7E,QAAA,EAAU,SAAA,EAAW,QAAA,IAAY,MAAA,CAAO,GAAA;AAAA,IACxC,SAAA,EAAW,SAAA,EAAW,SAAA,IAAa,MAAA,CAAO,GAAA;AAAA,IAC1C,IAAA,EAAM,WAAW,IAAA,IAAQ;AAAA,GAC1B,CAAA;AAED,EAAA,MAAM,iBAAA,GAAoBA,sBAAA,CAAM,MAAA,CAAO,KAAK,CAAA;AAC5C,EAAA,MAAM,gBAAA,GAAmBA,sBAAA,CAAM,MAAA,CAAO,KAAK,CAAA;AAC3C,EAAA,MAAM,kBAAA,GAAqBA,sBAAA,CAAM,MAAA,CAAsB,IAAI,CAAA;AAE3D,EAAAA,sBAAA,CAAM,UAAU,MAAM;AACpB,IAAA,IACE,CAAC,OAAO,OAAA,IACR,CAAC,aACD,iBAAA,CAAkB,OAAA,IAClB,iBAAiB,OAAA,EACjB;AACA,MAAA;AAAA,IACF;AAEA,IAAA,oBAAA,CAAqB,CAAC,QAAA,KAAa;AACjC,MAAA,MAAM,IAAA,GAAO;AAAA,QACX,QAAA,EAAU,SAAA,CAAU,QAAA,IAAY,QAAA,CAAS,QAAA;AAAA,QACzC,SAAA,EAAW,SAAA,CAAU,SAAA,IAAa,QAAA,CAAS,SAAA;AAAA,QAC3C,IAAA,EAAM,SAAA,CAAU,IAAA,IAAQ,QAAA,CAAS;AAAA,OACnC;AAEA,MAAA,MAAM,UAAA,GACJ,QAAA,CAAS,QAAA,KAAa,IAAA,CAAK,QAAA,IAC3B,QAAA,CAAS,SAAA,KAAc,IAAA,CAAK,SAAA,IAC5B,QAAA,CAAS,IAAA,KAAS,IAAA,CAAK,IAAA;AAEzB,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,OAAO,QAAA;AAAA,MACT;AAEA,MAAA,MAAM;AAAA,QACJ,KAAA,GAAQ,GAAA;AAAA,QACR,KAAA,GAAQ,GAAA;AAAA,QACR,OAAA,GAAU,CAAA;AAAA,QACV,MAAA,GAAS,CAAC,CAAA,KAAc,CAAA,GAAI,KAAK,GAAA,CAAI,CAAA,GAAI,GAAG,CAAC;AAAA,OAC/C,GAAI,YAAA;AAEJ,MAAA,MAAA,CAAO,SAAS,KAAA,CAAM;AAAA,QACpB,MAAA,EAAQ,CAAC,IAAA,CAAK,SAAA,EAAW,KAAK,QAAQ,CAAA;AAAA,QACtC,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,KAAA;AAAA,QACA,KAAA;AAAA,QACA,OAAA;AAAA,QACA,MAAA;AAAA,QACA,SAAA,EAAW;AAAA,OACZ,CAAA;AAED,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,YAAA,EAAc,SAAA,EAAW,UAAU,SAAA,EAAW,SAAA,EAAW,SAAA,EAAW,IAAI,CAAC,CAAA;AAE7E,EAAA,MAAM,eAAA,GAAkBA,sBAAA,CAAM,WAAA,CAAY,MAAM;AAC9C,IAAA,iBAAA,CAAkB,OAAA,GAAU,IAAA;AAAA,EAC9B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,aAAaA,sBAAA,CAAM,WAAA;AAAA,IACvB,CAAC,KAAA,KAAgC;AAC/B,MAAA,MAAM,gBAAgB,KAAA,CAAM,SAAA;AAC5B,MAAA,oBAAA,CAAqB;AAAA,QACnB,UAAU,aAAA,CAAc,QAAA;AAAA,QACxB,WAAW,aAAA,CAAc,SAAA;AAAA,QACzB,MAAM,aAAA,CAAc;AAAA,OACrB,CAAA;AAED,MAAA,iBAAA,GAAoB;AAAA,QAClB,UAAU,MAAA,CAAO,aAAA,CAAc,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,QAClD,WAAW,MAAA,CAAO,aAAA,CAAc,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,QACpD,MAAM,MAAA,CAAO,aAAA,CAAc,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAC;AAAA,OAC3C,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,iBAAiB;AAAA,GACpB;AAEA,EAAA,MAAM,gBAAgBA,sBAAA,CAAM,WAAA;AAAA,IAC1B,CAAC,KAAA,KAAgC;AAC/B,MAAA,iBAAA,CAAkB,OAAA,GAAU,KAAA;AAE5B,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,MAAM,KAAA,CAAM,MAAA;AAClB,MAAA,MAAM,UAAA,GAAa,IAAI,SAAA,EAAU;AACjC,MAAA,MAAM,QAAA,GAAW,IAAI,OAAA,EAAQ;AAC7B,MAAA,MAAM,MAAA,GAAS,IAAI,SAAA,EAAU;AAE7B,MAAA,SAAA;AAAA,QACE;AAAA,UACE,KAAK,MAAA,CAAO,UAAA,CAAW,GAAA,CAAI,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,UACrC,KAAK,MAAA,CAAO,UAAA,CAAW,GAAA,CAAI,OAAA,CAAQ,CAAC,CAAC;AAAA,SACvC;AAAA,QACA,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,QAC1B;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,CAAC,SAAS;AAAA,GACZ;AAEA,EAAA,MAAM,iBAAiBA,sBAAA,CAAM,WAAA;AAAA,IAC3B,CAAC,KAAA,KAAoD;AACnD,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA;AAAA,MACF;AAEA,MAAA,OAAA,CAAQ,EAAE,UAAU,KAAA,CAAM,MAAA,CAAO,KAAK,SAAA,EAAW,KAAA,CAAM,MAAA,CAAO,GAAA,EAAK,CAAA;AAAA,IACrE,CAAA;AAAA,IACA,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,MAAM,oBAAoBA,sBAAA,CAAM,OAAA;AAAA,IAC9B,MAAM,iBAAiB,OAAO,CAAA;AAAA,IAC9B,CAAC,OAAO;AAAA,GACV;AAEA,EAAA,MAAM,iBAAiBA,sBAAA,CAAM,OAAA;AAAA,IAC3B,MACE,iBAAA,CAAkB,GAAA,CAAI,CAAC,MAAA,qBACrBD,cAAA;AAAA,MAACE,eAAA;AAAA,MAAA;AAAA,QAEC,WAAW,MAAA,CAAO,GAAA;AAAA,QAClB,UAAU,MAAA,CAAO,GAAA;AAAA,QACjB,WAAW,MAAA,CAAO,SAAA;AAAA,QAClB,aAAa,MAAM;AACjB,UAAA,gBAAA,CAAiB,OAAA,GAAU,IAAA;AAAA,QAC7B,CAAA;AAAA,QACA,MAAA,EAAQ,CAAC,KAAA,KAAU;AACjB,UAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,YAAA;AAAA,UACF;AAEA,UAAA,MAAM,aAAc,KAAA,CAAsD,MAAA;AAC1E,UAAA,IAAI,CAAC,UAAA,IAAc,UAAA,CAAW,QAAQ,MAAA,IAAa,UAAA,CAAW,QAAQ,MAAA,EAAW;AAC/E,YAAA;AAAA,UACF;AACA,UAAA,MAAM,aAAa,UAAA,CAAW,GAAA;AAC9B,UAAA,MAAM,aAAa,UAAA,CAAW,GAAA;AAE9B,UAAA,IAAI,mBAAmB,OAAA,EAAS;AAC9B,YAAA,oBAAA,CAAqB,mBAAmB,OAAO,CAAA;AAAA,UACjD;AAEA,UAAA,kBAAA,CAAmB,OAAA,GAAU,sBAAsB,MAAM;AACvD,YAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,cAAA;AAAA,YACF;AAEA,YAAA,MAAM,MAAA,GAAS,MAAA,CAAO,OAAA,CAAQ,SAAA,EAAU;AACxC,YAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,OAAA,EAAQ,GAAI,OAAO,OAAA,EAAQ;AACxD,YAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,QAAA,EAAS,GAAI,OAAO,QAAA,EAAS;AAE3D,YAAA,MAAM,WAAA,GAAc,GAAA;AACpB,YAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,OAAA,EAAQ,GAAI,aAAA,GAAgB,WAAA;AACzD,YAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,OAAA,EAAQ,GAAI,aAAA,GAAgB,WAAA;AACzD,YAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,QAAA,EAAS,GAAI,cAAA,GAAiB,WAAA;AAC5D,YAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,QAAA,EAAS,GAAI,cAAA,GAAiB,WAAA;AAE5D,YAAA,MAAM,eAAe,UAAA,GAAa,aAAA;AAClC,YAAA,MAAM,eAAe,UAAA,GAAa,aAAA;AAClC,YAAA,MAAM,gBAAgB,UAAA,GAAa,cAAA;AACnC,YAAA,MAAM,gBAAgB,UAAA,GAAa,cAAA;AAEnC,YAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,gBAAgB,CAAC,aAAA,IAAiB,CAAC,aAAA,EAAe;AACtE,cAAA;AAAA,YACF;AAEA,YAAA,IAAI,MAAA,GAAS,UAAA;AACb,YAAA,IAAI,MAAA,GAAS,UAAA;AACb,YAAA,MAAM,YAAA,GAAe,GAAA;AAErB,YAAA,IAAI,YAAA,EAAc;AAChB,cAAA,MAAA,GAAS,aAAa,aAAA,GAAgB,YAAA;AAAA,YACxC;AACA,YAAA,IAAI,YAAA,EAAc;AAChB,cAAA,MAAA,GAAS,aAAa,aAAA,GAAgB,YAAA;AAAA,YACxC;AACA,YAAA,IAAI,aAAA,EAAe;AACjB,cAAA,MAAA,GAAS,aAAa,cAAA,GAAiB,YAAA;AAAA,YACzC;AACA,YAAA,IAAI,aAAA,EAAe;AACjB,cAAA,MAAA,GAAS,aAAa,cAAA,GAAiB,YAAA;AAAA,YACzC;AAEA,YAAA,MAAA,CAAO,SAAS,MAAA,CAAO;AAAA,cACrB,MAAA,EAAQ,CAAC,MAAA,EAAQ,MAAM,CAAA;AAAA,cACvB,QAAA,EAAU;AAAA,aACX,CAAA;AAAA,UACH,CAAC,CAAA;AAAA,QACH,CAAA;AAAA,QACA,SAAA,EAAW,CAAC,KAAA,KAAU;AACpB,UAAA,gBAAA,CAAiB,OAAA,GAAU,KAAA;AAE3B,UAAA,IAAI,mBAAmB,OAAA,EAAS;AAC9B,YAAA,oBAAA,CAAqB,mBAAmB,OAAO,CAAA;AAC/C,YAAA,kBAAA,CAAmB,OAAA,GAAU,IAAA;AAAA,UAC/B;AAEA,UAAA,IAAI,CAAC,YAAA,EAAc;AACjB,YAAA;AAAA,UACF;AAEA,UAAA,MAAM,aAAc,KAAA,CAAsD,MAAA;AAC1E,UAAA,IAAI,CAAC,UAAA,IAAc,UAAA,CAAW,QAAQ,MAAA,IAAa,UAAA,CAAW,QAAQ,MAAA,EAAW;AAC/E,YAAA;AAAA,UACF;AAEA,UAAA,YAAA,CAAa,MAAA,CAAO,MAAM,IAAA,EAAM;AAAA,YAC9B,UAAU,UAAA,CAAW,GAAA;AAAA,YACrB,WAAW,UAAA,CAAW;AAAA,WACvB,CAAA;AAAA,QACH,CAAA;AAAA,QAEC,QAAA,EAAA,MAAA,CAAO,OAAA,GACJ,OAAO,MAAA,CAAO,OAAA,KAAY,UAAA,GACxB,MAAA,CAAO,OAAA,EAAQ,GACf,MAAA,CAAO,OAAA,mBACTF,cAAA,CAAC,iBAAc,MAAA,EAAgB;AAAA,OAAA;AAAA,MAjG9B,MAAA,CAAO;AAAA,KAmGf,CAAA;AAAA,IACH,CAAC,mBAAmB,YAAY;AAAA,GAClC;AAEA,EAAA,MAAM,mBAAA,GAAsBC,sBAAA,CAAM,OAAA,CAAQ,MAAM;AAC9C,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAO,kBAAA,CAAmB,UAAU,YAAY,CAAA;AAAA,IAClD;AAEA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAO,mBAAA,CAAoB,UAAU,YAAY,CAAA;AAAA,IACnD;AAEA,IAAA,OAAO,mBAAA,CAAoB,cAAc,YAAY,CAAA;AAAA,EACvD,CAAA,EAAG,CAAC,QAAA,EAAU,YAAA,EAAc,QAAQ,CAAC,CAAA;AAErC,EAAA,uBACED,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,cAAA,CAAe,wBAAA,EAA0B,SAAS,CAAA;AAAA,MAC7D,OAAO,EAAE,KAAA,EAAO,QAAQ,MAAA,EAAQ,MAAA,EAAQ,GAAG,KAAA,EAAM;AAAA,MAEjD,QAAA,kBAAAD,eAAA;AAAA,QAACI,YAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,MAAA;AAAA,UACJ,GAAG,iBAAA;AAAA,UACJ,QAAA,EAAU,mBAAA;AAAA,UACV,WAAA,EAAa,eAAA;AAAA,UACb,MAAA,EAAQ,UAAA;AAAA,UACR,SAAA,EAAW,aAAA;AAAA,UACX,OAAA,EAAS,cAAA;AAAA,UACT,kBAAA,EAAoB,KAAA;AAAA,UACpB,WAAA,EAAW,IAAA;AAAA,UACX,UAAA,EAAY,KAAA;AAAA,UACZ,eAAA,EAAiB,KAAA;AAAA,UAEhB,QAAA,EAAA;AAAA,YAAA,oBAAA,mBACCH,cAAA,CAACI,yBAAA,EAAA,EAAiB,QAAA,EAAU,wBAAA,EAA0B,CAAA,GACpD,IAAA;AAAA,YAEH,qBAAA,mBACCJ,cAAA,CAACK,0BAAA,EAAA,EAAkB,QAAA,EAAU,2BAA2B,CAAA,GACtD,IAAA;AAAA,YAEH,cAAA;AAAA,YAEA;AAAA;AAAA;AAAA;AACH;AAAA,GACF;AAEJ;AAEO,IAAM,aAAA,GAAgB","file":"index.cjs","sourcesContent":["const MAPLIBRE_DEFAULT_STYLE_URL = \"https://demotiles.maplibre.org/style.json\";\nconst DEFAULT_STADIA_STYLE_URL =\n \"https://tiles.stadiamaps.com/styles/osm_bright.json\";\n\nconst STYLE_MAP: Record<string, string> = {\n default: DEFAULT_STADIA_STYLE_URL,\n \"alidade-smooth\": \"https://tiles.stadiamaps.com/styles/alidade_smooth.json\",\n \"alidade-smooth-dark\": \"https://tiles.stadiamaps.com/styles/alidade_smooth_dark.json\",\n \"maplibre-default\": MAPLIBRE_DEFAULT_STYLE_URL,\n \"osm-bright\": \"https://tiles.stadiamaps.com/styles/osm_bright.json\",\n \"stadia-outdoors\": \"https://tiles.stadiamaps.com/styles/outdoors.json\",\n \"stamen-toner\": \"https://tiles.stadiamaps.com/styles/stamen_toner.json\",\n \"stamen-terrain\": \"https://tiles.stadiamaps.com/styles/stamen_terrain.json\",\n \"stamen-watercolor\": \"https://tiles.stadiamaps.com/styles/stamen_watercolor.json\"\n};\n\nconst HTTP_URL_REGEX = /^https?:\\/\\//i;\n\nexport type MapLibreBuiltInStyle = keyof typeof STYLE_MAP;\n\nfunction isStadiaMapsUrl(url: string): boolean {\n try {\n const parsed = new URL(url);\n return parsed.hostname === \"tiles.stadiamaps.com\";\n } catch {\n return false;\n }\n}\n\nfunction assertStadiaApiKey(stadiaApiKey: string): void {\n if (!stadiaApiKey.trim()) {\n throw new Error(\n \"A non-empty stadiaApiKey is required for Stadia Maps style URLs.\"\n );\n }\n}\n\nexport function appendStadiaApiKey(\n styleUrl: string,\n stadiaApiKey: string\n): string {\n if (!isStadiaMapsUrl(styleUrl)) {\n return styleUrl;\n }\n\n assertStadiaApiKey(stadiaApiKey);\n\n const parsed = new URL(styleUrl);\n if (!parsed.searchParams.has(\"api_key\")) {\n parsed.searchParams.set(\"api_key\", stadiaApiKey);\n }\n\n return parsed.toString();\n}\n\nexport function getMapLibreStyleUrl(\n value: string | undefined,\n stadiaApiKey: string\n): string {\n if (!value || typeof value !== \"string\") {\n return appendStadiaApiKey(DEFAULT_STADIA_STYLE_URL, stadiaApiKey);\n }\n\n if (STYLE_MAP[value]) {\n return appendStadiaApiKey(STYLE_MAP[value], stadiaApiKey);\n }\n\n if (HTTP_URL_REGEX.test(value)) {\n return appendStadiaApiKey(value, stadiaApiKey);\n }\n\n return appendStadiaApiKey(DEFAULT_STADIA_STYLE_URL, stadiaApiKey);\n}\n\nexport { DEFAULT_STADIA_STYLE_URL, MAPLIBRE_DEFAULT_STYLE_URL };\n","export function generateGoogleMapLink(\n latitude: number,\n longitude: number,\n zoom = 15\n): string {\n return `https://www.google.com/maps/@${latitude},${longitude},${zoom}z`;\n}\n\nexport function generateGoogleDirectionsLink(\n latitude: number,\n longitude: number\n): string {\n return `https://www.google.com/maps/dir/?api=1&destination=${latitude},${longitude}`;\n}\n","import React from \"react\";\nimport {\n GeolocateControl,\n Map,\n Marker,\n NavigationControl,\n type MapRef,\n type ViewStateChangeEvent\n} from \"react-map-gl/maplibre\";\nimport \"maplibre-gl/dist/maplibre-gl.css\";\n\nimport type {\n BasicMarkerInput,\n MapLibreMarker,\n MapLibreProps,\n MapViewState\n} from \"../types\";\nimport { appendStadiaApiKey, getMapLibreStyleUrl } from \"../utils\";\n\nfunction joinClassNames(...classNames: Array<string | undefined>): string {\n return classNames.filter(Boolean).join(\" \");\n}\n\nfunction DefaultMarker({ marker }: { marker: MapLibreMarker }) {\n return (\n <div\n style={{\n cursor: marker.draggable ? \"grab\" : \"pointer\",\n transform: \"translate(-50%, -100%)\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n position: \"relative\"\n }}\n onClick={marker.onClick}\n >\n <svg\n aria-hidden=\"true\"\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n fill={marker.color || \"#3B82F6\"}\n style={{ filter: \"drop-shadow(0 2px 8px rgba(0,0,0,0.35))\" }}\n >\n <path d=\"M12 2C8.13 2 5 5.13 5 9c0 4.85 6.13 12.24 6.39 12.55a.75.75 0 0 0 1.16 0C12.87 21.24 19 13.85 19 9c0-3.87-3.13-7-7-7Zm0 9.75A2.75 2.75 0 1 1 12 6.25a2.75 2.75 0 0 1 0 5.5Z\" />\n </svg>\n {marker.label ? (\n <div\n style={{\n position: \"absolute\",\n bottom: -28,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n background: \"#FFFFFF\",\n borderRadius: 6,\n padding: \"2px 8px\",\n fontSize: 12,\n fontWeight: 500,\n whiteSpace: \"nowrap\",\n boxShadow: \"0 3px 10px rgba(0, 0, 0, 0.2)\"\n }}\n >\n {marker.label}\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction normalizeMarkers(\n markers: (MapLibreMarker | BasicMarkerInput)[]\n): MapLibreMarker[] {\n return markers.map((marker, index) => {\n if (\n (marker as MapLibreMarker).lat !== undefined &&\n (marker as MapLibreMarker).lng !== undefined\n ) {\n return marker as MapLibreMarker;\n }\n\n const basicMarker = marker as BasicMarkerInput;\n return {\n id: basicMarker.id ?? index,\n lat: basicMarker.latitude,\n lng: basicMarker.longitude,\n color: basicMarker.color,\n draggable: basicMarker.draggable,\n label: basicMarker.label,\n element: basicMarker.element,\n onClick: basicMarker.onClick\n };\n });\n}\n\nexport function MapLibre({\n stadiaApiKey,\n viewState,\n onViewStateChange,\n mapStyle,\n center = viewState\n ? { lat: viewState.latitude ?? 0, lng: viewState.longitude ?? 0 }\n : { lat: 0, lng: 0 },\n zoom = viewState?.zoom ?? 14,\n styleUrl,\n markers = [],\n onMoveEnd,\n onClick,\n onMarkerDrag,\n className,\n style,\n children,\n showNavigationControl = true,\n showGeolocateControl = false,\n navigationControlPosition = \"bottom-right\",\n geolocateControlPosition = \"top-left\",\n flyToOptions = {}\n}: MapLibreProps) {\n const mapRef = React.useRef<MapRef>(null);\n const [internalViewState, setInternalViewState] = React.useState<MapViewState>({\n latitude: viewState?.latitude ?? center.lat,\n longitude: viewState?.longitude ?? center.lng,\n zoom: viewState?.zoom ?? zoom\n });\n\n const isUserInteracting = React.useRef(false);\n const isMarkerDragging = React.useRef(false);\n const dragAnimationFrame = React.useRef<number | null>(null);\n\n React.useEffect(() => {\n if (\n !mapRef.current ||\n !viewState ||\n isUserInteracting.current ||\n isMarkerDragging.current\n ) {\n return;\n }\n\n setInternalViewState((previous) => {\n const next = {\n latitude: viewState.latitude ?? previous.latitude,\n longitude: viewState.longitude ?? previous.longitude,\n zoom: viewState.zoom ?? previous.zoom\n };\n\n const hasChanged =\n previous.latitude !== next.latitude ||\n previous.longitude !== next.longitude ||\n previous.zoom !== next.zoom;\n\n if (!hasChanged) {\n return previous;\n }\n\n const {\n speed = 0.8,\n curve = 1.2,\n bearing = 0,\n easing = (t: number) => 1 - Math.pow(1 - t, 3)\n } = flyToOptions;\n\n mapRef.current?.flyTo({\n center: [next.longitude, next.latitude],\n zoom: next.zoom,\n speed,\n curve,\n bearing,\n easing,\n essential: true\n });\n\n return next;\n });\n }, [flyToOptions, viewState?.latitude, viewState?.longitude, viewState?.zoom]);\n\n const handleMoveStart = React.useCallback(() => {\n isUserInteracting.current = true;\n }, []);\n\n const handleMove = React.useCallback(\n (event: ViewStateChangeEvent) => {\n const nextViewState = event.viewState;\n setInternalViewState({\n latitude: nextViewState.latitude,\n longitude: nextViewState.longitude,\n zoom: nextViewState.zoom\n });\n\n onViewStateChange?.({\n latitude: Number(nextViewState.latitude.toFixed(6)),\n longitude: Number(nextViewState.longitude.toFixed(6)),\n zoom: Number(nextViewState.zoom.toFixed(2))\n });\n },\n [onViewStateChange]\n );\n\n const handleMoveEnd = React.useCallback(\n (event: ViewStateChangeEvent) => {\n isUserInteracting.current = false;\n\n if (!onMoveEnd) {\n return;\n }\n\n const map = event.target;\n const nextCenter = map.getCenter();\n const nextZoom = map.getZoom();\n const bounds = map.getBounds();\n\n onMoveEnd(\n {\n lat: Number(nextCenter.lat.toFixed(6)),\n lng: Number(nextCenter.lng.toFixed(6))\n },\n Number(nextZoom.toFixed(2)),\n bounds\n );\n },\n [onMoveEnd]\n );\n\n const handleMapClick = React.useCallback(\n (event: { lngLat: { lng: number; lat: number } }) => {\n if (!onClick) {\n return;\n }\n\n onClick({ latitude: event.lngLat.lat, longitude: event.lngLat.lng });\n },\n [onClick]\n );\n\n const normalizedMarkers = React.useMemo(\n () => normalizeMarkers(markers),\n [markers]\n );\n\n const markerElements = React.useMemo(\n () =>\n normalizedMarkers.map((marker) => (\n <Marker\n key={marker.id}\n longitude={marker.lng}\n latitude={marker.lat}\n draggable={marker.draggable}\n onDragStart={() => {\n isMarkerDragging.current = true;\n }}\n onDrag={(event) => {\n if (!mapRef.current) {\n return;\n }\n\n const nextLngLat = (event as { lngLat?: { lng?: number; lat?: number } }).lngLat;\n if (!nextLngLat || nextLngLat.lng === undefined || nextLngLat.lat === undefined) {\n return;\n }\n const draggedLng = nextLngLat.lng;\n const draggedLat = nextLngLat.lat;\n\n if (dragAnimationFrame.current) {\n cancelAnimationFrame(dragAnimationFrame.current);\n }\n\n dragAnimationFrame.current = requestAnimationFrame(() => {\n if (!mapRef.current) {\n return;\n }\n\n const bounds = mapRef.current.getBounds();\n const viewportWidth = bounds.getEast() - bounds.getWest();\n const viewportHeight = bounds.getNorth() - bounds.getSouth();\n\n const edgePadding = 0.1;\n const westThreshold = bounds.getWest() + viewportWidth * edgePadding;\n const eastThreshold = bounds.getEast() - viewportWidth * edgePadding;\n const southThreshold = bounds.getSouth() + viewportHeight * edgePadding;\n const northThreshold = bounds.getNorth() - viewportHeight * edgePadding;\n\n const nearWestEdge = draggedLng < westThreshold;\n const nearEastEdge = draggedLng > eastThreshold;\n const nearSouthEdge = draggedLat < southThreshold;\n const nearNorthEdge = draggedLat > northThreshold;\n\n if (!nearWestEdge && !nearEastEdge && !nearSouthEdge && !nearNorthEdge) {\n return;\n }\n\n let panLng = draggedLng;\n let panLat = draggedLat;\n const offsetAmount = 0.2;\n\n if (nearWestEdge) {\n panLng = draggedLng - viewportWidth * offsetAmount;\n }\n if (nearEastEdge) {\n panLng = draggedLng + viewportWidth * offsetAmount;\n }\n if (nearSouthEdge) {\n panLat = draggedLat - viewportHeight * offsetAmount;\n }\n if (nearNorthEdge) {\n panLat = draggedLat + viewportHeight * offsetAmount;\n }\n\n mapRef.current?.easeTo({\n center: [panLng, panLat],\n duration: 200\n });\n });\n }}\n onDragEnd={(event) => {\n isMarkerDragging.current = false;\n\n if (dragAnimationFrame.current) {\n cancelAnimationFrame(dragAnimationFrame.current);\n dragAnimationFrame.current = null;\n }\n\n if (!onMarkerDrag) {\n return;\n }\n\n const nextLngLat = (event as { lngLat?: { lng?: number; lat?: number } }).lngLat;\n if (!nextLngLat || nextLngLat.lng === undefined || nextLngLat.lat === undefined) {\n return;\n }\n\n onMarkerDrag(marker.id ?? null, {\n latitude: nextLngLat.lat,\n longitude: nextLngLat.lng\n });\n }}\n >\n {marker.element\n ? typeof marker.element === \"function\"\n ? marker.element()\n : marker.element\n : <DefaultMarker marker={marker} />}\n </Marker>\n )),\n [normalizedMarkers, onMarkerDrag]\n );\n\n const resolvedMapStyleUrl = React.useMemo(() => {\n if (styleUrl) {\n return appendStadiaApiKey(styleUrl, stadiaApiKey);\n }\n\n if (mapStyle) {\n return getMapLibreStyleUrl(mapStyle, stadiaApiKey);\n }\n\n return getMapLibreStyleUrl(\"osm-bright\", stadiaApiKey);\n }, [mapStyle, stadiaApiKey, styleUrl]);\n\n return (\n <div\n className={joinClassNames(\"relative w-full h-full\", className)}\n style={{ width: \"100%\", height: \"100%\", ...style }}\n >\n <Map\n ref={mapRef}\n {...internalViewState}\n mapStyle={resolvedMapStyleUrl}\n onMoveStart={handleMoveStart}\n onMove={handleMove}\n onMoveEnd={handleMoveEnd}\n onClick={handleMapClick}\n attributionControl={false}\n trackResize\n dragRotate={false}\n touchZoomRotate={false}\n >\n {showGeolocateControl ? (\n <GeolocateControl position={geolocateControlPosition} />\n ) : null}\n\n {showNavigationControl ? (\n <NavigationControl position={navigationControlPosition} />\n ) : null}\n\n {markerElements}\n\n {children}\n </Map>\n </div>\n );\n}\n\nexport const DTMapLibreMap = MapLibre;\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { DTMapLibreMap, MapLibre } from './core/MapLibre.cjs';
|
|
2
|
+
export { BasicMarkerInput, MapControlPosition, MapCoordinate, MapLibreFlyToOptions, MapLibreMarker, MapLibreProps, MapViewState } from './types/index.cjs';
|
|
3
|
+
export { MapLibreBuiltInStyle, appendStadiaApiKey, getMapLibreStyleUrl } from './utils/getMapLibreStyleUrl.cjs';
|
|
4
|
+
export { generateGoogleDirectionsLink, generateGoogleMapLink } from './utils/googleMapLinks.cjs';
|
|
5
|
+
import 'react/jsx-runtime';
|
|
6
|
+
import 'react';
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { DTMapLibreMap, MapLibre } from './core/MapLibre.js';
|
|
2
|
+
export { BasicMarkerInput, MapControlPosition, MapCoordinate, MapLibreFlyToOptions, MapLibreMarker, MapLibreProps, MapViewState } from './types/index.js';
|
|
3
|
+
export { MapLibreBuiltInStyle, appendStadiaApiKey, getMapLibreStyleUrl } from './utils/getMapLibreStyleUrl.js';
|
|
4
|
+
export { generateGoogleDirectionsLink, generateGoogleMapLink } from './utils/googleMapLinks.js';
|
|
5
|
+
import 'react/jsx-runtime';
|
|
6
|
+
import 'react';
|