@nuxt/scripts 1.3.5 → 2.0.0-beta.1

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.
Files changed (208) hide show
  1. package/THIRD_PARTY_LICENSES.md +124 -0
  2. package/dist/devtools-client/200.html +1 -1
  3. package/dist/devtools-client/404.html +1 -1
  4. package/dist/devtools-client/_nuxt/{B551Pnuh.js → 2p1_IuX2.js} +1 -1
  5. package/dist/devtools-client/_nuxt/{KxC4Q3ev.js → 9elIQxwW.js} +1 -1
  6. package/dist/devtools-client/_nuxt/{DTP8MRtW.js → BNPn63Jz.js} +1 -1
  7. package/dist/devtools-client/_nuxt/BjRLaDIG.js +152 -0
  8. package/dist/devtools-client/_nuxt/BtNUYBXT.js +8 -0
  9. package/dist/devtools-client/_nuxt/CDDBpkXG.js +3 -0
  10. package/dist/devtools-client/_nuxt/Cpb0XAYP.js +1 -0
  11. package/dist/devtools-client/_nuxt/DAsiyhPm.js +6 -0
  12. package/dist/devtools-client/_nuxt/{VICyrUSM.js → DabLKy7M.js} +1 -1
  13. package/dist/devtools-client/_nuxt/Dat651Oh.js +1 -0
  14. package/dist/devtools-client/_nuxt/DcG2ZXvY.js +1 -0
  15. package/dist/devtools-client/_nuxt/DmlGWZ2X.js +1 -0
  16. package/dist/devtools-client/_nuxt/KsX6Az5B.js +1 -0
  17. package/dist/devtools-client/_nuxt/RL1np866.js +28 -0
  18. package/dist/devtools-client/_nuxt/UmWNrBO5.js +2 -0
  19. package/dist/devtools-client/_nuxt/builds/latest.json +1 -1
  20. package/dist/devtools-client/_nuxt/builds/meta/e28b96f1-78e8-41a4-ad6f-904cd078f85e.json +1 -0
  21. package/dist/devtools-client/_nuxt/{entry.CYUdJFoE.css → entry.9HJPJ6Hp.css} +1 -1
  22. package/dist/devtools-client/_nuxt/error-404.DnwL1N6v.css +1 -0
  23. package/dist/devtools-client/_nuxt/error-500.DEbXRLdm.css +1 -0
  24. package/dist/devtools-client/docs/index.html +1 -1
  25. package/dist/devtools-client/first-party/index.html +1 -1
  26. package/dist/devtools-client/index.html +1 -1
  27. package/dist/devtools-client/registry/index.html +1 -1
  28. package/dist/module.d.mts +2 -86
  29. package/dist/module.d.ts +2 -86
  30. package/dist/module.json +3 -3
  31. package/dist/module.mjs +71 -328
  32. package/dist/registry.mjs +54 -22
  33. package/dist/runtime/components/GoogleMaps/ScriptGoogleMaps.d.vue.ts +1 -28
  34. package/dist/runtime/components/GoogleMaps/ScriptGoogleMaps.vue +7 -50
  35. package/dist/runtime/components/GoogleMaps/ScriptGoogleMaps.vue.d.ts +1 -28
  36. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsOverlayView.d.vue.ts +0 -8
  37. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsOverlayView.vue +1 -13
  38. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsOverlayView.vue.d.ts +0 -8
  39. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsStaticMap.d.vue.ts +4 -4
  40. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsStaticMap.vue +9 -15
  41. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsStaticMap.vue.d.ts +4 -4
  42. package/dist/runtime/components/GoogleMaps/useGoogleMapsResource.d.ts +0 -22
  43. package/dist/runtime/components/GoogleMaps/useGoogleMapsResource.js +0 -31
  44. package/dist/runtime/components/Leaflet/ScriptLeafletGeoJson.d.vue.ts +31 -0
  45. package/dist/runtime/components/Leaflet/ScriptLeafletGeoJson.vue +43 -0
  46. package/dist/runtime/components/Leaflet/ScriptLeafletGeoJson.vue.d.ts +31 -0
  47. package/dist/runtime/components/Leaflet/ScriptLeafletMap.d.vue.ts +90 -0
  48. package/dist/runtime/components/Leaflet/ScriptLeafletMap.vue +171 -0
  49. package/dist/runtime/components/Leaflet/ScriptLeafletMap.vue.d.ts +90 -0
  50. package/dist/runtime/components/Leaflet/ScriptLeafletMarker.d.vue.ts +47 -0
  51. package/dist/runtime/components/Leaflet/ScriptLeafletMarker.vue +70 -0
  52. package/dist/runtime/components/Leaflet/ScriptLeafletMarker.vue.d.ts +47 -0
  53. package/dist/runtime/components/Leaflet/ScriptLeafletPopup.d.vue.ts +31 -0
  54. package/dist/runtime/components/Leaflet/ScriptLeafletPopup.vue +81 -0
  55. package/dist/runtime/components/Leaflet/ScriptLeafletPopup.vue.d.ts +31 -0
  56. package/dist/runtime/components/Leaflet/ScriptLeafletTileLayer.d.vue.ts +26 -0
  57. package/dist/runtime/components/Leaflet/ScriptLeafletTileLayer.vue +38 -0
  58. package/dist/runtime/components/Leaflet/ScriptLeafletTileLayer.vue.d.ts +26 -0
  59. package/dist/runtime/components/Leaflet/useLeafletResource.d.ts +30 -0
  60. package/dist/runtime/components/Leaflet/useLeafletResource.js +46 -0
  61. package/dist/runtime/components/MapLibre/ScriptMapLibreGeoJson.d.vue.ts +39 -0
  62. package/dist/runtime/components/MapLibre/ScriptMapLibreGeoJson.vue +84 -0
  63. package/dist/runtime/components/MapLibre/ScriptMapLibreGeoJson.vue.d.ts +39 -0
  64. package/dist/runtime/components/MapLibre/ScriptMapLibreMap.d.vue.ts +122 -0
  65. package/dist/runtime/components/MapLibre/ScriptMapLibreMap.vue +214 -0
  66. package/dist/runtime/components/MapLibre/ScriptMapLibreMap.vue.d.ts +122 -0
  67. package/dist/runtime/components/MapLibre/ScriptMapLibreMarker.d.vue.ts +35 -0
  68. package/dist/runtime/components/MapLibre/ScriptMapLibreMarker.vue +98 -0
  69. package/dist/runtime/components/MapLibre/ScriptMapLibreMarker.vue.d.ts +35 -0
  70. package/dist/runtime/components/MapLibre/ScriptMapLibreNavigationControl.d.vue.ts +12 -0
  71. package/dist/runtime/components/MapLibre/ScriptMapLibreNavigationControl.vue +23 -0
  72. package/dist/runtime/components/MapLibre/ScriptMapLibreNavigationControl.vue.d.ts +12 -0
  73. package/dist/runtime/components/MapLibre/ScriptMapLibrePopup.d.vue.ts +31 -0
  74. package/dist/runtime/components/MapLibre/ScriptMapLibrePopup.vue +99 -0
  75. package/dist/runtime/components/MapLibre/ScriptMapLibrePopup.vue.d.ts +31 -0
  76. package/dist/runtime/components/MapLibre/useMapLibreResource.d.ts +23 -0
  77. package/dist/runtime/components/MapLibre/useMapLibreResource.js +41 -0
  78. package/dist/runtime/components/ScriptCrisp.vue +20 -18
  79. package/dist/runtime/components/ScriptDeskCrew.d.vue.ts +40 -0
  80. package/dist/runtime/components/ScriptDeskCrew.vue +82 -0
  81. package/dist/runtime/components/ScriptDeskCrew.vue.d.ts +40 -0
  82. package/dist/runtime/components/ScriptIntercom.vue +21 -19
  83. package/dist/runtime/components/ScriptLoadingIndicator.d.vue.ts +1 -1
  84. package/dist/runtime/components/ScriptLoadingIndicator.vue.d.ts +1 -1
  85. package/dist/runtime/components/ScriptPayPalButtons.vue +7 -3
  86. package/dist/runtime/components/ScriptPayPalMessages.vue +8 -4
  87. package/dist/runtime/composables/useScript.js +96 -49
  88. package/dist/runtime/composables/useScriptProxyUrl.d.ts +4 -8
  89. package/dist/runtime/composables/useScriptProxyUrl.js +0 -7
  90. package/dist/runtime/composables/useScriptTriggerIdleTimeout.d.ts +2 -1
  91. package/dist/runtime/composables/useScriptTriggerIdleTimeout.js +3 -34
  92. package/dist/runtime/composables/useScriptTriggerInteraction.d.ts +2 -1
  93. package/dist/runtime/composables/useScriptTriggerInteraction.js +13 -46
  94. package/dist/runtime/composables/useScriptTriggerServiceWorker.d.ts +2 -1
  95. package/dist/runtime/composables/useScriptTriggerServiceWorker.js +5 -38
  96. package/dist/runtime/leaflet-styles.d.ts +13 -0
  97. package/dist/runtime/leaflet-styles.js +684 -0
  98. package/dist/runtime/maplibre-styles.d.ts +7 -0
  99. package/dist/runtime/maplibre-styles.js +25 -0
  100. package/dist/runtime/npm-script-api-state.d.ts +4 -0
  101. package/dist/runtime/npm-script-api-state.js +13 -0
  102. package/dist/runtime/registry/crisp.d.ts +1 -1
  103. package/dist/runtime/registry/crisp.js +30 -18
  104. package/dist/runtime/registry/deskcrew.d.ts +52 -0
  105. package/dist/runtime/registry/deskcrew.js +31 -0
  106. package/dist/runtime/registry/google-analytics.d.ts +0 -2
  107. package/dist/runtime/registry/google-maps.d.ts +2 -11
  108. package/dist/runtime/registry/google-maps.js +31 -10
  109. package/dist/runtime/registry/google-tag-manager.d.ts +9 -3
  110. package/dist/runtime/registry/leaflet.d.ts +13 -0
  111. package/dist/runtime/registry/leaflet.js +29 -0
  112. package/dist/runtime/registry/maplibre.d.ts +13 -0
  113. package/dist/runtime/registry/maplibre.js +29 -0
  114. package/dist/runtime/registry/matomo-analytics.js +1 -8
  115. package/dist/runtime/registry/plausible-analytics.d.ts +4 -16
  116. package/dist/runtime/registry/plausible-analytics.js +15 -58
  117. package/dist/runtime/registry/rybbit-analytics.d.ts +0 -4
  118. package/dist/runtime/registry/rybbit-analytics.js +1 -4
  119. package/dist/runtime/registry/schemas.d.ts +61 -5
  120. package/dist/runtime/registry/schemas.js +64 -5
  121. package/dist/runtime/registry/tiktok-pixel.d.ts +2 -12
  122. package/dist/runtime/registry/tiktok-pixel.js +1 -1
  123. package/dist/runtime/registry/usercentrics.js +46 -6
  124. package/dist/runtime/registry/youtube-player.d.ts +3 -4
  125. package/dist/runtime/registry/youtube-player.js +30 -23
  126. package/dist/runtime/server/bluesky-embed-image.d.ts +1 -1
  127. package/dist/runtime/server/bluesky-embed.d.ts +1 -1
  128. package/dist/runtime/server/bluesky-embed.js +3 -6
  129. package/dist/runtime/server/gravatar-proxy.d.ts +1 -1
  130. package/dist/runtime/server/gravatar-proxy.js +2 -3
  131. package/dist/runtime/server/instagram-embed-asset.d.ts +1 -1
  132. package/dist/runtime/server/instagram-embed-image.d.ts +1 -1
  133. package/dist/runtime/server/instagram-embed.d.ts +1 -1
  134. package/dist/runtime/server/instagram-embed.js +4 -7
  135. package/dist/runtime/server/utils/cached-upstream.d.ts +6 -11
  136. package/dist/runtime/server/utils/cached-upstream.js +94 -23
  137. package/dist/runtime/server/utils/embed-rewriters.d.ts +3 -5
  138. package/dist/runtime/server/utils/embed-rewriters.js +8 -8
  139. package/dist/runtime/server/utils/image-proxy.d.ts +1 -1
  140. package/dist/runtime/server/utils/image-proxy.js +2 -3
  141. package/dist/runtime/server/utils/instagram-embed.d.ts +6 -6
  142. package/dist/runtime/server/utils/instagram-embed.js +18 -19
  143. package/dist/runtime/server/utils/proxy-url.d.ts +5 -6
  144. package/dist/runtime/server/utils/proxy-url.js +1 -4
  145. package/dist/runtime/server/x-embed-image.d.ts +1 -1
  146. package/dist/runtime/server/x-embed.d.ts +48 -1
  147. package/dist/runtime/server/x-embed.js +3 -6
  148. package/dist/runtime/types.d.ts +13 -13
  149. package/dist/runtime/utils/abortable-promise.js +26 -5
  150. package/dist/runtime/utils/nuxt-ready-script-trigger.d.ts +3 -0
  151. package/dist/runtime/utils/nuxt-ready-script-trigger.js +16 -0
  152. package/dist/runtime/utils.js +21 -32
  153. package/dist/stats.mjs +13 -0
  154. package/dist/types-source.mjs +1173 -100
  155. package/dist/types.d.mts +2 -2
  156. package/package.json +34 -21
  157. package/LICENSE.md +0 -9
  158. package/bin/cli.mjs +0 -2
  159. package/dist/cli.d.mts +0 -2
  160. package/dist/cli.d.ts +0 -2
  161. package/dist/cli.mjs +0 -50
  162. package/dist/devtools-client/_nuxt/8ltZ0o6d.js +0 -1
  163. package/dist/devtools-client/_nuxt/B8_EBdhg.js +0 -152
  164. package/dist/devtools-client/_nuxt/BKdLzFmX.js +0 -3
  165. package/dist/devtools-client/_nuxt/Bf2Kt1P0.js +0 -28
  166. package/dist/devtools-client/_nuxt/CC0GKROJ.js +0 -1
  167. package/dist/devtools-client/_nuxt/CH5oUfNi.js +0 -1
  168. package/dist/devtools-client/_nuxt/CMXzQxJZ.js +0 -1
  169. package/dist/devtools-client/_nuxt/CP7c-Js6.js +0 -8
  170. package/dist/devtools-client/_nuxt/C_v3_O0R.js +0 -6
  171. package/dist/devtools-client/_nuxt/CxN78VhB.js +0 -1
  172. package/dist/devtools-client/_nuxt/Dkc7iTdR.js +0 -1
  173. package/dist/devtools-client/_nuxt/builds/meta/173480db-0944-415b-962d-d619682f0042.json +0 -1
  174. package/dist/devtools-client/_nuxt/error-404.Bq2JQbJs.css +0 -1
  175. package/dist/devtools-client/_nuxt/error-500.5E_FOzlc.css +0 -1
  176. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsAdvancedMarkerElement.d.vue.ts +0 -13
  177. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsAdvancedMarkerElement.vue +0 -15
  178. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsAdvancedMarkerElement.vue.d.ts +0 -13
  179. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsHeatmapLayer.d.vue.ts +0 -27
  180. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsHeatmapLayer.vue +0 -34
  181. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsHeatmapLayer.vue.d.ts +0 -27
  182. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPinElement.d.vue.ts +0 -13
  183. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPinElement.vue +0 -11
  184. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPinElement.vue.d.ts +0 -13
  185. package/dist/runtime/components/GoogleMaps/bindGoogleMapsEvents.d.ts +0 -13
  186. package/dist/runtime/components/GoogleMaps/bindGoogleMapsEvents.js +0 -8
  187. package/dist/runtime/components/GoogleMaps/injectionKeys.d.ts +0 -10
  188. package/dist/runtime/components/GoogleMaps/injectionKeys.js +0 -2
  189. package/dist/runtime/composables/useScriptProxyToken.d.ts +0 -12
  190. package/dist/runtime/composables/useScriptProxyToken.js +0 -4
  191. package/dist/runtime/npm-script-stub.d.ts +0 -20
  192. package/dist/runtime/npm-script-stub.js +0 -72
  193. package/dist/runtime/plugins/proxy-token.server.d.ts +0 -10
  194. package/dist/runtime/plugins/proxy-token.server.js +0 -17
  195. package/dist/runtime/server/google-maps-geocode-proxy.d.ts +0 -2
  196. package/dist/runtime/server/google-maps-geocode-proxy.js +0 -43
  197. package/dist/runtime/server/google-static-maps-proxy.d.ts +0 -2
  198. package/dist/runtime/server/google-static-maps-proxy.js +0 -56
  199. package/dist/runtime/server/utils/proxy-query.d.ts +0 -2
  200. package/dist/runtime/server/utils/proxy-query.js +0 -10
  201. package/dist/runtime/server/utils/sign-constants.d.ts +0 -16
  202. package/dist/runtime/server/utils/sign-constants.js +0 -5
  203. package/dist/runtime/server/utils/sign.d.ts +0 -101
  204. package/dist/runtime/server/utils/sign.js +0 -91
  205. package/dist/runtime/server/utils/withSigning.d.ts +0 -23
  206. package/dist/runtime/server/utils/withSigning.js +0 -19
  207. package/dist/runtime/unhead-features.d.ts +0 -1
  208. package/dist/runtime/unhead-features.js +0 -3
