@tracktor/map 1.6.4 → 1.7.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/README.md +723 -78
- package/dist/components/FeatureCollection/FeatureCollection.d.ts +10 -2
- package/dist/components/FeatureCollection/LineLabel.d.ts +7 -0
- package/dist/features/Itinerary/Itinerary.d.ts +10 -27
- package/dist/features/MapView/MapView.d.ts +1 -1
- package/dist/features/NearestPointItinerary/NearestPointItinary.d.ts +2 -9
- package/dist/main.js +473 -464
- package/dist/main.umd.cjs +4 -4
- package/dist/services/Mapbox/findNearestDestination.d.ts +2 -10
- package/dist/services/OSRM/findNearestDestination.d.ts +3 -11
- package/dist/services/core/fetchNearestInChunkFactory.d.ts +9 -5
- package/dist/services/core/interface.d.ts +1 -1
- package/dist/types/MapViewProps.d.ts +89 -156
- package/package.json +1 -1
package/dist/main.umd.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
(function(){"use strict";try{if(typeof document<"u"){var o=document.createElement("style");o.appendChild(document.createTextNode(`.mapboxgl-map{font:12px/20px Helvetica Neue,Arial,Helvetica,sans-serif;overflow:hidden;position:relative;-webkit-tap-highlight-color:rgb(0 0 0/0)}.mapboxgl-canvas{left:0;position:absolute;top:0}.mapboxgl-map:-webkit-full-screen{height:100%;width:100%}.mapboxgl-canary{background-color:salmon}.mapboxgl-canvas-container.mapboxgl-interactive,.mapboxgl-ctrl-group button.mapboxgl-ctrl-compass{cursor:grab;-webkit-user-select:none;user-select:none}.mapboxgl-canvas-container.mapboxgl-interactive.mapboxgl-track-pointer{cursor:pointer}.mapboxgl-canvas-container.mapboxgl-interactive:active,.mapboxgl-ctrl-group button.mapboxgl-ctrl-compass:active{cursor:grabbing}.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate,.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate .mapboxgl-canvas{touch-action:pan-x pan-y}.mapboxgl-canvas-container.mapboxgl-touch-drag-pan,.mapboxgl-canvas-container.mapboxgl-touch-drag-pan .mapboxgl-canvas{touch-action:pinch-zoom}.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan,.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan .mapboxgl-canvas{touch-action:none}.mapboxgl-ctrl-bottom,.mapboxgl-ctrl-bottom-left,.mapboxgl-ctrl-bottom-right,.mapboxgl-ctrl-left,.mapboxgl-ctrl-right,.mapboxgl-ctrl-top,.mapboxgl-ctrl-top-left,.mapboxgl-ctrl-top-right{pointer-events:none;position:absolute;z-index:2}.mapboxgl-ctrl-top-left{left:0;top:0}.mapboxgl-ctrl-top{left:50%;top:0;transform:translate(-50%)}.mapboxgl-ctrl-top-right{right:0;top:0}.mapboxgl-ctrl-right{right:0;top:50%;transform:translateY(-50%)}.mapboxgl-ctrl-bottom-right{bottom:0;right:0}.mapboxgl-ctrl-bottom{bottom:0;left:50%;transform:translate(-50%)}.mapboxgl-ctrl-bottom-left{bottom:0;left:0}.mapboxgl-ctrl-left{left:0;top:50%;transform:translateY(-50%)}.mapboxgl-ctrl{clear:both;pointer-events:auto;transform:translate(0)}.mapboxgl-ctrl-top-left .mapboxgl-ctrl{float:left;margin:10px 0 0 10px}.mapboxgl-ctrl-top .mapboxgl-ctrl{float:left;margin:10px 0}.mapboxgl-ctrl-top-right .mapboxgl-ctrl{float:right;margin:10px 10px 0 0}.mapboxgl-ctrl-bottom-right .mapboxgl-ctrl,.mapboxgl-ctrl-right .mapboxgl-ctrl{float:right;margin:0 10px 10px 0}.mapboxgl-ctrl-bottom .mapboxgl-ctrl{float:left;margin:10px 0}.mapboxgl-ctrl-bottom-left .mapboxgl-ctrl,.mapboxgl-ctrl-left .mapboxgl-ctrl{float:left;margin:0 0 10px 10px}.mapboxgl-ctrl-group{background:#fff;border-radius:4px}.mapboxgl-ctrl-group:not(:empty){box-shadow:0 0 0 2px #0000001a}@media(-ms-high-contrast:active){.mapboxgl-ctrl-group:not(:empty){box-shadow:0 0 0 2px ButtonText}}.mapboxgl-ctrl-group button{background-color:initial;border:0;box-sizing:border-box;cursor:pointer;display:block;height:29px;outline:none;overflow:hidden;padding:0;width:29px}.mapboxgl-ctrl-group button+button{border-top:1px solid #ddd}.mapboxgl-ctrl button .mapboxgl-ctrl-icon{background-position:50%;background-repeat:no-repeat;display:block;height:100%;width:100%}@media(-ms-high-contrast:active){.mapboxgl-ctrl-icon{background-color:initial}.mapboxgl-ctrl-group button+button{border-top:1px solid ButtonText}}.mapboxgl-ctrl-attrib-button:focus,.mapboxgl-ctrl-group button:focus{box-shadow:0 0 2px 2px #0096ff}.mapboxgl-ctrl button:disabled{cursor:not-allowed}.mapboxgl-ctrl button:disabled .mapboxgl-ctrl-icon{opacity:.25}.mapboxgl-ctrl-group button:first-child{border-radius:4px 4px 0 0}.mapboxgl-ctrl-group button:last-child{border-radius:0 0 4px 4px}.mapboxgl-ctrl-group button:only-child{border-radius:inherit}.mapboxgl-ctrl button:not(:disabled):hover{background-color:#0000000d}.mapboxgl-ctrl-group button:focus:focus-visible{box-shadow:0 0 2px 2px #0096ff}.mapboxgl-ctrl-group button:focus:not(:focus-visible){box-shadow:none}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E")}@media(-ms-high-contrast:active){.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E")}}@media(-ms-high-contrast:black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E")}}.mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E")}@media(-ms-high-contrast:active){.mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E")}}@media(-ms-high-contrast:black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E")}}.mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E%3Cpath id='south' d='M10.5 16l4 8 4-8h-8z' fill='%23ccc'/%3E%3C/svg%3E")}@media(-ms-high-contrast:active){.mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E%3Cpath id='south' d='M10.5 16l4 8 4-8h-8z' fill='%23999'/%3E%3C/svg%3E")}}@media(-ms-high-contrast:black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 29 29'%3E%3Cpath d='M10.5 14l4-8 4 8h-8z'/%3E%3Cpath id='south' d='M10.5 16l4 8 4-8h-8z' fill='%23ccc'/%3E%3C/svg%3E")}}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-buildings-toggle .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg fill='none' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3E%3Cpath d='M3.3335 11.6666C3.3335 12.5871 4.07969 13.3333 5.00016 13.3333C5.92064 13.3333 6.66683 12.5871 6.66683 11.6666L6.66683 6.66659L11.6668 6.66659C12.5873 6.66659 13.3335 5.92039 13.3335 4.99992C13.3335 4.07944 12.5873 3.33325 11.6668 3.33325H3.3335V11.6666Z' fill='currentColor'/%3E%3Cpath d='M26.6668 11.6666C26.6668 12.5871 25.9206 13.3333 25.0002 13.3333C24.0797 13.3333 23.3335 12.5871 23.3335 11.6666L23.3335 6.66659L18.3335 6.66659C17.413 6.66659 16.6668 5.92039 16.6668 4.99992C16.6668 4.07944 17.413 3.33325 18.3335 3.33325H26.6668L26.6668 11.6666Z' fill='currentColor'/%3E%3Cpath d='M13.3335 24.9999C13.3335 25.9204 12.5873 26.6666 11.6668 26.6666H3.3335V18.3333C3.3335 17.4128 4.07969 16.6666 5.00016 16.6666C5.92064 16.6666 6.66683 17.4128 6.66683 18.3333V23.3333H11.6668C12.5873 23.3333 13.3335 24.0794 13.3335 24.9999Z' fill='currentColor'/%3E%3Cpath d='M18.3335 26.6666C17.413 26.6666 16.6668 25.9204 16.6668 24.9999C16.6668 24.0794 17.413 23.3333 18.3335 23.3333H23.3335V18.3333C23.3335 17.4128 24.0797 16.6666 25.0002 16.6666C25.9206 16.6666 26.6668 17.4128 26.6668 18.3333V26.6666H18.3335Z' fill='currentColor'/%3E%3C/svg%3E");background-size:26px 26px}.mapboxgl-ctrl button.mapboxgl-ctrl-buildings-toggle.mapboxgl-ctrl-level-button-selected .mapboxgl-ctrl-icon{filter:invert(1) brightness(1)}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23aaa'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' fill='%23f00'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active-error .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e58978'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2' display='none'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background-error .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e54e33'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2' display='none'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-waiting .mapboxgl-ctrl-icon{animation:mapboxgl-spin 2s linear infinite}@media(-ms-high-contrast:active){.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23fff'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23999'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' fill='%23f00'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active-error .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e58978'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2' display='none'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background-error .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e54e33'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2' display='none'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E")}}@media(-ms-high-contrast:black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23000'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' display='none'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23666'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle id='dot' cx='10' cy='10' r='2'/%3E%3Cpath id='stroke' d='M14 5l1 1-9 9-1-1 9-9z' fill='%23f00'/%3E%3C/svg%3E")}}@keyframes mapboxgl-spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}a.mapboxgl-ctrl-logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' fill-rule='evenodd' viewBox='0 0 88 23'%3E%3Cdefs%3E%3Cpath id='logo' d='M11.5 2.25c5.105 0 9.25 4.145 9.25 9.25s-4.145 9.25-9.25 9.25-9.25-4.145-9.25-9.25 4.145-9.25 9.25-9.25zM6.997 15.983c-.051-.338-.828-5.802 2.233-8.873a4.395 4.395 0 013.13-1.28c1.27 0 2.49.51 3.39 1.42.91.9 1.42 2.12 1.42 3.39 0 1.18-.449 2.301-1.28 3.13C12.72 16.93 7 16 7 16l-.003-.017zM15.3 10.5l-2 .8-.8 2-.8-2-2-.8 2-.8.8-2 .8 2 2 .8z'/%3E%3Cpath id='text' d='M50.63 8c.13 0 .23.1.23.23V9c.7-.76 1.7-1.18 2.73-1.18 2.17 0 3.95 1.85 3.95 4.17s-1.77 4.19-3.94 4.19c-1.04 0-2.03-.43-2.74-1.18v3.77c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01 0 .01 0 .01-.01.13 0 .22.1.22.22v7.55c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V15c-.7.76-1.69 1.19-2.73 1.19-2.17 0-3.94-1.87-3.94-4.19 0-2.32 1.77-4.19 3.94-4.19 1.03 0 2.02.43 2.73 1.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24 4.24 0 00-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 004.17 3.3c2.35 0 4.26-1.87 4.26-4.19 0-2.32-1.9-4.17-4.27-4.17zM60.63 5c.13 0 .23.1.23.23v3.76c.7-.76 1.7-1.18 2.73-1.18 1.88 0 3.45 1.4 3.84 3.28.13.59.13 1.2 0 1.8-.39 1.88-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.77c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34 11h-1.4c-.13 0-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.68c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.2c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.68c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.5c0 .13-.1.23-.23.23zm53.615 0h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213 0 01-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 01.3-.17h1.6c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.65 2.43 3.7c0 .05.01.09.01.13 0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.42-1.44 2.42a.34.34 0 01-.3.17zm-7.12-1.49c-1.33 0-2.42-1.12-2.42-2.51 0-1.39 1.08-2.52 2.42-2.52 1.33 0 2.42 1.12 2.42 2.51 0 1.39-1.08 2.51-2.42 2.52zm-19.865 0c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51 0 1.39-1.07 2.52-2.39 2.53zm-8.11-2.48c-.01 1.37-1.09 2.47-2.41 2.47s-2.42-1.12-2.42-2.51c0-1.39 1.08-2.52 2.4-2.52 1.33 0 2.39 1.11 2.41 2.48l.02.08zm18.12 2.47c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51c0 1.39-1.09 2.51-2.42 2.51z'/%3E%3C/defs%3E%3Cmask id='clip'%3E%3Crect x='0' y='0' width='100%25' height='100%25' fill='white'/%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/mask%3E%3Cg id='outline' opacity='0.3' stroke='%23000' stroke-width='3'%3E%3Ccircle mask='url(%23clip)' cx='11.5' cy='11.5' r='9.25'/%3E%3Cuse xlink:href='%23text' mask='url(%23clip)'/%3E%3C/g%3E%3Cg id='fill' opacity='0.9' fill='%23fff'%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/g%3E%3C/svg%3E");background-repeat:no-repeat;cursor:pointer;display:block;height:23px;margin:0 0 -4px -4px;overflow:hidden;width:88px}a.mapboxgl-ctrl-logo.mapboxgl-compact{width:23px}@media(-ms-high-contrast:active){a.mapboxgl-ctrl-logo{background-color:initial;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' fill-rule='evenodd' viewBox='0 0 88 23'%3E%3Cdefs%3E%3Cpath id='logo' d='M11.5 2.25c5.105 0 9.25 4.145 9.25 9.25s-4.145 9.25-9.25 9.25-9.25-4.145-9.25-9.25 4.145-9.25 9.25-9.25zM6.997 15.983c-.051-.338-.828-5.802 2.233-8.873a4.395 4.395 0 013.13-1.28c1.27 0 2.49.51 3.39 1.42.91.9 1.42 2.12 1.42 3.39 0 1.18-.449 2.301-1.28 3.13C12.72 16.93 7 16 7 16l-.003-.017zM15.3 10.5l-2 .8-.8 2-.8-2-2-.8 2-.8.8-2 .8 2 2 .8z'/%3E%3Cpath id='text' d='M50.63 8c.13 0 .23.1.23.23V9c.7-.76 1.7-1.18 2.73-1.18 2.17 0 3.95 1.85 3.95 4.17s-1.77 4.19-3.94 4.19c-1.04 0-2.03-.43-2.74-1.18v3.77c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01 0 .01 0 .01-.01.13 0 .22.1.22.22v7.55c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V15c-.7.76-1.69 1.19-2.73 1.19-2.17 0-3.94-1.87-3.94-4.19 0-2.32 1.77-4.19 3.94-4.19 1.03 0 2.02.43 2.73 1.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24 4.24 0 00-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 004.17 3.3c2.35 0 4.26-1.87 4.26-4.19 0-2.32-1.9-4.17-4.27-4.17zM60.63 5c.13 0 .23.1.23.23v3.76c.7-.76 1.7-1.18 2.73-1.18 1.88 0 3.45 1.4 3.84 3.28.13.59.13 1.2 0 1.8-.39 1.88-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.77c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34 11h-1.4c-.13 0-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.68c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.2c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.68c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.5c0 .13-.1.23-.23.23zm53.615 0h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213 0 01-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 01.3-.17h1.6c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.65 2.43 3.7c0 .05.01.09.01.13 0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.42-1.44 2.42a.34.34 0 01-.3.17zm-7.12-1.49c-1.33 0-2.42-1.12-2.42-2.51 0-1.39 1.08-2.52 2.42-2.52 1.33 0 2.42 1.12 2.42 2.51 0 1.39-1.08 2.51-2.42 2.52zm-19.865 0c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51 0 1.39-1.07 2.52-2.39 2.53zm-8.11-2.48c-.01 1.37-1.09 2.47-2.41 2.47s-2.42-1.12-2.42-2.51c0-1.39 1.08-2.52 2.4-2.52 1.33 0 2.39 1.11 2.41 2.48l.02.08zm18.12 2.47c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51c0 1.39-1.09 2.51-2.42 2.51z'/%3E%3C/defs%3E%3Cmask id='clip'%3E%3Crect x='0' y='0' width='100%25' height='100%25' fill='white'/%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/mask%3E%3Cg id='outline' opacity='1' stroke='%23000' stroke-width='3'%3E%3Ccircle mask='url(%23clip)' cx='11.5' cy='11.5' r='9.25'/%3E%3Cuse xlink:href='%23text' mask='url(%23clip)'/%3E%3C/g%3E%3Cg id='fill' opacity='1' fill='%23fff'%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/g%3E%3C/svg%3E")}}@media(-ms-high-contrast:black-on-white){a.mapboxgl-ctrl-logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' fill-rule='evenodd' viewBox='0 0 88 23'%3E%3Cdefs%3E%3Cpath id='logo' d='M11.5 2.25c5.105 0 9.25 4.145 9.25 9.25s-4.145 9.25-9.25 9.25-9.25-4.145-9.25-9.25 4.145-9.25 9.25-9.25zM6.997 15.983c-.051-.338-.828-5.802 2.233-8.873a4.395 4.395 0 013.13-1.28c1.27 0 2.49.51 3.39 1.42.91.9 1.42 2.12 1.42 3.39 0 1.18-.449 2.301-1.28 3.13C12.72 16.93 7 16 7 16l-.003-.017zM15.3 10.5l-2 .8-.8 2-.8-2-2-.8 2-.8.8-2 .8 2 2 .8z'/%3E%3Cpath id='text' d='M50.63 8c.13 0 .23.1.23.23V9c.7-.76 1.7-1.18 2.73-1.18 2.17 0 3.95 1.85 3.95 4.17s-1.77 4.19-3.94 4.19c-1.04 0-2.03-.43-2.74-1.18v3.77c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01 0 .01 0 .01-.01.13 0 .22.1.22.22v7.55c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V15c-.7.76-1.69 1.19-2.73 1.19-2.17 0-3.94-1.87-3.94-4.19 0-2.32 1.77-4.19 3.94-4.19 1.03 0 2.02.43 2.73 1.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24 4.24 0 00-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 004.17 3.3c2.35 0 4.26-1.87 4.26-4.19 0-2.32-1.9-4.17-4.27-4.17zM60.63 5c.13 0 .23.1.23.23v3.76c.7-.76 1.7-1.18 2.73-1.18 1.88 0 3.45 1.4 3.84 3.28.13.59.13 1.2 0 1.8-.39 1.88-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.77c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34 11h-1.4c-.13 0-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.68c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.2c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.68c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.5c0 .13-.1.23-.23.23zm53.615 0h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213 0 01-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 01.3-.17h1.6c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.65 2.43 3.7c0 .05.01.09.01.13 0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.42-1.44 2.42a.34.34 0 01-.3.17zm-7.12-1.49c-1.33 0-2.42-1.12-2.42-2.51 0-1.39 1.08-2.52 2.42-2.52 1.33 0 2.42 1.12 2.42 2.51 0 1.39-1.08 2.51-2.42 2.52zm-19.865 0c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51 0 1.39-1.07 2.52-2.39 2.53zm-8.11-2.48c-.01 1.37-1.09 2.47-2.41 2.47s-2.42-1.12-2.42-2.51c0-1.39 1.08-2.52 2.4-2.52 1.33 0 2.39 1.11 2.41 2.48l.02.08zm18.12 2.47c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51c0 1.39-1.09 2.51-2.42 2.51z'/%3E%3C/defs%3E%3Cmask id='clip'%3E%3Crect x='0' y='0' width='100%25' height='100%25' fill='white'/%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/mask%3E%3Cg id='outline' opacity='1' stroke='%23fff' stroke-width='3' fill='%23fff'%3E%3Ccircle mask='url(%23clip)' cx='11.5' cy='11.5' r='9.25'/%3E%3Cuse xlink:href='%23text' mask='url(%23clip)'/%3E%3C/g%3E%3Cg id='fill' opacity='1' fill='%23000'%3E%3Cuse xlink:href='%23logo'/%3E%3Cuse xlink:href='%23text'/%3E%3C/g%3E%3C/svg%3E")}}.mapboxgl-ctrl.mapboxgl-ctrl-attrib{background-color:#ffffff80;margin:0;padding:0 5px}@media screen{.mapboxgl-ctrl-attrib.mapboxgl-compact{background-color:#fff;border-radius:12px;box-sizing:initial;margin:10px;min-height:20px;padding:2px 24px 2px 0;position:relative}.mapboxgl-ctrl-attrib.mapboxgl-compact-show{padding:2px 28px 2px 8px;visibility:visible}.mapboxgl-ctrl-bottom-left>.mapboxgl-ctrl-attrib.mapboxgl-compact-show,.mapboxgl-ctrl-left>.mapboxgl-ctrl-attrib.mapboxgl-compact-show,.mapboxgl-ctrl-top-left>.mapboxgl-ctrl-attrib.mapboxgl-compact-show{border-radius:12px;padding:2px 8px 2px 28px}.mapboxgl-ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-inner{display:none}.mapboxgl-ctrl-attrib-button{background-color:#ffffff80;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E");border:0;border-radius:12px;box-sizing:border-box;cursor:pointer;display:none;height:24px;outline:none;position:absolute;right:0;top:0;width:24px}.mapboxgl-ctrl-bottom-left .mapboxgl-ctrl-attrib-button,.mapboxgl-ctrl-left .mapboxgl-ctrl-attrib-button,.mapboxgl-ctrl-top-left .mapboxgl-ctrl-attrib-button{left:0}.mapboxgl-ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-button,.mapboxgl-ctrl-attrib.mapboxgl-compact-show .mapboxgl-ctrl-attrib-inner{display:block}.mapboxgl-ctrl-attrib.mapboxgl-compact-show .mapboxgl-ctrl-attrib-button{background-color:#0000000d}.mapboxgl-ctrl-bottom-right>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{bottom:0;right:0}.mapboxgl-ctrl-right>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{right:0}.mapboxgl-ctrl-top-right>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{right:0;top:0}.mapboxgl-ctrl-top-left>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{left:0;top:0}.mapboxgl-ctrl-bottom-left>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{bottom:0;left:0}.mapboxgl-ctrl-left>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{left:0}}@media screen and (-ms-high-contrast:active){.mapboxgl-ctrl-attrib.mapboxgl-compact:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd' fill='%23fff'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E")}}@media screen and (-ms-high-contrast:black-on-white){.mapboxgl-ctrl-attrib.mapboxgl-compact:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E")}}.mapboxgl-ctrl-attrib a{color:#000000bf;text-decoration:none}.mapboxgl-ctrl-attrib a:hover{color:inherit;text-decoration:underline}.mapboxgl-ctrl-attrib .mapbox-improve-map{font-weight:700;margin-left:2px}.mapboxgl-attrib-empty{display:none}.mapboxgl-ctrl-scale{background-color:#ffffffbf;border:2px solid #333;border-top:#333;box-sizing:border-box;color:#333;font-size:10px;padding:0 5px;white-space:nowrap}.mapboxgl-popup{display:flex;left:0;pointer-events:none;position:absolute;top:0;will-change:transform}.mapboxgl-popup-anchor-top,.mapboxgl-popup-anchor-top-left,.mapboxgl-popup-anchor-top-right{flex-direction:column}.mapboxgl-popup-anchor-bottom,.mapboxgl-popup-anchor-bottom-left,.mapboxgl-popup-anchor-bottom-right{flex-direction:column-reverse}.mapboxgl-popup-anchor-left{flex-direction:row}.mapboxgl-popup-anchor-right{flex-direction:row-reverse}.mapboxgl-popup-tip{border:10px solid #0000;height:0;width:0;z-index:1}.mapboxgl-popup-anchor-top .mapboxgl-popup-tip{align-self:center;border-bottom-color:#fff;border-top:none}.mapboxgl-popup-anchor-top-left .mapboxgl-popup-tip{align-self:flex-start;border-bottom-color:#fff;border-left:none;border-top:none}.mapboxgl-popup-anchor-top-right .mapboxgl-popup-tip{align-self:flex-end;border-bottom-color:#fff;border-right:none;border-top:none}.mapboxgl-popup-anchor-bottom .mapboxgl-popup-tip{align-self:center;border-bottom:none;border-top-color:#fff}.mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-tip{align-self:flex-start;border-bottom:none;border-left:none;border-top-color:#fff}.mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-tip{align-self:flex-end;border-bottom:none;border-right:none;border-top-color:#fff}.mapboxgl-popup-anchor-left .mapboxgl-popup-tip{align-self:center;border-left:none;border-right-color:#fff}.mapboxgl-popup-anchor-right .mapboxgl-popup-tip{align-self:center;border-left-color:#fff;border-right:none}.mapboxgl-popup-close-button{background-color:initial;border:0;border-radius:0 3px 0 0;cursor:pointer;position:absolute;right:0;top:0}.mapboxgl-popup-close-button:hover{background-color:#0000000d}.mapboxgl-popup-content{background:#fff;border-radius:3px;box-shadow:0 1px 2px #0000001a;padding:10px 10px 15px;pointer-events:auto;position:relative}.mapboxgl-popup-anchor-top-left .mapboxgl-popup-content{border-top-left-radius:0}.mapboxgl-popup-anchor-top-right .mapboxgl-popup-content{border-top-right-radius:0}.mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-content{border-bottom-left-radius:0}.mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-content{border-bottom-right-radius:0}.mapboxgl-popup-track-pointer{display:none}.mapboxgl-popup-track-pointer *{pointer-events:none;-webkit-user-select:none;user-select:none}.mapboxgl-map:hover .mapboxgl-popup-track-pointer{display:flex}.mapboxgl-map:active .mapboxgl-popup-track-pointer{display:none}.mapboxgl-marker{left:0;opacity:1;position:absolute;top:0;transition:opacity .2s;will-change:transform}.mapboxgl-user-location-dot,.mapboxgl-user-location-dot:before{background-color:#1da1f2;border-radius:50%;height:15px;width:15px}.mapboxgl-user-location-dot:before{animation:mapboxgl-user-location-dot-pulse 2s infinite;content:"";position:absolute}.mapboxgl-user-location-dot:after{border:2px solid #fff;border-radius:50%;box-shadow:0 0 3px #00000059;box-sizing:border-box;content:"";height:19px;left:-2px;position:absolute;top:-2px;width:19px}.mapboxgl-user-location-show-heading .mapboxgl-user-location-heading{height:0;width:0}.mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:after,.mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:before{border-bottom:7.5px solid #4aa1eb;content:"";position:absolute}.mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:before{border-left:7.5px solid #0000;transform:translateY(-28px) skewY(-20deg)}.mapboxgl-user-location-show-heading .mapboxgl-user-location-heading:after{border-right:7.5px solid #0000;transform:translate(7.5px,-28px) skewY(20deg)}@keyframes mapboxgl-user-location-dot-pulse{0%{opacity:1;transform:scale(1)}70%{opacity:0;transform:scale(3)}to{opacity:0;transform:scale(1)}}.mapboxgl-user-location-dot-stale{background-color:#aaa}.mapboxgl-user-location-dot-stale:after{display:none}.mapboxgl-user-location-accuracy-circle{background-color:#1da1f233;border-radius:100%;height:1px;width:1px}.mapboxgl-crosshair,.mapboxgl-crosshair .mapboxgl-interactive,.mapboxgl-crosshair .mapboxgl-interactive:active{cursor:crosshair}.mapboxgl-boxzoom{background:#fff;border:2px dotted #202020;height:0;left:0;opacity:.5;position:absolute;top:0;width:0}@media print{.mapbox-improve-map{display:none}}.mapboxgl-scroll-zoom-blocker,.mapboxgl-touch-pan-blocker{align-items:center;background:#000000b3;color:#fff;display:flex;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif;height:100%;justify-content:center;left:0;opacity:0;pointer-events:none;position:absolute;text-align:center;top:0;transition:opacity .75s ease-in-out;transition-delay:1s;width:100%}.mapboxgl-scroll-zoom-blocker-show,.mapboxgl-touch-pan-blocker-show{opacity:1;transition:opacity .1s ease-in-out}.mapboxgl-canvas-container.mapboxgl-touch-pan-blocker-override.mapboxgl-scrollable-page,.mapboxgl-canvas-container.mapboxgl-touch-pan-blocker-override.mapboxgl-scrollable-page .mapboxgl-canvas{touch-action:pan-x pan-y}.mapboxgl-ctrl-separator{background-color:#e0e0e0;height:1px}.mapboxgl-ctrl button.mapboxgl-ctrl-level-button{color:#333;font-size:18px;font-weight:700;height:50px;width:50px}.mapboxgl-ctrl button.mapboxgl-ctrl-level-button:first-child{border-top-left-radius:8px;border-top-right-radius:8px}.mapboxgl-ctrl button.mapboxgl-ctrl-level-button:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}.mapboxgl-ctrl button.mapboxgl-ctrl-level-button:hover{background-color:#f5f5f5}.mapboxgl-ctrl button.mapboxgl-ctrl-level-button-selected{background-color:#4a5568;color:#fff}.mapboxgl-ctrl button.mapboxgl-ctrl-level-button-selected:hover{background-color:#2d3748}`)),document.head.appendChild(o)}}catch(t){console.error("vite-plugin-css-injected-by-js",t)}})();
|
|
2
|
-
(function(
|
|
2
|
+
(function(v,d){typeof exports=="object"&&typeof module<"u"?d(exports,require("react"),require("@mui/x-license"),require("mapbox-gl"),require("@tracktor/design-system"),require("react-map-gl"),require("@tracktor/react-utils")):typeof define=="function"&&define.amd?define(["exports","react","@mui/x-license","mapbox-gl","@tracktor/design-system","react-map-gl","@tracktor/react-utils"],d):(v=typeof globalThis<"u"?globalThis:v||self,d(v["@tracktor/map"]={},v.React,v.muiXLicense,v.mapboxgl,v.designSystem,v.MapboxMap,v.reactUtils))})(this,(function(v,d,Re,ce,w,A,C){"use strict";var J={exports:{}},D={};/**
|
|
3
3
|
* @license React
|
|
4
4
|
* react-jsx-runtime.production.js
|
|
5
5
|
*
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* This source code is licensed under the MIT license found in the
|
|
9
9
|
* LICENSE file in the root directory of this source tree.
|
|
10
|
-
*/var ie;function xe(){if(ie)return D;ie=1;var e=Symbol.for("react.transitional.element"),
|
|
10
|
+
*/var ie;function xe(){if(ie)return D;ie=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function n(a,o,l){var s=null;if(l!==void 0&&(s=""+l),o.key!==void 0&&(s=""+o.key),"key"in o){l={};for(var i in o)i!=="key"&&(l[i]=o[i])}else l=o;return o=l.ref,{$$typeof:e,type:a,key:s,ref:o!==void 0?o:null,props:l}}return D.Fragment=t,D.jsx=n,D.jsxs=n,D}var U={};/**
|
|
11
11
|
* @license React
|
|
12
12
|
* react-jsx-runtime.development.js
|
|
13
13
|
*
|
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
*
|
|
16
16
|
* This source code is licensed under the MIT license found in the
|
|
17
17
|
* LICENSE file in the root directory of this source tree.
|
|
18
|
-
*/var
|
|
18
|
+
*/var ue;function Te(){return ue||(ue=1,process.env.NODE_ENV!=="production"&&(function(){function e(r){if(r==null)return null;if(typeof r=="function")return r.$$typeof===W?null:r.displayName||r.name||null;if(typeof r=="string")return r;switch(r){case O:return"Fragment";case Y:return"Profiler";case Z:return"StrictMode";case B:return"Suspense";case G:return"SuspenseList";case P:return"Activity"}if(typeof r=="object")switch(typeof r.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),r.$$typeof){case T:return"Portal";case se:return r.displayName||"Context";case oe:return(r._context.displayName||"Context")+".Consumer";case ae:var c=r.render;return r=r.displayName,r||(r=c.displayName||c.name||"",r=r!==""?"ForwardRef("+r+")":"ForwardRef"),r;case j:return c=r.displayName||null,c!==null?c:e(r.type)||"Memo";case S:c=r._payload,r=r._init;try{return e(r(c))}catch{}}return null}function t(r){return""+r}function n(r){try{t(r);var c=!1}catch{c=!0}if(c){c=console;var y=c.error,m=typeof Symbol=="function"&&Symbol.toStringTag&&r[Symbol.toStringTag]||r.constructor.name||"Object";return y.call(c,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",m),t(r)}}function a(r){if(r===O)return"<>";if(typeof r=="object"&&r!==null&&r.$$typeof===S)return"<...>";try{var c=e(r);return c?"<"+c+">":"<...>"}catch{return"<...>"}}function o(){var r=N.A;return r===null?null:r.getOwner()}function l(){return Error("react-stack-top-frame")}function s(r){if(F.call(r,"key")){var c=Object.getOwnPropertyDescriptor(r,"key").get;if(c&&c.isReactWarning)return!1}return r.key!==void 0}function i(r,c){function y(){H||(H=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",c))}y.isReactWarning=!0,Object.defineProperty(r,"key",{get:y,configurable:!0})}function f(){var r=e(this.type);return Q[r]||(Q[r]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),r=this.props.ref,r!==void 0?r:null}function g(r,c,y,m,u,k){var E=y.ref;return r={$$typeof:x,type:r,key:c,props:y,_owner:m},(E!==void 0?E:null)!==null?Object.defineProperty(r,"ref",{enumerable:!1,get:f}):Object.defineProperty(r,"ref",{enumerable:!1,value:null}),r._store={},Object.defineProperty(r._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(r,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(r,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:u}),Object.defineProperty(r,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:k}),Object.freeze&&(Object.freeze(r.props),Object.freeze(r)),r}function h(r,c,y,m,u,k){var E=c.children;if(E!==void 0)if(m)if(M(E)){for(m=0;m<E.length;m++)R(E[m]);Object.freeze&&Object.freeze(E)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else R(E);if(F.call(c,"key")){E=e(r);var L=Object.keys(c).filter(function(le){return le!=="key"});m=0<L.length?"{key: someKey, "+L.join(": ..., ")+": ...}":"{key: someKey}",q[E+m]||(L=0<L.length?"{"+L.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
|
|
19
19
|
let props = %s;
|
|
20
20
|
<%s {...props} />
|
|
21
21
|
React keys must be passed directly to JSX without using spread:
|
|
22
22
|
let props = %s;
|
|
23
|
-
<%s key={someKey} {...props} />`,E,p,u,p),Q[p+E]=!0)}if(p=null,m!==void 0&&(n(m),p=""+m),s(i)&&(n(i.key),p=""+i.key),"key"in i){m={};for(var T in i)T!=="key"&&(m[T]=i[T])}else m=i;return p&&c(m,typeof t=="function"?t.displayName||t.name||"Unknown":t),y(t,p,m,o(),M,L)}function v(t){b(t)?t._store&&(t._store.validated=1):typeof t=="object"&&t!==null&&t.$$typeof===W&&(t._payload.status==="fulfilled"?b(t._payload.value)&&t._payload.value._store&&(t._payload.value._store.validated=1):t._store&&(t._store.validated=1))}function b(t){return typeof t=="object"&&t!==null&&t.$$typeof===x}var R=d,x=Symbol.for("react.transitional.element"),N=Symbol.for("react.portal"),A=Symbol.for("react.fragment"),X=Symbol.for("react.strict_mode"),Y=Symbol.for("react.profiler"),re=Symbol.for("react.consumer"),ne=Symbol.for("react.context"),z=Symbol.for("react.forward_ref"),B=Symbol.for("react.suspense"),G=Symbol.for("react.suspense_list"),oe=Symbol.for("react.memo"),W=Symbol.for("react.lazy"),Z=Symbol.for("react.activity"),se=Symbol.for("react.client.reference"),O=R.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,C=Object.prototype.hasOwnProperty,ae=Array.isArray,k=console.createTask?console.createTask:function(){return null};R={react_stack_bottom_frame:function(t){return t()}};var I,H={},F=R.react_stack_bottom_frame.bind(R,l)(),P=k(a(l)),Q={};U.Fragment=A,U.jsx=function(t,i,m){var E=1e4>O.recentlyCreatedOwnerStacks++;return h(t,i,m,!1,E?Error("react-stack-top-frame"):F,E?k(a(t)):P)},U.jsxs=function(t,i,m){var E=1e4>O.recentlyCreatedOwnerStacks++;return h(t,i,m,!0,E?Error("react-stack-top-frame"):F,E?k(a(t)):P)}})()),U}var ue;function Se(){return ue||(ue=1,process.env.NODE_ENV==="production"?V.exports=xe():V.exports=Te()),V.exports}var f=Se();const ke=d.createContext({licenceMapbox:"",licenseMuiX:""}),je=({children:e,licenseMuiX:r,licenceMapbox:n})=>{d.useEffect(()=>{r&&ve.LicenseInfo.setLicenseKey(r)},[r]);const a=d.useMemo(()=>({licenceMapbox:n,licenseMuiX:r}),[r,n]);return n&&(le.accessToken=n),f.jsx(ke.Provider,{value:a,children:e})},we=e=>w.isArray(e)?{features:e,type:"FeatureCollection"}:e.type==="FeatureCollection"?e:{features:[e],type:"FeatureCollection"},de=({features:e})=>{if(!e)return null;const r=we(e),n=r.features.filter(o=>o.geometry.type==="Polygon"||o.geometry.type==="MultiPolygon"),a=r.features.filter(o=>o.geometry.type==="LineString"||o.geometry.type==="MultiLineString");return f.jsxs(f.Fragment,{children:[n.length>0&&f.jsx(S.Source,{id:"features-polygon",type:"geojson",data:{features:n,type:"FeatureCollection"},children:f.jsx(S.Layer,{id:"polygon-fill",type:"fill",paint:{"fill-color":["coalesce",["get","color"],"#4ADE80"],"fill-opacity":.4}})}),a.length>0&&f.jsx(S.Source,{id:"features-line",type:"geojson",data:{features:a,type:"FeatureCollection"},children:f.jsx(S.Layer,{id:"line-stroke",type:"line",paint:{"line-color":["coalesce",["get","color"],"#3B82F6"],"line-opacity":.9,"line-width":3}})})]})},Ae="#000000",Ce="#FFFFFF",K={default:"#009ba6",primary:"#3F83F8",secondary:"#9C27B0",success:"#4CAF50",warning:"#FF9800"},Pe=e=>e in K,Ne=({color:e,variant:r})=>{const{palette:n}=j.useTheme(),a=n.mode==="dark"?Ae:Ce,o=r&&Pe(r)&&K[r]||e||(w.isString(r)?r:K.default);return f.jsx(j.Box,{component:"div",style:{backgroundColor:a,border:`7px solid ${o}`,borderRadius:"50%",boxShadow:"0 0 4px rgba(0,0,0,0.3)",height:28,width:28}})},Oe=e=>({".mapboxgl-popup-close-button":{color:e.palette.mode==="dark"?"#fff !important":"#000 !important",fontSize:"20px !important"},".mapboxgl-popup-content":{backgroundColor:"transparent!important",borderRadius:"0px !important",boxShadow:"none!important",padding:"0px 0px!important",width:"fit-content!important"},".mapboxgl-popup-tip":{borderTopColor:`${e.palette.mode==="dark"?"#1e1e1e":"#ffffff"} !important`}}),fe=e=>Number.isFinite(e.lng)&&Number.isFinite(e.lat),pe=e=>w.isString(e)||w.isNumber(e)?String(e):JSON.stringify(e),Ie=e=>{if(!e)return[];const r=w.isArray(e)?e:e.type==="FeatureCollection"?e.features:[e],n=[];for(const a of r){const o=a.geometry;o.type==="Point"&&n.push(o.coordinates),o.type==="LineString"&&n.push(...o.coordinates),o.type==="Polygon"&&n.push(...o.coordinates[0])}return n},Fe=({markers:e=[],features:r,padding:n=50,duration:a=1e3,disableAnimation:o,fitBounds:l=!0,animationKey:s,openPopup:c})=>{const{current:g}=S.useMap(),y=d.useRef(""),h=d.useMemo(()=>e.filter(fe),[e]),v=d.useMemo(()=>Ie(r),[r]),b=d.useMemo(()=>{const R=[...h.map(x=>[x.lng,x.lat]),...v];return R.length===0?null:R.reduce((x,[N,A])=>x.extend([N,A]),new le.LngLatBounds)},[h,v]);return d.useEffect(()=>{if(c){y.current=s!==void 0?pe(s):"__initial_skip__";return}if(g&&l&&b){if(s!==void 0){const R=pe(s);if(y.current===R)return;y.current=R}else if(y.current==="__initial_skip__")return;if(!b.isEmpty()){if(h.length===1&&v.length===0){const R=h[0];g.flyTo({center:[R.lng,R.lat],duration:o?0:a,zoom:14});return}g.fitBounds([b.getSouthWest().toArray(),b.getNorthEast().toArray()],{duration:o?0:a,padding:n})}}},[g,b,n,a,o,s,l,h,v,c]),null},me=(e,r)=>{if(r<=0)throw new Error("chunkSize must be greater than 0");const n=[];for(let a=0;a<e.length;a+=r)n.push(e.slice(a,a+r));return n},Me=(e,r)=>[e,...r.map(n=>n.coords)].map(n=>n.join(",")).join(";"),Le=(e,r,n)=>{const a=r.map((s,c)=>({distance:s,index:c})).slice(1).filter(({distance:s})=>s!=null);if(a.length===0)return null;const o=a.reduce((s,c)=>c.distance<s.distance?c:s),l=e[o.index-1];return!l||n&&o.distance>n?null:{distance:o.distance,id:l.id,point:l.coords}};function ge(e,r,n){return async(a,o,l,s)=>{const c=Me(a,o),g=e(c,l),y=await r(g),h=y?n(y)?.[0]:void 0;return h?.length?Le(o,h,s):null}}const ye=async(e,r,n)=>{const a=Array.from({length:Math.ceil(e.length/r)},(l,s)=>e.slice(s*r,(s+1)*r));return(await Promise.all(a.map(async l=>Promise.all(l.map(n))))).flat()},De="https://api.mapbox.com",q=(e,r,n,a,o={})=>{const l=new URLSearchParams({access_token:"",...o});return`${De}/${e}/${r}/mapbox/${n}/${a}?${l.toString()}`},ee=async e=>{try{const r=await fetch(e);return r.ok?await r.json():(console.error(`Mapbox API error: ${r.status} ${r.statusText}`),null)}catch(r){return console.error("Mapbox network error:",r),null}},Ue=25,Ye=5,Be=ge((e,r)=>q("directions-matrix","v1",r,e,{annotations:"distance",sources:"0"}),ee,e=>e.distances),J={findNearest:async(e,r,n="driving",a)=>{if(r.length===0)return null;const o=me(r,Ue-1);return(await ye(o,Ye,s=>Be(e,s,n,a))).filter(s=>s!=null).sort((s,c)=>s.distance-c.distance)[0]??null},getIsochrone:async(e,r="driving",n=[5,10,15])=>{const a=`${e[0]},${e[1]}`,o=q("isochrone","v1",r,a,{contours_minutes:n.join(","),polygons:"true"});return await ee(o)},getItinerary:async(e,r,n="driving")=>{const a=`${e.join(",")};${r.join(",")}`,o=q("directions","v5",n,a,{geometries:"geojson",overview:"full"}),l=await ee(o);if(!l?.routes?.length)return null;const s=l.routes[0];return{geometry:s.geometry,properties:{distance:s.distance,duration:s.duration},type:"Feature"}}},Ge=({origin:e,profile:r="driving",intervals:n=[5,10,15],onIsochroneLoaded:a})=>{const[o,l]=d.useState(null);return d.useEffect(()=>{let s=!1;if(!e||e.length!==2){l(null);return}return(async()=>{if(!J.getIsochrone){console.warn("⚠️ getIsochrone is not implemented for this provider.");return}const c=await J.getIsochrone(e,r,n);s||(l(c),a?.(c??null))})(),()=>{s=!0}},[e,r,n,a]),o?f.jsx(de,{features:o}):null},We=d.memo(Ge),Ve={cycling:"routed-bike",driving:"routed-car",walking:"routed-foot"},Je="https://routing.openstreetmap.de",he=(e,r,n,a)=>{const o=`${Je}/${Ve[r]}/${e}/v1/${r}/${n}`,l=a?`?${new URLSearchParams(a).toString()}`:"";return`${o}${l}`},Ee=async e=>{try{const r=await fetch(e);return r.ok?await r.json():(console.error("OSRM API error:",r.status,r.statusText),null)}catch(r){return console.error("Error fetching OSRM API:",r),null}},Xe=100,ze=5,Ze=ge((e,r)=>he("table",r,e,{annotations:"distance",sources:0}),Ee,e=>e.distances),_e={findNearest:async(e,r,n="driving",a)=>{if(r.length===0)return null;const o=me(r,Xe-1);return(await ye(o,ze,s=>Ze(e,s,n,a))).filter(s=>s!=null).sort((s,c)=>s.distance-c.distance)[0]??null},getItinerary:async(e,r,n="driving")=>{const a=`${e.join(",")};${r.join(",")}`,o=he("route",n,a,{geometries:"geojson",overview:"full"}),l=await Ee(o);if(!l?.routes?.length)return null;const s=l.routes[0];return{geometry:s.geometry,properties:{distance:s.distance,duration:s.duration},type:"Feature"}}},be=({profile:e,engine:r,to:n,from:a,itineraryLineStyle:o})=>{const[l,s]=d.useState(null);return d.useEffect(()=>{a&&n&&(async()=>{try{const c=r==="OSRM"?await _e.getItinerary(a,n,e):await J.getItinerary(a,n,e);c?s(c):(console.warn("No route found between the specified points."),s(null))}catch(c){console.error("Error fetching route:",c),s(null)}})()},[a,n,e,r]),l?f.jsx(S.Source,{type:"geojson",data:l,children:f.jsx(S.Layer,{type:"line",paint:{"line-color":o?.color??"#9c3333","line-opacity":o?.opacity??.8,"line-width":o?.width??4},layout:{"line-cap":"round","line-join":"round"}})}):null},He=({origin:e,maxDistanceMeters:r,destinations:n,onNearestFound:a,profile:o="driving",engine:l="OSRM"})=>{const[s,c]=d.useState(null),g=d.useRef(null);return d.useEffect(()=>{let y=!1;if(!e||e.length!==2||!n?.length){c(null);return}c(null);const h=n.map(v=>({coords:[v.lng,v.lat],id:v.id}));return(async()=>{const b=await(l==="OSRM"?_e.findNearest:J.findNearest)(e,h,o,r);!y&&b&&c(b)})(),()=>{y=!0}},[e,r,n,o,l]),d.useEffect(()=>{if(!s){a?.(null,null,0),g.current=null;return}if(r!=null&&s.distance>r){a?.(null,null,0),g.current=null;return}const y=g.current;(!y||y.id!==s.id||y.distance!==s.distance)&&(a?.(s.id,s.point,s.distance),g.current=s)},[s,a,r]),s?.point?(console.log("nearestResult",s),f.jsx(be,{from:e,to:s.point,profile:o,engine:l})):null},Qe=d.memo(He),te={satellite:"mapbox://styles/mapbox/satellite-streets-v12",street:{dark:"mapbox://styles/mapbox/dark-v11",light:"mapbox://styles/mapbox/streets-v12"}},Re=(e,r)=>{const n=r==="dark";switch(e){case"satellite":return te.satellite;default:return n?te.street.dark:te.street.light}},$e=({mapStyle:e,theme:r,baseMapView:n,doubleClickZoom:a,cooperativeGestures:o})=>({cooperativeGestures:o,doubleClickZoom:a,failIfMajorPerformanceCaveat:!1,style:e??Re(n,r)}),Ke=({containerStyle:e,square:r,loading:n,height:a=300,width:o="100%",center:l=[2.3522,48.8566],zoom:s=5,popupMaxWidth:c,openPopup:g,openPopupOnHover:y,markers:h=[],fitBounds:v=!0,fitBoundsPadding:b,fitBoundDuration:R,fitBoundsAnimationKey:x,disableAnimation:N,mapStyle:A,onMapClick:X,baseMapView:Y,cooperativeGestures:re=!0,doubleClickZoom:ne=!0,projection:z,theme:B,features:G,from:oe,to:W,profile:Z="driving",itineraryLineStyle:se,engine:O="OSRM",findNearestMarker:C,onNearestFound:ae,isochrone:k})=>{const I=j.useTheme(),H=d.useRef(null),[F,P]=d.useState(g??null),Q=d.useMemo(()=>{if(w.isArray(l))return{latitude:l[1],longitude:l[0],zoom:s}},[l,s]),t=d.useMemo(()=>A||Re(Y,B??I.palette.mode),[Y,A,B,I.palette.mode]),{style:i,cooperativeGestures:m,doubleClickZoom:E}=$e({baseMapView:Y,cooperativeGestures:re,doubleClickZoom:ne,mapStyle:t,theme:B??I.palette.mode}),M=(u,T)=>{!y&&T&&P(u)},L=(u,T)=>{y&&P(T?u:null)};d.useEffect(()=>{P(g??null)},[g]);const p=d.useMemo(()=>F?h?.find(u=>u.id===F)??null:null,[F,h]);return f.jsxs(j.Box,{"data-testid":"mapbox-container",sx:{height:a,position:"relative",width:o,...e},children:[f.jsx(j.GlobalStyles,{styles:Oe}),n&&f.jsx(j.Skeleton,{"data-testid":"skeleton-loader",width:o,height:a,variant:r?"rectangular":"rounded",sx:{inset:0,position:"absolute",zIndex:2}}),!n&&f.jsxs(S,{ref:H,cooperativeGestures:m,doubleClickZoom:E,mapStyle:i,projection:z,initialViewState:Q,style:{height:"100%",width:"100%"},mapboxAccessToken:void 0,onClick:u=>{const T=h.find($=>{const{lng:ot,lat:st}=u.lngLat,at=Math.abs(Number($.lng||null)-ot),lt=Math.abs(Number($.lat||null)-st);return at<.01&<<.01});X?.(u.lngLat.lng,u.lngLat.lat,T??null)},children:[h.filter(fe).map(u=>f.jsx(S.Marker,{longitude:u.lng,latitude:u.lat,anchor:"bottom",onClick:T=>{T.originalEvent.stopPropagation(),u.id&&M(u.id,!!u.Tooltip),X?.(u.lng,u.lat,u)},children:f.jsx(j.Box,{component:"div",onMouseEnter:()=>u.id&&L(u.id,!!u.Tooltip),onMouseLeave:()=>L(null),style:{cursor:u.Tooltip?"pointer":"default"},children:u.IconComponent?f.jsx(u.IconComponent,{...u.iconProps}):f.jsx(Ne,{color:u.color,variant:u.variant})})},u.id)),p?.Tooltip&&f.jsx(S.Popup,{longitude:w.isNumber(p.lng)?p.lng:0,latitude:w.isNumber(p.lat)?p.lat:0,anchor:"top",onClose:()=>P(null),maxWidth:c,closeOnClick:!0,closeOnMove:!1,children:f.jsx(j.Box,{component:"div",sx:{minHeight:60,minWidth:240},children:p.Tooltip})}),f.jsx(be,{from:oe,to:W,profile:Z,engine:O,itineraryLineStyle:se}),C&&f.jsx(Qe,{origin:C?.origin,destinations:C?.destinations,onNearestFound:ae,maxDistanceMeters:C?.maxDistanceMeters,engine:O,profile:Z}),k&&f.jsx(We,{origin:k.origin,profile:k.profile,onIsochroneLoaded:k.onIsochroneLoaded,intervals:k.intervals}),G&&f.jsx(de,{features:G}),v&&f.jsx(Fe,{markers:h,features:G,padding:b,duration:N?0:R,animationKey:x,openPopup:!!g})]},`${m}-${E}-${z}-${t}-${C?.maxDistanceMeters}`)]})},qe=d.memo(Ke),et=["OSRM","Mapbox"],tt=["driving","walking","cycling"],rt=(e,r)=>{const n="geometry"in r?r.geometry:r,[a,o]=e,l=s=>s.map(c=>c.reduce((g,[y,h],v,b)=>{const[R,x]=b[(v-1+b.length)%b.length];return h>o!=x>o&&a<(R-y)*(o-h)/(x-h)+y?!g:g},!1)).reduce((c,g,y)=>y===0?g:c&&!g,!1);return n.type==="Polygon"?l(n.coordinates):n.type==="MultiPolygon"?n.coordinates.some(s=>l(s)):!1},nt=(e,r)=>Number.isFinite(e)&&Number.isFinite(r)&&e>=-90&&e<=90&&r>=-180&&r<=180;_.DEFAULT_CENTER_LAT=46.8677,_.DEFAULT_CENTER_LNG=2.333,_.MapProvider=je,_.MapView=qe,_.engines=et,_.isPointInGeoJSON=rt,_.isValidLatLng=nt,_.profiles=tt,Object.defineProperty(_,Symbol.toStringTag,{value:"Module"})}));
|
|
23
|
+
<%s key={someKey} {...props} />`,m,E,L,E),q[E+m]=!0)}if(E=null,y!==void 0&&(n(y),E=""+y),s(c)&&(n(c.key),E=""+c.key),"key"in c){y={};for(var V in c)V!=="key"&&(y[V]=c[V])}else y=c;return E&&i(y,typeof r=="function"?r.displayName||r.name||"Unknown":r),g(r,E,y,o(),u,k)}function R(r){b(r)?r._store&&(r._store.validated=1):typeof r=="object"&&r!==null&&r.$$typeof===S&&(r._payload.status==="fulfilled"?b(r._payload.value)&&r._payload.value._store&&(r._payload.value._store.validated=1):r._store&&(r._store.validated=1))}function b(r){return typeof r=="object"&&r!==null&&r.$$typeof===x}var _=d,x=Symbol.for("react.transitional.element"),T=Symbol.for("react.portal"),O=Symbol.for("react.fragment"),Z=Symbol.for("react.strict_mode"),Y=Symbol.for("react.profiler"),oe=Symbol.for("react.consumer"),se=Symbol.for("react.context"),ae=Symbol.for("react.forward_ref"),B=Symbol.for("react.suspense"),G=Symbol.for("react.suspense_list"),j=Symbol.for("react.memo"),S=Symbol.for("react.lazy"),P=Symbol.for("react.activity"),W=Symbol.for("react.client.reference"),N=_.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,F=Object.prototype.hasOwnProperty,M=Array.isArray,I=console.createTask?console.createTask:function(){return null};_={react_stack_bottom_frame:function(r){return r()}};var H,Q={},K=_.react_stack_bottom_frame.bind(_,l)(),$=I(a(l)),q={};U.Fragment=O,U.jsx=function(r,c,y){var m=1e4>N.recentlyCreatedOwnerStacks++;return h(r,c,y,!1,m?Error("react-stack-top-frame"):K,m?I(a(r)):$)},U.jsxs=function(r,c,y){var m=1e4>N.recentlyCreatedOwnerStacks++;return h(r,c,y,!0,m?Error("react-stack-top-frame"):K,m?I(a(r)):$)}})()),U}var fe;function Se(){return fe||(fe=1,process.env.NODE_ENV==="production"?J.exports=xe():J.exports=Te()),J.exports}var p=Se();const ke=d.createContext({licenceMapbox:"",licenseMuiX:""}),je=({children:e,licenseMuiX:t,licenceMapbox:n})=>{d.useEffect(()=>{t&&Re.LicenseInfo.setLicenseKey(t)},[t]);const a=d.useMemo(()=>({licenceMapbox:n,licenseMuiX:t}),[t,n]);return n&&(ce.accessToken=n),p.jsx(ke.Provider,{value:a,children:e})},Ae=e=>e?.type==="LineString"||e?.type==="MultiLineString",we=e=>{let t;Array.isArray(e[0][0])?t=e.reduce((o,l)=>l.length>o.length?l:o):t=e;const n=Math.floor(t.length/2);return[t[n][0],t[n][1]]},Ce=({route:e,children:t})=>{if(!(e&&t))return null;const n=e.geometry;if(!Ae(n))return null;const a=n.coordinates,[o,l]=we(a);return p.jsx(A.Marker,{longitude:o,latitude:l,children:t})},Oe=e=>C.isArray(e)?{features:e,type:"FeatureCollection"}:e.type==="FeatureCollection"?e:{features:[e],type:"FeatureCollection"},z=({features:e,lineLabel:t,lineStyle:n})=>{if(!e)return null;const a=Oe(e),o=a.features.filter(s=>s.geometry.type==="Polygon"||s.geometry.type==="MultiPolygon"),l=a.features.filter(s=>s.geometry.type==="LineString"||s.geometry.type==="MultiLineString");return p.jsxs(p.Fragment,{children:[o.length>0&&p.jsx(A.Source,{id:"features-polygon",type:"geojson",data:{features:o,type:"FeatureCollection"},children:p.jsx(A.Layer,{id:"polygon-fill",type:"fill",paint:{"fill-color":["coalesce",["get","color"],"#4ADE80"],"fill-opacity":["coalesce",["get","opacity"],.4]}})}),l.length>0&&p.jsxs(p.Fragment,{children:[p.jsx(A.Source,{id:"features-line",type:"geojson",data:{features:l,type:"FeatureCollection"},children:p.jsx(A.Layer,{id:"line-stroke",type:"line",paint:{"line-color":n?.color??["coalesce",["get","color"],"#3B82F6"],"line-opacity":n?.opacity??["coalesce",["get","opacity"],.9],"line-width":n?.width??["coalesce",["get","width"],3]}})}),t&&l.map((s,i)=>p.jsx(Ce,{route:s,children:t},`label-${i}`))]})]})},Le="#000000",Pe="#FFFFFF",ee={default:"#009ba6",primary:"#3F83F8",secondary:"#9C27B0",success:"#4CAF50",warning:"#FF9800"},Ne=e=>e in ee,Fe=({color:e,variant:t})=>{const{palette:n}=w.useTheme(),a=n.mode==="dark"?Le:Pe,o=t&&Ne(t)&&ee[t]||e||(C.isString(t)?t:ee.default);return p.jsx(w.Box,{component:"div",style:{backgroundColor:a,border:`7px solid ${o}`,borderRadius:"50%",boxShadow:"0 0 4px rgba(0,0,0,0.3)",height:28,width:28}})},Me=e=>({".mapboxgl-popup-close-button":{color:e.palette.mode==="dark"?"#fff !important":"#000 !important",fontSize:"20px !important"},".mapboxgl-popup-content":{backgroundColor:"transparent!important",borderRadius:"0px !important",boxShadow:"none!important",padding:"0px 0px!important",width:"fit-content!important"},".mapboxgl-popup-tip":{borderTopColor:`${e.palette.mode==="dark"?"#1e1e1e":"#ffffff"} !important`}}),de=e=>Number.isFinite(e.lng)&&Number.isFinite(e.lat),pe=e=>C.isString(e)||C.isNumber(e)?String(e):JSON.stringify(e),Ie=e=>{if(!e)return[];const t=C.isArray(e)?e:e.type==="FeatureCollection"?e.features:[e],n=[];for(const a of t){const o=a.geometry;o.type==="Point"&&n.push(o.coordinates),o.type==="LineString"&&n.push(...o.coordinates),o.type==="Polygon"&&n.push(...o.coordinates[0])}return n},De=({markers:e=[],features:t,padding:n=50,duration:a=1e3,disableAnimation:o,fitBounds:l=!0,animationKey:s,openPopup:i})=>{const{current:f}=A.useMap(),g=d.useRef(""),h=d.useMemo(()=>e.filter(de),[e]),R=d.useMemo(()=>Ie(t),[t]),b=d.useMemo(()=>{const _=[...h.map(x=>[x.lng,x.lat]),...R];return _.length===0?null:_.reduce((x,[T,O])=>x.extend([T,O]),new ce.LngLatBounds)},[h,R]);return d.useEffect(()=>{if(i){g.current=s!==void 0?pe(s):"__initial_skip__";return}if(f&&l&&b){if(s!==void 0){const _=pe(s);if(g.current===_)return;g.current=_}else if(g.current==="__initial_skip__")return;if(!b.isEmpty()){if(h.length===1&&R.length===0){const _=h[0];f.flyTo({center:[_.lng,_.lat],duration:o?0:a,zoom:14});return}f.fitBounds([b.getSouthWest().toArray(),b.getNorthEast().toArray()],{duration:o?0:a,padding:n})}}},[f,b,n,a,o,s,l,h,R,i]),null},ge=(e,t)=>{if(t<=0)throw new Error("chunkSize must be greater than 0");const n=[];for(let a=0;a<e.length;a+=t)n.push(e.slice(a,a+t));return n},Ue=(e,t)=>[e,...t.map(n=>n.coords)].map(n=>n.join(",")).join(";"),Ye=(e,t,n)=>{const a=t.map((s,i)=>{if(i===0||s==null)return null;const f=e[i-1];return f?{distance:s,id:f.id,point:f.coords}:null}).filter(s=>s!==null);if(a.length===0)return{all:[],nearest:null};const o=a.sort((s,i)=>s.distance-i.distance),l=o[0];return n&&l.distance>n?{all:o,nearest:null}:{all:o,nearest:l}};function me(e,t,n){return async(a,o,l,s)=>{const i=Ue(a,o),f=e(i,l),g=await t(f),h=g?n(g)?.[0]:void 0;return h?.length?Ye(o,h,s):{all:[],nearest:null}}}const he=async(e,t,n)=>{const a=Array.from({length:Math.ceil(e.length/t)},(l,s)=>e.slice(s*t,(s+1)*t));return(await Promise.all(a.map(async l=>Promise.all(l.map(n))))).flat()},Be="https://api.mapbox.com",te=(e,t,n,a,o={})=>{const l=new URLSearchParams({access_token:"",...o});return`${Be}/${e}/${t}/mapbox/${n}/${a}?${l.toString()}`},re=async e=>{try{const t=await fetch(e);return t.ok?await t.json():(console.error(`Mapbox API error: ${t.status} ${t.statusText}`),null)}catch(t){return console.error("Mapbox network error:",t),null}},Ge=25,We=5,Ve=me((e,t)=>te("directions-matrix","v1",t,e,{annotations:"distance",sources:"0"}),re,e=>e.distances??void 0),X={findNearest:async(e,t,n="driving",a)=>{if(!t.length)return[];const o=ge(t,Ge-1);return(await he(o,We,s=>Ve(e,s,n,a))).flatMap(s=>s.all).sort((s,i)=>s.distance-i.distance)},getIsochrone:async(e,t="driving",n=[5,10,15])=>{const a=`${e[0]},${e[1]}`,o=te("isochrone","v1",t,a,{contours_minutes:n.join(","),polygons:"true"});return await re(o)},getItinerary:async(e,t,n="driving")=>{const a=`${e.join(",")};${t.join(",")}`,o=te("directions","v5",n,a,{geometries:"geojson",overview:"full"}),l=await re(o);if(!l?.routes?.length)return null;const s=l.routes[0];return{geometry:s.geometry,properties:{distance:s.distance,duration:s.duration},type:"Feature"}}},Je=({origin:e,profile:t="driving",intervals:n=[5,10,15],onIsochroneLoaded:a})=>{const[o,l]=d.useState(null);return d.useEffect(()=>{let s=!1;if(!e||e.length!==2){l(null);return}return(async()=>{if(!X.getIsochrone){console.warn("⚠️ getIsochrone is not implemented for this provider.");return}const i=await X.getIsochrone(e,t,n);s||(l(i),a?.(i??null))})(),()=>{s=!0}},[e,t,n,a]),o?p.jsx(z,{features:o}):null},ze=d.memo(Je),Xe={cycling:"routed-bike",driving:"routed-car",walking:"routed-foot"},Ze="https://routing.openstreetmap.de",ye=(e,t,n,a)=>{const o=`${Ze}/${Xe[t]}/${e}/v1/${t}/${n}`,l=a?`?${new URLSearchParams(a).toString()}`:"";return`${o}${l}`},Ee=async e=>{try{const t=await fetch(e);return t.ok?await t.json():(console.error("OSRM API error:",t.status,t.statusText),null)}catch(t){return console.error("Error fetching OSRM API:",t),null}},He=100,Qe=5,Ke=me((e,t)=>ye("table",t,e,{annotations:"distance",sources:0}),Ee,e=>e.distances??void 0),be={findNearest:async(e,t,n="driving",a)=>{if(!t.length)return[];const o=ge(t,He-1);return(await he(o,Qe,s=>Ke(e,s,n,a))).flatMap(s=>s.all).sort((s,i)=>s.distance-i.distance)},getItinerary:async(e,t,n="driving")=>{const a=`${e.join(",")};${t.join(",")}`,o=ye("route",n,a,{geometries:"geojson",overview:"full"}),l=await Ee(o);if(!l?.routes?.length)return null;const s=l.routes[0];return{geometry:s.geometry,properties:{distance:s.distance,duration:s.duration},type:"Feature"}}},_e=({from:e,to:t,profile:n,engine:a,itineraryLineStyle:o,initialRoute:l,onRouteComputed:s,itineraryLabel:i})=>{const[f,g]=d.useState(l??null);return d.useEffect(()=>{l&&(g(l),s?.(l))},[l,s]),d.useEffect(()=>{!(e&&t)||l||(async()=>{const R=await(a==="OSRM"?be:X).getItinerary(e,t,n);g(R??null),s?.(R??null)})()},[e,t,n,a,l,s]),f?p.jsx(z,{features:f,lineStyle:o,lineLabel:i}):null},$e=({origin:e,maxDistanceMeters:t,destinations:n,onNearestFound:a,initialNearestResults:o,itineraryLineStyle:l,profile:s="driving",engine:i="OSRM"})=>{const[f,g]=d.useState(o??[]),h=d.useRef(null);d.useEffect(()=>{o&&g(o)},[o]),d.useEffect(()=>{const b=new AbortController;if(o?.length)return;if(!e||e.length!==2||!n?.length){g([]);return}g([]);const _=n.map(T=>({coords:[T.lng,T.lat],id:T.id}));return(i==="OSRM"?be:X).findNearest(e,_,s,t).then(T=>g(T??[])).catch(()=>g([])),()=>b.abort()},[e,t,n,s,i,o?.length]),d.useEffect(()=>{const b=h.current;(!b||b.length!==f.length||b.some((x,T)=>x.id!==f[T]?.id||x.distance!==f[T]?.distance))&&(a?.(f),h.current=f)},[f,a]);const R=f[0];return R?R.routeFeature?p.jsx(z,{features:R.routeFeature}):p.jsx(_e,{from:e,to:R.point,profile:s,engine:i,itineraryLineStyle:l}):null},qe=d.memo($e),ne={satellite:"mapbox://styles/mapbox/satellite-streets-v12",street:{dark:"mapbox://styles/mapbox/dark-v11",light:"mapbox://styles/mapbox/streets-v12"}},ve=(e,t)=>{const n=t==="dark";switch(e){case"satellite":return ne.satellite;default:return n?ne.street.dark:ne.street.light}},et=({mapStyle:e,theme:t,baseMapView:n,doubleClickZoom:a,cooperativeGestures:o})=>({cooperativeGestures:o,doubleClickZoom:a,failIfMajorPerformanceCaveat:!1,style:e??ve(n,t)}),tt=({containerStyle:e,square:t,loading:n,height:a=300,width:o="100%",center:l=[2.3522,48.8566],zoom:s=5,popupMaxWidth:i,openPopup:f,openPopupOnHover:g,markers:h=[],fitBounds:R=!0,fitBoundsPadding:b,fitBoundDuration:_,fitBoundsAnimationKey:x,disableAnimation:T,mapStyle:O,onMapClick:Z,baseMapView:Y,cooperativeGestures:oe=!0,doubleClickZoom:se=!0,projection:ae,theme:B,features:G,itineraryParams:j,findNearestMarker:S,isochrone:P})=>{const W=w.useTheme(),N=d.useRef(null),[F,M]=d.useState(f??null),[I,H]=d.useState(!1),Q=d.useMemo(()=>{const[u=2.3522,k=48.8566]=C.isArray(l)?l:[];return{latitude:k,longitude:u,zoom:s}},[l,s]),K=d.useMemo(()=>O||ve(Y,B??W.palette.mode),[Y,O,B,W.palette.mode]),{style:$,cooperativeGestures:q,doubleClickZoom:r}=et({baseMapView:Y,cooperativeGestures:oe,doubleClickZoom:se,mapStyle:K,theme:B??W.palette.mode}),c=(u,k)=>{!g&&k&&M(u)},y=(u,k)=>{g&&M(k?u:null)};d.useEffect(()=>{M(f??null)},[f]);const m=d.useMemo(()=>F?h?.find(u=>u.id===F)??null:null,[F,h]);return p.jsxs(w.Box,{"data-testid":"mapbox-container",sx:{height:a,position:"relative",width:o,...e},children:[p.jsx(w.GlobalStyles,{styles:Me}),n&&p.jsx(w.Skeleton,{"data-testid":"skeleton-loader",width:o,height:a,variant:t?"rectangular":"rounded",sx:{inset:0,position:"absolute",zIndex:2}}),!n&&p.jsxs(A,{ref:N,cooperativeGestures:q,doubleClickZoom:r,mapStyle:$,projection:ae,onLoad:()=>{H(!0),N.current?.resize()},initialViewState:Q,style:{height:"100%",width:"100%"},mapboxAccessToken:void 0,onClick:u=>{const k=h.find(E=>{const{lng:L,lat:V}=u.lngLat,le=Math.abs(Number(E.lng??0)-L),lt=Math.abs(Number(E.lat??0)-V);return le<.01&<<.01});Z?.(u.lngLat.lng,u.lngLat.lat,k??null)},children:[I&&h.filter(de).map(u=>p.jsx(A.Marker,{longitude:u.lng,latitude:u.lat,anchor:"bottom",onClick:k=>{k.originalEvent.stopPropagation(),u.id&&c(u.id,!!u.Tooltip),Z?.(u.lng,u.lat,u)},children:p.jsx(w.Box,{component:"div",onMouseEnter:()=>u.id&&y(u.id,!!u.Tooltip),onMouseLeave:()=>y(null),style:{cursor:u.Tooltip?"pointer":"default"},children:u.IconComponent?p.jsx(u.IconComponent,{...u.iconProps}):p.jsx(Fe,{color:u.color,variant:u.variant})})},u.id)),I&&m?.Tooltip&&p.jsx(A.Popup,{longitude:C.isNumber(m.lng)?m.lng:0,latitude:C.isNumber(m.lat)?m.lat:0,anchor:"top",onClose:()=>M(null),maxWidth:i,closeOnClick:!0,closeOnMove:!1,children:p.jsx(w.Box,{component:"div",sx:{minHeight:60,minWidth:240},children:m.Tooltip})}),j&&p.jsx(_e,{from:j.from,to:j.to,profile:j.profile,engine:j.engine,itineraryLineStyle:j.itineraryLineStyle,initialRoute:j.initialRoute,onRouteComputed:j.onRouteComputed,itineraryLabel:j.itineraryLabel}),S&&p.jsx(qe,{origin:S.origin,destinations:S.destinations,onNearestFound:S.onNearestFound,maxDistanceMeters:S.maxDistanceMeters,engine:S.engine,profile:S.profile,initialNearestResults:S.initialNearestResults,itineraryLineStyle:S.itineraryLineStyle}),P&&p.jsx(ze,{origin:P.origin,profile:P.profile,onIsochroneLoaded:P.onIsochroneLoaded,intervals:P.intervals}),G&&p.jsx(z,{features:G}),R&&p.jsx(De,{markers:h,features:G,padding:b,duration:T?0:_,animationKey:x,openPopup:!!f})]})]})},rt=d.memo(tt),nt=["OSRM","Mapbox"],ot=["driving","walking","cycling"],st=(e,t)=>{const n="geometry"in t?t.geometry:t,[a,o]=e,l=s=>s.map(i=>i.reduce((f,[g,h],R,b)=>{const[_,x]=b[(R-1+b.length)%b.length];return h>o!=x>o&&a<(_-g)*(o-h)/(x-h)+g?!f:f},!1)).reduce((i,f,g)=>g===0?f:i&&!f,!1);return n.type==="Polygon"?l(n.coordinates):n.type==="MultiPolygon"?n.coordinates.some(s=>l(s)):!1},at=(e,t)=>Number.isFinite(e)&&Number.isFinite(t)&&e>=-90&&e<=90&&t>=-180&&t<=180;v.DEFAULT_CENTER_LAT=46.8677,v.DEFAULT_CENTER_LNG=2.333,v.MapProvider=je,v.MapView=rt,v.engines=nt,v.isPointInGeoJSON=st,v.isValidLatLng=at,v.profiles=ot,Object.defineProperty(v,Symbol.toStringTag,{value:"Module"})}));
|
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
import { Destination, NearestResult, RoutingProfile } from '../core/interface';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
* Automatically splits large destination lists into chunks (<= 25 points)
|
|
5
|
-
* and executes requests in limited parallel batches to avoid API throttling.
|
|
6
|
-
*
|
|
7
|
-
* @param from - The origin coordinate [longitude, latitude].
|
|
8
|
-
* @param destinations - List of destination coordinates with IDs.
|
|
9
|
-
* @param profile - Mapbox routing profile (driving, walking, cycling...).
|
|
10
|
-
* @param maxDistanceMeters - Optional distance limit in meters.
|
|
11
|
-
* @returns The nearest destination, or null if none found.
|
|
3
|
+
* Returns all destinations ordered by ascending distance using Mapbox Matrix API
|
|
12
4
|
*/
|
|
13
|
-
declare const findNearestDestination: (from: [number, number], destinations: Destination[], profile?: RoutingProfile, maxDistanceMeters?: number) => Promise<NearestResult
|
|
5
|
+
declare const findNearestDestination: (from: [number, number], destinations: Destination[], profile?: RoutingProfile, maxDistanceMeters?: number) => Promise<NearestResult[]>;
|
|
14
6
|
export default findNearestDestination;
|
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
import { Destination, NearestResult, RoutingProfile } from '../core/interface';
|
|
2
|
-
export declare const fetchNearestInChunk: (from: [number, number], chunk: Destination[], profile: RoutingProfile, maxDistanceMeters?: number) => Promise<
|
|
2
|
+
export declare const fetchNearestInChunk: (from: [number, number], chunk: Destination[], profile: RoutingProfile, maxDistanceMeters?: number) => Promise<import('../core/fetchNearestInChunkFactory.ts').ChunkDistancesResult>;
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
* Automatically splits large destination lists into smaller chunks
|
|
6
|
-
* to stay under the OSRM API limit and returns the closest destination.
|
|
7
|
-
*
|
|
8
|
-
* @param from - The source coordinate [longitude, latitude].
|
|
9
|
-
* @param destinations - The list of destination points to compare.
|
|
10
|
-
* @param profile - OSRM routing profile (e.g. 'driving', 'walking', 'cycling').
|
|
11
|
-
* @param maxDistanceMeters - Optional max distance filter (in meters).
|
|
12
|
-
* @returns The closest destination within max distance, or null if none found.
|
|
4
|
+
* Returns all destinations ordered by ascending distance.
|
|
13
5
|
*/
|
|
14
|
-
declare const findNearestDestination: (from: [number, number], destinations: Destination[], profile?: RoutingProfile, maxDistanceMeters?: number) => Promise<NearestResult
|
|
6
|
+
declare const findNearestDestination: (from: [number, number], destinations: Destination[], profile?: RoutingProfile, maxDistanceMeters?: number) => Promise<NearestResult[]>;
|
|
15
7
|
export default findNearestDestination;
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import { Destination, NearestResult, RoutingProfile } from './interface';
|
|
2
|
+
interface ChunkDistancesResult {
|
|
3
|
+
nearest: NearestResult | null;
|
|
4
|
+
all: NearestResult[];
|
|
5
|
+
}
|
|
2
6
|
/**
|
|
3
|
-
* Factory
|
|
7
|
+
* Factory returning a provider-specific fetchNearestInChunk function.
|
|
4
8
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* @param extractDistances - Function to extract the distances array from the response.
|
|
9
|
+
* It now returns:
|
|
10
|
+
* { nearest, all }
|
|
8
11
|
*/
|
|
9
|
-
export declare function createFetchNearestInChunk<TResponse>(buildUrl: (coords: string, profile: RoutingProfile) => string, fetchData: (url: string) => Promise<TResponse | null>, extractDistances: (data: TResponse) => number[][] | undefined): (from: [number, number], chunk: Destination[], profile: RoutingProfile, maxDistanceMeters?: number) => Promise<
|
|
12
|
+
export declare function createFetchNearestInChunk<TResponse>(buildUrl: (coords: string, profile: RoutingProfile) => string, fetchData: (url: string) => Promise<TResponse | null>, extractDistances: (data: TResponse) => number[][] | undefined): (from: [number, number], chunk: Destination[], profile: RoutingProfile, maxDistanceMeters?: number) => Promise<ChunkDistancesResult>;
|
|
13
|
+
export type { ChunkDistancesResult };
|
|
@@ -13,7 +13,7 @@ export interface NearestResult {
|
|
|
13
13
|
export type RouteFeature = Feature<LineString, GeoJsonProperties>;
|
|
14
14
|
export interface MapRoutingProvider {
|
|
15
15
|
getItinerary(from: [number, number], to: [number, number], profile?: string): Promise<RouteFeature | null>;
|
|
16
|
-
findNearest(from: [number, number], destinations: Destination[], profile?: RoutingProfile, maxDistanceMeters?: number): Promise<NearestResult
|
|
16
|
+
findNearest(from: [number, number], destinations: Destination[], profile?: RoutingProfile, maxDistanceMeters?: number): Promise<NearestResult[]>;
|
|
17
17
|
getIsochrone?(from: [number, number], profile?: RoutingProfile, intervals?: number[]): Promise<MapboxIsochroneResponse | null>;
|
|
18
18
|
}
|
|
19
19
|
export interface Destination {
|
|
@@ -1,203 +1,136 @@
|
|
|
1
1
|
import { SxProps } from '@tracktor/design-system';
|
|
2
|
-
import { Feature, FeatureCollection, Polygon } from 'geojson';
|
|
2
|
+
import { Feature, FeatureCollection, GeoJsonProperties, LineString, Polygon } from 'geojson';
|
|
3
3
|
import { LngLatLike } from 'mapbox-gl';
|
|
4
|
+
import { ReactNode } from 'react';
|
|
4
5
|
import { ProjectionSpecification as ReactMapProjection } from 'react-map-gl';
|
|
5
6
|
import { RoutingProfile } from '../services/core/interface.ts';
|
|
6
7
|
import { MarkerProps } from './MarkerProps';
|
|
8
|
+
export declare const engines: readonly ["OSRM", "Mapbox"];
|
|
9
|
+
export type Engine = (typeof engines)[number];
|
|
10
|
+
export declare const profiles: readonly ["driving", "walking", "cycling"];
|
|
11
|
+
export type Profile = (typeof profiles)[number];
|
|
12
|
+
export interface ItineraryLineStyle {
|
|
13
|
+
color: string;
|
|
14
|
+
width: number;
|
|
15
|
+
opacity: number;
|
|
16
|
+
}
|
|
7
17
|
export interface IsochroneProps {
|
|
18
|
+
/** Origin coordinates: [lng, lat] */
|
|
8
19
|
origin: [number, number];
|
|
20
|
+
/** Routing mode for isochrone calculation */
|
|
9
21
|
profile?: RoutingProfile;
|
|
22
|
+
/** Time ranges in minutes for each generated isochrone */
|
|
10
23
|
intervals?: number[];
|
|
24
|
+
/** Callback fired once isochrone data is retrieved */
|
|
11
25
|
onIsochroneLoaded?: (data: FeatureCollection<Polygon> | null) => void;
|
|
12
26
|
}
|
|
13
|
-
export interface
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
27
|
+
export interface ItineraryParams {
|
|
28
|
+
/** Start coordinate: [lng, lat] */
|
|
29
|
+
from?: [number, number];
|
|
30
|
+
/** End coordinate: [lng, lat] */
|
|
31
|
+
to?: [number, number];
|
|
32
|
+
/** Routing mode */
|
|
33
|
+
profile?: Profile;
|
|
34
|
+
/** Routing engine to use (OSRM or Mapbox) */
|
|
35
|
+
engine?: Engine;
|
|
36
|
+
/** Optional style override for the drawn itinerary line */
|
|
37
|
+
itineraryLineStyle?: Partial<ItineraryLineStyle>;
|
|
38
|
+
/** Precomputed GeoJSON route used instead of fetching dynamically */
|
|
39
|
+
initialRoute?: Feature<LineString, GeoJsonProperties> | null;
|
|
40
|
+
/** Callback fired when a route is computed or loaded */
|
|
41
|
+
onRouteComputed?: (route: Feature<LineString, GeoJsonProperties> | null) => void;
|
|
42
|
+
/** Optional label displayed along the route (ex: "12 min") */
|
|
43
|
+
itineraryLabel?: ReactNode;
|
|
44
|
+
}
|
|
45
|
+
export interface NearestResult {
|
|
46
|
+
id: number | string;
|
|
47
|
+
/** Destination coordinate: [lng, lat] */
|
|
48
|
+
point: [number, number];
|
|
49
|
+
/** Straight-line or route distance in meters */
|
|
50
|
+
distance: number;
|
|
51
|
+
/** Optional precomputed itinerary route for this result */
|
|
52
|
+
routeFeature?: Feature<LineString, GeoJsonProperties> | null;
|
|
17
53
|
}
|
|
18
|
-
export declare const engines: readonly ["OSRM", "Mapbox"];
|
|
19
|
-
export type Engine = (typeof engines)[number];
|
|
20
|
-
export declare const profiles: readonly ["driving", "walking", "cycling"];
|
|
21
|
-
export type Profile = (typeof profiles)[number];
|
|
22
54
|
export interface FindNearestMarkerParams {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
55
|
+
/** Origin coordinates: [lng, lat] */
|
|
56
|
+
origin: [number, number];
|
|
57
|
+
/** List of candidate destination markers */
|
|
58
|
+
destinations: {
|
|
59
|
+
id: string | number;
|
|
27
60
|
lat: number;
|
|
28
|
-
|
|
61
|
+
lng: number;
|
|
29
62
|
}[];
|
|
30
|
-
|
|
31
|
-
|
|
63
|
+
/** Maximum allowed search distance in meters */
|
|
64
|
+
maxDistanceMeters?: number;
|
|
65
|
+
/** Routing profile for distance calculation */
|
|
66
|
+
profile?: RoutingProfile;
|
|
67
|
+
/** Fired with all nearest results whenever recalculated */
|
|
68
|
+
onNearestFound?: (all: NearestResult[]) => void;
|
|
69
|
+
/** Precomputed list of nearest results to avoid fetching again */
|
|
70
|
+
initialNearestResults?: NearestResult[];
|
|
71
|
+
/** Routing engine to use */
|
|
72
|
+
engine?: Engine;
|
|
73
|
+
/** Style override applied to the auto-generated itinerary */
|
|
74
|
+
itineraryLineStyle?: Partial<ItineraryLineStyle>;
|
|
32
75
|
}
|
|
33
76
|
export interface MapViewProps {
|
|
34
|
-
/**
|
|
35
|
-
* Automatically adjusts the map's zoom and center
|
|
36
|
-
* to ensure all markers are visible within the viewport.
|
|
37
|
-
*/
|
|
77
|
+
/** Automatically fits map bounds to include all markers */
|
|
38
78
|
fitBounds?: boolean;
|
|
39
|
-
/**
|
|
40
|
-
* Additional padding (in pixels) around the bounds
|
|
41
|
-
* when using `fitBounds`.
|
|
42
|
-
*/
|
|
79
|
+
/** Padding used when applying fitBounds */
|
|
43
80
|
fitBoundsPadding?: number;
|
|
44
|
-
/**
|
|
45
|
-
* Coordinates for the initial center of the map.
|
|
46
|
-
* Format: [longitude, latitude].
|
|
47
|
-
*/
|
|
81
|
+
/** Initial map center: [lng, lat] */
|
|
48
82
|
center?: LngLatLike | number[];
|
|
49
|
-
/**
|
|
50
|
-
* Mapbox style URL or predefined style ID
|
|
51
|
-
* (e.g., "mapbox://styles/mapbox/streets-v11").
|
|
52
|
-
*/
|
|
83
|
+
/** Mapbox style URL or ID */
|
|
53
84
|
mapStyle?: string;
|
|
54
|
-
/**
|
|
55
|
-
* Initial zoom level of the map.
|
|
56
|
-
* A higher number means a closer zoom.
|
|
57
|
-
*/
|
|
85
|
+
/** Initial zoom level */
|
|
58
86
|
zoom?: number;
|
|
59
|
-
/**
|
|
60
|
-
* Maximum width of popups in pixels or any valid CSS unit.
|
|
61
|
-
*/
|
|
87
|
+
/** Max width of marker popups */
|
|
62
88
|
popupMaxWidth?: string;
|
|
63
|
-
/**
|
|
64
|
-
* Width of the map container.
|
|
65
|
-
* Can be a number (px) or any CSS unit (e.g. "100%").
|
|
66
|
-
*/
|
|
89
|
+
/** Map container width */
|
|
67
90
|
width?: number | string;
|
|
68
|
-
/**
|
|
69
|
-
* Height of the map container.
|
|
70
|
-
* Can be a number (px) or any CSS unit (e.g. "100vh").
|
|
71
|
-
*/
|
|
91
|
+
/** Map container height */
|
|
72
92
|
height?: number | string;
|
|
73
|
-
/**
|
|
74
|
-
* Indicates whether the map is currently in a loading state.
|
|
75
|
-
* Displays a skeleton overlay when true.
|
|
76
|
-
*/
|
|
93
|
+
/** Displays a loading skeleton on top of the map */
|
|
77
94
|
loading?: boolean;
|
|
78
|
-
/**
|
|
79
|
-
* URL of a custom image used as the default marker icon.
|
|
80
|
-
*/
|
|
95
|
+
/** Custom marker icon URL */
|
|
81
96
|
markerImageURL?: string;
|
|
82
|
-
/**
|
|
83
|
-
* Custom styles applied to the map container.
|
|
84
|
-
* Uses MUI's `SxProps` system.
|
|
85
|
-
*/
|
|
97
|
+
/** Custom styles for the map container */
|
|
86
98
|
containerStyle?: SxProps;
|
|
87
|
-
/**
|
|
88
|
-
* Disables the map's fitBounds animation.
|
|
89
|
-
*/
|
|
99
|
+
/** Disables animation when fitting bounds */
|
|
90
100
|
disableAnimation?: boolean;
|
|
91
|
-
/**
|
|
92
|
-
* Duration (in ms) of the fitBounds animation.
|
|
93
|
-
*/
|
|
101
|
+
/** Duration of fitBounds animation in ms */
|
|
94
102
|
fitBoundDuration?: number;
|
|
95
|
-
/**
|
|
96
|
-
* Optional key that can be updated to re-trigger the fitBounds animation.
|
|
97
|
-
*/
|
|
103
|
+
/** Changing this key retriggers fitBounds animation */
|
|
98
104
|
fitBoundsAnimationKey?: unknown;
|
|
99
|
-
/**
|
|
100
|
-
* Forces the map container to have a square shape.
|
|
101
|
-
*/
|
|
105
|
+
/** Forces a 1:1 ratio container size */
|
|
102
106
|
square?: boolean;
|
|
103
|
-
/**
|
|
104
|
-
* ID of the marker whose popup should be open when the map loads.
|
|
105
|
-
*/
|
|
107
|
+
/** ID of the marker whose popup should auto-open */
|
|
106
108
|
openPopup?: number | string;
|
|
107
|
-
/**
|
|
108
|
-
* Opens marker popups automatically when hovering over them.
|
|
109
|
-
*/
|
|
109
|
+
/** Opens popups on hover instead of click */
|
|
110
110
|
openPopupOnHover?: boolean;
|
|
111
|
-
/**
|
|
112
|
-
* Array of markers to display on the map.
|
|
113
|
-
*/
|
|
111
|
+
/** List of markers rendered on the map */
|
|
114
112
|
markers?: MarkerProps[];
|
|
115
113
|
/**
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
* and optionally the marker object if the click occurred on one.
|
|
114
|
+
* Triggered when clicking on the map or a marker.
|
|
115
|
+
* If a marker is clicked, the third argument contains the marker object.
|
|
119
116
|
*/
|
|
120
117
|
onMapClick?: (lng: number, lat: number, clickedMarker?: MarkerProps | null) => void;
|
|
121
|
-
/**
|
|
122
|
-
* The color theme of the map UI.
|
|
123
|
-
* @default "light"
|
|
124
|
-
*/
|
|
118
|
+
/** Map UI theme */
|
|
125
119
|
theme?: "dark" | "light";
|
|
126
|
-
/**
|
|
127
|
-
* Map projection type to use.
|
|
128
|
-
* @default "mercator"
|
|
129
|
-
*/
|
|
120
|
+
/** Map projection */
|
|
130
121
|
projection?: ReactMapProjection;
|
|
131
|
-
/**
|
|
132
|
-
* Base map view mode.
|
|
133
|
-
* @default "street"
|
|
134
|
-
*/
|
|
122
|
+
/** Base map layer */
|
|
135
123
|
baseMapView?: "satellite" | "street";
|
|
136
|
-
/**
|
|
137
|
-
* Enables or disables cooperative gestures
|
|
138
|
-
* (e.g. requiring two-finger pan on touch devices).
|
|
139
|
-
* @default true
|
|
140
|
-
*/
|
|
124
|
+
/** Enables touch-friendly gestures */
|
|
141
125
|
cooperativeGestures?: boolean;
|
|
142
|
-
/**
|
|
143
|
-
* Enables or disables double-click zoom.
|
|
144
|
-
* @default true
|
|
145
|
-
*/
|
|
126
|
+
/** Enables double-click zoom */
|
|
146
127
|
doubleClickZoom?: boolean;
|
|
147
|
-
/**
|
|
148
|
-
* One or multiple GeoJSON line features to display on the map.
|
|
149
|
-
*/
|
|
128
|
+
/** Single or multiple GeoJSON features displayed on the map */
|
|
150
129
|
features?: Feature | Feature[] | FeatureCollection;
|
|
151
|
-
/**
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
* If both `from` and `to` are provided, a route will be calculated.
|
|
155
|
-
*/
|
|
156
|
-
from?: [number, number];
|
|
157
|
-
/**
|
|
158
|
-
* Ending point of the route.
|
|
159
|
-
* Format: [longitude, latitude].
|
|
160
|
-
* If both `from` and `to` are provided, a route will be calculated.
|
|
161
|
-
*/
|
|
162
|
-
to?: [number, number];
|
|
163
|
-
/**
|
|
164
|
-
* Transportation profile used for route calculation.
|
|
165
|
-
* @default "driving"
|
|
166
|
-
*/
|
|
167
|
-
profile?: Profile;
|
|
168
|
-
/**
|
|
169
|
-
* Custom styles for the itinerary line displayed on the map.
|
|
170
|
-
* If not provided, default styles will be used.
|
|
171
|
-
* @default { color: "#3b82f6", width: 4, opacity: 0.8 }
|
|
172
|
-
*/
|
|
173
|
-
itineraryLineStyle?: Partial<ItineraryLineStyle>;
|
|
174
|
-
/**
|
|
175
|
-
* Engine to use for calculating routes.
|
|
176
|
-
* @default "OSRM"
|
|
177
|
-
* Options are:
|
|
178
|
-
* - "OSRM": Uses the public OSRM API for routing.
|
|
179
|
-
* - "Mapbox": Uses the Mapbox Directions API for routing.
|
|
180
|
-
*/
|
|
181
|
-
engine?: Engine;
|
|
182
|
-
/**
|
|
183
|
-
* Parameters for finding the nearest marker to a given point.
|
|
184
|
-
* If provided, the map will automatically center and zoom
|
|
185
|
-
* to include the nearest marker within the specified distance.
|
|
186
|
-
*/
|
|
130
|
+
/** Configuration for displaying a single itinerary */
|
|
131
|
+
itineraryParams?: ItineraryParams;
|
|
132
|
+
/** Automatically find & display nearest destination marker */
|
|
187
133
|
findNearestMarker?: FindNearestMarkerParams;
|
|
188
|
-
/**
|
|
189
|
-
* Callback triggered when the nearest marker is found.
|
|
190
|
-
* @param id
|
|
191
|
-
* @param coords
|
|
192
|
-
*/
|
|
193
|
-
onNearestFound?: (id: number | string | null, coords: [number, number] | null, distanceMeters: number) => void;
|
|
194
|
-
/**
|
|
195
|
-
* Parameters for displaying isochrones on the map.
|
|
196
|
-
* If provided, isochrones will be rendered based on the specified origin and intervals.
|
|
197
|
-
* @param origin
|
|
198
|
-
* @param profile
|
|
199
|
-
* @param intervals
|
|
200
|
-
* @param onIsochroneLoaded
|
|
201
|
-
*/
|
|
134
|
+
/** Configuration for displaying isochrones */
|
|
202
135
|
isochrone?: IsochroneProps;
|
|
203
136
|
}
|
package/package.json
CHANGED