@@ -1,12 +1,15 @@
1
1
  import { useScript as _useScript } from "@unhead/vue/scripts";
2
2
  import { defu } from "defu";
3
3
  import { injectHead, onNuxtReady, useHead, useNuxtApp, useRuntimeConfig } from "nuxt/app";
4
- import { markRaw, ref, watch } from "vue";
4
+ import { useScript as useUnheadScript } from "unhead/scripts";
5
+ import { markRaw, ref } from "vue";
5
6
  import { resolveTrigger } from "#build/nuxt-scripts-trigger-resolver";
6
7
  import { debugEnabled } from "../debug.js";
7
8
  import { logger } from "../logger.js";
9
+ import { createAbortError } from "../utils/abortable-promise.js";
8
10
  const DEVTOOLS_EVENT_LIMIT = 250;
9
11
  const DEVTOOLS_NETWORK_REQUEST_LIMIT = 500;
12
+ const NUXT_SCRIPT_CONTROLLER = Symbol("nuxt-scripts:controller");
10
13
  function pushBounded(items, item, limit) {
11
14
  items.push(item);
12
15
  if (items.length > limit)
@@ -149,6 +152,7 @@ export function useScript(input, options) {
149
152
  if (existing)
150
153
  return existing;
151
154
  const status = ref("loaded");
155
+ const lifecycleController = new AbortController();
152
156
  let disconnectObserver = () => {
153
157
  };
154
158
  let stopAppUnmountHook = () => {
@@ -159,6 +163,7 @@ export function useScript(input, options) {
159
163
  if (cleaned2)
160
164
  return;
161
165
  cleaned2 = true;
166
+ lifecycleController.abort();
162
167
  disconnectObserver();
163
168
  stopAppUnmountHook();
164
169
  if (nuxtApp2.$scripts[src] === stub)
@@ -171,6 +176,9 @@ export function useScript(input, options) {
171
176
  stub = {
172
177
  id: src,
173
178
  status,
179
+ signal: lifecycleController.signal,
180
+ dispose: () => {
181
+ },
174
182
  load: () => Promise.resolve({}),
175
183
  remove: () => {
176
184
  cleanup();
@@ -178,6 +186,11 @@ export function useScript(input, options) {
178
186
  },
179
187
  entry: void 0
180
188
  };
189
+ Object.defineProperty(stub, "script", {
190
+ configurable: true,
191
+ enumerable: true,
192
+ get: () => stub
193
+ });
181
194
  nuxtApp2.$scripts[src] = stub;
182
195
  if (import.meta.dev && import.meta.client) {
183
196
  let syncScripts = function() {
@@ -247,16 +260,29 @@ export function useScript(input, options) {
247
260
  options.trigger = onNuxtReady;
248
261
  }
249
262
  }
250
- const unheadOptions = { ...options };
251
- const instance = _useScript(input, unheadOptions);
252
- delete unheadOptions.eventContext;
253
- if (exists)
254
- return instance;
263
+ const unheadOptions = { ...options, scope: true };
264
+ const existingScript = nuxtApp.$scripts[id]?.script;
265
+ const unheadInput = existingScript && existingScript.id !== id ? { ...input, key: existingScript.id } : input;
266
+ const instance = _useScript(unheadInput, unheadOptions);
267
+ const sharedInstance = instance.script;
255
268
  markRaw(instance);
256
- instance.toJSON = () => ({ id: instance.id, status: instance.status.value });
269
+ if (sharedInstance[NUXT_SCRIPT_CONTROLLER])
270
+ return instance;
271
+ const publicStatus = instance.status;
272
+ let currentScript = sharedInstance;
273
+ const appInstance = Object.create(sharedInstance);
274
+ Object.defineProperties(appInstance, {
275
+ status: { configurable: true, enumerable: true, value: publicStatus },
276
+ script: { configurable: true, enumerable: true, get: () => currentScript },
277
+ signal: { configurable: true, enumerable: true, get: () => currentScript.signal },
278
+ dispose: { configurable: true, enumerable: true, value: () => {
279
+ } }
280
+ });
281
+ sharedInstance[NUXT_SCRIPT_CONTROLLER] = appInstance;
282
+ markRaw(appInstance);
283
+ sharedInstance.toJSON = () => ({ id: sharedInstance.id, status: publicStatus.value });
257
284
  const cleanupFns = /* @__PURE__ */ new Set();
258
285
  let cleaned = false;
259
- const publicStatus = instance.status;
260
286
  let stopStatusSync = () => {
261
287
  };
262
288
  const addCleanup = (cleanup) => {
@@ -272,61 +298,82 @@ export function useScript(input, options) {
272
298
  for (const cleanup of cleanupFns)
273
299
  cleanup();
274
300
  cleanupFns.clear();
275
- if (nuxtApp.$scripts[id] === instance)
301
+ if (nuxtApp.$scripts[id] === appInstance)
276
302
  delete nuxtApp.$scripts[id];
277
- if (import.meta.dev && import.meta.client && nuxtApp._scripts?.[instance.id]) {
278
- delete nuxtApp._scripts[instance.id];
303
+ if (import.meta.dev && import.meta.client && nuxtApp._scripts?.[sharedInstance.id]) {
304
+ delete nuxtApp._scripts[sharedInstance.id];
279
305
  nuxtApp.hooks.callHook("scripts:updated", { scripts: nuxtApp._scripts });
280
306
  }
281
307
  };
282
- let currentRemove = instance.remove;
283
- let currentLoad = instance.load;
308
+ let currentRemove = sharedInstance.remove;
309
+ let currentLoad = sharedInstance.load;
310
+ let reloadPromise;
284
311
  addCleanup(() => stopStatusSync());
285
- instance.remove = () => {
312
+ sharedInstance.remove = () => {
286
313
  const result = currentRemove();
314
+ sharedInstance.entry = currentScript.entry;
287
315
  cleanupInstance();
288
316
  return result;
289
317
  };
290
- instance.load = async () => {
318
+ sharedInstance.load = async () => {
291
319
  if (err) {
292
320
  return Promise.reject(err);
293
321
  }
294
322
  return currentLoad();
295
323
  };
296
- instance.reload = async () => {
324
+ sharedInstance.reload = () => {
297
325
  if (err)
298
326
  return Promise.reject(err);
299
- currentRemove();
300
- const reloadInput = typeof input === "string" ? { src: input, key: `${id}-${Date.now()}` } : { ...input, key: `${id}-${Date.now()}` };
301
- const reloadOptions = { ...options, trigger: "client" };
302
- const reloaded = _useScript(reloadInput, reloadOptions);
303
- delete reloadOptions.eventContext;
304
- currentRemove = reloaded.remove;
305
- currentLoad = reloaded.load;
306
- stopStatusSync();
307
- stopStatusSync = watch(reloaded.status, (status) => publicStatus.value = status, {
308
- flush: "sync",
309
- immediate: true
327
+ if (cleaned)
328
+ return Promise.reject(createAbortError("Cannot reload a removed script"));
329
+ if (reloadPromise)
330
+ return reloadPromise;
331
+ reloadPromise = (async () => {
332
+ currentRemove();
333
+ const reloadInput = { ...input, key: `${id}-${Date.now()}` };
334
+ const reloadOptions = { ...options, scope: false, trigger: "client" };
335
+ const reloaded = useUnheadScript(
336
+ options.head,
337
+ reloadInput,
338
+ reloadOptions
339
+ );
340
+ currentScript = reloaded;
341
+ currentRemove = reloaded.remove;
342
+ currentLoad = reloaded.load;
343
+ reloaded.remove = sharedInstance.remove;
344
+ reloaded.load = sharedInstance.load;
345
+ reloaded.reload = sharedInstance.reload;
346
+ reloaded.toJSON = sharedInstance.toJSON;
347
+ reloaded[NUXT_SCRIPT_CONTROLLER] = appInstance;
348
+ sharedInstance.entry = reloaded.entry;
349
+ publicStatus.value = reloaded.status;
350
+ stopStatusSync();
351
+ stopStatusSync = headHooks.hook("script:updated", ({ script }) => {
352
+ if (script === reloaded)
353
+ publicStatus.value = script.status;
354
+ });
355
+ return await currentLoad();
356
+ })().finally(() => {
357
+ reloadPromise = void 0;
310
358
  });
311
- instance.entry = reloaded.entry;
312
- return currentLoad();
359
+ return reloadPromise;
313
360
  };
314
- nuxtApp.$scripts[id] = instance;
361
+ nuxtApp.$scripts[id] = appInstance;
315
362
  addCleanup(nuxtApp.hooks.hook("app:unmount", () => {
316
- instance.remove();
363
+ sharedInstance.remove();
317
364
  }));
318
- if (import.meta.client && debugEnabled && !exists) {
365
+ if (import.meta.client && debugEnabled) {
319
366
  const registryKey = options?.devtools?.registryKey;
320
367
  const src = input?.src;
321
368
  const trigger = options?.trigger;
322
369
  const loadedFrom = options?.devtools?.loadedFrom;
323
370
  const ctx = {
324
- id: instance.id,
371
+ id: sharedInstance.id,
325
372
  ...registryKey ? { registryKey } : {},
326
373
  ...src ? { src } : {},
327
374
  ...loadedFrom ? { loadedFrom } : {}
328
375
  };
329
- const log = logger.withTag(registryKey || instance.id);
376
+ const log = logger.withTag(registryKey || sharedInstance.id);
330
377
  const t0 = performance.now();
331
378
  let tLoadStart = 0;
332
379
  log.debug("registered", {
@@ -334,7 +381,7 @@ export function useScript(input, options) {
334
381
  trigger: typeof trigger === "object" ? trigger instanceof Promise ? "promise" : JSON.stringify(trigger) : trigger
335
382
  });
336
383
  addCleanup(headHooks.hook("script:updated", (entry) => {
337
- if (entry.script.id !== instance.id)
384
+ if (entry.script !== currentScript)
338
385
  return;
339
386
  const status = entry.script.status;
340
387
  const elapsed = Math.round(performance.now() - t0);
@@ -346,18 +393,18 @@ export function useScript(input, options) {
346
393
  const fn = status === "error" ? log.warn : log.debug;
347
394
  fn(`status: ${status}`, payload);
348
395
  }));
349
- const _origLoad = instance.load;
350
- instance.load = () => {
396
+ const _origLoad = sharedInstance.load;
397
+ sharedInstance.load = () => {
351
398
  log.debug("load() called", ctx);
352
399
  return _origLoad();
353
400
  };
354
- const _origRemove = instance.remove;
355
- instance.remove = () => {
401
+ const _origRemove = sharedInstance.remove;
402
+ sharedInstance.remove = () => {
356
403
  log.debug("remove() called", ctx);
357
404
  return _origRemove();
358
405
  };
359
- const _origReload = instance.reload;
360
- instance.reload = async () => {
406
+ const _origReload = sharedInstance.reload;
407
+ sharedInstance.reload = async () => {
361
408
  log.debug("reload() called", ctx);
362
409
  return _origReload();
363
410
  };
@@ -366,7 +413,7 @@ export function useScript(input, options) {
366
413
  let syncScripts = function() {
367
414
  if (cleaned)
368
415
  return;
369
- nuxtApp._scripts[instance.id] = payload;
416
+ nuxtApp._scripts[sharedInstance.id] = payload;
370
417
  nuxtApp.hooks.callHook("scripts:updated", { scripts: nuxtApp._scripts });
371
418
  };
372
419
  const payload = {
@@ -377,20 +424,20 @@ export function useScript(input, options) {
377
424
  networkRequests: []
378
425
  };
379
426
  nuxtApp._scripts = nuxtApp._scripts || {};
380
- if (!nuxtApp._scripts[instance.id]) {
427
+ if (!nuxtApp._scripts[sharedInstance.id]) {
381
428
  addCleanup(headHooks.hook("script:updated", (ctx) => {
382
- if (ctx.script.id !== instance.id)
429
+ if (ctx.script !== currentScript)
383
430
  return;
384
431
  pushBounded(payload.events, {
385
432
  type: "status",
386
433
  status: ctx.script.status,
387
434
  at: Date.now()
388
435
  }, DEVTOOLS_EVENT_LIMIT);
389
- payload.$script = instance;
436
+ payload.$script = appInstance;
390
437
  syncScripts();
391
438
  }));
392
439
  addCleanup(headHooks.hook("script:instance-fn", (ctx) => {
393
- if (ctx.script.id !== instance.id || String(ctx.fn).startsWith("__v_"))
440
+ if (ctx.script !== currentScript || String(ctx.fn).startsWith("__v_"))
394
441
  return;
395
442
  pushBounded(payload.events, {
396
443
  type: "fn-call",
@@ -399,7 +446,7 @@ export function useScript(input, options) {
399
446
  }, DEVTOOLS_EVENT_LIMIT);
400
447
  syncScripts();
401
448
  }));
402
- payload.$script = instance;
449
+ payload.$script = appInstance;
403
450
  if (err) {
404
451
  pushBounded(payload.events, {
405
452
  type: "status",
@@ -421,8 +468,8 @@ export function useScript(input, options) {
421
468
  ]);
422
469
  let disconnectObserver = observeNetworkRequests(payload, domains, syncScripts, input.src);
423
470
  addCleanup(() => disconnectObserver());
424
- const _origReload = instance.reload;
425
- instance.reload = async () => {
471
+ const _origReload = sharedInstance.reload;
472
+ sharedInstance.reload = async () => {
426
473
  disconnectObserver();
427
474
  try {
428
475
  return await _origReload();
@@ -1,12 +1,8 @@
1
1
  /**
2
- * Build proxy URLs that the server's `withSigning` middleware accepts.
2
+ * Build a proxy URL (path + query string) for the module's proxy endpoints.
3
3
  *
4
- * Attaches the page token emitted during SSR (`_pt` + `_ts`) when one is
5
- * available, so client-driven proxy calls (e.g. reactive fetches, dynamic
6
- * image helpers exposed in slot props) authenticate without needing a
7
- * server round-trip to sign each URL.
8
- *
9
- * When no token is present (signing disabled or no secret), emits plain
10
- * `?url=...` URLs, matching the pre-signing behavior.
4
+ * Used by registry helpers (e.g. gravatar) and embed components to point
5
+ * requests at `/_scripts/proxy/*` and `/_scripts/embed/*`. These endpoints are
6
+ * restricted to an allowlist of upstream domains.
11
7
  */
12
8
  export declare function useScriptProxyUrl(): (path: string, query?: Record<string, unknown>) => string;
@@ -1,7 +1,4 @@
1
- import { PAGE_TOKEN_PARAM, PAGE_TOKEN_TS_PARAM } from "../server/utils/sign-constants.js";
2
- import { useScriptProxyToken } from "./useScriptProxyToken.js";
3
1
  export function useScriptProxyUrl() {
4
- const token = useScriptProxyToken();
5
2
  return (path, query = {}) => {
6
3
  const parts = [];
7
4
  for (const [key, value] of Object.entries(query)) {
@@ -18,10 +15,6 @@ export function useScriptProxyUrl() {
18
15
  parts.push(`${encodedKey}=${encodeURIComponent(String(value))}`);
19
16
  }
20
17
  }
21
- if (token.value) {
22
- parts.push(`${PAGE_TOKEN_PARAM}=${encodeURIComponent(token.value.token)}`);
23
- parts.push(`${PAGE_TOKEN_TS_PARAM}=${token.value.ts}`);
24
- }
25
18
  return parts.length ? `${path}?${parts.join("&")}` : path;
26
19
  };
27
20
  }
@@ -1,3 +1,4 @@
1
+ import type { UseScriptTrigger } from '@unhead/vue/scripts';
1
2
  export interface IdleTimeoutScriptTriggerOptions {
2
3
  /**
3
4
  * The timeout in milliseconds to wait before loading the script.
@@ -7,4 +8,4 @@ export interface IdleTimeoutScriptTriggerOptions {
7
8
  /**
8
9
  * Create a trigger that loads a script after an idle timeout once Nuxt is ready.
9
10
  */
10
- export declare function useScriptTriggerIdleTimeout(options: IdleTimeoutScriptTriggerOptions): Promise<boolean>;
11
+ export declare function useScriptTriggerIdleTimeout(options: IdleTimeoutScriptTriggerOptions): UseScriptTrigger;
@@ -1,36 +1,5 @@
1
- import { useTimeoutFn } from "@vueuse/core";
2
- import { tryOnScopeDispose } from "@vueuse/shared";
3
- import { onNuxtReady } from "nuxt/app";
1
+ import { createScriptTriggerTimeout } from "unhead/scripts/triggers";
2
+ import { createNuxtReadyScriptTrigger } from "../utils/nuxt-ready-script-trigger.js";
4
3
  export function useScriptTriggerIdleTimeout(options) {
5
- if (import.meta.server) {
6
- return new Promise(() => {
7
- });
8
- }
9
- const { timeout } = options;
10
- return new Promise((resolve) => {
11
- let disposed = false;
12
- let settled = false;
13
- let stopTimer = () => {
14
- };
15
- const settle = (value) => {
16
- if (settled)
17
- return;
18
- settled = true;
19
- stopTimer();
20
- resolve(value);
21
- };
22
- tryOnScopeDispose(() => {
23
- disposed = true;
24
- settle(false);
25
- });
26
- onNuxtReady(() => {
27
- if (disposed)
28
- return;
29
- const { start, stop } = useTimeoutFn(() => {
30
- settle(true);
31
- }, timeout, { immediate: false });
32
- stopTimer = stop;
33
- start();
34
- });
35
- });
4
+ return createNuxtReadyScriptTrigger(createScriptTriggerTimeout(options));
36
5
  }
@@ -1,3 +1,4 @@
1
+ import type { UseScriptTrigger } from '@unhead/vue/scripts';
1
2
  export interface InteractionScriptTriggerOptions {
2
3
  /**
3
4
  * The interaction events to listen for.
@@ -12,4 +13,4 @@ export interface InteractionScriptTriggerOptions {
12
13
  /**
13
14
  * Create a trigger that loads a script when any of the specified interaction events occur.
14
15
  */
15
- export declare function useScriptTriggerInteraction(options: InteractionScriptTriggerOptions): Promise<boolean>;
16
+ export declare function useScriptTriggerInteraction(options: InteractionScriptTriggerOptions): UseScriptTrigger;
@@ -1,48 +1,15 @@
1
- import { useEventListener } from "@vueuse/core";
2
- import { tryOnScopeDispose } from "@vueuse/shared";
3
- import { onNuxtReady } from "nuxt/app";
1
+ import { createScriptTriggerInteraction } from "unhead/scripts/triggers";
2
+ import { createNuxtReadyScriptTrigger } from "../utils/nuxt-ready-script-trigger.js";
4
3
  export function useScriptTriggerInteraction(options) {
5
- if (import.meta.server) {
6
- return new Promise(() => {
7
- });
8
- }
9
- const { events, target = document.documentElement } = options;
10
- return new Promise((resolve) => {
11
- let disposed = false;
12
- let settled = false;
13
- const cleanupFns = [];
14
- const cleanup = () => {
15
- cleanupFns.splice(0).forEach((fn) => fn());
16
- };
17
- const settle = (value) => {
18
- if (settled)
19
- return;
20
- settled = true;
21
- cleanup();
22
- resolve(value);
23
- };
24
- tryOnScopeDispose(() => {
25
- disposed = true;
26
- settle(false);
27
- });
28
- onNuxtReady(() => {
29
- if (disposed)
30
- return;
31
- if (!target) {
32
- settle(false);
33
- return;
34
- }
35
- events.forEach((event) => {
36
- const cleanup2 = useEventListener(
37
- target,
38
- event,
39
- () => {
40
- settle(true);
41
- },
42
- { once: true, passive: true }
43
- );
44
- cleanupFns.push(cleanup2);
45
- });
46
- });
47
- });
4
+ if (!options.events.length)
5
+ throw new Error("[nuxt-scripts] Interaction script triggers require at least one event.");
6
+ const target = options.target === void 0 ? () => typeof document === "undefined" ? null : document.documentElement : () => {
7
+ if (!options.target && import.meta.dev)
8
+ console.warn("[nuxt-scripts] Interaction script trigger has no event target; the script will remain unloaded.");
9
+ return options.target || null;
10
+ };
11
+ return createNuxtReadyScriptTrigger(createScriptTriggerInteraction({
12
+ events: options.events,
13
+ target
14
+ }));
48
15
  }
@@ -1,7 +1,8 @@
1
+ import type { UseScriptTrigger } from '@unhead/vue/scripts';
1
2
  /**
2
3
  * Create a trigger that loads a script after the service worker is controlling the page.
3
4
  * Falls back to immediate loading if service workers are not supported or after timeout.
4
5
  */
5
6
  export declare function useScriptTriggerServiceWorker(options?: {
6
7
  timeout?: number;
7
- }): Promise<boolean>;
8
+ }): UseScriptTrigger;
@@ -1,42 +1,9 @@
1
- import { tryOnScopeDispose } from "@vueuse/shared";
1
+ import { createScriptTriggerServiceWorker } from "unhead/scripts/triggers";
2
2
  export function useScriptTriggerServiceWorker(options) {
3
- if (import.meta.server)
4
- return new Promise(() => {
5
- });
6
- const timeout = options?.timeout ?? 3e3;
7
- return new Promise((resolve) => {
8
- if (!("serviceWorker" in navigator)) {
9
- resolve(true);
10
- return;
11
- }
12
- let settled = false;
13
- let timer;
14
- const cleanup = () => {
15
- navigator.serviceWorker.removeEventListener("controllerchange", onControllerChange);
16
- if (timer !== void 0) {
17
- clearTimeout(timer);
18
- timer = void 0;
19
- }
20
- };
21
- const done = (value) => {
22
- if (settled)
23
- return;
24
- settled = true;
25
- cleanup();
26
- resolve(value);
27
- };
28
- function onControllerChange() {
29
- done(true);
30
- }
31
- tryOnScopeDispose(() => done(false));
32
- if (navigator.serviceWorker.controller) {
33
- done(true);
34
- return;
35
- }
36
- navigator.serviceWorker.addEventListener("controllerchange", onControllerChange);
37
- timer = setTimeout(() => {
3
+ return createScriptTriggerServiceWorker({
4
+ timeout: options?.timeout,
5
+ onTimeout() {
38
6
  console.warn("[nuxt-scripts] Service worker not controlling after timeout, loading scripts anyway");
39
- done(true);
40
- }, timeout);
7
+ }
41
8
  });
42
9
  }
@@ -0,0 +1,13 @@
1
+ import type * as Leaflet from 'leaflet';
2
+ /**
3
+ * Leaflet 1.9.4 styles with its referenced images embedded as data URIs.
4
+ * Leaflet is Copyright (c) 2010-2023 Vladimir Agafonkin and
5
+ * Copyright (c) 2010-2011 CloudMade, licensed under BSD-2-Clause.
6
+ * The complete notice is retained in packages/script/THIRD_PARTY_LICENSES.md.
7
+ */
8
+ export declare const LEAFLET_CSS = "/* required styles */\r\n\r\n.leaflet-pane,\r\n.leaflet-tile,\r\n.leaflet-marker-icon,\r\n.leaflet-marker-shadow,\r\n.leaflet-tile-container,\r\n.leaflet-pane > svg,\r\n.leaflet-pane > canvas,\r\n.leaflet-zoom-box,\r\n.leaflet-image-layer,\r\n.leaflet-layer {\r\n\tposition: absolute;\r\n\tleft: 0;\r\n\ttop: 0;\r\n\t}\r\n.leaflet-container {\r\n\toverflow: hidden;\r\n\t}\r\n.leaflet-tile,\r\n.leaflet-marker-icon,\r\n.leaflet-marker-shadow {\r\n\t-webkit-user-select: none;\r\n\t -moz-user-select: none;\r\n\t user-select: none;\r\n\t -webkit-user-drag: none;\r\n\t}\r\n/* Prevents IE11 from highlighting tiles in blue */\r\n.leaflet-tile::selection {\r\n\tbackground: transparent;\r\n}\r\n/* Safari renders non-retina tile on retina better with this, but Chrome is worse */\r\n.leaflet-safari .leaflet-tile {\r\n\timage-rendering: -webkit-optimize-contrast;\r\n\t}\r\n/* hack that prevents hw layers \"stretching\" when loading new tiles */\r\n.leaflet-safari .leaflet-tile-container {\r\n\twidth: 1600px;\r\n\theight: 1600px;\r\n\t-webkit-transform-origin: 0 0;\r\n\t}\r\n.leaflet-marker-icon,\r\n.leaflet-marker-shadow {\r\n\tdisplay: block;\r\n\t}\r\n/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */\r\n/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */\r\n.leaflet-container .leaflet-overlay-pane svg {\r\n\tmax-width: none !important;\r\n\tmax-height: none !important;\r\n\t}\r\n.leaflet-container .leaflet-marker-pane img,\r\n.leaflet-container .leaflet-shadow-pane img,\r\n.leaflet-container .leaflet-tile-pane img,\r\n.leaflet-container img.leaflet-image-layer,\r\n.leaflet-container .leaflet-tile {\r\n\tmax-width: none !important;\r\n\tmax-height: none !important;\r\n\twidth: auto;\r\n\tpadding: 0;\r\n\t}\r\n\r\n.leaflet-container img.leaflet-tile {\r\n\t/* See: https://bugs.chromium.org/p/chromium/issues/detail?id=600120 */\r\n\tmix-blend-mode: plus-lighter;\r\n}\r\n\r\n.leaflet-container.leaflet-touch-zoom {\r\n\t-ms-touch-action: pan-x pan-y;\r\n\ttouch-action: pan-x pan-y;\r\n\t}\r\n.leaflet-container.leaflet-touch-drag {\r\n\t-ms-touch-action: pinch-zoom;\r\n\t/* Fallback for FF which doesn't support pinch-zoom */\r\n\ttouch-action: none;\r\n\ttouch-action: pinch-zoom;\r\n}\r\n.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {\r\n\t-ms-touch-action: none;\r\n\ttouch-action: none;\r\n}\r\n.leaflet-container {\r\n\t-webkit-tap-highlight-color: transparent;\r\n}\r\n.leaflet-container a {\r\n\t-webkit-tap-highlight-color: rgba(51, 181, 229, 0.4);\r\n}\r\n.leaflet-tile {\r\n\tfilter: inherit;\r\n\tvisibility: hidden;\r\n\t}\r\n.leaflet-tile-loaded {\r\n\tvisibility: inherit;\r\n\t}\r\n.leaflet-zoom-box {\r\n\twidth: 0;\r\n\theight: 0;\r\n\t-moz-box-sizing: border-box;\r\n\t box-sizing: border-box;\r\n\tz-index: 800;\r\n\t}\r\n/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */\r\n.leaflet-overlay-pane svg {\r\n\t-moz-user-select: none;\r\n\t}\r\n\r\n.leaflet-pane { z-index: 400; }\r\n\r\n.leaflet-tile-pane { z-index: 200; }\r\n.leaflet-overlay-pane { z-index: 400; }\r\n.leaflet-shadow-pane { z-index: 500; }\r\n.leaflet-marker-pane { z-index: 600; }\r\n.leaflet-tooltip-pane { z-index: 650; }\r\n.leaflet-popup-pane { z-index: 700; }\r\n\r\n.leaflet-map-pane canvas { z-index: 100; }\r\n.leaflet-map-pane svg { z-index: 200; }\r\n\r\n.leaflet-vml-shape {\r\n\twidth: 1px;\r\n\theight: 1px;\r\n\t}\r\n.lvml {\r\n\tbehavior: url(#default#VML);\r\n\tdisplay: inline-block;\r\n\tposition: absolute;\r\n\t}\r\n\r\n\r\n/* control positioning */\r\n\r\n.leaflet-control {\r\n\tposition: relative;\r\n\tz-index: 800;\r\n\tpointer-events: visiblePainted; /* IE 9-10 doesn't have auto */\r\n\tpointer-events: auto;\r\n\t}\r\n.leaflet-top,\r\n.leaflet-bottom {\r\n\tposition: absolute;\r\n\tz-index: 1000;\r\n\tpointer-events: none;\r\n\t}\r\n.leaflet-top {\r\n\ttop: 0;\r\n\t}\r\n.leaflet-right {\r\n\tright: 0;\r\n\t}\r\n.leaflet-bottom {\r\n\tbottom: 0;\r\n\t}\r\n.leaflet-left {\r\n\tleft: 0;\r\n\t}\r\n.leaflet-control {\r\n\tfloat: left;\r\n\tclear: both;\r\n\t}\r\n.leaflet-right .leaflet-control {\r\n\tfloat: right;\r\n\t}\r\n.leaflet-top .leaflet-control {\r\n\tmargin-top: 10px;\r\n\t}\r\n.leaflet-bottom .leaflet-control {\r\n\tmargin-bottom: 10px;\r\n\t}\r\n.leaflet-left .leaflet-control {\r\n\tmargin-left: 10px;\r\n\t}\r\n.leaflet-right .leaflet-control {\r\n\tmargin-right: 10px;\r\n\t}\r\n\r\n\r\n/* zoom and fade animations */\r\n\r\n.leaflet-fade-anim .leaflet-popup {\r\n\topacity: 0;\r\n\t-webkit-transition: opacity 0.2s linear;\r\n\t -moz-transition: opacity 0.2s linear;\r\n\t transition: opacity 0.2s linear;\r\n\t}\r\n.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {\r\n\topacity: 1;\r\n\t}\r\n.leaflet-zoom-animated {\r\n\t-webkit-transform-origin: 0 0;\r\n\t -ms-transform-origin: 0 0;\r\n\t transform-origin: 0 0;\r\n\t}\r\nsvg.leaflet-zoom-animated {\r\n\twill-change: transform;\r\n}\r\n\r\n.leaflet-zoom-anim .leaflet-zoom-animated {\r\n\t-webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);\r\n\t -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1);\r\n\t transition: transform 0.25s cubic-bezier(0,0,0.25,1);\r\n\t}\r\n.leaflet-zoom-anim .leaflet-tile,\r\n.leaflet-pan-anim .leaflet-tile {\r\n\t-webkit-transition: none;\r\n\t -moz-transition: none;\r\n\t transition: none;\r\n\t}\r\n\r\n.leaflet-zoom-anim .leaflet-zoom-hide {\r\n\tvisibility: hidden;\r\n\t}\r\n\r\n\r\n/* cursors */\r\n\r\n.leaflet-interactive {\r\n\tcursor: pointer;\r\n\t}\r\n.leaflet-grab {\r\n\tcursor: -webkit-grab;\r\n\tcursor: -moz-grab;\r\n\tcursor: grab;\r\n\t}\r\n.leaflet-crosshair,\r\n.leaflet-crosshair .leaflet-interactive {\r\n\tcursor: crosshair;\r\n\t}\r\n.leaflet-popup-pane,\r\n.leaflet-control {\r\n\tcursor: auto;\r\n\t}\r\n.leaflet-dragging .leaflet-grab,\r\n.leaflet-dragging .leaflet-grab .leaflet-interactive,\r\n.leaflet-dragging .leaflet-marker-draggable {\r\n\tcursor: move;\r\n\tcursor: -webkit-grabbing;\r\n\tcursor: -moz-grabbing;\r\n\tcursor: grabbing;\r\n\t}\r\n\r\n/* marker & overlays interactivity */\r\n.leaflet-marker-icon,\r\n.leaflet-marker-shadow,\r\n.leaflet-image-layer,\r\n.leaflet-pane > svg path,\r\n.leaflet-tile-container {\r\n\tpointer-events: none;\r\n\t}\r\n\r\n.leaflet-marker-icon.leaflet-interactive,\r\n.leaflet-image-layer.leaflet-interactive,\r\n.leaflet-pane > svg path.leaflet-interactive,\r\nsvg.leaflet-image-layer.leaflet-interactive path {\r\n\tpointer-events: visiblePainted; /* IE 9-10 doesn't have auto */\r\n\tpointer-events: auto;\r\n\t}\r\n\r\n/* visual tweaks */\r\n\r\n.leaflet-container {\r\n\tbackground: #ddd;\r\n\toutline-offset: 1px;\r\n\t}\r\n.leaflet-container a {\r\n\tcolor: #0078A8;\r\n\t}\r\n.leaflet-zoom-box {\r\n\tborder: 2px dotted #38f;\r\n\tbackground: rgba(255,255,255,0.5);\r\n\t}\r\n\r\n\r\n/* general typography */\r\n.leaflet-container {\r\n\tfont-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\r\n\tfont-size: 12px;\r\n\tfont-size: 0.75rem;\r\n\tline-height: 1.5;\r\n\t}\r\n\r\n\r\n/* general toolbar styles */\r\n\r\n.leaflet-bar {\r\n\tbox-shadow: 0 1px 5px rgba(0,0,0,0.65);\r\n\tborder-radius: 4px;\r\n\t}\r\n.leaflet-bar a {\r\n\tbackground-color: #fff;\r\n\tborder-bottom: 1px solid #ccc;\r\n\twidth: 26px;\r\n\theight: 26px;\r\n\tline-height: 26px;\r\n\tdisplay: block;\r\n\ttext-align: center;\r\n\ttext-decoration: none;\r\n\tcolor: black;\r\n\t}\r\n.leaflet-bar a,\r\n.leaflet-control-layers-toggle {\r\n\tbackground-position: 50% 50%;\r\n\tbackground-repeat: no-repeat;\r\n\tdisplay: block;\r\n\t}\r\n.leaflet-bar a:hover,\r\n.leaflet-bar a:focus {\r\n\tbackground-color: #f4f4f4;\r\n\t}\r\n.leaflet-bar a:first-child {\r\n\tborder-top-left-radius: 4px;\r\n\tborder-top-right-radius: 4px;\r\n\t}\r\n.leaflet-bar a:last-child {\r\n\tborder-bottom-left-radius: 4px;\r\n\tborder-bottom-right-radius: 4px;\r\n\tborder-bottom: none;\r\n\t}\r\n.leaflet-bar a.leaflet-disabled {\r\n\tcursor: default;\r\n\tbackground-color: #f4f4f4;\r\n\tcolor: #bbb;\r\n\t}\r\n\r\n.leaflet-touch .leaflet-bar a {\r\n\twidth: 30px;\r\n\theight: 30px;\r\n\tline-height: 30px;\r\n\t}\r\n.leaflet-touch .leaflet-bar a:first-child {\r\n\tborder-top-left-radius: 2px;\r\n\tborder-top-right-radius: 2px;\r\n\t}\r\n.leaflet-touch .leaflet-bar a:last-child {\r\n\tborder-bottom-left-radius: 2px;\r\n\tborder-bottom-right-radius: 2px;\r\n\t}\r\n\r\n/* zoom control */\r\n\r\n.leaflet-control-zoom-in,\r\n.leaflet-control-zoom-out {\r\n\tfont: bold 18px 'Lucida Console', Monaco, monospace;\r\n\ttext-indent: 1px;\r\n\t}\r\n\r\n.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out {\r\n\tfont-size: 22px;\r\n\t}\r\n\r\n\r\n/* layers control */\r\n\r\n.leaflet-control-layers {\r\n\tbox-shadow: 0 1px 5px rgba(0,0,0,0.4);\r\n\tbackground: #fff;\r\n\tborder-radius: 5px;\r\n\t}\r\n.leaflet-control-layers-toggle {\r\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAQAAAADQ4RFAAACf0lEQVR4AY1UM3gkARTePdvdoTxXKc+qTl3aU5U6b2Kbkz3Gtq3Zw6ziLGNPzrYx7946Tr6/ee/XeCQ4D3ykPtL5tHno4n0d/h3+xfuWHGLX81cn7r0iTNzjr7LrlxCqPtkbTQEHeqOrTy4Yyt3VCi/IOB0v7rVC7q45Q3Gr5K6jt+3Gl5nCoDD4MtO+j96Wu8atmhGqcNGHObuf8OM/x3AMx38+4Z2sPqzCxRFK2aF2e5Jol56XTLyggAMTL56XOMoS1W4pOyjUcGGQdZxU6qRh7B9Zp+PfpOFlqt0zyDZckPi1ttmIp03jX8gyJ8a/PG2yutpS/Vol7peZIbZcKBAEEheEIAgFbDkz5H6Zrkm2hVWGiXKiF4Ycw0RWKdtC16Q7qe3X4iOMxruonzegJzWaXFrU9utOSsLUmrc0YjeWYjCW4PDMADElpJSSQ0vQvA1Tm6/JlKnqFs1EGyZiFCqnRZTEJJJiKRYzVYzJck2Rm6P4iH+cmSY0YzimYa8l0EtTODFWhcMIMVqdsI2uiTvKmTisIDHJ3od5GILVhBCarCfVRmo4uTjkhrhzkiBV7SsaqS+TzrzM1qpGGUFt28pIySQHR6h7F6KSwGWm97ay+Z+ZqMcEjEWebE7wxCSQwpkhJqoZA5ivCdZDjJepuJ9IQjGGUmuXJdBFUygxVqVsxFsLMbDe8ZbDYVCGKxs+W080max1hFCarCfV+C1KATwcnvE9gRRuMP2prdbWGowm1KB1y+zwMMENkM755cJ2yPDtqhTI6ED1M/82yIDtC/4j4BijjeObflpO9I9MwXTCsSX8jWAFeHr05WoLTJ5G8IQVS/7vwR6ohirYM7f6HzYpogfS3R2OAAAAAElFTkSuQmCC);\r\n\twidth: 36px;\r\n\theight: 36px;\r\n\t}\r\n.leaflet-retina .leaflet-control-layers-toggle {\r\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAQAAABvcdNgAAAEsklEQVR4AWL4TydIhpZK1kpWOlg0w3ZXP6D2soBtG42jeI6ZmQTHzAxiTbSJsYLjO9HhP+WOmcuhciVnmHVQcJnp7DFvScowZorad/+V/fVzMdMT2g9Cv9guXGv/7pYOrXh2U+RRR3dSd9JRx6bIFc/ekqHI29JC6pJ5ZEh1yWkhkbcFeSjxgx3L2m1cb1C7bceyxA+CNjT/Ifff+/kDk2u/w/33/IeCMOSaWZ4glosqT3DNnNZQ7Cs58/3Ce5HL78iZH/vKVIaYlqzfdLu8Vi7dnvUbEza5Idt36tquZFldl6N5Z/POLof0XLK61mZCmJSWjVF9tEjUluu74IUXvgttuVIHE7YxSkaYhJZam7yiM9Pv82JYfl9nptxZaxMJE4YSPty+vF0+Y2up9d3wwijfjZbabqm/3bZ9ecKHsiGmRflnn1MW4pjHf9oLufyn2z3y1D6n8g8TZhxyzipLNPnAUpsOiuWimg52psrTZYnOWYNDTMuWBWa0tJb4rgq1UvmutpaYEbZlwU3CLJm/ayYjHW5/h7xWLn9Hh1vepDkyf7dE7MtT5LR4e7yYpHrkhOUpEfssBLq2pPhAqoSWKUkk7EDqkmK6RrCEzqDjhNDWNE+XSMvkJRDWlZTmCW0l0PHQGRZY5t1L83kT0Y3l2SItk5JAWHl2dCOBm+fPu3fo5/3v61RMCO9Jx2EEYYhb0rmNQMX/vm7gqOEJLcXTGw3CAuRNeyaPWwjR8PRqKQ1PDA/dpv+on9Shox52WFnx0KY8onHayrJzm87i5h9xGw/tfkev0jGsQizqezUKjk12hBMKJ4kbCqGPVNXudyyrShovGw5CgxsRICxF6aRmSjlBnHRzg7Gx8fKqEubI2rahQYdR1YgDIRQO7JvQyD52hoIQx0mxa0ODtW2Iozn1le2iIRdzwWewedyZzewidueOGqlsn1MvcnQpuVwLGG3/IR1hIKxCjelIDZ8ldqWz25jWAsnldEnK0Zxro19TGVb2ffIZEsIO89EIEDvKMPrzmBOQcKQ+rroye6NgRRxqR4U8EAkz0CL6uSGOm6KQCdWjvjRiSP1BPalCRS5iQYiEIvxuBMJEWgzSoHADcVMuN7IuqqTeyUPq22qFimFtxDyBBJEwNyt6TM88blFHao/6tWWhuuOM4SAK4EI4QmFHA+SEyWlp4EQoJ13cYGzMu7yszEIBOm2rVmHUNqwAIQabISNMRstmdhNWcFLsSm+0tjJH1MdRxO5Nx0WDMhCtgD6OKgZeljJqJKc9po8juskR9XN0Y1lZ3mWjLR9JCO1jRDMd0fpYC2VnvjBSEFg7wBENc0R9HFlb0xvF1+TBEpF68d+DHR6IOWVv2BECtxo46hOFUBd/APU57WIoEwJhIi2CdpyZX0m93BZicktMj1AS9dClteUFAUNUIEygRZCtik5zSxI9MubTBH1GOiHsiLJ3OCoSZkILa9PxiN0EbvhsAo8tdAf9Seepd36lGWHmtNANTv5Jd0z4QYyeo/UEJqxKRpg5LZx6btLPsOaEmdMyxYdlc8LMaJnikDlhclqmPiQnTEpLUIZEwkRagjYkEibQErwhkTAKCLQEbUgkzJQWc/0PstHHcfEdQ+UAAAAASUVORK5CYII=);\r\n\tbackground-size: 26px 26px;\r\n\t}\r\n.leaflet-touch .leaflet-control-layers-toggle {\r\n\twidth: 44px;\r\n\theight: 44px;\r\n\t}\r\n.leaflet-control-layers .leaflet-control-layers-list,\r\n.leaflet-control-layers-expanded .leaflet-control-layers-toggle {\r\n\tdisplay: none;\r\n\t}\r\n.leaflet-control-layers-expanded .leaflet-control-layers-list {\r\n\tdisplay: block;\r\n\tposition: relative;\r\n\t}\r\n.leaflet-control-layers-expanded {\r\n\tpadding: 6px 10px 6px 6px;\r\n\tcolor: #333;\r\n\tbackground: #fff;\r\n\t}\r\n.leaflet-control-layers-scrollbar {\r\n\toverflow-y: scroll;\r\n\toverflow-x: hidden;\r\n\tpadding-right: 5px;\r\n\t}\r\n.leaflet-control-layers-selector {\r\n\tmargin-top: 2px;\r\n\tposition: relative;\r\n\ttop: 1px;\r\n\t}\r\n.leaflet-control-layers label {\r\n\tdisplay: block;\r\n\tfont-size: 13px;\r\n\tfont-size: 1.08333em;\r\n\t}\r\n.leaflet-control-layers-separator {\r\n\theight: 0;\r\n\tborder-top: 1px solid #ddd;\r\n\tmargin: 5px -10px 5px -6px;\r\n\t}\r\n\r\n/* Default icon URLs */\r\n.leaflet-default-icon-path { /* used only in path-guessing heuristic, see L.Icon.Default */\r\n\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAFgUlEQVR4Aa1XA5BjWRTN2oW17d3YaZtr2962HUzbDNpjszW24mRt28p47v7zq/bXZtrp/lWnXr337j3nPCe85NcypgSFdugCpW5YoDAMRaIMqRi6aKq5E3YqDQO3qAwjVWrD8Ncq/RBpykd8oZUb/kaJutow8r1aP9II0WmLKLIsJyv1w/kqw9Ch2MYdB++12Onxee/QMwvf4/Dk/Lfp/i4nxTXtOoQ4pW5Aj7wpici1A9erdAN2OH64x8OSP9j3Ft3b7aWkTg/Fm91siTra0f9on5sQr9INejH6CUUUpavjFNq1B+Oadhxmnfa8RfEmN8VNAsQhPqF55xHkMzz3jSmChWU6f7/XZKNH+9+hBLOHYozuKQPxyMPUKkrX/K0uWnfFaJGS1QPRtZsOPtr3NsW0uyh6NNCOkU3Yz+bXbT3I8G3xE5EXLXtCXbbqwCO9zPQYPRTZ5vIDXD7U+w7rFDEoUUf7ibHIR4y6bLVPXrz8JVZEql13trxwue/uDivd3fkWRbS6/IA2bID4uk0UpF1N8qLlbBlXs4Ee7HLTfV1j54APvODnSfOWBqtKVvjgLKzF5YdEk5ewRkGlK0i33Eofffc7HT56jD7/6U+qH3Cx7SBLNntH5YIPvODnyfIXZYRVDPqgHtLs5ABHD3YzLuespb7t79FY34DjMwrVrcTuwlT55YMPvOBnRrJ4VXTdNnYug5ucHLBjEpt30701A3Ts+HEa73u6dT3FNWwflY86eMHPk+Yu+i6pzUpRrW7SNDg5JHR4KapmM5Wv2E8Tfcb1HoqqHMHU+uWDD7zg54mz5/2BSnizi9T1Dg4QQXLToGNCkb6tb1NU+QAlGr1++eADrzhn/u8Q2YZhQVlZ5+CAOtqfbhmaUCS1ezNFVm2imDbPmPng5wmz+gwh+oHDce0eUtQ6OGDIyR0uUhUsoO3vfDmmgOezH0mZN59x7MBi++WDL1g/eEiU3avlidO671bkLfwbw5XV2P8Pzo0ydy4t2/0eu33xYSOMOD8hTf4CrBtGMSoXfPLchX+J0ruSePw3LZeK0juPJbYzrhkH0io7B3k164hiGvawhOKMLkrQLyVpZg8rHFW7E2uHOL888IBPlNZ1FPzstSJM694fWr6RwpvcJK60+0HCILTBzZLFNdtAzJaohze60T8qBzyh5ZuOg5e7uwQppofEmf2++DYvmySqGBuKaicF1blQjhuHdvCIMvp8whTTfZzI7RldpwtSzL+F1+wkdZ2TBOW2gIF88PBTzD/gpeREAMEbxnJcaJHNHrpzji0gQCS6hdkEeYt9DF/2qPcEC8RM28Hwmr3sdNyht00byAut2k3gufWNtgtOEOFGUwcXWNDbdNbpgBGxEvKkOQsxivJx33iow0Vw5S6SVTrpVq11ysA2Rp7gTfPfktc6zhtXBBC+adRLshf6sG2RfHPZ5EAc4sVZ83yCN00Fk/4kggu40ZTvIEm5g24qtU4KjBrx/BTTH8ifVASAG7gKrnWxJDcU7x8X6Ecczhm3o6YicvsLXWfh3Ch1W0k8x0nXF+0fFxgt4phz8QvypiwCCFKMqXCnqXExjq10beH+UUA7+nG6mdG/Pu0f3LgFcGrl2s0kNNjpmoJ9o4B29CMO8dMT4Q5ox8uitF6fqsrJOr8qnwNbRzv6hSnG5wP+64C7h9lp30hKNtKdWjtdkbuPA19nJ7Tz3zR/ibgARbhb4AlhavcBebmTHcFl2fvYEnW0ox9xMxKBS8btJ+KiEbq9zA4RthQXDhPa0T9TEe69gWupwc6uBUphquXgf+/FrIjweHQS4/pduMe5ERUMHUd9xv8ZR98CxkS4F2n3EUrUZ10EYNw7BWm9x1GiPssi3GgiGRDKWRYZfXlON+dfNbM+GgIwYdwAAAAASUVORK5CYII=);\r\n\t}\r\n\r\n\r\n/* attribution and scale controls */\r\n\r\n.leaflet-container .leaflet-control-attribution {\r\n\tbackground: #fff;\r\n\tbackground: rgba(255, 255, 255, 0.8);\r\n\tmargin: 0;\r\n\t}\r\n.leaflet-control-attribution,\r\n.leaflet-control-scale-line {\r\n\tpadding: 0 5px;\r\n\tcolor: #333;\r\n\tline-height: 1.4;\r\n\t}\r\n.leaflet-control-attribution a {\r\n\ttext-decoration: none;\r\n\t}\r\n.leaflet-control-attribution a:hover,\r\n.leaflet-control-attribution a:focus {\r\n\ttext-decoration: underline;\r\n\t}\r\n.leaflet-attribution-flag {\r\n\tdisplay: inline !important;\r\n\tvertical-align: baseline !important;\r\n\twidth: 1em;\r\n\theight: 0.6669em;\r\n\t}\r\n.leaflet-left .leaflet-control-scale {\r\n\tmargin-left: 5px;\r\n\t}\r\n.leaflet-bottom .leaflet-control-scale {\r\n\tmargin-bottom: 5px;\r\n\t}\r\n.leaflet-control-scale-line {\r\n\tborder: 2px solid #777;\r\n\tborder-top: none;\r\n\tline-height: 1.1;\r\n\tpadding: 2px 5px 1px;\r\n\twhite-space: nowrap;\r\n\t-moz-box-sizing: border-box;\r\n\t box-sizing: border-box;\r\n\tbackground: rgba(255, 255, 255, 0.8);\r\n\ttext-shadow: 1px 1px #fff;\r\n\t}\r\n.leaflet-control-scale-line:not(:first-child) {\r\n\tborder-top: 2px solid #777;\r\n\tborder-bottom: none;\r\n\tmargin-top: -2px;\r\n\t}\r\n.leaflet-control-scale-line:not(:first-child):not(:last-child) {\r\n\tborder-bottom: 2px solid #777;\r\n\t}\r\n\r\n.leaflet-touch .leaflet-control-attribution,\r\n.leaflet-touch .leaflet-control-layers,\r\n.leaflet-touch .leaflet-bar {\r\n\tbox-shadow: none;\r\n\t}\r\n.leaflet-touch .leaflet-control-layers,\r\n.leaflet-touch .leaflet-bar {\r\n\tborder: 2px solid rgba(0,0,0,0.2);\r\n\tbackground-clip: padding-box;\r\n\t}\r\n\r\n\r\n/* popup */\r\n\r\n.leaflet-popup {\r\n\tposition: absolute;\r\n\ttext-align: center;\r\n\tmargin-bottom: 20px;\r\n\t}\r\n.leaflet-popup-content-wrapper {\r\n\tpadding: 1px;\r\n\ttext-align: left;\r\n\tborder-radius: 12px;\r\n\t}\r\n.leaflet-popup-content {\r\n\tmargin: 13px 24px 13px 20px;\r\n\tline-height: 1.3;\r\n\tfont-size: 13px;\r\n\tfont-size: 1.08333em;\r\n\tmin-height: 1px;\r\n\t}\r\n.leaflet-popup-content p {\r\n\tmargin: 17px 0;\r\n\tmargin: 1.3em 0;\r\n\t}\r\n.leaflet-popup-tip-container {\r\n\twidth: 40px;\r\n\theight: 20px;\r\n\tposition: absolute;\r\n\tleft: 50%;\r\n\tmargin-top: -1px;\r\n\tmargin-left: -20px;\r\n\toverflow: hidden;\r\n\tpointer-events: none;\r\n\t}\r\n.leaflet-popup-tip {\r\n\twidth: 17px;\r\n\theight: 17px;\r\n\tpadding: 1px;\r\n\r\n\tmargin: -10px auto 0;\r\n\tpointer-events: auto;\r\n\r\n\t-webkit-transform: rotate(45deg);\r\n\t -moz-transform: rotate(45deg);\r\n\t -ms-transform: rotate(45deg);\r\n\t transform: rotate(45deg);\r\n\t}\r\n.leaflet-popup-content-wrapper,\r\n.leaflet-popup-tip {\r\n\tbackground: white;\r\n\tcolor: #333;\r\n\tbox-shadow: 0 3px 14px rgba(0,0,0,0.4);\r\n\t}\r\n.leaflet-container a.leaflet-popup-close-button {\r\n\tposition: absolute;\r\n\ttop: 0;\r\n\tright: 0;\r\n\tborder: none;\r\n\ttext-align: center;\r\n\twidth: 24px;\r\n\theight: 24px;\r\n\tfont: 16px/24px Tahoma, Verdana, sans-serif;\r\n\tcolor: #757575;\r\n\ttext-decoration: none;\r\n\tbackground: transparent;\r\n\t}\r\n.leaflet-container a.leaflet-popup-close-button:hover,\r\n.leaflet-container a.leaflet-popup-close-button:focus {\r\n\tcolor: #585858;\r\n\t}\r\n.leaflet-popup-scrolled {\r\n\toverflow: auto;\r\n\t}\r\n\r\n.leaflet-oldie .leaflet-popup-content-wrapper {\r\n\t-ms-zoom: 1;\r\n\t}\r\n.leaflet-oldie .leaflet-popup-tip {\r\n\twidth: 24px;\r\n\tmargin: 0 auto;\r\n\r\n\t-ms-filter: \"progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)\";\r\n\tfilter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);\r\n\t}\r\n\r\n.leaflet-oldie .leaflet-control-zoom,\r\n.leaflet-oldie .leaflet-control-layers,\r\n.leaflet-oldie .leaflet-popup-content-wrapper,\r\n.leaflet-oldie .leaflet-popup-tip {\r\n\tborder: 1px solid #999;\r\n\t}\r\n\r\n\r\n/* div icon */\r\n\r\n.leaflet-div-icon {\r\n\tbackground: #fff;\r\n\tborder: 1px solid #666;\r\n\t}\r\n\r\n\r\n/* Tooltip */\r\n/* Base styles for the element that has a tooltip */\r\n.leaflet-tooltip {\r\n\tposition: absolute;\r\n\tpadding: 6px;\r\n\tbackground-color: #fff;\r\n\tborder: 1px solid #fff;\r\n\tborder-radius: 3px;\r\n\tcolor: #222;\r\n\twhite-space: nowrap;\r\n\t-webkit-user-select: none;\r\n\t-moz-user-select: none;\r\n\t-ms-user-select: none;\r\n\tuser-select: none;\r\n\tpointer-events: none;\r\n\tbox-shadow: 0 1px 3px rgba(0,0,0,0.4);\r\n\t}\r\n.leaflet-tooltip.leaflet-interactive {\r\n\tcursor: pointer;\r\n\tpointer-events: auto;\r\n\t}\r\n.leaflet-tooltip-top:before,\r\n.leaflet-tooltip-bottom:before,\r\n.leaflet-tooltip-left:before,\r\n.leaflet-tooltip-right:before {\r\n\tposition: absolute;\r\n\tpointer-events: none;\r\n\tborder: 6px solid transparent;\r\n\tbackground: transparent;\r\n\tcontent: \"\";\r\n\t}\r\n\r\n/* Directions */\r\n\r\n.leaflet-tooltip-bottom {\r\n\tmargin-top: 6px;\r\n}\r\n.leaflet-tooltip-top {\r\n\tmargin-top: -6px;\r\n}\r\n.leaflet-tooltip-bottom:before,\r\n.leaflet-tooltip-top:before {\r\n\tleft: 50%;\r\n\tmargin-left: -6px;\r\n\t}\r\n.leaflet-tooltip-top:before {\r\n\tbottom: 0;\r\n\tmargin-bottom: -12px;\r\n\tborder-top-color: #fff;\r\n\t}\r\n.leaflet-tooltip-bottom:before {\r\n\ttop: 0;\r\n\tmargin-top: -12px;\r\n\tmargin-left: -6px;\r\n\tborder-bottom-color: #fff;\r\n\t}\r\n.leaflet-tooltip-left {\r\n\tmargin-left: -6px;\r\n}\r\n.leaflet-tooltip-right {\r\n\tmargin-left: 6px;\r\n}\r\n.leaflet-tooltip-left:before,\r\n.leaflet-tooltip-right:before {\r\n\ttop: 50%;\r\n\tmargin-top: -6px;\r\n\t}\r\n.leaflet-tooltip-left:before {\r\n\tright: 0;\r\n\tmargin-right: -12px;\r\n\tborder-left-color: #fff;\r\n\t}\r\n.leaflet-tooltip-right:before {\r\n\tleft: 0;\r\n\tmargin-left: -12px;\r\n\tborder-right-color: #fff;\r\n\t}\r\n\r\n/* Printing */\r\n\r\n@media print {\r\n\t/* Prevent printers from removing background-images of controls. */\r\n\t.leaflet-control {\r\n\t\t-webkit-print-color-adjust: exact;\r\n\t\tprint-color-adjust: exact;\r\n\t\t}\r\n\t}\r\n";
9
+ export declare const LEAFLET_DEFAULT_ICON_URL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAFgUlEQVR4Aa1XA5BjWRTN2oW17d3YaZtr2962HUzbDNpjszW24mRt28p47v7zq/bXZtrp/lWnXr337j3nPCe85NcypgSFdugCpW5YoDAMRaIMqRi6aKq5E3YqDQO3qAwjVWrD8Ncq/RBpykd8oZUb/kaJutow8r1aP9II0WmLKLIsJyv1w/kqw9Ch2MYdB++12Onxee/QMwvf4/Dk/Lfp/i4nxTXtOoQ4pW5Aj7wpici1A9erdAN2OH64x8OSP9j3Ft3b7aWkTg/Fm91siTra0f9on5sQr9INejH6CUUUpavjFNq1B+Oadhxmnfa8RfEmN8VNAsQhPqF55xHkMzz3jSmChWU6f7/XZKNH+9+hBLOHYozuKQPxyMPUKkrX/K0uWnfFaJGS1QPRtZsOPtr3NsW0uyh6NNCOkU3Yz+bXbT3I8G3xE5EXLXtCXbbqwCO9zPQYPRTZ5vIDXD7U+w7rFDEoUUf7ibHIR4y6bLVPXrz8JVZEql13trxwue/uDivd3fkWRbS6/IA2bID4uk0UpF1N8qLlbBlXs4Ee7HLTfV1j54APvODnSfOWBqtKVvjgLKzF5YdEk5ewRkGlK0i33Eofffc7HT56jD7/6U+qH3Cx7SBLNntH5YIPvODnyfIXZYRVDPqgHtLs5ABHD3YzLuespb7t79FY34DjMwrVrcTuwlT55YMPvOBnRrJ4VXTdNnYug5ucHLBjEpt30701A3Ts+HEa73u6dT3FNWwflY86eMHPk+Yu+i6pzUpRrW7SNDg5JHR4KapmM5Wv2E8Tfcb1HoqqHMHU+uWDD7zg54mz5/2BSnizi9T1Dg4QQXLToGNCkb6tb1NU+QAlGr1++eADrzhn/u8Q2YZhQVlZ5+CAOtqfbhmaUCS1ezNFVm2imDbPmPng5wmz+gwh+oHDce0eUtQ6OGDIyR0uUhUsoO3vfDmmgOezH0mZN59x7MBi++WDL1g/eEiU3avlidO671bkLfwbw5XV2P8Pzo0ydy4t2/0eu33xYSOMOD8hTf4CrBtGMSoXfPLchX+J0ruSePw3LZeK0juPJbYzrhkH0io7B3k164hiGvawhOKMLkrQLyVpZg8rHFW7E2uHOL888IBPlNZ1FPzstSJM694fWr6RwpvcJK60+0HCILTBzZLFNdtAzJaohze60T8qBzyh5ZuOg5e7uwQppofEmf2++DYvmySqGBuKaicF1blQjhuHdvCIMvp8whTTfZzI7RldpwtSzL+F1+wkdZ2TBOW2gIF88PBTzD/gpeREAMEbxnJcaJHNHrpzji0gQCS6hdkEeYt9DF/2qPcEC8RM28Hwmr3sdNyht00byAut2k3gufWNtgtOEOFGUwcXWNDbdNbpgBGxEvKkOQsxivJx33iow0Vw5S6SVTrpVq11ysA2Rp7gTfPfktc6zhtXBBC+adRLshf6sG2RfHPZ5EAc4sVZ83yCN00Fk/4kggu40ZTvIEm5g24qtU4KjBrx/BTTH8ifVASAG7gKrnWxJDcU7x8X6Ecczhm3o6YicvsLXWfh3Ch1W0k8x0nXF+0fFxgt4phz8QvypiwCCFKMqXCnqXExjq10beH+UUA7+nG6mdG/Pu0f3LgFcGrl2s0kNNjpmoJ9o4B29CMO8dMT4Q5ox8uitF6fqsrJOr8qnwNbRzv6hSnG5wP+64C7h9lp30hKNtKdWjtdkbuPA19nJ7Tz3zR/ibgARbhb4AlhavcBebmTHcFl2fvYEnW0ox9xMxKBS8btJ+KiEbq9zA4RthQXDhPa0T9TEe69gWupwc6uBUphquXgf+/FrIjweHQS4/pduMe5ERUMHUd9xv8ZR98CxkS4F2n3EUrUZ10EYNw7BWm9x1GiPssi3GgiGRDKWRYZfXlON+dfNbM+GgIwYdwAAAAASUVORK5CYII=";
10
+ export declare const LEAFLET_DEFAULT_ICON_RETINA_URL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAABSCAMAAAAhFXfZAAAC91BMVEVMaXEzeak2f7I4g7g3g7cua5gzeKg8hJo3grY4g7c3grU0gLI2frE0daAubJc2gbQwd6QzeKk2gLMtd5sxdKIua5g1frA2f7IydaM0e6w2fq41fK01eqo3grgubJgta5cxdKI1f7AydaQydaMxc6EubJgvbJkwcZ4ubZkwcJwubZgubJcydqUydKIxapgubJctbJcubZcubJcvbJYubJcvbZkubJctbJctbZcubJg2f7AubJcrbZcubJcubJcua5g3grY0fq8ubJcubJdEkdEwhsw6i88vhswuhcsuhMtBjMgthMsrg8srgss6is8qgcs8i9A9iMYtg8spgcoogMo7hcMngMonf8olfso4gr8kfck5iM8jfMk4iM8he8k1fro7itAgesk2hs8eecgzfLcofssdeMg0hc4cd8g2hcsxeLQbdsgZdcgxeLImfcszhM0vda4xgckzhM4xg84wf8Yxgs4udKsvfcQucqhUndROmdM1fK0wcZ8vb5w0eqpQm9MzeKhXoNVcpdYydKNWn9VZotVKltJFjsIwcJ1Rms9OlslLmtH///8+kc9epdYzd6dbo9VHkMM2f7FHmNBClM8ydqVcpNY9hro3gLM9hLczealQmcw3fa46f7A8gLMxc6I3eagyc6FIldJMl9JSnNRSntNNl9JPnNJFi75UnM9ZodVKksg8kM45jc09e6ZHltFBk883gbRBh7pDk9EwcaBzn784g7dKkcY2i81Om9M7j85Llc81is09g7Q4grY/j9A0eqxKmdFFltBEjcXf6fFImdBCiLxJl9FGlNFBi78yiMxVndEvbpo6js74+vx+psPP3+o/ks5HkcpGmNCjwdZCkNDM3ehYoNJEls+lxNkxh8xHks0+jdC1zd5Lg6r+/v/H2ufz9/o3jM3t8/edvdM/k89Th61OiLBSjbZklbaTt9BfptdjmL1AicBHj8hGk9FAgK1dkLNTjLRekrdClc/k7fM0icy0y9tgp9c4jc2NtM9Dlc8zicxeXZn3AAAAQ3RSTlMAHDdTb4yPA+LtnEQmC4L2EmHqB7XA0d0sr478x4/Yd5i1zOfyPkf1sLVq4Nh3FvjxopQ2/STNuFzUwFIwxKaejILpIBEV9wAABhVJREFUeF6s1NdyFEcYBeBeoQIhRAkLlRDGrhIgY3BJL8CVeKzuyXFzzjkn5ZxzzuScg3PO8cKzu70JkO0LfxdTU//pM9vTu7Xgf6KqOVTb9X7toRrVEfBf1HTVjZccrT/2by1VV928Yty9ZbVuucdz90frG8DBjl9pVApbOstvmMuvVgaNXSfAAd6pGxpy6yxf5ph43pS/4f3uoaGm2rdu72S9xzOvMymkZFq/ptDrk90mhW7e4zl7HLzhxGWPR20xmSxJ/VqldG5m9XhaVOA1DadsNh3Pu5L2N6QtPO/32JpqQBVVk20oy/Pi2s23WEvyfHbe1thadVQttvm7Llf65gGmXK67XtupyoM7HQhmXdLS8oGWJNeOJ3C5fG5XCEJnkez3/oFdsvgJ4l2ANZwhrJKk/7OSXa+3Vw2WJMlKnGkobouYk6T0TyX30klOUnTD9HJ5qpckL3EW/w4XF3Xd0FGywXUrstrclVsqz5Pd/sXFYyDnPdrLcQODmGOK47IZb4CmibmMn+MYRzFZ5jg33ZL/EJrWcszHmANy3ARBK/IXtciJy8VsitPSdE3uuHxzougojcUdr8/32atnz/ev3f/K5wtpxUTpcaI45zusVDpYtZi+jg0oU9b3x74h7+n9ABvYEZeKaVq0sh0AtLKsFtqNBdeT0MrSzwwlq9+x6xAO4tgOtSzbCjrNQQiNvQUbUEubvzBUeGw26yDCsRHCoLkTHDa7IdOLIThs/gHvChszh2CimE8peRs47cxANI0lYNB5y1DljpOF0IhzBDPOZnDOqYYbeGKECbPzWnXludPphw5c2YBq5zlwXphIbO4VDCZ0gnPfUO1TwZoYwAs2ExPCedAu9DAjfQUjzITQb3jNj0KG2Sgt6BHaQUdYzWz+XmBktOHwanXjaSTcwwziBcuMOtwBmqPrTOxFQR/DRKKPqyur0aiW6cULYsx6tBm0jXpR/AUWR6HRq9WVW6MRhIq5jLyjbaCTDCijyYJNpCajdyobP/eTw0iexBAKkJ3gA5KcQb2zBXsIBckn+xVv8jkZSaEFHE+jFEleAEfayRU0MouNoBmB/L50Ai/HSLIHxcrpCvnhSQAuakKp2C/YbCylJjXRVy/z3+Kv/RrNcCo+WUzlVEhzKffnTQnxeN9fWF88fiNCUdSTsaufaChKWInHeysygfpIqagoakW+vV20J8uyl6TyNKEZWV4oRSPyCkWpgOLSbkCObT8o2r6tlG58HQquf6O0v50tB7JM7F4EORd2dx/K0w/KHsVkLPaoYrwgP/y7krr3SSMA4zj+OBgmjYkxcdIJQyQRKgg2viX9Hddi9UBb29LrKR7CVVEEEXWojUkXNyfTNDE14W9gbHJNuhjDettN3ZvbOvdOqCD3Jp/9l+/wJE+9PkYGjx/fqkys3S2rMozM/o2106rfMUINo6hVqz+eu/hd1c4xTg0TAfy5kV+4UG6+IthHTU9woWmxuKNbTfuCSfovBCxq7EtHqvYL4Sm6F8GVxsSXHMQ07TOi1DKtZxjWaaIyi4CXWjxPccUw8WVbMYY5wxC1mzEyXMJWkllpRloi+Kkoq69sxBTlElF6aAxYUbjXNlhlDZilDnM4U5SlN5biRsRHnbx3mbeWjEh4mEyiuJDl5XcWVmX5GvNkFgLWZM5qwsop4/AWfLhU1cR7k1VVvcYCWRkOI6Xy5gmnphCYIkvzuNYzHzosq2oNk2RtSs8khfUOfHIDgR6ysYBaMpl4uEgk2U/oJTs9AaTSwma7dT69geAE2ZpEjUsn2ieJNHeKfrI3EcAGJ2ZaNgVuC8EBctCLc57P5u5led6IOBkIYkuQMrmmjChs4VkfOerHqSBkPzZlhe06RslZ3zMjk2sscqKwY0RcjKK+LWbzd7KiHhkncs/siFJ+V5eXxD34B8nVuJEpGJNmxN2gH3vSvp7J70tF+D1Ej8qUJD1TkErAND2GZwTFg/LubvmgiBG3SOvdlsqFQrkEzJCL1rstlnVFROixZoDDSuXQFHESwVGlcuQcMb/b42NgjLowh5MTDFE3vNB5qStRIErdCQEh6pLPR92anSUb/wAIhldAaDMpGgAAAABJRU5ErkJggg==";
11
+ export declare const LEAFLET_DEFAULT_SHADOW_URL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAQAAAACach9AAACMUlEQVR4Ae3ShY7jQBAE0Aoz/f9/HTMzhg1zrdKUrJbdx+Kd2nD8VNudfsL/Th///dyQN2TH6f3y/BGpC379rV+S+qqetBOxImNQXL8JCAr2V4iMQXHGNJxeCfZXhSRBcQMfvkOWUdtfzlLgAENmZDcmo2TVmt8OSM2eXxBp3DjHSMFutqS7SbmemzBiR+xpKCNUIRkdkkYxhAkyGoBvyQFEJEefwSmmvBfJuJ6aKqKWnAkvGZOaZXTUgFqYULWNSHUckZuR1HIIimUExutRxwzOLROIG4vKmCKQt364mIlhSyzAf1m9lHZHJZrlAOMMztRRiKimp/rpdJDc9Awry5xTZCte7FHtuS8wJgeYGrex28xNTd086Dik7vUMscQOa8y4DoGtCCSkAKlNwpgNtphjrC6MIHUkR6YWxxs6Sc5xqn222mmCRFzIt8lEdKx+ikCtg91qS2WpwVfBelJCiQJwvzixfI9cxZQWgiSJelKnwBElKYtDOb2MFbhmUigbReQBV0Cg4+qMXSxXSyGUn4UbF8l+7qdSGnTC0XLCmahIgUHLhLOhpVCtw4CzYXvLQWQbJNmxoCsOKAxSgBJno75avolkRw8iIAFcsdc02e9iyCd8tHwmeSSoKTowIgvscSGZUOA7PuCN5b2BX9mQM7S0wYhMNU74zgsPBj3HU7wguAfnxxjFQGBE6pwN+GjME9zHY7zGp8wVxMShYX9NXvEWD3HbwJf4giO4CFIQxXScH1/TM+04kkBiAAAAAElFTkSuQmCC";
12
+ export declare function ensureLeafletStyles(): void;
13
+ export declare function configureLeafletDefaultIcons(leaflet: typeof Leaflet | undefined): void;